#!/bin/sh
DIR=ati
ARCHIVE=archive
INSTALLER=install

if [ -z "$1" ]; then
 echo "Usage: $0 input [output]" >&2
 exit 1
fi

if [ ! -f "$1" ]; then
 echo "Error: input file not found!" >&2
 exit 2
fi

RUN="$1"
NEW="$2"
[ -z "$NEW" ] && NEW="$RUN.new"

echo Using: "$RUN"

rm -rf "$DIR" "$ARCHIVE" "$INSTALLER"

SKIP="$(strings "$RUN"|awk -F'"' '/^SKIP/{print $2}')"

head -$SKIP "$RUN" > "$INSTALLER"

GZIP_CMD="$(awk -F'"' '/^GZIP_CMD/{print $2}' "$INSTALLER")"
GUNZIP_CMD="$(awk -F'"' '/^GUNZIP_CMD/{print $2}' "$INSTALLER")"
COMPRESS="$(awk -F'"' '/^COMPRESS/{print $2}' "$INSTALLER")"
filesizes="$(awk -F'"' '/^filesizes/{print $2}' "$INSTALLER")"

if [ "$GUNZIP_CMD" = "./lzmadec" -a -x /usr/bin/lzma ]; then
 GUNZIP_CMD="lzma -cd"
elif [ "$GUNZIP_CMD" = "./lzmadec" ]; then
 rm -f lzmadec
 tail -n +$(($SKIP+1)) "$RUN"|tail -c +$(($filesizes+1))|gzip -cd > lzmadec;chmod +x lzmadec
fi

echo GZIP_CMD=\"$GZIP_CMD\"
echo GUNZIP_CMD=\"$GUNZIP_CMD\"
echo COMPRESS=\"$COMPRESS\"

mkdir -p "$DIR"
tail -n +$(($SKIP+1)) "$RUN" |$GUNZIP_CMD|tar -C "$DIR" -xv

[ "$GUNZIP_CMD" = "./lzmadec" ] && rm -f lzmadec

echo Hint: You can edit extracted files in "$DIR" directory, use exit to continue!
bash

if which lzma >/dev/null; then
 COMPRESS="lzma"
else
 COMPRESS="gzip"
fi
GZIP_CMD="$COMPRESS -c9"
GUNZIP_CMD="$COMPRESS -cd"

echo GZIP_CMD=\"$GZIP_CMD\"
echo GUNZIP_CMD=\"$GUNZIP_CMD\"
echo COMPRESS=\"$COMPRESS\"

#tail -n +$(($SKIP+1)) "$RUN" > "$ARCHIVE"
tar -C "$DIR" -cv --owner=root --group=root .|$GZIP_CMD > "$ARCHIVE"

CRCsum=$(cksum $ARCHIVE|awk '{print $1}')
MD5=$(md5sum $ARCHIVE|awk '{print $1}')
filesizes=$(ls -l "$ARCHIVE"|awk '{print $5}')
USIZE=$(du -s "$DIR"|awk '{print $1}')

if [ "$COMPRESS" = "lzma" -a -f $(dirname "$0")/lzmadec.gz ]; then
 GUNZIP_CMD=".\/lzmadec"
 echo GUNZIP_CMD=\"$GUNZIP_CMD\"
 cat $(dirname "$0")/lzmadec.gz >> "$ARCHIVE"
 grep -q lzmadec "$INSTALLER" || patch "$INSTALLER" <<'EOT'
Index: install@@ -98,7 +98,7 @@
 		md5sum=`MS_dd "$1" $offset $s | "$MD5_PATH" | cut -b-32`;
 		if test "$md5sum" != "$md5"; then
 		    echo "Error in MD5 checksums: $md5sum is different from $md5" >&2
-		    exit 2
+		    rm -f lzmadec; exit 2
 		else
 		    test x$verb = xy && MS_Printf " MD5 checksums are OK." >&2
 		fi
@@ -113,7 +113,7 @@
 		test x$verb = xy && MS_Printf " CRC checksums are OK." >&2
 	    else
 		echo "Error in checksums: $sum1 is different from $crc"
-		exit 2;
+		rm -f lzmadec; exit 2;
 	    fi
 	fi
 	i=`expr $i + 1`
@@ -135,13 +135,13 @@
 targetdir=
 #if empty argument is given, then default_flag=y, which is equivalent to --install
 default_flag=n
-
+[ "$GUNZIP_CMD" = "./lzmadec" ] && (tail -n +$(($SKIP+1)) "$0"|tail -c +$(($filesizes+1))|gzip -cd > lzmadec;chmod +x lzmadec)
 while true
 do
     case "$1" in
     -h | --help)
 	MS_Help
-	exit 0
+	rm -f lzmadec; exit 0
 	;;
     --extract)
     script=""
@@ -165,21 +165,21 @@
 	else
 	    echo "$targetdir will be removed after extraction"
 	fi
-	exit 0
+	rm -f lzmadec; exit 0
 	;;
     -l | --list)
 	echo Target directory: $targetdir
 	offset=`head -n $SKIP "$0" | wc -c | tr -d " "`
 	for s in $filesizes
 	do
-	    MS_dd "$0" $offset $s | eval "gzip -cd" | UnTAR t
+	    MS_dd "$0" $offset $s | eval "$GUNZIP_CMD" | UnTAR t
 	    offset=`expr $offset + $s`
 	done
-	exit 0
+	rm -f lzmadec; exit 0
 	;;
     -c | --check)
 	MS_Check "$0" y
-	exit 0
+	rm -f lzmadec; exit 0
 	;;
     --keep)
 	keep=y
@@ -201,7 +201,7 @@
             break
 	else
 	    MS_Help
-	    exit 1
+	    rm -f lzmadec; exit 1
 	fi
 	;;
     "")
@@ -211,7 +211,7 @@
     -* | *)
 	echo Unrecognized flag : "$1" >&2
 	MS_Help
-	exit 1
+	rm -f lzmadec; exit 1
 	;;
     esac
 done
@@ -235,7 +235,7 @@
 
         mkdir -p ${tmpdir} || {
             echo 'Cannot create target directory' ${tmpdir} >&2
-            exit 1
+            rm -f lzmadec; exit 1
         }
     else
         _tmpdir_exists=1
@@ -254,7 +254,7 @@
 MS_Printf "Uncompressing $label"
 res=3
 if test "$keep" = n; then
-    trap 'echo Signal caught, cleaning up >&2; if [ "${_tmpdir_exists}" != "1" ]; then /bin/rm -rf "${location}/${tmpdir}"; fi; eval $finish; exit 15' 1 2 3 15
+    trap 'echo Signal caught, cleaning up >&2; if [ "${_tmpdir_exists}" != "1" ]; then /bin/rm -rf "${location}/${tmpdir}"; fi; eval $finish; rm -f lzmadec; exit 15' 1 2 3 15
 fi
 
 for s in $filesizes
@@ -264,7 +264,7 @@
 	else
 		echo
 		echo "Unable to decompress $0" >&2
-		eval $finish; exit 1
+		eval $finish; rm -f lzmadec; exit 1
     fi
     offset=`expr $offset + $s`
 done
@@ -280,7 +280,7 @@
 #extract the driver release version information from ${label}, which was set when we use makeself.sh to create 
 #this .run archive
 drv_release=`echo $label | cut -d'-' -f2`
-
+rm -f lzmadec
 cd "$tmpdir"
 res=0
 if test x"$script" != x; then

EOT
fi

sed -i 's/^\(CRCsum=\).*/\1"'"$CRCsum"'"/;
        s/^\(MD5=\).*/\1"'"$MD5"'"/;
	s/^\(filesizes=\).*/\1"'"$filesizes"'"/;
	s/^\(GZIP_CMD=\).*/\1"'"$GZIP_CMD"'"/;
	s/^\(GUNZIP_CMD=\).*/\1"'"$GUNZIP_CMD"'"/;
	s/^\(COMPRESS=\).*/\1"'"$COMPRESS"'"/;
	s/\(| eval "\).*\(" |\)/\1$GUNZIP_CMD\2/;
	s/^\(USIZE=\).*/\1"'"$USIZE"'"/' "$INSTALLER"

rm -f "$NEW"
cat "$INSTALLER" "$ARCHIVE" > "$NEW"

rm -rf "$DIR" "$ARCHIVE" "$INSTALLER"

echo SKIP=\"$SKIP\"
echo CRCsum=\"$CRCsum\"
echo MD5=\"$MD5\"
echo filesizes=\"$filesizes\"
echo USIZE=\"$USIZE\"

echo Result: $NEW written.
