#!/afs/athena/contrib/perl/perl

require '/mit/mkgray/perl/chat2.pl';


sub listen {
        local($secs) = @_;
        local($return,$tmp) = "";
        while (length($tmp = &chat'expect($secs, '(.|\n)+', '$&'))) {
                print $tmp if $trace;
                $return .= $tmp;
        }
        $return;
}


#  ---Main---
$ratest=5;
if($#ARGV == -1){
	&usage;
}

while(!$filereq)
{
    if(($x=shift(@ARGV)) eq "-q")
    {
	$quiet = 1;
    }
    else
    {
	if($x){
	    $site = $x;
	    $filereq = shift(@ARGV);
	}
	else
	{
	    &usage;
	}
    }
}


print("Ftp to retrieve file $site:$filereq\n") if (!$quiet);
$ftpcon = &chat'open_proc("ftp -i $site");
		      
while(!/ftp[^ ]/){
    $_ = &listen(5);
	if(/unknown/){
		print(STDERR "Unknown host!\n");
		&chat'print("quit\n");
		print(STDERR "Try again.  :-p\n");
		exit(1);
	}

    if(/Name(.)+:/){
	&chat'print("anonymous\n");
        $_ =&listen(5);
}
if(/Password/){
	&chat'print("$ENV{'USER'}@athena.mit.edu\n");
	$_ =&listen(5);
    }
}
@dircomps = split(/\//, $filereq);
$file = pop(@dircomps);
		      $file =~s/xxx/\*/g;
$path = join("/", @dircomps);
&chat'print("cd $path\n");
if(&listen(5)=~/No such/){ &bad_file; }
&chat'print("mget $file\n");
if(($_=&listen(5))=~/No such/){ &bad_file; }
if(/not a plain/){ &bad_file; }
print("Retrieving file... $file\n") if (!$quiet);
while(!/ftp>/){
    if(/\([1-9].* bytes\)/)
    {
    $size = $&;
    if($size=~/[1-9].*/)
{
    $num = int($&);
    $timemin = int($num/600000);
    $timemax = int(10*$timemin);
    $about = $timemax/$ratest;
}
    if($about != 0)
{
         print("File size: $size [$timemin-$timemax]$about minutes\n") if (!$quiet);
}
else
{
    print("File size: Very short.\n") if (!$quiet);
}
    } 
    $_ = &listen(5);
}
print("\nFile transfer complete.\n") if (!$quiet);
&chat'print("quit\n");

sub bad_file {
    print(STDERR "No such file or directory!!!\n");
    print(STDERR "Try again :-p\n");
    &chat'print("quit\n");
    exit(1);
}

sub usage {
	print(STDERR "Usage:\n");
	print(STDERR "$0 [-q] site_name complete_path_name\n");
	exit(0);
}
