#!/bin/bash -f

#---------------------------------------------------------------------------
#  Project:  TwlSDK - tools - loadrun
#  File:     nitrorun.TWL
#
#  Copyright 2008 Nintendo.  All rights reserved.
#
#  These coded instructions, statements, and computer programs contain
#  proprietary information of Nintendo of America Inc. and/or Nintendo
#  Company Ltd., and are protected by Federal copyright law.  They may
#  not be disclosed to third parties or copied or duplicated in any form,
#  in whole or in part, without the prior written consent of Nintendo.
#
#  $Date:: 2007-00-00#$
#  $Rev: 0 $
#  $Author: nobody $
#---------------------------------------------------------------------------

#---- SDK ルートディレクトリ
SDKROOT=`cygpath -u "$TWLSDK_ROOT"`

#---- 実行コマンド
LOADRUN=$SDKROOT/tools/bin/loadrun.TWL.exe
BURYARG=$SDKROOT/tools/bin/buryarg.TWL.exe
COMMANDNAME=`basename $0`

#---- コマンドオプション
BOPTION=""
LOPTION=""

#---- 動作フラグ
gVerboseMode=0
gHelpMode=0
gIsError=0
gNoExecMode=0

#---- テンポラリファイル名
tmpFile=_nitrorun_TWL_tmp@@.$$

#----------------------------------------------------------------
# showVersion
#		バージョン表示
#
function showVersion()
{
    echo "$COMMANDNAME  1.0  Copyright 2008 Nintendo. All right reserved."
    #
    # 1.0 first release (nitrorun をコピーして修正)
    #
}

#----------------------------------------------------------------
# showUsage
#		使い方表示
#
function showUsage()
{
    echo "Usage: $COMMANDNAME [OPTION] [<TwlSrlFile> [ARGUMENT]...]"
    echo "Execute buryarg and loadrun."
    echo ""
    echo "Options:"
    echo "  -h, --help            show this help."
    echo "      --version         show version."
    echo "  -v, --verbose         verbose mode."
    echo "      --bopt            specify options for buryarg.TWL."
    echo "      --lopt            specify options for loadrun.TWL."
    echo "  -n, --noexec          do not execute commands. (for test)"
    echo ""
    echo "Example:"
    echo "  $COMMANDNAME --lopt \"-t30 -a\\\"ABORT\\\" -l\" main.srl 100 300"
    echo "      is done as:  "    
    echo "  buryarg.TWL --stdout main.srl 100 300 > temporaryFile"
    echo "  loadrun.TWL -t30 -a\"ABORT\" -l temporaryFile"
}

#----------------------------------------------------------------
# checkError
# 		ここまでのエラーチェック
#
function checkError
{
	local isShowUsage=0

	if [ $gIsError -eq 1 ];
	then
		exit 1
	fi;

	if [ $gHelpMode -eq 1 ];
	then
		isShowUsage=1
	fi;

	if [ $ARGC -eq 0 ];
	then
		isShowUsage=1
	fi;

	if [ $isShowUsage -eq 1 ];
	then
		showUsage
		exit 1
	fi;
}

#----------------------------------------------------------------
# checkExistence
#		ファイルの存在確認
#
function checkExistence()
{
	#---- buryarg コマンドが存在するか
	if [ ! -e $BURYARG ];
	then
		gIsError=1
		echo "*** Error: $COMMANDNAME: buryarg.TWL command not exist"
		return
	fi;

	#---- loadrun コマンドが存在するか
	if [ ! -e $LOADRUN ];
	then
		gIsError=1
		echo "*** Error: $COMMANDNAME: loadrun.TWL command not exist"
		return
	fi;

	#---- srl ファイルが存在するか
	if [ ! -e $1 ];
	then
		gIsError=1
		echo "*** Error: $COMMANDNAME: srl file not exist"
		return
	fi;

	#---- テンポラリファイルを作成できるか
	touch $tmpFile
	if [ ! -e $tmpFile ];
	then
		gIsError=1
		echo "*** Error: $COMMANDNAME: cannot create temporary file"
		return
	fi;
}

function deleteExit
{
    \rm -f $tmpFile
    exit $1
}

#================================================================
# main
#		メイン
#

#---- シグナルトラップ
trap deleteExit 1 INT
trap deleteExit 2 HUP
trap deleteExit 3 QUIT

#---------------- オプションのチェック
while [ 1 ];
do
	case $1 in
		# ヘルプ
		--help|-help|-h)
			gHelpMode=1
			shift 1
			continue
			;;
		# バージョン
		--version|-version)
			showVersion
			exit 1
			;;
		# buryarg に渡すオプション
		--bopt*|-bopt*)
			BOPTION=$2
			shift 2
			continue
			;;
		# loadrun に渡すオプション
		--lopt*|-lopt*)
			LOPTION=$2
			shift 2
			continue
			;;
		# verbose モード
		--verbose|-v)
			gVerboseMode=1
			shift 1
			continue
			;;
		# 実行しない
		--noexec|-n)
			gNoExecMode=1
			shift 1
			continue
			;;
		# 他のオプション
		-*)
			gIsError=1
			echo "*** Error: $COMMANDNAME: Illegal option"
			break;
			;;
		# オプションでないもの
		*)
			break;
			;;
	esac

done

#---------------- ファイルの存在などのエラーチェック
ARGC=$#

if [ $gIsError -eq 0 ];
then
	checkExistence $1
fi;

checkError

#---------------- コマンド実行
{
	if [ $gVerboseMode -eq 1 ];
	then
		echo "buryarg.TWL option: $BOPTION"
		echo "loadrun.TWL option: $LOPTION"
	fi;

	if [ $gVerboseMode -eq 1 ];
	then
		echo "$BURYARG $BOPTION --stdout $@  > $tmpFile"
		echo "$LOADRUN $LOPTION $tmpFile"
	fi;


	if [ $gNoExecMode -eq 0 ];
	then
		#---- ２つのコマンドを連続実行
		$BURYARG $BOPTION --stdout "$@"  > $tmpFile
		$LOADRUN $LOPTION $tmpFile
	fi;
}

deleteExit 0
