-foreach $folderlist (@folderlist) {
- if ($folderlist =~ m/<folder type="mh"/) {
- $folderlist =~ s/<folder type="mh" name="//;
- $folderlist =~ s/" path="[A-Z0-9]+">\n//ig;
- $folderlist =~ s/^ +//;
- $mailbox = $folderlist;
+###############################################################################
+
+open(FILTERRC, "<filterrc") or die("Can't find your old filter rules ('filterrc')\n");
+ while (<FILTERRC>) {
+ chomp();
+
+ my ($header_one,
+ $value_one,
+ $op,
+ $header_two,
+ $value_two,
+ $destination,
+ $mode_one,
+ $mode_two,
+ $action) = split(/\t/);
+
+ $value_one =~ s/\"/\\\"/g ;
+ $value_two =~ s/\"/\\\"/g ;
+ $action = $action eq "m" ? "move" : "delete";
+ $destination = $destination =~ m!^\#mh/! ?
+ $destination :
+ "#mh/$mailbox/$destination";
+
+ my ($predicate_one,
+ $predicate_two,
+ $match_type_one,
+ $match_type_two,
+ $new_filter);
+
+ ###########################################################################
+
+ if ($mode_one % 2 == 0) {
+ $predicate_one = "~";
+ }
+ else {
+ $predicate_one = "";
+ }
+
+ if ($mode_one <= 1) {
+ $match_type_one = "matchcase";
+ }
+ else {
+ $match_type_one = "regexpcase";
+ }
+
+ ###########################################################################
+
+ if ($mode_two % 2 == 0) {
+ $predicate_two = "~";
+ }
+ else {
+ $predicate_two = "";
+ }
+
+ if ($mode_two <= 1) {
+ $match_type_two = "matchcase";
+ }
+ else {
+ $match_type_two = "regexpcase";
+ }
+
+ ###########################################################################
+
+ if ($header_one eq "To" && $header_two eq "Cc" ||
+ $header_one eq "Cc" && $header_two eq "To" and
+ $value_one eq $value_two and
+ $mode_one eq $mode_two and
+ $op eq "|") {
+ if ($action eq "move") {
+ $new_filter = $predicate_one . qq(to_or_cc $match_type_one "$value_one" move "$destination"\n);
+ }
+ else {
+ $new_filter = $predicate_one . qq(to_or_cc $match_type_one "$value_one" delete\n);
+ }
+ }
+ else {
+ if ($header_one =~ m/$normal_headers/) {
+ $new_filter .= $predicate_one . lc($header_one) . qq( $match_type_one "$value_one");
+ }
+ else {
+ $new_filter .= $predicate_one . qq(header "$header_one" $match_type_one "$value_one");
+ }
+
+ if ($op ne " ") {
+ if ($header_two =~ m/$normal_headers/) {
+ $new_filter .= qq( $op ) . $predicate_two . lc($header_two) . qq( $match_type_two "$value_two");
+ }
+ else {
+ $new_filter .= qq( $op ) . $predicate_two . qq(header "$header_two" $match_type_two "$value_two");
+ }
+ }
+
+ if (defined($new_filter)) {
+ if ($action eq "move") {
+ $new_filter .= qq( move "$destination"\n);