mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-27 18:20:27 +00:00
96 lines
2.2 KiB
Bash
Executable File
96 lines
2.2 KiB
Bash
Executable File
#!/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 "$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"
|
|
|
|
RetroArch_PATH="`which retroarch`"
|
|
if [ -z "$RetroArch_PATH" ]; then
|
|
die "Cannot find RetroArch in path."
|
|
fi
|
|
|
|
echo "Temp ROM: $TMPROM"
|
|
echo "Savename: ${DIRNAME}/${SAVENAME}"
|
|
"$RetroArch_PATH" "$TMPROM" -s "${DIRNAME}/${SAVENAME}" "$@"
|
|
rm "$TMPROM"
|
|
rm -r "$TMPDIR"
|