#!/usr/local/bin/perl

# 
# deldupmail: メールフォルダ内の重複メールを削除する．
# 
#     [1997/09/25] OSHIRO Naoki.
#     [1997/12/23] OSHIRO Naoki.
#     ・From 行直前の空行も考慮するようにした．
# 
#     $Log:$
#

$stack="";
$pout=0;
$num=0;
$dup_num=0;
$header=1;
while (<>) {
    if ($header==1) {
	if (/^From .+/) {
	    $pout=0;
	    #print STDERR "$num\r";
	    $num++;
	    $header=2;
	} else {
	    $header=0;
	}
    }
    $header=1 if ($header==0 && /^$/);
    $header=0 if ($header==2 && /^$/);
    if ($header==2 && /^Message-I[dD]: /) { 
        # Message-Id のパターンマッチに i を指定すると遅くなる
	$mes_id=$';
	$header=0;
	if ($mes_id{$mes_id}++==0) {
	    print "$stack";
	    $pout=1;
	} else {
	    print STDERR "$num: duplicate[$ARGV:$dup_num::$mes_id{$mes_id}]: $mes_id";
	    $dup_num++;
	    $pout=0;
	}
	$stack=""; # この行がないと処理がめちゃめちゃ重くなる
    }
    if ($pout==0) {
	$stack.=$_ if ($header!=0);
    } else {
	print;
    }
}
print $stack if $pout==1;
