#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