#!/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