codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#!/usr/bin/perl -w select(STDERR); $| = 1; select(STDOUT); # default $| = 1; my $name = $ARGV[0]; if (not defined $name) { die "Need input filename\n"; } open (IN_FILE, $name) or die "Couldn't open $name for reading"; binmode(IN_FILE); while (!eof(IN_FILE)) { $crc=0; # find a 2-bytes header 00 01 $hfound=0; $prev=0xFF; while (!$hfound) { read(IN_FILE, $byte, 1); if (eof(IN_FILE)) {goto EEOF}; $data=ord($byte); $w=($data << 8) | $prev; if($w==1){ $hfound=1; printf("Header 00 01 found!\n"); } else { $prev=$data; }; }; read(IN_FILE, $byte, 1); $locnt=ord($byte); $crc=($crc+$locnt) & 0xFF; read(IN_FILE, $byte, 1); $hicnt=ord($byte); $crc=($crc+$hicnt) & 0xFF; $cnt=($hicnt<< 8) | $locnt; printf("Counter=%06o (%d %04XH) +6\n",$cnt,$cnt,$cnt); read(IN_FILE, $byte, 1); $loadr=ord($byte); $crc=($crc+$loadr) & 0xFF; read(IN_FILE, $byte, 1); $hiadr=ord($byte); $crc=($crc+$hiadr) & 0xFF; $adr=($hiadr<< 8) | $loadr; printf("Address=%06o (%d %04XH)\n",$adr,$adr,$adr); #read $cnt-6 bytes and calculate checksum for($i=0;$i<($cnt-6);$i++) { read(IN_FILE, $byte, 1); $data=ord($byte); $crc=($crc+$data) & 0xFF; }; read(IN_FILE, $byte, 1); $fcrc=ord($byte); $crc=(~$crc)& 0xFF; printf("CRC from file = %03o %02XH\n",$fcrc,$fcrc); printf("CRC from calc = %03o %02XH\n",$crc,$crc); if ($fcrc==$crc) { printf("CRC correct!\n"); } else { printf("CRC not correct!\n"); } } EEOF: close(IN_FILE);
Private
[
?
]
Run code
Submit