#! /bin/sh
#

# check echo command without newline & escape-sequence control
#
if [ "`echo -n`" = "-n" ]; then
	n=""
	c="\c"
	e=""
else
	n="-n"
	c=""
	e="-e"
fi

# check OS type
#
UNAME=`uname`
if [ ${UNAME} != "Linux" ] && [ ${UNAME} != "SunOS" ]; then
	echo "This media is not supported on this OS(${UNAME})." 1>&2
	exit 1
fi
SUPPORT=bin/support.${UNAME}
if [ ! -x ${SUPPORT} ]; then
	echo "This media is not supported on this OS(${UNAME})." 1>&2
	exit 1
fi
export UNAME SUPPORT

# unset LD_LIBRARY_PATH
#
if [ "X${LD_LIBRARY_PATH}" != "X" ]; then
	unset LD_LIBRARY_PATH
fi

_get_val()
{
	key="$1"
	shift
	while [ $# != 0 ]; do
		if [ "$key" = "$1" ]; then
			echo $2
			break
		fi
		shift
	done
}

get_val()
{
	if [ -t 0 ]; then
		_get_val "$1" `LANG=C stty -a | tr -d ';='`
	fi
}

ROWS=`get_val rows`
if [ "$ROWS" = "" ] || [ $ROWS -le 0 ]; then
	ROWS=24
fi
COLUMNS=`get_val columns`
if [ "$COLUMNS" = "" ] || [ $COLUMNS -le 0 ]; then
	COLUMNS=80
fi

unset get_val _get_val

case ${LANG} in
ja|japanese|japanese.euc|ja_JP|ja_JP.euc*|ja_JP.ujis)
	LNGAG="JA"
	if [ $UNAME = "Linux" ]; then
		TITLE="GUARDIANSUITE 󥹥ȡ Linux"
	else
		TITLE="GUARDIANSUITE 󥹥ȡ Solaris"
	fi
	TRIAL="ɾ"
	TODAY=`date +%Y/%m/%d`
	ANYKY="򲡤Ƥ... : "
	CNTMG="³Ԥޤ [y/n]"
	_C=`expr '(' $COLUMNS - 6 ')' / 2`
	HLINE=`printf "%${_C}s\n" "" | sed -e 's/ //g'`
	QTMSG="λ"
	BKMSG=""
	ENMSG=" : "
	ETMSG="λޤ"
	EXMSG="󥹥ȡߤޤ"
	UXMSG="󥤥󥹥ȡߤޤ"
	CTMSG="³Ԥޤ"
	CRTMG="ޤ [y/n]"
	DELMG="ޤ [y/n]"
	UPDMG="񤭤ޤǤ [y/n]"
	CNIMG="󥹥ȡ³Ԥޤ [y/n]"
	CNUMG="󥤥󥹥ȡ³Ԥޤ [y/n]"
	SMG01="ʤֹϤƤ (: [Q]uit)"
	SMG02=" 򤵤ޤ"
	SMG03="¹ԤܤֹϤƤ (: [B]ack)"
	SMG04="ƥĶåƤޤ"
	SMG05="ܥ꡼Ǥϡ"
	SMG06="򥵥ݡȤƤޤ"
	SMG07="ܥ꡼ѤˤϡʲΥץåȥեबɬפǤ"
	SMG08="󥹥ȡɬפʥǥ쥯ȥ󡥡"
	SMG09="ǥ쥯ȥ̾"
	SMG10="ɬܥǥ"
	SMG11="侩ǥ"
	SMG12="ߤζ"
	SMG13="ѥå"
	SMG14=" Ƥޤ"
	SMG15=" 򥤥󥹥ȡ뤷Ƥޤ"
	SMG16="ʲΥѥåޤ"
	SMG17="ʲΥѥå󥹥ȡ뤵ޤ"
	SMG18="ʲΥѥåޤ"
	SMG19="ѥå򹹿ɬפޤ"
	SMG20="ѥåޤ"
	SMG21="󥹥ȡ뤹ѥåޤ"
	SMG22="ѥåޤ"
	WMG01="̵ͤϤޤ⤦ϤƤ"
	WMG02="ǥ쥯ȥǤϤޤ"
	WMG03="եΥѡߥåŬǤϤޤ"
	WMG04="եޤϥǥ쥯ȥ꤬ޤ"
	WMG05="եޤϥǥ쥯ȥ꤬¸ߤޤ"
	WMG06="ɬפʥѥå󥹥ȡ뤵Ƥޤ"
	WMG07="ɬפʥѥå󥹥ȡ뤵Ƥޤ"
	WMG08="[ٹ] ѥåκϡʬŪ˼Ԥޤ(symlink?)"
	WMG09="[ٹ] ǥ쥯ȥ"
	WMG10="¸ߤޤ"
	WMG11="       ǥ쥯ȥʲ˾񤭤ޤ"
	WMG12="ϥܥå󥯤Ǥ"
	WMG13="       󥹥ȡ뤬Ԥǽޤ"
	EMG01="[顼] 󥹥ȡǽʤĤޤ"
	EMG02="[顼] 򤵤줿ʾ󤬸Ĥޤ"
	EMG03="[顼] 󥹥ȡǽʥƥĤĤޤ"
	EMG04="[顼] 򤵤줿ƥľ󤬸Ĥޤ"
	EMG05="[顼] ƥĶ˲꤬ޤ"
	EMG06="[顼] ѥå򥤥󥹥ȡ뤹ˤ϶̤ʤޤ"
	EMG07="[顼] ǥ쥯ȥ뤳ȤǤޤǤ"
	EMG08="[顼] ե뤳ȤǤޤǤ"
	EMG09="[顼] եθ¤ѹ뤳ȤǤޤǤ"
	EMG10="[顼] ǥ쥯ȥǤϤޤ"
	EMG11="[顼] եΥѡߥåŬǤϤޤ"
	EMG12="[顼] եޤϥǥ쥯ȥ꤬ޤ"
	EMG13="[顼] եޤϥǥ쥯ȥ꤬¸ߤޤ"
	EMG14="[顼] ɬפʥѥå󥹥ȡ뤵Ƥޤ"
	EMG15="[顼] ɬפʥѥå󥹥ȡ뤵Ƥޤ"
	EMG16="[顼] ѥå뤳ȤǤޤǤ"
	if [ $UNAME = "Linux" ]; then
		EMG17="[顼] rpm(8)ϡơ "
	else
		EMG17="[顼] pkgrm(1M)ϡơ "
	fi
	EMG18=" ǽλޤ"
	EMG19="(̿Ūʥ顼)"
	EMG20="[顼] ѥå򥤥󥹥ȡ뤹뤳ȤǤޤǤ"
	EMG21="[顼] 顼˴ؤϡ\""
	EMG22="\" 򸫤Ƥ"
	EMG23="[顼] 󥹥ȡ뤵ƤѥåΥС󤬸Ťޤ"
	EMG96="[顼] ѥå򥤥󥹥ȡ뤷˥顼ȯޤ"
	EMG97="[顼] ѥå򥤥󥹥ȡ뤹˥顼ȯޤ"
	EMG98="[顼] ѥå򥢥󥤥󥹥ȡ뤷˥顼ȯޤ"
	EMG99="[顼] ѥå򥢥󥤥󥹥ȡ뤹˥顼ȯޤ"
	;;
*)
	LNGAG="EN"
	if [ $UNAME = "Linux" ]; then
		TITLE="GUARDIANSUITE Installer for Linux"
	else
		TITLE="GUARDIANSUITE Installer for Solaris"
	fi
	TRIAL="Trial Edition"
	TODAY=`date +%m/%d/%Y`
	ANYKY="Hit any key to continue... : "
	CNTMG="Do you want to continue? [y/n]"
	_C=`expr $COLUMNS - 6`
	HLINE=`printf "%${_C}s\n" "" | sed -e 's/ /-/g'`
	QTMSG="Quit"
	BKMSG="Back"
	ENMSG="ENTER : "
	ETMSG="Installation is finished."
	EXMSG="Installation is halted."
	UXMSG="Uninstallation is halted."
	CTMSG="To be continued."
	CRTMG="Do you want to create? [y/n]"
	DELMG="Do you want to delete? [y/n]"
	UPDMG="Do you want to overwrite? [y/n]"
	CNIMG="Continue with installation? [y/n]"
	CNUMG="Continue with uninstallation? [y/n]"
	SMG01="Enter a product number. (Default: [Q]uit)"
	SMG02=" was selected."
	SMG03="Enter a number. (Default: [B]ack)"
	SMG04="Checking system environment..."
	SMG05=""
	SMG06="is not supported in this release."
	SMG07="The following platforms are required to use this release:"
	SMG08="Directory information which is required to install..."
	SMG09="Directory name"
	SMG10="Required disk space"
	SMG11="Recommended disk space"
	SMG12="Current available space"
	SMG13="Package"
	SMG14=" is removed..."
	SMG15=" is installed..."
	SMG16="The following packages are removed :"
	SMG17="The following packages are installed :"
	SMG18="The following packages are updated :"
	SMG19="There is no updated packages."
	SMG20="There is no deleted packages."
	SMG21="There is no installed packages."
	SMG22="There is no operated packages."
	WMG01="Invalid value was entered. Please re-enter."
	WMG02="Not a directory."
	WMG03="Permission denied, unable to access file."
	WMG04="No such file or directory."
	WMG05="File or directory is already exists."
	WMG06="Required package is not installed."
	WMG07="Conflict package has been installed."
	WMG08="[WARNING] Failed to removing old package. (symlink?)"
	WMG09="[WARNING] Directory"
	WMG10="exists."
	WMG11="          NOTE: Installer OVERWRITES this directory."
	WMG12="is symbolic link."
	WMG13="          NOTE: Installer will be failed."
	EMG01="[ERROR] Installable products are not found."
	EMG02="[ERROR] Selected product information is not found."
	EMG03="[ERROR] Installable contents are not found."
	EMG04="[ERROR] Selected content information is not found."
	EMG05="[ERROR] You have some problems in system environment."
	EMG06="[ERROR] Available space is too small to install a package."
	EMG07="[ERROR] Cannot create a directory."
	EMG08="[ERROR] Cannot create a file."
	EMG09="[ERROR] Cannot change mode of a file."
	EMG10="[ERROR] Not a directory."
	EMG11="[ERROR] Permission denied to access file."
	EMG12="[ERROR] No such file or directory."
	EMG13="[ERROR] File or directory is already exists."
	EMG14="[ERROR] Required package is not installed."
	EMG15="[ERROR] Conflict package has been installed."
	EMG16="[ERROR] Cannot remove old packages."
	if [ $UNAME = "Linux" ]; then
		EMG17="[ERROR] rpm(8) exits with status "
	else
		EMG17="[ERROR] pkgrm(1M) exits with status "
	fi
	EMG18="."
	EMG19="(Fatal error)"
	EMG20="[ERROR] Cannot install new packages."
	EMG21="[ERROR] See \""
	EMG22="\" about information of errors."
	EMG23="[ERROR] Installed package's version is too old."
	EMG96="[ERROR] Error occurred, after installing packages."
	EMG97="[ERROR] Error occurred, before installing packages."
	EMG98="[ERROR] Error occurred, after removing packages."
	EMG99="[ERROR] Error occurred, before removing packages."
	;;
esac
export LNGAG TITLE TRIAL TODAY ANYKY CNTMG HLINE QTMSG BKMSG ENMSG
export ETMSG EXMSG UXMSG CTMSG CRTMG DELMG UPDMG CNIMG CNUMG
export SMG01 SMG02 SMG03 SMG04 SMG05 SMG06 SMG07 SMG08 SMG09 SMG10
export SMG11 SMG12 SMG13 SMG14 SMG15 SMG16 SMG17 SMG18 SMG19 SMG20
export SMG21 SMG22
export WMG01 WMG02 WMG03 WMG04 WMG05 WMG06 WMG07 WMG08 WMG09 WMG10
export WMG11 WMG12 WMG13
export EMG01 EMG02 EMG03 EMG04 EMG05 EMG06 EMG07 EMG08 EMG09 EMG10
export EMG11 EMG12 EMG13 EMG14 EMG15 EMG16 EMG17 EMG18 EMG19 EMG20
export EMG21 EMG22 EMG23 EMG96 EMG97 EMG98 EMG99

CPYRT="Copyright (c) 2008 Canon IT Solutions Inc."
GSROT="/opt/Guardian"
MINFO="etc/MediaInfo"
if [ -x ${SUPPORT} ]; then
    if ( ${SUPPORT} -c >/dev/null 2>&1 ); then
        PRDCT="1"
    else
        PRDCT="0"
    fi
else
    PRDCT="1"
fi
NOCHK="etc/nocheck"
ALLRM="1"
export CPYRT GSROT MINFO PRDCT NOCHK ALLRM

# export environment values for OS
#
if [ $UNAME = "Linux" ]; then
	UNAMEP="uname -m"
	UNAMES="uname -s"
	UNAMER="uname -r"
	PKGS="rpms"
	PKG_IF="rpm -q"
	PKG_RM="rpm -e --nodeps"
	PKG_SV="rpm -q --queryformat %{SUMMARY}\n%{VERSION}-%{RELEASE}\n"
	PKG_VV="rpm -q --queryformat %{VERSION}-%{RELEASE}\n"
	AWK="awk"
else
	UNAMEP="uname -p"
	UNAMES="uname -s"
	UNAMER="uname -r"
	PKGS="pkgs"
	PKG_IF="pkginfo -q"
	PKG_RM="/usr/sbin/pkgrm -a ${NOCHK} -n"
	PKG_SV="pkginfo -l"
	PKG_VV="pkginfo -l"
	AWK="nawk"
fi
export UNAMEP UNAMES UNAMER
export PKGS PKG_IF PKG_RM PKG_SV PKG_VV
export AWK

BELL=`tput bel`
CLAR=`tput clear`
REVS=`tput rev`
NRML=`tput sgr0`
BOLD=`tput bold`
SMSO=`tput smso`
RMSO=`tput rmso`
SMUL=`tput smul`
RMUL=`tput rmul`
ELEL=`tput el`
ELLL=`tput el1`
export BELL CLAR REVS NRML BOLD SMSO RMSO SMUL RMUL ELEL ELLL

XEX=0
XHM=3
XTR=4
XTL=6
XMN=12
XDT=-13
export XEX XHM XTR XTL XMN XDT

YDT=0
YL1=1
YTL=2
YCR=3
YL2=4
YTW=5
YTM=7
YST=-4
YL3=-3
YET=-2
YEX=-1
export YDT YL1 YTL YCR YL2 YTW YTM YST YL3 YET YEX

xy_cursor()
{
	if [ $1 -ge 0 ]; then
		_C=$1
	else
		_C=`expr $COLUMNS + $1`
	fi
	if [ $2 -ge 0 ]; then
		_R=$2
	else
		_R=`expr $ROWS + $2`
	fi

	tput cup $_R $_C
}

xy_display()
{
	xy_cursor $1 $2
	echo $n "$3$c"
}

puts()
{
	if [ $1 -ge 0 ]; then
		_C=`expr $1 + $XTR`
	else
		_C=`expr $1 - $XTR + 1`
	fi
	if [ $2 -ge 0 ]; then
		_R=`expr $2 + $YTW + 1`
	else
		_R=`expr $2 + $YST`
	fi

	xy_cursor $_C $_R
	echo $n "$ELEL$3$c"
}

clear_content()
{
	_Y=6
	_YMAX=`expr $ROWS - 5`
	for i in `echo $_Y $_YMAX | awk '{ for (i = $1; i <= $2; i++) print i}'`
	do
		xy_display 0 $i "${ELEL}"
	done
}

xy_error()
{
	xy_cursor $XHM $YST
	echo $n "$ELEL$SMSO$1$RMSO$c" 1>&2
	xy_cursor $XEX $YEX
}

xy_warning()
{
	xy_cursor $XHM $YST
	echo $n "$ELEL$SMSO$1$RMSO$c"
}

xy_status()
{
	xy_cursor $XHM $YST
	echo $n "$ELEL$1$c"
}

xy_prompt()
{
	if [ $# != 0 ]; then
		_T="$1"
	else
		_T="${ENMSG}"
	fi
	xy_cursor $XHM $YET
	echo $n "$ELEL$_T$c"
}

xy_homecsor()
{
	xy_cursor $XHM $YET
	echo $n "$ELEL$c"
}

dpy_banner()
{
	echo $CLAR
	if [ "$PRDCT" != "1" ]; then
		xy_display $XTR $YDT "$SMUL$TRIAL$RMUL"
	fi
	xy_display $XDT $YDT "$REVS$TODAY$NRML"
	xy_display $XHM $YL1 "$HLINE"
	xy_display $XTL $YTL "$TITLE"
	xy_display $XTL $YCR "$CPYRT"
	xy_display $XHM $YL2 "$HLINE"
	xy_display $XHM $YL3 "$HLINE"
}

read_a_char()
{
	# save the settings
	SAVEDSTTY=`stty -g`
	# set terminal raw and -echo please
#	stty cbreak
	stty raw
	stty -echo
	# read and output only one character
	# dd if=/dev/tty bs=1 count=1 >/dev/null 2>&1
	dd if=/dev/tty bs=1 count=1 2> /dev/null
	# restore terminal and restore stty
#	stty -cbreak
	stty -raw
	stty echo
	stty $SAVEDSTTY
}

get_yes_no()
{
	while true; do
		xy_prompt "$1 "
		read _ans
		case "$_ans" in
		y|Y|yes|YES|Yes)
			xy_prompt ""
			return 0
			;;
		n|N|no|NO|No)
			xy_prompt ""
			return 1
			;;
		*)
			xy_warning "${WMG01}"
			sleep 3
			xy_warning ""
			;;
		esac
	done
}

question()
{
	if [ "$4" != "" ]; then
		puts $1 $2 "$3 [$4] = "
	else
		puts $1 $2 "$3 = "
	fi
	read _ANSWER

	if [ "$_ANSWER" = "#" ]; then
		_ANSWER=""
	elif [ "$_ANSWER" = "" ]; then
		_ANSWER="$4"
	fi
}

pause()
{
	xy_prompt "${ANYKY}"
	read_a_char
}

_get_max_len()
{
	_max_len=0

	while [ $# != 0 ]; do
		_len=`expr "$1" : '.*'`
		if [ $_len -gt $_max_len ]; then
			_max_len=$_len
		fi
		shift; shift
	done

	echo $_max_len
}

listup_vars()
{
	_x=$1; shift
	_y=$1; shift

	_max=`_get_max_len "$@"`

	while [ $# != 0 ]; do
		_str=`printf "%-${_max}s = $2" "$1"`
		puts $_x $_y "$_str"
		_y=`expr $_y + 1`
		shift; shift
	done
}

is_legal_ip_address()
{
	if [ "$1" = "" ]; then
		return 1
	fi
	if [ `expr "$1" : '.*'` -ne `expr "$1" : '[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}'` ]; then
		return 1
	fi
	set -- `echo "$1" | tr '.' ' '`
	while [ $# -ne 0 ]; do
		if [ $1 -gt 255 ]; then
			return 1
		fi
		shift
	done
	return 0
}

is_avail_number()
{
	if expr "$2" + 1 >/dev/null 2>&1 ; then
		true
	else
		return 1
	fi
	if [ "$1" != '-' ] && [ "$1" -gt "$2" ]; then
		return 1
	fi
	if [ "$3" != '-' ] && [ "$2" -gt "$3" ]; then
		return 1
	fi
	return 0
}

confirm_inst()
{
	if [ "$1" != "0" ]; then
		_prompt="${CNIMG}"
		_warn="${EXMSG}"
	else
		_prompt="${CNUMG}"
		_warn="${UXMSG}"
	fi

	if get_yes_no "$_prompt" ; then
		return 0
	else
		xy_warning "$_warn"
		xy_cursor ${XEX} ${YEX}
		return 1
	fi

	return 0
}

call_functions()
{
	OLDIFS="$IFS"
	IFS=:

	for f in $*
	do
		IFS="$OLDIFS"
		$f
		RES=$?
		if [ $RES -ne 0 ]; then
			return $RES
		fi
	done

	IFS="$OLDIFS"

	return 0
}

exec_commands()
{
	OLDIFS="$IFS"
	IFS=:

	for f in $*
	do
		IFS="$OLDIFS"
		if expr "$f" : '/.*' >/dev/null; then
			true
		else
			f="bin/$f"
		fi
		$f >/dev/null 2>&1
		RES=$?
		if [ $RES -ne 0 ]; then
			return $RES
		fi
	done

	IFS="$OLDIFS"

	return 0
}
