#
#  Sakis3G All-in-one script
#  Copyright (c) 2009, 2010 Sakis Dimopoulos (sakis3g @domain sakis3g.org)
#  Under GNU GPL v2.
#
#  URL: http://www.sakis3g.org/
#  License: http://www.gnu.org/licenses/gpl.txt
#
#  ATTENTION: DO NOT EDIT THIS FILE DIRECTLY, OR YOU RISK TO RENDER IT
#  UNUSABLE. IF YOU WANT TO EDIT Sakis3G SCRIPT, ISSUE:
#      $ /usr/bin/sakis3g disassemble /tmp
#      $ cd /tmp/sakis3g-0.2.0/
#      $ vi src/sakis3g
#      $ ./compile
#      $ cp /tmp/sakis3g-0.2.0/build/sakis3gz /usr/bin/.
#
#  See embedded help:
#      $ sakis3gz help
#  or embedded man page:
#      $ sakis3gz man
#  Additional information at:
#      http://wiki.sakis3g.org/
#

handler_get_file() {
	[ ! -x "${MEGZ}" ] && return 1
	bn=`basename "$1"`; [ "a${bn}" = "a" ] && return 1
	dd "if=${MEGZ}" "bs=${BLOCKSIZE}" "skip=${PACKAGE_OFFSET}" of="/tmp/sakis3gz.$$.tar.${extension}" >/dev/null 2>&1
	[ ! -f "/tmp/sakis3gz.$$.tar.${extension}" ] && return 1
	if [ ! -s "/tmp/sakis3gz.$$.tar.${extension}" ]; then
		rm -f "/tmp/sakis3gz.$$.tar.${extension}"; return 1
	fi
	tar xf "/tmp/sakis3gz.$$.tar.${extension}" "$1" -O | dd "of=/tmp/sakis3gz.$$.${bn}" >/dev/null 2>&1
	rm -f "/tmp/sakis3gz.$$.tar.${extension}"
	[ ! -f "/tmp/sakis3gz.$$.${bn}" ] && return 1
	if [ ! -s "/tmp/sakis3gz.$$.${bn}" ]; then
		rm -f "/tmp/sakis3gz.$$.${bn}";	return 1
	fi
	export EXTRACTED="/tmp/sakis3gz.$$.${bn}"
	return 0
}

handler_disassemble() {
	[ ! -x "${MEGZ}" ] && return 1
	if [ "a${stripped}" != "a" ]; then
		echo "This version cannot be disassembled."
		return 0
	fi
	if [ "a$1" = "a" ]; then
		echo "Usage: ${MEGZ} disassemble <destination>" >> /dev/stderr
		return 0
	fi
	if [ ! -d "$1" ]; then
		echo "Destination directory \"$1\" was not found." >> /dev/stderr
		return 0
	fi
	dd "if=${MEGZ}" "bs=${BLOCKSIZE}" "skip=${PACKAGE_OFFSET}" of="/tmp/sakis3gz.$$.tar.${extension}" >/dev/null 2>&1
	[ ! -f "/tmp/sakis3gz.$$.tar.${extension}" ] && return 1
	if [ ! -s "/tmp/sakis3gz.$$.tar.${extension}" ]; then
		rm -f "/tmp/sakis3gz.$$.tar.${extension}"; return 1
	fi
	mkdir "$1/sakis3g-${MYVERSION}"
	if [ ! -d "$1/sakis3g-${MYVERSION}" ]; then
		rm -f "/tmp/sakis3gz.$$.tar.${extension}"; return 1
	fi
	oldtar=`tar --version 2> /dev/null | grep "GNU tar" | sed -e "s/^\(.*\) \([0-9.][0-9.]*\)$/\2/g" | sed -e "s/\.//g" | cut -b1-2`
	if [ "a${oldtar}" != "a" ] && [ "${oldtar}" -lt "12" ]; then
		tar -C "$1/sakis3g-${MYVERSION}" -x -v -f "/tmp/sakis3gz.$$.tar.${extension}"
		mv "$1/sakis3g-${MYVERSION}/sakis3g/"* "$1/sakis3g-${MYVERSION}/."
	else
		tar --transform "s/^sakis3g\///g" -C "$1/sakis3g-${MYVERSION}" -x -v -f "/tmp/sakis3gz.$$.tar.${extension}"
	fi
	rm -f "/tmp/sakis3gz.$$.tar.${extension}"
	rmdir "$1/sakis3g-${MYVERSION}/sakis3g"
	return 0
}

handler_cat() {
	! handler_get_file "$1" && return 1
	[ ! -f "${EXTRACTED}" ] && return 1
	cat "${EXTRACTED}"; rm -f "${EXTRACTED}"; unset EXTRACTED
	return 0
}

handler_exec() {
	! handler_get_file "$1" && return 1
	[ ! -f "${EXTRACTED}" ] && return 1
	chmod +x "${EXTRACTED}"
	export PROVIDER="${MEGZ}"
	[ "$#" -gt "0" ] && shift
	if [ ! "`which ldd 2>/dev/null`" ]; then
		"${EXTRACTED}" "$@"
		ret=$?
	else
		akis3g=`echo "${EXTRACTED}" | grep "sakis3g$"`
		if [ "a${akis3g}" = "a" ]; then
			ldd "${EXTRACTED}" >/dev/null 2>&1
			ret=$?
			unset akis3g
			if [ "${ret}" -eq "0" ]; then
				"${EXTRACTED}" "$@"
				ret=$?
			else
				echo "Binary not available for this platform. Please recompile." > /dev/stderr
				ret=95
			fi
		else
			unset akis3g
			"${EXTRACTED}" "$@"
			ret=$?
		fi
	fi
	rm -f "${EXTRACTED}"; unset EXTRACTED
	return ${ret}
}

if [ "a$1" = "als" ]; then
	echo "${PACKAGE_CONTENTS}"
	exit 0
fi

for dep in dd tar ${decompressor} grep head basename chmod readlink
do
	[ ! "`which ${dep} 2>/dev/null`" ] && echo "${dep} not found in path." > /dev/stderr && exit 1
done

export MEGZ="$0"

file="$1"; 
[ "a`basename "$0"`" = "ausb_modeswitch" ] && file="usb_modeswitch"
[ "a${file}" = "a" ] && file="sakis3g/src/sakis3g"
[ "a${file}" = "adisassemble" ] && unset file && handler_disassemble "$2" && exit $?
if [ "a${file}" = "agetfile" ]; then
	unset file
	[ "a$2" = "a" ] && exit 99
	filexists=`echo "${PACKAGE_CONTENTS}" | grep -e "${2}$" | head -1`
	[ "a${filexists}" != "a" ] && handler_cat "${filexists}" && unset filexists && exit 0
	unset filexists
	exit 99
fi
filexists=`echo "${PACKAGE_EXECUTABLES}" | grep -e "${file}$" | head -1`
if [ "a${filexists}" != "a" ]; then
	unset file
	[ "a`basename ${MEGZ}`" != "ausb_modeswitch" ] && [ "$#" -gt "0" ] && shift; handler_exec "${filexists}" "$@"
	exit $?
else
	unset filexists
	filexists=`echo "${PACKAGE_CONTENTS}" | grep -e "${file}$" | head -1`
	unset file
	if [ "a`basename ${MEGZ}`" = "ausb_modeswitch" -a "a${filexists}" = "a" ]; then
		MEGZ=`readlink -f "${MEGZ}"`
		export MEGZ
		handler_exec "sakis3g/src/sakis3g" usb_modeswitch "$@"
		exit $?
	elif [ "a${filexists}" != "a" ]; then
		handler_cat "${filexists}"
		exit $?
	else
		handler_exec "sakis3g/src/sakis3g" "$@"
		exit $?
	fi
fi
