#!/usr/local/bin/perl

sub read_code {
  local ($f) = @_;
  open(FILE, $f) || die("Cannot open $f");
  seek(FILE, -20, 2);
  read(FILE, $buff, 20) == 20 || die("Truncated bytecode file $f");
  ($code_size, $data_size, $symbol_size, $debug_size, $magic) =
    unpack("N5", $buff);
  $magic == 0x434c3035 || die("$f is not a CL 0.5 bytecode file");
  seek(FILE, -(20 + $code_size + $data_size + $symbol_size + $debug_size), 2);
  read(FILE, $buff, $code_size) == $code_size
  || die("Truncated bytecode file $f");
  $buff;
}

$code1 = do read_code ($ARGV[0]);
$code2 = do read_code ($ARGV[1]);

if ($code1 eq $code2) {
  print "$ARGV[0] and $ARGV[1] are identical.\n";
  exit 0;
} else {
  print "$ARGV[0] and $ARGV[1] differ.\n";
  open(OUT, "> /tmp/code1");
  print OUT $code1;
  open(OUT, "> /tmp/code2");
  print OUT $code2;
  exit 1;
}
