diff options
author | B. Watson <yalhcru@gmail.com> | 2016-08-04 05:46:18 -0400 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2016-08-13 07:22:55 +0700 |
commit | 2b7b2efae33d39b078ba5017cb3afbd2f3f871d6 (patch) | |
tree | cc812d1e03150a5d68f5754ecc0bc5f70f39e6d9 /games/sms_sdl/sms_sdl.sh | |
parent | 2c2c487adc2a4455870c031b621430825ba414ee (diff) | |
download | slackbuilds-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.sh | 86 |
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 |