#!/bin/sh -e

PROG="${0##*/}" #program name

. /etc/sysconfig/i18n

lang2keymap=/usr/share/predator/lang2keymap
keymapnames=/usr/share/predator/keymapnames
kbd_conf=/etc/sysconfig/kbd

CONTRY=${LANG%%\.*}

print_version()
{
	cat <<EOF
$PROG version 0.0.1

Written by Stanislav Ievlev

Copyright (C) 2004 ALT Linux Team
EOF
	exit
}

print_usage()
{
	[ "$1" = 0 ] || exec >&2
	cat <<EOF
Usage: $PROG [options]
or: $PROG --get
or: $PROG --set <mapping-name>
utility to made general (both for X11 and console) keyboard settings

Valid options are:
  -h, --help	display help screen
  -v, --version	display version information
  -g, --get-type get current keyboard map
  -s, --set	set keyboard map to new value
  -l, --list	list of the all possible keyboard maps 

Report bugs to <inger@altlinux.org>
EOF
	[ -n "$1" ] && exit "$1" || exit
}

list_keyboards()
{
    for index in $(cat $lang2keymap|grep "^$CONTRY"|cut -f2| sed 's/,/ /g')
    do
	cat $keymapnames|grep "^$index[[:space:]]"
    done
}

#TODO: move to general predator-common
add_or_subst()
{
    if grep -qs "^$1=" $3 2>/dev/null; then
	subst "s,^$1=.*,$1=$2," $3
    else
	echo "$1=$2" >>$3
    fi
}

set_kbd()
{
    mkdir -p /etc/sysconfig ||:
    if cat $keymapnames|grep -qs "^$1[[:space:]]"; then
	add_or_subst "LAYOUT" "$1" $kbd_conf
    else
	echo "unsupported keyboard type"
	exit 1
    fi
}

TEMP=`getopt -n $PROG -o h,v,l,g,s: -l help,version,list,get-type,set: -- "$@"` || print_usage
eval set -- "$TEMP"

while :; do
	case "$1" in
		-h|--help) print_usage 0
			;;
		-v|--version) print_version
			;;
		-l|--list) list_keyboards; break;
			;;
		-g|--get-type)
			cat $kbd_conf 2>/dev/null |grep  '^LAYOUT='|sed 's,^LAYOUT=,,' ||:;
			break
			;;
		-s|--set)shift; set_kbd $1; break;
			;;
		--) shift; break
			;;
		*) Fatal "unrecognized option: $1"
			;;
	esac
	shift
done
