123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/bin/sh
- # Uncomment the following line to get debug info
- #set -x
- SELF="$(basename ${0})"
- INSTANT_PLAY_FILE="/mnt/instant_play"
- RESUME_PLAY_FILE="/mnt/resume_play"
- LAST_OPK_FILE="/mnt/last_opk"
- PID_PATH="/var/run/pid_path"
- REBOOTING_FILE="/run/rebooting"
- usage() {
- >&2 echo "Usage: ${SELF} load"
- >&2 echo " ${SELF} save application args..."
- exit 1
- }
- # Check number of arguments
- if [ ${#} -lt 1 ]; then
- usage
- fi
- case ${1} in
- load)
- if [ ${#} -ne 1 ]; then
- usage
- fi
- # Umount any remaining OPK, if any
- umount /opk >/dev/null 2>&1
- # Mount last OPK, if any
- if [ -r "${LAST_OPK_FILE}" ]; then
- last_opk=$(cat "${LAST_OPK_FILE}")
- mount -t squashfs "${last_opk}" /opk
- fi
- # Remove unnecessary files
- rm -f "${RESUME_PLAY_FILE}"
- # Launch Previous Game if any
- if [ -f "${INSTANT_PLAY_FILE}" ]; then
- keymap resume
- echo -n "Found Instant Play file, restarting previous game with command: "
- cat "${INSTANT_PLAY_FILE}"
- mv "${INSTANT_PLAY_FILE}" "${RESUME_PLAY_FILE}"
- source "${RESUME_PLAY_FILE}"
- rm -f "${RESUME_PLAY_FILE}"
- keymap default
- termfix_all
- fi
- # Unmount last OPK, if any
- if [ -r "${LAST_OPK_FILE}" -a ! -f "${REBOOTING_FILE}" ]; then
- umount /opk
- rm "${LAST_OPK_FILE}"
- fi
- ;;
- save)
- if [ ${#} -lt 2 ]; then
- usage
- fi
- shift
- # Write quick load file args
- echo -n "" > "${INSTANT_PLAY_FILE}"
- printf "'" >> "${INSTANT_PLAY_FILE}"
- # First arg is prog name, forcing real path
- bin=$(printf %s "$1" | sed "s/'/'\\\\''/g")
- bin_name=$(basename "$bin")
- bin_path="$(cat $PID_PATH)"/"$bin_name"
- echo -n "$bin_path" >> "${INSTANT_PLAY_FILE}"
- printf "' " >> "${INSTANT_PLAY_FILE}"
- shift
- while [ "$#" != "0" ]
- do
- printf "'" >> "${INSTANT_PLAY_FILE}"
- printf %s "$1" | sed "s/'/'\\\\''/g" >> "${INSTANT_PLAY_FILE}"
- printf "' " >> "${INSTANT_PLAY_FILE}"
- shift
- done
- # Add the magic sauce to launch the process in background,
- # record the PID into a file, wait for the process to
- # terminate and erase the recorded PID
- cat << EOF >> "${INSTANT_PLAY_FILE}"
- &
- pid record \$!
- wait \$!
- pid erase
- EOF
- # Now terminate gracefully
- exec powerdown now
- ;;
- *)
- usage
- ;;
- esac
- exit 0
|