#!/usr/bin/perl

$|=1;

foreach $x (@ARGV)
{
	$file=`file $x`;
	
	if($file=~/GNU tar archive/)
		{$type="tar";}
	elsif($file=~/tar archive/)
		{$type="tar";}
	elsif($file=~/Zip archive data/)
		{$type="zip";}
	elsif($file=~/gzip compressed/)
	{
		if($x=~/\.(tar|tgz)/i || $file=~/original filename.*\.tar/i)
			{$type="tar.gz";}
		else
			{$type="gz";}
	}
	elsif($file=~/bzip2 compressed/)
	{
		if($x=~/\.tar/i || $file=~/original filename.*\.tar/i)
			{$type="tar.bz2";}
		else
			{$type="bz2";}
	}
	elsif($x=~/\.tar$/i)
		{$type="tar";}
	elsif($x=~/\.tar.gz$/i)
		{$type="tar.gz";}
	elsif($x=~/\.tar.bz2$/i)
		{$type="tar.bz2";}
	elsif($x=~/\.bz2/i)
		{$type="bz2";}
	elsif($x=~/\.gz$/i)
		{$type="gz";}
	elsif($x=~/\.zip$/i)
		{$type="zip";}
	else
	{
		print "unable to find type for '$x', skipping it.\n";
		next;
	}

	# print "type2=$type\n";
	$x=~s/\"/\\\"/g;
	
	if($type eq "tar")
		{system "tar -xvf \"$x\" 2>&1";}
	elsif($type eq "bz2")
		{system "bunzip2 -d \"$x\" 2>&1";}
	elsif($type eq "gz")
		{system "gunzip -d \"$x\" 2>&1";}
	elsif($type eq "tar.gz")
		{system "gunzip -cd $x|tar xvf - 2>&1";}
	elsif($type eq "tar.bz2")
		{system "bunzip2 -cd $x|tar xvf - 2>&1";}
	elsif($type eq "gz")
		{system "gunzip -d \"$x\" 2>&1";}
	elsif($type eq "zip")
		{system "unzip \"$x\" 2>&1";}
}

