summaryrefslogtreecommitdiff
path: root/games/sms_sdl/sms_sdl.sh
diff options
context:
space:
mode:
Diffstat (limited to 'games/sms_sdl/sms_sdl.sh')
-rw-r--r--games/sms_sdl/sms_sdl.sh68
1 files changed, 68 insertions, 0 deletions
diff --git a/games/sms_sdl/sms_sdl.sh b/games/sms_sdl/sms_sdl.sh
new file mode 100644
index 0000000000..8efb438fa8
--- /dev/null
+++ b/games/sms_sdl/sms_sdl.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+# 20091011 bkw: Wrapper script for sms_sdl, does the following:
+
+# - Savestates and screenshots will be saved in ~/.sms_sdl/
+# - A ~/.sms_sdl/config file will be read if present, and converted to
+# command-line options for the real sms_sdl binary.
+
+# To make things work properly, we have to run the real emulator binary
+# 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.
+
+sms_exe="/usr/libexec/sms_sdl"
+sms_userdir=~/.sms_sdl
+conf_file="$sms_userdir/config"
+
+romfile=""
+conf_args=""
+
+set -e
+
+mkdir -p $sms_userdir
+
+if [ -e "$conf_file" ]; then
+ while read line; do
+ # remove comments
+ line="${line/\#*/}"
+ case "$line" in
+ "") ;; # ignore empty lines
+ -*)
+ conf_args="$conf_args $line"
+ ;;
+ *)
+ conf_args="$conf_args --$line"
+ ;;
+ esac
+ done < "$conf_file"
+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
+done
+
+set +e
+if [ -z "$romfile" ]; then
+ $sms_exe
+else
+ cd $sms_userdir
+ $sms_exe $conf_args "$romfile"
+ rm -f "$romfile"
+fi