#!/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"