]> arthur.barton.de Git - netatalk.git/commitdiff
Rename asaddump to apple_dump
authorfranklahm <franklahm>
Mon, 4 Jan 2010 10:02:18 +0000 (10:02 +0000)
committerfranklahm <franklahm>
Mon, 4 Jan 2010 10:02:18 +0000 (10:02 +0000)
NEWS
configure.in
contrib/shell_utils/.cvsignore
contrib/shell_utils/Makefile.am
contrib/shell_utils/apple_dump.in [new file with mode: 0755]
contrib/shell_utils/asaddump.in [deleted file]

diff --git a/NEWS b/NEWS
index dac01f90be59bfd767806e632160a7d9ef2eaf40..5441053468672a8eaa50ab6b1f0dd2f4870b42ed 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -23,7 +23,7 @@ Changes in 2.1-beta1
        database can't be open.
 * NEW: support for Unicode characters in the range above U+010000 using
        internal surrogate pairs
-* NEW: asaddump: utility to dump AppleSingle and AppleDouble files
+* NEW: apple_dump: utility to dump AppleSingle and AppleDouble files
 * UPD: atalkd and papd are now disabled by default. AppleTalk is legacy.
 * UPD: slp advertisement is now disabled by default. server option -slp
        SRVLOC is legacy.
index 579125881543aaf1168e510bf67a779847293766..ef3b073498b1f3a50a25a4b994e444d867bea0b7 100644 (file)
@@ -1,4 +1,4 @@
-dnl $Id: configure.in,v 1.235 2009-12-23 15:53:15 franklahm Exp $
+dnl $Id: configure.in,v 1.236 2010-01-04 10:02:18 franklahm Exp $
 dnl configure.in for netatalk
 
 AC_INIT(etc/afpd/main.c)
@@ -1214,9 +1214,9 @@ AC_OUTPUT([Makefile
        contrib/shell_utils/Makefile
        contrib/shell_utils/afpd-mtab.pl
        contrib/shell_utils/apple_cp
+    contrib/shell_utils/apple_dump
        contrib/shell_utils/apple_mv
        contrib/shell_utils/apple_rm
-    contrib/shell_utils/asaddump
        contrib/shell_utils/asip-status.pl
        contrib/timelord/Makefile
        contrib/a2boot/Makefile
index 313b0b40af16fe11ce596620c7c014b90fa443c1..51b23a75ec778605f95b28488d742168e5aedb5b 100644 (file)
@@ -9,4 +9,4 @@ cleanappledouble.pl
 netatalkshorternamelinks.pl
 lp2pap.sh
 asip-status.pl
-asaddump
+apple_dump
index 71bf8752feb0f84ae6267838203857722ac27ffd..bb2f1496f10b47705e87f11d169f5343ca0ca203 100644 (file)
@@ -8,7 +8,7 @@ PERLSCRIPTS = \
        afpd-mtab.pl \
        apple_cp apple_mv apple_rm  \
        asip-status.pl \
-       asaddump
+       apple_dump
 
 SUFFIXES = .tmpl .
 
diff --git a/contrib/shell_utils/apple_dump.in b/contrib/shell_utils/apple_dump.in
new file mode 100755 (executable)
index 0000000..ffbcd8f
--- /dev/null
@@ -0,0 +1,634 @@
+#!@PERL@
+#
+# AppleSingle/AppleDouble dump
+#
+# (c) 2009 by HAT <hat@fa2.so-net.ne.jp>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+
+use File::Basename;
+use File::Spec;
+use bigint; # require perl >= 5.8
+
+# parse command line -----------------------------------------------
+
+$finderinfo = 0;              #  0: unknown   1: file   2: directory
+while ($arg = shift @ARGV)
+{
+    if  ($arg =~ /^(-h|-help|--help)$/ ) {
+        printf ("usage: %s [-a] FILE|DIR\n"     ,basename($0));
+        printf (" or:   %s -f FILE\n"           ,basename($0));
+        printf (" or:   %s -d FILE\n"           ,basename($0));
+        printf (" or:   %s -h|-help|--help\n"   ,basename($0));
+        printf ("Dump AppleSingle/AppleDouble format file.\n");
+        printf ("\n");
+        printf ("  -a (default)     Dump a AppleSingle/AppleDouble file for FILE or DIR\n");
+        printf ("                   automatically.\n");
+        printf ("                   Extrapolate FinderInfo type from absolute path.\n");
+        printf ("                   If FILE is not AppleSingle/AppleDouble format,\n");
+        printf ("                   look for '.AppleDouble/FILE' and '._FILE'.\n");
+        printf ("                   If DIR, look for 'DIR/.AppleDouble/.Parent' and '._DIR'.\n");
+        printf ("  -f               Dump FILE. Assume FinderInfo to be FileInfo.\n");
+        printf ("  -d               Dump FILE. Assume FinderInfo to be DirInfo.\n");
+        printf ("  -h,-help,--help  Display this help and exit\n");
+        printf ("\n");
+        printf ("There is no way to detect whether FinderInfo is FileInfo or DirInfo.\n");
+        printf ("By default, %s examins whether file or directory,\n"   ,basename($0));
+        printf ("a parent directory is .AppleDouble, filename is ._*, filename is .Parent,\n");
+        printf ("and so on.\n");
+        printf ("If setting option -f or -d, %s assume FinderInfo and doesn't look for\n");
+        printf ("another file.\n");
+        exit 0;
+    } elsif ($arg eq "-a") {
+        $finderinfo = 0;
+    } elsif ($arg eq "-f") {
+        $finderinfo = 1;
+    } elsif ($arg eq "-d") {
+        $finderinfo = 2;
+    } elsif ($arg =~ /^-/) {
+       printf (STDERR "%s: invalid option %s\n", basename($0), $arg);
+       printf (STDERR "Try \`%s\ -h' for more information.\n", basename($0));
+       exit 1;
+    } else {
+        $afile = $arg;
+    }
+}
+
+if (!($afile)) {
+    printf (STDERR "missing file operand.\n");
+    exit 1;
+}
+if (!( -e $afile)) {
+    printf (STDERR "\"%s\" not found.\n", $afile);
+    exit 1;
+}
+
+# detect FinderInfo, and search AppleSingle/AppleDouble file --------------
+
+$abspath = File::Spec->rel2abs($afile);
+($basename, $path, $ext) = fileparse($abspath);
+
+if ( $finderinfo != 0 ) {
+    ;
+} elsif ( -f $afile ) {
+    if ( $basename eq ".Parent") {
+       $finderinfo = 2;
+    } elsif ( $path =~ /\/.AppleDouble\/$/ ) {
+       $finderinfo =1;
+    } elsif ( $basename =~ /^._/ ) {
+       if ( -f $path.substr($basename, 2) ) {
+           $finderinfo =1;
+       } elsif ( -d $path.substr($basename, 2) ) {
+           $finderinfo =2;
+       }
+    }
+    if (!open(INFILE, "<$afile")) {
+       printf (STDERR "cannot open %s\n",  $afile);
+       exit 1;
+    }
+    read(INFILE,$buf,4);
+    $val = unpack("N", $buf );
+    close(INFILE);
+    if ($val == 0x00051600 || $val == 0x00051607) {
+       ;
+    } else {
+       printf ("\"%s\" is not AppleSingle/AppleDouble format.\n", $afile);
+       $finderinfo = 1;
+       $netatalkfile = $path.".AppleDouble/".$basename;
+       $osxfile = $path."._".$basename;
+       if ( -e $netatalkfile ) {
+           $afile = $netatalkfile;
+       } elsif ( -e $osxfile )  {
+           printf ("\"%s\" not found.\n", $netatalkfile);
+           $afile = $osxfile;
+       } else {
+           printf ("\"%s\" not found.\n", $netatalkfile);
+           printf ("\"%s\" not found.\n", $osxfile);
+           exit 1;
+       }
+    }
+} elsif ( -d $afile) {
+    printf ("\"%s\" is directory.\n", $afile);
+    $finderinfo =2;
+    $netatalkfile = $path.$basename."/.AppleDouble/.Parent";
+    $osxfile = $path."._".$basename;
+    if ( -e $netatalkfile ) {
+       $afile = $netatalkfile;
+    } elsif ( -e $osxfile )  {
+       printf ("\"%s\" not found.\n", $netatalkfile);
+       $afile = $osxfile;
+    } else {
+       printf ("\"%s\" not found.\n", $netatalkfile);
+       printf ("\"%s\" not found.\n", $osxfile);
+       exit 1;
+    }
+} else {
+    printf (STDERR "unknown error: %s\n", $afile);
+    exit 1;
+}
+
+if (!open(INFILE, "<$afile")) {
+    printf (STDERR "cannot open %s\n",  $afile);
+    exit 1;
+}
+printf ("%s:\n\n", $afile);
+
+# Magic Number -----------------------------------------------
+
+read(INFILE,$buf,4);
+$val = unpack("N", $buf );
+printf("Magic Num. : %08X", $val);
+if    ( $val == 0x00051600 ) {
+    printf("                                        : AppleSingle");
+}
+elsif ( $val == 0x00051607 ) {
+    printf("                                        : AppleDouble");
+}
+else                         {
+    printf("                                        : Unknown"    );
+}
+print "\n";
+
+# Version Number ---------------------------------------------
+
+read(INFILE,$buf,4);
+$val = unpack("N", $buf );
+printf("Ver. Num.  : %08X", $val);
+if    ( $val == 0x00010000 ) {
+    printf("                                        : Version 1");
+}
+elsif ( $val == 0x00020000 ) {
+    printf("                                        : Version 2");
+}
+else                         {
+    printf("                                        : Unknown"  );
+}
+print "\n";
+
+# v1:Home file system / v2:Filler ----------------------------
+
+read(INFILE,$buf,16);
+print "Filler     :";
+hexdump($buf, 16, 16, " ");
+
+# Number of entities -----------------------------------------
+
+read(INFILE,$buf,2);
+$entnum = unpack("n", $buf );
+printf("Num. of ent: %04X    ", $entnum);
+printf("                                        : %d", $entnum);
+print "\n";
+
+# data -------------------------------------------------------
+
+for ( $num = 0 ; $num < $entnum ; $num++) {
+
+    seek(INFILE, ($num * 12 + 26), 0);
+
+#    Entry ---------------------------------------------------
+
+    read(INFILE,$buf,4);
+    $entid = unpack("N", $buf );
+    printf("\nEntry ID   : %08X", $entid);
+    if    ( $entid ==  1 )         { printf(" : Data Fork ---------------------------------------------"); }
+    elsif ( $entid ==  2 )         { printf(" : Resource Fork -----------------------------------------"); }
+    elsif ( $entid ==  3 )         { printf(" : Real Name ---------------------------------------------"); }
+    elsif ( $entid ==  4 )         { printf(" : Comment -----------------------------------------------"); }
+    elsif ( $entid ==  5 )         { printf(" : Icon, B&W ---------------------------------------------"); }
+    elsif ( $entid ==  6 )         { printf(" : Icon Color --------------------------------------------"); }
+    elsif ( $entid ==  7 )         { printf(" : File Info ---------------------------------------------"); }
+    elsif ( $entid ==  8 )         { printf(" : File Dates Info ---------------------------------------"); }
+    elsif ( $entid ==  9 )         { printf(" : Finder Info -------------------------------------------"); }
+    elsif ( $entid == 10 )         { printf(" : Macintosh File Info -----------------------------------"); }
+    elsif ( $entid == 11 )         { printf(" : ProDOS File Info --------------------------------------"); }
+    elsif ( $entid == 12 )         { printf(" : MS-DOS File Info --------------------------------------"); }
+    elsif ( $entid == 13 )         { printf(" : Short Name --------------------------------------------"); }
+    elsif ( $entid == 14 )         { printf(" : AFP File Info -----------------------------------------"); }
+    elsif ( $entid == 15 )         { printf(" : Directory ID ------------------------------------------"); }
+    elsif ( $entid == 0x8053567E ) { printf(" : CNID (Netatalk Extended) ------------------------------"); }
+    elsif ( $entid == 0x8053594E ) { printf(" : DB stamp (Netatalk Extended) --------------------------"); }
+    elsif ( $entid == 0x80444556 ) { printf(" : dev (Netatalk Extended) -------------------------------"); }
+    elsif ( $entid == 0x80494E4F ) { printf(" : inode (Netatalk Extended) -----------------------------"); }
+    else                           { printf(" : Unknown -----------------------------------------------"); }
+    print "\n";
+
+#    Offset -------------------------------------------------
+
+    read(INFILE,$buf,4);
+    $ofst = unpack("N", $buf );
+    printf("Offset     : %08X", $ofst);
+    printf(" : %d ", $ofst);
+
+#    Length -------------------------------------------------
+
+    read(INFILE,$buf,4);
+    $len = unpack("N", $buf );
+    printf("\nLength     : %08X", $len);
+    printf(" : %d", $len);
+    $quo = $len >> 4;
+    $rem = $len & 0xF;
+    print "\n";
+
+#     Dump for each Entry ID --------------------------------
+
+#    if ( $entid ==  1 ) { ; } # Data Fork
+#    if ( $entid ==  2 ) { ; } # Resource Fork
+#    if ( $entid ==  3 ) { ; } # Real Name
+#    if ( $entid ==  4 ) { ; } # Comment
+#    if ( $entid ==  5 ) { ; } # Icon, B&W
+#    if ( $entid ==  6 ) { ; } # Icon Color
+#    if ( $entid ==  7 ) { ; } # File Info
+    if ( $entid ==  8 ) { filedatesdump($ofst,$len); }
+    elsif ( $entid ==  9 ) { finderinfodump($ofst,$len); }
+#    if ( $entid == 10 ) { ; } # Macintosh File Info
+#    if ( $entid == 11 ) { ; } # ProDOS File Info
+#    if ( $entid == 12 ) { ; } # MS-DOS File Info
+#    if ( $entid == 13 ) { ; } # Short Name
+#    if ( $entid == 14 ) { ; } # AFP File Info 
+    elsif ( $entid == 15 ) { bedump($ofst,$len); } # Directory ID
+    elsif ( $entid == 0x8053567E  ) { bedump($ofst,$len); } # CNID (Netatalk Extended)
+    elsif ( $entid == 0x8053594E  ) { bedump($ofst,$len); ledump($ofst,$len); } # DB stamp (Netatalk Extended)
+    elsif ( $entid == 0x80444556  ) { bedump($ofst,$len); ledump($ofst,$len); } # dev (Netatalk Extended)
+    elsif ( $entid == 0x80494E4F  ) { bedump($ofst,$len); ledump($ofst,$len); } # inode (Netatalk Extended)
+
+#    RAW Dump ---------------------------------------------------
+
+    if ( ($quo > 0) || ($rem > 0)) {
+       print "-RAW DUMP--:  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F : (ASCII)\n";
+    }
+
+    seek(INFILE, $ofst, 0);
+    $addrs = 0;
+    for ( $line = 0 ; $line < $quo ; $line++) {
+        read(INFILE, $buf, 16);
+        printf ( "%08X   :", $addrs);
+        hexdump($buf, 16, 16, " ");
+        $addrs = $addrs + 0x10;
+    }
+    if ( $rem != 0 ) {
+        read(INFILE, $buf, $rem);
+        printf ( "%08X   :", $addrs);
+        hexdump($buf, $rem, 16, " ");
+    }
+}
+
+close(INFILE);
+exit 0;
+
+#sub -----------------------------------------------------------
+
+sub filedatesdump {
+    my ($ofst, $len) = @_;
+    my ($datedata);
+    my ($i);
+    my ($datestr);
+
+    @datetype =('create    ', 'modify    ', 'backup    ', 'access    ');
+
+    seek(INFILE, $ofst, 0);
+
+    printf ("-DATE------:          : (GMT)                    : (Local)\n");
+
+    for ( $i = 0 ; $i < 4 ; $i++) {
+        read(INFILE,$buf,4);
+        $datedata = unpack("N", $buf );
+        if ($datedata < 0x80000000) {
+            $datestr = gmtime( $datedata + 946684800)
+                ." : "
+                .localtime( $datedata + 946684800);
+        } elsif ($datedata == 0x80000000) {
+            $datestr = "Unknown or Initial";
+        } else {
+            $datestr = gmtime( $datedata - 3348282496)
+                ." : "
+                .localtime( $datedata - 3348282496);
+        }
+        printf ("%s : %08X : %s\n",$datetype[$i], $datedata, $datestr);
+    }
+}
+
+sub finderinfodump {
+    my ($ofst, $len) = @_;
+
+    seek(INFILE, $ofst, 0);
+
+    if ($finderinfo == 0) {
+       print "-NOTE------: cannot detect whether FInfo or DInfo. assume FInfo.\n";
+    }
+
+    if ($finderinfo == 0 || $finderinfo == 1) {
+       filefinderinfodump();
+    } elsif ($finderinfo == 2) {
+       dirfinderinfodump();
+    } else {
+       print STDERR "unknown FinderInfo type\n"
+    }
+
+    if ($len > 32) { eadump(); }
+}
+
+sub filefinderinfodump {
+
+    print "-FInfo-----:\n";
+
+    read(INFILE,$buf,4);
+    print "Type       : ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,4);
+    print "Creator    : ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,2);
+    $flags = unpack("n", $buf );
+    printf ("isAlias    : %d\n", ($flags >> 15) & 1);
+    printf ("Invisible  : %d\n", ($flags >> 14) & 1);
+    printf ("hasBundle  : %d\n", ($flags >> 13) & 1);
+    printf ("nameLocked : %d\n", ($flags >> 12) & 1);
+    printf ("Stationery : %d\n", ($flags >> 11) & 1);
+    printf ("CustomIcon : %d\n", ($flags >> 10) & 1);
+    printf ("Reserved   : %d\n", ($flags >>  9) & 1);
+    printf ("Inited     : %d\n", ($flags >>  8) & 1);
+    printf ("NoINITS    : %d\n", ($flags >>  7) & 1);
+    printf ("Shared     : %d\n", ($flags >>  6) & 1);
+    printf ("SwitchLaunc: %d\n", ($flags >>  5) & 1);
+    printf ("ExtHidden  : %d\n", ($flags >>  4) & 1);
+    printf ("color      : %d%d%d\n", ($flags >>  3) & 1,
+            ($flags >>  2) & 1,
+            ($flags >>  1) & 1);
+    printf ("isOnDesk   : %d\n", ($flags >>  0) & 1);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Location v : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Location h : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    print "Fldr       : ";
+    hexdump($buf, 2, 4, "");
+
+    print "-FXInfo----:\n";
+
+    read(INFILE,$buf,2);
+    print "IconID     : ";
+    hexdump($buf, 2, 4, "");
+
+    read(INFILE,$buf,2);
+    print "Unused     : ";
+    hexdump($buf, 2, 4, "");
+    read(INFILE,$buf,2);
+    print "Unused     : ";
+    hexdump($buf, 2, 4, "");
+    read(INFILE,$buf,2);
+    print "Unused     : ";
+    hexdump($buf, 2, 4, "");
+
+    read(INFILE,$buf,1);
+    print "Script     : ";
+    hexdump($buf, 1, 4, "");
+
+    read(INFILE,$buf,1);
+    print "XFlags     : ";
+    hexdump($buf, 1, 4, "");
+
+    read(INFILE,$buf,2);
+    print "Comment    : ";
+    hexdump($buf, 2, 4, "");
+
+    read(INFILE,$buf,4);
+    print "PutAway    : ";
+    hexdump($buf, 4, 4, "");
+
+}
+
+sub dirfinderinfodump {
+
+    print "-DInfo-----:\n";
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Rect top   : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Rect left  : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Rect bottom: %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Rect right : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    $flags = unpack("n", $buf );
+    printf ("isAlias    : %d\n", ($flags >> 15) & 1);
+    printf ("Invisible  : %d\n", ($flags >> 14) & 1);
+    printf ("hasBundle  : %d\n", ($flags >> 13) & 1);
+    printf ("nameLocked : %d\n", ($flags >> 12) & 1);
+    printf ("Stationery : %d\n", ($flags >> 11) & 1);
+    printf ("CustomIcon : %d\n", ($flags >> 10) & 1);
+    printf ("Reserved   : %d\n", ($flags >>  9) & 1);
+    printf ("Inited     : %d\n", ($flags >>  8) & 1);
+    printf ("NoINITS    : %d\n", ($flags >>  7) & 1);
+    printf ("Shared     : %d\n", ($flags >>  6) & 1);
+    printf ("SwitchLaunc: %d\n", ($flags >>  5) & 1);
+    printf ("ExtHidden  : %d\n", ($flags >>  4) & 1);
+    printf ("color      : %d%d%d\n", ($flags >>  3) & 1,
+            ($flags >>  2) & 1,
+            ($flags >>  1) & 1);
+    printf ("isOnDesk   : %d\n", ($flags >>  0) & 1);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Location v : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    $val = unpack("n", $buf );
+    printf("Location h : %04X", $val);
+    printf("     : %d \n", $val);
+
+    read(INFILE,$buf,2);
+    print "View       : ";
+    hexdump($buf, 2, 4, "");
+
+    print "-DXInfo----:\n";
+
+    read(INFILE,$buf,4);
+    print "Scroll     : ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,4);
+    print "OpenChain  : ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,1);
+    print "Script     : ";
+    hexdump($buf, 1, 4, "");
+
+    read(INFILE,$buf,1);
+    print "XFlags     : ";
+    hexdump($buf, 1, 4, "");
+
+    read(INFILE,$buf,2);
+    print "Comment    : ";
+    hexdump($buf, 2, 4, "");
+
+    read(INFILE,$buf,4);
+    print "PutAway    : ";
+    hexdump($buf, 4, 4, "");
+
+}
+
+sub eadump {
+    
+    print "-EA--------:\n";
+
+    read(INFILE,$buf,2);
+    print "pad        : ";
+    hexdump($buf, 2, 4, "");
+
+    read(INFILE,$buf,4);
+    print "magic      : ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,4);
+    print "debug_tag  : ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,4);
+    $ea_total_size = unpack("N", $buf );
+    printf("total_size : %08X", $ea_total_size);
+    printf(" : %d \n", $ea_total_size);
+
+    read(INFILE,$buf,4);
+    $ea_data_start = unpack("N", $buf );
+    printf("data_start : %08X", $ea_data_start);
+    printf(" : %d \n", $ea_data_start);
+
+    read(INFILE,$buf,4);
+    $ea_data_length = unpack("N", $buf );
+    printf("data_length: %08X", $ea_data_length);
+    printf(" : %d \n", $ea_data_length);
+
+    read(INFILE,$buf,4);
+    print "reserved[0]: ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,4);
+    print "reserved[1]: ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,4);
+    print "reserved[2]: ";
+    hexdump($buf, 4, 4, "");
+
+    read(INFILE,$buf,2);
+    print "flags      : ";
+    hexdump($buf, 2, 4, "");
+
+    read(INFILE,$buf,2);
+    $ea_num_attrs = unpack("n", $buf );
+    printf("num_attrs  : %04X", $ea_num_attrs);
+    printf("     : %d \n", $ea_num_attrs);
+
+}
+
+sub bedump  {
+    my ($ofst, $len) = @_;
+    my ($i);
+    my ($value);
+    
+    seek(INFILE, $ofst, 0);
+    
+    printf("%2dbit-BE   : ", $len * 8 );
+    
+    $value = 0;
+    for ( $i=0 ; $i < $len ; $i++ ) {
+       read(INFILE,$buf,1);
+       $bytedata[$i] = unpack("C", $buf );
+       $value += $bytedata[$i] << (($len - $i -1) * 8) ;
+    }
+
+    for ( $i=0 ; $i < $len ; $i++ ) {
+       printf("%02X", $bytedata[$i]);
+    }
+
+    printf(" : %s", $value);
+    print "\n";
+    
+}
+
+sub ledump  {
+    my ($ofst, $len) = @_;
+    my ($i);
+    my ($value);
+    
+    seek(INFILE, $ofst, 0);
+    
+    printf("%2dbit-LE   : ", $len * 8 );
+    
+    $value = 0;
+    for ( $i=0 ; $i < $len ; $i++ ) {
+       read(INFILE,$buf,1);
+       $bytedata[$len - $i - 1] = unpack("C", $buf );
+       $value += $bytedata[$len - $i -1] << ($i * 8) ;
+    }
+
+    for ( $i=0 ; $i < $len ; $i++ ) {
+       printf("%02X", $bytedata[$i]);
+    }
+
+    printf(" : %s", $value);
+    print "\n";
+    
+}
+
+sub hexdump {
+    my ($buf, $len, $col, $delimit) = @_;
+    my ($i);
+
+    $hexstr = "";
+    $ascstr = "";
+
+    for ( $i=0 ; $i < $len ; $i++ ) {
+        $val = substr($buf, $i, 1);
+        $ascval = ord($val);
+        $hexstr .= sprintf("%s%02X", $delimit, $ascval);
+
+        if (($ascval < 32) || (  $ascval > 126 )) {
+            $val = ".";
+        }
+        $ascstr .= $val;
+    }
+    for ( ; $i < $col ; $i++) {
+        $hexstr .= "  ".$delimit;
+        $ascstr .= " ";
+    }
+
+    printf("%s : %s", $hexstr,$ascstr);
+
+    print "\n";
+}
+
+#EOF
diff --git a/contrib/shell_utils/asaddump.in b/contrib/shell_utils/asaddump.in
deleted file mode 100644 (file)
index ffbcd8f..0000000
+++ /dev/null
@@ -1,634 +0,0 @@
-#!@PERL@
-#
-# AppleSingle/AppleDouble dump
-#
-# (c) 2009 by HAT <hat@fa2.so-net.ne.jp>
-#
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License as published by
-#  the Free Software Foundation; either version 2 of the License, or
-#  (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-
-use File::Basename;
-use File::Spec;
-use bigint; # require perl >= 5.8
-
-# parse command line -----------------------------------------------
-
-$finderinfo = 0;              #  0: unknown   1: file   2: directory
-while ($arg = shift @ARGV)
-{
-    if  ($arg =~ /^(-h|-help|--help)$/ ) {
-        printf ("usage: %s [-a] FILE|DIR\n"     ,basename($0));
-        printf (" or:   %s -f FILE\n"           ,basename($0));
-        printf (" or:   %s -d FILE\n"           ,basename($0));
-        printf (" or:   %s -h|-help|--help\n"   ,basename($0));
-        printf ("Dump AppleSingle/AppleDouble format file.\n");
-        printf ("\n");
-        printf ("  -a (default)     Dump a AppleSingle/AppleDouble file for FILE or DIR\n");
-        printf ("                   automatically.\n");
-        printf ("                   Extrapolate FinderInfo type from absolute path.\n");
-        printf ("                   If FILE is not AppleSingle/AppleDouble format,\n");
-        printf ("                   look for '.AppleDouble/FILE' and '._FILE'.\n");
-        printf ("                   If DIR, look for 'DIR/.AppleDouble/.Parent' and '._DIR'.\n");
-        printf ("  -f               Dump FILE. Assume FinderInfo to be FileInfo.\n");
-        printf ("  -d               Dump FILE. Assume FinderInfo to be DirInfo.\n");
-        printf ("  -h,-help,--help  Display this help and exit\n");
-        printf ("\n");
-        printf ("There is no way to detect whether FinderInfo is FileInfo or DirInfo.\n");
-        printf ("By default, %s examins whether file or directory,\n"   ,basename($0));
-        printf ("a parent directory is .AppleDouble, filename is ._*, filename is .Parent,\n");
-        printf ("and so on.\n");
-        printf ("If setting option -f or -d, %s assume FinderInfo and doesn't look for\n");
-        printf ("another file.\n");
-        exit 0;
-    } elsif ($arg eq "-a") {
-        $finderinfo = 0;
-    } elsif ($arg eq "-f") {
-        $finderinfo = 1;
-    } elsif ($arg eq "-d") {
-        $finderinfo = 2;
-    } elsif ($arg =~ /^-/) {
-       printf (STDERR "%s: invalid option %s\n", basename($0), $arg);
-       printf (STDERR "Try \`%s\ -h' for more information.\n", basename($0));
-       exit 1;
-    } else {
-        $afile = $arg;
-    }
-}
-
-if (!($afile)) {
-    printf (STDERR "missing file operand.\n");
-    exit 1;
-}
-if (!( -e $afile)) {
-    printf (STDERR "\"%s\" not found.\n", $afile);
-    exit 1;
-}
-
-# detect FinderInfo, and search AppleSingle/AppleDouble file --------------
-
-$abspath = File::Spec->rel2abs($afile);
-($basename, $path, $ext) = fileparse($abspath);
-
-if ( $finderinfo != 0 ) {
-    ;
-} elsif ( -f $afile ) {
-    if ( $basename eq ".Parent") {
-       $finderinfo = 2;
-    } elsif ( $path =~ /\/.AppleDouble\/$/ ) {
-       $finderinfo =1;
-    } elsif ( $basename =~ /^._/ ) {
-       if ( -f $path.substr($basename, 2) ) {
-           $finderinfo =1;
-       } elsif ( -d $path.substr($basename, 2) ) {
-           $finderinfo =2;
-       }
-    }
-    if (!open(INFILE, "<$afile")) {
-       printf (STDERR "cannot open %s\n",  $afile);
-       exit 1;
-    }
-    read(INFILE,$buf,4);
-    $val = unpack("N", $buf );
-    close(INFILE);
-    if ($val == 0x00051600 || $val == 0x00051607) {
-       ;
-    } else {
-       printf ("\"%s\" is not AppleSingle/AppleDouble format.\n", $afile);
-       $finderinfo = 1;
-       $netatalkfile = $path.".AppleDouble/".$basename;
-       $osxfile = $path."._".$basename;
-       if ( -e $netatalkfile ) {
-           $afile = $netatalkfile;
-       } elsif ( -e $osxfile )  {
-           printf ("\"%s\" not found.\n", $netatalkfile);
-           $afile = $osxfile;
-       } else {
-           printf ("\"%s\" not found.\n", $netatalkfile);
-           printf ("\"%s\" not found.\n", $osxfile);
-           exit 1;
-       }
-    }
-} elsif ( -d $afile) {
-    printf ("\"%s\" is directory.\n", $afile);
-    $finderinfo =2;
-    $netatalkfile = $path.$basename."/.AppleDouble/.Parent";
-    $osxfile = $path."._".$basename;
-    if ( -e $netatalkfile ) {
-       $afile = $netatalkfile;
-    } elsif ( -e $osxfile )  {
-       printf ("\"%s\" not found.\n", $netatalkfile);
-       $afile = $osxfile;
-    } else {
-       printf ("\"%s\" not found.\n", $netatalkfile);
-       printf ("\"%s\" not found.\n", $osxfile);
-       exit 1;
-    }
-} else {
-    printf (STDERR "unknown error: %s\n", $afile);
-    exit 1;
-}
-
-if (!open(INFILE, "<$afile")) {
-    printf (STDERR "cannot open %s\n",  $afile);
-    exit 1;
-}
-printf ("%s:\n\n", $afile);
-
-# Magic Number -----------------------------------------------
-
-read(INFILE,$buf,4);
-$val = unpack("N", $buf );
-printf("Magic Num. : %08X", $val);
-if    ( $val == 0x00051600 ) {
-    printf("                                        : AppleSingle");
-}
-elsif ( $val == 0x00051607 ) {
-    printf("                                        : AppleDouble");
-}
-else                         {
-    printf("                                        : Unknown"    );
-}
-print "\n";
-
-# Version Number ---------------------------------------------
-
-read(INFILE,$buf,4);
-$val = unpack("N", $buf );
-printf("Ver. Num.  : %08X", $val);
-if    ( $val == 0x00010000 ) {
-    printf("                                        : Version 1");
-}
-elsif ( $val == 0x00020000 ) {
-    printf("                                        : Version 2");
-}
-else                         {
-    printf("                                        : Unknown"  );
-}
-print "\n";
-
-# v1:Home file system / v2:Filler ----------------------------
-
-read(INFILE,$buf,16);
-print "Filler     :";
-hexdump($buf, 16, 16, " ");
-
-# Number of entities -----------------------------------------
-
-read(INFILE,$buf,2);
-$entnum = unpack("n", $buf );
-printf("Num. of ent: %04X    ", $entnum);
-printf("                                        : %d", $entnum);
-print "\n";
-
-# data -------------------------------------------------------
-
-for ( $num = 0 ; $num < $entnum ; $num++) {
-
-    seek(INFILE, ($num * 12 + 26), 0);
-
-#    Entry ---------------------------------------------------
-
-    read(INFILE,$buf,4);
-    $entid = unpack("N", $buf );
-    printf("\nEntry ID   : %08X", $entid);
-    if    ( $entid ==  1 )         { printf(" : Data Fork ---------------------------------------------"); }
-    elsif ( $entid ==  2 )         { printf(" : Resource Fork -----------------------------------------"); }
-    elsif ( $entid ==  3 )         { printf(" : Real Name ---------------------------------------------"); }
-    elsif ( $entid ==  4 )         { printf(" : Comment -----------------------------------------------"); }
-    elsif ( $entid ==  5 )         { printf(" : Icon, B&W ---------------------------------------------"); }
-    elsif ( $entid ==  6 )         { printf(" : Icon Color --------------------------------------------"); }
-    elsif ( $entid ==  7 )         { printf(" : File Info ---------------------------------------------"); }
-    elsif ( $entid ==  8 )         { printf(" : File Dates Info ---------------------------------------"); }
-    elsif ( $entid ==  9 )         { printf(" : Finder Info -------------------------------------------"); }
-    elsif ( $entid == 10 )         { printf(" : Macintosh File Info -----------------------------------"); }
-    elsif ( $entid == 11 )         { printf(" : ProDOS File Info --------------------------------------"); }
-    elsif ( $entid == 12 )         { printf(" : MS-DOS File Info --------------------------------------"); }
-    elsif ( $entid == 13 )         { printf(" : Short Name --------------------------------------------"); }
-    elsif ( $entid == 14 )         { printf(" : AFP File Info -----------------------------------------"); }
-    elsif ( $entid == 15 )         { printf(" : Directory ID ------------------------------------------"); }
-    elsif ( $entid == 0x8053567E ) { printf(" : CNID (Netatalk Extended) ------------------------------"); }
-    elsif ( $entid == 0x8053594E ) { printf(" : DB stamp (Netatalk Extended) --------------------------"); }
-    elsif ( $entid == 0x80444556 ) { printf(" : dev (Netatalk Extended) -------------------------------"); }
-    elsif ( $entid == 0x80494E4F ) { printf(" : inode (Netatalk Extended) -----------------------------"); }
-    else                           { printf(" : Unknown -----------------------------------------------"); }
-    print "\n";
-
-#    Offset -------------------------------------------------
-
-    read(INFILE,$buf,4);
-    $ofst = unpack("N", $buf );
-    printf("Offset     : %08X", $ofst);
-    printf(" : %d ", $ofst);
-
-#    Length -------------------------------------------------
-
-    read(INFILE,$buf,4);
-    $len = unpack("N", $buf );
-    printf("\nLength     : %08X", $len);
-    printf(" : %d", $len);
-    $quo = $len >> 4;
-    $rem = $len & 0xF;
-    print "\n";
-
-#     Dump for each Entry ID --------------------------------
-
-#    if ( $entid ==  1 ) { ; } # Data Fork
-#    if ( $entid ==  2 ) { ; } # Resource Fork
-#    if ( $entid ==  3 ) { ; } # Real Name
-#    if ( $entid ==  4 ) { ; } # Comment
-#    if ( $entid ==  5 ) { ; } # Icon, B&W
-#    if ( $entid ==  6 ) { ; } # Icon Color
-#    if ( $entid ==  7 ) { ; } # File Info
-    if ( $entid ==  8 ) { filedatesdump($ofst,$len); }
-    elsif ( $entid ==  9 ) { finderinfodump($ofst,$len); }
-#    if ( $entid == 10 ) { ; } # Macintosh File Info
-#    if ( $entid == 11 ) { ; } # ProDOS File Info
-#    if ( $entid == 12 ) { ; } # MS-DOS File Info
-#    if ( $entid == 13 ) { ; } # Short Name
-#    if ( $entid == 14 ) { ; } # AFP File Info 
-    elsif ( $entid == 15 ) { bedump($ofst,$len); } # Directory ID
-    elsif ( $entid == 0x8053567E  ) { bedump($ofst,$len); } # CNID (Netatalk Extended)
-    elsif ( $entid == 0x8053594E  ) { bedump($ofst,$len); ledump($ofst,$len); } # DB stamp (Netatalk Extended)
-    elsif ( $entid == 0x80444556  ) { bedump($ofst,$len); ledump($ofst,$len); } # dev (Netatalk Extended)
-    elsif ( $entid == 0x80494E4F  ) { bedump($ofst,$len); ledump($ofst,$len); } # inode (Netatalk Extended)
-
-#    RAW Dump ---------------------------------------------------
-
-    if ( ($quo > 0) || ($rem > 0)) {
-       print "-RAW DUMP--:  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F : (ASCII)\n";
-    }
-
-    seek(INFILE, $ofst, 0);
-    $addrs = 0;
-    for ( $line = 0 ; $line < $quo ; $line++) {
-        read(INFILE, $buf, 16);
-        printf ( "%08X   :", $addrs);
-        hexdump($buf, 16, 16, " ");
-        $addrs = $addrs + 0x10;
-    }
-    if ( $rem != 0 ) {
-        read(INFILE, $buf, $rem);
-        printf ( "%08X   :", $addrs);
-        hexdump($buf, $rem, 16, " ");
-    }
-}
-
-close(INFILE);
-exit 0;
-
-#sub -----------------------------------------------------------
-
-sub filedatesdump {
-    my ($ofst, $len) = @_;
-    my ($datedata);
-    my ($i);
-    my ($datestr);
-
-    @datetype =('create    ', 'modify    ', 'backup    ', 'access    ');
-
-    seek(INFILE, $ofst, 0);
-
-    printf ("-DATE------:          : (GMT)                    : (Local)\n");
-
-    for ( $i = 0 ; $i < 4 ; $i++) {
-        read(INFILE,$buf,4);
-        $datedata = unpack("N", $buf );
-        if ($datedata < 0x80000000) {
-            $datestr = gmtime( $datedata + 946684800)
-                ." : "
-                .localtime( $datedata + 946684800);
-        } elsif ($datedata == 0x80000000) {
-            $datestr = "Unknown or Initial";
-        } else {
-            $datestr = gmtime( $datedata - 3348282496)
-                ." : "
-                .localtime( $datedata - 3348282496);
-        }
-        printf ("%s : %08X : %s\n",$datetype[$i], $datedata, $datestr);
-    }
-}
-
-sub finderinfodump {
-    my ($ofst, $len) = @_;
-
-    seek(INFILE, $ofst, 0);
-
-    if ($finderinfo == 0) {
-       print "-NOTE------: cannot detect whether FInfo or DInfo. assume FInfo.\n";
-    }
-
-    if ($finderinfo == 0 || $finderinfo == 1) {
-       filefinderinfodump();
-    } elsif ($finderinfo == 2) {
-       dirfinderinfodump();
-    } else {
-       print STDERR "unknown FinderInfo type\n"
-    }
-
-    if ($len > 32) { eadump(); }
-}
-
-sub filefinderinfodump {
-
-    print "-FInfo-----:\n";
-
-    read(INFILE,$buf,4);
-    print "Type       : ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,4);
-    print "Creator    : ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,2);
-    $flags = unpack("n", $buf );
-    printf ("isAlias    : %d\n", ($flags >> 15) & 1);
-    printf ("Invisible  : %d\n", ($flags >> 14) & 1);
-    printf ("hasBundle  : %d\n", ($flags >> 13) & 1);
-    printf ("nameLocked : %d\n", ($flags >> 12) & 1);
-    printf ("Stationery : %d\n", ($flags >> 11) & 1);
-    printf ("CustomIcon : %d\n", ($flags >> 10) & 1);
-    printf ("Reserved   : %d\n", ($flags >>  9) & 1);
-    printf ("Inited     : %d\n", ($flags >>  8) & 1);
-    printf ("NoINITS    : %d\n", ($flags >>  7) & 1);
-    printf ("Shared     : %d\n", ($flags >>  6) & 1);
-    printf ("SwitchLaunc: %d\n", ($flags >>  5) & 1);
-    printf ("ExtHidden  : %d\n", ($flags >>  4) & 1);
-    printf ("color      : %d%d%d\n", ($flags >>  3) & 1,
-            ($flags >>  2) & 1,
-            ($flags >>  1) & 1);
-    printf ("isOnDesk   : %d\n", ($flags >>  0) & 1);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Location v : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Location h : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    print "Fldr       : ";
-    hexdump($buf, 2, 4, "");
-
-    print "-FXInfo----:\n";
-
-    read(INFILE,$buf,2);
-    print "IconID     : ";
-    hexdump($buf, 2, 4, "");
-
-    read(INFILE,$buf,2);
-    print "Unused     : ";
-    hexdump($buf, 2, 4, "");
-    read(INFILE,$buf,2);
-    print "Unused     : ";
-    hexdump($buf, 2, 4, "");
-    read(INFILE,$buf,2);
-    print "Unused     : ";
-    hexdump($buf, 2, 4, "");
-
-    read(INFILE,$buf,1);
-    print "Script     : ";
-    hexdump($buf, 1, 4, "");
-
-    read(INFILE,$buf,1);
-    print "XFlags     : ";
-    hexdump($buf, 1, 4, "");
-
-    read(INFILE,$buf,2);
-    print "Comment    : ";
-    hexdump($buf, 2, 4, "");
-
-    read(INFILE,$buf,4);
-    print "PutAway    : ";
-    hexdump($buf, 4, 4, "");
-
-}
-
-sub dirfinderinfodump {
-
-    print "-DInfo-----:\n";
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Rect top   : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Rect left  : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Rect bottom: %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Rect right : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    $flags = unpack("n", $buf );
-    printf ("isAlias    : %d\n", ($flags >> 15) & 1);
-    printf ("Invisible  : %d\n", ($flags >> 14) & 1);
-    printf ("hasBundle  : %d\n", ($flags >> 13) & 1);
-    printf ("nameLocked : %d\n", ($flags >> 12) & 1);
-    printf ("Stationery : %d\n", ($flags >> 11) & 1);
-    printf ("CustomIcon : %d\n", ($flags >> 10) & 1);
-    printf ("Reserved   : %d\n", ($flags >>  9) & 1);
-    printf ("Inited     : %d\n", ($flags >>  8) & 1);
-    printf ("NoINITS    : %d\n", ($flags >>  7) & 1);
-    printf ("Shared     : %d\n", ($flags >>  6) & 1);
-    printf ("SwitchLaunc: %d\n", ($flags >>  5) & 1);
-    printf ("ExtHidden  : %d\n", ($flags >>  4) & 1);
-    printf ("color      : %d%d%d\n", ($flags >>  3) & 1,
-            ($flags >>  2) & 1,
-            ($flags >>  1) & 1);
-    printf ("isOnDesk   : %d\n", ($flags >>  0) & 1);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Location v : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    $val = unpack("n", $buf );
-    printf("Location h : %04X", $val);
-    printf("     : %d \n", $val);
-
-    read(INFILE,$buf,2);
-    print "View       : ";
-    hexdump($buf, 2, 4, "");
-
-    print "-DXInfo----:\n";
-
-    read(INFILE,$buf,4);
-    print "Scroll     : ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,4);
-    print "OpenChain  : ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,1);
-    print "Script     : ";
-    hexdump($buf, 1, 4, "");
-
-    read(INFILE,$buf,1);
-    print "XFlags     : ";
-    hexdump($buf, 1, 4, "");
-
-    read(INFILE,$buf,2);
-    print "Comment    : ";
-    hexdump($buf, 2, 4, "");
-
-    read(INFILE,$buf,4);
-    print "PutAway    : ";
-    hexdump($buf, 4, 4, "");
-
-}
-
-sub eadump {
-    
-    print "-EA--------:\n";
-
-    read(INFILE,$buf,2);
-    print "pad        : ";
-    hexdump($buf, 2, 4, "");
-
-    read(INFILE,$buf,4);
-    print "magic      : ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,4);
-    print "debug_tag  : ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,4);
-    $ea_total_size = unpack("N", $buf );
-    printf("total_size : %08X", $ea_total_size);
-    printf(" : %d \n", $ea_total_size);
-
-    read(INFILE,$buf,4);
-    $ea_data_start = unpack("N", $buf );
-    printf("data_start : %08X", $ea_data_start);
-    printf(" : %d \n", $ea_data_start);
-
-    read(INFILE,$buf,4);
-    $ea_data_length = unpack("N", $buf );
-    printf("data_length: %08X", $ea_data_length);
-    printf(" : %d \n", $ea_data_length);
-
-    read(INFILE,$buf,4);
-    print "reserved[0]: ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,4);
-    print "reserved[1]: ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,4);
-    print "reserved[2]: ";
-    hexdump($buf, 4, 4, "");
-
-    read(INFILE,$buf,2);
-    print "flags      : ";
-    hexdump($buf, 2, 4, "");
-
-    read(INFILE,$buf,2);
-    $ea_num_attrs = unpack("n", $buf );
-    printf("num_attrs  : %04X", $ea_num_attrs);
-    printf("     : %d \n", $ea_num_attrs);
-
-}
-
-sub bedump  {
-    my ($ofst, $len) = @_;
-    my ($i);
-    my ($value);
-    
-    seek(INFILE, $ofst, 0);
-    
-    printf("%2dbit-BE   : ", $len * 8 );
-    
-    $value = 0;
-    for ( $i=0 ; $i < $len ; $i++ ) {
-       read(INFILE,$buf,1);
-       $bytedata[$i] = unpack("C", $buf );
-       $value += $bytedata[$i] << (($len - $i -1) * 8) ;
-    }
-
-    for ( $i=0 ; $i < $len ; $i++ ) {
-       printf("%02X", $bytedata[$i]);
-    }
-
-    printf(" : %s", $value);
-    print "\n";
-    
-}
-
-sub ledump  {
-    my ($ofst, $len) = @_;
-    my ($i);
-    my ($value);
-    
-    seek(INFILE, $ofst, 0);
-    
-    printf("%2dbit-LE   : ", $len * 8 );
-    
-    $value = 0;
-    for ( $i=0 ; $i < $len ; $i++ ) {
-       read(INFILE,$buf,1);
-       $bytedata[$len - $i - 1] = unpack("C", $buf );
-       $value += $bytedata[$len - $i -1] << ($i * 8) ;
-    }
-
-    for ( $i=0 ; $i < $len ; $i++ ) {
-       printf("%02X", $bytedata[$i]);
-    }
-
-    printf(" : %s", $value);
-    print "\n";
-    
-}
-
-sub hexdump {
-    my ($buf, $len, $col, $delimit) = @_;
-    my ($i);
-
-    $hexstr = "";
-    $ascstr = "";
-
-    for ( $i=0 ; $i < $len ; $i++ ) {
-        $val = substr($buf, $i, 1);
-        $ascval = ord($val);
-        $hexstr .= sprintf("%s%02X", $delimit, $ascval);
-
-        if (($ascval < 32) || (  $ascval > 126 )) {
-            $val = ".";
-        }
-        $ascstr .= $val;
-    }
-    for ( ; $i < $col ; $i++) {
-        $hexstr .= "  ".$delimit;
-        $ascstr .= " ";
-    }
-
-    printf("%s : %s", $hexstr,$ascstr);
-
-    print "\n";
-}
-
-#EOF