#!/bin/bash
# kinput2ctl              by Jun Nishii <jun@vinelinux.org>
#                    Time-stamp: <2000-03-11 15:51:20 vine>

CANNARPM=Canna
WNNRPM=FreeWnn
WNN6RPM=wnn6

. /usr/share/vine/imelib

##########  Messages #############################3
ShowUsage.ja() {
cat <<EOF
  Usage:  ${1##/*/} {start|stop|canna|wnn}
      start:  kinput2 ưޤ
              (XIM_PROG 줿ǥեȤδѴФȤĤʤޤ)
      stop:   kinput2 ߤޤ
      canna:  kinput2 ưʥФ³ޤ
      wnn:    kinput2 ưWnn Ф³ޤ
EOF
}

ShowUsage.C() {
cat <<EOF
  Usage:  ${1##/*/} {start|stop|canna|wnn}
      start:  start kinput2 (default input method defined by XIM_PROG)
      stop:   stop  kinput2
      canna:  start kinput2 for canna
      wnn:    start kinput2 for wnn
EOF
}

UnknownMsg.ja(){
echo "̤ΤδѴƥबꤵƤޤ(XIM_PROG): $XIM_PROG"
}

UnknownMsg.C(){
echo "unknown XIM_PROG: $XIM_PROG"
}

KillKinput2Msg.ja(){
echo "äƤ kinput2 ߤޤ."
}

KillKinput2Msg.C(){
echo "kill currently runnning kinput2."
}

RunMsg.ja(){
echo "kinput2 ư$1 Ф³ޤ..."
}

RunMsg.C(){
echo "run kinput2 for $1..."
}

NoWnnenvrcMsg.ja(){
echo "wnnenvrc դޤ!"
echo "λޤ..."
}

NoWnnenvrcMsg.C(){
echo "Not Found wnnenvrc!"
echo "exit setup..."
}

########## end of Messages #############################3

CheckOption() {
if [ $# != 1 ] ; then
    eval ShowUsage.$LOCALE ${0##*/}
    return -1
fi
return 0
}

UnknownExit(){
eval UnknownMsg.$LOCALE
exit -1
}

StopKinput2(){
eval KillKinput2Msg.$LOCALE
killmyproc kinput2
return 0
}

isKinput2Alive(){
pid=`pidofproc kinput2`
if [ -n "$pid" ] ; then
    return 0
fi
return -1
}

Kinput2Canna(){
isCannaAlive || exit -1

eval RunMsg.$LOCALE $TARGET
kinput2 -canna -cannaserver ${CANNA_SERVER:=localhost} &
return 0
}

Kinput2Wnn6(){
isWnnAlive || exit -1

if [ -f /usr/local/lib/wnn6/ja_JP/wnnenvrc ] ; then
    WNNENVRC=/usr/local/lib/wnn6/ja_JP/wnnenvrc
elif [ -f /etc/wnn6/ja_JP/wnnenvrc ] ; then
    WNNENVRC=/etc/wnn6/ja_JP/wnnenvrc
else
    eval NoWnnenvrcMsg.$LOCALE
    exit -1
fi
eval RunMsg.$LOCALE $TARGET
kinput2 -wnn -jserver ${WNN6_SERVER:=localhost} -wnnenvrc6 $WNNENVRC &
return 0
}

Kinput2FreeWnn(){
isWnnAlive || exit -1

if [ -f /etc/FreeWnn/ja/wnnenvrc ] ; then
    WNNENVRC=/etc/FreeWnn/ja/wnnenvrc
else
    eval NoWnnenvrcMsg.$LOCALE
    exit -1
fi

eval RunMsg.$LOCALE FreeWnn
kinput2 -wnn -jserver ${JSERVER:=localhost} -wnnenvrc4 $WNNENVRC &
return 0
}

Kinput2(){

isKinput2Alive && StopKinput2

case "$TARGET" in
	canna) Kinput2Canna ;;
	wnn6)  Kinput2Wnn6  ;;
	FreeWnn)  Kinput2FreeWnn  ;;
	wnn)
	    if Wnn6Exists ; then
		WNNTAG=wnn6
	    elif FreeWnnExists ; then
		WNNTAG=FreeWnn
	    else
		eval NoIMMsg.$LOCALE
		return -1
	    fi

	    case "$WNNTAG" in
		wnn6) Kinput2Wnn6 ;;
		FreeWnn) Kinput2FreeWnn ;;
	    esac
	    ;;
esac
return 0
}

setLocale
CheckOption $* || exit -1
CheckXIMStatus || UnknownExit

for arg in $* ; do
    case $arg in
	start) 	TARGET=${STATUS}
		;;
	stop)	StopKinput2
		exit 0
		;;
	canna|Canna|CANNA)
		TARGET=canna
		;;
	wnn|Wnn|WNN)
		TARGET=wnn
		;;
	wnn6|Wnn6|WNN6)
		TARGET=wnn6
		;;
	FreeWnn|freewnn|wnn4|Wnn4)
		TARGET=FreeWnn
		;;
	*)
		eval ShowUsage.$LOCALE; exit -1;;
    esac
done

Kinput2 && echo "ok"

exit 0
