mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 12:56:51 +03:00
201c30624e
* vfs/extfs/apt.in: Likewise. * vfs/extfs/debd.in: Likewise. * vfs/extfs/dpkg.in: Likewise. * vfs/extfs/deba.in: Clean up earlier fixes to quotation of parameters. * vfs/extfs/deb.in: Likewise.
125 lines
3.1 KiB
Plaintext
125 lines
3.1 KiB
Plaintext
#! @PERL@ -w
|
|
#
|
|
# External filesystem for mc, using mtools
|
|
# Written Ludek Brukner <lubr@barco.cz>, 1997
|
|
# Much improved by Tom Perkins <968794022@noid.net>, 2000
|
|
#
|
|
# WARNING - This software is ALPHA - Absolutely NO WARRANTY
|
|
#
|
|
|
|
# These mtools components must be in PATH for this to work
|
|
|
|
sub quote {
|
|
$_ = shift(@_);
|
|
s/([^\w\/.+-])/\\$1/g;
|
|
return($_);
|
|
}
|
|
|
|
$mmd = "mmd";
|
|
$mrd = "mrd";
|
|
$mdel = "mdel";
|
|
$mdir = "mdir -a";
|
|
$mcopy = "mcopy -noQ";
|
|
|
|
$0 =~ s|.*/||;
|
|
$qdisk = quote($0);
|
|
|
|
$ENV{MTOOLS_DATE_STRING} = "mm-dd-yyyy";
|
|
$ENV{MTOOLS_TWENTY_FOUR_HOUR_CLOCK} = "1";
|
|
|
|
SWITCH: for ( $ARGV[0] ) {
|
|
/list/ && do {
|
|
@dirs = get_dirs("");
|
|
while ($dir = shift(@dirs)) {
|
|
push @dirs, get_dirs("$dir/");
|
|
} exit 0; };
|
|
/mkdir/ && do {
|
|
shift; shift;
|
|
exit 1 if scalar(@ARGV) != 1;
|
|
$qname = quote($ARGV[0]);
|
|
system("$mmd $qdisk:/$qname >/dev/null");
|
|
exit 0; };
|
|
/rmdir/ && do {
|
|
shift; shift;
|
|
exit 1 if scalar(@ARGV) != 1;
|
|
$qname = quote($ARGV[0]);
|
|
system("$mrd $qdisk:/$qname >/dev/null");
|
|
exit 0; };
|
|
/rm/ && do {
|
|
shift; shift;
|
|
exit 1 if scalar(@ARGV) != 1;
|
|
$qname = quote($ARGV[0]);
|
|
system("$mdel $qdisk:/$qname >/dev/null");
|
|
exit 0; };
|
|
/copyout/ && do {
|
|
shift; shift;
|
|
exit 1 if scalar(@ARGV) != 2;
|
|
( $qsrc, $qdest ) = @ARGV;
|
|
$qsrc = quote($qsrc);
|
|
$qdest = quote($qdest);
|
|
system("$mcopy $qdisk:/$qsrc $qdest >/dev/null");
|
|
exit 0; };
|
|
/copyin/ && do {
|
|
shift; shift;
|
|
exit 1 if scalar(@ARGV) != 2;
|
|
( $qdest, $qsrc ) = @ARGV;
|
|
$qsrc = quote($qsrc);
|
|
$qdest = quote($qdest);
|
|
system("$mcopy $qsrc $qdisk:/$qdest >/dev/null");
|
|
exit 0; };
|
|
/.*/ && do { # an unfamiliar command
|
|
exit 1; };
|
|
}
|
|
|
|
sub get_dirs {
|
|
my ($path, $name, $size, $date, $time, $longname, @lst, @rv);
|
|
$path = shift(@_);
|
|
my $qpath = quote($path);
|
|
@rv = ();
|
|
|
|
open(FILE,"$mdir $qdisk:/$qpath |");
|
|
while ( <FILE> ) {
|
|
chomp();
|
|
/^ / && next; # ignore `non-file' lines
|
|
m{^Directory for $0:/}i && next; # ignore `non-file' lines
|
|
/^$/ && next; # ignore empty lines
|
|
/^\.\.?/ && next; # ignore `.' and `..'
|
|
|
|
$name = substr($_,0,12);
|
|
$name =~ s/^([^ ]*) +([^ ]+)[ \t]*$/$1.$2/;
|
|
$name =~ s/[ .]+$//;
|
|
|
|
$_ = substr($_,12);
|
|
s/^[ ]+//;
|
|
|
|
($size,$date,$time,$longname) = split(/[ \t]+/, $_, 4);
|
|
|
|
defined $time || next;
|
|
|
|
# process "am" and "pm". Should not be needed if
|
|
# MTOOLS_TWENTY_FOUR_HOUR_CLOCK is respected.
|
|
@lst = split(/([:ap])/, $time);
|
|
$lst[0] += 12 if (defined $lst[3] && $lst[3] eq "p");
|
|
|
|
$time = sprintf("%02d:%02d", $lst[0], $lst[2]);
|
|
@lst = split(/-/, $date);
|
|
$lst[2] %= 100 if ($lst[2] > 100);
|
|
$date = sprintf ("%02d-%02d-%02d", @lst);
|
|
|
|
$name = $path . lc(($longname) ? $longname : $name);
|
|
|
|
if ($size =~ /DIR/) {
|
|
printf("drwxr-xr-x 1 %-8d %-8d %8d %s %s %s\n",
|
|
0, 0, 0, $date, $time, $name);
|
|
push @rv, $name;
|
|
} else {
|
|
printf("-rw-r--r-- 1 %-8d %-8d %8d %s %s %s\n",
|
|
0, 0, $size, $date, $time, $name);
|
|
}
|
|
}
|
|
close(FILE);
|
|
return @rv;
|
|
}
|
|
|
|
1;
|