#!/bin/sh
#
# Copyright 2006-2016 Hunan Kylin, Inc.  All Rights Reserved.
# 
# NOTICE: ALL INFORMATION CONTAINED HEREIN IS, AND REMAINS THE PROPERTY OF
# HUNAN KYLIN, INC. AND ITS SUPPLIERS, IF ANY. THE INTELLECTUAL AND
# TECHNICAL CONCEPTS CONTAINED HEREIN ARE PROPRIETARY TO HUNAN KYLIN, INC.
# AND ITS SUPPLIERS AND MAY BE COVERED BY U.S. AND FOREIGN PATENTS, PATENTS IN
# PROCESS, AND ARE PROTECTED BY TRADE SECRET OR COPYRIGHT LAW. DISSEMINATION
# OF THIS INFORMATION OR REPRODUCTION OF THIS MATERIAL IS STRICTLY FORBIDDEN
# UNLESS PRIOR WRITTEN PERMISSION IS OBTAINED FROM HUNAN KYLIN, INC.
#
#
#	KSVD Session Launch Script

usage()
{
	retval=${1:-"20"}

	cat <<EOF

$PRODNAME $PRODVER-$PRODBLD
$COPYRIGHTMSG

USAGE: uniqb [options] <user> <desktop>

options:
	-cdrom <path>	Override CDROM device or image with <path>
	-fullscreen	Start in full-screen mode
	-snapshot	Start with virtual C: in copy-on-write "snapshot" mode
	-nosnapshot	Start with "snapshot" mode disabled
	-leaf <cmd>	Leaf mode commands
	-log-level <lv> Sets logging level
	-stderr		Logging goes to stderr, not uniqb.txt
	-comment <text> ignored, useful for tagging launches in log files
	-I <n>          Run a desktop pool instance
	-T <n>          test instance (for stress testing)
	-Z              Run a fake guest (for stress testing)
	-v              Verbose
	-S              Run uniqb-runtime-server
	-E <vde driver url>  (install) The URL of the VDE guest driver

<user>
	username to start desktop as

<desktop> 
	name of the desktop to start

EOF
	exit $retval
}

[ $UNIQB_VERBOSE_SCRIPTS ] && set -x

# set environment
REAL0="$0"
[ -h $0 ] && REAL0=`ls -l "$0" |sed -e 's|.*-> ||'`
UNIQB_BIN=`dirname $REAL0`
set -e
eval `$UNIQB_BIN/uniqbenv`
set +e

if [ -n "$UNIQB_PREFIX_DEV" -a -d "$UNIQB_PREFIX_DEV/bin" ] ; then
	export BINPATH=$UNIQB_PREFIX_DEV/bin
	export ETCPATH=$UNIQB_PREFIX_DEV/etc
	export DOCPATH=$UNIQB_PREFIX_DEV/doc
fi

# simple arguments (i.e. those that never contain spaces) are collected
# in $args, then added to the shell's positional parameters
args=
redirect=1

# get options
while [ $# -gt 0 ]; do
	case $1 in
	-h*|--h*)
		usage 0
		;;
	-cdrom)
		shift
		[ -z "$1" ] && usage
		UNIQB_DEV_CDROM="$1"; export UNIQB_DEV_CDROM
		UNIQB_DEV_CDROM_AUTO="no"; export UNIQB_DEV_CDROM_AUTO
		UNIQB_DEV_CDROM_ENABLE="yes"; export UNIQB_DEV_CDROM_ENABLE
		;;
	-fullscreen)
		args="$args -F"
		;;
	-S)
		server_mode=1
		;;
	-snapshot)
		args="$args -S"
		;;
	-nosnapshot)
		args="$args -s"
		;;
	-Z)
		args="$args -Z"
		;;
	-log-level)
		shift
		[ -z "$1" ] && usage
		args="$args -L $1"
		;;
	-leaf)
		shift
		[ -z "$1" ] && usage
		opt_leaf="$1"
		;;
	-I)
		shift
		[ -z "$1" ] && usage
		args="$args -I $1"
		;;
	-T)
		shift
		[ -z "$1" ] && usage
		args="$args -T $1"
		;;
	#任务id号
	-P)
		shift
		[ -z "$1" ] && usage
		args="$args -P $1"
		;;

	-stderr)
		redirect=
		;;
	-comment)
		shift
		[ -z "$1" ] && usage
		# discard the comment
		;;
	-v)     set +x;;

	-E)
		args="$args -E $1"
		;;
	-*)
		echo
		echo "Unrecognized option $1"
		usage
		;;
	*)
		break
		;;
	esac
	shift
done

[ "$redirect" ] && args="$args -R"

# next argument must be the desktop name
[ -z "$1" ] && usage
username="$1"
shift
[ -z "$1" ] && usage
desktop="$1"
shift

if [ "$opt_leaf" ]; then
	filter=`$BINPATH/ksvd-leaf-usb-exclusion-filter.sh`
	if [ $? -eq 0 ] ; then
		opt_filter_1="-e"
		opt_filter_2="$filter"
	fi
fi

if [ "$opt_leaf" ]; then
	valgrind_settings="$HOME/settings.valgrind"
else
	valgrind_settings="/var/log/ksvd/1/settings.valgrind"
fi

runtime="$BINPATH/uniqb-runtime"
runtime_server="$BINPATH/uniqb-runtime-server"
[ -x "$runtime.nm" ] && runtime="$runtime.nm"

if [ -r $valgrind_settings ] ; then
	valgrind_opt=`cat $valgrind_settings`
	if [ "$server_mode" ] ; then
		opt_1="$valgrind_opt $runtime-server"
		runtime_server=valgrind
	else
		opt_1="$valgrind_opt $runtime"
		runtime=valgrind
	fi
fi

# add the simple arguments to the argument array
set -- $args $@

if [ "$opt_leaf" ] ; then
	set -x
	exec $runtime $opt_1 -C "$desktop" -N "$username" $opt_leaf $opt_filter_1 "$opt_filter_2" $@
elif [ "$server_mode" ]; then
	exec ${runtime_server} $opt_1 -C "$desktop" -N "$username" $@
else
	exec $runtime $opt_1 -C "$desktop" -N "$username" $@
fi
