#!/usr/bin/perl # (c) 2002 Fonkie # License: GPL v2 use Unicode::String qw( utf16 ); use strict; my $file; my $buff; open IN,$ARGV[0]; while (read(IN, $buff, 8 * 2**10)) { $file.=$buff; } close IN; parse_eq($file); exit; sub parse_eq { my $file=shift; my $ohead=shift; my $head=substr($file,0,4); my $hsize=substr($file,4,4); my $size=substr($file,8,4); my $len=length($file); $hsize=unpack "V",$hsize; $size=unpack "V",$size; $size=$hsize if($size<$hsize); print "got: main eq element [$head] [$hsize] [$size] [$len]\n"; my ($a1,$a2,$count,$elen) = unpack "V4V4V4",substr($file,8,16); print "got: ????: $a1\n"; print "got: ????: $a2\n"; print "got: number of presets: $count\n"; print "got: preset length: $elen\n"; print "\n"; die "no eq file" unless($head eq "mqed"); $file=substr($file,$hsize); while($len>0) { $head=substr($file,0,4); die "no eq file [$head]" unless($head eq "pqed"); print "got: eq element [$head]\n"; my ($size) = unpack "v",substr($file,4,2); my $s=substr($file,6,$size*2); my $u=utf16($s); $u->byteswap; my $ustr=$u->latin1; my $l=length $ustr; print "got: size: $size\n"; print "got: ustr: $ustr\n" if $ustr; my %eq; my $base=520; my $count = unpack "v",substr($file,$base,2); print "got: eq settings: $count\n"; for(1..$count) { $eq{$_}= unpack "s",substr($file,$base+4*$_,2); print "got: eq $_: $eq{$_}\n"; } $base=$base+4*$count+4; $count = unpack "v",substr($file,$base,2); print "got: eq settings: $count\n"; for(1..$count) { $eq{$_}= unpack "s",substr($file,$base+4*$_,2); print "got: eq $_: $eq{$_}\n"; } $file=substr($file,$elen); $len=length($file); print "\n"; } }