/***************************************************************************/
/*									   */
/* ftpget.c - retrieve a remote file via ftp                               */
/* Copyright (C) 1996, 1997 Thomas Pfau, pfau@cnj.digex.net                */
/*	73 Catherine Street, South Bound Brook, NJ, 08880		   */
/*									   */
/* This program is free software; you can redistribute it and/or    	   */
/* modify it under the terms of the GNU General Public License		   */
/* as published by the Free Software Foundation; either version 2	   */
/* of the License, or (at your option) any later version.		   */
/*		   							   */
/* This program is distributed in the hope that it will be useful,	   */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of	   */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	   */
/* GNU General Public License for more details. 			   */
/*							   		   */
/* You should have received a copy of the GNU General Public License	   */
/* along with this progam; if not, write to the Free Software  		   */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA		   */
/* 02111-1307, USA.							   */
/*									   */
/***************************************************************************/

#if defined(__unix__)
#include <unistd.h>
#elif defined(_WIN32)
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "ftplib.h"

void usage(char *cmd)
{
    printf("%s <host> [-d] [-a] [-l <username>] [-p <password] [-r path]\n",cmd);
    exit(2);
}

int ftpget(char *host, char *user, char *pass, char *root, char mode)
{
    char fnm[256];

    if (!ftpOpen(host))
    {
	fprintf(stderr,"Unable to connect to node %s\n%s",host,ftplib_lastresp);
	return 0;
    }
    if (!ftpLogin(user,pass))
    {
	fprintf(stderr,"Login failure\n%s",ftplib_lastresp);
	return 0;
    }
    if (root)
	if (!ftpChdir(root))
	{
	    fprintf(stderr,"Change directory to %s failed\n%s",
		    root,ftplib_lastresp);
	    return 0;
	}
    while (gets(fnm) != NULL)
    {
	if (!ftpGet(fnm,fnm,mode))
	{
	fprintf(stderr,"Get of %s failed\n%s",fnm,ftplib_lastresp);
	}
	else
	{
	if (ftplib_debug > 1)
		fprintf(stderr,"File %s received\n",fnm);
	}
    }
    ftpQuit();
    return 1;
}

void main(int argc, char *argv[])
{
    char *host = NULL;
    char *user = NULL;
    char *pass = NULL;
    char *root = NULL;
    char mode = 'I';
    int i;
    for (i=1;i<argc;i++)
    {
	if (*argv[i] == '-')
	{
	    switch (argv[i][1])
	    {
	      case 'l':
		user = argv[++i];
		break;
	      case 'p':
		pass = argv[++i];
		break;
	      case 'd':
		ftplib_debug++;
		break;
	      case 'r':
		root = argv[++i];
		break;
	      case 'a':
		mode = 'A';
		break;
	      case 'i':
		mode = 'I';
		break;
	      default:
		usage(argv[0]);
	    }
	}
	else if (host == NULL)
	    host = argv[i];
	else
	    usage(argv[0]);
    }
    ftpInit();
    if (user == NULL)
    {
	user = "anonymous";
	if (pass == NULL)
	{
	    char *u,h[64];
	    u = getenv("USER");
	    if (gethostname(h,64) < 0)
	    {
		perror("gethostname");
		exit(2);
	    }
	    if ((u != NULL) && (h != NULL))
	    {
		static char xxx[64];
		sprintf(xxx,"%s@%s",u,h);
		pass = xxx;
	    }
	}
    }
    if ((host == NULL) || (user == NULL) || (pass == NULL))
	usage(argv[0]);

    if (!ftpget(host,user,pass,root,mode))
	exit(2);
    exit(0);
}


syntax highlighted by Code2HTML, v. 0.9.1