|
|
1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.