home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 35 Internet
/
35-Internet.zip
/
trn_12.zip
/
src
/
getactive.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-08
|
3KB
|
117 lines
/* $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);
}