#/usr/local/bin/perl

#----------------------------------------------------------------------
# variables you should change:

$whois_server = "umn.edu";   
$whois_port   = 43;

#----------------------------------------------------------------------

sub whois_main {
    local($_) = @_;
    
    if (/^$/) {
	&Greply("0Search Instructions\thelp\t$whois_server\t$whois_port");
	&Greply("7Query Whois server $whois_server\t$Ggw $whois_server\t$Ghost\t$Gport");
	&Greply(".");
	exit(0);
    }
    
    ($whois_server, $query) = split('\t');
    
    &GopenServer($whois_server,$whois_port);
    &Gsend($query);
    
    while(<GSERVER>) {
	s/\n//;
	s/\r//;
        push(@lines,$_);
    }
    
    #
    # Always return the output of the whois search first
    #
    
    &Greply("0Raw search results\t$query\t$whois_server\t$whois_port");
    
    
    #
    # Test for some common formats
    #
    
    #
    # CSO gateway whois type servers
    #
    
    foreach (@lines) {
	if (/\s+name:\s+(.*)/ ||
	    /\s+person:\s+(.*)/) {
	    $newquery = $1;
	    $newquery =~ s/,//g; #remove commas
	    $newquery =~ s/\s+[A-z]$//; #remove trailing middle initial
	    &Greply("0$1\t$newquery\t$whois_server\t$whois_port");
	}
    }
    
    #    
    # nic.ddn.mil type whois servers
    #
    
    foreach (@lines) {
	if (/(.*)\((.*)\)\t(.*)$/) {
	    &Greply("0$1\t!$2\t$whois_server\t$whois_port");
	}
    }
    
    #
    # format used by stanford.edu
    #    
    if ($lines[$#lines] =~ /^\(returned/) {
	foreach (@lines) {
	    if (/(.*)<(.*)>.*\s+(.*)$/) {
		$text=$1; $handle=$2; $rest = $3;
		$text =~ s/\s+$//;
		$rest =~ s/\s+/ /g;
		&Greply("0$text ($rest)\t$handle\t$whois_server\t$whois_port");
	    }
        }
    }
    
    #
    # format used by X.500 gateways.
    #
    if ($lines[0] =~ m/[0-9]+ matches found/) {
        foreach (@lines) {
	    if (/^\s+[0-9]+\.(.*)\s+   (.*)$/) {
                $newname = $1;
                $newname =~ s/^\s+//;
		$newname =~ s/\s+$//;
		&Greply("0$newname ($2)\t$newname\t$whois_server\twhois_port");
	    }
        }
    }
    
    #
    # Format used by sunysb.edu, software unknown.
    #
    if ($lines[0] =~ /^Connection received/) {
	foreach (@lines) {
	    if (/^(.*)MailName:/) {
		&Greply("0$1\t$1\t$whois_server\twhois_port");
	    }
        }
    }
    
    #
    # format used by horton: username@host  Name  Date
    #
    
    foreach (@lines) {
        if (/([\S]+@[\S]+).*([A-z][A-z][A-z] [A-z][A-z][A-z]\d\d \d\d\d\d)[\s]+$/) {
	    #Not implemented yet.
        }
    }
    
    
    
    foreach (@lines) {
	if (/^\s+name:\s+(.*)/) {
	    &Greply("0$1\t$query\t$whois_server\t$whois_port");
	    &Greply(".");
	    exit(0);
	}
    }

    if ($lines[$#lines] eq 'NO MATCH') {
	&Greply("0No Match Was Found!\thelp\t$gopher_server\t$gopher_port");
    } elsif ($lines[$#lines] =~ /^\(returned/) {
	foreach (@lines) {
	    if (/(.*)<(.*)>.*\s+(.*)$/) {
		$text=$1; $handle=$2; $rest = $3;
		$text =~ s/\s+$//;
		$rest =~ s/\s+/ /g;
		&Greply("0$text ($rest)\t!$handle\t$whois_server\t$whois_port");
	    }
	}
    }
    
    &Greply(".");
    exit(0);
}




1; # for require
