summaryrefslogtreecommitdiffstats
path: root/games/sms_sdl/sms_sdl.sh
diff options
context:
space:
mode:
author B. Watson2016-08-04 11:46:18 +0200
committer Willy Sudiarto Raharjo2016-08-13 02:22:55 +0200
commit2b7b2efae33d39b078ba5017cb3afbd2f3f871d6 (patch)
treecc812d1e03150a5d68f5754ecc0bc5f70f39e6d9 /games/sms_sdl/sms_sdl.sh
parent2c2c487adc2a4455870c031b621430825ba414ee (diff)
downloadslackbuilds-2b7b2efae33d39b078ba5017cb3afbd2f3f871d6.tar.gz
games/sms_sdl: Fix/enhance shell script wrapper.
Diffstat (limited to 'games/sms_sdl/sms_sdl.sh')
-rw-r--r--games/sms_sdl/sms_sdl.sh86
1 files changed, 67 insertions, 19 deletions
diff --git a/games/sms_sdl/sms_sdl.sh b/games/sms_sdl/sms_sdl.sh
index 8efb438fa8..d9a6ff1afd 100644
--- a/games/sms_sdl/sms_sdl.sh
+++ b/games/sms_sdl/sms_sdl.sh
@@ -10,6 +10,14 @@
# with its cwd set to ~/.sms_sdl/, and create a symlink to the ROM file
# in the same directory. After the emu exits, we remove the symlink.
+# 20160804 bkw: various fixes and enhancements.
+# - Make --filter <mode> and --fskip <n> options work from
+# the command line. They work already in a config file, which is why
+# I didn't notice they were broken for *7 years*.
+# - Fix the usage message so it doesn't show the /usr/libexec/ path.
+# - Make the return value of the script match the return value of the emulator.
+# - Add support for single-file zipped ROMs, since I have so many of them.
+
sms_exe="/usr/libexec/sms_sdl"
sms_userdir=~/.sms_sdl
conf_file="$sms_userdir/config"
@@ -19,6 +27,26 @@ conf_args=""
set -e
+usage() {
+ $sms_exe | sed "/^Usage:/s,$sms_exe,sms_sdl,"
+}
+
+unzip_rom() {
+ # extract one file (hopefully a ROM image) from a zip file. if there are
+ # more files (ROMs or otherwise), they will be ignored.
+
+ # look for known filename extensions first, in case there are readme or
+ # file_id or whatever inside the zipfile.
+ romfile="$( zipinfo -1 "$1" | egrep -i '\.(sms|gg|rom|bin)$' | head -1 )"
+
+ # if none found, just grab the first filename and hope for the best.
+ if [ -z "$romfile" ]; then
+ romfile="$( zipinfo -1 "$1" | head -1 )"
+ fi
+
+ unzip "$arg" "$romfile" -d $sms_userdir || exit 1
+}
+
mkdir -p $sms_userdir
if [ -e "$conf_file" ]; then
@@ -38,31 +66,51 @@ if [ -e "$conf_file" ]; then
fi
for arg; do
- case "$arg" in
- -h|-help|--help|-\?)
- $sms_exe
- exit 0
- ;;
-
- --*)
- conf_args="$conf_args $arg"
- ;;
-
- *)
- if [ -z "$romfile" ]; then
- arg="$( readlink -f "$arg" )"
- romfile="$( basename "$arg" )"
- ( cd $sms_userdir ; rm -f "$romfile" ; ln -s "$arg" . )
- fi
- ;;
- esac
+ if [ "$needparam" = "1" ]; then
+ conf_args="$conf_args $arg"
+ needparam=0
+ else
+ case "$arg" in
+ -h|-help|--help|-\?)
+ usage
+ exit 0
+ ;;
+
+ --filter|--fskip)
+ conf_args="$conf_args $arg"
+ needparam=1
+ ;;
+
+ --*)
+ conf_args="$conf_args $arg"
+ ;;
+
+ *)
+ if [ -z "$romfile" ]; then
+ case "$arg" in
+ *.zip|*.ZIP*|*.Zip)
+ unzip_rom "$arg" # sets romfile
+ ;;
+ *)
+ arg="$( readlink -f "$arg" )"
+ romfile="$( basename "$arg" )"
+ ( cd $sms_userdir ; rm -f "$romfile" ; ln -s "$arg" . )
+ esac
+ fi
+ ;;
+ esac
+ fi
done
set +e
if [ -z "$romfile" ]; then
- $sms_exe
+ usage
+ exit 1
else
cd $sms_userdir
+ #echo $sms_exe $conf_args "$romfile"
$sms_exe $conf_args "$romfile"
+ rv="$?"
rm -f "$romfile"
+ exit $rv
fi