#!perl -w use strict; use IO::File; use Getopt::Long; my $xrefdwords; GetOptions( "d"=>\$xrefdwords ); for my $fn (@ARGV) { my $fh=(defined $fn && $fn ne "-" ) ? IO::File->new($fn, "r") : *STDIN; if (!$fh) { die "$fn: $!\n"; } binmode $fh; local $/; my $data=<$fh>; printf("----- %s\n", $fn); xrefdata($data); } sub xrefdata { my $data= shift; my @byteref; my @wordref; my @dwordref; for (my $i=0 ; $i[6]}) { my ($min, $max); for my $o (0..6) { next if !defined $refs->[$o][$x]; $min = $refs->[$o][$x] if !defined $min || $min > $refs->[$o][$x]; $max = $refs->[$o][$x] if !defined $max || $max < $refs->[$o][$x]; } $width[$x]= (defined $max && $max>0) ? length("$max") : 0; $width[$x]= $size if ($width[$x]>0 && $width[$x]<$size); printf(" %*s%0${size}x", $width[$x]-$size, "", $x) if $width[$x]; } print "\n"; my @desc=qw(.0 .1 .2 .3 .0 .1 -); for my $o (0..6) { printf("%-2s :", $desc[$o]); for my $x (0..$#{$refs->[6]}) { next if $width[$x]==0; printf(" %*d", $width[$x], $refs->[$o][$x] || 0); } printf("\n"); } } sub dumpdrefs { my ($size, $name, $refs)= @_; $size *= 2; print "$name refs:\n"; print " "; my %width; for my $x (sort { $a <=> $b } keys %{$refs->[6]}) { my ($min, $max); for my $o (0..6) { next if !defined $refs->[$o]{$x}; $min = $refs->[$o]{$x} if !defined $min || $min > $refs->[$o]{$x}; $max = $refs->[$o]{$x} if !defined $max || $max < $refs->[$o]{$x}; } $width{$x}= (defined $max && $max>0) ? length("$max") : 0; $width{$x}= $size if ($width{$x}>0 && $width{$x}<$size); printf(" %*s%0${size}x", $width{$x}-$size, "", $x) if $width{$x}; } print "\n"; my @desc=qw(.0 .1 .2 .3 .0 .1 -); for my $o (0..6) { printf("%-2s :", $desc[$o]); for my $x (sort { $a <=> $b } keys %{$refs->[6]}) { next if $width{$x}==0; printf(" %*d", $width{$x}, $refs->[$o]{$x} || 0); } printf("\n"); } }