diff -ruN xf86-input-keyboard-1.2.0/Makefile.in xf86-input-keyboard/Makefile.in
--- xf86-input-keyboard-1.2.0/Makefile.in	2006-11-01 22:19:32.000000000 +0000
+++ xf86-input-keyboard/Makefile.in	2007-09-03 10:36:18.000000000 +0000
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.10 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -33,15 +33,11 @@
 #  ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 #  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -55,17 +51,17 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
+subdir = .
 DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
 	$(top_srcdir)/configure COPYING ChangeLog config.guess \
 	config.sub depcomp install-sh ltmain.sh missing
-subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
+ configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES =
@@ -73,10 +69,13 @@
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	html-recursive info-recursive install-data-recursive \
-	install-exec-recursive install-info-recursive \
-	install-recursive installcheck-recursive installdirs-recursive \
-	pdf-recursive ps-recursive uninstall-info-recursive \
-	uninstall-recursive
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -94,8 +93,6 @@
 ACLOCAL = @ACLOCAL@
 ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
 ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 APP_MAN_DIR = @APP_MAN_DIR@
 APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
@@ -104,8 +101,6 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BSD_FALSE = @BSD_FALSE@
-BSD_TRUE = @BSD_TRUE@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -132,8 +127,7 @@
 FILE_MAN_DIR = @FILE_MAN_DIR@
 FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
 GREP = @GREP@
-HURD_FALSE = @HURD_FALSE@
-HURD_TRUE = @HURD_TRUE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -144,16 +138,13 @@
 LIBTOOL = @LIBTOOL@
 LIB_MAN_DIR = @LIB_MAN_DIR@
 LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LINUX_FALSE = @LINUX_FALSE@
-LINUX_TRUE = @LINUX_TRUE@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 MISC_MAN_DIR = @MISC_MAN_DIR@
 MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -164,23 +155,20 @@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
-SCO_FALSE = @SCO_FALSE@
-SCO_TRUE = @SCO_TRUE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
-SOLARIS_FALSE = @SOLARIS_FALSE@
-SOLARIS_TRUE = @SOLARIS_TRUE@
 STRIP = @STRIP@
 VERSION = @VERSION@
 XORG_CFLAGS = @XORG_CFLAGS@
 XORG_LIBS = @XORG_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -192,6 +180,7 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
@@ -220,8 +209,11 @@
 psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 SUBDIRS = src man
 all: config.h
@@ -265,7 +257,7 @@
 config.h: stamp-h1
 	@if test ! -f $@; then \
 	  rm -f stamp-h1; \
-	  $(MAKE) stamp-h1; \
+	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
 	else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@@ -287,7 +279,6 @@
 
 distclean-libtool:
 	-rm -f libtool
-uninstall-info-am:
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -320,8 +311,7 @@
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
 
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
+$(RECURSIVE_CLEAN_TARGETS):
 	@failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
@@ -423,23 +413,22 @@
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
-	mkdir $(distdir)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	test -d $(distdir) || mkdir $(distdir)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
 	    fi; \
@@ -453,7 +442,7 @@
 	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test -d "$(distdir)/$$subdir" \
-	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
 	    || exit 1; \
 	    distdir=`$(am__cd) $(distdir) && pwd`; \
 	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
@@ -461,6 +450,8 @@
 	      $(MAKE) $(AM_MAKEFLAGS) \
 	        top_distdir="$$top_distdir" \
 	        distdir="$$distdir/$$subdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
@@ -468,7 +459,7 @@
 	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
 	|| chmod -R a+r $(distdir)
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
@@ -543,7 +534,7 @@
 	$(am__remove_distdir)
 	@(echo "$(distdir) archives ready for distribution: "; \
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
 	@cd $(distuninstallcheck_dir) \
 	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
@@ -613,12 +604,20 @@
 
 install-data-am:
 
+install-dvi: install-dvi-recursive
+
 install-exec-am:
 
+install-html: install-html-recursive
+
 install-info: install-info-recursive
 
 install-man:
 
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -639,24 +638,26 @@
 
 ps-am:
 
-uninstall-am: uninstall-info-am
+uninstall-am:
 
-uninstall-info: uninstall-info-recursive
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+	install-strip
 
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
-	check-am clean clean-generic clean-libtool clean-recursive \
-	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-shar dist-tarZ dist-zip distcheck distclean \
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-generic \
+	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+	dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
 	distclean-generic distclean-hdr distclean-libtool \
-	distclean-recursive distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am install-man \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	maintainer-clean-recursive mostlyclean mostlyclean-generic \
-	mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am uninstall-info-am
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff -ruN xf86-input-keyboard-1.2.0/configure.ac xf86-input-keyboard/configure.ac
--- xf86-input-keyboard-1.2.0/configure.ac	2006-11-01 22:16:54.000000000 +0000
+++ xf86-input-keyboard/configure.ac	2007-09-03 10:34:00.000000000 +0000
@@ -22,7 +22,7 @@
 
 AC_PREREQ(2.57)
 AC_INIT([xf86-input-keyboard],
-        1.2.0,
+        1.2.1,
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         xf86-input-keyboard)
 
diff -ruN xf86-input-keyboard-1.2.0/depcomp xf86-input-keyboard/depcomp
--- xf86-input-keyboard-1.2.0/depcomp	2006-11-01 22:19:31.000000000 +0000
+++ xf86-input-keyboard/depcomp	2007-09-03 10:36:18.000000000 +0000
@@ -1,9 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2005-07-09.11
+scriptversion=2006-10-15.18
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
+# Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -91,7 +92,20 @@
 ## gcc 3 implements dependency tracking that does exactly what
 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
 ## it if -MD -MP comes after the -MF stuff.  Hmm.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
   stat=$?
   if test $stat -eq 0; then :
   else
@@ -276,6 +290,46 @@
   rm -f "$tmpdepfile"
   ;;
 
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
@@ -288,13 +342,13 @@
 
    if test "$libtool" = yes; then
       # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
+      # static library.  This mechanism is used in libtool 1.4 series to
       # handle both shared and static libraries in a single compilation.
       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
       #
       # With libtool 1.5 this exception was removed, and libtool now
       # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
+      # compilations output dependencies in $dir.libs/$base.o.d and
       # in $dir$base.o.d.  We have to check for both files, because
       # one of the two compilations can be disabled.  We should prefer
       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
diff -ruN xf86-input-keyboard-1.2.0/install-sh xf86-input-keyboard/install-sh
--- xf86-input-keyboard-1.2.0/install-sh	2006-11-01 22:19:31.000000000 +0000
+++ xf86-input-keyboard/install-sh	2007-09-03 10:36:18.000000000 +0000
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2005-05-14.22
+scriptversion=2006-10-14.15
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -39,15 +39,24 @@
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
 
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
 doit="${DOITPROG-}"
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
-# put in absolute paths if you don't have them in your path; or use env. vars.
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
 
 mvprog="${MVPROG-mv}"
 cpprog="${CPPROG-cp}"
@@ -58,7 +67,13 @@
 rmprog="${RMPROG-rm}"
 mkdirprog="${MKDIRPROG-mkdir}"
 
-chmodcmd="$chmodprog 0755"
+posix_glob=
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chmodcmd=$chmodprog
 chowncmd=
 chgrpcmd=
 stripcmd=
@@ -95,7 +110,7 @@
   CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
 "
 
-while test -n "$1"; do
+while test $# -ne 0; do
   case $1 in
     -c) shift
         continue;;
@@ -111,9 +126,15 @@
 
     --help) echo "$usage"; exit $?;;
 
-    -m) chmodcmd="$chmodprog $2"
+    -m) mode=$2
         shift
         shift
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
         continue;;
 
     -o) chowncmd="$chownprog $2"
@@ -136,25 +157,33 @@
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    *)  # When -d is used, all remaining arguments are directories to create.
-	# When -t is used, the destination is already specified.
-	test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-	for arg
-	do
-          if test -n "$dstarg"; then
-	    # $@ is not empty: it contains at least $arg.
-	    set fnord "$@" "$dstarg"
-	    shift # fnord
-	  fi
-	  shift # arg
-	  dstarg=$arg
-	done
+    --)	shift
 	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
   esac
 done
 
-if test -z "$1"; then
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dstarg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dstarg"
+      shift # fnord
+    fi
+    shift # arg
+    dstarg=$arg
+  done
+fi
+
+if test $# -eq 0; then
   if test -z "$dir_arg"; then
     echo "$0: no input file specified." >&2
     exit 1
@@ -164,6 +193,33 @@
   exit 0
 fi
 
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
 for src
 do
   # Protect names starting with `-'.
@@ -173,15 +229,11 @@
 
   if test -n "$dir_arg"; then
     dst=$src
-    src=
-
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
   else
+
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
     # might cause directories to be created, which would be especially bad
     # if $src (and thus $dsttmp) contains '*'.
@@ -208,53 +260,188 @@
 	echo "$0: $dstarg: Is a directory" >&2
 	exit 1
       fi
-      dst=$dst/`basename "$src"`
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
     fi
   fi
 
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
-  # Make sure that the destination directory exists.
+  obsolete_mkdir_used=false
 
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-	 '
-    IFS="${IFS-$defaultIFS}"
-
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
 
-    pathcomp=
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
 
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix=/ ;;
+	-*) prefix=./ ;;
+	*)  prefix= ;;
+      esac
+
+      case $posix_glob in
+        '')
+	  if (set -f) 2>/dev/null; then
+	    posix_glob=true
+	  else
+	    posix_glob=false
+	  fi ;;
+      esac
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob && set -f
+      set fnord $dstdir
       shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-	# mkdir can fail with a `File exist' error in case several
-	# install-sh are creating the directory concurrently.  This
-	# is OK.
-	test -d "$pathcomp" || exit
+      $posix_glob && set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
-      pathcomp=$pathcomp/
-    done
+    fi
   fi
 
   if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
   else
-    dstfile=`basename "$dst"`
 
     # Make a couple of temp file names in the proper directory.
     dsttmp=$dstdir/_inst.$$_
@@ -262,10 +449,9 @@
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-    trap '(exit $?); exit' 1 2 13 15
 
     # Copy the file name to the temp name.
-    $doit $cpprog "$src" "$dsttmp" &&
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
 
     # and set any options; do chmod last to preserve setuid bits.
     #
@@ -276,10 +462,10 @@
     { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
       && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
       && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
 
     # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
       || {
 	   # The rename failed, perhaps because mv can't rename something else
 	   # to itself, or perhaps because mv is so ancient that it does not
@@ -291,11 +477,12 @@
 	   # reasons.  In this case, the final cleanup might fail but the new
 	   # file should still install successfully.
 	   {
-	     if test -f "$dstdir/$dstfile"; then
-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	     if test -f "$dst"; then
+	       $doit $rmcmd -f "$dst" 2>/dev/null \
+	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
+		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
 	       || {
-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 echo "$0: cannot unlink or rename $dst" >&2
 		 (exit 1); exit 1
 	       }
 	     else
@@ -304,16 +491,13 @@
 	   } &&
 
 	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	   $doit $mvcmd "$dsttmp" "$dst"
 	 }
-    }
-  fi || { (exit 1); exit 1; }
-done
+    } || exit 1
 
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit 0
-}
+    trap '' 0
+  fi
+done
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
diff -ruN xf86-input-keyboard-1.2.0/ltmain.sh xf86-input-keyboard/ltmain.sh
--- xf86-input-keyboard-1.2.0/ltmain.sh	2006-06-19 18:36:49.000000000 +0000
+++ xf86-input-keyboard/ltmain.sh	2007-06-26 19:45:46.000000000 +0000
@@ -1,8 +1,8 @@
 # ltmain.sh - Provide generalized library-building support services.
 # NOTE: Changing this file will not affect anything until you rerun configure.
 #
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007  Free Software Foundation, Inc.
 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
 # This program is free software; you can redistribute it and/or modify
@@ -43,14 +43,22 @@
 
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION="1.5.22 Debian 1.5.22-4"
-TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
+VERSION=1.5.24
+TIMESTAMP=" (1.1220.2.455 2007/06/24 02:13:29)"
 
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes.
-if test -n "${ZSH_VERSION+set}" ; then
+# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
 fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
 
 # Check that we have a working $echo.
 if test "X$1" = X--no-reexec; then
@@ -105,12 +113,14 @@
 # These must not be set unconditionally because not all systems understand
 # e.g. LANG=C (notably SCO).
 # We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
-  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
-  save_LANG="$LANG"; LANG=C; export LANG
-fi
+for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+	  save_$lt_var=\$$lt_var
+	  $lt_var=C
+	  export $lt_var
+	fi"
+done
 
 # Make sure IFS has a sensible default
 lt_nl='
@@ -136,6 +146,8 @@
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
 
 #####################################
 # Shell function definitions:
@@ -196,7 +208,13 @@
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
       $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
       win32_nmres=`eval $NM -f posix -A $1 | \
-	$SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
+	$SED -n -e '1,100{
+		/ I /{
+			s,.*,import,
+			p
+			q
+			}
+		}'`
       case $win32_nmres in
       import*)  win32_libid_type="x86 archive import";;
       *)        win32_libid_type="x86 archive static";;
@@ -327,7 +345,17 @@
 	*) my_xabs=`pwd`"/$my_xlib" ;;
       esac
       my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
-      my_xdir="$my_gentop/$my_xlib"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  extracted_serial=`expr $extracted_serial + 1`
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
 
       $show "${rm}r $my_xdir"
       $run ${rm}r "$my_xdir"
@@ -454,11 +482,12 @@
     ;;
 
   --version)
-    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-    $echo
-    $echo "Copyright (C) 2005  Free Software Foundation, Inc."
-    $echo "This is free software; see the source for copying conditions.  There is NO"
-    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+    echo "\
+$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
+
+Copyright (C) 2007  Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
     exit $?
     ;;
 
@@ -755,9 +784,10 @@
     *.class) xform=class ;;
     *.cpp) xform=cpp ;;
     *.cxx) xform=cxx ;;
-    *.f90) xform=f90 ;;
+    *.[fF][09]?) xform=[fF][09]. ;;
     *.for) xform=for ;;
     *.java) xform=java ;;
+    *.obj) xform=obj ;;
     esac
 
     libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
@@ -1138,8 +1168,9 @@
     for arg
     do
       case $arg in
-      -all-static | -static)
-	if test "X$arg" = "X-all-static"; then
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
 	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
 	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
 	  fi
@@ -1147,12 +1178,20 @@
 	    dlopen_self=$dlopen_self_static
 	  fi
 	  prefer_static_libs=yes
-	else
+	  ;;
+	-static)
 	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
 	    dlopen_self=$dlopen_self_static
 	  fi
 	  prefer_static_libs=built
-	fi
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
 	build_libtool_libs=no
 	build_old_libs=yes
 	break
@@ -1600,7 +1639,7 @@
 	continue
 	;;
 
-     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
 	compiler_flags="$compiler_flags $arg"
 	compile_command="$compile_command $arg"
 	finalize_command="$finalize_command $arg"
@@ -1620,10 +1659,11 @@
       # -m* pass through architecture-specific compiler args for GCC
       # -m*, -t[45]*, -txscale* pass through architecture-specific
       # compiler args for GCC
-      # -pg pass through profiling flag for GCC
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
       # @file GCC response files
-      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
-      -t[45]*|-txscale*|@*)
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
 
 	# Unknown arguments in both finalize_command and compile_command need
 	# to be aesthetically quoted because they are evaled later.
@@ -1651,9 +1691,9 @@
 
       -no-install)
 	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
 	  # The PATH hackery in wrapper scripts is required on Windows
-	  # in order for the loader to find any dlls it needs.
+	  # and Darwin in order for the loader to find any dlls it needs.
 	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
 	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
 	  fast_install=no
@@ -1712,7 +1752,7 @@
 	continue
 	;;
 
-      -static)
+      -static | -static-libtool-libs)
 	# The effects of -static are defined in a previous loop.
 	# We used to do the same as -all-static on platforms that
 	# didn't have a PIC flag, but the assumption that the effects
@@ -2082,10 +2122,7 @@
 	case $pass in
 	dlopen) libs="$dlfiles" ;;
 	dlpreopen) libs="$dlprefiles" ;;
-	link)
-	  libs="$deplibs %DEPLIBS%"
-	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
-	  ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
 	esac
       fi
       if test "$pass" = dlopen; then
@@ -2097,7 +2134,7 @@
 	lib=
 	found=no
 	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
 	  if test "$linkmode,$pass" = "prog,link"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
@@ -2493,7 +2530,9 @@
 
 	if test "$linkmode,$pass" = "prog,link"; then
 	  if test -n "$library_names" &&
-	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	     { { test "$prefer_static_libs" = no ||
+		 test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	       test -z "$old_library"; }; then
 	    # We need to hardcode the library path
 	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
 	      # Make sure the rpath contains only unique directories.
@@ -3189,7 +3228,7 @@
 	  # which has an extra 1 added just for fun
 	  #
 	  case $version_type in
-	  darwin|linux|osf|windows)
+	  darwin|linux|osf|windows|none)
 	    current=`expr $number_major + $number_minor`
 	    age="$number_minor"
 	    revision="$number_revision"
@@ -3200,14 +3239,10 @@
 	    age="0"
 	    ;;
 	  irix|nonstopux)
-	    current=`expr $number_major + $number_minor - 1`
+	    current=`expr $number_major + $number_minor`
 	    age="$number_minor"
 	    revision="$number_minor"
-	    ;;
-	  *)
-	    $echo "$modename: unknown library version type \`$version_type'" 1>&2
-	    $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-	    exit $EXIT_FAILURE
+	    lt_irix_increment=no
 	    ;;
 	  esac
 	  ;;
@@ -3266,7 +3301,8 @@
 	  versuffix="$major.$age.$revision"
 	  # Darwin ld doesn't like 0 for these options...
 	  minor_current=`expr $current + 1`
-	  verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
 	  ;;
 
 	freebsd-aout)
@@ -3280,8 +3316,11 @@
 	  ;;
 
 	irix | nonstopux)
-	  major=`expr $current - $age + 1`
-
+	  if test "X$lt_irix_increment" = "Xno"; then
+	    major=`expr $current - $age`
+	  else
+	    major=`expr $current - $age + 1`
+	  fi
 	  case $version_type in
 	    nonstopux) verstring_prefix=nonstopux ;;
 	    *)         verstring_prefix=sgi ;;
@@ -3418,11 +3457,11 @@
       fi
 
       # Eliminate all temporary directories.
-      for path in $notinst_path; do
-	lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
-	deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
-	dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
-      done
+      #for path in $notinst_path; do
+      #	lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
+      #	deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
+      #	dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
+      #done
 
       if test -n "$xrpath"; then
 	# If the user specified any rpath flags, then add them.
@@ -3523,13 +3562,12 @@
 	  int main() { return 0; }
 EOF
 	  $rm conftest
-	  $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
-	  if test "$?" -eq 0 ; then
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
 	    ldd_output=`ldd conftest`
 	    for i in $deplibs; do
 	      name=`expr $i : '-l\(.*\)'`
 	      # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" -ne "0"; then
+              if test "$name" != "" && test "$name" != "0"; then
 		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		  case " $predeps $postdeps " in
 		  *" $i "*)
@@ -3568,9 +3606,7 @@
 	      # If $name is empty we are operating on a -L argument.
               if test "$name" != "" && test "$name" != "0"; then
 		$rm conftest
-		$LTCC $LTCFLAGS -o conftest conftest.c $i
-		# Did it work?
-		if test "$?" -eq 0 ; then
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
 		  ldd_output=`ldd conftest`
 		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		    case " $predeps $postdeps " in
@@ -3602,7 +3638,7 @@
 		  droppeddeps=yes
 		  $echo
 		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
-		  $echo "***  make it link in!  You will probably need to install it or some"
+		  $echo "*** make it link in!  You will probably need to install it or some"
 		  $echo "*** library that it depends on before this library will be fully"
 		  $echo "*** functional.  Installing it before continuing would be even better."
 		fi
@@ -3888,7 +3924,10 @@
 	     test -n "$hardcode_libdirs"; then
 	    libdir="$hardcode_libdirs"
 	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	      case $archive_cmds in
+	      *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
+	      *)      eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
+	      esac
 	    else
 	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
 	    fi
@@ -4247,12 +4286,14 @@
       reload_conv_objs=
       gentop=
       # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
       wl=
 
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
-	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
 	else
 	  gentop="$output_objdir/${obj}x"
 	  generated="$generated $gentop"
@@ -4700,16 +4741,16 @@
           case $host in
           *cygwin* | *mingw* )
             if test -f "$output_objdir/${outputname}.def" ; then
-              compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
-              finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+              compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
+              finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
             else
-              compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-              finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+              compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+              finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
              fi
             ;;
           * )
-            compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-            finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+            compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
+            finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
             ;;
           esac
 	  ;;
@@ -4724,13 +4765,13 @@
 	# really was required.
 
 	# Nullify the symbol file.
-	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
+	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
       fi
 
       if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
 	# Replace the output file specification.
-	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
 	link_command="$compile_command$compile_rpath"
 
 	# We have no uninstalled library dependencies, so finalize right now.
@@ -4817,7 +4858,7 @@
 	if test "$fast_install" != no; then
 	  link_command="$finalize_var$compile_command$finalize_rpath"
 	  if test "$fast_install" = yes; then
-	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
 	  else
 	    # fast_install is set to needless
 	    relink_command=
@@ -4854,7 +4895,7 @@
 	  fi
 	done
 	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+	relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
       fi
 
       # Quote $echo for shipping.
@@ -5261,6 +5302,20 @@
 Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
+# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE).
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
 # The HP-UX ksh and POSIX shell print the target directory to stdout
 # if CDPATH is set.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
@@ -5403,7 +5458,7 @@
 	  ;;
 	esac
 	$echo >> $output "\
-      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+      \$echo \"\$0: cannot exec \$program \$*\"
       exit $EXIT_FAILURE
     fi
   else
@@ -5589,7 +5644,7 @@
       done
       # Quote the link command for shipping.
       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
       if test "$hardcode_automatic" = yes ; then
 	relink_command=
       fi
@@ -5934,9 +5989,9 @@
 
 	  if test -n "$inst_prefix_dir"; then
 	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	    relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
 	  else
-	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	    relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
 	  fi
 
 	  $echo "$modename: warning: relinking \`$file'" 1>&2
@@ -6145,7 +6200,7 @@
 	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
 	      outputname="$tmpdir/$file"
 	      # Replace the output file specification.
-	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+	      relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
 
 	      $show "$relink_command"
 	      if $run eval "$relink_command"; then :
@@ -6356,8 +6411,10 @@
 	if test -f "$dir/$objdir/$dlname"; then
 	  dir="$dir/$objdir"
 	else
-	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-	  exit $EXIT_FAILURE
+	  if test ! -f "$dir/$dlname"; then
+	    $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
 	fi
 	;;
 
@@ -6421,12 +6478,12 @@
       fi
 
       # Restore saved environment variables
-      if test "${save_LC_ALL+set}" = set; then
-	LC_ALL="$save_LC_ALL"; export LC_ALL
-      fi
-      if test "${save_LANG+set}" = set; then
-	LANG="$save_LANG"; export LANG
-      fi
+      for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+		$lt_var=\$save_$lt_var; export $lt_var
+	      fi"
+      done
 
       # Now prepare to actually exec the command.
       exec_cmd="\$cmd$args"
@@ -6783,9 +6840,9 @@
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
   -export-symbols SYMFILE
-		    try to export only the symbols listed in SYMFILE
+                    try to export only the symbols listed in SYMFILE
   -export-symbols-regex REGEX
-		    try to export only the symbols matching REGEX
+                    try to export only the symbols matching REGEX
   -LLIBDIR          search LIBDIR for required installed libraries
   -lNAME            OUTPUT-FILE requires the installed library libNAME
   -module           build a library that can dlopened
@@ -6799,9 +6856,11 @@
   -release RELEASE  specify package release information
   -rpath LIBDIR     the created library will eventually be installed in LIBDIR
   -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-  -static           do not do any dynamic linking of libtool libraries
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
   -version-info CURRENT[:REVISION[:AGE]]
-		    specify library version info [each variable defaults to 0]
+                    specify library version info [each variable defaults to 0]
 
 All other options (arguments beginning with \`-') are ignored.
 
diff -ruN xf86-input-keyboard-1.2.0/man/.cvsignore xf86-input-keyboard/man/.cvsignore
--- xf86-input-keyboard-1.2.0/man/.cvsignore	1970-01-01 00:00:00.000000000 +0000
+++ xf86-input-keyboard/man/.cvsignore	2007-09-03 10:34:00.000000000 +0000
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff -ruN xf86-input-keyboard-1.2.0/man/Makefile.in xf86-input-keyboard/man/Makefile.in
--- xf86-input-keyboard-1.2.0/man/Makefile.in	2006-11-01 22:19:31.000000000 +0000
+++ xf86-input-keyboard/man/Makefile.in	2007-09-03 10:36:18.000000000 +0000
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.10 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -41,15 +41,11 @@
 # from the copyright holders.
 # 
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -87,8 +83,6 @@
 ACLOCAL = @ACLOCAL@
 ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
 ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 APP_MAN_DIR = @APP_MAN_DIR@
 APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
@@ -97,8 +91,6 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BSD_FALSE = @BSD_FALSE@
-BSD_TRUE = @BSD_TRUE@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -125,8 +117,7 @@
 FILE_MAN_DIR = @FILE_MAN_DIR@
 FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
 GREP = @GREP@
-HURD_FALSE = @HURD_FALSE@
-HURD_TRUE = @HURD_TRUE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -137,16 +128,13 @@
 LIBTOOL = @LIBTOOL@
 LIB_MAN_DIR = @LIB_MAN_DIR@
 LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LINUX_FALSE = @LINUX_FALSE@
-LINUX_TRUE = @LINUX_TRUE@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 MISC_MAN_DIR = @MISC_MAN_DIR@
 MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -157,23 +145,20 @@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
-SCO_FALSE = @SCO_FALSE@
-SCO_TRUE = @SCO_TRUE@
+SED = sed
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
-SOLARIS_FALSE = @SOLARIS_FALSE@
-SOLARIS_TRUE = @SOLARIS_TRUE@
 STRIP = @STRIP@
 VERSION = @VERSION@
 XORG_CFLAGS = @XORG_CFLAGS@
 XORG_LIBS = @XORG_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -185,6 +170,7 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
@@ -213,14 +199,16 @@
 psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 drivermandir = $(DRIVER_MAN_DIR)
 driverman_PRE = @DRIVER_NAME@.man
 driverman_DATA = $(driverman_PRE:man=@DRIVER_MAN_SUFFIX@)
 EXTRA_DIST = @DRIVER_NAME@.man
 CLEANFILES = $(driverman_DATA)
-SED = sed
 
 # Strings to replace in man pages
 XORGRELSTRING = @PACKAGE_STRING@
@@ -277,13 +265,9 @@
 
 clean-libtool:
 	-rm -rf .libs _libs
-
-distclean-libtool:
-	-rm -f libtool
-uninstall-info-am:
 install-drivermanDATA: $(driverman_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(drivermandir)" || $(mkdir_p) "$(DESTDIR)$(drivermandir)"
+	test -z "$(drivermandir)" || $(MKDIR_P) "$(DESTDIR)$(drivermandir)"
 	@list='$(driverman_DATA)'; for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  f=$(am__strip_dir) \
@@ -306,22 +290,21 @@
 
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
 	    fi; \
@@ -337,7 +320,7 @@
 all-am: Makefile $(DATA)
 installdirs:
 	for dir in "$(DESTDIR)$(drivermandir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
 install-exec: install-exec-am
@@ -370,7 +353,7 @@
 
 distclean: distclean-am
 	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-libtool
+distclean-am: clean-am distclean-generic
 
 dvi: dvi-am
 
@@ -384,12 +367,20 @@
 
 install-data-am: install-drivermanDATA
 
+install-dvi: install-dvi-am
+
 install-exec-am:
 
+install-html: install-html-am
+
 install-info: install-info-am
 
 install-man:
 
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -408,18 +399,21 @@
 
 ps-am:
 
-uninstall-am: uninstall-drivermanDATA uninstall-info-am
+uninstall-am: uninstall-drivermanDATA
+
+.MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
 	distclean distclean-generic distclean-libtool distdir dvi \
 	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-drivermanDATA \
-	install-exec install-exec-am install-info install-info-am \
-	install-man install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-drivermanDATA \
-	uninstall-info-am
+	install-data install-data-am install-drivermanDATA install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-drivermanDATA
 
 
 .man.$(DRIVER_MAN_SUFFIX):
diff -ruN xf86-input-keyboard-1.2.0/man/keyboard.man xf86-input-keyboard/man/keyboard.man
--- xf86-input-keyboard-1.2.0/man/keyboard.man	1970-01-01 00:00:00.000000000 +0000
+++ xf86-input-keyboard/man/keyboard.man	2007-09-03 10:34:00.000000000 +0000
@@ -0,0 +1,108 @@
+.\" $XdotOrg: $
+.\" $XFree86: xc/programs/Xserver/hw/xfree86/input/keyboard/keyboard.man,v 1.2 2001/01/27 18:20:57 dawes Exp $ 
+.\" shorthand for double quote that works everywhere.
+.ds q \N'34'
+.TH KEYBOARD __drivermansuffix__ __vendorversion__
+.SH NAME
+keyboard \- Keyboard input driver
+.SH SYNOPSIS
+.nf
+.B "Section \*qInputDevice\*q"
+.BI "  Identifier \*q" idevname \*q
+.B  "  Driver \*qkeyboard\*q"
+\ \ ...
+.B EndSection
+.fi
+.SH DESCRIPTION
+.B keyboard 
+is an __xservername__ input driver for keyboards.  The driver supports the standard
+OS-provided keyboard interface. 
+.PP
+The
+.B keyboard
+driver functions as a keyboard input device, and may be used as the
+X server's core keyboard.  
+.PP
+This driver is built-in to the core X server, and multiple instances are not 
+supported.   A loadable driver,
+.BR kbd ,
+is available, and is planned to replace the
+.B keyboard
+driver in a future release of the __xservername__ server.
+.SH CONFIGURATION DETAILS
+Please refer to __xconfigfile__(__filemansuffix__) for general configuration
+details and for options that can be used with all input drivers.  This
+section only covers configuration details specific to this driver.
+.PP
+The following driver
+.B Options
+are supported:
+.TP 7
+.BI "Option \*qProtocol\*q \*q" string \*q
+Specify the keyboard protocol.  Valid protocol types include:
+.PP
+.RS 12
+Standard, Xqueue.
+.RE
+.PP
+.RS 7
+Not all protocols are supported on all platforms.  Default: "Standard".
+.RE
+.TP 7
+.BI "Option \*qAutoRepeat\*q \*q" "delay rate" \*q
+sets the auto repeat behaviour for the keyboard.  This is not implemented
+on all platforms.
+.I delay
+is the time in milliseconds before a key starts repeating.
+.I rate
+is the number of times a key repeats per second.  Default: "500 30".
+.TP 7
+.BI "Option \*qXLeds\*q \*q" ledlist \*q
+makes the keyboard LEDs specified in
+.I ledlist
+available for client use instead of their traditional function
+(Scroll Lock, Caps Lock and Num Lock).  The numbers in the list are
+in the range 1 to 3.  Default: empty list.
+.TP 7
+.BI "Option \*qXkbDisable\*q \*q" boolean \*q
+disable/enable the XKEYBOARD extension.  The \-kb command line
+option overrides this config file option.  Default: XKB is enabled.
+.PP
+.RS 7
+NOTE: This option should be specified in the
+.B ServerFlags
+section rather than here.  It's use here is deprecated.
+.RE
+.TP 7
+.BI "Option \*qXkbRules\*q \*q" rules \*q
+specifies which XKB rules file to use for interpreting the
+.BR XkbModel ,
+.BR XkbLayout ,
+.BR XkbVariant ,
+and
+.B XkbOptions
+settings.  Default: "xorg" for most platforms, but "xfree98" for the
+Japanese PC-98 platforms.
+.TP 7
+.BI "Option \*qXkbModel\*q \*q" modelname \*q
+specifies the XKB keyboard model name.  Default: "pc105" for most platforms,
+but "pc98" for the Japanese PC-98 platforms.
+.TP 7
+.BI "Option \*qXkbLayout\*q \*q" layoutname \*q
+specifies the XKB keyboard layout name.  This is usually the country or
+language type of the keyboard.  Default: "us" for most platforms, but
+"nec/jp" for the Japanese PC-98 platforms.
+.TP 7
+.BI "Option \*qXkbVariant\*q \*q" variants \*q
+specifies the XKB keyboard variant components.  These can be used to
+enhance the keyboard layout details.  Default: not set.
+.TP 7
+.BI "Option \*qXkbOptions\*q \*q" options \*q
+specifies the XKB keyboard option components.  These can be used to
+enhance the keyboard behaviour.  Default: not set.
+.PP
+Some other XKB-related options are available, but they are incompatible
+with the ones listed above and are not recommended, so they are not
+documented here.
+.SH "SEE ALSO"
+kbd(__drivermansuffix__), __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__).
diff -ruN xf86-input-keyboard-1.2.0/missing xf86-input-keyboard/missing
--- xf86-input-keyboard-1.2.0/missing	2006-11-01 22:19:31.000000000 +0000
+++ xf86-input-keyboard/missing	2007-09-03 10:36:18.000000000 +0000
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2005-06-08.21
+scriptversion=2006-05-10.23
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
 #   Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
@@ -33,6 +33,8 @@
 fi
 
 run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
 
 # In the cases where this matters, `missing' is being run in the
 # srcdir already.
@@ -44,7 +46,7 @@
 
 msg="missing on your system"
 
-case "$1" in
+case $1 in
 --run)
   # Try to run requested program, and just exit if it succeeds.
   run=
@@ -77,6 +79,7 @@
   aclocal      touch file \`aclocal.m4'
   autoconf     touch file \`configure'
   autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
   automake     touch all \`Makefile.in' files
   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
   flex         create \`lex.yy.c', if possible, from existing .c
@@ -106,7 +109,7 @@
 # Now exit if we have it, but it failed.  Also exit now if we
 # don't have it and --version was passed (most likely to detect
 # the program).
-case "$1" in
+case $1 in
   lex|yacc)
     # Not GNU programs, they don't have --version.
     ;;
@@ -135,7 +138,7 @@
 
 # If it does not exist, or fails to run (possibly an outdated version),
 # try to emulate it.
-case "$1" in
+case $1 in
   aclocal*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
@@ -164,7 +167,7 @@
     test -z "$files" && files="config.h"
     touch_files=
     for f in $files; do
-      case "$f" in
+      case $f in
       *:*) touch_files="$touch_files "`echo "$f" |
 				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
       *) touch_files="$touch_files $f.in";;
@@ -192,8 +195,8 @@
          You can get \`$1' as part of \`Autoconf' from any GNU
          archive site."
 
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -f "$file"; then
 	touch $file
     else
@@ -214,25 +217,25 @@
          in order for those modifications to take effect.  You can get
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
+    if test $# -ne 1; then
         eval LASTARG="\${$#}"
-	case "$LASTARG" in
+	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.c
 	    fi
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.h
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f y.tab.h ]; then
+    if test ! -f y.tab.h; then
 	echo >y.tab.h
     fi
-    if [ ! -f y.tab.c ]; then
+    if test ! -f y.tab.c; then
 	echo 'main() { return 0; }' >y.tab.c
     fi
     ;;
@@ -244,18 +247,18 @@
          in order for those modifications to take effect.  You can get
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
+    if test $# -ne 1; then
         eval LASTARG="\${$#}"
-	case "$LASTARG" in
+	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" lex.yy.c
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f lex.yy.c ]; then
+    if test ! -f lex.yy.c; then
 	echo 'main() { return 0; }' >lex.yy.c
     fi
     ;;
@@ -267,11 +270,9 @@
 	 \`Help2man' package in order for those modifications to take
 	 effect.  You can get \`Help2man' from any GNU archive site."
 
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
 	touch $file
     else
 	test -z "$file" || exec >$file
@@ -289,11 +290,17 @@
          DU, IRIX).  You might want to install the \`Texinfo' package or
          the \`GNU make' package.  Grab either from any GNU archive site."
     # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -z "$file"; then
       # ... or it is the one specified with @setfilename ...
       infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
       # ... or it is derived from the source name (dir/f.texi becomes f.info)
       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
@@ -317,13 +324,13 @@
     fi
     firstarg="$1"
     if shift; then
-	case "$firstarg" in
+	case $firstarg in
 	*o*)
 	    firstarg=`echo "$firstarg" | sed s/o//`
 	    tar "$firstarg" "$@" && exit 0
 	    ;;
 	esac
-	case "$firstarg" in
+	case $firstarg in
 	*h*)
 	    firstarg=`echo "$firstarg" | sed s/h//`
 	    tar "$firstarg" "$@" && exit 0
diff -ruN xf86-input-keyboard-1.2.0/src/.cvsignore xf86-input-keyboard/src/.cvsignore
--- xf86-input-keyboard-1.2.0/src/.cvsignore	1970-01-01 00:00:00.000000000 +0000
+++ xf86-input-keyboard/src/.cvsignore	2007-09-03 10:34:00.000000000 +0000
@@ -0,0 +1,6 @@
+.deps
+.libs
+Makefile
+Makefile.in
+*.la
+*.lo
diff -ruN xf86-input-keyboard-1.2.0/src/Makefile.am xf86-input-keyboard/src/Makefile.am
--- xf86-input-keyboard-1.2.0/src/Makefile.am	2006-11-01 22:16:43.000000000 +0000
+++ xf86-input-keyboard/src/Makefile.am	2007-09-03 10:34:00.000000000 +0000
@@ -21,33 +21,32 @@
 driverdir = @inputdir@
 driver_LTLIBRARIES = kbd_drv.la
 kbd_drv_la_LDFLAGS = -avoid-version -module
-kbd_drv_la_SOURCES = kbd.c
+kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h
 
-BSD_SOURCES = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
-HURD_SOURCES = hurd_kbd.c at_scancode.c
-LINUX_SOURCES = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
-SCO_SOURCES = sco_KbdMap.c sco_kbd.c sco_kbd.h
-SOLARIS_SOURCES = sun_kbd.c sun_kbd.h sun_kbdEv.c
+BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
+HURD_SRCS = hurd_kbd.c at_scancode.c
+LINUX_SRCS = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
+SCO_SRCS = sco_KbdMap.c sco_kbd.c sco_kbd.h
+SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
 
 if BSD
-kbd_drv_la_SOURCES += $(BSD_SOURCES)
+kbd_drv_la_SOURCES += $(BSD_SRCS)
 endif
 
 if SOLARIS
-kbd_drv_la_SOURCES += $(SOLARIS_SOURCES)
+kbd_drv_la_SOURCES += $(SOLARIS_SRCS)
 endif
 
 if LINUX
-kbd_drv_la_SOURCES += $(LINUX_SOURCES)
+kbd_drv_la_SOURCES += $(LINUX_SRCS)
 endif
 
 if SCO
-kbd_drv_la_SOURCES += $(SCO_SOURCES)
+kbd_drv_la_SOURCES += $(SCO_SRCS)
 endif
 
 if HURD
-kbd_drv_la_SOURCES += $(HURD_SOURCES)
+kbd_drv_la_SOURCES += $(HURD_SRCS)
 endif
 
-EXTRA_DIST = $(BSD_SOURCES) $(HURD_SOURCES) $(LINUX_SOURCES) $(SCO_SOURCES) \
-             $(SOLARIS_SOURCES)
+EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(LINUX_SRCS) $(SCO_SRCS) $(SOLARIS_SRCS)
diff -ruN xf86-input-keyboard-1.2.0/src/Makefile.in xf86-input-keyboard/src/Makefile.in
--- xf86-input-keyboard-1.2.0/src/Makefile.in	2006-11-01 22:19:32.000000000 +0000
+++ xf86-input-keyboard/src/Makefile.in	2007-09-03 10:36:18.000000000 +0000
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.10 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -34,15 +34,11 @@
 #  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
 install_sh_SCRIPT = $(install_sh) -c
@@ -56,11 +52,11 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-@BSD_TRUE@am__append_1 = $(BSD_SOURCES)
-@SOLARIS_TRUE@am__append_2 = $(SOLARIS_SOURCES)
-@LINUX_TRUE@am__append_3 = $(LINUX_SOURCES)
-@SCO_TRUE@am__append_4 = $(SCO_SOURCES)
-@HURD_TRUE@am__append_5 = $(HURD_SOURCES)
+@BSD_TRUE@am__append_1 = $(BSD_SRCS)
+@SOLARIS_TRUE@am__append_2 = $(SOLARIS_SRCS)
+@LINUX_TRUE@am__append_3 = $(LINUX_SRCS)
+@SCO_TRUE@am__append_4 = $(SCO_SRCS)
+@HURD_TRUE@am__append_5 = $(HURD_SRCS)
 subdir = src
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -80,13 +76,13 @@
 driverLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(driver_LTLIBRARIES)
 kbd_drv_la_LIBADD =
-am__kbd_drv_la_SOURCES_DIST = kbd.c bsd_KbdMap.c bsd_kbd.c bsd_kbd.h \
-	at_scancode.c sun_kbd.c sun_kbd.h sun_kbdEv.c lnx_KbdMap.c \
-	lnx_kbd.c lnx_kbd.h sco_KbdMap.c sco_kbd.c sco_kbd.h \
-	hurd_kbd.c
+am__kbd_drv_la_SOURCES_DIST = kbd.c xf86OSKbd.h xf86Keymap.h \
+	bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c sun_kbd.c \
+	sun_kbd.h sun_kbdMap.c lnx_KbdMap.c lnx_kbd.c lnx_kbd.h \
+	sco_KbdMap.c sco_kbd.c sco_kbd.h hurd_kbd.c
 am__objects_1 = bsd_KbdMap.lo bsd_kbd.lo at_scancode.lo
 @BSD_TRUE@am__objects_2 = $(am__objects_1)
-am__objects_3 = sun_kbd.lo sun_kbdEv.lo
+am__objects_3 = sun_kbd.lo sun_kbdMap.lo
 @SOLARIS_TRUE@am__objects_4 = $(am__objects_3)
 am__objects_5 = lnx_KbdMap.lo lnx_kbd.lo at_scancode.lo
 @LINUX_TRUE@am__objects_6 = $(am__objects_5)
@@ -97,17 +93,21 @@
 am_kbd_drv_la_OBJECTS = kbd.lo $(am__objects_2) $(am__objects_4) \
 	$(am__objects_6) $(am__objects_8) $(am__objects_10)
 kbd_drv_la_OBJECTS = $(am_kbd_drv_la_OBJECTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+kbd_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(kbd_drv_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 SOURCES = $(kbd_drv_la_SOURCES)
 DIST_SOURCES = $(am__kbd_drv_la_SOURCES_DIST)
 ETAGS = etags
@@ -116,8 +116,6 @@
 ACLOCAL = @ACLOCAL@
 ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
 ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
 AMTAR = @AMTAR@
 APP_MAN_DIR = @APP_MAN_DIR@
 APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
@@ -126,8 +124,6 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-BSD_FALSE = @BSD_FALSE@
-BSD_TRUE = @BSD_TRUE@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,8 +150,7 @@
 FILE_MAN_DIR = @FILE_MAN_DIR@
 FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
 GREP = @GREP@
-HURD_FALSE = @HURD_FALSE@
-HURD_TRUE = @HURD_TRUE@
+INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -166,16 +161,13 @@
 LIBTOOL = @LIBTOOL@
 LIB_MAN_DIR = @LIB_MAN_DIR@
 LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LINUX_FALSE = @LINUX_FALSE@
-LINUX_TRUE = @LINUX_TRUE@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
-MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 MISC_MAN_DIR = @MISC_MAN_DIR@
 MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -186,23 +178,20 @@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
-SCO_FALSE = @SCO_FALSE@
-SCO_TRUE = @SCO_TRUE@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
-SOLARIS_FALSE = @SOLARIS_FALSE@
-SOLARIS_TRUE = @SOLARIS_TRUE@
 STRIP = @STRIP@
 VERSION = @VERSION@
 XORG_CFLAGS = @XORG_CFLAGS@
 XORG_LIBS = @XORG_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -214,6 +203,7 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
+builddir = @builddir@
 datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
@@ -242,21 +232,23 @@
 psdir = @psdir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
 driverdir = @inputdir@
 driver_LTLIBRARIES = kbd_drv.la
 kbd_drv_la_LDFLAGS = -avoid-version -module
-kbd_drv_la_SOURCES = kbd.c $(am__append_1) $(am__append_2) \
-	$(am__append_3) $(am__append_4) $(am__append_5)
-BSD_SOURCES = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
-HURD_SOURCES = hurd_kbd.c at_scancode.c
-LINUX_SOURCES = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
-SCO_SOURCES = sco_KbdMap.c sco_kbd.c sco_kbd.h
-SOLARIS_SOURCES = sun_kbd.c sun_kbd.h sun_kbdEv.c
-EXTRA_DIST = $(BSD_SOURCES) $(HURD_SOURCES) $(LINUX_SOURCES) $(SCO_SOURCES) \
-             $(SOLARIS_SOURCES)
-
+kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h $(am__append_1) \
+	$(am__append_2) $(am__append_3) $(am__append_4) \
+	$(am__append_5)
+BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
+HURD_SRCS = hurd_kbd.c at_scancode.c
+LINUX_SRCS = lnx_KbdMap.c lnx_kbd.c lnx_kbd.h at_scancode.c
+SCO_SRCS = sco_KbdMap.c sco_kbd.c sco_kbd.h
+SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
+EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(LINUX_SRCS) $(SCO_SRCS) $(SOLARIS_SRCS)
 all: all-am
 
 .SUFFIXES:
@@ -292,7 +284,7 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-driverLTLIBRARIES: $(driver_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	test -z "$(driverdir)" || $(mkdir_p) "$(DESTDIR)$(driverdir)"
+	test -z "$(driverdir)" || $(MKDIR_P) "$(DESTDIR)$(driverdir)"
 	@list='$(driver_LTLIBRARIES)'; for p in $$list; do \
 	  if test -f $$p; then \
 	    f=$(am__strip_dir) \
@@ -303,7 +295,7 @@
 
 uninstall-driverLTLIBRARIES:
 	@$(NORMAL_UNINSTALL)
-	@set -x; list='$(driver_LTLIBRARIES)'; for p in $$list; do \
+	@list='$(driver_LTLIBRARIES)'; for p in $$list; do \
 	  p=$(am__strip_dir) \
 	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(driverdir)/$$p'"; \
 	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(driverdir)/$$p"; \
@@ -318,7 +310,7 @@
 	  rm -f "$${dir}/so_locations"; \
 	done
 kbd_drv.la: $(kbd_drv_la_OBJECTS) $(kbd_drv_la_DEPENDENCIES) 
-	$(LINK) -rpath $(driverdir) $(kbd_drv_la_LDFLAGS) $(kbd_drv_la_OBJECTS) $(kbd_drv_la_LIBADD) $(LIBS)
+	$(kbd_drv_la_LINK) -rpath $(driverdir) $(kbd_drv_la_OBJECTS) $(kbd_drv_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -336,25 +328,25 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco_KbdMap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco_kbd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbd.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbdEv.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun_kbdMap.Plo@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
-@am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
@@ -365,10 +357,6 @@
 clean-libtool:
 	-rm -rf .libs _libs
 
-distclean-libtool:
-	-rm -f libtool
-uninstall-info-am:
-
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -418,22 +406,21 @@
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-	list='$(DISTFILES)'; for file in $$list; do \
-	  case $$file in \
-	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-	  esac; \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-	    dir="/$$dir"; \
-	    $(mkdir_p) "$(distdir)$$dir"; \
-	  else \
-	    dir=''; \
-	  fi; \
 	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
 	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
 	    fi; \
@@ -449,7 +436,7 @@
 all-am: Makefile $(LTLIBRARIES)
 installdirs:
 	for dir in "$(DESTDIR)$(driverdir)"; do \
-	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
 install-exec: install-exec-am
@@ -484,7 +471,7 @@
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-libtool distclean-tags
+	distclean-tags
 
 dvi: dvi-am
 
@@ -498,12 +485,20 @@
 
 install-data-am: install-driverLTLIBRARIES
 
+install-dvi: install-dvi-am
+
 install-exec-am:
 
+install-html: install-html-am
+
 install-info: install-info-am
 
 install-man:
 
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -524,20 +519,24 @@
 
 ps-am:
 
-uninstall-am: uninstall-driverLTLIBRARIES uninstall-info-am
+uninstall-am: uninstall-driverLTLIBRARIES
+
+.MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean \
 	clean-driverLTLIBRARIES clean-generic clean-libtool ctags \
 	distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
-	install-data-am install-driverLTLIBRARIES install-exec \
-	install-exec-am install-info install-info-am install-man \
+	install-data-am install-driverLTLIBRARIES install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
 	install-strip installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags uninstall uninstall-am \
-	uninstall-driverLTLIBRARIES uninstall-info-am
+	uninstall-driverLTLIBRARIES
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff -ruN xf86-input-keyboard-1.2.0/src/kbd.c xf86-input-keyboard/src/kbd.c
--- xf86-input-keyboard-1.2.0/src/kbd.c	2006-11-01 22:16:43.000000000 +0000
+++ xf86-input-keyboard/src/kbd.c	2007-09-03 10:34:00.000000000 +0000
@@ -383,7 +383,22 @@
    InputInfoPtr pInfo = (InputInfoPtr) device->public.devicePrivate;
    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
 
-   if ( ctrl->leds & XCOMP ) {
+   if ( ctrl->leds & XLED1) {
+       pKbd->keyLeds |= CAPSFLAG;
+   } else {
+       pKbd->keyLeds &= ~CAPSFLAG;
+   }
+   if ( ctrl->leds & XLED2) {
+       pKbd->keyLeds |= NUMFLAG;
+   } else {
+       pKbd->keyLeds &= ~NUMFLAG;
+   }
+   if ( ctrl->leds & XLED3) {
+       pKbd->keyLeds |= SCROLLFLAG;
+   } else {
+       pKbd->keyLeds &= ~SCROLLFLAG;
+   }
+   if ( ctrl->leds & (XCOMP|XLED4) ) {
        pKbd->keyLeds |= COMPOSEFLAG;
    } else {
        pKbd->keyLeds &= ~COMPOSEFLAG;
@@ -419,6 +434,8 @@
   kevent.u.keyButtonPointer.rootX = 0;
   kevent.u.keyButtonPointer.rootY = 0;
 
+/* The server does this for us with i-h. */
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 1
   /*
    * Hmm... here is the biggest hack of every time !
    * It may be possible that a switch-vt procedure has finished BEFORE
@@ -448,6 +465,8 @@
           (* pKeyboard->public.processInputProc)(&kevent, pKeyboard, 1);
         }
       }
+#endif
+
   pKbd->scanPrefix      = 0;
 
   if (init) {
@@ -830,7 +849,7 @@
     MODINFOSTRING1,
     MODINFOSTRING2,
     XORG_VERSION_CURRENT,
-    1, 1, 0,
+    PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL,
     ABI_CLASS_XINPUT,
     ABI_XINPUT_VERSION,
     MOD_CLASS_XINPUT,
diff -ruN xf86-input-keyboard-1.2.0/src/lnx_kbd.c xf86-input-keyboard/src/lnx_kbd.c
--- xf86-input-keyboard-1.2.0/src/lnx_kbd.c	2006-11-01 22:18:25.000000000 +0000
+++ xf86-input-keyboard/src/lnx_kbd.c	2007-09-03 10:34:00.000000000 +0000
@@ -6,6 +6,10 @@
  * Based on the code from lnx_io.c which is
  * Copyright 1992 by Orest Zborowski <obz@Kodak.com>
  * Copyright 1993 by David Dawes <dawes@xfree86.org>
+ *
+ * Portions based on kbdrate.c from util-linux 2.9t, which is
+ * Copyright 1992 Rickard E. Faith.  Distributed under the GPL.
+ * This program comes with ABSOLUTELY NO WARRANTY.
  */
 
 #define NEED_EVENTS
diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbd.c xf86-input-keyboard/src/sun_kbd.c
--- xf86-input-keyboard-1.2.0/src/sun_kbd.c	2006-11-01 22:18:26.000000000 +0000
+++ xf86-input-keyboard/src/sun_kbd.c	2007-09-03 10:34:00.000000000 +0000
@@ -22,7 +22,7 @@
  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/* Copyright 2004-2005 Sun Microsystems, Inc.  All rights reserved.
+/* Copyright 2004-2007 Sun Microsystems, Inc.  All rights reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -59,42 +59,36 @@
 #include "xf86_OSlib.h"
 #include "xf86OSKbd.h"
 #include "sun_kbd.h"
-
-/***************************************************************************
- * Common implementation of routines shared by "keyboard" driver in sun_io.c
- * and "kbd" driver (later on in this file)
- */
+#include "atKeynames.h"
 
 #include <sys/stropts.h>
 #include <sys/vuid_event.h>
 #include <sys/kbd.h>
 
-_X_HIDDEN int
-sunKbdOpen(const char *devName, pointer options)
+static void
+sunKbdSetLeds(InputInfoPtr pInfo, int leds)
 {
-    int kbdFD;
-    const char *kbdPath = NULL;
-    const char *defaultKbd = "/dev/kbd";
+    int i;
 
-    if (options != NULL) {
-	kbdPath = xf86SetStrOption(options, "Device", NULL);
-    }
-    if (kbdPath == NULL) {
-        kbdPath = defaultKbd;
+    SYSCALL(i = ioctl(pInfo->fd, KIOCSLED, &leds));
+    if (i < 0) {
+	xf86Msg(X_ERROR, "%s: Failed to set keyboard LED's: %s\n",
+                pInfo->name, strerror(errno));
     }
+}
 
-    kbdFD = open(kbdPath, O_RDONLY | O_NONBLOCK);
-    
-    if (kbdFD == -1) {
-        xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", devName, kbdPath);
-    } else {
-	xf86MsgVerb(X_INFO, 3, "%s: Opened device \"%s\"\n", devName, kbdPath);
-    }
-    
-    if ((kbdPath != NULL) && (kbdPath != defaultKbd)) {
-	xfree(kbdPath);
+
+static int
+sunKbdGetLeds(InputInfoPtr pInfo)
+{
+    int i, leds = 0;
+
+    SYSCALL(i = ioctl(pInfo->fd, KIOCGLED, &leds));
+    if (i < 0) {
+        xf86Msg(X_ERROR, "%s: Failed to get keyboard LED's: %s\n",
+                pInfo->name, strerror(errno));
     }
-    return kbdFD;
+    return leds;
 }
 
 
@@ -102,15 +96,16 @@
  * Save initial keyboard state.  This is called at the start of each server
  * generation.
  */
-
-_X_HIDDEN int
-sunKbdInit(sunKbdPrivPtr priv, int kbdFD, const char *devName, pointer options)
+static int
+KbdInit(InputInfoPtr pInfo, int what)
 {
+    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+    pointer options = pInfo->options;
+    
     int	ktype, klayout, i;
     const char *ktype_name;
 
-    priv->kbdFD 	= kbdFD;
-    priv->devName 	= devName;
     priv->otranslation 	= -1;
     priv->odirect 	= -1;
 
@@ -121,25 +116,25 @@
     }
 
     if (priv->strmod) {
-	SYSCALL(i = ioctl(priv->kbdFD, I_PUSH, priv->strmod));
+	SYSCALL(i = ioctl(pInfo->fd, I_PUSH, priv->strmod));
 	if (i < 0) {
 	    xf86Msg(X_ERROR,
 		    "%s: cannot push module '%s' onto keyboard device: %s\n",
-		    priv->devName, priv->strmod, strerror(errno));
+		    pInfo->name, priv->strmod, strerror(errno));
 	}
     }
     
-    SYSCALL(i = ioctl(kbdFD, KIOCTYPE, &ktype));
+    SYSCALL(i = ioctl(pInfo->fd, KIOCTYPE, &ktype));
     if (i < 0) {
 	xf86Msg(X_ERROR, "%s: Unable to determine keyboard type: %s\n", 
-		devName, strerror(errno));
+		pInfo->name, strerror(errno));
 	return BadImplementation;
     }
     
-    SYSCALL(i = ioctl(kbdFD, KIOCLAYOUT, &klayout));
+    SYSCALL(i = ioctl(pInfo->fd, KIOCLAYOUT, &klayout));
     if (i < 0) {	
 	xf86Msg(X_ERROR, "%s: Unable to determine keyboard layout: %s\n", 
-		devName, strerror(errno));
+		pInfo->name, strerror(errno));
 	return BadImplementation;
     }
     
@@ -157,213 +152,181 @@
     }
 
     xf86Msg(X_PROBED, "%s: Keyboard type: %s (%d)\n",
-	    devName, ktype_name, ktype);
-    xf86Msg(X_PROBED, "%s: Keyboard layout: %d\n", devName, klayout);
+	    pInfo->name, ktype_name, ktype);
+    xf86Msg(X_PROBED, "%s: Keyboard layout: %d\n", pInfo->name, klayout);
 
     priv->ktype 	= ktype;
-    priv->keyMap	= sunGetKbdMapping(ktype);
-    priv->oleds 	= sunKbdGetLeds(priv);
+    priv->oleds 	= sunKbdGetLeds(pInfo);
 
     return Success;
 }
 
-_X_HIDDEN int
-sunKbdOn(sunKbdPrivPtr priv)
+
+static int
+KbdOn(InputInfoPtr pInfo, int what)
 {
+    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+
     int	ktrans, kdirect, i;
 
-    SYSCALL(i = ioctl(priv->kbdFD, KIOCGDIRECT, &kdirect));
+    SYSCALL(i = ioctl(pInfo->fd, KIOCGDIRECT, &kdirect));
     if (i < 0) {
 	xf86Msg(X_ERROR, 
 		"%s: Unable to determine keyboard direct setting: %s\n", 
-		priv->devName, strerror(errno));
+		pInfo->name, strerror(errno));
 	return BadImplementation;
     }
 
     priv->odirect = kdirect;
     kdirect = 1;
 
-    SYSCALL(i = ioctl(priv->kbdFD, KIOCSDIRECT, &kdirect));
+    SYSCALL(i = ioctl(pInfo->fd, KIOCSDIRECT, &kdirect));
     if (i < 0) {
 	xf86Msg(X_ERROR, "%s: Failed turning keyboard direct mode on: %s\n",
-			priv->devName, strerror(errno));
+			pInfo->name, strerror(errno));
 	return BadImplementation;
     }
 
     /* Setup translation */
 
-    SYSCALL(i = ioctl(priv->kbdFD, KIOCGTRANS, &ktrans));
+    SYSCALL(i = ioctl(pInfo->fd, KIOCGTRANS, &ktrans));
     if (i < 0) {
 	xf86Msg(X_ERROR, 
 		"%s: Unable to determine keyboard translation mode: %s\n", 
-		priv->devName, strerror(errno));
+		pInfo->name, strerror(errno));
 	return BadImplementation;
     }
 
     priv->otranslation = ktrans;
     ktrans = TR_UNTRANS_EVENT;
 
-    SYSCALL(i = ioctl(priv->kbdFD, KIOCTRANS, &ktrans));
+    SYSCALL(i = ioctl(pInfo->fd, KIOCTRANS, &ktrans));
     if (i < 0) {	
 	xf86Msg(X_ERROR, "%s: Failed setting keyboard translation mode: %s\n",
-			priv->devName, strerror(errno));
+			pInfo->name, strerror(errno));
 	return BadImplementation;
     }
 
+    /* If Caps Lock or Num Lock LEDs are on when server starts,
+     * send a fake key down on those keys to set the server state
+     * to match the LED's.
+     */
+    if ( priv->oleds & (LED_CAPS_LOCK | LED_NUM_LOCK) ) {
+	int capslock = -1;
+	int numlock = -1;
+	int j;
+	TransMapPtr kmap = pKbd->scancodeMap;
+	
+	for (j = kmap->begin; j < kmap->end ; j++) {
+	    switch (kmap->map[j]) {
+	        case KEY_CapsLock:
+		    capslock = j;
+		    break;
+	    	case KEY_NumLock:	
+		    numlock = j;
+		    break;
+	        default:
+		    /* nothing to do */
+		    break;
+	    }
+	    if ((capslock >= 0) && (numlock >= 0)) {
+		break;
+	    }
+	}
+	if ((priv->oleds & LED_CAPS_LOCK) && (capslock > 0)) {
+	    pKbd->PostEvent(pInfo, capslock, TRUE);	/* Press */
+	    pKbd->PostEvent(pInfo, capslock, FALSE);	/* Release */
+	}
+	if ((priv->oleds & LED_NUM_LOCK) && (numlock > 0)) {
+	    pKbd->PostEvent(pInfo, numlock, TRUE);	/* Press */
+	    pKbd->PostEvent(pInfo, numlock, FALSE);	/* Release */
+	}
+    }
+    
     return Success;
 }
 
-_X_HIDDEN int
-sunKbdOff(sunKbdPrivPtr priv)
+static int
+KbdOff(InputInfoPtr pInfo, int what)
 {
+    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+
     int i;
 
     /* restore original state */
     
-    sunKbdSetLeds(priv, priv->oleds);
+    sunKbdSetLeds(pInfo, priv->oleds);
     
     if (priv->otranslation != -1) {
-        SYSCALL(i = ioctl(priv->kbdFD, KIOCTRANS, &priv->otranslation));
+        SYSCALL(i = ioctl(pInfo->fd, KIOCTRANS, &priv->otranslation));
 	if (i < 0) {
 	    xf86Msg(X_ERROR,
 		    "%s: Unable to restore keyboard translation mode: %s\n",
-		    priv->devName, strerror(errno));
+		    pInfo->name, strerror(errno));
 	    return BadImplementation;
 	}
 	priv->otranslation = -1;
     }
 
     if (priv->odirect != -1) {
-        SYSCALL(i = ioctl(priv->kbdFD, KIOCSDIRECT, &priv->odirect));
+        SYSCALL(i = ioctl(pInfo->fd, KIOCSDIRECT, &priv->odirect));
 	if (i < 0) {
 	    xf86Msg(X_ERROR,
 		    "%s: Unable to restore keyboard direct setting: %s\n",
-		    priv->devName, strerror(errno));
+		    pInfo->name, strerror(errno));
 	    return BadImplementation;
 	}
 	priv->odirect = -1;
     }
 
     if (priv->strmod) {
-	SYSCALL(i = ioctl(priv->kbdFD, I_POP, priv->strmod));
+	SYSCALL(i = ioctl(pInfo->fd, I_POP, priv->strmod));
 	if (i < 0) {
             xf86Msg(X_WARNING,
 		    "%s: cannot pop module '%s' off keyboard device: %s\n",
-		    priv->devName, priv->strmod, strerror(errno));
+		    pInfo->name, priv->strmod, strerror(errno));
 	}
     }
 
     return Success;
 }
 
-_X_HIDDEN void
-sunKbdSoundBell(sunKbdPrivPtr priv, int loudness, int pitch, int duration)
+
+static void
+SoundKbdBell(InputInfoPtr pInfo, int loudness, int pitch, int duration)
 {
+    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+
     int	kbdCmd, i;
 
     if (loudness && pitch)
     {
  	kbdCmd = KBD_CMD_BELL;
 		
-	SYSCALL(i = ioctl (priv->kbdFD, KIOCCMD, &kbdCmd));
+	SYSCALL(i = ioctl (pInfo->fd, KIOCCMD, &kbdCmd));
 	if (i < 0) {
 	    xf86Msg(X_ERROR, "%s: Failed to activate bell: %s\n",
-                priv->devName, strerror(errno));
+                pInfo->name, strerror(errno));
 	}
 	
 	usleep(duration * loudness * 20);
 	
 	kbdCmd = KBD_CMD_NOBELL;
-	SYSCALL(i = ioctl (priv->kbdFD, KIOCCMD, &kbdCmd));
+	SYSCALL(i = ioctl (pInfo->fd, KIOCCMD, &kbdCmd));
 	if (i < 0) {
 	     xf86Msg(X_ERROR, "%s: Failed to deactivate bell: %s\n",
-                priv->devName, strerror(errno));
+                pInfo->name, strerror(errno));
 	}
     }
 }
 
-_X_HIDDEN void
-sunKbdSetLeds(sunKbdPrivPtr priv, int leds)
-{
-    int i;
-	
-    SYSCALL(i = ioctl(priv->kbdFD, KIOCSLED, &leds));
-    if (i < 0) {
-	xf86Msg(X_ERROR, "%s: Failed to set keyboard LED's: %s\n",
-                priv->devName, strerror(errno));
-    }
-}
-
-_X_HIDDEN int
-sunKbdGetLeds(sunKbdPrivPtr priv)
-{
-    int i, leds = 0;
-
-    SYSCALL(i = ioctl(priv->kbdFD, KIOCGLED, &leds));
-    if (i < 0) {
-        xf86Msg(X_ERROR, "%s: Failed to get keyboard LED's: %s\n",
-                priv->devName, strerror(errno));
-    }
-    return leds;
-}
-
-/* ARGSUSED0 */
-_X_HIDDEN void
-sunKbdSetRepeat(sunKbdPrivPtr priv, char rad)
-{
-    /* Nothing to do */
-}
-
-/***************************************************************************
- * Routines called from "kbd" driver via proc vectors filled in by
- * xf86OSKbdPreInit().
- */
-
-
-static int
-KbdInit(InputInfoPtr pInfo, int what)
-{
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
-
-    return sunKbdInit(priv, pInfo->fd, pInfo->name, pInfo->options);
-}
-
-
-static int
-KbdOn(InputInfoPtr pInfo, int what)
-{
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
-
-    return sunKbdOn(priv);
-}
-
-static int
-KbdOff(InputInfoPtr pInfo, int what)
-{
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
-
-    return sunKbdOff(priv);
-}
-
-
-static void
-SoundKbdBell(InputInfoPtr pInfo, int loudness, int pitch, int duration)
-{
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
-
-    sunKbdSoundBell(priv, loudness, pitch, duration);
-}
-
 static void
 SetKbdLeds(InputInfoPtr pInfo, int leds)
 {
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
-    int real_leds = sunKbdGetLeds(priv);
+    int real_leds = sunKbdGetLeds(pInfo);
 
     real_leds &= ~(LED_CAPS_LOCK | LED_NUM_LOCK | LED_SCROLL_LOCK | LED_COMPOSE);
 
@@ -372,16 +335,14 @@
     if (leds & XLED3)  real_leds |= LED_SCROLL_LOCK;
     if (leds & XLED4)  real_leds |= LED_COMPOSE;
     
-    sunKbdSetLeds(priv, real_leds);
+    sunKbdSetLeds(pInfo, real_leds);
 }
 
 static int
 GetKbdLeds(InputInfoPtr pInfo)
 {
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
     int leds = 0;
-    int real_leds = sunKbdGetLeds(priv);
+    int real_leds = sunKbdGetLeds(pInfo);
 
     if (real_leds & LED_CAPS_LOCK)	leds |= XLED1;
     if (real_leds & LED_NUM_LOCK)	leds |= XLED2;
@@ -391,27 +352,17 @@
     return leds;
 }
 
+/* ARGSUSED0 */
 static void
 SetKbdRepeat(InputInfoPtr pInfo, char rad)
 {
-    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
-    
-    sunKbdSetRepeat(priv, rad);
-}
-
-static void
-KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
-{
-    /* Should probably do something better here */
-    xf86KbdGetMapping(pKeySyms, pModMap);
+    /* Nothing to do */
 }
 
 static void
 ReadInput(InputInfoPtr pInfo)
 {
     KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
-    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
     Firm_event event[64];
     int        nBytes, i;
 
@@ -420,7 +371,7 @@
     if ((nBytes = read(pInfo->fd, (char *)event, sizeof(event))) > 0)
     {
         for (i = 0; i < (nBytes / sizeof(Firm_event)); i++) {
-	    pKbd->PostEvent(pInfo, priv->keyMap[event[i].id],
+	    pKbd->PostEvent(pInfo, event[i].id & 0xFF,
 			    event[i].value == VKEY_DOWN ? TRUE : FALSE);
 	}
     }
@@ -429,13 +380,34 @@
 static Bool
 OpenKeyboard(InputInfoPtr pInfo)
 {
-    pInfo->fd = sunKbdOpen(pInfo->name, pInfo->options);
+    const char *kbdPath = NULL;
+    const char *defaultKbd = "/dev/kbd";
 
-    if (pInfo->fd >= 0) {
-	pInfo->read_input = ReadInput;
-	return TRUE;
+    if (pInfo->options != NULL) {
+	kbdPath = xf86SetStrOption(pInfo->options, "Device", NULL);
+    }
+    if (kbdPath == NULL) {
+        kbdPath = defaultKbd;
+    }
+
+    pInfo->fd = open(kbdPath, O_RDONLY | O_NONBLOCK);
+    
+    if (pInfo->fd == -1) {
+        xf86Msg(X_ERROR, "%s: cannot open \"%s\"\n", pInfo->name, kbdPath);
     } else {
+	xf86MsgVerb(X_INFO, 3, "%s: Opened device \"%s\"\n", pInfo->name,
+		    kbdPath);
+    }
+    
+    if ((kbdPath != NULL) && (kbdPath != defaultKbd)) {
+	xfree(kbdPath);
+    }
+
+    if (pInfo->fd == -1) {
 	return FALSE;
+    } else {
+	pInfo->read_input = ReadInput;
+	return TRUE;
     }
 }
 
diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbd.h xf86-input-keyboard/src/sun_kbd.h
--- xf86-input-keyboard-1.2.0/src/sun_kbd.h	2006-11-01 22:18:26.000000000 +0000
+++ xf86-input-keyboard/src/sun_kbd.h	2007-09-03 10:34:00.000000000 +0000
@@ -1,4 +1,4 @@
-/* Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+/* Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -29,41 +29,16 @@
 #ifndef _XORG_SUN_KBD_H_
 #define _XORG_SUN_KBD_H_
 
-/*
- * Keyboard common implementation routines shared by "keyboard" driver
- * in sun_io.c and "kbd" driver in sun_kbd.c
- */
-
 typedef struct {
-    int			kbdFD;
-    const char *	devName;
     int 		ktype;		/* Keyboard type from KIOCTYPE */
     Bool		kbdActive;	/* Have we set kbd modes for X? */
     int 		otranslation;	/* Original translation mode */
     int 		odirect;	/* Original "direct" mode setting */
     unsigned char	oleds;		/* Original LED state */
     const char *	strmod;		/* Streams module pushed on kbd device */
-    const unsigned char *keyMap;
 } sunKbdPrivRec, *sunKbdPrivPtr;
 
-/* sun_kbd.c */
-extern int  sunKbdOpen	(const char *devName, pointer options);
-extern int  sunKbdInit	(sunKbdPrivPtr priv, int kbdFD,
-			 const char *devName, pointer options);
-extern int  sunKbdOn	(sunKbdPrivPtr priv);
-extern int  sunKbdOff	(sunKbdPrivPtr priv);
-    
-extern void sunKbdSoundBell 	(sunKbdPrivPtr priv,
-				 int loudness, int pitch, int duration);
-
-extern void sunKbdSetLeds 	(sunKbdPrivPtr priv, int leds);
-extern int  sunKbdGetLeds 	(sunKbdPrivPtr priv);
-extern void sunKbdSetRepeat 	(sunKbdPrivPtr priv, char rad);
-
-/* sun_kbdEv.c */
-#include <sys/vuid_event.h>
-extern void sunPostKbdEvent	(int ktype, Firm_event *event);
-
-extern const unsigned char *sunGetKbdMapping(int ktype);
-
+/* sun_kbdMap.c */
+extern void KbdGetMapping 	(InputInfoPtr pInfo, KeySymsPtr pKeySyms,
+				 CARD8 *pModMap);
 #endif
diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbdEv.c xf86-input-keyboard/src/sun_kbdEv.c
--- xf86-input-keyboard-1.2.0/src/sun_kbdEv.c	2006-11-01 22:18:27.000000000 +0000
+++ xf86-input-keyboard/src/sun_kbdEv.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,855 +0,0 @@
-/*
- * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
- * Copyright 1993 by David Dawes <dawes@xfree86.org>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the names of Thomas Roell and David Dawes not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Thomas Roell and David Dawes make no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
- * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* [JCH-96/01/21] Extended std reverse map to four buttons. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "xf86.h"
-#include "xf86Priv.h"
-#include "xf86_OSlib.h"
-#include "xf86OSKbd.h"
-#include "sun_kbd.h"
-
-#ifdef XINPUT
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XIproto.h>
-#include "xf86Xinput.h"
-#endif
-
-#include "inputstr.h"
-
-#include <sys/kbd.h>
-#include "atKeynames.h"
-
-#ifdef XKB
-extern Bool noXkbExtension;
-#endif
-
-#define XE_POINTER  1
-#define XE_KEYBOARD 2
-
-#ifdef XINPUT
-#define ENQUEUE(ev, code, direction, dev_type) \
-  (ev)->u.u.detail = (code); \
-  (ev)->u.u.type   = (direction); \
-  xf86eqEnqueue((ev))
-#else
-#define ENQUEUE(ev, code, direction, dev_type) \
-  (ev)->u.u.detail = (code); \
-  (ev)->u.u.type   = (direction); \
-  mieqEnqueue((ev))
-#endif
-
-static void startautorepeat(long keycode);
-static CARD32 processautorepeat(OsTimerPtr timer, CARD32 now, pointer arg);
-
-static OsTimerPtr sunTimer = NULL;
-
-/* Map the Solaris keycodes to the "XFree86" keycodes. */
-/*
- * This doesn't seem right.  It probably needs to be dependent on a keyboard
- * type.
- */
-
-/* Additional Sun Japanese Keyboard Keys not defined in common/atKeynames.h */
-#define KEY_Kanji	0x82
-#define KEY_Execute	0x83
-
-static unsigned char map[256] = {
-#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__x86)
-	KEY_NOTUSED,		/*   0 */
-	KEY_Tilde,		/*   1 */
-	KEY_1,			/*   2 */
-	KEY_2,			/*   3 */
-	KEY_3,			/*   4 */
-	KEY_4,			/*   5 */
-	KEY_5,			/*   6 */
-	KEY_6,			/*   7 */
-	KEY_7,			/*   8 */
-	KEY_8,			/*   9 */
-	KEY_9,			/*  10 */
-	KEY_0,			/*  11 */
-	KEY_Minus,		/*  12 */
-	KEY_Equal,		/*  13 */
-	0x7D, /*KEY_P_YEN*/	/*  14 */
-	KEY_BackSpace,		/*  15 */
-	KEY_Tab,		/*  16 */
-	KEY_Q,			/*  17 */
-	KEY_W,			/*  18 */
-	KEY_E,			/*  19 */
-	KEY_R,			/*  20 */
-	KEY_T,			/*  21 */
-	KEY_Y,			/*  22 */
-	KEY_U,			/*  23 */
-	KEY_I,			/*  24 */
-	KEY_O,			/*  25 */
-	KEY_P,			/*  26 */
-	KEY_LBrace,		/*  27 */
-	KEY_RBrace,		/*  28 */
-	KEY_BSlash,		/*  29 */
-	KEY_CapsLock,		/*  30 */
-	KEY_A,			/*  31 */
-	KEY_S,			/*  32 */
-	KEY_D,			/*  33 */
-	KEY_F,			/*  34 */
-	KEY_G,			/*  35 */
-	KEY_H,			/*  36 */
-	KEY_J,			/*  37 */
-	KEY_K,			/*  38 */
-	KEY_L,			/*  39 */
-	KEY_SemiColon,		/*  40 */
-	KEY_Quote,		/*  41 */
-	KEY_UNKNOWN,		/*  42 */
-	KEY_Enter,		/*  43 */
-	KEY_ShiftL,		/*  44 */
-	KEY_Less,		/*  45 */
-	KEY_Z,			/*  46 */
-	KEY_X,			/*  47 */
-	KEY_C,			/*  48 */
-	KEY_V,			/*  49 */
-	KEY_B,			/*  50 */
-	KEY_N,			/*  51 */
-	KEY_M,			/*  52 */
-	KEY_Comma,		/*  53 */
-	KEY_Period,		/*  54 */
-	KEY_Slash,		/*  55 */
-	KEY_BSlash2,		/*  56 */
-	KEY_ShiftR,		/*  57 */
-	KEY_LCtrl,		/*  58 */
-	KEY_LMeta,		/*  59 */
-	KEY_Alt,		/*  60 */
-	KEY_Space,		/*  61 */
-	KEY_AltLang,		/*  62 */
-	KEY_RMeta,		/*  63 */
-	KEY_RCtrl,		/*  64 */
-	KEY_Menu,		/*  65 */
-	KEY_UNKNOWN,		/*  66 */
-	KEY_UNKNOWN,		/*  67 */
-	KEY_UNKNOWN,		/*  68 */
-	KEY_UNKNOWN,		/*  69 */
-	KEY_UNKNOWN,		/*  70 */
-	KEY_UNKNOWN,		/*  71 */
-	KEY_UNKNOWN,		/*  72 */
-	KEY_UNKNOWN,		/*  73 */
-	KEY_UNKNOWN,		/*  74 */
-	KEY_Insert,		/*  75 */
-	KEY_Delete,		/*  76 */
-	KEY_UNKNOWN,		/*  77 */
-	KEY_UNKNOWN,		/*  78 */
-	KEY_Left,		/*  79 */
-	KEY_Home,		/*  80 */
-	KEY_End,		/*  81 */
-	KEY_UNKNOWN,		/*  82 */
-	KEY_Up,			/*  83 */
-	KEY_Down,		/*  84 */
-	KEY_PgUp,		/*  85 */
-	KEY_PgDown,		/*  86 */
-	KEY_UNKNOWN,		/*  87 */
-	KEY_UNKNOWN,		/*  88 */
-	KEY_Right,		/*  89 */
-	KEY_NumLock,		/*  90 */
-	KEY_KP_7,		/*  91 */
-	KEY_KP_4,		/*  92 */
-	KEY_KP_1,		/*  93 */
-	KEY_UNKNOWN,		/*  94 */
-	KEY_KP_Divide,		/*  95 */
-	KEY_KP_8,		/*  96 */
-	KEY_KP_5,		/*  97 */
-	KEY_KP_2,		/*  98 */
-	KEY_KP_0,		/*  99 */
-	KEY_KP_Multiply,	/* 100 */
-	KEY_KP_9,		/* 101 */
-	KEY_KP_6,		/* 102 */
-	KEY_KP_3,		/* 103 */
-	KEY_KP_Decimal,		/* 104 */
-	KEY_KP_Minus,		/* 105 */
-	KEY_KP_Plus,		/* 106 */
-	KEY_UNKNOWN,		/* 107 */
-	KEY_KP_Enter,		/* 108 */
-	KEY_UNKNOWN,		/* 109 */
-	KEY_Escape,		/* 110 */
-	KEY_UNKNOWN,		/* 111 */
-	KEY_F1,			/* 112 */
-	KEY_F2,			/* 113 */
-	KEY_F3,			/* 114 */
-	KEY_F4,			/* 115 */
-	KEY_F5,			/* 116 */
-	KEY_F6,			/* 117 */
-	KEY_F7,			/* 118 */
-	KEY_F8,			/* 119 */
-	KEY_F9,			/* 120 */
-	KEY_F10,		/* 121 */
-	KEY_F11,		/* 122 */
-	KEY_F12,		/* 123 */
-	KEY_Print,		/* 124 */
-	KEY_ScrollLock,		/* 125 */
-	KEY_Pause,		/* 126 */
-	KEY_UNKNOWN,		/* 127 */
-	KEY_UNKNOWN,		/* 128 */
-	KEY_UNKNOWN,		/* 129 */
-	KEY_UNKNOWN,		/* 130 */
-	KEY_NFER,		/* 131 */
-	KEY_XFER,		/* 132 */
-	KEY_HKTG,		/* 133 */
-	KEY_UNKNOWN,		/* 134 */
-#elif defined(sparc) || defined(__sparc__)
-	KEY_UNKNOWN,		/* 0x00 */
-	KEY_UNKNOWN,		/* 0x01 */
-	KEY_UNKNOWN,		/* 0x02 */
-	KEY_UNKNOWN,		/* 0x03 */
-	KEY_UNKNOWN,		/* 0x04 */
-	KEY_F1,			/* 0x05 */
-	KEY_F2,			/* 0x06 */
-	KEY_F10,		/* 0x07 */
-	KEY_F3,			/* 0x08 */
-	KEY_F11,		/* 0x09 */
-	KEY_F4,			/* 0x0A */
-	KEY_F12,		/* 0x0B */
-	KEY_F5,			/* 0x0C */
-	KEY_UNKNOWN,		/* 0x0D */
-	KEY_F6,			/* 0x0E */
-	KEY_UNKNOWN,		/* 0x0F */
-	KEY_F7,			/* 0x10 */
-	KEY_F8,			/* 0x11 */
-	KEY_F9,			/* 0x12 */
-	KEY_Alt,		/* 0x13 */
-	KEY_Up,			/* 0x14 */
-	KEY_Pause,		/* 0x15 */
-	KEY_SysReqest,		/* 0x16 */
-	KEY_ScrollLock,		/* 0x17 */
-	KEY_Left,		/* 0x18 */
-	KEY_UNKNOWN,		/* 0x19 */
-	KEY_UNKNOWN,		/* 0x1A */
-	KEY_Down,		/* 0x1B */
-	KEY_Right,		/* 0x1C */
-	KEY_Escape,		/* 0x1D */
-	KEY_1,			/* 0x1E */
-	KEY_2,			/* 0x1F */
-	KEY_3,			/* 0x20 */
-	KEY_4,			/* 0x21 */
-	KEY_5,			/* 0x22 */
-	KEY_6,			/* 0x23 */
-	KEY_7,			/* 0x24 */
-	KEY_8,			/* 0x25 */
-	KEY_9,			/* 0x26 */
-	KEY_0,			/* 0x27 */
-	KEY_Minus,		/* 0x28 */
-	KEY_Equal,		/* 0x29 */
-	KEY_Tilde,		/* 0x2A */
-	KEY_BackSpace,		/* 0x2B */
-	KEY_Insert,		/* 0x2C */
-	KEY_UNKNOWN,		/* 0x2D */
-	KEY_KP_Divide,		/* 0x2E */
-	KEY_KP_Multiply,	/* 0x2F */
-	KEY_UNKNOWN,		/* 0x30 */
-	KEY_UNKNOWN,		/* 0x31 */
-	KEY_KP_Decimal,		/* 0x32 */
-	KEY_UNKNOWN,		/* 0x33 */
-	KEY_Home,		/* 0x34 */
-	KEY_Tab,		/* 0x35 */
-	KEY_Q,			/* 0x36 */
-	KEY_W,			/* 0x37 */
-	KEY_E,			/* 0x38 */
-	KEY_R,			/* 0x39 */
-	KEY_T,			/* 0x3A */
-	KEY_Y,			/* 0x3B */
-	KEY_U,			/* 0x3C */
-	KEY_I,			/* 0x3D */
-	KEY_O,			/* 0x3E */
-	KEY_P,			/* 0x3F */
-	KEY_LBrace,		/* 0x40 */
-	KEY_RBrace,		/* 0x41 */
-	KEY_Delete,		/* 0x42 */
-	KEY_UNKNOWN,		/* 0x43 */
-	KEY_KP_7,		/* 0x44 */
-	KEY_KP_8,		/* 0x45 */
-	KEY_KP_9,		/* 0x46 */
-	KEY_KP_Minus,		/* 0x47 */
-	KEY_UNKNOWN,		/* 0x48 */
-	KEY_UNKNOWN,		/* 0x49 */
-	KEY_End,		/* 0x4A */
-	KEY_UNKNOWN,		/* 0x4B */
-	KEY_LCtrl,		/* 0x4C */
-	KEY_A,			/* 0x4D */
-	KEY_S,			/* 0x4E */
-	KEY_D,			/* 0x4F */
-	KEY_F,			/* 0x50 */
-	KEY_G,			/* 0x51 */
-	KEY_H,			/* 0x52 */
-	KEY_J,			/* 0x53 */
-	KEY_K,			/* 0x54 */
-	KEY_L,			/* 0x55 */
-	KEY_SemiColon,		/* 0x56 */
-	KEY_Quote,		/* 0x57 */
-	KEY_BSlash,		/* 0x58 */
-	KEY_Enter,		/* 0x59 */
-	KEY_KP_Enter,		/* 0x5A */
-	KEY_KP_4,		/* 0x5B */
-	KEY_KP_5,		/* 0x5C */
-	KEY_KP_6,		/* 0x5D */
-	KEY_KP_0,		/* 0x5E */
-	KEY_UNKNOWN,		/* 0x5F */
-	KEY_PgUp,		/* 0x60 */
-	KEY_UNKNOWN,		/* 0x61 */
-	KEY_NumLock,		/* 0x62 */
-	KEY_ShiftL,		/* 0x63 */
-	KEY_Z,			/* 0x64 */
-	KEY_X,			/* 0x65 */
-	KEY_C,			/* 0x66 */
-	KEY_V,			/* 0x67 */
-	KEY_B,			/* 0x68 */
-	KEY_N,			/* 0x69 */
-	KEY_M,			/* 0x6A */
-	KEY_Comma,		/* 0x6B */
-	KEY_Period,		/* 0x6C */
-	KEY_Slash,		/* 0x6D */
-	KEY_ShiftR,		/* 0x6E */
-	KEY_UNKNOWN,		/* 0x6F */
-	KEY_KP_1,		/* 0x70 */
-	KEY_KP_2,		/* 0x71 */
-	KEY_KP_3,		/* 0x72 */
-	KEY_UNKNOWN,		/* 0x73 */
-	KEY_UNKNOWN,		/* 0x74 */
-	KEY_UNKNOWN,		/* 0x75 */
-	KEY_UNKNOWN,		/* 0x76 */
-	KEY_CapsLock,		/* 0x77 */
-	KEY_LMeta,		/* 0x78 */
-	KEY_Space,		/* 0x79 */
-	KEY_RMeta,		/* 0x7A */
-	KEY_PgDown,		/* 0x7B */
-	KEY_UNKNOWN,		/* 0x7C */
-	KEY_KP_Plus,		/* 0x7D */
-	KEY_UNKNOWN,		/* 0x7E */
-	KEY_UNKNOWN,		/* 0x7F */
-#endif
-	/* The rest default to KEY_UNKNOWN */
-};
-
-#if defined(KB_USB)
-static unsigned char usbmap[256] = {
-/*
- * partially taken from ../bsd/bsd_KbdMap.c
- *
- * added keycodes for Sun special keys (left function keys, audio control)
- */
-	/* 0 */ KEY_NOTUSED,
-	/* 1 */ KEY_NOTUSED,
-	/* 2 */ KEY_NOTUSED,
-	/* 3 */ KEY_NOTUSED,
-	/* 4 */ KEY_A,		
-	/* 5 */ KEY_B,
-	/* 6 */ KEY_C,
-	/* 7 */ KEY_D,
-	/* 8 */ KEY_E,
-	/* 9 */ KEY_F,
-	/* 10 */ KEY_G,
-	/* 11 */ KEY_H,
-	/* 12 */ KEY_I,
-	/* 13 */ KEY_J,
-	/* 14 */ KEY_K,
-	/* 15 */ KEY_L,
-	/* 16 */ KEY_M,
-	/* 17 */ KEY_N,
-	/* 18 */ KEY_O,
-	/* 19 */ KEY_P,
-	/* 20 */ KEY_Q,
-	/* 21 */ KEY_R,
-	/* 22 */ KEY_S,
-	/* 23 */ KEY_T,
-	/* 24 */ KEY_U,
-	/* 25 */ KEY_V,
-	/* 26 */ KEY_W,
-	/* 27 */ KEY_X,
-	/* 28 */ KEY_Y,
-	/* 29 */ KEY_Z,
-	/* 30 */ KEY_1,		/* 1 !*/
-	/* 31 */ KEY_2,		/* 2 @ */
-	/* 32 */ KEY_3,		/* 3 # */
-	/* 33 */ KEY_4,		/* 4 $ */
-	/* 34 */ KEY_5,		/* 5 % */
-	/* 35 */ KEY_6,		/* 6 ^ */
-	/* 36 */ KEY_7,		/* 7 & */
-	/* 37 */ KEY_8,		/* 8 * */
-	/* 38 */ KEY_9,		/* 9 ( */
-	/* 39 */ KEY_0,		/* 0 ) */
-	/* 40 */ KEY_Enter,	/* Return  */
-	/* 41 */ KEY_Escape,	/* Escape */
-	/* 42 */ KEY_BackSpace,	/* Backspace Delete */
-	/* 43 */ KEY_Tab,	/* Tab */
-	/* 44 */ KEY_Space,	/* Space */
-	/* 45 */ KEY_Minus,	/* - _ */
-	/* 46 */ KEY_Equal,	/* = + */
-	/* 47 */ KEY_LBrace,	/* [ { */
-	/* 48 */ KEY_RBrace,	/* ] } */
-	/* 49 */ KEY_BSlash,	/* \ | */
-	/* 50 */ KEY_BSlash,	/* \ _ # ~ on some keyboards */
-	/* 51 */ KEY_SemiColon,	/* ; : */
-	/* 52 */ KEY_Quote,	/* ' " */
-	/* 53 */ KEY_Tilde,	/* ` ~ */
-	/* 54 */ KEY_Comma,	/* , <  */
-	/* 55 */ KEY_Period,	/* . > */
-	/* 56 */ KEY_Slash,	/* / ? */
-	/* 57 */ KEY_CapsLock,	/* Caps Lock */
-	/* 58 */ KEY_F1,		/* F1 */
-	/* 59 */ KEY_F2,		/* F2 */
-	/* 60 */ KEY_F3,		/* F3 */
-	/* 61 */ KEY_F4,		/* F4 */
-	/* 62 */ KEY_F5,		/* F5 */
-	/* 63 */ KEY_F6,		/* F6 */
-	/* 64 */ KEY_F7,		/* F7 */
-	/* 65 */ KEY_F8,		/* F8 */
-	/* 66 */ KEY_F9,		/* F9 */
-	/* 67 */ KEY_F10,	/* F10 */
-	/* 68 */ KEY_F11,	/* F11 */
-	/* 69 */ KEY_F12,	/* F12 */
-	/* 70 */ KEY_Print,	/* PrintScrn SysReq */
-	/* 71 */ KEY_ScrollLock,	/* Scroll Lock */
-	/* 72 */ KEY_Pause,	/* Pause Break */
-	/* 73 */ KEY_Insert,	/* Insert XXX  Help on some Mac Keyboards */
-	/* 74 */ KEY_Home,	/* Home */
-	/* 75 */ KEY_PgUp,	/* Page Up */
-	/* 76 */ KEY_Delete,	/* Delete */
-	/* 77 */ KEY_End,	/* End */
-	/* 78 */ KEY_PgDown,	/* Page Down */
-	/* 79 */ KEY_Right,	/* Right Arrow */
-	/* 80 */ KEY_Left,	/* Left Arrow */
-	/* 81 */ KEY_Down,	/* Down Arrow */
-	/* 82 */ KEY_Up,		/* Up Arrow */
-	/* 83 */ KEY_NumLock,	/* Num Lock */
-	/* 84 */ KEY_KP_Divide,	/* Keypad / */
-	/* 85 */ KEY_KP_Multiply, /* Keypad * */
-	/* 86 */ KEY_KP_Minus,	/* Keypad - */
-	/* 87 */ KEY_KP_Plus,	/* Keypad + */
-	/* 88 */ KEY_KP_Enter,	/* Keypad Enter */
-	/* 89 */ KEY_KP_1,	/* Keypad 1 End */
-	/* 90 */ KEY_KP_2,	/* Keypad 2 Down */
-	/* 91 */ KEY_KP_3,	/* Keypad 3 Pg Down */
-	/* 92 */ KEY_KP_4,	/* Keypad 4 Left  */
-	/* 93 */ KEY_KP_5,	/* Keypad 5 */
-	/* 94 */ KEY_KP_6,	/* Keypad 6 */
-	/* 95 */ KEY_KP_7,	/* Keypad 7 Home */
-	/* 96 */ KEY_KP_8,	/* Keypad 8 Up */
-	/* 97 */ KEY_KP_9,	/* KEypad 9 Pg Up */
-	/* 98 */ KEY_KP_0,	/* Keypad 0 Ins */
-	/* 99 */ KEY_KP_Decimal,	/* Keypad . Del */
-	/* 100 */ KEY_Less,	/* < > on some keyboards */
-	/* 101 */ KEY_Menu,	/* Menu */
-	/* 102 */ KEY_Power,	/* Sun: Power */
-	/* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
-	/* 104 */ KEY_NOTUSED,
-	/* 105 */ KEY_NOTUSED,
-	/* 106 */ KEY_NOTUSED,
-	/* 107 */ KEY_NOTUSED,
-	/* 108 */ KEY_NOTUSED,
-	/* 109 */ KEY_NOTUSED,
-	/* 110 */ KEY_NOTUSED,
-	/* 111 */ KEY_NOTUSED,
-	/* 112 */ KEY_NOTUSED,
-	/* 113 */ KEY_NOTUSED,
-	/* 114 */ KEY_NOTUSED,
-	/* 115 */ KEY_NOTUSED,
-	/* 116 */ KEY_L7,	/* Sun: Open */
-	/* 117 */ KEY_Help,	/* Sun: Help */
-	/* 118 */ KEY_L3,	/* Sun: Props */
-	/* 119 */ KEY_L5,	/* Sun: Front */
-	/* 120 */ KEY_L1,	/* Sun: Stop */
-	/* 121 */ KEY_L2,	/* Sun: Again */
-	/* 122 */ KEY_L4,	/* Sun: Undo */
-	/* 123 */ KEY_L10,	/* Sun: Cut */
-	/* 124 */ KEY_L6,	/* Sun: Copy */
-	/* 125 */ KEY_L8,	/* Sun: Paste */
-	/* 126 */ KEY_L9,	/* Sun: Find */
-	/* 127 */ KEY_Mute,	/* Sun: AudioMute */
-	/* 128 */ KEY_AudioRaise,	/* Sun: AudioRaise */
-	/* 129 */ KEY_AudioLower,	/* Sun: AudioLower */
-	/* 130 */ KEY_NOTUSED,
-	/* 131 */ KEY_NOTUSED,
-	/* 132 */ KEY_NOTUSED,
-	/* 133 */ KEY_NOTUSED,
-	/* 134 */ KEY_NOTUSED,
-	/* 135 */ KEY_BSlash2,	/* Sun Japanese Kbd: Backslash / Underscore */
-	/* 136 */ KEY_XFER,	/* Sun Japanese Kbd: Henkan Mode */
-	/* 137 */ KEY_Yen,	/* Sun Japanese Kbd: Yen / Brokenbar */
-	/* 138 */ KEY_Kanji,	/* Sun Japanese Kbd: Kanji */
-	/* 139 */ KEY_Execute,	/* Sun Japanese Kbd: Execute */
-	/* 140 */ KEY_NOTUSED,
-	/* 141 */ KEY_NOTUSED,
-	/* 142 */ KEY_NOTUSED,
-	/* 143 */ KEY_NOTUSED,
-	/* 144 */ KEY_NOTUSED,
-	/* 145 */ KEY_NOTUSED,
-	/* 146 */ KEY_NOTUSED,
-	/* 147 */ KEY_NOTUSED,
-	/* 148 */ KEY_NOTUSED,
-	/* 149 */ KEY_NOTUSED,
-	/* 150 */ KEY_NOTUSED,
-	/* 151 */ KEY_NOTUSED,
-	/* 152 */ KEY_NOTUSED,
-	/* 153 */ KEY_NOTUSED,
-	/* 154 */ KEY_NOTUSED,
-	/* 155 */ KEY_NOTUSED,
-	/* 156 */ KEY_NOTUSED,
-	/* 157 */ KEY_NOTUSED,
-	/* 158 */ KEY_NOTUSED,
-	/* 159 */ KEY_NOTUSED,
-	/* 160 */ KEY_NOTUSED,
-	/* 161 */ KEY_NOTUSED,
-	/* 162 */ KEY_NOTUSED,
-	/* 163 */ KEY_NOTUSED,
-	/* 164 */ KEY_NOTUSED,
-	/* 165 */ KEY_NOTUSED,
-	/* 166 */ KEY_NOTUSED,
-	/* 167 */ KEY_NOTUSED,
-	/* 168 */ KEY_NOTUSED,
-	/* 169 */ KEY_NOTUSED,
-	/* 170 */ KEY_NOTUSED,
-	/* 171 */ KEY_NOTUSED,
-	/* 172 */ KEY_NOTUSED,
-	/* 173 */ KEY_NOTUSED,
-	/* 174 */ KEY_NOTUSED,
-	/* 175 */ KEY_NOTUSED,
-	/* 176 */ KEY_NOTUSED,
-	/* 177 */ KEY_NOTUSED,
-	/* 178 */ KEY_NOTUSED,
-	/* 179 */ KEY_NOTUSED,
-	/* 180 */ KEY_NOTUSED,
-	/* 181 */ KEY_NOTUSED,
-	/* 182 */ KEY_NOTUSED,
-	/* 183 */ KEY_NOTUSED,
-	/* 184 */ KEY_NOTUSED,
-	/* 185 */ KEY_NOTUSED,
-	/* 186 */ KEY_NOTUSED,
-	/* 187 */ KEY_NOTUSED,
-	/* 188 */ KEY_NOTUSED,
-	/* 189 */ KEY_NOTUSED,
-	/* 190 */ KEY_NOTUSED,
-	/* 191 */ KEY_NOTUSED,
-	/* 192 */ KEY_NOTUSED,
-	/* 193 */ KEY_NOTUSED,
-	/* 194 */ KEY_NOTUSED,
-	/* 195 */ KEY_NOTUSED,
-	/* 196 */ KEY_NOTUSED,
-	/* 197 */ KEY_NOTUSED,
-	/* 198 */ KEY_NOTUSED,
-	/* 199 */ KEY_NOTUSED,
-	/* 200 */ KEY_NOTUSED,
-	/* 201 */ KEY_NOTUSED,
-	/* 202 */ KEY_NOTUSED,
-	/* 203 */ KEY_NOTUSED,
-	/* 204 */ KEY_NOTUSED,
-	/* 205 */ KEY_NOTUSED,
-	/* 206 */ KEY_NOTUSED,
-	/* 207 */ KEY_NOTUSED,
-	/* 208 */ KEY_NOTUSED,
-	/* 209 */ KEY_NOTUSED,
-	/* 210 */ KEY_NOTUSED,
-	/* 211 */ KEY_NOTUSED,
-	/* 212 */ KEY_NOTUSED,
-	/* 213 */ KEY_NOTUSED,
-	/* 214 */ KEY_NOTUSED,
-	/* 215 */ KEY_NOTUSED,
-	/* 216 */ KEY_NOTUSED,
-	/* 217 */ KEY_NOTUSED,
-	/* 218 */ KEY_NOTUSED,
-	/* 219 */ KEY_NOTUSED,
-	/* 220 */ KEY_NOTUSED,
-	/* 221 */ KEY_NOTUSED,
-	/* 222 */ KEY_NOTUSED,
-	/* 223 */ KEY_NOTUSED,
-	/* 224 */ KEY_LCtrl,	/* Left Control */
-	/* 225 */ KEY_ShiftL,	/* Left Shift */
-	/* 226 */ KEY_Alt,	/* Left Alt */
-	/* 227 */ KEY_LMeta,	/* Left Meta */
-	/* 228 */ KEY_RCtrl,	/* Right Control */
-	/* 229 */ KEY_ShiftR,	/* Right Shift */
-	/* 230 */ KEY_AltLang,	/* Right Alt, AKA AltGr */
-	/* 231 */ KEY_RMeta,	/* Right Meta */
-};
-
-#endif /* KB_USB */
-
-_X_HIDDEN const unsigned char *
-sunGetKbdMapping(int ktype) {
-#if defined(KB_USB)
-    if (ktype == KB_USB)
-        return usbmap;
-    else
-#endif
-        return map;
-}
-
-
-/*
- * sunPostKbdEvent --
- *	Translate the raw hardware Firm_event into an XEvent, and tell DIX
- *	about it. KeyCode preprocessing and so on is done ...
- *
- * Most of the Solaris stuff has whacked Panix/PC98 support in the
- * interests of simplicity - DWH 8/30/99
- */
-
-_X_HIDDEN void
-sunPostKbdEvent(int sun_ktype, Firm_event *event)
-{
-    Bool        down;
-    KeyClassRec *keyc = ((DeviceIntPtr)xf86Info.pKeyboard)->key;
-    Bool        updateLeds = FALSE;
-    xEvent      kevent;
-    KeySym      *keysym;
-    int         keycode;
-    static int  lockkeys = 0;
-
-    /* Give down a value */
-    if (event->value == VKEY_DOWN)
-	down = TRUE;
-    else
-	down = FALSE;
-
-
-#if defined(KB_USB)
-    if(sun_ktype == KB_USB)
-	keycode = usbmap[event->id];
-    else
-#endif
-	keycode = map[event->id];
-
-    /*
-     * and now get some special keysequences
-     */
-    
-#ifdef XKB
-    if (((xf86Info.ddxSpecialKeys == SKWhenNeeded) &&
-	 (!xf86Info.ActionKeyBindingsSet)) ||
-	noXkbExtension || (xf86Info.ddxSpecialKeys == SKAlways))
-#endif
-    {
-	if (!(ModifierDown(ShiftMask)) &&
-	    ((ModifierDown(ControlMask | AltMask)) ||
-	     (ModifierDown(ControlMask | AltLangMask))))
-	{
-	    switch (keycode) {
-	    /*
-	     * The idea here is to pass the scancode down to a list of 
-	     * registered routines.  There should be some standard conventions
-	     * for processing certain keys.
-	     */
-	    case KEY_BackSpace:
-		xf86ProcessActionEvent(ACTION_TERMINATE, NULL);
-		break;
-		
-	    /*
-	     * Check grabs
-	     */
-	    case KEY_KP_Divide:
-		xf86ProcessActionEvent(ACTION_DISABLEGRAB, NULL);
-		break;
-	    case KEY_KP_Multiply:
-		xf86ProcessActionEvent(ACTION_CLOSECLIENT, NULL);
-		break;
-		
-	    /*
-	     * Video mode switches
-	     */
-	    case KEY_KP_Minus:   /* Keypad - */
-		if (down) xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
-		if (!xf86Info.dontZoom) return;
-		break;
-		
-	    case KEY_KP_Plus:   /* Keypad + */
-		if (down) xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
-		if (!xf86Info.dontZoom) return;
-		break;
-	    }
-	}
-    }
-
-    /*
-     * Now map the scancodes to real X-keycodes ...
-     */
-    if (keycode == KEY_NOTUSED) {
-	xf86MsgVerb(X_INFO, 0,
-	    "raw code %d mapped to KEY_NOTUSED -- please report\n", event->id);
-	return;
-    }
-    if (keycode == KEY_UNKNOWN) {
-	xf86MsgVerb(X_INFO, 0,
-	    "raw code %d mapped to KEY_UNKNOWN -- please report\n", event->id);
-	return;
-    }
-    keycode += MIN_KEYCODE;
-    keysym = keyc->curKeySyms.map +
-	     (keyc->curKeySyms.mapWidth *
-	      (keycode - keyc->curKeySyms.minKeyCode));
-
-#ifdef XKB
-    if (noXkbExtension)
-#endif
-    {
-	/*
-	 * Toggle lock keys.
-	 */
-#define CAPSFLAG 0x01
-#define NUMFLAG 0x02
-#define SCROLLFLAG 0x04
-#define MODEFLAG 0x08
-
-	if (down) {
-	    /*
-	     * Handle the KeyPresses of the lock keys.
-	     */
-
-	    switch (keysym[0]) {
-
-	    case XK_Caps_Lock:
-		if (lockkeys & CAPSFLAG) {
-		    lockkeys &= ~CAPSFLAG;
-		    return;
-		}
-		lockkeys |= CAPSFLAG;
-		updateLeds = TRUE;
-		xf86Info.capsLock = down;
-		break;
-
-	    case XK_Num_Lock:
-		if (lockkeys & NUMFLAG) {
-		    lockkeys &= ~NUMFLAG;
-		    return;
-		}
-		lockkeys |= NUMFLAG;
-		updateLeds = TRUE;
-		xf86Info.numLock = down;
-		break;
-
-	    case XK_Scroll_Lock:
-		if (lockkeys & SCROLLFLAG) {
-		    lockkeys &= ~SCROLLFLAG;
-		    return;
-		}
-		lockkeys |= SCROLLFLAG;
-		updateLeds = TRUE;
-		xf86Info.scrollLock = down;
-		break;
-	    }
-	} else {
-	    /*
-	     * Handle the releases of the lock keys.
-	     */
-
-	    switch (keysym[0]) {
-
-	    case XK_Caps_Lock:
-		if (lockkeys & CAPSFLAG)
-		    return;
-		updateLeds = TRUE;
-		xf86Info.capsLock = down;
-		break;
-
-	    case XK_Num_Lock:
-		if (lockkeys & NUMFLAG)
-		    return;
-		updateLeds = TRUE;
-		xf86Info.numLock = down;
-		break;
-
-	    case XK_Scroll_Lock:
-		if (lockkeys & SCROLLFLAG)
-		    return;
-		updateLeds = TRUE;
-		xf86Info.scrollLock = down;
-		break;
-	    }
-	}
-
-  	if (updateLeds)
-	    xf86KbdLeds();
-
-	/*
-	 * If this keycode is not a modifier key, and its down initiate the
-	 * autorepeate sequence.  (Only necessary if not using XKB).
-	 *
-	 * If its not down, then reset the timer.
-	 */
-	if (!keyc->modifierMap[keycode]) {
-	    if (down) {
-		startautorepeat(keycode);
-	    } else {
-		TimerFree(sunTimer);
-		sunTimer = NULL;
-	    }
-  	}
-    }
-
-    xf86Info.lastEventTime =
-	kevent.u.keyButtonPointer.time =
-	    GetTimeInMillis();
-
-    /*
-     * And now send these prefixes ...
-     * NOTE: There cannot be multiple Mode_Switch keys !!!!
-     */
-
-    ENQUEUE(&kevent, keycode, (down ? KeyPress : KeyRelease), XE_KEYBOARD);
-}
-
-
-
-/*
- * Autorepeat stuff
- */
-
-void
-startautorepeat(long keycode)
-{
-    sunTimer = TimerSet(sunTimer, 		/* Timer */
-			0, 			/* Flags */
-			xf86Info.kbdDelay,	/* millis */
-			processautorepeat,	/* callback */
-			(pointer) keycode);	/* arg for timer */
-}
-
-CARD32
-processautorepeat(OsTimerPtr timer, CARD32 now, pointer arg)
-{
-    xEvent kevent;
-    int    keycode;
-
-    keycode = (long)arg;
-
-    xf86Info.lastEventTime =
-	kevent.u.keyButtonPointer.time =
-	    GetTimeInMillis();
-
-    /*
-     * Repeat a key by faking a KeyRelease, and a KeyPress event in rapid
-     * succession
-     */
-
-    ENQUEUE(&kevent, keycode,  KeyRelease, XE_KEYBOARD);
-    ENQUEUE(&kevent, keycode,  KeyPress, XE_KEYBOARD);
-
-    /* And return the appropriate value so we get rescheduled */
-    return xf86Info.kbdRate;
-}
diff -ruN xf86-input-keyboard-1.2.0/src/sun_kbdMap.c xf86-input-keyboard/src/sun_kbdMap.c
--- xf86-input-keyboard-1.2.0/src/sun_kbdMap.c	1970-01-01 00:00:00.000000000 +0000
+++ xf86-input-keyboard/src/sun_kbdMap.c	2007-09-03 10:34:00.000000000 +0000
@@ -0,0 +1,671 @@
+/*
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ * Copyright 1993 by David Dawes <dawes@xfree86.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the names of Thomas Roell and David Dawes not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission.  Thomas Roell and David Dawes make no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
+ * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <X11/Xfuncproto.h>
+#include <X11/Sunkeysym.h>
+#include "atKeynames.h"
+#include "xf86OSKbd.h"
+#include "xf86Keymap.h"
+#include "sun_kbd.h"
+
+#include <sys/kbd.h>
+
+/* Map the Solaris keycodes to the "XFree86" keycodes. */
+
+/* Additional Sun Japanese Keyboard Keys not defined in common/atKeynames.h */
+#define KEY_Kanji	0x82
+#define KEY_Execute	0x83
+
+static unsigned char sunmap[256] = {
+#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__x86)
+	KEY_NOTUSED,		/*   0 */
+	KEY_Tilde,		/*   1 */
+	KEY_1,			/*   2 */
+	KEY_2,			/*   3 */
+	KEY_3,			/*   4 */
+	KEY_4,			/*   5 */
+	KEY_5,			/*   6 */
+	KEY_6,			/*   7 */
+	KEY_7,			/*   8 */
+	KEY_8,			/*   9 */
+	KEY_9,			/*  10 */
+	KEY_0,			/*  11 */
+	KEY_Minus,		/*  12 */
+	KEY_Equal,		/*  13 */
+	0x7D, /*KEY_P_YEN*/	/*  14 */
+	KEY_BackSpace,		/*  15 */
+	KEY_Tab,		/*  16 */
+	KEY_Q,			/*  17 */
+	KEY_W,			/*  18 */
+	KEY_E,			/*  19 */
+	KEY_R,			/*  20 */
+	KEY_T,			/*  21 */
+	KEY_Y,			/*  22 */
+	KEY_U,			/*  23 */
+	KEY_I,			/*  24 */
+	KEY_O,			/*  25 */
+	KEY_P,			/*  26 */
+	KEY_LBrace,		/*  27 */
+	KEY_RBrace,		/*  28 */
+	KEY_BSlash,		/*  29 */
+	KEY_CapsLock,		/*  30 */
+	KEY_A,			/*  31 */
+	KEY_S,			/*  32 */
+	KEY_D,			/*  33 */
+	KEY_F,			/*  34 */
+	KEY_G,			/*  35 */
+	KEY_H,			/*  36 */
+	KEY_J,			/*  37 */
+	KEY_K,			/*  38 */
+	KEY_L,			/*  39 */
+	KEY_SemiColon,		/*  40 */
+	KEY_Quote,		/*  41 */
+	KEY_UNKNOWN,		/*  42 */
+	KEY_Enter,		/*  43 */
+	KEY_ShiftL,		/*  44 */
+	KEY_Less,		/*  45 */
+	KEY_Z,			/*  46 */
+	KEY_X,			/*  47 */
+	KEY_C,			/*  48 */
+	KEY_V,			/*  49 */
+	KEY_B,			/*  50 */
+	KEY_N,			/*  51 */
+	KEY_M,			/*  52 */
+	KEY_Comma,		/*  53 */
+	KEY_Period,		/*  54 */
+	KEY_Slash,		/*  55 */
+	KEY_BSlash2,		/*  56 */
+	KEY_ShiftR,		/*  57 */
+	KEY_LCtrl,		/*  58 */
+	KEY_LMeta,		/*  59 */
+	KEY_Alt,		/*  60 */
+	KEY_Space,		/*  61 */
+	KEY_AltLang,		/*  62 */
+	KEY_RMeta,		/*  63 */
+	KEY_RCtrl,		/*  64 */
+	KEY_Menu,		/*  65 */
+	KEY_UNKNOWN,		/*  66 */
+	KEY_UNKNOWN,		/*  67 */
+	KEY_UNKNOWN,		/*  68 */
+	KEY_UNKNOWN,		/*  69 */
+	KEY_UNKNOWN,		/*  70 */
+	KEY_UNKNOWN,		/*  71 */
+	KEY_UNKNOWN,		/*  72 */
+	KEY_UNKNOWN,		/*  73 */
+	KEY_UNKNOWN,		/*  74 */
+	KEY_Insert,		/*  75 */
+	KEY_Delete,		/*  76 */
+	KEY_UNKNOWN,		/*  77 */
+	KEY_UNKNOWN,		/*  78 */
+	KEY_Left,		/*  79 */
+	KEY_Home,		/*  80 */
+	KEY_End,		/*  81 */
+	KEY_UNKNOWN,		/*  82 */
+	KEY_Up,			/*  83 */
+	KEY_Down,		/*  84 */
+	KEY_PgUp,		/*  85 */
+	KEY_PgDown,		/*  86 */
+	KEY_UNKNOWN,		/*  87 */
+	KEY_UNKNOWN,		/*  88 */
+	KEY_Right,		/*  89 */
+	KEY_NumLock,		/*  90 */
+	KEY_KP_7,		/*  91 */
+	KEY_KP_4,		/*  92 */
+	KEY_KP_1,		/*  93 */
+	KEY_UNKNOWN,		/*  94 */
+	KEY_KP_Divide,		/*  95 */
+	KEY_KP_8,		/*  96 */
+	KEY_KP_5,		/*  97 */
+	KEY_KP_2,		/*  98 */
+	KEY_KP_0,		/*  99 */
+	KEY_KP_Multiply,	/* 100 */
+	KEY_KP_9,		/* 101 */
+	KEY_KP_6,		/* 102 */
+	KEY_KP_3,		/* 103 */
+	KEY_KP_Decimal,		/* 104 */
+	KEY_KP_Minus,		/* 105 */
+	KEY_KP_Plus,		/* 106 */
+	KEY_UNKNOWN,		/* 107 */
+	KEY_KP_Enter,		/* 108 */
+	KEY_UNKNOWN,		/* 109 */
+	KEY_Escape,		/* 110 */
+	KEY_UNKNOWN,		/* 111 */
+	KEY_F1,			/* 112 */
+	KEY_F2,			/* 113 */
+	KEY_F3,			/* 114 */
+	KEY_F4,			/* 115 */
+	KEY_F5,			/* 116 */
+	KEY_F6,			/* 117 */
+	KEY_F7,			/* 118 */
+	KEY_F8,			/* 119 */
+	KEY_F9,			/* 120 */
+	KEY_F10,		/* 121 */
+	KEY_F11,		/* 122 */
+	KEY_F12,		/* 123 */
+	KEY_Print,		/* 124 */
+	KEY_ScrollLock,		/* 125 */
+	KEY_Pause,		/* 126 */
+	KEY_UNKNOWN,		/* 127 */
+	KEY_UNKNOWN,		/* 128 */
+	KEY_UNKNOWN,		/* 129 */
+	KEY_UNKNOWN,		/* 130 */
+	KEY_NFER,		/* 131 */
+	KEY_XFER,		/* 132 */
+	KEY_HKTG,		/* 133 */
+	KEY_UNKNOWN,		/* 134 */
+#elif defined(sparc) || defined(__sparc__)
+	KEY_UNKNOWN,		/* 0x00 */
+	KEY_UNKNOWN,		/* 0x01 */
+	KEY_UNKNOWN,		/* 0x02 */
+	KEY_UNKNOWN,		/* 0x03 */
+	KEY_UNKNOWN,		/* 0x04 */
+	KEY_F1,			/* 0x05 */
+	KEY_F2,			/* 0x06 */
+	KEY_F10,		/* 0x07 */
+	KEY_F3,			/* 0x08 */
+	KEY_F11,		/* 0x09 */
+	KEY_F4,			/* 0x0A */
+	KEY_F12,		/* 0x0B */
+	KEY_F5,			/* 0x0C */
+	KEY_UNKNOWN,		/* 0x0D */
+	KEY_F6,			/* 0x0E */
+	KEY_UNKNOWN,		/* 0x0F */
+	KEY_F7,			/* 0x10 */
+	KEY_F8,			/* 0x11 */
+	KEY_F9,			/* 0x12 */
+	KEY_Alt,		/* 0x13 */
+	KEY_Up,			/* 0x14 */
+	KEY_Pause,		/* 0x15 */
+	KEY_SysReqest,		/* 0x16 */
+	KEY_ScrollLock,		/* 0x17 */
+	KEY_Left,		/* 0x18 */
+	KEY_UNKNOWN,		/* 0x19 */
+	KEY_UNKNOWN,		/* 0x1A */
+	KEY_Down,		/* 0x1B */
+	KEY_Right,		/* 0x1C */
+	KEY_Escape,		/* 0x1D */
+	KEY_1,			/* 0x1E */
+	KEY_2,			/* 0x1F */
+	KEY_3,			/* 0x20 */
+	KEY_4,			/* 0x21 */
+	KEY_5,			/* 0x22 */
+	KEY_6,			/* 0x23 */
+	KEY_7,			/* 0x24 */
+	KEY_8,			/* 0x25 */
+	KEY_9,			/* 0x26 */
+	KEY_0,			/* 0x27 */
+	KEY_Minus,		/* 0x28 */
+	KEY_Equal,		/* 0x29 */
+	KEY_Tilde,		/* 0x2A */
+	KEY_BackSpace,		/* 0x2B */
+	KEY_Insert,		/* 0x2C */
+	KEY_UNKNOWN,		/* 0x2D */
+	KEY_KP_Divide,		/* 0x2E */
+	KEY_KP_Multiply,	/* 0x2F */
+	KEY_UNKNOWN,		/* 0x30 */
+	KEY_UNKNOWN,		/* 0x31 */
+	KEY_KP_Decimal,		/* 0x32 */
+	KEY_UNKNOWN,		/* 0x33 */
+	KEY_Home,		/* 0x34 */
+	KEY_Tab,		/* 0x35 */
+	KEY_Q,			/* 0x36 */
+	KEY_W,			/* 0x37 */
+	KEY_E,			/* 0x38 */
+	KEY_R,			/* 0x39 */
+	KEY_T,			/* 0x3A */
+	KEY_Y,			/* 0x3B */
+	KEY_U,			/* 0x3C */
+	KEY_I,			/* 0x3D */
+	KEY_O,			/* 0x3E */
+	KEY_P,			/* 0x3F */
+	KEY_LBrace,		/* 0x40 */
+	KEY_RBrace,		/* 0x41 */
+	KEY_Delete,		/* 0x42 */
+	KEY_UNKNOWN,		/* 0x43 */
+	KEY_KP_7,		/* 0x44 */
+	KEY_KP_8,		/* 0x45 */
+	KEY_KP_9,		/* 0x46 */
+	KEY_KP_Minus,		/* 0x47 */
+	KEY_UNKNOWN,		/* 0x48 */
+	KEY_UNKNOWN,		/* 0x49 */
+	KEY_End,		/* 0x4A */
+	KEY_UNKNOWN,		/* 0x4B */
+	KEY_LCtrl,		/* 0x4C */
+	KEY_A,			/* 0x4D */
+	KEY_S,			/* 0x4E */
+	KEY_D,			/* 0x4F */
+	KEY_F,			/* 0x50 */
+	KEY_G,			/* 0x51 */
+	KEY_H,			/* 0x52 */
+	KEY_J,			/* 0x53 */
+	KEY_K,			/* 0x54 */
+	KEY_L,			/* 0x55 */
+	KEY_SemiColon,		/* 0x56 */
+	KEY_Quote,		/* 0x57 */
+	KEY_BSlash,		/* 0x58 */
+	KEY_Enter,		/* 0x59 */
+	KEY_KP_Enter,		/* 0x5A */
+	KEY_KP_4,		/* 0x5B */
+	KEY_KP_5,		/* 0x5C */
+	KEY_KP_6,		/* 0x5D */
+	KEY_KP_0,		/* 0x5E */
+	KEY_UNKNOWN,		/* 0x5F */
+	KEY_PgUp,		/* 0x60 */
+	KEY_UNKNOWN,		/* 0x61 */
+	KEY_NumLock,		/* 0x62 */
+	KEY_ShiftL,		/* 0x63 */
+	KEY_Z,			/* 0x64 */
+	KEY_X,			/* 0x65 */
+	KEY_C,			/* 0x66 */
+	KEY_V,			/* 0x67 */
+	KEY_B,			/* 0x68 */
+	KEY_N,			/* 0x69 */
+	KEY_M,			/* 0x6A */
+	KEY_Comma,		/* 0x6B */
+	KEY_Period,		/* 0x6C */
+	KEY_Slash,		/* 0x6D */
+	KEY_ShiftR,		/* 0x6E */
+	KEY_UNKNOWN,		/* 0x6F */
+	KEY_KP_1,		/* 0x70 */
+	KEY_KP_2,		/* 0x71 */
+	KEY_KP_3,		/* 0x72 */
+	KEY_UNKNOWN,		/* 0x73 */
+	KEY_UNKNOWN,		/* 0x74 */
+	KEY_UNKNOWN,		/* 0x75 */
+	KEY_UNKNOWN,		/* 0x76 */
+	KEY_CapsLock,		/* 0x77 */
+	KEY_LMeta,		/* 0x78 */
+	KEY_Space,		/* 0x79 */
+	KEY_RMeta,		/* 0x7A */
+	KEY_PgDown,		/* 0x7B */
+	KEY_UNKNOWN,		/* 0x7C */
+	KEY_KP_Plus,		/* 0x7D */
+	KEY_UNKNOWN,		/* 0x7E */
+	KEY_UNKNOWN,		/* 0x7F */
+#endif
+	/* The rest default to KEY_UNKNOWN */
+};
+
+static
+TransMapRec sunTransMap = {
+    0,
+    (sizeof(sunmap)/sizeof(unsigned char)),
+    sunmap
+};
+
+#if defined(KB_USB)
+static unsigned char usbmap[256] = {
+/*
+ * partially taken from ../bsd/bsd_KbdMap.c
+ *
+ * added keycodes for Sun special keys (left function keys, audio control)
+ */
+	/* 0 */ KEY_NOTUSED,
+	/* 1 */ KEY_NOTUSED,
+	/* 2 */ KEY_NOTUSED,
+	/* 3 */ KEY_NOTUSED,
+	/* 4 */ KEY_A,		
+	/* 5 */ KEY_B,
+	/* 6 */ KEY_C,
+	/* 7 */ KEY_D,
+	/* 8 */ KEY_E,
+	/* 9 */ KEY_F,
+	/* 10 */ KEY_G,
+	/* 11 */ KEY_H,
+	/* 12 */ KEY_I,
+	/* 13 */ KEY_J,
+	/* 14 */ KEY_K,
+	/* 15 */ KEY_L,
+	/* 16 */ KEY_M,
+	/* 17 */ KEY_N,
+	/* 18 */ KEY_O,
+	/* 19 */ KEY_P,
+	/* 20 */ KEY_Q,
+	/* 21 */ KEY_R,
+	/* 22 */ KEY_S,
+	/* 23 */ KEY_T,
+	/* 24 */ KEY_U,
+	/* 25 */ KEY_V,
+	/* 26 */ KEY_W,
+	/* 27 */ KEY_X,
+	/* 28 */ KEY_Y,
+	/* 29 */ KEY_Z,
+	/* 30 */ KEY_1,		/* 1 !*/
+	/* 31 */ KEY_2,		/* 2 @ */
+	/* 32 */ KEY_3,		/* 3 # */
+	/* 33 */ KEY_4,		/* 4 $ */
+	/* 34 */ KEY_5,		/* 5 % */
+	/* 35 */ KEY_6,		/* 6 ^ */
+	/* 36 */ KEY_7,		/* 7 & */
+	/* 37 */ KEY_8,		/* 8 * */
+	/* 38 */ KEY_9,		/* 9 ( */
+	/* 39 */ KEY_0,		/* 0 ) */
+	/* 40 */ KEY_Enter,	/* Return  */
+	/* 41 */ KEY_Escape,	/* Escape */
+	/* 42 */ KEY_BackSpace,	/* Backspace Delete */
+	/* 43 */ KEY_Tab,	/* Tab */
+	/* 44 */ KEY_Space,	/* Space */
+	/* 45 */ KEY_Minus,	/* - _ */
+	/* 46 */ KEY_Equal,	/* = + */
+	/* 47 */ KEY_LBrace,	/* [ { */
+	/* 48 */ KEY_RBrace,	/* ] } */
+	/* 49 */ KEY_BSlash,	/* \ | */
+	/* 50 */ KEY_BSlash,	/* \ _ # ~ on some keyboards */
+	/* 51 */ KEY_SemiColon,	/* ; : */
+	/* 52 */ KEY_Quote,	/* ' " */
+	/* 53 */ KEY_Tilde,	/* ` ~ */
+	/* 54 */ KEY_Comma,	/* , <  */
+	/* 55 */ KEY_Period,	/* . > */
+	/* 56 */ KEY_Slash,	/* / ? */
+	/* 57 */ KEY_CapsLock,	/* Caps Lock */
+	/* 58 */ KEY_F1,		/* F1 */
+	/* 59 */ KEY_F2,		/* F2 */
+	/* 60 */ KEY_F3,		/* F3 */
+	/* 61 */ KEY_F4,		/* F4 */
+	/* 62 */ KEY_F5,		/* F5 */
+	/* 63 */ KEY_F6,		/* F6 */
+	/* 64 */ KEY_F7,		/* F7 */
+	/* 65 */ KEY_F8,		/* F8 */
+	/* 66 */ KEY_F9,		/* F9 */
+	/* 67 */ KEY_F10,	/* F10 */
+	/* 68 */ KEY_F11,	/* F11 */
+	/* 69 */ KEY_F12,	/* F12 */
+	/* 70 */ KEY_Print,	/* PrintScrn SysReq */
+	/* 71 */ KEY_ScrollLock,	/* Scroll Lock */
+	/* 72 */ KEY_Pause,	/* Pause Break */
+	/* 73 */ KEY_Insert,	/* Insert XXX  Help on some Mac Keyboards */
+	/* 74 */ KEY_Home,	/* Home */
+	/* 75 */ KEY_PgUp,	/* Page Up */
+	/* 76 */ KEY_Delete,	/* Delete */
+	/* 77 */ KEY_End,	/* End */
+	/* 78 */ KEY_PgDown,	/* Page Down */
+	/* 79 */ KEY_Right,	/* Right Arrow */
+	/* 80 */ KEY_Left,	/* Left Arrow */
+	/* 81 */ KEY_Down,	/* Down Arrow */
+	/* 82 */ KEY_Up,		/* Up Arrow */
+	/* 83 */ KEY_NumLock,	/* Num Lock */
+	/* 84 */ KEY_KP_Divide,	/* Keypad / */
+	/* 85 */ KEY_KP_Multiply, /* Keypad * */
+	/* 86 */ KEY_KP_Minus,	/* Keypad - */
+	/* 87 */ KEY_KP_Plus,	/* Keypad + */
+	/* 88 */ KEY_KP_Enter,	/* Keypad Enter */
+	/* 89 */ KEY_KP_1,	/* Keypad 1 End */
+	/* 90 */ KEY_KP_2,	/* Keypad 2 Down */
+	/* 91 */ KEY_KP_3,	/* Keypad 3 Pg Down */
+	/* 92 */ KEY_KP_4,	/* Keypad 4 Left  */
+	/* 93 */ KEY_KP_5,	/* Keypad 5 */
+	/* 94 */ KEY_KP_6,	/* Keypad 6 */
+	/* 95 */ KEY_KP_7,	/* Keypad 7 Home */
+	/* 96 */ KEY_KP_8,	/* Keypad 8 Up */
+	/* 97 */ KEY_KP_9,	/* KEypad 9 Pg Up */
+	/* 98 */ KEY_KP_0,	/* Keypad 0 Ins */
+	/* 99 */ KEY_KP_Decimal,	/* Keypad . Del */
+	/* 100 */ KEY_Less,	/* < > on some keyboards */
+	/* 101 */ KEY_Menu,	/* Menu */
+	/* 102 */ KEY_Power,	/* Sun: Power */
+	/* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
+	/* 104 */ KEY_NOTUSED,
+	/* 105 */ KEY_NOTUSED,
+	/* 106 */ KEY_NOTUSED,
+	/* 107 */ KEY_NOTUSED,
+	/* 108 */ KEY_NOTUSED,
+	/* 109 */ KEY_NOTUSED,
+	/* 110 */ KEY_NOTUSED,
+	/* 111 */ KEY_NOTUSED,
+	/* 112 */ KEY_NOTUSED,
+	/* 113 */ KEY_NOTUSED,
+	/* 114 */ KEY_NOTUSED,
+	/* 115 */ KEY_NOTUSED,
+	/* 116 */ KEY_L7,	/* Sun: Open */
+	/* 117 */ KEY_Help,	/* Sun: Help */
+	/* 118 */ KEY_L3,	/* Sun: Props */
+	/* 119 */ KEY_L5,	/* Sun: Front */
+	/* 120 */ KEY_L1,	/* Sun: Stop */
+	/* 121 */ KEY_L2,	/* Sun: Again */
+	/* 122 */ KEY_L4,	/* Sun: Undo */
+	/* 123 */ KEY_L10,	/* Sun: Cut */
+	/* 124 */ KEY_L6,	/* Sun: Copy */
+	/* 125 */ KEY_L8,	/* Sun: Paste */
+	/* 126 */ KEY_L9,	/* Sun: Find */
+	/* 127 */ KEY_Mute,	/* Sun: AudioMute */
+	/* 128 */ KEY_AudioRaise,	/* Sun: AudioRaise */
+	/* 129 */ KEY_AudioLower,	/* Sun: AudioLower */
+	/* 130 */ KEY_NOTUSED,
+	/* 131 */ KEY_NOTUSED,
+	/* 132 */ KEY_NOTUSED,
+	/* 133 */ KEY_NOTUSED,
+	/* 134 */ KEY_NOTUSED,
+	/* 135 */ KEY_BSlash2,	/* Sun Japanese Kbd: Backslash / Underscore */
+	/* 136 */ KEY_XFER,	/* Sun Japanese Kbd: Henkan Mode */
+	/* 137 */ KEY_Yen,	/* Sun Japanese Kbd: Yen / Brokenbar */
+	/* 138 */ KEY_Kanji,	/* Sun Japanese Kbd: Kanji */
+	/* 139 */ KEY_Execute,	/* Sun Japanese Kbd: Execute */
+	/* 140 */ KEY_NOTUSED,
+	/* 141 */ KEY_NOTUSED,
+	/* 142 */ KEY_NOTUSED,
+	/* 143 */ KEY_NOTUSED,
+	/* 144 */ KEY_NOTUSED,
+	/* 145 */ KEY_NOTUSED,
+	/* 146 */ KEY_NOTUSED,
+	/* 147 */ KEY_NOTUSED,
+	/* 148 */ KEY_NOTUSED,
+	/* 149 */ KEY_NOTUSED,
+	/* 150 */ KEY_NOTUSED,
+	/* 151 */ KEY_NOTUSED,
+	/* 152 */ KEY_NOTUSED,
+	/* 153 */ KEY_NOTUSED,
+	/* 154 */ KEY_NOTUSED,
+	/* 155 */ KEY_NOTUSED,
+	/* 156 */ KEY_NOTUSED,
+	/* 157 */ KEY_NOTUSED,
+	/* 158 */ KEY_NOTUSED,
+	/* 159 */ KEY_NOTUSED,
+	/* 160 */ KEY_NOTUSED,
+	/* 161 */ KEY_NOTUSED,
+	/* 162 */ KEY_NOTUSED,
+	/* 163 */ KEY_NOTUSED,
+	/* 164 */ KEY_NOTUSED,
+	/* 165 */ KEY_NOTUSED,
+	/* 166 */ KEY_NOTUSED,
+	/* 167 */ KEY_NOTUSED,
+	/* 168 */ KEY_NOTUSED,
+	/* 169 */ KEY_NOTUSED,
+	/* 170 */ KEY_NOTUSED,
+	/* 171 */ KEY_NOTUSED,
+	/* 172 */ KEY_NOTUSED,
+	/* 173 */ KEY_NOTUSED,
+	/* 174 */ KEY_NOTUSED,
+	/* 175 */ KEY_NOTUSED,
+	/* 176 */ KEY_NOTUSED,
+	/* 177 */ KEY_NOTUSED,
+	/* 178 */ KEY_NOTUSED,
+	/* 179 */ KEY_NOTUSED,
+	/* 180 */ KEY_NOTUSED,
+	/* 181 */ KEY_NOTUSED,
+	/* 182 */ KEY_NOTUSED,
+	/* 183 */ KEY_NOTUSED,
+	/* 184 */ KEY_NOTUSED,
+	/* 185 */ KEY_NOTUSED,
+	/* 186 */ KEY_NOTUSED,
+	/* 187 */ KEY_NOTUSED,
+	/* 188 */ KEY_NOTUSED,
+	/* 189 */ KEY_NOTUSED,
+	/* 190 */ KEY_NOTUSED,
+	/* 191 */ KEY_NOTUSED,
+	/* 192 */ KEY_NOTUSED,
+	/* 193 */ KEY_NOTUSED,
+	/* 194 */ KEY_NOTUSED,
+	/* 195 */ KEY_NOTUSED,
+	/* 196 */ KEY_NOTUSED,
+	/* 197 */ KEY_NOTUSED,
+	/* 198 */ KEY_NOTUSED,
+	/* 199 */ KEY_NOTUSED,
+	/* 200 */ KEY_NOTUSED,
+	/* 201 */ KEY_NOTUSED,
+	/* 202 */ KEY_NOTUSED,
+	/* 203 */ KEY_NOTUSED,
+	/* 204 */ KEY_NOTUSED,
+	/* 205 */ KEY_NOTUSED,
+	/* 206 */ KEY_NOTUSED,
+	/* 207 */ KEY_NOTUSED,
+	/* 208 */ KEY_NOTUSED,
+	/* 209 */ KEY_NOTUSED,
+	/* 210 */ KEY_NOTUSED,
+	/* 211 */ KEY_NOTUSED,
+	/* 212 */ KEY_NOTUSED,
+	/* 213 */ KEY_NOTUSED,
+	/* 214 */ KEY_NOTUSED,
+	/* 215 */ KEY_NOTUSED,
+	/* 216 */ KEY_NOTUSED,
+	/* 217 */ KEY_NOTUSED,
+	/* 218 */ KEY_NOTUSED,
+	/* 219 */ KEY_NOTUSED,
+	/* 220 */ KEY_NOTUSED,
+	/* 221 */ KEY_NOTUSED,
+	/* 222 */ KEY_NOTUSED,
+	/* 223 */ KEY_NOTUSED,
+	/* 224 */ KEY_LCtrl,	/* Left Control */
+	/* 225 */ KEY_ShiftL,	/* Left Shift */
+	/* 226 */ KEY_Alt,	/* Left Alt */
+	/* 227 */ KEY_LMeta,	/* Left Meta */
+	/* 228 */ KEY_RCtrl,	/* Right Control */
+	/* 229 */ KEY_ShiftR,	/* Right Shift */
+	/* 230 */ KEY_AltLang,	/* Right Alt, AKA AltGr */
+	/* 231 */ KEY_RMeta,	/* Right Meta */
+};
+
+static
+TransMapRec usbTransMap = {
+    0,
+    (sizeof(usbmap)/sizeof(unsigned char)),
+    usbmap
+};
+#endif /* KB_USB */
+
+_X_HIDDEN void
+KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
+{
+    KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+    sunKbdPrivPtr priv = (sunKbdPrivPtr) pKbd->private;
+    const unsigned char *keymap;
+    int i;
+    KeySym        *k;
+    
+#if defined(KB_USB)
+    if (priv->ktype == KB_USB)
+	pKbd->scancodeMap = &usbTransMap;
+    else
+#endif
+        pKbd->scancodeMap = &sunTransMap;
+
+    /*
+     * Add Sun keyboard keysyms to default map
+     */
+#define map_for_key(k,c) 	map[(k * GLYPHS_PER_KEY) + c]   
+    map_for_key(KEY_Kanji,	0) = XK_Kanji;
+    map_for_key(KEY_Execute,	0) = XK_Execute;
+    map_for_key(KEY_Power,	0) = SunXK_PowerSwitch;
+    map_for_key(KEY_Power,	1) = SunXK_PowerSwitchShift;
+    map_for_key(KEY_Mute,	0) = SunXK_AudioMute;
+    map_for_key(KEY_Mute,	1) = SunXK_VideoDegauss;
+    map_for_key(KEY_AudioLower,	0) = SunXK_AudioLowerVolume;
+    map_for_key(KEY_AudioLower,	1) = SunXK_VideoLowerBrightness;
+    map_for_key(KEY_AudioRaise,	0) = SunXK_AudioRaiseVolume;
+    map_for_key(KEY_AudioRaise,	1) = SunXK_VideoRaiseBrightness;
+    map_for_key(KEY_Help,	0) = XK_Help;
+    map_for_key(KEY_L1,		0) = XK_L1;
+    map_for_key(KEY_L2,		0) = XK_L2;
+    map_for_key(KEY_L3,		0) = XK_L3;
+    map_for_key(KEY_L4,		0) = XK_L4;
+    map_for_key(KEY_L5,		0) = XK_L5;
+    map_for_key(KEY_L6,		0) = XK_L6;
+    map_for_key(KEY_L7,		0) = XK_L7;
+    map_for_key(KEY_L8,		0) = XK_L8;
+    map_for_key(KEY_L9,		0) = XK_L9;
+    map_for_key(KEY_L10,	0) = XK_L10;
+    map_for_key(KEY_F11,	0) = SunXK_F36;
+    map_for_key(KEY_F12,	0) = SunXK_F37;
+    map_for_key(KEY_Menu,	0) = XK_Multi_key;
+    
+    /*
+     * compute the modifier map
+     */
+    for (i = 0; i < MAP_LENGTH; i++)
+	pModMap[i] = NoSymbol;  /* make sure it is restored */
+  
+    for (k = map, i = MIN_KEYCODE;
+	 i < (NUM_KEYCODES + MIN_KEYCODE);
+	 i++, k += 4)
+    {
+	switch(*k) {
+      
+	case XK_Shift_L:
+	case XK_Shift_R:
+	    pModMap[i] = ShiftMask;
+	    break;
+      
+	case XK_Control_L:
+	case XK_Control_R:
+	    pModMap[i] = ControlMask;
+	    break;
+      
+	case XK_Caps_Lock:
+	    pModMap[i] = LockMask;
+	    break;
+      
+	case XK_Alt_L:
+	case XK_Alt_R:
+	    pModMap[i] = AltMask;
+	    break;
+      
+	case XK_Num_Lock:
+	    pModMap[i] = NumLockMask;
+	    break;
+
+	case XK_Scroll_Lock:
+	    pModMap[i] = ScrollLockMask;
+	    break;
+
+	    /* kana support */
+	case XK_Kana_Lock:
+	case XK_Kana_Shift:
+	    pModMap[i] = KanaMask;
+	    break;
+
+	    /* alternate toggle for multinational support */
+	case XK_Mode_switch:
+	    pModMap[i] = AltLangMask;
+	    break;
+
+	}
+    }
+	
+    pKeySyms->map        = map;
+    pKeySyms->mapWidth   = GLYPHS_PER_KEY;
+    pKeySyms->minKeyCode = MIN_KEYCODE;
+    pKeySyms->maxKeyCode = MAX_KEYCODE;
+}
diff -ruN xf86-input-keyboard-1.2.0/src/xf86Keymap.h xf86-input-keyboard/src/xf86Keymap.h
--- xf86-input-keyboard-1.2.0/src/xf86Keymap.h	1970-01-01 00:00:00.000000000 +0000
+++ xf86-input-keyboard/src/xf86Keymap.h	2007-09-03 10:34:00.000000000 +0000
@@ -0,0 +1,308 @@
+
+/*
+ * Copyright (c) 1994-2002 by The XFree86 Project, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
+/*
+ *
+ * For Scancodes see notes in atKeynames.h  !!!!
+ *
+ */
+/* $XConsortium: xf86Keymap.h /main/14 1996/02/21 17:38:47 kaleb $ */
+
+#include "xorg-server.h"
+
+static KeySym map[NUM_KEYCODES * GLYPHS_PER_KEY] = {
+
+    /* 0x00 */  NoSymbol,       NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x01 */  XK_Escape,      NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x02 */  XK_1,           XK_exclam,	NoSymbol,	NoSymbol,
+    /* 0x03 */  XK_2,           XK_at,		NoSymbol,	NoSymbol,
+    /* 0x04 */  XK_3,           XK_numbersign,	NoSymbol,	NoSymbol,
+    /* 0x05 */  XK_4,           XK_dollar,	NoSymbol,	NoSymbol,
+    /* 0x06 */  XK_5,           XK_percent,	NoSymbol,	NoSymbol,
+    /* 0x07 */  XK_6,           XK_asciicircum,	NoSymbol,	NoSymbol,
+    /* 0x08 */  XK_7,           XK_ampersand,	NoSymbol,	NoSymbol,
+    /* 0x09 */  XK_8,           XK_asterisk,	NoSymbol,	NoSymbol,
+    /* 0x0a */  XK_9,           XK_parenleft,	NoSymbol,	NoSymbol,
+    /* 0x0b */  XK_0,           XK_parenright,	NoSymbol,	NoSymbol,
+    /* 0x0c */  XK_minus,       XK_underscore,	NoSymbol,	NoSymbol,
+    /* 0x0d */  XK_equal,       XK_plus,	NoSymbol,	NoSymbol,
+    /* 0x0e */  XK_BackSpace,   NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x0f */  XK_Tab,         XK_ISO_Left_Tab,NoSymbol,	NoSymbol,
+    /* 0x10 */  XK_Q,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x11 */  XK_W,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x12 */  XK_E,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x13 */  XK_R,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x14 */  XK_T,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x15 */  XK_Y,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x16 */  XK_U,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x17 */  XK_I,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x18 */  XK_O,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x19 */  XK_P,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1a */  XK_bracketleft, XK_braceleft,	NoSymbol,	NoSymbol,
+    /* 0x1b */  XK_bracketright,XK_braceright,	NoSymbol,	NoSymbol,
+    /* 0x1c */  XK_Return,      NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1d */  XK_Control_L,   NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1e */  XK_A,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1f */  XK_S,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x20 */  XK_D,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x21 */  XK_F,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x22 */  XK_G,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x23 */  XK_H,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x24 */  XK_J,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x25 */  XK_K,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x26 */  XK_L,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x27 */  XK_semicolon,   XK_colon,	NoSymbol,	NoSymbol,
+    /* 0x28 */  XK_quoteright,  XK_quotedbl,	NoSymbol,	NoSymbol,
+    /* 0x29 */  XK_quoteleft,	XK_asciitilde,	NoSymbol,	NoSymbol,
+    /* 0x2a */  XK_Shift_L,     NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2b */  XK_backslash,   XK_bar,		NoSymbol,	NoSymbol,
+    /* 0x2c */  XK_Z,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2d */  XK_X,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2e */  XK_C,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2f */  XK_V,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x30 */  XK_B,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x31 */  XK_N,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x32 */  XK_M,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x33 */  XK_comma,       XK_less,	NoSymbol,	NoSymbol,
+    /* 0x34 */  XK_period,      XK_greater,	NoSymbol,	NoSymbol,
+    /* 0x35 */  XK_slash,       XK_question,	NoSymbol,	NoSymbol,
+    /* 0x36 */  XK_Shift_R,     NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x37 */  XK_KP_Multiply, NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x38 */  XK_Alt_L,	XK_Meta_L,	NoSymbol,	NoSymbol,
+    /* 0x39 */  XK_space,       NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3a */  XK_Caps_Lock,   NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3b */  XK_F1,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3c */  XK_F2,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3d */  XK_F3,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3e */  XK_F4,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3f */  XK_F5,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x40 */  XK_F6,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x41 */  XK_F7,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x42 */  XK_F8,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x43 */  XK_F9,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x44 */  XK_F10,         NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x45 */  XK_Num_Lock,    NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x46 */  XK_Scroll_Lock,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x47 */  XK_KP_Home,	XK_KP_7,	NoSymbol,	NoSymbol,
+    /* 0x48 */  XK_KP_Up,	XK_KP_8,	NoSymbol,	NoSymbol,
+    /* 0x49 */  XK_KP_Prior,	XK_KP_9,	NoSymbol,	NoSymbol,
+    /* 0x4a */  XK_KP_Subtract, NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x4b */  XK_KP_Left,	XK_KP_4,	NoSymbol,	NoSymbol,
+    /* 0x4c */  XK_KP_Begin,	XK_KP_5,	NoSymbol,	NoSymbol,
+    /* 0x4d */  XK_KP_Right,	XK_KP_6,	NoSymbol,	NoSymbol,
+    /* 0x4e */  XK_KP_Add,      NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x4f */  XK_KP_End,	XK_KP_1,	NoSymbol,	NoSymbol,
+    /* 0x50 */  XK_KP_Down,	XK_KP_2,	NoSymbol,	NoSymbol,
+    /* 0x51 */  XK_KP_Next,	XK_KP_3,	NoSymbol,	NoSymbol,
+    /* 0x52 */  XK_KP_Insert,	XK_KP_0,	NoSymbol,	NoSymbol,
+    /* 0x53 */  XK_KP_Delete,	XK_KP_Decimal,	NoSymbol,	NoSymbol,
+    /* 0x54 */  XK_Sys_Req,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x55 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x56 */  XK_less,	XK_greater,	NoSymbol,	NoSymbol,
+    /* 0x57 */  XK_F11,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x58 */  XK_F12,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x59 */  XK_Home,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5a */  XK_Up,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5b */  XK_Prior,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5c */  XK_Left,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5d */  XK_Begin,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5e */  XK_Right,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5f */  XK_End,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x60 */  XK_Down,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x61 */  XK_Next,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x62 */  XK_Insert,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x63 */  XK_Delete,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x64 */  XK_KP_Enter,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x65 */  XK_Control_R,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x66 */  XK_Pause,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x67 */  XK_Print,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x68 */  XK_KP_Divide,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x69 */  XK_Alt_R,	XK_Meta_R,	NoSymbol,	NoSymbol,
+    /* 0x6a */  XK_Break,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6b */  XK_Meta_L,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6c */  XK_Meta_R,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6d */  XK_Menu,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6e */  XK_F13,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6f */  XK_F14,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x70 */  XK_F15,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x71 */  XK_F16,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x72 */  XK_F17,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x73 */  XK_backslash,	XK_underscore,	NoSymbol,	NoSymbol,
+    /* 0x74 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x75 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x76 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x77 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x78 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x79 */  XK_Henkan,	XK_Mode_switch,	NoSymbol,	NoSymbol,
+    /* 0x7a */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7b */  XK_Muhenkan,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7c */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7d */  XK_backslash,	XK_bar,		NoSymbol,	NoSymbol,
+    /* 0x7e */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7f */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+};
+
+#if !defined(Lynx) && \
+    !defined(__UNIXOS2__) && \
+    !defined(__mips__) && \
+    !defined(linux) && \
+    !defined(CSRG_BASED) && \
+    !defined(__CYGWIN__) && \
+    !defined(__SOL8__) && \
+    (!defined(sun) || defined(i386))
+
+static KeySym map84[NUM_KEYCODES * GLYPHS_PER_KEY] = {
+    /* 0x00 */  NoSymbol,       NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x01 */  XK_Escape,      NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x02 */  XK_1,           XK_exclam,	NoSymbol,	NoSymbol,
+    /* 0x03 */  XK_2,           XK_at,		NoSymbol,	NoSymbol,
+    /* 0x04 */  XK_3,           XK_numbersign,	NoSymbol,	NoSymbol,
+    /* 0x05 */  XK_4,           XK_dollar,	NoSymbol,	NoSymbol,
+    /* 0x06 */  XK_5,           XK_percent,	NoSymbol,	NoSymbol,
+    /* 0x07 */  XK_6,           XK_asciicircum,	NoSymbol,	NoSymbol,
+    /* 0x08 */  XK_7,           XK_ampersand,	NoSymbol,	NoSymbol,
+    /* 0x09 */  XK_8,           XK_asterisk,	NoSymbol,	NoSymbol,
+    /* 0x0a */  XK_9,           XK_parenleft,	NoSymbol,	NoSymbol,
+    /* 0x0b */  XK_0,           XK_parenright,	NoSymbol,	NoSymbol,
+    /* 0x0c */  XK_minus,       XK_underscore,	NoSymbol,	NoSymbol,
+    /* 0x0d */  XK_equal,       XK_plus,	NoSymbol,	NoSymbol,
+    /* 0x0e */  XK_BackSpace,   NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x0f */  XK_Tab,         NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x10 */  XK_Q,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x11 */  XK_W,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x12 */  XK_E,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x13 */  XK_R,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x14 */  XK_T,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x15 */  XK_Y,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x16 */  XK_U,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x17 */  XK_I,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x18 */  XK_O,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x19 */  XK_P,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1a */  XK_bracketleft, XK_braceleft,	NoSymbol,	NoSymbol,
+    /* 0x1b */  XK_bracketright,XK_braceright,	NoSymbol,	NoSymbol,
+    /* 0x1c */  XK_Return,      NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1d */  XK_Control_L,   NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1e */  XK_A,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x1f */  XK_S,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x20 */  XK_D,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x21 */  XK_F,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x22 */  XK_G,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x23 */  XK_H,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x24 */  XK_J,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x25 */  XK_K,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x26 */  XK_L,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x27 */  XK_semicolon,   XK_colon,	NoSymbol,	NoSymbol,
+    /* 0x28 */  XK_quoteright,  XK_quotedbl,	NoSymbol,	NoSymbol,
+    /* 0x29 */  XK_quoteleft,	XK_asciitilde,	NoSymbol,	NoSymbol,
+    /* 0x2a */  XK_Shift_L,     NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2b */  XK_backslash,   XK_bar,		NoSymbol,	NoSymbol,
+    /* 0x2c */  XK_Z,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2d */  XK_X,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2e */  XK_C,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x2f */  XK_V,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x30 */  XK_B,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x31 */  XK_N,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x32 */  XK_M,           NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x33 */  XK_comma,       XK_less,	NoSymbol,	NoSymbol,
+    /* 0x34 */  XK_period,      XK_greater,	NoSymbol,	NoSymbol,
+    /* 0x35 */  XK_slash,       XK_question,	NoSymbol,	NoSymbol,
+    /* 0x36 */  XK_Shift_R,     NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x37 */  XK_KP_Multiply, NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x38 */  XK_Alt_L,	XK_Meta_L,	NoSymbol,	NoSymbol,
+    /* 0x39 */  XK_space,       NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3a */  XK_Caps_Lock,   NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3b */  XK_F1,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3c */  XK_F2,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3d */  XK_F3,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3e */  XK_F4,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x3f */  XK_F5,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x40 */  XK_F6,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x41 */  XK_F7,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x42 */  XK_F8,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x43 */  XK_F9,          NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x44 */  XK_F10,         NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x45 */  XK_Num_Lock,    NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x46 */  XK_Scroll_Lock,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x47 */  XK_KP_Home,	XK_KP_7,	NoSymbol,	NoSymbol,
+    /* 0x48 */  XK_KP_Up,	XK_KP_8,	NoSymbol,	NoSymbol,
+    /* 0x49 */  XK_KP_Prior,	XK_KP_9,	NoSymbol,	NoSymbol,
+    /* 0x4a */  XK_KP_Subtract, NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x4b */  XK_KP_Left,	XK_KP_4,	NoSymbol,	NoSymbol,
+    /* 0x4c */  NoSymbol,	XK_KP_5,	NoSymbol,	NoSymbol,
+    /* 0x4d */  XK_KP_Right,	XK_KP_6,	NoSymbol,	NoSymbol,
+    /* 0x4e */  XK_KP_Add,      NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x4f */  XK_KP_End,	XK_KP_1,	NoSymbol,	NoSymbol,
+    /* 0x50 */  XK_KP_Down,	XK_KP_2,	NoSymbol,	NoSymbol,
+    /* 0x51 */  XK_KP_Next,	XK_KP_3,	NoSymbol,	NoSymbol,
+    /* 0x52 */  XK_KP_Insert,	XK_KP_0,	NoSymbol,	NoSymbol,
+    /* 0x53 */  XK_KP_Delete,	XK_KP_Decimal,	NoSymbol,	NoSymbol,
+    /* 0x54 */  XK_Sys_Req,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x55 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x56 */  XK_less,	XK_greater,	NoSymbol,	NoSymbol,
+    /* 0x57 */  XK_F11,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x58 */  XK_F12,		NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x59 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5a */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5b */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5c */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5d */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5e */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x5f */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x60 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x61 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x62 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x63 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x64 */  XK_KP_Enter,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x65 */  XK_Control_R,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x66 */  XK_Pause,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x67 */  XK_Print,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x68 */  XK_KP_Divide,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x69 */  XK_Alt_R,	XK_Meta_R,	NoSymbol,	NoSymbol,
+    /* 0x6a */  XK_Break,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6b */  XK_Meta_L,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6c */  XK_Meta_R,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6d */  XK_Menu,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6e */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x6f */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x70 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x71 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x72 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x73 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x74 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x75 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x76 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x77 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x78 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x79 */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7a */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7b */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7c */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7d */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+    /* 0x7e */  NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+};
+#endif
diff -ruN xf86-input-keyboard-1.2.0/src/xf86OSKbd.h xf86-input-keyboard/src/xf86OSKbd.h
--- xf86-input-keyboard-1.2.0/src/xf86OSKbd.h	1970-01-01 00:00:00.000000000 +0000
+++ xf86-input-keyboard/src/xf86OSKbd.h	2007-09-03 10:34:00.000000000 +0000
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2002-2003 by The XFree86 Project, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ *
+ * Author: Ivan Pascal.
+ */
+
+#include "xf86Xinput.h"
+
+Bool ATScancode(InputInfoPtr pInfo, int *scanCode);
+
+/* Public interface to OS-specific keyboard support. */
+
+typedef	int	(*KbdInitProc)(InputInfoPtr pInfo, int what);
+typedef	int	(*KbdOnProc)(InputInfoPtr pInfo, int what);
+typedef	int	(*KbdOffProc)(InputInfoPtr pInfo, int what);
+typedef	void	(*BellProc)(InputInfoPtr pInfo,
+                            int loudness, int pitch, int duration);
+typedef	void	(*SetLedsProc)(InputInfoPtr pInfo, int leds);
+typedef	int	(*GetLedsProc)(InputInfoPtr pInfo);
+typedef	void	(*SetKbdRepeatProc)(InputInfoPtr pInfo, char rad);
+typedef	void	(*KbdGetMappingProc)(InputInfoPtr pInfo,
+                                     KeySymsPtr pKeySyms, CARD8* pModMap);
+typedef	int	(*GetSpecialKeyProc)(InputInfoPtr pInfo, int scanCode);
+typedef	Bool	(*SpecialKeyProc)(InputInfoPtr pInfo,
+                                     int key, Bool down, int modifiers);
+typedef	int	(*RemapScanCodeProc)(InputInfoPtr pInfo, int *scanCode);
+typedef	Bool	(*OpenKeyboardProc)(InputInfoPtr pInfo);
+typedef	void	(*PostEventProc)(InputInfoPtr pInfo,
+                                 unsigned int key, Bool down);
+typedef struct {
+    int                 begin;
+    int                 end;
+    unsigned char       *map;
+} TransMapRec, *TransMapPtr;
+
+typedef struct {
+    KbdInitProc		KbdInit;
+    KbdOnProc		KbdOn;
+    KbdOffProc		KbdOff;
+    BellProc		Bell;
+    SetLedsProc		SetLeds;
+    GetLedsProc		GetLeds;
+    SetKbdRepeatProc	SetKbdRepeat;
+    KbdGetMappingProc	KbdGetMapping;
+    RemapScanCodeProc	RemapScanCode;
+    GetSpecialKeyProc	GetSpecialKey;
+    SpecialKeyProc	SpecialKey;
+
+    OpenKeyboardProc	OpenKeyboard;
+    PostEventProc	PostEvent;
+
+    int			rate;
+    int			delay;
+    int			bell_pitch;
+    int			bell_duration;
+    Bool		autoRepeat;
+    unsigned long	leds;
+    unsigned long	xledsMask;
+    unsigned long	keyLeds;
+    int			scanPrefix;
+    Bool		vtSwitchSupported;
+    Bool		CustomKeycodes;
+    Bool		noXkb;
+    Bool		isConsole;
+    TransMapPtr         scancodeMap;
+    TransMapPtr         specialMap;
+
+    /* os specific */
+    pointer		private;
+    int			kbdType;
+    int			consType;
+    int			wsKbdType;
+    Bool		sunKbd;
+    Bool		Panix106;
+
+} KbdDevRec, *KbdDevPtr;
+
+typedef enum {
+    PROT_STD,
+    PROT_XQUEUE,
+    PROT_WSCONS,
+    PROT_USB,
+    PROT_UNKNOWN_KBD
+} KbdProtocolId;
+
+typedef struct {
+    const char		*name;
+    KbdProtocolId	id;
+} KbdProtocolRec;
+
+Bool xf86OSKbdPreInit(InputInfoPtr pInfo);
+
+/* Adjust this when the kbd interface changes. */
+
+/*
+ * History:
+ *
+ *  1.0.0 - Initial version.
+ */
+
+#define OS_KBD_VERSION_MAJOR 1
+#define OS_KBD_VERSION_MINOR 0
+#define OS_KBD_VERSION_PATCH 0
+
+#define OS_KBD_VERSION_CURRENT						\
+	BUILTIN_INTERFACE_VERSION_NUMERIC(OS_KBD_VERSION_MAJOR,		\
+					  OS_KBD_VERSION_MINOR,		\
+					  OS_KBD_VERSION_PATCH)
+