#!perl -w # (C) 2003-2007 Willem Jan Hengeveld # Web: http://www.xs4all.nl/~itsme/ # http://wiki.xda-developers.com/ # # $Id$ # use strict; my %orig; parsedumprom(shift, \%orig); my %new; for (@ARGV) { parsedumprom($_, \%new); } print map { sprintf(qq(-dd 0x%08lx:%x,%08lx,%08lx,%04x,%04x,%08lx,%08lx\n), $orig{$_}{entry}, $orig{$_}{attr}&~0x800, $orig{$_}{ftlow}, $orig{$_}{fthigh}, $new{$_}{fullsize}, $new{$_}{compressedsize}, $orig{$_}{filename}, $new{$_}{filedata}) } grep { exists $orig{$_} } keys %new; sub parsedumprom { my ($romfile, $info)= @_; open FH, "dumprom $romfile|"; while () { chomp; if (/^(\w+)\s-\s\w+\s\w+\sfilename\s(.*)/) { my $name= lc($2); $info->{$name}{filename}=hex($1); } elsif (/^(\w+)\s-\s\w+\s\w+\sfilent\s+\w+\s(\w+)\s(\w{8})(\w{8})\s+(\w+)\s+(\w+)\s(\w+)\s(.*)/) { my $name= lc($8); $info->{$name}{entry}= hex($1); $info->{$name}{attr}= hex($2); $info->{$name}{fthigh}= hex($3); $info->{$name}{ftlow}= hex($4); $info->{$name}{fullsize}= $5; $info->{$name}{compressedsize}= $6; $info->{$name}{filedata}= hex($7); } } close FH; }