#!perl
# [eichin:19910202.0233EST] suck in an RMAIL file, then print it back out
# in the order specified by a map file (produced by rmail-scan.perl)

$mapfile = $ARGV[0]; shift;

$mode = "babyl header";
$index = 1;
$rmailsep_left = "";
$rmailsep_right = "\n";
$rmailsep = "\n";

# first, read *all* of the messages in. Virtual Memory is your Friend.
@header=();
sub message_name {
  local($idx) = @_;
  "rmailmessage".$idx;
}

while (<>) {
  if ($mode eq "babyl header") {
    if($_ eq $rmailsep) {
      $mode = "message";
      next;
    }
    push(@header,$_);
  } elsif ($mode eq "message") {
    if($_ eq $rmailsep) {
      $index++;
      next;
    }
    eval 'push('.&message_name($index).',$_)';
  }
}

foreach (@header) { print; }
print $rmailsep_left;
open(MAP,"<".$mapfile);
while(<MAP>) {
  ($index) = /(\d+)/;
  if ($index eq "") { next; } # skip bogus lines
  eval '@var = @'.&message_name($index);
  print $rmailsep_right;
  foreach (@var) {
    print $_;
  }
  print $rmailsep_left;
}
