#!/usr/bin/perl

$inheaders=0;
$inbody=0;
$date="";
$from="";
%header=();
@headers=();
@body=();

if ($ARGV[0] eq "-v") {
    $verbose=1;
} else {
    $verbose=0;
}

while (<>) {
    chomp;
    if (/^<!-- MHonArc v2\.[0-9.]+ -->$/) {
	print(STDERR "//In Headers...\n") if ($verbose);
	$inheaders=1;
	next;
    }
    if (/^<!--X-Head-End-->$/) {
	print(STDERR "\\\\Out Of Headers...\n") if ($verbose);
	$inheaders=0;
	next;
    }
    if (/^<!--X-Body-of-Message-->$/) {
	print(STDERR "//In Body...\n") if ($verbose);
	$inbody=1;
	next;
    }
    if (/^<!--X-Body-of-Message-End-->$/) {
	print(STDERR "\\\\Out Of Body...\n") if ($verbose);
	$inbody=0;
	print "From $from $date\n";
	foreach $h (@headers) {
	    print $h;
	}
	#print "\n";
	foreach $b (@body) {
	    print $b;
	}
	# reset
	%header=();
	@headers=();
	@body=();
	next;
    }
    if ($inheaders && /^<!--X-([a-zA-Z-]+): (.*) -->$/) {
	print(STDERR "  $_\n") if ($verbose);
	$n=$1; $h=$2;
	$h =~ s/&#(\d+);/chr($1)/eg;
	$h =~ s/&gt;/>/g;
	$h =~ s/&lt;/</g;
	$h =~ s/&amp;/\&/g;
	if ($n eq "Reference") {
	    $n = "References";
	}
	if ($n =~ /(Message-Id|References)/i) {
	    $h =~ s/(\S+)/<$1>/g;
	}
	push(@headers,"$n: $h\n");
	$header{$n}=$h;
	if ($n eq "From") {
	    $h =~ s/\s*\(.*?\)\s*//g;
	    $h =~ s/^.*<([^<>]+?)>.*$/$1/g;
	    $from = $h;
	}
	if ($n eq "Date") {
	    $h =~ /^([A-Z][a-z][a-z]), ([0-9 ][0-9]) ([A-Z][a-z][a-z]) (\d+) (\d\d:\d\d:\d\d)/;
	    $date = "$1 $3 $2 $5 $4";
	}
	next;
    }
    if ($inbody) {
	print(STDERR "  $_\n") if ($verbose);
	s/<.*?>//g;
	s/&#(\d+);/chr($1)/eg;
	s/&gt;/>/g;
	s/&lt;/</g;
	s/&amp;/\&/g;
	push(@body,"$_\n");
	next;
    }
}
