#!/usr/bin/perl -U

use strict;

my $_FOLDER=2;
my $_FILE=1;
my $_ERROR=-1;


sub Do {
    my $filename=$_[0];
    my $content='';

    if ($filename=~m/\.shtml$/ig) {

        print "$filename\n";

        my $msg=$filename;
        $msg=~s!/home/oc/*w*(/ml.*$)!$1!g;

        open(SOURCE,$filename) or die("can't open $filename");
        while (my $line=<SOURCE>) {
            $content.=$line;
        }
        close(SOURCE);

        my @line=split(/\n/,$content);
        my $line_cnt=0;
        foreach my $line (@line) {
            $line_cnt++;
#            print "line $line_cnt\n";
            my $list='-A-Z0-9_\.';
            while ($line=~m/([$list]+\@[$list]+\.[$list]+)/i) {
                my $email=$1;
                my $new_email=$email;
                $new_email=~s/\./ dot /g;
                $new_email=~s/\@/ at /g;
                my $new_email_link=$new_email;
                $new_email_link=~s/ /%20/g;

                $line=~s/href="*'*mailto:[^'^"^>^ ]+"*'*/href="\/cgi-bin\/post.cgi?cmd=new&to=$new_email_link&msg=$msg"/ig;
                $line=~s/$email/<font class=email>$new_email<\/font>/;
            }
        }
        
        $content=join("\n",@line);
        $content=~s/(\[<A HREF="threads\.s*html#[0-9]*">Thread Index<\/A>\])\n(<!--X-TopPNI-End-->)/$1\n<!--#include virtual="\/ssi\/ssi_msg.shtml" -->\n$2/is;
        if ($filename=~m/archives/) {
            $content=~s?<!--# *include virtual="/ssi/ssi_start_ml-archive.shtml" -->?<!--#include virtual="/ssi/ssi_start_ml-month.shtml" -->\n?i;
        }
        open(DEST,">$filename");
        print DEST $content;
        close(DEST);

    }

}

sub Rec_Do {
    my $filename=$_[0];
#    print "$filename\n";
    my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
      $atime,$mtime,$ctime,$blksize,$blocks)=stat($filename);

    Do($filename);

    utime ($atime,$mtime,$filename);
}



sub File_Type {
    my $mode=(stat($_[0]))[2];
    return $_ERROR unless ($mode);
    if (substr(sprintf("%04o", $mode),0,1) ne '1') {
        return $_FOLDER;
    } else {
        return $_FILE;
    }
}

sub List {
    my @files=();
    my @folders=();
    foreach (split(/ \//,join(' ',<$_[0]>))) {
        $_='/'.$_ unless($_=~m/^\//); 
        my $ft=File_Type($_);
        if ($ft eq $_FOLDER) {
            $_.='/' unless($_=~m/\/$/);
            push(@folders,$_);
        } elsif ($ft eq $_FILE) {
            push(@files,$_);
        }
    }
    return(\@folders,\@files);
}

sub Rec_Search {
    my $filename=$_[0];
    die "file not found" unless($filename);
    my $file_type=File_Type($filename);
    if ($file_type==$_ERROR) {
        die("invalid file/folder $filename");
    } else {
        my @list=();
        if ($file_type==$_FILE) {
            push(@list,$filename);
        } else {
            my $dir=$filename;
            $dir.='/' unless($dir=~m/\/$/);
            my ($folders,$files)=List("$dir*");
            push(@list,@{$folders},@{$files});
        }
        while (@list) {
            my $fh=pop(@list);
            $file_type=File_Type($fh);
            if ($file_type==$_FILE) {
                Rec_Do($fh);
            } else {
                my ($folders,$files)=List("$fh*");
                foreach (@{$files}) {
                    Rec_Do($_);
                }
                if (@{$folders}) {
                    push(@list,@{$folders});
                } else {
                    
                }
            }
        }
    }
}


Rec_Search($ARGV[0]);