#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
MODULE = FatConst PACKAGE = FatConst
#include "linux/msdos_fs.h"
I32
ATTR_RO()
CODE:
RETVAL = ATTR_RO;
OUTPUT:
RETVAL
####
I32
ATTR_HIDDEN()
CODE:
RETVAL = ATTR_HIDDEN;
OUTPUT:
RETVAL
I32
ATTR_SYS()
CODE:
RETVAL = ATTR_SYS;
OUTPUT:
RETVAL
I32
ATTR_VOLUME()
CODE:
RETVAL = ATTR_VOLUME;
OUTPUT:
RETVAL
I32
ATTR_DIR()
CODE:
RETVAL = ATTR_DIR;
OUTPUT:
RETVAL
I32
ATTR_ARCH()
CODE:
RETVAL = ATTR_ARCH;
OUTPUT:
RETVAL
####
int
FAT_IOCTL_GET_ATTRIBUTES()
CODE:
RETVAL = FAT_IOCTL_GET_ATTRIBUTES;
OUTPUT:
RETVAL
int
FAT_IOCTL_SET_ATTRIBUTES()
CODE:
RETVAL = FAT_IOCTL_SET_ATTRIBUTES;
OUTPUT:
RETVAL
# END
####
use warnings; use strict;
package FatConst;
use Exporter;
use DynaLoader;
use Fcntl;
our $VERSION = 1.00;
our @ISA = (Exporter::, DynaLoader::);
bootstrap FatConst::;
our @EXPORT = qw"
ATTR_RO ATTR_HIDDEN ATTR_SYS ATTR_VOLUME ATTR_DIR ATTR_ARCH
fat_get_attr fat_format_attr
";
our @EXPORT_OK = qw"
FAT_IOCTL_GET_ATTRIBUTES FAT_IOCTL_SET_ATTRIBUTES
";
sub fat_get_attr {
my($fname) = @_;
sysopen my $F, $fname, O_RDONLY() or return;
my $o = pack "x8";
ioctl $F, FAT_IOCTL_GET_ATTRIBUTES(), $o or return;
return unpack "L", $o;
}
sub fat_format_attr {
my($n) = @_;
my $o = "";
for my $i (0 .. 7) {
$o = ($n & (1 << $i) ? substr("RHSVDAXY", $i, 1) : " ") . $o;
}
$o;
}
1;
__END__
####
use warnings; use strict;
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => "FatConst",
VERSION_FROM => "FatConst.pm",
);
####
sudo -u oper perl -I./blib/arch -we 'use FatConst; my $d
= $ARGV[0]; opendir my $D, $d or die; while (my $b = readdir $D) { my $n = $d . "/" . $b; my $err = !defined(my $a = fat_get_attr($n)); printf "%8s %s\n", ($err ? "E" : fat_format_attr($a)), $n; }' /mnt/s0
####
D /mnt/s0/.
E /mnt/s0/..
A SHR /mnt/s0/IO.SYS
A SHR /mnt/s0/MSDOS.SYS
D /mnt/s0/TEMP
D /mnt/s0/AMBRUS
D /mnt/s0/DATA
D /mnt/s0/BC
D /mnt/s0/PATH
D /mnt/s0/DOS
D /mnt/s0/NC
D /mnt/s0/NU
D /mnt/s0/TP
D /mnt/s0/WINDOWS
A /mnt/s0/COMMAND.COM
A /mnt/s0/AUTOEXEC.BAT
A /mnt/s0/CONFIG.SYS
A /mnt/s0/CONFIG.BAK
A /mnt/s0/AUTOEXEC.BAK
A /mnt/s0/TREEINFO.NCD