#!/bin/bash

function fix_keysym {
    FIXED_KEYSYM=${1//+/__PLUS__}
    FIXED_KEYSYM=${FIXED_KEYSYM//-/__MINUS__}
}

unset MODKEY DEFKEY
exec <evdev_key_c_old.txt
IFS_save=$IFS
IFS="${IFS},"
while read LC NUM RC KEY1 KEY2 COMMENT ; do
    DEFKEY[$NUM]=${KEY1%,}
    MODKEY[$NUM]=${KEY2%,}
done
IFS=$IFS_save

exec <input_linux_map_fixed.txt
exec >evdev_key_c_table.txt
unset ${!ED2X_*}
while read KEYNAME KEYNUM EVDEVSYM XNAME ; do
    if test "${KEYNAME:0:1}" = \" ; then
	KEYNUM=${KEYNUM//\"}
	KEYNAME=${KEYNAME//\"}
	XNAME=${XNAME//\"}
	ED2X_KEYNAME[$KEYNUM]=$KEYNAME
	ED2X_XNAME[$KEYNUM]=$XNAME
    fi
done

for (( i=0 ; i<512 ; i++ )) ; do
    XK=XK_${ED2X_XNAME[$i]}
    XK=${XK/XK_XF86/XF86XK}
    XK=${XK/XK_Sun/SunXK}
    XK=${XK/XK_ap/apXK}
    KEYNAME=${ED2X_KEYNAME[$i]}
    if test "$XK" = XK_ ; then
	XK=NoSymbol
	KEYNAME="not assigned"
    fi
    if test $i -ge 256 ; then
	SPAC1=" "
    else
	SPAC1="  "
    fi
    if test $i -lt 128 ; then
	# Map NumPad specially
	if test "$XK" != "${XK#XK_KP_}" ; then
	    XK=${DEFKEY[$i]}
	fi
	SPAC2="			"
	SPAC2=${SPAC2:0:2-(${#XK}+1)/8}
	SPAC3="			"
	SPAC3=${SPAC3:0:2-(${#MODKEY[$i]}+1)/8}
	echo "    /* $(printf 0x%02x $i) */	$XK,$SPAC2${MODKEY[$i]},$SPAC3/* $KEYNAME */"
    else
	SPAC2="			"
	SPAC2=${SPAC2:0:3-(${#XK}+1)/8}
	echo "    /* $(printf 0x%02x $i) */	$XK,$SPAC2/* $KEYNAME */"
    fi
done
