#!/usr/local/bin/perl
# Mtools interfaces for Marche
# Use this program with Marche(arch.el)!
# (c )1994 by HIROSE Yuuji [yuuji@ae.keio.ac.jp]
# Last modified Thu Dec  1 03:21:38 1994 on VFR

($myname=0) =~ s,.*[/\\],,;
$usage = <<_EOU_;
$myname: Mtools interface for Marche
_EOU_
$namewidth = 12;

$sw = $ARGV[0]; shift;
$args = join(' ', @ARGV);
if ($sw eq "l") {
    &mdir;
} elsif ($sw eq "a") {
    &mwrite;
} elsif ($sw eq "p") {
    &mtype;
} elsif ($sw eq "x") {
    &mread;
} elsif ($sw eq "u") {
    &mwrite;
} elsif ($sw eq "d") {
    &mdel;
}

sub expand_dirs {
    local(@words);
    @words = split(' ', @_[0..$#_]);
    if ($words[0] =~ ":") {
        for ($i=1; $i<=$#words; $i++) {
            $words[$i] = "$words[0]/$words[$i]";
        }
        shift(@words);
    }
    return join(' ', @words);
}

sub expand_dirs2 {
    local(@words);
    @words = split(' ', @_[0..$#_]);
    if ($words[0] =~ ":") {
        for ($i=1; $i<$#words; $i++) { # leave last argument
            $words[$i] = "$words[0]/$words[$i]";
        }
        shift(@words);
    }
    return join(' ', @words);
}

sub mdir {
    local($name, $base, $ext, $newname, $other);
    open(MDIR, "mdir $args|");
    while(<MDIR>) {
        if (1..2) {
            print;
        } elsif (3..3) {
            print "NAME                 SIZE       DATE    TIME\n";
            print "-------------------------------------------------\n";
        } elsif (/^ +\d+ File\(s\)/) {
            print "-------------------------------------------------\n";
            print;
        } else {
            $name = substr($_, 0, $namewidth);
            $other = substr($_, $namewidth);
            ($base, $ext) = split(' ', $name);
            if ($ext) {
                $newname = "\L$base.$ext\E";
            } else {
                $newname = "\L$base\E";
            }
            printf("%-12s %s", $newname, $other);
        }
    }
    close MDIR;
}

sub mtype {
# assume 2args.
    local(@words);
    @words = split(' ', $args);
    $args = join('/', @words);
    open(MTYPE, "mtype $args|");
    while (<MTYPE>) {
        print;
    }
    close MTYPE;
}

sub mread {
    local($opts) = &expand_dirs2($args);
    open(MREAD, "mread -mn $opts|");
    while(<MREAD>) {print;}     # print result
}

sub mwrite {
# assume 2args.
    local(@words);
    @words = split(' ', $args);
    $args = join(' ', reverse(@words));
    #print "mwrite -mn $args\n";
    open(MWRITE, "mwrite -mn $args");
    while(<MWRITE>) {print;}    # print result
}

sub mdel {
    local($opts) = &expand_dirs($args);
    open(MDEL, "mdel $opts|");
    while(<MDEL>) {print;}     # print result
}
