#!/bin/sh
###
## Wrapper script that enables loading of compressed roms for SSNES.
## Author: Themaister
## License: Do whatever you want with it.
#

die()
{
   echo "Error: $1"
   rm "$TMPROM"
   rm -r "$TMPDIR"
   exit 1
}

if [ -z "$1" ]; then
   die "Need at least one argument"
fi

COMP_FILE="$1"
TMPROM="`mktemp`"
TMPDIR="`mktemp -d`"
shift

extract_zip()
{
   which unzip >/dev/null 2>&1 || die "Cannot find unzip"
   which zipinfo >/dev/null 2>&1 || die "Cannot find zipinfo"
   FILENAME="`zipinfo -1 \"$1\" | grep '\.s[mf]c$' | head -n1`"
   if [ -z "$FILENAME" ]; then
      die "Cannot find .smc nor .sfc file in archive"
   fi

   # The people who made the [!] naming convention obviously have never used regex ... <_<
   FILENAME_FIXED="`echo $FILENAME | sed -e 's|\[|\\\\[|g' -e 's|!|\\\\!|g' -e 's|\]|\\\\]|g'`"

   unzip -p "$1" "$FILENAME_FIXED" > "$TMPROM"
}

extract_7z()
{
   which 7z >/dev/null 2>&1 || die "Cannot find 7z"
   7z x "$1" -o"$TMPDIR" >/dev/null 2>&1 || die "Couldn't extract from archive"
   FILENAME="`ls \"$TMPDIR\" | grep '\.s[mf]c$' | head -n1`"
   if [ -z "$FILENAME" ]; then
      die "Cannot find .smc nor .sfc file in archive"
   fi

   mv "${TMPDIR}/${FILENAME}" "$TMPROM"
}

extract_rar()
{
   which unrar >/dev/null 2>&1 || die "Cannot find unrar"
   unrar x "$1" "$TMPDIR" >/dev/null 2>&1 || die "Couldn't extract from archive"
   FILENAME="`ls \"$TMPDIR\" | grep '\.s[mf]c$' | head -n1`"
   if [ -z "$FILENAME" ]; then
      die "Cannot find .smc nor .sfc file in archive"
   fi

   mv "${TMPDIR}/${FILENAME}" "$TMPROM"
}

case "$COMP_FILE" in
   *.zip )
      extract_zip "$COMP_FILE"
      EXTENSION=".zip"
      ;;
   *.7z )
      extract_7z "$COMP_FILE"
      EXTENSION=".7z"
      ;;
   *.rar )
      extract_rar "$COMP_FILE"
      EXTENSION=".rar"
      ;;
   * )
      die "Couldn't find valid zipped rom."
      ;;
esac

SAVENAME="`basename \"$COMP_FILE\" $EXTENSION`"
DIRNAME="`dirname \"$COMP_FILE\"`"
SAVENAME="${SAVENAME}.srm"

SSNES_PATH="`which ssnes`"
if [ -z "$SSNES_PATH" ]; then
   die "Cannot find SSNES in path."
fi

echo "Temp ROM: $TMPROM"
echo "Savename: ${DIRNAME}/${SAVENAME}"
"$SSNES_PATH" "$TMPROM" -s "${DIRNAME}/${SAVENAME}" "$@"
rm "$TMPROM"
rm -r "$TMPDIR"