#!/usr/bin/perl $file="barsd_104.bin"; $tmpfile="tmp.bin"; $num=0; $vshift0=0x24f1b; $vshift1=0x64; $vshift2=0x22; $vskip=0x20; $vread=0x4000; $fnum=107; open(IN, $file); binmode(IN); sysread(IN,$buf,$vshift0); sysread(IN,$buf,$vshift2); open(OUT, "> $tmpfile"); binmode(OUT); for($i=0;$i<7;$i++){ sysread(IN,$buf,$vskip); sysread(IN,$buf,$vread); print OUT $buf; } close(OUT); close(IN); open(IN, $tmpfile); binmode(IN); sysread(IN,$buf,$vshift1); print "$fnum files\n"; for($i=0;$i<$fnum;$i++){ sysread(IN,$buf,22); for($j=0;$j<13;$j++){ if(ord(substr($buf,$j,1))==0){ last; } } $fn=substr($buf,0,$j); printf "$fn"; $nname[$num]=$fn; for($j=0;$j<13-length($fn);$j++){ print " "; } # for($j=13;$j<22;$j++){ # printf "%02x ",ord(substr($buf,$j,1)); # } $nsize[$num]=ord(substr($buf,19,1))*256+ ord(substr($buf,18,1)); $nstart[$num]=ord(substr($buf,15,1))*256+ ord(substr($buf,14,1)); printf (" %03d %03d",$nstart[$num],$nsize[$num]); $num++; printf "\n"; } sysread(IN,$buf,2); for($i=0;$i<$num;$i++){ sysread(IN,$buf,$nsize[$i]); # printf "$nname[$i]\n"; open(OUT, "> $nname[$i]"); binmode(OUT); print OUT $buf; close(OUT); } close(IN); unlink($tmpfile);