|
|
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.