#!/usr/bin/perl
#
# acpixtract - extract raw table from acpidump output
#
# Example: cat mail.txt | ./acpixtract DSDT > DSDT
# iasl -d DSDT
#

($ME = $0) =~ s|.*/||;

$table = uc(shift(@ARGV) || "");

if(@ARGV)
{
    my($file);
    for $file (@ARGV)
    {
	if(open(IN, "$file"))
	{
	    &process(IN, STDOUT, $table);
	    close(IN);
	}
	else
	{
	    print STDERR "$ME: $file: $!\n";
	}
    }
}
else
{
    &process(STDIN, STDOUT, $table);
}

exit(0);

sub
process
{
    local(*IN, *OUT, $table) = @_;
    my($interior) = 0;
    while(<IN>)
    {
	if(!$interior && /$table \@ 0x/)
	{
	    $interior = 1;
	}
	elsif($interior && /\s+[\dA-Fa-f]{4}:\s+/)
	{
            $_ = $';
            /\s{2}/;
            $length = ((length($`) + 1) / 3) - 1;
	    print OUT pack('C*', map(hex, (split(/\s/, $`))[0..$length]));
	}
	elsif($interior)
	{
	    while(<IN>) {}
	    return;
	}
    }
}
