1: #define MAINLINE
   2: #include "parms.h"
   3: #include "structs.h"
   4: #include "newsgate.h"
   5: 
   6: #ifdef  RCSIDENT
   7: static char rcsid[] = "$Header: newsoutput.c,v 1.7.0.1 85/03/22 10:54:22 notes Rel $";
   8: #endif	RCSIDENT
   9: 
  10: 
  11: /*
  12:  *	newsoutput - place the specified notesfiles out to the
  13:  *	news susbsystem.
  14:  *
  15:  *	Original Coding:	Ray Essick	April 1982
  16:  *	Modified to better handle multiple system gateing
  17:  *				Ray Essick	September 1982
  18:  */
  19: 
  20: static char *whichsys;                  /* who dumping for */
  21: static int  verbosity = 0;              /* quiet */
  22: static int  backward = 0;               /* do old format */
  23: char    rnewscmd[CMDLEN] = DFLTRNEWS;           /* how to rnews */
  24: int     sendclass = 0;                  /* classes to send */
  25: int     usetime = NORMSEQ;              /* user supplied */
  26: int     gatesyscount = 0;               /* actives slots in */
  27: char   *gatesysnames[GATEMAX];              /* list of names */
  28: 
  29: newsone (nfname)
  30: char   *nfname;
  31: {
  32:     if (verbosity)
  33:     {
  34:     printf ("\t%s\n", nfname);
  35:     fflush (stdout);
  36:     }
  37:     return newsout (nfname, backward, usetime, verbosity);
  38: }
  39: 
  40: 
  41: main (argc, argv)
  42: char  **argv;
  43: {
  44:     int     i;
  45:     struct nflist_f *nfptr;
  46:     char   *outgoing;
  47:     struct when_f   ztime;
  48:     char    fmtdate[DATELEN];               /* formatted date */
  49:     int     aflag,
  50:             cflag,
  51:             sflag;
  52: 
  53:     startup (argc, argv);               /* common init */
  54: 
  55:     if (argc == 1)
  56:     {
  57:     printf ("Usage: %s [-ssitename | -a] [-v] [-b] [-f file] topic1 [topic2 ...]\n", argv[0]);
  58:     exit (BAD);
  59:     }
  60: 
  61:     if (globuid != Notesuid)
  62:     {
  63:     printf ("Sorry, only notes 'owner' can send notes to news\n");
  64:     exit (BAD);
  65:     }
  66: 
  67:     whichsys = System;                  /* defaults to local */
  68:     aflag = cflag = sflag = 0;              /* none done */
  69:     gatesyscount = 0;                   /* none there */
  70:     verbosity = 0;                  /* no messages */
  71:     backward = 0;                   /* just new format */
  72:     usetime = NORMSEQ;                  /* non-seq time */
  73:     strcpy (rnewscmd, DFLTRNEWS);           /* default rnews */
  74:     getnet (RNEWSNAME, &outgoing, NULL, NULL);      /* how to get there */
  75:     if (outgoing != (char *) NULL)          /* specified? */
  76:     strcpy (rnewscmd, outgoing);            /* load it */
  77: 
  78:     for (i = 1; i < argc; i++)
  79:     {
  80:     if (argv[i][0] == '-')
  81:         switch (argv[i][1])
  82:         {
  83: 
  84:         case 's':               /* gateway for */
  85:             sflag = 1;
  86:             if (argv[i][2] != '\0')     /* -ssite */
  87:             {
  88:             whichsys = &argv[i][2];
  89:             }
  90:             else
  91:             {                   /* -s sitename */
  92:             if (++i == argc)        /* no sitename */
  93:             {
  94:                 fprintf (stderr, "-s must be followed by a sitename\n");
  95:                 exit (BAD);
  96:             }
  97:             whichsys = argv[i];     /* mark site */
  98:             }
  99:             gatesyscount = 1;           /* fill in table */
 100:             gatesysnames[0] = whichsys;
 101:             break;
 102: 
 103:         case 'a':               /* all non-local */
 104:             sendclass |= NEWS_ALLSEND;
 105:             aflag = 1;
 106:             whichsys = NEWSSYS;         /* it's sequencer */
 107:             break;
 108: 
 109:         case 'c':               /* file of systems */
 110:             cflag = 1;
 111:             whichsys = NEWSSYS;         /* use the global seq */
 112:             if (++i == argc)
 113:             {
 114:             printf ("%s: -c option must be followed by filename\n", Invokedas);
 115:             exit (BAD);
 116:             }
 117:             loadgate (argv[i]);         /* load the table */
 118:             break;
 119: 
 120:         case 'v':               /* messages per group */
 121:             verbosity++;
 122:             break;
 123: 
 124:         case 'f':               /* process a file */
 125:             if (++i == argc)            /* no filename */
 126:             {
 127:             fprintf (stderr, "-f must be followed by a filename\n");
 128:             exit (BAD);
 129:             }
 130:             readrc (argv[i]);           /* read the file */
 131:             break;
 132: 
 133:         case 'b':               /* include old headers */
 134:             backward++;
 135:             break;
 136: 
 137:         case 't':               /* explicit time */
 138:         case 'o':               /* compatibility */
 139:             if (++i == argc)
 140:             {
 141:             fprintf (stderr, "-t option requires following date\n");
 142:             exit (BAD);
 143:             }
 144:             switch (parsetime (argv[i], &ztime))
 145:             {
 146:             case 0:             /* ok */
 147:                 usetime = BASESEQ;      /* use this time */
 148:                 Basetime = ztime;       /* store it */
 149:                 sprdate (&ztime, fmtdate);  /* format */
 150:                 printf ("%s: Sending articles since %s\n",
 151:                     Invokedas, fmtdate);
 152:                 break;
 153:             case -1:            /* no good */
 154:                 fprintf (stderr, "%s: unable to parse time `%s'\n",
 155:                     Invokedas, argv[i]);
 156:                 exit (BAD);
 157:             case -2:            /* in future */
 158:                 fprintf (stderr, "%s: parsed date (%s) is in the future\n",
 159:                     Invokedas, argv[i]);
 160:                 exit (BAD);
 161:             }
 162:             break;
 163: 
 164: 
 165:         default:
 166:             printf ("Bad switch: %c\n", argv[i][1]);
 167:             exit (BAD);
 168:         }
 169:     else
 170:         expand (argv[i]);               /* put it in the list */
 171:     }
 172: 
 173: /*
 174:  *	now, run down the list and send each notesfile.
 175:  *	check to make sure some things are used consistently first.
 176:  */
 177: 
 178:     if (aflag + cflag + sflag > 1)
 179:     {                           /* -a and -s */
 180:     fprintf (stderr, "%s: -a, -c and -s mutually exclusive\n", Invokedas);
 181:     exit (BAD);
 182:     }
 183:     if (gatesyscount == 0 && !cflag)            /* default to local */
 184:     {
 185:     /*
 186: 	 * check against cflag allows empty -c files to "work"
 187: 	 */
 188:     gatesysnames[0] = whichsys;
 189:     gatesyscount = 1;               /* just us */
 190:     }
 191:     if (1)                      /* was verbosity */
 192:     {                           /* now always... */
 193:     printf ("%s: Sending news articles through command: %s\n",
 194:         Invokedas, rnewscmd);
 195:     if (sendclass & NEWS_ALLSEND)
 196:     {
 197:         printf ("Sending to News for any system\n");
 198:     }
 199:     else
 200:     {
 201:         int     col;                /* count columns */
 202: 
 203:         /*
 204: 	     * WE WANT TO SORT THE LIST AT THIS POINT
 205: 	     * so that the cansend() routine in newsout.c can do a binary
 206: 	     * search to make things faster.
 207: 	     */
 208:         printf ("Gateway for the following %d system(s):\n", gatesyscount);
 209:         for (i = 0, col = 0; i < gatesyscount; i++)
 210:         {
 211:         printf (" %16s", gatesysnames[i]);
 212:         if (++col % 4 == 0)
 213:             putc ('\n', stdout);        /* multi-column */
 214:         }
 215:     }
 216:     printf ("\n================\n");
 217:     }
 218:     fflush (stdout);                    /* make sure in order */
 219:     sprintf (Seqname, "%s:%s", NEWSSEQ, whichsys);
 220:     while ((nfptr = nextgroup ()) != (struct nflist_f *) NULL)
 221:     newsone (nfptr -> nf_name);
 222: 
 223:     exit (GOOD);                    /* all done */
 224: }
 225: 
 226: /*
 227:  *	loadgate(filename)
 228:  *
 229:  *	fill in the system table.
 230:  */
 231: 
 232: loadgate (filename)
 233: char   *filename;
 234: {
 235:     FILE * fptr;
 236:     char    onesystem[256];             /* system name */
 237: 
 238:     if ((fptr = fopen (filename, "r")) == (FILE *) NULL)
 239:     return (-1);                    /* bah humbug */
 240: 
 241:     while (fscanf (fptr, "%s", onesystem) == 1)
 242:     {
 243:     gatesysnames[gatesyscount++] = strsave (onesystem);
 244:     }
 245: 
 246:     fclose (onesystem);
 247:     return (0);
 248: }

Defined functions

loadgate defined in line 232; used 1 times
main defined in line 41; never used
newsone defined in line 29; used 1 times

Defined variables

backward defined in line 22; used 3 times
gatesyscount defined in line 26; used 7 times
gatesysnames defined in line 27; used 4 times
rcsid defined in line 7; never used
rnewscmd defined in line 23; used 6 times
sendclass defined in line 24; used 6 times
usetime defined in line 25; used 3 times
verbosity defined in line 21; used 4 times
whichsys defined in line 20; used 8 times

Defined macros

MAINLINE defined in line 1; never used
Last modified: 1985-10-30
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1328
Valid CSS Valid XHTML 1.0 Strict