showHelp() {
cat <<endHELP
Usage:
- pnd_run.sh -p file.pnd -e cmd [-a args] [-b pndid] [-s path] [-c speed] [-d [path]] [-x] [-m] [-u]
+ pnd_run.sh -p file.pnd -e cmd [-a args] [-b pndid] [-s path] [-c speed] [-d [path]] [-x] [-m] [-u] [-- more_args]
-p file.pnd : Specify the pnd file to execute
-e cmd : Command to run
-a args : Arguments to the command
-x : Stop X before starting the apps
-m : Only mount the pnd, dont run it (-e become optional)
-u : Only umount the pnd, dont run it (-e become optional)
+
+ If '--' is specified, all subsequent arguments are passed through to the command
+ (useful if you want to pass quotes and weird chars to the command)
endHELP
}
export XDG_DATA_DIRS="$UNION_MOUNT_DIR/$PND_NAME/share:$XDG_DATA_DIRS:/usr/share"
fi
- export XDG_CONFIG_HOME="$UNION_MOUNT_DIR/$PND_NAME"
export REAL_HOME="$HOME"
export HOME="$UNION_MOUNT_DIR/$PND_NAME"
+ export XDG_CONFIG_HOME="$HOME"
+ export XDG_DATA_HOME="$HOME"
+ export XDG_CACHE_HOME="$HOME"
if echo "$EXENAME"|grep -q ^\.\/;then
- "$EXENAME" $ARGUMENTS
+ "$EXENAME" $ARGUMENTS "$@"
else
- "./$EXENAME" $ARGUMENTS
+ "./$EXENAME" $ARGUMENTS "$@"
fi
RC=$?
PND_EndTask
fi
oPWD=$(pwd)
+ old_fb0_geometry=$(fbset -fb /dev/fb0 -s | grep geometry | awk '{print $2, $3, $4, $5, $6}')
if [ -e "${APPDATADIR}/PND_pre_script.sh" ]; then
PND_BeginTask "Starting user configured pre-script"
. ${APPDATADIR}/PND_pre_script.sh # Sourcing so it can shared vars with post-script ;)
PND_EndTask
fi
- PND_BeginTask "Starting the application ($EXENAME $ARGUMENTS)"
- runApp
+
+ PND_BeginTask "Starting the application ( $EXENAME $ARGUMENTS "$@")"
+ runApp "$@"
PND_EndTask
+
if [ -e "${APPDATADIR}/PND_post_script.sh" ]; then
PND_BeginTask "Starting user configured post-script"
. ${APPDATADIR}/PND_post_script.sh
PND_resetCPUSpeed
PND_EndTask
fi
+ PND_BeginTask "Restoring the frame buffer status"
+ ofbset -fb /dev/fb0 -pos 0 0
+ fbset -fb /dev/fb0 -g $old_fb0_geometry
+ old_res=$(echo $old_fb0_geometry | awk '{print $1, $2}')
+ ofbset -fb /dev/fb0 -size $old_res -en 1
if ! lsof /dev/fb1 > /dev/null; then
- PND_BeginTask "Restoring the frame buffer status"
ofbset -fb /dev/fb1 -mem 0 -size 0 0 -en 0
+ fi
+ PND_EndTask
+
+ running_pnd_count=$(ps ax | grep "pnd_run.s[h]" | wc -l)
+ # restore settings if we are the last exiting pnd
+ # compare with 2 because one is used by subshell where "ps ax | ..." runs
+ if [ "$running_pnd_count" -eq "2" ]; then
+ PND_BeginTask "Restoring nub mode"
+ sed -n '1p' /etc/pandora/conf/nubs.state > /proc/pandora/nub0/mode
+ sed -n '7p' /etc/pandora/conf/nubs.state > /proc/pandora/nub1/mode
PND_EndTask
fi
+
PND_BeginTask "uMount the PND"
umountUnion
PND_EndTask
######################################################################################
#### Parsing the arguments :
##
+if [ "$#" -lt 1 ]; then
+ showHelp
+ exit 1
+fi
+
ACTION=run
while [ "$#" -gt 0 ];do
+ if [ "$1" == "--" ]; then
+ shift
+ break
+ fi
+
if [ "$#" -gt 1 ] && ( [[ "$(echo $2|cut -c 1)" != "-" ]] || [[ "$1" = "-a" ]] );then
case "$1" in
-p) PND="$2";;
-d) APPDATASET=1;APPDATADIR="$2";;
-a) ARGUMENTS="$2";;
*) echo "ERROR while parsing arguments: \"$1 $2\" is not a valid argument";
- echo "Arguments were : $PND_ARGS"
showHelp;
exit 1 ;;
esac
-x) CLOSE_X=1;;
-d) APPDATASET=1;;
*) echo "ERROR while parsing arguments: \"$1\" is not a valid argument";
- echo "Arguments were : $PND_ARGS"
showHelp;
exit 1 ;;
esac
fi
done
+if test -z "$PND"; then
+ echo "ERROR: pnd file provided (-p)"
+ showHelp
+ exit 1
+fi
+
# getting the real full path to the file
PND="$(readlink -f $PND)"
fi
if [ ! "$EXENAME" ] && [[ "$ACTION" = "run" ]]; then
- echo "ERROR: no executable name provided!"
+ echo "ERROR: no executable name provided! (-e)"
showHelp
exit 1
fi
PND_Start
{
if [ $CLOSE_X ]; then
- main 2>&1 &
+ main "$@" 2>&1 &
disown
else
- main 2>&1
+ main "$@" 2>&1
fi
}>>"$PND_LOG"
PND_Stop