#!/bin/sh

prog=`basename $0`

echo "$prog Version 1.0 Programmed in 1993 by Marko M\"akel\"a"

[ $SFX_ML. = . ] && SFX_ML=$HOME/bin/sfx.ml

if [ ! -f $SFX_ML ]
then
	echo $prog: Fatal: SFX header not available!
	exit 1
fi

if [ $# -eq 0 ]
then
	cat <<- END_OF_USAGE

		Usage:	$prog archive1 [archive2 [...]]

		Converts ZipCoded archives to LHX or SFX.
	END_OF_USAGE
	exit 1
fi

rm -fr $HOME/tmp && mkdir $HOME/tmp && mkdir $HOME/tmp/files ||
{
	echo $prog: Unable to create work directory.
	exit 2
}

while [ $# -gt 0 ]
do
	dir=`dirname $1`
	base=`basename $1`

	zip2disk $1 $HOME/tmp/disk &&
	disk2files $HOME/tmp/disk $HOME/tmp/files/ > $HOME/tmp/$base.list &&
	lha cgo $HOME/tmp/$base.lzh $HOME/tmp/files/* > /dev/null &&
	lzhconvert $HOME/tmp/$base.lzh $HOME/tmp/$base.lhx \
	< $HOME/tmp/$base.list ||
	{
		echo $prog: $1: Error, aborting.
		exit 3
	}

	if [ `wc -c $HOME/tmp/$base.lhx | cut -f1 -d/` -gt 47478 ]
	then
		echo $prog: $1 results in too large an SFX, creating an LZH.
		mv $HOME/tmp/$base.lhx $dir/$base.lzh ||
		{
			echo $prog: Fatal: Could not create $dir/$base.lzh.
			exit 4
		}
        elif grep \\\\0R $HOME/tmp/$base.list > /dev/null
        then
                echo $prog: $1 contains relative files, creating an LZH.
                mv $HOME/tmp/$base.lhx $dir/$base.lzh ||
                {
                        echo $prog: Fatal: Could not create $dir/$base.lzh.
                        exit 4
                }
	else
		cat $HOME/bin/sfx.ml $HOME/tmp/$base.lhx > $dir/$base.sfx ||
		{
			echo $prog: Fatal: Could not create $dir/$base.sfx.
			exit 4
		}
	fi

	rm -f $HOME/tmp/files/* $HOME/tmp/* 2> /dev/null
	shift
done

rm -fr $HOME/tmp
echo $prog: All done.
exit 0
