#!/bin/sh
#140410 sfs
extract_rpm ()
{
	leadsize=96
	o=`expr $leadsize + 8`
	set `od -j $o -N 8 -t u1 $pkg`
	il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
	dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`

	sigsize=`expr 8 + 16 \* $il + $dl`
	o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8`
	set `od -j $o -N 8 -t u1 $pkg`
	il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
	dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
	hdrsize=`expr 8 + 16 \* $il + $dl`
	o=`expr $o + $hdrsize`
cd "`dirname "$pkg"`"
[ "$d" = "" ] || mkdir -p "$d" 2>/dev/null; cd "$d"
#[ "$d" = "" ] || mkdir $d && cd $d
#	dd if=../$pkg ibs=$o skip=1 2>/dev/null | bsdtar -xf -
#	dd if="$p""$pkg" ibs=$o skip=1 > 11 #2>/dev/null | xz -d| cpio -i -d
#echo $pkg ;exit
p=
dd if="$p""$pkg" ibs=$o skip=1 2>/dev/null | xz -d 2>/dev/null | cpio -i -d || dd if="$p""$pkg" ibs=$o skip=1 2>/dev/null | gzip -d| cpio -i -d #|| dd if="$p""$pkg" ibs=$o skip=1 2>/dev/null | bsdtar -xf - #| cpio -i -d
#echo "	dd if="$p""$pkg" ibs=$o skip=1 2>/dev/null | xz -d 2>/dev/null | cpio -i -d || dd if="$p""$pkg" ibs=$o skip=1 2>/dev/null | gzip -d| cpio -i -d"
}
extract_deb ()
{
#echo $d ;exit
cd "`dirname "$1"`"
[ "$d" = "" ] || mkdir -p "$d" 2>/dev/null; cd "$d"

if [ -e /usr/bin/bsdtar ] ;then
#	d="$(bsdtar -tf ../"`basename ${1}`" |grep data.tar.)"
#	bsdtar -xf ../"`basename ${1}`" "$d" && bsdtar -xf "$d" && rm "$d"
	d="$(bsdtar -tf "${1}" |grep data.tar.)"
	bsdtar -xf "${1}" "$d" && bsdtar -xf "$d" && rm "$d"
else
ar p "$p${1}" data.tar.gz |tar xz
fi
}

[ ! -e /usr/bin/bsdtar ] && [ ! -e /usr/bin/ar] && echo "$0 need 'ar' ore 'bsdtar'" && exit
[ "$1" = "" ] && echo "Use $0 [.deb|.rpm] -2 dir
    -2 -to dir" && exit
pkg="$1"

if [ "$2" != "-2" ] ;then
p="../"
d="`expr $1 : '.*/\(.*\)[.].*' \| $1 : '\(.*\)[.].*' \| $1`"
else
d="$3"
fi

if [ "$pkg" = "" -o ! -e "$pkg" ]; then
	echo "no package supplied" 1>&2
	exit 1
fi
ext=`echo $pkg | awk -F. '{ print $NF }'`
case "$ext" in
	rpm|RPM)
		pkg="`realpath "$pkg"`"
		extract_rpm $pkg
		;;
	deb|DEB)
		extract_deb "`realpath "$pkg"`"
		;;
	*)
		echo "Unknown package type: $pkg"
		exit 1
	esac
