I am trying to open files, seek to particular offsets, and read the byte value at that offset. My input file is the output of a number of executions of the Windows command
FC /B which does a binary comparison of two files. I want to pick up the second filename (this works), seek to the offset mentioned in the driver file, read the byte at that position, and print out the hex value. Here's my code, and an example input file:
my $buf = ' ';
while (<>) {
if (/Comparing files (.+) and (.+)/) {
open FH,">>$2" or die "Can't open $2\n";
binmode FH;
print "Opening $2\n";
}
if (/([0-9A-F]{8}): ([0-9A-F]{2}) ([0-9A-F]{2})$/ and $3 gt $2) {
sysseek FH,hex($1),0;
print "Seek $1 (".hex($1).")\n";
sysread FH,$buf,1;
print "Read ".sprintf("%2.2x",ord($buf))."\n";
}
}
__END__
Comparing files C:\PROGRAM FILES\PROJECT ENTROPIA\DATA\MODELS\Models.b
+nt and C:\DATA\MODELS\MODELS.BNT
05063755: 03 43
0875CF55: BF FF
09DC0155: 00 40
0B209955: 40 00
0DE8AD55: 0A 4A
0DF4ED55: 7F 3F
Comparing files C:\PROGRAM FILES\PROJECT ENTROPIA\DATA\TERRAIN\50.bnt
+and C:\DATA\TERRAIN\50.BNT
03040155: 15 55
Comparing files C:\PROGRAM FILES\PROJECT ENTROPIA\DATA\TEXTURES\Textur
+es.bnt and C:\DATA\TEXTURES\TEXTURES.BNT
088C1355: 4C 0C
10F45955: 40 00
1155A355: 1E 5E
181FDB55: A6 E6
It always prints out 20, which is the space that I am initializing $buf with. What am I doing wrong?