#!/bin/sh
#
# name    : Frenzy language setup
# version : 0.1
# author  : Mozhaisky Sergei (technix@frenzy.org.ua)
#

# path
P="/etc"
F_CSHRC="${P}/csh.cshrc"
F_PROFILE="${P}/profile"
F_RC="${P}/rc.conf"
F_TTYS="${P}/ttys"
F_XORG_KEYMAP="${P}/X11/.xorg.keymap"
XXKBRC="/root/.xxkbrc"
FLUXMENU="/root/.fluxbox/menu"

# vars
SL=$1
X_SCRNMAP="NO"
X_FONT="NO"
X_KEYMAP="NO"
X_XORG_KEYMAP="us"

SUPLANG="bg cs/cz de en es fr it pl ru sk ua "

###
set_tty()
{
case $1 in
ISO-8859-1|ISO-8859-15)
X_TTY="cons25l1"
;;
ISO-8859-2)
X_TTY="cons25l2"
;;
ISO-8859-7)
X_TTY="cons25l7"
;;
KOI8-R)
X_TTY="cons25r"
;;
KOI8-U)
X_TTY="cons25u"
;;
US-ASCII)
X_TTY="cons25w"
;;
*)
X_TTY="cons25"
;;
esac
}

###
set_font()
{
case $1 in
ISO-8859-1)
X_FONT="iso"
;;
ISO-8859-15)
X_FONT="iso15"
;;
ISO-8859-2)
X_FONT="iso02"
;;
ISO-8859-7)
X_FONT="iso07"
;;
KOI8-R)
#X_FONT="cp866"
X_FONT="866-frenzy"
X_SCRNMAP="koi8-r2cp866"
;;
KOI8-U)
#X_FONT="cp866u"
X_FONT="866-frenzy"
X_SCRNMAP="koi8-u2cp866u"
;;
US-ASCII)
X_FONT="iso"
;;
*)
X_FONT="cp437"
;;
esac
}

###
set_lang ()
{
case $1 in
# Bulgarian
bg)
X_LANG="cs_CZ.ISO8859-2"
X_MM_CHARSET="ISO-8859-2"
X_KEYMAP="bg.bds.ctrlcaps"
X_XORG_KEYMAP="bg"
;;
# Czech
cz|cs)
X_LANG="cs_CZ.ISO8859-2"
X_MM_CHARSET="ISO-8859-2"
X_KEYMAP="cz.iso2"
X_XORG_KEYMAP="cz"
;;
# German
de)
X_LANG="de_DE.ISO8859-1"
X_MM_CHARSET="ISO-8859-1"
X_KEYMAP="german.iso"
X_XORG_KEYMAP="de"
;;
# English
en)
;;
# Spanish
es)
X_LANG="es_ES.ISO8859-1"
X_MM_CHARSET="ISO-8859-1"
X_KEYMAP="spanish.iso"
X_XORG_KEYMAP="es"
;;
# French
fr)
X_LANG="fr_FR.ISO8859-1"
X_MM_CHARSET="ISO-8859-1"
X_KEYMAP="fr.iso"
X_XORG_KEYMAP="fr"
;;
# Italian
it)
X_LANG="it_IT.ISO8859-1"
X_MM_CHARSET="ISO-8859-1"
X_KEYMAP="it.iso"
X_XORG_KEYMAP="it"
;;
# Polski
pl)
X_LANG="pl_PL.ISO8859-2"
X_MM_CHARSET="ISO-8859-2"
X_KEYMAP="pl_PL.ISO8859-2"
X_XORG_KEYMAP="pl"
;;
# Russian
ru)
X_LANG="ru_RU.KOI8-R"
X_MM_CHARSET="KOI8-R"
X_KEYMAP="ru.koi8-r.win"
X_SCRNMAP="koi8-r2cp866"
X_XORG_KEYMAP="ru(winkeys)"
;;
# Slovak
sk)
X_LANG="sk_SK.ISO8859-2"
X_MM_CHARSET="ISO-8859-2"
X_KEYMAP="sk.iso2"
X_XORG_KEYMAP="sk"
;;
# Ukrainian
ua)
X_LANG="uk_UA.KOI8-U"
X_MM_CHARSET="KOI8-U"
X_KEYMAP="ua.koi8-u"
X_SCRNMAP="koi8-u2cp866u"
X_XORG_KEYMAP="ua(winkeys)"
;;
esac
}

### MAIN ###

if [ -z ${SL} ]; then
prog=`basename $0`
echo "Usage: $prog language"
echo "Supported languages: $SUPLANG"
exit
fi

# set new variables
set_lang ${SL}
set_tty ${X_MM_CHARSET}
set_font ${X_MM_CHARSET}

if [ ${X_FONT} != "NO" ]; then
X_FONT="${X_FONT}-8x16"
fi

DATENOW=`date "+%Y-%m-%d %H:%M:%S"`

# set language
if [ -n "${X_LANG}" ]; then
printf "
### locale # ${DATENOW} #
setenv LANG ${X_LANG}
setenv MM_CHARSET ${X_MM_CHARSET}
" >> ${F_CSHRC}
printf "
### locale # ${DATENOW} #
LANG=${X_LANG}; export LANG
MM_CHARSET=${X_MM_CHARSET}; export MM_CHARSET
" >> ${F_PROFILE}
fi

# patching rc.conf
printf "
### locale # ${DATENOW} #
keymap=\"${X_KEYMAP}\"
font8x16=\"${X_FONT}\"
scrnmap=\"${X_SCRNMAP}\"
" >> ${F_RC}

# patching ttys
TTY_C=`cat ${F_TTYS} | grep ttyv0 | awk '{print $4}'`
cp ${F_TTYS} ${F_TTYS}.tmpL
cat ${F_TTYS}.tmpL | sed "s/[[:<:]]${TTY_C}[[:>:]]/${X_TTY}/g" > ${F_TTYS}
rm ${F_TTYS}.tmpL

# create Xorg keyboard info
if [ "$X_XORG_KEYMAP" != "us" ]; then
X_XORG_KEYMAP="us,${X_XORG_KEYMAP}"
fi
printf "$X_XORG_KEYMAP" > ${F_XORG_KEYMAP}


if [ -e "${XXKBRC}" ]; then
# patch .xxkbrc
XL="${SL}"
if [ "${XL}" = "cs" ]; then
XL="cz"
fi

if [ "${XL}" != "en" ]; then
XSTRING=`cat ${XXKBRC} | grep "image.2" | grep "${SL}_16.xpm" | sed s/\!/\\\!/`
ZSTRING=`echo ${XSTRING} | sed "s/\! //"`
cat ${XXKBRC} | sed "s/${XSTRING}/${ZSTRING}/" > ${XXKBRC}.NEW
mv ${XXKBRC}.NEW ${XXKBRC}
fi
fi

if [ -e "${FLUXMENU}" ]; then
# patch fluxbox menu
if [ "${XL}" = "ru" ]; then
cp ${FLUXMENU}.ru ${FLUXMENU}
elif [ "${XL}" = "ua" ]; then
cp ${FLUXMENU}.ru ${FLUXMENU}
else
cp ${FLUXMENU}.en ${FLUXMENU}
fi
fi

exit 




