#!/usr/athena/bin/perl

@tocats = ('new-httpd', 'webmaster', 'sipb', 'maintainers', 'apache', 'ssl-users', 'robots@webcrawler.com');
@fromcats = ('grayjames', 'kathygray', 'carrie', 'mkgray');

require 'chat2.pl';
$* = 1;
sub start {
    $msg = 0;
    &chat'open_proc('/mit/sipb/bin/pop');
    system("stty onlcr icrnl");
#	print("Ran pop\n");
    print &chat'expect(5, "pop:  ", '$`');
#	print("Connecting\n");
    &chat'print("c\n");
#	print("sent\n");
    print &chat'expect(5, "pop:  ", '$`');
#	print("\nReady to find out what's going on...\n");
    &chat'print("s\n");
    $status =  &chat'expect(5, "pop:  ", '$`');
#    print("Status: $status\n");
#    $status =  &chat'expect(5, "pop:  ", '$`');
#	$status =~ s/[\n\r]/\*/g;
    $status =~ /(\d+) messages/;
    $nmsg = $1;
#	print("I think I know what's going on...($status)\n");
    print("You have $nmsg messages.\n");
    return $nmsg;
}

$nm = &start;
MSG: for $msg (1..$nm){
    $mbod = &gresp("retr $msg");
    $from = $to = $cc = "";
    if($mbod =~ /^From: (.*)/){
	$from = $1;
    }
    if($mbod =~ /^To: (.*)/){
	$to = $1;
    }
    if($mbod =~ /^Cc: (.*)/){
	$cc = $1;
    }
    if($mbod =~ /^Subject: (.*)/){
	$subj = $1;
    }
    $from =~ s/[\n\r]//g;
    $to =~ s/[\n\r]//g;
    $cc =~ s/[\n\r]//g;
    $subj =~ s/[\n\r]//g;
    $from[$msg]=$from;
    $to[$msg]=$to;
    $cc[$msg]=$cc;
    foreach $tocat (@tocats){
	if($to=~/$tocat/i || $cc =~/$tocat/i){
	    $category{$tocat}++;
	    $subj{$tocat} .= $subj."\n";
	    next MSG;
	}
    }
    foreach $fromcat (@fromcats){
	if($from=~/$fromcat/i){
	    $category{$fromcat}++;
 	    $subj{$fromcat} .= $subj."\n";
	    next MSG;
	}
    }
    print("From: $from,\n\tSubject: $subj,\n\tTo: $to,\n\tCc: $cc\n");
}
print("\n");
foreach $c (sort {$category{$a} <=> $category{$b};} keys %category){
    print("$c:\t$category{$c}\n");
    print("\tSubjects:\n");
    %sseen = ();
    (@ss) = split("\n", $subj{$c});
	foreach $sb (@ss){
		$sb =~ s/^Re: //;
		print("\t\t$sb\n") unless $sseen{$sb};
		$sseen{$sb}=1;
	}
}


sub gresp {
	local($cmd) = @_;
#	print("Getting response from \"$cmd\"\n");
	&chat'print("$cmd\n");
	$resp = &chat'expect(4, "pop:  ", '$`');
#	print("Response of len ", length($resp), "\n");
	$resp;
	
}

sub help {
	print("<CR> for next message\n");
	print("\"d\" to delete last message\n");
	print("\"r\" to restart from msg 1\n");
	print("\"h\" for this message\n");
	print("\"q\" to quit\n");
}

sub mesg {
	$msg++;
	print("Getting message $msg\n");
	&more(&gresp("retr $msg"));
}

sub dele {
    print("Deleting $msg\n");
    &more(&gresp("dele $msg\n"));
    &chat'expect(4, "pop:  ", '$`');
}

sub restart {
	$msg=0;
	print("Message number has been reset\n");
}

sub rerun{
    &chat'print("q\n");
    &chat'close();
    &start;
}
sub prompt {
	local($in);
	print("\"pop!\"; ");
	$in = (<STDIN>);
	
	if($in eq "\n"){
		"mesg";
	}
	elsif($in eq "d\n"){
		"dele";
	}
	elsif($in eq "h\n"){
		"help";
	}
	elsif($in eq "r\n"){
		"restart";
	}
	elsif($in eq "q\n"){
		&chat'print("q\n");
		sleep(2);
		exit(0);
	}
	elsif($in eq "x\n"){
		"rerun";
	}
	elsif($in =~ /(\d+)/){
	    $msg = $1-1;
	    "mesg";
	}	  
	else {
		"help";
}
}
sub more {
	local($string) =@_;
#	print "String of length: ", length($string), "\n";
#	$string =~ s/\r/\*/g;
#	print "------------\n$string\n--------------\n";
#	return;

	if(fork()){
		wait;
	}
	else{
#		print STDOUT $string;
#		print("\n");
		open(MORE, "|more");
		print MORE $string;
		close(MORE);
		exit;
	}
}
