home *** CD-ROM | disk | FTP | other *** search
- /* $Id: getactive.c,v 4.4 1991/09/09 20:18:23 sob Exp sob $
- *
- * $Log: getactive.c,v $
- * Revision 4.4 1991/09/09 20:18:23 sob
- * release 4.4
- *
- *
- *
- *
- */
- /* This software is Copyright 1991 by Stan Barber.
- *
- * Permission is hereby granted to copy, reproduce, redistribute or otherwise
- * use this software as long as: there is no monetary profit gained
- * specifically from the use or reproduction of this software, it is not
- * sold, rented, traded or otherwise marketed, and this copyright notice is
- * included prominently in any copy made.
- *
- * The author make no claims as to the fitness or correctness of this software
- * for any use whatsoever, and it is provided as is. Any use of this software
- * is at the user's own risk.
- */
- #include <stdio.h>
- #include "config.h"
- #include <signal.h>
- /* what to do with ansi prototypes -- '()' == ignore, 'x' == use */
- #ifndef ANSI
- # define ANSI(x) ()
- #endif
- #include "INTERN.h"
- #ifdef SERVER
- #include "server.h"
- #endif
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- char ser_line[NNTP_STRLEN];
- char command[32];
- int response;
- char *action;
- register char *server;
- register FILE *actfp;
-
- if (argc < 2 || argc > 3) {
- fprintf(stderr,
- "Usage: getactive [active|distributions|newsgroups] filename\n");
- exit(1);
- }
- if (argc == 2) action = "ACTIVE";
- else{
- action = argv[1];
- argc--;
- argv++;
- }
- if ((server = get_server_name(1)) == NULL)
- exit(1);
- response = server_init(server);
- if (response < 0) {
- fprintf(stderr,
- "getactive: Can't get %s file from server %s.\n",
- action, server);
- exit(1);
- }
-
- if (handle_server_response(response, server) < 0)
- exit(1);
-
- sprintf(command,"LIST %s",action);
- put_server(command);
- #ifdef HAVESIGHOLD
- sighold(SIGINT);
- #endif
- (void) get_server(ser_line, sizeof(ser_line));
- if (*ser_line != CHAR_OK) { /* and then see if that's ok */
- fprintf(stderr,
- "getactive: Can't get %s file from server.\n",action);
- fprintf(stderr, "Server said: %s\n", ser_line);
- exit(1);
- }
-
- actfp = fos2open(argv[1], "w"); /* and get ready */
- if (actfp == NULL) {
- close_server();
- perror(argv[1]);
- exit(1);
- }
-
- while (get_server(ser_line, sizeof(ser_line)) >= 0) { /* while */
- if (ser_line[0] == '.') /* there's another line */
- break; /* get it and write it to */
- if (actfp != NULL) { /* the temporary active file */
- fputs(ser_line, actfp);
- putc('\n', actfp);
- }
- }
-
- if (ferror(actfp)) {
- perror(argv[1]);
- exit(1);
- }
-
- if (fclose(actfp) == EOF) {
- perror(argv[1]);
- exit(1);
- }
-
- #ifdef HAVESIGHOLD
-
- exit(0);
- sigrelse(SIGINT);
- #endif
- close_server();
- exit(0);
- }
-