#!/bin/sh ### ## Wrapper script that enables loading of compressed roms for RetroArch. ## Author: Themaister ## License: Do whatever you want with it. # die() { echo "Error: $1" rm -r "${TMPDIR}" exit 1 } if [ -z "$1" ]; then die "Need at least one argument" fi COMP_FILE="$1" TMPDIR="`mktemp -d`" shift extract_zip() { which unzip >/dev/null 2>&1 || die "Cannot find unzip" unzip "$1" -d "${TMPDIR}" >/dev/null 2>&1 || die "Couldn't extract from archive" } 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" } 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" } 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 # pick the largest non-directory in the root of the unpacked archive FILENAME="`ls -Sp \"${TMPDIR}\" | grep -v /$ | head -n1`" if [ -z "${FILENAME}" ]; then die "Cannot find any files in root of archive" fi SAVENAME="`basename \"${COMP_FILE}\" ${EXTENSION}`" SAVESTATE="`basename \"${COMP_FILE}\" ${EXTENSION}`" DIRNAME="`dirname \"${COMP_FILE}\"`" SAVENAME="${SAVENAME}.srm" SAVESTATE="${SAVESTATE}.state" EXE="`which retroarch`" if [ -z "${EXE}" ]; then die "Cannot find RetroArch in path." fi echo "Temp ROM: ${TMPDIR}/${FILENAME}" echo "Savename: ${DIRNAME}/${SAVENAME}" echo "Savestate: ${DIRNAME}/${SAVESTATE}" "${EXE}" "${TMPDIR}/${FILENAME}" -s "${DIRNAME}/${SAVENAME}" -S "${DIRNAME}/${SAVESTATE}" "$@" rm -r "${TMPDIR}"