0.99
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..5223d95
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,107 @@
+Changes from the prerelease to version 0.8:
+
+o Enhanced the shorthand notation `keycode xx = a', where `a' is an
+  ASCII letter and changed `dumpkeys' and `loadkeys' accordingly.
+  Now this entry defines useful values in shift+control, meta+shift,
+  meta+control and meta+control+shift keytables, too. AltGr entries
+  also default now to the value of non-AltGr entries.
+o Added the possibility to split long lines into multiple shorter ones
+  by appending a backslash at the end of each partial line.
+o Added a version number and a short usage message to `dumpkeys'
+o Added the options --short-info, --long-info (replaces the symbol
+  dump, -s), --numeric, --full-table, --funcs-only, --keys-only to
+  `dumpkeys'. See manpage for more info.
+o Added a version number, a short usage message and the ability to load
+  multiple map files at a time to `loadkeys'.
+o Added the utility `mktable' to generate the kernel default binding
+  table automatically from the currently loaded keytable.
+o Added the utility `showkey' for interactively inspecting the
+  scancodes and keycode values sent by key presses and releases.
+o Fixed the value of Uncaps_Shift, eliminated obsolete Map_xx symbols
+o Added Meta_Control_xxx symbols.
+o Added symbols for locking modifiers (kernel 0.99pl12 doesn't support this)
+
+Changes from version 0.8 to version 0.81:
+
+o Updated and fixed the keytable files
+o Minor additions to the loadkeys man page
+o Added support for ISO 8859-{2,3,4} character symbols, updated
+  dumpkeys man page accordingly
+
+Changes from version 0.81 to version 0.82 (aeb@cwi.nl):
+
+o Made mktable an option of loadkeys, so that the file defkeymap.c
+  produced is independent of the current kernel, and independent of
+  the current keyboard settings. (The old mktable program is now
+  obsolete.)
+o After  dumpkeys > x; loadkeys x; dumpkeys > y  the files x and y
+  should be identical. They were not. I hope they are now.
+o Showkey now restores the original keyboard mode.
+o Loadkeys now accepts quotes and backslashes in strings.
+o Added compose key support.
+
+Changes for 0.83 (aeb):
+
+o Added KT_LETTER, so that CapsLock can work correctly.
+  For the time being, this is denoted by a leading + in the keymap.
+o Added setfont, showfont, mapscrn.
+o Added setleds, setmetamode.
+o Put data by default in three subdirectories of /usr/lib/kbd.
+
+Changes for 0.84 (aeb):
+
+o Added more compose key support to loadkeys.
+o Setfont, loadkeys and mapscrn look by default in /usr/lib/kbd/*.
+o Setfont can read codepage font files (and select a font from them).
+o Many minor changes.
+
+Changes for 0.85-0.86 (aeb):
+
+o Minor things only. Added contributed keymaps and fonts.
+
+Changes for 0.87 (aeb):
+
+o Added iso-8859-8 support. Added "charset" directive.
+o Corrected a typo in "trivial".
+o Added kbd_mode.
+o Extended kbd.FAQ. Added contributed keymaps and fonts.
+
+Changes for 0.88 (aeb):
+
+o Added dynamic keymap support. Added "keymaps" directive.
+o Added dynamic console allocation. Added disalloc.
+o Added resize.
+o Changed LED handling.
+o Added the contributed codepage.c (to extract codepages from a
+  DOS .cpi file).
+o Many minor changes.
+
+Changes for 0.89 (aeb):
+
+o Some minor things.
+
+Changes for 0.90 (aeb):
+
+o Changed setfont to subsume mapscrn and escape sequence.
+o Added hpa's psftable stuff.
+o Added Unicode stuff (requires kernel 1.1.92 or later).
+
+Changes for 0.91 (aeb):
+
+o Added hpa's setfont patch.
+
+Changes for 0.94 (aeb):
+
+o Added keyword alt_is_meta.
+
+Changes for 0.96 (aeb):
+
+o Added keywords like strings_as_usual. Added keymap include files.
+o Reorganized keymap directory.
+o Added loading of compressed fonts.
+o Added iso-8859-9 handling.
+o Added -a option to showkey.
+
+Changes for 0.98 (aeb):
+
+o Added internationalization and Dutch texts (nl.po)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a8ddbef
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,31 @@
+The files
+	dumpkeys.c loadkeys.y analyze.l ksyms.c ksyms.h
+	showkey.c keymaps.5 loadkeys.1 dumpkeys.1 showkey.1
+are Copyright (C) 1993 Risto Kankkunen.
+
+The files
+	setfont.c setfont.8 mapscrn.c mapscrn.8
+(and changes to loadkeys.y)
+are Copyright (C) 1993 Eugene G. Crosser.
+
+The files
+	psfaddtable.c psfgettable.c psfstriptable.c
+	psfaddtable.1 psfgettable.1 psfstriptable.1
+are Copyright (C) 1994 H. Peter Anvin.
+
+The files
+	chvt.c clrunimap.c deallocvt.c fgconsole.c findfile.c
+	getfd.c getkeycodes.c getunimap.c kbd_mode.c loadunimap.c
+	resizecons.c screendump.c setkeycodes.c setleds.c
+	setmetamode.c setvesablank.c showfont.c spawn_console.c
+	spawn_login.c
+	chvt.1 deallocvt.1 kbd_mode.1 setleds.1 setmetamode.1
+	getkeycodes.8 loadunimap.8 resizecons.8 setkeycodes.8
+	kbd.FAQ.*
+(and changes to earlier mentioned programs)
+are Copyright (C) 1994-1998 Andries E. Brouwer.
+
+All files in this package may be freely copied under the terms
+of the GNU General Public License (GPL), version 2, or at your
+option any later version - except possibly for the restrictions
+mentioned in the directory consolefonts.
diff --git a/CREDITS b/CREDITS
new file mode 100644
index 0000000..9977ee4
--- /dev/null
+++ b/CREDITS
@@ -0,0 +1,17 @@
+The programs loadkeys, dumpkeys and showkey were derived from
+Risto Kankkunen's kbd-0.81.
+
+The font loading code goes back to the codepage package by
+Joel Hoffman (joel@wam.umd.edu). (He tells me that the original
+reference is: "From: p. 307 of _Programmer's Guide to PC & PS/2
+Video Systems_ by Richard Wilton. 1987.  Microsoft Press".)
+
+The kernel and user interface for the font loading were derived
+from Eugene Crosser's intl_con package.
+
+[Similar things were done earlier by
+ Jerry Kaidor (tr2!jerry@abekas.com, jkaidor@synoptics.com) : fontpak,
+ H. Peter Anvin (hpa@nwu.edu) and Pavel Zaboj (xzaboj@vse.cs).
+Their code was not used, but the Latin-1 *.psf fonts were developed
+by H. Peter Anvin, and the Latin-2 ones by Pavel Zaboj.]
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..5616014
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,82 @@
+# Note: BINDIR, DATADIR also occur in src/Makefile.
+MANDIR  = $(DESTDIR)/usr/man
+BINDIR  = $(DESTDIR)/usr/bin
+DATADIR = $(DESTDIR)@datadir@
+# If you change the names of any of the following subdirs,
+# also change paths.h.
+OLDKEYMAPDIR = keytables
+KEYMAPDIR = keymaps
+FONTDIR   = consolefonts
+TRANSDIR  = consoletrans
+KEYMAPSUBDIRS = include sun amiga atari mac i386/azerty i386/dvorak i386/fgGIod i386/qwerty i386/qwertz i386/include
+
+# Do not use GZIP - it is interpreted by gzip
+MYGZIP = gzip -f -9
+
+DIR	= kbd-0.99
+
+SUBDIRS = src openvt
+
+include ./make_include
+ifeq "$(ENABLE_NLS)" "yes"
+SUBDIRS := $(SUBDIRS) po
+endif
+
+.EXPORT_ALL_VARIABLES:
+
+all:
+	for i in $(SUBDIRS); do (cd $$i && $(MAKE) all); done
+	case `arch` in *86*) \
+		cd src && $(MAKE) i386 ;; \
+	esac
+	@echo "Done. You can now do  make install"
+
+# compress data files - do not touch the distribution but copy first
+$(KEYMAPDIR)_Z:
+	cp -r $(KEYMAPDIR) $(KEYMAPDIR)_Z
+	cd $(KEYMAPDIR)_Z && $(MYGZIP) */*.map */*/*.map
+
+$(FONTDIR)_Z:
+	cp -r $(FONTDIR) $(FONTDIR)_Z
+	cd $(FONTDIR)_Z && $(MYGZIP) * && gunzip README*
+# (not yet screenmaps - some other time)
+
+install:	$(KEYMAPDIR)_Z $(FONTDIR)_Z
+	for i in $(SUBDIRS); do (cd $$i && $(MAKE) install); done
+	case `arch` in *86*) \
+		cd src && $(MAKE) install386 ;; \
+	esac
+	for i in man?; do \
+		install -d -m 755 $(MANDIR)/$$i; \
+		install -m 644 $$i/*.[0-9] $(MANDIR)/$$i; \
+	done
+	rm -f $(MANDIR)/man5/keytables.5
+	install -d -m 755 $(DATADIR)
+	install -d -m 755 $(DATADIR)/$(FONTDIR)
+	install -m 644 $(FONTDIR)_Z/* $(DATADIR)/$(FONTDIR)
+	install -d -m 755 $(DATADIR)/$(TRANSDIR)
+	install -m 644 $(TRANSDIR)/* $(DATADIR)/$(TRANSDIR)
+	install -d -m 755 $(DATADIR)/$(KEYMAPDIR)
+	install -d -m 755 $(DATADIR)/$(KEYMAPDIR)/i386
+	for i in $(KEYMAPSUBDIRS); do \
+		install -d -m 755 $(DATADIR)/$(KEYMAPDIR)/$$i ;\
+		install -m 644 $(KEYMAPDIR)_Z/$$i/* $(DATADIR)/$(KEYMAPDIR)/$$i ;\
+	done
+	@echo "Done. You may want to remove old keymaps with"
+	@echo "  rm -rf $(DATADIR)/$(OLDKEYMAPDIR)"
+	@echo "But be careful to preserve your default map if it is"
+	@echo "nonstandard, and to adapt any scripts in rc.local or so."
+
+tar: reallyclean # analyze.c loadkeys.c
+	cd ..; 	tar cvfz $(DIR).tar.gz ./$(DIR)
+
+clean:
+	for i in $(SUBDIRS); do (cd $$i && $(MAKE) clean); done
+	rm -rf $(KEYMAPDIR)_Z $(FONTDIR)_Z
+
+reallyclean distclean spotless: clean
+	find . -name "*~" -exec rm {} ";"
+	for i in $(SUBDIRS); do (cd $$i && $(MAKE) distclean); done
+	rm -f Makefile src/Makefile make_include defines.h
+	rm -f man1/dumpkeys.1 man1/loadkeys.1 man8/setfont.8
+
diff --git a/README b/README
new file mode 100644
index 0000000..be9d76d
--- /dev/null
+++ b/README
@@ -0,0 +1,24 @@
+This is kbd-0.98.tar.gz
+
+This package contains keytable files and keyboard utilities compatible
+with kernel version 1.1.54 and later. Setfont requires 1.1.92 or later.
+
+This distribution contains no binaries - the sources depend on the
+kernel version - compile them yourself.
+
+To install this package, unpack it somewhere and issue the commands
+"./configure", "make" and "make install".  This copies the utilities
+to /usr/bin, man pages to /usr/man/man{1,4,5,8} and data files to the
+subdirectories keymaps, consolefonts, consoletrans and videomodes of
+the datadirectory chosen during configure, probably /usr/lib/kbd.
+
+Older versions of kbd used /usr/lib/kbd/keytables (instead of .../keymaps).
+This directory can now be removed. (Just to be sure, preserve a copy
+of your favourite keymap, for example in /usr/lib/kbd/keymaps/mykeymap.
+Note that it may be used from a script in /etc/rc.d/rc.local or so.)
+
+Report problems with this package to Andries Brouwer <aeb@cwi.nl>.
+
+March 1999
+
+
diff --git a/configure b/configure
new file mode 100755
index 0000000..5a29dc8
--- /dev/null
+++ b/configure
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# Very simple configure: only DATADIR is variable.
+#
+# Call:
+#  ./configure
+# or
+#  ./configure --datadir=DATADIR
+#
+# Where shall we store our stuff?
+#  Old default: /usr/lib/kbd
+#  New default: /usr/share/kbd
+#
+
+datadir=
+nls=1
+
+for arg in $*; do
+	case "$arg" in
+		-*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+		   *) optarg= ;;
+	esac
+
+	case "$arg" in
+		--da*)
+			datadir=$optarg
+			;;
+		--di*)
+			nls=0
+			;;
+		*)
+			echo "usage: configure [--datadir=DATADIR]"
+			exit 1
+			;;
+	esac
+done
+
+if [ x$datadir = x ]; then
+	if [ -d /usr/lib/kbd ]; then
+		datadir=/usr/lib/kbd
+	elif [ -d /usr/share/consolefonts ]; then
+		datadir=/usr/share
+	elif [ -d /usr/share ]; then
+		datadir=/usr/share/kbd
+	else
+		datadir=/usr/lib/kbd
+	fi
+fi
+
+case "$datadir" in
+	/*)
+		echo "Configuring for DATADIR=$datadir"
+		;;
+	*)
+		echo "DATADIR must have a leading slash"
+		exit 1
+		;;
+esac
+
+for i in Makefile src/Makefile man1/dumpkeys.1 man1/loadkeys.1 man8/setfont.8; do
+	sed -e "
+s,@datadir@,$datadir,
+" $i.in > $i
+done
+
+rm -f defines.h make_include
+
+# Next, figure out some things about the environment
+# Things taken from util-linux configure
+
+if test "$RANDOM" = "$RANDOM"; then
+  # Plain old Bourne shell.
+  echo checking for gcc
+  test -z "$CC" -a -n "`gcc 2>&1`" && CC="gcc -O"
+else
+  # ksh, bash or zsh.  ksh and zsh write "command not found" to stderr.
+  echo checking for gcc
+  test -z "$CC" && type gcc && CC="gcc -O"
+fi
+
+CC=${CC-cc}
+CFLAGS=${CFLAGS-"-O"}
+compile="$CC $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1"
+static_compile="$CC -static $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1"
+
+rm -f make_include conftest.c conftest
+
+#
+# 1. Do we have <locale.h>?
+#
+echo "
+#include <locale.h>
+main(){ exit(0); }
+" > conftest.c
+eval $compile
+if test -s conftest && ./conftest 2>/dev/null; then
+        echo "#define HAVE_locale_h" >> defines.h
+        echo "You have <locale.h>"
+else
+        echo "You don't have <locale.h>"
+fi
+rm -f conftest conftest.c
+
+#
+# 2. Do we have <libintl.h>?
+#
+echo "
+#include <libintl.h>
+main(){ exit(0); }
+" > conftest.c
+eval $compile
+if [ $nls = 1 ]; then
+	if test -s conftest && ./conftest 2>/dev/null; then
+		echo '#define HAVE_libintl_h' >> defines.h
+		echo "You have <libintl.h>"
+		echo '#define ENABLE_NLS' >> defines.h
+		echo 'ENABLE_NLS=yes' >> make_include
+		echo "Assuming that you want to enable NLS support."
+		echo "(Otherwise, edit defines.h)"
+	else
+        	echo "You don't have <libintl.h>"
+		echo 'ENABLE_NLS=no' >> make_include
+	fi
+else
+	echo "NLS disabled"
+	echo 'ENABLE_NLS=no' >> make_include
+fi
+rm -f conftest conftest.c
diff --git a/consolefonts/161.cp b/consolefonts/161.cp
new file mode 100644
index 0000000..39d43f8
--- /dev/null
+++ b/consolefonts/161.cp
Binary files differ
diff --git a/consolefonts/162.cp b/consolefonts/162.cp
new file mode 100644
index 0000000..e5c0be1
--- /dev/null
+++ b/consolefonts/162.cp
Binary files differ
diff --git a/consolefonts/163.cp b/consolefonts/163.cp
new file mode 100644
index 0000000..599e438
--- /dev/null
+++ b/consolefonts/163.cp
Binary files differ
diff --git a/consolefonts/164.cp b/consolefonts/164.cp
new file mode 100644
index 0000000..d1e5960
--- /dev/null
+++ b/consolefonts/164.cp
Binary files differ
diff --git a/consolefonts/165.cp b/consolefonts/165.cp
new file mode 100644
index 0000000..dc74dcf
--- /dev/null
+++ b/consolefonts/165.cp
Binary files differ
diff --git a/consolefonts/737.cp b/consolefonts/737.cp
new file mode 100644
index 0000000..e435177
--- /dev/null
+++ b/consolefonts/737.cp
Binary files differ
diff --git a/consolefonts/880.cp b/consolefonts/880.cp
new file mode 100644
index 0000000..35aed04
--- /dev/null
+++ b/consolefonts/880.cp
Binary files differ
diff --git a/consolefonts/972.cp b/consolefonts/972.cp
new file mode 100644
index 0000000..bd5c912
--- /dev/null
+++ b/consolefonts/972.cp
Binary files differ
diff --git a/consolefonts/Agafari-12.psfu b/consolefonts/Agafari-12.psfu
new file mode 100644
index 0000000..781732c
--- /dev/null
+++ b/consolefonts/Agafari-12.psfu
Binary files differ
diff --git a/consolefonts/Agafari-14.psfu b/consolefonts/Agafari-14.psfu
new file mode 100644
index 0000000..0d6960c
--- /dev/null
+++ b/consolefonts/Agafari-14.psfu
Binary files differ
diff --git a/consolefonts/Agafari-16.psfu b/consolefonts/Agafari-16.psfu
new file mode 100644
index 0000000..ebc1490
--- /dev/null
+++ b/consolefonts/Agafari-16.psfu
Binary files differ
diff --git a/consolefonts/Cyr_a8x14 b/consolefonts/Cyr_a8x14
new file mode 100644
index 0000000..67a7d13
--- /dev/null
+++ b/consolefonts/Cyr_a8x14
Binary files differ
diff --git a/consolefonts/Cyr_a8x16 b/consolefonts/Cyr_a8x16
new file mode 100644
index 0000000..02ac5c7
--- /dev/null
+++ b/consolefonts/Cyr_a8x16
Binary files differ
diff --git a/consolefonts/Cyr_a8x8 b/consolefonts/Cyr_a8x8
new file mode 100644
index 0000000..c739417
--- /dev/null
+++ b/consolefonts/Cyr_a8x8
Binary files differ
diff --git a/consolefonts/ERRORS b/consolefonts/ERRORS
new file mode 100644
index 0000000..78cc235
--- /dev/null
+++ b/consolefonts/ERRORS
@@ -0,0 +1,7 @@
+In iso04.f08 and iso10.f08 the letters K, and k,
+(letter k with cedilla) are wrong.
+In iso07.f08 and iso10.f08 the horizontal bar is wrong.
+In lat0u-14.psf positions 167, 168 (decimal) are wrong.
+
+Maybe someone with font editor can correct this.
+(Compare with *.f14 and *.f16 to see the right version.)
diff --git a/consolefonts/Goha-12.psfu b/consolefonts/Goha-12.psfu
new file mode 100644
index 0000000..3658be4
--- /dev/null
+++ b/consolefonts/Goha-12.psfu
Binary files differ
diff --git a/consolefonts/Goha-14.psfu b/consolefonts/Goha-14.psfu
new file mode 100644
index 0000000..8676e7d
--- /dev/null
+++ b/consolefonts/Goha-14.psfu
Binary files differ
diff --git a/consolefonts/Goha-16.psfu b/consolefonts/Goha-16.psfu
new file mode 100644
index 0000000..ba08b63
--- /dev/null
+++ b/consolefonts/Goha-16.psfu
Binary files differ
diff --git a/consolefonts/GohaClassic-12.psfu b/consolefonts/GohaClassic-12.psfu
new file mode 100644
index 0000000..860994b
--- /dev/null
+++ b/consolefonts/GohaClassic-12.psfu
Binary files differ
diff --git a/consolefonts/GohaClassic-14.psfu b/consolefonts/GohaClassic-14.psfu
new file mode 100644
index 0000000..f529293
--- /dev/null
+++ b/consolefonts/GohaClassic-14.psfu
Binary files differ
diff --git a/consolefonts/GohaClassic-16.psfu b/consolefonts/GohaClassic-16.psfu
new file mode 100644
index 0000000..491f271
--- /dev/null
+++ b/consolefonts/GohaClassic-16.psfu
Binary files differ
diff --git a/consolefonts/LatArCyrHeb-08.psfu b/consolefonts/LatArCyrHeb-08.psfu
new file mode 100644
index 0000000..5528f74
--- /dev/null
+++ b/consolefonts/LatArCyrHeb-08.psfu
Binary files differ
diff --git a/consolefonts/LatArCyrHeb-14.psfu b/consolefonts/LatArCyrHeb-14.psfu
new file mode 100644
index 0000000..a1b9346
--- /dev/null
+++ b/consolefonts/LatArCyrHeb-14.psfu
Binary files differ
diff --git a/consolefonts/LatArCyrHeb-16+.psfu b/consolefonts/LatArCyrHeb-16+.psfu
new file mode 100644
index 0000000..03566c3
--- /dev/null
+++ b/consolefonts/LatArCyrHeb-16+.psfu
Binary files differ
diff --git a/consolefonts/LatArCyrHeb-16.psfu b/consolefonts/LatArCyrHeb-16.psfu
new file mode 100644
index 0000000..4b68ed1
--- /dev/null
+++ b/consolefonts/LatArCyrHeb-16.psfu
Binary files differ
diff --git a/consolefonts/LatArCyrHeb-19.psfu b/consolefonts/LatArCyrHeb-19.psfu
new file mode 100644
index 0000000..2796b7b
--- /dev/null
+++ b/consolefonts/LatArCyrHeb-19.psfu
Binary files differ
diff --git a/consolefonts/Mik_8x16 b/consolefonts/Mik_8x16
new file mode 100644
index 0000000..b192266
--- /dev/null
+++ b/consolefonts/Mik_8x16
Binary files differ
diff --git a/consolefonts/README b/consolefonts/README
new file mode 100644
index 0000000..4c73adf
--- /dev/null
+++ b/consolefonts/README
@@ -0,0 +1,79 @@
+Fragment of the "readme" file in Joel Hoffman's codepage.tar.Z
+==============================================================
+
+File readme.  June 14, 1992.
+
+...
+I have included two sample fonts, one written by myself and the other
+by Dimitri Vulis (dlv@cunyvms1.BITNET).  Both are in the public
+domain.  My font, 972.cp, is a Hebrew font.  The other is 880.cp, a
+Cyrilic font (Russian etc.).
+
+The Hebrew font uses the same encoding scheme as the VT-100's in
+Israel, so any software that works on those will now run on Linux
+(e.g., my hebrew.el package for GNU Emacs).
+
+I'm told 880.cp follows the relevent Russian standard, so I suppose it
+does.
+
+This package, while (c) 1992 by Joel M. Hoffman, can be used as freely
+as any other part of Linux.  
+
+Files:
+	972.cp		Font data for 25-line Hebrew font.
+	880.cp		Font data for Cyrilic font.
+
+===========================================================
+
+Elsewhere I found fonts 880-14.psf, 880-16.psf, 972-14.psf, 972-16.psf,
+but these turn out to come from 880.cp and 972.cp, and since setfont
+now also understands *.cp files I deleted the four abovementioned fonts.
+
+===========================================================
+
+H. Peter Anvin writes:
+...
+I developed the Latin-1 *.psf fonts; Pavel Zaboj did the Latin-2
+ones.  SLS took them directly from Pavel's national package.
+A DOS-hosted PSF font editor is available on eecs.nwu.edu.
+
+Daniel Quinlan sent a new version of lat1-16.psf due to hpa and him.
+
+Primoz Peterlin <peterlin@biofiz.mf.uni-lj.si> corrected lat2-??.psf.
+
+===========================================================
+
+The font default8x16 is from my hardware.
+Bruno Haible contributed def2_8x16.
+
+The fonts iso*.* are due to Kosta Kostis (kosta@blues.sub.de)
+and were obtained from 
+ftp.uni-erlangen.de:pub/doc/ISO/charset/isofont101.tar.gz
+
+The fonts gr.* are due to Sarantos Kapidakis (sarantos@ics.forth.gr).
+He writes: "I am sending you the greek fonts, for 8x14 and 8x16.
+They follow the ELOT928 standard."
+
+Paul Gortmaker (paul@rasty.anu.edu.au) contributed ugly_l
+(which I removed again because now it can be found as 8x16alt
+in his collection of fonts kbd_fonts.tar.gz obtainable from
+sunsite.unc.edu:/pub/Linux/system/Keyboards/ and from
+tsx-11.mit.edu:/pub/linux/sources/system/ ).
+
+Some more fonts can be found in
+sunsite.unc.edu:/pub/Linux/system/Keyboards/fontpack.tgz
+
+Raul D. Miller (rockwell@nova.umd.edu) made aply16.psf.
+Angelos Karageorgiou (angelos@netaxis.com) contributed gr*.psf.
+Ahmed Naas (ahmed@oea.xs4all.nl) contributed 16[1-5].cp.
+Daniel Yacob contributed the Ethiopic fonts (see README.Ethiopic).
+Ricardas Cepas (rch@pub.osf.lt) contributed LatArCyrHeb-*.psf
+and the lat4* fonts.
+==============================================================
+
+Since kbd-0.96, setfont will load compressed fonts.
+When I tried gzip and bzip2, the former was superior:
+uncompressed 543332 bytes, bzip2: 225285 bytes, gzip: 204039 bytes.
+
+aeb@cwi.nl
+
diff --git a/consolefonts/README.Arabic b/consolefonts/README.Arabic
new file mode 100644
index 0000000..1f854b9
--- /dev/null
+++ b/consolefonts/README.Arabic
@@ -0,0 +1,8 @@
+Arabic fonts:
+
+iso06.* follows ISO 8859-6 (but does not contain the Arabic digits).
+	Only the isolated shapes are given.
+
+N.cp, N=161,162,163,164,165 - MS/DOS code pages with Arabic letters,
+	some line-drawing symbols, and some accented Latin characters.
+
diff --git a/consolefonts/README.Cyrillic b/consolefonts/README.Cyrillic
new file mode 100644
index 0000000..4f526af
--- /dev/null
+++ b/consolefonts/README.Cyrillic
@@ -0,0 +1,53 @@
+Cyrillic fonts:
+
+Type A. Alt
+
+[Reference: codepage 866 (as given in Unicode 1.0, Vol 2, Appendix C).]
+The Alt fonts have the Cyrillic letters in the ranges
+0200-0237: capitals, 0240-0257,0340-0357: lower case,
+0360-0367: some additional letters.
+
+Here we have the alt* fonts (except that the positions 0362-0367 do not
+carry upper and lower case e, yi, short u).
+However, altc has some additional slavic characters
+(and fewer line drawing characters).
+
+Cyr_a8xN follows cp866 in the positions 0200-0257 and
+0340-0357. This means that upper and lower case io
+(cp866 codes 0360, 0361) are also missing.
+
+
+Type B. Koi8
+
+[Reference: RFC 1489]
+
+The koi8* fonts are the koi8 equivalents of the alt*
+fonts above; in particular, koi8c-8x16 also has
+additional slavic characters.
+
+koi8-14.psf follows koi8 in the positions 0300-0377
+(and has some iso-8859-5 symbols in 0240-0277,
+and yat, fita, izhitsa in 0200-0202, 0220-0222).
+In particular, it does not have the io and IO at
+0243, 0263.
+
+qinglong@Bolizm.ihep.su writes:
+"BTW, there is no full rfc1489 compliant russian font shipping with `kbd'."
+and contributed koi8r-8x8.
+
+
+Type C. ISO 8859-5
+
+iso05.fN precisely follows iso-8859-5 in all positions
+where that norm defines a symbol.
+It has no symbols in the range 0200-0237.
+
+880.cp follows iso-8859-5 in the positions 0240-0377
+except that the four symbols 0244, 0364, 0371, 0372
+[Ukrainian Cyrillic letter ie (upper and lower case),
+and Cyrillic small letter lje, nje] are missing.
+It has a few old Russian symbols in the range 0200-0202,
+0220-222 (yat, fita, izhitsa).
+Thus, in spite of its name it has very little to do
+with the ibm cp880 (as described in GNU recode).
+
diff --git a/consolefonts/README.Ethiopic b/consolefonts/README.Ethiopic
new file mode 100644
index 0000000..7502722
--- /dev/null
+++ b/consolefonts/README.Ethiopic
@@ -0,0 +1,30 @@
+Ethiopic fonts:
+
+  o  All fonts contain 353 Ethiopic characters which extends the Unicode
+     specification by 7 characters (extras are relegated to the private use
+     range).
+
+  o  Contain their own Unicode mapping table corresponding to "ethiopic.uni"
+     which should be in your "consoletrans" directory.
+
+  o  Sizes 14 & 16 are prefixed by 159 Latin characters from iso01.f14 &
+     iso01.f16.  Size 12 fonts borrow Latin characters from lat1-12.psf.
+
+  o  Are redistributable under the GNU GPL version 2.0; with noted 
+     restrictions below:
+
+
+Agafari:
+  Donated by the Ethiopian Science and Technology Commission 
+  <ncic@padis.gn.apc.org> or <ncic@telecom.net.et> and may be redistributed
+  for non-commercial use under Unix environments only.
+
+Goha and GohaClassic:
+  Donated by Yitna Firdyiwek <ybf2u@virgina.edu> of GohaTibeb Associates
+  and may be redistributed without restriction under the GNU GPL 2.0.
+
+
+The collection in this directory donated for Linux distributions is otherwise
+maintained by Daniel Yacob <Daniel_Yacob_at_UNECA@un.org> and
+<yacob@padis.gn.apc.org>.
+
diff --git a/consolefonts/README.Greek b/consolefonts/README.Greek
new file mode 100644
index 0000000..9f433ec
--- /dev/null
+++ b/consolefonts/README.Greek
@@ -0,0 +1,15 @@
+Greek fonts:
+
+iso07.* follows ISO 8859-7.
+
+737.cp - the MS/DOS code page 737.
+
+greek.psf and the files gr8x*.psf are very similar, but replace
+	I-diaeresis, Y-diaeresis by integral (upper and lower half).
+
+Sotiris Tsimbonis <tsimbonis@rosehill-1.irc.gr> contributed
+gr737-8x11, gr737-8x8, gr737-8x8-2
+gr737-9x14, gr737-9x14-2, gr737-9x16, gr737-9x16-2
+gr737-9x16-medieval, gr928-9x14, gr928-9x16
+grcourier, grfixed
+(Too many similar fonts. Please tell me which I should delete.)
diff --git a/consolefonts/README.Hebrew b/consolefonts/README.Hebrew
new file mode 100644
index 0000000..6cb71f2
--- /dev/null
+++ b/consolefonts/README.Hebrew
@@ -0,0 +1,6 @@
+Hebrew fonts:
+
+iso08.* follows ISO 8859-8.
+
+972.cp has the Hebrew letters in the same positions, and adds
+	the (isolated) vowels.
diff --git a/consolefonts/README.lat0 b/consolefonts/README.lat0
new file mode 100644
index 0000000..a3b8aef
--- /dev/null
+++ b/consolefonts/README.lat0
@@ -0,0 +1,9 @@
+The lat0-* fonts here are from the EURO package by guylhem@oeil.qc.ca.
+The lat0-14.psf font is broken (positions A7,A8 are wrong).
+A corrected version is welcome.
+
+Latin-0 is the nickname for what officially is Latin-9,
+or ISO 8859-15. IBM calls it code page 924.
+It differs from Latin-1 (ISO 8859-1) in 8 positions,
+namely A4,A6,A8,B4,B8,BC,BD,BE where it has Euro, Scaron, scaron,
+Zcaron, zcaron, OEligature, oeligature, Ydiaeresis, respectively.
diff --git a/consolefonts/README.psf b/consolefonts/README.psf
new file mode 100644
index 0000000..320c0f0
--- /dev/null
+++ b/consolefonts/README.psf
@@ -0,0 +1,17 @@
+The format of a .PSF file is as follows:
+ 
+Byte    Size of field           Contents
+0       Word                    File ID, always 0436h
+2       Byte                    File mode
+
+=== FILE MODE 0:  256 character byte-aligned monofont (as used by EGA/VGA)
+
+3       Byte                    Height of characters in scan lines
+4...    256x[byte 3] bytes      Font data; each character contains one byte
+                                    per scan line, characters continuous
+
+=== FILE MODE 1:  512 character byte-aligned monofont
+
+3       Byte                    Height of characters in scan lines
+4...    512x[byte 3] bytes      Font data; each character contains one byte
+                                    per scan line, characters continuous
diff --git a/consolefonts/README.psfu b/consolefonts/README.psfu
new file mode 100644
index 0000000..44a33af
--- /dev/null
+++ b/consolefonts/README.psfu
@@ -0,0 +1,9 @@
+The .psfu files have a built-in Unicode mapping,
+the .psf files don't.
+
+If you load a font (with setfont) without built-in
+mapping, then you'll have to provide one separately
+on the setfont command line.
+
+Eventually we expect that all fonts will have built-in Unicode mappings,
+and the .psfu files will be renamed .psf again.
diff --git a/consolefonts/alt-8x14 b/consolefonts/alt-8x14
new file mode 100644
index 0000000..9232784
--- /dev/null
+++ b/consolefonts/alt-8x14
Binary files differ
diff --git a/consolefonts/alt-8x16 b/consolefonts/alt-8x16
new file mode 100644
index 0000000..1ffba06
--- /dev/null
+++ b/consolefonts/alt-8x16
Binary files differ
diff --git a/consolefonts/alt-8x8 b/consolefonts/alt-8x8
new file mode 100644
index 0000000..e274ec2
--- /dev/null
+++ b/consolefonts/alt-8x8
Binary files differ
diff --git a/consolefonts/altb-8x16 b/consolefonts/altb-8x16
new file mode 100644
index 0000000..2e84001
--- /dev/null
+++ b/consolefonts/altb-8x16
Binary files differ
diff --git a/consolefonts/altc-8x16 b/consolefonts/altc-8x16
new file mode 100644
index 0000000..734b76e
--- /dev/null
+++ b/consolefonts/altc-8x16
Binary files differ
diff --git a/consolefonts/aply16.psf b/consolefonts/aply16.psf
new file mode 100644
index 0000000..4c30801
--- /dev/null
+++ b/consolefonts/aply16.psf
Binary files differ
diff --git a/consolefonts/arm8.fnt b/consolefonts/arm8.fnt
new file mode 100644
index 0000000..a49403c
--- /dev/null
+++ b/consolefonts/arm8.fnt
Binary files differ
diff --git a/consolefonts/cp850-8x14 b/consolefonts/cp850-8x14
new file mode 100644
index 0000000..cc9d30e
--- /dev/null
+++ b/consolefonts/cp850-8x14
Binary files differ
diff --git a/consolefonts/cp850-8x16 b/consolefonts/cp850-8x16
new file mode 100644
index 0000000..a671c01
--- /dev/null
+++ b/consolefonts/cp850-8x16
Binary files differ
diff --git a/consolefonts/cp850-8x8 b/consolefonts/cp850-8x8
new file mode 100644
index 0000000..6d72f9c
--- /dev/null
+++ b/consolefonts/cp850-8x8
Binary files differ
diff --git a/consolefonts/cp865-8x14 b/consolefonts/cp865-8x14
new file mode 100644
index 0000000..cd8fd74
--- /dev/null
+++ b/consolefonts/cp865-8x14
Binary files differ
diff --git a/consolefonts/cp865-8x16 b/consolefonts/cp865-8x16
new file mode 100644
index 0000000..53e16af
--- /dev/null
+++ b/consolefonts/cp865-8x16
Binary files differ
diff --git a/consolefonts/cp865-8x8 b/consolefonts/cp865-8x8
new file mode 100644
index 0000000..03281c5
--- /dev/null
+++ b/consolefonts/cp865-8x8
Binary files differ
diff --git a/consolefonts/def2_8x16 b/consolefonts/def2_8x16
new file mode 100644
index 0000000..7193156
--- /dev/null
+++ b/consolefonts/def2_8x16
Binary files differ
diff --git a/consolefonts/default8x16 b/consolefonts/default8x16
new file mode 100644
index 0000000..8eea59f
--- /dev/null
+++ b/consolefonts/default8x16
Binary files differ
diff --git a/consolefonts/default8x9 b/consolefonts/default8x9
new file mode 100644
index 0000000..a2a9ee2
--- /dev/null
+++ b/consolefonts/default8x9
Binary files differ
diff --git a/consolefonts/gr.f14 b/consolefonts/gr.f14
new file mode 100644
index 0000000..4f21e57
--- /dev/null
+++ b/consolefonts/gr.f14
Binary files differ
diff --git a/consolefonts/gr.f16 b/consolefonts/gr.f16
new file mode 100644
index 0000000..6945edc
--- /dev/null
+++ b/consolefonts/gr.f16
Binary files differ
diff --git a/consolefonts/gr737-8x11 b/consolefonts/gr737-8x11
new file mode 100644
index 0000000..945d487
--- /dev/null
+++ b/consolefonts/gr737-8x11
Binary files differ
diff --git a/consolefonts/gr737-8x8 b/consolefonts/gr737-8x8
new file mode 100644
index 0000000..1957057
--- /dev/null
+++ b/consolefonts/gr737-8x8
Binary files differ
diff --git a/consolefonts/gr737-8x8-2 b/consolefonts/gr737-8x8-2
new file mode 100644
index 0000000..391c0b9
--- /dev/null
+++ b/consolefonts/gr737-8x8-2
Binary files differ
diff --git a/consolefonts/gr737-9x14 b/consolefonts/gr737-9x14
new file mode 100644
index 0000000..b094158
--- /dev/null
+++ b/consolefonts/gr737-9x14
Binary files differ
diff --git a/consolefonts/gr737-9x14-2 b/consolefonts/gr737-9x14-2
new file mode 100644
index 0000000..b546030
--- /dev/null
+++ b/consolefonts/gr737-9x14-2
Binary files differ
diff --git a/consolefonts/gr737-9x16 b/consolefonts/gr737-9x16
new file mode 100644
index 0000000..6801e21
--- /dev/null
+++ b/consolefonts/gr737-9x16
Binary files differ
diff --git a/consolefonts/gr737-9x16-2 b/consolefonts/gr737-9x16-2
new file mode 100644
index 0000000..19c0270
--- /dev/null
+++ b/consolefonts/gr737-9x16-2
Binary files differ
diff --git a/consolefonts/gr737-9x16-medieval b/consolefonts/gr737-9x16-medieval
new file mode 100644
index 0000000..309d18d
--- /dev/null
+++ b/consolefonts/gr737-9x16-medieval
Binary files differ
diff --git a/consolefonts/gr8x14 b/consolefonts/gr8x14
new file mode 100644
index 0000000..59c7975
--- /dev/null
+++ b/consolefonts/gr8x14
Binary files differ
diff --git a/consolefonts/gr8x16 b/consolefonts/gr8x16
new file mode 100644
index 0000000..ceee00e
--- /dev/null
+++ b/consolefonts/gr8x16
Binary files differ
diff --git a/consolefonts/gr8x6 b/consolefonts/gr8x6
new file mode 100644
index 0000000..e51dac1
--- /dev/null
+++ b/consolefonts/gr8x6
Binary files differ
diff --git a/consolefonts/gr8x7 b/consolefonts/gr8x7
new file mode 100644
index 0000000..2ac2731
--- /dev/null
+++ b/consolefonts/gr8x7
Binary files differ
diff --git a/consolefonts/gr8x8 b/consolefonts/gr8x8
new file mode 100644
index 0000000..2dea239
--- /dev/null
+++ b/consolefonts/gr8x8
Binary files differ
diff --git a/consolefonts/gr928-9x14 b/consolefonts/gr928-9x14
new file mode 100644
index 0000000..5497920
--- /dev/null
+++ b/consolefonts/gr928-9x14
Binary files differ
diff --git a/consolefonts/gr928-9x16 b/consolefonts/gr928-9x16
new file mode 100644
index 0000000..6e49ddd
--- /dev/null
+++ b/consolefonts/gr928-9x16
Binary files differ
diff --git a/consolefonts/grcourier b/consolefonts/grcourier
new file mode 100644
index 0000000..f59bed3
--- /dev/null
+++ b/consolefonts/grcourier
Binary files differ
diff --git a/consolefonts/greek b/consolefonts/greek
new file mode 100644
index 0000000..ceee00e
--- /dev/null
+++ b/consolefonts/greek
Binary files differ
diff --git a/consolefonts/grfixed b/consolefonts/grfixed
new file mode 100644
index 0000000..9980bda
--- /dev/null
+++ b/consolefonts/grfixed
Binary files differ
diff --git a/consolefonts/iso01.f08 b/consolefonts/iso01.f08
new file mode 100644
index 0000000..b3bcf29
--- /dev/null
+++ b/consolefonts/iso01.f08
Binary files differ
diff --git a/consolefonts/iso01.f14 b/consolefonts/iso01.f14
new file mode 100644
index 0000000..063dcb1
--- /dev/null
+++ b/consolefonts/iso01.f14
Binary files differ
diff --git a/consolefonts/iso01.f16 b/consolefonts/iso01.f16
new file mode 100644
index 0000000..bd3cea9
--- /dev/null
+++ b/consolefonts/iso01.f16
Binary files differ
diff --git a/consolefonts/iso01a-8x14 b/consolefonts/iso01a-8x14
new file mode 100644
index 0000000..8a8d2f9
--- /dev/null
+++ b/consolefonts/iso01a-8x14
Binary files differ
diff --git a/consolefonts/iso01a-8x16 b/consolefonts/iso01a-8x16
new file mode 100644
index 0000000..571df31
--- /dev/null
+++ b/consolefonts/iso01a-8x16
Binary files differ
diff --git a/consolefonts/iso01a-8x8 b/consolefonts/iso01a-8x8
new file mode 100644
index 0000000..62e50a8
--- /dev/null
+++ b/consolefonts/iso01a-8x8
Binary files differ
diff --git a/consolefonts/iso02.f08 b/consolefonts/iso02.f08
new file mode 100644
index 0000000..2be6058
--- /dev/null
+++ b/consolefonts/iso02.f08
Binary files differ
diff --git a/consolefonts/iso02.f14 b/consolefonts/iso02.f14
new file mode 100644
index 0000000..f341635
--- /dev/null
+++ b/consolefonts/iso02.f14
Binary files differ
diff --git a/consolefonts/iso02.f16 b/consolefonts/iso02.f16
new file mode 100644
index 0000000..4c70814
--- /dev/null
+++ b/consolefonts/iso02.f16
Binary files differ
diff --git a/consolefonts/iso03.f08 b/consolefonts/iso03.f08
new file mode 100644
index 0000000..8c18e9a
--- /dev/null
+++ b/consolefonts/iso03.f08
Binary files differ
diff --git a/consolefonts/iso03.f14 b/consolefonts/iso03.f14
new file mode 100644
index 0000000..3dae111
--- /dev/null
+++ b/consolefonts/iso03.f14
Binary files differ
diff --git a/consolefonts/iso03.f16 b/consolefonts/iso03.f16
new file mode 100644
index 0000000..7b768ef
--- /dev/null
+++ b/consolefonts/iso03.f16
Binary files differ
diff --git a/consolefonts/iso04.f08 b/consolefonts/iso04.f08
new file mode 100644
index 0000000..50cd951
--- /dev/null
+++ b/consolefonts/iso04.f08
Binary files differ
diff --git a/consolefonts/iso04.f14 b/consolefonts/iso04.f14
new file mode 100644
index 0000000..6146a27
--- /dev/null
+++ b/consolefonts/iso04.f14
Binary files differ
diff --git a/consolefonts/iso04.f16 b/consolefonts/iso04.f16
new file mode 100644
index 0000000..bc7f9df
--- /dev/null
+++ b/consolefonts/iso04.f16
Binary files differ
diff --git a/consolefonts/iso05.f08 b/consolefonts/iso05.f08
new file mode 100644
index 0000000..d874984
--- /dev/null
+++ b/consolefonts/iso05.f08
Binary files differ
diff --git a/consolefonts/iso05.f14 b/consolefonts/iso05.f14
new file mode 100644
index 0000000..3ea59e7
--- /dev/null
+++ b/consolefonts/iso05.f14
Binary files differ
diff --git a/consolefonts/iso05.f16 b/consolefonts/iso05.f16
new file mode 100644
index 0000000..7930b07
--- /dev/null
+++ b/consolefonts/iso05.f16
Binary files differ
diff --git a/consolefonts/iso06.f08 b/consolefonts/iso06.f08
new file mode 100644
index 0000000..e4265d0
--- /dev/null
+++ b/consolefonts/iso06.f08
Binary files differ
diff --git a/consolefonts/iso06.f14 b/consolefonts/iso06.f14
new file mode 100644
index 0000000..eff17b1
--- /dev/null
+++ b/consolefonts/iso06.f14
Binary files differ
diff --git a/consolefonts/iso06.f16 b/consolefonts/iso06.f16
new file mode 100644
index 0000000..2b4b428
--- /dev/null
+++ b/consolefonts/iso06.f16
Binary files differ
diff --git a/consolefonts/iso07.f08 b/consolefonts/iso07.f08
new file mode 100644
index 0000000..c922fbf
--- /dev/null
+++ b/consolefonts/iso07.f08
Binary files differ
diff --git a/consolefonts/iso07.f14 b/consolefonts/iso07.f14
new file mode 100644
index 0000000..5497920
--- /dev/null
+++ b/consolefonts/iso07.f14
Binary files differ
diff --git a/consolefonts/iso07.f16 b/consolefonts/iso07.f16
new file mode 100644
index 0000000..6e49ddd
--- /dev/null
+++ b/consolefonts/iso07.f16
Binary files differ
diff --git a/consolefonts/iso08.f08 b/consolefonts/iso08.f08
new file mode 100644
index 0000000..56f17b1
--- /dev/null
+++ b/consolefonts/iso08.f08
Binary files differ
diff --git a/consolefonts/iso08.f14 b/consolefonts/iso08.f14
new file mode 100644
index 0000000..de4225e
--- /dev/null
+++ b/consolefonts/iso08.f14
Binary files differ
diff --git a/consolefonts/iso08.f16 b/consolefonts/iso08.f16
new file mode 100644
index 0000000..2b987cd
--- /dev/null
+++ b/consolefonts/iso08.f16
Binary files differ
diff --git a/consolefonts/iso09.f08 b/consolefonts/iso09.f08
new file mode 100644
index 0000000..6ead6dd
--- /dev/null
+++ b/consolefonts/iso09.f08
Binary files differ
diff --git a/consolefonts/iso09.f14 b/consolefonts/iso09.f14
new file mode 100644
index 0000000..467316c
--- /dev/null
+++ b/consolefonts/iso09.f14
Binary files differ
diff --git a/consolefonts/iso09.f16 b/consolefonts/iso09.f16
new file mode 100644
index 0000000..162ce75
--- /dev/null
+++ b/consolefonts/iso09.f16
Binary files differ
diff --git a/consolefonts/iso10.f08 b/consolefonts/iso10.f08
new file mode 100644
index 0000000..2803777
--- /dev/null
+++ b/consolefonts/iso10.f08
Binary files differ
diff --git a/consolefonts/iso10.f14 b/consolefonts/iso10.f14
new file mode 100644
index 0000000..01b7984
--- /dev/null
+++ b/consolefonts/iso10.f14
Binary files differ
diff --git a/consolefonts/iso10.f16 b/consolefonts/iso10.f16
new file mode 100644
index 0000000..6ab789e
--- /dev/null
+++ b/consolefonts/iso10.f16
Binary files differ
diff --git a/consolefonts/koi8-14.psf b/consolefonts/koi8-14.psf
new file mode 100644
index 0000000..87b1ce9
--- /dev/null
+++ b/consolefonts/koi8-14.psf
Binary files differ
diff --git a/consolefonts/koi8-8x14 b/consolefonts/koi8-8x14
new file mode 100644
index 0000000..0de1f5c
--- /dev/null
+++ b/consolefonts/koi8-8x14
Binary files differ
diff --git a/consolefonts/koi8-8x16 b/consolefonts/koi8-8x16
new file mode 100644
index 0000000..59bb441
--- /dev/null
+++ b/consolefonts/koi8-8x16
Binary files differ
diff --git a/consolefonts/koi8-8x8 b/consolefonts/koi8-8x8
new file mode 100644
index 0000000..8821986
--- /dev/null
+++ b/consolefonts/koi8-8x8
Binary files differ
diff --git a/consolefonts/koi8b-8x16 b/consolefonts/koi8b-8x16
new file mode 100644
index 0000000..1a34e5f
--- /dev/null
+++ b/consolefonts/koi8b-8x16
Binary files differ
diff --git a/consolefonts/koi8c-8x16 b/consolefonts/koi8c-8x16
new file mode 100644
index 0000000..7a54676
--- /dev/null
+++ b/consolefonts/koi8c-8x16
Binary files differ
diff --git a/consolefonts/koi8r-8x8 b/consolefonts/koi8r-8x8
new file mode 100644
index 0000000..ca9ddb8
--- /dev/null
+++ b/consolefonts/koi8r-8x8
Binary files differ
diff --git a/consolefonts/koi8u_8x14.psf b/consolefonts/koi8u_8x14.psf
new file mode 100644
index 0000000..87591c1
--- /dev/null
+++ b/consolefonts/koi8u_8x14.psf
Binary files differ
diff --git a/consolefonts/koi8u_8x16.psf b/consolefonts/koi8u_8x16.psf
new file mode 100644
index 0000000..43b2b95
--- /dev/null
+++ b/consolefonts/koi8u_8x16.psf
Binary files differ
diff --git a/consolefonts/koi8u_8x8.psf b/consolefonts/koi8u_8x8.psf
new file mode 100644
index 0000000..877e4ef
--- /dev/null
+++ b/consolefonts/koi8u_8x8.psf
Binary files differ
diff --git a/consolefonts/lat0-08.psfu b/consolefonts/lat0-08.psfu
new file mode 100644
index 0000000..a216df3
--- /dev/null
+++ b/consolefonts/lat0-08.psfu
Binary files differ
diff --git a/consolefonts/lat0-10.psfu b/consolefonts/lat0-10.psfu
new file mode 100644
index 0000000..db103e8
--- /dev/null
+++ b/consolefonts/lat0-10.psfu
Binary files differ
diff --git a/consolefonts/lat0-12.psfu b/consolefonts/lat0-12.psfu
new file mode 100644
index 0000000..6a5dcc4
--- /dev/null
+++ b/consolefonts/lat0-12.psfu
Binary files differ
diff --git a/consolefonts/lat0-14.psfu b/consolefonts/lat0-14.psfu
new file mode 100644
index 0000000..39452f8
--- /dev/null
+++ b/consolefonts/lat0-14.psfu
Binary files differ
diff --git a/consolefonts/lat0-16.psfu b/consolefonts/lat0-16.psfu
new file mode 100644
index 0000000..323ef38
--- /dev/null
+++ b/consolefonts/lat0-16.psfu
Binary files differ
diff --git a/consolefonts/lat1-08.psf b/consolefonts/lat1-08.psf
new file mode 100644
index 0000000..e013c52
--- /dev/null
+++ b/consolefonts/lat1-08.psf
Binary files differ
diff --git a/consolefonts/lat1-08.psfu b/consolefonts/lat1-08.psfu
new file mode 100644
index 0000000..f3ff65e
--- /dev/null
+++ b/consolefonts/lat1-08.psfu
Binary files differ
diff --git a/consolefonts/lat1-10.psf b/consolefonts/lat1-10.psf
new file mode 100644
index 0000000..e7856e0
--- /dev/null
+++ b/consolefonts/lat1-10.psf
Binary files differ
diff --git a/consolefonts/lat1-10.psfu b/consolefonts/lat1-10.psfu
new file mode 100644
index 0000000..15f543e
--- /dev/null
+++ b/consolefonts/lat1-10.psfu
Binary files differ
diff --git a/consolefonts/lat1-12.psf b/consolefonts/lat1-12.psf
new file mode 100644
index 0000000..02e54d7
--- /dev/null
+++ b/consolefonts/lat1-12.psf
Binary files differ
diff --git a/consolefonts/lat1-12.psfu b/consolefonts/lat1-12.psfu
new file mode 100644
index 0000000..8047abd
--- /dev/null
+++ b/consolefonts/lat1-12.psfu
Binary files differ
diff --git a/consolefonts/lat1-14.psf b/consolefonts/lat1-14.psf
new file mode 100644
index 0000000..dacfd05
--- /dev/null
+++ b/consolefonts/lat1-14.psf
Binary files differ
diff --git a/consolefonts/lat1-14.psfu b/consolefonts/lat1-14.psfu
new file mode 100644
index 0000000..b38f319
--- /dev/null
+++ b/consolefonts/lat1-14.psfu
Binary files differ
diff --git a/consolefonts/lat1-16.psf b/consolefonts/lat1-16.psf
new file mode 100644
index 0000000..997c679
--- /dev/null
+++ b/consolefonts/lat1-16.psf
Binary files differ
diff --git a/consolefonts/lat1-16.psfu b/consolefonts/lat1-16.psfu
new file mode 100644
index 0000000..097a640
--- /dev/null
+++ b/consolefonts/lat1-16.psfu
Binary files differ
diff --git a/consolefonts/lat2-08.psf b/consolefonts/lat2-08.psf
new file mode 100644
index 0000000..61262ed
--- /dev/null
+++ b/consolefonts/lat2-08.psf
Binary files differ
diff --git a/consolefonts/lat2-10.psf b/consolefonts/lat2-10.psf
new file mode 100644
index 0000000..2b86f24
--- /dev/null
+++ b/consolefonts/lat2-10.psf
Binary files differ
diff --git a/consolefonts/lat2-12.psf b/consolefonts/lat2-12.psf
new file mode 100644
index 0000000..27b6df5
--- /dev/null
+++ b/consolefonts/lat2-12.psf
Binary files differ
diff --git a/consolefonts/lat2-14.psf b/consolefonts/lat2-14.psf
new file mode 100644
index 0000000..88ebbb9
--- /dev/null
+++ b/consolefonts/lat2-14.psf
Binary files differ
diff --git a/consolefonts/lat2-16.psf b/consolefonts/lat2-16.psf
new file mode 100644
index 0000000..f293d14
--- /dev/null
+++ b/consolefonts/lat2-16.psf
Binary files differ
diff --git a/consolefonts/lat4-08.psfu b/consolefonts/lat4-08.psfu
new file mode 100644
index 0000000..c9abc78
--- /dev/null
+++ b/consolefonts/lat4-08.psfu
Binary files differ
diff --git a/consolefonts/lat4-10.psfu b/consolefonts/lat4-10.psfu
new file mode 100644
index 0000000..05a5b19
--- /dev/null
+++ b/consolefonts/lat4-10.psfu
Binary files differ
diff --git a/consolefonts/lat4-12.psfu b/consolefonts/lat4-12.psfu
new file mode 100644
index 0000000..8e47767
--- /dev/null
+++ b/consolefonts/lat4-12.psfu
Binary files differ
diff --git a/consolefonts/lat4-14.psfu b/consolefonts/lat4-14.psfu
new file mode 100644
index 0000000..742612f
--- /dev/null
+++ b/consolefonts/lat4-14.psfu
Binary files differ
diff --git a/consolefonts/lat4-16+.psfu b/consolefonts/lat4-16+.psfu
new file mode 100644
index 0000000..db066a7
--- /dev/null
+++ b/consolefonts/lat4-16+.psfu
Binary files differ
diff --git a/consolefonts/lat4-16.psfu b/consolefonts/lat4-16.psfu
new file mode 100644
index 0000000..3afbf24
--- /dev/null
+++ b/consolefonts/lat4-16.psfu
Binary files differ
diff --git a/consolefonts/lat4-19.psfu b/consolefonts/lat4-19.psfu
new file mode 100644
index 0000000..432d04b
--- /dev/null
+++ b/consolefonts/lat4-19.psfu
Binary files differ
diff --git a/consolefonts/lat4a-08.psfu b/consolefonts/lat4a-08.psfu
new file mode 100644
index 0000000..21a270b
--- /dev/null
+++ b/consolefonts/lat4a-08.psfu
Binary files differ
diff --git a/consolefonts/lat4a-10.psfu b/consolefonts/lat4a-10.psfu
new file mode 100644
index 0000000..0b6d845
--- /dev/null
+++ b/consolefonts/lat4a-10.psfu
Binary files differ
diff --git a/consolefonts/lat4a-12.psfu b/consolefonts/lat4a-12.psfu
new file mode 100644
index 0000000..fd18374
--- /dev/null
+++ b/consolefonts/lat4a-12.psfu
Binary files differ
diff --git a/consolefonts/lat4a-14.psfu b/consolefonts/lat4a-14.psfu
new file mode 100644
index 0000000..fad07e8
--- /dev/null
+++ b/consolefonts/lat4a-14.psfu
Binary files differ
diff --git a/consolefonts/lat4a-16+.psfu b/consolefonts/lat4a-16+.psfu
new file mode 100644
index 0000000..88df95e
--- /dev/null
+++ b/consolefonts/lat4a-16+.psfu
Binary files differ
diff --git a/consolefonts/lat4a-16.psfu b/consolefonts/lat4a-16.psfu
new file mode 100644
index 0000000..5fe3d07
--- /dev/null
+++ b/consolefonts/lat4a-16.psfu
Binary files differ
diff --git a/consolefonts/lat4a-19.psfu b/consolefonts/lat4a-19.psfu
new file mode 100644
index 0000000..da715d4
--- /dev/null
+++ b/consolefonts/lat4a-19.psfu
Binary files differ
diff --git a/consolefonts/ruscii_8x14.psf b/consolefonts/ruscii_8x14.psf
new file mode 100644
index 0000000..2a31447
--- /dev/null
+++ b/consolefonts/ruscii_8x14.psf
Binary files differ
diff --git a/consolefonts/ruscii_8x16.psf b/consolefonts/ruscii_8x16.psf
new file mode 100644
index 0000000..7ebc08d
--- /dev/null
+++ b/consolefonts/ruscii_8x16.psf
Binary files differ
diff --git a/consolefonts/ruscii_8x8.psf b/consolefonts/ruscii_8x8.psf
new file mode 100644
index 0000000..177e6ef
--- /dev/null
+++ b/consolefonts/ruscii_8x8.psf
Binary files differ
diff --git a/consolefonts/t.fnt b/consolefonts/t.fnt
new file mode 100644
index 0000000..9a98ece
--- /dev/null
+++ b/consolefonts/t.fnt
Binary files differ
diff --git a/consolefonts/t850b.fnt b/consolefonts/t850b.fnt
new file mode 100644
index 0000000..6d4b30d
--- /dev/null
+++ b/consolefonts/t850b.fnt
Binary files differ
diff --git a/consolefonts/tcvn8x16.psf b/consolefonts/tcvn8x16.psf
new file mode 100644
index 0000000..28b5be9
--- /dev/null
+++ b/consolefonts/tcvn8x16.psf
Binary files differ
diff --git a/consolefonts/viscii10-8x16.psfu b/consolefonts/viscii10-8x16.psfu
new file mode 100644
index 0000000..7bf25b9
--- /dev/null
+++ b/consolefonts/viscii10-8x16.psfu
Binary files differ
diff --git a/consoletrans/ECMA144.uni b/consoletrans/ECMA144.uni
new file mode 100644
index 0000000..aeb16a0
--- /dev/null
+++ b/consoletrans/ECMA144.uni
@@ -0,0 +1,108 @@
+#
+# Unicode mapping table for ISO 8859-10 according to ECMA 144
+# [However, the font iso10.* is slightly different]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0112
+0xa3	U+0122
+0xa4	U+012a
+0xa5	U+0128
+0xa6	U+0136
+0xa7	U+00a7
+0xa8	U+013b
+0xa9	U+0110
+0xaa	U+0160
+0xab	U+0166
+0xac	U+017d
+0xad	U+00ad
+0xae	U+016a
+0xaf	U+014a
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+0113
+0xb3	U+0123
+0xb4	U+012b
+0xb5	U+0129
+0xb6	U+0137
+0xb7	U+00b7
+0xb8	U+013c
+0xb9	U+0111
+0xba	U+0161
+0xbb	U+0167
+0xbc	U+017e
+0xbd	U+2015 # HORIZONTAL BAR
+0xbe	U+016b
+0xbf	U+014b
+0xc0	U+0100
+0xc1-0xc6	idem
+0xc7	U+012e
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+0116
+0xcd-0xd0	idem
+0xd1	U+0145
+0xd2	U+014c
+0xd3-0xd6	idem
+0xd7	U+0168
+0xd8	U+00d8
+0xd9	U+0172
+0xda-0xdf	idem
+0xe0	U+0101
+0xe1-0xe6	idem
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed-0xf0	idem
+0xf1	U+0146
+0xf2	U+014d
+0xf3-0xf6	idem
+0xf7	U+0169
+0xf8	U+00f8
+0xf9	U+0173
+0xfa-0xff	idem
diff --git a/consoletrans/README b/consoletrans/README
new file mode 100644
index 0000000..5d5a6cf
--- /dev/null
+++ b/consoletrans/README
@@ -0,0 +1,4 @@
+The correspondences given in iso0[1-9].uni are
+according to The Unicode Standard, Version 1.0, Vol. 1.
+
+The remaining ones are phantasy.
diff --git a/consoletrans/armscii8.uni b/consoletrans/armscii8.uni
new file mode 100644
index 0000000..6a04688
--- /dev/null
+++ b/consoletrans/armscii8.uni
@@ -0,0 +1,103 @@
+#
+# Armenian ArmSCII-8 encoding unicode table
+# usage: setfont -m trivial -u armscii8.uni fontname
+#
+0x00-0x9f idem
+0xA0 U+00A0
+# <armeternity> doesn't exist in unicode...
+#0xA1 U+FFFF
+0xA2 U+00A7
+0xA3 U+0589
+0xA4 U+0029
+0xA5 U+0028
+0xA6 U+00BB
+0xA7 U+00AB
+0xA8 U+2014
+0xA9 U+002E
+0xAA U+055D
+0xAB U+002C
+0xAC U+2013
+0xAD U+058A
+0xAE U+2026
+0xAF U+055C
+0xB0 U+055B
+0xB1 U+055E
+0xB2 U+0531
+0xB3 U+0561
+0xB4 U+0532
+0xB5 U+0562
+0xB6 U+0533
+0xB7 U+0563
+0xB8 U+0534
+0xB9 U+0564
+0xBA U+0535
+0xBB U+0565
+0xBC U+0536
+0xBD U+0566
+0xBE U+0537
+0xBF U+0567
+0xC0 U+0538
+0xC1 U+0568
+0xC2 U+0539
+0xC3 U+0569
+0xC4 U+053A
+0xC5 U+056A
+0xC6 U+053B
+0xC7 U+056B
+0xC8 U+053C
+0xC9 U+056C
+0xCA U+053D
+0xCB U+056D
+0xCC U+053E
+0xCD U+056E
+0xCE U+053F
+0xCF U+056F
+0xD0 U+0540
+0xD1 U+0570
+0xD2 U+0541
+0xD3 U+0571
+0xD4 U+0542
+0xD5 U+0572
+0xD6 U+0543
+0xD7 U+0573
+0xD8 U+0544
+0xD9 U+0574
+0xDA U+0545
+0xDB U+0575
+0xDC U+0546
+0xDD U+0576
+0xDE U+0547
+0xDF U+0577
+0xE0 U+0548
+0xE1 U+0578
+0xE2 U+0549
+0xE3 U+0579
+0xE4 U+054A
+0xE5 U+057A
+0xE6 U+054B
+0xE7 U+057B
+0xE8 U+054C
+0xE9 U+057C
+0xEA U+054D
+0xEB U+057D
+0xEC U+054E
+0xED U+057E
+0xEE U+054F
+0xEF U+057F
+0xF0 U+0550
+0xF1 U+0580
+0xF2 U+0551
+0xF3 U+0581
+0xF4 U+0552
+0xF5 U+0582
+0xF6 U+0553
+0xF7 U+0583
+0xF8 U+0554
+0xF9 U+0584
+0xFA U+0555
+0xFB U+0585
+0xFC U+0556
+0xFD U+0586
+0xFE U+02BC
+# armew doesn't exist in armscii-8; but as this place is free...
+0xFF U+0587
diff --git a/consoletrans/cp437.uni b/consoletrans/cp437.uni
new file mode 100644
index 0000000..b6c0fa0
--- /dev/null
+++ b/consoletrans/cp437.uni
@@ -0,0 +1,291 @@
+#
+# Unicode table for IBM Codepage 437.  Note that there are many more
+# substitutions that could be conceived (for example, thick-line
+# graphs probably should be replaced with double-line ones, accented
+# Latin characters should replaced with their nonaccented versions,
+# and some upper case Greek characters could be replaced by Latin), however,
+# I have limited myself to the Unicodes used by the kernel ISO 8859-1,
+# DEC VT, and IBM CP 437 tables.
+#
+# --------------------------------
+#
+# Basic IBM dingbats, some of which will never have a purpose clear
+# to mankind
+#
+0x00	U+0000
+0x01	U+263a
+0x02	U+263b
+0x03	U+2665
+0x04	U+2666 U+25c6
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25d8
+0x09	U+25cb
+0x0a	U+25d9
+0x0b	U+2642
+0x0c	U+2640
+0x0d	U+266a
+0x0e	U+266b
+0x0f	U+263c
+0x10	U+25b6 U+25ba
+0x11	U+25c0 U+25c4
+0x12	U+2195
+0x13	U+203c
+0x14	U+00b6
+0x15	U+00a7
+0x16	U+25ac
+0x17	U+21a8
+0x18	U+2191
+0x19	U+2193
+0x1a	U+2192
+0x1b	U+2190
+0x1c	U+221f
+0x1d	U+2194
+0x1e	U+25b2
+0x1f	U+25bc
+#
+# The ASCII range is identity-mapped, but some of the characters also
+# have to act as substitutes, especially the upper-case characters.
+#
+0x20	U+0020
+0x21	U+0021
+0x22	U+0022 U+00a8
+0x23	U+0023
+0x24	U+0024
+0x25	U+0025
+0x26	U+0026
+0x27	U+0027
+0x28	U+0028
+0x29	U+0029
+0x2a	U+002a
+0x2b	U+002b
+0x2c	U+002c U+00b8
+0x2d	U+002d U+00ad
+0x2e	U+002e
+0x2f	U+002f
+0x30	U+0030
+0x31	U+0031
+0x32	U+0032
+0x33	U+0033
+0x34	U+0034
+0x35	U+0035
+0x36	U+0036
+0x37	U+0037
+0x38	U+0038
+0x39	U+0039
+0x3a	U+003a
+0x3b	U+003b
+0x3c	U+003c
+0x3d	U+003d
+0x3e	U+003e
+0x3f	U+003f
+0x40	U+0040
+0x41	U+0041 U+00c0 U+00c1 U+00c2 U+00c3
+0x42	U+0042
+0x43	U+0043 U+00a9
+0x44	U+0044
+0x45	U+0045 U+00c8 U+00ca U+00cb
+0x46	U+0046
+0x47	U+0047
+0x48	U+0048
+0x49	U+0049 U+00cc U+00cd U+00ce U+00cf
+0x4a	U+004a
+0x4b	U+004b U+212a
+0x4c	U+004c
+0x4d	U+004d
+0x4e	U+004e
+0x4f	U+004f U+00d2 U+00d3 U+00d4 U+00d5
+0x50	U+0050
+0x51	U+0051
+0x52	U+0052 U+00ae
+0x53	U+0053
+0x54	U+0054
+0x55	U+0055 U+00d9 U+00da U+00db
+0x56	U+0056
+0x57	U+0057
+0x58	U+0058
+0x59	U+0059 U+00dd
+0x5a	U+005a
+0x5b	U+005b
+0x5c	U+005c
+0x5d	U+005d
+0x5e	U+005e
+0x5f	U+005f U+f804
+0x60	U+0060
+0x61	U+0061 U+00e3
+0x62	U+0062
+0x63	U+0063
+0x64	U+0064
+0x65	U+0065
+0x66	U+0066
+0x67	U+0067
+0x68	U+0068
+0x69	U+0069
+0x6a	U+006a
+0x6b	U+006b
+0x6c	U+006c
+0x6d	U+006d
+0x6e	U+006e
+0x6f	U+006f U+00f5
+0x70	U+0070
+0x71	U+0071
+0x72	U+0072
+0x73	U+0073
+0x74	U+0074
+0x75	U+0075
+0x76	U+0076
+0x77	U+0077
+0x78	U+0078 U+00d7
+0x79	U+0079 U+00fd
+0x7a	U+007a
+0x7b	U+007b
+0x7c	U+007c U+00a5
+0x7d	U+007d
+0x7e	U+007e
+#
+# Okay, what on Earth is this one supposed to be used for?
+#
+0x7f	U+2302
+#
+# Non-English characters, mostly lower case letters...
+#
+0x80	U+00c7
+0x81	U+00fc
+0x82	U+00e9
+0x83	U+00e2
+0x84	U+00e4
+0x85	U+00e0
+0x86	U+00e5
+0x87	U+00e7
+0x88	U+00ea
+0x89	U+00eb
+0x8a	U+00e8
+0x8b	U+00ef
+0x8c	U+00ee
+0x8d	U+00ec
+0x8e	U+00c4
+0x8f	U+00c5 U+212b
+0x90	U+00c9
+0x91	U+00e6
+0x92	U+00c6
+0x93	U+00f4
+0x94	U+00f6
+0x95	U+00f2
+0x96	U+00fb
+0x97	U+00f9
+0x98	U+00ff
+0x99	U+00d6
+0x9a	U+00dc
+0x9b	U+00a2
+0x9c	U+00a3
+0x9d	U+00a5
+0x9e	U+20a7
+0x9f	U+0192
+0xa0	U+00e1
+0xa1	U+00ed
+0xa2	U+00f3
+0xa3	U+00fa
+0xa4	U+00f1
+0xa5	U+00d1
+0xa6	U+00aa
+0xa7	U+00ba
+0xa8	U+00bf
+0xa9	U+2310
+0xaa	U+00ac
+0xab	U+00bd
+0xac	U+00bc
+0xad	U+00a1
+0xae	U+00ab
+0xaf	U+00bb
+#
+# Block graphics
+#
+0xb0	U+2591
+0xb1	U+2592
+0xb2	U+2593
+0xb3	U+2502
+0xb4	U+2524
+0xb5	U+2561
+0xb6	U+2562
+0xb7	U+2556
+0xb8	U+2555
+0xb9	U+2563
+0xba	U+2551
+0xbb	U+2557
+0xbc	U+255d
+0xbd	U+255c
+0xbe	U+255b
+0xbf	U+2510
+0xc0	U+2514
+0xc1	U+2534
+0xc2	U+252c
+0xc3	U+251c
+0xc4	U+2500
+0xc5	U+253c
+0xc6	U+255e
+0xc7	U+255f
+0xc8	U+255a
+0xc9	U+2554
+0xca	U+2569
+0xcb	U+2566
+0xcc	U+2560
+0xcd	U+2550
+0xce	U+256c
+0xcf	U+2567
+0xd0	U+2568
+0xd1	U+2564
+0xd2	U+2565
+0xd3	U+2559
+0xd4	U+2558
+0xd5	U+2552
+0xd6	U+2553
+0xd7	U+256b
+0xd8	U+256a
+0xd9	U+2518
+0xda	U+250c
+0xdb	U+2588
+0xdc	U+2584
+0xdd	U+258c
+0xde	U+2590
+0xdf	U+2580
+#
+# Greek letters and mathematical symbols
+#
+0xe0	U+03b1
+0xe1	U+03b2 U+00df
+0xe2	U+0393
+0xe3	U+03c0
+0xe4	U+03a3
+0xe5	U+03c3
+0xe6	U+00b5 U+03bc
+0xe7	U+03c4
+0xe8	U+03a6 U+00d8
+0xe9	U+0398
+0xea	U+03a9 U+2126
+0xeb	U+03b4
+0xec	U+221e
+0xed	U+03c6 U+00f8
+0xee	U+03b5
+0xef	U+2229
+0xf0	U+2261
+0xf1	U+00b1
+0xf2	U+2265
+0xf3	U+2264
+0xf4	U+2320
+0xf5	U+2321
+0xf6	U+00f7
+0xf7	U+2248
+0xf8	U+00b0
+0xf9	U+2219
+0xfa	U+00b7
+0xfb	U+221a
+0xfc	U+207f
+0xfd	U+00b2
+#
+# Square bullet, non-spacing blank
+# Mapping U+fffd to the square bullet means it is the substitution
+# character
+# 
+0xfe	U+25a0 U+fffd
+0xff	U+00a0
diff --git a/consoletrans/cp437_to_iso01.trans b/consoletrans/cp437_to_iso01.trans
new file mode 100644
index 0000000..d632c24
--- /dev/null
+++ b/consoletrans/cp437_to_iso01.trans
@@ -0,0 +1,133 @@
+#
+# this file allows using a cp437 encoded font to display iso-8859-1
+# usage: setfont -m cp437_to_iso01.trans -u iso01.uni fontname 
+#
+# Internal value	Output character
+0x80    0x80
+0x81    0x81
+0x82    0x82
+0x83    0x83
+0x84    0x84
+0x85    0x85
+0x86    0x86
+0x87    0x87
+0x88    0x88
+0x89    0x89
+0x8A    0x8A
+0x8B    0x8B
+0x8C    0x8C
+0x8D    0x8D
+0x8E    0x8E
+0x8F    0x8F
+0x90    0x90
+0x91    0x91
+0x92    0x92
+0x93    0x93
+0x94    0x94
+0x95    0x95
+0x96    0x96
+0x97    0x97
+0x98    0x98
+0x99    0x99
+0x9A    0x9A
+0x9B    0x9B
+0x9C    0x9C
+0x9D    0x9D
+0x9E    0x9E
+0x9F    0x9F
+0xA0    0xA0
+0xA1    0xAD
+0xA2    0x9B
+0xA3    0x9C
+0xA4    0xA4
+0xA5    0x9D
+0xA6    0xA6
+0xA7    0x15
+0xA8    0x1C
+0xA9    0xA9
+0xAA    0xA6
+0xAB    0xAE
+0xAC    0xAA
+0xAD    0xAD
+0xAE    0xAE
+0xAF    0xAF
+0xB0    0xB0
+0xB1    0xF1
+0xB2    0xFD
+0xB3    0xB3
+0xB4    0xB4
+0xB5    0xE6
+0xB6    0x14
+0xB7    0xF9
+0xB8    0xB8
+0xB9    0xB9
+0xBA    0xA7
+0xBB    0xAF
+0xBC    0xAC
+0xBD    0xAB
+0xBE    0xBE
+0xBF    0xA8
+0xC0    0xC0
+0xC1    0xC1
+0xC2    0xC2
+0xC3    0xC3
+0xC4    0x8E
+0xC5    0x8F
+0xC6    0x92
+0xC7    0x80
+0xC8    0xC8
+0xC9    0x90
+0xCA    0xCA
+0xCB    0xCB
+0xCC    0xCC
+0xCD    0xCD
+0xCE    0xCE
+0xCF    0xCF
+0xD0    0xD0
+0xD1    0xA5
+0xD2    0xD2
+0xD3    0xD3
+0xD4    0xD4
+0xD5    0xD5
+0xD6    0x99
+0xD7    0xD7
+0xD8    0xD8
+0xD9    0xD9
+0xDA    0xDA
+0xDB    0xDB
+0xDC    0x9A
+0xDD    0xDD
+0xDE    0xDE
+0xDF    0xE1
+0xE0    0x85
+0xE1    0xA0
+0xE2    0x83
+0xE3    0xE3
+0xE4    0x84
+0xE5    0x86
+0xE6    0x91
+0xE7    0x87
+0xE8    0x8A
+0xE9    0x82
+0xEA    0x88
+0xEB    0x89
+0xEC    0xAD
+0xED    0xA1
+0xEE    0x8B
+0xEF    0x8C
+0xF0    0xF0
+0xF1    0xA4
+0xF2    0x95
+0xF3    0xA2
+0xF4    0x93
+0xF5    0xF5
+0xF6    0x94
+0xF7    0xF6
+0xF8    0xED
+0xF9    0x97
+0xFA    0xA3
+0xFB    0x96
+0xFC    0x81
+0xFD    0xFD
+0xFE    0xFE
+0xFF    0x98
diff --git a/consoletrans/cp850.uni b/consoletrans/cp850.uni
new file mode 100644
index 0000000..5a484be
--- /dev/null
+++ b/consoletrans/cp850.uni
@@ -0,0 +1,283 @@
+#
+# Unicode table for IBM Codepage 850.
+# This allows to properly use a cp850 encoded font to display unicode
+# usage: setfont -m cp850_to_iso01.trans -u cp850.uni fontname
+#
+#
+0x00	U+0000
+0x01	U+263a
+0x02	U+263b
+0x03	U+2665
+0x04	U+2666 U+25c6
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25d8
+0x09	U+25cb
+0x0a	U+25d9
+0x0b	U+2642
+0x0c	U+2640
+0x0d	U+266a
+0x0e	U+266b
+0x0f	U+263c
+0x10	U+25b6 U+25ba
+0x11	U+25c0 U+25c4
+0x12	U+2195
+0x13	U+203c
+0x14	U+00b6
+0x15	U+00a7
+0x16	U+25ac
+0x17	U+21a8
+0x18	U+2191
+0x19	U+2193
+0x1a	U+2192
+0x1b	U+2190
+0x1c	U+221f
+0x1d	U+2194
+0x1e	U+25b2
+0x1f	U+25bc
+#
+# The ASCII range is identity-mapped, but some of the characters also
+# have to act as substitutes, especially the upper-case characters.
+#
+0x20	U+0020
+0x21	U+0021
+0x22	U+0022 U+00a8
+0x23	U+0023
+0x24	U+0024
+0x25	U+0025
+0x26	U+0026
+0x27	U+0027
+0x28	U+0028
+0x29	U+0029
+0x2a	U+002a
+0x2b	U+002b
+0x2c	U+002c U+00b8
+0x2d	U+002d U+00ad
+0x2e	U+002e
+0x2f	U+002f
+0x30	U+0030
+0x31	U+0031
+0x32	U+0032
+0x33	U+0033
+0x34	U+0034
+0x35	U+0035
+0x36	U+0036
+0x37	U+0037
+0x38	U+0038
+0x39	U+0039
+0x3a	U+003a
+0x3b	U+003b
+0x3c	U+003c
+0x3d	U+003d
+0x3e	U+003e
+0x3f	U+003f
+0x40	U+0040
+0x41	U+0041
+0x42	U+0042
+0x43	U+0043
+0x44	U+0044
+0x45	U+0045
+0x46	U+0046
+0x47	U+0047
+0x48	U+0048
+0x49	U+0049
+0x4a	U+004a
+0x4b	U+004b U+212a
+0x4c	U+004c
+0x4d	U+004d
+0x4e	U+004e
+0x4f	U+004f
+0x50	U+0050
+0x51	U+0051
+0x52	U+0052
+0x53	U+0053
+0x54	U+0054
+0x55	U+0055
+0x56	U+0056
+0x57	U+0057
+0x58	U+0058
+0x59	U+0059
+0x5a	U+005a
+0x5b	U+005b
+0x5c	U+005c
+0x5d	U+005d
+0x5e	U+005e
+0x5f	U+005f U+f804
+0x60	U+0060
+0x61	U+0061
+0x62	U+0062
+0x63	U+0063
+0x64	U+0064
+0x65	U+0065
+0x66	U+0066
+0x67	U+0067
+0x68	U+0068
+0x69	U+0069
+0x6a	U+006a
+0x6b	U+006b
+0x6c	U+006c
+0x6d	U+006d
+0x6e	U+006e
+0x6f	U+006f
+0x70	U+0070
+0x71	U+0071
+0x72	U+0072
+0x73	U+0073
+0x74	U+0074
+0x75	U+0075
+0x76	U+0076
+0x77	U+0077
+0x78	U+0078
+0x79	U+0079
+0x7a	U+007a
+0x7b	U+007b
+0x7c	U+007c
+0x7d	U+007d
+0x7e	U+007e
+#
+# Okay, what on Earth is this one supposed to be used for?
+#
+0x7f	U+2302
+#
+# Non-English characters, mostly lower case letters...
+#
+0x80	U+00c7
+0x81	U+00fc
+0x82	U+00e9
+0x83	U+00e2
+0x84	U+00e4
+0x85	U+00e0
+0x86	U+00e5
+0x87	U+00e7
+0x88	U+00ea
+0x89	U+00eb
+0x8a	U+00e8
+0x8b	U+00ef
+0x8c	U+00ee
+0x8d	U+00ec
+0x8e	U+00c4
+0x8f	U+00c5 U+212b
+0x90	U+00c9
+0x91	U+00e6
+0x92	U+00c6
+0x93	U+00f4
+0x94	U+00f6
+0x95	U+00f2
+0x96	U+00fb
+0x97	U+00f9
+0x98	U+00ff
+0x99	U+00d6
+0x9a	U+00dc
+0x9b	U+00f8
+0x9c	U+00a3
+0x9d	U+00d8
+0x9e	U+00d7
+0x9f	U+0192
+0xa0	U+00e1
+0xa1	U+00ed
+0xa2	U+00f3
+0xa3	U+00fa
+0xa4	U+00f1
+0xa5	U+00d1
+0xa6	U+00aa
+0xa7	U+00ba
+0xa8	U+00bf
+0xa9	U+00ae
+0xaa	U+00ac
+0xab	U+00bd
+0xac	U+00bc
+0xad	U+00a1
+0xae	U+00ab
+0xaf	U+00bb
+#
+# Block graphics
+#
+0xb0	U+2591
+0xb1	U+2592
+0xb2	U+2593
+0xb3	U+2502
+0xb4	U+2524
+0xb5	U+00c1
+0xb6	U+00c2
+0xb7	U+00c0
+0xb8	U+00a9
+0xb9	U+2563
+0xba	U+2551
+0xbb	U+2557
+0xbc	U+255d
+0xbd	U+00a2
+0xbe	U+00a5
+0xbf	U+2510
+0xc0	U+2514
+0xc1	U+2534
+0xc2	U+252c
+0xc3	U+251c
+0xc4	U+2500
+0xc5	U+253c
+0xc6	U+00e3
+0xc7	U+00c3
+0xc8	U+255a
+0xc9	U+2554
+0xca	U+2569
+0xcb	U+2566
+0xcc	U+2560
+0xcd	U+2550
+0xce	U+256c
+0xcf	U+00a4 U+20ac
+0xd0	U+00f0
+0xd1	U+00d0
+0xd2	U+00ca
+0xd3	U+00cb
+0xd4	U+00c8
+0xd5	U+0131
+0xd6	U+00cd
+0xd7	U+00ce
+0xd8	U+00cf
+0xd9	U+2518
+0xda	U+250c
+0xdb	U+2588
+0xdc	U+2584
+0xdd	U+00a6
+0xde	U+00cc
+0xdf	U+2580
+#
+# Greek letters and mathematical symbols
+#
+0xe0	U+00d3
+0xe1	U+03b2 U+00df
+0xe2	U+00d4
+0xe3	U+00d2
+0xe4	U+00f5
+0xe5	U+00d5
+0xe6	U+00b5 U+03bc
+0xe7	U+00fe
+0xe8	U+00de
+0xe9	U+00da
+0xea	U+00db
+0xeb	U+00d9
+0xec	U+00fd
+0xed	U+00dd
+0xee	U+03b5
+0xef	U+00b4
+0xf0	U+2261
+0xf1	U+00b1
+0xf2	U+2265
+0xf3	U+00be
+0xf4	U+2320
+0xf5	U+2321
+0xf6	U+00f7
+0xf7	U+00b8
+0xf8	U+00b0
+0xf9	U+00a8
+0xfa	U+00b7
+0xfb	U+00b9
+0xfc	U+00b3
+0xfd	U+00b2
+#
+# Square bullet, non-spacing blank
+# Mapping U+fffd to the square bullet means it is the substitution
+# character
+# 
+0xfe	U+25a0 U+fffd
+0xff	U+00a0
diff --git a/consoletrans/cp850_to_iso01.trans b/consoletrans/cp850_to_iso01.trans
new file mode 100644
index 0000000..29307ed
--- /dev/null
+++ b/consoletrans/cp850_to_iso01.trans
@@ -0,0 +1,100 @@
+#
+# this file allows using a cp850 encoded font to display iso-8859-1
+# usage: setfont -m cp850_to_iso01.trans -u iso01.uni fontname
+#
+0xa0 0xff
+0xa1 0xad
+0xa2 0xbd
+0xa3 0x9c
+0xa4 0xcf
+0xa5 0xbe
+0xa6 0xdd
+0xa7 0x15
+0xa8 0xf9
+0xa9 0xb8
+0xaa 0xa6
+0xab 0xae
+0xac 0xaa
+0xad 0xf0
+0xae 0xa9
+0xaf 0xee
+0xb0 0xf8
+0xb1 0xf1
+0xb2 0xfd
+0xb3 0xfc
+0xb4 0xef
+0xb5 0xe6
+0xb6 0x14
+0xb7 0xfa
+0xb8 0xf7
+0xb9 0xfb
+0xba 0xa7
+0xbb 0xaf
+0xbc 0xac
+0xbd 0xab
+0xbe 0xf3
+0xbf 0xa8
+0xc0 0xb7
+0xc1 0xb5
+0xc2 0xb6
+0xc3 0xc7
+0xc4 0x8e
+0xc5 0x8f
+0xc6 0x92
+0xc7 0x80
+0xc8 0xd4
+0xc9 0x90
+0xca 0xd2
+0xcb 0xd3
+0xcc 0xde
+0xcd 0xd6
+0xce 0xd7
+0xcf 0xd8
+0xd0 0xd1
+0xd1 0xa5
+0xd2 0xe3
+0xd3 0xe0
+0xd4 0xe2
+0xd5 0xe5
+0xd6 0x99
+0xd7 0x9e
+0xd8 0x9d
+0xd9 0xeb
+0xda 0xe9
+0xdb 0xea
+0xdc 0x9a
+0xdd 0xed
+0xde 0xe8
+0xdf 0xe1
+0xe0 0x85
+0xe1 0xa0
+0xe2 0x83
+0xe3 0xc6
+0xe4 0x84
+0xe5 0x86
+0xe6 0x91
+0xe7 0x87
+0xe8 0x8a
+0xe9 0x82
+0xea 0x88
+0xeb 0x89
+0xec 0x8d
+0xed 0xa1
+0xee 0x8c
+0xef 0x8b
+0xf0 0xd0
+0xf1 0xa4
+0xf2 0x95
+0xf3 0xa2
+0xf4 0x93
+0xf5 0xe4
+0xf6 0x94
+0xf7 0xf6
+0xf8 0x9b
+0xf9 0x97
+0xfa 0xa3
+0xfb 0x96
+0xfc 0x81
+0xfd 0xec
+0xfe 0xe7
+0xff 0x98
diff --git a/consoletrans/cp850b.uni b/consoletrans/cp850b.uni
new file mode 100644
index 0000000..3da7c78
--- /dev/null
+++ b/consoletrans/cp850b.uni
@@ -0,0 +1,285 @@
+#
+# This is a modified IBM CP850; whith the glyphs that changed between
+# iso-8859-1 and iso-8859-15 changed the same way; so by hacking a little
+# a cp850 font we can change those eight glyphs and have a nice font to
+# use to display iso-8859-15
+#
+# usage: setfont -m cp850_to_iso01.trans -u cp850b.uni fontname
+#
+0x00	U+0000
+0x01	U+263a
+0x02	U+263b
+0x03	U+2665
+0x04	U+2666 U+25c6
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25d8
+0x09	U+25cb
+0x0a	U+25d9
+0x0b	U+2642
+0x0c	U+2640
+0x0d	U+266a
+0x0e	U+266b
+0x0f	U+263c
+0x10	U+25b6 U+25ba
+0x11	U+25c0 U+25c4
+0x12	U+2195
+0x13	U+203c
+0x14	U+00b6
+0x15	U+00a7
+0x16	U+25ac
+0x17	U+21a8
+0x18	U+2191
+0x19	U+2193
+0x1a	U+2192
+0x1b	U+2190
+0x1c	U+221f
+0x1d	U+2194
+0x1e	U+25b2
+0x1f	U+25bc
+#
+# The ASCII range is identity-mapped, but some of the characters also
+# have to act as substitutes, especially the upper-case characters.
+#
+0x20	U+0020
+0x21	U+0021
+0x22	U+0022 U+00a8
+0x23	U+0023
+0x24	U+0024
+0x25	U+0025
+0x26	U+0026
+0x27	U+0027
+0x28	U+0028
+0x29	U+0029
+0x2a	U+002a
+0x2b	U+002b
+0x2c	U+002c U+00b8
+0x2d	U+002d U+00ad
+0x2e	U+002e
+0x2f	U+002f
+0x30	U+0030
+0x31	U+0031
+0x32	U+0032
+0x33	U+0033
+0x34	U+0034
+0x35	U+0035
+0x36	U+0036
+0x37	U+0037
+0x38	U+0038
+0x39	U+0039
+0x3a	U+003a
+0x3b	U+003b
+0x3c	U+003c
+0x3d	U+003d
+0x3e	U+003e
+0x3f	U+003f
+0x40	U+0040
+0x41	U+0041
+0x42	U+0042
+0x43	U+0043
+0x44	U+0044
+0x45	U+0045
+0x46	U+0046
+0x47	U+0047
+0x48	U+0048
+0x49	U+0049
+0x4a	U+004a
+0x4b	U+004b U+212a
+0x4c	U+004c
+0x4d	U+004d
+0x4e	U+004e
+0x4f	U+004f
+0x50	U+0050
+0x51	U+0051
+0x52	U+0052
+0x53	U+0053
+0x54	U+0054
+0x55	U+0055
+0x56	U+0056
+0x57	U+0057
+0x58	U+0058
+0x59	U+0059
+0x5a	U+005a
+0x5b	U+005b
+0x5c	U+005c
+0x5d	U+005d
+0x5e	U+005e
+0x5f	U+005f U+f804
+0x60	U+0060
+0x61	U+0061
+0x62	U+0062
+0x63	U+0063
+0x64	U+0064
+0x65	U+0065
+0x66	U+0066
+0x67	U+0067
+0x68	U+0068
+0x69	U+0069
+0x6a	U+006a
+0x6b	U+006b
+0x6c	U+006c
+0x6d	U+006d
+0x6e	U+006e
+0x6f	U+006f
+0x70	U+0070
+0x71	U+0071
+0x72	U+0072
+0x73	U+0073
+0x74	U+0074
+0x75	U+0075
+0x76	U+0076
+0x77	U+0077
+0x78	U+0078
+0x79	U+0079
+0x7a	U+007a
+0x7b	U+007b
+0x7c	U+007c
+0x7d	U+007d
+0x7e	U+007e
+#
+# Okay, what on Earth is this one supposed to be used for?
+#
+0x7f	U+2302
+#
+# Non-English characters, mostly lower case letters...
+#
+0x80	U+00c7
+0x81	U+00fc
+0x82	U+00e9
+0x83	U+00e2
+0x84	U+00e4
+0x85	U+00e0
+0x86	U+00e5
+0x87	U+00e7
+0x88	U+00ea
+0x89	U+00eb
+0x8a	U+00e8
+0x8b	U+00ef
+0x8c	U+00ee
+0x8d	U+00ec
+0x8e	U+00c4
+0x8f	U+00c5 U+212b
+0x90	U+00c9
+0x91	U+00e6
+0x92	U+00c6
+0x93	U+00f4
+0x94	U+00f6
+0x95	U+00f2
+0x96	U+00fb
+0x97	U+00f9
+0x98	U+00ff
+0x99	U+00d6
+0x9a	U+00dc
+0x9b	U+00f8
+0x9c	U+00a3
+0x9d	U+00d8
+0x9e	U+00d7
+0x9f	U+0192
+0xa0	U+00e1
+0xa1	U+00ed
+0xa2	U+00f3
+0xa3	U+00fa
+0xa4	U+00f1
+0xa5	U+00d1
+0xa6	U+00aa
+0xa7	U+00ba
+0xa8	U+00bf
+0xa9	U+00ae
+0xaa	U+00ac
+0xab	U+0153
+0xac	U+0152
+0xad	U+00a1
+0xae	U+00ab
+0xaf	U+00bb
+#
+# Block graphics
+#
+0xb0	U+2591
+0xb1	U+2592
+0xb2	U+2593
+0xb3	U+2502
+0xb4	U+2524
+0xb5	U+00c1
+0xb6	U+00c2
+0xb7	U+00c0
+0xb8	U+00a9
+0xb9	U+2563
+0xba	U+2551
+0xbb	U+2557
+0xbc	U+255d
+0xbd	U+00a2
+0xbe	U+00a5
+0xbf	U+2510
+0xc0	U+2514
+0xc1	U+2534
+0xc2	U+252c
+0xc3	U+251c
+0xc4	U+2500
+0xc5	U+253c
+0xc6	U+00e3
+0xc7	U+00c3
+0xc8	U+255a
+0xc9	U+2554
+0xca	U+2569
+0xcb	U+2566
+0xcc	U+2560
+0xcd	U+2550
+0xce	U+256c
+0xcf	U+00a4
+0xd0	U+00f0
+0xd1	U+00d0
+0xd2	U+00ca
+0xd3	U+00cb
+0xd4	U+00c8
+0xd5	U+20ac
+0xd6	U+00cd
+0xd7	U+00ce
+0xd8	U+00cf
+0xd9	U+2518
+0xda	U+250c
+0xdb	U+2588
+0xdc	U+2584
+0xdd	U+0160
+0xde	U+00cc
+0xdf	U+2580
+#
+# Greek letters and mathematical symbols
+#
+0xe0	U+00d3
+0xe1	U+03b2 U+00df
+0xe2	U+00d4
+0xe3	U+00d2
+0xe4	U+00f5
+0xe5	U+00d5
+0xe6	U+00b5 U+03bc
+0xe7	U+00fe
+0xe8	U+00de
+0xe9	U+00da
+0xea	U+00db
+0xeb	U+00d9
+0xec	U+00fd
+0xed	U+00dd
+0xee	U+03b5
+0xef	U+017d
+0xf0	U+2261
+0xf1	U+00b1
+0xf2	U+2265
+0xf3	U+0178
+0xf4	U+2320
+0xf5	U+2321
+0xf6	U+00f7
+0xf7	U+017e
+0xf8	U+00b0
+0xf9	U+0161
+0xfa	U+00b7
+0xfb	U+00b9
+0xfc	U+00b3
+0xfd	U+00b2
+#
+# Square bullet, non-spacing blank
+# Mapping U+fffd to the square bullet means it is the substitution
+# character
+# 
+0xfe	U+25a0 U+fffd
+0xff	U+00a0
diff --git a/consoletrans/def.uni b/consoletrans/def.uni
new file mode 100644
index 0000000..ed34310
--- /dev/null
+++ b/consoletrans/def.uni
@@ -0,0 +1,175 @@
+0x00	U+2008
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+0x20-0x7E	idem
+0x7F	U+2302
+0x80	U+00C7
+0x81	U+00FC
+0x82	U+00E9
+0x83	U+00E2
+0x84	U+00E4
+0x85	U+00E0
+0x86	U+00E5
+0x87	U+00E7
+0x88	U+00EA
+0x89	U+00EB
+0x8A	U+00E8
+0x8B	U+00EF
+0x8C	U+00EE
+0x8D	U+00EC
+0x8E	U+00C4
+0x8F	U+00C5
+0x8F	U+212B
+0x90	U+00C9
+0x91	U+00E6
+0x92	U+00C6
+0x93	U+00F4
+0x94	U+00F6
+0x95	U+00F2
+0x96	U+00FB
+0x97	U+00F9
+0x98	U+00FF
+0x99	U+00D6
+0x9A	U+00DC
+0x9B	U+00A2
+0x9C	U+00A3
+0x9D	U+00A5
+0x9E	U+20A7
+0x9F	U+0192
+0xA0	U+00E1
+0xA1	U+00ED
+0xA2	U+00F3
+0xA3	U+00FA
+0xA4	U+00F1
+0xA5	U+00D1
+0xA6	U+00AA
+0xA7	U+00BA
+0xA8	U+00BF
+0xA9	U+2310
+0xAA	U+00AC
+0xAB	U+00BD
+0xAC	U+00BC
+0xAD	U+00A1
+0xAE	U+00AB
+0xAF	U+00BB
+0xB0	U+2591
+0xB1	U+2592
+0xB2	U+2593
+0xB3	U+2502
+0xB4	U+2524
+0xB5	U+2561
+0xB6	U+2562
+0xB7	U+2556
+0xB8	U+2555
+0xB9	U+2563
+0xBA	U+2551
+0xBB	U+2557
+0xBC	U+255D
+0xBD	U+255C
+0xBE	U+255B
+0xBF	U+2510
+0xC0	U+2514
+0xC1	U+2534
+0xC2	U+252C
+0xC3	U+251C
+0xC4	U+2500
+0xC5	U+253C
+0xC6	U+255E
+0xC7	U+255F
+0xC8	U+255A
+0xC9	U+2554
+0xCA	U+2569
+0xCB	U+2566
+0xCC	U+2560
+0xCD	U+2550
+0xCE	U+256C
+0xCF	U+2567
+0xD0	U+2568
+0xD1	U+2564
+0xD2	U+2565
+0xD3	U+2559
+0xD4	U+2558
+0xD5	U+2552
+0xD6	U+2553
+0xD7	U+256B
+0xD8	U+256A
+0xD9	U+2518
+0xDA	U+250C
+0xDB	U+2588
+0xDC	U+2584
+0xDD	U+258C
+0xDE	U+2590
+0xDF	U+2580
+0xE0	U+03B1
+0xE1	U+00DF
+0xE1	U+03B2
+0xE2	U+0393
+0xE3	U+03C0
+0xE4	U+03A3
+0xE5	U+03C3
+0xE6	U+00B5
+0xE6	U+03BC
+0xE7	U+03C4
+0xE8	U+03A6
+0xE9	U+0398
+0xEA	U+03A9
+0xEA	U+2126
+0xEB	U+03B4
+0xEC	U+221E
+0xED	U+03C6
+0xED	U+2205
+0xED	U+2300
+0xEE	U+03B5
+0xEE	U+2208
+0xEF	U+2229
+0xF0	U+2261
+0xF1	U+00B1
+0xF2	U+2265
+0xF3	U+2264
+0xF4	U+2320
+0xF5	U+2321
+0xF6	U+00F7
+0xF7	U+2248
+0xF8	U+00B0
+0xF9	U+2219
+0xF9	U+22C5
+0xFA	U+00B7
+0xFB	U+221A
+0xFC	U+207F
+0xFD	U+00B2
+0xFE	U+220E
+0xFE	U+25A0
+0xFF	U+00A0
diff --git a/consoletrans/empty.uni b/consoletrans/empty.uni
new file mode 100644
index 0000000..462b1fa
--- /dev/null
+++ b/consoletrans/empty.uni
@@ -0,0 +1 @@
+# empty Unicode table
diff --git a/consoletrans/ethiopic.uni b/consoletrans/ethiopic.uni
new file mode 100644
index 0000000..bea14b8
--- /dev/null
+++ b/consoletrans/ethiopic.uni
@@ -0,0 +1,460 @@
+#
+# Unicode mapping table for ISO 8859-1 fonts with ISO 10646 Ethiopic
+# [use: unicode_start Agafari-16.psf ethiopic.uni]
+#
+
+#
+#  ISO 8859-1 Mapping is from the iso01.uni file
+#
+0x20-0x7e	idem
+0x7f		U+2302
+# 0xa0-0xff	idem
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+
+
+#
+# Unicode mapping table for ISO 10646 Ethiopic 
+#
+
+0x9F	U+1200  # he
+0xA0	U+1201
+0xA1	U+1202
+0xA2	U+1203
+0xA3	U+1204
+0xA4	U+1205
+0xA5	U+1206
+
+0xA6	U+1208  # le
+0xA7	U+1209
+0xA8	U+120A
+0xA9	U+120B
+0xAA	U+120C
+0xAB	U+120D
+0xAC	U+120E
+0xAD	U+120F
+
+0xAE	U+1210  # He
+0xAF	U+1211
+0xB0	U+1212
+0xB1	U+1213
+0xB2	U+1214
+0xB3	U+1215
+0xB4	U+1216
+0xB5	U+1217
+
+0xB6	U+1218  # me
+0xB7	U+1219
+0xB8	U+121A
+0xB9	U+121B
+0xBA	U+121C
+0xBB	U+121D
+0xBC	U+121E
+0xBD	U+121F
+
+0xBE	U+1220  # `se
+0xBF	U+1221
+0xC0	U+1222
+0xC1	U+1223
+0xC2	U+1224
+0xC3	U+1225
+0xC4	U+1226
+0xC5	U+1227
+
+0xC6	U+1228  # re
+0xC7	U+1229
+0xC8	U+122A
+0xC9	U+122B
+0xCA	U+122C
+0xCB	U+122D
+0xCC	U+122E
+0xCD	U+122F
+
+0xCE	U+1230  # se
+0xCF	U+1231
+0xD0	U+1232
+0xD1	U+1233
+0xD2	U+1234
+0xD3	U+1235
+0xD4	U+1236
+0xD5	U+1237
+
+0xD6	U+1238  # xe
+0xD7	U+1239
+0xD8	U+123A
+0xD9	U+123B
+0xDA	U+123C
+0xDB	U+123D
+0xDC	U+123E
+0xDD	U+123F
+
+0xDE	U+1240  # qe
+0xDF	U+1241
+0xE0	U+1242
+0xE1	U+1243
+0xE2	U+1244
+0xE3	U+1245
+0xE4	U+1246
+
+0xE5	U+1248  # qWe
+0xE6	U+124A
+0xE7	U+124B
+0xE8	U+124C
+0xE9	U+124D
+
+0xEA	U+1250  # Qe
+0xEB	U+1251
+0xEC	U+1252
+0xED	U+1253
+0xEE	U+1254
+0xEF	U+1255
+0xF0	U+1256
+
+0xF1	U+1258  # QWe
+0xF2	U+125A
+0xF3	U+125B
+0xF4	U+125C
+0xF5	U+125D
+
+0xF6	U+1260  # be
+0xF7	U+1261
+0xF8	U+1262
+0xF9	U+1263
+0xFA	U+1264
+0xFB	U+1265
+0xFC	U+1266
+0xFD	U+1267
+
+0xFE	U+1268  # ve
+0xFF	U+1269
+0x100	U+126A
+0x101	U+126B
+0x102	U+126C
+0x103	U+126D
+0x104	U+126E
+0x105	U+126F
+
+0x106	U+1270  # te
+0x107	U+1271
+0x108	U+1272
+0x109	U+1273
+0x10A	U+1274
+0x10B	U+1275
+0x10C	U+1276
+0x10D	U+1277
+
+0x10E	U+1278  # ce
+0x10F	U+1279
+0x110	U+127A
+0x111	U+127B
+0x112	U+127C
+0x113	U+127D
+0x114	U+127E
+0x115	U+127F
+
+0x116	U+1280  # `he
+0x117	U+1281
+0x118	U+1282
+0x119	U+1283
+0x11A	U+1284
+0x11B	U+1285
+0x11C	U+1286
+
+0x11D	U+1288  # `hWe
+0x11E 	U+128A
+0x11F 	U+128B
+0x120	U+128C
+0x121	U+128D
+
+0x122	U+1290  # ne
+0x123	U+1291
+0x124	U+1292
+0x125	U+1293
+0x126	U+1294
+0x127	U+1295
+0x128	U+1296
+0x129	U+1297
+
+0x12A	U+1298  # Ne
+0x12B	U+1299
+0x12C	U+129A
+0x12D	U+129B
+0x12E	U+129C
+0x12F	U+129D
+0x130	U+129E
+0x131	U+129F
+
+0x132	U+12A0  # e
+0x133	U+12A1
+0x134	U+12A2
+0x135	U+12A3
+0x136	U+12A4
+0x137	U+12A5
+0x138	U+12A6
+0x139	U+12A7
+
+0x13A	U+12A8  # ke
+0x13B	U+12A9
+0x13C	U+12AA
+0x13D	U+12AB
+0x13E	U+12AC
+0x13F	U+12AD
+0x140	U+12AE
+
+0x141	U+12B0  # kWe
+0x142	U+12B2
+0x143	U+12B3
+0x144	U+12B4
+0x145	U+12B5
+
+0x146	U+12B8  # Ke
+0x147	U+12B9
+0x148	U+12BA
+0x149	U+12BB
+0x14A	U+12BC
+0x14B	U+12BD
+0x14C	U+12BE
+
+0x14D	U+12C0  # KWe
+0x14E	U+12C2
+0x14F	U+12C3 
+0x150	U+12C4
+0x151	U+12C5
+
+0x152	U+12C8  # we
+0x153	U+12C9
+0x154	U+12CA
+0x155	U+12CB
+0x156	U+12CC
+0x157	U+12CD
+0x158	U+12CE
+
+0x159	U+12D0  # `e
+0x15A	U+12D1
+0x15B	U+12D2
+0x15C	U+12D3
+0x15D	U+12D4
+0x15E	U+12D5
+0x15F	U+12D6
+
+0x160	U+12D8  # ze
+0x161	U+12D9
+0x162	U+12DA
+0x163	U+12DB
+0x164	U+12DC
+0x165	U+12DD
+0x166	U+12DE
+0x167	U+12DF
+
+0x168	U+12E0  # Ze
+0x169	U+12E1
+0x16A	U+12E2
+0x16B	U+12E3
+0x16C	U+12E4
+0x16D	U+12E5
+0x16E	U+12E6
+0x16F	U+12E7
+
+0x170	U+12E8  # ye
+0x171	U+12E9
+0x172	U+12EA
+0x173	U+12EB
+0x174	U+12EC
+0x175	U+12ED
+0x176	U+12EE
+0x177	U+12EF
+
+0x178	U+12F0  # de
+0x179	U+12F1
+0x17A	U+12F2
+0x17B	U+12F3
+0x17C	U+12F4
+0x17D	U+12F5
+0x17E	U+12F6
+0x17F	U+12F7
+
+0x180	U+12F8  # De
+0x181	U+12F9
+0x182	U+12FA
+0x183	U+12FB
+0x184	U+12FC
+0x185	U+12FD
+0x186	U+12FE
+0x187	U+12FF
+
+0x188	U+1300  # je
+0x189	U+1301
+0x18A	U+1302
+0x18B	U+1303
+0x18C	U+1304
+0x18D	U+1305
+0x18E	U+1306
+0x18F	U+1307
+
+0x190	U+1308  # ge
+0x191	U+1309
+0x192	U+130A
+0x193	U+130B
+0x194	U+130C
+0x195	U+130D
+0x196	U+130E
+
+0x197	U+1310  # gWe
+0x198	U+1312
+0x199	U+1313
+0x19A	U+1314
+0x19B	U+1315
+
+0x19C	U+1318  # Ge
+0x19D	U+1319
+0x19E	U+131A
+0x19F	U+131B 
+0x1A0	U+131C
+0x1A1	U+131D
+0x1A2	U+131E
+
+0x1A3	U+1320  # Te
+0x1A4	U+1321
+0x1A5	U+1322
+0x1A6	U+1323
+0x1A7	U+1324
+0x1A8	U+1325
+0x1A9	U+1326
+0x1AA	U+1327
+
+0x1AB	U+1328  # Ce
+0x1AC	U+1329
+0x1AD	U+132A
+0x1AE	U+132B
+0x1AF	U+132C
+0x1B0	U+132D
+0x1B1	U+132E
+0x1B2	U+132F
+
+0x1B3	U+1330  # Pe
+0x1B4	U+1331
+0x1B5	U+1332
+0x1B6	U+1333
+0x1B7	U+1334
+0x1B8	U+1335
+0x1B9	U+1336
+0x1BA	U+1337
+
+0x1BB	U+1338  # Se
+0x1BC	U+1339
+0x1BD	U+133A
+0x1BE	U+133B
+0x1BF	U+133C
+0x1C0	U+133D
+0x1C1	U+133E
+0x1C2	U+133F
+
+0x1C3	U+1340  # `Se
+0x1C4	U+1341
+0x1C5	U+1342
+0x1C6	U+1343
+0x1C7	U+1344
+0x1C8	U+1345
+0x1C9	U+1346
+
+0x1CA	U+1348  # fe
+0x1CB	U+1349
+0x1CC	U+134A
+0x1CD	U+134B
+0x1CE	U+134C
+0x1CF	U+134D
+0x1D0	U+134E
+0x1D1	U+134F
+
+0x1D2	U+1350  # pe
+0x1D3	U+1351
+0x1D4	U+1352
+0x1D5	U+1353
+0x1D6	U+1354
+0x1D7	U+1355
+0x1D8	U+1356
+0x1D9	U+1357
+
+0x1DA	U+1358  # mYa
+0x1DB	U+1359  # rYa
+0x1DC	U+135A  # fYa
+
+0x1DD	U+1360  # punctuation block
+0x1DE	U+1361
+0x1DF	U+1362
+0x1E0	U+1363
+0x1E1	U+1364
+0x1E2	U+1365
+0x1E3	U+1366
+0x1E4	U+1367
+0x1E5	U+1368
+
+0x1E6	U+1369  # `1
+0x1E7	U+136A
+0x1E8	U+136B
+0x1E9	U+136C
+0x1EA	U+136D
+0x1EB	U+136E
+0x1EC	U+136F
+0x1ED	U+1370
+0x1EE	U+1371
+0x1EF	U+1372
+
+0x1F0	U+1373  # `20
+0x1F1	U+1374
+0x1F2	U+1375
+0x1F3	U+1376
+0x1F4	U+1377
+0x1F5	U+1378
+0x1F6	U+1379
+0x1F7	U+137A
+0x1F8	U+137B  # `100
+0x1F9	U+137C
+
+#
+#  Private Use Maps will have to be reset later
+#  This is not in the right area either, I think.
+#  (Probably U+FDF0...FDFF should be U+F820...F82F.)
+#  What are the corresponding character names?
+#  These must be noted in linux/Documentation/unicode.txt
+#
+0x1FA	U+FDF0  # \~X
+0x1FB	U+FDFB  # `!
+0x1FC	U+FDFC  # .
+0x1FD	U+FDFD  # <<
+0x1FE	U+FDFE  # >>
+0x1FF	U+FDFF  # ?
diff --git a/consoletrans/iso01.uni b/consoletrans/iso01.uni
new file mode 100644
index 0000000..0039478
--- /dev/null
+++ b/consoletrans/iso01.uni
@@ -0,0 +1,43 @@
+#
+# Unicode mapping table for ISO 8859-1 fonts iso01.*
+# [use: unicode_start iso01.f16 iso01]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+0xa0-0xff	idem
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
diff --git a/consoletrans/iso02.uni b/consoletrans/iso02.uni
new file mode 100644
index 0000000..dfe318e
--- /dev/null
+++ b/consoletrans/iso02.uni
@@ -0,0 +1,140 @@
+#
+# Unicode mapping table for ISO 8859-2 fonts iso02.*
+# [use: unicode_start iso02.f16 iso02]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+02d8
+0xa3	U+0141
+0xa4	U+00a4
+0xa5	U+013d
+0xa6	U+015a
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0160
+0xaa	U+015e
+0xab	U+0164
+0xac	U+0179
+0xad	U+00ad
+0xae	U+017d
+0xaf	U+017b
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+02db
+0xb3	U+0142
+0xb4	U+00b4
+0xb5	U+013e
+0xb6	U+015b
+0xb7	U+02c7
+0xb8	U+00b8
+0xb9	U+0161
+0xba	U+015f
+0xbb	U+0165
+0xbc	U+017a
+0xbd	U+02dd
+0xbe	U+017e
+0xbf	U+017c
+0xc0	U+0154
+0xc1	U+00c1
+0xc2	U+00c2
+0xc3	U+0102
+0xc4	U+00c4
+0xc5	U+0139
+0xc6	U+0106
+0xc7	U+00c7
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+011a
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+010e
+0xd0	U+0110
+0xd1	U+0143
+0xd2	U+0147
+0xd3	U+00d3
+0xd4	U+00d4
+0xd5	U+0150
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+0158
+0xd9	U+016e
+0xda	U+00da
+0xdb	U+0170
+0xdc	U+00dc
+0xdd	U+00dd
+0xde	U+0162
+0xdf	U+00df
+0xe0	U+0155
+0xe1	U+00e1
+0xe2	U+00e2
+0xe3	U+0103
+0xe4	U+00e4
+0xe5	U+013a
+0xe6	U+0107
+0xe7	U+00e7
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+011b
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+010f
+0xf0	U+0111
+0xf1	U+0144
+0xf2	U+0148
+0xf3	U+00f3
+0xf4	U+00f4
+0xf5	U+0151
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+0159
+0xf9	U+016f
+0xfa	U+00fa
+0xfb	U+0171
+0xfc	U+00fc
+0xfd	U+00fd
+0xfe	U+0163
+0xff	U+02d9
diff --git a/consoletrans/iso03.uni b/consoletrans/iso03.uni
new file mode 100644
index 0000000..087d22e
--- /dev/null
+++ b/consoletrans/iso03.uni
@@ -0,0 +1,140 @@
+#
+# Unicode mapping table for ISO 8859-3 fonts iso03.*
+# [use: unicode_start iso03.f16 iso03]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0126
+0xa2	U+02d8
+0xa3	U+00a3
+0xa4	U+00a4
+# 0xa5	unused
+0xa6	U+0124
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0130
+0xaa	U+015e
+0xab	U+011e
+0xac	U+0134
+0xad	U+00ad
+# 0xae	unused
+0xaf	U+017b
+0xb0	U+00b0
+0xb1	U+0127
+0xb2	U+00b2
+0xb3	U+00b3
+0xb4	U+00b4
+0xb5	U+00b5
+0xb6	U+0125
+0xb7	U+00b7
+0xb8	U+00b8
+0xb9	U+0131
+0xba	U+015f
+0xbb	U+011f
+0xbc	U+0135
+0xbd	U+00bd
+# 0xbe	unused
+0xbf	U+017c
+0xc0	U+00c0
+0xc1	U+00c1
+0xc2	U+00c2
+# 0xc3	unused
+0xc4	U+00c4
+0xc5	U+010a
+0xc6	U+0108
+0xc7	U+00c7
+0xc8	U+00c8
+0xc9	U+00c9
+0xca	U+00ca
+0xcb	U+00cb
+0xcc	U+00cc
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+00cf
+# 0xd0	unused
+0xd1	U+00d1
+0xd2	U+00d2
+0xd3	U+00d3
+0xd4	U+00d4
+0xd5	U+0120
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+011c
+0xd9	U+00d9
+0xda	U+00da
+0xdb	U+00db
+0xdc	U+00dc
+0xdd	U+016c
+0xde	U+015c
+0xdf	U+00df
+0xe0	U+00e0
+0xe1	U+00e1
+0xe2	U+00e2
+# 0xe3	unused
+0xe4	U+00e4
+0xe5	U+010b
+0xe6	U+0109
+0xe7	U+00e7
+0xe8	U+00e8
+0xe9	U+00e9
+0xea	U+00ea
+0xeb	U+00eb
+0xec	U+00ec
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+00ef
+# 0xf0	unused
+0xf1	U+00f1
+0xf2	U+00f2
+0xf3	U+00f3
+0xf4	U+00f4
+0xf5	U+0121
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+011d
+0xf9	U+00f9
+0xfa	U+00fa
+0xfb	U+00fb
+0xfc	U+00fc
+0xfd	U+016d
+0xfe	U+015d
+0xff	U+02d9
diff --git a/consoletrans/iso04.uni b/consoletrans/iso04.uni
new file mode 100644
index 0000000..62948f5
--- /dev/null
+++ b/consoletrans/iso04.uni
@@ -0,0 +1,140 @@
+#
+# Unicode mapping table for ISO 8859-4 fonts iso04.*
+# [use: unicode_start iso04.f16 iso04]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0138
+0xa3	U+0156
+0xa4	U+00a4
+0xa5	U+0128
+0xa6	U+013b
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0160
+0xaa	U+0112
+0xab	U+0122
+0xac	U+0166
+0xad	U+00ad
+0xae	U+017d
+0xaf	U+00af
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+02db
+0xb3	U+0157
+0xb4	U+00b4
+0xb5	U+0129
+0xb6	U+013c
+0xb7	U+02c7
+0xb8	U+00b8
+0xb9	U+0161
+0xba	U+0113
+0xbb	U+0123
+0xbc	U+0167
+0xbd	U+014a
+0xbe	U+017e
+0xbf	U+014b
+0xc0	U+0100
+0xc1	U+00c1
+0xc2	U+00c2
+0xc3	U+00c3
+0xc4	U+00c4
+0xc5	U+00c5
+0xc6	U+00c6
+0xc7	U+012e
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+0116
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+012a
+0xd0	U+0110
+0xd1	U+0145
+0xd2	U+014c
+0xd3	U+0136
+0xd4	U+00d4
+0xd5	U+00d5
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+00d8
+0xd9	U+0172
+0xda	U+00da
+0xdb	U+00db
+0xdc	U+00dc
+0xdd	U+0168
+0xde	U+016a
+0xdf	U+00df
+0xe0	U+0101
+0xe1	U+00e1
+0xe2	U+00e2
+0xe3	U+00e3
+0xe4	U+00e4
+0xe5	U+00e5
+0xe6	U+00e6
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+012b
+0xf0	U+0111
+0xf1	U+0146
+0xf2	U+014d
+0xf3	U+0137
+0xf4	U+00f4
+0xf5	U+00f5
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+00f8
+0xf9	U+0173
+0xfa	U+00fa
+0xfb	U+00fb
+0xfc	U+00fc
+0xfd	U+0169
+0xfe	U+016b
+0xff	U+02d9
diff --git a/consoletrans/iso05.uni b/consoletrans/iso05.uni
new file mode 100644
index 0000000..8faa295
--- /dev/null
+++ b/consoletrans/iso05.uni
@@ -0,0 +1,140 @@
+#
+# Unicode mapping table for ISO 8859-5 fonts iso05.*
+# [use: unicode_start iso05.f16 iso05]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0401
+0xa2	U+0402
+0xa3	U+0403
+0xa4	U+0404
+0xa5	U+0405
+0xa6	U+0406
+0xa7	U+0407
+0xa8	U+0408
+0xa9	U+0409
+0xaa	U+040a
+0xab	U+040b
+0xac	U+040c
+0xad	U+00ad
+0xae	U+040e
+0xaf	U+040f
+0xb0	U+0410
+0xb1	U+0411
+0xb2	U+0412
+0xb3	U+0413
+0xb4	U+0414
+0xb5	U+0415
+0xb6	U+0416
+0xb7	U+0417
+0xb8	U+0418
+0xb9	U+0419
+0xba	U+041a
+0xbb	U+041b
+0xbc	U+041c
+0xbd	U+041d
+0xbe	U+041e
+0xbf	U+041f
+0xc0	U+0420
+0xc1	U+0421
+0xc2	U+0422
+0xc3	U+0423
+0xc4	U+0424
+0xc5	U+0425
+0xc6	U+0426
+0xc7	U+0427
+0xc8	U+0428
+0xc9	U+0429
+0xca	U+042a
+0xcb	U+042b
+0xcc	U+042c
+0xcd	U+042d
+0xce	U+042e
+0xcf	U+042f
+0xd0	U+0430
+0xd1	U+0431
+0xd2	U+0432
+0xd3	U+0433
+0xd4	U+0434
+0xd5	U+0435
+0xd6	U+0436
+0xd7	U+0437
+0xd8	U+0438
+0xd9	U+0439
+0xda	U+043a
+0xdb	U+043b
+0xdc	U+043c
+0xdd	U+043d
+0xde	U+043e
+0xdf	U+043f
+0xe0	U+0440
+0xe1	U+0441
+0xe2	U+0442
+0xe3	U+0443
+0xe4	U+0444
+0xe5	U+0445
+0xe6	U+0446
+0xe7	U+0447
+0xe8	U+0448
+0xe9	U+0449
+0xea	U+044a
+0xeb	U+044b
+0xec	U+044c
+0xed	U+044d
+0xee	U+044e
+0xef	U+044f
+0xf0	U+2116
+0xf1	U+0451
+0xf2	U+0452
+0xf3	U+0453
+0xf4	U+0454
+0xf5	U+0455
+0xf6	U+0456
+0xf7	U+0457
+0xf8	U+0458
+0xf9	U+0459
+0xfa	U+045a
+0xfb	U+045b
+0xfc	U+045c
+0xfd	U+00a7
+0xfe	U+045e
+0xff	U+045f
diff --git a/consoletrans/iso06.uni b/consoletrans/iso06.uni
new file mode 100644
index 0000000..8a1da6e
--- /dev/null
+++ b/consoletrans/iso06.uni
@@ -0,0 +1,95 @@
+#
+# Unicode mapping table for ISO 8859-6 fonts iso06.*
+# [use: unicode_start iso06.f16 iso06]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa4	U+00a4
+0xac	U+060c
+0xad	U+00ad
+0xbb	U+061b
+0xbf	U+061f
+0xc1	U+0621
+0xc2	U+0622
+0xc3	U+0623
+0xc4	U+0624
+0xc5	U+0625
+0xc6	U+0626
+0xc7	U+0627
+0xc8	U+0628
+0xc9	U+0629
+0xca	U+062a
+0xcb	U+062b
+0xcc	U+062c
+0xcd	U+062d
+0xce	U+062e
+0xcf	U+062f
+0xd0	U+0630
+0xd1	U+0631
+0xd2	U+0632
+0xd3	U+0633
+0xd4	U+0634
+0xd5	U+0635
+0xd6	U+0636
+0xd7	U+0637
+0xd8	U+0638
+0xd9	U+0639
+0xda	U+063a
+0xe0	U+0640
+0xe1	U+0641
+0xe2	U+0642
+0xe3	U+0643
+0xe4	U+0644
+0xe5	U+0645
+0xe6	U+0646
+0xe7	U+0647
+0xe8	U+0648
+0xe9	U+0649
+0xea	U+064a
+0xeb	U+064b
+0xec	U+064c
+0xed	U+064d
+0xee	U+064e
+0xef	U+064f
+0xf0	U+0650
+0xf1	U+0651
+0xf2	U+0652
diff --git a/consoletrans/iso07.uni b/consoletrans/iso07.uni
new file mode 100644
index 0000000..844dcf8
--- /dev/null
+++ b/consoletrans/iso07.uni
@@ -0,0 +1,135 @@
+#
+# Unicode mapping table for ISO 8859-7 fonts iso07.*
+# [use: unicode_start iso07.f16 iso07]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0371
+0xa2	U+0372
+0xa3	U+00a3
+0xa6	U+00a6
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+00a9
+0xab	U+00ab
+0xac	U+00ac
+0xad	U+00ad
+0xaf	U+2015
+0xb0	U+00b0
+0xb1	U+00b1
+0xb2	U+00b2
+0xb3	U+00b3
+0xb4	U+03f3
+0xb5	U+03f4
+0xb6	U+0386
+0xb7	U+00b7
+0xb8	U+0388
+0xb9	U+0389
+0xba	U+038a
+0xbb	U+00bb
+0xbc	U+038c
+0xbd	U+00bd
+0xbe	U+038e
+0xbf	U+038f
+0xc0	U+0390
+0xc1	U+0391
+0xc2	U+0392
+0xc3	U+0393
+0xc4	U+0394
+0xc5	U+0395
+0xc6	U+0396
+0xc7	U+0397
+0xc8	U+0398
+0xc9	U+0399
+0xca	U+039a
+0xcb	U+039b
+0xcc	U+039c
+0xcd	U+039d
+0xce	U+039e
+0xcf	U+039f
+0xd0	U+03a0
+0xd1	U+03a1
+0xd3	U+03a3
+0xd4	U+03a4
+0xd5	U+03a5
+0xd6	U+03a6
+0xd7	U+03a7
+0xd8	U+03a8
+0xd9	U+03a9
+0xda	U+03aa
+0xdb	U+03ab
+0xdc	U+03ac
+0xdd	U+03ad
+0xde	U+03ae
+0xdf	U+03af
+0xe0	U+03b0
+0xe1	U+03b1
+0xe2	U+03b2
+0xe3	U+03b3
+0xe4	U+03b4
+0xe5	U+03b5
+0xe6	U+03b6
+0xe7	U+03b7
+0xe8	U+03b8
+0xe9	U+03b9
+0xea	U+03ba
+0xeb	U+03bb
+0xec	U+03bc
+0xed	U+03bd
+0xee	U+03be
+0xef	U+03bf
+0xf0	U+03c0
+0xf1	U+03c1
+0xf2	U+03c2
+0xf3	U+03c3
+0xf4	U+03c4
+0xf5	U+03c5
+0xf6	U+03c6
+0xf7	U+03c7
+0xf8	U+03c8
+0xf9	U+03c9
+0xfa	U+03ca
+0xfb	U+03cb
+0xfc	U+03cc
+0xfd	U+03cd
+0xfe	U+03ce
+
diff --git a/consoletrans/iso08.uni b/consoletrans/iso08.uni
new file mode 100644
index 0000000..8d3d705
--- /dev/null
+++ b/consoletrans/iso08.uni
@@ -0,0 +1,81 @@
+#
+# Unicode mapping table for ISO 8859-8 fonts iso08.*
+# [use: unicode_start iso08.f16 iso08]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa2-0xa9	idem
+0xaa	U+00d7
+0xab-0xae	idem
+0xaf	U+203e
+0xb0-0xb9	idem
+0xba	U+00f7
+0xbb-0xbe	idem
+0xbf	U+051f
+0xdf	U+2017
+0xe0	U+05d0
+0xe1	U+05d1
+0xe2	U+05d2
+0xe3	U+05d3
+0xe4	U+05d4
+0xe5	U+05d5
+0xe6	U+05d6
+0xe7	U+05d7
+0xe8	U+05d8
+0xe9	U+05d9
+0xea	U+05da
+0xeb	U+05db
+0xec	U+05dc
+0xed	U+05dd
+0xee	U+05de
+0xef	U+05df
+0xf0	U+05e0
+0xf1	U+05e1
+0xf2	U+05e2
+0xf3	U+05e3
+0xf4	U+05e4
+0xf5	U+05e5
+0xf6	U+05e6
+0xf7	U+05e7
+0xf8	U+05e8
+0xf9	U+05e9
+0xfa	U+05ea
diff --git a/consoletrans/iso09.uni b/consoletrans/iso09.uni
new file mode 100644
index 0000000..6cdcc20
--- /dev/null
+++ b/consoletrans/iso09.uni
@@ -0,0 +1,54 @@
+#
+# Unicode mapping table for ISO 8859-9 fonts iso09.*
+# [use: unicode_start iso09.f16 iso09]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+0xa0-0xcf	idem
+0xd0	U+011e
+0xd1-0xdc	idem
+0xdd	U+0130
+0xde	U+015e
+0xdf-0xef	idem
+0xf0	U+011f
+0xf1-0xfc	idem
+0xfd	U+0131
+0xfe	U+015f
+0xff	U+00ff
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
diff --git a/consoletrans/iso10.uni b/consoletrans/iso10.uni
new file mode 100644
index 0000000..714cfa8
--- /dev/null
+++ b/consoletrans/iso10.uni
@@ -0,0 +1,110 @@
+#
+# Unicode mapping table for the fonts iso10.*
+# [use: unicode_start iso10.f16 iso10]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0112
+0xa3	U+0122
+0xa4	U+012a
+0xa5	U+0128
+0xa6	U+0136
+0xa7	U+013b
+0xa8	U+0143
+0xa9	U+0156
+0xaa	U+0160
+0xab	U+0166
+0xac	U+017d
+0xad	U+00ad
+0xae	U+0138
+0xaf	U+014a
+0xb0	U+0111
+0xb1	U+0105
+0xb2	U+0113
+0xb3	U+0123
+0xb4	U+012b
+0xb5	U+0129
+0xb6	U+0137
+0xb7	U+013c
+0xb8	U+0144
+0xb9	U+0157
+0xba	U+0161
+0xbb	U+0167
+0xbc	U+017e
+0xbd	U+2015 # HORIZONTAL BAR
+0xbe	U+00df
+0xbf	U+014b
+0xc0	U+0100
+0xc1-0xc6	idem
+0xc7	U+012e
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+0116
+0xcd-0xd0	idem
+0xd1	U+0145
+0xd2	U+014c
+0xd3-0xd6	idem
+0xd7	U+0168
+0xd8	U+00d8
+0xd9	U+0172
+0xda-0xde	idem
+0xdf	U+016a
+0xe0	U+0101
+0xe1-0xe6	idem
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed-0xf0	idem
+0xf1	U+0146
+0xf2	U+014d
+0xf3-0xf6	idem
+0xf7	U+0169
+0xf8	U+00f8
+0xf9	U+0173
+0xfa-0xfe	idem
+0xff	U+016b
diff --git a/consoletrans/iso15.uni b/consoletrans/iso15.uni
new file mode 100644
index 0000000..c253147
--- /dev/null
+++ b/consoletrans/iso15.uni
@@ -0,0 +1,57 @@
+#
+# Unicode mapping table for ISO 8859-15 fonts iso15.*
+# usage: setfont -m trivial -u iso15.uni fontname
+#
+0x20-0x7e	idem
+0x7f		U+2302
+0xa0-0xa3	idem
+0xa4		U+20ac
+0xa5		U+00a5
+0xa6		U+0160
+0xa7		U+00a7
+0xa8		U+0161
+0xa9-0xb3	idem
+0xb4		U+017D
+0xb5-0xb7	idem
+0xb8		U+017E
+0xb9-0xbb	idem
+0xbc		U+0152
+0xbd		U+0153
+0xbe		U+0178
+0xbf-0xff	idem
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
diff --git a/consoletrans/koi2alt b/consoletrans/koi2alt
new file mode 100644
index 0000000..b433918
--- /dev/null
+++ b/consoletrans/koi2alt
@@ -0,0 +1,131 @@
+# Internal value (CP866/koi8)	Output character (ISO 8859-5)
+# (Since CP866 and koi8 use almost disjoint code sets, we
+# can map both of them simultaneously to iso-8859-5.)
+0x80    0xB0
+0x81    0xB1
+0x82    0xB2
+0x83    0xB3
+0x84    0xB4
+0x85    0xB5
+0x86    0xB6
+0x87    0xB7
+0x88    0xB8
+0x89    0xB9
+0x8A    0xFA
+0x8B    0xBB
+0x8C    0xBC
+0x8D    0xBD
+0x8E    0xBE
+0x8F    0xBF
+0x90    0xC0
+0x91    0xC1
+0x92    0xC2
+0x93    0xC3
+0x94    0xC4
+0x95    0xC5
+0x96    0xC6
+0x97    0xC7
+0x98    0xC8
+0x99    0xC9
+0x9A    0xCA
+0x9B    0xFF    # High-bit Escape to Rubout; should be 0xCB for Yeri
+0x9C    0xCC
+0x9D    0xCD
+0x9E    0xCE
+0x9F    0xCF
+0xA0    0xD0
+0xA1    0xD1
+0xA2    0xD2
+0xA3    0xF1    # yo ; should be 0xD3 for ghe
+0xA4    0xD4
+0xA5    0xD5
+0xA6    0xD6
+0xA7    0xD7
+0xA8    0xD8
+0xA9    0xD9
+0xAA    0xDA
+0xAB    0xDB
+0xAC    0xDC
+0xAD    0xDD
+0xAE    0xDE
+0xAF    0xDF
+0xB0    0xD3    # Changed, because yo
+0xB1    0xF3    #
+0xB2    0xF2
+0xB3    0xF0    # YO
+0xB4    0xF4
+0xB5    0xF5
+0xB6    0xF6
+0xB7    0xF7
+0xB8    0xF8
+0xB9    0xD0
+#0xBA    0xFA
+0xBB    0xFB
+0xBC    0xFC
+0xBD    0xFD
+0xBE    0xFE
+0xBF    0xCB    #
+0xC0    0xEE    # yu
+0xC1    0xA0    # a
+0xC2    0xA1    # b
+0xC3    0xE6    # c
+0xC4    0xA4    # d
+0xC5    0xA5    # e
+0xC6    0xE4    # f
+0xC7    0xA3    # g
+0xC8    0xE5    # h
+0xC9    0xA8    # i
+0xCA    0xA9    # iy
+0xCB    0xAA    # k
+0xCC    0xAB    # l
+0xCD    0xAC    # m
+0xCE    0xAD    # n
+0xCF    0xAE    # o
+0xD0    0xAF    # p
+0xD1    0xEF    # ya
+0xD2    0xE0    # r
+0xD3    0xE1    # s
+0xD4    0xE2    # t
+0xD5    0xE3    # u
+0xD6    0xA6    # zh
+0xD7    0xA2    # v
+0xD8    0xEC    # m znak
+0xD9    0xEB    # y
+0xDA    0xA7    # z
+0xDB    0xE8    # sh
+0xDC    0xED    # ae
+0xDD    0xE9    # sch
+0xDE    0xE7    # ch
+0xDF    0xEA    # t znak
+0xE0    0x9E    # YU
+0xE1    0x80    # A
+0xE2    0x81    # B
+0xE3    0x96    # C
+0xE4    0x84    # D
+0xE5    0x85    # E
+0xE6    0x94    # F
+0xE7    0x83    # G
+0xE8    0x95    # H
+0xE9    0x88    # I
+0xEA    0x89    # IY
+0xEB    0x8A    # K
+0xEC    0x8B    # L
+0xED    0x8C    # M
+0xEE    0x8D    # N
+0xEF    0x8E    # O
+0xF0    0x8F    # P
+0xF1    0x9F    # YA
+0xF2    0x90    # R
+0xF3    0x91    # S
+0xF4    0x92    # T
+0xF5    0x93    # U
+0xF6    0x86    # ZH
+0xF7    0x82    # V
+0xF8    0x9C    # M znak
+0xF9    0x9B    # Y
+0xFA    0x87    # Z
+0xFB    0x98    # SH
+0xFC    0x9D    # AE
+0xFD    0x99    # SCH
+0xFE    0x97    # CH
+0xFF    0x9A    # T znak
diff --git a/consoletrans/koi8.uni b/consoletrans/koi8.uni
new file mode 100644
index 0000000..8e79617
--- /dev/null
+++ b/consoletrans/koi8.uni
@@ -0,0 +1,262 @@
+# This corresponds to KOI-8R except control characters (00-1F, 7F).
+# count=260
+0x000	U+0000	#  
+0x001	U+263a	# ☺ 
+0x002	U+263b	# ☻ 
+0x003	U+2665	# ♥ 
+0x004	U+2666	# ♦ 
+0x005	U+2663	# ♣ 
+0x006	U+2660	# ♠ 
+0x007	U+2022	# • 
+0x008	U+25d8	# ◘ 
+0x009	U+25cb	# ○ 
+0x00a	U+25d9	# ◙ 
+0x00b	U+2642	# ♂ 
+0x00c	U+2640	# ♀ 
+0x00d	U+266a	# ♪ 
+0x00e	U+266b	# ♫ 
+0x00e	U+266c	# ♬ 
+0x00f	U+263c	# ☼ 
+0x010	U+25b6	# ▶ 
+0x010	U+25ba	# ► 
+0x011	U+25c0	# ◀ 
+0x011	U+25c4	# ◄ 
+0x012	U+2195	# ↕ 
+0x013	U+203c	# ‼ 
+0x014	U+00b6	# ¶ 
+0x015	U+00a7	# § 
+0x016	U+25ac	# ▬ 
+0x017	U+21a8	# ↨ 
+0x018	U+2191	# ↑ 
+0x019	U+2193	# ↓ 
+0x01a	U+2192	# → 
+0x01b	U+2190	# ← 
+0x01c	U+221f	# ∟ 
+0x01c	U+2319	# ⌙ 
+0x01d	U+2194	# ↔ 
+0x01e	U+25b2	# ▲ 
+0x01f	U+25bc	# ▼ 
+0x020	U+0020	#   
+0x021	U+0021	# ! 
+0x022	U+0022	# " 
+0x023	U+0023	# # 
+0x024	U+0024	# $ 
+0x025	U+0025	# % 
+0x026	U+0026	# & 
+0x027	U+0027	# ' 
+0x028	U+0028	# ( 
+0x029	U+0029	# ) 
+0x02a	U+002a	# * 
+0x02b	U+002b	# + 
+0x02c	U+002c	# , 
+0x02d	U+002d	# - 
+0x02e	U+002e	# . 
+0x02f	U+002f	# / 
+0x030	U+0030	# 0 
+0x031	U+0031	# 1 
+0x032	U+0032	# 2 
+0x033	U+0033	# 3 
+0x034	U+0034	# 4 
+0x035	U+0035	# 5 
+0x036	U+0036	# 6 
+0x037	U+0037	# 7 
+0x038	U+0038	# 8 
+0x039	U+0039	# 9 
+0x03a	U+003a	# : 
+0x03b	U+003b	# ; 
+0x03c	U+003c	# < 
+0x03d	U+003d	# = 
+0x03e	U+003e	# > 
+0x03f	U+003f	# ? 
+0x040	U+0040	# @ 
+0x041	U+0041	# A 
+0x042	U+0042	# B 
+0x043	U+0043	# C 
+0x044	U+0044	# D 
+0x045	U+0045	# E 
+0x046	U+0046	# F 
+0x047	U+0047	# G 
+0x048	U+0048	# H 
+0x049	U+0049	# I 
+0x04a	U+004a	# J 
+0x04b	U+004b	# K 
+0x04c	U+004c	# L 
+0x04d	U+004d	# M 
+0x04e	U+004e	# N 
+0x04f	U+004f	# O 
+0x050	U+0050	# P 
+0x051	U+0051	# Q 
+0x052	U+0052	# R 
+0x053	U+0053	# S 
+0x054	U+0054	# T 
+0x055	U+0055	# U 
+0x056	U+0056	# V 
+0x057	U+0057	# W 
+0x058	U+0058	# X 
+0x059	U+0059	# Y 
+0x05a	U+005a	# Z 
+0x05b	U+005b	# [ 
+0x05c	U+005c	# \ 
+0x05d	U+005d	# ] 
+0x05e	U+005e	# ^ 
+0x05f	U+005f	# _ 
+0x060	U+0060	# ` 
+0x061	U+0061	# a 
+0x062	U+0062	# b 
+0x063	U+0063	# c 
+0x064	U+0064	# d 
+0x065	U+0065	# e 
+0x066	U+0066	# f 
+0x067	U+0067	# g 
+0x068	U+0068	# h 
+0x069	U+0069	# i 
+0x06a	U+006a	# j 
+0x06b	U+006b	# k 
+0x06c	U+006c	# l 
+0x06d	U+006d	# m 
+0x06e	U+006e	# n 
+0x06f	U+006f	# o 
+0x070	U+0070	# p 
+0x071	U+0071	# q 
+0x072	U+0072	# r 
+0x073	U+0073	# s 
+0x074	U+0074	# t 
+0x075	U+0075	# u 
+0x076	U+0076	# v 
+0x077	U+0077	# w 
+0x078	U+0078	# x 
+0x079	U+0079	# y 
+0x07a	U+007a	# z 
+0x07b	U+007b	# { 
+0x07c	U+007c	# | 
+0x07d	U+007d	# } 
+0x07e	U+007e	# ~ 
+0x07f	U+2302	# ⌂ 
+0x080	U+2500	# ─ 
+0x081	U+2502	# │ 
+0x082	U+250c	# ┌ 
+0x083	U+2510	# ┐ 
+0x084	U+2514	# └ 
+0x085	U+2518	# ┘ 
+0x086	U+251c	# ├ 
+0x087	U+2524	# ┤ 
+0x088	U+252c	# ┬ 
+0x089	U+2534	# ┴ 
+0x08a	U+253c	# ┼ 
+0x08b	U+2580	# ▀ 
+0x08c	U+2584	# ▄ 
+0x08d	U+2588	# █ 
+0x08e	U+258c	# ▌ 
+0x08f	U+2590	# ▐ 
+0x090	U+2591	# ░ 
+0x091	U+2592	# ▒ 
+0x092	U+2593	# ▓ 
+0x093	U+2320	# ⌠ 
+0x094	U+25a0	# ■ 
+0x095	U+2219	# ∙ 
+0x096	U+221a	# √ 
+0x097	U+2248	# ≈ 
+0x098	U+2264	# ≤ 
+0x099	U+2265	# ≥ 
+0x09a	U+00a0	#   
+0x09b	U+2321	# ⌡ 
+0x09c	U+00b0	# ° 
+0x09d	U+00b2	# ² 
+0x09e	U+00b7	# · 
+0x09f	U+00f7	# ÷ 
+0x0a0	U+2550	# ═ 
+0x0a1	U+2551	# ║ 
+0x0a2	U+2552	# ╒ 
+0x0a3	U+0451	# ё 
+0x0a4	U+2553	# ╓ 
+0x0a5	U+2554	# ╔ 
+0x0a6	U+2555	# ╕ 
+0x0a7	U+2556	# ╖ 
+0x0a8	U+2557	# ╗ 
+0x0a9	U+2558	# ╘ 
+0x0aa	U+2559	# ╙ 
+0x0ab	U+255a	# ╚ 
+0x0ac	U+255b	# ╛ 
+0x0ad	U+255c	# ╜ 
+0x0ae	U+255d	# ╝ 
+0x0af	U+255e	# ╞ 
+0x0b0	U+255f	# ╟ 
+0x0b1	U+2560	# ╠ 
+0x0b2	U+2561	# ╡ 
+0x0b3	U+0401	# Ё 
+0x0b4	U+2562	# ╢ 
+0x0b5	U+2563	# ╣ 
+0x0b6	U+2564	# ╤ 
+0x0b7	U+2565	# ╥ 
+0x0b8	U+2566	# ╦ 
+0x0b9	U+2567	# ╧ 
+0x0ba	U+2568	# ╨ 
+0x0bb	U+2569	# ╩ 
+0x0bc	U+256a	# ╪ 
+0x0bd	U+256b	# ╫ 
+0x0be	U+256c	# ╬ 
+0x0bf	U+00a9	# © 
+0x0c0	U+044e	# ю 
+0x0c1	U+0430	# а 
+0x0c2	U+0431	# б 
+0x0c3	U+0446	# ц 
+0x0c4	U+0434	# д 
+0x0c5	U+0435	# е 
+0x0c6	U+0444	# ф 
+0x0c7	U+0433	# г 
+0x0c8	U+0445	# х 
+0x0c9	U+0438	# и 
+0x0ca	U+0439	# й 
+0x0cb	U+043a	# к 
+0x0cc	U+043b	# л 
+0x0cd	U+043c	# м 
+0x0ce	U+043d	# н 
+0x0cf	U+043e	# о 
+0x0d0	U+043f	# п 
+0x0d1	U+044f	# я 
+0x0d2	U+0440	# р 
+0x0d3	U+0441	# с 
+0x0d4	U+0442	# т 
+0x0d5	U+0443	# у 
+0x0d6	U+0436	# ж 
+0x0d7	U+0432	# в 
+0x0d8	U+044c	# ь 
+0x0d9	U+044b	# ы 
+0x0da	U+0437	# з 
+0x0db	U+0448	# ш 
+0x0dc	U+044d	# э 
+0x0dd	U+0449	# щ 
+0x0de	U+0447	# ч 
+0x0df	U+044a	# ъ 
+0x0e0	U+042e	# Ю 
+0x0e1	U+0410	# А 
+0x0e2	U+0411	# Б 
+0x0e3	U+0426	# Ц 
+0x0e4	U+0414	# Д 
+0x0e5	U+0415	# Е 
+0x0e6	U+0424	# Ф 
+0x0e7	U+0413	# Г 
+0x0e8	U+0425	# Х 
+0x0e9	U+0418	# И 
+0x0ea	U+0419	# Й 
+0x0eb	U+041a	# К 
+0x0ec	U+041b	# Л 
+0x0ed	U+041c	# М 
+0x0ee	U+041d	# Н 
+0x0ef	U+041e	# О 
+0x0f0	U+041f	# П 
+0x0f1	U+042f	# Я 
+0x0f2	U+0420	# Р 
+0x0f3	U+0421	# С 
+0x0f4	U+0422	# Т 
+0x0f5	U+0423	# У 
+0x0f6	U+0416	# Ж 
+0x0f7	U+0412	# В 
+0x0f8	U+042c	# Ь 
+0x0f9	U+042b	# Ы 
+0x0fa	U+0417	# З 
+0x0fb	U+0428	# Ш 
+0x0fc	U+042d	# Э 
+0x0fd	U+0429	# Щ 
+0x0fe	U+0427	# Ч 
+0x0ff	U+042a	# Ъ 
diff --git a/consoletrans/koi8u.uni b/consoletrans/koi8u.uni
new file mode 100644
index 0000000..815c654
--- /dev/null
+++ b/consoletrans/koi8u.uni
@@ -0,0 +1,260 @@
+# This corresponds to KOI-8R except control characters (00-1F, 7F).
+#
+0x000	U+0000	#  
+0x001	U+263a	# ☺ 
+0x002	U+263b	# ☻ 
+0x003	U+2665	# ♥ 
+0x004	U+2666 U+25c6	# ♦ 
+0x005	U+2663	# ♣ 
+0x006	U+2660	# ♠ 
+0x007	U+2022	# • 
+0x008	U+25d8	# ◘ 
+0x009	U+25cb	# ○ 
+0x00a	U+25d9	# ◙ 
+0x00b	U+2642	# ♂ 
+0x00c	U+2640	# ♀ 
+0x00d	U+266a	# ♪ 
+0x00e	U+266b	# ♫ 
+0x00e	U+266c	# ♬ 
+0x00f	U+263c	# ☼ 
+0x010	U+25b6 U+25ba	# ▶ 
+0x011	U+25c0 U+25c4	# ◀ 
+0x012	U+2195	# ↕ 
+0x013	U+203c	# ‼ 
+0x014	U+00b6	# ¶ 
+0x015	U+00a7	# § 
+0x016	U+25ac	# ▬ 
+0x017	U+21a8	# ↨ 
+0x018	U+2191	# ↑ 
+0x019	U+2193	# ↓ 
+0x01a	U+2192	# → 
+0x01b	U+2190	# ← 
+0x01c	U+221f U+2319	# ∟ 
+0x01d	U+2194	# ↔ 
+0x01e	U+25b2	# ▲ 
+0x01f	U+25bc	# ▼ 
+0x020	U+0020	#   
+0x021	U+0021	# ! 
+0x022	U+0022 U+00a8	# " 
+0x023	U+0023	# # 
+0x024	U+0024	# $ 
+0x025	U+0025	# % 
+0x026	U+0026	# & 
+0x027	U+0027	# ' 
+0x028	U+0028	# ( 
+0x029	U+0029	# ) 
+0x02a	U+002a	# * 
+0x02b	U+002b	# + 
+0x02c	U+002c U+00b8	# , 
+0x02d	U+002d U+00ad	# - 
+0x02e	U+002e	# . 
+0x02f	U+002f	# / 
+0x030	U+0030	# 0 
+0x031	U+0031	# 1 
+0x032	U+0032	# 2 
+0x033	U+0033	# 3 
+0x034	U+0034	# 4 
+0x035	U+0035	# 5 
+0x036	U+0036	# 6 
+0x037	U+0037	# 7 
+0x038	U+0038	# 8 
+0x039	U+0039	# 9 
+0x03a	U+003a	# : 
+0x03b	U+003b	# ; 
+0x03c	U+003c	# < 
+0x03d	U+003d	# = 
+0x03e	U+003e	# > 
+0x03f	U+003f	# ? 
+0x040	U+0040	# @ 
+0x041	U+0041 U+00c0 U+00c1 U+00c2 U+00c3	# A 
+0x042	U+0042	# B 
+0x043	U+0043 U+00a9	# C 
+0x044	U+0044	# D 
+0x045	U+0045 U+00c8 U+00ca U+00cb	# E 
+0x046	U+0046	# F 
+0x047	U+0047	# G 
+0x048	U+0048	# H 
+0x049	U+0049 U+00cc U+00cd U+00ce U+00cf	# I 
+0x04a	U+004a	# J 
+0x04b	U+004b U+212a	# K 
+0x04c	U+004c	# L 
+0x04d	U+004d	# M 
+0x04e	U+004e	# N 
+0x04f	U+004f U+00d2 U+00d3 U+00d4 U+00d5	# O 
+0x050	U+0050	# P 
+0x051	U+0051	# Q 
+0x052	U+0052 U+00ae	# R 
+0x053	U+0053	# S 
+0x054	U+0054	# T 
+0x055	U+0055 U+00d9 U+00da U+00db	# U 
+0x056	U+0056	# V 
+0x057	U+0057	# W 
+0x058	U+0058	# X 
+0x059	U+0059 U+00dd	# Y 
+0x05a	U+005a	# Z 
+0x05b	U+005b	# [ 
+0x05c	U+005c	# \ 
+0x05d	U+005d	# ] 
+0x05e	U+005e	# ^ 
+0x05f	U+005f U+f804	# _ 
+0x060	U+0060	# ` 
+0x061	U+0061 U+00e3	# a 
+0x062	U+0062	# b 
+0x063	U+0063	# c 
+0x064	U+0064	# d 
+0x065	U+0065	# e 
+0x066	U+0066	# f 
+0x067	U+0067	# g 
+0x068	U+0068	# h 
+0x069	U+0069	# i 
+0x06a	U+006a	# j 
+0x06b	U+006b	# k 
+0x06c	U+006c	# l 
+0x06d	U+006d	# m 
+0x06e	U+006e	# n 
+0x06f	U+006f U+00f5	# o 
+0x070	U+0070	# p 
+0x071	U+0071	# q 
+0x072	U+0072	# r 
+0x073	U+0073	# s 
+0x074	U+0074	# t 
+0x075	U+0075	# u 
+0x076	U+0076	# v 
+0x077	U+0077	# w 
+0x078	U+0078 U+00d7	# x 
+0x079	U+0079 U+00fd	# y 
+0x07a	U+007a	# z 
+0x07b	U+007b	# { 
+0x07c	U+007c U+00a5	# | 
+0x07d	U+007d	# } 
+0x07e	U+007e	# ~ 
+0x07f	U+2302	# ⌂ 
+0x080	U+2500	# ─ 
+0x081	U+2502	# │ 
+0x082	U+250c	# ┌ 
+0x083	U+2510	# ┐ 
+0x084	U+2514	# └ 
+0x085	U+2518	# ┘ 
+0x086	U+251c	# ├ 
+0x087	U+2524	# ┤ 
+0x088	U+252c	# ┬ 
+0x089	U+2534	# ┴ 
+0x08a	U+253c	# ┼ 
+0x08b	U+2580	# ▀ 
+0x08c	U+2584	# ▄ 
+0x08d	U+2588	# █ 
+0x08e	U+258c	# ▌ 
+0x08f	U+2590	# ▐ 
+0x090	U+2591	# ░ 
+0x091	U+2592	# ▒ 
+0x092	U+2593	# ▓ 
+0x093	U+2320	# ⌠ 
+# use this as a substitute char
+0x094	U+25a0 U+fffd	# ■ 
+0x095	U+2219	# ∙ 
+0x096	U+221a	# √ 
+0x097	U+2248	# ≈ 
+0x098	U+2264	# ≤ 
+0x099	U+2265	# ≥ 
+0x09a	U+00a0	#   
+0x09b	U+2321	# ⌡ 
+0x09c	U+00b0	# ° 
+0x09d	U+00b2	# ² 
+0x09e	U+00b7	# · 
+0x09f	U+00f7	# ÷ 
+0x0a0	U+2550	# ═ 
+0x0a1	U+2551	# ║ 
+0x0a2	U+2552	# ╒ 
+0x0a3	U+0451	# ё 
+0x0a4	U+0454	# є“ 
+0x0a5	U+2554	# ╔ 
+0x0a6	U+0456	# і• 
+0x0a7	U+0457	# ї– 
+0x0a8	U+2557	# ╗ 
+0x0a9	U+2558	# ╘ 
+0x0aa	U+2559	# ╙ 
+0x0ab	U+255a	# ╚ 
+0x0ac	U+255b	# ╛ 
+0x0ad	U+0491	# ґ
+0x0ae	U+255d	# ╝ 
+0x0af	U+255e	# ╞ 
+0x0b0	U+255f	# ╟ 
+0x0b1	U+2560	# ╠ 
+0x0b2	U+2561	# ╡ 
+0x0b3	U+0401	# Ё 
+0x0b4	U+0404	# Є¢ 
+0x0b5	U+2563	# ╣ 
+0x0b6	U+0406	# І¤ 
+0x0b7	U+0407	# Ї¥ 
+0x0b8	U+2566	# ╦ 
+0x0b9	U+2567	# ╧ 
+0x0ba	U+2568	# ╨ 
+0x0bb	U+2569	# ╩ 
+0x0bc	U+256a	# ╪ 
+0x0bd	U+0490	# Ґ
+0x0be	U+256c	# ╬ 
+0x0bf	U+00a9	# © 
+0x0c0	U+044e	# ю 
+0x0c1	U+0430	# а 
+0x0c2	U+0431	# б 
+0x0c3	U+0446	# ц 
+0x0c4	U+0434	# д 
+0x0c5	U+0435	# е 
+0x0c6	U+0444	# ф 
+0x0c7	U+0433	# г 
+0x0c8	U+0445	# х 
+0x0c9	U+0438	# и 
+0x0ca	U+0439	# й 
+0x0cb	U+043a	# к 
+0x0cc	U+043b	# л 
+0x0cd	U+043c	# м 
+0x0ce	U+043d	# н 
+0x0cf	U+043e	# о 
+0x0d0	U+043f	# п 
+0x0d1	U+044f	# я 
+0x0d2	U+0440	# р 
+0x0d3	U+0441	# с 
+0x0d4	U+0442	# т 
+0x0d5	U+0443	# у 
+0x0d6	U+0436	# ж 
+0x0d7	U+0432	# в 
+0x0d8	U+044c	# ь 
+0x0d9	U+044b	# ы 
+0x0da	U+0437	# з 
+0x0db	U+0448	# ш 
+0x0dc	U+044d	# э 
+0x0dd	U+0449	# щ 
+0x0de	U+0447	# ч 
+0x0df	U+044a	# ъ 
+0x0e0	U+042e	# Ю 
+0x0e1	U+0410	# А 
+0x0e2	U+0411	# Б 
+0x0e3	U+0426	# Ц 
+0x0e4	U+0414	# Д 
+0x0e5	U+0415	# Е 
+0x0e6	U+0424	# Ф 
+0x0e7	U+0413	# Г 
+0x0e8	U+0425	# Х 
+0x0e9	U+0418	# И 
+0x0ea	U+0419	# Й 
+0x0eb	U+041a	# К 
+0x0ec	U+041b	# Л 
+0x0ed	U+041c	# М 
+0x0ee	U+041d	# Н 
+0x0ef	U+041e	# О 
+0x0f0	U+041f	# П 
+0x0f1	U+042f	# Я 
+0x0f2	U+0420	# Р 
+0x0f3	U+0421	# С 
+0x0f4	U+0422	# Т 
+0x0f5	U+0423	# У 
+0x0f6	U+0416	# Ж 
+0x0f7	U+0412	# В 
+0x0f8	U+042c	# Ь 
+0x0f9	U+042b	# Ы 
+0x0fa	U+0417	# З 
+0x0fb	U+0428	# Ш 
+0x0fc	U+042d	# Э 
+0x0fd	U+0429	# Щ 
+0x0fe	U+0427 	# Ч 
+0x0ff	U+042a	# Ъ 
diff --git a/consoletrans/koi8u2ruscii b/consoletrans/koi8u2ruscii
new file mode 100644
index 0000000..cf70538
--- /dev/null
+++ b/consoletrans/koi8u2ruscii
@@ -0,0 +1,141 @@
+# This translation table is intended to be used for KOI8-U to RUSCII
+# translation. 
+#
+0x80	0xC4
+0x81	0xB3
+0x82	0xDA
+0x83	0xBF
+0x84	0xC0
+0x85	0xD9
+0x86	0xC3
+0x87	0xB4
+0x88	0xC2
+0x89	0xC1
+0x8A	0xC5
+0x8B	0xDF
+0x8C	0xDC
+0x8D	0xDB
+0x8E	0xDD
+0x8F	0xDE
+#
+# all symbols which are not present in ruscii
+# mapped to 0xFE (U+fffd in koi8u.uni)
+#
+0x90	0xB0
+0x91	0xB1
+0x92	0xB2
+0x93	0xFE
+0x94	0xFE
+0x95	0xFE
+0x96	0xFB
+0x97	0xFE
+0x98	0xFE
+0x99	0xFE
+0x9A	0xFF
+0x9B	0xFE
+0x9C	0xFE
+0x9D	0xFD
+0x9E	0xFA
+0x9F	0xFE
+#
+0xA0	0xCD
+0xA1	0xBA
+0xA2	0xD5
+0xA3	0xF1
+0xA4	0xF5
+0xA5	0xC9
+0xA6	0xF7
+0xA7	0xF9
+0xA8	0xBB
+0xA9	0xD4
+0xAA	0xD3
+0xAB	0xC8
+0xAC	0xBE
+0xAD	0xF3
+0xAE	0xBC
+0xAF	0xC6
+#
+0xB0	0xC7
+0xB1	0xCC
+0xB2	0xB5
+0xB3	0xF0
+0xB4	0xF4
+0xB5	0xB9
+0xB6	0xF6
+0xB7	0xF8
+0xB8	0xCB
+0xB9	0xCF
+0xBA	0xD0
+0xBB	0xCA
+0xBC	0xD8
+0xBD	0xF2
+0xBE	0xCE
+0xBF	0xFC
+#
+0xC0	0xEE
+0xC1	0xA0
+0xC2	0xA1
+0xC3	0xE6
+0xC4	0xA4
+0xC5	0xA5
+0xC6	0xE4
+0xC7	0xA3
+0xC8	0xE5
+0xC9	0xA8
+0xCA	0xA9
+0xCB	0xAA
+0xCC	0xAB
+0xCD	0xAC
+0xCE	0xAD
+0xCF	0xAE
+#
+0xD0	0xAF
+0xD1	0xEF
+0xD2	0xE0
+0xD3	0xE1
+0xD4	0xE2
+0xD5	0xE3
+0xD6	0xA6
+0xD7	0xA2
+0xD8	0xEC
+0xD9	0xEB
+0xDA	0xA7
+0xDB	0xE8
+0xDC	0xED
+0xDD	0xE9
+0xDE	0xE7
+0xDF	0xEA
+#
+0xE0	0x9E
+0xE1	0x80
+0xE2	0x81
+0xE3	0x96
+0xE4	0x84
+0xE5	0x85
+0xE6	0x94
+0xE7	0x83
+0xE8	0x95
+0xE9	0x88
+0xEA	0x89
+0xEB	0x8A
+0xEC	0x8B
+0xED	0x8C
+0xEE	0x8D
+0xEF	0x8E
+#
+0xF0	0x8F
+0xF1	0x9F
+0xF2	0x90
+0xF3	0x91
+0xF4	0x92
+0xF5	0x93
+0xF6	0x86
+0xF7	0x82
+0xF8	0x9C
+0xF9	0x9B
+0xFA	0x87
+0xFB	0x98
+0xFC	0x9D
+0xFD	0x99
+0xFE	0x97
+0xFF	0x9A
diff --git a/consoletrans/lat1.uni b/consoletrans/lat1.uni
new file mode 100644
index 0000000..421d2b7
--- /dev/null
+++ b/consoletrans/lat1.uni
@@ -0,0 +1,70 @@
+#
+# Unicode mapping table for Latin-1 fonts lat1*.psf
+#
+0x20-0x7e	idem
+0x7f		U+0178
+0xa0-0xff	idem
+0x00	U+fffd
+0x01	U+2248
+0x02	U+0152
+0x03	U+0153
+0x04	U+25c6
+0x05	U+2409
+0x06	U+240c
+0x07	U+240d
+0x08	U+240a
+0x09	U+2591
+0x0a	U+2592
+0x0b	U+2593
+0x0c	U+2588
+0x0d	U+2584
+0x0e	U+2580
+0x0f	U+258c
+0x10	U+2590
+0x11	U+2424
+0x12	U+240b
+0x13	U+2264
+0x14	U+2265
+0x15	U+2260
+0x16	U+25c0
+0x17	U+25b6
+0x18	U+2191
+0x19	U+2193
+0x1a	U+2192
+0x1b	U+2190
+0x1c	U+2195
+0x1d	U+2194
+0x1e	U+21b5
+0x1f	U+03c0
+#
+0x80	U+00af
+0x81	U+2575
+0x82	U+2576
+0x83	U+2514
+0x84	U+2577
+0x85	U+2502
+0x86	U+250c
+0x87	U+251c
+0x88	U+2574
+0x89	U+2518
+0x8a	U+2500
+0x8b	U+2534
+0x8c	U+2510
+0x8d	U+2524
+0x8e	U+252c
+0x8f	U+253c
+0x90	U+00ad
+0x91	U+2579
+0x92	U+257a
+0x93	U+2517 U+255a
+0x94	U+257b
+0x95	U+2503 U+2551
+0x96	U+250f U+2554
+0x97	U+2523 U+2560
+0x98	U+2578
+0x99	U+251b U+255d
+0x9a	U+2501 U+2550
+0x9b	U+253b U+2569
+0x9c	U+2513 U+2557
+0x9e	U+2533 U+2566
+0x9f	U+254b U+256c
diff --git a/consoletrans/lat1u.uni b/consoletrans/lat1u.uni
new file mode 100644
index 0000000..b55b9e0
--- /dev/null
+++ b/consoletrans/lat1u.uni
@@ -0,0 +1,139 @@
+#
+# Unicode mapping tables for Latin-1 fonts lat1*.psfu
+#
+# Note: to work better with VGA hardware, we have moved the range 0xc0-0xdf
+# to 0x80-0x9f and use the 0xc0-0xdf range for block graphics
+# In addition, the unused ranges in ISO 8859 have been used for additional
+# characters; mostly the ones in the DEC VT100 graphics set
+#
+
+#
+# DEC VT graphics and some more
+#
+0x00	U+fffd
+0x01	U+2248
+0x02	U+0152
+0x03	U+0153
+0x04	U+25c6
+0x05	U+2409
+0x06	U+240c
+0x07	U+240d
+0x08	U+240a
+0x09	U+2591
+0x0a	U+2592
+0x0b	U+2593
+0x0c	U+2588
+0x0d	U+2584
+0x0e	U+2580
+0x0f	U+258c
+0x10	U+2590
+0x11	U+2424
+0x12	U+240b
+0x13	U+2264
+0x14	U+2265
+0x15	U+2260
+0x16	U+25c0
+0x17	U+25b6
+0x18	U+2191
+0x19	U+2193
+0x1a	U+2192
+0x1b	U+2190
+0x1c	U+2195
+0x1d	U+2194
+0x1e	U+21b5
+0x1f	U+03c0
+#
+# ASCII
+#
+0x20	U+0020 U+00a0
+0x21-0x4a	idem
+0x4b	U+004b U+212a
+0x4c-0x5e	idem
+0x5f	U+005f U+f804
+0x60-0x7e	idem
+#
+# A letter missing in Latin-1
+#
+0x7f	U+0178	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+#
+# The Latin-1 capital letters (moved slightly due to VGA hardware
+# brain-damage)
+#
+0x80	U+00c0
+0x81	U+00c1
+0x82	U+00c2
+0x83	U+00c3
+0x84	U+00c4
+0x85	U+00c5 U+212b
+0x86	U+00c6
+0x87	U+00c7
+0x88	U+00c8
+0x89	U+00c9
+0x8a	U+00ca
+0x8b	U+00cb
+0x8c	U+00cc
+0x8d	U+00cd
+0x8e	U+00ce
+0x8f	U+00cf
+0x90	U+00d0
+0x91	U+00d1
+0x92	U+00d2
+0x93	U+00d3
+0x94	U+00d4
+0x95	U+00d5
+0x96	U+00d6
+0x97	U+00d7
+0x98	U+00d8
+0x99	U+00d9
+0x9a	U+00da
+0x9b	U+00db
+0x9c	U+00dc
+0x9d	U+00dd
+0x9e	U+00de
+0x9f	U+00df
+#
+# Latin-1 special characters
+# 
+0xa0	U+2423
+0xa1-0xae	idem
+0xaf	U+00af U+f800
+0xb0-0xbf	idem
+#
+# Block graphics
+#
+0xc0	U+f801	# medium-high line
+0xc1	U+2575
+0xc2	U+2576
+0xc3	U+2514
+0xc4	U+2577
+0xc5	U+2502
+0xc6	U+250c
+0xc7	U+251c
+0xc8	U+2574
+0xc9	U+2518
+0xca	U+2500
+0xcb	U+2534
+0xcc	U+2510
+0xcd	U+2524
+0xce	U+252c
+0xcf	U+253c
+0xd0	U+f803	# medium-low line
+0xd1	U+2579
+0xd2	U+257a
+0xd3	U+2517 U+255a
+0xd4	U+257b
+0xd5	U+2503 U+2551
+0xd6	U+250f U+2554
+0xd7	U+2523 U+2560
+0xd8	U+2578
+0xd9	U+251b U+255d
+0xda	U+2501 U+2550
+0xdb	U+253b U+2569
+0xdc	U+2513 U+2557
+0xdd	U+2563 U+252b
+0xde	U+2533 U+2566
+0xdf	U+254b U+256c
+#
+# Latin-1 lower case letters
+#
+0xe0-0xff	idem
diff --git a/consoletrans/lat2u.uni b/consoletrans/lat2u.uni
new file mode 100644
index 0000000..ab30a57
--- /dev/null
+++ b/consoletrans/lat2u.uni
@@ -0,0 +1,260 @@
+#
+# Character table extracted from font lat2u-16.psf
+#
+# 
+0x00	 U+fffd
+0x01	 U+263a
+0x02	 U+263b
+0x03	 U+2665
+0x04	 U+2666
+0x05	 U+2663
+0x06	 U+2660
+0x07	 U+2022
+0x08	 U+25d8 
+0x09	 U+25cb U+2591
+0x0a	 U+25d9 U+2592
+0x0b	 U+2642
+0x0c	 U+2640 U+2588
+0x0d	 U+266a
+0x0e	 U+266b U+266c
+0x0f	 U+263c
+0x10	 U+25b6 U+25ba
+0x11	 U+25c0 U+25c4
+0x12	 U+2195
+0x13	 U+203c
+0x14	 U+00b6
+0x15	 U+00a7
+0x16	 U+25ac
+0x17	 U+21a8
+0x18	 U+2191
+0x19	 U+2193
+0x1a	 U+2192
+0x1b	 U+2190
+0x1c	 U+221f U+2319
+0x1d	 U+2194
+0x1e	 U+25b2
+0x1f	 U+25bc
+0x20	 U+0020
+0x21	 U+0021
+0x22	 U+0022
+0x23	 U+0023
+0x24	 U+0024
+0x25	 U+0025
+0x26	 U+0026
+0x27	 U+0027
+0x28	 U+0028
+0x29	 U+0029
+0x2a	 U+002a
+0x2b	 U+002b
+0x2c	 U+002c
+0x2d	 U+002d
+0x2e	 U+002e
+0x2f	 U+002f
+0x30	 U+0030
+0x31	 U+0031
+0x32	 U+0032
+0x33	 U+0033
+0x34	 U+0034
+0x35	 U+0035
+0x36	 U+0036
+0x37	 U+0037
+0x38	 U+0038
+0x39	 U+0039
+0x3a	 U+003a
+0x3b	 U+003b
+0x3c	 U+003c
+0x3d	 U+003d
+0x3e	 U+003e
+0x3f	 U+003f
+0x40	 U+0040
+0x41	 U+0041
+0x42	 U+0042
+0x43	 U+0043
+0x44	 U+0044
+0x45	 U+0045
+0x46	 U+0046
+0x47	 U+0047
+0x48	 U+0048
+0x49	 U+0049
+0x4a	 U+004a
+0x4b	 U+004b
+0x4c	 U+004c
+0x4d	 U+004d
+0x4e	 U+004e
+0x4f	 U+004f
+0x50	 U+0050
+0x51	 U+0051
+0x52	 U+0052
+0x53	 U+0053
+0x54	 U+0054
+0x55	 U+0055
+0x56	 U+0056
+0x57	 U+0057
+0x58	 U+0058
+0x59	 U+0059
+0x5a	 U+005a
+0x5b	 U+005b
+0x5c	 U+005c
+0x5d	 U+005d
+0x5e	 U+005e
+0x5f	 U+005f
+0x60	 U+0060
+0x61	 U+0061
+0x62	 U+0062
+0x63	 U+0063
+0x64	 U+0064
+0x65	 U+0065
+0x66	 U+0066
+0x67	 U+0067
+0x68	 U+0068
+0x69	 U+0069
+0x6a	 U+006a
+0x6b	 U+006b
+0x6c	 U+006c
+0x6d	 U+006d
+0x6e	 U+006e
+0x6f	 U+006f
+0x70	 U+0070
+0x71	 U+0071
+0x72	 U+0072
+0x73	 U+0073
+0x74	 U+0074
+0x75	 U+0075
+0x76	 U+0076
+0x77	 U+0077
+0x78	 U+0078
+0x79	 U+0079
+0x7a	 U+007a
+0x7b	 U+007b
+0x7c	 U+007c
+0x7d	 U+007d
+0x7e	 U+007e
+0x7f	 U+2302
+0x80	 U+0154
+0x81	 U+00c1
+0x82	 U+00c2
+0x83	 U+0102
+0x84	 U+00c4
+0x85	 U+0139
+0x86	 U+0106
+0x87	 U+00c7
+0x88	 U+010c
+0x89	 U+00c9
+0x8a	 U+0118
+0x8b	 U+00cb
+0x8c	 U+011a
+0x8d	 U+00cd
+0x8e	 U+00ce
+0x8f	 U+010e
+0x90	 U+0110
+0x91	 U+0141
+0x92	 U+0147
+0x93	 U+00d3
+0x94	 U+00d4
+0x95	 U+0150
+0x96	 U+00d6
+0x97	 U+00d7
+0x98	 U+0158
+0x99	 U+016e
+0x9a	 U+00da
+0x9b	 U+0170
+0x9c	 U+00dc
+0x9d	 U+00dd
+0x9e	 U+0162
+0x9f	 U+00df
+0xa0	 U+00a0
+0xa1	 U+0104
+0xa2	 U+02d8
+0xa3	 U+0141
+0xa4	 U+00a4
+0xa5	 U+013d
+0xa6	 U+015a
+0xa7	 U+00a7
+0xa8	 U+00a8
+0xa9	 U+0160
+0xaa	 U+015e
+0xab	 U+0164
+0xac	 U+0179
+0xad	 U+00ad
+0xae	 U+017d
+0xaf	 U+017b
+0xb0	 U+00b0
+0xb1	 U+0105
+0xb2	 U+02db
+0xb3	 U+0142
+0xb4	 U+00b4
+0xb5	 U+013e
+0xb6	 U+015b
+0xb7	 U+02c7
+0xb8	 U+00b8
+0xb9	 U+0161
+0xba	 U+015f
+0xbb	 U+0165
+0xbc	 U+017a
+0xbd	 U+02dd
+0xbe	 U+017e
+0xbf	 U+017c
+0xc0	 U+f801
+0xc1	 U+2575
+0xc2	 U+2576
+0xc3	 U+2514
+0xc4	 U+2577
+0xc5	 U+2502
+0xc6	 U+250c
+0xc7	 U+251c
+0xc8	 U+2574
+0xc9	 U+2518
+0xca	 U+2500
+0xcb	 U+2534
+0xcc	 U+2510
+0xcd	 U+2524
+0xce	 U+252c
+0xcf	 U+253c
+0xd0	 U+f803
+0xd1	 U+2579
+0xd2	 U+257a
+0xd3	 U+2517 U+255a
+0xd4	 U+257b
+0xd5	 U+2503 U+2551
+0xd6	 U+250f U+2554
+0xd7	 U+2523 U+2560 U+255f
+0xd8	 U+2578
+0xd9	 U+251b U+255d
+0xda	 U+2501 U+2550
+0xdb	 U+253b U+2569 U+2567
+0xdc	 U+2513 U+2557
+0xdd	 U+252b U+2563 U+2562
+0xde	 U+2533 U+2566 U+2564
+0xdf	 U+254b U+256c
+0xe0	 U+0155
+0xe1	 U+00e1
+0xe2	 U+00e2
+0xe3	 U+0103
+0xe4	 U+00e4
+0xe5	 U+013a
+0xe6	 U+0107
+0xe7	 U+00e7
+0xe8	 U+010d
+0xe9	 U+00e9
+0xea	 U+0119
+0xeb	 U+00eb
+0xec	 U+011b
+0xed	 U+00ed
+0xee	 U+00ee
+0xef	 U+010f
+0xf0	 U+0111
+0xf1	 U+0144
+0xf2	 U+0148
+0xf3	 U+00f3
+0xf4	 U+00f4
+0xf5	 U+0151
+0xf6	 U+00f6
+0xf7	 U+00f7
+0xf8	 U+0159
+0xf9	 U+016f
+0xfa	 U+00fa
+0xfb	 U+0171
+0xfc	 U+00fc
+0xfd	 U+00fd
+0xfe	 U+0163
+0xff	 U+02d9
diff --git a/consoletrans/lat4.uni b/consoletrans/lat4.uni
new file mode 100644
index 0000000..802c70c
--- /dev/null
+++ b/consoletrans/lat4.uni
@@ -0,0 +1,187 @@
+
+0x00	U+fffd
+0x01	U+00a2 # cent
+0x02	U+0152
+0x03	U+0153
+0x04	U+00a3 # pound
+0x05	U+00a9 # (C)
+0x06	U+00ab # <<
+0x07	U+00ae U+2122 # (R)
+0x08	U+00bb # >>
+0x09	U+2591
+0x0a	U+2592
+0x0b	U+2593
+0x0c	U+00c0 # A grave \
+0x0d	U+00c7 # C cedilla 
+0x0e	U+00c8 # E grave \
+0x0f	U+00ca # E circumflex /\
+0x10	U+00d1 # N tilde ~
+0x11	U+00d2 # O grave \
+0x12	U+00d3 # O acute /
+0x13	U+00d9 # U grave \
+0x14	U+00dd # Y acute /
+0x15	U+00e0 # a grave \
+0x16	U+00e7 # c cedilla 
+0x17	U+00e8 # e grave \
+0x18	U+00ea # e circumflex /\
+0x19	U+00f1 # n tilde ~
+0x1a	U+00f2 # o grave \
+0x1b	U+00f3 # o acute /
+0x1c	U+00f9 # u grave \
+0x1d	U+00fd # y acute /
+0x1e	U+00ff # y diaeresis ..
+0x1f	U+03c0 # GREEK SMALL LETTER PI
+0x20	U+0020 U+00a0
+0x21	U+0021
+0x22	U+0022 U+201d U+201f
+0x23-0x26	idem
+0x27	U+0027 U+2019
+0x28-0x2b	idem
+0x2c	U+002c U+201a
+0x2d	U+002d U+2212 U+2014 U+2015
+0x2e-0x3b	idem
+0x3c	U+003c U+2039
+0x3d	U+003d
+0x3e	U+003e U+203a
+0x3f-0x4a	idem
+0x4b	U+004b U+212a
+0x4c-0x5e	idem
+0x5f	U+005f U+f804
+0x60	U+0060 U+2018 U+201b
+0x61-0x65	idem
+0x66	U+0066 U+0192	# f 
+0x67-0x7b	idem
+0x7c	U+007c U+00a6 # VERTICAL LINE, BROKEN BAR
+0x7d	U+007d
+0x7e	U+007e U+02dc
+0x7f	U+0178	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+0xc0	U+0100
+0xc1	U+00c1
+0xc2	U+00c2
+0xc3	U+00c3
+0xc4	U+00c4
+0xc5	U+00c5 U+212b # LATIN CAPITAL LETTER A WITH RING ABOVE, ANGSTROM SIGN
+0xc6	U+00c6
+0xc7	U+012e
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+0116
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+012a
+0xd0	U+0110 U+00d0
+0xd1	U+0145
+0xd2	U+014c
+0xd3	U+0136
+0xd4	U+00d4
+0xd5	U+00d5
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+00d8
+0xd9	U+0172
+0xda	U+00da
+0xdb	U+00db
+0xdc	U+00dc
+0xdd	U+0168
+0xde	U+016a
+0xdf	U+00df
+0xa0	U+2423 
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0138
+0xa3	U+0156
+0xa4	U+00a4
+0xa5	U+0128
+0xa6	U+013b
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0160
+0xaa	U+0112
+0xab	U+0122
+0xac	U+0166
+0xad	U+00ad U+2010 U+2011 U+2013
+0xae	U+017d
+0xaf	U+00af U+f800
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+02db
+0xb3	U+0157
+0xb4	U+00b4
+0xb5	U+0129
+0xb6	U+013c
+0xb7	U+02c7
+0xb8	U+00b8
+0xb9	U+0161
+0xba	U+0113
+0xbb	U+0123
+0xbc	U+0167
+0xbd	U+014a
+0xbe	U+017e
+0xbf	U+014b
+0x80	U+00a5 #yen
+0x81	U+00cc #I grave \
+0x82	U+00cf #I diaeresis ..
+0x83	U+2514
+0x84	U+00ec #i grave \
+0x85	U+2502
+0x86	U+250c
+0x87	U+251c
+0x88	U+00ef #i diaeresis ..
+0x89	U+2518  
+0x8a	U+2500
+0x8b	U+2534
+0x8c	U+2510
+0x8d	U+2524
+0x8e	U+252c
+0x8f	U+253c
+0x90	U+201e # ,,(99) DOUBLE LOW-9 QUOTATION MARK 
+0x91	U+201c # (66) LEFT DOUBLE QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK
+0x92	U+2580 # upper half block 
+0x93	U+2517 U+255a
+0x94	U+2584 # lower half block
+0x95	U+2503 U+2551
+0x96	U+250f U+2554
+0x97	U+2523 U+2560
+0x98	U+2588 # full block
+0x99	U+251b U+255d
+0x9a	U+2501 U+2550
+0x9b	U+253b U+2569
+0x9c	U+2513 U+2557
+0x9d	U+2563 U+252b
+0x9e	U+2533 U+2566
+0x9f	U+254b U+256c
+0xe0	U+0101
+0xe1	U+00e1
+0xe2	U+00e2
+0xe3	U+00e3
+0xe4	U+00e4
+0xe5	U+00e5
+0xe6	U+00e6
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+012b
+0xf0	U+0111 U+00f0
+0xf1	U+0146
+0xf2	U+014d
+0xf3	U+0137
+0xf4	U+00f4
+0xf5	U+00f5
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+00f8
+0xf9	U+0173
+0xfa	U+00fa
+0xfb	U+00fb
+0xfc	U+00fc
+0xfd	U+0169
+0xfe	U+016b
+0xff	U+02d9
+
diff --git a/consoletrans/lat4u.uni b/consoletrans/lat4u.uni
new file mode 100644
index 0000000..9bbba31
--- /dev/null
+++ b/consoletrans/lat4u.uni
@@ -0,0 +1,248 @@
+#
+#  Unicode    mapping   table    for   Latin-4    fonts   (lat4u-08.psf,
+# lat4u-10.psf, lat4u-12.psf, lat4u-14.psf, lat4u-16.psf, lat4u-16+.psf,
+# lat4u-19.psf).
+#  These fonts are designed to use in Unicode mode, but you can use them
+# as ISO-8859-4 fonts  in non-Unicode mode with vga2iso  screen map.  If
+# you think  these fonts can be  subject of copyright law,  (c) Ricardas
+# Cepas <rch@pub.osf.lt>, 1997. Copying policy: GNU GPL V2.
+#  If you use 8 pixels wide  mode exclusively you can use derived lat4-*
+# fonts, lat4.uni and trivial mappings.
+#
+#  All block graphics from CP 850 are present.
+#  Note:  to work  better with  VGA hardware,  we have  moved the  range
+# 0xc0-0xdf to 0x80-0x9f and use the 0xc0-0xdf range for block graphics.
+#  It should be at 0xc0-0xdF to work properly with VGA.
+#  Rightmost column  of 8 pixel  wide charcell  can be duplicated  if at
+# this place and if special VGA bit set. So horizontal lines will not be
+# dashed in the default 9 pixel wide mode.
+#  You can make more space by mapping double lines to single lines.
+#
+#  All ISO-8859-4  characters are  in there  places (after  remapping of
+# course).
+#  Almost all ISO-8859-1 letters, Y diaeresis and AE are present.
+#  Comments & bug reports to: Ricardas Cepas <rch@pub.osf.lt>
+
+#
+# DEC VT graphics and some more
+#
+0x00	U+fffd
+0x01	U+00a2 # cent
+0x02	U+0152
+0x03	U+0153
+0x04	U+00a3 # pound
+0x05	U+00a9 # (C)
+0x06	U+00ab # <<
+0x07	U+00ae U+2122 # (R)
+0x08	U+00bb # >>
+0x09	U+2591
+0x0a	U+2592
+0x0b	U+2593
+0x0c	U+00c0 # A grave \
+0x0d	U+00c7 # C cedilla 
+0x0e	U+00c8 # E grave \
+0x0f	U+00ca # E circumflex /\
+0x10	U+00d1 # N tilde ~
+0x11	U+00d2 # O grave \
+0x12	U+00d3 # O acute /
+0x13	U+00d9 # U grave \
+0x14	U+00dd # Y acute /
+0x15	U+00e0 # a grave \
+0x16	U+00e7 # c cedilla 
+0x17	U+00e8 # e grave \
+0x18	U+00ea # e circumflex /\
+0x19	U+00f1 # n tilde ~
+0x1a	U+00f2 # o grave \
+0x1b	U+00f3 # o acute /
+0x1c	U+00f9 # u grave \
+0x1d	U+00fd # y acute /
+0x1e	U+00ff # y diaeresis ..
+0x1f	U+03c0 # GREEK SMALL LETTER PI
+#
+# ASCII
+#
+0x20	U+0020 U+00a0
+0x21	U+0021
+0x22	U+0022 U+201d U+201f
+0x23-0x26	idem
+0x27	U+0027 U+2019
+0x28-0x2b	idem
+0x2c	U+002c U+201a
+0x2d	U+002d U+2212 U+2014 U+2015
+0x2e-0x3b	idem
+0x3c	U+003c U+2039
+0x3d	U+003d
+0x3e	U+003e U+203a
+0x3f-0x4a	idem
+0x4b	U+004b U+212a
+0x4c-0x5e	idem
+0x5f	U+005f U+f804
+0x60	U+0060 U+2018 U+201b
+0x61-0x65	idem
+0x66	U+0066 U+0192	# f 
+0x67-0x7b	idem
+0x7c	U+007c U+00a6 # VERTICAL LINE, BROKEN BAR
+0x7d	U+007d
+0x7e	U+007e U+02dc
+#
+# A letter missing in Latin-1
+#
+0x7f	U+0178	# LATIN CAPITAL LETTER Y WITH DIAERESIS
+#
+# The Latin-4 capital letters (moved slightly due to VGA hardware
+# brain-damage)
+#
+0x80	U+0100
+0x81	U+00c1
+0x82	U+00c2
+0x83	U+00c3
+0x84	U+00c4
+0x85	U+00c5 U+212b # LATIN CAPITAL LETTER A WITH RING ABOVE, ANGSTROM SIGN
+0x86	U+00c6
+0x87	U+012e
+0x88	U+010c
+0x89	U+00c9
+0x8a	U+0118
+0x8b	U+00cb
+0x8c	U+0116
+0x8d	U+00cd
+0x8e	U+00ce
+0x8f	U+012a
+0x90	U+0110 U+00d0
+0x91	U+0145
+0x92	U+014c
+0x93	U+0136
+0x94	U+00d4
+0x95	U+00d5
+0x96	U+00d6
+0x97	U+00d7
+0x98	U+00d8
+0x99	U+0172
+0x9a	U+00da
+0x9b	U+00db
+0x9c	U+00dc
+0x9d	U+0168
+0x9e	U+016a
+0x9f	U+00df
+# special character
+# non-breaking space <-> open box
+0xa0	U+2423 
+#
+# Capital letters at their place
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0138
+0xa3	U+0156
+0xa4	U+00a4
+0xa5	U+0128
+0xa6	U+013b
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0160
+0xaa	U+0112
+0xab	U+0122
+0xac	U+0166
+0xad	U+00ad U+2010 U+2011 U+2013
+0xae	U+017d
+0xaf	U+00af U+f800
+#
+# lower case letters
+#
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+02db
+0xb3	U+0157
+0xb4	U+00b4
+0xb5	U+0129
+0xb6	U+013c
+0xb7	U+02c7
+0xb8	U+00b8
+0xb9	U+0161
+0xba	U+0113
+0xbb	U+0123
+0xbc	U+0167
+0xbd	U+014a
+0xbe	U+017e
+0xbf	U+014b
+#
+#  All of cp850 line drawing chars.
+#
+#0xc0	U+f801	# medium-high line
+0xc0	U+00a5 #yen
+#0xc1	U+2575
+0xc1	U+00cc #I grave \
+#0xc2	U+2576
+0xc2	U+00cf #I diaeresis ..
+0xc3	U+2514
+#0xc4	U+2577
+0xc4	U+00ec #i grave \
+0xc5	U+2502
+0xc6	U+250c
+0xc7	U+251c
+#0xc8	U+2574
+0xc8	U+00ef #i diaeresis ..
+0xc9	U+2518  
+0xca	U+2500
+0xcb	U+2534
+0xcc	U+2510
+0xcd	U+2524
+0xce	U+252c
+0xcf	U+253c
+#0xd0	U+f803	# medium-low line
+0xd0	U+201e # ,,(99) DOUBLE LOW-9 QUOTATION MARK 
+#0xd1	U+2579
+0xd1	U+201c # (66) LEFT DOUBLE QUOTATION MARK;Ps;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK
+#0xd2	U+257a
+0xd2	U+2580 # upper half block 
+0xd3	U+2517 U+255a
+#0xd4	U+257b
+0xd4	U+2584 # lower half block
+0xd5	U+2503 U+2551
+0xd6	U+250f U+2554
+0xd7	U+2523 U+2560
+#0xd8	U+2578
+0xd8	U+2588 # full block
+0xd9	U+251b U+255d
+0xda	U+2501 U+2550
+0xdb	U+253b U+2569
+0xdc	U+2513 U+2557
+0xdd	U+2563 U+252b
+0xde	U+2533 U+2566
+0xdf	U+254b U+256c
+#
+# lower case letters
+#
+0xe0	U+0101
+0xe1	U+00e1
+0xe2	U+00e2
+0xe3	U+00e3
+0xe4	U+00e4
+0xe5	U+00e5
+0xe6	U+00e6
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+012b
+0xf0	U+0111 U+00f0
+0xf1	U+0146
+0xf2	U+014d
+0xf3	U+0137
+0xf4	U+00f4
+0xf5	U+00f5
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+00f8
+0xf9	U+0173
+0xfa	U+00fa
+0xfb	U+00fb
+0xfc	U+00fc
+0xfd	U+0169
+0xfe	U+016b
+0xff	U+02d9
+
diff --git a/consoletrans/null b/consoletrans/null
new file mode 100644
index 0000000..b277cb0
--- /dev/null
+++ b/consoletrans/null
@@ -0,0 +1,65 @@
+# Internal value        Output character
+0x00    0x00
+0x01    0x00
+0x02    0x00
+0x03    0x00
+0x04    0x00
+0x05    0x00
+0x06    0x00
+0x07    0x00
+0x08    0x00
+0x09    0x00
+0x0A    0x00
+0x0B    0x00
+0x0C    0x00
+0x0D    0x00
+0x0E    0x00
+0x0F    0x00
+0x10    0x00
+0x11    0x00
+0x12    0x00
+0x13    0x00
+0x14    0x00
+0x15    0x00
+0x16    0x00
+0x17    0x00
+0x18    0x00
+0x19    0x00
+0x1A    0x00
+0x1B    0x00
+0x1C    0x00
+0x1D    0x00
+0x1E    0x00
+0x1F    0x00
+0x80    0x00
+0x81    0x00
+0x82    0x00
+0x83    0x00
+0x84    0x00
+0x85    0x00
+0x86    0x00
+0x87    0x00
+0x88    0x00
+0x89    0x00
+0x8A    0x00
+0x8B    0x00
+0x8C    0x00
+0x8D    0x00
+0x8E    0x00
+0x8F    0x00
+0x90    0x00
+0x91    0x00
+0x92    0x00
+0x93    0x00
+0x94    0x00
+0x95    0x00
+0x96    0x00
+0x97    0x00
+0x98    0x00
+0x99    0x00
+0x9A    0x00
+0x9B    0x00
+0x9C    0x00
+0x9D    0x00
+0x9E    0x00
+0x9F    0x00
diff --git a/consoletrans/ruscii.uni b/consoletrans/ruscii.uni
new file mode 100644
index 0000000..3c95f71
--- /dev/null
+++ b/consoletrans/ruscii.uni
@@ -0,0 +1,290 @@
+#
+# Basic IBM dingbats, some of which will never have a purpose clear
+# to mankind
+#
+0x00	U+0000
+0x01	U+263a
+0x02	U+263b
+0x03	U+2665
+0x04	U+2666 U+25c6
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25d8
+0x09	U+25cb
+0x0a	U+25d9
+0x0b	U+2642
+0x0c	U+2640
+0x0d	U+266a
+0x0e	U+266b
+0x0f	U+263c
+0x10	U+25b6 U+25ba
+0x11	U+25c0 U+25c4
+0x12	U+2195
+0x13	U+203c
+0x14	U+00b6
+0x15	U+00a7
+0x16	U+25ac
+0x17	U+21a8
+0x18	U+2191
+0x19	U+2193
+0x1a	U+2192
+0x1b	U+2190
+0x1c	U+221f
+0x1d	U+2194
+0x1e	U+25b2
+0x1f	U+25bc
+#
+# The ASCII range is identity-mapped, but some of the characters also
+# have to act as substitutes, especially the upper-case characters.
+#
+0x20	U+0020
+0x21	U+0021
+0x22	U+0022 U+00a8
+0x23	U+0023
+0x24	U+0024
+0x25	U+0025
+0x26	U+0026
+0x27	U+0027
+0x28	U+0028
+0x29	U+0029
+0x2a	U+002a
+0x2b	U+002b
+0x2c	U+002c U+00b8
+0x2d	U+002d U+00ad
+0x2e	U+002e
+0x2f	U+002f
+0x30	U+0030
+0x31	U+0031
+0x32	U+0032
+0x33	U+0033
+0x34	U+0034
+0x35	U+0035
+0x36	U+0036
+0x37	U+0037
+0x38	U+0038
+0x39	U+0039
+0x3a	U+003a
+0x3b	U+003b
+0x3c	U+003c
+0x3d	U+003d
+0x3e	U+003e
+0x3f	U+003f
+0x40	U+0040
+0x41	U+0041 U+00c0 U+00c1 U+00c2 U+00c3
+0x42	U+0042
+0x43	U+0043 U+00a9
+0x44	U+0044
+0x45	U+0045 U+00c8 U+00ca U+00cb
+0x46	U+0046
+0x47	U+0047
+0x48	U+0048
+0x49	U+0049 U+00cc U+00cd U+00ce U+00cf
+0x4a	U+004a
+0x4b	U+004b U+212a
+0x4c	U+004c
+0x4d	U+004d
+0x4e	U+004e
+0x4f	U+004f U+00d2 U+00d3 U+00d4 U+00d5
+0x50	U+0050
+0x51	U+0051
+0x52	U+0052 U+00ae
+0x53	U+0053
+0x54	U+0054
+0x55	U+0055 U+00d9 U+00da U+00db
+0x56	U+0056
+0x57	U+0057
+0x58	U+0058
+0x59	U+0059 U+00dd
+0x5a	U+005a
+0x5b	U+005b
+0x5c	U+005c
+0x5d	U+005d
+0x5e	U+005e
+0x5f	U+005f U+f804
+0x60	U+0060
+0x61	U+0061 U+00e3
+0x62	U+0062
+0x63	U+0063
+0x64	U+0064
+0x65	U+0065
+0x66	U+0066
+0x67	U+0067
+0x68	U+0068
+0x69	U+0069
+0x6a	U+006a
+0x6b	U+006b
+0x6c	U+006c
+0x6d	U+006d
+0x6e	U+006e
+0x6f	U+006f U+00f5
+0x70	U+0070
+0x71	U+0071
+0x72	U+0072
+0x73	U+0073
+0x74	U+0074
+0x75	U+0075
+0x76	U+0076
+0x77	U+0077
+0x78	U+0078 U+00d7
+0x79	U+0079 U+00fd
+0x7a	U+007a
+0x7b	U+007b
+0x7c	U+007c U+00a5
+0x7d	U+007d
+0x7e	U+007e
+#
+# Okay, what on Earth is this one supposed to be used for?
+#
+0x7f	U+2302
+#
+# cyrillic capital letters from A to JA
+#
+0x80	U+0410
+0x81	U+0411
+0x82	U+0412
+0x83	U+0413
+0x84	U+0414
+0x85	U+0415
+0x86	U+0416
+0x87	U+0417
+0x88	U+0418
+0x89	U+0419
+0x8a	U+041a
+0x8b	U+041b
+0x8c	U+041c
+0x8d	U+041d
+0x8e	U+041e
+0x8f	U+041f
+0x90	U+0420
+0x91	U+0421
+0x92	U+0422
+0x93	U+0423
+0x94	U+0424
+0x95	U+0425
+0x96	U+0426
+0x97	U+0427
+0x98	U+0428
+0x99	U+0429
+0x9a	U+042a
+0x9b	U+042b
+0x9c	U+042c
+0x9d	U+042d
+0x9e	U+042e
+0x9f	U+042f
+#
+# cyrillic small letters from a to pe
+#
+0xa0	U+0430
+0xa1	U+0431
+0xa2	U+0432
+0xa3	U+0433
+0xa4	U+0434
+0xa5	U+0435
+0xa6	U+0436
+0xa7	U+0437
+0xa8	U+0438
+0xa9	U+0439
+0xaa	U+043a
+0xab	U+043b
+0xac	U+043c
+0xad	U+043d
+0xae	U+043e
+0xaf	U+043f
+#
+# Block graphics
+#
+0xb0	U+2591
+0xb1	U+2592
+0xb2	U+2593
+0xb3	U+2502
+0xb4	U+2524
+0xb5	U+2561
+0xb6	U+2562
+0xb7	U+2556
+0xb8	U+2555
+0xb9	U+2563
+0xba	U+2551
+0xbb	U+2557
+0xbc	U+255d
+0xbd	U+255c
+0xbe	U+255b
+0xbf	U+2510
+0xc0	U+2514
+0xc1	U+2534
+0xc2	U+252c
+0xc3	U+251c
+0xc4	U+2500
+0xc5	U+253c
+0xc6	U+255e
+0xc7	U+255f
+0xc8	U+255a
+0xc9	U+2554
+0xca	U+2569
+0xcb	U+2566
+0xcc	U+2560
+0xcd	U+2550
+0xce	U+256c
+0xcf	U+2567
+0xd0	U+2568
+0xd1	U+2564
+0xd2	U+2565
+0xd3	U+2559
+0xd4	U+2558
+0xd5	U+2552
+0xd6	U+2553
+0xd7	U+256b
+0xd8	U+256a
+0xd9	U+2518
+0xda	U+250c
+0xdb	U+2588
+0xdc	U+2584
+0xdd	U+258c
+0xde	U+2590
+0xdf	U+2580
+#
+# cyrillic small letters from er to ja 
+#
+0xe0	U+0440
+0xe1	U+0441
+0xe2	U+0442
+0xe3	U+0443
+0xe4	U+0444
+0xe5	U+0445
+0xe6	U+0446
+0xe7	U+0447
+0xe8	U+0448
+0xe9	U+0449
+0xea	U+044a
+0xeb	U+044b
+0xec	U+044c
+0xed	U+044d
+0xee	U+044e
+0xef	U+044f
+#
+# ukrainian diacritic letters
+#
+0xf0	U+0401
+0xf1	U+0451
+0xf2	U+0490
+0xf3	U+0491
+0xf4	U+0404
+0xf5	U+0454
+0xf6	U+0406
+0xf7	U+0456
+0xf8	U+0407
+0xf9	U+0457
+#
+# some additional chars
+#
+0xfa	U+00b7
+0xfb	U+221a
+0xfc	U+00a9
+0xfd	U+00b2
+#
+# Square bullet, non-spacing blank
+# Mapping U+fffd to the square bullet means it is the substitution
+# character
+# 
+0xfe	U+25a0 U+fffd
+0xff	U+00a0
diff --git a/consoletrans/space b/consoletrans/space
new file mode 100644
index 0000000..754601b
--- /dev/null
+++ b/consoletrans/space
@@ -0,0 +1,130 @@
+# Map all characters with high bit set to space
+# Internal value	Output character
+0x80    0x20
+0x81    0x20
+0x82    0x20
+0x83    0x20
+0x84    0x20
+0x85    0x20
+0x86    0x20
+0x87    0x20
+0x88    0x20
+0x89    0x20
+0x8A    0x20
+0x8B    0x20
+0x8C    0x20
+0x8D    0x20
+0x8E    0x20
+0x8F    0x20
+0x90    0x20
+0x91    0x20
+0x92    0x20
+0x93    0x20
+0x94    0x20
+0x95    0x20
+0x96    0x20
+0x97    0x20
+0x98    0x20
+0x99    0x20
+0x9A    0x20
+0x9B    0x20
+0x9C    0x20
+0x9D    0x20
+0x9E    0x20
+0x9F    0x20
+0xA0    0x20
+0xA1    0x20
+0xA2    0x20
+0xA3    0x20
+0xA4    0x20
+0xA5    0x20
+0xA6    0x20
+0xA7    0x20
+0xA8    0x20
+0xA9    0x20
+0xAA    0x20
+0xAB    0x20
+0xAC    0x20
+0xAD    0x20
+0xAE    0x20
+0xAF    0x20
+0xB0    0x20
+0xB1    0x20
+0xB2    0x20
+0xB3    0x20
+0xB4    0x20
+0xB5    0x20
+0xB6    0x20
+0xB7    0x20
+0xB8    0x20
+0xB9    0x20
+0xBA    0x20
+0xBB    0x20
+0xBC    0x20
+0xBD    0x20
+0xBE    0x20
+0xBF    0x20
+0xC0    0x20
+0xC1    0x20
+0xC2    0x20
+0xC3    0x20
+0xC4    0x20
+0xC5    0x20
+0xC6    0x20
+0xC7    0x20
+0xC8    0x20
+0xC9    0x20
+0xCA    0x20
+0xCB    0x20
+0xCC    0x20
+0xCD    0x20
+0xCE    0x20
+0xCF    0x20
+0xD0    0x20
+0xD1    0x20
+0xD2    0x20
+0xD3    0x20
+0xD4    0x20
+0xD5    0x20
+0xD6    0x20
+0xD7    0x20
+0xD8    0x20
+0xD9    0x20
+0xDA    0x20
+0xDB    0x20
+0xDC    0x20
+0xDD    0x20
+0xDE    0x20
+0xDF    0x20
+0xE0    0x20
+0xE1    0x20
+0xE2    0x20
+0xE3    0x20
+0xE4    0x20
+0xE5    0x20
+0xE6    0x20
+0xE7    0x20
+0xE8    0x20
+0xE9    0x20
+0xEA    0x20
+0xEB    0x20
+0xEC    0x20
+0xED    0x20
+0xEE    0x20
+0xEF    0x20
+0xF0    0x20
+0xF1    0x20
+0xF2    0x20
+0xF3    0x20
+0xF4    0x20
+0xF5    0x20
+0xF6    0x20
+0xF7    0x20
+0xF8    0x20
+0xF9    0x20
+0xFA    0x20
+0xFB    0x20
+0xFC    0x20
+0xFD    0x20
+0xFE    0x20
+0xFF    0x20
diff --git a/consoletrans/tcvn.uni b/consoletrans/tcvn.uni
new file mode 100644
index 0000000..29ef6ff
--- /dev/null
+++ b/consoletrans/tcvn.uni
@@ -0,0 +1,80 @@
+#
+# Vietnamese TCVN encoding unicode table
+# usage: setfont -m trivial -u tcvn.uni fontname
+#
+0x00-0x9f idem
+0xA0 U+00A0
+0xA1 U+0102
+0xA2 U+00C2
+0xA3 U+00CA
+0xA4 U+00D4
+0xA5 U+01A0
+0xA6 U+01AF
+0xA7 U+0110
+0xA8 U+0103
+0xA9 U+00E2
+0xAA U+00EA
+0xAB U+00F4
+0xAC U+01A1
+0xAD U+01B0
+0xAE U+0111
+0xB5 U+00E0
+0xB6 U+1EA3
+0xB7 U+00E3
+0xB8 U+00E1
+0xB9 U+1EA1
+0xBB U+1EB1
+0xBC U+1EB3
+0xBD U+1EB5
+0xBE U+1EAF
+0xC6 U+1EB7
+0xC7 U+1EA7
+0xC8 U+1EA9
+0xC9 U+1EAB
+0xCA U+1EA5
+0xCB U+1EAD
+0xCC U+00E8
+0xCE U+1EB5
+0xCF U+1EBD
+0xD0 U+00E9
+0xD1 U+1EB9
+0xD2 U+1EC1
+0xD3 U+1EC3
+0xD4 U+1EC5
+0xD5 U+1EBF
+0xD6 U+1EC7
+0xD7 U+00EC
+0xD8 U+1EC9
+0xDC U+0129
+0xDD U+00ED
+0xDE U+1ECB
+0xDF U+00F2
+0xE1 U+1ECF
+0xE2 U+00F5
+0xE3 U+00F3
+0xE4 U+1ECD
+0xE5 U+1ED3
+0xE6 U+1ED5
+0xE7 U+1ED7
+0xE8 U+1ED1
+0xE9 U+1ED9
+0xEA U+1EDD
+0xEB U+1EDF
+0xEC U+1EE1
+0xED U+1EDB
+0xEE U+1EE3
+0xEF U+00F9
+0xF1 U+1EE7
+0xF2 U+0169
+0xF3 U+00FA
+0xF4 U+1EE5
+0xF5 U+1EEB
+0xF6 U+1EED
+0xF7 U+1EEF
+0xF8 U+1EE9
+0xF9 U+1EF1
+0xFA U+1EF3
+0xFB U+1EF7
+0xFC U+1EF9
+0xFD U+00FD
+0xFE U+1EF5
diff --git a/consoletrans/trivial b/consoletrans/trivial
new file mode 100644
index 0000000..95d8e63
--- /dev/null
+++ b/consoletrans/trivial
@@ -0,0 +1,129 @@
+# Internal value	Output character
+0x80    0x80
+0x81    0x81
+0x82    0x82
+0x83    0x83
+0x84    0x84
+0x85    0x85
+0x86    0x86
+0x87    0x87
+0x88    0x88
+0x89    0x89
+0x8A    0x8A
+0x8B    0x8B
+0x8C    0x8C
+0x8D    0x8D
+0x8E    0x8E
+0x8F    0x8F
+0x90    0x90
+0x91    0x91
+0x92    0x92
+0x93    0x93
+0x94    0x94
+0x95    0x95
+0x96    0x96
+0x97    0x97
+0x98    0x98
+0x99    0x99
+0x9A    0x9A
+0x9B    0x9B
+0x9C    0x9C
+0x9D    0x9D
+0x9E    0x9E
+0x9F    0x9F
+0xA0    0xA0
+0xA1    0xA1
+0xA2    0xA2
+0xA3    0xA3
+0xA4    0xA4
+0xA5    0xA5
+0xA6    0xA6
+0xA7    0xA7
+0xA8    0xA8
+0xA9    0xA9
+0xAA    0xAA
+0xAB    0xAB
+0xAC    0xAC
+0xAD    0xAD
+0xAE    0xAE
+0xAF    0xAF
+0xB0    0xB0
+0xB1    0xB1
+0xB2    0xB2
+0xB3    0xB3
+0xB4    0xB4
+0xB5    0xB5
+0xB6    0xB6
+0xB7    0xB7
+0xB8    0xB8
+0xB9    0xB9
+0xBA    0xBA
+0xBB    0xBB
+0xBC    0xBC
+0xBD    0xBD
+0xBE    0xBE
+0xBF    0xBF
+0xC0    0xC0
+0xC1    0xC1
+0xC2    0xC2
+0xC3    0xC3
+0xC4    0xC4
+0xC5    0xC5
+0xC6    0xC6
+0xC7    0xC7
+0xC8    0xC8
+0xC9    0xC9
+0xCA    0xCA
+0xCB    0xCB
+0xCC    0xCC
+0xCD    0xCD
+0xCE    0xCE
+0xCF    0xCF
+0xD0    0xD0
+0xD1    0xD1
+0xD2    0xD2
+0xD3    0xD3
+0xD4    0xD4
+0xD5    0xD5
+0xD6    0xD6
+0xD7    0xD7
+0xD8    0xD8
+0xD9    0xD9
+0xDA    0xDA
+0xDB    0xDB
+0xDC    0xDC
+0xDD    0xDD
+0xDE    0xDE
+0xDF    0xDF
+0xE0    0xE0
+0xE1    0xE1
+0xE2    0xE2
+0xE3    0xE3
+0xE4    0xE4
+0xE5    0xE5
+0xE6    0xE6
+0xE7    0xE7
+0xE8    0xE8
+0xE9    0xE9
+0xEA    0xEA
+0xEB    0xEB
+0xEC    0xEC
+0xED    0xED
+0xEE    0xEE
+0xEF    0xEF
+0xF0    0xF0
+0xF1    0xF1
+0xF2    0xF2
+0xF3    0xF3
+0xF4    0xF4
+0xF5    0xF5
+0xF6    0xF6
+0xF7    0xF7
+0xF8    0xF8
+0xF9    0xF9
+0xFA    0xFA
+0xFB    0xFB
+0xFC    0xFC
+0xFD    0xFD
+0xFE    0xFE
+0xFF    0xFF
diff --git a/consoletrans/utflist b/consoletrans/utflist
new file mode 100644
index 0000000..9cf48d9
--- /dev/null
+++ b/consoletrans/utflist
@@ -0,0 +1,1032 @@
+# Test for checking the unicode maps corresponding to
+# various fonts. Try
+#	for i in 01 02 03 04 05 06 07 08 09 10
+#	do
+#		unicode_start iso$i.f16 iso$i
+#		less -r utflist
+#	done
+#	unicode_stop
+#
+0020       SPACE
+0021   !   EXCLAMATION MARK
+0022   "   QUOTATION MARK
+0023   #   NUMBER SIGN
+0024   $   DOLLAR SIGN
+0025   %   PERCENT SIGN
+0026   &   AMPERSAND
+0027   '   APOSTROPHE
+0028   (   LEFT PARENTHESIS
+0029   )   RIGHT PARENTHESIS
+002a   *   ASTERISK
+002b   +   PLUS SIGN
+002c   ,   COMMA
+002d   -   HYPHEN-MINUS
+002e   .   FULL STOP
+002f   /   SOLIDUS
+0030   0   DIGIT ZERO
+0031   1   DIGIT ONE
+0032   2   DIGIT TWO
+0033   3   DIGIT THREE
+0034   4   DIGIT FOUR
+0035   5   DIGIT FIVE
+0036   6   DIGIT SIX
+0037   7   DIGIT SEVEN
+0038   8   DIGIT EIGHT
+0039   9   DIGIT NINE
+003a   :   COLON
+003b   ;   SEMICOLON
+003c   <   LESS-THAN SIGN
+003d   =   EQUALS SIGN
+003e   >   GREATER-THAN SIGN
+003f   ?   QUESTION MARK
+0040   @   COMMERCIAL AT
+0041   A   LATIN CAPITAL LETTER A
+0042   B   LATIN CAPITAL LETTER B
+0043   C   LATIN CAPITAL LETTER C
+0044   D   LATIN CAPITAL LETTER D
+0045   E   LATIN CAPITAL LETTER E
+0046   F   LATIN CAPITAL LETTER F
+0047   G   LATIN CAPITAL LETTER G
+0048   H   LATIN CAPITAL LETTER H
+0049   I   LATIN CAPITAL LETTER I
+004a   J   LATIN CAPITAL LETTER J
+004b   K   LATIN CAPITAL LETTER K
+004c   L   LATIN CAPITAL LETTER L
+004d   M   LATIN CAPITAL LETTER M
+004e   N   LATIN CAPITAL LETTER N
+004f   O   LATIN CAPITAL LETTER O
+0050   P   LATIN CAPITAL LETTER P
+0051   Q   LATIN CAPITAL LETTER Q
+0052   R   LATIN CAPITAL LETTER R
+0053   S   LATIN CAPITAL LETTER S
+0054   T   LATIN CAPITAL LETTER T
+0055   U   LATIN CAPITAL LETTER U
+0056   V   LATIN CAPITAL LETTER V
+0057   W   LATIN CAPITAL LETTER W
+0058   X   LATIN CAPITAL LETTER X
+0059   Y   LATIN CAPITAL LETTER Y
+005a   Z   LATIN CAPITAL LETTER Z
+005b   [   LEFT SQUARE BRACKET
+005c   \   REVERSE SOLIDUS
+005d   ]   RIGHT SQUARE BRACKET
+005e   ^   CIRCUMFLEX ACCENT
+005f   _   LOW LINE
+0060   `   GRAVE ACCENT
+0061   a   LATIN SMALL LETTER A
+0062   b   LATIN SMALL LETTER B
+0063   c   LATIN SMALL LETTER C
+0064   d   LATIN SMALL LETTER D
+0065   e   LATIN SMALL LETTER E
+0066   f   LATIN SMALL LETTER F
+0067   g   LATIN SMALL LETTER G
+0068   h   LATIN SMALL LETTER H
+0069   i   LATIN SMALL LETTER I
+006a   j   LATIN SMALL LETTER J
+006b   k   LATIN SMALL LETTER K
+006c   l   LATIN SMALL LETTER L
+006d   m   LATIN SMALL LETTER M
+006e   n   LATIN SMALL LETTER N
+006f   o   LATIN SMALL LETTER O
+0070   p   LATIN SMALL LETTER P
+0071   q   LATIN SMALL LETTER Q
+0072   r   LATIN SMALL LETTER R
+0073   s   LATIN SMALL LETTER S
+0074   t   LATIN SMALL LETTER T
+0075   u   LATIN SMALL LETTER U
+0076   v   LATIN SMALL LETTER V
+0077   w   LATIN SMALL LETTER W
+0078   x   LATIN SMALL LETTER X
+0079   y   LATIN SMALL LETTER Y
+007a   z   LATIN SMALL LETTER Z
+007b   {   LEFT CURLY BRACKET
+007c   |   VERTICAL LINE
+007d   }   RIGHT CURLY BRACKET
+007e   ~   TILDE
+00a0       NO-BREAK SPACE
+00a1   ¡   INVERTED EXCLAMATION MARK
+00a2   ¢   CENT SIGN
+00a3   £   POUND SIGN
+00a4   ¤   CURRENCY SIGN
+00a5   ¥   YEN SIGN
+00a6   ¦   BROKEN BAR
+00a7   §   SECTION SIGN
+00a8   ¨   DIAERESIS
+00a9   ©   COPYRIGHT SIGN
+00aa   ª   FEMININE ORDINAL INDICATOR
+00ab   «   LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00ac   ¬   NOT SIGN
+00ad   ­   SOFT HYPHEN
+00ae   ®   REGISTERED SIGN
+00af   ¯   MACRON
+00b0   °   DEGREE SIGN
+00b1   ±   PLUS-MINUS SIGN
+00b2   ²   SUPERSCRIPT TWO
+00b3   ³   SUPERSCRIPT THREE
+00b4   ´   ACUTE ACCENT
+00b5   µ   MICRO SIGN
+00b6   ¶   PILCROW SIGN
+00b7   ·   MIDDLE DOT
+00b8   ¸   CEDILLA
+00b9   ¹   SUPERSCRIPT ONE
+00ba   º   MASCULINE ORDINAL INDICATOR
+00bb   »   RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00bc   ¼   VULGAR FRACTION ONE QUARTER
+00bd   ½   VULGAR FRACTION ONE HALF
+00be   ¾   VULGAR FRACTION THREE QUARTERS
+00bf   ¿   INVERTED QUESTION MARK
+00c0   À   LATIN CAPITAL LETTER A WITH GRAVE
+00c1   Á   LATIN CAPITAL LETTER A WITH ACUTE
+00c2   Â   LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00c3   Ã   LATIN CAPITAL LETTER A WITH TILDE
+00c4   Ä   LATIN CAPITAL LETTER A WITH DIAERESIS
+00c5   Å   LATIN CAPITAL LETTER A WITH RING ABOVE
+00c6   Æ   LATIN CAPITAL LETTER AE
+00c7   Ç   LATIN CAPITAL LETTER C WITH CEDILLA
+00c8   È   LATIN CAPITAL LETTER E WITH GRAVE
+00c9   É   LATIN CAPITAL LETTER E WITH ACUTE
+00ca   Ê   LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00cb   Ë   LATIN CAPITAL LETTER E WITH DIAERESIS
+00cc   Ì   LATIN CAPITAL LETTER I WITH GRAVE
+00cd   Í   LATIN CAPITAL LETTER I WITH ACUTE
+00ce   Î   LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00cf   Ï   LATIN CAPITAL LETTER I WITH DIAERESIS
+00d0   Ð   LATIN CAPITAL LETTER ETH (Icelandic)
+00d1   Ñ   LATIN CAPITAL LETTER N WITH TILDE
+00d2   Ò   LATIN CAPITAL LETTER O WITH GRAVE
+00d3   Ó   LATIN CAPITAL LETTER O WITH ACUTE
+00d4   Ô   LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00d5   Õ   LATIN CAPITAL LETTER O WITH TILDE
+00d6   Ö   LATIN CAPITAL LETTER O WITH DIAERESIS
+00d7   ×   MULTIPLICATION SIGN
+00d8   Ø   LATIN CAPITAL LETTER O WITH STROKE
+00d9   Ù   LATIN CAPITAL LETTER U WITH GRAVE
+00da   Ú   LATIN CAPITAL LETTER U WITH ACUTE
+00db   Û   LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00dc   Ü   LATIN CAPITAL LETTER U WITH DIAERESIS
+00dd   Ý   LATIN CAPITAL LETTER Y WITH ACUTE
+00de   Þ   LATIN CAPITAL LETTER THORN (Icelandic)
+00df   ß   LATIN SMALL LETTER SHARP S (German)
+00e0   à   LATIN SMALL LETTER A WITH GRAVE
+00e1   á   LATIN SMALL LETTER A WITH ACUTE
+00e2   â   LATIN SMALL LETTER A WITH CIRCUMFLEX
+00e3   ã   LATIN SMALL LETTER A WITH TILDE
+00e4   ä   LATIN SMALL LETTER A WITH DIAERESIS
+00e5   å   LATIN SMALL LETTER A WITH RING ABOVE
+00e6   æ   LATIN SMALL LETTER AE
+00e7   ç   LATIN SMALL LETTER C WITH CEDILLA
+00e8   è   LATIN SMALL LETTER E WITH GRAVE
+00e9   é   LATIN SMALL LETTER E WITH ACUTE
+00ea   ê   LATIN SMALL LETTER E WITH CIRCUMFLEX
+00eb   ë   LATIN SMALL LETTER E WITH DIAERESIS
+00ec   ì   LATIN SMALL LETTER I WITH GRAVE
+00ed   í   LATIN SMALL LETTER I WITH ACUTE
+00ee   î   LATIN SMALL LETTER I WITH CIRCUMFLEX
+00ef   ï   LATIN SMALL LETTER I WITH DIAERESIS
+00f0   ð   LATIN SMALL LETTER ETH (Icelandic)
+00f1   ñ   LATIN SMALL LETTER N WITH TILDE
+00f2   ò   LATIN SMALL LETTER O WITH GRAVE
+00f3   ó   LATIN SMALL LETTER O WITH ACUTE
+00f4   ô   LATIN SMALL LETTER O WITH CIRCUMFLEX
+00f5   õ   LATIN SMALL LETTER O WITH TILDE
+00f6   ö   LATIN SMALL LETTER O WITH DIAERESIS
+00f7   ÷   DIVISION SIGN
+00f8   ø   LATIN SMALL LETTER O WITH STROKE
+00f9   ù   LATIN SMALL LETTER U WITH GRAVE
+00fa   ú   LATIN SMALL LETTER U WITH ACUTE
+00fb   û   LATIN SMALL LETTER U WITH CIRCUMFLEX
+00fc   ü   LATIN SMALL LETTER U WITH DIAERESIS
+00fd   ý   LATIN SMALL LETTER Y WITH ACUTE
+00fe   þ   LATIN SMALL LETTER THORN (Icelandic)
+00ff   ÿ   LATIN SMALL LETTER Y WITH DIAERESIS
+0100   Ā   LATIN CAPITAL LETTER A WITH MACRON
+0101   ā   LATIN SMALL LETTER A WITH MACRON
+0102   Ă   LATIN CAPITAL LETTER A WITH BREVE
+0103   ă   LATIN SMALL LETTER A WITH BREVE
+0104   Ą   LATIN CAPITAL LETTER A WITH OGONEK
+0105   ą   LATIN SMALL LETTER A WITH OGONEK
+0106   Ć   LATIN CAPITAL LETTER C WITH ACUTE
+0107   ć   LATIN SMALL LETTER C WITH ACUTE
+0108   Ĉ   LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109   ĉ   LATIN SMALL LETTER C WITH CIRCUMFLEX
+010a   Ċ   LATIN CAPITAL LETTER C WITH DOT ABOVE
+010b   ċ   LATIN SMALL LETTER C WITH DOT ABOVE
+010c   Č   LATIN CAPITAL LETTER C WITH CARON
+010d   č   LATIN SMALL LETTER C WITH CARON
+010e   Ď   LATIN CAPITAL LETTER D WITH CARON
+010f   ď   LATIN SMALL LETTER D WITH CARON
+0110   Đ   LATIN CAPITAL LETTER D WITH STROKE
+0111   đ   LATIN SMALL LETTER D WITH STROKE
+0112   Ē   LATIN CAPITAL LETTER E WITH MACRON
+0113   ē   LATIN SMALL LETTER E WITH MACRON
+0114   Ĕ   LATIN CAPITAL LETTER E WITH BREVE
+0115   ĕ   LATIN SMALL LETTER E WITH BREVE
+0116   Ė   LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117   ė   LATIN SMALL LETTER E WITH DOT ABOVE
+0118   Ę   LATIN CAPITAL LETTER E WITH OGONEK
+0119   ę   LATIN SMALL LETTER E WITH OGONEK
+011a   Ě   LATIN CAPITAL LETTER E WITH CARON
+011b   ě   LATIN SMALL LETTER E WITH CARON
+011c   Ĝ   LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011d   ĝ   LATIN SMALL LETTER G WITH CIRCUMFLEX
+011e   Ğ   LATIN CAPITAL LETTER G WITH BREVE
+011f   ğ   LATIN SMALL LETTER G WITH BREVE
+0120   Ġ   LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121   ġ   LATIN SMALL LETTER G WITH DOT ABOVE
+0122   Ģ   LATIN CAPITAL LETTER G WITH CEDILLA
+0123   ģ   LATIN SMALL LETTER G WITH CEDILLA
+0124   Ĥ   LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125   ĥ   LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126   Ħ   LATIN CAPITAL LETTER H WITH STROKE
+0127   ħ   LATIN SMALL LETTER H WITH STROKE
+0128   Ĩ   LATIN CAPITAL LETTER I WITH TILDE
+0129   ĩ   LATIN SMALL LETTER I WITH TILDE
+012a   Ī   LATIN CAPITAL LETTER I WITH MACRON
+012b   ī   LATIN SMALL LETTER I WITH MACRON
+012c   Ĭ   LATIN CAPITAL LETTER I WITH BREVE
+012d   ĭ   LATIN SMALL LETTER I WITH BREVE
+012e   Į   LATIN CAPITAL LETTER I WITH OGONEK
+012f   į   LATIN SMALL LETTER I WITH OGONEK
+0130   İ   LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131   ı   LATIN SMALL LETTER I DOTLESS
+0132   IJ   LATIN CAPITAL LIGATURE IJ
+0133   ij   LATIN SMALL LIGATURE IJ
+0134   Ĵ   LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135   ĵ   LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136   Ķ   LATIN CAPITAL LETTER K WITH CEDILLA
+0137   ķ   LATIN SMALL LETTER K WITH CEDILLA
+0138   ĸ   LATIN SMALL LETTER KRA (Greenlandic)
+0139   Ĺ   LATIN CAPITAL LETTER L WITH ACUTE
+013a   ĺ   LATIN SMALL LETTER L WITH ACUTE
+013b   Ļ   LATIN CAPITAL LETTER L WITH CEDILLA
+013c   ļ   LATIN SMALL LETTER L WITH CEDILLA
+013d   Ľ   LATIN CAPITAL LETTER L WITH CARON
+013e   ľ   LATIN SMALL LETTER L WITH CARON
+013f   Ŀ   LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140   ŀ   LATIN SMALL LETTER L WITH MIDDLE DOT
+0141   Ł   LATIN CAPITAL LETTER L WITH STROKE
+0142   ł   LATIN SMALL LETTER L WITH STROKE
+0143   Ń   LATIN CAPITAL LETTER N WITH ACUTE
+0144   ń   LATIN SMALL LETTER N WITH ACUTE
+0145   Ņ   LATIN CAPITAL LETTER N WITH CEDILLA
+0146   ņ   LATIN SMALL LETTER N WITH CEDILLA
+0147   Ň   LATIN CAPITAL LETTER N WITH CARON
+0148   ň   LATIN SMALL LETTER N WITH CARON
+0149   ʼn   LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014a   Ŋ   LATIN CAPITAL LETTER ENG (Lappish)
+014b   ŋ   LATIN SMALL LETTER ENG (Lappish)
+014c   Ō   LATIN CAPITAL LETTER O WITH MACRON
+014d   ō   LATIN SMALL LETTER O WITH MACRON
+014e   Ŏ   LATIN CAPITAL LETTER O WITH BREVE
+014f   ŏ   LATIN SMALL LETTER O WITH BREVE
+0150   Ő   LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151   ő   LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152   Œ   LATIN CAPITAL LIGATURE OE
+0153   œ   LATIN SMALL LIGATURE OE
+0154   Ŕ   LATIN CAPITAL LETTER R WITH ACUTE
+0155   ŕ   LATIN SMALL LETTER R WITH ACUTE
+0156   Ŗ   LATIN CAPITAL LETTER R WITH CEDILLA
+0157   ŗ   LATIN SMALL LETTER R WITH CEDILLA
+0158   Ř   LATIN CAPITAL LETTER R WITH CARON
+0159   ř   LATIN SMALL LETTER R WITH CARON
+015a   Ś   LATIN CAPITAL LETTER S WITH ACUTE
+015b   ś   LATIN SMALL LETTER S WITH ACUTE
+015c   Ŝ   LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015d   ŝ   LATIN SMALL LETTER S WITH CIRCUMFLEX
+015e   Ş   LATIN CAPITAL LETTER S WITH CEDILLA
+015f   ş   LATIN SMALL LETTER S WITH CEDILLA
+0160   Š   LATIN CAPITAL LETTER S WITH CARON
+0161   š   LATIN SMALL LETTER S WITH CARON
+0162   Ţ   LATIN CAPITAL LETTER T WITH CEDILLA
+0163   ţ   LATIN SMALL LETTER T WITH CEDILLA
+0164   Ť   LATIN CAPITAL LETTER T WITH CARON
+0165   ť   LATIN SMALL LETTER T WITH CARON
+0166   Ŧ   LATIN CAPITAL LETTER T WITH STROKE
+0167   ŧ   LATIN SMALL LETTER T WITH STROKE
+0168   Ũ   LATIN CAPITAL LETTER U WITH TILDE
+0169   ũ   LATIN SMALL LETTER U WITH TILDE
+016a   Ū   LATIN CAPITAL LETTER U WITH MACRON
+016b   ū   LATIN SMALL LETTER U WITH MACRON
+016c   Ŭ   LATIN CAPITAL LETTER U WITH BREVE
+016d   ŭ   LATIN SMALL LETTER U WITH BREVE
+016e   Ů   LATIN CAPITAL LETTER U WITH RING ABOVE
+016f   ů   LATIN SMALL LETTER U WITH RING ABOVE
+0170   Ű   LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171   ű   LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172   Ų   LATIN CAPITAL LETTER U WITH OGONEK
+0173   ų   LATIN SMALL LETTER U WITH OGONEK
+0174   Ŵ   LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175   ŵ   LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176   Ŷ   LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177   ŷ   LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178   Ÿ   LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179   Ź   LATIN CAPITAL LETTER Z WITH ACUTE
+017a   ź   LATIN SMALL LETTER Z WITH ACUTE
+017b   Ż   LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017c   ż   LATIN SMALL LETTER Z WITH DOT ABOVE
+017d   Ž   LATIN CAPITAL LETTER Z WITH CARON
+017e   ž   LATIN SMALL LETTER Z WITH CARON
+01a0   Ơ   LATIN CAPITAL LETTER O WITH HORN
+01a1   ơ   LATIN SMALL LETTER O WITH HORN
+01a2   Ƣ   LATIN CAPITAL LETTER OI
+01a3   ƣ   LATIN SMALL LETTER OI
+01a6   Ʀ   LATIN LETTER YR
+01af   Ư   LATIN CAPITAL LETTER U WITH HORN
+01b0   ư   LATIN SMALL LETTER U WITH HORN
+01b5   Ƶ   LATIN CAPITAL LETTER Z WITH STROKE
+01b6   ƶ   LATIN SMALL LETTER Z WITH STROKE
+01b7   Ʒ   LATIN CAPITAL LETTER EZH
+01cd   Ǎ   LATIN CAPITAL LETTER A WITH CARON
+01ce   ǎ   LATIN SMALL LETTER A WITH CARON
+01cf   Ǐ   LATIN CAPITAL LETTER I WITH CARON
+01d0   ǐ   LATIN SMALL LETTER I WITH CARON
+01d1   Ǒ   LATIN CAPITAL LETTER O WITH CARON
+01d2   ǒ   LATIN SMALL LETTER O WITH CARON
+01d3   Ǔ   LATIN CAPITAL LETTER U WITH CARON
+01d4   ǔ   LATIN SMALL LETTER U WITH CARON
+01d5   Ǖ   LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01d6   ǖ   LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01d7   Ǘ   LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01d8   ǘ   LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01d9   Ǚ   LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01da   ǚ   LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01db   Ǜ   LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01dc   ǜ   LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01de   Ǟ   LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01df   ǟ   LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01e0   Ǡ   LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01e1   ǡ   LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01e2   Ǣ   LATIN CAPITAL LETTER AE WITH MACRON
+01e3   ǣ   LATIN SMALL LETTER AE WITH MACRON
+01e4   Ǥ   LATIN CAPITAL LETTER G WITH STROKE
+01e5   ǥ   LATIN SMALL LETTER G WITH STROKE
+01e6   Ǧ   LATIN CAPITAL LETTER G WITH CARON
+01e7   ǧ   LATIN SMALL LETTER G WITH CARON
+01e8   Ǩ   LATIN CAPITAL LETTER K WITH CARON
+01e9   ǩ   LATIN SMALL LETTER K WITH CARON
+01ea   Ǫ   LATIN CAPITAL LETTER O WITH OGONEK
+01eb   ǫ   LATIN SMALL LETTER O WITH OGONEK
+01ec   Ǭ   LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ed   ǭ   LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01ee   Ǯ   LATIN CAPITAL LETTER EZH WITH CARON
+01ef   ǯ   LATIN SMALL LETTER EZH WITH CARON
+01f0   ǰ   LATIN SMALL LETTER J WITH CARON
+01f4   Ǵ   LATIN CAPITAL LETTER G WITH ACUTE
+01f5   ǵ   LATIN SMALL LETTER G WITH ACUTE
+01fa   Ǻ   LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01fb   ǻ   LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01fc   Ǽ   LATIN CAPITAL LETTER AE WITH ACUTE
+01fd   ǽ   LATIN SMALL LETTER AE WITH ACUTE
+01fe   Ǿ   LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01ff   ǿ   LATIN SMALL LETTER O WITH STROKE AND ACUTE
+02bf   ʿ   MODIFIER LETTER LEFT HALF RING
+02c7   ˇ   CARON
+02d8   ˘   BREVE
+02d9   ˙   DOT ABOVE
+02da   ˚   RING ABOVE
+02db   ˛   OGONEK
+02dd   ˝   DOUBLE ACUTE ACCENT
+0386   Ά   GREEK CAPITAL LETTER ALPHA WITH ACUTE
+0388   Έ   GREEK CAPITAL LETTER EPSILON WITH ACUTE
+0389   Ή   GREEK CAPITAL LETTER ETA WITH ACUTE
+038a   Ί   GREEK CAPITAL LETTER IOTA WITH ACUTE
+038c   Ό   GREEK CAPITAL LETTER OMICRON WITH ACUTE
+038e   Ύ   GREEK CAPITAL LETTER UPSILON WITH ACUTE
+038f   Ώ   GREEK CAPITAL LETTER OMEGA WITH ACUTE
+0390   ΐ   GREEK SMALL LETTER IOTA WITH ACUTE AND DIAERESIS
+0391   Α   GREEK CAPITAL LETTER ALPHA
+0392   Β   GREEK CAPITAL LETTER BETA
+0393   Γ   GREEK CAPITAL LETTER GAMMA
+0394   Δ   GREEK CAPITAL LETTER DELTA
+0395   Ε   GREEK CAPITAL LETTER EPSILON
+0396   Ζ   GREEK CAPITAL LETTER ZETA
+0397   Η   GREEK CAPITAL LETTER ETA
+0398   Θ   GREEK CAPITAL LETTER THETA
+0399   Ι   GREEK CAPITAL LETTER IOTA
+039a   Κ   GREEK CAPITAL LETTER KAPPA
+039b   Λ   GREEK CAPITAL LETTER LAMDA
+039c   Μ   GREEK CAPITAL LETTER MU
+039d   Ν   GREEK CAPITAL LETTER NU
+039e   Ξ   GREEK CAPITAL LETTER XI
+039f   Ο   GREEK CAPITAL LETTER OMICRON
+03a0   Π   GREEK CAPITAL LETTER PI
+03a1   Ρ   GREEK CAPITAL LETTER RHO
+03a3   Σ   GREEK CAPITAL LETTER SIGMA
+03a4   Τ   GREEK CAPITAL LETTER TAU
+03a5   Υ   GREEK CAPITAL LETTER UPSILON
+03a6   Φ   GREEK CAPITAL LETTER PHI
+03a7   Χ   GREEK CAPITAL LETTER CHI
+03a8   Ψ   GREEK CAPITAL LETTER PSI
+03a9   Ω   GREEK CAPITAL LETTER OMEGA
+03aa   Ϊ   GREEK CAPITAL LETTER IOTA WITH DIAERESIS
+03ab   Ϋ   GREEK CAPITAL LETTER UPSILON WITH DIAERESIS
+03ac   ά   GREEK SMALL LETTER ALPHA WITH ACUTE
+03ad   έ   GREEK SMALL LETTER EPSILON WITH ACUTE
+03ae   ή   GREEK SMALL LETTER ETA WITH ACUTE
+03af   ί   GREEK SMALL LETTER IOTA WITH ACUTE
+03b0   ΰ   GREEK SMALL LETTER UPSILON WITH ACUTE AND DIAERESIS
+03b1   α   GREEK SMALL LETTER ALPHA
+03b2   β   GREEK SMALL LETTER BETA
+03b3   γ   GREEK SMALL LETTER GAMMA
+03b4   δ   GREEK SMALL LETTER DELTA
+03b5   ε   GREEK SMALL LETTER EPSILON
+03b6   ζ   GREEK SMALL LETTER ZETA
+03b7   η   GREEK SMALL LETTER ETA
+03b8   θ   GREEK SMALL LETTER THETA
+03b9   ι   GREEK SMALL LETTER IOTA
+03ba   κ   GREEK SMALL LETTER KAPPA
+03bb   λ   GREEK SMALL LETTER LAMDA
+03bc   μ   GREEK SMALL LETTER MU
+03bd   ν   GREEK SMALL LETTER NU
+03be   ξ   GREEK SMALL LETTER XI
+03bf   ο   GREEK SMALL LETTER OMICRON
+03c0   π   GREEK SMALL LETTER PI
+03c1   ρ   GREEK SMALL LETTER RHO
+03c2   ς   GREEK SMALL LETTER FINAL SIGMA
+03c3   σ   GREEK SMALL LETTER SIGMA
+03c4   τ   GREEK SMALL LETTER TAU
+03c5   υ   GREEK SMALL LETTER UPSILON
+03c6   φ   GREEK SMALL LETTER PHI
+03c7   χ   GREEK SMALL LETTER CHI
+03c8   ψ   GREEK SMALL LETTER PSI
+03c9   ω   GREEK SMALL LETTER OMEGA
+03ca   ϊ   GREEK SMALL LETTER IOTA WITH DIAERESIS
+03cb   ϋ   GREEK SMALL LETTER UPSILON WITH DIAERESIS
+03cc   ό   GREEK SMALL LETTER OMICRON WITH ACUTE
+03cd   ύ   GREEK SMALL LETTER UPSILON WITH ACUTE
+03ce   ώ   GREEK SMALL LETTER OMEGA WITH ACUTE
+03d8   Ϙ   GREEK NUMERAL SIGN
+03d9   ϙ   GREEK LOWER NUMERAL SIGN
+03da   Ϛ   GREEK CAPITAL LETTER STIGMA
+03db   ϛ   GREEK SMALL LETTER STIGMA
+03dc   Ϝ   GREEK CAPITAL LETTER DIGAMMA
+03dd   ϝ   GREEK SMALL LETTER DIGAMMA
+03de   Ϟ   GREEK CAPITAL LETTER KOPPA
+03df   ϟ   GREEK SMALL LETTER KOPPA
+03e0   Ϡ   GREEK CAPITAL LETTER SAMPI
+03e1   ϡ   GREEK SMALL LETTER SAMPI
+03f4   ϴ   ACUTE ACCENT AND DIAERESIS (Tonos and Dialytika)
+03f5   ϵ   GREEK IOTA BELOW
+0401   Ё   CYRILLIC CAPITAL LETTER IO
+0402   Ђ   CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+0403   Ѓ   CYRILLIC CAPITAL LETTER GJE (Macedonian)
+0404   Є   CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405   Ѕ   CYRILLIC CAPITAL LETTER DZE (Macedonian)
+0406   І   CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407   Ї   CYRILLIC CAPITAL LETTER YI (Ukrainian)
+0408   Ј   CYRILLIC CAPITAL LETTER JE
+0409   Љ   CYRILLIC CAPITAL LETTER LJE
+040a   Њ   CYRILLIC CAPITAL LETTER NJE
+040b   Ћ   CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+040c   Ќ   CYRILLIC CAPITAL LETTER KJE (Macedonian)
+040e   Ў   CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+040f   Џ   CYRILLIC CAPITAL LETTER DZHE
+0410   А   CYRILLIC CAPITAL LETTER A
+0411   Б   CYRILLIC CAPITAL LETTER BE
+0412   В   CYRILLIC CAPITAL LETTER VE
+0413   Г   CYRILLIC CAPITAL LETTER GHE
+0414   Д   CYRILLIC CAPITAL LETTER DE
+0415   Е   CYRILLIC CAPITAL LETTER IE
+0416   Ж   CYRILLIC CAPITAL LETTER ZHE
+0417   З   CYRILLIC CAPITAL LETTER ZE
+0418   И   CYRILLIC CAPITAL LETTER I
+0419   Й   CYRILLIC CAPITAL LETTER SHORT I
+041a   К   CYRILLIC CAPITAL LETTER KA
+041b   Л   CYRILLIC CAPITAL LETTER EL
+041c   М   CYRILLIC CAPITAL LETTER EM
+041d   Н   CYRILLIC CAPITAL LETTER EN
+041e   О   CYRILLIC CAPITAL LETTER O
+041f   П   CYRILLIC CAPITAL LETTER PE
+0420   Р   CYRILLIC CAPITAL LETTER ER
+0421   С   CYRILLIC CAPITAL LETTER ES
+0422   Т   CYRILLIC CAPITAL LETTER TE
+0423   У   CYRILLIC CAPITAL LETTER U
+0424   Ф   CYRILLIC CAPITAL LETTER EF
+0425   Х   CYRILLIC CAPITAL LETTER HA
+0426   Ц   CYRILLIC CAPITAL LETTER TSE
+0427   Ч   CYRILLIC CAPITAL LETTER CHE
+0428   Ш   CYRILLIC CAPITAL LETTER SHA
+0429   Щ   CYRILLIC CAPITAL LETTER SHCHA
+042a   Ъ   CYRILLIC CAPITAL LETTER HARD SIGN
+042b   Ы   CYRILLIC CAPITAL LETTER YERI
+042c   Ь   CYRILLIC CAPITAL LETTER SOFT SIGN
+042d   Э   CYRILLIC CAPITAL LETTER E
+042e   Ю   CYRILLIC CAPITAL LETTER YU
+042f   Я   CYRILLIC CAPITAL LETTER YA
+0430   а   CYRILLIC SMALL LETTER A
+0431   б   CYRILLIC SMALL LETTER BE
+0432   в   CYRILLIC SMALL LETTER VE
+0433   г   CYRILLIC SMALL LETTER GHE
+0434   д   CYRILLIC SMALL LETTER DE
+0435   е   CYRILLIC SMALL LETTER IE
+0436   ж   CYRILLIC SMALL LETTER ZHE
+0437   з   CYRILLIC SMALL LETTER ZE
+0438   и   CYRILLIC SMALL LETTER I
+0439   й   CYRILLIC SMALL LETTER SHORT I
+043a   к   CYRILLIC SMALL LETTER KA
+043b   л   CYRILLIC SMALL LETTER EL
+043c   м   CYRILLIC SMALL LETTER EM
+043d   н   CYRILLIC SMALL LETTER EN
+043e   о   CYRILLIC SMALL LETTER O
+043f   п   CYRILLIC SMALL LETTER PE
+0440   р   CYRILLIC SMALL LETTER ER
+0441   с   CYRILLIC SMALL LETTER ES
+0442   т   CYRILLIC SMALL LETTER TE
+0443   у   CYRILLIC SMALL LETTER U
+0444   ф   CYRILLIC SMALL LETTER EF
+0445   х   CYRILLIC SMALL LETTER HA
+0446   ц   CYRILLIC SMALL LETTER TSE
+0447   ч   CYRILLIC SMALL LETTER CHE
+0448   ш   CYRILLIC SMALL LETTER SHA
+0449   щ   CYRILLIC SMALL LETTER SHCHA
+044a   ъ   CYRILLIC SMALL LETTER HARD SIGN
+044b   ы   CYRILLIC SMALL LETTER YERI
+044c   ь   CYRILLIC SMALL LETTER SOFT SIGN
+044d   э   CYRILLIC SMALL LETTER E
+044e   ю   CYRILLIC SMALL LETTER YU
+044f   я   CYRILLIC SMALL LETTER YA
+0451   ё   CYRILLIC SMALL LETTER IO
+0452   ђ   CYRILLIC SMALL LETTER DJE (Serbocroatian)
+0453   ѓ   CYRILLIC SMALL LETTER GJE (Macedonian)
+0454   є   CYRILLIC SMALL LETTER UKRAINIAN IE
+0455   ѕ   CYRILLIC SMALL LETTER DZE (Macedonian)
+0456   і   CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457   ї   CYRILLIC SMALL LETTER YI (Ukrainian)
+0458   ј   CYRILLIC SMALL LETTER JE
+0459   љ   CYRILLIC SMALL LETTER LJE
+045a   њ   CYRILLIC SMALL LETTER NJE
+045b   ћ   CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+045c   ќ   CYRILLIC SMALL LETTER KJE (Macedonian)
+045e   ў   CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+045f   џ   CYRILLIC SMALL LETTER DZHE
+0462   Ѣ   CYRILLIC CAPITAL LETTER YAT
+0463   ѣ   CYRILLIC SMALL LETTER YAT
+046a   Ѫ   CYRILLIC CAPITAL LETTER BIG YUS
+046b   ѫ   CYRILLIC SMALL LETTER BIG YUS
+0472   Ѳ   CYRILLIC CAPITAL LETTER FITA
+0473   ѳ   CYRILLIC SMALL LETTER FITA
+0474   Ѵ   CYRILLIC CAPITAL LETTER IZHITSA
+0475   ѵ   CYRILLIC SMALL LETTER IZHITSA
+0480   Ҁ   CYRILLIC CAPITAL LETTER KOPPA
+0481   ҁ   CYRILLIC SMALL LETTER KOPPA
+0490   Ґ   CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491   ґ   CYRILLIC SMALL LETTER GHE WITH UPTURN
+05d0   א   HEBREW LETTER ALEF
+05d1   ב   HEBREW LETTER BET
+05d2   ג   HEBREW LETTER GIMEL
+05d3   ד   HEBREW LETTER DALET
+05d4   ה   HEBREW LETTER HE
+05d5   ו   HEBREW LETTER VAV
+05d6   ז   HEBREW LETTER ZAYIN
+05d7   ח   HEBREW LETTER HET
+05d8   ט   HEBREW LETTER TET
+05d9   י   HEBREW LETTER YOD
+05da   ך   HEBREW LETTER FINAL KAF
+05db   כ   HEBREW LETTER KAF
+05dc   ל   HEBREW LETTER LAMED
+05dd   ם   HEBREW LETTER FINAL MEM
+05de   מ   HEBREW LETTER MEM
+05df   ן   HEBREW LETTER FINAL NUN
+05e0   נ   HEBREW LETTER NUN
+05e1   ס   HEBREW LETTER SAMEKH
+05e2   ע   HEBREW LETTER AYIN
+05e3   ף   HEBREW LETTER FINAL PE
+05e4   פ   HEBREW LETTER PE
+05e5   ץ   HEBREW LETTER FINAL TSADE
+05e6   צ   HEBREW LETTER TSADE
+05e7   ק   HEBREW LETTER QOF
+05e8   ר   HEBREW LETTER RESH
+05e9   ש   HEBREW LETTER SHIN
+05ea   ת   HEBREW LETTER TAV
+060c   ،   ARABIC COMMA
+061b   ؛   ARABIC SEMICOLON
+061f   ؟   ARABIC QUESTION MARK
+0621   ء   ARABIC LETTER HAMZA
+0622   آ   ARABIC LETTER ALEF WITH MADDA ABOVE
+0623   أ   ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624   ؤ   ARABIC LETTER WAW WITH HAMZA ABOVE
+0625   إ   ARABIC LETTER ALEF WITH HAMZA BELOW
+0626   ئ   ARABIC LETTER YEH WITH HAMZA ABOVE
+0627   ا   ARABIC LETTER ALEF
+0628   ب   ARABIC LETTER BEH
+0629   ة   ARABIC LETTER TEH MARBUTA
+062a   ت   ARABIC LETTER TEH
+062b   ث   ARABIC LETTER THEH
+062c   ج   ARABIC LETTER JEEM
+062d   ح   ARABIC LETTER HAH
+062e   خ   ARABIC LETTER KHAH
+062f   د   ARABIC LETTER DAL
+0630   ذ   ARABIC LETTER THAL
+0631   ر   ARABIC LETTER REH
+0632   ز   ARABIC LETTER ZAIN
+0633   س   ARABIC LETTER SEEN
+0634   ش   ARABIC LETTER SHEEN
+0635   ص   ARABIC LETTER SAD
+0636   ض   ARABIC LETTER DAD
+0637   ط   ARABIC LETTER TAH
+0638   ظ   ARABIC LETTER ZAH
+0639   ع   ARABIC LETTER AIN
+063a   غ   ARABIC LETTER GHAIN
+0640   ـ   ARABIC TATWEEL
+0641   ف   ARABIC LETTER FEH
+0642   ق   ARABIC LETTER QAF
+0643   ك   ARABIC LETTER KAF
+0644   ل   ARABIC LETTER LAM
+0645   م   ARABIC LETTER MEEM
+0646   ن   ARABIC LETTER NOON
+0647   ه   ARABIC LETTER HEH
+0648   و   ARABIC LETTER WAW
+0649   ى   ARABIC LETTER ALEF MAKSURA
+064a   ي   ARABIC LETTER YEH
+064b   ً   ARABIC FATHATAN
+064c   ٌ   ARABIC DAMMATAN
+064d   ٍ   ARABIC KASRATAN
+064e   َ   ARABIC FATHA
+064f   ُ   ARABIC DAMMA
+0650   ِ   ARABIC KASRA
+0651   ّ   ARABIC SHADDA
+0652   ْ   ARABIC SUKUN
+0670   ٰ   SUPERSCRIPT ARABIC LETTER ALEF
+067e   پ   ARABIC LETTER PEH
+06a4   ڤ   ARABIC LETTER VEH
+06af   گ   ARABIC LETTER GAF
+1200   ሀ   ETHIOPIC SYLLABLE HA   (he)
+1201   ሁ   ETHIOPIC SYLLABLE HU   (hu)
+1202   ሂ   ETHIOPIC SYLLABLE HI   (hi)
+1203   ሃ   ETHIOPIC SYLLABLE HAA  (ha)
+1204   ሄ   ETHIOPIC SYLLABLE HEE  (hE)
+1205   ህ   ETHIOPIC SYLLABLE HE   (h)
+1206   ሆ   ETHIOPIC SYLLABLE HO   (ho)
+1207   ሇ  
+1208   ለ   ETHIOPIC SYLLABLE LA   (le)
+1209   ሉ   ETHIOPIC SYLLABLE LU   (lu)
+120A   ሊ   ETHIOPIC SYLLABLE LI   (li)
+120B   ላ   ETHIOPIC SYLLABLE LAA  (la)
+120C   ሌ   ETHIOPIC SYLLABLE LEE  (lE)
+120D   ል   ETHIOPIC SYLLABLE LE   (l)
+120E   ሎ   ETHIOPIC SYLLABLE LO   (lo)
+120F   ሏ   ETHIOPIC SYLLABLE LWA  (lWa)
+1210   ሐ   ETHIOPIC SYLLABLE HHA  (He)
+1211   ሑ   ETHIOPIC SYLLABLE HHU  (Hu)
+1212   ሒ   ETHIOPIC SYLLABLE HHI  (Hi)
+1213   ሓ   ETHIOPIC SYLLABLE HHAA (Ha)
+1214   ሔ   ETHIOPIC SYLLABLE HHEE (HE)
+1215   ሕ   ETHIOPIC SYLLABLE HHE  (H)
+1216   ሖ   ETHIOPIC SYLLABLE HHO  (Ho)
+1217   ሗ   ETHIOPIC SYLLABLE HHWA (HWa)
+1218   መ   ETHIOPIC SYLLABLE MA   (me)
+1219   ሙ   ETHIOPIC SYLLABLE MU   (mu)
+121A   ሚ   ETHIOPIC SYLLABLE MI   (mi)
+121B   ማ   ETHIOPIC SYLLABLE MAA  (ma)
+121C   ሜ   ETHIOPIC SYLLABLE MEE  (mE)
+121D   ም   ETHIOPIC SYLLABLE ME   (m)
+121E   ሞ   ETHIOPIC SYLLABLE MO   (mo)
+121F   ሟ   ETHIOPIC SYLLABLE MWA  (mWa)
+1220   ሠ   ETHIOPIC SYLLABLE SZA  (`se)
+1221   ሡ   ETHIOPIC SYLLABLE SZU  (`su)
+1222   ሢ   ETHIOPIC SYLLABLE SZI  (`si)
+1223   ሣ   ETHIOPIC SYLLABLE SZAA (`sa)
+1224   ሤ   ETHIOPIC SYLLABLE SZEE (`sE)
+1225   ሥ   ETHIOPIC SYLLABLE SZE  (`s)
+1226   ሦ   ETHIOPIC SYLLABLE SZO  (`so)
+1227   ሧ   ETHIOPIC SYLLABLE SZWA (`sWa)
+1228   ረ   ETHIOPIC SYLLABLE RA   (re)
+1229   ሩ   ETHIOPIC SYLLABLE RU   (ru)
+122A   ሪ   ETHIOPIC SYLLABLE RI   (ri)
+122B   ራ   ETHIOPIC SYLLABLE RAA  (ra)
+122C   ሬ   ETHIOPIC SYLLABLE REE  (rE)
+122D   ር   ETHIOPIC SYLLABLE RE   (r)
+122E   ሮ   ETHIOPIC SYLLABLE RO   (ro)
+122F   ሯ   ETHIOPIC SYLLABLE RWA  (rWa)
+1230   ሰ   ETHIOPIC SYLLABLE SA   (se)
+1231   ሱ   ETHIOPIC SYLLABLE SU   (su)
+1232   ሲ   ETHIOPIC SYLLABLE SI   (si)
+1233   ሳ   ETHIOPIC SYLLABLE SAA  (sa)
+1234   ሴ   ETHIOPIC SYLLABLE SEE  (sE)
+1235   ስ   ETHIOPIC SYLLABLE SE   (s)
+1236   ሶ   ETHIOPIC SYLLABLE SO   (so)
+1237   ሷ   ETHIOPIC SYLLABLE SWA  (sWa)
+1238   ሸ   ETHIOPIC SYLLABLE SHA  (xe)
+1239   ሹ   ETHIOPIC SYLLABLE SHU  (xu)
+123A   ሺ   ETHIOPIC SYLLABLE SHI  (xi)
+123B   ሻ   ETHIOPIC SYLLABLE SHAA (xa)
+123C   ሼ   ETHIOPIC SYLLABLE SHEE (xE)
+123D   ሽ   ETHIOPIC SYLLABLE SHE  (xa)
+123E   ሾ   ETHIOPIC SYLLABLE SHO  (xo)
+123F   ሿ   ETHIOPIC SYLLABLE SHWA (xWa)
+1240   ቀ   ETHIOPIC SYLLABLE QA   (qe)
+1241   ቁ   ETHIOPIC SYLLABLE QU   (qu)
+1242   ቂ   ETHIOPIC SYLLABLE QI   (qi)
+1243   ቃ   ETHIOPIC SYLLABLE QAA  (qa)
+1244   ቄ   ETHIOPIC SYLLABLE QEE  (qE)
+1245   ቅ   ETHIOPIC SYLLABLE QE   (q)
+1246   ቆ   ETHIOPIC SYLLABLE QO   (qo)
+1247   ቇ   
+1248   ቈ   ETHIOPIC SYLLABLE QWA  (qWe)
+1249   ቉  
+124A   ቊ   ETHIOPIC SYLLABLE QWI  (qWi)
+124B   ቋ   ETHIOPIC SYLLABLE QWAA (qWa)
+124C   ቌ   ETHIOPIC SYLLABLE QWEE (qWE)
+124D   ቍ   ETHIOPIC SYLLABLE QWE  (qW)
+124E   ቎  
+124F   ቏  
+1250   ቐ   ETHIOPIC SYLLABLE QHA   (Qe)
+1251   ቑ   ETHIOPIC SYLLABLE QHU   (Qu) 
+1252   ቒ   ETHIOPIC SYLLABLE QHI   (Qi)
+1253   ቓ   ETHIOPIC SYLLABLE QHAA  (Qa)
+1254   ቔ   ETHIOPIC SYLLABLE QHEE  (QE)
+1255   ቕ   ETHIOPIC SYLLABLE QHE   (Q)
+1256   ቖ   ETHIOPIC SYLLABLE QHO   (Qo)
+1257   ቗  
+1258   ቘ   ETHIOPIC SYLLABLE QHWA  (QWe) 
+1259   ቙  
+125A   ቚ   ETHIOPIC SYLLABLE QHWI  (QWi)
+125B   ቛ   ETHIOPIC SYLLABLE QHWAA (QWa)
+125C   ቜ   ETHIOPIC SYLLABLE QHWEE (QWE) 
+125D   ቝ   ETHIOPIC SYLLABLE QHWE  (QW)
+125E   ቞  
+125F   ቟  
+1260   በ   ETHIOPIC SYLLABLE BA   (be)
+1261   ቡ   ETHIOPIC SYLLABLE BU   (bu)
+1262   ቢ   ETHIOPIC SYLLABLE BI   (bi)
+1263   ባ   ETHIOPIC SYLLABLE BAA  (ba)
+1264   ቤ   ETHIOPIC SYLLABLE BEE  (bE)
+1265   ብ   ETHIOPIC SYLLABLE BE   (b)
+1266   ቦ   ETHIOPIC SYLLABLE BO   (bo)
+1267   ቧ   ETHIOPIC SYLLABLE BWA  (bWa)
+1268   ቨ   ETHIOPIC SYLLABLE VA   (ve)
+1269   ቩ   ETHIOPIC SYLLABLE VU   (vu)
+126A   ቪ   ETHIOPIC SYLLABLE VI   (vi)
+126B   ቫ   ETHIOPIC SYLLABLE VAA  (va)
+126C   ቬ   ETHIOPIC SYLLABLE VEE  (vE)
+126D   ቭ   ETHIOPIC SYLLABLE VE   (v)
+126E   ቮ   ETHIOPIC SYLLABLE VO   (vo)
+126F   ቯ   ETHIOPIC SYLLABLE VWA  (vWa)
+1270   ተ   ETHIOPIC SYLLABLE TA   (te)
+1271   ቱ   ETHIOPIC SYLLABLE TU   (tu)
+1272   ቲ   ETHIOPIC SYLLABLE TI   (ti)
+1273   ታ   ETHIOPIC SYLLABLE TAA  (ta)
+1274   ቴ   ETHIOPIC SYLLABLE TEE  (tE)
+1275   ት   ETHIOPIC SYLLABLE TE   (t)
+1276   ቶ   ETHIOPIC SYLLABLE TO   (to)
+1277   ቷ   ETHIOPIC SYLLABLE TWA  (tWa)
+1278   ቸ   ETHIOPIC SYLLABLE CA   (ce)
+1279   ቹ   ETHIOPIC SYLLABLE CU   (cu)
+127A   ቺ   ETHIOPIC SYLLABLE CI   (ci)
+127B   ቻ   ETHIOPIC SYLLABLE CAA  (ca)
+127C   ቼ   ETHIOPIC SYLLABLE CEE  (cE)
+127D   ች   ETHIOPIC SYLLABLE CE   (c)
+127E   ቾ   ETHIOPIC SYLLABLE CO   (co)
+127F   ቿ   ETHIOPIC SYLLABLE CWA  (cWa)
+1280   ኀ   ETHIOPIC SYLLABLE XA   (`he)
+1281   ኁ   ETHIOPIC SYLLABLE XU   (`hu)
+1282   ኂ   ETHIOPIC SYLLABLE XI   (`hi)
+1283   ኃ   ETHIOPIC SYLLABLE XAA  (`ha)
+1284   ኄ   ETHIOPIC SYLLABLE XEE  (`hE)
+1285   ኅ   ETHIOPIC SYLLABLE XE   (`h)
+1286   ኆ   ETHIOPIC SYLLABLE XO   (`ho)
+1287   ኇ  
+1288   ኈ   ETHIOPIC SYLLABLE XWA  (hWe)
+1289   ኉  
+128A   ኊ   ETHIOPIC SYLLABLE XWI  (hWi)
+128B   ኋ   ETHIOPIC SYLLABLE XWAA (hWa)
+128C   ኌ   ETHIOPIC SYLLABLE XWEE (hWE)
+128D   ኍ   ETHIOPIC SYLLABLE XWE  (hW)
+128E   ኎  
+128F   ኏  
+1290   ነ   ETHIOPIC SYLLABLE NA   (na)
+1291   ኑ   ETHIOPIC SYLLABLE NU   (nu)
+1292   ኒ   ETHIOPIC SYLLABLE NI   (ni)
+1293   ና   ETHIOPIC SYLLABLE NAA  (na)
+1294   ኔ   ETHIOPIC SYLLABLE NEE  (nE)
+1295   ን   ETHIOPIC SYLLABLE NE   (n)
+1296   ኖ   ETHIOPIC SYLLABLE NO   (no)
+1297   ኗ   ETHIOPIC SYLLABLE NWA  (nWa)
+1298   ኘ   ETHIOPIC SYLLABLE NYA  (Ne)
+1299   ኙ   ETHIOPIC SYLLABLE NYU  (Nu)
+129A   ኚ   ETHIOPIC SYLLABLE NYI  (Ni)
+129B   ኛ   ETHIOPIC SYLLABLE NYAA (Na)
+129C   ኜ   ETHIOPIC SYLLABLE NYEE (NE)
+129D   ኝ   ETHIOPIC SYLLABLE NYE  (N)
+129E   ኞ   ETHIOPIC SYLLABLE NYO  (No)
+129F   ኟ   ETHIOPIC SYLLABLE NYWA (NWa)
+12A0   አ   ETHIOPIC SYLLABLE GLOTTAL A   (e)
+12A1   ኡ   ETHIOPIC SYLLABLE GLOTTAL U   (u)
+12A2   ኢ   ETHIOPIC SYLLABLE GLOTTAL I   (i)
+12A3   ኣ   ETHIOPIC SYLLABLE GLOTTAL AA  (a)
+12A4   ኤ   ETHIOPIC SYLLABLE GLOTTAL EE  (E)
+12A5   እ   ETHIOPIC SYLLABLE GLOTTAL E   (I)
+12A6   ኦ   ETHIOPIC SYLLABLE GLOTTAL O   (o)
+12A7   ኧ   ETHIOPIC SYLLABLE GLOTTAL WA  ae3)
+12A8   ከ   ETHIOPIC SYLLABLE KA   (ke)
+12A9   ኩ   ETHIOPIC SYLLABLE KU   (ku)
+12AA   ኪ   ETHIOPIC SYLLABLE KI   (ki)
+12AB   ካ   ETHIOPIC SYLLABLE KAA  (ka)
+12AC   ኬ   ETHIOPIC SYLLABLE KEE  (kE)
+12AD   ክ   ETHIOPIC SYLLABLE KE   (k)
+12AE   ኮ   ETHIOPIC SYLLABLE KO   (ko)
+12AF   ኯ  
+12B0   ኰ   ETHIOPIC SYLLABLE KWA  (kWe)
+12B1   ኱  
+12B2   ኲ   ETHIOPIC SYLLABLE KWI  (kWi)
+12B3   ኳ   ETHIOPIC SYLLABLE KWAA (kWa)
+12B4   ኴ   ETHIOPIC SYLLABLE KWEE (kWE)
+12B5   ኵ   ETHIOPIC SYLLABLE KWE  (kW)
+12B6   ኶  
+12B7   ኷  
+12B8   ኸ   ETHIOPIC SYLLABLE KXA   (Ke)
+12B9   ኹ   ETHIOPIC SYLLABLE KXU   (Ku)
+12BA   ኺ   ETHIOPIC SYLLABLE KXI   (Ki)
+12BB   ኻ   ETHIOPIC SYLLABLE KXAA  (Ka)
+12BC   ኼ   ETHIOPIC SYLLABLE KXEE  (KE)
+12BD   ኽ   ETHIOPIC SYLLABLE KXE   (K)
+12BE   ኾ   ETHIOPIC SYLLABLE KXO   (Ko)
+12BF   ኿  
+12C0   ዀ   ETHIOPIC SYLLABLE KXWA  (KWe)
+12C1   ዁  
+12C2   ዂ   ETHIOPIC SYLLABLE KXWI  (KWi)
+12C3   ዃ   ETHIOPIC SYLLABLE KXWAA (KWa)
+12C4   ዄ   ETHIOPIC SYLLABLE KXWEE (KWE)
+12C5   ዅ   ETHIOPIC SYLLABLE KXWE  (KW)
+12E6   ዆  
+12C7   ዇  
+12C8   ወ   ETHIOPIC SYLLABLE WA   (we)
+12C9   ዉ   ETHIOPIC SYLLABLE WU   (wu)
+12CA   ዊ   ETHIOPIC SYLLABLE WI   (wi)
+12CB   ዋ   ETHIOPIC SYLLABLE WAA  (wa)
+12CC   ዌ   ETHIOPIC SYLLABLE WEE  (wE)
+12CD   ው   ETHIOPIC SYLLABLE WE   (w)
+12CE   ዎ   ETHIOPIC SYLLABLE WO   (wo)
+12CF   ዏ  
+12D0   ዐ   ETHIOPIC SYLLABLE PHARYNGEAL A   (`e)
+12D1   ዑ   ETHIOPIC SYLLABLE PHARYNGEAL U   (`u)
+12D2   ዒ   ETHIOPIC SYLLABLE PHARYNGEAL I   (`i)
+12D3   ዓ   ETHIOPIC SYLLABLE PHARYNGEAL AA  (`a)
+12D4   ዔ   ETHIOPIC SYLLABLE PHARYNGEAL EE  (`E)
+12D5   ዕ   ETHIOPIC SYLLABLE PHARYNGEAL E   (`I)
+12D6   ዖ   ETHIOPIC SYLLABLE PHARYNGEAL O   (`o)
+12D7   ዗  
+12D8   ዘ   ETHIOPIC SYLLABLE ZA   (ze)
+12D9   ዙ   ETHIOPIC SYLLABLE ZU   (zu)
+12DA   ዚ   ETHIOPIC SYLLABLE ZI   (zi)
+12DB   ዛ   ETHIOPIC SYLLABLE ZAA  (za)
+12DC   ዜ   ETHIOPIC SYLLABLE ZEE  (zE)
+12DD   ዝ   ETHIOPIC SYLLABLE ZE   (z)
+12DE   ዞ   ETHIOPIC SYLLABLE ZO   (zo)
+12DF   ዟ   ETHIOPIC SYLLABLE ZWA  (zWa)
+12E0   ዠ   ETHIOPIC SYLLABLE ZHA  (Ze)
+12E1   ዡ   ETHIOPIC SYLLABLE ZHU  (Zu)
+12E2   ዢ   ETHIOPIC SYLLABLE ZHI  (Zi)
+12E3   ዣ   ETHIOPIC SYLLABLE ZHAA (Za)
+12E4   ዤ   ETHIOPIC SYLLABLE ZHEE (ZE)
+12E5   ዥ   ETHIOPIC SYLLABLE ZHE  (Z)
+12E6   ዦ   ETHIOPIC SYLLABLE ZHO  (Zo)
+12E7   ዧ   ETHIOPIC SYLLABLE ZHWA (ZWa)
+12E8   የ   ETHIOPIC SYLLABLE YA   (ye)
+12E9   ዩ   ETHIOPIC SYLLABLE YU   (yu)
+12EA   ዪ   ETHIOPIC SYLLABLE YI   (yi)
+12EB   ያ   ETHIOPIC SYLLABLE YAA  (ya)
+12EC   ዬ   ETHIOPIC SYLLABLE YEE  (yE)
+12ED   ይ   ETHIOPIC SYLLABLE YE   (y)
+12EE   ዮ   ETHIOPIC SYLLABLE YO   (yo)
+12EF   ዯ   ETHIOPIC SYLLABLE YWA  (yWa)
+12F0   ደ   ETHIOPIC SYLLABLE DA   (de)
+12F1   ዱ   ETHIOPIC SYLLABLE DU   (du)
+12F2   ዲ   ETHIOPIC SYLLABLE DI   (di)
+12F3   ዳ   ETHIOPIC SYLLABLE DAA  (da)
+12F4   ዴ   ETHIOPIC SYLLABLE DEE  (dE)
+12F5   ድ   ETHIOPIC SYLLABLE DE   (d)
+12F6   ዶ   ETHIOPIC SYLLABLE DO   (do)
+12F7   ዷ   ETHIOPIC SYLLABLE DWA  (dWa)
+12F8   ዸ   ETHIOPIC SYLLABLE DDA  (De)
+12F9   ዹ   ETHIOPIC SYLLABLE DDU  (Du)
+12FA   ዺ   ETHIOPIC SYLLABLE DDI  (Di)
+12FB   ዻ   ETHIOPIC SYLLABLE DDAA (Da)
+12FC   ዼ   ETHIOPIC SYLLABLE DDEE (DE)
+12FD   ዽ   ETHIOPIC SYLLABLE DDE  (D)
+12FE   ዾ   ETHIOPIC SYLLABLE DDO  (Do)
+12FF   ዿ   ETHIOPIC SYLLABLE DDWA (DWa)
+1300   ጀ   ETHIOPIC SYLLABLE JA   (je)
+1301   ጁ   ETHIOPIC SYLLABLE JU   (ju)
+1302   ጂ   ETHIOPIC SYLLABLE JI   (ji)
+1303   ጃ   ETHIOPIC SYLLABLE JAA  (ja)
+1304   ጄ   ETHIOPIC SYLLABLE JEE  (jE)
+1305   ጅ   ETHIOPIC SYLLABLE JE   (j)
+1306   ጆ   ETHIOPIC SYLLABLE JO   (jo)
+1307   ጇ   ETHIOPIC SYLLABLE JWA  (jWa)
+1308   ገ   ETHIOPIC SYLLABLE GA   (ga)
+1309   ጉ   ETHIOPIC SYLLABLE GU   (gu)
+130A   ጊ   ETHIOPIC SYLLABLE GI   (gi)
+130B   ጋ   ETHIOPIC SYLLABLE GAA  (ga)
+130C   ጌ   ETHIOPIC SYLLABLE GEE  (gE)
+130D   ግ   ETHIOPIC SYLLABLE GE   (g)
+130E   ጎ   ETHIOPIC SYLLABLE GO   (go)
+130F   ጏ  
+1310   ጐ   ETHIOPIC SYLLABLE GWU  (gWu)
+1311   ጑  
+1312   ጒ   ETHIOPIC SYLLABLE GWI  (gWi)
+1313   ጓ   ETHIOPIC SYLLABLE GWAA (gWa)
+1314   ጔ   ETHIOPIC SYLLABLE GWEE (gWE)
+1315   ጕ   ETHIOPIC SYLLABLE GWE  (gW)
+1316   ጖  
+1317   ጗  
+1318   ጘ   ETHIOPIC SYLLABLE GGA  (Ge)
+1319   ጙ   ETHIOPIC SYLLABLE GGU  (Gu)
+131A   ጚ   ETHIOPIC SYLLABLE GGI  (Gi)
+131B   ጛ   ETHIOPIC SYLLABLE GGAA (Ga)
+131C   ጜ   ETHIOPIC SYLLABLE GGEE (GE)
+131D   ጝ   ETHIOPIC SYLLABLE GGE  (G)
+131E   ጞ   ETHIOPIC SYLLABLE GGO  (Go)
+131F
+1320   ጠ   ETHIOPIC SYLLABLE THA  (Te)
+1321   ጡ   ETHIOPIC SYLLABLE THU  (Tu)
+1322   ጢ   ETHIOPIC SYLLABLE THI  (Ti)
+1323   ጣ   ETHIOPIC SYLLABLE THAA (Ta)
+1324   ጤ   ETHIOPIC SYLLABLE THEE (TE)
+1325   ጥ   ETHIOPIC SYLLABLE THE  (T)
+1326   ጦ   ETHIOPIC SYLLABLE THO  (To)
+1327   ጧ   ETHIOPIC SYLLABLE THWA (TWa)
+1328   ጨ   ETHIOPIC SYLLABLE CHA  (Ce)
+1329   ጩ   ETHIOPIC SYLLABLE CHU  (Ca)
+132A   ጪ   ETHIOPIC SYLLABLE CHI  (Cu)
+132B   ጫ   ETHIOPIC SYLLABLE CHAA (Ca)
+132C   ጬ   ETHIOPIC SYLLABLE CHEE (CE)
+132D   ጭ   ETHIOPIC SYLLABLE CHE  (C)
+132E   ጮ   ETHIOPIC SYLLABLE CHO  (Co)
+132F   ጯ   ETHIOPIC SYLLABLE CHWA (CWa)
+1330   ጰ   ETHIOPIC SYLLABLE PHA  (Pe)
+1331   ጱ   ETHIOPIC SYLLABLE PHU  (Pu)
+1332   ጲ   ETHIOPIC SYLLABLE PHI  (Pi)
+1333   ጳ   ETHIOPIC SYLLABLE PHAA (Pa)
+1334   ጴ   ETHIOPIC SYLLABLE PHEE (PE)
+1335   ጵ   ETHIOPIC SYLLABLE PHE  (P)
+1336   ጶ   ETHIOPIC SYLLABLE PHO  (Po)
+1337   ጷ   ETHIOPIC SYLLABLE PHWA (PWa)
+1338   ጸ   ETHIOPIC SYLLABLE TSA  (SWe)
+1339   ጹ   ETHIOPIC SYLLABLE TSU  (SWu)
+133A   ጺ   ETHIOPIC SYLLABLE TSI  (SWi)
+133B   ጻ   ETHIOPIC SYLLABLE TSAA (SWa)
+133C   ጼ   ETHIOPIC SYLLABLE TSEE (SWE)
+133D   ጽ   ETHIOPIC SYLLABLE TSE  (SW)
+133E   ጾ   ETHIOPIC SYLLABLE TSO  (SWo)
+133F   ጿ   ETHIOPIC SYLLABLE TSWA (SWa)
+1340   ፀ   ETHIOPIC SYLLABLE TZA  (`Sa)
+1341   ፁ   ETHIOPIC SYLLABLE TZU  (`Su)
+1342   ፂ   ETHIOPIC SYLLABLE TZI  (`Si)
+1343   ፃ   ETHIOPIC SYLLABLE TZAA (`Sa)
+1344   ፄ   ETHIOPIC SYLLABLE TZEE (`SE)
+1345   ፅ   ETHIOPIC SYLLABLE TZE  (`S)
+1346   ፆ   ETHIOPIC SYLLABLE TZO  (`So)
+1347   ፇ  
+1348   ፈ   ETHIOPIC SYLLABLE FA   (fa)
+1349   ፉ   ETHIOPIC SYLLABLE FU   (fu)
+134A   ፊ   ETHIOPIC SYLLABLE FI   (fi)
+134B   ፋ   ETHIOPIC SYLLABLE FAA  (fa)
+134C   ፌ   ETHIOPIC SYLLABLE FEE  (fE)
+134D   ፍ   ETHIOPIC SYLLABLE FE   (f)
+134E   ፎ   ETHIOPIC SYLLABLE FO   (fo)
+134F   ፏ   ETHIOPIC SYLLABLE FWA  (fWa)
+1350   ፐ   ETHIOPIC SYLLABLE PA   (pe)
+1351   ፑ   ETHIOPIC SYLLABLE PU   (pu)
+1352   ፒ   ETHIOPIC SYLLABLE PI   (pi)
+1353   ፓ   ETHIOPIC SYLLABLE PAA  (pa)
+1354   ፔ   ETHIOPIC SYLLABLE PEE  (pE)
+1355   ፕ   ETHIOPIC SYLLABLE PE   (p)
+1356   ፖ   ETHIOPIC SYLLABLE PO   (po)
+1357   ፗ   ETHIOPIC SYLLABLE PWA  (pWa)
+1358   ፘ   ETHIOPIC SYLLABLE MYA  (mYa)
+1359   ፙ   ETHIOPIC SYLLABLE RYA  (rYa)
+135A   ፚ   ETHIOPIC SYLLABLE FYA  (fYa)
+135B   ፛  
+135C   ፜  
+135D   ፝  
+135E   ፞  
+135F   ፟  
+1360   ፠   ETHIOPIC SPACE
+1361   ፡   ETHIOPIC WORDSPACE            (:)
+1362   ።   ETHIOPIC FULL STOP            (::)
+1363   ፣   ETHIOPIC COMMA                (,)
+1364   ፤   ETHIOPIC SEMICOLON            (;)
+1365   ፥   ETHIOPIC COLON                (-:)
+1366   ፦   ETHIOPIC PREFACE COLON        (:-)
+1367   ፧   ETHIOPIC QUESTION MARK        (`?)
+1368   ፨   ETHIOPIC PARAGRAPH SEPARATOR  (:|:)
+1369   ፩   ETHIOPIC DIGIT ONE            (`1)
+136A   ፪   ETHIOPIC DIGIT TWO            (`2)
+136B   ፫   ETHIOPIC DIGIT THREE          (`3)
+136C   ፬   ETHIOPIC DIGIT FOUR           (`4)
+136D   ፭   ETHIOPIC DIGIT FIVE           (`5)
+136E   ፮   ETHIOPIC DIGIT SIX            (`6)
+136F   ፯   ETHIOPIC DIGIT SEVEN          (`7)
+1370   ፰   ETHIOPIC DIGIT EIGHT          (`8)
+1371   ፱   ETHIOPIC DIGIT NINE           (`9)
+1372   ፲   ETHIOPIC NUMBER TEN           (`10)
+1373   ፳   ETHIOPIC NUMBER TWENTY        (`20)
+1374   ፴   ETHIOPIC NUMBER THIRTY        (`30)
+1375   ፵   ETHIOPIC NUMBER FORTY         (`40)
+1376   ፶   ETHIOPIC NUMBER FIFTY         (`50)
+1377   ፷   ETHIOPIC NUMBER SIXTY         (`60)
+1378   ፸   ETHIOPIC NUMBER SEVENTY       (`70)
+1379   ፹   ETHIOPIC NUMBER EIGHTY        (`80)
+137A   ፺   ETHIOPIC NUMBER NINETY        (`90)
+137B   ፻   ETHIOPIC NUMBER HUNDRED       (`100)
+137C   ፼   ETHIOPIC NUMBER TEN THOUSAND  (`10000)
diff --git a/consoletrans/vga2iso b/consoletrans/vga2iso
new file mode 100644
index 0000000..e6e28a2
--- /dev/null
+++ b/consoletrans/vga2iso
@@ -0,0 +1,129 @@
+# Internal value	Output character
+0x80    0xC0
+0x81    0xC1
+0x82    0xC2
+0x83    0xC3
+0x84    0xC4
+0x85    0xC5
+0x86    0xC6
+0x87    0xC7
+0x88    0xC8
+0x89    0xC9
+0x8A    0xCA
+0x8B    0xCB
+0x8C    0xCC
+0x8D    0xCD
+0x8E    0xCE
+0x8F    0xCF
+0x90    0xD0
+0x91    0xD1
+0x92    0xD2
+0x93    0xD3
+0x94    0xD4
+0x95    0xD5
+0x96    0xD6
+0x97    0xD7
+0x98    0xD8
+0x99    0xD9
+0x9A    0xDA
+0x9B    0xDB
+0x9C    0xDC
+0x9D    0xDD
+0x9E    0xDE
+0x9F    0xDF
+0xA0    0xA0
+0xA1    0xA1
+0xA2    0xA2
+0xA3    0xA3
+0xA4    0xA4
+0xA5    0xA5
+0xA6    0xA6
+0xA7    0xA7
+0xA8    0xA8
+0xA9    0xA9
+0xAA    0xAA
+0xAB    0xAB
+0xAC    0xAC
+0xAD    0xAD
+0xAE    0xAE
+0xAF    0xAF
+0xB0    0xB0
+0xB1    0xB1
+0xB2    0xB2
+0xB3    0xB3
+0xB4    0xB4
+0xB5    0xB5
+0xB6    0xB6
+0xB7    0xB7
+0xB8    0xB8
+0xB9    0xB9
+0xBA    0xBA
+0xBB    0xBB
+0xBC    0xBC
+0xBD    0xBD
+0xBE    0xBE
+0xBF    0xBF
+0xC0    0x80
+0xC1    0x81
+0xC2    0x82
+0xC3    0x83
+0xC4    0x84
+0xC5    0x85
+0xC6    0x86
+0xC7    0x87
+0xC8    0x88
+0xC9    0x89
+0xCA    0x8A
+0xCB    0x8B
+0xCC    0x8C
+0xCD    0x8D
+0xCE    0x8E
+0xCF    0x8F
+0xD0    0x90
+0xD1    0x91
+0xD2    0x92
+0xD3    0x93
+0xD4    0x94
+0xD5    0x95
+0xD6    0x96
+0xD7    0x97
+0xD8    0x98
+0xD9    0x99
+0xDA    0x9A
+0xDB    0x9B
+0xDC    0x9C
+0xDD    0x9D
+0xDE    0x9E
+0xDF    0x9F
+0xE0    0xE0
+0xE1    0xE1
+0xE2    0xE2
+0xE3    0xE3
+0xE4    0xE4
+0xE5    0xE5
+0xE6    0xE6
+0xE7    0xE7
+0xE8    0xE8
+0xE9    0xE9
+0xEA    0xEA
+0xEB    0xEB
+0xEC    0xEC
+0xED    0xED
+0xEE    0xEE
+0xEF    0xEF
+0xF0    0xF0
+0xF1    0xF1
+0xF2    0xF2
+0xF3    0xF3
+0xF4    0xF4
+0xF5    0xF5
+0xF6    0xF6
+0xF7    0xF7
+0xF8    0xF8
+0xF9    0xF9
+0xFA    0xFA
+0xFB    0xFB
+0xFC    0xFC
+0xFD    0xFD
+0xFE    0xFE
+0xFF    0xFF
diff --git a/consoletrans/viscii.uni b/consoletrans/viscii.uni
new file mode 100644
index 0000000..f96cf88
--- /dev/null
+++ b/consoletrans/viscii.uni
@@ -0,0 +1,144 @@
+#
+# Unicode mapping table for Vietnamese VISCII fonts
+# usage: setfont -m trivial -u viscii.uni fontname
+#
+0x00-0x01	idem
+0x02		U+1EB2
+0x03-0x04	idem
+0x05		U+1EB4
+0x06		U+1EAA
+0x07-0x13	idem
+0x14		U+1EF6
+0x15-0x18	idem
+0x19		U+1EF8
+0x1a-0x1d	idem
+0x1e		U+1EF4
+0x1f-0x7f	idem
+0x80 U+1EA0
+0x81 U+1EAE
+0x82 U+1EB0
+0x83 U+1EB6
+0x84 U+1EA4
+0x85 U+1EA6
+0x86 U+1EA8
+0x87 U+1EAC
+0x88 U+1EBC
+0x89 U+1EB8
+0x8A U+1EBE
+0x8B U+1EC0
+0x8C U+1EC2
+0x8D U+1EC4
+0x8E U+1EC6
+0x8F U+1ED0
+0x90 U+1ED2
+0x91 U+1ED4
+0x92 U+1ED6
+0x93 U+1ED8
+0x94 U+1EE2
+0x95 U+1EDA
+0x96 U+1EDC
+0x97 U+1EDE
+0x98 U+1ECA
+0x99 U+1ECE
+0x9A U+1ECC
+0x9B U+1EC8
+0x9C U+1EE6
+0x9D U+0168
+0x9E U+1EE4
+0x9F U+1EF2
+0xA0 U+00D5
+0xA1 U+1EAF
+0xA2 U+1EB1
+0xA3 U+1EB7
+0xA4 U+1EA5
+0xA5 U+1EA7
+0xA6 U+1EA9
+0xA7 U+1EAD
+0xA8 U+1EBD
+0xA9 U+1EB9
+0xAA U+1EBF
+0xAB U+1EC1
+0xAC U+1EC3
+0xAD U+1EC5
+0xAE U+1EC7
+0xAF U+1ED1
+0xB0 U+1ED3
+0xB1 U+1ED5
+0xB2 U+1ED7
+0xB3 U+1EE0
+0xB4 U+01A0
+0xB5 U+1ED9
+0xB6 U+1EDD
+0xB7 U+1EDF
+0xB8 U+1ECB
+0xB9 U+1EF0
+0xBA U+1EE8
+0xBB U+1EEA
+0xBC U+1EEC
+0xBD U+01A1
+0xBE U+1EDB
+0xBF U+01AF
+0xC0 U+00C0
+0xC1 U+00C1
+0xC2 U+00C2
+0xC3 U+00C3
+0xC4 U+1EA2
+0xC5 U+0102
+0xC6 U+1EB3
+0xC7 U+1EB5
+0xC8 U+00C8
+0xC9 U+00C9
+0xCA U+00CA
+0xCB U+1EBA
+0xCC U+00CC
+0xCD U+00CD
+0xCE U+0128
+0xCF U+1EF3
+0xD0 U+0110
+0xD1 U+1EE9
+0xD2 U+00D2
+0xD3 U+00D3
+0xD4 U+00D4
+0xD5 U+1EA1
+0xD6 U+1EF7
+0xD7 U+1EEB
+0xD8 U+1EED
+0xD9 U+00D9
+0xDA U+00DA
+0xDB U+1EF9
+0xDC U+1EF5
+0xDD U+00DD
+0xDE U+1EE1
+0xDF U+01B0
+0xE0 U+00E0
+0xE1 U+00E1
+0xE2 U+00E2
+0xE3 U+00E3
+0xE4 U+1EA3
+0xE5 U+0103
+0xE6 U+1EEF
+0xE7 U+1EAB
+0xE8 U+00E8
+0xE9 U+00E9
+0xEA U+00EA
+0xEB U+1EBB
+0xEC U+00EC
+0xED U+00ED
+0xEE U+0129
+0xEF U+1EC9
+0xF0 U+0111
+0xF1 U+1EF1
+0xF2 U+00F2
+0xF3 U+00F3
+0xF4 U+00F4
+0xF5 U+00F5
+0xF6 U+1ECF
+0xF7 U+1ECD
+0xF8 U+1EE5
+0xF9 U+00F9
+0xFA U+00FA
+0xFB U+0169
+0xFC U+1EE7
+0xFD U+00FD
+0xFE U+1EE3
+0xFF U+1EEE
diff --git a/consoletrans/viscii1.0_to_tcvn.trans b/consoletrans/viscii1.0_to_tcvn.trans
new file mode 100644
index 0000000..a7f1a1a
--- /dev/null
+++ b/consoletrans/viscii1.0_to_tcvn.trans
@@ -0,0 +1,101 @@
+#
+# this file allows using a viscii 1.0 encoded font to display TCVN
+# usage: setfont -m viscii1.0_to_tcvn.trans -u tcvn.uni fontname
+#
+# Internal value	Output character
+0xA0    0x20
+0xA1    0xc5
+0xA2    0xc2
+0xA3    0xca
+0xA4    0xd4
+0xA5    0xb4
+0xA6    0xbf
+0xA7    0xd0
+0xA8    0xe5
+0xA9    0xe2
+0xAA    0xea
+0xAB    0xf4
+0xAC    0xbd
+0xAD    0xdf
+0xAE    0xf0
+0xAF    0x20
+0xB0    0x20
+0xB1    0x20
+0xB2    0x20
+0xB3    0x20
+0xB4    0x20
+0xB5    0xe0
+0xB6    0xe4
+0xB7    0xe3
+0xB8    0xe1
+0xB9    0xa0
+0xBA    0x20
+0xBB    0xa2
+0xBC    0xc6
+0xBD    0xc7
+0xBE    0xa1
+0xBF    0x20
+0xC0    0x20
+0xC1    0x20
+0xC2    0x20
+0xC3    0x20
+0xC4    0x20
+0xC5    0x20
+0xC6    0xa3
+0xC7    0xa5
+0xC8    0xa6
+0xC9    0xe7
+0xCA    0xa4
+0xCB    0xa7
+0xCC    0xe8
+0xCD    0x20
+0xCE    0xeb
+0xCF    0xa8
+0xD0    0xe9
+0xD1    0xa9
+0xD2    0xab
+0xD3    0xac
+0xD4    0xad
+0xD5    0xaa
+0xD6    0xae
+0xD7    0xec
+0xD8    0xef
+0xD9    0x20
+0xDA    0x20
+0xDB    0x20
+0xDC    0xee
+0xDD    0xed
+0xDE    0xb8
+0xDF    0xf2
+0xE0    0x20
+0xE1    0xf6
+0xE2    0xf5
+0xE3    0xf3
+0xE4    0xf7
+0xE5    0xb5
+0xE6    0xb1
+0xE7    0xb2
+0xE8    0xaf
+0xE9    0xb5
+0xEA    0xb6
+0xEB    0xb7
+0xEC    0xde
+0xED    0xbe
+0xEE    0xfe
+0xEF    0xf9
+0xF0    0x20
+0xF1    0xfc
+0xF2    0xfb
+0xF3    0xfa
+0xF4    0xf8
+0xF5    0xd7
+0xF6    0xd8
+0xF7    0xe6
+0xF8    0xd1
+0xF9    0xf1
+0xFA    0xcf
+0xFB    0xd6
+0xFC    0xdb
+0xFD    0xfd
+0xFE    0xdc
+0xFF    0x20
diff --git a/consoletrans/viscii1.0_to_viscii1.1.trans b/consoletrans/viscii1.0_to_viscii1.1.trans
new file mode 100644
index 0000000..02580b7
--- /dev/null
+++ b/consoletrans/viscii1.0_to_viscii1.1.trans
@@ -0,0 +1,133 @@
+#
+# this file allows using a viscii 1.0 encoded font to display viscii 1.1
+# usage: setfont -m viscii1.0_to_viscii1.1.trans -u viscii.uni fontname
+#
+# Internal value	Output character
+0x80    0x80
+0x81    0x81
+0x82    0x82
+0x83    0x83
+0x84    0x84
+0x85    0x85
+0x86    0x86
+0x87    0x87
+0x88    0x88
+0x89    0x89
+0x8A    0x8A
+0x8B    0x8B
+0x8C    0x8C
+0x8D    0x8D
+0x8E    0x8E
+0x8F    0x8F
+0x90    0x90
+0x91    0x91
+0x92    0x92
+0x93    0x93
+0x94    0x94
+0x95    0x95
+0x96    0x96
+0x97    0x97
+0x98    0x98
+0x99    0x99
+0x9A    0x9A
+0x9B    0x9B
+0x9C    0x9C
+0x9D    0x9D
+0x9E    0x9E
+0x9F    0x9F
+0xA0    0xd5
+0xA1    0xA1
+0xA2    0xA2
+0xA3    0xA3
+0xA4    0xA4
+0xA5    0xA5
+0xA6    0xA6
+0xA7    0xA7
+0xA8    0xA8
+0xA9    0xA9
+0xAA    0xAA
+0xAB    0xAB
+0xAC    0xAC
+0xAD    0xAD
+0xAE    0xAE
+0xAF    0xAF
+0xB0    0xB0
+0xB1    0xB1
+0xB2    0xB2
+0xB3    0xB3
+0xB4    0xB4
+0xB5    0xB5
+0xB6    0xB6
+0xB7    0xB7
+0xB8    0xB8
+0xB9    0xB9
+0xBA    0xBA
+0xBB    0xBB
+0xBC    0xBC
+0xBD    0xBD
+0xBE    0xBE
+0xBF    0xBF
+0xC0    0xC0
+0xC1    0xC1
+0xC2    0xC2
+0xC3    0xC3
+0xC4    0xC4
+0xC5    0xC5
+0xC6    0xC6
+0xC7    0xC7
+0xC8    0xC8
+0xC9    0xC9
+0xCA    0xCA
+0xCB    0xCB
+0xCC    0xCC
+0xCD    0xCD
+0xCE    0xCE
+0xCF    0xCF
+0xD0    0xD0
+0xD1    0xD1
+0xD2    0xD2
+0xD3    0xD3
+0xD4    0xD4
+0xD5    0xa0
+0xD6    0xD6
+0xD7    0xD7
+0xD8    0xD8
+0xD9    0xD9
+0xDA    0xDA
+0xDB    0xDB
+0xDC    0xDC
+0xDD    0xDD
+0xDE    0xDE
+0xDF    0xDF
+0xE0    0xE0
+0xE1    0xE1
+0xE2    0xE2
+0xE3    0xE3
+0xE4    0xE4
+0xE5    0xE5
+0xE6    0xE6
+0xE7    0xE7
+0xE8    0xE8
+0xE9    0xE9
+0xEA    0xEA
+0xEB    0xEB
+0xEC    0xEC
+0xED    0xED
+0xEE    0xEE
+0xEF    0xEF
+0xF0    0xF0
+0xF1    0xF1
+0xF2    0xF2
+0xF3    0xF3
+0xF4    0xF4
+0xF5    0xF5
+0xF6    0xF6
+0xF7    0xF7
+0xF8    0xF8
+0xF9    0xF9
+0xFA    0xFA
+0xFB    0xFB
+0xFC    0xFC
+0xFD    0xFD
+0xFE    0xFE
+0xFF    0xFF
diff --git a/consoletrans/zero b/consoletrans/zero
new file mode 100644
index 0000000..f3094c1
--- /dev/null
+++ b/consoletrans/zero
@@ -0,0 +1,130 @@
+# Map all characters with high bit set to <none>
+# Internal value	Output character
+0x80    0x00
+0x81    0x00
+0x82    0x00
+0x83    0x00
+0x84    0x00
+0x85    0x00
+0x86    0x00
+0x87    0x00
+0x88    0x00
+0x89    0x00
+0x8A    0x00
+0x8B    0x00
+0x8C    0x00
+0x8D    0x00
+0x8E    0x00
+0x8F    0x00
+0x90    0x00
+0x91    0x00
+0x92    0x00
+0x93    0x00
+0x94    0x00
+0x95    0x00
+0x96    0x00
+0x97    0x00
+0x98    0x00
+0x99    0x00
+0x9A    0x00
+0x9B    0x00
+0x9C    0x00
+0x9D    0x00
+0x9E    0x00
+0x9F    0x00
+0xA0    0x00
+0xA1    0x00
+0xA2    0x00
+0xA3    0x00
+0xA4    0x00
+0xA5    0x00
+0xA6    0x00
+0xA7    0x00
+0xA8    0x00
+0xA9    0x00
+0xAA    0x00
+0xAB    0x00
+0xAC    0x00
+0xAD    0x00
+0xAE    0x00
+0xAF    0x00
+0xB0    0x00
+0xB1    0x00
+0xB2    0x00
+0xB3    0x00
+0xB4    0x00
+0xB5    0x00
+0xB6    0x00
+0xB7    0x00
+0xB8    0x00
+0xB9    0x00
+0xBA    0x00
+0xBB    0x00
+0xBC    0x00
+0xBD    0x00
+0xBE    0x00
+0xBF    0x00
+0xC0    0x00
+0xC1    0x00
+0xC2    0x00
+0xC3    0x00
+0xC4    0x00
+0xC5    0x00
+0xC6    0x00
+0xC7    0x00
+0xC8    0x00
+0xC9    0x00
+0xCA    0x00
+0xCB    0x00
+0xCC    0x00
+0xCD    0x00
+0xCE    0x00
+0xCF    0x00
+0xD0    0x00
+0xD1    0x00
+0xD2    0x00
+0xD3    0x00
+0xD4    0x00
+0xD5    0x00
+0xD6    0x00
+0xD7    0x00
+0xD8    0x00
+0xD9    0x00
+0xDA    0x00
+0xDB    0x00
+0xDC    0x00
+0xDD    0x00
+0xDE    0x00
+0xDF    0x00
+0xE0    0x00
+0xE1    0x00
+0xE2    0x00
+0xE3    0x00
+0xE4    0x00
+0xE5    0x00
+0xE6    0x00
+0xE7    0x00
+0xE8    0x00
+0xE9    0x00
+0xEA    0x00
+0xEB    0x00
+0xEC    0x00
+0xED    0x00
+0xEE    0x00
+0xEF    0x00
+0xF0    0x00
+0xF1    0x00
+0xF2    0x00
+0xF3    0x00
+0xF4    0x00
+0xF5    0x00
+0xF6    0x00
+0xF7    0x00
+0xF8    0x00
+0xF9    0x00
+0xFA    0x00
+0xFB    0x00
+0xFC    0x00
+0xFD    0x00
+0xFE    0x00
+0xFF    0x00
diff --git a/contrib/codepage.c b/contrib/codepage.c
new file mode 100644
index 0000000..d77f16c
--- /dev/null
+++ b/contrib/codepage.c
@@ -0,0 +1,294 @@
+/*
+ * CPI.C: A program to examine MSDOS codepage files (*.cpi)
+ * and extract specific codepages.
+ * Compiles under Linux & DOS (using BC++ 3.1).
+ *
+ * Compile: gcc -o cpi cpi.c
+ * Call: codepage file.cpi [-a|-l|nnn]
+ *
+ * Author: Ahmed M. Naas (ahmed@oea.xs4all.nl)
+ * Many changes: aeb@cwi.nl  [changed until it would handle all
+ *	*.cpi files people have sent me; I have no documentation,
+ *	so all this is experimental]
+ * Remains to do: DRDOS fonts.
+ *
+ * Copyright: Public domain.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int handle_codepage(int);
+void handle_fontfile(void);
+
+#define PACKED __attribute__ ((packed))
+/* Use this (instead of the above) to compile under MSDOS */
+/*#define PACKED  */
+
+struct {
+	unsigned char id[8] PACKED;
+	unsigned char res[8] PACKED;
+	unsigned short num_pointers PACKED;
+	unsigned char p_type PACKED;
+	unsigned long offset PACKED;
+} FontFileHeader;
+
+struct {
+	unsigned short num_codepages PACKED;
+} FontInfoHeader;
+
+struct {
+	unsigned short size PACKED;
+	unsigned long off_nexthdr PACKED;
+	unsigned short device_type PACKED; /* screen=1; printer=2 */
+	unsigned char device_name[8] PACKED;
+	unsigned short codepage PACKED;
+	unsigned char res[6] PACKED;
+	unsigned long off_font PACKED;
+} CPEntryHeader;
+
+struct {
+	unsigned short reserved PACKED;
+	unsigned short num_fonts PACKED;
+	unsigned short size PACKED;
+} CPInfoHeader;
+
+struct {
+	unsigned char height PACKED;
+	unsigned char width PACKED;
+	unsigned short reserved PACKED;
+	unsigned short num_chard PACKED;
+} ScreenFontHeader;
+
+struct {
+	unsigned short p1 PACKED;
+	unsigned short p2 PACKED;
+} PrinterFontHeader;
+
+FILE *in, *out;
+void usage(void);
+
+int opta, optc, optl, optL, optx;
+extern int optind;
+extern char *optarg;
+
+unsigned short codepage;
+
+int main (int argc, char *argv[])
+{
+	if (argc < 2)
+		usage();
+
+	if ((in = fopen(argv[1], "r")) == NULL) {
+		printf("\nUnable to open file %s.\n", argv[1]);
+		exit(0);
+	}
+
+	opta = optc = optl = optL = optx = 0;
+	optind = 2;
+	if (argc == 2)
+		optl = 1;
+	else
+	while(1) {
+	    switch(getopt(argc, argv, "alLc")) {
+	      case 'a':
+		opta = 1;
+		continue;
+	      case 'c':
+		optc = 1;
+		continue;
+	      case 'L':
+		optL = 1;
+		continue;
+	      case 'l':
+		optl = 1;
+		continue;
+	      case '?':
+	      default:
+		usage();
+	      case -1:
+		break;
+	    }
+	    break;
+        }
+	if (optind != argc) {
+	    if (optind != argc-1 || opta)
+	      usage();
+	    codepage = atoi(argv[optind]);
+	    optx = 1;
+	}
+
+	if (optc)
+	  handle_codepage(0);
+	else
+	  handle_fontfile();
+
+	if (optx) {
+	    printf("no page %d found\n", codepage);
+	    exit(1);
+	}
+
+	fclose(in);
+	return (0);
+}
+
+void
+handle_fontfile(){
+	int i, j;
+
+	j = fread(&FontFileHeader, 1, sizeof(FontFileHeader), in);
+	if (j != sizeof(FontFileHeader)) {
+	    printf("error reading FontFileHeader - got %d chars\n", j);
+	    exit (1);
+	}
+	if (!strcmp(FontFileHeader.id + 1, "DRFONT ")) {
+	    printf("this program cannot handle DRDOS font files\n");
+	    exit(1);
+	}
+	if (optL)
+	  printf("FontFileHeader: id=%8.8s res=%8.8s num=%d typ=%c offset=%ld\n\n",
+		 FontFileHeader.id, FontFileHeader.res,
+		 FontFileHeader.num_pointers,
+		 FontFileHeader.p_type,
+		 FontFileHeader.offset);
+
+	j = fread(&FontInfoHeader, 1, sizeof(FontInfoHeader), in);
+	if (j != sizeof(FontInfoHeader)) {
+	    printf("error reading FontInfoHeader - got %d chars\n", j);
+	    exit (1);
+	}
+	if (optL)
+	  printf("FontInfoHeader: num_codepages=%d\n\n",
+		 FontInfoHeader.num_codepages);
+
+	for (i = FontInfoHeader.num_codepages; i; i--)
+	  if (handle_codepage(i-1))
+	    break;
+}
+
+int
+handle_codepage(int more_to_come) {
+        int j;
+	char outfile[20];
+	unsigned char *fonts;
+	long inpos, nexthdr;
+
+	j = fread(&CPEntryHeader, 1, sizeof(CPEntryHeader), in);
+	if (j != sizeof(CPEntryHeader)) {
+	    printf("error reading CPEntryHeader - got %d chars\n", j);
+	    exit(1);
+	}
+	if (optL) {
+	    int t = CPEntryHeader.device_type;
+	    printf("CPEntryHeader: size=%d dev=%d [%s] name=%8.8s \
+codepage=%d\n\t\tres=%6.6s nxt=%ld off_font=%ld\n\n",
+		   CPEntryHeader.size,
+		   t, (t==1) ? "screen" : (t==2) ? "printer" : "?",
+		   CPEntryHeader.device_name,
+		   CPEntryHeader.codepage,
+		   CPEntryHeader.res,
+		   CPEntryHeader.off_nexthdr, CPEntryHeader.off_font);
+	} else if (optl) {
+	    printf("\nCodepage = %d\n", CPEntryHeader.codepage);
+	    printf("Device = %.8s\n", CPEntryHeader.device_name);
+	}
+#if 0
+	if (CPEntryHeader.size != sizeof(CPEntryHeader)) {
+	    /* seen 26 and 28, so that the difference below is -2 or 0 */
+	    if (optl)
+	      printf("Skipping %d bytes of garbage\n",
+		     CPEntryHeader.size - sizeof(CPEntryHeader));
+	    fseek(in, CPEntryHeader.size - sizeof(CPEntryHeader),
+		  SEEK_CUR);
+	}
+#endif
+	if (!opta && (!optx || CPEntryHeader.codepage != codepage) && !optc)
+	  goto next;
+
+	inpos = ftell(in);
+	if (inpos != CPEntryHeader.off_font && !optc) {
+	    if (optL)
+	      printf("pos=%ld font at %ld\n", inpos, CPEntryHeader.off_font);
+	    fseek(in, CPEntryHeader.off_font, SEEK_SET);
+	}
+
+	j = fread(&CPInfoHeader, 1, sizeof(CPInfoHeader), in);
+	if (j != sizeof(CPInfoHeader)) {
+	    printf("error reading CPInfoHeader - got %d chars\n", j);
+	    exit(1);
+	}
+	if (optl) {
+	    printf("Number of Fonts = %d\n", CPInfoHeader.num_fonts);
+	    printf("Size of Bitmap = %d\n", CPInfoHeader.size);
+	}
+	if (CPInfoHeader.num_fonts == 0)
+	  goto next;
+	if (optc)
+	  return 0;
+
+	sprintf(outfile, "%d.cp", CPEntryHeader.codepage);
+	if ((out = fopen(outfile, "w")) == NULL) {
+	    printf("\nUnable to open file %s.\n", outfile);
+	    exit(1);		
+	} else printf("\nWriting %s\n", outfile);
+
+	fonts = (unsigned char *) malloc(CPInfoHeader.size);
+		
+	fread(fonts, CPInfoHeader.size, 1, in);
+	fwrite(&CPEntryHeader, sizeof(CPEntryHeader), 1, out);
+	fwrite(&CPInfoHeader, sizeof(CPInfoHeader), 1, out);
+	j = fwrite(fonts, 1, CPInfoHeader.size, out);
+	if (j != CPInfoHeader.size) {
+	    printf("error writing %s - wrote %d chars\n", outfile, j);
+	    exit(1);
+	}
+	fclose(out);
+	free(fonts);
+	if (optx) exit(0);
+      next:
+	/*
+	 * It seems that if entry headers and fonts are interspersed,
+	 * then nexthdr will point past the font, regardless of
+	 * whether more entries follow.
+	 * Otherwise, first all entry headers are given, and then
+	 * all fonts; in this case nexthdr will be 0 in the last entry.
+	 */
+	nexthdr = CPEntryHeader.off_nexthdr;
+	if (nexthdr == 0 || nexthdr == -1) {
+	    if (more_to_come) {
+		printf("mode codepages expected, but nexthdr=%ld\n",
+		       nexthdr);
+		exit(1);
+	    } else
+	        return 1;
+	}
+
+	inpos = ftell(in);
+	if (inpos != CPEntryHeader.off_nexthdr) {
+	    if (optL)
+	      printf("pos=%ld nexthdr at %ld\n", inpos, nexthdr);
+	    if (opta && !more_to_come) {
+		printf("no more code pages, but nexthdr != 0\n");
+		return 1;
+	    }
+
+	    fseek(in, CPEntryHeader.off_nexthdr, SEEK_SET);
+	}
+
+	return 0;
+}
+
+void usage(void)
+{
+	printf("\nUsage: cpi code_page_file [-c] [-L] [-l] [-a|nnn]\n");
+	printf(" -c: input file is a single codepage\n");
+	printf(" -L: print header info (you don't want to see this)\n");
+	printf(" -l or no option: list all codepages contained in the file\n");
+	printf(" -a: extract all codepages from the file\n");
+	printf(" nnn (3 digits): extract codepage nnn from the file\n");
+	printf("Example: cpi ega.cpi 850 \n");
+	printf(" will create a file 850.cp containing the requested codepage.\n\n");
+	exit(1);
+}
diff --git a/contrib/fix_bs_and_del b/contrib/fix_bs_and_del
new file mode 100755
index 0000000..22a5ef0
--- /dev/null
+++ b/contrib/fix_bs_and_del
@@ -0,0 +1,11 @@
+#!/usr/bin/loadkeys
+# Make BackSpace key send a BS, and make Delete key send a DEL
+keycode  14 = BackSpace        Delete
+        control keycode  14 = Delete
+        alt     keycode  14 = Meta_Delete
+keycode 111 = Delete           Remove           Remove
+        control keycode 111 = Remove
+        shift   control keycode 111 = Remove
+        alt     keycode 111 = Remove
+        control alt     keycode 111 = Boot
+# Mark Lord
diff --git a/contrib/font2psf b/contrib/font2psf
new file mode 100644
index 0000000..6a899cc
--- /dev/null
+++ b/contrib/font2psf
@@ -0,0 +1,48 @@
+#!/bin/bash
+#written by Martin Lohner, SuSE GmbH, Dec 1998
+echo "This script converts 256 character font to psf-fonts"
+echo "It simply assumes that all files in the current directory"
+echo "that have a size of (256*n) are fontfiles of 8xn pixel" 
+echo "fonts. If there are 512 character, non-psf-fonts you will"
+echo "recognise this soon... Anyway, the setfont program isn´t"
+echo "aware of this type of fonts, too. So there shouln´d be to"
+echo "much of theese around."
+echo "This script cares for font highs of 6,8,10,12,14,16 and 19" 
+echo "pixels"
+echo ""
+echo -n "Start converting now? (Old file will not be touched) (Y/N)"
+read a
+random=hfdsvnpoh97k
+if [ $a = y   -o $a = Y ] ; then
+	echo "Creating psf-headers..."
+	echo -ne "\066" > $random
+	echo -ne "\004" >> $random
+	echo -ne "\000" >> $random
+
+	
+	echo -ne "\006" > $random.6.tmp
+	cat $random $random.6.tmp > $random.6
+	echo -ne "\010" > $random.8.tmp
+	cat $random $random.8.tmp > $random.8
+	echo -ne "\012" > $random.10.tmp
+	cat $random $random.10.tmp > $random.10
+	echo -ne "\014" > $random.12.tmp
+	cat $random $random.12.tmp > $random.12
+	echo -ne "\016" > $random.14.tmp
+	cat $random $random.14.tmp > $random.14
+	echo -ne "\020" > $random.16.tmp
+	cat $random $random.16.tmp > $random.16
+	echo -ne "\023" > $random.19.tmp
+	cat $random $random.19.tmp > $random.19
+	
+	for i in 6 8 10 12 14 16 19; do
+	echo "Looking for 8x"$i"-fonts..."
+		for j in `find . -maxdepth 1 -type f -size $((i*=256))c`;
+		do
+		cat $random.$i $j > $j.psf
+		done
+	done
+	rm $random.*	 
+else
+	exit 1
+fi  
diff --git a/contrib/splitfont.c b/contrib/splitfont.c
new file mode 100644
index 0000000..910ec54
--- /dev/null
+++ b/contrib/splitfont.c
@@ -0,0 +1,93 @@
+/* splitfont: extract characters from font */
+/* this is for iso fonts, no psf header, just 256 characters */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+void
+dosplit (int from, int to, char *fontbuf, int size, char *fontfile) {
+	int itemsize = size/256;
+	int i, fd;
+	char *p, *q, s;
+	char filename[4096];
+
+	if (from < 0 || from > 255 || to < 0 || to > 255) {
+		fprintf(stderr, "splitfont: bad argument %s,%s\n",
+			from, to);
+		exit(1);
+	}
+	if(strlen(fontfile) >= sizeof(filename)-4) {
+		fprintf(stderr, "splitfont: ridiculously long name\n");
+		exit(1);
+	}
+	while (from <= to) {
+		sprintf(filename, "%s.%02x", fontfile, from);
+		if ((fd = open(filename, O_WRONLY|O_CREAT, 0666)) < 0) {
+			perror("splitfont");
+			fprintf(stderr, "cannot open %s for writing\n", filename);
+		}
+		p = &fontbuf[from*itemsize];
+		if (write(fd, p, itemsize) != itemsize) {
+			perror("splitfont");
+			fprintf(stderr, "error writing %s\n", filename);
+		}
+		close(fd);
+		from++;
+	}
+}
+
+int main(int argc, char **argv) {
+	struct stat statbuf;
+	char fontbuf[4096];
+	int fd;
+	char *p, *q;
+	int from, to;
+
+	if (argc != 3) {
+		fprintf(stderr, "call: splitfont fontfile 17,23-30,...\n");
+		exit(1);
+	}
+	if (stat(argv[1], &statbuf)) {
+		perror("splitfont");
+		fprintf(stderr, "cannot stat fontfile %s", argv[1]);
+		exit(1);
+	}
+	if (statbuf.st_size > 4096) {
+		fprintf(stderr, "splitfont: file unexpectedly large\n");
+		exit(1);
+	}
+	if (statbuf.st_size % 256) {
+		fprintf(stderr, "splitfont: file size not a multiple of 256\n");
+		exit(1);
+	}
+	if ((fd = open(argv[1], O_RDONLY)) < 0) {
+		perror("splitfont");
+		fprintf(stderr, "cannot open fontfile %s", argv[1]);
+		exit(1);
+	}
+	if (read(fd, fontbuf, statbuf.st_size) != statbuf.st_size) {
+		perror("splitfont");
+		fprintf(stderr, "error reading fontfile %s", argv[1]);
+		exit(1);
+	}
+
+	p = argv[2];
+	while(1) {
+		to = from = strtoul(p,&q,0);
+		if(*q == '-') {
+			p = q+1;
+			to = strtoul(p,&q,0);
+		}
+		if(*q && *q != ',') {
+			fprintf(stderr, "splitfont: garbage in %s\n", p);
+			exit(1);
+		}
+		dosplit(from, to, fontbuf, statbuf.st_size, argv[1]);
+		if (!*q)
+			break;
+		p = q+1;
+	}
+	return 0;
+}
diff --git a/contrib/sti.c b/contrib/sti.c
new file mode 100644
index 0000000..91e07f6
--- /dev/null
+++ b/contrib/sti.c
@@ -0,0 +1,36 @@
+/*
+ * sti.c: put text in some tty input buffer - aeb, 951009
+ *
+ * You may have to be root if the tty is not your controlling tty.
+ */
+#include <stdio.h>
+#include <fcntl.h>
+#include <termios.h>
+#include <sys/ioctl.h>
+
+int
+main(int argc, char **argv) {
+    int fd;
+    char *s;
+
+    if(argc != 3) {
+	fprintf(stderr, "call: sti tty text\n");
+	exit(1);
+    }
+    fd = open(argv[1], O_RDONLY);
+    if(fd < 0) {
+	perror(argv[1]);
+	fprintf(stderr, "sti: could not open tty\n");
+	exit(1);
+    }
+    s = argv[2];
+    while(*s) {
+	if(ioctl(fd, TIOCSTI, s)) {
+	    perror("TIOCSTI");
+	    fprintf(stderr, "sti: TIOCSTI ioctl failed\n");
+	    exit(1);
+        }
+	s++;
+    }
+    return 0;
+}
diff --git a/contrib/vcstime.c b/contrib/vcstime.c
new file mode 100644
index 0000000..0e657c0
--- /dev/null
+++ b/contrib/vcstime.c
@@ -0,0 +1,50 @@
+/*
+ * vcstime.c
+ *
+ * Show time in upper right hand corner of the console screen
+ * aeb, 951202, following a suggestion by Miguel de Icaza.
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+
+void
+fatal(char *s) {
+    perror(s);
+    exit(1);
+}
+
+int
+number_of_columns() {
+    int fda;
+    unsigned char rc[2];	/* unsigned: Ranty@soon.com */
+
+    if((fda = open("/dev/vcsa0", O_RDONLY)) < 0)
+	fatal("/dev/vcsa0");
+    if(read(fda, rc, 2) != 2)
+	fatal("/dev/vcsa0");
+    close(fda);
+    return rc[1];
+}
+
+int
+main(){
+    int fd;
+    int cols = number_of_columns();
+    time_t tid;
+    struct tm *t;
+    char tijd[10];
+
+    if((fd = open("/dev/vcs0", O_WRONLY)) < 0)
+	fatal("/dev/vcs0");
+
+    while(1) {
+	lseek(fd, cols-10, 0);
+	tid = time(0);
+	t = localtime(&tid);
+	sprintf(tijd, " %02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);
+	write(fd, tijd, 9);
+	usleep(500000L);	/* or sleep(1); */
+    }
+}
diff --git a/doc/README.Crosser b/doc/README.Crosser
new file mode 100644
index 0000000..fe7cca7
--- /dev/null
+++ b/doc/README.Crosser
@@ -0,0 +1,52 @@
+# International console driver fixes for Linux kernel .99pl13
+# Eugene G. Crosser <crosser@pccross.msk.su>
+
+This package provide fixes in the kernel (console.c, keydoard.c and vt.c),
+setfont and mapscrn utilities, and fixes to the loadkey utility.
+setfont loads custom EGA/VGA fonts, mapscrn specifies screen output mapping,
+and loadkeys with this fixes provides "AltGr-Lock" state of the keyboard,
+and makes possible to specify which characters are alphabetic and therefore
+should be affected by the CapsLock.
+
+make all	-	compile utilities and binary tables
+make apply	-	apply cdiffs to the kernel code & .h files
+make install	-	install utilities in the /etc directory
+
+Utilities make use of ioctl() entries added to the kernel as follows:
+
+"setfont" accepts binary font from the file specified as a paramter.
+File size may be 2048, 3584 and 4096 bytes for 8x8, 8x14 and 8x16
+fonts respectively.
+
+"mapscrn" accepts a 256 byte translation table from the file specified as a
+parameter and passes it to the "user definable" (fourth) mapping table
+in the kernel. First 32 bytes of the file (control characters) are always 
+ignored. All screen output will be translated if a "\033(K" (or "\033)K")
+sequence was outputted to select the "user definable" table.
+
+All this witchkraft with the output mapping is nesseccary because of
+VGA architecture: it extends the character bitmap from 8 to 9 columns
+for some interval of codes on the hardware level. This is appropriate
+for certain graphic characters, but inappropriate if you have letters
+in that place ot the character table. In the latter case, you can place
+character bitmaps on not-extendable positions in the font table, and
+use appropriate mapping table. This is done for Cyrillic character set
+"koi8-r" (RFC1489).
+
+The fixes in loadkey utility are necessary because of two reasons.
+First, non-Latin based character sets (such as Cyrillic) require a
+special lock state for the keyboard. Current "shift-locks" implementation
+in the keyboard driver is inconvenient, as it does not allow "switchback"
+when the "shift" key is pressed while "shift-lock" is active.  Second, 
+with non-ISO-8859 compliant character sets one cannot easily figure out 
+if a certain character is a "lowercase letter" and should therefore be 
+affected by CapsLock.  A plus sign ('+') in front of the character 
+definition in the keymapping table is used to identify this character 
+as "affectable by CapsLock". Loadkeys utility treats lowercase latin 
+characters ('a'-'z') as affectable in any case. Effect of CapsLock is 
+to invert the "shift" state (unlike the original driver, where it always
+"shifts up").
+
+Note that if you need to make custom screen mapping default, you will
+have to output the magic escape sequence ("\033(K" or "\033)K") to every
+virtual screen in use. That can be done from /etc/profile. 
diff --git a/doc/TODO b/doc/TODO
new file mode 100644
index 0000000..ae5ad41
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,10 @@
+- selection can now cut & paste 8-bit chars, but not yet Unicode
+- compose does not work together with Unicode
+  (struct kbdiacr has three chars: base + diacr -> result,
+   but the result should be a string)
+- strings produced by a function key cannot contain \000;
+  many other places this char is excluded
+- current status (translation table, Unicode output) can be set,
+  but not read out from the kernel; thus, showfont changes the
+  status, but cannot restore it
+
diff --git a/doc/as400.kbd b/doc/as400.kbd
new file mode 100644
index 0000000..b15a65d
--- /dev/null
+++ b/doc/as400.kbd
@@ -0,0 +1,628 @@
+Edward Flottwell <edward@mudhoney.mitropa.com> wrote the following
+about his kernel patch for allowing the kernel to work with an
+adapted AS400 keyboard.
+
+(In fact no kernel patch is required - the utility setkeycodes will do.
+But the technical info below might be useful for somebody.)
+----aeb
+
+"Keyboard.c patch for IBM Keyboards" (Aug  9, 20:04):
+
+> The last 2 Weekends I spent on hacking a little bit in the keyboard code to
+> make a keyboard from a IBM AS400 Terminal work with LinuX. It's a very nice
+> piece of hardware, 122 keys and 2 kg :-), mostly used in Banks and
+> Companies. I got mine from a bank service company for 10 Marks (aprox.
+> 7.5$).
+> 
+> The patch against keyboard.c from 1.3.15 and a README is following:
+> 
+> --------------------------------schnipp-----------------------------------
+
+--- keyboard.1.3.15.orig	Wed Aug  9 12:51:28 1995
++++ keyboard.c	Wed Aug  9 13:11:56 1995
+@@ -39,6 +39,11 @@
+ #define KBD_REPORT_ERR
+ #define KBD_REPORT_UNKN
+ /* #define KBD_IS_FOCUS_9000 */
++/* #define KBD_IS_IBM_AS400 */
++
++/* When using an original IBM AS_400 Keyboard you should enable both
++ * KBD_IS_FOCUS_9000 and KBD_IS_IBM_AS400
++ */
+ 
+ #ifndef KBD_DEFMODE
+ #define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
+@@ -228,6 +233,29 @@
+ 
+ #define E1_PAUSE   119
+ 
++#ifdef KBD_IS_IBM_AS400 
++#define E0_GR      105
++#define E0_SIGN    43
++#define E0_LINE    108
++#define IBM_PF9    112
++#define IBM_PF10   113
++#define IBM_PF11   114
++#define IBM_PF12   115
++#define IBM_PF13   116
++#define IBM_PF14   117
++#define IBM_PF15   118
++#define IBM_PF16   120
++#define IBM_PF17   121
++#define IBM_PF18   122
++#define IBM_PF19   123
++#define IBM_PF20   124
++#define IBM_PF21   125
++#define IBM_PF22   126
++#define IBM_PF23   127
++#define IBM_PF24   119
++#endif
++
++
+ /*
+  * The keycodes below are randomly located in 89-95,112-118,120-127.
+  * They could be thrown away (and all occurrences below replaced by 0),
+@@ -262,6 +290,7 @@
+ #define RGN3 126
+ #define RGN4 127
+ 
++#ifndef KBD_IS_IBM_AS400
+ static unsigned char high_keys[128 - SC_LIM] = {
+   RGN1, RGN2, RGN3, RGN4, 0, 0, 0,                   /* 0x59-0x5f */
+   0, 0, 0, 0, 0, 0, 0, 0,                            /* 0x60-0x67 */
+@@ -270,6 +299,20 @@
+   FOCUS_PF4, FOCUS_PF5, FOCUS_PF6, FOCUS_PF7,        /* 0x78-0x7b */
+   FOCUS_PF8, JAP_86, FOCUS_PF10, 0                   /* 0x7c-0x7f */
+ };
++#endif
++#ifdef KBD_IS_IBM_AS400
++static unsigned char high_keys[128 - SC_LIM] = {
++  FOCUS_PF2, FOCUS_PF3, FOCUS_PF4, FOCUS_PF5, FOCUS_PF6,
++  FOCUS_PF7, FOCUS_PF8,          /* 0x59-0x5f */
++  IBM_PF9, IBM_PF10, IBM_PF11, IBM_PF12,
++  IBM_PF13, IBM_PF14, IBM_PF15, IBM_PF16,    /* 0x60-0x67 */
++  IBM_PF17, IBM_PF18, IBM_PF19, IBM_PF20, IBM_PF21, 
++  IBM_PF22, IBM_PF23, E0_PGUP, /* 0x68-0x6f */
++  E0_GR, E0_RCTRL, E0_RALT, 0, E0_SIGN, 0, IBM_PF24, E0_LINE, /* 0x70-0x77 */
++  E0_UP, E0_DEL, E0_END, E0_INS,        /* 0x78-0x7b */
++  0, E0_RIGHT, E0_PGDN, E0_HOME                /* 0x7c-0x7f */
++};
++#endif
+ 
+ /* BTC */
+ #define E0_MACRO   112
+
+--------------------------------schnipp-----------------------------------
+
+This is an explaining README.  ( README.AS400 )
+
+--------------------------------schnipp-----------------------------------
+
+	Connecting and using a non standard IBM keyboard
+
+				by 
+			Edward von Flottwell 
+		     edward@mudhoney.mitropa.com
+
+If you would like to use an old IBM 122-key AS400 Terminal keyboard with Linux,
+you should to do some small things:
+
+1. Get your 'new' keyboard from a recycling company. 
+   If you haven't done this already :-)
+2. Solder a new 5pin DIN Connector instead of the RJ/??? Plug to the wire.
+3. Patch the kernel and build an new one.
+4. Load a new keymap and fit it to your needs.
+
+I hope you managed the first step - so I'll continue with the second one:
+Get a keyboard connector from your nearest electronic-shop, cut off the
+original plug and you will hopefully find 4 colored wires: black, red,
+yellow and white. Connect them in the following way with the DIN Plug:
+
+	Wire	Signal	DIN	  ___	
+	Black	+5V	4	 / 3 \  Soldering
+	White	GND	2	(2   4)	View
+	Red	Data	3	 \1^5/
+	Yellow	Clock	1	  
+			
+BUT BE VERY CAREFUL!!! Connecting the wrong signals can damage or blow up 
+your keyboard or your mainboard! The table above comes with NO warranty,
+because I don't believe IBM always use the same type of cable :-}
+You should open the keyboard and trace the wires to find the matching out.
+And you should consult your mainboard for the keyboard-plug layout!
+
+Now you're ready to switch on the computer... Some mainboard bioses will
+produce a keyboard error. You can ignore this :-) BTW the F1 key is the 
+very left of the function-key group near the tabulator key.
+O.K., now you can try to type something, e.g. LILO: linux :-)
+You will find out that some keys are swapped, others are dead. To make all
+of the keys work apply the kernel-patch to 
+/usr/src/linux/drivers/char/keyboard.c and comment the lines with
+
+/* #define KBD_IS_FOCUS_9000 */
+/* #define KBD_IS_IBM_AS400 */
+
+out. Recompile and install the new kernel.
+
+Now you need the last missing part: the keymap. At the end of this README
+you will find an example for German users. How to make it fit to your
+national keyboard is explained in the Keystroke-HOWTO. Most other questions 
+about keymaps, scancodes,... are explained there, too. 
+I would also suggest you read the manpages of showkey and loadkeys. 
+Don't forget to load the keymap every time you boot, 
+I prefer the rc.local shellscript doing this for me :-)
+
+The keymap:
+
+#
+# File:        AS400.map
+#
+
+keycode   0 =
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+	shift alt keycode 1 = Meta_Escape
+
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+	shift alt keycode 2 = Meta_exclam
+
+keycode   3 = two              quotedbl         twosuperior
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+	shift alt keycode 3 = Meta_quotedbl
+
+keycode   4 = three            section          threesuperior
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+
+keycode   5 = four             dollar           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	shift alt keycode 5 = Meta_dollar
+    
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+	shift alt keycode 6 = Meta_percent
+       
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+	shift alt keycode 7 = Meta_ampersand
+
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+	shift alt keycode 8 = Meta_slash
+  
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+	shift alt keycode 9 = Meta_parenleft
+
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+ 	control altgr keycode 10 = Control_bracketright
+	shift alt keycode 10 = Meta_parenright
+
+keycode  11 = zero             equal            braceright
+	alt     keycode  11 = Meta_zero
+	shift alt keycode 11 = Meta_equal
+
+keycode  12 = ssharp           question         backslash
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+ 	control altgr keycode  12 = Control_backslash
+	shift alt keycode 12 = Meta_question
+	alt altgr keycode 12 = Meta_backslash
+
+keycode  13 = apostrophe       grave
+	alt     keycode  13 = Meta_equal
+	shift alt keycode 13 = Meta_grave
+
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+
+keycode  16 = q
+	altgr	keycode 16 = at
+	control keycode 16 = Control_q
+	alt	keycode 16 = Meta_q
+	shift alt keycode 16 = Meta_Q
+	altgr	alt	keycode 16 = Meta_at
+
+keycode  17 = w
+	control keycode 17 = Control_w
+	alt	keycode 17 = Meta_w
+	shift alt keycode 17 = Meta_W
+
+keycode  18 = e
+	control keycode 18 = Control_e
+	alt	keycode 18 = Meta_e
+	shift alt keycode 18 = Meta_E
+
+keycode  19 = r
+	control keycode 19 = Control_r
+	alt	keycode 19 = Meta_r
+	shift alt keycode 19 = Meta_R
+
+keycode  20 = t
+	control keycode 20 = Control_t
+	alt	keycode 20 = Meta_t
+	shift alt keycode 20 = Meta_T
+
+keycode  21 = z
+	control keycode 21 = Control_z
+	alt	keycode 21 = Meta_z
+	shift alt keycode 21 = Meta_Z
+
+keycode  22 = u
+	control keycode 22 = Control_u
+	alt	keycode 22 = Meta_u
+	shift alt keycode 22 = Meta_U
+
+keycode  23 = i
+	alt	keycode 23 = Meta_i
+	shift alt keycode 23 = Meta_I
+
+keycode  24 = o
+	control keycode 24 = Control_o
+	alt	keycode 24 = Meta_o
+	shift alt keycode 24 = Meta_O
+
+keycode  25 = p
+	control keycode 25 = Control_p
+	alt	keycode 25 = Meta_p
+	shift alt keycode 25 = Meta_P
+
+keycode  26 = +udiaeresis       +Udiaeresis
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+	shift alt keycode 26 = Meta_braceleft
+
+keycode  27 = plus             asterisk         asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+	shift alt keycode 27 = Meta_braceright
+
+keycode  28 = Return
+	alt     keycode  28 = 0x080d
+
+keycode  29 = Caps_Lock
+
+keycode  30 = a
+	control keycode 30 = Control_a
+	alt	keycode 30 = Meta_a
+	shift alt keycode 30 = Meta_A
+
+keycode  31 = s
+	control keycode 31 = Control_s
+	alt	keycode 31 = Meta_s
+	shift alt keycode 31 = Meta_S
+
+keycode  32 = d
+	control keycode 32 = Control_d
+	alt	keycode 32 = Meta_d
+	shift alt keycode 32 = Meta_D
+
+keycode  33 = f
+	control keycode 33 = Control_f
+	alt	keycode 33 = Meta_f
+	shift alt keycode 33 = Meta_F
+
+keycode  34 = g
+	control keycode 34 = Control_g
+	alt	keycode 34 = Meta_g
+	shift alt keycode 34 = Meta_G
+
+keycode  35 = h
+	alt	keycode 35 = Meta_h
+	shift alt keycode 35 = Meta_H
+
+keycode  36 = j
+	alt	keycode 36 = Meta_j
+	shift alt keycode 36 = Meta_J
+
+keycode  37 = k
+	control keycode 37 = Control_k
+	alt	keycode 37 = Meta_k
+	shift alt keycode 37 = Meta_K
+
+keycode  38 = l
+	control keycode 38 = Control_l
+	alt	keycode 38 = Meta_l
+	shift alt keycode 38 = Meta_L
+
+keycode  39 = +odiaeresis       +Odiaeresis
+	alt     keycode  39 = Meta_semicolon
+	shift alt keycode 39 = Meta_colon
+	shift keycode  39 = Odiaeresis
+
+keycode  40 = +adiaeresis       +Adiaeresis
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+	shift alt keycode 40 = Meta_quotedbl
+
+keycode  41 = asciicircum  degree
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+	shift alt keycode 41 = Meta_asciitilde
+
+keycode  42 = Shift
+
+keycode  43 = numbersign       apostrophe
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+	shift alt keycode 43 = Meta_apostrophe
+
+keycode  44 = y
+	control keycode 44 = Control_y
+	alt	keycode 44 = Meta_y
+	shift alt keycode 44 = Meta_Y
+
+keycode  45 = x
+	control keycode 45 = Control_x
+	alt	keycode 45 = Meta_x
+	shift alt keycode 45 = Meta_X
+
+keycode  46 = c
+	control keycode 46 = Control_c
+	alt	keycode 46 = Meta_c
+	shift alt keycode 46 = Meta_C
+
+keycode  47 = v
+	control keycode 47 = Control_v
+	alt	keycode 47 = Meta_v
+	shift alt keycode 47 = Meta_V
+
+keycode  48 = b
+	control keycode 48 = Control_b
+	alt	keycode 48 = Meta_b
+	shift alt keycode 48 = Meta_B
+
+keycode  49 = n
+	control keycode 49 = Control_n
+	alt	keycode 49 = Meta_n
+	shift alt keycode 49 = Meta_N
+
+keycode  50 = m
+	altgr	keycode 50 = mu
+	control keycode 50 = Control_m
+	alt	keycode 50 = Meta_m
+	shift alt keycode 50 = Meta_M
+
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+	alt shift keycode 51 = Meta_semicolon
+
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+	alt shift keycode 21 = Meta_colon
+
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+
+keycode  54 = Shift
+
+keycode  55 = KP_Multiply
+
+keycode  56 = Control
+     
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+
+keycode 58 = Control
+
+keycode  59 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+	shift alt keycode 1 = Meta_Escape
+
+keycode  60 = Control_z
+
+keycode  61 = 
+
+keycode  62 = Last_Console
+
+keycode  63 = Control_a
+
+keycode  64 = Up
+
+keycode  65 = Control_backslash
+	control keycode  99 = Control_backslash
+	alt     keycode  99 = Control_backslash
+
+keycode  66 = Control_c
+
+keycode  67 = Control_q
+
+keycode  68 = Control_s
+
+keycode  69 = Num_Lock
+
+keycode  70 = Control_r
+
+keycode  71 = KP_7
+	alt     keycode  71 = Ascii_7
+
+keycode  72 = KP_8
+	alt     keycode  72 = Ascii_8
+
+keycode  73 = KP_9
+	alt     keycode  73 = Ascii_9
+
+keycode  74 = KP_Subtract
+
+keycode  75 = KP_4
+	alt     keycode  75 = Ascii_4
+
+keycode  76 = KP_5
+	alt     keycode  76 = Ascii_5
+
+keycode  77 = KP_6
+	alt     keycode  77 = Ascii_6
+
+keycode  78 = KP_Enter
+
+keycode  79 = KP_1
+	alt     keycode  79 = Ascii_1
+
+keycode  80 = KP_2
+	alt     keycode  80 = Ascii_2
+
+keycode  81 = KP_3
+	alt     keycode  81 = Ascii_3
+
+keycode  82 = KP_0
+	alt     keycode  82 = Ascii_0
+
+keycode  83 = KP_Comma
+	altgr   control keycode  83 = Boot
+	control alt     keycode  83 = Boot
+
+keycode  84 = slash
+
+keycode  85 = Down
+
+keycode  86 = Left
+
+keycode  87 = F11              F11              Console_23
+	control keycode  87 = F11
+	alt     keycode  87 = Console_11
+	control	alt     keycode  87 = Console_11
+
+keycode  88 = F1               F11              Console_13
+	control keycode  88 = F1
+	alt     keycode  88 = Console_1
+	control	alt     keycode  88 = Console_1
+
+keycode  89 = F2               F12              Console_14
+	control keycode  89 = F2
+	alt     keycode  89 = Console_2
+	control	alt     keycode  89 = Console_2
+
+keycode  90 = F3               F13              Console_15
+	control keycode  90 = F3
+	alt     keycode  90 = Console_3
+	control	alt     keycode  90 = Console_3
+
+keycode  91 = F4               F14              Console_16
+	control keycode  91 = F4
+	alt     keycode  91 = Console_4
+	control	alt     keycode  91 = Console_4
+
+keycode  92 = F5               F15              Console_17
+	control keycode  92 = F5
+	alt     keycode  92 = Console_5
+	control	alt     keycode  92 = Console_5
+
+keycode  93 = F6               F16              Console_18
+	control keycode  93 = F6
+	alt     keycode  93 = Console_6
+	control	alt     keycode  93 = Console_6
+
+keycode  94 = F7               F17              Console_19
+	control keycode  94 = F7
+	alt     keycode  94 = Console_7
+	control	alt     keycode  94 = Console_7
+
+keycode  95 = F8               F18              Console_20
+	control keycode  95 = F8
+	alt     keycode  95 = Console_8
+	control	alt     keycode  95 = Console_8
+
+keycode  96 = KP_Enter
+
+keycode  97 = Alt
+
+keycode  98 = KP_Divide
+
+keycode  99 = 
+
+keycode 100 = AltGr
+
+keycode 101 = Break
+
+keycode 102 = Find
+
+keycode 103 = Up
+
+keycode 104 = Prior
+	shift   keycode 104 = Scroll_Backward
+
+keycode 105 = less	greater		bar
+ 	alt     keycode  86 = Meta_less
+ 	shift alt keycode  86 = Meta_greater
+	altgr alt keycode  86 = Meta_bar
+
+keycode 106 = Right
+
+keycode 107 = Select
+
+keycode 108 = F25
+
+keycode 109 = Next            
+	shift   keycode 109 = Scroll_Forward  
+
+keycode 110 = Insert          
+
+keycode 111 = Remove          
+	altgr   control keycode 111 = Boot            
+	control alt     keycode 111 = Boot            
+
+keycode 112 = F9
+keycode 113 = F10
+keycode 114 = F11
+keycode 115 = F12
+keycode 116 = Console_1
+keycode 117 = Console_2
+keycode 118 = Console_3
+keycode 119 = 
+keycode 120 = Console_4
+keycode 121 = Console_5
+keycode 122 = Console_6
+keycode 123 = Console_7
+keycode 124 = Console_8
+keycode 125 = F21
+keycode 126 = F22
+keycode 127 = F23
+
+# mom
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string F21 = ""
+string F22 = ""
+string F23 = ""
+string F24 = ""
+string F25 = ""
+string F26 = ""
+
+
diff --git a/doc/cirrus.videomodes b/doc/cirrus.videomodes
new file mode 100644
index 0000000..2a83d4e
--- /dev/null
+++ b/doc/cirrus.videomodes
@@ -0,0 +1,56 @@
+Date: Wed, 23 Nov 1994 09:14:14 +0000
+From: iek@arrc.salf.ac.uk (Ian King)
+To: aeb@cwi.nl
+Subject: kbd 0.89, source of more fonts and cirrus logic mode database
+
+Firstly thanks for the current (0.89?) kbd package.  The resize
+program is great especially when combined with the kernel patch
+on sunsite that provides extra vga modes ;-)  I enclose the saved mode
+files I have generated for my generic cirrus logic card at the bottom
+of this file (boy do they compress well 22k to 650bytes ;-)  You
+mentioned collecting a database of files for various cards in the
+resize.c source code, feel free to include these as they take a while
+to generate and save, esp when you include the kernel rebuild.
+
+Obviously I cannot guarantee they will work, but they do for me. With
+of course disclaimers about exploding monitors and VGA cards.
+
+Secondly, something you could mention in the consolefonts documentation
+is that 200 more fonts are available from any simtel mirror.  The file
+.../whatever_simtel20/screen/fntcol16.zip which contains hundreds of public
+domain PC fonts all that work with setfont directly with no conversion
+required (you can even make a VC look like a windowless mac ;-)  The only
+problem is that the /usr/lib/kbd/consolefonts directory becomes a mess.
+I have divided mine up into f16, f14, f12, ... f8 subdirectories to make
+things easier.  Fortunately all the files in fntcol16 have .f?? extensions
+which makes things much easier.
+
+Ian
+
+-------------------------------------------------------------------
+Modes included in cl-gd5428-vlb-generic.tar.gz
+
+ 80x25	 80x28	 80x30	 80x36	 80x40	 80x44	 80x50
+132x25	132x28	132x30	132x36	132x40	132x44	132x50	132x60
+
+begin 664 cl-gd5428-vlb-generic.tar.gz
+M'XL("(;"SRX" W9I9&UO9&5S+G1A<@#MVCU/%$$<Q_&!P]T[=KD#)2%JXJY6
+MY"R8V?\\G$\GN88+A$!CHX5::6$X@YA8JIB8:&&EE3$FO@4;;7P#%)1VEB3&
+MQ)> ^W %0:)2W#C<_KX4) N4G_SF=A"4/$H4&VB"<RUES.(LON][&@D>QTJG
+M7R04E^D38[AA,6<6>OA@X_9Z'+/U7F_C3[_WMY\?T=YO/MM\\>Y+Q%8FZM['
+M>?:V_JH3O?[\@8V,5L:.3?NM"Q<O7;[2OEIEC?Y?3-;9;N5LA8WV=HL'C>/L
+M\=VIQ1N=ZY/%@Z^"C;#S<U&;(=<3F?^6*_XE&46Y_X3@WZK_Y2"L=3/_S^&_
+M9/Z).^-?"3*Y?Y' OSW_03O;_^;6//L>?NM$.V/_XO\G_ ^)?^V,?RDD+_P+
+M^+>Z_XO5VL2/;/]?8O]+YE\ZM/\JZ>^_AG^K^[\T'IRYA_TOI7_ISOY+$H5_
+M?/ZWN_]=SZ]M8?_+Z%^YL_]2)_WS/X=_J_X7//_$--[_E]&_=L8_$5<2_O_'
+M^3_U?VH;Y_^RU>(#O_X_E'^C\_L_+?'^WTHW5U:?7GM2W/^?7,WW?S9Z\^DW
+M_R%K5/?XCU/_=_;X#S/_:_O\-\'K2/AO.>2?N,[]$][_V?6_'(3G;N7W__!?
+M+O^#OOX_S.=_GB2%_P3^+?HO[O]G[N?G_]F#SO\'^-^!_^'PKYWQ3T90<?XG
+M_/^OW?WO>OY,G+__Q_Z7R[]T:/]):5'XE_!O=?^7QH,FQ_Z7T;]TQC\98U3N
+M7^']G_7]G^+8_Q+Z5^[L/Y$R_?U7\&_5_X+GG][&^W^$$$(((8000@@AA! :
++EGX!=[;,B0!0  #Z
+ 
+end
+
+
+
diff --git a/doc/console.docs b/doc/console.docs
new file mode 100644
index 0000000..d55633b
--- /dev/null
+++ b/doc/console.docs
@@ -0,0 +1,394 @@
+Path: cwi.nl!sun4nl!EU.net!news.sprintlink.net!sunic!sunic.sunet.se!news.funet.fi!news.helsinki.fi!usenet
+From: Peter Jones <thanatos@drealm.org>
+Newsgroups: comp.os.linux.announce
+Subject: Linux Console Terminal Documentation
+Followup-To: comp.os.linux.misc
+Date: Sat, 30 Sep 95 16:37:05 GMT
+Organization: ?
+Lines: 331
+Approved: linux-announce@news.ornl.gov (Lars Wirzenius)
+Message-ID: <cola-liw-812479025-13056-1@oravannahka.helsinki.fi>
+NNTP-Posting-Host: kruuna.helsinki.fi
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+-----BEGIN PGP SIGNED MESSAGE-----
+
+I thought I'd do "something" for the Linux community (apart from
+co-authoring drealmBBS :-)).
+
+So, here's my first (and maybe only) issue of the Linux Console Driver
+documentation.  Anyone wanting to take this on as a support task, feel
+free - I _really_ don't have time to keep up with new 1.3.x kernels.
+
+- -- Peter
+
+Linux Console Driver
+====================
+====================
+(Everything you ever wanted to know but couldn't be bothered to look in the
+source for.)
+
+Author: Peter L Jones <thanatos@drealm.org>
+~Date: Wed Sep 27 19:12:25 BST 1995
+Kernel: 1.2.13
+Addendum for: 1.3.28
+
+
+General Processing
+==================
+I don't use UTF.  I've only covered it to the extent I can fathom from the
+source.
+
+I've not documented "hardware scrollback".
+
+In UTF mode, once a complete character is assembled, it is translated.
+
+Otherwise, the character then has its top bit set if requested and is then
+translated.
+
+A glyph is to be displayed if
+	* we've assembled a complete UTF character
+	* we translated it okay
+	* it's not a control character, or we're displaying control
+	  characters
+Otherwise, it might be a control character.
+Otherwise it's ignored.
+
+
+Glyphs
+======
+These are characters that make a mark on the display.
+
+You can never display the glyph for char(27) by transmitting ESC.
+
+You cannot display glyphs for any character in the Control Characters table,
+unless enabled.
+
+If there is a "pending newline"
+	a crlf sequence is issued prior to the glyph.
+
+If we're in "insert mode",
+	the rest of the line is shifted right; the character in the
+	last column is lost.
+
+The glyph is then displayed.
+
+If the cursor is in the last column,
+	If automatic margins are turned on,
+		the "pending newline" state is set
+	otherwise,
+		the next glyph can overwrite this one.
+Otherwise the cursor is advanced.
+
+
+Control Characters
+==================
+Control characters can occur during ESCape sequence processing.
+
+^g		bell - make a tone on the console speaker
+^h		bs - cursor to previous character (backspace)
+		(will not wrap to previous line)
+^i		tab - cursor to next tab position
+^j ^k ^l	lf - cursor to next line, scroll if end of scrolling region
+		(linefeed); if CRLF mode select, cr as well
+^m		cr - cursor to start of current line (carriage return)
+^n		charset 1, translate table G1, display control characters
+		as glyphs
+^o		charset 0, translate table G0, don't display control
+		characters as glyphs
+{-- "charset" sets the current translate table; e.g. ^n sets charset
+1, translate table G1, display control characters as glyphs - followed by
+^[[10m would leave G1 in effect but disable display of control characters as
+glyphs and display setting the top bit of glyphs --}
+
+^x ^z		cancel any ESCape sequence in progress
+^[		begin an ESCape sequence
+^?		"delete" - ignored
+128+^[		begin a CSI sequence
+
+
+ESCape Sequences
+================
+^[[		begin a CSI sequence
+^[%		begin a UTF control sequence
+^[(		begin a set G0 sequence
+^[)		begin a set G1 sequence
+^[#		begin a DEC test sequence
+^[E		cr, lf
+^[M		ri - cursor up, reverse scroll if top of scrolling region
+		(reverse index)
+^[D		lf
+^[H		set tab in the current column
+^[Z		request for terminal ID (response is ^[[?6c - VT102)
+^[7		store cursor position
+^[8		restore cursor position
+^[c		reset terminal completely
+^[>		Keypad is numeric (normal)
+^[=		Keypad is application (act as function keys)
+
+
+CSI sequences
+=============
+
+There are two formats.  Function keys are indicated by CSI [ and are dealt
+with later.  The general format is CSI (i.e. ^[[), zero to 16 parameters and
+a character to indicate the function being performed.  E.g ^[[1;43;37m.
+
+Missing parameters are defaulted.  Screen co-ordinates and movements start
+at and default to 1 (unless otherwise stated).  Parameters are named par1,
+par2 etc in the following descriptions.
+
+CSI h and CSI l can have an optional ? after the CSI and before any
+parameters.  This indicates "DEC Private" modes.  {-- Other manufacturers
+use different characters to select their private modes - Linux doesn't
+support any but DEC. --}
+
+CSI h		Set Mode sequence
+CSI l		Clear Mode sequence
+CSI n		Request report:
+		par1 = 5 - Status report: response is ^[[0n (terminal okay)
+		par1 = 6 - Cursor report: response is ^[[y;xR - where y is
+		relative if origin mode is selected
+CSI A		Cursor Up by par1 lines
+CSI F		Cursor Up by par1 lines, and to start of line
+CSI B CSI e	Cursor Down by par1 lines
+CSI E		Cursor Down by par1 lines, and to start of line
+CSI C CSI a	Cursor Right by par1 characters
+CSI D		Cursor Left by par1 characters
+CSI d		Set cursor vertical position to par1
+CSI G CSI `	Set cursor horizonal position to par1
+CSI H CSI f	Set cursor vertical position to par2 and horizontal position
+		to par1
+CSI L		Insert par1 lines
+CSI M		Delete par1 lines
+CSI @		Insert par1 characters
+CSI P		Delete par1 characters
+CSI X		Erase par1 characters (wraps around line ends)
+CSI J		Screen Erase sequence:
+		par1 = 0 - erase from cursor to end of display
+		par1 = 1 - erase from start of display to cursor
+		par1 = 2 - erase whole display
+CSI K		Line Clear sequence:
+		par1 = 0 - erase from cursor to end of line
+		par1 = 1 - erase from start of line to cursor
+		par1 = 2 - erase whole line
+CSI c		If par1 = 0 (default), requests terminal ID
+		(response is ^[[?6c - VT102)
+CSI g		Clear tabs:
+		par1 = 0 - Clears tab at the current column
+		par1 = 3 - Clears all tabs
+CSI q		Set LEDs = par1 indicates which LED to turn on -
+		0 - none, 1 - , 2 - , 3 - .
+CSI r		Set scrolling region
+		par1 - top, default and minimum 1, must be less than par2
+		par2 - bottom, default and maximum end of display
+CSI s		Store cursor position
+CSI u		Restore cursor position
+CSI m		Character Rendition sequence
+CSI ]		setterm(1) command sequence
+
+
+Set and Clear Mode Sequences
+- ----------------------------
+CSI h sets modes; CSI l clears modes.  There are two sets of modes -
+ANSI standard and DEC private.
+
+ANSI modes:
+3	Monitor (display control characters)
+4	Insert
+20	CRLF
+
+DEC modes:
+1	Cursor keys as application keys (send ^[Ox as appl, ^[[x as normal)
+3	80 (off) or 132 (on) columns
+5	Inverse video
+6	Origin mode (and go to origin)
+7	Autowrap (right margin)
+8	Autorepeat
+9	Mouse reports #1
+25	Cursor visible
+1000	Mouse reports #2
+
+
+Character Rendition Sequences
+- -----------------------------
+Each parameter is actioned in order.  You cannot get bright backgrounds
+(rather, I can't).  {-- On SVR4, attribute code 6 is used for bright
+background, if I remember correctly --}
+
+0	default (intensity normal, underline off, blink off, normal video,
+	default colours (which start as white on black))
+1	intensity bold
+2	intensity dim
+4	underline on
+5	blink on
+7	reverse video
+10	restore translate table, turn off display of control chars, don't
+	set the "top" bit of glyphs displayed
+11	disable the translate table, display control chars as glyphs, don't
+	set the "top" bit of glyphs displayed
+12	disable the translate table, display control chars as glyphs,
+	set the "top" bit of glyphs displayed
+21 22	intensity normal
+24	underline off
+25	blink off
+27	normal video
+38	underline on, set foreground colour to default
+39	underline off, set foreground colour to default
+49	set background colour to default
+30-37	set foreground colour (0-black, 1-red, 2-green, 3-brown, 4-blue,
+	5-magenta, 6-cyan, 7-white)
+40-47	set background colour
+
+
+Setterm Commmand Sequences
+- --------------------------
+The command is in par1, followed by parameters.
+
+1	Set underline colour - par2 is 0 to 15, which is 0 to 7 as above,
+	plus bold versions
+2	Set dim colour - par2 as above
+8	Store current attributes as defaults (so that CSI 0 m restores to
+	them)
+9	Set blanking interval to par2 minutes (max one hour)
+
+
+UTF Control Sequences
+=====================
+^[%@		Turn off UTF
+^[%G ^[%8	Turn on UTF (^[%8 is deprecated)
+
+
+G0/G1 Sequences
+===============
+There are two character sets, known as G0 and G1.  G0 is the default
+character set.  Each can be set to one of four mappings.  The mappings, and
+the sequences to select them, are:
+
+ G0   G1  Map  Name
+- ---- ---- ---  ----
+^[(B ^[)B  0   Normal Map (default G0 map)
+^[(0 ^[)0  1   Graphics Map (default G1 map)
+^[(U ^[)U  2   Null Map
+^[(K ^[)K  3   User Map
+
+The maps themselves are defined in "consolemap.c".  "Normal Map" translates
+the standard IBM PC ROM character set to standard 8-bit ISO Latin-1. 
+"Graphics Map" translates to the VT100 character set in graphics mode. 
+"Null Map" passed the ROM characters straight through, except BS, CR, LF,
+LL, SO, SI and ESC.  "User Map" is available to be changed in the source or
+by mapscrn(8).
+
+
+DEC Test Sequences
+==================
+Only one test, ^[#8, is defined.  This fills the display with the character
+'E' to allow the display to be centred.
+
+
+Addendum
+========
+The console driver changed in 1.3.x.  This documents the changes between
+1.2.13 and 1.3.28.
+
+Each virtual console gains a palette, which defines the actual colours used
+on the display (so you can get yellow rather than brown, for example).
+
+Font support is enhanced.
+
+In addition to ESC, some other control characters cannot have their glyphs
+displayed - ^@ ^H ^J ^L ^M ^N ^O ^[.
+
+Hardware scrollback has been enhanced.
+
+The "Normal Map" has been renamed "Latin 1 Map" (LAT1_MAP).
+
+UTF support has been enhanced.
+
+(UTF mode can be used to display the excluded control characters - display
+UTF character 0xF0cc, where cc is the hex code of the position in the ROM
+character set to display.)
+
+A new set of Nonstandard Sequences is defined, prefixed by ESC ].  (setterm
+commands are still CSI ].)
+
+Colour palette support is added.
+
+512 byte font support is added.
+
+Font height support allows the screen to resize to fit the font.
+
+Nonstandard Sequences
+- ---------------------
+^[]P	Set palette
+	Seven parameters are collected
+	par1 is the palette element to redefine
+	par2, par3 set the red component
+	par4, par5 set the green component
+	par6, par7 set the blue component
+^[]R	Resets the default palette
+
+
+- --
+Send comp.os.linux.announce submissions to: linux-announce@news.ornl.gov
+PLEASE remember a short description of the software.
+
+-----BEGIN PGP SIGNATURE-----
+Version: 2.6.2i
+
+iQCVAwUBMG1wkYQRll5MupLRAQHZRgP+IdvvxOk6svo5Gum8wY31vtyILGYuadRU
+rj84hrUAgvKZG3iaz+MOikx5PIcbxXA4LlfpPLkq9EfyT9sDJfEPYI8w+9I8bbvB
+a0G1vpDCG8WbC+G3vwVMK0fnySFjhru4JaXHCTeagUzGLXVFqD4JhWbuXkhQH08f
+9jt/ZgNgaB4=
+=m2ca
+-----END PGP SIGNATURE-----
+
+Path: cwi.nl!sun4nl!EU.net!news.sprintlink.net!tank.news.pipex.net!pipex!dispatch.news.demon.net!demon!mail2news.demon.co.uk!drealm.demon.co.uk
+From: Peter Jones <thanatos@drealm.org>
+Newsgroups: comp.os.linux.misc
+Subject: Re: Linux Console Terminal Documentation
+Date: 30 Sep 1995 20:12:27 +0100
+Organization: drealm conference system +44 (0)181 568 2204
+Lines: 35
+Message-ID: <44k4qr$6aj@drealm.drealm.org>
+References: <cola-liw-812479025-13056-1@oravannahka.helsinki.fi>
+X-NNTP-Posting-Host: drealm.demon.co.uk
+X-Newsreader: TIN [version 1.2 PL2]
+
+I (thanatos@drealm.org) wrote, in col-announce:
+[chop chop]
+: Nonstandard Sequences
+: - ---------------------
+: ^[]P	Set palette
+: 	Seven parameters are collected
+: 	par1 is the palette element to redefine
+: 	par2, par3 set the red component
+: 	par4, par5 set the green component
+: 	par6, par7 set the blue component
+: ^[]R	Resets the default palette
+
+
+This should read (i.e. it makes sense...) like this:
+
+Nonstandard Sequences
+---------------------
+^[]P	Set palette
+	Seven hex digits should follow (0-9, a-f, A-F):
+	1 is the palette element to redefine
+	2*16 + 3 set the red component
+	4*16 + 5 set the green component
+	6*16 + 7 set the blue component
+^[]R	Resets the default palette
+
+
+Hope that helps...
+
+(One day my "other" linux box (crash-n-burn...) will have colour...)
+
+-- Peter
+-- 
+Drealm Conference System -- (+44) 181 568 2204 (V.FC)
+The home of drealmBBS -------- six lines -- live chat
+
diff --git a/doc/cp1252.txt b/doc/cp1252.txt
new file mode 100644
index 0000000..5995b3f
--- /dev/null
+++ b/doc/cp1252.txt
@@ -0,0 +1,218 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=80	U+20AC	EURO SIGN
+=82	U+201A	SINGLE LOW-9 QUOTATION MARK
+=83	U+0192	LATIN SMALL LETTER F WITH HOOK
+=84	U+201E	DOUBLE LOW-9 QUOTATION MARK
+=85	U+2026	HORIZONTAL ELLIPSIS
+=86	U+2020	DAGGER
+=87	U+2021	DOUBLE DAGGER
+=88	U+02C6	MODIFIER LETTER CIRCUMFLEX ACCENT
+=89	U+2030	PER MILLE SIGN
+=8A	U+0160	LATIN CAPITAL LETTER S WITH CARON
+=8B	U+2039	SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+=8C	U+0152	LATIN CAPITAL LIGATURE OE
+=8E	U+017D	LATIN CAPITAL LETTER Z WITH CARON
+=91	U+2018	LEFT SINGLE QUOTATION MARK
+=92	U+2019	RIGHT SINGLE QUOTATION MARK
+=93	U+201C	LEFT DOUBLE QUOTATION MARK
+=94	U+201D	RIGHT DOUBLE QUOTATION MARK
+=95	U+2022	BULLET
+=96	U+2013	EN DASH
+=97	U+2014	EM DASH
+=98	U+02DC	SMALL TILDE
+=99	U+2122	TRADE MARK SIGN
+=9A	U+0161	LATIN SMALL LETTER S WITH CARON
+=9B	U+203A	SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+=9C	U+0153	LATIN SMALL LIGATURE OE
+=9E	U+017E	LATIN SMALL LETTER Z WITH CARON
+=9F	U+0178	LATIN CAPITAL LETTER Y WITH DIAERESIS
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+00A1	INVERTED EXCLAMATION MARK
+=A2	U+00A2	CENT SIGN
+=A3	U+00A3	POUND SIGN
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+00A5	YEN SIGN
+=A6	U+00A6	BROKEN BAR
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+00AA	FEMININE ORDINAL INDICATOR
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+00AF	MACRON
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+00B5	MICRO SIGN
+=B6	U+00B6	PILCROW SIGN
+=B7	U+00B7	MIDDLE DOT
+=B8	U+00B8	CEDILLA
+=B9	U+00B9	SUPERSCRIPT ONE
+=BA	U+00BA	MASCULINE ORDINAL INDICATOR
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+00BC	VULGAR FRACTION ONE QUARTER
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BE	U+00BE	VULGAR FRACTION THREE QUARTERS
+=BF	U+00BF	INVERTED QUESTION MARK
+=C0	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D0	U+00D0	LATIN CAPITAL LETTER ETH
+=D1	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
+=D2	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
+=DE	U+00DE	LATIN CAPITAL LETTER THORN
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+00E0	LATIN SMALL LETTER A WITH GRAVE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+00E8	LATIN SMALL LETTER E WITH GRAVE
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+00EC	LATIN SMALL LETTER I WITH GRAVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F0	U+00F0	LATIN SMALL LETTER ETH
+=F1	U+00F1	LATIN SMALL LETTER N WITH TILDE
+=F2	U+00F2	LATIN SMALL LETTER O WITH GRAVE
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+00F9	LATIN SMALL LETTER U WITH GRAVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
+=FE	U+00FE	LATIN SMALL LETTER THORN
+=FF	U+00FF	LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/doc/dvorak/ANSI-dvorak.gif b/doc/dvorak/ANSI-dvorak.gif
new file mode 100644
index 0000000..877d13f
--- /dev/null
+++ b/doc/dvorak/ANSI-dvorak.gif
Binary files differ
diff --git a/doc/dvorak/dvorak-l.xmodmap b/doc/dvorak/dvorak-l.xmodmap
new file mode 100644
index 0000000..d9a57d1
--- /dev/null
+++ b/doc/dvorak/dvorak-l.xmodmap
@@ -0,0 +1,92 @@
+!
+! left-handed keyboard
+!
+! Author: Jeff Bigler (jcb@mit.edu)
+! Last modified: 1997/04/18 16:41:18 by jcb@mit.edu
+!
+! This file should be given as an argument to xmodmap to
+! switch from a qwerty to a left-handed keyboard (designed
+! for amputees and other people who type with only their
+! left hand).
+!
+! The keyboard layout is:
+!
+! ~   +   [   ?   P   F   M   L   J   $   #   @   !   |
+! `   =   ]   /   p   f   m   l   j   4   3   2   1   \
+!
+!      :   Q   B   Y   U   R   S   O   >   ^   %   {
+!      ;   q   b   y   u   r   s   o   .   6   5   }
+!
+!       _   K   C   D   T   H   E   A   Z   *   &
+!       -   k   c   d   t   h   e   a   z   8   7
+!
+!        "   X   G   V   W   N   I   <   )   (
+!        '   x   g   v   w   n   i   ,   0   9
+!
+! Note that Null translations have been included as
+! comments.
+!
+! If you want to be easily able to switch the keyboard
+! back to its previous state, first run xmodmap -pke and
+! redirect the output to a file.  Then you can switch back
+! by giving that file as an argument to xmodmap.  For
+! example, if you type:
+!
+!     xmodmap -pke > /tmp/keyboard.default
+!
+! before switching the keyboard, you can then type:
+!
+!     xmodmap /tmp/keyboard.default
+!
+! to reset the keyboard to its previous state.
+!
+! Note that if you pass this file again as an argument to
+! xmodmap, you will apply these translations a second time
+! and come out with gibberish!
+!
+keysym 1 = equal plus
+keysym 2 = bracketright bracketleft
+keysym 3 = slash question
+keysym 4 = p P
+keysym 5 = f F
+keysym 6 = m M
+keysym 7 = l L
+keysym 8 = j J
+keysym 9 = 4 dollar
+keysym 0 = 3 numbersign
+keysym minus = 2 at
+keysym equal = 1 exclam
+keysym q = semicolon colon
+keysym w = q Q
+keysym e = b B
+keysym r = y Y
+keysym t = u U
+keysym y = r R
+keysym u = s S
+keysym i = o O
+keysym o = period greater
+keysym p = 6 asciicircum
+keysym bracketleft = 5 percent
+keysym bracketright = braceright braceleft
+keysym a = minus underscore
+keysym s = k K
+keysym d = c C
+keysym f = d D
+keysym g = t T
+keysym h = h H
+keysym j = e E
+keysym k = a A
+keysym l = z Z
+keysym semicolon = 8 asterisk
+keysym quoteright = 7 ampersand
+keysym z = quoteright quotedbl
+! keysym x = x X
+keysym c = g G
+! keysym v = v V
+keysym b = w W
+! keysym n = n N
+keysym m = i I
+! keysym comma = comma less
+keysym period = 0 parenright
+keysym slash = 9 parenleft
+
diff --git a/doc/dvorak/dvorak-r.xmodmap b/doc/dvorak/dvorak-r.xmodmap
new file mode 100644
index 0000000..f5b3f18
--- /dev/null
+++ b/doc/dvorak/dvorak-r.xmodmap
@@ -0,0 +1,92 @@
+!
+! right-handed keyboard
+!
+! Author: Jeff Bigler (jcb@mit.edu)
+! Last modified: 1997/04/18 16:38:05 by jcb@mit.edu
+!
+! This file should be given as an argument to xmodmap to
+! switch from a qwerty to a right-handed keyboard (designed
+! for amputees and other people who type with only their
+! right hand).
+!
+! The keyboard layout is:
+!
+! ~   !   @   #   $   J   L   M   F   P   ?   [   +   |
+! `   1   2   3   4   j   l   m   f   p   /   ]   =   \
+!
+!      %   ^   Q   >   O   R   S   U   Y   B   :   {
+!      5   6   q   .   o   r   s   u   y   b   ;   }
+!
+!       &   *   Z   A   E   H   T   D   C   K   _
+!       7   8   z   a   e   h   t   d   c   k   -
+!
+!        (   )   X   <   I   N   W   V   G   "
+!        9   0   x   ,   i   n   w   v   g   '
+!
+! Note that Null translations have been included as
+! comments.
+!
+! If you want to be easily able to switch the keyboard
+! back to its previous state, first run xmodmap -pke and
+! redirect the output to a file.  Then you can switch back
+! by giving that file as an argument to xmodmap.  For
+! example, if you type:
+!
+!     xmodmap -pke > /tmp/keyboard.default
+!
+! before switching the keyboard, you can then type:
+!
+!     xmodmap /tmp/keyboard.default
+!
+! to reset the keyboard to its previous state.
+!
+! Note that if you pass this file again as an argument to
+! xmodmap, you will apply these translations a second time
+! and come out with gibberish!
+!
+! keysym 1 = 1 exclam
+! keysym 2 = 2 at
+! keysym 3 = 3 numbersign
+! keysym 4 = 4 dollar
+keysym 5 = j J
+keysym 6 = l L
+keysym 7 = m M
+keysym 8 = f F
+keysym 9 = p P
+keysym 0 = slash question
+keysym minus = bracketright bracketleft
+! keysym equal = equal plus
+keysym q = 5 percent
+keysym w = 6 asciicircum
+keysym e = q Q
+keysym r = period greater
+keysym t = o O
+keysym y = r R
+keysym u = s S
+keysym i = u U
+keysym o = y Y
+keysym p = b B
+keysym bracketleft = semicolon colon
+keysym bracketright = braceright braceleft
+keysym a = 7 ampersand
+keysym s = 8 asterisk
+keysym d = z Z
+keysym f = a A
+keysym g = e E
+keysym h = h H
+keysym j = t T
+keysym k = d D
+keysym l = c C
+keysym semicolon = k K
+keysym quoteright = minus underscore
+keysym z = 9 parenleft
+keysym x = 0 parenright
+keysym c = x X
+keysym v = comma less
+keysym b = i I
+keysym n = n N
+keysym m = w W
+keysym comma = v V
+keysym period = g G
+keysym slash = quoteright quotedbl
+
diff --git a/doc/dvorak/dvorak.diffs b/doc/dvorak/dvorak.diffs
new file mode 100644
index 0000000..7a1443f
--- /dev/null
+++ b/doc/dvorak/dvorak.diffs
@@ -0,0 +1,30 @@
+The gif picture here shows a Mac keyboard with ANSI-dvorak layout.
+This layout differs in three places from the dvorak layout:
+
+keycode 12:  (us.map -_)	dvorak [{	ANSI-dvorak ][
+keycode 13:  (us.map =+)	dvorak ]}	ANSI-dvorak =+
+keycode 27:  (us.map ]})	dvorak =+	ANSI-dvorak {}
+
+Of course ANSI-dvorak is illogical in that both parentheses
+are shifted, the brackets are on one key with the closing
+one unshifted, the braces are on one key with the opening
+one unshifted.
+The description given by Marcus Brooks in dvorak.txt
+coincides completely with our dvorak.map.
+==================================================================
+The xmodmap file in dvorak-l.xmodmap differs from dvorak-l.map
+in maybe 4 places:
+
+keycode  2:  (us.map 1!)	dvorak-l [{	dvorak-l.xmodmap =+
+keycode  3:  (us.map 2@)	dvorak-l ]}	dvorak-l.xmodmap ][
+keycode 27:  (us.map ]})	dvorak-l =+	dvorak-l.xmodmap }{
+keycode 14:  (us.map <BS>)	dvorak-l <BS>	dvorak-l.xmodmap \|
+==================================================================
+The xmodmap file in dvorak-r.xmodmap differs from dvorak-r.map
+in maybe 4 places:
+
+keycode 12:  (us.map -_)	dvorak-r [{	dvorak-r.xmodmap ][
+keycode 13:  (us.map =+)	dvorak-r ]}	dvorak-r.xmodmap =+
+keycode 27:  (us.map ]})        dvorak-r =+     dvorak-r.xmodmap }{
+keycode 14:  (us.map <BS>)	dvorak-r <BS>	dvorak-r.xmodmap \|
+==================================================================
diff --git a/doc/dvorak/dvorak.txt b/doc/dvorak/dvorak.txt
new file mode 100644
index 0000000..07312aa
--- /dev/null
+++ b/doc/dvorak/dvorak.txt
@@ -0,0 +1,32 @@
+
+                             Dvorak Layout Diagram
+                                       
+   By request, here's a quick typographical representation of the Dvorak
+   keyboard layout. I never put this up before because when I created my
+   pages all (more like "both of") the other Dvorak pages had layout
+   pictures. For a prettier picture, try the Dvorak International Web
+   Page or The Dvorak Keyboard by Marcos Huerta.
+   
+Shifted:
+                      { }
+   " < > P Y F G C R L ? +
+    A O E U I D H T N S _
+     : Q J K X B M W V Z
+
+Lowercase:
+                      [ ]
+   ' , . p y f g c r l / =
+    a o e u i d h t n s -
+     ; q j k x b m w v z
+
+   These are only the keys that change, plus "a" and "m", which have the
+   same positions in both QWERTY and Dvorak. This particular arrangement
+   is common to most Mac, DOS/Windows, and OS/2 Dvorak layouts, but it is
+   not strictly ANSI standard Dvorak.
+   
+   ANSI places both square brackets on the same key (requiring a shift
+   for one), omits curly brackets (which usually end up both on the same
+   key too), and leaves the +/= key on the topmost row.
+
+   
+    Marcus Brooks -- 8 December 1996
diff --git a/doc/dvorak/dvorak.xmodmap b/doc/dvorak/dvorak.xmodmap
new file mode 100644
index 0000000..896ac69
--- /dev/null
+++ b/doc/dvorak/dvorak.xmodmap
@@ -0,0 +1,83 @@
+!
+! ANSI Dvorak keyboard
+!
+! Author: Jeff Bigler (jcb@mit.edu)
+! Last modified: 1996/08/27 13:45:30 by jcb@mit.edu
+!
+! This file should be given as an argument to xmodmap to
+! switch from a qwerty to a Dvorak keyboard.
+!
+! If you want to be easily able to switch the keyboard
+! back to its previous state, first run xmodmap -pke and
+! redirect the output to a file.  Then you can switch back
+! by giving that file as an argument to xmodmap.  For
+! example, if you type:
+!
+!     xmodmap -pke > /tmp/keyboard.default
+!
+! before switching the keyboard, you can then type:
+!
+!     xmodmap /tmp/keyboard.default
+!
+! to reset the keyboard to its previous state.
+!
+! Note that if you pass this file again as an argument to
+! xmodmap, you will apply these translations a second time
+! and come out with gibberish!
+!
+keysym q = quoteright quotedbl
+keysym w = comma less
+keysym e = period greater
+keysym r = p P
+keysym t = y Y
+keysym y = f F
+keysym u = g G
+keysym i = c C
+keysym o = r R
+keysym p = l L
+keysym bracketleft = slash question
+keysym bracketright = equal plus
+keysym a = a A
+keysym s = o O
+keysym d = e E
+keysym f = u U
+keysym g = i I
+keysym h = d D
+keysym j = h H
+keysym k = t T
+keysym l = n N
+keysym semicolon = s S
+keysym quoteright = minus underscore
+keysym z = semicolon colon
+keysym x = q Q
+keysym c = j J
+keysym v = k K
+keysym b = x X
+keysym n = b B
+keysym m = m M
+keysym comma = w W
+keysym period = v V
+keysym slash = z Z
+!
+! The keysyms for the top row have been moved to the end
+! of the file (and translations that would normally have
+! no effect are still included) because of conflicts with
+! some of the extended keysyms on HP workstations.  If the
+! keysyms for the 8 and 9 keys are not defined explicitly
+! *after* the keysyms for bracketleft and bracketright,
+! they end up getting bound to "slash question" and "equal
+! plus", respectively.
+!
+keysym 1 = 1 exclam
+keysym 2 = 2 at
+keysym 3 = 3 numbersign
+keysym 4 = 4 dollar
+keysym 5 = 5 percent
+keysym 6 = 6 asciicircum
+keysym 7 = 7 ampersand
+keysym 8 = 8 asterisk
+keysym 9 = 9 parenleft
+keysym 0 = 0 parenright
+keysym minus = bracketleft braceleft
+keysym equal = bracketright braceright
+
diff --git a/doc/iso8859-1.txt b/doc/iso8859-1.txt
new file mode 100644
index 0000000..6156aca
--- /dev/null
+++ b/doc/iso8859-1.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+00A1	INVERTED EXCLAMATION MARK
+=A2	U+00A2	CENT SIGN
+=A3	U+00A3	POUND SIGN
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+00A5	YEN SIGN
+=A6	U+00A6	BROKEN BAR
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+00AA	FEMININE ORDINAL INDICATOR
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+00AF	MACRON
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+00B5	MICRO SIGN
+=B6	U+00B6	PILCROW SIGN
+=B7	U+00B7	MIDDLE DOT
+=B8	U+00B8	CEDILLA
+=B9	U+00B9	SUPERSCRIPT ONE
+=BA	U+00BA	MASCULINE ORDINAL INDICATOR
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+00BC	VULGAR FRACTION ONE QUARTER
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BE	U+00BE	VULGAR FRACTION THREE QUARTERS
+=BF	U+00BF	INVERTED QUESTION MARK
+=C0	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D0	U+00D0	LATIN CAPITAL LETTER ETH
+=D1	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
+=D2	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
+=DE	U+00DE	LATIN CAPITAL LETTER THORN
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+00E0	LATIN SMALL LETTER A WITH GRAVE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+00E8	LATIN SMALL LETTER E WITH GRAVE
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+00EC	LATIN SMALL LETTER I WITH GRAVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F0	U+00F0	LATIN SMALL LETTER ETH
+=F1	U+00F1	LATIN SMALL LETTER N WITH TILDE
+=F2	U+00F2	LATIN SMALL LETTER O WITH GRAVE
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+00F9	LATIN SMALL LETTER U WITH GRAVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
+=FE	U+00FE	LATIN SMALL LETTER THORN
+=FF	U+00FF	LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/doc/iso8859-10.txt b/doc/iso8859-10.txt
new file mode 100644
index 0000000..26debb6
--- /dev/null
+++ b/doc/iso8859-10.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+0104	LATIN CAPITAL LETTER A WITH OGONEK
+=A2	U+0112	LATIN CAPITAL LETTER E WITH MACRON
+=A3	U+0122	LATIN CAPITAL LETTER G WITH CEDILLA
+=A4	U+012A	LATIN CAPITAL LETTER I WITH MACRON
+=A5	U+0128	LATIN CAPITAL LETTER I WITH TILDE
+=A6	U+0136	LATIN CAPITAL LETTER K WITH CEDILLA
+=A7	U+00A7	SECTION SIGN
+=A8	U+013B	LATIN CAPITAL LETTER L WITH CEDILLA
+=A9	U+0110	LATIN CAPITAL LETTER D WITH STROKE
+=AA	U+0160	LATIN CAPITAL LETTER S WITH CARON
+=AB	U+0166	LATIN CAPITAL LETTER T WITH STROKE
+=AC	U+017D	LATIN CAPITAL LETTER Z WITH CARON
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+016A	LATIN CAPITAL LETTER U WITH MACRON
+=AF	U+014A	LATIN CAPITAL LETTER ENG
+=B0	U+00B0	DEGREE SIGN
+=B1	U+0105	LATIN SMALL LETTER A WITH OGONEK
+=B2	U+0113	LATIN SMALL LETTER E WITH MACRON
+=B3	U+0123	LATIN SMALL LETTER G WITH CEDILLA
+=B4	U+012B	LATIN SMALL LETTER I WITH MACRON
+=B5	U+0129	LATIN SMALL LETTER I WITH TILDE
+=B6	U+0137	LATIN SMALL LETTER K WITH CEDILLA
+=B7	U+00B7	MIDDLE DOT
+=B8	U+013C	LATIN SMALL LETTER L WITH CEDILLA
+=B9	U+0111	LATIN SMALL LETTER D WITH STROKE
+=BA	U+0161	LATIN SMALL LETTER S WITH CARON
+=BB	U+0167	LATIN SMALL LETTER T WITH STROKE
+=BC	U+017E	LATIN SMALL LETTER Z WITH CARON
+=BD	U+2015	HORIZONTAL BAR
+=BE	U+016B	LATIN SMALL LETTER U WITH MACRON
+=BF	U+014B	LATIN SMALL LETTER ENG
+=C0	U+0100	LATIN CAPITAL LETTER A WITH MACRON
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+012E	LATIN CAPITAL LETTER I WITH OGONEK
+=C8	U+010C	LATIN CAPITAL LETTER C WITH CARON
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+0118	LATIN CAPITAL LETTER E WITH OGONEK
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+0116	LATIN CAPITAL LETTER E WITH DOT ABOVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D0	U+00D0	LATIN CAPITAL LETTER ETH
+=D1	U+0145	LATIN CAPITAL LETTER N WITH CEDILLA
+=D2	U+014C	LATIN CAPITAL LETTER O WITH MACRON
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+0168	LATIN CAPITAL LETTER U WITH TILDE
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+0172	LATIN CAPITAL LETTER U WITH OGONEK
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
+=DE	U+00DE	LATIN CAPITAL LETTER THORN
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+0101	LATIN SMALL LETTER A WITH MACRON
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+012F	LATIN SMALL LETTER I WITH OGONEK
+=E8	U+010D	LATIN SMALL LETTER C WITH CARON
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+0119	LATIN SMALL LETTER E WITH OGONEK
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+0117	LATIN SMALL LETTER E WITH DOT ABOVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F0	U+00F0	LATIN SMALL LETTER ETH
+=F1	U+0146	LATIN SMALL LETTER N WITH CEDILLA
+=F2	U+014D	LATIN SMALL LETTER O WITH MACRON
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+0169	LATIN SMALL LETTER U WITH TILDE
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+0173	LATIN SMALL LETTER U WITH OGONEK
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
+=FE	U+00FE	LATIN SMALL LETTER THORN
+=FF	U+0138	LATIN SMALL LETTER KRA
diff --git a/doc/iso8859-11.txt b/doc/iso8859-11.txt
new file mode 100644
index 0000000..fff2b94
--- /dev/null
+++ b/doc/iso8859-11.txt
@@ -0,0 +1,182 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A1	U+0E01	THAI CHARACTER KO KAI
+=A2	U+0E02	THAI CHARACTER KHO KHAI
+=A3	U+0E03	THAI CHARACTER KHO KHUAT
+=A4	U+0E04	THAI CHARACTER KHO KHWAI
+=A5	U+0E05	THAI CHARACTER KHO KHON
+=A6	U+0E06	THAI CHARACTER KHO RAKHANG
+=A7	U+0E07	THAI CHARACTER NGO NGU
+=A8	U+0E08	THAI CHARACTER CHO CHAN
+=A9	U+0E09	THAI CHARACTER CHO CHING
+=AA	U+0E0A	THAI CHARACTER CHO CHANG
+=AB	U+0E0B	THAI CHARACTER SO SO
+=AC	U+0E0C	THAI CHARACTER CHO CHOE
+=AD	U+0E0D	THAI CHARACTER YO YING
+=AE	U+0E0E	THAI CHARACTER DO CHADA
+=AF	U+0E0F	THAI CHARACTER TO PATAK
+=B0	U+0E10	THAI CHARACTER THO THAN
+=B1	U+0E11	THAI CHARACTER THO NANGMONTHO
+=B2	U+0E12	THAI CHARACTER THO PHUTHAO
+=B3	U+0E13	THAI CHARACTER NO NEN
+=B4	U+0E14	THAI CHARACTER DO DEK
+=B5	U+0E15	THAI CHARACTER TO TAO
+=B6	U+0E16	THAI CHARACTER THO THUNG
+=B7	U+0E17	THAI CHARACTER THO THAHAN
+=B8	U+0E18	THAI CHARACTER THO THONG
+=B9	U+0E19	THAI CHARACTER NO NU
+=BA	U+0E1A	THAI CHARACTER BO BAIMAI
+=BB	U+0E1B	THAI CHARACTER PO PLA
+=BC	U+0E1C	THAI CHARACTER PHO PHUNG
+=BD	U+0E1D	THAI CHARACTER FO FA
+=BE	U+0E1E	THAI CHARACTER PHO PHAN
+=BF	U+0E1F	THAI CHARACTER FO FAN
+=C0	U+0E20	THAI CHARACTER PHO SAMPHAO
+=C1	U+0E21	THAI CHARACTER MO MA
+=C2	U+0E22	THAI CHARACTER YO YAK
+=C3	U+0E23	THAI CHARACTER RO RUA
+=C4	U+0E24	THAI CHARACTER RU
+=C5	U+0E25	THAI CHARACTER LO LING
+=C6	U+0E26	THAI CHARACTER LU
+=C7	U+0E27	THAI CHARACTER WO WAEN
+=C8	U+0E28	THAI CHARACTER SO SALA
+=C9	U+0E29	THAI CHARACTER SO RUSI
+=CA	U+0E2A	THAI CHARACTER SO SUA
+=CB	U+0E2B	THAI CHARACTER HO HIP
+=CC	U+0E2C	THAI CHARACTER LO CHULA
+=CD	U+0E2D	THAI CHARACTER O ANG
+=CE	U+0E2E	THAI CHARACTER HO NOKHUK
+=CF	U+0E2F	THAI CHARACTER PAIYANNOI
+=D0	U+0E30	THAI CHARACTER SARA A
+=D1	U+0E31	THAI CHARACTER MAI HAN-AKAT
+=D2	U+0E32	THAI CHARACTER SARA AA
+=D3	U+0E33	THAI CHARACTER SARA AM
+=D4	U+0E34	THAI CHARACTER SARA I
+=D5	U+0E35	THAI CHARACTER SARA II
+=D6	U+0E36	THAI CHARACTER SARA UE
+=D7	U+0E37	THAI CHARACTER SARA UEE
+=D8	U+0E38	THAI CHARACTER SARA U
+=D9	U+0E39	THAI CHARACTER SARA UU
+=DA	U+0E3A	THAI CHARACTER PHINTHU
+=DF	U+0E3F	THAI CURRENCY SYMBOL BAHT
+=E0	U+0E40	THAI CHARACTER SARA E
+=E1	U+0E41	THAI CHARACTER SARA AE
+=E2	U+0E42	THAI CHARACTER SARA O
+=E3	U+0E43	THAI CHARACTER SARA AI MAIMUAN
+=E4	U+0E44	THAI CHARACTER SARA AI MAIMALAI
+=E5	U+0E45	THAI CHARACTER LAKKHANGYAO
+=E6	U+0E46	THAI CHARACTER MAIYAMOK
+=E7	U+0E47	THAI CHARACTER MAITAIKHU
+=E8	U+0E48	THAI CHARACTER MAI EK
+=E9	U+0E49	THAI CHARACTER MAI THO
+=EA	U+0E4A	THAI CHARACTER MAI TRI
+=EB	U+0E4B	THAI CHARACTER MAI CHATTAWA
+=EC	U+0E4C	THAI CHARACTER THANTHAKHAT
+=ED	U+0E4D	THAI CHARACTER NIKHAHIT
+=EE	U+0E4E	THAI CHARACTER YAMAKKAN
+=EF	U+0E4F	THAI CHARACTER FONGMAN
+=F0	U+0E50	THAI DIGIT ZERO
+=F1	U+0E51	THAI DIGIT ONE
+=F2	U+0E52	THAI DIGIT TWO
+=F3	U+0E53	THAI DIGIT THREE
+=F4	U+0E54	THAI DIGIT FOUR
+=F5	U+0E55	THAI DIGIT FIVE
+=F6	U+0E56	THAI DIGIT SIX
+=F7	U+0E57	THAI DIGIT SEVEN
+=F8	U+0E58	THAI DIGIT EIGHT
+=F9	U+0E59	THAI DIGIT NINE
+=FA	U+0E5A	THAI CHARACTER ANGKHANKHU
+=FB	U+0E5B	THAI CHARACTER KHOMUT
diff --git a/doc/iso8859-13.txt b/doc/iso8859-13.txt
new file mode 100644
index 0000000..e7a99a6
--- /dev/null
+++ b/doc/iso8859-13.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+201D	RIGHT DOUBLE QUOTATION MARK
+=A2	U+00A2	CENT SIGN
+=A3	U+00A3	POUND SIGN
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+201E	DOUBLE LOW-9 QUOTATION MARK
+=A6	U+00A6	BROKEN BAR
+=A7	U+00A7	SECTION SIGN
+=A8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+0156	LATIN CAPITAL LETTER R WITH CEDILLA
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+00C6	LATIN CAPITAL LETTER AE
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+201C	LEFT DOUBLE QUOTATION MARK
+=B5	U+00B5	MICRO SIGN
+=B6	U+00B6	PILCROW SIGN
+=B7	U+00B7	MIDDLE DOT
+=B8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=B9	U+00B9	SUPERSCRIPT ONE
+=BA	U+0157	LATIN SMALL LETTER R WITH CEDILLA
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+00BC	VULGAR FRACTION ONE QUARTER
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BE	U+00BE	VULGAR FRACTION THREE QUARTERS
+=BF	U+00E6	LATIN SMALL LETTER AE
+=C0	U+0104	LATIN CAPITAL LETTER A WITH OGONEK
+=C1	U+012E	LATIN CAPITAL LETTER I WITH OGONEK
+=C2	U+0100	LATIN CAPITAL LETTER A WITH MACRON
+=C3	U+0106	LATIN CAPITAL LETTER C WITH ACUTE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+0118	LATIN CAPITAL LETTER E WITH OGONEK
+=C7	U+0112	LATIN CAPITAL LETTER E WITH MACRON
+=C8	U+010C	LATIN CAPITAL LETTER C WITH CARON
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+0179	LATIN CAPITAL LETTER Z WITH ACUTE
+=CB	U+0116	LATIN CAPITAL LETTER E WITH DOT ABOVE
+=CC	U+0122	LATIN CAPITAL LETTER G WITH CEDILLA
+=CD	U+0136	LATIN CAPITAL LETTER K WITH CEDILLA
+=CE	U+012A	LATIN CAPITAL LETTER I WITH MACRON
+=CF	U+013B	LATIN CAPITAL LETTER L WITH CEDILLA
+=D0	U+0160	LATIN CAPITAL LETTER S WITH CARON
+=D1	U+0143	LATIN CAPITAL LETTER N WITH ACUTE
+=D2	U+0145	LATIN CAPITAL LETTER N WITH CEDILLA
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+014C	LATIN CAPITAL LETTER O WITH MACRON
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+0172	LATIN CAPITAL LETTER U WITH OGONEK
+=D9	U+0141	LATIN CAPITAL LETTER L WITH STROKE
+=DA	U+015A	LATIN CAPITAL LETTER S WITH ACUTE
+=DB	U+016A	LATIN CAPITAL LETTER U WITH MACRON
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+017B	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+=DE	U+017D	LATIN CAPITAL LETTER Z WITH CARON
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+0105	LATIN SMALL LETTER A WITH OGONEK
+=E1	U+012F	LATIN SMALL LETTER I WITH OGONEK
+=E2	U+0101	LATIN SMALL LETTER A WITH MACRON
+=E3	U+0107	LATIN SMALL LETTER C WITH ACUTE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+0119	LATIN SMALL LETTER E WITH OGONEK
+=E7	U+0113	LATIN SMALL LETTER E WITH MACRON
+=E8	U+010D	LATIN SMALL LETTER C WITH CARON
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+017A	LATIN SMALL LETTER Z WITH ACUTE
+=EB	U+0117	LATIN SMALL LETTER E WITH DOT ABOVE
+=EC	U+0123	LATIN SMALL LETTER G WITH CEDILLA
+=ED	U+0137	LATIN SMALL LETTER K WITH CEDILLA
+=EE	U+012B	LATIN SMALL LETTER I WITH MACRON
+=EF	U+013C	LATIN SMALL LETTER L WITH CEDILLA
+=F0	U+0161	LATIN SMALL LETTER S WITH CARON
+=F1	U+0144	LATIN SMALL LETTER N WITH ACUTE
+=F2	U+0146	LATIN SMALL LETTER N WITH CEDILLA
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+014D	LATIN SMALL LETTER O WITH MACRON
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+0173	LATIN SMALL LETTER U WITH OGONEK
+=F9	U+0142	LATIN SMALL LETTER L WITH STROKE
+=FA	U+015B	LATIN SMALL LETTER S WITH ACUTE
+=FB	U+016B	LATIN SMALL LETTER U WITH MACRON
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+017C	LATIN SMALL LETTER Z WITH DOT ABOVE
+=FE	U+017E	LATIN SMALL LETTER Z WITH CARON
+=FF	U+2019	RIGHT SINGLE QUOTATION MARK
diff --git a/doc/iso8859-14.txt b/doc/iso8859-14.txt
new file mode 100644
index 0000000..c99ecf2
--- /dev/null
+++ b/doc/iso8859-14.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+1E02	LATIN CAPITAL LETTER B WITH DOT ABOVE
+=A2	U+1E03	LATIN SMALL LETTER B WITH DOT ABOVE
+=A3	U+00A3	POUND SIGN
+=A4	U+010A	LATIN CAPITAL LETTER C WITH DOT ABOVE
+=A5	U+010B	LATIN SMALL LETTER C WITH DOT ABOVE
+=A6	U+1E0A	LATIN CAPITAL LETTER D WITH DOT ABOVE
+=A7	U+00A7	SECTION SIGN
+=A8	U+1E80	LATIN CAPITAL LETTER W WITH GRAVE
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+1E82	LATIN CAPITAL LETTER W WITH ACUTE
+=AB	U+1E0B	LATIN SMALL LETTER D WITH DOT ABOVE
+=AC	U+1EF2	LATIN CAPITAL LETTER Y WITH GRAVE
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+0178	LATIN CAPITAL LETTER Y WITH DIAERESIS
+=B0	U+1E1E	LATIN CAPITAL LETTER F WITH DOT ABOVE
+=B1	U+1E1F	LATIN SMALL LETTER F WITH DOT ABOVE
+=B2	U+0120	LATIN CAPITAL LETTER G WITH DOT ABOVE
+=B3	U+0121	LATIN SMALL LETTER G WITH DOT ABOVE
+=B4	U+1E40	LATIN CAPITAL LETTER M WITH DOT ABOVE
+=B5	U+1E41	LATIN SMALL LETTER M WITH DOT ABOVE
+=B6	U+00B6	PILCROW SIGN
+=B7	U+1E56	LATIN CAPITAL LETTER P WITH DOT ABOVE
+=B8	U+1E81	LATIN SMALL LETTER W WITH GRAVE
+=B9	U+1E57	LATIN SMALL LETTER P WITH DOT ABOVE
+=BA	U+1E83	LATIN SMALL LETTER W WITH ACUTE
+=BB	U+1E60	LATIN CAPITAL LETTER S WITH DOT ABOVE
+=BC	U+1EF3	LATIN SMALL LETTER Y WITH GRAVE
+=BD	U+1E84	LATIN CAPITAL LETTER W WITH DIAERESIS
+=BE	U+1E85	LATIN SMALL LETTER W WITH DIAERESIS
+=BF	U+1E61	LATIN SMALL LETTER S WITH DOT ABOVE
+=C0	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D0	U+0174	LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+=D1	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
+=D2	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+1E6A	LATIN CAPITAL LETTER T WITH DOT ABOVE
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
+=DE	U+0176	LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+00E0	LATIN SMALL LETTER A WITH GRAVE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+00E8	LATIN SMALL LETTER E WITH GRAVE
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+00EC	LATIN SMALL LETTER I WITH GRAVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F0	U+0175	LATIN SMALL LETTER W WITH CIRCUMFLEX
+=F1	U+00F1	LATIN SMALL LETTER N WITH TILDE
+=F2	U+00F2	LATIN SMALL LETTER O WITH GRAVE
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+1E6B	LATIN SMALL LETTER T WITH DOT ABOVE
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+00F9	LATIN SMALL LETTER U WITH GRAVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
+=FE	U+0177	LATIN SMALL LETTER Y WITH CIRCUMFLEX
+=FF	U+00FF	LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/doc/iso8859-15.txt b/doc/iso8859-15.txt
new file mode 100644
index 0000000..789b22a
--- /dev/null
+++ b/doc/iso8859-15.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+00A1	INVERTED EXCLAMATION MARK
+=A2	U+00A2	CENT SIGN
+=A3	U+00A3	POUND SIGN
+=A4	U+20AC	EURO SIGN
+=A5	U+00A5	YEN SIGN
+=A6	U+0160	LATIN CAPITAL LETTER S WITH CARON
+=A7	U+00A7	SECTION SIGN
+=A8	U+0161	LATIN SMALL LETTER S WITH CARON
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+00AA	FEMININE ORDINAL INDICATOR
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+00AF	MACRON
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+017D	LATIN CAPITAL LETTER Z WITH CARON
+=B5	U+00B5	MICRO SIGN
+=B6	U+00B6	PILCROW SIGN
+=B7	U+00B7	MIDDLE DOT
+=B8	U+017E	LATIN SMALL LETTER Z WITH CARON
+=B9	U+00B9	SUPERSCRIPT ONE
+=BA	U+00BA	MASCULINE ORDINAL INDICATOR
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+0152	LATIN CAPITAL LIGATURE OE
+=BD	U+0153	LATIN SMALL LIGATURE OE
+=BE	U+0178	LATIN CAPITAL LETTER Y WITH DIAERESIS
+=BF	U+00BF	INVERTED QUESTION MARK
+=C0	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D0	U+00D0	LATIN CAPITAL LETTER ETH
+=D1	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
+=D2	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
+=DE	U+00DE	LATIN CAPITAL LETTER THORN
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+00E0	LATIN SMALL LETTER A WITH GRAVE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+00E8	LATIN SMALL LETTER E WITH GRAVE
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+00EC	LATIN SMALL LETTER I WITH GRAVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F0	U+00F0	LATIN SMALL LETTER ETH
+=F1	U+00F1	LATIN SMALL LETTER N WITH TILDE
+=F2	U+00F2	LATIN SMALL LETTER O WITH GRAVE
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+00F9	LATIN SMALL LETTER U WITH GRAVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
+=FE	U+00FE	LATIN SMALL LETTER THORN
+=FF	U+00FF	LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/doc/iso8859-2.txt b/doc/iso8859-2.txt
new file mode 100644
index 0000000..99b4f2a
--- /dev/null
+++ b/doc/iso8859-2.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+0104	LATIN CAPITAL LETTER A WITH OGONEK
+=A2	U+02D8	BREVE
+=A3	U+0141	LATIN CAPITAL LETTER L WITH STROKE
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+013D	LATIN CAPITAL LETTER L WITH CARON
+=A6	U+015A	LATIN CAPITAL LETTER S WITH ACUTE
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+0160	LATIN CAPITAL LETTER S WITH CARON
+=AA	U+015E	LATIN CAPITAL LETTER S WITH CEDILLA
+=AB	U+0164	LATIN CAPITAL LETTER T WITH CARON
+=AC	U+0179	LATIN CAPITAL LETTER Z WITH ACUTE
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+017D	LATIN CAPITAL LETTER Z WITH CARON
+=AF	U+017B	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+=B0	U+00B0	DEGREE SIGN
+=B1	U+0105	LATIN SMALL LETTER A WITH OGONEK
+=B2	U+02DB	OGONEK
+=B3	U+0142	LATIN SMALL LETTER L WITH STROKE
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+013E	LATIN SMALL LETTER L WITH CARON
+=B6	U+015B	LATIN SMALL LETTER S WITH ACUTE
+=B7	U+02C7	CARON
+=B8	U+00B8	CEDILLA
+=B9	U+0161	LATIN SMALL LETTER S WITH CARON
+=BA	U+015F	LATIN SMALL LETTER S WITH CEDILLA
+=BB	U+0165	LATIN SMALL LETTER T WITH CARON
+=BC	U+017A	LATIN SMALL LETTER Z WITH ACUTE
+=BD	U+02DD	DOUBLE ACUTE ACCENT
+=BE	U+017E	LATIN SMALL LETTER Z WITH CARON
+=BF	U+017C	LATIN SMALL LETTER Z WITH DOT ABOVE
+=C0	U+0154	LATIN CAPITAL LETTER R WITH ACUTE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+0102	LATIN CAPITAL LETTER A WITH BREVE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+0139	LATIN CAPITAL LETTER L WITH ACUTE
+=C6	U+0106	LATIN CAPITAL LETTER C WITH ACUTE
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+010C	LATIN CAPITAL LETTER C WITH CARON
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+0118	LATIN CAPITAL LETTER E WITH OGONEK
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+011A	LATIN CAPITAL LETTER E WITH CARON
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+010E	LATIN CAPITAL LETTER D WITH CARON
+=D0	U+0110	LATIN CAPITAL LETTER D WITH STROKE
+=D1	U+0143	LATIN CAPITAL LETTER N WITH ACUTE
+=D2	U+0147	LATIN CAPITAL LETTER N WITH CARON
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+0150	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+0158	LATIN CAPITAL LETTER R WITH CARON
+=D9	U+016E	LATIN CAPITAL LETTER U WITH RING ABOVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+0170	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
+=DE	U+0162	LATIN CAPITAL LETTER T WITH CEDILLA
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+0155	LATIN SMALL LETTER R WITH ACUTE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+0103	LATIN SMALL LETTER A WITH BREVE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+013A	LATIN SMALL LETTER L WITH ACUTE
+=E6	U+0107	LATIN SMALL LETTER C WITH ACUTE
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+010D	LATIN SMALL LETTER C WITH CARON
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+0119	LATIN SMALL LETTER E WITH OGONEK
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+011B	LATIN SMALL LETTER E WITH CARON
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+010F	LATIN SMALL LETTER D WITH CARON
+=F0	U+0111	LATIN SMALL LETTER D WITH STROKE
+=F1	U+0144	LATIN SMALL LETTER N WITH ACUTE
+=F2	U+0148	LATIN SMALL LETTER N WITH CARON
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+0151	LATIN SMALL LETTER O WITH DOUBLE ACUTE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+0159	LATIN SMALL LETTER R WITH CARON
+=F9	U+016F	LATIN SMALL LETTER U WITH RING ABOVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+0171	LATIN SMALL LETTER U WITH DOUBLE ACUTE
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
+=FE	U+0163	LATIN SMALL LETTER T WITH CEDILLA
+=FF	U+02D9	DOT ABOVE
diff --git a/doc/iso8859-3.txt b/doc/iso8859-3.txt
new file mode 100644
index 0000000..288c743
--- /dev/null
+++ b/doc/iso8859-3.txt
@@ -0,0 +1,184 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+0126	LATIN CAPITAL LETTER H WITH STROKE
+=A2	U+02D8	BREVE
+=A3	U+00A3	POUND SIGN
+=A4	U+00A4	CURRENCY SIGN
+=A6	U+0124	LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+0130	LATIN CAPITAL LETTER I WITH DOT ABOVE
+=AA	U+015E	LATIN CAPITAL LETTER S WITH CEDILLA
+=AB	U+011E	LATIN CAPITAL LETTER G WITH BREVE
+=AC	U+0134	LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+=AD	U+00AD	SOFT HYPHEN
+=AF	U+017B	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+=B0	U+00B0	DEGREE SIGN
+=B1	U+0127	LATIN SMALL LETTER H WITH STROKE
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+00B5	MICRO SIGN
+=B6	U+0125	LATIN SMALL LETTER H WITH CIRCUMFLEX
+=B7	U+00B7	MIDDLE DOT
+=B8	U+00B8	CEDILLA
+=B9	U+0131	LATIN SMALL LETTER DOTLESS I
+=BA	U+015F	LATIN SMALL LETTER S WITH CEDILLA
+=BB	U+011F	LATIN SMALL LETTER G WITH BREVE
+=BC	U+0135	LATIN SMALL LETTER J WITH CIRCUMFLEX
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BF	U+017C	LATIN SMALL LETTER Z WITH DOT ABOVE
+=C0	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+010A	LATIN CAPITAL LETTER C WITH DOT ABOVE
+=C6	U+0108	LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D1	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
+=D2	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+0120	LATIN CAPITAL LETTER G WITH DOT ABOVE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+011C	LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+=D9	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+016C	LATIN CAPITAL LETTER U WITH BREVE
+=DE	U+015C	LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+00E0	LATIN SMALL LETTER A WITH GRAVE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+010B	LATIN SMALL LETTER C WITH DOT ABOVE
+=E6	U+0109	LATIN SMALL LETTER C WITH CIRCUMFLEX
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+00E8	LATIN SMALL LETTER E WITH GRAVE
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+00EC	LATIN SMALL LETTER I WITH GRAVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F1	U+00F1	LATIN SMALL LETTER N WITH TILDE
+=F2	U+00F2	LATIN SMALL LETTER O WITH GRAVE
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+0121	LATIN SMALL LETTER G WITH DOT ABOVE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+011D	LATIN SMALL LETTER G WITH CIRCUMFLEX
+=F9	U+00F9	LATIN SMALL LETTER U WITH GRAVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+016D	LATIN SMALL LETTER U WITH BREVE
+=FE	U+015D	LATIN SMALL LETTER S WITH CIRCUMFLEX
+=FF	U+02D9	DOT ABOVE
diff --git a/doc/iso8859-4.txt b/doc/iso8859-4.txt
new file mode 100644
index 0000000..c6f3bf7
--- /dev/null
+++ b/doc/iso8859-4.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+0104	LATIN CAPITAL LETTER A WITH OGONEK
+=A2	U+0138	LATIN SMALL LETTER KRA
+=A3	U+0156	LATIN CAPITAL LETTER R WITH CEDILLA
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+0128	LATIN CAPITAL LETTER I WITH TILDE
+=A6	U+013B	LATIN CAPITAL LETTER L WITH CEDILLA
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+0160	LATIN CAPITAL LETTER S WITH CARON
+=AA	U+0112	LATIN CAPITAL LETTER E WITH MACRON
+=AB	U+0122	LATIN CAPITAL LETTER G WITH CEDILLA
+=AC	U+0166	LATIN CAPITAL LETTER T WITH STROKE
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+017D	LATIN CAPITAL LETTER Z WITH CARON
+=AF	U+00AF	MACRON
+=B0	U+00B0	DEGREE SIGN
+=B1	U+0105	LATIN SMALL LETTER A WITH OGONEK
+=B2	U+02DB	OGONEK
+=B3	U+0157	LATIN SMALL LETTER R WITH CEDILLA
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+0129	LATIN SMALL LETTER I WITH TILDE
+=B6	U+013C	LATIN SMALL LETTER L WITH CEDILLA
+=B7	U+02C7	CARON
+=B8	U+00B8	CEDILLA
+=B9	U+0161	LATIN SMALL LETTER S WITH CARON
+=BA	U+0113	LATIN SMALL LETTER E WITH MACRON
+=BB	U+0123	LATIN SMALL LETTER G WITH CEDILLA
+=BC	U+0167	LATIN SMALL LETTER T WITH STROKE
+=BD	U+014A	LATIN CAPITAL LETTER ENG
+=BE	U+017E	LATIN SMALL LETTER Z WITH CARON
+=BF	U+014B	LATIN SMALL LETTER ENG
+=C0	U+0100	LATIN CAPITAL LETTER A WITH MACRON
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+012E	LATIN CAPITAL LETTER I WITH OGONEK
+=C8	U+010C	LATIN CAPITAL LETTER C WITH CARON
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+0118	LATIN CAPITAL LETTER E WITH OGONEK
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+0116	LATIN CAPITAL LETTER E WITH DOT ABOVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+012A	LATIN CAPITAL LETTER I WITH MACRON
+=D0	U+0110	LATIN CAPITAL LETTER D WITH STROKE
+=D1	U+0145	LATIN CAPITAL LETTER N WITH CEDILLA
+=D2	U+014C	LATIN CAPITAL LETTER O WITH MACRON
+=D3	U+0136	LATIN CAPITAL LETTER K WITH CEDILLA
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+0172	LATIN CAPITAL LETTER U WITH OGONEK
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+0168	LATIN CAPITAL LETTER U WITH TILDE
+=DE	U+016A	LATIN CAPITAL LETTER U WITH MACRON
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+0101	LATIN SMALL LETTER A WITH MACRON
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+012F	LATIN SMALL LETTER I WITH OGONEK
+=E8	U+010D	LATIN SMALL LETTER C WITH CARON
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+0119	LATIN SMALL LETTER E WITH OGONEK
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+0117	LATIN SMALL LETTER E WITH DOT ABOVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+012B	LATIN SMALL LETTER I WITH MACRON
+=F0	U+0111	LATIN SMALL LETTER D WITH STROKE
+=F1	U+0146	LATIN SMALL LETTER N WITH CEDILLA
+=F2	U+014D	LATIN SMALL LETTER O WITH MACRON
+=F3	U+0137	LATIN SMALL LETTER K WITH CEDILLA
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+0173	LATIN SMALL LETTER U WITH OGONEK
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+0169	LATIN SMALL LETTER U WITH TILDE
+=FE	U+016B	LATIN SMALL LETTER U WITH MACRON
+=FF	U+02D9	DOT ABOVE
diff --git a/doc/iso8859-5.txt b/doc/iso8859-5.txt
new file mode 100644
index 0000000..0f90fec
--- /dev/null
+++ b/doc/iso8859-5.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+0401	CYRILLIC CAPITAL LETTER IO
+=A2	U+0402	CYRILLIC CAPITAL LETTER DJE
+=A3	U+0403	CYRILLIC CAPITAL LETTER GJE
+=A4	U+0404	CYRILLIC CAPITAL LETTER UKRAINIAN IE
+=A5	U+0405	CYRILLIC CAPITAL LETTER DZE
+=A6	U+0406	CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+=A7	U+0407	CYRILLIC CAPITAL LETTER YI
+=A8	U+0408	CYRILLIC CAPITAL LETTER JE
+=A9	U+0409	CYRILLIC CAPITAL LETTER LJE
+=AA	U+040A	CYRILLIC CAPITAL LETTER NJE
+=AB	U+040B	CYRILLIC CAPITAL LETTER TSHE
+=AC	U+040C	CYRILLIC CAPITAL LETTER KJE
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+040E	CYRILLIC CAPITAL LETTER SHORT U
+=AF	U+040F	CYRILLIC CAPITAL LETTER DZHE
+=B0	U+0410	CYRILLIC CAPITAL LETTER A
+=B1	U+0411	CYRILLIC CAPITAL LETTER BE
+=B2	U+0412	CYRILLIC CAPITAL LETTER VE
+=B3	U+0413	CYRILLIC CAPITAL LETTER GHE
+=B4	U+0414	CYRILLIC CAPITAL LETTER DE
+=B5	U+0415	CYRILLIC CAPITAL LETTER IE
+=B6	U+0416	CYRILLIC CAPITAL LETTER ZHE
+=B7	U+0417	CYRILLIC CAPITAL LETTER ZE
+=B8	U+0418	CYRILLIC CAPITAL LETTER I
+=B9	U+0419	CYRILLIC CAPITAL LETTER SHORT I
+=BA	U+041A	CYRILLIC CAPITAL LETTER KA
+=BB	U+041B	CYRILLIC CAPITAL LETTER EL
+=BC	U+041C	CYRILLIC CAPITAL LETTER EM
+=BD	U+041D	CYRILLIC CAPITAL LETTER EN
+=BE	U+041E	CYRILLIC CAPITAL LETTER O
+=BF	U+041F	CYRILLIC CAPITAL LETTER PE
+=C0	U+0420	CYRILLIC CAPITAL LETTER ER
+=C1	U+0421	CYRILLIC CAPITAL LETTER ES
+=C2	U+0422	CYRILLIC CAPITAL LETTER TE
+=C3	U+0423	CYRILLIC CAPITAL LETTER U
+=C4	U+0424	CYRILLIC CAPITAL LETTER EF
+=C5	U+0425	CYRILLIC CAPITAL LETTER HA
+=C6	U+0426	CYRILLIC CAPITAL LETTER TSE
+=C7	U+0427	CYRILLIC CAPITAL LETTER CHE
+=C8	U+0428	CYRILLIC CAPITAL LETTER SHA
+=C9	U+0429	CYRILLIC CAPITAL LETTER SHCHA
+=CA	U+042A	CYRILLIC CAPITAL LETTER HARD SIGN
+=CB	U+042B	CYRILLIC CAPITAL LETTER YERU
+=CC	U+042C	CYRILLIC CAPITAL LETTER SOFT SIGN
+=CD	U+042D	CYRILLIC CAPITAL LETTER E
+=CE	U+042E	CYRILLIC CAPITAL LETTER YU
+=CF	U+042F	CYRILLIC CAPITAL LETTER YA
+=D0	U+0430	CYRILLIC SMALL LETTER A
+=D1	U+0431	CYRILLIC SMALL LETTER BE
+=D2	U+0432	CYRILLIC SMALL LETTER VE
+=D3	U+0433	CYRILLIC SMALL LETTER GHE
+=D4	U+0434	CYRILLIC SMALL LETTER DE
+=D5	U+0435	CYRILLIC SMALL LETTER IE
+=D6	U+0436	CYRILLIC SMALL LETTER ZHE
+=D7	U+0437	CYRILLIC SMALL LETTER ZE
+=D8	U+0438	CYRILLIC SMALL LETTER I
+=D9	U+0439	CYRILLIC SMALL LETTER SHORT I
+=DA	U+043A	CYRILLIC SMALL LETTER KA
+=DB	U+043B	CYRILLIC SMALL LETTER EL
+=DC	U+043C	CYRILLIC SMALL LETTER EM
+=DD	U+043D	CYRILLIC SMALL LETTER EN
+=DE	U+043E	CYRILLIC SMALL LETTER O
+=DF	U+043F	CYRILLIC SMALL LETTER PE
+=E0	U+0440	CYRILLIC SMALL LETTER ER
+=E1	U+0441	CYRILLIC SMALL LETTER ES
+=E2	U+0442	CYRILLIC SMALL LETTER TE
+=E3	U+0443	CYRILLIC SMALL LETTER U
+=E4	U+0444	CYRILLIC SMALL LETTER EF
+=E5	U+0445	CYRILLIC SMALL LETTER HA
+=E6	U+0446	CYRILLIC SMALL LETTER TSE
+=E7	U+0447	CYRILLIC SMALL LETTER CHE
+=E8	U+0448	CYRILLIC SMALL LETTER SHA
+=E9	U+0449	CYRILLIC SMALL LETTER SHCHA
+=EA	U+044A	CYRILLIC SMALL LETTER HARD SIGN
+=EB	U+044B	CYRILLIC SMALL LETTER YERU
+=EC	U+044C	CYRILLIC SMALL LETTER SOFT SIGN
+=ED	U+044D	CYRILLIC SMALL LETTER E
+=EE	U+044E	CYRILLIC SMALL LETTER YU
+=EF	U+044F	CYRILLIC SMALL LETTER YA
+=F0	U+2116	NUMERO SIGN
+=F1	U+0451	CYRILLIC SMALL LETTER IO
+=F2	U+0452	CYRILLIC SMALL LETTER DJE
+=F3	U+0453	CYRILLIC SMALL LETTER GJE
+=F4	U+0454	CYRILLIC SMALL LETTER UKRAINIAN IE
+=F5	U+0455	CYRILLIC SMALL LETTER DZE
+=F6	U+0456	CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+=F7	U+0457	CYRILLIC SMALL LETTER YI
+=F8	U+0458	CYRILLIC SMALL LETTER JE
+=F9	U+0459	CYRILLIC SMALL LETTER LJE
+=FA	U+045A	CYRILLIC SMALL LETTER NJE
+=FB	U+045B	CYRILLIC SMALL LETTER TSHE
+=FC	U+045C	CYRILLIC SMALL LETTER KJE
+=FD	U+00A7	SECTION SIGN
+=FE	U+045E	CYRILLIC SMALL LETTER SHORT U
+=FF	U+045F	CYRILLIC SMALL LETTER DZHE
diff --git a/doc/iso8859-6.txt b/doc/iso8859-6.txt
new file mode 100644
index 0000000..49b7c7f
--- /dev/null
+++ b/doc/iso8859-6.txt
@@ -0,0 +1,146 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A4	U+00A4	CURRENCY SIGN
+=AC	U+060C	ARABIC COMMA
+=AD	U+00AD	SOFT HYPHEN
+=BB	U+061B	ARABIC SEMICOLON
+=BF	U+061F	ARABIC QUESTION MARK
+=C1	U+0621	ARABIC LETTER HAMZA
+=C2	U+0622	ARABIC LETTER ALEF WITH MADDA ABOVE
+=C3	U+0623	ARABIC LETTER ALEF WITH HAMZA ABOVE
+=C4	U+0624	ARABIC LETTER WAW WITH HAMZA ABOVE
+=C5	U+0625	ARABIC LETTER ALEF WITH HAMZA BELOW
+=C6	U+0626	ARABIC LETTER YEH WITH HAMZA ABOVE
+=C7	U+0627	ARABIC LETTER ALEF
+=C8	U+0628	ARABIC LETTER BEH
+=C9	U+0629	ARABIC LETTER TEH MARBUTA
+=CA	U+062A	ARABIC LETTER TEH
+=CB	U+062B	ARABIC LETTER THEH
+=CC	U+062C	ARABIC LETTER JEEM
+=CD	U+062D	ARABIC LETTER HAH
+=CE	U+062E	ARABIC LETTER KHAH
+=CF	U+062F	ARABIC LETTER DAL
+=D0	U+0630	ARABIC LETTER THAL
+=D1	U+0631	ARABIC LETTER REH
+=D2	U+0632	ARABIC LETTER ZAIN
+=D3	U+0633	ARABIC LETTER SEEN
+=D4	U+0634	ARABIC LETTER SHEEN
+=D5	U+0635	ARABIC LETTER SAD
+=D6	U+0636	ARABIC LETTER DAD
+=D7	U+0637	ARABIC LETTER TAH
+=D8	U+0638	ARABIC LETTER ZAH
+=D9	U+0639	ARABIC LETTER AIN
+=DA	U+063A	ARABIC LETTER GHAIN
+=E0	U+0640	ARABIC TATWEEL
+=E1	U+0641	ARABIC LETTER FEH
+=E2	U+0642	ARABIC LETTER QAF
+=E3	U+0643	ARABIC LETTER KAF
+=E4	U+0644	ARABIC LETTER LAM
+=E5	U+0645	ARABIC LETTER MEEM
+=E6	U+0646	ARABIC LETTER NOON
+=E7	U+0647	ARABIC LETTER HEH
+=E8	U+0648	ARABIC LETTER WAW
+=E9	U+0649	ARABIC LETTER ALEF MAKSURA
+=EA	U+064A	ARABIC LETTER YEH
+=EB	U+064B	ARABIC FATHATAN
+=EC	U+064C	ARABIC DAMMATAN
+=ED	U+064D	ARABIC KASRATAN
+=EE	U+064E	ARABIC FATHA
+=EF	U+064F	ARABIC DAMMA
+=F0	U+0650	ARABIC KASRA
+=F1	U+0651	ARABIC SHADDA
+=F2	U+0652	ARABIC SUKUN
diff --git a/doc/iso8859-7.txt b/doc/iso8859-7.txt
new file mode 100644
index 0000000..d5c3396
--- /dev/null
+++ b/doc/iso8859-7.txt
@@ -0,0 +1,185 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+02BD	MODIFIER LETTER REVERSED COMMA
+=A2	U+02BC	MODIFIER LETTER APOSTROPHE
+=A3	U+00A3	POUND SIGN
+=A6	U+00A6	BROKEN BAR
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+00A9	COPYRIGHT SIGN
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AF	U+2015	HORIZONTAL BAR
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+0384	GREEK TONOS
+=B5	U+0385	GREEK DIALYTIKA TONOS
+=B6	U+0386	GREEK CAPITAL LETTER ALPHA WITH TONOS
+=B7	U+00B7	MIDDLE DOT
+=B8	U+0388	GREEK CAPITAL LETTER EPSILON WITH TONOS
+=B9	U+0389	GREEK CAPITAL LETTER ETA WITH TONOS
+=BA	U+038A	GREEK CAPITAL LETTER IOTA WITH TONOS
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+038C	GREEK CAPITAL LETTER OMICRON WITH TONOS
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BE	U+038E	GREEK CAPITAL LETTER UPSILON WITH TONOS
+=BF	U+038F	GREEK CAPITAL LETTER OMEGA WITH TONOS
+=C0	U+0390	GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+=C1	U+0391	GREEK CAPITAL LETTER ALPHA
+=C2	U+0392	GREEK CAPITAL LETTER BETA
+=C3	U+0393	GREEK CAPITAL LETTER GAMMA
+=C4	U+0394	GREEK CAPITAL LETTER DELTA
+=C5	U+0395	GREEK CAPITAL LETTER EPSILON
+=C6	U+0396	GREEK CAPITAL LETTER ZETA
+=C7	U+0397	GREEK CAPITAL LETTER ETA
+=C8	U+0398	GREEK CAPITAL LETTER THETA
+=C9	U+0399	GREEK CAPITAL LETTER IOTA
+=CA	U+039A	GREEK CAPITAL LETTER KAPPA
+=CB	U+039B	GREEK CAPITAL LETTER LAMDA
+=CC	U+039C	GREEK CAPITAL LETTER MU
+=CD	U+039D	GREEK CAPITAL LETTER NU
+=CE	U+039E	GREEK CAPITAL LETTER XI
+=CF	U+039F	GREEK CAPITAL LETTER OMICRON
+=D0	U+03A0	GREEK CAPITAL LETTER PI
+=D1	U+03A1	GREEK CAPITAL LETTER RHO
+=D3	U+03A3	GREEK CAPITAL LETTER SIGMA
+=D4	U+03A4	GREEK CAPITAL LETTER TAU
+=D5	U+03A5	GREEK CAPITAL LETTER UPSILON
+=D6	U+03A6	GREEK CAPITAL LETTER PHI
+=D7	U+03A7	GREEK CAPITAL LETTER CHI
+=D8	U+03A8	GREEK CAPITAL LETTER PSI
+=D9	U+03A9	GREEK CAPITAL LETTER OMEGA
+=DA	U+03AA	GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+=DB	U+03AB	GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+=DC	U+03AC	GREEK SMALL LETTER ALPHA WITH TONOS
+=DD	U+03AD	GREEK SMALL LETTER EPSILON WITH TONOS
+=DE	U+03AE	GREEK SMALL LETTER ETA WITH TONOS
+=DF	U+03AF	GREEK SMALL LETTER IOTA WITH TONOS
+=E0	U+03B0	GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+=E1	U+03B1	GREEK SMALL LETTER ALPHA
+=E2	U+03B2	GREEK SMALL LETTER BETA
+=E3	U+03B3	GREEK SMALL LETTER GAMMA
+=E4	U+03B4	GREEK SMALL LETTER DELTA
+=E5	U+03B5	GREEK SMALL LETTER EPSILON
+=E6	U+03B6	GREEK SMALL LETTER ZETA
+=E7	U+03B7	GREEK SMALL LETTER ETA
+=E8	U+03B8	GREEK SMALL LETTER THETA
+=E9	U+03B9	GREEK SMALL LETTER IOTA
+=EA	U+03BA	GREEK SMALL LETTER KAPPA
+=EB	U+03BB	GREEK SMALL LETTER LAMDA
+=EC	U+03BC	GREEK SMALL LETTER MU
+=ED	U+03BD	GREEK SMALL LETTER NU
+=EE	U+03BE	GREEK SMALL LETTER XI
+=EF	U+03BF	GREEK SMALL LETTER OMICRON
+=F0	U+03C0	GREEK SMALL LETTER PI
+=F1	U+03C1	GREEK SMALL LETTER RHO
+=F2	U+03C2	GREEK SMALL LETTER FINAL SIGMA
+=F3	U+03C3	GREEK SMALL LETTER SIGMA
+=F4	U+03C4	GREEK SMALL LETTER TAU
+=F5	U+03C5	GREEK SMALL LETTER UPSILON
+=F6	U+03C6	GREEK SMALL LETTER PHI
+=F7	U+03C7	GREEK SMALL LETTER CHI
+=F8	U+03C8	GREEK SMALL LETTER PSI
+=F9	U+03C9	GREEK SMALL LETTER OMEGA
+=FA	U+03CA	GREEK SMALL LETTER IOTA WITH DIALYTIKA
+=FB	U+03CB	GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+=FC	U+03CC	GREEK SMALL LETTER OMICRON WITH TONOS
+=FD	U+03CD	GREEK SMALL LETTER UPSILON WITH TONOS
+=FE	U+03CE	GREEK SMALL LETTER OMEGA WITH TONOS
diff --git a/doc/iso8859-8.txt b/doc/iso8859-8.txt
new file mode 100644
index 0000000..9a7582e
--- /dev/null
+++ b/doc/iso8859-8.txt
@@ -0,0 +1,153 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A2	U+00A2	CENT SIGN
+=A3	U+00A3	POUND SIGN
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+00A5	YEN SIGN
+=A6	U+00A6	BROKEN BAR
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+00D7	MULTIPLICATION SIGN
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+203E	OVERLINE
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+00B5	MICRO SIGN
+=B6	U+00B6	PILCROW SIGN
+=B7	U+00B7	MIDDLE DOT
+=B8	U+00B8	CEDILLA
+=B9	U+00B9	SUPERSCRIPT ONE
+=BA	U+00F7	DIVISION SIGN
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+00BC	VULGAR FRACTION ONE QUARTER
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BE	U+00BE	VULGAR FRACTION THREE QUARTERS
+=DF	U+2017	DOUBLE LOW LINE
+=E0	U+05D0	HEBREW LETTER ALEF
+=E1	U+05D1	HEBREW LETTER BET
+=E2	U+05D2	HEBREW LETTER GIMEL
+=E3	U+05D3	HEBREW LETTER DALET
+=E4	U+05D4	HEBREW LETTER HE
+=E5	U+05D5	HEBREW LETTER VAV
+=E6	U+05D6	HEBREW LETTER ZAYIN
+=E7	U+05D7	HEBREW LETTER HET
+=E8	U+05D8	HEBREW LETTER TET
+=E9	U+05D9	HEBREW LETTER YOD
+=EA	U+05DA	HEBREW LETTER FINAL KAF
+=EB	U+05DB	HEBREW LETTER KAF
+=EC	U+05DC	HEBREW LETTER LAMED
+=ED	U+05DD	HEBREW LETTER FINAL MEM
+=EE	U+05DE	HEBREW LETTER MEM
+=EF	U+05DF	HEBREW LETTER FINAL NUN
+=F0	U+05E0	HEBREW LETTER NUN
+=F1	U+05E1	HEBREW LETTER SAMEKH
+=F2	U+05E2	HEBREW LETTER AYIN
+=F3	U+05E3	HEBREW LETTER FINAL PE
+=F4	U+05E4	HEBREW LETTER PE
+=F5	U+05E5	HEBREW LETTER FINAL TSADI
+=F6	U+05E6	HEBREW LETTER TSADI
+=F7	U+05E7	HEBREW LETTER QOF
+=F8	U+05E8	HEBREW LETTER RESH
+=F9	U+05E9	HEBREW LETTER SHIN
+=FA	U+05EA	HEBREW LETTER TAV
diff --git a/doc/iso8859-9.txt b/doc/iso8859-9.txt
new file mode 100644
index 0000000..d158b6d
--- /dev/null
+++ b/doc/iso8859-9.txt
@@ -0,0 +1,191 @@
+=20	U+0020	SPACE
+=21	U+0021	EXCLAMATION MARK
+=22	U+0022	QUOTATION MARK
+=23	U+0023	NUMBER SIGN
+=24	U+0024	DOLLAR SIGN
+=25	U+0025	PERCENT SIGN
+=26	U+0026	AMPERSAND
+=27	U+0027	APOSTROPHE
+=28	U+0028	LEFT PARENTHESIS
+=29	U+0029	RIGHT PARENTHESIS
+=2A	U+002A	ASTERISK
+=2B	U+002B	PLUS SIGN
+=2C	U+002C	COMMA
+=2D	U+002D	HYPHEN-MINUS
+=2E	U+002E	FULL STOP
+=2F	U+002F	SOLIDUS
+=30	U+0030	DIGIT ZERO
+=31	U+0031	DIGIT ONE
+=32	U+0032	DIGIT TWO
+=33	U+0033	DIGIT THREE
+=34	U+0034	DIGIT FOUR
+=35	U+0035	DIGIT FIVE
+=36	U+0036	DIGIT SIX
+=37	U+0037	DIGIT SEVEN
+=38	U+0038	DIGIT EIGHT
+=39	U+0039	DIGIT NINE
+=3A	U+003A	COLON
+=3B	U+003B	SEMICOLON
+=3C	U+003C	LESS-THAN SIGN
+=3D	U+003D	EQUALS SIGN
+=3E	U+003E	GREATER-THAN SIGN
+=3F	U+003F	QUESTION MARK
+=40	U+0040	COMMERCIAL AT
+=41	U+0041	LATIN CAPITAL LETTER A
+=42	U+0042	LATIN CAPITAL LETTER B
+=43	U+0043	LATIN CAPITAL LETTER C
+=44	U+0044	LATIN CAPITAL LETTER D
+=45	U+0045	LATIN CAPITAL LETTER E
+=46	U+0046	LATIN CAPITAL LETTER F
+=47	U+0047	LATIN CAPITAL LETTER G
+=48	U+0048	LATIN CAPITAL LETTER H
+=49	U+0049	LATIN CAPITAL LETTER I
+=4A	U+004A	LATIN CAPITAL LETTER J
+=4B	U+004B	LATIN CAPITAL LETTER K
+=4C	U+004C	LATIN CAPITAL LETTER L
+=4D	U+004D	LATIN CAPITAL LETTER M
+=4E	U+004E	LATIN CAPITAL LETTER N
+=4F	U+004F	LATIN CAPITAL LETTER O
+=50	U+0050	LATIN CAPITAL LETTER P
+=51	U+0051	LATIN CAPITAL LETTER Q
+=52	U+0052	LATIN CAPITAL LETTER R
+=53	U+0053	LATIN CAPITAL LETTER S
+=54	U+0054	LATIN CAPITAL LETTER T
+=55	U+0055	LATIN CAPITAL LETTER U
+=56	U+0056	LATIN CAPITAL LETTER V
+=57	U+0057	LATIN CAPITAL LETTER W
+=58	U+0058	LATIN CAPITAL LETTER X
+=59	U+0059	LATIN CAPITAL LETTER Y
+=5A	U+005A	LATIN CAPITAL LETTER Z
+=5B	U+005B	LEFT SQUARE BRACKET
+=5C	U+005C	REVERSE SOLIDUS
+=5D	U+005D	RIGHT SQUARE BRACKET
+=5E	U+005E	CIRCUMFLEX ACCENT
+=5F	U+005F	LOW LINE
+=60	U+0060	GRAVE ACCENT
+=61	U+0061	LATIN SMALL LETTER A
+=62	U+0062	LATIN SMALL LETTER B
+=63	U+0063	LATIN SMALL LETTER C
+=64	U+0064	LATIN SMALL LETTER D
+=65	U+0065	LATIN SMALL LETTER E
+=66	U+0066	LATIN SMALL LETTER F
+=67	U+0067	LATIN SMALL LETTER G
+=68	U+0068	LATIN SMALL LETTER H
+=69	U+0069	LATIN SMALL LETTER I
+=6A	U+006A	LATIN SMALL LETTER J
+=6B	U+006B	LATIN SMALL LETTER K
+=6C	U+006C	LATIN SMALL LETTER L
+=6D	U+006D	LATIN SMALL LETTER M
+=6E	U+006E	LATIN SMALL LETTER N
+=6F	U+006F	LATIN SMALL LETTER O
+=70	U+0070	LATIN SMALL LETTER P
+=71	U+0071	LATIN SMALL LETTER Q
+=72	U+0072	LATIN SMALL LETTER R
+=73	U+0073	LATIN SMALL LETTER S
+=74	U+0074	LATIN SMALL LETTER T
+=75	U+0075	LATIN SMALL LETTER U
+=76	U+0076	LATIN SMALL LETTER V
+=77	U+0077	LATIN SMALL LETTER W
+=78	U+0078	LATIN SMALL LETTER X
+=79	U+0079	LATIN SMALL LETTER Y
+=7A	U+007A	LATIN SMALL LETTER Z
+=7B	U+007B	LEFT CURLY BRACKET
+=7C	U+007C	VERTICAL LINE
+=7D	U+007D	RIGHT CURLY BRACKET
+=7E	U+007E	TILDE
+=A0	U+00A0	NO-BREAK SPACE
+=A1	U+00A1	INVERTED EXCLAMATION MARK
+=A2	U+00A2	CENT SIGN
+=A3	U+00A3	POUND SIGN
+=A4	U+00A4	CURRENCY SIGN
+=A5	U+00A5	YEN SIGN
+=A6	U+00A6	BROKEN BAR
+=A7	U+00A7	SECTION SIGN
+=A8	U+00A8	DIAERESIS
+=A9	U+00A9	COPYRIGHT SIGN
+=AA	U+00AA	FEMININE ORDINAL INDICATOR
+=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+=AC	U+00AC	NOT SIGN
+=AD	U+00AD	SOFT HYPHEN
+=AE	U+00AE	REGISTERED SIGN
+=AF	U+00AF	MACRON
+=B0	U+00B0	DEGREE SIGN
+=B1	U+00B1	PLUS-MINUS SIGN
+=B2	U+00B2	SUPERSCRIPT TWO
+=B3	U+00B3	SUPERSCRIPT THREE
+=B4	U+00B4	ACUTE ACCENT
+=B5	U+00B5	MICRO SIGN
+=B6	U+00B6	PILCROW SIGN
+=B7	U+00B7	MIDDLE DOT
+=B8	U+00B8	CEDILLA
+=B9	U+00B9	SUPERSCRIPT ONE
+=BA	U+00BA	MASCULINE ORDINAL INDICATOR
+=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+=BC	U+00BC	VULGAR FRACTION ONE QUARTER
+=BD	U+00BD	VULGAR FRACTION ONE HALF
+=BE	U+00BE	VULGAR FRACTION THREE QUARTERS
+=BF	U+00BF	INVERTED QUESTION MARK
+=C0	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
+=C1	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
+=C2	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+=C3	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
+=C4	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
+=C5	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
+=C6	U+00C6	LATIN CAPITAL LETTER AE
+=C7	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
+=C8	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
+=C9	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
+=CA	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+=CB	U+00CB	LATIN CAPITAL LETTER E WITH DIAERESIS
+=CC	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
+=CD	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
+=CE	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+=CF	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
+=D0	U+011E	LATIN CAPITAL LETTER G WITH BREVE
+=D1	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
+=D2	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
+=D3	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
+=D4	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+=D5	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
+=D6	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
+=D7	U+00D7	MULTIPLICATION SIGN
+=D8	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
+=D9	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
+=DA	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
+=DB	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+=DC	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
+=DD	U+0130	LATIN CAPITAL LETTER I WITH DOT ABOVE
+=DE	U+015E	LATIN CAPITAL LETTER S WITH CEDILLA
+=DF	U+00DF	LATIN SMALL LETTER SHARP S
+=E0	U+00E0	LATIN SMALL LETTER A WITH GRAVE
+=E1	U+00E1	LATIN SMALL LETTER A WITH ACUTE
+=E2	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
+=E3	U+00E3	LATIN SMALL LETTER A WITH TILDE
+=E4	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
+=E5	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
+=E6	U+00E6	LATIN SMALL LETTER AE
+=E7	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
+=E8	U+00E8	LATIN SMALL LETTER E WITH GRAVE
+=E9	U+00E9	LATIN SMALL LETTER E WITH ACUTE
+=EA	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
+=EB	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
+=EC	U+00EC	LATIN SMALL LETTER I WITH GRAVE
+=ED	U+00ED	LATIN SMALL LETTER I WITH ACUTE
+=EE	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
+=EF	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
+=F0	U+011F	LATIN SMALL LETTER G WITH BREVE
+=F1	U+00F1	LATIN SMALL LETTER N WITH TILDE
+=F2	U+00F2	LATIN SMALL LETTER O WITH GRAVE
+=F3	U+00F3	LATIN SMALL LETTER O WITH ACUTE
+=F4	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
+=F5	U+00F5	LATIN SMALL LETTER O WITH TILDE
+=F6	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
+=F7	U+00F7	DIVISION SIGN
+=F8	U+00F8	LATIN SMALL LETTER O WITH STROKE
+=F9	U+00F9	LATIN SMALL LETTER U WITH GRAVE
+=FA	U+00FA	LATIN SMALL LETTER U WITH ACUTE
+=FB	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
+=FC	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
+=FD	U+0131	LATIN SMALL LETTER DOTLESS I
+=FE	U+015F	LATIN SMALL LETTER S WITH CEDILLA
+=FF	U+00FF	LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/doc/kbd.FAQ-1.html b/doc/kbd.FAQ-1.html
new file mode 100644
index 0000000..f1bb8f7
--- /dev/null
+++ b/doc/kbd.FAQ-1.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Useful programs</TITLE>
+ <LINK HREF="kbd.FAQ-2.html" REL=next>
+
+ <LINK HREF="kbd.FAQ.html#toc1" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-2.html">Next</A>
+Previous
+<A HREF="kbd.FAQ.html#toc1">Contents</A>
+<HR>
+<H2><A NAME="s1">1. Useful programs</A></H2>
+
+<P>
+<!--
+programs!keyboard-related
+-->
+
+<!--
+programs!console-related
+-->
+
+<!--
+keyboard!programs related to
+-->
+
+<!--
+console!programs related to
+-->
+<P>The following packages contain keyboard or console related programs.
+<P><CODE>kbd-0.96.tar.gz</CODE> contains <CODE>loadkeys</CODE>, <CODE>dumpkeys</CODE>, <CODE>showkey</CODE>,
+<CODE>setmetamode</CODE>, <CODE>setleds</CODE>, <CODE>setfont</CODE>, <CODE>showfont</CODE>, <CODE>mapscrn</CODE>,
+<CODE>kbd_mode</CODE>, <CODE>loadunimap</CODE>, <CODE>chvt</CODE>, <CODE>resizecons</CODE>, <CODE>deallocvt</CODE>,
+<CODE>getkeycodes</CODE>, <CODE>setkeycodes</CODE>.
+<P><CODE>util-linux-2.6</CODE> contains <CODE>setterm</CODE>, <CODE>kbdrate</CODE>.
+(Yes, the <CODE>more</CODE> in <CODE>util-linux-2.6</CODE> dumps core due to a name
+conflict. Preserve your old copy, or use <CODE>util-linux-2.5</CODE>, or
+change `savetty' to `my_savetty' in <CODE>more.c</CODE>.)
+<P><CODE>sh-utils-1.12</CODE> contains <CODE>stty</CODE>.
+<P><CODE>open-1.4.tgz</CODE> contains <CODE>open</CODE> (that should be renamed to
+<CODE>openvt</CODE>). (See also <CODE>dynamic-vc-1.1.tar.gz</CODE> and <CODE>consd-1.1.tgz</CODE>.)
+<P><CODE>SVGATextMode-1.8.tar.gz</CODE> contains <CODE>SVGATextMode</CODE>, a program that
+obsoletes <CODE>resizecons</CODE>.
+<P>The X distribution contains <CODE>xmodmap</CODE>, <CODE>xset</CODE>, <CODE>kbd_mode</CODE>.
+(See also X386keybd(1) for the situation under XFree86 1.3,
+and Xserver(1) for the XKEYBOARD extension under X11R6.)
+<P><CODE>termcap-2.0.8.tar.gz</CODE> contains <CODE>termcap</CODE>, an old terminal
+capabilities data base. <CODE>ncurses-1.9.9e.tar.gz</CODE> contains the
+<CODE>termlib</CODE> data base which obsoletes <CODE>termcap</CODE>. (However,
+there are still many programs using <CODE>termcap</CODE>.)
+<P>See loadkeys(1), setleds(1) and setmetamode(1) for the codes generated by the
+various keys and the setting of leds when not under X. Under X, see xmodmap(1)
+and xset(1).
+<P>See setfont(8) for loading console fonts. Many people will want to
+load a font like <CODE>iso01.f16</CODE> because the default font is the
+hardware font of the video card, and often is a `Code Page 437' font
+missing accented characters and other Latin-1 symbols.
+<P>See setterm(1) and kbdrate(8) for properties such as foreground and background
+colors, screen blanking and character repeat rate when not under X.
+Under X, see xset(1), also for key click and bell volume.
+<P>The file <CODE>/etc/termcap</CODE> defines the escape sequences
+used by many programs addressing the console (or any other terminal).
+See termcap(5).
+A more modern version is found in <CODE>/usr/lib/terminfo</CODE>.
+See terminfo(5). Terminfo files are compiled
+by the terminfo compiler <CODE>/usr/lib/terminfo/tic</CODE>, see tic(1).
+Their contents can be examined using the program <CODE>infocmp</CODE>,
+see infocmp(1).
+The Linux console sequences are documented in console_codes(4).
+<P>
+<P>
+<HR>
+<A HREF="kbd.FAQ-2.html">Next</A>
+Previous
+<A HREF="kbd.FAQ.html#toc1">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-10.html b/doc/kbd.FAQ-10.html
new file mode 100644
index 0000000..81cc757
--- /dev/null
+++ b/doc/kbd.FAQ-10.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: The keyboard LEDs</TITLE>
+ <LINK HREF="kbd.FAQ-11.html" REL=next>
+ <LINK HREF="kbd.FAQ-9.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc10" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-11.html">Next</A>
+<A HREF="kbd.FAQ-9.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc10">Contents</A>
+<HR>
+<H2><A NAME="s10">10. The keyboard LEDs</A></H2>
+
+<P>
+<!--
+LEDs, keyboard
+-->
+
+<!--
+keyboard!LEDs on
+-->
+<P>1. There are per-tty keyboard flags:
+each VC has its own NumLock, CapsLock, ScrollLock.
+By default these keyboard flags are shown in the LEDs.
+The usual way to change them is by pressing the corresponding key.
+(Side remark: pressing the NumLock key when in application key mode
+will not change the NumLock status, but produce an escape sequence.
+If you want the NumLock key to always change the Numlock status,
+bind it to Bare_Num_Lock.)
+<P>2. Next, there are per-tty default keyboard flags,
+to initialize the keyboard flags when a reset occurs.
+Thus if you want NumLock on all the time, that is possible.
+The usual way to change them is by `<CODE>setleds -D</CODE> ...'.
+<P>3. There is the possibility that the leds do not reflect
+the keyboard flags, but something else.
+<P>3A. This something else can be three bits somewhere in the kernel -
+which can be used if you want to monitor some hardware or software
+status bit(s). If you want this, edit the kernel source to call
+<CODE>register_leds()</CODE> somewhere.
+<P>3B. This something else can also be whatever some user program wants
+to show in the LEDs. Thus, people who like such things can make
+nice patterns of lights. If you want this, use the KDSETLED ioctl.
+<P>This latter use is not per-tty, but the choice between former
+and latter use is per-tty.
+<P>Summarizing: Each tty has a flag <CODE>kbd->ledmode</CODE>.
+If this has the value LED_SHOW_FLAGS then the keyboard flags
+(NumLock etc.) of that tty are shown.
+If this has the value LED_SHOW_MEM then three selected memory
+addresses are shown.
+If this has the value LED_SHOW_IOCTL then the leds show whatever
+value was last assigned to them using the KDSETLED ioctl.
+<P>One may add that X uses ioctl's to set the LEDs, but fails
+to reset its VT when it exits, so after using X there may
+be one VT that is not in the default LED_SHOW_FLAGS state.
+This can be fixed by doing `<CODE>setleds -L</CODE>' on that VT.
+See setleds(1).
+<P>
+<HR>
+<A HREF="kbd.FAQ-11.html">Next</A>
+<A HREF="kbd.FAQ-9.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc10">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-11.html b/doc/kbd.FAQ-11.html
new file mode 100644
index 0000000..094a7b6
--- /dev/null
+++ b/doc/kbd.FAQ-11.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: The TERM variable</TITLE>
+ <LINK HREF="kbd.FAQ-12.html" REL=next>
+ <LINK HREF="kbd.FAQ-10.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc11" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-12.html">Next</A>
+<A HREF="kbd.FAQ-10.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc11">Contents</A>
+<HR>
+<H2><A NAME="s11">11. The TERM variable</A></H2>
+
+<P>
+<!--
+TERM environment variable
+-->
+
+<!--
+environment variables!TERM
+-->
+<P>Many programs use the <CODE>TERM</CODE> variable and the database
+<CODE>/etc/termcap</CODE> or <CODE>/usr/lib/terminfo/*</CODE> to decide
+which strings to send for clear screen, move cursor, etc.,
+and sometimes also to decide which string is sent
+by the users backspace key, function keys etc.
+This value is first set by the kernel (for the console).
+Usually, this variable is re-set by <CODE>getty</CODE>, using <CODE>/etc/ttytype</CODE> or
+the argument specified in <CODE>/etc/inittab</CODE>.
+Sometimes, it is also set in <CODE>/etc/profile</CODE>.
+<P>Older systems use <CODE>TERM=console</CODE> or <CODE>TERM=con80x25</CODE>. Newer systems (with
+ncurses 1.8.6) use the more specific <CODE>TERM=linux</CODE> or <CODE>TERM=linux-80x25</CODE>.
+However, old versions of <CODE>setterm</CODE> test for <CODE>TERM=con*</CODE> and hence fail
+to work with <CODE>TERM=linux</CODE>.
+<P>Since kernel version 1.3.2, the kernel default for the console is
+<CODE>TERM=linux</CODE>.
+<P>If you have a termcap without entry for linux, add the word linux
+to the entry for the console:
+<BLOCKQUOTE><CODE>
+<PRE>
+        console|con80x25|linux:\
+</PRE>
+</CODE></BLOCKQUOTE>
+
+and make <CODE>/usr/lib/terminfo/l/linux</CODE> a copy of or symbolic link to
+<CODE>/usr/lib/terminfo/c/console</CODE>.
+<P>
+<H2><A NAME="ss11.1">11.1 Terminfo</A>
+</H2>
+
+<P>
+<!--
+terminfo
+-->
+<P>The terminfo entry for the linux console from ncurses 1.8.6 misses the
+entry <CODE>kich1=\E[2~</CODE>, needed by some programs.
+Edit the file and <CODE>tic</CODE> it.
+<P>
+<HR>
+<A HREF="kbd.FAQ-12.html">Next</A>
+<A HREF="kbd.FAQ-10.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc11">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-12.html b/doc/kbd.FAQ-12.html
new file mode 100644
index 0000000..7908e5e
--- /dev/null
+++ b/doc/kbd.FAQ-12.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: How to make other programs work with non-ASCII chars</TITLE>
+ <LINK HREF="kbd.FAQ-13.html" REL=next>
+ <LINK HREF="kbd.FAQ-11.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc12" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-13.html">Next</A>
+<A HREF="kbd.FAQ-11.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc12">Contents</A>
+<HR>
+<H2><A NAME="s12">12. How to make other programs work with non-ASCII chars</A></H2>
+
+<P>
+<!--
+non-ASCII characters, using
+-->
+<P>In the bad old days this used to be quite a hassle. Every separate
+program had to be convinced individually to leave your bits alone.
+Not that all is easy now, but recently a lot of gnu utilities have
+learned to react to <CODE>LC_CTYPE=iso_8859_1</CODE> or <CODE>LC_CTYPE=iso-8859-1</CODE>.
+Try this first, and if it doesn't help look at the hints below.
+Note that in recent versions of libc the routine setlocale() only
+works if you have installed the locale files (e.g. in
+<CODE>/usr/lib/locale</CODE>).
+<P>First of all, the 8-th bit should survive the kernel input processing,
+so make sure to have <CODE>stty cs8 -istrip -parenb</CODE> set.
+<P>A. For <CODE>emacs</CODE> the details strongly depend on the version.
+The information below is for version 19.34. Put lines
+<BLOCKQUOTE><CODE>
+<PRE>
+        (set-input-mode nil nil 1)
+        (standard-display-european t)
+        (require 'iso-syntax)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+into your <CODE>$HOME/.emacs</CODE>.
+The first line (to be precise: the final 1)
+tells <CODE>emacs</CODE> not to discard the 8-th bit from input characters.
+The second line tells <CODE>emacs</CODE> not to display non-ASCII characters
+as octal escapes.
+The third line specifies the syntactic properties
+and case conversion table for the Latin-1 character set
+These last two lines are superfluous if you have something like
+<CODE>LC_CTYPE=ISO-8859-1</CODE> in your environment.
+(The variable may also be <CODE>LC_ALL</CODE> or even <CODE>LANG</CODE>.
+The value may be anything with a substring `88591' or `8859-1'
+or `8859_1'.)
+<P>This is a good start.
+On a terminal that cannot display non-ASCII ISO 8859-1 symbols,
+the command
+<BLOCKQUOTE><CODE>
+<PRE>
+        (load-library "iso-ascii")
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will cause accented characters to be displayed comme {,c}a.
+If your keymap does not make it easy to produce non-ASCII characters, 
+then
+<BLOCKQUOTE><CODE>
+<PRE>
+        (load-library "iso-transl")
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will make the 2-character sequence Ctrl-X 8 a compose character,
+so that the 4-character sequence Ctrl-X 8 , c produces c-cedilla.
+Very inconvenient.
+<P>The command
+<BLOCKQUOTE><CODE>
+<PRE>
+        (iso-accents-mode)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will toggle ISO-8859-1 accent mode, in which the six
+characters ', `, ", ^, ~, / are dead keys
+modifying the following symbol.
+Special combinations: ~c gives a c with cedilla,
+~d gives an Icelandic eth, ~t gives an Icelandic thorn,
+"s gives German sharp s, /a gives a with ring,
+/e gives an a-e ligature, ~&lt; and ~&gt; give guillemots,
+~! gives an inverted exclamation mark,
+~? gives an inverted question mark, and '' gives an acute accent.
+This is the default mapping of accents.
+The variable <CODE>iso-languages</CODE> is a list of pairs (language name,
+accent mapping), and a non-default mapping can be selected using
+<BLOCKQUOTE><CODE>
+<PRE>
+        (iso-accents-customize LANGUAGE)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Here LANGUAGE can be one of <CODE>"portuguese"</CODE>, <CODE>"irish"</CODE>,
+<CODE>"french"</CODE>, <CODE>"latin-2"</CODE>, <CODE>"latin-1"</CODE>.
+<P>Since the Linux default compose character is Ctrl-.
+it might be convenient to use that everywhere. Try
+<BLOCKQUOTE><CODE>
+<PRE>
+        (load-library "iso-insert.el")
+        (define-key global-map [?\C-.] 8859-1-map)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+The latter line will not work under <CODE>xterm</CODE>, if you use <CODE>emacs -nw</CODE>,
+but in that case you can put
+<BLOCKQUOTE><CODE>
+<PRE>
+        XTerm*VT100.Translations:       #override\n\
+              Ctrl &lt;KeyPress> . : string("\0308")
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in your <CODE>.Xresources</CODE>.)
+<P>B. For <CODE>less</CODE>, put <CODE>LESSCHARSET=latin1</CODE> in the environment.
+This is also what you need if you see <CODE>\255</CODE> or <CODE>&lt;AD&gt;</CODE>
+in <CODE>man</CODE> output: some versions of <CODE>less</CODE> will render the soft hyphen
+(octal 0255, hex 0xAD) this way when not given permission to output Latin-1.
+<P>C. For <CODE>ls</CODE>, give the option <CODE>-N</CODE>. (Probably you want to make an alias.)
+<P>D. For <CODE>bash</CODE> (version 1.13.*), put
+<BLOCKQUOTE><CODE>
+<PRE>
+        set meta-flag on
+        set convert-meta off
+        set output-meta on
+</PRE>
+</CODE></BLOCKQUOTE>
+
+into your <CODE>$HOME/.inputrc</CODE>.
+<P>E. For <CODE>tcsh</CODE>, use
+<BLOCKQUOTE><CODE>
+<PRE>
+        setenv LANG     US_en
+        setenv LC_CTYPE iso_8859_1
+</PRE>
+</CODE></BLOCKQUOTE>
+
+If you have nls on your system, then the corresponding routines are used.
+Otherwise <CODE>tcsh</CODE> will assume iso_8859_1, regardless of the values given to
+LANG and LC_CTYPE. See the section NATIVE LANGUAGE SYSTEM in tcsh(1).
+(The Danish HOWTO says: <CODE>setenv LC_CTYPE ISO-8859-1; stty pass8</CODE>)
+<P>F. For <CODE>flex</CODE>, give the option <CODE>-8</CODE> if the parser it generates must be
+able to handle 8-bit input. (Of course it must.)
+<P>G. For <CODE>elm</CODE>, set <CODE>displaycharset</CODE> to <CODE>ISO-8859-1</CODE>.
+(Danish HOWTO: <CODE>LANG=C</CODE> and <CODE>LC_CTYPE=ISO-8859-1</CODE>)
+<P>H. For programs using curses (such as <CODE>lynx</CODE>) David Sibley reports:
+The regular curses package uses the high-order bit for reverse video mode
+(see flag _STANDOUT defined in <CODE>/usr/include/curses.h</CODE>).  However,
+<CODE>ncurses</CODE> seems to be 8-bit clean and does display iso-latin-8859-1
+correctly.
+<P>I. For programs using <CODE>groff</CODE> (such as <CODE>man</CODE>), make sure to use
+<CODE>-Tlatin1</CODE> instead of <CODE>-Tascii</CODE>. Old versions of the program <CODE>man</CODE>
+also use <CODE>col</CODE>, and the next point also applies.
+<P>J. For <CODE>col</CODE>, make sure 1) that it is fixed so as to do
+<CODE>setlocale(LC_CTYPE,"");</CODE> and 2) put
+<CODE>LC_CTYPE=ISO-8859-1</CODE> in the environment.
+<P>K. For <CODE>rlogin</CODE>, use option <CODE>-8</CODE>.
+<P>L. For <CODE>joe</CODE>,
+<CODE>sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz</CODE>
+is said to work after editing the configuration file. Someone else said:
+<CODE>joe</CODE>: Put the <CODE>-asis</CODE> option in <CODE>/isr/lib/joerc</CODE> in the
+first column.
+<P>M. For LaTeX: <CODE>\documentstyle[isolatin]{article}</CODE>.
+For LaTeX2e: <CODE>\documentclass{article}\usepackage{isolatin}</CODE>
+where <CODE>isolatin.sty</CODE> is available from
+<A HREF="ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit">ftp.vlsivie.tuwien.ac.at/pub/8bit</A>.
+<P>A nice discussion on the topic of ISO-8859-1 and how to manage 8-bit
+characters is contained in the file <CODE>grasp.insa-lyon.fr:/pub/faq/fr/accents</CODE>
+(in French). Another fine discussion (in English) can be found in
+<A HREF="ftp://rtfm.mit.edu/pub/usenet-by-group/comp.answers/internationalization/iso-8859-1-charset">rtfm.mit.edu:pub/usenet-by-group/comp.answers/internationalization/iso-8859-1-charset</A>.
+<P>If you need to fix a program that behaves badly with 8-bit characters,
+one thing to keep in mind is that if you have a signed char type then
+characters may be negative, and using them as an array index will fail.
+Several programs can be fixed by judiciously adding (unsigned char) casts.
+<P>
+<HR>
+<A HREF="kbd.FAQ-13.html">Next</A>
+<A HREF="kbd.FAQ-11.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc12">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-13.html b/doc/kbd.FAQ-13.html
new file mode 100644
index 0000000..dbb270f
--- /dev/null
+++ b/doc/kbd.FAQ-13.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: X</TITLE>
+ <LINK HREF="kbd.FAQ-14.html" REL=next>
+ <LINK HREF="kbd.FAQ-12.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc13" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-14.html">Next</A>
+<A HREF="kbd.FAQ-12.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc13">Contents</A>
+<HR>
+<H2><A NAME="s13">13. X</A></H2>
+
+<P>
+<P>This FAQ/HOWTO is about the Linux keyboard and console, not about X,
+which substitutes its own handling. However, it seems useful to
+document some of the Linux keyboard and console related properties
+of X.
+<P>First of all, when X is started (say using <CODE>startx</CODE> or <CODE>xinit</CODE>)
+it opens the first unused console, unless the desired console has been
+indicated explicitly, as in <CODE>xinit -- vt12</CODE>.
+Note that this will fail when there is no device file <CODE>/dev/tty12</CODE>,
+but that it will not fail when the indicated console was in use already.
+When X finishes, it will return to the original console.
+While it is running one can use Ctrl-Alt-Fn to switch to VTn.
+<P>The XFree86 keymap mechanism is much poorer than the Linux mechanism.
+For each keycode there are at most 4 symbols defined, namely for the
+4 keymaps plain, shift, mod, mod+shift. What is the modifier mod?
+It is the one designated by the symbol <CODE>Mode_switch</CODE>.
+For example, the command <CODE>xmodmap keys.dk</CODE>, where the file
+<CODE>keys.dk</CODE> contains
+<BLOCKQUOTE><CODE>
+<PRE>
+keycode 64 = Mode_switch
+keycode 113 = Mode_switch
+keycode 38 = a A aring Aring
+keycode 26 = e E ae AE
+keycode 32 = o O oslash Ooblique
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will make both Alt keys into mod keys, so that Alt+a gives å (a-ring), etc.
+(Note the illogical naming of oslash and Ooblique.)
+Such an <CODE>xmodmap</CODE> command can be placed in the <CODE>.xinitrc</CODE>
+shell script that is executed by default when X is started.
+<P>
+<H2><A NAME="ss13.1">13.1 What precisely does XFree86-2.1 do when it initializes its keymap?</A>
+</H2>
+
+<P>
+<!--
+keymap!initialization by XFree86
+-->
+
+<!--
+XFree86!keymap initialization
+-->
+<P>Since version 2.1, XFree86 will initialize its keymap from the Linux keymap,
+as far as possible. However, Linux had 16 entries per key (one for each
+combination of the Shift, AltGr, Ctrl, Alt modifiers) and presently has
+256 entries per key, while X has 4 entries per key (one for each combination
+of Shift, Mod), so some information is necessarily lost.
+<P>First <CODE>X</CODE> reads the <CODE>Xconfig</CODE> file, where definitions of the LeftAlt, RightAlt,
+RightCtl, ScrollLock keys as Meta, ModeShift, Compose, ModeLock or ScrollLock
+might be found - see X386keybd(1), later XFree86kbd(1).
+<P>For Mod the LeftAlt key is taken, unless RightCtl was defined as ModeShift or
+ModeLock, in which case RightCtl is taken, or RightAlt was so defined, in which
+case RightAlt is taken.
+This determines how the 4 XFree86 meanings of a key are selected from the 16
+Linux meanings.
+Note that Linux today does not distinguish by default between the two Ctrl keys
+or between the two Shift keys. <CODE>X</CODE> does distinguish.
+<P>Now the kernel keymap is read and the usually obvious corresponding X
+bindings are made. The bindings for the "action keys" Show_Memory, Show_State,
+Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward,
+Caps_On and Boot are ignored, as are the dead diacriticals, and the locks
+(except for ShiftLock), and the "ASCII-x" keys.
+<P>Next, the definitions in the <CODE>Xconfig</CODE> file are used. (Thus, a definition
+of Compose in <CODE>Xconfig</CODE> will override its value as found in the Linux keymap.)
+<P>What happens to the strings associated with the function keys? Nothing,
+X does not have such a concept. (But it is possible to define strings
+for function keys in <CODE>xterm</CODE> - note however that the window manager gets the
+keys first.)
+<P>I don't know how to convince <CODE>xterm</CODE> that it should use the X keymap
+when Alt is pressed; it seems just to look at its resource <CODE>eightBitInput</CODE>,
+and depending on whether that is true or false either set the high order bit
+of the character, or generate an additional Escape character
+(just like setmetamode(1) does for the console).
+<P>
+<HR>
+<A HREF="kbd.FAQ-14.html">Next</A>
+<A HREF="kbd.FAQ-12.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc13">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-14.html b/doc/kbd.FAQ-14.html
new file mode 100644
index 0000000..aaf2d99
--- /dev/null
+++ b/doc/kbd.FAQ-14.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Unusual keys and keyboards</TITLE>
+ <LINK HREF="kbd.FAQ-15.html" REL=next>
+ <LINK HREF="kbd.FAQ-13.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc14" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-15.html">Next</A>
+<A HREF="kbd.FAQ-13.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc14">Contents</A>
+<HR>
+<H2><A NAME="s14">14. Unusual keys and keyboards</A></H2>
+
+<P>
+<!--
+keyboard!unusual versions of
+-->
+
+<!--
+keyboard!non-standard keys on
+-->
+<P>The two keys PrintScrn/SysRq and Pause/Break are special in that they
+have two keycodes: the former has keycode 84 when Alt is pressed
+simultaneously, and keycode 99 otherwise; the latter has keycode
+101 when Ctrl is pressed simultaneously, and keycode 119 otherwise.
+(Thus, it makes no sense to bind functions to Alt keycode 99 or
+Ctrl keycode 119.)
+<P>If you have strange keys, that do not generate any code under Linux
+(or generate messages like "unrecognized scancode"), and your kernel
+is 1.1.63 or later, then you can use setkeycodes(1) to tell the kernel
+about them. They won't work under X, however.
+Once they have gotten a keycode from <CODE>setkeycodes</CODE>, they can be assigned
+a function by <CODE>loadkeys</CODE>.
+<P>
+<HR>
+<A HREF="kbd.FAQ-15.html">Next</A>
+<A HREF="kbd.FAQ-13.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc14">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-15.html b/doc/kbd.FAQ-15.html
new file mode 100644
index 0000000..ae9680b
--- /dev/null
+++ b/doc/kbd.FAQ-15.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Examples of use of loadkeys and xmodmap</TITLE>
+ <LINK HREF="kbd.FAQ-16.html" REL=next>
+ <LINK HREF="kbd.FAQ-14.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc15" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-16.html">Next</A>
+<A HREF="kbd.FAQ-14.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc15">Contents</A>
+<HR>
+<H2><A NAME="s15">15. Examples of use of loadkeys and xmodmap</A></H2>
+
+<P>
+<!--
+loadkeys!example using
+-->
+
+<!--
+xmodmap!example using
+-->
+<P>Switching Caps Lock and Control on the keyboard (assuming you use
+keymaps 0-15; check with <CODE>dumpkeys | head -1</CODE>)
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys
+        keymaps 0-15
+        keycode 58 = Control
+        keycode 29 = Caps_Lock
+        %
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Switching them under X only:
+<BLOCKQUOTE><CODE>
+<PRE>
+        % xmodmap .xmodmaprc
+</PRE>
+</CODE></BLOCKQUOTE>
+
+where <CODE>.xmodmaprc</CODE> contains lines
+<BLOCKQUOTE><CODE>
+<PRE>
+        remove Lock = Caps_Lock
+        remove Control = Control_L
+        keysym Control_L = Caps_Lock
+        keysym Caps_Lock = Control_L
+        add Lock = Caps_Lock
+        add Control = Control_L
+</PRE>
+</CODE></BLOCKQUOTE>
+
+What is this about the key numbering? Backspace is 14 under Linux,
+22 under X?  Well, the numbering can best be regarded as arbitrary;
+the Linux number of a key can be found using showkey(1), and the
+X number using xev(1). Often the X number will be 8 more than the
+Linux number.
+<P>Something else people like to change are the bindings of the function keys.
+Suppose that you want to make F12 produce the string "emacs ".
+Then
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys
+        keycode 88 = F12
+        string F12 = "emacs "
+        %
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will do this. More explicitly, the procedure is like this:
+(i) find the keycodes of the keys to be remapped, using showkey(1).
+(ii) save the current keymap, make a copy and edit that:
+<BLOCKQUOTE><CODE>
+<PRE>
+        % dumpkeys > my_keymap
+        % cp my_keymap trial_keymap
+        % emacs trial_keymap
+        % loadkeys trial_keymap
+        %
+</PRE>
+</CODE></BLOCKQUOTE>
+
+The format of the table can be guessed by looking at the output
+of <CODE>dumpkeys</CODE>, and is documented in keymaps(5).
+When the new keymap functions as desired, you can put an invocation
+<BLOCKQUOTE><CODE>
+<PRE>
+        loadkeys my_new_keymap
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>/etc/rc.local</CODE> or so, to execute it automatically at boot-up.
+Note that changing modifier keys is tricky, and a newbie can easily
+get into a situation only an expert can get out of.
+<P>The default directory for keymaps is <CODE>/usr/lib/kbd/keymaps</CODE>.
+The default extension for keymaps is <CODE>.map</CODE>.
+For example, <CODE>loadkeys uk</CODE> would probably load
+<CODE>/usr/lib/kbd/keymaps/i386/qwerty/uk.map</CODE>.
+(With kbd-0.95 and older this would be <CODE>/usr/lib/kbd/keytables</CODE>
+and <CODE>/usr/lib/kbd/keytables/uk.map</CODE>.)
+<P>
+<P>(On my machine) <CODE>/dev/console</CODE> is a symbolic link to <CODE>/dev/tty0</CODE>,
+and the kernel regards <CODE>/dev/tty0</CODE> as a synonym for the current VT.
+XFree86 1.3 changes the owner of <CODE>/dev/tty0</CODE>, but does not reset this
+after finishing. Thus, <CODE>loadkeys</CODE> or <CODE>dumpkeys</CODE> might fail because
+someone else owns <CODE>/dev/tty0</CODE>;
+in such a case you might run X first.
+Note that you cannot change keyboard mappings when not at the console
+(and not superuser).
+<P>
+<H2><A NAME="ss15.1">15.1 `I can use only one finger to type with'</A>
+</H2>
+
+<P>
+<!--
+keyboard!making modifier keys toggle
+-->
+<P>"Can the Shift, Ctrl and Alt keys be made to behave as toggles?"
+<P>Yes, after saying
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys
+        keymaps 0-15
+        keycode 29 = Control_Lock
+        keycode 42 = Shift_Lock
+        keycode 56 = Alt_Lock
+        %
+</PRE>
+</CODE></BLOCKQUOTE>
+
+the left Control, Shift and Alt keys will act as toggles.
+The numbers involved are revealed by showkey
+(and usually are 29, 97, 42, 54, 56, 100 for left and right control,
+shift and alt, respectively), and the functions are
+Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
+<P>"What about `sticky' modifier keys?"
+<P>Since version 1.3.33, the kernel knows about `sticky' modifier keys.
+These act on the next key pressed. So, where one earlier needed
+the 3-symbol sequence Shift_Lock a Shift_Lock to type `A', one
+can now use the 2-symbol sequence SShift_Lock a.
+Versions of the kbd package older than 0.93 do not yet include code
+for these sticky modifiers, and have to invoke them
+using their hexadecimal codes. For example,
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys
+        keymaps 0-15
+        keycode 54 = 0x0c00
+        keycode 97 = 0x0c02
+        keycode 100 = 0x0c03
+        %
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will make the right Shift, Ctrl, Alt sticky versions of the left ones.
+From 0.93 on you can say
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys
+        keymaps 0-15
+        keycode 54 = SShift
+        keycode 97 = SCtrl
+        keycode 100 = SAlt
+        %
+</PRE>
+</CODE></BLOCKQUOTE>
+
+to obtain the same result.
+This will allow you to type Ctrl-Alt-Del in three keystrokes with one hand.
+<P>The keymaps line in these examples should cover all keymaps you have in use.
+You find what keymaps you have in use by
+<BLOCKQUOTE><CODE>
+<PRE>
+        % dumpkeys | head -1
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<HR>
+<A HREF="kbd.FAQ-16.html">Next</A>
+<A HREF="kbd.FAQ-14.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc15">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-16.html b/doc/kbd.FAQ-16.html
new file mode 100644
index 0000000..c0f44e0
--- /dev/null
+++ b/doc/kbd.FAQ-16.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Changing the video mode</TITLE>
+ <LINK HREF="kbd.FAQ-17.html" REL=next>
+ <LINK HREF="kbd.FAQ-15.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc16" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-17.html">Next</A>
+<A HREF="kbd.FAQ-15.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc16">Contents</A>
+<HR>
+<H2><A NAME="s16">16. Changing the video mode</A></H2>
+
+<P>
+<!--
+console!changing video modes
+-->
+
+<!--
+video modes, changing
+-->
+
+<!--
+resolution, changing
+-->
+<P>As far as I know there are 6 ways to change resolution:
+<P>1. At compile time: change the line
+<BLOCKQUOTE><CODE>
+<PRE>
+        SVGA_MODE=      -DSVGA_MODE=NORMAL_VGA
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>/usr/src/linux/Makefile</CODE>.
+<P>1A. After compilation: use <CODE>rdev -v</CODE> - a terrible hack, but it exists.
+<P>2. At boot time: put <CODE>vga=ask</CODE> in the lilo config file, and lilo will
+ask you what video mode you want. Once you know, put <CODE>vga=</CODE>mypreference.
+<P>3. At run time:
+A. Use the <CODE>resizecons</CODE> command. (This is a very primitive wrapper around
+the VT_RESIZE ioctl.)
+B. Use the <CODE>SVGATextMode</CODE> command. (This is a less primitive wrapper around
+the VT_RESIZE ioctl.)
+<P>4. Not "on the console":
+Under <CODE>dosemu</CODE>, or with svgalib etc. you can change the hardware video mode
+without the console driver being aware of it. Sometimes this is useful in
+getting <CODE>resizecons</CODE> or <CODE>SVGATextMode</CODE> set up: use <CODE>dosemu</CODE> and some
+DOS program to get into the desired videomode, dump (say from another VT) the
+contents of all video hardware registers, and use that in the initialization
+that <CODE>resizecons</CODE> and <CODE>SVGATextMode</CODE> require.
+In some cases where the video mode has gotten into some unusable state,
+starting <CODE>dosemu</CODE>, relying on the BIOS to set up the video mode, and then
+killing <CODE>dosemu</CODE> (with <CODE>kill -9</CODE>), is the easiest way to get into shape
+again.
+<P>
+<H2><A NAME="ss16.1">16.1 Instructions for the use of resizecons</A>
+</H2>
+
+<P>
+<!--
+resizecons program
+-->
+<P>Get svgalib and compile the program <CODE>restoretextmode</CODE>.
+Boot up your machine in all possible video modes
+(using <CODE>vga=ask</CODE> in the lilo config file), and write
+the video hardware register contents to files CxR
+(C=cols, R=rows), e.g., 80x25, 132x44, etc.
+Put these files in <CODE>/usr/lib/kbd/videomodes</CODE>.
+Now <CODE>resizecons 132x44</CODE> will change videomode for you
+(and send SIGWINCH to all processes that need to know
+about this, and load another font if necessary).
+<P>At present, <CODE>resizecons</CODE> only succeeds when there is memory enough
+for both the old and the new consoles at the same time.
+<P>
+<HR>
+<A HREF="kbd.FAQ-17.html">Next</A>
+<A HREF="kbd.FAQ-15.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc16">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-17.html b/doc/kbd.FAQ-17.html
new file mode 100644
index 0000000..e486732
--- /dev/null
+++ b/doc/kbd.FAQ-17.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Changing the keyboard repeat rate</TITLE>
+ <LINK HREF="kbd.FAQ-18.html" REL=next>
+ <LINK HREF="kbd.FAQ-16.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc17" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-18.html">Next</A>
+<A HREF="kbd.FAQ-16.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc17">Contents</A>
+<HR>
+<H2><A NAME="s17">17. Changing the keyboard repeat rate</A></H2>
+
+<P>
+<!--
+keyboard!repeat rate, setting
+-->
+<P>At startup, the Linux kernel sets the repeat rate to its maximal value.
+For most keyboards this is reasonable, but for some it means that you
+can hardly touch a key without getting three copies of the corresponding
+symbol. Use the program kbdrate(8) to change the repeat rate, or, if
+that doesn't help, edit or remove the section
+<HR>
+<PRE>
+     ! set the keyboard repeat rate to the max
+
+         mov     ax,#0x0305
+         xor     bx,bx           ! clear bx
+         int     0x16
+</PRE>
+<HR>
+
+of <CODE>/usr/src/linux/[arch/i386/]boot/setup.S</CODE>.
+<P>Scott Johnston (<CODE>sj@zule.com</CODE>) reports: `To program the
+repeat rate of a Gateway AnyKey keyboard all one has to do
+is press the "Repeat Rate" key, then a function key
+F1-F8, then "Repeat Rate" again.  F1 is the slowest possible repeat rate,
+and F8 is really fast.  If you somehow manage to mess up your AnyKey
+keyboard doing this, simply press Ctrl-Alt-SuspndMacro to reset
+your keyboard to factory default settings.'
+<P>
+<HR>
+<A HREF="kbd.FAQ-18.html">Next</A>
+<A HREF="kbd.FAQ-16.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc17">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-18.html b/doc/kbd.FAQ-18.html
new file mode 100644
index 0000000..117cb7f
--- /dev/null
+++ b/doc/kbd.FAQ-18.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Scrolling</TITLE>
+ <LINK HREF="kbd.FAQ-19.html" REL=next>
+ <LINK HREF="kbd.FAQ-17.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc18" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-19.html">Next</A>
+<A HREF="kbd.FAQ-17.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc18">Contents</A>
+<HR>
+<H2><A NAME="s18">18. Scrolling</A></H2>
+
+<P>
+<!--
+console!scrolling
+-->
+
+<!--
+scrolling, console
+-->
+<P>There are two ways to get a screen to scroll.
+The first, called `hard scrolling', is to leave the text in
+video memory as it is, but change the viewing origin. This is
+very fast.
+The second, called `soft scrolling', involves moving all screen text
+up or down. This is much slower.
+The kernel console driver will write text starting at the top of
+the video memory, continuing to the bottom, then copy the bottom
+part to the top again, and continue, all the time using hard scrolling
+to show the right part on the screen.
+You can scroll back until the top op the video memory by using
+Shift-PageUp (the grey PageUp) and scroll down again using
+Shift-PageDown (the grey PageDown), assuming a default keymap.
+The amount of scrollback is thus limited to the amount of video memory
+you happen to have and you cannot increase this amount.
+If you need more scrollback, use some program that
+buffers the text, like <CODE>less</CODE> or <CODE>screen</CODE> - by using
+a buffer on disk you can go back to what you did last week.
+(One can set the amount of scrollback for <CODE>xterm</CODE> by
+adding a line like <CODE>XTerm*saveLines: 2500</CODE> in <CODE>.Xresources</CODE>.)
+<P>Upon changing virtual consoles, the screen content of the old VT
+is copied to kernel memory, and the screen content of the new VT
+is copied from kernel memory to video memory. Only the visible screen
+is copied, not all of video memory, so switching consoles means
+losing the scrollback information.
+<P>Sometimes, hard scrolling is undesirable, for example when the hardware
+does not have the possibility to change viewing origin. The first
+example was a Braille machine that would render the top of video
+memory in Braille. There is a kernel boot-time option <CODE>no-scroll</CODE>
+to tell the console driver not to use hard scrolling.
+See bootparam(7).
+<P>
+<HR>
+<A HREF="kbd.FAQ-19.html">Next</A>
+<A HREF="kbd.FAQ-17.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc18">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-19.html b/doc/kbd.FAQ-19.html
new file mode 100644
index 0000000..4ff5c5a
--- /dev/null
+++ b/doc/kbd.FAQ-19.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Screensaving</TITLE>
+ <LINK HREF="kbd.FAQ-20.html" REL=next>
+ <LINK HREF="kbd.FAQ-18.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc19" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-20.html">Next</A>
+<A HREF="kbd.FAQ-18.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc19">Contents</A>
+<HR>
+<H2><A NAME="s19">19. Screensaving</A></H2>
+
+<P>
+<!--
+screensaving!controlling
+-->
+
+<!--
+screen blanking
+-->
+<P><CODE>setterm -blank</CODE> <I>nn</I> will tell the console driver to blank the
+screen after <I>nn</I> minutes of inactivity. (With <I>nn</I> = 0, screensaving
+is turned off. In some old kernels this first took effect after the next
+keyboard interrupt.)
+<P>The <CODE>s</CODE> option of xset(1) will set the X screensaving parameters:
+<CODE>xset s off</CODE> turns off the screensaver,
+<CODE>xset s 10</CODE> blanks the screen after 10 minutes.
+<P>The video hardware powersaving modes can be enabled/disabled
+using the <CODE>setvesablank</CODE> program given in the starting comment of
+<CODE>/usr/src/linux/drivers/char/vesa_blank.c</CODE>.
+<P>
+<HR>
+<A HREF="kbd.FAQ-20.html">Next</A>
+<A HREF="kbd.FAQ-18.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc19">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-2.html b/doc/kbd.FAQ-2.html
new file mode 100644
index 0000000..fae0792
--- /dev/null
+++ b/doc/kbd.FAQ-2.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Keyboard generalities</TITLE>
+ <LINK HREF="kbd.FAQ-3.html" REL=next>
+ <LINK HREF="kbd.FAQ-1.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc2" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-3.html">Next</A>
+<A HREF="kbd.FAQ-1.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc2">Contents</A>
+<HR>
+<H2><A NAME="s2">2. Keyboard generalities</A></H2>
+
+<P>
+<!--
+keyboard!theory of operation
+-->
+<P>You press a key, and the keyboard controller sends scancodes to the
+kernel keyboard driver. Some keyboards can be programmed, but usually
+the scancodes corresponding to your keys are fixed.
+The kernel keyboard driver just transmits whatever it receives
+to the application program when it is in <EM>scancode mode</EM>,
+like when <CODE>X</CODE> is running. Otherwise, it parses the stream of scancodes
+into keycodes, corresponding to key press or key release events.
+(A single key press can generate up to 6 scancodes.)
+These keycodes are transmitted to the application program when it is
+in <EM>keycode mode</EM> (as used, for example, by <CODE>showkey</CODE>).
+Otherwise, these keycodes are looked up in the keymap, and the character
+or string found there is transmitted to the application, or the action
+described there is performed.
+(For example, if one presses and releases the <CODE>a</CODE> key, then the keyboard
+produces scancodes 0x1e and 0x9e, this is converted to keycodes 30 and 158,
+and then transmitted as 0141, the ASCII or latin-1 code for `a';
+if one presses and releases <CODE>Delete</CODE>, then the keyboard produces scancodes
+0xe0 0x53 0xe0 0xd3, these are converted to keycodes 111 and 239, and then
+transmitted as the 4-symbol sequence ESC [ 3 ~, all assuming
+a US keyboard and a default keymap. An example of a key combination to which
+an action is assigned is Ctrl-Alt-Del.)
+<P>The translation between unusual scancodes and keycodes can be set using the
+utility <CODE>setkeycodes</CODE> - only very few people will need it.
+The translation between keycodes and characters or strings or actions, that is,
+the keymap, is set using the utilities <CODE>loadkeys</CODE> and <CODE>setmetamode</CODE>.
+For details, see getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1),
+setmetamode(1). The format of the files output by <CODE>dumpkeys</CODE> and read
+by <CODE>loadkeys</CODE> is described in keymaps(5).
+<P>Where it says `transmitted to the application' in the above description,
+this really means `transmitted to the terminal driver'. That is, further
+processing is just like that of text that comes in over a serial line.
+The details of this processing are set by the program <CODE>stty</CODE>.
+<P>
+<HR>
+<A HREF="kbd.FAQ-3.html">Next</A>
+<A HREF="kbd.FAQ-1.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc2">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-20.html b/doc/kbd.FAQ-20.html
new file mode 100644
index 0000000..a2bf62d
--- /dev/null
+++ b/doc/kbd.FAQ-20.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Screen dumps</TITLE>
+ <LINK HREF="kbd.FAQ-21.html" REL=next>
+ <LINK HREF="kbd.FAQ-19.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc20" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-21.html">Next</A>
+<A HREF="kbd.FAQ-19.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc20">Contents</A>
+<HR>
+<H2><A NAME="s20">20. Screen dumps</A></H2>
+
+<P>
+<!--
+console!screenshots, obtaining
+-->
+
+<!--
+screenshots!obtaining from console
+-->
+<P><CODE>setterm -dump</CODE> <I>N</I> will dump the contents of the
+screen of <CODE>/dev/tty</CODE><I>N</I> to a file <CODE>screen.dump</CODE>
+in the current directory. See setterm(1).
+<P>The current contents of the screen of <CODE>/dev/tty</CODE><I>N</I>
+can be accessed using the device <CODE>/dev/vcs</CODE><I>N</I>
+(where `vcs' stands for `virtual console screen').
+For example, you could have a clock program that displays the
+current time in the upper right hand corner of the console screen
+(see the program <CODE>vcstime</CODE> in <CODE>kbd-0.96.tar.gz</CODE>).
+Just dumping the contents goes with <CODE>cat /dev/vcs</CODE><I>N</I>.
+These device files <CODE>/dev/vcs</CODE><I>N</I> do not contain
+newlines, and do not contain attributes, like colors. From a program
+it is usually better to use <CODE>/dev/vcsa</CODE><I>N</I>
+(`virtual console screen with attributes') instead - it starts with
+a header giving the number of rows and columns and the location
+of the cursor.
+See vcs(4).
+<P>
+<HR>
+<A HREF="kbd.FAQ-21.html">Next</A>
+<A HREF="kbd.FAQ-19.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc20">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-21.html b/doc/kbd.FAQ-21.html
new file mode 100644
index 0000000..d7c9a58
--- /dev/null
+++ b/doc/kbd.FAQ-21.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Some properties of the VT100 - application key mode</TITLE>
+ <LINK HREF="kbd.FAQ-22.html" REL=next>
+ <LINK HREF="kbd.FAQ-20.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc21" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-22.html">Next</A>
+<A HREF="kbd.FAQ-20.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc21">Contents</A>
+<HR>
+<H2><A NAME="s21">21. Some properties of the VT100 - application key mode</A></H2>
+
+<P>
+<!--
+keyboard!VT100 application key mode
+-->
+
+<!--
+VT100 application key mode
+-->
+<P>: Sometimes my cursor keys or keypad keys produce strange codes?
+<P>When the terminal is in application cursor key mode the cursor keys
+produce  Esc O x  and otherwise  Esc [ x  where x is one of A,B,C,D.
+Certain programs put the terminal in application cursor key mode;
+if you kill them with <CODE>kill -9</CODE>, or if they crash, then the mode will
+not be reset.
+<PRE>
+        % echo -e '\033c'  
+</PRE>
+
+resets all properties of the current VC. Just changing the cursor
+application key mode is done by
+<PRE>
+        % echo -e '\033[?1h' 
+</PRE>
+
+(set) and
+<PRE>
+        % echo -e '\033[?1l' 
+</PRE>
+
+(clear).
+<P>When the terminal is in application keypad key mode the keypad keys
+produce  Esc O y  and otherwise  Esc [ z ~  for
+certain y and z. Setting application keypad key mode is done by
+<PRE>
+        % echo -e '\033=' 
+</PRE>
+
+and
+<PRE>
+        % echo -e '\033&gt;' 
+</PRE>
+
+clears it again.
+<P>
+<HR>
+<A HREF="kbd.FAQ-22.html">Next</A>
+<A HREF="kbd.FAQ-20.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc21">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-22.html b/doc/kbd.FAQ-22.html
new file mode 100644
index 0000000..06e21d4
--- /dev/null
+++ b/doc/kbd.FAQ-22.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Hardware incompatibility</TITLE>
+ <LINK HREF="kbd.FAQ-23.html" REL=next>
+ <LINK HREF="kbd.FAQ-21.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc22" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-23.html">Next</A>
+<A HREF="kbd.FAQ-21.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc22">Contents</A>
+<HR>
+<H2><A NAME="s22">22. Hardware incompatibility</A></H2>
+
+<P>
+<!--
+keyboard!hardware incompatibilities
+-->
+
+<!--
+incompatibility!keyboard-related
+-->
+<P>Several people have noticed that they lose typed characters when
+a floppy disk is active. It seems that this might be a problem with
+Uni-486WB motherboards.
+<P>Tjalling Tjalkens (<CODE>tjalling@ei.ele.tue.nl</CODE>) reports very similar problems
+with "a no-brand GMB-486 UNP Vesa motherboard with AMD 486DX2-66 CPU" -
+during floppy activity some keystrokes are lost, during floppy tape streamer
+(Conner C 250 MQ) activity many keystrokes are lost.
+<P>Some people experience sporadic lockups - sometimes associated to
+hard disk activity or other I/O.
+<P>Ulf Tietz (<CODE>ulf@rio70.bln.sni.de</CODE>) wrote:
+`I have had the same problems, when I had my motherboard tuned too fast.
+So I reset all the timings ( CLK, wait statements etc ) to more 
+conventional values, and the problems are gone.'
+<P>Bill Hogan (<CODE>bhogan@crl.com</CODE>) wrote:
+`If you have an AMI BIOS, you might try setting the Gate A20 emulation
+parameter to "chipset" (if you have that option). Whenever I have had
+that parameter set to any of the other options on my machine
+("fast", "both", "disabled") I have had frequent keyboard lockups.'
+<P>There may be a relation between keyboard problems and the video card in use.
+<P>Shawn K. Quinn (<CODE>skquinn@wt.net</CODE>) wrote:
+`I have a Zeos Pantera Pentium-90 that originally came with a Diamond Stealth
+64 S3-based video card. Under X I frequently got q's inserted into my text
+(how annoying) especially if I typed very fast (during Netrek for instance,
+even more annoying because guess what that does :-( ).
+Switching to a Creative Labs Graphics Blaster MA202 solved the problem.
+I'm assuming the Stealth 64 did something funny with the timings.'
+<P>
+<HR>
+<A HREF="kbd.FAQ-23.html">Next</A>
+<A HREF="kbd.FAQ-21.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc22">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-23.html b/doc/kbd.FAQ-23.html
new file mode 100644
index 0000000..be9f13a
--- /dev/null
+++ b/doc/kbd.FAQ-23.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Copyright</TITLE>
+ <LINK HREF="kbd.FAQ-22.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc23" REL=contents>
+</HEAD>
+<BODY>
+Next
+<A HREF="kbd.FAQ-22.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc23">Contents</A>
+<HR>
+<H2><A NAME="s23">23. Copyright</A></H2>
+
+<P>Copyright (c) 1993-1999 by Andries Brouwer.  This document may be
+distributed under the terms set forth in the LDP license 
+at 
+<A HREF="http://sunsite.unc.edu/LDP/COPYRIGHT.html">http://sunsite.unc.edu/LDP/COPYRIGHT.html</A> or
+<A HREF="ftp://www.win.tue.nl/pub/linux/LDP/COPYRIGHT.txt">ftp://www.win.tue.nl/pub/linux/LDP/COPYRIGHT.txt</A>.
+<P>Additions and corrections are welcome.
+Andries Brouwer - <CODE>aeb@cwi.nl</CODE>
+<P>
+<HR>
+Next
+<A HREF="kbd.FAQ-22.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc23">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-3.html b/doc/kbd.FAQ-3.html
new file mode 100644
index 0000000..c738901
--- /dev/null
+++ b/doc/kbd.FAQ-3.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Console generalities</TITLE>
+ <LINK HREF="kbd.FAQ-4.html" REL=next>
+ <LINK HREF="kbd.FAQ-2.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc3" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-4.html">Next</A>
+<A HREF="kbd.FAQ-2.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc3">Contents</A>
+<HR>
+<H2><A NAME="s3">3. Console generalities</A></H2>
+
+<P>
+<!--
+console!theory of operation
+-->
+<P>Conversely, when you output something to the console, it first undergoes
+the standard tty processing, and then is fed to the console driver.
+The console driver emulates a VT100, and parses the input in order to
+recognize VT100 escape sequences (for cursor movement, clear screen, etc.).
+The characters that are not part of an escape sequence are first converted
+into Unicode, using one of four mapping tables if the console was not
+in UTF-8 mode to start with, then looked up in the table describing
+the correspondence between Unicode values and font positions,
+and the obtained 8- or 9-bit font indices are then written to video memory,
+where they cause the display of character shapes found in the video card's
+character ROM.
+One can load one's own fonts into character ROM using
+<CODE>setfont</CODE>, load the corresponding Unicode map with <CODE>loadunimap</CODE>,
+and load a user mapping table using <CODE>mapscrn</CODE>.
+More details will be given below.
+<P>There are many consoles (called <I>Virtual Consoles</I> or
+<I>Virtual Terminals</I>, abbreviated VCs or VTs) that share the same
+screen. You can use them as independent devices, either to run
+indendent login sessions, or just to send some output to, perhaps
+from <CODE>top</CODE>, or the tail of the system log or so.
+See below (`Console switching') on how to set them up and
+switch between them.
+<P>
+<P>
+<HR>
+<A HREF="kbd.FAQ-4.html">Next</A>
+<A HREF="kbd.FAQ-2.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc3">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-4.html b/doc/kbd.FAQ-4.html
new file mode 100644
index 0000000..2fc0af3
--- /dev/null
+++ b/doc/kbd.FAQ-4.html
@@ -0,0 +1,226 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Resetting your terminal</TITLE>
+ <LINK HREF="kbd.FAQ-5.html" REL=next>
+ <LINK HREF="kbd.FAQ-3.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc4" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-5.html">Next</A>
+<A HREF="kbd.FAQ-3.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc4">Contents</A>
+<HR>
+<H2><A NAME="s4">4. Resetting your terminal</A></H2>
+
+<P>
+<!--
+terminal!resetting
+-->
+
+<!--
+screen!clearing
+-->
+
+<!--
+console!clearing
+-->
+<P>There is garbage on the screen, or all your keystrokes are echoed
+as line drawing characters. What to do?
+<P>Many programs will redraw the screen when Ctrl-L is typed. This might
+help when there is some modem noise or broadcast message on your screen.
+The command <CODE>clear</CODE> will clear the screen.
+<P>The command <CODE>reset</CODE> will reset the console driver. This helps when
+the screen is full of funny graphic characters, and also if it is
+reduced to the bottom line. If you don't have this command, or if it
+does something else, make your own by putting the following two lines
+in an executable file <CODE>reset</CODE> in your PATH:
+<BLOCKQUOTE><CODE>
+<PRE>
+        #!/bin/sh
+        echo -e \\033c
+</PRE>
+</CODE></BLOCKQUOTE>
+
+that is, you want to send the two characters ESC c to the console.
+<P>Why is it that the display sometimes gets confused and gives you
+a 24-line or 1-line screen, instead of the usual 25 lines?
+Well, the main culprit is the use of <CODE>TERM=vt100</CODE> (or some other
+entry with 24 lines) instead of <CODE>TERM=linux</CODE> when logged in remotely.
+If this happens on <CODE>/dev/tty2</CODE> then typing
+<BLOCKQUOTE><CODE>
+<PRE>
+        % cat > /dev/tty2
+        ^[c
+        ^D
+</PRE>
+</CODE></BLOCKQUOTE>
+
+on some other VT (where 4 symbols are typed to <CODE>cat</CODE>: ESC, c, ENTER,
+Ctrl-D) and refreshing the screen on <CODE>/dev/tty2</CODE>
+(perhaps using Ctrl-L) will fix things. Of course the permanent fix
+is to use the right termcap or terminfo entry.
+<P>Why is it that you sometimes get a lot of line-drawing characters,
+e.g., after catting a binary to the screen?
+Well, there are various character set changing escape sequences,
+and by accident your binary might contain some of these.
+The ESC c is a general reset, a cure for all, but if you know
+precisely what went wrong you can repair it without resetting
+other console attributes. For example, after
+<BLOCKQUOTE><CODE>
+<PRE>
+        % cat
+        ^N
+        ^D
+</PRE>
+</CODE></BLOCKQUOTE>
+
+your shell prompt will be all line-drawing characters.
+Now do (typing blindly)
+<BLOCKQUOTE><CODE>
+<PRE>
+        % cat
+        ^O
+        ^D
+</PRE>
+</CODE></BLOCKQUOTE>
+
+and all is well again. (Three symbols typed to each <CODE>cat</CODE>:
+Ctrl-N (or Ctrl-O), ENTER, Ctrl-D.) To understand what is happening,
+see `The console character sets' below.
+<P>If you loaded some strange font, and want to return to the default,
+<BLOCKQUOTE><CODE>
+<PRE>
+        % setfont
+</PRE>
+</CODE></BLOCKQUOTE>
+
+will do (provided you stored the default font in the default place).
+If this default font does not contain an embedded Unicode map (and
+gives the wrong symbols for accented characters), then say
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadunimap
+</PRE>
+</CODE></BLOCKQUOTE>
+
+For example, if I do
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys de-latin1
+</PRE>
+</CODE></BLOCKQUOTE>
+
+then I have a German keyboard, and the key left of the Enter key
+gives me a-umlaut. This works, because the a-umlaut occurs
+on the CP437 code page and the kernel Unicode map is initialized
+to CP437, and my video card has a CP437 font built-in.
+If I now load an ISO 8859-1 font with
+<BLOCKQUOTE><CODE>
+<PRE>
+        % setfont iso01.f16
+</PRE>
+</CODE></BLOCKQUOTE>
+
+then everything still works, because <CODE>setfont</CODE> invalidates the kernel
+Unicode map (if there is no Unicode map attached to the font), and without
+map the kernel goes directly to the font, and that is precisely correct
+for an ISO 8859-1 system with <CODE>iso01.f16</CODE> font.
+But going back to the previous font with
+<BLOCKQUOTE><CODE>
+<PRE>
+        % setfont
+</PRE>
+</CODE></BLOCKQUOTE>
+
+gives capital Sigma's instead of a-umlaut - all accented letters
+are mixed up because also this font has no embedded Unicode map. After
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadunimap
+</PRE>
+</CODE></BLOCKQUOTE>
+
+which loads the default Unicode map (which is right for the default
+font) all works correctly again. Usually <CODE>loadunimap</CODE> is not
+invoked directly, but via <CODE>setfont</CODE>. Thus, the previous two
+commands may be replaced by
+<BLOCKQUOTE><CODE>
+<PRE>
+        % setfont -u def
+</PRE>
+</CODE></BLOCKQUOTE>
+
+The Ethiopian fonts and the <CODE>lat1u*.psf</CODE> fonts have embedded
+Unicode code map. Most of the others don't.
+<P>On old terminals output involving tabs may require a delay, and you
+have to say
+<BLOCKQUOTE><CODE>
+<PRE>
+        % stty tab3
+</PRE>
+</CODE></BLOCKQUOTE>
+
+(see stty(1)).
+<P>You can change the video mode using <CODE>resizecons</CODE> or
+<CODE>SVGATextMode</CODE>.
+This usually settles the output side.
+On the input side there are many things that might be wrong. If <CODE>X</CODE> or
+<CODE>DOOM</CODE> or some other program using raw mode crashed, your keyboard may
+still be in raw (or mediumraw) mode, and it is difficult to give commands.
+(See "How to get out of raw mode" below.)
+If you loaded a bad keymap, then
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys -d
+</PRE>
+</CODE></BLOCKQUOTE>
+
+loads the default map again, but it may well be difficult to type `-'!
+An alternative is
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys defkeymap
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Sometimes even the letters are garbled. It is useful to know that there
+are four main types of keyboards: QWERTY, QWERTZ, AZERTY and DVORAK.
+The first three are named after the first six letter keys, and roughly
+represent the English, German and French speaking countries.
+Compared to QWERTY, the QWERTZ map interchanges Y and Z.
+Compared to QWERTY, the AZERTY map interchanges Q and A, W and Z, and has
+its M right of the L, at the semicolon position.
+DVORAK has an entirely different letter ordering.
+There are two types of Turkish keyboard. The so-called `Q'-keyboard
+has a QWERTY layout, while the `F'-keyboard has an entirely
+different layout, let us say fgGIod, where G stands for Gbreve
+and I for dotlessi.
+<P>
+<H2><A NAME="ss4.1">4.1 Keyboard hardware reset</A>
+</H2>
+
+<P>
+<!--
+keyboard!resetting
+-->
+<P>Things may be wrong on a lower level than Linux knows about.
+There are at least two distinct lower levels (keyboard and keyboard controller)
+where one can give the command "keyboard disable" to the keyboard hardware.
+Keyboards can often be programmed to use one out of three
+different sets of scancodes.
+<P>However, I do not know of cases where this turned out to be
+a problem.
+<P>Some keyboards have a remapping capability built in.
+Stormy Henderson (<CODE>stormy@Ghost.Net</CODE>) writes:
+`If it's your keyboard accidently being reprogrammed, you can
+(on a Gateway AnyKey keyboard) press control-alt-suspend_macro
+to reset the keys to normal.'
+<P>
+<HR>
+<A HREF="kbd.FAQ-5.html">Next</A>
+<A HREF="kbd.FAQ-3.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc4">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-5.html b/doc/kbd.FAQ-5.html
new file mode 100644
index 0000000..0106d39
--- /dev/null
+++ b/doc/kbd.FAQ-5.html
@@ -0,0 +1,521 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Delete and Backspace</TITLE>
+ <LINK HREF="kbd.FAQ-6.html" REL=next>
+ <LINK HREF="kbd.FAQ-4.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc5" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-6.html">Next</A>
+<A HREF="kbd.FAQ-4.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc5">Contents</A>
+<HR>
+<H2><A NAME="s5">5. Delete and Backspace</A></H2>
+
+<P>
+<!--
+delete key!problems with
+-->
+
+<!--
+backspace key!problems with
+-->
+<P>Getting Delete and Backspace to work just right is nontrivial,
+especially in a mixed environment, where you talk to console,
+to <CODE>X</CODE>, to <CODE>bash</CODE>, to <CODE>emacs</CODE>, login remotely, etc.
+You may have to edit several configuration files to tell all
+of the programs involved precisely what you want.
+On the one hand, there is the matter of which keys generate
+which codes (and how these codes are remapped by e.g. <CODE>kermit</CODE>
+or <CODE>emacs</CODE>), and on the other hand the question of what functions
+are bound to what codes.
+<P>People often complain `my backspace key does not work', as if this
+key had a built-in function `delete previous character'.
+Unfortunately, all this key, or any key, does is producing a code,
+and one only can hope that the kernel tty driver and
+all application programs can be configured such that
+the backspace key indeed does function as a `delete previous character'
+key.
+<P>Most Unix programs get their tty input via the kernel tty driver
+in `cooked' mode, and a simple <CODE>stty</CODE> command determines the
+erase character. However, programs like <CODE>bash</CODE> and <CODE>emacs</CODE>
+and <CODE>X</CODE> do their own input handling, and have to be convinced
+one-by-one to do the right thing.
+<P>
+<H2><A NAME="ss5.1">5.1 How to tell Unix what character you want to use to delete the last typed character</A>
+</H2>
+
+<P>
+<!--
+stty!using to set erase character
+-->
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+        % stty erase ^?
+</PRE>
+</CODE></BLOCKQUOTE>
+
+If the character is erased, but in a funny way, then something is
+wrong with your tty settings. If <CODE>echoprt</CODE> is set, then erased characters
+are enclosed between <CODE>\</CODE> and <CODE>/</CODE>.
+If <CODE>echoe</CODE> is not set, then the erase char is echoed
+(which is reasonable when it is a printing character, like #).
+Most people will want <CODE>stty echoe -echoprt</CODE>. Saying <CODE>stty sane</CODE>
+will do this and more. Saying <CODE>stty -a</CODE> shows your current settings.
+How come this is not right by default? It is, if you use the right
+<CODE>getty</CODE>.
+<P>Note that many programs (like <CODE>bash</CODE>, <CODE>emacs</CODE> etc.) have their own
+keybindings (defined in <CODE>~/.inputrc</CODE>, <CODE>~/.emacs</CODE> etc.) and
+are unaffected by the setting of the erase character.
+<P>The standard Unix tty driver does not recognize a cursor, or keys
+(like the arrow keys) to move the current position, and hence does not
+have a command `delete current character' either. But for example
+you can get <CODE>bash</CODE> on the console to recognize the Delete key by putting
+<BLOCKQUOTE><CODE>
+<PRE>
+        set editing-mode emacs
+        "\e[3~":delete-char
+</PRE>
+</CODE></BLOCKQUOTE>
+
+into <CODE>~/.inputrc</CODE>.
+<P>
+<H3>`Getty used to do the right thing with DEL and BS but is broken now?'</H3>
+
+<P>
+<!--
+getty!problems with BS and DEL
+-->
+<P>Earlier, the console driver would do BS Space BS
+(<CODE>\010\040\010</CODE>)
+when it got a DEL (<CODE>\177</CODE>).
+Nowadays, DEL's are ignored (as they should be,
+since the driver emulates a vt100). Get a better getty, i.e.,
+one that does not output DEL.
+<P>
+<H3>`Login behaves differently at the first and second login attempts?'</H3>
+
+<P>
+<!--
+login!problems with BS and DEL
+-->
+<P>At the first attempt, you are talking to <CODE>getty</CODE>. At the second attempt,
+you are talking to <CODE>login</CODE>, a different program.
+<P>
+<H2><A NAME="ss5.2">5.2 How to tell Linux what code to generate when a key is pressed</A>
+</H2>
+
+<P>
+<!--
+keyboard!keycode remapping
+-->
+
+<!--
+keycode remapping
+-->
+<P>On the console, or, more precisely, when not in (MEDIUM)RAW mode, use
+<BLOCKQUOTE><CODE>
+<PRE>
+        % loadkeys mykeys.map
+</PRE>
+</CODE></BLOCKQUOTE>
+
+and under X use
+<BLOCKQUOTE><CODE>
+<PRE>
+        % xmodmap mykeys.xmap
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Note that (since XFree86-2.1) X reads the Linux settings of the keymaps
+when initialising the X keymap. Although the two systems are not
+100% compatible, this should mean that in many cases the use of
+<CODE>xmodmap</CODE> has become superfluous.
+<P>For example, suppose that you would like the Backspace key
+to send a BackSpace (Ctrl-H, octal 010) and the grey Delete key
+a DEL (octal 0177). Add the following to <CODE>/etc/rc.local</CODE>
+(or wherever you keep your local boot-time stuff):
+<BLOCKQUOTE><CODE>
+<PRE>
+        /usr/bin/loadkeys &lt;&lt; EOF
+        keycode 14 = BackSpace
+        keycode 111 = Delete
+        EOF
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Note that this will only change the function of these keys
+when no modifiers are used. (You need to specify a keymaps line
+to tell which keymaps should be affected if you want to change
+bindings on more keymaps.)
+The Linux kernel default lets
+Ctrl-Backspace generate BackSpace - this is sometimes useful
+as emergency escape, when you find you can only generate DELs.
+<P>The left Alt key is sometimes called the Meta key, and by
+default the combinations AltL-X are bound to the symbol MetaX.
+But what character sequence is MetaX?
+That is determined (per-tty) by the Meta flag, set by the command
+<CODE>setmetamode</CODE>. The two choices are: ESC X or X or-ed with 0200.
+<P>Many distributions have a <CODE>loadkeys</CODE> command somewhere in the
+bootup sequence. For example, one may have the name of the desired
+keymap in <CODE>/etc/sysconfig/keyboard</CODE> and the <CODE>loadkeys</CODE>
+command that loads it in <CODE>/etc/rc.d/init.d/keytable</CODE>.
+Or one may have the actual default keymap in <CODE>/etc/default.keytab</CODE>
+and the loadkeys command that loads it in <CODE>/etc/rc.d/boot</CODE>.
+Etc. Instead of adding a local modification to the default, one can
+of course change the default by editing the default keymap or changing
+the name of the keymap to be loaded at boot time. Note that <CODE>loadkeys</CODE>
+itself has default keymap <CODE>defkeymap.map</CODE> located somewhere under
+<CODE>/usr/lib/kbd</CODE> or <CODE>/usr/share/kbd</CODE> (just like all other
+keymaps) and this may not yet be available in single user boot before
+<CODE>/usr</CODE> has been mounted.
+<P>
+<H3>`Why doesn't the Backspace key generate BackSpace by default?'</H3>
+
+<P>
+<!--
+backspace key!not generating correct keycode
+-->
+<P>(i) Because the VT100 had a Delete key above the Enter key.
+<P>(ii) Because Linus decided so.
+<P>
+<H2><A NAME="ss5.3">5.3 How to tell X to interchange Delete and Backspace</A>
+</H2>
+
+<P>
+<!--
+X!swapping DEL, BS
+-->
+
+<!--
+xmodmap!using to swap DEL, BS
+-->
+<P>
+<BLOCKQUOTE><CODE>
+<PRE>
+        % xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Or, if you just want the Backspace key to generate a BackSpace:
+<BLOCKQUOTE><CODE>
+<PRE>
+        % xmodmap -e "keycode 22 = BackSpace"
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Or, if you just want the Delete key to generate a Delete:
+<BLOCKQUOTE><CODE>
+<PRE>
+        % xmodmap -e "keycode 107 = Delete"
+</PRE>
+</CODE></BLOCKQUOTE>
+
+(but usually this is the default binding already).
+<P>
+<H2><A NAME="ss5.4">5.4 How to tell emacs what to do when it receives a Delete or Backspace</A>
+</H2>
+
+<P>
+<!--
+emacs!binding DEL, BS
+-->
+<P>Put in your <CODE>.emacs</CODE> file lines like
+<BLOCKQUOTE><CODE>
+<PRE>
+        (global-set-key "\?" 'help-command)
+        (global-set-key "\C-h" 'delete-backward-char)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Of course you can bind other commands to other keys in the same way.
+Note that various major and minor modes redefine keybindings.
+For example, in incremental search mode one finds the code
+<BLOCKQUOTE><CODE>
+<PRE>
+        (define-key map "\177" 'isearch-delete-char)
+        (define-key map "\C-h" 'isearch-mode-help)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+This means that it may be a bad idea to use the above two
+global-set-key commands. There are too many places where
+there are built-in assumptions about Ctrl-H = help and DEL = delete.
+That doesn't mean that you have to setup keys so that Backspace
+generates DEL. But if it doesn't then it is easiest to remap
+them at the lowest possible level in emacs.
+<P>
+<H2><A NAME="ss5.5">5.5 How to tell emacs to interchange Delete and Backspace</A>
+</H2>
+
+<P>
+<!--
+emacs!swapping DEL, BS
+-->
+<P>Put in your <CODE>.emacs</CODE> file lines
+<BLOCKQUOTE><CODE>
+<PRE>
+        (setq keyboard-translate-table (make-string 128 0))
+        (let ((i 0))
+          (while (&lt; i 128)
+            (aset keyboard-translate-table i i)
+            (setq i (1+ i))))
+        (aset keyboard-translate-table ?\b ?\^?)
+        (aset keyboard-translate-table ?\^? ?\b)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Recent versions of emacs have a function <CODE>keyboard-translate</CODE>
+and one may simplify the above to
+<BLOCKQUOTE><CODE>
+<PRE>
+        (keyboard-translate ?\C-h ?\C-?)
+        (keyboard-translate ?\C-? ?\C-h)
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Note that under X emacs can distinguish between Ctrl-h and the
+Backspace key (regardless of what codes these produce on the console),
+and by default emacs will view the Backspace key as DEL
+(and do deletion things, as bound to that character, rather than
+help things, bound to Ctrl-H). One can distinguish Backspace and Delete,
+e.g. by
+<BLOCKQUOTE><CODE>
+<PRE>
+        (global-unset-key [backspace] )
+        (global-set-key [backspace] 'delete-backward-char)
+        (global-unset-key [delete] )
+        (global-set-key [delete] 'delete-char)
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss5.6">5.6 How to tell kermit to interchange Delete and Backspace</A>
+</H2>
+
+<P>
+<!--
+kermit!swapping DEL, BS
+-->
+<P>Put in your <CODE>.kermrc</CODE> file the lines
+<BLOCKQUOTE><CODE>
+<PRE>
+        set key \127 \8
+        set key \8 \127
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss5.7">5.7 How to tell xterm to interchange Delete and Backspace</A>
+</H2>
+
+<P>
+<!--
+xterm!swapping DEL, BS
+-->
+
+<BLOCKQUOTE><CODE>
+<PRE>
+XTerm*VT100.Translations:       #override\n\
+        &lt;KeyPress> BackSpace : string(0x7f)\n\
+        &lt;KeyPress> Delete : string(0x08)\n
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>
+<H2><A NAME="ss5.8">5.8 How to tell xterm about your favourite tty modes</A>
+</H2>
+
+<P>
+<!--
+xterm!setting tty modes for
+-->
+<P>Normally xterm will inherit the tty modes from its invoker.
+Under <CODE>xdm</CODE>, the default erase and kill characters are <CODE>#</CODE> and <CODE>@</CODE>,
+as in good old Unix Version 6.
+If you don't like that, you might put something like
+<BLOCKQUOTE><CODE>
+<PRE>
+        XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D \ 
+                        susp ^Z start ^Q stop ^S eol ^@
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>/usr/lib/X11/app-defaults/XTerm</CODE> or in
+<CODE>$HOME/.Xresources</CODE>, assuming that you have a line
+<BLOCKQUOTE><CODE>
+<PRE>
+        xrdb -merge $HOME/.Xresources
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in your <CODE>$HOME/.xinitrc</CODE> or <CODE>$HOME/.xsession</CODE>.
+<P>
+<H2><A NAME="ss5.9">5.9 How to tell xmosaic that the Backspace key generates a DEL</A>
+</H2>
+
+<P>
+<!--
+xmosaic!remapping BS key
+-->
+
+<!--
+Netscape!remapping BS
+-->
+<P>Putting
+<BLOCKQUOTE><CODE>
+<PRE>
+        *XmText.translations: #override\n\
+           &lt;Key>osfDelete: delete-previous-character()
+        *XmTextField.translations: #override\n\
+           &lt;Key>osfDelete: delete-previous-character()
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in your <CODE>$HOME/.Xdefaults</CODE> or
+<CODE>$HOME/.Xresources</CODE> helps.
+(What file? The file that is fed to <CODE>xrdb</CODE>, for example
+in <CODE>.xinitrc</CODE>.)
+<P>The netscape FAQ, however, says:
+<PRE>
+        Why doesn't my Backspace key work in text fields? 
+        By default, Linux and XFree86 come with the Backspace and Delete keys
+        misconfigured. All Motif programs (including, of course, Netscape
+        Navigator) will malfunction in the same way.
+
+        The Motif spec says that Backspace is supposed to delete the previous
+        character and Delete is supposed to delete the following character.
+        Linux and XFree86 come configured with both the Backspace and Delete
+        keys generating Delete.
+
+        You can fix this by using any one of the xmodmap, xkeycaps, or
+        loadkeys programs to make the key in question generate the BackSpace
+        keysym instead of Delete.
+
+        You can also fix it by having a .motifbind file; see the man page
+        for VirtualBindings(3).
+
+        Note: Don't use the *XmText.translations or *XmTextField.translations
+        resources to attempt to fix this problem. If you do, you will blow
+        away Netscape Navigator's other text-field key bindings.
+</PRE>
+<P>
+<H2><A NAME="ss5.10">5.10 A better solution for Motif-using programs, like netscape</A>
+</H2>
+
+<P>
+<!--
+Netscape!remapping BS
+-->
+
+<!--
+Motif!remapping BS
+-->
+<P>Ted Kandell (<CODE>ted@tcg.net</CODE>) suggests the following:
+<P>Somewhere in your .profile add the following:
+<BLOCKQUOTE><CODE>
+<PRE>
+stty erase ^H
+</PRE>
+</CODE></BLOCKQUOTE>
+
+If you are using <CODE>bash</CODE>, add the following lines to your <CODE>.inputrc</CODE>:
+<BLOCKQUOTE><CODE>
+<PRE>
+"\C-?": delete-char
+"\C-h": backward-delete-char
+</PRE>
+</CODE></BLOCKQUOTE>
+
+Add the following lines to your .xinitrc file:
+<BLOCKQUOTE><CODE>
+<PRE>
+xmodmap &lt;&lt;-EOF
+keycode 22  =  BackSpace osfBackSpace
+keycode 107 =  Delete
+EOF
+
+# start your window manager here,  for example:
+#(fvwm) 2>&amp;1 | tee /dev/tty /dev/console
+
+stty sane
+stty erase ^H
+loadmap &lt;&lt;-EOF
+keycode 14  = BackSpace
+keycode 111 = Delete
+EOF
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>This will definitely work for a PC 101 or 102 key keyboard
+with any Linux/XFree86 layout.
+<P>The important part to making Motif apps like Netscape work properly
+is adding osfBackSpace to keycode 22 in addition to BackSpace.
+<P>Note that there must be spaces on either side of the = sign.
+<P>
+<P>
+<H2><A NAME="ss5.11">5.11 What about termcap and terminfo?</A>
+</H2>
+
+<P>
+<!--
+termcap!remapping BS with
+-->
+
+<!--
+terminfo!remapping BS with
+-->
+<P>When people have problems with backspace, they tend to look at their termcap
+(or terminfo) entry for the terminal, and indeed, there does exist a kb
+(or kbs) capability describing the code generated by the Backspace key.
+However, not many programs use it, so unless you are having problems with one
+particular program only, probably the fault is elsewhere.
+Of course it is a good idea anyway to correct your termcap (terminfo) entry.
+See also below under "The TERM variable".
+<P>
+<H2><A NAME="ss5.12">5.12 A complete solution</A>
+</H2>
+
+<P>There are many possibilities to get a functioning system.
+Can't you give one complete set of settings that works?
+<!--
+delete key!a solution
+-->
+
+<!--
+backspace key!a solution
+-->
+<P>One way of getting a setup that works in all contexts
+is to have the Backspace key generate DEL when on the
+console (or xterm), and BackSpace when under X.
+Maybe that is most convenient - there are too many X utilities
+that expect BackSpace, and emacs on the console or xterm
+expects DEL, while emacs under X can distinguish [BackSpace]
+from Ctrl-H and does the right thing.
+<P>What is needed?
+No loadkeys changes, since the Backspace key already generates
+DEL by default.  No stty settings, they are OK by default.
+No X settings, they are OK by default.
+One just has to tell xterm that the Backspace key should generate DEL:
+put 
+<BLOCKQUOTE><CODE>
+<PRE>
+XTerm*VT100.Translations:       #override\n\
+        &lt;KeyPress> BackSpace : string(0x7f)\n\
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>.Xresources</CODE>, and
+<BLOCKQUOTE><CODE>
+<PRE>
+xrdb -merge .Xresources
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>.xinitrc</CODE>, and you are settled.
+<P>
+<HR>
+<A HREF="kbd.FAQ-6.html">Next</A>
+<A HREF="kbd.FAQ-4.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc5">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-6.html b/doc/kbd.FAQ-6.html
new file mode 100644
index 0000000..8744ed2
--- /dev/null
+++ b/doc/kbd.FAQ-6.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: The console character sets</TITLE>
+ <LINK HREF="kbd.FAQ-7.html" REL=next>
+ <LINK HREF="kbd.FAQ-5.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc6" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-7.html">Next</A>
+<A HREF="kbd.FAQ-5.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc6">Contents</A>
+<HR>
+<H2><A NAME="s6">6. The console character sets</A></H2>
+
+<P>
+<!--
+console character sets
+-->
+
+<!--
+character sets, console
+-->
+<P>The kernel first tries to figure out what symbol is meant by any given
+user byte, and next where this symbol is located in the current font.
+<P>The kernel knows about 5 translations of bytes into console-screen symbols.
+In Unicode (UTF-8) mode, the UTF-8 code is just converted directly into
+Unicode. The assumption is that almost all symbols one needs are present
+in Unicode, and for the cases where this does not hold the codes 0xff**
+are reserved for direct font access.
+When not in Unicode mode, one of four translation tables is used.
+The four tables are: a) Latin1 -&gt; Unicode,  b) VT100 graphics -&gt; Unicode,
+c) PC -&gt; Unicode, d) user-defined.
+<P>There are two character sets, called G0 and G1, and one of them
+is the current character set. (Initially G0.)
+Typing Ctrl-N causes G1 to become current, Ctrl-O causes G0 to become current.
+<P>These variables G0 and G1 point at a translation table, and can be changed
+by the user. Initially they point at tables a) and b), respectively.
+The sequences ESC ( B and ESC ( 0 and ESC ( U and ESC ( K cause G0 to point
+at translation table a), b), c) and d), respectively.
+The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC ) K cause G1 to point
+at translation table a), b), c) and d), respectively.
+<P>The sequence ESC c causes a terminal reset, which is what you want if the
+screen is all garbled. The oft-advised <CODE>echo ^V^O</CODE> will only
+make G0 current, but there is no guarantee that G0 points at table a).
+In some distributions there is a program reset(1) that just does
+<CODE>echo ^[c</CODE>.
+If your termcap entry for the console is correct (and has an entry
+<CODE>:rs=\Ec:</CODE>), then also <CODE>setterm -reset</CODE> will work.
+<P>The user-defined mapping table can be set using mapscrn(8).
+The result of the mapping is that if a symbol c is printed, the symbol
+<CODE>s = map[c]</CODE> is sent to the video memory. The bitmap that corresponds to
+<CODE>s</CODE> is found in the character ROM, and can be changed using setfont(8).
+<P>
+<HR>
+<A HREF="kbd.FAQ-7.html">Next</A>
+<A HREF="kbd.FAQ-5.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc6">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-7.html b/doc/kbd.FAQ-7.html
new file mode 100644
index 0000000..de93925
--- /dev/null
+++ b/doc/kbd.FAQ-7.html
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Console switching</TITLE>
+ <LINK HREF="kbd.FAQ-8.html" REL=next>
+ <LINK HREF="kbd.FAQ-6.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc7" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-8.html">Next</A>
+<A HREF="kbd.FAQ-6.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc7">Contents</A>
+<HR>
+<H2><A NAME="s7">7. Console switching</A></H2>
+
+<P>
+<!--
+console!switching
+-->
+<P>By default, console switching is done using Alt-Fn or Ctrl-Alt-Fn.
+Under <CODE>X</CODE> (or recent versions of <CODE>dosemu</CODE>), only Ctrl-Alt-Fn works.
+Many keymaps will allow cyclic walks through all allocated consoles
+using Alt-RightArrow and Alt-LeftArrow.
+<P>XFree86 1.3 does not know that Alt is down when you switch to the X
+window. Thus, you cannot switch immediately to some other VT again
+but have to release Alt first.
+In the other direction this should work: the kernel always keeps
+track of the up/down status of all keys. (As far as possible: on some
+keyboards some keys do not emit a scancode when pressed (e.g.: the PFn
+keys of a FOCUS 9000) or released (e.g.: the Pause key of many keyboards).)
+<P>XFree86 1.3 saves the fonts loaded in the character ROMs when started,
+and restores it on a console switch. Thus, the result of <CODE>setfont</CODE> on
+a VT is wiped out when you go to X and back.
+Using <CODE>setfont</CODE> under X will lead to funny results.
+<P>One can change VT under program control using the <CODE>chvt</CODE> command.
+<P>
+<H2><A NAME="ss7.1">7.1 Changing the number of Virtual Consoles</A>
+</H2>
+
+<P>
+<!--
+console!changing number of
+-->
+<P>This question still comes up from time to time, but the answer is:
+you already have enough of them.
+Since kernel version 1.1.54, there are between 1 and 63 virtual
+consoles. A new one is created as soon as it is opened. It is
+removed by the utility <CODE>deallocvt</CODE> (but it can be removed only when
+no processes are associated to it anymore, and no text on it has been
+selected by programs like <CODE>selection</CODE> or <CODE>gpm</CODE>).
+<P>For older kernels, change the line
+<BLOCKQUOTE><CODE>
+<PRE>
+        #define NR_CONSOLES     8
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>include/linux/tty.h</CODE> (don't increase this number beyond 63),
+and recompile the kernel.
+<P>If they do not exist yet, create the tty devices with <CODE>MAKEDEV</CODE>
+or <CODE>mknod tty</CODE>N <CODE>c 4</CODE> N where N denotes the tty number. For example,
+<BLOCKQUOTE><CODE>
+<PRE>
+        for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
+</PRE>
+</CODE></BLOCKQUOTE>
+
+or, better (since it also takes care of owner and permissions),
+<BLOCKQUOTE><CODE>
+<PRE>
+        for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done
+</PRE>
+</CODE></BLOCKQUOTE>
+<P>If you want the new VCs to run <CODE>getty</CODE>, add lines in <CODE>/etc/inittab</CODE>.
+(But it is much better to have only two <CODE>getty</CODE>'s running,
+and to create more consoles dynamically as the need arises.
+That way you'll have more memory when you don't use all these consoles,
+and also more consoles, in case you really need them.
+Edit <CODE>/etc/inittab</CODE> and comment out all <CODE>getty</CODE>'s except
+for the first two.)
+<P>When the consoles are allocated dynamically, it is usually easiest
+to have only one or two running <CODE>getty</CODE>. More are opened by
+<CODE>open -l -s bash</CODE>. Unused consoles (without associated processes)
+are deallocated using <CODE>deallocvt</CODE> (formerly <CODE>disalloc</CODE>).
+But, you say, I am involved in activities when I suddenly need more
+consoles, and do not have a bash prompt available to give the <CODE>open</CODE>
+command.
+Fortunately it is possible to create a new console upon a single
+keystroke, regardless of what is happening at the current console.
+<P>If you have <CODE>spawn_login</CODE> from <CODE>kbd-0.96.tar.gz</CODE> and you put
+<BLOCKQUOTE><CODE>
+<PRE>
+        loadkeys &lt;&lt; EOF
+        alt keycode 103 = Spawn_Console
+        EOF
+        spawn_login &amp;
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>/etc/rc.local</CODE>, then typing Alt-UpArrow will create a fresh VC
+running <CODE>login</CODE> (and switch to it). With <CODE>spawn_console &amp;</CODE> instead of
+<CODE>spawn_login &amp;</CODE> you'll have bash running there.
+See also <CODE>open-1.4.tgz</CODE> and <CODE>dynamic-vc-1.1.tar.gz</CODE>.
+<P>What action should be taken upon this Spawn_Console keypress
+can also be set in <CODE>/etc/inittab</CODE> under <CODE>kbrequest</CODE>,
+if you have a recent <CODE>init</CODE>. See inittab(5).
+<P>(This action can be something entirely different - I just called
+the key Spawn_Console because that is what I used it for.
+When used for other purposes it is less confusing to use
+its synonym KeyboardSignal.
+For example, some people like to put the lines
+<BLOCKQUOTE><CODE>
+<PRE>
+        kb::kbrequest:/sbin/shutdown -h now
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in <CODE>/etc/inittab</CODE>, and
+<BLOCKQUOTE><CODE>
+<PRE>
+        control alt keycode 79 = KeyboardSignal
+        control alt keycode 107 = KeyboardSignal
+</PRE>
+</CODE></BLOCKQUOTE>
+
+in their keymap. Now Ctrl-Alt-End will do a system shutdown.)
+<P>You can only login as "root" on terminals listed in <CODE>/etc/securetty</CODE>.
+There exist programs that read terminal settings from files
+<CODE>/etc/ttys</CODE> and <CODE>/etc/ttytype</CODE>. If you have such
+files, and create additional consoles, then it might be a good idea
+to also add entries for them in these files.
+<P>
+<HR>
+<A HREF="kbd.FAQ-8.html">Next</A>
+<A HREF="kbd.FAQ-6.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc7">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-8.html b/doc/kbd.FAQ-8.html
new file mode 100644
index 0000000..8d0d4d7
--- /dev/null
+++ b/doc/kbd.FAQ-8.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: Ctrl-Alt-Del and other special key combinations</TITLE>
+ <LINK HREF="kbd.FAQ-9.html" REL=next>
+ <LINK HREF="kbd.FAQ-7.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc8" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-9.html">Next</A>
+<A HREF="kbd.FAQ-7.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc8">Contents</A>
+<HR>
+<H2><A NAME="s8">8. Ctrl-Alt-Del and other special key combinations</A></H2>
+
+<P>
+<P>
+<H2><A NAME="ss8.1">8.1 Ctrl-Alt-Del (Boot)</A>
+</H2>
+
+<P>
+<!--
+ctrl-alt-del!action taken by
+-->
+<P>If you press Ctrl-Alt-Del (or whatever key was assigned the keysym Boot by
+loadkeys) then either the machine reboots immediately (without sync), or
+<CODE>init</CODE> is sent a SIGINT. The former behaviour is the default. The default can
+be changed by root, using the system call reboot(), see ctrlaltdel(8).
+Some <CODE>init</CODE>'s change the default. What happens when <CODE>init</CODE> gets SIGINT depends
+on the version of <CODE>init</CODE> used - often it will be determined by the pf entry in
+<CODE>/etc/inittab</CODE> (which means that you can run an arbitrary program
+in this case).
+In the current kernel Ctrl-AltGr-Del is no longer by default assigned to Boot.
+<P>
+<H2><A NAME="ss8.2">8.2 Other combinations</A>
+</H2>
+
+<P>
+<!--
+keyboard!special key combinations
+-->
+
+<!--
+key combinations, special
+-->
+<P>
+<PRE>
+Name            Default binding
+-------------------------------
+Show_Memory     Shift-Scrollock
+Show_Registers  AltGr-ScrollLock
+Show_State      Ctrl-ScrollLock
+Console_n       Alt-Fn and Ctrl-Alt-Fn  (1 &lt;= n &lt;= 12)
+Console_{n+12}  AltGr-Fn                (1 &lt;= n &lt;= 12)
+Incr_Console    Alt-RightArrow
+Decr_Console    Alt-LeftArrow
+Last_Console    Alt[Gr]-PrintScreen
+Scroll_Backward Shift-PageUp
+Scroll_Forward  Shift-PageDown
+Caps_On                                 (CapsLock is a toggle; this key sets)
+Compose         Ctrl-.
+</PRE>
+<P>
+<H2><A NAME="ss8.3">8.3 X Combinations</A>
+</H2>
+
+<P>
+<!--
+keyboard!key combinations for X
+-->
+
+<!--
+key combinations, X
+-->
+
+<!--
+X!key combinations for
+-->
+<P>
+<PRE>
+Ctrl-Alt-Fn     Switch to VT n
+Ctrl-Alt-KP+    Next mode
+Ctrl-Alt-KP-    Previous mode
+Ctrl-Alt-Backspace      Kill X
+</PRE>
+
+On some motherboards, Ctrl-Alt-KP- and Ctrl-Alt-KP+ will be equivalent to
+pressing the Turbo button. That is, both will produce the scancodes
+1d 38 4a ca b8 9d and 1d 38 4e ce b8 9d, and both will switch between
+Turbo (&gt;= 25MHz) and non-Turbo (8 or 12 MHz).
+(Often these key combinations only function this way when enabled
+by jumpers on the motherboard.)
+<P>Perry F Nguyen (<CODE>pfnguyen@netcom22.netcom.com</CODE>) writes:
+AMI BIOS has a feature that locks up the keyboard and flashes the LED's
+if the Ctrl-Alt-Backspace combination is pressed while a BIOS password
+is enabled, until the CMOS/BIOS password is typed in.
+<P>
+<H2><A NAME="ss8.4">8.4 Dosemu Combinations</A>
+</H2>
+
+<P>
+<!--
+key combinations!dosemu
+-->
+
+<!--
+dosemu!key combinations for
+-->
+<P>
+<PRE>
+Ctrl-Alt-Fn     Switch to VT n (from version 0.50; earlier Alt-Fn)
+Ctrl-Alt-PgDn   Kill dosemu (when in RAW keyboard mode)
+(and many other combinations - see the dosemu documentation)
+</PRE>
+<P>
+<H2><A NAME="ss8.5">8.5 Composing symbols</A>
+</H2>
+
+<P>
+<!--
+keyboard!composing symbols with
+-->
+
+<!--
+symbols!composing with keyboard
+-->
+<P>One symbol may be constructed using several keystrokes.
+<UL>
+<LI>LeftAlt-press, followed by a decimal number typed on the keypad, followed
+by LeftAlt-release, yields the symbol with code given by this number.
+(In Unicode mode this same mechanism, but then with 4 hexadecimal digits,
+may be used to define a Unicode symbol.)</LI>
+<LI>A dead diacritic followed by a symbol, yields that symbol adorned with
+that diacritic. If the combination is undefined, both keys are taken
+separately.
+Which keys are dead diacritics is user-settable; none is by default.
+Five (since 2.0.25 six) dead diacritics can be defined (using loadkeys(1)):
+dead_grave, dead_acute, dead_circumflex, dead_tilde, dead_diaeresis
+(and dead_cedilla).
+Precisely what this adorning means is also user-settable:
+dead-diacritic, symbol is equivalent to Compose + diacritic + symbol.</LI>
+<LI>Compose followed by two symbols yields a combination symbol. These
+combinations are user-settable. Today there are 68 combinations
+defined by default; you can see them by saying "dumpkeys | grep compose".</LI>
+<LI>Then there are `Sticky' modifier keys (since 1.3.33). For example,
+one can type Ctrl-C as SControl, C and Ctrl-Alt-BackSpace as SControl,
+SAlt, BackSpace.</LI>
+</UL>
+<P>Note that there are at least four such composition mechanisms:
+<OL>
+<LI>The Linux keyboard driver mechanism, used in conjunction with loadkeys.</LI>
+<LI>The X mechanism - see X386keybd(1), later XFree86kbd(1).
+Under X11R6: edit <CODE>/usr/X11R6/lib/X11/locale/iso8859-1/Compose</CODE>.<P>See also Andrew D. Balsa's comments at
+<A HREF="http://wauug.erols.com/~balsa/linux/deadkeys/index.html">http://wauug.erols.com/~balsa/linux/deadkeys/index.html</A>.
+</LI>
+<LI>The emacs mechanism obtained by loading "iso-insert.el" or
+calling `iso-accents-mode'.</LI>
+<LI>The vim mechanism: insert a composed symbol by pressing Ctrl-K
+followed by two symbols. A list of the possible combinations is
+obtained by the command <CODE>:digraphs</CODE>.</LI>
+</OL>
+
+For X the order of the two symbols is arbitrary: both Compose-,-c and
+Compose-c-, yield a c-cedilla; for Linux and emacs only the former sequence
+works by default. For X and vim the list of compose combinations is fixed.
+Linux and emacs are flexible.
+The default lists are somewhat similar, but the details are different.
+<P>
+<H2><A NAME="ss8.6">8.6 The SysRq key</A>
+</H2>
+
+<P>
+<!--
+SysRq key
+-->
+
+In case your kernel was compiled with CONFIG_MAGIC_SYSRQ enabled
+(a feature that is present since Linux 2.1.43)
+there is a single key (defined in <CODE>&lt;linux/keyboard.h&gt;</CODE>)
+to which special system functions are attached, regardless of the
+current keyboard mode. For the PC architecture this special key is,
+naturally, the Alt+SysRq key, and any of the two Alt keys will work.
+(Note that if CONFIG_MAGIC_SYSRQ was not enabled, the default action
+of this key is to return to the previous console.)
+<P>If you press this key, do not release it, and hit another key,
+a corresponding action is performed. The action is performed whether
+anybody is logged in or not, is root or not. For the details, see
+<CODE>drivers/char/sysrq.c</CODE>. Since this feature is meant only
+for kernel hackers, that should suffice. Still, let me add a few
+remarks.
+<P>For the key r the keyboard mode is reset to K_XLATE.
+For the key k a SAK and console reset is done.
+For the key b the machine is rebooted immediately.
+(See, not something you want to have enabled on a production machine.)
+For the key o the power is turned off (when the machine is capable of that).
+For the key s an emergency sync is scheduled.
+For the key u an emergency read-only remount is scheduled.
+For the keys p,t,m various information is shown
+(namely the same information also shown for RAlt,RCtrl,RShift+ScrollLock).
+For the keys e,i,l all processes get a SIG_TERM or SIG_KILL, respectively;
+for l even the init process is killed.
+Digits set the log level. Anything else prints a short summary:
+<CODE>SysRq: unRaw saK Boot Off Sync Unmount showPc showTasks showMem
+loglevel0-8 tErm kIll killalL</CODE>.
+<P>Note: These are very dangerous actions! And they do not use your
+keymap - indeed, are meant for emergency cases where the state
+of your keymap, or even of the entire kernel, is uncertain.
+If you use a dvorak keyboard - bad luck! Most other people will
+be able to survive: the dangerous letters A,M,Q,W,Y,Z that are
+differently placed on English, French and German keyboards, are
+not used for actions. (But if your finger slips and you hit L
+instead of K - bye bye to your system.)
+<P>
+<HR>
+<A HREF="kbd.FAQ-9.html">Next</A>
+<A HREF="kbd.FAQ-7.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc8">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ-9.html b/doc/kbd.FAQ-9.html
new file mode 100644
index 0000000..9a7c76d
--- /dev/null
+++ b/doc/kbd.FAQ-9.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO: How to get out of raw mode</TITLE>
+ <LINK HREF="kbd.FAQ-10.html" REL=next>
+ <LINK HREF="kbd.FAQ-8.html" REL=previous>
+ <LINK HREF="kbd.FAQ.html#toc9" REL=contents>
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-10.html">Next</A>
+<A HREF="kbd.FAQ-8.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc9">Contents</A>
+<HR>
+<H2><A NAME="s9">9. How to get out of raw mode</A></H2>
+
+<P>
+<!--
+raw mode, exiting
+-->
+<P>If some program using K_RAW keyboard mode exits without restoring the keyboard
+mode to K_XLATE, then it is difficult to do anything - not even Ctrl-Alt-Del
+works. However, it is sometimes possible to avoid hitting the reset button.
+(And desirable as well: your users may get angry if you kill their Hack game
+by rebooting; you might also damage your file system.)
+Easy solutions involve logging in from another terminal or another machine
+and doing <CODE>kbd_mode -a</CODE>.
+The procedure below assumes that no X is running, that the display is in
+text mode, and that you are at your bash prompt, that you are using a US
+keyboard layout, and that your interrupt character is Ctrl-C.
+<P>Step 1. Start X.
+As follows: press 2 (and don't release), press F12 (and don't release)
+and immediately afterwards press = . This starts X.
+(Explanation: if a key press produces keycode K, then the key release
+produces keycode K+128. Probably your shell does not like these high
+characters, so we avoid generating them by not releasing any key.
+However, we have to be quick, otherwise key repeat starts. The digit 2
+produces a Ctrl-C that discards previous junk, the F12 produces an X
+and the = a Return.)
+Probably your screen will be grey now, since no <CODE>.xinitrc</CODE> was specified.
+However, Ctrl-Alt-Fn will work and you can go to another VT.
+(Ctrl-Alt-Backspace also works, but that exits X, and gets you back into
+the previous state, which is not what you want.)
+<P>Step 2. Setup to change the keyboard mode.
+(For example, by <CODE>sleep 5; kbd_mode -a</CODE>.)
+<P>Step 3. Leave X again.
+Alt-Fx (often Alt-F7) brings you back to X, and then Ctrl-Alt-Backspace
+exits X. Within 5 seconds your keyboard will be usable again.
+<P>If you want to prepare for the occasion, then make
+<CODE>\215A\301</CODE> (3 symbols) an alias for <CODE>kbd_mode -a</CODE>.
+Now just hitting = F7 = (3 symbols) will return you to sanity.
+<P>
+<HR>
+<A HREF="kbd.FAQ-10.html">Next</A>
+<A HREF="kbd.FAQ-8.html">Previous</A>
+<A HREF="kbd.FAQ.html#toc9">Contents</A>
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ.html b/doc/kbd.FAQ.html
new file mode 100644
index 0000000..2c720ea
--- /dev/null
+++ b/doc/kbd.FAQ.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+ <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
+ <TITLE>The Linux keyboard and console HOWTO</TITLE>
+ <LINK HREF="kbd.FAQ-1.html" REL=next>
+
+
+</HEAD>
+<BODY>
+<A HREF="kbd.FAQ-1.html">Next</A>
+Previous
+Contents
+<HR>
+<H1>The Linux keyboard and console HOWTO</H1>
+
+<H2>Andries Brouwer, <CODE>aeb@cwi.nl</CODE></H2>v2.9, 990114
+<P><HR>
+<EM>This note contains some information about the Linux keyboard
+and console, and the use of non-ASCII characters.
+It describes Linux 2.0.
+<!--
+HOWTOs!keyboard and console
+-->
+
+<!--
+HOWTOs!console and keyboard
+-->
+</EM>
+<HR>
+<P>
+<H2><A NAME="toc1">1.</A> <A HREF="kbd.FAQ-1.html">Useful programs</A></H2>
+
+<P>
+<H2><A NAME="toc2">2.</A> <A HREF="kbd.FAQ-2.html">Keyboard generalities</A></H2>
+
+<P>
+<H2><A NAME="toc3">3.</A> <A HREF="kbd.FAQ-3.html">Console generalities</A></H2>
+
+<P>
+<H2><A NAME="toc4">4.</A> <A HREF="kbd.FAQ-4.html">Resetting your terminal</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-4.html#ss4.1">4.1 Keyboard hardware reset</A>
+</UL>
+<P>
+<H2><A NAME="toc5">5.</A> <A HREF="kbd.FAQ-5.html">Delete and Backspace</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-5.html#ss5.1">5.1 How to tell Unix what character you want to use to delete the last typed character</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.2">5.2 How to tell Linux what code to generate when a key is pressed</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.3">5.3 How to tell X to interchange Delete and Backspace</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.4">5.4 How to tell emacs what to do when it receives a Delete or Backspace</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.5">5.5 How to tell emacs to interchange Delete and Backspace</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.6">5.6 How to tell kermit to interchange Delete and Backspace</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.7">5.7 How to tell xterm to interchange Delete and Backspace</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.8">5.8 How to tell xterm about your favourite tty modes</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.9">5.9 How to tell xmosaic that the Backspace key generates a DEL</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.10">5.10 A better solution for Motif-using programs, like netscape</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.11">5.11 What about termcap and terminfo?</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.12">5.12 A complete solution</A>
+</UL>
+<P>
+<H2><A NAME="toc6">6.</A> <A HREF="kbd.FAQ-6.html">The console character sets</A></H2>
+
+<P>
+<H2><A NAME="toc7">7.</A> <A HREF="kbd.FAQ-7.html">Console switching</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-7.html#ss7.1">7.1 Changing the number of Virtual Consoles</A>
+</UL>
+<P>
+<H2><A NAME="toc8">8.</A> <A HREF="kbd.FAQ-8.html">Ctrl-Alt-Del and other special key combinations</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-8.html#ss8.1">8.1 Ctrl-Alt-Del (Boot)</A>
+<LI><A HREF="kbd.FAQ-8.html#ss8.2">8.2 Other combinations</A>
+<LI><A HREF="kbd.FAQ-8.html#ss8.3">8.3 X Combinations</A>
+<LI><A HREF="kbd.FAQ-8.html#ss8.4">8.4 Dosemu Combinations</A>
+<LI><A HREF="kbd.FAQ-8.html#ss8.5">8.5 Composing symbols</A>
+<LI><A HREF="kbd.FAQ-8.html#ss8.6">8.6 The SysRq key</A>
+</UL>
+<P>
+<H2><A NAME="toc9">9.</A> <A HREF="kbd.FAQ-9.html">How to get out of raw mode</A></H2>
+
+<P>
+<H2><A NAME="toc10">10.</A> <A HREF="kbd.FAQ-10.html">The keyboard LEDs</A></H2>
+
+<P>
+<H2><A NAME="toc11">11.</A> <A HREF="kbd.FAQ-11.html">The TERM variable</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-11.html#ss11.1">11.1 Terminfo</A>
+</UL>
+<P>
+<H2><A NAME="toc12">12.</A> <A HREF="kbd.FAQ-12.html">How to make other programs work with non-ASCII chars</A></H2>
+
+<P>
+<H2><A NAME="toc13">13.</A> <A HREF="kbd.FAQ-13.html">X</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-13.html#ss13.1">13.1 What precisely does XFree86-2.1 do when it initializes its keymap?</A>
+</UL>
+<P>
+<H2><A NAME="toc14">14.</A> <A HREF="kbd.FAQ-14.html">Unusual keys and keyboards</A></H2>
+
+<P>
+<H2><A NAME="toc15">15.</A> <A HREF="kbd.FAQ-15.html">Examples of use of loadkeys and xmodmap</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-15.html#ss15.1">15.1 `I can use only one finger to type with'</A>
+</UL>
+<P>
+<H2><A NAME="toc16">16.</A> <A HREF="kbd.FAQ-16.html">Changing the video mode</A></H2>
+
+<UL>
+<LI><A HREF="kbd.FAQ-16.html#ss16.1">16.1 Instructions for the use of resizecons</A>
+</UL>
+<P>
+<H2><A NAME="toc17">17.</A> <A HREF="kbd.FAQ-17.html">Changing the keyboard repeat rate</A></H2>
+
+<P>
+<H2><A NAME="toc18">18.</A> <A HREF="kbd.FAQ-18.html">Scrolling</A></H2>
+
+<P>
+<H2><A NAME="toc19">19.</A> <A HREF="kbd.FAQ-19.html">Screensaving</A></H2>
+
+<P>
+<H2><A NAME="toc20">20.</A> <A HREF="kbd.FAQ-20.html">Screen dumps</A></H2>
+
+<P>
+<H2><A NAME="toc21">21.</A> <A HREF="kbd.FAQ-21.html">Some properties of the VT100 - application key mode</A></H2>
+
+<P>
+<H2><A NAME="toc22">22.</A> <A HREF="kbd.FAQ-22.html">Hardware incompatibility</A></H2>
+
+<P>
+<H2><A NAME="toc23">23.</A> <A HREF="kbd.FAQ-23.html">Copyright</A></H2>
+
+<HR>
+<A HREF="kbd.FAQ-1.html">Next</A>
+Previous
+Contents
+</BODY>
+</HTML>
diff --git a/doc/kbd.FAQ.sgml b/doc/kbd.FAQ.sgml
new file mode 100644
index 0000000..46d98f1
--- /dev/null
+++ b/doc/kbd.FAQ.sgml
@@ -0,0 +1,1717 @@
+<!doctype linuxdoc system>
+
+<article>
+
+<title>The Linux keyboard and console HOWTO
+<author>Andries Brouwer, <tt/aeb@cwi.nl/
+<date>v2.9, 990114
+
+<abstract>This note contains some information about the Linux keyboard
+and console, and the use of non-ASCII characters.
+It describes Linux 2.0.
+<nidx>HOWTOs!keyboard and console</nidx>
+<nidx>HOWTOs!console and keyboard</nidx>
+</abstract>
+
+<toc>
+
+<sect>Useful programs<p>
+<nidx>programs!keyboard-related</nidx>
+<nidx>programs!console-related</nidx>
+<nidx>keyboard!programs related to</nidx>
+<nidx>console!programs related to</nidx>
+
+The following packages contain keyboard or console related programs.
+<p>
+<tt/kbd-0.96.tar.gz/ contains <tt/loadkeys/, <tt/dumpkeys/, <tt/showkey/,
+<tt/setmetamode/, <tt/setleds/, <tt/setfont/, <tt/showfont/, <tt/mapscrn/,
+<tt/kbd_mode/, <tt/loadunimap/, <tt/chvt/, <tt/resizecons/, <tt/deallocvt/,
+<tt/getkeycodes/, <tt/setkeycodes/.
+<p>
+<tt/util-linux-2.6/ contains <tt/setterm/, <tt/kbdrate/.
+(Yes, the <tt/more/ in <tt/util-linux-2.6/ dumps core due to a name
+conflict. Preserve your old copy, or use <tt/util-linux-2.5/, or
+change `savetty' to `my_savetty' in <tt/more.c/.)
+<p>
+<tt/sh-utils-1.12/ contains <tt/stty/.
+<p>
+<tt/open-1.4.tgz/ contains <tt/open/ (that should be renamed to
+<tt/openvt/). (See also <tt/dynamic-vc-1.1.tar.gz/ and <tt/consd-1.1.tgz/.)
+
+<tt/SVGATextMode-1.8.tar.gz/ contains <tt/SVGATextMode/, a program that
+obsoletes <tt/resizecons/.
+
+The X distribution contains <tt/xmodmap/, <tt/xset/, <tt/kbd_mode/.
+(See also X386keybd(1) for the situation under XFree86 1.3,
+and Xserver(1) for the XKEYBOARD extension under X11R6.)
+
+<tt/termcap-2.0.8.tar.gz/ contains <tt/termcap/, an old terminal
+capabilities data base. <tt/ncurses-1.9.9e.tar.gz/ contains the
+<tt/termlib/ data base which obsoletes <tt/termcap/. (However,
+there are still many programs using <tt/termcap/.)
+
+See loadkeys(1), setleds(1) and setmetamode(1) for the codes generated by the
+various keys and the setting of leds when not under X. Under X, see xmodmap(1)
+and xset(1).
+
+See setfont(8) for loading console fonts. Many people will want to
+load a font like <tt/iso01.f16/ because the default font is the
+hardware font of the video card, and often is a `Code Page 437' font
+missing accented characters and other Latin-1 symbols.
+
+See setterm(1) and kbdrate(8) for properties such as foreground and background
+colors, screen blanking and character repeat rate when not under X.
+Under X, see xset(1), also for key click and bell volume.
+
+The file <tt>/etc/termcap</tt> defines the escape sequences
+used by many programs addressing the console (or any other terminal).
+See termcap(5).
+A more modern version is found in <tt>/usr/lib/terminfo</tt>.
+See terminfo(5). Terminfo files are compiled
+by the terminfo compiler <tt>/usr/lib/terminfo/tic</tt>, see tic(1).
+Their contents can be examined using the program <tt/infocmp/,
+see infocmp(1).
+The Linux console sequences are documented in console_codes(4).
+
+
+<sect>Keyboard generalities<p>
+<nidx>keyboard!theory of operation</nidx>
+
+You press a key, and the keyboard controller sends scancodes to the
+kernel keyboard driver. Some keyboards can be programmed, but usually
+the scancodes corresponding to your keys are fixed.
+The kernel keyboard driver just transmits whatever it receives
+to the application program when it is in <em>scancode mode</em>,
+like when <tt/X/ is running. Otherwise, it parses the stream of scancodes
+into keycodes, corresponding to key press or key release events.
+(A single key press can generate up to 6 scancodes.)
+These keycodes are transmitted to the application program when it is
+in <em>keycode mode</em> (as used, for example, by <tt/showkey/).
+Otherwise, these keycodes are looked up in the keymap, and the character
+or string found there is transmitted to the application, or the action
+described there is performed.
+(For example, if one presses and releases the <tt/a/ key, then the keyboard
+produces scancodes 0x1e and 0x9e, this is converted to keycodes 30 and 158,
+and then transmitted as 0141, the ASCII or latin-1 code for `a';
+if one presses and releases <tt/Delete/, then the keyboard produces scancodes
+0xe0 0x53 0xe0 0xd3, these are converted to keycodes 111 and 239, and then
+transmitted as the 4-symbol sequence ESC &lsqb; 3 &tilde;, all assuming
+a US keyboard and a default keymap. An example of a key combination to which
+an action is assigned is Ctrl-Alt-Del.)
+<P>
+The translation between unusual scancodes and keycodes can be set using the
+utility <tt/setkeycodes/ - only very few people will need it.
+The translation between keycodes and characters or strings or actions, that is,
+the keymap, is set using the utilities <tt/loadkeys/ and <tt/setmetamode/.
+For details, see getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1),
+setmetamode(1). The format of the files output by <tt/dumpkeys/ and read
+by <tt/loadkeys/ is described in keymaps(5).
+<P>
+Where it says `transmitted to the application' in the above description,
+this really means `transmitted to the terminal driver'. That is, further
+processing is just like that of text that comes in over a serial line.
+The details of this processing are set by the program <tt/stty/.
+
+<sect>Console generalities<p>
+<nidx>console!theory of operation</nidx>
+
+Conversely, when you output something to the console, it first undergoes
+the standard tty processing, and then is fed to the console driver.
+The console driver emulates a VT100, and parses the input in order to
+recognize VT100 escape sequences (for cursor movement, clear screen, etc.).
+The characters that are not part of an escape sequence are first converted
+into Unicode, using one of four mapping tables if the console was not
+in UTF-8 mode to start with, then looked up in the table describing
+the correspondence between Unicode values and font positions,
+and the obtained 8- or 9-bit font indices are then written to video memory,
+where they cause the display of character shapes found in the video card's
+character ROM.
+One can load one's own fonts into character ROM using
+<tt/setfont/, load the corresponding Unicode map with <tt/loadunimap/,
+and load a user mapping table using <tt/mapscrn/.
+More details will be given below.
+
+There are many consoles (called <it/Virtual Consoles/ or
+<it/Virtual Terminals/, abbreviated VCs or VTs) that share the same
+screen. You can use them as independent devices, either to run
+indendent login sessions, or just to send some output to, perhaps
+from <tt/top/, or the tail of the system log or so.
+See below (`Console switching') on how to set them up and
+switch between them.
+
+
+<sect>Resetting your terminal<p>
+<nidx>terminal!resetting</nidx>
+<nidx>screen!clearing</nidx>
+<nidx>console!clearing</nidx>
+
+There is garbage on the screen, or all your keystrokes are echoed
+as line drawing characters. What to do?
+
+Many programs will redraw the screen when Ctrl-L is typed. This might
+help when there is some modem noise or broadcast message on your screen.
+The command <tt/clear/ will clear the screen.
+
+The command <tt/reset/ will reset the console driver. This helps when
+the screen is full of funny graphic characters, and also if it is
+reduced to the bottom line. If you don't have this command, or if it
+does something else, make your own by putting the following two lines
+in an executable file <tt/reset/ in your PATH:
+<tscreen><verb>
+	#!/bin/sh
+	echo -e \\033c
+</verb></tscreen>
+that is, you want to send the two characters ESC c to the console.
+
+Why is it that the display sometimes gets confused and gives you
+a 24-line or 1-line screen, instead of the usual 25 lines?
+Well, the main culprit is the use of <tt/TERM=vt100/ (or some other
+entry with 24 lines) instead of <tt/TERM=linux/ when logged in remotely.
+If this happens on <tt>/dev/tty2</tt> then typing
+<tscreen><verb>
+	% cat > /dev/tty2
+	^[c
+	^D
+</verb></tscreen>
+on some other VT (where 4 symbols are typed to <tt/cat/: ESC, c, ENTER,
+Ctrl-D) and refreshing the screen on <tt>/dev/tty2</tt>
+(perhaps using Ctrl-L) will fix things. Of course the permanent fix
+is to use the right termcap or terminfo entry.
+
+Why is it that you sometimes get a lot of line-drawing characters,
+e.g., after catting a binary to the screen?
+Well, there are various character set changing escape sequences,
+and by accident your binary might contain some of these.
+The ESC c is a general reset, a cure for all, but if you know
+precisely what went wrong you can repair it without resetting
+other console attributes. For example, after
+<tscreen><verb>
+	% cat
+	^N
+	^D
+</verb></tscreen>
+your shell prompt will be all line-drawing characters.
+Now do (typing blindly)
+<tscreen><verb>
+	% cat
+	^O
+	^D
+</verb></tscreen>
+and all is well again. (Three symbols typed to each <tt/cat/:
+Ctrl-N (or Ctrl-O), ENTER, Ctrl-D.) To understand what is happening,
+see `The console character sets' below.
+
+If you loaded some strange font, and want to return to the default,
+<tscreen><verb>
+	% setfont
+</verb></tscreen>
+will do (provided you stored the default font in the default place).
+If this default font does not contain an embedded Unicode map (and
+gives the wrong symbols for accented characters), then say
+<tscreen><verb>
+	% loadunimap
+</verb></tscreen>
+For example, if I do
+<tscreen><verb>
+	% loadkeys de-latin1
+</verb></tscreen>
+then I have a German keyboard, and the key left of the Enter key
+gives me a-umlaut. This works, because the a-umlaut occurs
+on the CP437 code page and the kernel Unicode map is initialized
+to CP437, and my video card has a CP437 font built-in.
+If I now load an ISO 8859-1 font with
+<tscreen><verb>
+	% setfont iso01.f16
+</verb></tscreen>
+then everything still works, because <tt/setfont/ invalidates the kernel
+Unicode map (if there is no Unicode map attached to the font), and without
+map the kernel goes directly to the font, and that is precisely correct
+for an ISO 8859-1 system with <tt/iso01.f16/ font.
+But going back to the previous font with
+<tscreen><verb>
+        % setfont
+</verb></tscreen>
+gives capital Sigma's instead of a-umlaut - all accented letters
+are mixed up because also this font has no embedded Unicode map. After
+<tscreen><verb>
+        % loadunimap
+</verb></tscreen>
+which loads the default Unicode map (which is right for the default
+font) all works correctly again. Usually <tt/loadunimap/ is not
+invoked directly, but via <tt/setfont/. Thus, the previous two
+commands may be replaced by
+<tscreen><verb>
+	% setfont -u def
+</verb></tscreen>
+The Ethiopian fonts and the <tt/lat1u*.psf/ fonts have embedded
+Unicode code map. Most of the others don't.
+
+On old terminals output involving tabs may require a delay, and you
+have to say
+<tscreen><verb>
+	% stty tab3
+</verb></tscreen>
+(see stty(1)).
+
+You can change the video mode using <tt/resizecons/ or
+<tt/SVGATextMode/.
+This usually settles the output side.
+On the input side there are many things that might be wrong. If <tt/X/ or
+<tt/DOOM/ or some other program using raw mode crashed, your keyboard may
+still be in raw (or mediumraw) mode, and it is difficult to give commands.
+(See "How to get out of raw mode" below.)
+If you loaded a bad keymap, then
+<tscreen><verb>
+	% loadkeys -d
+</verb></tscreen>
+loads the default map again, but it may well be difficult to type `-'!
+An alternative is
+<tscreen><verb>
+	% loadkeys defkeymap
+</verb></tscreen>
+Sometimes even the letters are garbled. It is useful to know that there
+are four main types of keyboards: QWERTY, QWERTZ, AZERTY and DVORAK.
+The first three are named after the first six letter keys, and roughly
+represent the English, German and French speaking countries.
+Compared to QWERTY, the QWERTZ map interchanges Y and Z.
+Compared to QWERTY, the AZERTY map interchanges Q and A, W and Z, and has
+its M right of the L, at the semicolon position.
+DVORAK has an entirely different letter ordering.
+There are two types of Turkish keyboard. The so-called `Q'-keyboard
+has a QWERTY layout, while the `F'-keyboard has an entirely
+different layout, let us say fgGIod, where G stands for Gbreve
+and I for dotlessi.
+
+<sect1>Keyboard hardware reset<p>
+<nidx>keyboard!resetting</nidx>
+
+Things may be wrong on a lower level than Linux knows about.
+There are at least two distinct lower levels (keyboard and keyboard controller)
+where one can give the command "keyboard disable" to the keyboard hardware.
+Keyboards can often be programmed to use one out of three
+different sets of scancodes.
+<p>
+However, I do not know of cases where this turned out to be
+a problem.
+<p>
+Some keyboards have a remapping capability built in.
+Stormy Henderson (<tt/stormy@Ghost.Net/) writes:
+`If it's your keyboard accidently being reprogrammed, you can
+(on a Gateway AnyKey keyboard) press control-alt-suspend_macro
+to reset the keys to normal.'
+
+<sect>Delete and Backspace<p>
+<nidx>delete key!problems with</nidx>
+<nidx>backspace key!problems with</nidx>
+
+Getting Delete and Backspace to work just right is nontrivial,
+especially in a mixed environment, where you talk to console,
+to <tt/X/, to <tt/bash/, to <tt/emacs/, login remotely, etc.
+You may have to edit several configuration files to tell all
+of the programs involved precisely what you want.
+On the one hand, there is the matter of which keys generate
+which codes (and how these codes are remapped by e.g. <tt/kermit/
+or <tt/emacs/), and on the other hand the question of what functions
+are bound to what codes.
+
+People often complain `my backspace key does not work', as if this
+key had a built-in function `delete previous character'.
+Unfortunately, all this key, or any key, does is producing a code,
+and one only can hope that the kernel tty driver and
+all application programs can be configured such that
+the backspace key indeed does function as a `delete previous character'
+key.
+
+Most Unix programs get their tty input via the kernel tty driver
+in `cooked' mode, and a simple <tt/stty/ command determines the
+erase character. However, programs like <tt/bash/ and <tt/emacs/
+and <tt/X/ do their own input handling, and have to be convinced
+one-by-one to do the right thing.
+
+<sect1>How to tell Unix what character you want to use to delete the last typed character<p>
+<nidx>stty!using to set erase character</nidx>
+
+<tscreen><verb>
+	% stty erase ^?
+</verb></tscreen>
+If the character is erased, but in a funny way, then something is
+wrong with your tty settings. If <tt/echoprt/ is set, then erased characters
+are enclosed between <tt>&bsol;</tt> and <tt>/</tt>.
+If <tt/echoe/ is not set, then the erase char is echoed
+(which is reasonable when it is a printing character, like &num;).
+Most people will want <tt/stty echoe -echoprt/. Saying <tt/stty sane/
+will do this and more. Saying <tt/stty -a/ shows your current settings.
+How come this is not right by default? It is, if you use the right
+<tt/getty/.
+
+Note that many programs (like <tt/bash/, <tt/emacs/ etc.) have their own
+keybindings (defined in <tt>&tilde;/.inputrc</tt>, <tt>&tilde;/.emacs</tt> etc.) and
+are unaffected by the setting of the erase character.
+
+The standard Unix tty driver does not recognize a cursor, or keys
+(like the arrow keys) to move the current position, and hence does not
+have a command `delete current character' either. But for example
+you can get <tt/bash/ on the console to recognize the Delete key by putting
+<tscreen><verb>
+	set editing-mode emacs
+	"\e[3&tilde;":delete-char
+</verb></tscreen>
+into <tt>&tilde;/.inputrc</tt>.
+
+<sect2>`Getty used to do the right thing with DEL and BS but is broken now?'<p>
+<nidx>getty!problems with BS and DEL</nidx>
+
+Earlier, the console driver would do BS Space BS
+(<tt>&bsol;010&bsol;040&bsol;010</tt>)
+when it got a DEL (<tt>&bsol;177</tt>).
+Nowadays, DEL's are ignored (as they should be,
+since the driver emulates a vt100). Get a better getty, i.e.,
+one that does not output DEL.
+
+<sect2>`Login behaves differently at the first and second login attempts?'<p>
+<nidx>login!problems with BS and DEL</nidx>
+
+At the first attempt, you are talking to <tt/getty/. At the second attempt,
+you are talking to <tt/login/, a different program.
+
+<sect1>How to tell Linux what code to generate when a key is pressed<p>
+<nidx>keyboard!keycode remapping</nidx>
+<nidx>keycode remapping</nidx>
+
+On the console, or, more precisely, when not in (MEDIUM)RAW mode, use
+<tscreen><verb>
+	% loadkeys mykeys.map
+</verb></tscreen>
+and under X use
+<tscreen><verb>
+	% xmodmap mykeys.xmap
+</verb></tscreen>
+Note that (since XFree86-2.1) X reads the Linux settings of the keymaps
+when initialising the X keymap. Although the two systems are not
+100% compatible, this should mean that in many cases the use of
+<tt/xmodmap/ has become superfluous.
+
+For example, suppose that you would like the Backspace key
+to send a BackSpace (Ctrl-H, octal 010) and the grey Delete key
+a DEL (octal 0177). Add the following to <tt>/etc/rc.local</tt>
+(or wherever you keep your local boot-time stuff):
+<tscreen><verb>
+	/usr/bin/loadkeys << EOF
+	keycode 14 = BackSpace
+	keycode 111 = Delete
+	EOF
+</verb></tscreen>
+Note that this will only change the function of these keys
+when no modifiers are used. (You need to specify a keymaps line
+to tell which keymaps should be affected if you want to change
+bindings on more keymaps.)
+The Linux kernel default lets
+Ctrl-Backspace generate BackSpace - this is sometimes useful
+as emergency escape, when you find you can only generate DELs.
+
+The left Alt key is sometimes called the Meta key, and by
+default the combinations AltL-X are bound to the symbol MetaX.
+But what character sequence is MetaX?
+That is determined (per-tty) by the Meta flag, set by the command
+<tt/setmetamode/. The two choices are: ESC X or X or-ed with 0200.
+
+Many distributions have a <tt/loadkeys/ command somewhere in the
+bootup sequence. For example, one may have the name of the desired
+keymap in <tt>/etc/sysconfig/keyboard</tt> and the <tt/loadkeys/
+command that loads it in <tt>/etc/rc.d/init.d/keytable</tt>.
+Or one may have the actual default keymap in <tt>/etc/default.keytab</tt>
+and the loadkeys command that loads it in <tt>/etc/rc.d/boot</tt>.
+Etc. Instead of adding a local modification to the default, one can
+of course change the default by editing the default keymap or changing
+the name of the keymap to be loaded at boot time. Note that <tt/loadkeys/
+itself has default keymap <tt/defkeymap.map/ located somewhere under
+<tt>/usr/lib/kbd</tt> or <tt>/usr/share/kbd</tt> (just like all other
+keymaps) and this may not yet be available in single user boot before
+<tt>/usr</tt> has been mounted.
+
+<sect2>`Why doesn't the Backspace key generate BackSpace by default?'<p>
+<nidx>backspace key!not generating correct keycode</nidx>
+
+(i) Because the VT100 had a Delete key above the Enter key.
+<p>
+(ii) Because Linus decided so.
+
+<sect1>How to tell X to interchange Delete and Backspace<p>
+<nidx>X!swapping DEL, BS</nidx>
+<nidx>xmodmap!using to swap DEL, BS</nidx>
+
+<tscreen><verb>
+	% xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
+</verb></tscreen>
+Or, if you just want the Backspace key to generate a BackSpace:
+<tscreen><verb>
+	% xmodmap -e "keycode 22 = BackSpace"
+</verb></tscreen>
+Or, if you just want the Delete key to generate a Delete:
+<tscreen><verb>
+	% xmodmap -e "keycode 107 = Delete"
+</verb></tscreen>
+(but usually this is the default binding already).
+
+<sect1>How to tell emacs what to do when it receives a Delete or Backspace<p>
+<nidx>emacs!binding DEL, BS</nidx>
+
+Put in your <tt/.emacs/ file lines like
+<tscreen><verb>
+	(global-set-key "\?" 'help-command)
+	(global-set-key "\C-h" 'delete-backward-char)
+</verb></tscreen>
+Of course you can bind other commands to other keys in the same way.
+Note that various major and minor modes redefine keybindings.
+For example, in incremental search mode one finds the code
+<tscreen><verb>
+	(define-key map "\177" 'isearch-delete-char)
+	(define-key map "\C-h" 'isearch-mode-help)
+</verb></tscreen>
+This means that it may be a bad idea to use the above two
+global-set-key commands. There are too many places where
+there are built-in assumptions about Ctrl-H = help and DEL = delete.
+That doesn't mean that you have to setup keys so that Backspace
+generates DEL. But if it doesn't then it is easiest to remap
+them at the lowest possible level in emacs.
+
+<sect1>How to tell emacs to interchange Delete and Backspace<p>
+<nidx>emacs!swapping DEL, BS</nidx>
+
+Put in your <tt/.emacs/ file lines
+<tscreen><verb>
+	(setq keyboard-translate-table (make-string 128 0))
+	(let ((i 0))
+	  (while (< i 128)
+	    (aset keyboard-translate-table i i)
+	    (setq i (1+ i))))
+	(aset keyboard-translate-table ?\b ?\^?)
+	(aset keyboard-translate-table ?\^? ?\b)
+</verb></tscreen>
+Recent versions of emacs have a function <tt/keyboard-translate/
+and one may simplify the above to
+<tscreen><verb>
+	(keyboard-translate ?\C-h ?\C-?)
+	(keyboard-translate ?\C-? ?\C-h)
+</verb></tscreen>
+Note that under X emacs can distinguish between Ctrl-h and the
+Backspace key (regardless of what codes these produce on the console),
+and by default emacs will view the Backspace key as DEL
+(and do deletion things, as bound to that character, rather than
+help things, bound to Ctrl-H). One can distinguish Backspace and Delete,
+e.g. by
+<tscreen><verb>
+	(global-unset-key [backspace] )
+	(global-set-key [backspace] 'delete-backward-char)
+	(global-unset-key [delete] )
+	(global-set-key [delete] 'delete-char)
+</verb></tscreen>
+
+<sect1>How to tell kermit to interchange Delete and Backspace<p>
+<nidx>kermit!swapping DEL, BS</nidx>
+
+Put in your <tt/.kermrc/ file the lines
+<tscreen><verb>
+	set key \127 \8
+	set key \8 \127
+</verb></tscreen>
+
+<sect1>How to tell xterm to interchange Delete and Backspace<p>
+<nidx>xterm!swapping DEL, BS</nidx>
+<tscreen><verb>
+XTerm*VT100.Translations:       #override\n\
+	<KeyPress> BackSpace : string(0x7f)\n\
+	<KeyPress> Delete : string(0x08)\n
+</verb></tscreen>
+
+<sect1>How to tell xterm about your favourite tty modes<p>
+<nidx>xterm!setting tty modes for</nidx>
+
+Normally xterm will inherit the tty modes from its invoker.
+Under <tt/xdm/, the default erase and kill characters are <tt/#/ and <tt/@/,
+as in good old Unix Version 6.
+If you don't like that, you might put something like
+<tscreen><verb>
+	XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D \ 
+	                susp ^Z start ^Q stop ^S eol ^@
+</verb></tscreen>
+in <tt>/usr/lib/X11/app-defaults/XTerm</tt> or in
+<tt>&dollar;HOME/.Xresources</tt>, assuming that you have a line
+<tscreen><verb>
+	xrdb -merge $HOME/.Xresources
+</verb></tscreen>
+in your <tt>&dollar;HOME/.xinitrc</tt> or <tt>&dollar;HOME/.xsession</tt>.
+
+<sect1>How to tell xmosaic that the Backspace key generates a DEL<p>
+<nidx>xmosaic!remapping BS key</nidx>
+<nidx>Netscape!remapping BS</nidx>
+
+Putting
+<tscreen><verb>
+	*XmText.translations: #override\n\
+	   <Key>osfDelete: delete-previous-character()
+	*XmTextField.translations: #override\n\
+	   <Key>osfDelete: delete-previous-character()
+</verb></tscreen>
+in your <tt>&dollar;HOME/.Xdefaults</tt> or
+<tt>&dollar;HOME/.Xresources</tt> helps.
+(What file? The file that is fed to <tt>xrdb</tt>, for example
+in <tt>.xinitrc</tt>.)
+
+The netscape FAQ, however, says:
+<verb>
+	Why doesn't my Backspace key work in text fields? 
+	By default, Linux and XFree86 come with the Backspace and Delete keys
+	misconfigured. All Motif programs (including, of course, Netscape
+	Navigator) will malfunction in the same way.
+
+	The Motif spec says that Backspace is supposed to delete the previous
+	character and Delete is supposed to delete the following character.
+	Linux and XFree86 come configured with both the Backspace and Delete
+	keys generating Delete.
+
+	You can fix this by using any one of the xmodmap, xkeycaps, or
+	loadkeys programs to make the key in question generate the BackSpace
+	keysym instead of Delete.
+
+	You can also fix it by having a .motifbind file; see the man page
+	for VirtualBindings(3).
+
+	Note: Don't use the *XmText.translations or *XmTextField.translations
+	resources to attempt to fix this problem. If you do, you will blow
+	away Netscape Navigator's other text-field key bindings.
+</verb>
+
+<sect1>A better solution for Motif-using programs, like netscape<p>
+<nidx>Netscape!remapping BS</nidx>
+<nidx>Motif!remapping BS</nidx>
+
+Ted Kandell (<tt/ted@tcg.net/) suggests the following:
+
+Somewhere in your .profile add the following:
+<tscreen><verb>
+stty erase ^H
+</verb></tscreen>
+If you are using <tt/bash/, add the following lines to your <tt/.inputrc/:
+<tscreen><verb>
+"\C-?": delete-char
+"\C-h": backward-delete-char
+</verb></tscreen>
+Add the following lines to your .xinitrc file:
+<tscreen><verb>
+xmodmap <<-EOF
+keycode 22  =  BackSpace osfBackSpace
+keycode 107 =  Delete
+EOF
+
+# start your window manager here,  for example:
+#(fvwm) 2>&1 | tee /dev/tty /dev/console
+
+stty sane
+stty erase ^H
+loadmap <<-EOF
+keycode 14  = BackSpace
+keycode 111 = Delete
+EOF
+</verb></tscreen>
+
+This will definitely work for a PC 101 or 102 key keyboard
+with any Linux/XFree86 layout.
+
+The important part to making Motif apps like Netscape work properly
+is adding osfBackSpace to keycode 22 in addition to BackSpace.
+
+Note that there must be spaces on either side of the = sign.
+
+
+<sect1>What about termcap and terminfo?<p>
+<nidx>termcap!remapping BS with</nidx>
+<nidx>terminfo!remapping BS with</nidx>
+
+When people have problems with backspace, they tend to look at their termcap
+(or terminfo) entry for the terminal, and indeed, there does exist a kb
+(or kbs) capability describing the code generated by the Backspace key.
+However, not many programs use it, so unless you are having problems with one
+particular program only, probably the fault is elsewhere.
+Of course it is a good idea anyway to correct your termcap (terminfo) entry.
+See also below under "The TERM variable".
+
+<sect1>A complete solution<p>
+There are many possibilities to get a functioning system.
+Can't you give one complete set of settings that works?
+<nidx>delete key!a solution</nidx>
+<nidx>backspace key!a solution</nidx>
+<p>
+One way of getting a setup that works in all contexts
+is to have the Backspace key generate DEL when on the
+console (or xterm), and BackSpace when under X.
+Maybe that is most convenient - there are too many X utilities
+that expect BackSpace, and emacs on the console or xterm
+expects DEL, while emacs under X can distinguish [BackSpace]
+from Ctrl-H and does the right thing.
+<p>
+What is needed?
+No loadkeys changes, since the Backspace key already generates
+DEL by default.  No stty settings, they are OK by default.
+No X settings, they are OK by default.
+One just has to tell xterm that the Backspace key should generate DEL:
+put 
+<tscreen><verb>
+XTerm*VT100.Translations:       #override\n\
+        <KeyPress> BackSpace : string(0x7f)\n\
+</verb></tscreen>
+in <tt/.Xresources/, and
+<tscreen><verb>
+xrdb -merge .Xresources
+</verb></tscreen>
+in <tt/.xinitrc/, and you are settled.
+
+<sect>The console character sets<p>
+<nidx>console character sets</nidx>
+<nidx>character sets, console</nidx>
+
+The kernel first tries to figure out what symbol is meant by any given
+user byte, and next where this symbol is located in the current font.
+
+The kernel knows about 5 translations of bytes into console-screen symbols.
+In Unicode (UTF-8) mode, the UTF-8 code is just converted directly into
+Unicode. The assumption is that almost all symbols one needs are present
+in Unicode, and for the cases where this does not hold the codes 0xff**
+are reserved for direct font access.
+When not in Unicode mode, one of four translation tables is used.
+The four tables are: a) Latin1 -&gt; Unicode,  b) VT100 graphics -&gt; Unicode,
+c) PC -&gt; Unicode, d) user-defined.
+
+There are two character sets, called G0 and G1, and one of them
+is the current character set. (Initially G0.)
+Typing Ctrl-N causes G1 to become current, Ctrl-O causes G0 to become current.
+
+These variables G0 and G1 point at a translation table, and can be changed
+by the user. Initially they point at tables a) and b), respectively.
+The sequences ESC ( B and ESC ( 0 and ESC ( U and ESC ( K cause G0 to point
+at translation table a), b), c) and d), respectively.
+The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC ) K cause G1 to point
+at translation table a), b), c) and d), respectively.
+
+The sequence ESC c causes a terminal reset, which is what you want if the
+screen is all garbled. The oft-advised <tt/echo &circ;V&circ;O/ will only
+make G0 current, but there is no guarantee that G0 points at table a).
+In some distributions there is a program reset(1) that just does
+<tt>echo &circ;&lsqb;c</tt>.
+If your termcap entry for the console is correct (and has an entry
+<tt>:rs=&bsol;Ec:</tt>), then also <tt/setterm -reset/ will work.
+
+The user-defined mapping table can be set using mapscrn(8).
+The result of the mapping is that if a symbol c is printed, the symbol
+<tt>s = map[c]</tt> is sent to the video memory. The bitmap that corresponds to
+<tt/s/ is found in the character ROM, and can be changed using setfont(8).
+
+<sect>Console switching<p>
+<nidx>console!switching</nidx>
+
+By default, console switching is done using Alt-Fn or Ctrl-Alt-Fn.
+Under <tt/X/ (or recent versions of <tt/dosemu/), only Ctrl-Alt-Fn works.
+Many keymaps will allow cyclic walks through all allocated consoles
+using Alt-RightArrow and Alt-LeftArrow.
+
+XFree86 1.3 does not know that Alt is down when you switch to the X
+window. Thus, you cannot switch immediately to some other VT again
+but have to release Alt first.
+In the other direction this should work: the kernel always keeps
+track of the up/down status of all keys. (As far as possible: on some
+keyboards some keys do not emit a scancode when pressed (e.g.: the PFn
+keys of a FOCUS 9000) or released (e.g.: the Pause key of many keyboards).)
+
+XFree86 1.3 saves the fonts loaded in the character ROMs when started,
+and restores it on a console switch. Thus, the result of <tt/setfont/ on
+a VT is wiped out when you go to X and back.
+Using <tt/setfont/ under X will lead to funny results.
+
+One can change VT under program control using the <tt/chvt/ command.
+
+<sect1>Changing the number of Virtual Consoles<p>
+<nidx>console!changing number of</nidx>
+
+This question still comes up from time to time, but the answer is:
+you already have enough of them.
+Since kernel version 1.1.54, there are between 1 and 63 virtual
+consoles. A new one is created as soon as it is opened. It is
+removed by the utility <tt/deallocvt/ (but it can be removed only when
+no processes are associated to it anymore, and no text on it has been
+selected by programs like <tt/selection/ or <tt/gpm/).
+
+For older kernels, change the line
+<tscreen><verb>
+	#define NR_CONSOLES     8
+</verb></tscreen>
+in <tt>include/linux/tty.h</tt> (don't increase this number beyond 63),
+and recompile the kernel.
+
+If they do not exist yet, create the tty devices with <tt/MAKEDEV/
+or <tt/mknod tty/N <tt/c 4/ N where N denotes the tty number. For example,
+<tscreen><verb>
+	for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
+</verb></tscreen>
+or, better (since it also takes care of owner and permissions),
+<tscreen><verb>
+	for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done
+</verb></tscreen>
+
+If you want the new VCs to run <tt/getty/, add lines in <tt>/etc/inittab</tt>.
+(But it is much better to have only two <tt/getty/'s running,
+and to create more consoles dynamically as the need arises.
+That way you'll have more memory when you don't use all these consoles,
+and also more consoles, in case you really need them.
+Edit <tt>/etc/inittab</tt> and comment out all <tt/getty/'s except
+for the first two.)
+
+When the consoles are allocated dynamically, it is usually easiest
+to have only one or two running <tt/getty/. More are opened by
+<tt>open -l -s bash</tt>. Unused consoles (without associated processes)
+are deallocated using <tt/deallocvt/ (formerly <tt/disalloc/).
+But, you say, I am involved in activities when I suddenly need more
+consoles, and do not have a bash prompt available to give the <tt/open/
+command.
+Fortunately it is possible to create a new console upon a single
+keystroke, regardless of what is happening at the current console.
+
+If you have <tt/spawn_login/ from <tt/kbd-0.96.tar.gz/ and you put
+<tscreen><verb>
+	loadkeys << EOF
+	alt keycode 103 = Spawn_Console
+	EOF
+	spawn_login &
+</verb></tscreen>
+in <tt>/etc/rc.local</tt>, then typing Alt-UpArrow will create a fresh VC
+running <tt/login/ (and switch to it). With <tt/spawn_console &amp;/ instead of
+<tt/spawn_login &amp;/ you'll have bash running there.
+See also <tt>open-1.4.tgz</tt> and <tt/dynamic-vc-1.1.tar.gz/.
+
+What action should be taken upon this Spawn_Console keypress
+can also be set in <tt>/etc/inittab</tt> under <tt/kbrequest/,
+if you have a recent <tt/init/. See inittab(5).
+
+(This action can be something entirely different - I just called
+the key Spawn_Console because that is what I used it for.
+When used for other purposes it is less confusing to use
+its synonym KeyboardSignal.
+For example, some people like to put the lines
+<tscreen><verb>
+	kb::kbrequest:/sbin/shutdown -h now
+</verb></tscreen>
+in <tt>/etc/inittab</tt>, and
+<tscreen><verb>
+	control alt keycode 79 = KeyboardSignal
+	control alt keycode 107 = KeyboardSignal
+</verb></tscreen>
+in their keymap. Now Ctrl-Alt-End will do a system shutdown.)
+
+You can only login as "root" on terminals listed in <tt>/etc/securetty</tt>.
+There exist programs that read terminal settings from files
+<tt>/etc/ttys</tt> and <tt>/etc/ttytype</tt>. If you have such
+files, and create additional consoles, then it might be a good idea
+to also add entries for them in these files.
+
+<sect>Ctrl-Alt-Del and other special key combinations<p>
+
+<sect1>Ctrl-Alt-Del (Boot)<p>
+<nidx>ctrl-alt-del!action taken by</nidx>
+
+If you press Ctrl-Alt-Del (or whatever key was assigned the keysym Boot by
+loadkeys) then either the machine reboots immediately (without sync), or
+<tt/init/ is sent a SIGINT. The former behaviour is the default. The default can
+be changed by root, using the system call reboot(), see ctrlaltdel(8).
+Some <tt/init/'s change the default. What happens when <tt/init/ gets SIGINT depends
+on the version of <tt/init/ used - often it will be determined by the pf entry in
+<tt>/etc/inittab</tt> (which means that you can run an arbitrary program
+in this case).
+In the current kernel Ctrl-AltGr-Del is no longer by default assigned to Boot.
+
+<sect1>Other combinations<p>
+<nidx>keyboard!special key combinations</nidx>
+<nidx>key combinations, special</nidx>
+
+<verb>
+Name		Default binding
+-------------------------------
+Show_Memory	Shift-Scrollock
+Show_Registers	AltGr-ScrollLock
+Show_State	Ctrl-ScrollLock
+Console_n	Alt-Fn and Ctrl-Alt-Fn	(1 <= n <= 12)
+Console_{n+12}	AltGr-Fn		(1 <= n <= 12)
+Incr_Console	Alt-RightArrow
+Decr_Console	Alt-LeftArrow
+Last_Console	Alt[Gr]-PrintScreen
+Scroll_Backward	Shift-PageUp
+Scroll_Forward	Shift-PageDown
+Caps_On					(CapsLock is a toggle; this key sets)
+Compose		Ctrl-.
+</verb>
+
+<sect1>X Combinations<p>
+<nidx>keyboard!key combinations for X</nidx>
+<nidx>key combinations, X</nidx>
+<nidx>X!key combinations for</nidx>
+
+<verb>
+Ctrl-Alt-Fn	Switch to VT n
+Ctrl-Alt-KP+	Next mode
+Ctrl-Alt-KP-	Previous mode
+Ctrl-Alt-Backspace	Kill X
+</verb>
+On some motherboards, Ctrl-Alt-KP- and Ctrl-Alt-KP+ will be equivalent to
+pressing the Turbo button. That is, both will produce the scancodes
+1d 38 4a ca b8 9d and 1d 38 4e ce b8 9d, and both will switch between
+Turbo (&gt;= 25MHz) and non-Turbo (8 or 12 MHz).
+(Often these key combinations only function this way when enabled
+by jumpers on the motherboard.)
+
+Perry F Nguyen (<tt/pfnguyen@netcom22.netcom.com/) writes:
+AMI BIOS has a feature that locks up the keyboard and flashes the LED's
+if the Ctrl-Alt-Backspace combination is pressed while a BIOS password
+is enabled, until the CMOS/BIOS password is typed in.
+
+<sect1>Dosemu Combinations<p>
+<nidx>key combinations!dosemu</nidx>
+<nidx>dosemu!key combinations for</nidx>
+
+<verb>
+Ctrl-Alt-Fn	Switch to VT n (from version 0.50; earlier Alt-Fn)
+Ctrl-Alt-PgDn	Kill dosemu (when in RAW keyboard mode)
+(and many other combinations - see the dosemu documentation)
+</verb>
+
+<sect1>Composing symbols<p>
+<nidx>keyboard!composing symbols with</nidx>
+<nidx>symbols!composing with keyboard</nidx>
+
+One symbol may be constructed using several keystrokes.
+<itemize>
+<item>
+LeftAlt-press, followed by a decimal number typed on the keypad, followed
+by LeftAlt-release, yields the symbol with code given by this number.
+(In Unicode mode this same mechanism, but then with 4 hexadecimal digits,
+may be used to define a Unicode symbol.)
+<item>
+A dead diacritic followed by a symbol, yields that symbol adorned with
+that diacritic. If the combination is undefined, both keys are taken
+separately.
+Which keys are dead diacritics is user-settable; none is by default.
+Five (since 2.0.25 six) dead diacritics can be defined (using loadkeys(1)):
+dead_grave, dead_acute, dead_circumflex, dead_tilde, dead_diaeresis
+(and dead_cedilla).
+Precisely what this adorning means is also user-settable:
+dead-diacritic, symbol is equivalent to Compose + diacritic + symbol.
+<item>
+Compose followed by two symbols yields a combination symbol. These
+combinations are user-settable. Today there are 68 combinations
+defined by default; you can see them by saying "dumpkeys | grep compose".
+<item>
+Then there are `Sticky' modifier keys (since 1.3.33). For example,
+one can type Ctrl-C as SControl, C and Ctrl-Alt-BackSpace as SControl,
+SAlt, BackSpace.
+</itemize>
+
+Note that there are at least four such composition mechanisms:
+<enum>
+<item>
+The Linux keyboard driver mechanism, used in conjunction with loadkeys.
+<item>
+The X mechanism - see X386keybd(1), later XFree86kbd(1).
+Under X11R6: edit <tt>/usr/X11R6/lib/X11/locale/iso8859-1/Compose</tt>.<p>
+See also Andrew D. Balsa's comments at
+<htmlurl url="http://wauug.erols.com/~balsa/linux/deadkeys/index.html"
+name="http://wauug.erols.com/~balsa/linux/deadkeys/index.html">.
+<item>
+The emacs mechanism obtained by loading "iso-insert.el" or
+calling `iso-accents-mode'.
+<item>
+The vim mechanism: insert a composed symbol by pressing Ctrl-K
+followed by two symbols. A list of the possible combinations is
+obtained by the command <tt>:digraphs</tt>.
+</enum>
+For X the order of the two symbols is arbitrary: both Compose-,-c and
+Compose-c-, yield a c-cedilla; for Linux and emacs only the former sequence
+works by default. For X and vim the list of compose combinations is fixed.
+Linux and emacs are flexible.
+The default lists are somewhat similar, but the details are different.
+
+<sect1>The SysRq key<p>
+<nidx>SysRq key</nidx>
+In case your kernel was compiled with CONFIG_MAGIC_SYSRQ enabled
+(a feature that is present since Linux 2.1.43)
+there is a single key (defined in <tt>&lt;linux/keyboard.h&gt;</tt>)
+to which special system functions are attached, regardless of the
+current keyboard mode. For the PC architecture this special key is,
+naturally, the Alt+SysRq key, and any of the two Alt keys will work.
+(Note that if CONFIG_MAGIC_SYSRQ was not enabled, the default action
+of this key is to return to the previous console.)
+<p>
+If you press this key, do not release it, and hit another key,
+a corresponding action is performed. The action is performed whether
+anybody is logged in or not, is root or not. For the details, see
+<tt>drivers/char/sysrq.c</tt>. Since this feature is meant only
+for kernel hackers, that should suffice. Still, let me add a few
+remarks.
+<p>
+For the key r the keyboard mode is reset to K_XLATE.
+For the key k a SAK and console reset is done.
+For the key b the machine is rebooted immediately.
+(See, not something you want to have enabled on a production machine.)
+For the key o the power is turned off (when the machine is capable of that).
+For the key s an emergency sync is scheduled.
+For the key u an emergency read-only remount is scheduled.
+For the keys p,t,m various information is shown
+(namely the same information also shown for RAlt,RCtrl,RShift+ScrollLock).
+For the keys e,i,l all processes get a SIG_TERM or SIG_KILL, respectively;
+for l even the init process is killed.
+Digits set the log level. Anything else prints a short summary:
+<tt>SysRq: unRaw saK Boot Off Sync Unmount showPc showTasks showMem
+loglevel0-8 tErm kIll killalL</tt>.
+<p>
+Note: These are very dangerous actions! And they do not use your
+keymap - indeed, are meant for emergency cases where the state
+of your keymap, or even of the entire kernel, is uncertain.
+If you use a dvorak keyboard - bad luck! Most other people will
+be able to survive: the dangerous letters A,M,Q,W,Y,Z that are
+differently placed on English, French and German keyboards, are
+not used for actions. (But if your finger slips and you hit L
+instead of K - bye bye to your system.)
+
+<sect>How to get out of raw mode<p>
+<nidx>raw mode, exiting</nidx>
+
+If some program using K_RAW keyboard mode exits without restoring the keyboard
+mode to K_XLATE, then it is difficult to do anything - not even Ctrl-Alt-Del
+works. However, it is sometimes possible to avoid hitting the reset button.
+(And desirable as well: your users may get angry if you kill their Hack game
+by rebooting; you might also damage your file system.)
+Easy solutions involve logging in from another terminal or another machine
+and doing <tt>kbd_mode -a</tt>.
+The procedure below assumes that no X is running, that the display is in
+text mode, and that you are at your bash prompt, that you are using a US
+keyboard layout, and that your interrupt character is Ctrl-C.
+
+Step 1. Start X.
+As follows: press 2 (and don't release), press F12 (and don't release)
+and immediately afterwards press = . This starts X.
+  (Explanation: if a key press produces keycode K, then the key release
+  produces keycode K+128. Probably your shell does not like these high
+  characters, so we avoid generating them by not releasing any key.
+  However, we have to be quick, otherwise key repeat starts. The digit 2
+  produces a Ctrl-C that discards previous junk, the F12 produces an X
+  and the = a Return.)
+Probably your screen will be grey now, since no <tt/.xinitrc/ was specified.
+However, Ctrl-Alt-Fn will work and you can go to another VT.
+(Ctrl-Alt-Backspace also works, but that exits X, and gets you back into
+the previous state, which is not what you want.)
+
+Step 2. Setup to change the keyboard mode.
+(For example, by <tt>sleep 5; kbd_mode -a</tt>.)
+
+Step 3. Leave X again.
+Alt-Fx (often Alt-F7) brings you back to X, and then Ctrl-Alt-Backspace
+exits X. Within 5 seconds your keyboard will be usable again.
+
+If you want to prepare for the occasion, then make
+<tt>&bsol;215A&bsol;301</tt> (3 symbols) an alias for <tt/kbd_mode -a/.
+Now just hitting = F7 = (3 symbols) will return you to sanity.
+
+<sect>The keyboard LEDs<p>
+<nidx>LEDs, keyboard</nidx>
+<nidx>keyboard!LEDs on</nidx>
+
+1. There are per-tty keyboard flags:
+each VC has its own NumLock, CapsLock, ScrollLock.
+By default these keyboard flags are shown in the LEDs.
+The usual way to change them is by pressing the corresponding key.
+(Side remark: pressing the NumLock key when in application key mode
+will not change the NumLock status, but produce an escape sequence.
+If you want the NumLock key to always change the Numlock status,
+bind it to Bare_Num_Lock.)
+
+2. Next, there are per-tty default keyboard flags,
+to initialize the keyboard flags when a reset occurs.
+Thus if you want NumLock on all the time, that is possible.
+The usual way to change them is by `<tt/setleds -D/ ...'.
+
+3. There is the possibility that the leds do not reflect
+the keyboard flags, but something else.
+<p>
+3A. This something else can be three bits somewhere in the kernel -
+which can be used if you want to monitor some hardware or software
+status bit(s). If you want this, edit the kernel source to call
+<tt/register_leds()/ somewhere.
+<p>
+3B. This something else can also be whatever some user program wants
+to show in the LEDs. Thus, people who like such things can make
+nice patterns of lights. If you want this, use the KDSETLED ioctl.
+
+This latter use is not per-tty, but the choice between former
+and latter use is per-tty.
+
+Summarizing: Each tty has a flag <tt/kbd->ledmode/.
+If this has the value LED_SHOW_FLAGS then the keyboard flags
+(NumLock etc.) of that tty are shown.
+If this has the value LED_SHOW_MEM then three selected memory
+addresses are shown.
+If this has the value LED_SHOW_IOCTL then the leds show whatever
+value was last assigned to them using the KDSETLED ioctl.
+
+One may add that X uses ioctl's to set the LEDs, but fails
+to reset its VT when it exits, so after using X there may
+be one VT that is not in the default LED_SHOW_FLAGS state.
+This can be fixed by doing `<tt/setleds -L/' on that VT.
+See setleds(1).
+
+<sect>The TERM variable<p>
+<nidx>TERM environment variable</nidx>
+<nidx>environment variables!TERM</nidx>
+
+Many programs use the <tt/TERM/ variable and the database
+<tt>/etc/termcap</tt> or <tt>/usr/lib/terminfo/*</tt> to decide
+which strings to send for clear screen, move cursor, etc.,
+and sometimes also to decide which string is sent
+by the users backspace key, function keys etc.
+This value is first set by the kernel (for the console).
+Usually, this variable is re-set by <tt/getty/, using <tt>/etc/ttytype</tt> or
+the argument specified in <tt>/etc/inittab</tt>.
+Sometimes, it is also set in <tt>/etc/profile</tt>.
+
+Older systems use <tt/TERM=console/ or <tt/TERM=con80x25/. Newer systems (with
+ncurses 1.8.6) use the more specific <tt/TERM=linux/ or <tt/TERM=linux-80x25/.
+However, old versions of <tt/setterm/ test for <tt/TERM=con*/ and hence fail
+to work with <tt/TERM=linux/.
+
+Since kernel version 1.3.2, the kernel default for the console is
+<tt/TERM=linux/.
+
+If you have a termcap without entry for linux, add the word linux
+to the entry for the console:
+<tscreen><verb>
+	console|con80x25|linux:\
+</verb></tscreen>
+and make <tt>/usr/lib/terminfo/l/linux</tt> a copy of or symbolic link to
+<tt>/usr/lib/terminfo/c/console</tt>.
+
+<sect1>Terminfo<p>
+<nidx>terminfo</nidx>
+
+The terminfo entry for the linux console from ncurses 1.8.6 misses the
+entry <tt>kich1=&bsol;E&lsqb;2&tilde;</tt>, needed by some programs.
+Edit the file and <tt/tic/ it.
+
+<sect>How to make other programs work with non-ASCII chars<p>
+<nidx>non-ASCII characters, using</nidx>
+
+In the bad old days this used to be quite a hassle. Every separate
+program had to be convinced individually to leave your bits alone.
+Not that all is easy now, but recently a lot of gnu utilities have
+learned to react to <tt/LC_CTYPE=iso_8859_1/ or <tt/LC_CTYPE=iso-8859-1/.
+Try this first, and if it doesn't help look at the hints below.
+Note that in recent versions of libc the routine setlocale() only
+works if you have installed the locale files (e.g. in
+<tt>/usr/lib/locale</tt>).
+
+First of all, the 8-th bit should survive the kernel input processing,
+so make sure to have <tt/stty cs8 -istrip -parenb/ set.
+
+A. For <tt/emacs/ the details strongly depend on the version.
+The information below is for version 19.34. Put lines
+<tscreen><verb>
+	(set-input-mode nil nil 1)
+	(standard-display-european t)
+	(require 'iso-syntax)
+</verb></tscreen>
+into your <tt>&dollar;HOME/.emacs</tt>.
+The first line (to be precise: the final 1)
+tells <tt/emacs/ not to discard the 8-th bit from input characters.
+The second line tells <tt/emacs/ not to display non-ASCII characters
+as octal escapes.
+The third line specifies the syntactic properties
+and case conversion table for the Latin-1 character set
+These last two lines are superfluous if you have something like
+<tt/LC_CTYPE=ISO-8859-1/ in your environment.
+(The variable may also be <tt/LC_ALL/ or even <tt/LANG/.
+The value may be anything with a substring `88591' or `8859-1'
+or `8859_1'.)
+<p>
+This is a good start.
+On a terminal that cannot display non-ASCII ISO 8859-1 symbols,
+the command
+<tscreen><verb>
+	(load-library "iso-ascii")
+</verb></tscreen>
+will cause accented characters to be displayed comme {,c}a.
+If your keymap does not make it easy to produce non-ASCII characters, 
+then
+<tscreen><verb>
+	(load-library "iso-transl")
+</verb></tscreen>
+will make the 2-character sequence Ctrl-X 8 a compose character,
+so that the 4-character sequence Ctrl-X 8 , c produces c-cedilla.
+Very inconvenient.
+<p>
+The command
+<tscreen><verb>
+	(iso-accents-mode)
+</verb></tscreen>
+will toggle ISO-8859-1 accent mode, in which the six
+characters ', `, ", &circ;, &tilde;, / are dead keys
+modifying the following symbol.
+Special combinations: &tilde;c gives a c with cedilla,
+&tilde;d gives an Icelandic eth, &tilde;t gives an Icelandic thorn,
+"s gives German sharp s, /a gives a with ring,
+/e gives an a-e ligature, &tilde;&lt; and &tilde;&gt; give guillemots,
+&tilde;! gives an inverted exclamation mark,
+&tilde;? gives an inverted question mark, and '' gives an acute accent.
+This is the default mapping of accents.
+The variable <tt/iso-languages/ is a list of pairs (language name,
+accent mapping), and a non-default mapping can be selected using
+<tscreen><verb>
+	(iso-accents-customize LANGUAGE)
+</verb></tscreen>
+Here LANGUAGE can be one of <tt/"portuguese"/, <tt/"irish"/,
+<tt/"french"/, <tt/"latin-2"/, <tt/"latin-1"/.
+
+Since the Linux default compose character is Ctrl-.
+it might be convenient to use that everywhere. Try
+<tscreen><verb>
+	(load-library "iso-insert.el")
+	(define-key global-map [?\C-.] 8859-1-map)
+</verb></tscreen>
+The latter line will not work under <tt/xterm/, if you use <tt/emacs -nw/,
+but in that case you can put
+<tscreen><verb>
+	XTerm*VT100.Translations:       #override\n\
+	      Ctrl <KeyPress> . : string("\0308")
+</verb></tscreen>
+in your <tt/.Xresources/.)
+
+B. For <tt/less/, put <tt/LESSCHARSET=latin1/ in the environment.
+This is also what you need if you see <tt/&bsol;255/ or <tt/&lt;AD&gt;/
+in <tt/man/ output: some versions of <tt/less/ will render the soft hyphen
+(octal 0255, hex 0xAD) this way when not given permission to output Latin-1.
+
+C. For <tt/ls/, give the option <tt/-N/. (Probably you want to make an alias.)
+
+D. For <tt/bash/ (version 1.13.*), put
+<tscreen><verb>
+	set meta-flag on
+	set convert-meta off
+	set output-meta on
+</verb></tscreen>
+into your <tt>&dollar;HOME/.inputrc</tt>.
+
+E. For <tt/tcsh/, use
+<tscreen><verb>
+	setenv LANG     US_en
+	setenv LC_CTYPE iso_8859_1
+</verb></tscreen>
+If you have nls on your system, then the corresponding routines are used.
+Otherwise <tt/tcsh/ will assume iso_8859_1, regardless of the values given to
+LANG and LC_CTYPE. See the section NATIVE LANGUAGE SYSTEM in tcsh(1).
+(The Danish HOWTO says: <tt>setenv LC_CTYPE ISO-8859-1; stty pass8</tt>)
+
+F. For <tt/flex/, give the option <tt/-8/ if the parser it generates must be
+able to handle 8-bit input. (Of course it must.)
+
+G. For <tt/elm/, set <tt/displaycharset/ to <tt/ISO-8859-1/.
+(Danish HOWTO: <tt/LANG=C/ and <tt/LC_CTYPE=ISO-8859-1/)
+
+H. For programs using curses (such as <tt/lynx/) David Sibley reports:
+The regular curses package uses the high-order bit for reverse video mode
+(see flag _STANDOUT defined in <tt>/usr/include/curses.h</tt>).  However,
+<tt/ncurses/ seems to be 8-bit clean and does display iso-latin-8859-1
+correctly.
+
+I. For programs using <tt/groff/ (such as <tt/man/), make sure to use
+<tt/-Tlatin1/ instead of <tt/-Tascii/. Old versions of the program <tt/man/
+also use <tt/col/, and the next point also applies.
+
+J. For <tt/col/, make sure 1) that it is fixed so as to do
+<tt>setlocale(LC_CTYPE,"");</tt> and 2) put
+<tt>LC_CTYPE=ISO-8859-1</tt> in the environment.
+
+K. For <tt/rlogin/, use option <tt/-8/.
+
+L. For <tt/joe/,
+<tt>sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz</tt>
+is said to work after editing the configuration file. Someone else said:
+<tt/joe/: Put the <tt/-asis/ option in <tt>/isr/lib/joerc</tt> in the
+first column.
+
+M. For LaTeX: <tt>&bsol;documentstyle&lsqb;isolatin&rsqb;{article}</tt>.
+For LaTeX2e: <tt>&bsol;documentclass{article}&bsol;usepackage{isolatin}</tt>
+where <tt>isolatin.sty</tt> is available from
+<htmlurl url="ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit"
+name="ftp.vlsivie.tuwien.ac.at/pub/8bit">.
+
+A nice discussion on the topic of ISO-8859-1 and how to manage 8-bit
+characters is contained in the file <tt>grasp.insa-lyon.fr:/pub/faq/fr/accents</tt>
+(in French). Another fine discussion (in English) can be found in
+<htmlurl
+url="ftp://rtfm.mit.edu/pub/usenet-by-group/comp.answers/internationalization/iso-8859-1-charset"
+name="rtfm.mit.edu:pub/usenet-by-group/comp.answers/internationalization/iso-8859-1-charset">.
+
+If you need to fix a program that behaves badly with 8-bit characters,
+one thing to keep in mind is that if you have a signed char type then
+characters may be negative, and using them as an array index will fail.
+Several programs can be fixed by judiciously adding (unsigned char) casts.
+
+<sect>X<p>
+
+This FAQ/HOWTO is about the Linux keyboard and console, not about X,
+which substitutes its own handling. However, it seems useful to
+document some of the Linux keyboard and console related properties
+of X.
+
+First of all, when X is started (say using <tt/startx/ or <tt/xinit/)
+it opens the first unused console, unless the desired console has been
+indicated explicitly, as in <tt/xinit -- vt12/.
+Note that this will fail when there is no device file <tt>/dev/tty12</tt>,
+but that it will not fail when the indicated console was in use already.
+When X finishes, it will return to the original console.
+While it is running one can use Ctrl-Alt-Fn to switch to VTn.
+<p>
+The XFree86 keymap mechanism is much poorer than the Linux mechanism.
+For each keycode there are at most 4 symbols defined, namely for the
+4 keymaps plain, shift, mod, mod+shift. What is the modifier mod?
+It is the one designated by the symbol <tt/Mode_switch/.
+For example, the command <tt/xmodmap keys.dk/, where the file
+<tt/keys.dk/ contains
+<tscreen><verb>
+keycode 64 = Mode_switch
+keycode 113 = Mode_switch
+keycode 38 = a A aring Aring
+keycode 26 = e E ae AE
+keycode 32 = o O oslash Ooblique
+</verb></tscreen>
+will make both Alt keys into mod keys, so that Alt+a gives å (a-ring), etc.
+(Note the illogical naming of oslash and Ooblique.)
+Such an <tt/xmodmap/ command can be placed in the <tt/.xinitrc/
+shell script that is executed by default when X is started.
+
+<sect1>What precisely does XFree86-2.1 do when it initializes its keymap?<p>
+<nidx>keymap!initialization by XFree86</nidx>
+<nidx>XFree86!keymap initialization</nidx>
+
+Since version 2.1, XFree86 will initialize its keymap from the Linux keymap,
+as far as possible. However, Linux had 16 entries per key (one for each
+combination of the Shift, AltGr, Ctrl, Alt modifiers) and presently has
+256 entries per key, while X has 4 entries per key (one for each combination
+of Shift, Mod), so some information is necessarily lost.
+
+First <tt/X/ reads the <tt/Xconfig/ file, where definitions of the LeftAlt, RightAlt,
+RightCtl, ScrollLock keys as Meta, ModeShift, Compose, ModeLock or ScrollLock
+might be found - see X386keybd(1), later XFree86kbd(1).
+
+For Mod the LeftAlt key is taken, unless RightCtl was defined as ModeShift or
+ModeLock, in which case RightCtl is taken, or RightAlt was so defined, in which
+case RightAlt is taken.
+This determines how the 4 XFree86 meanings of a key are selected from the 16
+Linux meanings.
+Note that Linux today does not distinguish by default between the two Ctrl keys
+or between the two Shift keys. <tt/X/ does distinguish.
+
+Now the kernel keymap is read and the usually obvious corresponding X
+bindings are made. The bindings for the "action keys" Show_Memory, Show_State,
+Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward,
+Caps_On and Boot are ignored, as are the dead diacriticals, and the locks
+(except for ShiftLock), and the "ASCII-x" keys.
+
+Next, the definitions in the <tt/Xconfig/ file are used. (Thus, a definition
+of Compose in <tt/Xconfig/ will override its value as found in the Linux keymap.)
+
+What happens to the strings associated with the function keys? Nothing,
+X does not have such a concept. (But it is possible to define strings
+for function keys in <tt/xterm/ - note however that the window manager gets the
+keys first.)
+
+I don't know how to convince <tt/xterm/ that it should use the X keymap
+when Alt is pressed; it seems just to look at its resource <tt/eightBitInput/,
+and depending on whether that is true or false either set the high order bit
+of the character, or generate an additional Escape character
+(just like setmetamode(1) does for the console).
+
+<sect>Unusual keys and keyboards<p>
+<nidx>keyboard!unusual versions of</nidx>
+<nidx>keyboard!non-standard keys on</nidx>
+
+The two keys PrintScrn/SysRq and Pause/Break are special in that they
+have two keycodes: the former has keycode 84 when Alt is pressed
+simultaneously, and keycode 99 otherwise; the latter has keycode
+101 when Ctrl is pressed simultaneously, and keycode 119 otherwise.
+(Thus, it makes no sense to bind functions to Alt keycode 99 or
+Ctrl keycode 119.)
+
+If you have strange keys, that do not generate any code under Linux
+(or generate messages like "unrecognized scancode"), and your kernel
+is 1.1.63 or later, then you can use setkeycodes(1) to tell the kernel
+about them. They won't work under X, however.
+Once they have gotten a keycode from <tt/setkeycodes/, they can be assigned
+a function by <tt/loadkeys/.
+
+<sect>Examples of use of loadkeys and xmodmap<p>
+<nidx>loadkeys!example using</nidx>
+<nidx>xmodmap!example using</nidx>
+
+Switching Caps Lock and Control on the keyboard (assuming you use
+keymaps 0-15; check with <tt>dumpkeys | head -1</tt>)
+<tscreen><verb>
+	% loadkeys
+	keymaps 0-15
+	keycode 58 = Control
+	keycode 29 = Caps_Lock
+	%
+</verb></tscreen>
+Switching them under X only:
+<tscreen><verb>
+	% xmodmap .xmodmaprc
+</verb></tscreen>
+where <tt/.xmodmaprc/ contains lines
+<tscreen><verb>
+	remove Lock = Caps_Lock
+	remove Control = Control_L
+	keysym Control_L = Caps_Lock
+	keysym Caps_Lock = Control_L
+	add Lock = Caps_Lock
+	add Control = Control_L
+</verb></tscreen>
+What is this about the key numbering? Backspace is 14 under Linux,
+22 under X?  Well, the numbering can best be regarded as arbitrary;
+the Linux number of a key can be found using showkey(1), and the
+X number using xev(1). Often the X number will be 8 more than the
+Linux number.
+
+Something else people like to change are the bindings of the function keys.
+Suppose that you want to make F12 produce the string "emacs ".
+Then
+<tscreen><verb>
+	% loadkeys
+	keycode 88 = F12
+	string F12 = "emacs "
+	%
+</verb></tscreen>
+will do this. More explicitly, the procedure is like this:
+(i) find the keycodes of the keys to be remapped, using showkey(1).
+(ii) save the current keymap, make a copy and edit that:
+<tscreen><verb>
+	% dumpkeys > my_keymap
+	% cp my_keymap trial_keymap
+	% emacs trial_keymap
+	% loadkeys trial_keymap
+	%
+</verb></tscreen>
+The format of the table can be guessed by looking at the output
+of <tt/dumpkeys/, and is documented in keymaps(5).
+When the new keymap functions as desired, you can put an invocation
+<tscreen><verb>
+	loadkeys my_new_keymap
+</verb></tscreen>
+in <tt>/etc/rc.local</tt> or so, to execute it automatically at boot-up.
+Note that changing modifier keys is tricky, and a newbie can easily
+get into a situation only an expert can get out of.
+<p>
+The default directory for keymaps is <tt>/usr/lib/kbd/keymaps</tt>.
+The default extension for keymaps is <tt>.map</tt>.
+For example, <tt>loadkeys uk</tt> would probably load
+<tt>/usr/lib/kbd/keymaps/i386/qwerty/uk.map</tt>.
+(With kbd-0.95 and older this would be <tt>/usr/lib/kbd/keytables</tt>
+and <tt>/usr/lib/kbd/keytables/uk.map</tt>.)
+<p>
+
+(On my machine) <tt>/dev/console</tt> is a symbolic link to <tt>/dev/tty0</tt>,
+and the kernel regards <tt>/dev/tty0</tt> as a synonym for the current VT.
+XFree86 1.3 changes the owner of <tt>/dev/tty0</tt>, but does not reset this
+after finishing. Thus, <tt/loadkeys/ or <tt/dumpkeys/ might fail because
+someone else owns <tt>/dev/tty0</tt>;
+in such a case you might run X first.
+Note that you cannot change keyboard mappings when not at the console
+(and not superuser).
+
+<sect1>`I can use only one finger to type with'<p>
+<nidx>keyboard!making modifier keys toggle</nidx>
+
+"Can the Shift, Ctrl and Alt keys be made to behave as toggles?"<p>
+Yes, after saying
+<tscreen><verb>
+	% loadkeys
+	keymaps 0-15
+	keycode 29 = Control_Lock
+	keycode 42 = Shift_Lock
+	keycode 56 = Alt_Lock
+	%
+</verb></tscreen>
+the left Control, Shift and Alt keys will act as toggles.
+The numbers involved are revealed by showkey
+(and usually are 29, 97, 42, 54, 56, 100 for left and right control,
+shift and alt, respectively), and the functions are
+Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
+
+"What about `sticky' modifier keys?"<p>
+Since version 1.3.33, the kernel knows about `sticky' modifier keys.
+These act on the next key pressed. So, where one earlier needed
+the 3-symbol sequence Shift_Lock a Shift_Lock to type `A', one
+can now use the 2-symbol sequence SShift_Lock a.
+Versions of the kbd package older than 0.93 do not yet include code
+for these sticky modifiers, and have to invoke them
+using their hexadecimal codes. For example,
+<tscreen><verb>
+	% loadkeys
+	keymaps 0-15
+	keycode 54 = 0x0c00
+	keycode 97 = 0x0c02
+	keycode 100 = 0x0c03
+	%
+</verb></tscreen>
+will make the right Shift, Ctrl, Alt sticky versions of the left ones.
+From 0.93 on you can say
+<tscreen><verb>
+	% loadkeys
+	keymaps 0-15
+	keycode 54 = SShift
+	keycode 97 = SCtrl
+	keycode 100 = SAlt
+	%
+</verb></tscreen>
+to obtain the same result.
+This will allow you to type Ctrl-Alt-Del in three keystrokes with one hand.
+
+The keymaps line in these examples should cover all keymaps you have in use.
+You find what keymaps you have in use by
+<tscreen><verb>
+	% dumpkeys | head -1
+</verb></tscreen>
+
+<sect>Changing the video mode<p>
+<nidx>console!changing video modes</nidx>
+<nidx>video modes, changing</nidx>
+<nidx>resolution, changing</nidx>
+
+As far as I know there are 6 ways to change resolution:
+
+1. At compile time: change the line
+<tscreen><verb>
+	SVGA_MODE=      -DSVGA_MODE=NORMAL_VGA
+</verb></tscreen>
+in <tt>/usr/src/linux/Makefile</tt>.
+
+1A. After compilation: use <tt>rdev -v</tt> - a terrible hack, but it exists.
+
+2. At boot time: put <tt>vga=ask</tt> in the lilo config file, and lilo will
+ask you what video mode you want. Once you know, put <tt/vga=/mypreference.
+
+3. At run time:
+A. Use the <tt/resizecons/ command. (This is a very primitive wrapper around
+the VT_RESIZE ioctl.)
+B. Use the <tt/SVGATextMode/ command. (This is a less primitive wrapper around
+the VT_RESIZE ioctl.)
+
+4. Not "on the console":
+Under <tt/dosemu/, or with svgalib etc. you can change the hardware video mode
+without the console driver being aware of it. Sometimes this is useful in
+getting <tt/resizecons/ or <tt/SVGATextMode/ set up: use <tt/dosemu/ and some
+DOS program to get into the desired videomode, dump (say from another VT) the
+contents of all video hardware registers, and use that in the initialization
+that <tt/resizecons/ and <tt/SVGATextMode/ require.
+In some cases where the video mode has gotten into some unusable state,
+starting <tt/dosemu/, relying on the BIOS to set up the video mode, and then
+killing <tt/dosemu/ (with <tt/kill -9/), is the easiest way to get into shape
+again.
+
+<sect1>Instructions for the use of resizecons<p>
+<nidx>resizecons program</nidx>
+
+Get svgalib and compile the program <tt/restoretextmode/.
+Boot up your machine in all possible video modes
+(using <tt/vga=ask/ in the lilo config file), and write
+the video hardware register contents to files CxR
+(C=cols, R=rows), e.g., 80x25, 132x44, etc.
+Put these files in <tt>/usr/lib/kbd/videomodes</tt>.
+Now <tt>resizecons 132x44</tt> will change videomode for you
+(and send SIGWINCH to all processes that need to know
+about this, and load another font if necessary).
+
+At present, <tt/resizecons/ only succeeds when there is memory enough
+for both the old and the new consoles at the same time.
+
+<sect>Changing the keyboard repeat rate<p>
+<nidx>keyboard!repeat rate, setting</nidx>
+
+At startup, the Linux kernel sets the repeat rate to its maximal value.
+For most keyboards this is reasonable, but for some it means that you
+can hardly touch a key without getting three copies of the corresponding
+symbol. Use the program kbdrate(8) to change the repeat rate, or, if
+that doesn't help, edit or remove the section
+<code>
+     ! set the keyboard repeat rate to the max
+
+         mov     ax,#0x0305
+         xor     bx,bx           ! clear bx
+         int     0x16
+</code>
+of <tt>/usr/src/linux/&lsqb;arch/i386/&rsqb;boot/setup.S</tt>.
+
+Scott Johnston (<tt/sj@zule.com/) reports: `To program the
+repeat rate of a Gateway AnyKey keyboard all one has to do
+is press the "Repeat Rate" key, then a function key
+F1-F8, then "Repeat Rate" again.  F1 is the slowest possible repeat rate,
+and F8 is really fast.  If you somehow manage to mess up your AnyKey
+keyboard doing this, simply press Ctrl-Alt-SuspndMacro to reset
+your keyboard to factory default settings.'
+
+<sect>Scrolling<p>
+<nidx>console!scrolling</nidx>
+<nidx>scrolling, console</nidx>
+
+There are two ways to get a screen to scroll.
+The first, called `hard scrolling', is to leave the text in
+video memory as it is, but change the viewing origin. This is
+very fast.
+The second, called `soft scrolling', involves moving all screen text
+up or down. This is much slower.
+The kernel console driver will write text starting at the top of
+the video memory, continuing to the bottom, then copy the bottom
+part to the top again, and continue, all the time using hard scrolling
+to show the right part on the screen.
+You can scroll back until the top op the video memory by using
+Shift-PageUp (the grey PageUp) and scroll down again using
+Shift-PageDown (the grey PageDown), assuming a default keymap.
+The amount of scrollback is thus limited to the amount of video memory
+you happen to have and you cannot increase this amount.
+If you need more scrollback, use some program that
+buffers the text, like <tt/less/ or <tt/screen/ - by using
+a buffer on disk you can go back to what you did last week.
+(One can set the amount of scrollback for <tt/xterm/ by
+adding a line like <tt/XTerm*saveLines: 2500/ in <tt/.Xresources/.)
+
+Upon changing virtual consoles, the screen content of the old VT
+is copied to kernel memory, and the screen content of the new VT
+is copied from kernel memory to video memory. Only the visible screen
+is copied, not all of video memory, so switching consoles means
+losing the scrollback information.
+
+Sometimes, hard scrolling is undesirable, for example when the hardware
+does not have the possibility to change viewing origin. The first
+example was a Braille machine that would render the top of video
+memory in Braille. There is a kernel boot-time option <tt/no-scroll/
+to tell the console driver not to use hard scrolling.
+See bootparam(7).
+
+<sect>Screensaving<p>
+<nidx>screensaving!controlling</nidx>
+<nidx>screen blanking</nidx>
+
+<tt>setterm -blank</tt> <it/nn/ will tell the console driver to blank the
+screen after <it/nn/ minutes of inactivity. (With <it/nn/ = 0, screensaving
+is turned off. In some old kernels this first took effect after the next
+keyboard interrupt.)
+
+The <tt/s/ option of xset(1) will set the X screensaving parameters:
+<tt>xset s off</tt> turns off the screensaver,
+<tt>xset s 10</tt> blanks the screen after 10 minutes.
+
+The video hardware powersaving modes can be enabled/disabled
+using the <tt/setvesablank/ program given in the starting comment of
+<tt>/usr/src/linux/drivers/char/vesa_blank.c</tt>.
+
+<sect>Screen dumps<p>
+<nidx>console!screenshots, obtaining</nidx>
+<nidx>screenshots!obtaining from console</nidx>
+
+<tt>setterm -dump</tt> <it/N/ will dump the contents of the
+screen of <tt>/dev/tty</tt><it/N/ to a file <tt/screen.dump/
+in the current directory. See setterm(1).
+
+The current contents of the screen of <tt>/dev/tty</tt><it/N/
+can be accessed using the device <tt>/dev/vcs</tt><it/N/
+(where `vcs' stands for `virtual console screen').
+For example, you could have a clock program that displays the
+current time in the upper right hand corner of the console screen
+(see the program <tt/vcstime/ in <tt/kbd-0.96.tar.gz/).
+Just dumping the contents goes with <tt>cat /dev/vcs</tt><it/N/.
+These device files <tt>/dev/vcs</tt><it/N/ do not contain
+newlines, and do not contain attributes, like colors. From a program
+it is usually better to use <tt>/dev/vcsa</tt><it/N/
+(`virtual console screen with attributes') instead - it starts with
+a header giving the number of rows and columns and the location
+of the cursor.
+See vcs(4).
+
+<sect>Some properties of the VT100 - application key mode<p>
+<nidx>keyboard!VT100 application key mode</nidx>
+<nidx>VT100 application key mode</nidx>
+
+: Sometimes my cursor keys or keypad keys produce strange codes?
+
+When the terminal is in application cursor key mode the cursor keys
+produce  Esc O x  and otherwise  Esc &lsqb; x  where x is one of A,B,C,D.
+Certain programs put the terminal in application cursor key mode;
+if you kill them with <tt/kill -9/, or if they crash, then the mode will
+not be reset.
+<verb>        % echo -e '\033c'  </verb>
+resets all properties of the current VC. Just changing the cursor
+application key mode is done by
+<verb>        % echo -e '\033[?1h' </verb>
+(set) and
+<verb>        % echo -e '\033[?1l' </verb>
+(clear).
+
+When the terminal is in application keypad key mode the keypad keys
+produce  Esc O y  and otherwise  Esc &lsqb; z &tilde;  for
+certain y and z. Setting application keypad key mode is done by
+<verb>        % echo -e '\033=' </verb>
+and
+<verb>        % echo -e '\033&gt;' </verb>
+clears it again.
+
+<sect>Hardware incompatibility<p>
+<nidx>keyboard!hardware incompatibilities</nidx>
+<nidx>incompatibility!keyboard-related</nidx>
+
+Several people have noticed that they lose typed characters when
+a floppy disk is active. It seems that this might be a problem with
+Uni-486WB motherboards.
+
+Tjalling Tjalkens (<tt/tjalling@ei.ele.tue.nl/) reports very similar problems
+with "a no-brand GMB-486 UNP Vesa motherboard with AMD 486DX2-66 CPU" -
+during floppy activity some keystrokes are lost, during floppy tape streamer
+(Conner C 250 MQ) activity many keystrokes are lost.
+
+Some people experience sporadic lockups - sometimes associated to
+hard disk activity or other I/O.
+
+Ulf Tietz (<tt/ulf@rio70.bln.sni.de/) wrote:
+`I have had the same problems, when I had my motherboard tuned too fast.
+So I reset all the timings ( CLK, wait statements etc ) to more 
+conventional values, and the problems are gone.'
+
+Bill Hogan (<tt/bhogan@crl.com/) wrote:
+`If you have an AMI BIOS, you might try setting the Gate A20 emulation
+parameter to "chipset" (if you have that option). Whenever I have had
+that parameter set to any of the other options on my machine
+("fast", "both", "disabled") I have had frequent keyboard lockups.'
+
+There may be a relation between keyboard problems and the video card in use.
+
+Shawn K. Quinn (<tt/skquinn@wt.net/) wrote:
+`I have a Zeos Pantera Pentium-90 that originally came with a Diamond Stealth
+64 S3-based video card. Under X I frequently got q's inserted into my text
+(how annoying) especially if I typed very fast (during Netrek for instance,
+even more annoying because guess what that does :-( ).
+Switching to a Creative Labs Graphics Blaster MA202 solved the problem.
+I'm assuming the Stealth 64 did something funny with the timings.'
+
+<sect>Copyright<p>
+Copyright (c) 1993-1999 by Andries Brouwer.  This document may be
+distributed under the terms set forth in the LDP license 
+at <htmlurl url="http://sunsite.unc.edu/LDP/COPYRIGHT.html"
+name="http://sunsite.unc.edu/LDP/COPYRIGHT.html"> or
+<htmlurl url="ftp://www.win.tue.nl/pub/linux/LDP/COPYRIGHT.txt"
+name="ftp://www.win.tue.nl/pub/linux/LDP/COPYRIGHT.txt">.
+
+Additions and corrections are welcome.
+Andries Brouwer - <tt/aeb@cwi.nl/
+
+</article>
diff --git a/doc/kbd.FAQ.txt b/doc/kbd.FAQ.txt
new file mode 100644
index 0000000..62f4ad7
--- /dev/null
+++ b/doc/kbd.FAQ.txt
@@ -0,0 +1,2112 @@
+  The Linux keyboard and console HOWTO
+  Andries Brouwer, aeb@cwi.nl
+  v2.9, 990114
+
+  This note contains some information about the Linux keyboard and con-
+  sole, and the use of non-ASCII characters.  It describes Linux 2.0.
+  ______________________________________________________________________
+
+  Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  1. Useful programs
+
+  2. Keyboard generalities
+
+  3. Console generalities
+
+  4. Resetting your terminal
+
+     4.1 Keyboard hardware reset
+
+  5. Delete and Backspace
+
+     5.1 How to tell Unix what character you want to use to delete the last typed character
+        5.1.1 `Getty used to do the right thing with DEL and BS but is broken now?'
+        5.1.2 `Login behaves differently at the first and second login attempts?'
+     5.2 How to tell Linux what code to generate when a key is pressed
+        5.2.1 `Why doesn't the Backspace key generate BackSpace by default?'
+     5.3 How to tell X to interchange Delete and Backspace
+     5.4 How to tell emacs what to do when it receives a Delete or Backspace
+     5.5 How to tell emacs to interchange Delete and Backspace
+     5.6 How to tell kermit to interchange Delete and Backspace
+     5.7 How to tell xterm to interchange Delete and Backspace
+     5.8 How to tell xterm about your favourite tty modes
+     5.9 How to tell xmosaic that the Backspace key generates a DEL
+     5.10 A better solution for Motif-using programs, like netscape
+     5.11 What about termcap and terminfo?
+     5.12 A complete solution
+
+  6. The console character sets
+
+  7. Console switching
+
+     7.1 Changing the number of Virtual Consoles
+
+  8. Ctrl-Alt-Del and other special key combinations
+
+     8.1 Ctrl-Alt-Del (Boot)
+     8.2 Other combinations
+     8.3 X Combinations
+     8.4 Dosemu Combinations
+     8.5 Composing symbols
+     8.6 The SysRq key
+
+  9. How to get out of raw mode
+
+  10. The keyboard LEDs
+
+  11. The TERM variable
+
+     11.1 Terminfo
+
+  12. How to make other programs work with non-ASCII chars
+
+  13. X
+
+     13.1 What precisely does XFree86-2.1 do when it initializes its keymap?
+
+  14. Unusual keys and keyboards
+
+  15. Examples of use of loadkeys and xmodmap
+
+     15.1 `I can use only one finger to type with'
+
+  16. Changing the video mode
+
+     16.1 Instructions for the use of resizecons
+  17. Changing the keyboard repeat rate
+
+  18. Scrolling
+
+  19. Screensaving
+
+  20. Screen dumps
+
+  21. Some properties of the VT100 - application key mode
+
+  22. Hardware incompatibility
+
+  23. Copyright
+
+
+
+  ______________________________________________________________________
+
+  11..  UUsseeffuull pprrooggrraammss
+
+
+  The following packages contain keyboard or console related programs.
+
+  kbd-0.96.tar.gz contains loadkeys, dumpkeys, showkey, setmetamode,
+  setleds, setfont, showfont, mapscrn, kbd_mode, loadunimap, chvt,
+  resizecons, deallocvt, getkeycodes, setkeycodes.
+
+  util-linux-2.6 contains setterm, kbdrate.  (Yes, the more in util-
+  linux-2.6 dumps core due to a name conflict. Preserve your old copy,
+  or use util-linux-2.5, or change `savetty' to `my_savetty' in more.c.)
+
+  sh-utils-1.12 contains stty.
+
+  open-1.4.tgz contains open (that should be renamed to openvt). (See
+  also dynamic-vc-1.1.tar.gz and consd-1.1.tgz.)
+
+  SVGATextMode-1.8.tar.gz contains SVGATextMode, a program that
+  obsoletes resizecons.
+
+  The X distribution contains xmodmap, xset, kbd_mode.  (See also
+  X386keybd(1) for the situation under XFree86 1.3, and Xserver(1) for
+  the XKEYBOARD extension under X11R6.)
+
+  termcap-2.0.8.tar.gz contains termcap, an old terminal capabilities
+  data base. ncurses-1.9.9e.tar.gz contains the termlib data base which
+  obsoletes termcap. (However, there are still many programs using
+  termcap.)
+
+  See loadkeys(1), setleds(1) and setmetamode(1) for the codes generated
+  by the various keys and the setting of leds when not under X. Under X,
+  see xmodmap(1) and xset(1).
+
+  See setfont(8) for loading console fonts. Many people will want to
+  load a font like iso01.f16 because the default font is the hardware
+  font of the video card, and often is a `Code Page 437' font missing
+  accented characters and other Latin-1 symbols.
+
+  See setterm(1) and kbdrate(8) for properties such as foreground and
+  background colors, screen blanking and character repeat rate when not
+  under X.  Under X, see xset(1), also for key click and bell volume.
+
+  The file /etc/termcap defines the escape sequences used by many
+  programs addressing the console (or any other terminal).  See
+  termcap(5).  A more modern version is found in /usr/lib/terminfo.  See
+  terminfo(5). Terminfo files are compiled by the terminfo compiler
+  /usr/lib/terminfo/tic, see tic(1).  Their contents can be examined
+  using the program infocmp, see infocmp(1).  The Linux console
+  sequences are documented in console_codes(4).
+
+
+
+  22..  KKeeyybbooaarrdd ggeenneerraalliittiieess
+
+
+  You press a key, and the keyboard controller sends scancodes to the
+  kernel keyboard driver. Some keyboards can be programmed, but usually
+  the scancodes corresponding to your keys are fixed.  The kernel
+  keyboard driver just transmits whatever it receives to the application
+  program when it is in _s_c_a_n_c_o_d_e _m_o_d_e, like when X is running.
+  Otherwise, it parses the stream of scancodes into keycodes,
+  corresponding to key press or key release events.  (A single key press
+  can generate up to 6 scancodes.)  These keycodes are transmitted to
+  the application program when it is in _k_e_y_c_o_d_e _m_o_d_e (as used, for
+  example, by showkey).  Otherwise, these keycodes are looked up in the
+  keymap, and the character or string found there is transmitted to the
+  application, or the action described there is performed.  (For
+  example, if one presses and releases the a key, then the keyboard
+  produces scancodes 0x1e and 0x9e, this is converted to keycodes 30 and
+  158, and then transmitted as 0141, the ASCII or latin-1 code for `a';
+  if one presses and releases Delete, then the keyboard produces
+  scancodes 0xe0 0x53 0xe0 0xd3, these are converted to keycodes 111 and
+  239, and then transmitted as the 4-symbol sequence ESC [ 3 ~, all
+  assuming a US keyboard and a default keymap. An example of a key
+  combination to which an action is assigned is Ctrl-Alt-Del.)
+
+  The translation between unusual scancodes and keycodes can be set
+  using the utility setkeycodes - only very few people will need it.
+  The translation between keycodes and characters or strings or actions,
+  that is, the keymap, is set using the utilities loadkeys and
+  setmetamode.  For details, see getkeycodes(8), setkeycodes(8),
+  dumpkeys(1), loadkeys(1), setmetamode(1). The format of the files
+  output by dumpkeys and read by loadkeys is described in keymaps(5).
+
+  Where it says `transmitted to the application' in the above
+  description, this really means `transmitted to the terminal driver'.
+  That is, further processing is just like that of text that comes in
+  over a serial line.  The details of this processing are set by the
+  program stty.
+
+
+  33..  CCoonnssoollee ggeenneerraalliittiieess
+
+
+  Conversely, when you output something to the console, it first
+  undergoes the standard tty processing, and then is fed to the console
+  driver.  The console driver emulates a VT100, and parses the input in
+  order to recognize VT100 escape sequences (for cursor movement, clear
+  screen, etc.).  The characters that are not part of an escape sequence
+  are first converted into Unicode, using one of four mapping tables if
+  the console was not in UTF-8 mode to start with, then looked up in the
+  table describing the correspondence between Unicode values and font
+  positions, and the obtained 8- or 9-bit font indices are then written
+  to video memory, where they cause the display of character shapes
+  found in the video card's character ROM.  One can load one's own fonts
+  into character ROM using setfont, load the corresponding Unicode map
+  with loadunimap, and load a user mapping table using mapscrn.  More
+  details will be given below.
+
+  There are many consoles (called _V_i_r_t_u_a_l _C_o_n_s_o_l_e_s or _V_i_r_t_u_a_l _T_e_r_m_i_n_a_l_s,
+  abbreviated VCs or VTs) that share the same screen. You can use them
+  as independent devices, either to run indendent login sessions, or
+  just to send some output to, perhaps from top, or the tail of the
+  system log or so.  See below (`Console switching') on how to set them
+  up and switch between them.
+
+
+
+  44..  RReesseettttiinngg yyoouurr tteerrmmiinnaall
+
+
+  There is garbage on the screen, or all your keystrokes are echoed as
+  line drawing characters. What to do?
+
+  Many programs will redraw the screen when Ctrl-L is typed. This might
+  help when there is some modem noise or broadcast message on your
+  screen.  The command clear will clear the screen.
+
+  The command reset will reset the console driver. This helps when the
+  screen is full of funny graphic characters, and also if it is reduced
+  to the bottom line. If you don't have this command, or if it does
+  something else, make your own by putting the following two lines in an
+  executable file reset in your PATH:
+
+
+               #!/bin/sh
+               echo -e \\033c
+
+
+
+
+  that is, you want to send the two characters ESC c to the console.
+
+  Why is it that the display sometimes gets confused and gives you a
+  24-line or 1-line screen, instead of the usual 25 lines?  Well, the
+  main culprit is the use of TERM=vt100 (or some other entry with 24
+  lines) instead of TERM=linux when logged in remotely.  If this happens
+  on /dev/tty2 then typing
+
+
+               % cat > /dev/tty2
+               ^[c
+               ^D
+
+
+
+
+  on some other VT (where 4 symbols are typed to cat: ESC, c, ENTER,
+  Ctrl-D) and refreshing the screen on /dev/tty2 (perhaps using Ctrl-L)
+  will fix things. Of course the permanent fix is to use the right term-
+  cap or terminfo entry.
+
+  Why is it that you sometimes get a lot of line-drawing characters,
+  e.g., after catting a binary to the screen?  Well, there are various
+  character set changing escape sequences, and by accident your binary
+  might contain some of these.  The ESC c is a general reset, a cure for
+  all, but if you know precisely what went wrong you can repair it
+  without resetting other console attributes. For example, after
+
+
+               % cat
+               ^N
+               ^D
+
+
+
+
+  your shell prompt will be all line-drawing characters.  Now do (typing
+  blindly)
+               % cat
+               ^O
+               ^D
+
+
+
+
+  and all is well again. (Three symbols typed to each cat: Ctrl-N (or
+  Ctrl-O), ENTER, Ctrl-D.) To understand what is happening, see `The
+  console character sets' below.
+
+  If you loaded some strange font, and want to return to the default,
+
+
+               % setfont
+
+
+
+
+  will do (provided you stored the default font in the default place).
+  If this default font does not contain an embedded Unicode map (and
+  gives the wrong symbols for accented characters), then say
+
+
+               % loadunimap
+
+
+
+
+  For example, if I do
+
+
+               % loadkeys de-latin1
+
+
+
+
+  then I have a German keyboard, and the key left of the Enter key gives
+  me a-umlaut. This works, because the a-umlaut occurs on the CP437 code
+  page and the kernel Unicode map is initialized to CP437, and my video
+  card has a CP437 font built-in.  If I now load an ISO 8859-1 font with
+
+
+               % setfont iso01.f16
+
+
+
+
+  then everything still works, because setfont invalidates the kernel
+  Unicode map (if there is no Unicode map attached to the font), and
+  without map the kernel goes directly to the font, and that is pre-
+  cisely correct for an ISO 8859-1 system with iso01.f16 font.  But
+  going back to the previous font with
+
+
+               % setfont
+
+
+
+
+  gives capital Sigma's instead of a-umlaut - all accented letters are
+  mixed up because also this font has no embedded Unicode map. After
+
+
+               % loadunimap
+
+  which loads the default Unicode map (which is right for the default
+  font) all works correctly again. Usually loadunimap is not invoked
+  directly, but via setfont. Thus, the previous two commands may be
+  replaced by
+
+
+               % setfont -u def
+
+
+
+
+  The Ethiopian fonts and the lat1u*.psf fonts have embedded Unicode
+  code map. Most of the others don't.
+
+  On old terminals output involving tabs may require a delay, and you
+  have to say
+
+
+               % stty tab3
+
+
+
+
+  (see stty(1)).
+
+  You can change the video mode using resizecons or SVGATextMode.  This
+  usually settles the output side.  On the input side there are many
+  things that might be wrong. If X or DOOM or some other program using
+  raw mode crashed, your keyboard may still be in raw (or mediumraw)
+  mode, and it is difficult to give commands.  (See "How to get out of
+  raw mode" below.)  If you loaded a bad keymap, then
+
+
+               % loadkeys -d
+
+
+
+
+  loads the default map again, but it may well be difficult to type `-'!
+  An alternative is
+
+
+               % loadkeys defkeymap
+
+
+
+
+  Sometimes even the letters are garbled. It is useful to know that
+  there are four main types of keyboards: QWERTY, QWERTZ, AZERTY and
+  DVORAK.  The first three are named after the first six letter keys,
+  and roughly represent the English, German and French speaking coun-
+  tries.  Compared to QWERTY, the QWERTZ map interchanges Y and Z.  Com-
+  pared to QWERTY, the AZERTY map interchanges Q and A, W and Z, and has
+  its M right of the L, at the semicolon position.  DVORAK has an
+  entirely different letter ordering.  There are two types of Turkish
+  keyboard. The so-called `Q'-keyboard has a QWERTY layout, while the
+  `F'-keyboard has an entirely different layout, let us say fgGIod,
+  where G stands for Gbreve and I for dotlessi.
+
+
+  44..11..  KKeeyybbooaarrdd hhaarrddwwaarree rreesseett
+
+
+  Things may be wrong on a lower level than Linux knows about.  There
+  are at least two distinct lower levels (keyboard and keyboard
+  controller) where one can give the command "keyboard disable" to the
+  keyboard hardware.  Keyboards can often be programmed to use one out
+  of three different sets of scancodes.
+
+  However, I do not know of cases where this turned out to be a problem.
+
+  Some keyboards have a remapping capability built in.  Stormy Henderson
+  (stormy@Ghost.Net) writes: `If it's your keyboard accidently being
+  reprogrammed, you can (on a Gateway AnyKey keyboard) press control-
+  alt-suspend_macro to reset the keys to normal.'
+
+
+  55..  DDeelleettee aanndd BBaacckkssppaaccee
+
+
+  Getting Delete and Backspace to work just right is nontrivial,
+  especially in a mixed environment, where you talk to console, to X, to
+  bash, to emacs, login remotely, etc.  You may have to edit several
+  configuration files to tell all of the programs involved precisely
+  what you want.  On the one hand, there is the matter of which keys
+  generate which codes (and how these codes are remapped by e.g. kermit
+  or emacs), and on the other hand the question of what functions are
+  bound to what codes.
+
+  People often complain `my backspace key does not work', as if this key
+  had a built-in function `delete previous character'.  Unfortunately,
+  all this key, or any key, does is producing a code, and one only can
+  hope that the kernel tty driver and all application programs can be
+  configured such that the backspace key indeed does function as a
+  `delete previous character' key.
+
+  Most Unix programs get their tty input via the kernel tty driver in
+  `cooked' mode, and a simple stty command determines the erase
+  character. However, programs like bash and emacs and X do their own
+  input handling, and have to be convinced one-by-one to do the right
+  thing.
+
+
+  55..11..  HHooww ttoo tteellll UUnniixx wwhhaatt cchhaarraacctteerr yyoouu wwaanntt ttoo uussee ttoo ddeelleettee tthhee
+  llaasstt ttyyppeedd cchhaarraacctteerr
+
+
+
+
+               % stty erase ^?
+
+
+
+
+  If the character is erased, but in a funny way, then something is
+  wrong with your tty settings. If echoprt is set, then erased charac-
+  ters are enclosed between \ and /.  If echoe is not set, then the
+  erase char is echoed (which is reasonable when it is a printing char-
+  acter, like #).  Most people will want stty echoe -echoprt. Saying
+  stty sane will do this and more. Saying stty -a shows your current
+  settings.  How come this is not right by default? It is, if you use
+  the right getty.
+
+  Note that many programs (like bash, emacs etc.) have their own
+  keybindings (defined in ~/.inputrc, ~/.emacs etc.) and are unaffected
+  by the setting of the erase character.
+
+  The standard Unix tty driver does not recognize a cursor, or keys
+  (like the arrow keys) to move the current position, and hence does not
+  have a command `delete current character' either. But for example you
+  can get bash on the console to recognize the Delete key by putting
+
+          set editing-mode emacs
+          "\e[3~":delete-char
+
+
+
+
+  into ~/.inputrc.
+
+
+  55..11..11..  ``GGeettttyy uusseedd ttoo ddoo tthhee rriigghhtt tthhiinngg wwiitthh DDEELL aanndd BBSS bbuutt iiss bbrroo--
+  kkeenn nnooww??''
+
+
+  Earlier, the console driver would do BS Space BS (\010\040\010) when
+  it got a DEL (\177).  Nowadays, DEL's are ignored (as they should be,
+  since the driver emulates a vt100). Get a better getty, i.e., one that
+  does not output DEL.
+
+
+  55..11..22..  ``LLooggiinn bbeehhaavveess ddiiffffeerreennttllyy aatt tthhee ffiirrsstt aanndd sseeccoonndd llooggiinn
+  aatttteemmppttss??''
+
+
+  At the first attempt, you are talking to getty. At the second attempt,
+  you are talking to login, a different program.
+
+
+  55..22..  HHooww ttoo tteellll LLiinnuuxx wwhhaatt ccooddee ttoo ggeenneerraattee wwhheenn aa kkeeyy iiss pprreesssseedd
+
+
+  On the console, or, more precisely, when not in (MEDIUM)RAW mode, use
+
+
+               % loadkeys mykeys.map
+
+
+
+
+  and under X use
+
+
+               % xmodmap mykeys.xmap
+
+
+
+
+  Note that (since XFree86-2.1) X reads the Linux settings of the
+  keymaps when initialising the X keymap. Although the two systems are
+  not 100% compatible, this should mean that in many cases the use of
+  xmodmap has become superfluous.
+
+  For example, suppose that you would like the Backspace key to send a
+  BackSpace (Ctrl-H, octal 010) and the grey Delete key a DEL (octal
+  0177). Add the following to /etc/rc.local (or wherever you keep your
+  local boot-time stuff):
+
+
+               /usr/bin/loadkeys << EOF
+               keycode 14 = BackSpace
+               keycode 111 = Delete
+               EOF
+
+
+
+
+  Note that this will only change the function of these keys when no
+  modifiers are used. (You need to specify a keymaps line to tell which
+  keymaps should be affected if you want to change bindings on more
+  keymaps.)  The Linux kernel default lets Ctrl-Backspace generate
+  BackSpace - this is sometimes useful as emergency escape, when you
+  find you can only generate DELs.
+
+  The left Alt key is sometimes called the Meta key, and by default the
+  combinations AltL-X are bound to the symbol MetaX.  But what character
+  sequence is MetaX?  That is determined (per-tty) by the Meta flag, set
+  by the command setmetamode. The two choices are: ESC X or X or-ed with
+  0200.
+
+  Many distributions have a loadkeys command somewhere in the bootup
+  sequence. For example, one may have the name of the desired keymap in
+  /etc/sysconfig/keyboard and the loadkeys command that loads it in
+  /etc/rc.d/init.d/keytable.  Or one may have the actual default keymap
+  in /etc/default.keytab and the loadkeys command that loads it in
+  /etc/rc.d/boot.  Etc. Instead of adding a local modification to the
+  default, one can of course change the default by editing the default
+  keymap or changing the name of the keymap to be loaded at boot time.
+  Note that loadkeys itself has default keymap defkeymap.map located
+  somewhere under /usr/lib/kbd or /usr/share/kbd (just like all other
+  keymaps) and this may not yet be available in single user boot before
+  /usr has been mounted.
+
+
+  55..22..11..  ``WWhhyy ddooeessnn''tt tthhee BBaacckkssppaaccee kkeeyy ggeenneerraattee BBaacckkSSppaaccee bbyy ddeeffaauulltt??''
+
+
+  (i) Because the VT100 had a Delete key above the Enter key.
+
+  (ii) Because Linus decided so.
+
+
+  55..33..  HHooww ttoo tteellll XX ttoo iinntteerrcchhaannggee DDeelleettee aanndd BBaacckkssppaaccee
+
+
+
+
+               % xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
+
+
+
+
+  Or, if you just want the Backspace key to generate a BackSpace:
+
+
+               % xmodmap -e "keycode 22 = BackSpace"
+
+
+
+
+  Or, if you just want the Delete key to generate a Delete:
+
+
+               % xmodmap -e "keycode 107 = Delete"
+
+
+
+
+  (but usually this is the default binding already).
+
+
+
+
+
+  55..44..  HHooww ttoo tteellll eemmaaccss wwhhaatt ttoo ddoo wwhheenn iitt rreecceeiivveess aa DDeelleettee oorr
+  BBaacckkssppaaccee
+
+
+  Put in your .emacs file lines like
+
+
+               (global-set-key "\?" 'help-command)
+               (global-set-key "\C-h" 'delete-backward-char)
+
+
+
+
+  Of course you can bind other commands to other keys in the same way.
+  Note that various major and minor modes redefine keybindings.  For
+  example, in incremental search mode one finds the code
+
+
+               (define-key map "\177" 'isearch-delete-char)
+               (define-key map "\C-h" 'isearch-mode-help)
+
+
+
+
+  This means that it may be a bad idea to use the above two global-set-
+  key commands. There are too many places where there are built-in
+  assumptions about Ctrl-H = help and DEL = delete.  That doesn't mean
+  that you have to setup keys so that Backspace generates DEL. But if it
+  doesn't then it is easiest to remap them at the lowest possible level
+  in emacs.
+
+
+  55..55..  HHooww ttoo tteellll eemmaaccss ttoo iinntteerrcchhaannggee DDeelleettee aanndd BBaacckkssppaaccee
+
+
+  Put in your .emacs file lines
+
+
+               (setq keyboard-translate-table (make-string 128 0))
+               (let ((i 0))
+                 (while (< i 128)
+                   (aset keyboard-translate-table i i)
+                   (setq i (1+ i))))
+               (aset keyboard-translate-table ?\b ?\^?)
+               (aset keyboard-translate-table ?\^? ?\b)
+
+
+
+
+  Recent versions of emacs have a function keyboard-translate and one
+  may simplify the above to
+
+
+               (keyboard-translate ?\C-h ?\C-?)
+               (keyboard-translate ?\C-? ?\C-h)
+
+
+
+
+  Note that under X emacs can distinguish between Ctrl-h and the
+  Backspace key (regardless of what codes these produce on the console),
+  and by default emacs will view the Backspace key as DEL (and do dele-
+  tion things, as bound to that character, rather than help things,
+  bound to Ctrl-H). One can distinguish Backspace and Delete, e.g. by
+
+
+          (global-unset-key [backspace] )
+          (global-set-key [backspace] 'delete-backward-char)
+          (global-unset-key [delete] )
+          (global-set-key [delete] 'delete-char)
+
+
+
+
+
+  55..66..  HHooww ttoo tteellll kkeerrmmiitt ttoo iinntteerrcchhaannggee DDeelleettee aanndd BBaacckkssppaaccee
+
+
+  Put in your .kermrc file the lines
+
+
+               set key \127 \8
+               set key \8 \127
+
+
+
+
+
+  55..77..  HHooww ttoo tteellll xxtteerrmm ttoo iinntteerrcchhaannggee DDeelleettee aanndd BBaacckkssppaaccee
+
+
+
+       XTerm*VT100.Translations:       #override\n\
+               <KeyPress> BackSpace : string(0x7f)\n\
+               <KeyPress> Delete : string(0x08)\n
+
+
+
+
+
+  55..88..  HHooww ttoo tteellll xxtteerrmm aabboouutt yyoouurr ffaavvoouurriittee ttttyy mmooddeess
+
+
+  Normally xterm will inherit the tty modes from its invoker.  Under
+  xdm, the default erase and kill characters are # and @, as in good old
+  Unix Version 6.  If you don't like that, you might put something like
+
+
+               XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D \
+                               susp ^Z start ^Q stop ^S eol ^@
+
+
+
+
+  in /usr/lib/X11/app-defaults/XTerm or in $HOME/.Xresources, assuming
+  that you have a line
+
+
+               xrdb -merge $HOME/.Xresources
+
+
+
+
+  in your $HOME/.xinitrc or $HOME/.xsession.
+
+
+  55..99..  HHooww ttoo tteellll xxmmoossaaiicc tthhaatt tthhee BBaacckkssppaaccee kkeeyy ggeenneerraatteess aa DDEELL
+
+
+  Putting
+
+
+          *XmText.translations: #override\n\
+             <Key>osfDelete: delete-previous-character()
+          *XmTextField.translations: #override\n\
+             <Key>osfDelete: delete-previous-character()
+
+
+
+
+  in your $HOME/.Xdefaults or $HOME/.Xresources helps.  (What file? The
+  file that is fed to xrdb, for example in .xinitrc.)
+
+  The netscape FAQ, however, says:
+
+          Why doesn't my Backspace key work in text fields?
+          By default, Linux and XFree86 come with the Backspace and Delete keys
+          misconfigured. All Motif programs (including, of course, Netscape
+          Navigator) will malfunction in the same way.
+
+          The Motif spec says that Backspace is supposed to delete the previous
+          character and Delete is supposed to delete the following character.
+          Linux and XFree86 come configured with both the Backspace and Delete
+          keys generating Delete.
+
+          You can fix this by using any one of the xmodmap, xkeycaps, or
+          loadkeys programs to make the key in question generate the BackSpace
+          keysym instead of Delete.
+
+          You can also fix it by having a .motifbind file; see the man page
+          for VirtualBindings(3).
+
+          Note: Don't use the *XmText.translations or *XmTextField.translations
+          resources to attempt to fix this problem. If you do, you will blow
+          away Netscape Navigator's other text-field key bindings.
+
+
+
+
+  55..1100..  AA bbeetttteerr ssoolluuttiioonn ffoorr MMoottiiff--uussiinngg pprrooggrraammss,, lliikkee nneettssccaappee
+
+
+  Ted Kandell (ted@tcg.net) suggests the following:
+
+  Somewhere in your .profile add the following:
+
+
+       stty erase ^H
+
+
+
+
+  If you are using bash, add the following lines to your .inputrc:
+
+
+       "\C-?": delete-char
+       "\C-h": backward-delete-char
+
+
+
+
+  Add the following lines to your .xinitrc file:
+
+
+
+
+
+
+  xmodmap <<-EOF
+  keycode 22  =  BackSpace osfBackSpace
+  keycode 107 =  Delete
+  EOF
+
+  # start your window manager here,  for example:
+  #(fvwm) 2>&1 | tee /dev/tty /dev/console
+
+  stty sane
+  stty erase ^H
+  loadmap <<-EOF
+  keycode 14  = BackSpace
+  keycode 111 = Delete
+  EOF
+
+
+
+
+  This will definitely work for a PC 101 or 102 key keyboard with any
+  Linux/XFree86 layout.
+
+  The important part to making Motif apps like Netscape work properly is
+  adding osfBackSpace to keycode 22 in addition to BackSpace.
+
+  Note that there must be spaces on either side of the = sign.
+
+
+
+  55..1111..  WWhhaatt aabboouutt tteerrmmccaapp aanndd tteerrmmiinnffoo??
+
+
+  When people have problems with backspace, they tend to look at their
+  termcap (or terminfo) entry for the terminal, and indeed, there does
+  exist a kb (or kbs) capability describing the code generated by the
+  Backspace key.  However, not many programs use it, so unless you are
+  having problems with one particular program only, probably the fault
+  is elsewhere.  Of course it is a good idea anyway to correct your
+  termcap (terminfo) entry.  See also below under "The TERM variable".
+
+
+  55..1122..  AA ccoommpplleettee ssoolluuttiioonn
+
+  There are many possibilities to get a functioning system.  Can't you
+  give one complete set of settings that works?
+
+  One way of getting a setup that works in all contexts is to have the
+  Backspace key generate DEL when on the console (or xterm), and
+  BackSpace when under X.  Maybe that is most convenient - there are too
+  many X utilities that expect BackSpace, and emacs on the console or
+  xterm expects DEL, while emacs under X can distinguish [BackSpace]
+  from Ctrl-H and does the right thing.
+
+  What is needed?  No loadkeys changes, since the Backspace key already
+  generates DEL by default.  No stty settings, they are OK by default.
+  No X settings, they are OK by default.  One just has to tell xterm
+  that the Backspace key should generate DEL: put
+
+
+       XTerm*VT100.Translations:       #override\n\
+               <KeyPress> BackSpace : string(0x7f)\n\
+
+
+
+
+  in .Xresources, and
+
+  xrdb -merge .Xresources
+
+
+
+
+  in .xinitrc, and you are settled.
+
+
+  66..  TThhee ccoonnssoollee cchhaarraacctteerr sseettss
+
+
+  The kernel first tries to figure out what symbol is meant by any given
+  user byte, and next where this symbol is located in the current font.
+
+  The kernel knows about 5 translations of bytes into console-screen
+  symbols.  In Unicode (UTF-8) mode, the UTF-8 code is just converted
+  directly into Unicode. The assumption is that almost all symbols one
+  needs are present in Unicode, and for the cases where this does not
+  hold the codes 0xff** are reserved for direct font access.  When not
+  in Unicode mode, one of four translation tables is used.  The four
+  tables are: a) Latin1 -> Unicode,  b) VT100 graphics -> Unicode, c) PC
+  -> Unicode, d) user-defined.
+
+  There are two character sets, called G0 and G1, and one of them is the
+  current character set. (Initially G0.)  Typing Ctrl-N causes G1 to
+  become current, Ctrl-O causes G0 to become current.
+
+  These variables G0 and G1 point at a translation table, and can be
+  changed by the user. Initially they point at tables a) and b),
+  respectively.  The sequences ESC ( B and ESC ( 0 and ESC ( U and ESC (
+  K cause G0 to point at translation table a), b), c) and d),
+  respectively.  The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC )
+  K cause G1 to point at translation table a), b), c) and d),
+  respectively.
+
+  The sequence ESC c causes a terminal reset, which is what you want if
+  the screen is all garbled. The oft-advised echo ^V^O will only make G0
+  current, but there is no guarantee that G0 points at table a).  In
+  some distributions there is a program reset(1) that just does echo
+  ^[c.  If your termcap entry for the console is correct (and has an
+  entry :rs=\Ec:), then also setterm -reset will work.
+
+  The user-defined mapping table can be set using mapscrn(8).  The
+  result of the mapping is that if a symbol c is printed, the symbol s =
+  map[c] is sent to the video memory. The bitmap that corresponds to s
+  is found in the character ROM, and can be changed using setfont(8).
+
+
+  77..  CCoonnssoollee sswwiittcchhiinngg
+
+
+  By default, console switching is done using Alt-Fn or Ctrl-Alt-Fn.
+  Under X (or recent versions of dosemu), only Ctrl-Alt-Fn works.  Many
+  keymaps will allow cyclic walks through all allocated consoles using
+  Alt-RightArrow and Alt-LeftArrow.
+
+  XFree86 1.3 does not know that Alt is down when you switch to the X
+  window. Thus, you cannot switch immediately to some other VT again but
+  have to release Alt first.  In the other direction this should work:
+  the kernel always keeps track of the up/down status of all keys. (As
+  far as possible: on some keyboards some keys do not emit a scancode
+  when pressed (e.g.: the PFn keys of a FOCUS 9000) or released (e.g.:
+  the Pause key of many keyboards).)
+
+  XFree86 1.3 saves the fonts loaded in the character ROMs when started,
+  and restores it on a console switch. Thus, the result of setfont on a
+  VT is wiped out when you go to X and back.  Using setfont under X will
+  lead to funny results.
+
+  One can change VT under program control using the chvt command.
+
+
+  77..11..  CChhaannggiinngg tthhee nnuummbbeerr ooff VViirrttuuaall CCoonnssoolleess
+
+
+  This question still comes up from time to time, but the answer is: you
+  already have enough of them.  Since kernel version 1.1.54, there are
+  between 1 and 63 virtual consoles. A new one is created as soon as it
+  is opened. It is removed by the utility deallocvt (but it can be
+  removed only when no processes are associated to it anymore, and no
+  text on it has been selected by programs like selection or gpm).
+
+  For older kernels, change the line
+
+
+               #define NR_CONSOLES     8
+
+
+
+
+  in include/linux/tty.h (don't increase this number beyond 63), and
+  recompile the kernel.
+
+  If they do not exist yet, create the tty devices with MAKEDEV or mknod
+  ttyN c 4 N where N denotes the tty number. For example,
+
+
+               for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
+
+
+
+
+  or, better (since it also takes care of owner and permissions),
+
+
+               for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done
+
+
+
+
+  If you want the new VCs to run getty, add lines in /etc/inittab.  (But
+  it is much better to have only two getty's running, and to create more
+  consoles dynamically as the need arises.  That way you'll have more
+  memory when you don't use all these consoles, and also more consoles,
+  in case you really need them.  Edit /etc/inittab and comment out all
+  getty's except for the first two.)
+
+  When the consoles are allocated dynamically, it is usually easiest to
+  have only one or two running getty. More are opened by open -l -s
+  bash. Unused consoles (without associated processes) are deallocated
+  using deallocvt (formerly disalloc).  But, you say, I am involved in
+  activities when I suddenly need more consoles, and do not have a bash
+  prompt available to give the open command.  Fortunately it is possible
+  to create a new console upon a single keystroke, regardless of what is
+  happening at the current console.
+
+  If you have spawn_login from kbd-0.96.tar.gz and you put
+
+
+
+
+
+          loadkeys << EOF
+          alt keycode 103 = Spawn_Console
+          EOF
+          spawn_login &
+
+
+
+
+  in /etc/rc.local, then typing Alt-UpArrow will create a fresh VC run-
+  ning login (and switch to it). With spawn_console & instead of
+  spawn_login & you'll have bash running there.  See also open-1.4.tgz
+  and dynamic-vc-1.1.tar.gz.
+
+  What action should be taken upon this Spawn_Console keypress can also
+  be set in /etc/inittab under kbrequest, if you have a recent init. See
+  inittab(5).
+
+  (This action can be something entirely different - I just called the
+  key Spawn_Console because that is what I used it for.  When used for
+  other purposes it is less confusing to use its synonym KeyboardSignal.
+  For example, some people like to put the lines
+
+
+               kb::kbrequest:/sbin/shutdown -h now
+
+
+
+
+  in /etc/inittab, and
+
+
+               control alt keycode 79 = KeyboardSignal
+               control alt keycode 107 = KeyboardSignal
+
+
+
+
+  in their keymap. Now Ctrl-Alt-End will do a system shutdown.)
+
+  You can only login as "root" on terminals listed in /etc/securetty.
+  There exist programs that read terminal settings from files /etc/ttys
+  and /etc/ttytype. If you have such files, and create additional
+  consoles, then it might be a good idea to also add entries for them in
+  these files.
+
+
+  88..  CCttrrll--AAlltt--DDeell aanndd ootthheerr ssppeecciiaall kkeeyy ccoommbbiinnaattiioonnss
+
+
+
+  88..11..  CCttrrll--AAlltt--DDeell ((BBoooott))
+
+
+  If you press Ctrl-Alt-Del (or whatever key was assigned the keysym
+  Boot by loadkeys) then either the machine reboots immediately (without
+  sync), or init is sent a SIGINT. The former behaviour is the default.
+  The default can be changed by root, using the system call reboot(),
+  see ctrlaltdel(8).  Some init's change the default. What happens when
+  init gets SIGINT depends on the version of init used - often it will
+  be determined by the pf entry in /etc/inittab (which means that you
+  can run an arbitrary program in this case).  In the current kernel
+  Ctrl-AltGr-Del is no longer by default assigned to Boot.
+
+
+
+
+  88..22..  OOtthheerr ccoommbbiinnaattiioonnss
+
+
+
+  Name            Default binding
+  -------------------------------
+  Show_Memory     Shift-Scrollock
+  Show_Registers  AltGr-ScrollLock
+  Show_State      Ctrl-ScrollLock
+  Console_n       Alt-Fn and Ctrl-Alt-Fn  (1 <= n <= 12)
+  Console_{n+12}  AltGr-Fn                (1 <= n <= 12)
+  Incr_Console    Alt-RightArrow
+  Decr_Console    Alt-LeftArrow
+  Last_Console    Alt[Gr]-PrintScreen
+  Scroll_Backward Shift-PageUp
+  Scroll_Forward  Shift-PageDown
+  Caps_On                                 (CapsLock is a toggle; this key sets)
+  Compose         Ctrl-.
+
+
+
+
+  88..33..  XX CCoommbbiinnaattiioonnss
+
+
+
+  Ctrl-Alt-Fn     Switch to VT n
+  Ctrl-Alt-KP+    Next mode
+  Ctrl-Alt-KP-    Previous mode
+  Ctrl-Alt-Backspace      Kill X
+
+
+  On some motherboards, Ctrl-Alt-KP- and Ctrl-Alt-KP+ will be equivalent
+  to pressing the Turbo button. That is, both will produce the scancodes
+  1d 38 4a ca b8 9d and 1d 38 4e ce b8 9d, and both will switch between
+  Turbo (>= 25MHz) and non-Turbo (8 or 12 MHz).  (Often these key combi-
+  nations only function this way when enabled by jumpers on the mother-
+  board.)
+
+  Perry F Nguyen (pfnguyen@netcom22.netcom.com) writes: AMI BIOS has a
+  feature that locks up the keyboard and flashes the LED's if the Ctrl-
+  Alt-Backspace combination is pressed while a BIOS password is enabled,
+  until the CMOS/BIOS password is typed in.
+
+
+  88..44..  DDoosseemmuu CCoommbbiinnaattiioonnss
+
+
+
+  Ctrl-Alt-Fn     Switch to VT n (from version 0.50; earlier Alt-Fn)
+  Ctrl-Alt-PgDn   Kill dosemu (when in RAW keyboard mode)
+  (and many other combinations - see the dosemu documentation)
+
+
+
+
+  88..55..  CCoommppoossiinngg ssyymmbboollss
+
+
+  One symbol may be constructed using several keystrokes.
+
+  +o  LeftAlt-press, followed by a decimal number typed on the keypad,
+     followed by LeftAlt-release, yields the symbol with code given by
+     this number.  (In Unicode mode this same mechanism, but then with 4
+     hexadecimal digits, may be used to define a Unicode symbol.)
+
+  +o  A dead diacritic followed by a symbol, yields that symbol adorned
+     with that diacritic. If the combination is undefined, both keys are
+     taken separately.  Which keys are dead diacritics is user-settable;
+     none is by default.  Five (since 2.0.25 six) dead diacritics can be
+     defined (using loadkeys(1)): dead_grave, dead_acute,
+     dead_circumflex, dead_tilde, dead_diaeresis (and dead_cedilla).
+     Precisely what this adorning means is also user-settable: dead-
+     diacritic, symbol is equivalent to Compose + diacritic + symbol.
+
+  +o  Compose followed by two symbols yields a combination symbol. These
+     combinations are user-settable. Today there are 68 combinations
+     defined by default; you can see them by saying "dumpkeys | grep
+     compose".
+
+  +o  Then there are `Sticky' modifier keys (since 1.3.33). For example,
+     one can type Ctrl-C as SControl, C and Ctrl-Alt-BackSpace as
+     SControl, SAlt, BackSpace.
+
+  Note that there are at least four such composition mechanisms:
+
+  1. The Linux keyboard driver mechanism, used in conjunction with
+     loadkeys.
+
+  2. The X mechanism - see X386keybd(1), later XFree86kbd(1).  Under
+     X11R6: edit /usr/X11R6/lib/X11/locale/iso8859-1/Compose.
+
+     See also Andrew D. Balsa's comments at
+     http://wauug.erols.com/~balsa/linux/deadkeys/index.html.
+
+  3. The emacs mechanism obtained by loading "iso-insert.el" or calling
+     `iso-accents-mode'.
+
+  4. The vim mechanism: insert a composed symbol by pressing Ctrl-K
+     followed by two symbols. A list of the possible combinations is
+     obtained by the command :digraphs.
+
+     For X the order of the two symbols is arbitrary: both Compose-,-c
+     and Compose-c-, yield a c-cedilla; for Linux and emacs only the
+     former sequence works by default. For X and vim the list of compose
+     combinations is fixed.  Linux and emacs are flexible.  The default
+     lists are somewhat similar, but the details are different.
+
+
+  88..66..  TThhee SSyyssRRqq kkeeyy
+
+  In case your kernel was compiled with CONFIG_MAGIC_SYSRQ enabled (a
+  feature that is present since Linux 2.1.43) there is a single key
+  (defined in <linux/keyboard.h>) to which special system functions are
+  attached, regardless of the current keyboard mode. For the PC
+  architecture this special key is, naturally, the Alt+SysRq key, and
+  any of the two Alt keys will work.  (Note that if CONFIG_MAGIC_SYSRQ
+  was not enabled, the default action of this key is to return to the
+  previous console.)
+
+  If you press this key, do not release it, and hit another key, a
+  corresponding action is performed. The action is performed whether
+  anybody is logged in or not, is root or not. For the details, see
+  drivers/char/sysrq.c. Since this feature is meant only for kernel
+  hackers, that should suffice. Still, let me add a few remarks.
+
+  For the key r the keyboard mode is reset to K_XLATE.  For the key k a
+  SAK and console reset is done.  For the key b the machine is rebooted
+  immediately.  (See, not something you want to have enabled on a
+  production machine.)  For the key o the power is turned off (when the
+  machine is capable of that).  For the key s an emergency sync is
+  scheduled.  For the key u an emergency read-only remount is scheduled.
+  For the keys p,t,m various information is shown (namely the same
+  information also shown for RAlt,RCtrl,RShift+ScrollLock).  For the
+  keys e,i,l all processes get a SIG_TERM or SIG_KILL, respectively; for
+  l even the init process is killed.  Digits set the log level. Anything
+  else prints a short summary: SysRq: unRaw saK Boot Off Sync Unmount
+  showPc showTasks showMem loglevel0-8 tErm kIll killalL.
+
+  Note: These are very dangerous actions! And they do not use your
+  keymap - indeed, are meant for emergency cases where the state of your
+  keymap, or even of the entire kernel, is uncertain.  If you use a
+  dvorak keyboard - bad luck! Most other people will be able to survive:
+  the dangerous letters A,M,Q,W,Y,Z that are differently placed on
+  English, French and German keyboards, are not used for actions. (But
+  if your finger slips and you hit L instead of K - bye bye to your
+  system.)
+
+
+  99..  HHooww ttoo ggeett oouutt ooff rraaww mmooddee
+
+
+  If some program using K_RAW keyboard mode exits without restoring the
+  keyboard mode to K_XLATE, then it is difficult to do anything - not
+  even Ctrl-Alt-Del works. However, it is sometimes possible to avoid
+  hitting the reset button.  (And desirable as well: your users may get
+  angry if you kill their Hack game by rebooting; you might also damage
+  your file system.)  Easy solutions involve logging in from another
+  terminal or another machine and doing kbd_mode -a.  The procedure
+  below assumes that no X is running, that the display is in text mode,
+  and that you are at your bash prompt, that you are using a US keyboard
+  layout, and that your interrupt character is Ctrl-C.
+
+  Step 1. Start X.  As follows: press 2 (and don't release), press F12
+  (and don't release) and immediately afterwards press = . This starts
+  X.  (Explanation: if a key press produces keycode K, then the key
+  release produces keycode K+128. Probably your shell does not like
+  these high characters, so we avoid generating them by not releasing
+  any key.  However, we have to be quick, otherwise key repeat starts.
+  The digit 2 produces a Ctrl-C that discards previous junk, the F12
+  produces an X and the = a Return.)  Probably your screen will be grey
+  now, since no .xinitrc was specified.  However, Ctrl-Alt-Fn will work
+  and you can go to another VT.  (Ctrl-Alt-Backspace also works, but
+  that exits X, and gets you back into the previous state, which is not
+  what you want.)
+
+  Step 2. Setup to change the keyboard mode.  (For example, by sleep 5;
+  kbd_mode -a.)
+
+  Step 3. Leave X again.  Alt-Fx (often Alt-F7) brings you back to X,
+  and then Ctrl-Alt-Backspace exits X. Within 5 seconds your keyboard
+  will be usable again.
+
+  If you want to prepare for the occasion, then make \215A\301 (3
+  symbols) an alias for kbd_mode -a.  Now just hitting = F7 = (3
+  symbols) will return you to sanity.
+
+
+  1100..  TThhee kkeeyybbooaarrdd LLEEDDss
+
+
+  1. There are per-tty keyboard flags: each VC has its own NumLock,
+  CapsLock, ScrollLock.  By default these keyboard flags are shown in
+  the LEDs.  The usual way to change them is by pressing the
+  corresponding key.  (Side remark: pressing the NumLock key when in
+  application key mode will not change the NumLock status, but produce
+  an escape sequence.  If you want the NumLock key to always change the
+  Numlock status, bind it to Bare_Num_Lock.)
+  2. Next, there are per-tty default keyboard flags, to initialize the
+  keyboard flags when a reset occurs.  Thus if you want NumLock on all
+  the time, that is possible.  The usual way to change them is by
+  `setleds -D ...'.
+
+  3. There is the possibility that the leds do not reflect the keyboard
+  flags, but something else.
+
+  3A. This something else can be three bits somewhere in the kernel -
+  which can be used if you want to monitor some hardware or software
+  status bit(s). If you want this, edit the kernel source to call
+  register_leds() somewhere.
+
+  3B. This something else can also be whatever some user program wants
+  to show in the LEDs. Thus, people who like such things can make nice
+  patterns of lights. If you want this, use the KDSETLED ioctl.
+
+  This latter use is not per-tty, but the choice between former and
+  latter use is per-tty.
+
+  Summarizing: Each tty has a flag kbd->ledmode.  If this has the value
+  LED_SHOW_FLAGS then the keyboard flags (NumLock etc.) of that tty are
+  shown.  If this has the value LED_SHOW_MEM then three selected memory
+  addresses are shown.  If this has the value LED_SHOW_IOCTL then the
+  leds show whatever value was last assigned to them using the KDSETLED
+  ioctl.
+
+  One may add that X uses ioctl's to set the LEDs, but fails to reset
+  its VT when it exits, so after using X there may be one VT that is not
+  in the default LED_SHOW_FLAGS state.  This can be fixed by doing
+  `setleds -L' on that VT.  See setleds(1).
+
+
+  1111..  TThhee TTEERRMM vvaarriiaabbllee
+
+
+  Many programs use the TERM variable and the database /etc/termcap or
+  /usr/lib/terminfo/* to decide which strings to send for clear screen,
+  move cursor, etc., and sometimes also to decide which string is sent
+  by the users backspace key, function keys etc.  This value is first
+  set by the kernel (for the console).  Usually, this variable is re-set
+  by getty, using /etc/ttytype or the argument specified in
+  /etc/inittab.  Sometimes, it is also set in /etc/profile.
+
+  Older systems use TERM=console or TERM=con80x25. Newer systems (with
+  ncurses 1.8.6) use the more specific TERM=linux or TERM=linux-80x25.
+  However, old versions of setterm test for TERM=con* and hence fail to
+  work with TERM=linux.
+
+  Since kernel version 1.3.2, the kernel default for the console is
+  TERM=linux.
+
+  If you have a termcap without entry for linux, add the word linux to
+  the entry for the console:
+
+
+               console|con80x25|linux:\
+
+
+
+
+  and make /usr/lib/terminfo/l/linux a copy of or symbolic link to
+  /usr/lib/terminfo/c/console.
+
+
+
+  1111..11..  TTeerrmmiinnffoo
+
+
+  The terminfo entry for the linux console from ncurses 1.8.6 misses the
+  entry kich1=\E[2~, needed by some programs.  Edit the file and tic it.
+
+
+  1122..  HHooww ttoo mmaakkee ootthheerr pprrooggrraammss wwoorrkk wwiitthh nnoonn--AASSCCIIII cchhaarrss
+
+
+  In the bad old days this used to be quite a hassle. Every separate
+  program had to be convinced individually to leave your bits alone.
+  Not that all is easy now, but recently a lot of gnu utilities have
+  learned to react to LC_CTYPE=iso_8859_1 or LC_CTYPE=iso-8859-1.  Try
+  this first, and if it doesn't help look at the hints below.  Note that
+  in recent versions of libc the routine setlocale() only works if you
+  have installed the locale files (e.g. in /usr/lib/locale).
+
+  First of all, the 8-th bit should survive the kernel input processing,
+  so make sure to have stty cs8 -istrip -parenb set.
+
+  A. For emacs the details strongly depend on the version.  The
+  information below is for version 19.34. Put lines
+
+
+               (set-input-mode nil nil 1)
+               (standard-display-european t)
+               (require 'iso-syntax)
+
+
+
+
+  into your $HOME/.emacs.  The first line (to be precise: the final 1)
+  tells emacs not to discard the 8-th bit from input characters.  The
+  second line tells emacs not to display non-ASCII characters as octal
+  escapes.  The third line specifies the syntactic properties and case
+  conversion table for the Latin-1 character set These last two lines
+  are superfluous if you have something like LC_CTYPE=ISO-8859-1 in your
+  environment.  (The variable may also be LC_ALL or even LANG.  The
+  value may be anything with a substring `88591' or `8859-1' or
+  `8859_1'.)
+
+  This is a good start.  On a terminal that cannot display non-ASCII ISO
+  8859-1 symbols, the command
+
+
+               (load-library "iso-ascii")
+
+
+
+
+  will cause accented characters to be displayed comme {,c}a.  If your
+  keymap does not make it easy to produce non-ASCII characters, then
+
+
+               (load-library "iso-transl")
+
+
+
+
+  will make the 2-character sequence Ctrl-X 8 a compose character, so
+  that the 4-character sequence Ctrl-X 8 , c produces c-cedilla.  Very
+  inconvenient.
+
+  The command
+
+          (iso-accents-mode)
+
+
+
+
+  will toggle ISO-8859-1 accent mode, in which the six characters ', `,
+  ", ^, ~, / are dead keys modifying the following symbol.  Special com-
+  binations: ~c gives a c with cedilla, ~d gives an Icelandic eth, ~t
+  gives an Icelandic thorn, "s gives German sharp s, /a gives a with
+  ring, /e gives an a-e ligature, ~< and ~> give guillemots, ~! gives an
+  inverted exclamation mark, ~? gives an inverted question mark, and ''
+  gives an acute accent.  This is the default mapping of accents.  The
+  variable iso-languages is a list of pairs (language name, accent map-
+  ping), and a non-default mapping can be selected using
+
+
+               (iso-accents-customize LANGUAGE)
+
+
+
+
+  Here LANGUAGE can be one of "portuguese", "irish", "french",
+  "latin-2", "latin-1".
+
+  Since the Linux default compose character is Ctrl-.  it might be
+  convenient to use that everywhere. Try
+
+
+               (load-library "iso-insert.el")
+               (define-key global-map [?\C-.] 8859-1-map)
+
+
+
+
+  The latter line will not work under xterm, if you use emacs -nw, but
+  in that case you can put
+
+
+               XTerm*VT100.Translations:       #override\n\
+                     Ctrl <KeyPress> . : string("\0308")
+
+
+
+
+  in your .Xresources.)
+
+  B. For less, put LESSCHARSET=latin1 in the environment.  This is also
+  what you need if you see \255 or <AD> in man output: some versions of
+  less will render the soft hyphen (octal 0255, hex 0xAD) this way when
+  not given permission to output Latin-1.
+
+  C. For ls, give the option -N. (Probably you want to make an alias.)
+
+  D. For bash (version 1.13.*), put
+
+
+               set meta-flag on
+               set convert-meta off
+               set output-meta on
+
+
+
+
+  into your $HOME/.inputrc.
+
+
+  E. For tcsh, use
+
+
+               setenv LANG     US_en
+               setenv LC_CTYPE iso_8859_1
+
+
+
+
+  If you have nls on your system, then the corresponding routines are
+  used.  Otherwise tcsh will assume iso_8859_1, regardless of the values
+  given to LANG and LC_CTYPE. See the section NATIVE LANGUAGE SYSTEM in
+  tcsh(1).  (The Danish HOWTO says: setenv LC_CTYPE ISO-8859-1; stty
+  pass8)
+
+  F. For flex, give the option -8 if the parser it generates must be
+  able to handle 8-bit input. (Of course it must.)
+
+  G. For elm, set displaycharset to ISO-8859-1.  (Danish HOWTO: LANG=C
+  and LC_CTYPE=ISO-8859-1)
+
+  H. For programs using curses (such as lynx) David Sibley reports: The
+  regular curses package uses the high-order bit for reverse video mode
+  (see flag _STANDOUT defined in /usr/include/curses.h).  However,
+  ncurses seems to be 8-bit clean and does display iso-latin-8859-1
+  correctly.
+
+  I. For programs using groff (such as man), make sure to use -Tlatin1
+  instead of -Tascii. Old versions of the program man also use col, and
+  the next point also applies.
+
+  J. For col, make sure 1) that it is fixed so as to do
+  setlocale(LC_CTYPE,""); and 2) put LC_CTYPE=ISO-8859-1 in the
+  environment.
+
+  K. For rlogin, use option -8.
+
+  L. For joe,
+  sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz is said
+  to work after editing the configuration file. Someone else said: joe:
+  Put the -asis option in /isr/lib/joerc in the first column.
+
+  M. For LaTeX: \documentstyle[isolatin]{article}.  For LaTeX2e:
+  \documentclass{article}\usepackage{isolatin} where isolatin.sty is
+  available from ftp.vlsivie.tuwien.ac.at/pub/8bit.
+
+  A nice discussion on the topic of ISO-8859-1 and how to manage 8-bit
+  characters is contained in the file grasp.insa-
+  lyon.fr:/pub/faq/fr/accents (in French). Another fine discussion (in
+  English) can be found in rtfm.mit.edu:pub/usenet-by-
+  group/comp.answers/internationalization/iso-8859-1-charset.
+
+  If you need to fix a program that behaves badly with 8-bit characters,
+  one thing to keep in mind is that if you have a signed char type then
+  characters may be negative, and using them as an array index will
+  fail.  Several programs can be fixed by judiciously adding (unsigned
+  char) casts.
+
+
+  1133..  XX
+
+
+  This FAQ/HOWTO is about the Linux keyboard and console, not about X,
+  which substitutes its own handling. However, it seems useful to
+  document some of the Linux keyboard and console related properties of
+  X.
+  First of all, when X is started (say using startx or xinit) it opens
+  the first unused console, unless the desired console has been
+  indicated explicitly, as in xinit -- vt12.  Note that this will fail
+  when there is no device file /dev/tty12, but that it will not fail
+  when the indicated console was in use already.  When X finishes, it
+  will return to the original console.  While it is running one can use
+  Ctrl-Alt-Fn to switch to VTn.
+
+  The XFree86 keymap mechanism is much poorer than the Linux mechanism.
+  For each keycode there are at most 4 symbols defined, namely for the 4
+  keymaps plain, shift, mod, mod+shift. What is the modifier mod?  It is
+  the one designated by the symbol Mode_switch.  For example, the
+  command xmodmap keys.dk, where the file keys.dk contains
+
+
+       keycode 64 = Mode_switch
+       keycode 113 = Mode_switch
+       keycode 38 = a A aring Aring
+       keycode 26 = e E ae AE
+       keycode 32 = o O oslash Ooblique
+
+
+
+
+  will make both Alt keys into mod keys, so that Alt+a gives  (a-ring),
+  etc.  (Note the illogical naming of oslash and Ooblique.)  Such an
+  xmodmap command can be placed in the .xinitrc shell script that is
+  executed by default when X is started.
+
+
+  1133..11..  WWhhaatt pprreecciisseellyy ddooeess XXFFrreeee8866--22..11 ddoo wwhheenn iitt iinniittiiaalliizzeess iittss
+  kkeeyymmaapp??
+
+
+  Since version 2.1, XFree86 will initialize its keymap from the Linux
+  keymap, as far as possible. However, Linux had 16 entries per key (one
+  for each combination of the Shift, AltGr, Ctrl, Alt modifiers) and
+  presently has 256 entries per key, while X has 4 entries per key (one
+  for each combination of Shift, Mod), so some information is
+  necessarily lost.
+
+  First X reads the Xconfig file, where definitions of the LeftAlt,
+  RightAlt, RightCtl, ScrollLock keys as Meta, ModeShift, Compose,
+  ModeLock or ScrollLock might be found - see X386keybd(1), later
+  XFree86kbd(1).
+
+  For Mod the LeftAlt key is taken, unless RightCtl was defined as
+  ModeShift or ModeLock, in which case RightCtl is taken, or RightAlt
+  was so defined, in which case RightAlt is taken.  This determines how
+  the 4 XFree86 meanings of a key are selected from the 16 Linux
+  meanings.  Note that Linux today does not distinguish by default
+  between the two Ctrl keys or between the two Shift keys. X does
+  distinguish.
+
+  Now the kernel keymap is read and the usually obvious corresponding X
+  bindings are made. The bindings for the "action keys" Show_Memory,
+  Show_State, Show_Registers, Last_Console, Console_n, Scroll_Backward,
+  Scroll_Forward, Caps_On and Boot are ignored, as are the dead
+  diacriticals, and the locks (except for ShiftLock), and the "ASCII-x"
+  keys.
+
+  Next, the definitions in the Xconfig file are used. (Thus, a
+  definition of Compose in Xconfig will override its value as found in
+  the Linux keymap.)
+
+
+  What happens to the strings associated with the function keys?
+  Nothing, X does not have such a concept. (But it is possible to define
+  strings for function keys in xterm - note however that the window
+  manager gets the keys first.)
+
+  I don't know how to convince xterm that it should use the X keymap
+  when Alt is pressed; it seems just to look at its resource
+  eightBitInput, and depending on whether that is true or false either
+  set the high order bit of the character, or generate an additional
+  Escape character (just like setmetamode(1) does for the console).
+
+
+  1144..  UUnnuussuuaall kkeeyyss aanndd kkeeyybbooaarrddss
+
+
+  The two keys PrintScrn/SysRq and Pause/Break are special in that they
+  have two keycodes: the former has keycode 84 when Alt is pressed
+  simultaneously, and keycode 99 otherwise; the latter has keycode 101
+  when Ctrl is pressed simultaneously, and keycode 119 otherwise.
+  (Thus, it makes no sense to bind functions to Alt keycode 99 or Ctrl
+  keycode 119.)
+
+  If you have strange keys, that do not generate any code under Linux
+  (or generate messages like "unrecognized scancode"), and your kernel
+  is 1.1.63 or later, then you can use setkeycodes(1) to tell the kernel
+  about them. They won't work under X, however.  Once they have gotten a
+  keycode from setkeycodes, they can be assigned a function by loadkeys.
+
+
+  1155..  EExxaammpplleess ooff uussee ooff llooaaddkkeeyyss aanndd xxmmooddmmaapp
+
+
+  Switching Caps Lock and Control on the keyboard (assuming you use
+  keymaps 0-15; check with dumpkeys | head -1)
+
+
+               % loadkeys
+               keymaps 0-15
+               keycode 58 = Control
+               keycode 29 = Caps_Lock
+               %
+
+
+
+
+  Switching them under X only:
+
+
+               % xmodmap .xmodmaprc
+
+
+
+
+  where .xmodmaprc contains lines
+
+
+               remove Lock = Caps_Lock
+               remove Control = Control_L
+               keysym Control_L = Caps_Lock
+               keysym Caps_Lock = Control_L
+               add Lock = Caps_Lock
+               add Control = Control_L
+
+
+
+
+  What is this about the key numbering? Backspace is 14 under Linux, 22
+  under X?  Well, the numbering can best be regarded as arbitrary; the
+  Linux number of a key can be found using showkey(1), and the X number
+  using xev(1). Often the X number will be 8 more than the Linux number.
+
+  Something else people like to change are the bindings of the function
+  keys.  Suppose that you want to make F12 produce the string "emacs ".
+  Then
+
+
+               % loadkeys
+               keycode 88 = F12
+               string F12 = "emacs "
+               %
+
+
+
+
+  will do this. More explicitly, the procedure is like this: (i) find
+  the keycodes of the keys to be remapped, using showkey(1).  (ii) save
+  the current keymap, make a copy and edit that:
+
+
+               % dumpkeys > my_keymap
+               % cp my_keymap trial_keymap
+               % emacs trial_keymap
+               % loadkeys trial_keymap
+               %
+
+
+
+
+  The format of the table can be guessed by looking at the output of
+  dumpkeys, and is documented in keymaps(5).  When the new keymap func-
+  tions as desired, you can put an invocation
+
+
+               loadkeys my_new_keymap
+
+
+
+
+  in /etc/rc.local or so, to execute it automatically at boot-up.  Note
+  that changing modifier keys is tricky, and a newbie can easily get
+  into a situation only an expert can get out of.
+
+  The default directory for keymaps is /usr/lib/kbd/keymaps.  The
+  default extension for keymaps is .map.  For example, loadkeys uk would
+  probably load /usr/lib/kbd/keymaps/i386/qwerty/uk.map.  (With kbd-0.95
+  and older this would be /usr/lib/kbd/keytables and
+  /usr/lib/kbd/keytables/uk.map.)
+
+
+  (On my machine) /dev/console is a symbolic link to /dev/tty0, and the
+  kernel regards /dev/tty0 as a synonym for the current VT.  XFree86 1.3
+  changes the owner of /dev/tty0, but does not reset this after
+  finishing. Thus, loadkeys or dumpkeys might fail because someone else
+  owns /dev/tty0; in such a case you might run X first.  Note that you
+  cannot change keyboard mappings when not at the console (and not
+  superuser).
+
+
+  1155..11..  ``II ccaann uussee oonnllyy oonnee ffiinnggeerr ttoo ttyyppee wwiitthh''
+
+
+
+  "Can the Shift, Ctrl and Alt keys be made to behave as toggles?"
+
+  Yes, after saying
+
+
+               % loadkeys
+               keymaps 0-15
+               keycode 29 = Control_Lock
+               keycode 42 = Shift_Lock
+               keycode 56 = Alt_Lock
+               %
+
+
+
+
+  the left Control, Shift and Alt keys will act as toggles.  The numbers
+  involved are revealed by showkey (and usually are 29, 97, 42, 54, 56,
+  100 for left and right control, shift and alt, respectively), and the
+  functions are Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
+
+  "What about `sticky' modifier keys?"
+
+  Since version 1.3.33, the kernel knows about `sticky' modifier keys.
+  These act on the next key pressed. So, where one earlier needed the
+  3-symbol sequence Shift_Lock a Shift_Lock to type `A', one can now use
+  the 2-symbol sequence SShift_Lock a.  Versions of the kbd package
+  older than 0.93 do not yet include code for these sticky modifiers,
+  and have to invoke them using their hexadecimal codes. For example,
+
+
+               % loadkeys
+               keymaps 0-15
+               keycode 54 = 0x0c00
+               keycode 97 = 0x0c02
+               keycode 100 = 0x0c03
+               %
+
+
+
+
+  will make the right Shift, Ctrl, Alt sticky versions of the left ones.
+  From 0.93 on you can say
+
+
+               % loadkeys
+               keymaps 0-15
+               keycode 54 = SShift
+               keycode 97 = SCtrl
+               keycode 100 = SAlt
+               %
+
+
+
+
+  to obtain the same result.  This will allow you to type Ctrl-Alt-Del
+  in three keystrokes with one hand.
+
+  The keymaps line in these examples should cover all keymaps you have
+  in use.  You find what keymaps you have in use by
+
+
+               % dumpkeys | head -1
+
+
+
+
+  1166..  CChhaannggiinngg tthhee vviiddeeoo mmooddee
+
+
+  As far as I know there are 6 ways to change resolution:
+
+  1. At compile time: change the line
+
+
+               SVGA_MODE=      -DSVGA_MODE=NORMAL_VGA
+
+
+
+
+  in /usr/src/linux/Makefile.
+
+  1A. After compilation: use rdev -v - a terrible hack, but it exists.
+
+  2. At boot time: put vga=ask in the lilo config file, and lilo will
+  ask you what video mode you want. Once you know, put vga=mypreference.
+
+  3. At run time: A. Use the resizecons command. (This is a very
+  primitive wrapper around the VT_RESIZE ioctl.)  B. Use the
+  SVGATextMode command. (This is a less primitive wrapper around the
+  VT_RESIZE ioctl.)
+
+  4. Not "on the console": Under dosemu, or with svgalib etc. you can
+  change the hardware video mode without the console driver being aware
+  of it. Sometimes this is useful in getting resizecons or SVGATextMode
+  set up: use dosemu and some DOS program to get into the desired
+  videomode, dump (say from another VT) the contents of all video
+  hardware registers, and use that in the initialization that resizecons
+  and SVGATextMode require.  In some cases where the video mode has
+  gotten into some unusable state, starting dosemu, relying on the BIOS
+  to set up the video mode, and then killing dosemu (with kill -9), is
+  the easiest way to get into shape again.
+
+
+  1166..11..  IInnssttrruuccttiioonnss ffoorr tthhee uussee ooff rreessiizzeeccoonnss
+
+
+  Get svgalib and compile the program restoretextmode.  Boot up your
+  machine in all possible video modes (using vga=ask in the lilo config
+  file), and write the video hardware register contents to files CxR
+  (C=cols, R=rows), e.g., 80x25, 132x44, etc.  Put these files in
+  /usr/lib/kbd/videomodes.  Now resizecons 132x44 will change videomode
+  for you (and send SIGWINCH to all processes that need to know about
+  this, and load another font if necessary).
+
+  At present, resizecons only succeeds when there is memory enough for
+  both the old and the new consoles at the same time.
+
+
+  1177..  CChhaannggiinngg tthhee kkeeyybbooaarrdd rreeppeeaatt rraattee
+
+
+  At startup, the Linux kernel sets the repeat rate to its maximal
+  value.  For most keyboards this is reasonable, but for some it means
+  that you can hardly touch a key without getting three copies of the
+  corresponding symbol. Use the program kbdrate(8) to change the repeat
+  rate, or, if that doesn't help, edit or remove the section
+
+
+
+
+
+
+  ______________________________________________________________________
+       ! set the keyboard repeat rate to the max
+
+           mov     ax,#0x0305
+           xor     bx,bx           ! clear bx
+           int     0x16
+  ______________________________________________________________________
+
+
+  of /usr/src/linux/[arch/i386/]boot/setup.S.
+
+  Scott Johnston (sj@zule.com) reports: `To program the repeat rate of a
+  Gateway AnyKey keyboard all one has to do is press the "Repeat Rate"
+  key, then a function key F1-F8, then "Repeat Rate" again.  F1 is the
+  slowest possible repeat rate, and F8 is really fast.  If you somehow
+  manage to mess up your AnyKey keyboard doing this, simply press Ctrl-
+  Alt-SuspndMacro to reset your keyboard to factory default settings.'
+
+
+  1188..  SSccrroolllliinngg
+
+
+  There are two ways to get a screen to scroll.  The first, called `hard
+  scrolling', is to leave the text in video memory as it is, but change
+  the viewing origin. This is very fast.  The second, called `soft
+  scrolling', involves moving all screen text up or down. This is much
+  slower.  The kernel console driver will write text starting at the top
+  of the video memory, continuing to the bottom, then copy the bottom
+  part to the top again, and continue, all the time using hard scrolling
+  to show the right part on the screen.  You can scroll back until the
+  top op the video memory by using Shift-PageUp (the grey PageUp) and
+  scroll down again using Shift-PageDown (the grey PageDown), assuming a
+  default keymap.  The amount of scrollback is thus limited to the
+  amount of video memory you happen to have and you cannot increase this
+  amount.  If you need more scrollback, use some program that buffers
+  the text, like less or screen - by using a buffer on disk you can go
+  back to what you did last week.  (One can set the amount of scrollback
+  for xterm by adding a line like XTerm*saveLines: 2500 in .Xresources.)
+
+  Upon changing virtual consoles, the screen content of the old VT is
+  copied to kernel memory, and the screen content of the new VT is
+  copied from kernel memory to video memory. Only the visible screen is
+  copied, not all of video memory, so switching consoles means losing
+  the scrollback information.
+
+  Sometimes, hard scrolling is undesirable, for example when the
+  hardware does not have the possibility to change viewing origin. The
+  first example was a Braille machine that would render the top of video
+  memory in Braille. There is a kernel boot-time option no-scroll to
+  tell the console driver not to use hard scrolling.  See bootparam(7).
+
+
+  1199..  SSccrreeeennssaavviinngg
+
+
+  setterm -blank _n_n will tell the console driver to blank the screen
+  after _n_n minutes of inactivity. (With _n_n = 0, screensaving is turned
+  off. In some old kernels this first took effect after the next
+  keyboard interrupt.)
+
+  The s option of xset(1) will set the X screensaving parameters: xset s
+  off turns off the screensaver, xset s 10 blanks the screen after 10
+  minutes.
+
+  The video hardware powersaving modes can be enabled/disabled using the
+  setvesablank program given in the starting comment of
+  /usr/src/linux/drivers/char/vesa_blank.c.
+
+
+  2200..  SSccrreeeenn dduummppss
+
+
+  setterm -dump _N will dump the contents of the screen of /dev/tty_N to a
+  file screen.dump in the current directory. See setterm(1).
+
+  The current contents of the screen of /dev/tty_N can be accessed using
+  the device /dev/vcs_N (where `vcs' stands for `virtual console
+  screen').  For example, you could have a clock program that displays
+  the current time in the upper right hand corner of the console screen
+  (see the program vcstime in kbd-0.96.tar.gz).  Just dumping the
+  contents goes with cat /dev/vcs_N.  These device files /dev/vcs_N do not
+  contain newlines, and do not contain attributes, like colors. From a
+  program it is usually better to use /dev/vcsa_N (`virtual console
+  screen with attributes') instead - it starts with a header giving the
+  number of rows and columns and the location of the cursor.  See
+  vcs(4).
+
+
+  2211..  SSoommee pprrooppeerrttiieess ooff tthhee VVTT110000 -- aapppplliiccaattiioonn kkeeyy mmooddee
+
+
+  : Sometimes my cursor keys or keypad keys produce strange codes?
+
+  When the terminal is in application cursor key mode the cursor keys
+  produce  Esc O x  and otherwise  Esc [ x  where x is one of A,B,C,D.
+  Certain programs put the terminal in application cursor key mode; if
+  you kill them with kill -9, or if they crash, then the mode will not
+  be reset.
+
+          % echo -e '\033c'
+
+
+  resets all properties of the current VC. Just changing the cursor
+  application key mode is done by
+
+          % echo -e '\033[?1h'
+
+
+  (set) and
+
+          % echo -e '\033[?1l'
+
+
+  (clear).
+
+  When the terminal is in application keypad key mode the keypad keys
+  produce  Esc O y  and otherwise  Esc [ z ~  for certain y and z.
+  Setting application keypad key mode is done by
+
+          % echo -e '\033='
+
+
+  and
+
+          % echo -e '\033>'
+
+
+  clears it again.
+
+
+
+
+  2222..  HHaarrddwwaarree iinnccoommppaattiibbiilliittyy
+
+
+  Several people have noticed that they lose typed characters when a
+  floppy disk is active. It seems that this might be a problem with
+  Uni-486WB motherboards.
+
+  Tjalling Tjalkens (tjalling@ei.ele.tue.nl) reports very similar
+  problems with "a no-brand GMB-486 UNP Vesa motherboard with AMD
+  486DX2-66 CPU" - during floppy activity some keystrokes are lost,
+  during floppy tape streamer (Conner C 250 MQ) activity many keystrokes
+  are lost.
+
+  Some people experience sporadic lockups - sometimes associated to hard
+  disk activity or other I/O.
+
+  Ulf Tietz (ulf@rio70.bln.sni.de) wrote: `I have had the same problems,
+  when I had my motherboard tuned too fast.  So I reset all the timings
+  ( CLK, wait statements etc ) to more conventional values, and the
+  problems are gone.'
+
+  Bill Hogan (bhogan@crl.com) wrote: `If you have an AMI BIOS, you might
+  try setting the Gate A20 emulation parameter to "chipset" (if you have
+  that option). Whenever I have had that parameter set to any of the
+  other options on my machine ("fast", "both", "disabled") I have had
+  frequent keyboard lockups.'
+
+  There may be a relation between keyboard problems and the video card
+  in use.
+
+  Shawn K. Quinn (skquinn@wt.net) wrote: `I have a Zeos Pantera
+  Pentium-90 that originally came with a Diamond Stealth 64 S3-based
+  video card. Under X I frequently got q's inserted into my text (how
+  annoying) especially if I typed very fast (during Netrek for instance,
+  even more annoying because guess what that does :-( ).  Switching to a
+  Creative Labs Graphics Blaster MA202 solved the problem.  I'm assuming
+  the Stealth 64 did something funny with the timings.'
+
+
+  2233..  CCooppyyrriigghhtt
+
+  Copyright (c) 1993-1999 by Andries Brouwer.  This document may be
+  distributed under the terms set forth in the LDP license at
+  http://sunsite.unc.edu/LDP/COPYRIGHT.html or
+  ftp://www.win.tue.nl/pub/linux/LDP/COPYRIGHT.txt.
+
+  Additions and corrections are welcome.  Andries Brouwer - aeb@cwi.nl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/keysyms.h.info b/doc/keysyms.h.info
new file mode 100644
index 0000000..7a3ff00
--- /dev/null
+++ b/doc/keysyms.h.info
@@ -0,0 +1,9 @@
+jrv@vanzandt.mv.com (Jim Van Zandt) writes:
+
+I have found that I can construct the definitions of
+the keysyms with the command
+
+dumpkeys --long-info | awk '/^0x0000/, /^$/ {
+        if(/^$/) exit;
+        printf("#define KS_%-22s %s\n", $2, $1);
+}' >keysyms.h
diff --git a/doc/n474.doc b/doc/n474.doc
new file mode 100644
index 0000000..7e0aa16
--- /dev/null
+++ b/doc/n474.doc
Binary files differ
diff --git a/doc/set_kbd_repeat b/doc/set_kbd_repeat
new file mode 100644
index 0000000..3d11194
--- /dev/null
+++ b/doc/set_kbd_repeat
@@ -0,0 +1,34 @@
+From: johnsonm@stolaf.edu (Michael K. Johnson)
+Subject: changing keyboard repeat rate.
+
+OK, I have gotten several requests for info on how to change the
+keyboard repeat rate, so here goes.  Note:  I can't just give diffs,
+because there are lots of options, and for heaven's sake it's only
+three lines of code.
+
+In boot/setup.S, there are the lines:
+
+! set the keyboard repeat rate to the max
+
+	mov	ax,#0x0305
+	mov	bx,0x0000
+	int	0x16
+
+If you don't want to change the repeat rate at all, just comment out
+these lines by prefacing them with !'s.  If you want something in the
+middle, change the
+	mov	bx,0x0000
+to	mov	bx,0x????
+where ???? is determined by (from Ralf Brown's interrupt list)
+bh = delay value (0x00 = 250 ms to 0x03 = 1000 ms (one second))
+	this is the delay before the repeat starts happening
+bl = repeat rate (0x00 = 30/sec to 0x0c = 10/sec [default] to 0x1f = 2/sec)
+
+I use	mov	bx,0x0006
+to delay 1/4 sec, then repeat at what I think is a comfortable rate.
+I am too lazy to calculate the exact speed -- maybe 20/sec? ;-)
+
+Hope this helps people.
+
+michaelkjohnson
+johnsonm@stolaf.edu
diff --git a/doc/utf/README b/doc/utf/README
new file mode 100644
index 0000000..2788bba
--- /dev/null
+++ b/doc/utf/README
@@ -0,0 +1,22 @@
+The file with a strange name in this directory is no mistake.
+It shows that Linux handles filenames in Unicode (UTF-8)
+without ever realizing that they are in Unicode.
+[However, some old tar's are unhappy with this filename.]
+
+If you want to see it (the filename consists of two musical notes):
+% setfont		# load PC font, just to be sure
+% setfont -u def.uni	# load Unicode mapping table
+% echo -e '\033%8'	# set Unicode output mode
+% ls -N			# show filenames (raw)
+% echo -e '\033%@'	# set Latin1 output mode again.
+
+If you want to remove it:
+% rm ./??????
+
+If you want to input Unicode:
+% kbd_mode -u		# Be careful! Do this only with a kbd_mode
+			# from kbd-0.88.tar.gz or later!
+and next tell loadkeys what key combinations correspond to which
+Unicode values. (See also the contents of that musical file.)
+
+See also the scripts unicode_start and unicode_stop in ../../src.
diff --git a/doc/utf/ethiopic b/doc/utf/ethiopic
new file mode 100644
index 0000000..02e2072
--- /dev/null
+++ b/doc/utf/ethiopic
@@ -0,0 +1,388 @@
+List of codes (in Unicode and UTF-8) of the characters
+available in the ethiopic fonts. View this for example by:
+% unicode_start
+% setfont Goha-16.psf
+% less -r ethiopic
+% unicode_stop
+
+1200   ሀ   ETHIOPIC SYLLABLE HA   (he)
+1201   ሁ   ETHIOPIC SYLLABLE HU   (hu)
+1202   ሂ   ETHIOPIC SYLLABLE HI   (hi)
+1203   ሃ   ETHIOPIC SYLLABLE HAA  (ha)
+1204   ሄ   ETHIOPIC SYLLABLE HEE  (hE)
+1205   ህ   ETHIOPIC SYLLABLE HE   (h)
+1206   ሆ   ETHIOPIC SYLLABLE HO   (ho)
+1207   ሇ  
+1208   ለ   ETHIOPIC SYLLABLE LA   (le)
+1209   ሉ   ETHIOPIC SYLLABLE LU   (lu)
+120A   ሊ   ETHIOPIC SYLLABLE LI   (li)
+120B   ላ   ETHIOPIC SYLLABLE LAA  (la)
+120C   ሌ   ETHIOPIC SYLLABLE LEE  (lE)
+120D   ል   ETHIOPIC SYLLABLE LE   (l)
+120E   ሎ   ETHIOPIC SYLLABLE LO   (lo)
+120F   ሏ   ETHIOPIC SYLLABLE LWA  (lWa)
+1210   ሐ   ETHIOPIC SYLLABLE HHA  (He)
+1211   ሑ   ETHIOPIC SYLLABLE HHU  (Hu)
+1212   ሒ   ETHIOPIC SYLLABLE HHI  (Hi)
+1213   ሓ   ETHIOPIC SYLLABLE HHAA (Ha)
+1214   ሔ   ETHIOPIC SYLLABLE HHEE (HE)
+1215   ሕ   ETHIOPIC SYLLABLE HHE  (H)
+1216   ሖ   ETHIOPIC SYLLABLE HHO  (Ho)
+1217   ሗ   ETHIOPIC SYLLABLE HHWA (HWa)
+1218   መ   ETHIOPIC SYLLABLE MA   (me)
+1219   ሙ   ETHIOPIC SYLLABLE MU   (mu)
+121A   ሚ   ETHIOPIC SYLLABLE MI   (mi)
+121B   ማ   ETHIOPIC SYLLABLE MAA  (ma)
+121C   ሜ   ETHIOPIC SYLLABLE MEE  (mE)
+121D   ም   ETHIOPIC SYLLABLE ME   (m)
+121E   ሞ   ETHIOPIC SYLLABLE MO   (mo)
+121F   ሟ   ETHIOPIC SYLLABLE MWA  (mWa)
+1220   ሠ   ETHIOPIC SYLLABLE SZA  (`se)
+1221   ሡ   ETHIOPIC SYLLABLE SZU  (`su)
+1222   ሢ   ETHIOPIC SYLLABLE SZI  (`si)
+1223   ሣ   ETHIOPIC SYLLABLE SZAA (`sa)
+1224   ሤ   ETHIOPIC SYLLABLE SZEE (`sE)
+1225   ሥ   ETHIOPIC SYLLABLE SZE  (`s)
+1226   ሦ   ETHIOPIC SYLLABLE SZO  (`so)
+1227   ሧ   ETHIOPIC SYLLABLE SZWA (`sWa)
+1228   ረ   ETHIOPIC SYLLABLE RA   (re)
+1229   ሩ   ETHIOPIC SYLLABLE RU   (ru)
+122A   ሪ   ETHIOPIC SYLLABLE RI   (ri)
+122B   ራ   ETHIOPIC SYLLABLE RAA  (ra)
+122C   ሬ   ETHIOPIC SYLLABLE REE  (rE)
+122D   ር   ETHIOPIC SYLLABLE RE   (r)
+122E   ሮ   ETHIOPIC SYLLABLE RO   (ro)
+122F   ሯ   ETHIOPIC SYLLABLE RWA  (rWa)
+1230   ሰ   ETHIOPIC SYLLABLE SA   (se)
+1231   ሱ   ETHIOPIC SYLLABLE SU   (su)
+1232   ሲ   ETHIOPIC SYLLABLE SI   (si)
+1233   ሳ   ETHIOPIC SYLLABLE SAA  (sa)
+1234   ሴ   ETHIOPIC SYLLABLE SEE  (sE)
+1235   ስ   ETHIOPIC SYLLABLE SE   (s)
+1236   ሶ   ETHIOPIC SYLLABLE SO   (so)
+1237   ሷ   ETHIOPIC SYLLABLE SWA  (sWa)
+1238   ሸ   ETHIOPIC SYLLABLE SHA  (xe)
+1239   ሹ   ETHIOPIC SYLLABLE SHU  (xu)
+123A   ሺ   ETHIOPIC SYLLABLE SHI  (xi)
+123B   ሻ   ETHIOPIC SYLLABLE SHAA (xa)
+123C   ሼ   ETHIOPIC SYLLABLE SHEE (xE)
+123D   ሽ   ETHIOPIC SYLLABLE SHE  (xa)
+123E   ሾ   ETHIOPIC SYLLABLE SHO  (xo)
+123F   ሿ   ETHIOPIC SYLLABLE SHWA (xWa)
+1240   ቀ   ETHIOPIC SYLLABLE QA   (qe)
+1241   ቁ   ETHIOPIC SYLLABLE QU   (qu)
+1242   ቂ   ETHIOPIC SYLLABLE QI   (qi)
+1243   ቃ   ETHIOPIC SYLLABLE QAA  (qa)
+1244   ቄ   ETHIOPIC SYLLABLE QEE  (qE)
+1245   ቅ   ETHIOPIC SYLLABLE QE   (q)
+1246   ቆ   ETHIOPIC SYLLABLE QO   (qo)
+1247   ቇ   
+1248   ቈ   ETHIOPIC SYLLABLE QWA  (qWe)
+1249   ቉  
+124A   ቊ   ETHIOPIC SYLLABLE QWI  (qWi)
+124B   ቋ   ETHIOPIC SYLLABLE QWAA (qWa)
+124C   ቌ   ETHIOPIC SYLLABLE QWEE (qWE)
+124D   ቍ   ETHIOPIC SYLLABLE QWE  (qW)
+124E   ቎  
+124F   ቏  
+1250   ቐ   ETHIOPIC SYLLABLE QHA   (Qe)
+1251   ቑ   ETHIOPIC SYLLABLE QHU   (Qu) 
+1252   ቒ   ETHIOPIC SYLLABLE QHI   (Qi)
+1253   ቓ   ETHIOPIC SYLLABLE QHAA  (Qa)
+1254   ቔ   ETHIOPIC SYLLABLE QHEE  (QE)
+1255   ቕ   ETHIOPIC SYLLABLE QHE   (Q)
+1256   ቖ   ETHIOPIC SYLLABLE QHO   (Qo)
+1257   ቗  
+1258   ቘ   ETHIOPIC SYLLABLE QHWA  (QWe) 
+1259   ቙  
+125A   ቚ   ETHIOPIC SYLLABLE QHWI  (QWi)
+125B   ቛ   ETHIOPIC SYLLABLE QHWAA (QWa)
+125C   ቜ   ETHIOPIC SYLLABLE QHWEE (QWE) 
+125D   ቝ   ETHIOPIC SYLLABLE QHWE  (QW)
+125E   ቞  
+125F   ቟  
+1260   በ   ETHIOPIC SYLLABLE BA   (be)
+1261   ቡ   ETHIOPIC SYLLABLE BU   (bu)
+1262   ቢ   ETHIOPIC SYLLABLE BI   (bi)
+1263   ባ   ETHIOPIC SYLLABLE BAA  (ba)
+1264   ቤ   ETHIOPIC SYLLABLE BEE  (bE)
+1265   ብ   ETHIOPIC SYLLABLE BE   (b)
+1266   ቦ   ETHIOPIC SYLLABLE BO   (bo)
+1267   ቧ   ETHIOPIC SYLLABLE BWA  (bWa)
+1268   ቨ   ETHIOPIC SYLLABLE VA   (ve)
+1269   ቩ   ETHIOPIC SYLLABLE VU   (vu)
+126A   ቪ   ETHIOPIC SYLLABLE VI   (vi)
+126B   ቫ   ETHIOPIC SYLLABLE VAA  (va)
+126C   ቬ   ETHIOPIC SYLLABLE VEE  (vE)
+126D   ቭ   ETHIOPIC SYLLABLE VE   (v)
+126E   ቮ   ETHIOPIC SYLLABLE VO   (vo)
+126F   ቯ   ETHIOPIC SYLLABLE VWA  (vWa)
+1270   ተ   ETHIOPIC SYLLABLE TA   (te)
+1271   ቱ   ETHIOPIC SYLLABLE TU   (tu)
+1272   ቲ   ETHIOPIC SYLLABLE TI   (ti)
+1273   ታ   ETHIOPIC SYLLABLE TAA  (ta)
+1274   ቴ   ETHIOPIC SYLLABLE TEE  (tE)
+1275   ት   ETHIOPIC SYLLABLE TE   (t)
+1276   ቶ   ETHIOPIC SYLLABLE TO   (to)
+1277   ቷ   ETHIOPIC SYLLABLE TWA  (tWa)
+1278   ቸ   ETHIOPIC SYLLABLE CA   (ce)
+1279   ቹ   ETHIOPIC SYLLABLE CU   (cu)
+127A   ቺ   ETHIOPIC SYLLABLE CI   (ci)
+127B   ቻ   ETHIOPIC SYLLABLE CAA  (ca)
+127C   ቼ   ETHIOPIC SYLLABLE CEE  (cE)
+127D   ች   ETHIOPIC SYLLABLE CE   (c)
+127E   ቾ   ETHIOPIC SYLLABLE CO   (co)
+127F   ቿ   ETHIOPIC SYLLABLE CWA  (cWa)
+1280   ኀ   ETHIOPIC SYLLABLE XA   (`he)
+1281   ኁ   ETHIOPIC SYLLABLE XU   (`hu)
+1282   ኂ   ETHIOPIC SYLLABLE XI   (`hi)
+1283   ኃ   ETHIOPIC SYLLABLE XAA  (`ha)
+1284   ኄ   ETHIOPIC SYLLABLE XEE  (`hE)
+1285   ኅ   ETHIOPIC SYLLABLE XE   (`h)
+1286   ኆ   ETHIOPIC SYLLABLE XO   (`ho)
+1287   ኇ  
+1288   ኈ   ETHIOPIC SYLLABLE XWA  (hWe)
+1289   ኉  
+128A   ኊ   ETHIOPIC SYLLABLE XWI  (hWi)
+128B   ኋ   ETHIOPIC SYLLABLE XWAA (hWa)
+128C   ኌ   ETHIOPIC SYLLABLE XWEE (hWE)
+128D   ኍ   ETHIOPIC SYLLABLE XWE  (hW)
+128E   ኎  
+128F   ኏  
+1290   ነ   ETHIOPIC SYLLABLE NA   (na)
+1291   ኑ   ETHIOPIC SYLLABLE NU   (nu)
+1292   ኒ   ETHIOPIC SYLLABLE NI   (ni)
+1293   ና   ETHIOPIC SYLLABLE NAA  (na)
+1294   ኔ   ETHIOPIC SYLLABLE NEE  (nE)
+1295   ን   ETHIOPIC SYLLABLE NE   (n)
+1296   ኖ   ETHIOPIC SYLLABLE NO   (no)
+1297   ኗ   ETHIOPIC SYLLABLE NWA  (nWa)
+1298   ኘ   ETHIOPIC SYLLABLE NYA  (Ne)
+1299   ኙ   ETHIOPIC SYLLABLE NYU  (Nu)
+129A   ኚ   ETHIOPIC SYLLABLE NYI  (Ni)
+129B   ኛ   ETHIOPIC SYLLABLE NYAA (Na)
+129C   ኜ   ETHIOPIC SYLLABLE NYEE (NE)
+129D   ኝ   ETHIOPIC SYLLABLE NYE  (N)
+129E   ኞ   ETHIOPIC SYLLABLE NYO  (No)
+129F   ኟ   ETHIOPIC SYLLABLE NYWA (NWa)
+12A0   አ   ETHIOPIC SYLLABLE GLOTTAL A   (e)
+12A1   ኡ   ETHIOPIC SYLLABLE GLOTTAL U   (u)
+12A2   ኢ   ETHIOPIC SYLLABLE GLOTTAL I   (i)
+12A3   ኣ   ETHIOPIC SYLLABLE GLOTTAL AA  (a)
+12A4   ኤ   ETHIOPIC SYLLABLE GLOTTAL EE  (E)
+12A5   እ   ETHIOPIC SYLLABLE GLOTTAL E   (I)
+12A6   ኦ   ETHIOPIC SYLLABLE GLOTTAL O   (o)
+12A7   ኧ   ETHIOPIC SYLLABLE GLOTTAL WA  (e3)
+12A8   ከ   ETHIOPIC SYLLABLE KA   (ke)
+12A9   ኩ   ETHIOPIC SYLLABLE KU   (ku)
+12AA   ኪ   ETHIOPIC SYLLABLE KI   (ki)
+12AB   ካ   ETHIOPIC SYLLABLE KAA  (ka)
+12AC   ኬ   ETHIOPIC SYLLABLE KEE  (kE)
+12AD   ክ   ETHIOPIC SYLLABLE KE   (k)
+12AE   ኮ   ETHIOPIC SYLLABLE KO   (ko)
+12AF   ኯ  
+12B0   ኰ   ETHIOPIC SYLLABLE KWA  (kWe)
+12B1   ኱  
+12B2   ኲ   ETHIOPIC SYLLABLE KWI  (kWi)
+12B3   ኳ   ETHIOPIC SYLLABLE KWAA (kWa)
+12B4   ኴ   ETHIOPIC SYLLABLE KWEE (kWE)
+12B5   ኵ   ETHIOPIC SYLLABLE KWE  (kW)
+12B6   ኶  
+12B7   ኷  
+12B8   ኸ   ETHIOPIC SYLLABLE KXA   (Ke)
+12B9   ኹ   ETHIOPIC SYLLABLE KXU   (Ku)
+12BA   ኺ   ETHIOPIC SYLLABLE KXI   (Ki)
+12BB   ኻ   ETHIOPIC SYLLABLE KXAA  (Ka)
+12BC   ኼ   ETHIOPIC SYLLABLE KXEE  (KE)
+12BD   ኽ   ETHIOPIC SYLLABLE KXE   (K)
+12BE   ኾ   ETHIOPIC SYLLABLE KXO   (Ko)
+12BF   ኿  
+12C0   ዀ   ETHIOPIC SYLLABLE KXWA  (KWe)
+12C1   ዁  
+12C2   ዂ   ETHIOPIC SYLLABLE KXWI  (KWi)
+12C3   ዃ   ETHIOPIC SYLLABLE KXWAA (KWa)
+12C4   ዄ   ETHIOPIC SYLLABLE KXWEE (KWE)
+12C5   ዅ   ETHIOPIC SYLLABLE KXWE  (KW)
+12E6   ዆  
+12C7   ዇  
+12C8   ወ   ETHIOPIC SYLLABLE WA   (we)
+12C9   ዉ   ETHIOPIC SYLLABLE WU   (wu)
+12CA   ዊ   ETHIOPIC SYLLABLE WI   (wi)
+12CB   ዋ   ETHIOPIC SYLLABLE WAA  (wa)
+12CC   ዌ   ETHIOPIC SYLLABLE WEE  (wE)
+12CD   ው   ETHIOPIC SYLLABLE WE   (w)
+12CE   ዎ   ETHIOPIC SYLLABLE WO   (wo)
+12CF   ዏ  
+12D0   ዐ   ETHIOPIC SYLLABLE PHARYNGEAL A   (`e)
+12D1   ዑ   ETHIOPIC SYLLABLE PHARYNGEAL U   (`u)
+12D2   ዒ   ETHIOPIC SYLLABLE PHARYNGEAL I   (`i)
+12D3   ዓ   ETHIOPIC SYLLABLE PHARYNGEAL AA  (`a)
+12D4   ዔ   ETHIOPIC SYLLABLE PHARYNGEAL EE  (`E)
+12D5   ዕ   ETHIOPIC SYLLABLE PHARYNGEAL E   (`I)
+12D6   ዖ   ETHIOPIC SYLLABLE PHARYNGEAL O   (`o)
+12D7   ዗  
+12D8   ዘ   ETHIOPIC SYLLABLE ZA   (ze)
+12D9   ዙ   ETHIOPIC SYLLABLE ZU   (zu)
+12DA   ዚ   ETHIOPIC SYLLABLE ZI   (zi)
+12DB   ዛ   ETHIOPIC SYLLABLE ZAA  (za)
+12DC   ዜ   ETHIOPIC SYLLABLE ZEE  (zE)
+12DD   ዝ   ETHIOPIC SYLLABLE ZE   (z)
+12DE   ዞ   ETHIOPIC SYLLABLE ZO   (zo)
+12DF   ዟ   ETHIOPIC SYLLABLE ZWA  (zWa)
+12E0   ዠ   ETHIOPIC SYLLABLE ZHA  (Ze)
+12E1   ዡ   ETHIOPIC SYLLABLE ZHU  (Zu)
+12E2   ዢ   ETHIOPIC SYLLABLE ZHI  (Zi)
+12E3   ዣ   ETHIOPIC SYLLABLE ZHAA (Za)
+12E4   ዤ   ETHIOPIC SYLLABLE ZHEE (ZE)
+12E5   ዥ   ETHIOPIC SYLLABLE ZHE  (Z)
+12E6   ዦ   ETHIOPIC SYLLABLE ZHO  (Zo)
+12E7   ዧ   ETHIOPIC SYLLABLE ZHWA (ZWa)
+12E8   የ   ETHIOPIC SYLLABLE YA   (ye)
+12E9   ዩ   ETHIOPIC SYLLABLE YU   (yu)
+12EA   ዪ   ETHIOPIC SYLLABLE YI   (yi)
+12EB   ያ   ETHIOPIC SYLLABLE YAA  (ya)
+12EC   ዬ   ETHIOPIC SYLLABLE YEE  (yE)
+12ED   ይ   ETHIOPIC SYLLABLE YE   (y)
+12EE   ዮ   ETHIOPIC SYLLABLE YO   (yo)
+12EF   ዯ   ETHIOPIC SYLLABLE YWA  (yWa)
+12F0   ደ   ETHIOPIC SYLLABLE DA   (de)
+12F1   ዱ   ETHIOPIC SYLLABLE DU   (du)
+12F2   ዲ   ETHIOPIC SYLLABLE DI   (di)
+12F3   ዳ   ETHIOPIC SYLLABLE DAA  (da)
+12F4   ዴ   ETHIOPIC SYLLABLE DEE  (dE)
+12F5   ድ   ETHIOPIC SYLLABLE DE   (d)
+12F6   ዶ   ETHIOPIC SYLLABLE DO   (do)
+12F7   ዷ   ETHIOPIC SYLLABLE DWA  (dWa)
+12F8   ዸ   ETHIOPIC SYLLABLE DDA  (De)
+12F9   ዹ   ETHIOPIC SYLLABLE DDU  (Du)
+12FA   ዺ   ETHIOPIC SYLLABLE DDI  (Di)
+12FB   ዻ   ETHIOPIC SYLLABLE DDAA (Da)
+12FC   ዼ   ETHIOPIC SYLLABLE DDEE (DE)
+12FD   ዽ   ETHIOPIC SYLLABLE DDE  (D)
+12FE   ዾ   ETHIOPIC SYLLABLE DDO  (Do)
+12FF   ዿ   ETHIOPIC SYLLABLE DDWA (DWa)
+1300   ጀ   ETHIOPIC SYLLABLE JA   (je)
+1301   ጁ   ETHIOPIC SYLLABLE JU   (ju)
+1302   ጂ   ETHIOPIC SYLLABLE JI   (ji)
+1303   ጃ   ETHIOPIC SYLLABLE JAA  (ja)
+1304   ጄ   ETHIOPIC SYLLABLE JEE  (jE)
+1305   ጅ   ETHIOPIC SYLLABLE JE   (j)
+1306   ጆ   ETHIOPIC SYLLABLE JO   (jo)
+1307   ጇ   ETHIOPIC SYLLABLE JWA  (jWa)
+1308   ገ   ETHIOPIC SYLLABLE GA   (ga)
+1309   ጉ   ETHIOPIC SYLLABLE GU   (gu)
+130A   ጊ   ETHIOPIC SYLLABLE GI   (gi)
+130B   ጋ   ETHIOPIC SYLLABLE GAA  (ga)
+130C   ጌ   ETHIOPIC SYLLABLE GEE  (gE)
+130D   ግ   ETHIOPIC SYLLABLE GE   (g)
+130E   ጎ   ETHIOPIC SYLLABLE GO   (go)
+130F   ጏ  
+1310   ጐ   ETHIOPIC SYLLABLE GWU  (gWu)
+1311   ጑  
+1312   ጒ   ETHIOPIC SYLLABLE GWI  (gWi)
+1313   ጓ   ETHIOPIC SYLLABLE GWAA (gWa)
+1314   ጔ   ETHIOPIC SYLLABLE GWEE (gWE)
+1315   ጕ   ETHIOPIC SYLLABLE GWE  (gW)
+1316   ጖  
+1317   ጗  
+1318   ጘ   ETHIOPIC SYLLABLE GGA  (Ge)
+1319   ጙ   ETHIOPIC SYLLABLE GGU  (Gu)
+131A   ጚ   ETHIOPIC SYLLABLE GGI  (Gi)
+131B   ጛ   ETHIOPIC SYLLABLE GGAA (Ga)
+131C   ጜ   ETHIOPIC SYLLABLE GGEE (GE)
+131D   ጝ   ETHIOPIC SYLLABLE GGE  (G)
+131E   ጞ   ETHIOPIC SYLLABLE GGO  (Go)
+131F   ጟ   ETHIOPIC SYLLABLE GGWA (GWa)
+1320   ጠ   ETHIOPIC SYLLABLE THA  (Te)
+1321   ጡ   ETHIOPIC SYLLABLE THU  (Tu)
+1322   ጢ   ETHIOPIC SYLLABLE THI  (Ti)
+1323   ጣ   ETHIOPIC SYLLABLE THAA (Ta)
+1324   ጤ   ETHIOPIC SYLLABLE THEE (TE)
+1325   ጥ   ETHIOPIC SYLLABLE THE  (T)
+1326   ጦ   ETHIOPIC SYLLABLE THO  (To)
+1327   ጧ   ETHIOPIC SYLLABLE THWA (TWa)
+1328   ጨ   ETHIOPIC SYLLABLE CHA  (Ce)
+1329   ጩ   ETHIOPIC SYLLABLE CHU  (Ca)
+132A   ጪ   ETHIOPIC SYLLABLE CHI  (Cu)
+132B   ጫ   ETHIOPIC SYLLABLE CHAA (Ca)
+132C   ጬ   ETHIOPIC SYLLABLE CHEE (CE)
+132D   ጭ   ETHIOPIC SYLLABLE CHE  (C)
+132E   ጮ   ETHIOPIC SYLLABLE CHO  (Co)
+132F   ጯ   ETHIOPIC SYLLABLE CHWA (CWa)
+1330   ጰ   ETHIOPIC SYLLABLE PHA  (Pe)
+1331   ጱ   ETHIOPIC SYLLABLE PHU  (Pu)
+1332   ጲ   ETHIOPIC SYLLABLE PHI  (Pi)
+1333   ጳ   ETHIOPIC SYLLABLE PHAA (Pa)
+1334   ጴ   ETHIOPIC SYLLABLE PHEE (PE)
+1335   ጵ   ETHIOPIC SYLLABLE PHE  (P)
+1336   ጶ   ETHIOPIC SYLLABLE PHO  (Po)
+1337   ጷ   ETHIOPIC SYLLABLE PHWA (PWa)
+1338   ጸ   ETHIOPIC SYLLABLE TSA  (SWe)
+1339   ጹ   ETHIOPIC SYLLABLE TSU  (SWu)
+133A   ጺ   ETHIOPIC SYLLABLE TSI  (SWi)
+133B   ጻ   ETHIOPIC SYLLABLE TSAA (SWa)
+133C   ጼ   ETHIOPIC SYLLABLE TSEE (SWE)
+133D   ጽ   ETHIOPIC SYLLABLE TSE  (SW)
+133E   ጾ   ETHIOPIC SYLLABLE TSO  (SWo)
+133F   ጿ   ETHIOPIC SYLLABLE TSWA (SWa)
+1340   ፀ   ETHIOPIC SYLLABLE TZA  (`Sa)
+1341   ፁ   ETHIOPIC SYLLABLE TZU  (`Su)
+1342   ፂ   ETHIOPIC SYLLABLE TZI  (`Si)
+1343   ፃ   ETHIOPIC SYLLABLE TZAA (`Sa)
+1344   ፄ   ETHIOPIC SYLLABLE TZEE (`SE)
+1345   ፅ   ETHIOPIC SYLLABLE TZE  (`S)
+1346   ፆ   ETHIOPIC SYLLABLE TZO  (`So)
+1347   ፇ  
+1348   ፈ   ETHIOPIC SYLLABLE FA   (fa)
+1349   ፉ   ETHIOPIC SYLLABLE FU   (fu)
+134A   ፊ   ETHIOPIC SYLLABLE FI   (fi)
+134B   ፋ   ETHIOPIC SYLLABLE FAA  (fa)
+134C   ፌ   ETHIOPIC SYLLABLE FEE  (fE)
+134D   ፍ   ETHIOPIC SYLLABLE FE   (f)
+134E   ፎ   ETHIOPIC SYLLABLE FO   (fo)
+134F   ፏ   ETHIOPIC SYLLABLE FWA  (fWa)
+1350   ፐ   ETHIOPIC SYLLABLE PA   (pe)
+1351   ፑ   ETHIOPIC SYLLABLE PU   (pu)
+1352   ፒ   ETHIOPIC SYLLABLE PI   (pi)
+1353   ፓ   ETHIOPIC SYLLABLE PAA  (pa)
+1354   ፔ   ETHIOPIC SYLLABLE PEE  (pE)
+1355   ፕ   ETHIOPIC SYLLABLE PE   (p)
+1356   ፖ   ETHIOPIC SYLLABLE PO   (po)
+1357   ፗ   ETHIOPIC SYLLABLE PWA  (pWa)
+1358   ፘ   ETHIOPIC SYLLABLE MYA  (mYa)
+1359   ፙ   ETHIOPIC SYLLABLE RYA  (rYa)
+135A   ፚ   ETHIOPIC SYLLABLE FYA  (fYa)
+135B   ፛  
+135C   ፜  
+135D   ፝  
+135E   ፞  
+135F   ፟  
+1360   ፠   ETHIOPIC SPACE
+1361   ፡   ETHIOPIC WORDSPACE            (:)
+1362   ።   ETHIOPIC FULL STOP            (::)
+1363   ፣   ETHIOPIC COMMA                (,)
+1364   ፤   ETHIOPIC SEMICOLON            (;)
+1365   ፥   ETHIOPIC COLON                (-:)
+1366   ፦   ETHIOPIC PREFACE COLON        (:-)
+1367   ፧   ETHIOPIC QUESTION MARK        (`?)
+1368   ፨   ETHIOPIC PARAGRAPH SEPARATOR  (:|:)
+1369   ፩   ETHIOPIC DIGIT ONE            (`1)
+136A   ፪   ETHIOPIC DIGIT TWO            (`2)
+136B   ፫   ETHIOPIC DIGIT THREE          (`3)
+136C   ፬   ETHIOPIC DIGIT FOUR           (`4)
+136D   ፭   ETHIOPIC DIGIT FIVE           (`5)
+136E   ፮   ETHIOPIC DIGIT SIX            (`6)
+136F   ፯   ETHIOPIC DIGIT SEVEN          (`7)
+1370   ፰   ETHIOPIC DIGIT EIGHT          (`8)
+1371   ፱   ETHIOPIC DIGIT NINE           (`9)
+1372   ፲   ETHIOPIC NUMBER TEN           (`10)
+1373   ፳   ETHIOPIC NUMBER TWENTY        (`20)
+1374   ፴   ETHIOPIC NUMBER THIRTY        (`30)
+1375   ፵   ETHIOPIC NUMBER FORTY         (`40)
+1376   ፶   ETHIOPIC NUMBER FIFTY         (`50)
+1377   ፷   ETHIOPIC NUMBER SIXTY         (`60)
+1378   ፸   ETHIOPIC NUMBER SEVENTY       (`70)
+1379   ፹   ETHIOPIC NUMBER EIGHTY        (`80)
+137A   ፺   ETHIOPIC NUMBER NINETY        (`90)
+137B   ፻   ETHIOPIC NUMBER HUNDRED       (`100)
+137C   ፼   ETHIOPIC NUMBER TEN THOUSAND  (`10000)
diff --git a/doc/utf/utfdemo b/doc/utf/utfdemo
new file mode 100644
index 0000000..0116042
--- /dev/null
+++ b/doc/utf/utfdemo
@@ -0,0 +1,115 @@
+In addition to the Latin-1 characters, with the new UTF-8 patch,
+the Linux console can now also display the following further
+Unicode/ISO 10646 characters (i.e. the complete PC character set)
+when put into UTF-8 mode by the escape sequence Esc % 8.
+Instructions:
+% unicode_start		# see ../src
+% less -r utfdemo
+% unicode_stop		# idem
+
+2008   ¿  PUNCTUATION SPACE
+263A  ☺¿  WHITE SMILING FACE
+263B  ☻¿  BLACK SMILING FACE
+2665  ♥¿  BLACK HEART SUIT
+2666  ♦¿  BLACK DIAMOND SUIT
+2663  ♣¿  BLACK CLUB SUIT
+2660  ♠¿  BLACK SPADE SUIT
+2022  •¿  BULLET
+25D8  ◘¿  INVERSE BULLET
+25CB  ○¿  WHITE CIRCLE
+25D9  ◙¿  INVERSE WHITE CIRCLE
+2642  ♂¿  MALE SIGN
+2640  ♀¿  FEMALE SIGN
+266A  ♪¿  EIGHTH NOTE
+266C  ♬¿  BEAMED SIXTEENTH NOTES
+263C  ☼¿  WHITE SUN WITH RAYS
+25B6  ▶¿  BLACK RIGHT-POINTING TRIANGLE
+25C0  ◀¿  BLACK LEFT-POINTING TRIANGLE
+2195  ↕¿  UP DOWN ARROW
+203C  ‼¿  DOUBLE EXCLAMATION MARK
+25AC  ▬¿  BLACK RECTANGLE
+21A8  ↨¿  UP DOWN ARROW WITH BASE
+2191  ↑¿  UPWARDS ARROW
+2193  ↓¿  DOWNWARDS ARROW
+2192  →¿  RIGHTWARDS ARROW
+2190  ←¿  LEFTWARDS ARROW
+2319  ⌙¿  TURNED NOT SIGN
+2194  ↔¿  LEFT RIGHT ARROW
+25B2  ▲¿  BLACK UP-POINTING TRIANGLE
+25BC  ▼¿  BLACK DOWN-POINTING TRIANGLE
+2302  ⌂¿  HOUSE
+20A7  ₧¿  PESETA SIGN
+0192  ƒ§¿  LATIN SMALL LETTER F WITH HOOK
+2310  ⌐¿  REVERSED NOT SIGN
+2591  ░¿  LIGHT SHADE
+2592  ▒¿  MEDIUM SHADE
+2593  ▓¿  DARK SHADE
+2502  │¿  BOX DRAWINGS LIGHT VERTICAL
+2524  ┤¿  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2561  ╡¿  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562  ╢¿  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2556  ╖¿  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2555  ╕¿  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2563  ╣¿  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2551  ║¿  BOX DRAWINGS DOUBLE VERTICAL
+2557  ╗¿  BOX DRAWINGS DOUBLE DOWN AND LEFT
+255D  ╝¿  BOX DRAWINGS DOUBLE UP AND LEFT
+255C  ╜¿  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255B  ╛¿  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+2510  ┐¿  BOX DRAWINGS LIGHT DOWN AND LEFT
+2514  └¿  BOX DRAWINGS LIGHT UP AND RIGHT
+2534  ┴¿  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+252C  ¨  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+251C  è  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+2500  ─¿  BOX DRAWINGS LIGHT HORIZONTAL
+253C  Ũ  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+255E  ƨ  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F  Ǩ  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+255A  Ȩ  BOX DRAWINGS DOUBLE UP AND RIGHT
+2554  ɨ  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2569  ʨ  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+2566  ˨  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2560  ̨  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2550  ͨ  BOX DRAWINGS DOUBLE HORIZONTAL
+256C  Ψ  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+2567  Ϩ  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568  Ш  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2564  Ѩ  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565  Ҩ  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2559  Ө  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+2558  Ԩ  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2552  ը  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553  ֨  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+256B  ר  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256A  ب  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+2518  ٨  BOX DRAWINGS LIGHT UP AND LEFT
+250C  ڨ  BOX DRAWINGS LIGHT DOWN AND RIGHT
+2588  ۨ  FULL BLOCK
+2584  ܨ  LOWER HALF BLOCK
+258C  ݨ  LEFT HALF BLOCK
+2590  ި  RIGHT HALF BLOCK
+2580  ߨ  UPPER HALF BLOCK
+03B1  α€¿  GREEK SMALL LETTER ALPHA
+0393  Γ€¿  GREEK CAPITAL LETTER GAMMA
+03C0  π€¿  GREEK SMALL LETTER PI
+03A3  Σ€¿  GREEK CAPITAL LETTER SIGMA
+03C3  σ€¿  GREEK SMALL LETTER SIGMA
+03C4  τ€¿  GREEK SMALL LETTER TAU
+03A6  Φ€¿  GREEK CAPITAL LETTER PHI
+0398  Θ€¿  GREEK CAPITAL LETTER THETA
+2126  Ω¿  OHM SIGN
+03B4  δ¦¿  GREEK SMALL LETTER DELTA
+221E  ∞¿  INFINITY
+2205  ∅¿  EMPTY SET
+2208  ∈¿  ELEMENT OF
+2229  ∩¿  INTERSECTION
+2261  ≡¿  IDENTICAL TO
+2265  ≥¿  GREATER-THAN OR EQUAL TO
+2264  ≤¿  LESS-THAN OR EQUAL TO
+2320  ⌠¿  TOP HALF INTEGRAL
+2321  ⌡¿  BOTTOM HALF INTEGRAL
+2248  ≈¿  ALMOST EQUAL TO
+22C5  ⋅¿  DOT OPERATOR
+221A  √¿  SQUARE ROOT
+207F  ⁿ¿  SUPERSCRIPT LATIN SMALL LETTER N
+220E  ∎¿  END OF PROOF
diff --git a/doc/utf/utflist b/doc/utf/utflist
new file mode 100644
index 0000000..7c0d36e
--- /dev/null
+++ b/doc/utf/utflist
@@ -0,0 +1,651 @@
+# Test for checking the unicode maps corresponding to
+# various fonts. Try
+#	for i in 01 02 03 04 05 06 07 08 09 10
+#	do
+#		unicode_start iso$i.f16 iso$i
+#		less -r utflist
+#	done
+#	unicode_stop
+#
+0020       SPACE
+0021   !   EXCLAMATION MARK
+0022   "   QUOTATION MARK
+0023   #   NUMBER SIGN
+0024   $   DOLLAR SIGN
+0025   %   PERCENT SIGN
+0026   &   AMPERSAND
+0027   '   APOSTROPHE
+0028   (   LEFT PARENTHESIS
+0029   )   RIGHT PARENTHESIS
+002a   *   ASTERISK
+002b   +   PLUS SIGN
+002c   ,   COMMA
+002d   -   HYPHEN-MINUS
+002e   .   FULL STOP
+002f   /   SOLIDUS
+0030   0   DIGIT ZERO
+0031   1   DIGIT ONE
+0032   2   DIGIT TWO
+0033   3   DIGIT THREE
+0034   4   DIGIT FOUR
+0035   5   DIGIT FIVE
+0036   6   DIGIT SIX
+0037   7   DIGIT SEVEN
+0038   8   DIGIT EIGHT
+0039   9   DIGIT NINE
+003a   :   COLON
+003b   ;   SEMICOLON
+003c   <   LESS-THAN SIGN
+003d   =   EQUALS SIGN
+003e   >   GREATER-THAN SIGN
+003f   ?   QUESTION MARK
+0040   @   COMMERCIAL AT
+0041   A   LATIN CAPITAL LETTER A
+0042   B   LATIN CAPITAL LETTER B
+0043   C   LATIN CAPITAL LETTER C
+0044   D   LATIN CAPITAL LETTER D
+0045   E   LATIN CAPITAL LETTER E
+0046   F   LATIN CAPITAL LETTER F
+0047   G   LATIN CAPITAL LETTER G
+0048   H   LATIN CAPITAL LETTER H
+0049   I   LATIN CAPITAL LETTER I
+004a   J   LATIN CAPITAL LETTER J
+004b   K   LATIN CAPITAL LETTER K
+004c   L   LATIN CAPITAL LETTER L
+004d   M   LATIN CAPITAL LETTER M
+004e   N   LATIN CAPITAL LETTER N
+004f   O   LATIN CAPITAL LETTER O
+0050   P   LATIN CAPITAL LETTER P
+0051   Q   LATIN CAPITAL LETTER Q
+0052   R   LATIN CAPITAL LETTER R
+0053   S   LATIN CAPITAL LETTER S
+0054   T   LATIN CAPITAL LETTER T
+0055   U   LATIN CAPITAL LETTER U
+0056   V   LATIN CAPITAL LETTER V
+0057   W   LATIN CAPITAL LETTER W
+0058   X   LATIN CAPITAL LETTER X
+0059   Y   LATIN CAPITAL LETTER Y
+005a   Z   LATIN CAPITAL LETTER Z
+005b   [   LEFT SQUARE BRACKET
+005c   \   REVERSE SOLIDUS
+005d   ]   RIGHT SQUARE BRACKET
+005e   ^   CIRCUMFLEX ACCENT
+005f   _   LOW LINE
+0060   `   GRAVE ACCENT
+0061   a   LATIN SMALL LETTER A
+0062   b   LATIN SMALL LETTER B
+0063   c   LATIN SMALL LETTER C
+0064   d   LATIN SMALL LETTER D
+0065   e   LATIN SMALL LETTER E
+0066   f   LATIN SMALL LETTER F
+0067   g   LATIN SMALL LETTER G
+0068   h   LATIN SMALL LETTER H
+0069   i   LATIN SMALL LETTER I
+006a   j   LATIN SMALL LETTER J
+006b   k   LATIN SMALL LETTER K
+006c   l   LATIN SMALL LETTER L
+006d   m   LATIN SMALL LETTER M
+006e   n   LATIN SMALL LETTER N
+006f   o   LATIN SMALL LETTER O
+0070   p   LATIN SMALL LETTER P
+0071   q   LATIN SMALL LETTER Q
+0072   r   LATIN SMALL LETTER R
+0073   s   LATIN SMALL LETTER S
+0074   t   LATIN SMALL LETTER T
+0075   u   LATIN SMALL LETTER U
+0076   v   LATIN SMALL LETTER V
+0077   w   LATIN SMALL LETTER W
+0078   x   LATIN SMALL LETTER X
+0079   y   LATIN SMALL LETTER Y
+007a   z   LATIN SMALL LETTER Z
+007b   {   LEFT CURLY BRACKET
+007c   |   VERTICAL LINE
+007d   }   RIGHT CURLY BRACKET
+007e   ~   TILDE
+00a0       NO-BREAK SPACE
+00a1   ¡   INVERTED EXCLAMATION MARK
+00a2   ¢   CENT SIGN
+00a3   £   POUND SIGN
+00a4   ¤   CURRENCY SIGN
+00a5   ¥   YEN SIGN
+00a6   ¦   BROKEN BAR
+00a7   §   SECTION SIGN
+00a8   ¨   DIAERESIS
+00a9   ©   COPYRIGHT SIGN
+00aa   ª   FEMININE ORDINAL INDICATOR
+00ab   «   LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00ac   ¬   NOT SIGN
+00ad   ­   SOFT HYPHEN
+00ae   ®   REGISTERED SIGN
+00af   ¯   MACRON
+00b0   °   DEGREE SIGN
+00b1   ±   PLUS-MINUS SIGN
+00b2   ²   SUPERSCRIPT TWO
+00b3   ³   SUPERSCRIPT THREE
+00b4   ´   ACUTE ACCENT
+00b5   µ   MICRO SIGN
+00b6   ¶   PILCROW SIGN
+00b7   ·   MIDDLE DOT
+00b8   ¸   CEDILLA
+00b9   ¹   SUPERSCRIPT ONE
+00ba   º   MASCULINE ORDINAL INDICATOR
+00bb   »   RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00bc   ¼   VULGAR FRACTION ONE QUARTER
+00bd   ½   VULGAR FRACTION ONE HALF
+00be   ¾   VULGAR FRACTION THREE QUARTERS
+00bf   ¿   INVERTED QUESTION MARK
+00c0   À   LATIN CAPITAL LETTER A WITH GRAVE
+00c1   Á   LATIN CAPITAL LETTER A WITH ACUTE
+00c2   Â   LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00c3   Ã   LATIN CAPITAL LETTER A WITH TILDE
+00c4   Ä   LATIN CAPITAL LETTER A WITH DIAERESIS
+00c5   Å   LATIN CAPITAL LETTER A WITH RING ABOVE
+00c6   Æ   LATIN CAPITAL LETTER AE
+00c7   Ç   LATIN CAPITAL LETTER C WITH CEDILLA
+00c8   È   LATIN CAPITAL LETTER E WITH GRAVE
+00c9   É   LATIN CAPITAL LETTER E WITH ACUTE
+00ca   Ê   LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00cb   Ë   LATIN CAPITAL LETTER E WITH DIAERESIS
+00cc   Ì   LATIN CAPITAL LETTER I WITH GRAVE
+00cd   Í   LATIN CAPITAL LETTER I WITH ACUTE
+00ce   Î   LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00cf   Ï   LATIN CAPITAL LETTER I WITH DIAERESIS
+00d0   Ð   LATIN CAPITAL LETTER ETH (Icelandic)
+00d1   Ñ   LATIN CAPITAL LETTER N WITH TILDE
+00d2   Ò   LATIN CAPITAL LETTER O WITH GRAVE
+00d3   Ó   LATIN CAPITAL LETTER O WITH ACUTE
+00d4   Ô   LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00d5   Õ   LATIN CAPITAL LETTER O WITH TILDE
+00d6   Ö   LATIN CAPITAL LETTER O WITH DIAERESIS
+00d7   ×   MULTIPLICATION SIGN
+00d8   Ø   LATIN CAPITAL LETTER O WITH STROKE
+00d9   Ù   LATIN CAPITAL LETTER U WITH GRAVE
+00da   Ú   LATIN CAPITAL LETTER U WITH ACUTE
+00db   Û   LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00dc   Ü   LATIN CAPITAL LETTER U WITH DIAERESIS
+00dd   Ý   LATIN CAPITAL LETTER Y WITH ACUTE
+00de   Þ   LATIN CAPITAL LETTER THORN (Icelandic)
+00df   ß   LATIN SMALL LETTER SHARP S (German)
+00e0   à   LATIN SMALL LETTER A WITH GRAVE
+00e1   á   LATIN SMALL LETTER A WITH ACUTE
+00e2   â   LATIN SMALL LETTER A WITH CIRCUMFLEX
+00e3   ã   LATIN SMALL LETTER A WITH TILDE
+00e4   ä   LATIN SMALL LETTER A WITH DIAERESIS
+00e5   å   LATIN SMALL LETTER A WITH RING ABOVE
+00e6   æ   LATIN SMALL LETTER AE
+00e7   ç   LATIN SMALL LETTER C WITH CEDILLA
+00e8   è   LATIN SMALL LETTER E WITH GRAVE
+00e9   é   LATIN SMALL LETTER E WITH ACUTE
+00ea   ê   LATIN SMALL LETTER E WITH CIRCUMFLEX
+00eb   ë   LATIN SMALL LETTER E WITH DIAERESIS
+00ec   ì   LATIN SMALL LETTER I WITH GRAVE
+00ed   í   LATIN SMALL LETTER I WITH ACUTE
+00ee   î   LATIN SMALL LETTER I WITH CIRCUMFLEX
+00ef   ï   LATIN SMALL LETTER I WITH DIAERESIS
+00f0   ð   LATIN SMALL LETTER ETH (Icelandic)
+00f1   ñ   LATIN SMALL LETTER N WITH TILDE
+00f2   ò   LATIN SMALL LETTER O WITH GRAVE
+00f3   ó   LATIN SMALL LETTER O WITH ACUTE
+00f4   ô   LATIN SMALL LETTER O WITH CIRCUMFLEX
+00f5   õ   LATIN SMALL LETTER O WITH TILDE
+00f6   ö   LATIN SMALL LETTER O WITH DIAERESIS
+00f7   ÷   DIVISION SIGN
+00f8   ø   LATIN SMALL LETTER O WITH STROKE
+00f9   ù   LATIN SMALL LETTER U WITH GRAVE
+00fa   ú   LATIN SMALL LETTER U WITH ACUTE
+00fb   û   LATIN SMALL LETTER U WITH CIRCUMFLEX
+00fc   ü   LATIN SMALL LETTER U WITH DIAERESIS
+00fd   ý   LATIN SMALL LETTER Y WITH ACUTE
+00fe   þ   LATIN SMALL LETTER THORN (Icelandic)
+00ff   ÿ   LATIN SMALL LETTER Y WITH DIAERESIS
+0100   Ā   LATIN CAPITAL LETTER A WITH MACRON
+0101   ā   LATIN SMALL LETTER A WITH MACRON
+0102   Ă   LATIN CAPITAL LETTER A WITH BREVE
+0103   ă   LATIN SMALL LETTER A WITH BREVE
+0104   Ą   LATIN CAPITAL LETTER A WITH OGONEK
+0105   ą   LATIN SMALL LETTER A WITH OGONEK
+0106   Ć   LATIN CAPITAL LETTER C WITH ACUTE
+0107   ć   LATIN SMALL LETTER C WITH ACUTE
+0108   Ĉ   LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109   ĉ   LATIN SMALL LETTER C WITH CIRCUMFLEX
+010a   Ċ   LATIN CAPITAL LETTER C WITH DOT ABOVE
+010b   ċ   LATIN SMALL LETTER C WITH DOT ABOVE
+010c   Č   LATIN CAPITAL LETTER C WITH CARON
+010d   č   LATIN SMALL LETTER C WITH CARON
+010e   Ď   LATIN CAPITAL LETTER D WITH CARON
+010f   ď   LATIN SMALL LETTER D WITH CARON
+0110   Đ   LATIN CAPITAL LETTER D WITH STROKE
+0111   đ   LATIN SMALL LETTER D WITH STROKE
+0112   Ē   LATIN CAPITAL LETTER E WITH MACRON
+0113   ē   LATIN SMALL LETTER E WITH MACRON
+0114   Ĕ   LATIN CAPITAL LETTER E WITH BREVE
+0115   ĕ   LATIN SMALL LETTER E WITH BREVE
+0116   Ė   LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117   ė   LATIN SMALL LETTER E WITH DOT ABOVE
+0118   Ę   LATIN CAPITAL LETTER E WITH OGONEK
+0119   ę   LATIN SMALL LETTER E WITH OGONEK
+011a   Ě   LATIN CAPITAL LETTER E WITH CARON
+011b   ě   LATIN SMALL LETTER E WITH CARON
+011c   Ĝ   LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011d   ĝ   LATIN SMALL LETTER G WITH CIRCUMFLEX
+011e   Ğ   LATIN CAPITAL LETTER G WITH BREVE
+011f   ğ   LATIN SMALL LETTER G WITH BREVE
+0120   Ġ   LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121   ġ   LATIN SMALL LETTER G WITH DOT ABOVE
+0122   Ģ   LATIN CAPITAL LETTER G WITH CEDILLA
+0123   ģ   LATIN SMALL LETTER G WITH CEDILLA
+0124   Ĥ   LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125   ĥ   LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126   Ħ   LATIN CAPITAL LETTER H WITH STROKE
+0127   ħ   LATIN SMALL LETTER H WITH STROKE
+0128   Ĩ   LATIN CAPITAL LETTER I WITH TILDE
+0129   ĩ   LATIN SMALL LETTER I WITH TILDE
+012a   Ī   LATIN CAPITAL LETTER I WITH MACRON
+012b   ī   LATIN SMALL LETTER I WITH MACRON
+012c   Ĭ   LATIN CAPITAL LETTER I WITH BREVE
+012d   ĭ   LATIN SMALL LETTER I WITH BREVE
+012e   Į   LATIN CAPITAL LETTER I WITH OGONEK
+012f   į   LATIN SMALL LETTER I WITH OGONEK
+0130   İ   LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131   ı   LATIN SMALL LETTER I DOTLESS
+0132   IJ   LATIN CAPITAL LIGATURE IJ
+0133   ij   LATIN SMALL LIGATURE IJ
+0134   Ĵ   LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135   ĵ   LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136   Ķ   LATIN CAPITAL LETTER K WITH CEDILLA
+0137   ķ   LATIN SMALL LETTER K WITH CEDILLA
+0138   ĸ   LATIN SMALL LETTER KRA (Greenlandic)
+0139   Ĺ   LATIN CAPITAL LETTER L WITH ACUTE
+013a   ĺ   LATIN SMALL LETTER L WITH ACUTE
+013b   Ļ   LATIN CAPITAL LETTER L WITH CEDILLA
+013c   ļ   LATIN SMALL LETTER L WITH CEDILLA
+013d   Ľ   LATIN CAPITAL LETTER L WITH CARON
+013e   ľ   LATIN SMALL LETTER L WITH CARON
+013f   Ŀ   LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140   ŀ   LATIN SMALL LETTER L WITH MIDDLE DOT
+0141   Ł   LATIN CAPITAL LETTER L WITH STROKE
+0142   ł   LATIN SMALL LETTER L WITH STROKE
+0143   Ń   LATIN CAPITAL LETTER N WITH ACUTE
+0144   ń   LATIN SMALL LETTER N WITH ACUTE
+0145   Ņ   LATIN CAPITAL LETTER N WITH CEDILLA
+0146   ņ   LATIN SMALL LETTER N WITH CEDILLA
+0147   Ň   LATIN CAPITAL LETTER N WITH CARON
+0148   ň   LATIN SMALL LETTER N WITH CARON
+0149   ʼn   LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014a   Ŋ   LATIN CAPITAL LETTER ENG (Lappish)
+014b   ŋ   LATIN SMALL LETTER ENG (Lappish)
+014c   Ō   LATIN CAPITAL LETTER O WITH MACRON
+014d   ō   LATIN SMALL LETTER O WITH MACRON
+014e   Ŏ   LATIN CAPITAL LETTER O WITH BREVE
+014f   ŏ   LATIN SMALL LETTER O WITH BREVE
+0150   Ő   LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151   ő   LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152   Œ   LATIN CAPITAL LIGATURE OE
+0153   œ   LATIN SMALL LIGATURE OE
+0154   Ŕ   LATIN CAPITAL LETTER R WITH ACUTE
+0155   ŕ   LATIN SMALL LETTER R WITH ACUTE
+0156   Ŗ   LATIN CAPITAL LETTER R WITH CEDILLA
+0157   ŗ   LATIN SMALL LETTER R WITH CEDILLA
+0158   Ř   LATIN CAPITAL LETTER R WITH CARON
+0159   ř   LATIN SMALL LETTER R WITH CARON
+015a   Ś   LATIN CAPITAL LETTER S WITH ACUTE
+015b   ś   LATIN SMALL LETTER S WITH ACUTE
+015c   Ŝ   LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015d   ŝ   LATIN SMALL LETTER S WITH CIRCUMFLEX
+015e   Ş   LATIN CAPITAL LETTER S WITH CEDILLA
+015f   ş   LATIN SMALL LETTER S WITH CEDILLA
+0160   Š   LATIN CAPITAL LETTER S WITH CARON
+0161   š   LATIN SMALL LETTER S WITH CARON
+0162   Ţ   LATIN CAPITAL LETTER T WITH CEDILLA
+0163   ţ   LATIN SMALL LETTER T WITH CEDILLA
+0164   Ť   LATIN CAPITAL LETTER T WITH CARON
+0165   ť   LATIN SMALL LETTER T WITH CARON
+0166   Ŧ   LATIN CAPITAL LETTER T WITH STROKE
+0167   ŧ   LATIN SMALL LETTER T WITH STROKE
+0168   Ũ   LATIN CAPITAL LETTER U WITH TILDE
+0169   ũ   LATIN SMALL LETTER U WITH TILDE
+016a   Ū   LATIN CAPITAL LETTER U WITH MACRON
+016b   ū   LATIN SMALL LETTER U WITH MACRON
+016c   Ŭ   LATIN CAPITAL LETTER U WITH BREVE
+016d   ŭ   LATIN SMALL LETTER U WITH BREVE
+016e   Ů   LATIN CAPITAL LETTER U WITH RING ABOVE
+016f   ů   LATIN SMALL LETTER U WITH RING ABOVE
+0170   Ű   LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171   ű   LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172   Ų   LATIN CAPITAL LETTER U WITH OGONEK
+0173   ų   LATIN SMALL LETTER U WITH OGONEK
+0174   Ŵ   LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175   ŵ   LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176   Ŷ   LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177   ŷ   LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178   Ÿ   LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179   Ź   LATIN CAPITAL LETTER Z WITH ACUTE
+017a   ź   LATIN SMALL LETTER Z WITH ACUTE
+017b   Ż   LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017c   ż   LATIN SMALL LETTER Z WITH DOT ABOVE
+017d   Ž   LATIN CAPITAL LETTER Z WITH CARON
+017e   ž   LATIN SMALL LETTER Z WITH CARON
+01a0   Ơ   LATIN CAPITAL LETTER O WITH HORN
+01a1   ơ   LATIN SMALL LETTER O WITH HORN
+01a2   Ƣ   LATIN CAPITAL LETTER OI
+01a3   ƣ   LATIN SMALL LETTER OI
+01a6   Ʀ   LATIN LETTER YR
+01af   Ư   LATIN CAPITAL LETTER U WITH HORN
+01b0   ư   LATIN SMALL LETTER U WITH HORN
+01b5   Ƶ   LATIN CAPITAL LETTER Z WITH STROKE
+01b6   ƶ   LATIN SMALL LETTER Z WITH STROKE
+01b7   Ʒ   LATIN CAPITAL LETTER EZH
+01cd   Ǎ   LATIN CAPITAL LETTER A WITH CARON
+01ce   ǎ   LATIN SMALL LETTER A WITH CARON
+01cf   Ǐ   LATIN CAPITAL LETTER I WITH CARON
+01d0   ǐ   LATIN SMALL LETTER I WITH CARON
+01d1   Ǒ   LATIN CAPITAL LETTER O WITH CARON
+01d2   ǒ   LATIN SMALL LETTER O WITH CARON
+01d3   Ǔ   LATIN CAPITAL LETTER U WITH CARON
+01d4   ǔ   LATIN SMALL LETTER U WITH CARON
+01d5   Ǖ   LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01d6   ǖ   LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01d7   Ǘ   LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01d8   ǘ   LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01d9   Ǚ   LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01da   ǚ   LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01db   Ǜ   LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01dc   ǜ   LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01de   Ǟ   LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01df   ǟ   LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01e0   Ǡ   LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01e1   ǡ   LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01e2   Ǣ   LATIN CAPITAL LETTER AE WITH MACRON
+01e3   ǣ   LATIN SMALL LETTER AE WITH MACRON
+01e4   Ǥ   LATIN CAPITAL LETTER G WITH STROKE
+01e5   ǥ   LATIN SMALL LETTER G WITH STROKE
+01e6   Ǧ   LATIN CAPITAL LETTER G WITH CARON
+01e7   ǧ   LATIN SMALL LETTER G WITH CARON
+01e8   Ǩ   LATIN CAPITAL LETTER K WITH CARON
+01e9   ǩ   LATIN SMALL LETTER K WITH CARON
+01ea   Ǫ   LATIN CAPITAL LETTER O WITH OGONEK
+01eb   ǫ   LATIN SMALL LETTER O WITH OGONEK
+01ec   Ǭ   LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ed   ǭ   LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01ee   Ǯ   LATIN CAPITAL LETTER EZH WITH CARON
+01ef   ǯ   LATIN SMALL LETTER EZH WITH CARON
+01f0   ǰ   LATIN SMALL LETTER J WITH CARON
+01f4   Ǵ   LATIN CAPITAL LETTER G WITH ACUTE
+01f5   ǵ   LATIN SMALL LETTER G WITH ACUTE
+01fa   Ǻ   LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01fb   ǻ   LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01fc   Ǽ   LATIN CAPITAL LETTER AE WITH ACUTE
+01fd   ǽ   LATIN SMALL LETTER AE WITH ACUTE
+01fe   Ǿ   LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01ff   ǿ   LATIN SMALL LETTER O WITH STROKE AND ACUTE
+02bf   ʿ   MODIFIER LETTER LEFT HALF RING
+02c7   ˇ   CARON
+02d8   ˘   BREVE
+02d9   ˙   DOT ABOVE
+02da   ˚   RING ABOVE
+02db   ˛   OGONEK
+02dd   ˝   DOUBLE ACUTE ACCENT
+0386   Ά   GREEK CAPITAL LETTER ALPHA WITH ACUTE
+0388   Έ   GREEK CAPITAL LETTER EPSILON WITH ACUTE
+0389   Ή   GREEK CAPITAL LETTER ETA WITH ACUTE
+038a   Ί   GREEK CAPITAL LETTER IOTA WITH ACUTE
+038c   Ό   GREEK CAPITAL LETTER OMICRON WITH ACUTE
+038e   Ύ   GREEK CAPITAL LETTER UPSILON WITH ACUTE
+038f   Ώ   GREEK CAPITAL LETTER OMEGA WITH ACUTE
+0390   ΐ   GREEK SMALL LETTER IOTA WITH ACUTE AND DIAERESIS
+0391   Α   GREEK CAPITAL LETTER ALPHA
+0392   Β   GREEK CAPITAL LETTER BETA
+0393   Γ   GREEK CAPITAL LETTER GAMMA
+0394   Δ   GREEK CAPITAL LETTER DELTA
+0395   Ε   GREEK CAPITAL LETTER EPSILON
+0396   Ζ   GREEK CAPITAL LETTER ZETA
+0397   Η   GREEK CAPITAL LETTER ETA
+0398   Θ   GREEK CAPITAL LETTER THETA
+0399   Ι   GREEK CAPITAL LETTER IOTA
+039a   Κ   GREEK CAPITAL LETTER KAPPA
+039b   Λ   GREEK CAPITAL LETTER LAMDA
+039c   Μ   GREEK CAPITAL LETTER MU
+039d   Ν   GREEK CAPITAL LETTER NU
+039e   Ξ   GREEK CAPITAL LETTER XI
+039f   Ο   GREEK CAPITAL LETTER OMICRON
+03a0   Π   GREEK CAPITAL LETTER PI
+03a1   Ρ   GREEK CAPITAL LETTER RHO
+03a3   Σ   GREEK CAPITAL LETTER SIGMA
+03a4   Τ   GREEK CAPITAL LETTER TAU
+03a5   Υ   GREEK CAPITAL LETTER UPSILON
+03a6   Φ   GREEK CAPITAL LETTER PHI
+03a7   Χ   GREEK CAPITAL LETTER CHI
+03a8   Ψ   GREEK CAPITAL LETTER PSI
+03a9   Ω   GREEK CAPITAL LETTER OMEGA
+03aa   Ϊ   GREEK CAPITAL LETTER IOTA WITH DIAERESIS
+03ab   Ϋ   GREEK CAPITAL LETTER UPSILON WITH DIAERESIS
+03ac   ά   GREEK SMALL LETTER ALPHA WITH ACUTE
+03ad   έ   GREEK SMALL LETTER EPSILON WITH ACUTE
+03ae   ή   GREEK SMALL LETTER ETA WITH ACUTE
+03af   ί   GREEK SMALL LETTER IOTA WITH ACUTE
+03b0   ΰ   GREEK SMALL LETTER UPSILON WITH ACUTE AND DIAERESIS
+03b1   α   GREEK SMALL LETTER ALPHA
+03b2   β   GREEK SMALL LETTER BETA
+03b3   γ   GREEK SMALL LETTER GAMMA
+03b4   δ   GREEK SMALL LETTER DELTA
+03b5   ε   GREEK SMALL LETTER EPSILON
+03b6   ζ   GREEK SMALL LETTER ZETA
+03b7   η   GREEK SMALL LETTER ETA
+03b8   θ   GREEK SMALL LETTER THETA
+03b9   ι   GREEK SMALL LETTER IOTA
+03ba   κ   GREEK SMALL LETTER KAPPA
+03bb   λ   GREEK SMALL LETTER LAMDA
+03bc   μ   GREEK SMALL LETTER MU
+03bd   ν   GREEK SMALL LETTER NU
+03be   ξ   GREEK SMALL LETTER XI
+03bf   ο   GREEK SMALL LETTER OMICRON
+03c0   π   GREEK SMALL LETTER PI
+03c1   ρ   GREEK SMALL LETTER RHO
+03c2   ς   GREEK SMALL LETTER FINAL SIGMA
+03c3   σ   GREEK SMALL LETTER SIGMA
+03c4   τ   GREEK SMALL LETTER TAU
+03c5   υ   GREEK SMALL LETTER UPSILON
+03c6   φ   GREEK SMALL LETTER PHI
+03c7   χ   GREEK SMALL LETTER CHI
+03c8   ψ   GREEK SMALL LETTER PSI
+03c9   ω   GREEK SMALL LETTER OMEGA
+03ca   ϊ   GREEK SMALL LETTER IOTA WITH DIAERESIS
+03cb   ϋ   GREEK SMALL LETTER UPSILON WITH DIAERESIS
+03cc   ό   GREEK SMALL LETTER OMICRON WITH ACUTE
+03cd   ύ   GREEK SMALL LETTER UPSILON WITH ACUTE
+03ce   ώ   GREEK SMALL LETTER OMEGA WITH ACUTE
+03d8   Ϙ   GREEK NUMERAL SIGN
+03d9   ϙ   GREEK LOWER NUMERAL SIGN
+03da   Ϛ   GREEK CAPITAL LETTER STIGMA
+03db   ϛ   GREEK SMALL LETTER STIGMA
+03dc   Ϝ   GREEK CAPITAL LETTER DIGAMMA
+03dd   ϝ   GREEK SMALL LETTER DIGAMMA
+03de   Ϟ   GREEK CAPITAL LETTER KOPPA
+03df   ϟ   GREEK SMALL LETTER KOPPA
+03e0   Ϡ   GREEK CAPITAL LETTER SAMPI
+03e1   ϡ   GREEK SMALL LETTER SAMPI
+03f4   ϴ   ACUTE ACCENT AND DIAERESIS (Tonos and Dialytika)
+03f5   ϵ   GREEK IOTA BELOW
+0401   Ё   CYRILLIC CAPITAL LETTER IO
+0402   Ђ   CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+0403   Ѓ   CYRILLIC CAPITAL LETTER GJE (Macedonian)
+0404   Є   CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405   Ѕ   CYRILLIC CAPITAL LETTER DZE (Macedonian)
+0406   І   CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407   Ї   CYRILLIC CAPITAL LETTER YI (Ukrainian)
+0408   Ј   CYRILLIC CAPITAL LETTER JE
+0409   Љ   CYRILLIC CAPITAL LETTER LJE
+040a   Њ   CYRILLIC CAPITAL LETTER NJE
+040b   Ћ   CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+040c   Ќ   CYRILLIC CAPITAL LETTER KJE (Macedonian)
+040e   Ў   CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+040f   Џ   CYRILLIC CAPITAL LETTER DZHE
+0410   А   CYRILLIC CAPITAL LETTER A
+0411   Б   CYRILLIC CAPITAL LETTER BE
+0412   В   CYRILLIC CAPITAL LETTER VE
+0413   Г   CYRILLIC CAPITAL LETTER GHE
+0414   Д   CYRILLIC CAPITAL LETTER DE
+0415   Е   CYRILLIC CAPITAL LETTER IE
+0416   Ж   CYRILLIC CAPITAL LETTER ZHE
+0417   З   CYRILLIC CAPITAL LETTER ZE
+0418   И   CYRILLIC CAPITAL LETTER I
+0419   Й   CYRILLIC CAPITAL LETTER SHORT I
+041a   К   CYRILLIC CAPITAL LETTER KA
+041b   Л   CYRILLIC CAPITAL LETTER EL
+041c   М   CYRILLIC CAPITAL LETTER EM
+041d   Н   CYRILLIC CAPITAL LETTER EN
+041e   О   CYRILLIC CAPITAL LETTER O
+041f   П   CYRILLIC CAPITAL LETTER PE
+0420   Р   CYRILLIC CAPITAL LETTER ER
+0421   С   CYRILLIC CAPITAL LETTER ES
+0422   Т   CYRILLIC CAPITAL LETTER TE
+0423   У   CYRILLIC CAPITAL LETTER U
+0424   Ф   CYRILLIC CAPITAL LETTER EF
+0425   Х   CYRILLIC CAPITAL LETTER HA
+0426   Ц   CYRILLIC CAPITAL LETTER TSE
+0427   Ч   CYRILLIC CAPITAL LETTER CHE
+0428   Ш   CYRILLIC CAPITAL LETTER SHA
+0429   Щ   CYRILLIC CAPITAL LETTER SHCHA
+042a   Ъ   CYRILLIC CAPITAL LETTER HARD SIGN
+042b   Ы   CYRILLIC CAPITAL LETTER YERI
+042c   Ь   CYRILLIC CAPITAL LETTER SOFT SIGN
+042d   Э   CYRILLIC CAPITAL LETTER E
+042e   Ю   CYRILLIC CAPITAL LETTER YU
+042f   Я   CYRILLIC CAPITAL LETTER YA
+0430   а   CYRILLIC SMALL LETTER A
+0431   б   CYRILLIC SMALL LETTER BE
+0432   в   CYRILLIC SMALL LETTER VE
+0433   г   CYRILLIC SMALL LETTER GHE
+0434   д   CYRILLIC SMALL LETTER DE
+0435   е   CYRILLIC SMALL LETTER IE
+0436   ж   CYRILLIC SMALL LETTER ZHE
+0437   з   CYRILLIC SMALL LETTER ZE
+0438   и   CYRILLIC SMALL LETTER I
+0439   й   CYRILLIC SMALL LETTER SHORT I
+043a   к   CYRILLIC SMALL LETTER KA
+043b   л   CYRILLIC SMALL LETTER EL
+043c   м   CYRILLIC SMALL LETTER EM
+043d   н   CYRILLIC SMALL LETTER EN
+043e   о   CYRILLIC SMALL LETTER O
+043f   п   CYRILLIC SMALL LETTER PE
+0440   р   CYRILLIC SMALL LETTER ER
+0441   с   CYRILLIC SMALL LETTER ES
+0442   т   CYRILLIC SMALL LETTER TE
+0443   у   CYRILLIC SMALL LETTER U
+0444   ф   CYRILLIC SMALL LETTER EF
+0445   х   CYRILLIC SMALL LETTER HA
+0446   ц   CYRILLIC SMALL LETTER TSE
+0447   ч   CYRILLIC SMALL LETTER CHE
+0448   ш   CYRILLIC SMALL LETTER SHA
+0449   щ   CYRILLIC SMALL LETTER SHCHA
+044a   ъ   CYRILLIC SMALL LETTER HARD SIGN
+044b   ы   CYRILLIC SMALL LETTER YERI
+044c   ь   CYRILLIC SMALL LETTER SOFT SIGN
+044d   э   CYRILLIC SMALL LETTER E
+044e   ю   CYRILLIC SMALL LETTER YU
+044f   я   CYRILLIC SMALL LETTER YA
+0451   ё   CYRILLIC SMALL LETTER IO
+0452   ђ   CYRILLIC SMALL LETTER DJE (Serbocroatian)
+0453   ѓ   CYRILLIC SMALL LETTER GJE (Macedonian)
+0454   є   CYRILLIC SMALL LETTER UKRAINIAN IE
+0455   ѕ   CYRILLIC SMALL LETTER DZE (Macedonian)
+0456   і   CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457   ї   CYRILLIC SMALL LETTER YI (Ukrainian)
+0458   ј   CYRILLIC SMALL LETTER JE
+0459   љ   CYRILLIC SMALL LETTER LJE
+045a   њ   CYRILLIC SMALL LETTER NJE
+045b   ћ   CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+045c   ќ   CYRILLIC SMALL LETTER KJE (Macedonian)
+045e   ў   CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+045f   џ   CYRILLIC SMALL LETTER DZHE
+0462   Ѣ   CYRILLIC CAPITAL LETTER YAT
+0463   ѣ   CYRILLIC SMALL LETTER YAT
+046a   Ѫ   CYRILLIC CAPITAL LETTER BIG YUS
+046b   ѫ   CYRILLIC SMALL LETTER BIG YUS
+0472   Ѳ   CYRILLIC CAPITAL LETTER FITA
+0473   ѳ   CYRILLIC SMALL LETTER FITA
+0474   Ѵ   CYRILLIC CAPITAL LETTER IZHITSA
+0475   ѵ   CYRILLIC SMALL LETTER IZHITSA
+0480   Ҁ   CYRILLIC CAPITAL LETTER KOPPA
+0481   ҁ   CYRILLIC SMALL LETTER KOPPA
+0490   Ґ   CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491   ґ   CYRILLIC SMALL LETTER GHE WITH UPTURN
+05d0   א   HEBREW LETTER ALEF
+05d1   ב   HEBREW LETTER BET
+05d2   ג   HEBREW LETTER GIMEL
+05d3   ד   HEBREW LETTER DALET
+05d4   ה   HEBREW LETTER HE
+05d5   ו   HEBREW LETTER VAV
+05d6   ז   HEBREW LETTER ZAYIN
+05d7   ח   HEBREW LETTER HET
+05d8   ט   HEBREW LETTER TET
+05d9   י   HEBREW LETTER YOD
+05da   ך   HEBREW LETTER FINAL KAF
+05db   כ   HEBREW LETTER KAF
+05dc   ל   HEBREW LETTER LAMED
+05dd   ם   HEBREW LETTER FINAL MEM
+05de   מ   HEBREW LETTER MEM
+05df   ן   HEBREW LETTER FINAL NUN
+05e0   נ   HEBREW LETTER NUN
+05e1   ס   HEBREW LETTER SAMEKH
+05e2   ע   HEBREW LETTER AYIN
+05e3   ף   HEBREW LETTER FINAL PE
+05e4   פ   HEBREW LETTER PE
+05e5   ץ   HEBREW LETTER FINAL TSADE
+05e6   צ   HEBREW LETTER TSADE
+05e7   ק   HEBREW LETTER QOF
+05e8   ר   HEBREW LETTER RESH
+05e9   ש   HEBREW LETTER SHIN
+05ea   ת   HEBREW LETTER TAV
+060c   ،   ARABIC COMMA
+061b   ؛   ARABIC SEMICOLON
+061f   ؟   ARABIC QUESTION MARK
+0621   ء   ARABIC LETTER HAMZA
+0622   آ   ARABIC LETTER ALEF WITH MADDA ABOVE
+0623   أ   ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624   ؤ   ARABIC LETTER WAW WITH HAMZA ABOVE
+0625   إ   ARABIC LETTER ALEF WITH HAMZA BELOW
+0626   ئ   ARABIC LETTER YEH WITH HAMZA ABOVE
+0627   ا   ARABIC LETTER ALEF
+0628   ب   ARABIC LETTER BEH
+0629   ة   ARABIC LETTER TEH MARBUTA
+062a   ت   ARABIC LETTER TEH
+062b   ث   ARABIC LETTER THEH
+062c   ج   ARABIC LETTER JEEM
+062d   ح   ARABIC LETTER HAH
+062e   خ   ARABIC LETTER KHAH
+062f   د   ARABIC LETTER DAL
+0630   ذ   ARABIC LETTER THAL
+0631   ر   ARABIC LETTER REH
+0632   ز   ARABIC LETTER ZAIN
+0633   س   ARABIC LETTER SEEN
+0634   ش   ARABIC LETTER SHEEN
+0635   ص   ARABIC LETTER SAD
+0636   ض   ARABIC LETTER DAD
+0637   ط   ARABIC LETTER TAH
+0638   ظ   ARABIC LETTER ZAH
+0639   ع   ARABIC LETTER AIN
+063a   غ   ARABIC LETTER GHAIN
+0640   ـ   ARABIC TATWEEL
+0641   ف   ARABIC LETTER FEH
+0642   ق   ARABIC LETTER QAF
+0643   ك   ARABIC LETTER KAF
+0644   ل   ARABIC LETTER LAM
+0645   م   ARABIC LETTER MEEM
+0646   ن   ARABIC LETTER NOON
+0647   ه   ARABIC LETTER HEH
+0648   و   ARABIC LETTER WAW
+0649   ى   ARABIC LETTER ALEF MAKSURA
+064a   ي   ARABIC LETTER YEH
+064b   ً   ARABIC FATHATAN
+064c   ٌ   ARABIC DAMMATAN
+064d   ٍ   ARABIC KASRATAN
+064e   َ   ARABIC FATHA
+064f   ُ   ARABIC DAMMA
+0650   ِ   ARABIC KASRA
+0651   ّ   ARABIC SHADDA
+0652   ْ   ARABIC SUKUN
+0670   ٰ   SUPERSCRIPT ARABIC LETTER ALEF
+067e   پ   ARABIC LETTER PEH
+06a4   ڤ   ARABIC LETTER VEH
+06af   گ   ARABIC LETTER GAF
diff --git "a/doc/utf/\342\231\252\342\231\254" "b/doc/utf/\342\231\252\342\231\254"
new file mode 100644
index 0000000..18ff3d5
--- /dev/null
+++ "b/doc/utf/\342\231\252\342\231\254"
@@ -0,0 +1,12 @@
+After
+% kbd_mode -u
+% echo -e '\033%8'
+% loadkeys
+control shift keycode 59 = U+266a
+control shift keycode 60 = U+266C
+%
+I typed this file and called it by the two-symbol name
+ctrl-shift-F1 ctrl-shift-F2.
+
+In order to tell `ls' not to be afraid, give it the `-N' flag.
+Give `less' the `-r' flag.
diff --git a/keymaps/README b/keymaps/README
new file mode 100644
index 0000000..c19e190
--- /dev/null
+++ b/keymaps/README
@@ -0,0 +1,36 @@
+The maps found here are as contributed. Use at your own risk.
+(But please tell me if something is seriously wrong.)
+Mail corrections, improvements and new maps to aeb@cwi.nl.
+
+If the below talks about /usr/lib/kbd, that may well be
+something like /usr/share/kbd in other distributions.
+
+The old setup had a directory /usr/lib/kbd/keytables containing
+all keymaps. But this is getting messy - there are too many.
+The present setup has a directory /usr/lib/kbd/keymaps with
+subdirectories
+	amiga, atari, i386, mac, sun
+indicating the desired architecture.
+(I believe alpha uses the i386 keyboard.)
+The 386 directory is split further into subdirectories
+	qwerty, qwertz, azerty, fgGIod, dvorak
+indicating the layout of the letters.
+(Very roughly speaking, qwerty is English, qwertz is German,
+azerty is French, fgGIod is Turkish, dvorak is international.)
+Loadkeys will first search /usr/lib/kbd/keymaps, and then its
+subdirectories, so the default keymap should probably live in
+/usr/lib/kbd/keymaps.
+
+Many keymaps now use the include directive, both for clarity
+and to save space.  One can avoid includes by doing
+"loadkeys map-with-includes; dumpkeys > map-without-includes".
+This may be desirable for the default keymap loaded at boot time.
+
+I hope that this setup will make it possible for distribution
+developers to make the keymap-choosing phase of a new installation
+somewhat more user-friendly.
+Note that one of the possible user choices should be *not* to
+load any keymap, and get the compiled-in kernel default.
+Note that only files *.map are candidate keymaps.
+
+Andries
diff --git a/keymaps/amiga/amiga-de.map b/keymaps/amiga/amiga-de.map
new file mode 100644
index 0000000..ecfe4be
--- /dev/null
+++ b/keymaps/amiga/amiga-de.map
@@ -0,0 +1,304 @@
+
+# German keymap for Linux/m68k for Amiga 2000/3000/4000 keyboards V1.0
+# Put together by Frank Neumann on Dec 13th, 1994
+# In case of questions, bug reports or suggestions, send E-Mail to:
+# Frank.Neumann@informatik.uni-oldenburg.de
+#
+# Important modifications compared to the U.S. keymap:
+# The [, ], { and } are accessible from the keypad, as well as
+# the digits and /, *, -, +, . and Enter (same function as Return)
+
+# The Backspace key now produces a backspace character instead of Delete.
+
+# Shift+KP[ and Shift+KP] do not produce the kernel messages anymore,
+# as I needed those keys for their natural mappings. The functions
+# Show_Memory and Show_State have been moved to Shift-Help and Control-Help,
+# respectively (although I have serious problems with these sometimes - 
+# Show_State often doesn't output anything, and sometimes triggering
+# Show_Memory several times in rapid succession causes the CAPS state of
+# all (?) keys to be inverted. This can be very nasty if you are not
+# logged in and the getty also switches to upper-case mode..beware.
+# While logged in, I found that using Shift+KP[ sometimes resets the CAPS
+# state to its normal behaviour.
+
+# To see what nice things you can do now (including deadkeys and Alt-keys),
+# start the AmigaDOS program 'Keyshow' (should be under SYS:Tools). Blue
+# keys are deadkeys, characters written in italics are...well, what the hell
+# are they for ? Documentation on that program is quite poor.. Anyway, I
+# tried to copy the behaviour from what I could find out with KeyShow as 
+# close as possible.
+
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   0 = grave            asciitilde
+	control keycode   0 = nul
+	alt     keycode   0 = Meta_grave
+keycode   1 = one              exclam
+	alt     keycode   1 = onesuperior
+keycode   2 = two              quotedbl
+	control keycode   2 = two
+	alt     keycode   2 = at
+keycode   3 = three            section
+	alt     keycode   3 = threesuperior
+keycode   4 = four             dollar           dollar
+	alt     keycode   4 = degree
+keycode   5 = five             percent
+	alt     keycode   5 = onequarter
+keycode   6 = six              ampersand
+	control keycode   6 = Control_asciicircum
+	alt     keycode   6 = onehalf
+keycode   7 = seven            slash
+	alt     keycode   7 = threequarters
+keycode   8 = eight            parenleft
+	alt     keycode   8 = periodcentered
+keycode   9 = nine             parenright
+	alt     keycode   9 = guillemotleft
+keycode  10 = zero             equal
+	alt     keycode  10 = guillemotright
+keycode  11 = ssharp            question
+	control keycode  11 = Control_underscore
+	alt     keycode  11 = Meta_minus
+keycode  12 = dead_acute        dead_grave
+	alt     keycode  12 = Meta_equal
+keycode  13 = backslash        bar
+	control keycode  13 = Control_backslash
+	alt     keycode  13 = Meta_backslash
+keycode  14 =
+keycode  15 = zero
+keycode  16 = +q                +Q
+	control      keycode  16 = Control_q
+	alt          keycode  16 = aring
+	shift alt    keycode  16 = Aring
+keycode  17 = +w                +W
+	control keycode  17 = Control_w
+	alt     keycode  17 = degree
+keycode  18 = +e                +E
+	control keycode  18 = Control_e
+	alt     keycode  18 = copyright
+keycode  19 = +r                +R
+	control keycode  19 = Control_r
+	alt     keycode  19 = registered
+keycode  20 = +t                +T
+	control       keycode  20 = Control_t
+	alt           keycode  20 = THORN
+	shift alt     keycode  20 = thorn
+keycode  21 = +z                +Z
+	control       keycode  21 = Control_z
+	alt           keycode  21 = currency
+	shift alt     keycode  21 = yen
+keycode  22 = +u                +U
+	control keycode  22 = Control_u
+	alt     keycode  22 = mu
+keycode  23 = +i                +I
+	control       keycode  23 = Tab
+	alt           keycode  23 = exclamdown
+	shift alt     keycode  23 = brokenbar
+keycode  24 = +o                +O
+	control       keycode  24 = Control_o
+	alt           keycode  24 = Ooblique
+	shift alt     keycode  24 = oslash
+keycode  25 = +p                +P
+	control keycode  25 = Control_p
+	alt     keycode  25 = paragraph
+keycode  26 = udiaeresis       Udiaeresis
+	control       keycode  26 = Escape
+	alt           keycode  26 = bracketleft
+	shift alt     keycode  26 = braceleft
+keycode  27 = plus              asterisk
+	control       keycode  27 = Control_bracketright
+	alt           keycode  27 = bracketright
+	shift alt     keycode  27 = braceright
+keycode  28 =
+keycode  29 = one
+	alt     keycode  29 = Ascii_1
+keycode  30 = two
+	alt     keycode  30 = Ascii_2
+keycode  31 = three Next
+	alt     keycode  31 = Ascii_3
+keycode  32 = +a                +A
+	control       keycode  32 = Control_a
+	alt           keycode  32 = ae
+	shift alt     keycode  32 = AE
+keycode  33 = +s                +S
+	control       keycode  33 = Control_s
+	alt           keycode  33 = ssharp
+	shift alt     keycode  33 = section
+keycode  34 = +d                +D
+	control       keycode  34 = Control_d
+	alt           keycode  34 = eth
+	shift alt     keycode  34 = ETH
+keycode  35 = +f                +F
+	control keycode  35 = Control_f
+	alt     keycode  35 = dead_acute
+keycode  36 = +g                +G
+	control keycode  36 = Control_g
+	alt     keycode  36 = dead_grave
+keycode  37 = +h                +H
+	control keycode  37 = BackSpace
+	alt     keycode  37 = dead_circumflex
+keycode  38 = +j                +J
+	control keycode  38 = Linefeed
+	alt     keycode  38 = dead_tilde
+keycode  39 = +k                +K
+	control keycode  39 = Control_k
+	alt     keycode  39 = dead_diaeresis
+keycode  40 = +l                +L
+	control keycode  40 = Control_l
+	alt     keycode  40 = sterling
+keycode  41 = odiaeresis       Odiaeresis
+	alt           keycode  41 = semicolon
+	shift alt     keycode  41 = colon
+keycode  42 = adiaeresis       Adiaeresis
+	alt           keycode  42 = apostrophe
+	shift alt     keycode  42 = quotedbl
+keycode  43 = numbersign       asciicircum
+    control keycode  43 = Control_asciicircum
+keycode  44 =
+keycode  45 = four
+	alt     keycode  45 = Ascii_4
+keycode  46 = five
+	alt     keycode  46 = Ascii_5
+keycode  47 = six
+	alt     keycode  47 = Ascii_6
+keycode  48 = less              greater
+keycode  49 = +y                +Y
+	control       keycode  49 = Control_y
+	alt           keycode  49 = plusminus
+	shift alt     keycode  49 = notsign
+keycode  50 = +x                +X
+	control       keycode  50 = Control_x
+	alt           keycode  50 = multiplication
+	shift alt     keycode  50 = division
+keycode  51 = +c                +C
+	control       keycode  51 = Control_c
+	alt           keycode  51 = ccedilla
+	shift alt     keycode  51 = Ccedilla
+keycode  52 = +v                +V
+	control keycode  52 = Control_v
+	alt     keycode  52 = ordfeminine
+keycode  53 = +b                +B
+	control keycode  53 = Control_b
+	alt     keycode  53 = masculine
+keycode  54 = +n                +N
+	control       keycode  54 = Control_n
+	alt           keycode  54 = hyphen
+	shift alt     keycode  54 = macron
+keycode  55 = +m                +M
+	control       keycode  55 = Control_m
+	alt           keycode  55 = cedilla
+	shift alt     keycode  55 = questiondown
+keycode  56 = comma            semicolon
+	alt           keycode  56 = comma
+	shift alt     keycode  56 = less
+keycode  57 = period           colon
+	alt           keycode  57 = period
+	shift alt     keycode  57 = greater
+keycode  58 = minus            underscore
+	control       keycode  58 = Delete
+	alt           keycode  58 = slash
+	shift alt     keycode  58 = question
+keycode  59 =
+keycode  60 = period
+	altgr   control keycode  60 = Boot
+	control alt     keycode  60 = Boot
+keycode  61 = seven
+	alt     keycode  61 = Ascii_7
+keycode  62 = eight
+	alt     keycode  62 = Ascii_8
+keycode  63 = nine Prior
+	alt     keycode  63 = Ascii_9
+keycode  64 = space            space
+	control keycode  64 = nul
+	alt     keycode  64 = Meta_space
+keycode  65 = BackSpace
+keycode  66 = Tab              Tab
+	alt     keycode  66 = Meta_Tab
+keycode  67 = Return
+keycode  68 = Return
+    control keycode  68 = Linefeed
+	alt     keycode  68 = Meta_Control_m
+keycode  69 = Escape           Escape
+	alt     keycode  69 = Meta_Escape
+keycode  70 = Delete           Delete
+	alt     keycode  70 = Meta_Delete
+keycode  71 =
+keycode  72 =
+keycode  73 =
+keycode  74 = KP_Subtract
+keycode  75 =
+keycode  76 = Up
+keycode  77 = Down
+keycode  78 = Right
+keycode  79 = Left
+keycode  80 = F1               F11              Console_13
+	control keycode  80 = F1
+	alt     keycode  80 = Console_1
+keycode  81 = F2               F12              Console_14
+	control keycode  81 = F2
+	alt     keycode  81 = Console_2
+keycode  82 = F3               F13              Console_15
+	control keycode  82 = F3
+	alt     keycode  82 = Console_3
+keycode  83 = F4               F14              Console_16
+	control keycode  83 = F4
+	alt     keycode  83 = Console_4
+keycode  84 = F5               F15              Console_17
+	control keycode  84 = F5
+	alt     keycode  84 = Console_5
+keycode  85 = F6               F16              Console_18
+	control keycode  85 = F6
+	alt     keycode  85 = Console_6
+keycode  86 = F7               F17              Console_19
+	control keycode  86 = F7
+	alt     keycode  86 = Console_7
+keycode  87 = F8               F18              Console_20
+	control keycode  87 = F8
+	alt     keycode  87 = Console_8
+keycode  88 = F9               F19              Console_21
+	control keycode  88 = F9
+	alt     keycode  88 = Console_9
+keycode  89 = F10              F20              Console_22
+	control keycode  89 = F10
+	alt     keycode  89 = Console_10
+keycode  90 = bracketleft      braceleft
+keycode  91 = bracketright     braceright
+	control keycode  91 = Control_bracketright
+	alt     keycode  91 = Scroll_Lock
+keycode  92 = slash
+keycode  93 = asterisk
+keycode  94 = KP_Add
+keycode  95 = Help   Insert Show_Memory   Show_State
+keycode  96 = Shift
+keycode  97 = Shift
+keycode  98 = Caps_Lock
+keycode  99 = Control
+keycode 100 = Alt
+keycode 101 = AltGr
+keycode 102 =
+keycode 103 =
+keycode 104 =
+keycode 105 =
+keycode 106 =
+keycode 107 =
+keycode 108 =
+keycode 109 =
+keycode 110 =
+keycode 111 =
+keycode 112 =
+keycode 113 =
+keycode 114 =
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 =
+keycode 119 =
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+
diff --git a/keymaps/amiga/amiga-us.map b/keymaps/amiga/amiga-us.map
new file mode 100644
index 0000000..41ba3fb
--- /dev/null
+++ b/keymaps/amiga/amiga-us.map
@@ -0,0 +1,242 @@
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = one              exclam          
+	alt	keycode   1 = Meta_one        
+keycode   2 = two              at               at               nul             
+	alt	keycode   2 = Meta_two        
+keycode   3 = three            numbersign      
+	control	keycode   3 = Escape          
+	alt	keycode   3 = Meta_three      
+keycode   4 = four             dollar           dollar           Control_backslash
+	alt	keycode   4 = Meta_four       
+keycode   5 = five             percent         
+	control	keycode   5 = Control_bracketright
+	alt	keycode   5 = Meta_five       
+keycode   6 = six              asciicircum     
+	control	keycode   6 = Control_asciicircum
+	alt	keycode   6 = Meta_six        
+keycode   7 = seven            ampersand        braceleft        Control_underscore
+	alt	keycode   7 = Meta_seven      
+keycode   8 = eight            asterisk         bracketleft      Delete          
+	alt	keycode   8 = Meta_eight      
+keycode   9 = nine             parenleft        bracketright    
+	alt	keycode   9 = Meta_nine       
+keycode  10 = zero             parenright       braceright      
+	alt	keycode  10 = Meta_zero       
+keycode  11 = minus            underscore       backslash        Control_underscore
+	alt	keycode  11 = Meta_minus      
+keycode  12 = equal            plus            
+	alt	keycode  12 = Meta_equal      
+keycode  13 = backslash        bar             
+	control	keycode  13 = Control_backslash
+	alt	keycode  13 = Meta_backslash  
+keycode  14 =
+keycode  15 = KP_0            
+	alt	keycode  15 = Ascii_0         
+keycode  16 = +q                +Q               
+	control	keycode  16 = Control_q       
+	alt	keycode  16 = Meta_q          
+keycode  17 = +w                +W               
+	control	keycode  17 = Control_w       
+	alt	keycode  17 = Meta_w          
+keycode  18 = +e                +E               
+	control	keycode  18 = Control_e       
+	alt	keycode  18 = Meta_e          
+keycode  19 = +r                +R               
+	control	keycode  19 = Control_r       
+	alt	keycode  19 = Meta_r          
+keycode  20 = +t                +T               
+	control	keycode  20 = Control_t       
+	alt	keycode  20 = Meta_t          
+keycode  21 = +y                +Y               
+	control	keycode  21 = Control_y       
+	alt	keycode  21 = Meta_y          
+keycode  22 = +u                +U               
+	control	keycode  22 = Control_u       
+	alt	keycode  22 = Meta_u          
+keycode  23 = +i                +I               
+	control	keycode  23 = Tab             
+	alt	keycode  23 = Meta_i          
+keycode  24 = +o                +O               
+	control	keycode  24 = Control_o       
+	alt	keycode  24 = Meta_o          
+keycode  25 = +p                +P               
+	control	keycode  25 = Control_p       
+	alt	keycode  25 = Meta_p          
+keycode  26 = bracketleft      braceleft       
+	control	keycode  26 = Escape          
+	alt	keycode  26 = Meta_bracketleft
+keycode  27 = bracketright     braceright       asciitilde       Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+keycode  28 =
+keycode  29 = KP_1            
+	alt	keycode  29 = Ascii_1         
+keycode  30 = KP_2            
+	alt	keycode  30 = Ascii_2         
+keycode  31 = KP_3            
+	alt	keycode  31 = Ascii_3         
+keycode  32 = +a                +A               
+	control	keycode  32 = Control_a       
+	alt	keycode  32 = Meta_a          
+keycode  33 = +s                +S               
+	control	keycode  33 = Control_s       
+	alt	keycode  33 = Meta_s          
+keycode  34 = +d                +D               
+	control	keycode  34 = Control_d       
+	alt	keycode  34 = Meta_d          
+keycode  35 = +f                +F               
+	control	keycode  35 = Control_f       
+	alt	keycode  35 = Meta_f          
+keycode  36 = +g                +G               
+	control	keycode  36 = Control_g       
+	alt	keycode  36 = Meta_g          
+keycode  37 = +h                +H               
+	control	keycode  37 = BackSpace       
+	alt	keycode  37 = Meta_h          
+keycode  38 = +j                +J               
+	control	keycode  38 = Linefeed        
+	alt	keycode  38 = Meta_j          
+keycode  39 = +k                +K               
+	control	keycode  39 = Control_k       
+	alt	keycode  39 = Meta_k          
+keycode  40 = +l                +L               
+	control	keycode  40 = Control_l       
+	alt	keycode  40 = Meta_l          
+keycode  41 = semicolon        colon           
+	alt	keycode  41 = Meta_semicolon  
+keycode  42 = apostrophe       quotedbl        
+	control	keycode  42 = Control_g       
+	alt	keycode  42 = Meta_apostrophe 
+keycode  43 =
+keycode  44 =
+keycode  45 = KP_4            
+	alt	keycode  45 = Ascii_4         
+keycode  46 = KP_5            
+	alt	keycode  46 = Ascii_5         
+keycode  47 = KP_6            
+	alt	keycode  47 = Ascii_6         
+keycode  48 =
+keycode  49 = +z                +Z               
+	control	keycode  49 = Control_z       
+	alt	keycode  49 = Meta_z          
+keycode  50 = +x                +X               
+	control	keycode  50 = Control_x       
+	alt	keycode  50 = Meta_x          
+keycode  51 = +c                +C               
+	control	keycode  51 = Control_c       
+	alt	keycode  51 = Meta_c          
+keycode  52 = +v                +V               
+	control	keycode  52 = Control_v       
+	alt	keycode  52 = Meta_v          
+keycode  53 = +b                +B               
+	control	keycode  53 = Control_b       
+	alt	keycode  53 = Meta_b          
+keycode  54 = +n                +N               
+	control	keycode  54 = Control_n       
+	alt	keycode  54 = Meta_n          
+keycode  55 = +m                +M               
+	control	keycode  55 = Control_m       
+	alt	keycode  55 = Meta_m          
+keycode  56 = comma            less            
+	alt	keycode  56 = Meta_comma      
+keycode  57 = period           greater         
+	alt	keycode  57 = Meta_period     
+keycode  58 = slash            question        
+	control	keycode  58 = Delete          
+	alt	keycode  58 = Meta_slash      
+keycode  59 =
+keycode  60 = KP_Period       
+	control	alt	keycode  60 = Boot            
+keycode  61 = KP_7            
+	alt	keycode  61 = Ascii_7         
+keycode  62 = KP_8            
+	alt	keycode  62 = Ascii_8         
+keycode  63 = KP_9            
+	alt	keycode  63 = Ascii_9         
+keycode  64 = space            space           
+	control	keycode  64 = nul             
+	alt	keycode  64 = Meta_space      
+keycode  65 = Delete           Delete           Delete           Delete           Delete           Meta_Delete      Delete          
+keycode  66 = Tab              Tab             
+	alt	keycode  66 = Meta_Tab        
+keycode  67 = KP_Enter        
+keycode  68 = Return          
+	alt	keycode  68 = Meta_Control_m  
+keycode  69 = Escape           Escape          
+	alt	keycode  69 = Meta_Escape     
+keycode  70 = Delete           Delete          
+	alt	keycode  70 = Meta_Delete     
+keycode  71 =
+keycode  72 =
+keycode  73 =
+keycode  74 = KP_Subtract     
+keycode  75 =
+keycode  76 = Up              
+keycode  77 = Down            
+keycode  78 = Right           
+keycode  79 = Left            
+keycode  80 = F1               F11              Console_13       F1              
+	alt	keycode  80 = Console_1       
+keycode  81 = F2               F12              Console_14       F2              
+	alt	keycode  81 = Console_2       
+keycode  82 = F3               F13              Console_15       F3              
+	alt	keycode  82 = Console_3       
+keycode  83 = F4               F14              Console_16       F4              
+	alt	keycode  83 = Console_4       
+keycode  84 = F5               F15              Console_17       F5              
+	alt	keycode  84 = Console_5       
+keycode  85 = F6               F16              Console_18       F6              
+	alt	keycode  85 = Console_6       
+keycode  86 = F7               F17              Console_19       F7              
+	alt	keycode  86 = Console_7       
+keycode  87 = F8               F18              Console_20       F8              
+	alt	keycode  87 = Console_8       
+keycode  88 = F9               F19              Console_21       F9              
+	alt	keycode  88 = Console_9       
+keycode  89 = F10              F20              Console_22       F10             
+	alt	keycode  89 = Console_10      
+keycode  90 = Num_Lock        
+keycode  91 = Scroll_Lock      Show_Memory      Show_Registers   Show_State      
+	alt	keycode  91 = Scroll_Lock     
+keycode  92 = KP_Divide       
+keycode  93 = KP_Multiply     
+keycode  94 = KP_Add          
+keycode  95 = F11             
+	altgr	keycode  95 = Console_23      
+	shift	control	keycode  95 = VoidSymbol      
+	alt	keycode  95 = Console_11      
+	control	alt	keycode  95 = VoidSymbol      
+keycode  96 = Shift           
+keycode  97 = Shift           
+keycode  98 = Caps_Lock       
+keycode  99 = Control         
+keycode 100 = Alt             
+keycode 101 = AltGr           
+keycode 102 =
+keycode 103 =
+keycode 104 =
+keycode 105 =
+keycode 106 =
+keycode 107 =
+keycode 108 =
+keycode 109 =
+keycode 110 =
+keycode 111 =
+keycode 112 =
+keycode 113 =
+keycode 114 =
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 =
+keycode 119 =
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/atari/atari-de.map b/keymaps/atari/atari-de.map
new file mode 100644
index 0000000..64ae877
--- /dev/null
+++ b/keymaps/atari/atari-de.map
@@ -0,0 +1,244 @@
+#           Keyboard Mapping for Atari Keyboards, German Layout
+#           ---------------------------------------------------
+#
+# Copyright 1994 Roman Hodek
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License.  See the file README.legal in the main directory of this archive
+# for more details.
+#
+# Notes:
+# ------
+#
+# This file assumes that the currently active mapping is the Atari default
+# mapping (US layout) in my version as found in drivers/char/defkeymap.c
+# (conditionalized to machine type). Only the necessary alternations are
+# done!
+#
+# Dead keys (i.e. pressing ^ and e gives œ, an e with hat) are not
+# used, because I consider this annoying. All characters needed for 
+# German are possible without deadkeys. If you want them, apply the following
+# replacements:
+#   grave       -> dead_grave
+#   apostrophe  -> dead_acute
+#   asciicircum -> dead_circumflex
+#   asciitelde  -> dead_tilde
+#
+# Lines commented out by '!' are settings that are done implicitly by
+# loadkeys.
+#
+# There is no natural way to generate Meta codes for the characters [,],{,},
+# @ and \, that already need Alt to be pressed together with one of the 
+# umlaut keys. I've choosen the following scheme, though it may not be
+# very intuitive in all cases (who knows a better solution??):
+# 1) The key with Alt (and maybe shift) gives the character engraved to the
+#    right (i.e. [,@,\,...)
+# 2) The key with Control (and maybe shift) gives the control character
+#    corresponding the the character engraved to the _right_, if one exists.
+#    This happens because the umlaut characters have no corresponding control
+#	 character anyway.
+# 3) The key with Control and Alt (and maybe shift) gives the Meta equivalent
+#    (with 8. bit set or prepended by ESC) of the character engraved to the
+#	 right. Again, Meta's of the umlaut characters do not exist, since they
+#	 already have their 8. bit set.
+# One could argue that it would be more consistent to require Alt and Control
+# to be pressed to get the control characters (case 2). That's true, but in
+# my opinion, it is even more inconsistent to generate Meta codes without the
+# Alt key pressed (but just with Control). And it would be very bad, if the
+# Meta versions of [,{,@,... could not be typed at all!
+#
+# I've kept the convention that the digit keys 2..8 on the main keyboard
+# generate the control characters not corresponding to letters (^@, ^[ .. ^_
+# and ^?=DEL) when pressed with Control. It is convention, too, that the shift
+# key must not be pressed for this effect. Also, Meta+Control plus these keys
+# give the Metas of these controls.
+#
+# The standard loadkeys (at least the version I have) doesn't understand the
+# combination of Meta and Control in symbolic names (i.e. Meta_Control_a is
+# invalid, but some names like Meta_Backspace or Meta_Tab are). For this
+# reason, I replaced the offending names by their numeric equivalent. This
+# depends on KT_META being 8!
+#
+# The umlaut keys cannot be set via ?diaeresis, because this would make them
+# to be of type KT_LATIN1, and they should be type KT_LETTER to be affected
+# by CAPSLOCK. Their definition is thus in hex :-(
+#
+
+keycode   2 = one exclam
+!	control       keycode   2 = VoidSymbol
+!	shift control keycode   2 = VoidSymbol
+    alt           keycode   2 = Meta_one
+	shift alt     keycode   2 = Meta_exclam
+
+keycode   3 = two quotedbl
+	control       keycode   3 = nul # = Control_at
+!	shift control keycode   3 = VoidSymbol
+    alt           keycode   3 = Meta_two
+	shift alt     keycode   3 = Meta_quotedbl
+	alt control   keycode   3 = 0x0800 # Meta_Control_at
+
+keycode   4 = three section
+	control       keycode   4 = Escape # = Control_bracketleft
+!	shift control keycode   4 = VoidSymbol
+    alt           keycode   4 = Meta_three
+!	shift alt     keycode   4 = VoidSymbol  # already has 8. bit set!
+	alt control   keycode   4 = Meta_Escape # = Meta_Control_bracketleft
+
+keycode   5 = four dollar
+	control       keycode   5 = Control_backslash
+!	shift control keycode   5 = VoidSymbol
+    alt           keycode   5 = Meta_four
+	shift alt     keycode   5 = Meta_dollar
+	alt control   keycode   5 = 0x081c # Meta_Control_backslash
+
+keycode   6 = five percent
+	control       keycode   6 = Control_bracketright
+!	shift control keycode   6 = VoidSymbol
+    alt           keycode   6 = Meta_five
+	shift alt     keycode   6 = Meta_percent
+	alt control   keycode   6 = 0x081d # Meta_Control_bracketright
+
+keycode   7 = six ampersand
+	control       keycode   7 = Control_asciicircum
+!	shift control keycode   7 = VoidSymbol
+    alt           keycode   7 = Meta_six
+	shift alt     keycode   7 = Meta_ampersand
+	alt control   keycode   7 = 0x081e # Meta_Control_asciicircum
+
+keycode   8 = seven slash
+	control       keycode   8 = Control_underscore
+!	shift control keycode   8 = VoidSymbol
+    alt           keycode   8 = Meta_seven
+	shift alt     keycode   8 = Meta_slash
+	alt control   keycode   8 = 0x081f # Meta_Control_underscore
+
+keycode   9 = eight parenleft
+	control       keycode   9 = Delete
+!	shift control keycode   9 = VoidSymbol
+    alt           keycode   9 = Meta_eight
+	shift alt     keycode   9 = Meta_parenleft
+	alt control   keycode   9 = Meta_Delete
+
+keycode  10 = nine parenright
+!	control       keycode  10 = VoidSymbol
+!	shift control keycode  10 = VoidSymbol
+    alt           keycode  10 = Meta_nine
+	shift alt     keycode  10 = Meta_parenright
+
+keycode  11 = zero equal
+!	control       keycode  11 = VoidSymbol
+!	shift control keycode  11 = VoidSymbol
+    alt           keycode  11 = Meta_zero
+	shift alt     keycode  11 = Meta_equal
+
+keycode  12 = ssharp question
+!	control       keycode  12 = VoidSymbol
+!	shift control keycode  12 = VoidSymbol
+!	alt           keycode  12 = VoidSymbol  # already has 8. bit set!
+	shift alt     keycode  12 = Meta_question
+
+keycode  13 = apostrophe grave
+!	control       keycode  13 = VoidSymbol
+!	shift control keycode  13 = VoidSymbol
+    alt           keycode  13 = Meta_apostrophe
+	shift alt     keycode  13 = Meta_grave
+
+keycode  14 = Delete Delete
+	control       keycode 14 = Delete
+	control shift keycode 14 = Delete
+	alt           keycode 14 = Meta_Delete
+	alt shift     keycode 14 = Meta_Delete
+	alt control   keycode 14 = Meta_Delete
+	alt control shift keycode 14 = Meta_Delete
+
+keycode  21 = z
+	# rest done by loadkeys!
+
+keycode  26 = 0x0bfc 0x0bdc # udiaeresis Udiaeresis with type KT_LETTER
+	control       keycode  26 = nul # = Control_at
+	shift control keycode  26 = Control_backslash
+    alt           keycode  26 = at
+	shift alt     keycode  26 = backslash
+	# Who knows a better way to implement these?
+	alt control       keycode 26 = Meta_at
+	shift alt control keycode 26 = Meta_backslash
+
+keycode  27 = plus asterisk
+!	control       keycode  27 = VoidSymbol
+!	shift control keycode  27 = VoidSymbol
+    alt           keycode  27 = Meta_plus 
+	shift alt     keycode  27 = Meta_asterisk
+
+keycode  39 = 0x0bf6 0x0bd6 # odiaeresis Odiaeresis with type KT_LETTER
+	control       keycode  39 = Escape # = Control_bracketleft
+!	shift control keycode  39 = VoidSymbol
+    alt           keycode  39 = bracketleft
+	shift alt     keycode  39 = braceleft
+	# Who knows a better way to implement these?
+	alt control       keycode 39 = Meta_bracketleft
+	shift alt control keycode 39 = Meta_braceleft
+
+keycode  40 = 0x0be4 0x0bc4 # adiaeresis Adiaeresis with type KT_LETTER
+	control       keycode  40 = Control_bracketright
+!	shift control keycode  40 = VoidSymbol
+    alt           keycode  40 = bracketright
+	shift alt     keycode  40 = braceright
+	# Who knows a better way to implement these?
+	alt control       keycode 40 = Meta_bracketright
+	shift alt control keycode 40 = Meta_braceright
+
+keycode  41 = numbersign asciicircum
+	control       keycode  41 = Control_asciicircum # for convenience
+	shift control keycode  41 = Control_asciicircum
+    alt           keycode  41 = Meta_numbersign
+	shift alt     keycode  41 = Meta_asciicircum
+	alt control       keycode  41 = 0x081e # Meta_Control_asciicircum
+	shift alt control keycode  41 = 0x081e # Meta_Control_asciicircum
+
+keycode  43 = asciitilde bar
+!	control       keycode  43 = VoidSymbol
+!	shift control keycode  43 = VoidSymbol
+    alt           keycode  43 = Meta_asciitilde
+	shift alt     keycode  43 = Meta_bar
+
+keycode  44 = y
+	# rest done by loadkeys!
+
+keycode  51 = comma semicolon
+!	control       keycode  51 = VoidSymbol
+!	shift control keycode  51 = VoidSymbol
+    alt           keycode  51 = Meta_comma
+	shift alt     keycode  51 = Meta_semicolon
+
+keycode  52 = period colon
+!	control       keycode  52 = VoidSymbol
+!	shift control keycode  52 = VoidSymbol
+    alt           keycode  52 = Meta_period
+	shift alt     keycode  52 = Meta_colon
+
+keycode  53 = minus underscore
+	control       keycode  53 = Control_underscore # for convenience
+	shift control keycode  53 = Control_underscore
+    alt           keycode  53 = Meta_minus
+	shift alt     keycode  53 = Meta_underscore
+	alt control       keycode  53 = 0x081f # Meta_Control_underscore
+	shift alt control keycode  53 = 0x081f # Meta_Control_underscore
+
+# These two are for Emacs-style editing: Alt+Cursor Left/Right send
+# Meta b or f to jump over words.
+	alt keycode 75 = Meta_b
+	alt keycode 77 = Meta_f
+
+keycode 83 = Remove Remove
+	control       keycode  83 = Remove
+	control shift keycode  83 = Remove
+	alt           keycode  83 = Meta_d
+	alt shift     keycode  83 = Meta_d
+	alt control   keycode  83 = Boot
+	alt shift control keycode  83 = 0x0804 # Meta_Control_d
+
+keycode  96 = less greater
+!	control       keycode  96 = VoidSymbol
+!	shift control keycode  96 = VoidSymbol
+    alt           keycode  96 = Meta_less
+	shift alt     keycode  96 = Meta_greater
diff --git a/keymaps/atari/atari-se.map b/keymaps/atari/atari-se.map
new file mode 100644
index 0000000..50cf600
--- /dev/null
+++ b/keymaps/atari/atari-se.map
@@ -0,0 +1,394 @@
+#
+#  Swedish keymap for Atari Linux
+#  Hacked together by Elias Mårtenson (elias@omicron.se)
+#  I tried to make this keymap look as much like the swedish
+#  TOS-keymap as possible. There are some problems with the
+#  meta-keycodes though, there aren't enough keys for them.
+#
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   0 =
+keycode   1 = Escape           Escape          
+	alt     keycode   1 = Meta_Escape     
+	shift   alt     keycode   1 = Meta_Escape     
+keycode   2 = one              exclam          
+	alt     keycode   2 = Meta_one        
+	shift   alt     keycode   2 = Meta_exclam     
+keycode   3 = two              quotedbl               at              
+	control keycode   3 = nul             
+	alt     keycode   3 = Meta_two        
+	shift   alt     keycode   3 = Meta_quotedbl         
+	control alt     keycode   3 = Meta_nul        
+keycode   4 = three            numbersign      
+	control keycode   4 = Escape          
+	alt     keycode   4 = Meta_three      
+	shift   alt     keycode   4 = Meta_numbersign 
+	control alt     keycode   4 = Meta_Escape     
+keycode   5 = four             dollar           dollar          
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four       
+	shift   alt     keycode   5 = Meta_dollar     
+	control alt     keycode   5 = Meta_Control_backslash
+keycode   6 = five             percent         
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five       
+	shift   alt     keycode   6 = Meta_percent    
+	control alt     keycode   6 = Meta_Control_bracketright
+keycode   7 = six              ampersand    
+	control keycode   7 = Control_underscore
+	alt     keycode   7 = Meta_six        
+	shift   alt     keycode   7 = Meta_ampersand
+	control alt     keycode   7 = Meta_Control_underscore
+keycode   8 = seven            slash        braceleft       
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven      
+	shift   alt     keycode   8 = Meta_slash  
+	control alt     keycode   8 = Meta_Control_underscore
+keycode   9 = eight            parenleft         bracketleft     
+	control keycode   9 = Delete          
+	alt     keycode   9 = Meta_eight      
+	shift   alt     keycode   9 = Meta_parenleft   
+	control alt     keycode   9 = Meta_Delete     
+keycode  10 = nine             parenright        bracketright    
+	alt     keycode  10 = Meta_nine       
+	shift   alt     keycode  10 = Meta_parenright
+keycode  11 = zero             equal       braceright      
+	alt     keycode  11 = Meta_zero       
+	shift   alt     keycode  11 = Meta_equal
+keycode  12 = plus            question       backslash       
+#	control keycode  12 = Control_plus
+	control keycode  12 = nul
+	alt     keycode  12 = Meta_plus
+	shift   alt     keycode  12 = Meta_question
+#	control alt     keycode  12 = Meta_Control_plus
+	control alt     keycode  12 = nul
+keycode  13 = eacute            Eacute
+	alt     keycode  13 = Meta_equal      
+	shift   alt     keycode  13 = Meta_plus       
+keycode  14 = Delete        Delete        Delete        Delete        Delete        Delete        Delete        Delete        Meta_Delete   Meta_Delete   Delete        Delete        Meta_Delete   Meta_Delete   Delete       Delete       
+keycode  15 = Tab              Tab             
+	alt     keycode  15 = Meta_Tab        
+	shift   alt     keycode  15 = Meta_Tab        
+keycode  16 = +q                +Q               
+	control keycode  16 = Control_q       
+	alt     keycode  16 = Meta_q          
+	shift   alt     keycode  16 = Meta_Q          
+	control alt     keycode  16 = Meta_Control_q  
+keycode  17 = +w                +W               
+	control keycode  17 = Control_w       
+	alt     keycode  17 = Meta_w          
+	shift   alt     keycode  17 = Meta_W          
+	control alt     keycode  17 = Meta_Control_w  
+keycode  18 = +e                +E               
+	control keycode  18 = Control_e       
+	alt     keycode  18 = Meta_e          
+	shift   alt     keycode  18 = Meta_E          
+	control alt     keycode  18 = Meta_Control_e  
+keycode  19 = +r                +R               
+	control keycode  19 = Control_r       
+	alt     keycode  19 = Meta_r          
+	shift   alt     keycode  19 = Meta_R          
+	control alt     keycode  19 = Meta_Control_r  
+keycode  20 = +t                +T               
+	control keycode  20 = Control_t       
+	alt     keycode  20 = Meta_t          
+	shift   alt     keycode  20 = Meta_T          
+	control alt     keycode  20 = Meta_Control_t  
+keycode  21 = +y                +Y               
+	control keycode  21 = Control_y       
+	alt     keycode  21 = Meta_y          
+	shift   alt     keycode  21 = Meta_Y          
+	control alt     keycode  21 = Meta_Control_y  
+keycode  22 = +u                +U               
+	control keycode  22 = Control_u       
+	alt     keycode  22 = Meta_u          
+	shift   alt     keycode  22 = Meta_U          
+	control alt     keycode  22 = Meta_Control_u  
+keycode  23 = +i                +I               
+	control keycode  23 = Tab             
+	alt     keycode  23 = Meta_i          
+	shift   alt     keycode  23 = Meta_I          
+	control alt     keycode  23 = Meta_Tab        
+keycode  24 = +o                +O               
+	control keycode  24 = Control_o       
+	alt     keycode  24 = Meta_o          
+	shift   alt     keycode  24 = Meta_O          
+	control alt     keycode  24 = Meta_Control_o  
+keycode  25 = +p                +P               
+	control keycode  25 = Control_p       
+	alt     keycode  25 = Meta_p          
+	shift   alt     keycode  25 = Meta_P          
+	control alt     keycode  25 = Meta_Control_p  
+keycode  26 = aring		Aring
+	control keycode  26 = Escape          
+	alt     keycode  26 = bracketleft
+	shift   alt     keycode  26 = braceleft
+	control alt     keycode  26 = Meta_Escape     
+keycode  27 = udiaeresis	Udiaeresis	asciitilde      
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = bracketright
+	shift   alt     keycode  27 = braceright
+	control alt     keycode  27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt     keycode  28 = Meta_Control_m  
+	shift   alt     keycode  28 = AltGr_Lock      
+	control alt     keycode  28 = AltGr_Lock      
+	shift   control alt     keycode  28 = AltGr_Lock      
+keycode  29 = Control         
+keycode  30 = +a                +A               
+	control keycode  30 = Control_a       
+	alt     keycode  30 = Meta_a          
+	shift   alt     keycode  30 = Meta_A          
+	control alt     keycode  30 = Meta_Control_a  
+keycode  31 = +s                +S               
+	control keycode  31 = Control_s       
+	alt     keycode  31 = Meta_s          
+	shift   alt     keycode  31 = Meta_S          
+	control alt     keycode  31 = Meta_Control_s  
+keycode  32 = +d                +D               
+	control keycode  32 = Control_d       
+	alt     keycode  32 = Meta_d          
+	shift   alt     keycode  32 = Meta_D          
+	control alt     keycode  32 = Meta_Control_d  
+keycode  33 = +f                +F               
+	control keycode  33 = Control_f       
+	alt     keycode  33 = Meta_f          
+	shift   alt     keycode  33 = Meta_F          
+	control alt     keycode  33 = Meta_Control_f  
+keycode  34 = +g                +G               
+	control keycode  34 = Control_g       
+	alt     keycode  34 = Meta_g          
+	shift   alt     keycode  34 = Meta_G          
+	control alt     keycode  34 = Meta_Control_g  
+keycode  35 = +h                +H               
+	control keycode  35 = BackSpace       
+	alt     keycode  35 = Meta_h          
+	shift   alt     keycode  35 = Meta_H          
+	control alt     keycode  35 = Meta_BackSpace  
+keycode  36 = +j                +J               
+	control keycode  36 = Linefeed        
+	alt     keycode  36 = Meta_j          
+	shift   alt     keycode  36 = Meta_J          
+	control alt     keycode  36 = Meta_Linefeed   
+keycode  37 = +k                +K               
+	control keycode  37 = Control_k       
+	alt     keycode  37 = Meta_k          
+	shift   alt     keycode  37 = Meta_K          
+	control alt     keycode  37 = Meta_Control_k  
+keycode  38 = +l                +L               
+	control keycode  38 = Control_l       
+	alt     keycode  38 = Meta_l          
+	shift   alt     keycode  38 = Meta_L          
+	control alt     keycode  38 = Meta_Control_l  
+keycode  39 = odiaeresis	Odiaeresis
+	alt     keycode  39 = Meta_semicolon  
+	shift   alt     keycode  39 = Meta_colon      
+keycode  40 = adiaeresis	Adiaeresis
+	control keycode  40 = Control_g       
+	alt     keycode  40 = grave
+	shift   alt     keycode  40 = asciitilde
+	control alt     keycode  40 = Meta_Control_g  
+keycode  41 = apostrophe            asterisk
+	control keycode  41 = nul             
+	alt     keycode  41 = Meta_apostrophe  
+	shift   alt     keycode  41 = Meta_asterisk
+	control alt     keycode  41 = Meta_nul        
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = asciicircum
+	shift   alt     keycode  43 = at
+	control alt     keycode  43 = Meta_Control_backslash
+keycode  44 = +z                +Z               
+	control keycode  44 = Control_z       
+	alt     keycode  44 = Meta_z          
+	shift   alt     keycode  44 = Meta_Z          
+	control alt     keycode  44 = Meta_Control_z  
+keycode  45 = +x                +X               
+	control keycode  45 = Control_x       
+	alt     keycode  45 = Meta_x          
+	shift   alt     keycode  45 = Meta_X          
+	control alt     keycode  45 = Meta_Control_x  
+keycode  46 = +c                +C               
+	control keycode  46 = Control_c       
+	alt     keycode  46 = Meta_c          
+	shift   alt     keycode  46 = Meta_C          
+	control alt     keycode  46 = Meta_Control_c  
+keycode  47 = +v                +V               
+	control keycode  47 = Control_v       
+	alt     keycode  47 = Meta_v          
+	shift   alt     keycode  47 = Meta_V          
+	control alt     keycode  47 = Meta_Control_v  
+keycode  48 = +b                +B               
+	control keycode  48 = Control_b       
+	alt     keycode  48 = Meta_b          
+	shift   alt     keycode  48 = Meta_B          
+	control alt     keycode  48 = Meta_Control_b  
+keycode  49 = +n                +N               
+	control keycode  49 = Control_n       
+	alt     keycode  49 = Meta_n          
+	shift   alt     keycode  49 = Meta_N          
+	control alt     keycode  49 = Meta_Control_n  
+keycode  50 = +m                +M               
+	control keycode  50 = Control_m       
+	alt     keycode  50 = Meta_m          
+	shift   alt     keycode  50 = Meta_M          
+	control alt     keycode  50 = Meta_Control_m  
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma      
+	shift   alt     keycode  51 = Meta_semicolon
+keycode  52 = period           colon 
+	alt     keycode  52 = Meta_period     
+	shift   alt     keycode  52 = Meta_colon
+keycode  53 = minus            underscore
+	control keycode  53 = Delete          
+	alt     keycode  53 = Meta_minus
+	shift   alt     keycode  53 = Meta_underscore
+	control alt     keycode  53 = Meta_Delete     
+keycode  54 = Shift           
+keycode  55 =
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+	alt     keycode  57 = Meta_space      
+	shift   alt     keycode  57 = Meta_space      
+	control alt     keycode  57 = Meta_nul        
+keycode  58 = Caps_Lock       
+	alt     keycode  58 = Num_Lock        
+keycode  59 = F1               F11              Console_13      
+	control keycode  59 = F1              
+	alt     keycode  59 = Console_1       
+	shift   alt     keycode  59 = Console_11      
+	control alt     keycode  59 = F1              
+keycode  60 = F2               F12              Console_14      
+	control keycode  60 = F2              
+	alt     keycode  60 = Console_2       
+	shift   alt     keycode  60 = Console_12      
+	control alt     keycode  60 = F2              
+keycode  61 = F3               F13              Console_15      
+	control keycode  61 = F3              
+	alt     keycode  61 = Console_3       
+	shift   alt     keycode  61 = Console_13      
+	control alt     keycode  61 = F3              
+keycode  62 = F4               F14              Console_16      
+	control keycode  62 = F4              
+	alt     keycode  62 = Console_4       
+	shift   alt     keycode  62 = Console_14      
+	control alt     keycode  62 = F4              
+keycode  63 = F5               F15              Console_17      
+	control keycode  63 = F5              
+	alt     keycode  63 = Console_5       
+	shift   alt     keycode  63 = Console_15      
+	control alt     keycode  63 = F5              
+keycode  64 = F6               F16              Console_18      
+	control keycode  64 = F6              
+	alt     keycode  64 = Console_6       
+	shift   alt     keycode  64 = Console_16      
+	control alt     keycode  64 = F6              
+keycode  65 = F7               F17              Console_19      
+	control keycode  65 = F7              
+	alt     keycode  65 = Console_7       
+	shift   alt     keycode  65 = Console_17      
+	control alt     keycode  65 = F7              
+keycode  66 = F8               F18              Console_20      
+	control keycode  66 = F8              
+	alt     keycode  66 = Console_8       
+	shift   alt     keycode  66 = Console_18      
+	control alt     keycode  66 = F8              
+keycode  67 = F9               F19              Console_21      
+	control keycode  67 = F9              
+	alt     keycode  67 = Console_9       
+	shift   alt     keycode  67 = Console_19      
+	control alt     keycode  67 = F9              
+keycode  68 = F10              F20              Console_22      
+	control keycode  68 = F10             
+	alt     keycode  68 = Console_10      
+	shift   alt     keycode  68 = Console_20      
+	control alt     keycode  68 = F10             
+keycode  69 =
+keycode  70 =
+keycode  71 = Find            
+	shift   keycode  71 = Select          
+	shift   alt     keycode  71 = Select          
+keycode  72 = Up              
+	shift   keycode  72 = Prior           
+	alt     keycode  72 = Scroll_Backward 
+	shift   alt     keycode  72 = Prior           
+keycode  73 =
+keycode  74 = KP_Subtract     
+keycode  75 = Left            
+keycode  76 =
+keycode  77 = Right           
+keycode  78 = KP_Add          
+keycode  79 =
+keycode  80 = Down            
+	shift   keycode  80 = Next            
+	alt     keycode  80 = Scroll_Forward  
+	shift   alt     keycode  80 = Next            
+keycode  81 =
+keycode  82 = Insert          
+	alt     keycode  82 = Scroll_Lock     
+keycode  83 = BackSpace           BackSpace
+	alt     keycode  83 = Meta_BackSpace
+	shift   alt     keycode  83 = Meta_BackSpace
+	control alt     keycode  83 = Boot            
+keycode  84 =
+keycode  85 =
+keycode  86 =
+keycode  87 =
+keycode  88 =
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = less             greater
+	alt	keycode	96 = Meta_less
+	shift	alt	keycode	96 = Meta_greater
+keycode  97 = Pause            Break           
+	control keycode  97 = Pause           
+	alt     keycode  97 = Last_Console    
+keycode  98 = Macro            Show_Memory      Help             Help    Show_Registers   VoidSymbol       Help             Help           Show_State       VoidSymbol       Help             Help 
+keycode  99 = parenleft        parenleft        VoidSymbol       VoidSymbol       parenleft        parenleft        VoidSymbol       VoidSymbol     parenleft        parenleft        VoidSymbol       VoidSymbol       parenleft        parenleft       
+keycode 100 = parenright       parenright       VoidSymbol       VoidSymbol       parenright       parenright       VoidSymbol       VoidSymbol     parenright       parenright       VoidSymbol       VoidSymbol       parenright       parenright      
+keycode 101 = KP_Divide       
+keycode 102 = KP_Multiply     
+keycode 103 = KP_7            
+	alt     keycode 103 = Ascii_7         
+keycode 104 = KP_8            
+	alt     keycode 104 = Ascii_8         
+keycode 105 = KP_9            
+	alt     keycode 105 = Ascii_9         
+keycode 106 = KP_4            
+	alt     keycode 106 = Ascii_4         
+keycode 107 = KP_5            
+	alt     keycode 107 = Ascii_5         
+keycode 108 = KP_6            
+	alt     keycode 108 = Ascii_6         
+keycode 109 = KP_1            
+	alt     keycode 109 = Ascii_1         
+keycode 110 = KP_2            
+	alt     keycode 110 = Ascii_2         
+keycode 111 = KP_3            
+	alt     keycode 111 = Ascii_3         
+keycode 112 = KP_0            
+	alt     keycode 112 = Ascii_0         
+keycode 113 = KP_Period       
+	altgr   control keycode 113 = Boot            
+keycode 114 = KP_Enter        
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 =
+keycode 119 =
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/atari/atari-uk-falcon.map b/keymaps/atari/atari-uk-falcon.map
new file mode 100644
index 0000000..2e18659
--- /dev/null
+++ b/keymaps/atari/atari-uk-falcon.map
@@ -0,0 +1,397 @@
+# UK Falcon keyboard map
+# created from scratch by Keith Tomlin (tomlin@spods.dcs.kcl.ac.uk)
+#
+strings as usual
+
+keycode   0 =
+keycode   1 = Escape           Escape          
+	alt     keycode   1 = Meta_Escape     
+	shift   alt     keycode   1 = Meta_Escape     
+keycode   2 = one              exclam          
+	alt     keycode   2 = Meta_one        
+	shift   alt     keycode   2 = Meta_exclam     
+keycode   3 = two              quotedbl               at              
+	control keycode   3 = nul             
+	alt     keycode   3 = Meta_two        
+	shift   alt     keycode   3 = Meta_at         
+	control alt     keycode   3 = Meta_nul        
+keycode   4 = three            numbersign
+	control keycode   4 = Escape          
+	alt     keycode   4 = Meta_three      
+	shift   alt     keycode   4 = Meta_numbersign 
+	control alt     keycode   4 = Meta_Escape     
+keycode   5 = four             dollar           dollar          
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four       
+	shift   alt     keycode   5 = Meta_dollar     
+	control alt     keycode   5 = Meta_Control_backslash
+keycode   6 = five             percent         
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five       
+	shift   alt     keycode   6 = Meta_percent    
+	control alt     keycode   6 = Meta_Control_bracketright
+keycode   7 = six              asciicircum     
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six        
+	shift   alt     keycode   7 = Meta_asciicircum
+	control alt     keycode   7 = Meta_Control_asciicircum
+keycode   8 = seven            ampersand        braceleft       
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven      
+	shift   alt     keycode   8 = Meta_ampersand  
+	control alt     keycode   8 = Meta_Control_underscore
+keycode   9 = eight            asterisk         bracketleft     
+	control keycode   9 = Delete          
+	alt     keycode   9 = Meta_eight      
+	shift   alt     keycode   9 = Meta_asterisk   
+	control alt     keycode   9 = Meta_Delete     
+keycode  10 = nine             parenleft        bracketright    
+	alt     keycode  10 = Meta_nine       
+	shift   alt     keycode  10 = Meta_parenleft  
+keycode  11 = zero             parenright       braceright      
+	alt     keycode  11 = Meta_zero       
+	shift   alt     keycode  11 = Meta_parenright 
+keycode  12 = minus            underscore       backslash       
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus      
+	shift   alt     keycode  12 = Meta_underscore 
+	control alt     keycode  12 = Meta_Control_underscore
+keycode  13 = equal            plus            
+	alt     keycode  13 = Meta_equal      
+	shift   alt     keycode  13 = Meta_plus       
+keycode  14 = BackSpace        BackSpace        BackSpace        BackSpace        BackSpace        BackSpace        BackSpace        BackSpace        Meta_BackSpace   Meta_BackSpace   BackSpace        BackSpace        Meta_BackSpace   Meta_BackSpace   BackSpace        BackSpace       
+keycode  15 = Tab              Tab             
+	alt     keycode  15 = Meta_Tab        
+	shift   alt     keycode  15 = Meta_Tab        
+keycode  16 = +q                +Q               
+	control keycode  16 = Control_q       
+	alt     keycode  16 = Meta_q          
+	shift   alt     keycode  16 = Meta_Q          
+	control alt     keycode  16 = Meta_Control_q  
+keycode  17 = +w                +W               
+	control keycode  17 = Control_w       
+	alt     keycode  17 = Meta_w          
+	shift   alt     keycode  17 = Meta_W          
+	control alt     keycode  17 = Meta_Control_w  
+keycode  18 = +e                +E               
+	control keycode  18 = Control_e       
+	alt     keycode  18 = Meta_e          
+	shift   alt     keycode  18 = Meta_E          
+	control alt     keycode  18 = Meta_Control_e  
+keycode  19 = +r                +R               
+	control keycode  19 = Control_r       
+	alt     keycode  19 = Meta_r          
+	shift   alt     keycode  19 = Meta_R          
+	control alt     keycode  19 = Meta_Control_r  
+keycode  20 = +t                +T               
+	control keycode  20 = Control_t       
+	alt     keycode  20 = Meta_t          
+	shift   alt     keycode  20 = Meta_T          
+	control alt     keycode  20 = Meta_Control_t  
+keycode  21 = +y                +Y               
+	control keycode  21 = Control_y       
+	alt     keycode  21 = Meta_y          
+	shift   alt     keycode  21 = Meta_Y          
+	control alt     keycode  21 = Meta_Control_y  
+keycode  22 = +u                +U               
+	control keycode  22 = Control_u       
+	alt     keycode  22 = Meta_u          
+	shift   alt     keycode  22 = Meta_U          
+	control alt     keycode  22 = Meta_Control_u  
+keycode  23 = +i                +I               
+	control keycode  23 = Tab             
+	alt     keycode  23 = Meta_i          
+	shift   alt     keycode  23 = Meta_I          
+	control alt     keycode  23 = Meta_Tab        
+keycode  24 = +o                +O               
+	control keycode  24 = Control_o       
+	alt     keycode  24 = Meta_o          
+	shift   alt     keycode  24 = Meta_O          
+	control alt     keycode  24 = Meta_Control_o  
+keycode  25 = +p                +P               
+	control keycode  25 = Control_p       
+	alt     keycode  25 = Meta_p          
+	shift   alt     keycode  25 = Meta_P          
+	control alt     keycode  25 = Meta_Control_p  
+keycode  26 = bracketleft      braceleft       
+	control keycode  26 = Escape          
+	alt     keycode  26 = Meta_bracketleft
+	shift   alt     keycode  26 = Meta_braceleft  
+	control alt     keycode  26 = Meta_Escape     
+keycode  27 = bracketright     braceright       asciitilde      
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+	shift   alt     keycode  27 = Meta_braceright 
+	control alt     keycode  27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt     keycode  28 = Meta_Control_m  
+	shift   alt     keycode  28 = AltGr_Lock      
+	control alt     keycode  28 = AltGr_Lock      
+	shift   control alt     keycode  28 = AltGr_Lock      
+keycode  29 = Control         
+keycode  30 = +a                +A               
+	control keycode  30 = Control_a       
+	alt     keycode  30 = Meta_a          
+	shift   alt     keycode  30 = Meta_A          
+	control alt     keycode  30 = Meta_Control_a  
+keycode  31 = +s                +S               
+	control keycode  31 = Control_s       
+	alt     keycode  31 = Meta_s          
+	shift   alt     keycode  31 = Meta_S          
+	control alt     keycode  31 = Meta_Control_s  
+keycode  32 = +d                +D               
+	control keycode  32 = Control_d       
+	alt     keycode  32 = Meta_d          
+	shift   alt     keycode  32 = Meta_D          
+	control alt     keycode  32 = Meta_Control_d  
+keycode  33 = +f                +F               
+	control keycode  33 = Control_f       
+	alt     keycode  33 = Meta_f          
+	shift   alt     keycode  33 = Meta_F          
+	control alt     keycode  33 = Meta_Control_f  
+keycode  34 = +g                +G               
+	control keycode  34 = Control_g       
+	alt     keycode  34 = Meta_g          
+	shift   alt     keycode  34 = Meta_G          
+	control alt     keycode  34 = Meta_Control_g  
+keycode  35 = +h                +H               
+	control keycode  35 = BackSpace       
+	alt     keycode  35 = Meta_h          
+	shift   alt     keycode  35 = Meta_H          
+	control alt     keycode  35 = Meta_BackSpace  
+keycode  36 = +j                +J               
+	control keycode  36 = Linefeed        
+	alt     keycode  36 = Meta_j          
+	shift   alt     keycode  36 = Meta_J          
+	control alt     keycode  36 = Meta_Linefeed   
+keycode  37 = +k                +K               
+	control keycode  37 = Control_k       
+	alt     keycode  37 = Meta_k          
+	shift   alt     keycode  37 = Meta_K          
+	control alt     keycode  37 = Meta_Control_k  
+keycode  38 = +l                +L               
+	control keycode  38 = Control_l       
+	alt     keycode  38 = Meta_l          
+	shift   alt     keycode  38 = Meta_L          
+	control alt     keycode  38 = Meta_Control_l  
+keycode  39 = semicolon        colon           
+	alt     keycode  39 = Meta_semicolon  
+	shift   alt     keycode  39 = Meta_colon      
+keycode  40 = apostrophe       at
+	control keycode  40 = Control_g       
+	alt     keycode  40 = Meta_apostrophe 
+	shift   alt     keycode  40 = Meta_quotedbl   
+	control alt     keycode  40 = Meta_Control_g  
+keycode  41 = grave            bar      
+	control keycode  41 = nul             
+	alt     keycode  41 = Meta_grave      
+	shift   alt     keycode  41 = Meta_asciitilde
+	control alt     keycode  41 = Meta_nul        
+keycode  42 = Shift           
+keycode  43 = numbersign        asciitilde             
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash  
+	shift   alt     keycode  43 = Meta_bar        
+	control alt     keycode  43 = Meta_Control_backslash
+keycode  44 = +z                +Z               
+	control keycode  44 = Control_z       
+	alt     keycode  44 = Meta_z          
+	shift   alt     keycode  44 = Meta_Z          
+	control alt     keycode  44 = Meta_Control_z  
+keycode  45 = +x                +X               
+	control keycode  45 = Control_x       
+	alt     keycode  45 = Meta_x          
+	shift   alt     keycode  45 = Meta_X          
+	control alt     keycode  45 = Meta_Control_x  
+keycode  46 = +c                +C               
+	control keycode  46 = Control_c       
+	alt     keycode  46 = Meta_c          
+	shift   alt     keycode  46 = Meta_C          
+	control alt     keycode  46 = Meta_Control_c  
+keycode  47 = +v                +V               
+	control keycode  47 = Control_v       
+	alt     keycode  47 = Meta_v          
+	shift   alt     keycode  47 = Meta_V          
+	control alt     keycode  47 = Meta_Control_v  
+keycode  48 = +b                +B               
+	control keycode  48 = Control_b       
+	alt     keycode  48 = Meta_b          
+	shift   alt     keycode  48 = Meta_B          
+	control alt     keycode  48 = Meta_Control_b  
+keycode  49 = +n                +N               
+	control keycode  49 = Control_n       
+	alt     keycode  49 = Meta_n          
+	shift   alt     keycode  49 = Meta_N          
+	control alt     keycode  49 = Meta_Control_n  
+keycode  50 = +m                +M               
+	control keycode  50 = Control_m       
+	alt     keycode  50 = Meta_m          
+	shift   alt     keycode  50 = Meta_M          
+	control alt     keycode  50 = Meta_Control_m  
+keycode  51 = comma            less            
+	alt     keycode  51 = Meta_comma      
+	shift   alt     keycode  51 = Meta_less       
+keycode  52 = period           greater         
+	alt     keycode  52 = Meta_period     
+	shift   alt     keycode  52 = Meta_greater    
+keycode  53 = slash            question        
+	control keycode  53 = Delete          
+	alt     keycode  53 = Meta_slash      
+	shift   alt     keycode  53 = Meta_question   
+	control alt     keycode  53 = Meta_Delete     
+keycode  54 = Shift           
+keycode  55 =
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+	alt     keycode  57 = Meta_space      
+	shift   alt     keycode  57 = Meta_space      
+	control alt     keycode  57 = Meta_nul        
+keycode  58 = Caps_Lock       
+	alt     keycode  58 = Num_Lock        
+keycode  59 = F1               F11              Console_13      
+	control keycode  59 = F1              
+	alt     keycode  59 = Console_1       
+	shift   alt     keycode  59 = Console_11      
+	control alt     keycode  59 = F1              
+keycode  60 = F2               F12              Console_14      
+	control keycode  60 = F2              
+	alt     keycode  60 = Console_2       
+	shift   alt     keycode  60 = Console_12      
+	control alt     keycode  60 = F2              
+keycode  61 = F3               F13              Console_15      
+	control keycode  61 = F3              
+	alt     keycode  61 = Console_3       
+	shift   alt     keycode  61 = Console_13      
+	control alt     keycode  61 = F3              
+keycode  62 = F4               F14              Console_16      
+	control keycode  62 = F4              
+	alt     keycode  62 = Console_4       
+	shift   alt     keycode  62 = Console_14      
+	control alt     keycode  62 = F4              
+keycode  63 = F5               F15              Console_17      
+	control keycode  63 = F5              
+	alt     keycode  63 = Console_5       
+	shift   alt     keycode  63 = Console_15      
+	control alt     keycode  63 = F5              
+keycode  64 = F6               F16              Console_18      
+	control keycode  64 = F6              
+	alt     keycode  64 = Console_6       
+	shift   alt     keycode  64 = Console_16      
+	control alt     keycode  64 = F6              
+keycode  65 = F7               F17              Console_19      
+	control keycode  65 = F7              
+	alt     keycode  65 = Console_7       
+	shift   alt     keycode  65 = Console_17      
+	control alt     keycode  65 = F7              
+keycode  66 = F8               F18              Console_20      
+	control keycode  66 = F8              
+	alt     keycode  66 = Console_8       
+	shift   alt     keycode  66 = Console_18      
+	control alt     keycode  66 = F8              
+keycode  67 = F9               F19              Console_21      
+	control keycode  67 = F9              
+	alt     keycode  67 = Console_9       
+	shift   alt     keycode  67 = Console_19      
+	control alt     keycode  67 = F9              
+keycode  68 = F10              F20              Console_22      
+	control keycode  68 = F10             
+	alt     keycode  68 = Console_10      
+	shift   alt     keycode  68 = Console_20      
+	control alt     keycode  68 = F10             
+keycode  69 =
+keycode  70 =
+keycode  71 = Find            
+	shift   keycode  71 = Select          
+	shift   alt     keycode  71 = Select          
+keycode  72 = Up              
+	shift   keycode  72 = Prior           
+	alt     keycode  72 = Scroll_Backward 
+	shift   alt     keycode  72 = Prior           
+
+keycode  73 =
+keycode  74 = minus     
+keycode  75 = Left            
+
+keycode  76 =
+keycode  77 = Right           
+keycode  78 = plus          
+
+keycode  79 =
+keycode  80 = Down            
+	shift   keycode  80 = Next            
+	alt     keycode  80 = Scroll_Forward  
+	shift   alt     keycode  80 = Next            
+keycode  81 =
+keycode  82 = Insert          
+	alt     keycode  82 = Scroll_Lock     
+keycode  83 = Delete           Delete          
+	alt     keycode  83 = Meta_Delete     
+	shift   alt     keycode  83 = Meta_Delete     
+	control alt     keycode  83 = Boot            
+keycode  84 =
+keycode  85 =
+keycode  86 =
+keycode  87 =
+keycode  88 =
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+
+#keycode  96 =
+keycode  96 = backslash        bar             
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash  
+	shift   alt     keycode  43 = Meta_bar        
+	control alt     keycode  43 = Meta_Control_backslash
+
+keycode  97 = Pause            Break           
+	control keycode  97 = Pause           
+	alt     keycode  97 = Last_Console    
+keycode  98 = Macro            Show_Memory      Help             Help             Show_Registers   VoidSymbol       Help             Help             Show_State       VoidSymbol       Help             Help            
+keycode  99 = parenleft        parenleft        VoidSymbol       VoidSymbol       parenleft        parenleft        VoidSymbol       VoidSymbol       parenleft        parenleft        VoidSymbol       VoidSymbol       parenleft        parenleft       
+keycode 100 = parenright       parenright       VoidSymbol       VoidSymbol       parenright       parenright       VoidSymbol       VoidSymbol       parenright       parenright       VoidSymbol       VoidSymbol       parenright       parenright      
+
+keycode 101 = slash       
+keycode 102 = asterisk     
+keycode 103 = seven            
+	alt     keycode 103 = Ascii_7         
+keycode 104 = eight            
+	alt     keycode 104 = Ascii_8         
+keycode 105 = nine            
+	alt     keycode 105 = Ascii_9         
+keycode 106 = four            
+	alt     keycode 106 = Ascii_4         
+keycode 107 = five            
+	alt     keycode 107 = Ascii_5         
+keycode 108 = six            
+	alt     keycode 108 = Ascii_6         
+keycode 109 = one            
+	alt     keycode 109 = Ascii_1         
+keycode 110 = two            
+	alt     keycode 110 = Ascii_2         
+keycode 111 = three            
+	alt     keycode 111 = Ascii_3         
+keycode 112 = zero            
+	alt     keycode 112 = Ascii_0         
+keycode 113 = period       
+	altgr   control keycode 113 = Boot            
+keycode 114 = Return        
+
+keycode 115 = 
+keycode 116 = 
+keycode 117 = 
+keycode 118 = 
+keycode 119 = 
+keycode 120 = 
+keycode 121 = 
+keycode 122 = 
+keycode 123 = 
+keycode 124 = 
+keycode 125 = 
+keycode 126 = 
+keycode 127 = 
diff --git a/keymaps/atari/atari-us.map b/keymaps/atari/atari-us.map
new file mode 100644
index 0000000..97a1734
--- /dev/null
+++ b/keymaps/atari/atari-us.map
@@ -0,0 +1,422 @@
+charset "iso-8859-1"
+keymaps 0-2,4-5,8-9,12-13
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape           Escape          
+	alt	keycode   1 = Meta_Escape     
+	shift	alt	keycode   1 = Meta_Escape     
+keycode   2 = one              exclam          
+	alt	keycode   2 = Meta_one        
+	shift	alt	keycode   2 = Meta_exclam     
+keycode   3 = two              at               at               nul             
+	alt	keycode   3 = Meta_two        
+	shift	alt	keycode   3 = Meta_at         
+	control	alt	keycode   3 = Meta_nul        
+keycode   4 = three            numbersign      
+	control	keycode   4 = Escape          
+	alt	keycode   4 = Meta_three      
+	shift	alt	keycode   4 = Meta_numbersign 
+	control	alt	keycode   4 = Meta_Escape     
+keycode   5 = four             dollar           dollar           Control_backslash
+	alt	keycode   5 = Meta_four       
+	shift	alt	keycode   5 = Meta_dollar     
+	control	alt	keycode   5 = Meta_Control_backslash
+keycode   6 = five             percent         
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five       
+	shift	alt	keycode   6 = Meta_percent    
+	control	alt	keycode   6 = Meta_Control_bracketright
+keycode   7 = six              asciicircum     
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six        
+	shift	alt	keycode   7 = Meta_asciicircum
+	control	alt	keycode   7 = Meta_Control_asciicircum
+keycode   8 = seven            ampersand        braceleft        Control_underscore
+	alt	keycode   8 = Meta_seven      
+	shift	alt	keycode   8 = Meta_ampersand  
+	control	alt	keycode   8 = Meta_Control_underscore
+keycode   9 = eight            asterisk         bracketleft      Delete          
+	alt	keycode   9 = Meta_eight      
+	shift	alt	keycode   9 = Meta_asterisk   
+	control	alt	keycode   9 = Meta_Delete     
+keycode  10 = nine             parenleft        bracketright    
+	alt	keycode  10 = Meta_nine       
+	shift	alt	keycode  10 = Meta_parenleft  
+keycode  11 = zero             parenright       braceright      
+	alt	keycode  11 = Meta_zero       
+	shift	alt	keycode  11 = Meta_parenright 
+keycode  12 = minus            underscore       backslash        Delete          
+	alt	keycode  12 = Meta_minus      
+	shift	alt	keycode  12 = Meta_underscore 
+	control	alt	keycode  12 = Meta_Delete     
+keycode  13 = equal            plus            
+	alt	keycode  13 = Meta_equal      
+	shift	alt	keycode  13 = Meta_plus       
+keycode  14 = BackSpace        BackSpace       
+	control	keycode  14 = BackSpace       
+	shift	control	keycode  14 = BackSpace       
+	alt	keycode  14 = Meta_BackSpace  
+	shift	alt	keycode  14 = Meta_BackSpace  
+	control	alt	keycode  14 = Meta_BackSpace  
+	shift	control	alt	keycode  14 = Meta_BackSpace  
+keycode  15 = Tab              Tab             
+	alt	keycode  15 = Meta_Tab        
+	shift	alt	keycode  15 = Meta_Tab        
+keycode  16 = +q                +Q                +q                Control_q       
+	alt	keycode  16 = Meta_q          
+	shift	alt	keycode  16 = Meta_Q          
+	control	alt	keycode  16 = Meta_Control_q  
+keycode  17 = +w                +W                +w                Control_w       
+	alt	keycode  17 = Meta_w          
+	shift	alt	keycode  17 = Meta_W          
+	control	alt	keycode  17 = Meta_Control_w  
+keycode  18 = +e                +E                Hex_E            Control_e       
+	alt	keycode  18 = Meta_e          
+	shift	alt	keycode  18 = Meta_E          
+	control	alt	keycode  18 = Meta_Control_e  
+keycode  19 = +r                +R                +r                Control_r       
+	alt	keycode  19 = Meta_r          
+	shift	alt	keycode  19 = Meta_R          
+	control	alt	keycode  19 = Meta_Control_r  
+keycode  20 = +t                +T                +t                Control_t       
+	alt	keycode  20 = Meta_t          
+	shift	alt	keycode  20 = Meta_T          
+	control	alt	keycode  20 = Meta_Control_t  
+keycode  21 = +y                +Y                +y                Control_y       
+	alt	keycode  21 = Meta_y          
+	shift	alt	keycode  21 = Meta_Y          
+	control	alt	keycode  21 = Meta_Control_y  
+keycode  22 = +u                +U                +u                Control_u       
+	alt	keycode  22 = Meta_u          
+	shift	alt	keycode  22 = Meta_U          
+	control	alt	keycode  22 = Meta_Control_u  
+keycode  23 = +i                +I                +i                Tab             
+	alt	keycode  23 = Meta_i          
+	shift	alt	keycode  23 = Meta_I          
+	control	alt	keycode  23 = Meta_Tab        
+keycode  24 = +o                +O                +o                Control_o       
+	alt	keycode  24 = Meta_o          
+	shift	alt	keycode  24 = Meta_O          
+	control	alt	keycode  24 = Meta_Control_o  
+keycode  25 = +p                +P                +p                Control_p       
+	alt	keycode  25 = Meta_p          
+	shift	alt	keycode  25 = Meta_P          
+	control	alt	keycode  25 = Meta_Control_p  
+keycode  26 = bracketleft      braceleft       
+	control	keycode  26 = Escape          
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft  
+	control	alt	keycode  26 = Meta_Escape     
+keycode  27 = bracketright     braceright       asciitilde       Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright 
+	control	alt	keycode  27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt	keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+keycode  30 = +a                +A                Hex_A            Control_a       
+	alt	keycode  30 = Meta_a          
+	shift	alt	keycode  30 = Meta_A          
+	control	alt	keycode  30 = Meta_Control_a  
+keycode  31 = +s                +S                +s                Control_s       
+	alt	keycode  31 = Meta_s          
+	shift	alt	keycode  31 = Meta_S          
+	control	alt	keycode  31 = Meta_Control_s  
+keycode  32 = +d                +D                Hex_D            Control_d       
+	alt	keycode  32 = Meta_d          
+	shift	alt	keycode  32 = Meta_D          
+	control	alt	keycode  32 = Meta_Control_d  
+keycode  33 = +f                +F                Hex_F            Control_f       
+	alt	keycode  33 = Meta_f          
+	shift	alt	keycode  33 = Meta_F          
+	control	alt	keycode  33 = Meta_Control_f  
+keycode  34 = +g                +G                +g                Control_g       
+	alt	keycode  34 = Meta_g          
+	shift	alt	keycode  34 = Meta_G          
+	control	alt	keycode  34 = Meta_Control_g  
+keycode  35 = +h                +H                +h                BackSpace       
+	alt	keycode  35 = Meta_h          
+	shift	alt	keycode  35 = Meta_H          
+	control	alt	keycode  35 = Meta_BackSpace  
+keycode  36 = +j                +J                +j                Linefeed        
+	alt	keycode  36 = Meta_j          
+	shift	alt	keycode  36 = Meta_J          
+	control	alt	keycode  36 = Meta_Linefeed   
+keycode  37 = +k                +K                +k                Control_k       
+	alt	keycode  37 = Meta_k          
+	shift	alt	keycode  37 = Meta_K          
+	control	alt	keycode  37 = Meta_Control_k  
+keycode  38 = +l                +L                +l                Control_l       
+	alt	keycode  38 = Meta_l          
+	shift	alt	keycode  38 = Meta_L          
+	control	alt	keycode  38 = Meta_Control_l  
+keycode  39 = semicolon        colon           
+	alt	keycode  39 = Meta_semicolon  
+	shift	alt	keycode  39 = Meta_colon      
+keycode  40 = apostrophe       quotedbl        
+	control	keycode  40 = Control_g       
+	alt	keycode  40 = Meta_apostrophe 
+	shift	alt	keycode  40 = Meta_quotedbl   
+	control	alt	keycode  40 = Meta_Control_g  
+keycode  41 = grave            asciitilde      
+	control	keycode  41 = nul             
+	alt	keycode  41 = Meta_grave      
+	shift	alt	keycode  41 = Meta_asciitilde 
+	control	alt	keycode  41 = Meta_nul        
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash  
+	shift	alt	keycode  43 = Meta_bar        
+	control	alt	keycode  43 = Meta_Control_backslash
+keycode  44 = +z                +Z                +z                Control_z       
+	alt	keycode  44 = Meta_z          
+	shift	alt	keycode  44 = Meta_Z          
+	control	alt	keycode  44 = Meta_Control_z  
+keycode  45 = +x                +X                +x                Control_x       
+	alt	keycode  45 = Meta_x          
+	shift	alt	keycode  45 = Meta_X          
+	control	alt	keycode  45 = Meta_Control_x  
+keycode  46 = +c                +C                Hex_C            Control_c       
+	alt	keycode  46 = Meta_c          
+	shift	alt	keycode  46 = Meta_C          
+	control	alt	keycode  46 = Meta_Control_c  
+keycode  47 = +v                +V                +v                Control_v       
+	alt	keycode  47 = Meta_v          
+	shift	alt	keycode  47 = Meta_V          
+	control	alt	keycode  47 = Meta_Control_v  
+keycode  48 = +b                +B                Hex_B            Control_b       
+	alt	keycode  48 = Meta_b          
+	shift	alt	keycode  48 = Meta_B          
+	control	alt	keycode  48 = Meta_Control_b  
+keycode  49 = +n                +N                +n                Control_n       
+	alt	keycode  49 = Meta_n          
+	shift	alt	keycode  49 = Meta_N          
+	control	alt	keycode  49 = Meta_Control_n  
+keycode  50 = +m                +M                +m                Control_m       
+	alt	keycode  50 = Meta_m          
+	shift	alt	keycode  50 = Meta_M          
+	control	alt	keycode  50 = Meta_Control_m  
+keycode  51 = comma            less            
+	alt	keycode  51 = Meta_comma      
+	shift	alt	keycode  51 = Meta_less       
+keycode  52 = period           greater         
+	alt	keycode  52 = Meta_period     
+	shift	alt	keycode  52 = Meta_greater    
+keycode  53 = slash            question        
+	control	keycode  53 = Delete          
+	alt	keycode  53 = Meta_slash      
+	shift	alt	keycode  53 = Meta_question   
+	control	alt	keycode  53 = Meta_Delete     
+keycode  54 = Shift           
+keycode  55 =
+	altgr	keycode  55 = KP_Multiply     
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control	keycode  57 = nul             
+	alt	keycode  57 = Meta_space      
+	shift	alt	keycode  57 = Meta_space      
+	control	alt	keycode  57 = Meta_nul        
+keycode  58 = Caps_Lock       
+	alt	keycode  58 = Num_Lock        
+keycode  59 = F1              
+	shift	keycode  59 = F11             
+	altgr	keycode  59 = Console_13      
+	shift	control	keycode  59 = VoidSymbol      
+	alt	keycode  59 = Console_1       
+	shift	alt	keycode  59 = Console_11      
+	shift	control	alt	keycode  59 = VoidSymbol      
+keycode  60 = F2              
+	shift	keycode  60 = F12             
+	altgr	keycode  60 = Console_14      
+	shift	control	keycode  60 = VoidSymbol      
+	alt	keycode  60 = Console_2       
+	shift	alt	keycode  60 = Console_12      
+	shift	control	alt	keycode  60 = VoidSymbol      
+keycode  61 = F3              
+	shift	keycode  61 = F13             
+	altgr	keycode  61 = Console_15      
+	shift	control	keycode  61 = VoidSymbol      
+	alt	keycode  61 = Console_3       
+	shift	alt	keycode  61 = Console_13      
+	shift	control	alt	keycode  61 = VoidSymbol      
+keycode  62 = F4              
+	shift	keycode  62 = F14             
+	altgr	keycode  62 = Console_16      
+	shift	control	keycode  62 = VoidSymbol      
+	alt	keycode  62 = Console_4       
+	shift	alt	keycode  62 = Console_14      
+	shift	control	alt	keycode  62 = VoidSymbol      
+keycode  63 = F5              
+	shift	keycode  63 = F15             
+	altgr	keycode  63 = Console_17      
+	shift	control	keycode  63 = VoidSymbol      
+	alt	keycode  63 = Console_5       
+	shift	alt	keycode  63 = Console_15      
+	shift	control	alt	keycode  63 = VoidSymbol      
+keycode  64 = F6              
+	shift	keycode  64 = F16             
+	altgr	keycode  64 = Console_18      
+	shift	control	keycode  64 = VoidSymbol      
+	alt	keycode  64 = Console_6       
+	shift	alt	keycode  64 = Console_16      
+	shift	control	alt	keycode  64 = VoidSymbol      
+keycode  65 = F7              
+	shift	keycode  65 = F17             
+	altgr	keycode  65 = Console_19      
+	shift	control	keycode  65 = VoidSymbol      
+	alt	keycode  65 = Console_7       
+	shift	alt	keycode  65 = Console_17      
+	shift	control	alt	keycode  65 = VoidSymbol      
+keycode  66 = F8              
+	shift	keycode  66 = F18             
+	altgr	keycode  66 = Console_20      
+	shift	control	keycode  66 = VoidSymbol      
+	alt	keycode  66 = Console_8       
+	shift	alt	keycode  66 = Console_18      
+	shift	control	alt	keycode  66 = VoidSymbol      
+keycode  67 = F9              
+	shift	keycode  67 = F19             
+	altgr	keycode  67 = Console_21      
+	shift	control	keycode  67 = VoidSymbol      
+	alt	keycode  67 = Console_9       
+	shift	alt	keycode  67 = Console_19      
+	shift	control	alt	keycode  67 = VoidSymbol      
+keycode  68 = F10             
+	shift	keycode  68 = F20             
+	altgr	keycode  68 = Console_22      
+	shift	control	keycode  68 = VoidSymbol      
+	alt	keycode  68 = Console_10      
+	shift	alt	keycode  68 = Console_20      
+	shift	control	alt	keycode  68 = VoidSymbol      
+keycode  69 =
+	altgr	keycode  69 = Num_Lock        
+keycode  70 =
+	altgr	keycode  70 = Show_Registers  
+keycode  71 = Find            
+	shift	keycode  71 = Select          
+	altgr	keycode  71 = Hex_7           
+	shift	control	keycode  71 = Select          
+	shift	alt	keycode  71 = Select          
+	shift	control	alt	keycode  71 = Select          
+keycode  72 = Up              
+	shift	keycode  72 = Prior           
+	altgr	keycode  72 = Hex_8           
+	alt	keycode  72 = Scroll_Backward 
+	shift	alt	keycode  72 = Prior           
+keycode  73 =
+	altgr	keycode  73 = Hex_9           
+keycode  74 = KP_Subtract     
+keycode  75 = Left            
+	altgr	keycode  75 = Hex_4           
+keycode  76 =
+	altgr	keycode  76 = Hex_5           
+keycode  77 = Right           
+	altgr	keycode  77 = Hex_6           
+keycode  78 = KP_Add          
+keycode  79 =
+	altgr	keycode  79 = Hex_1           
+keycode  80 = Down            
+	shift	keycode  80 = Next            
+	altgr	keycode  80 = Hex_2           
+	alt	keycode  80 = Scroll_Forward  
+	shift	alt	keycode  80 = Next            
+keycode  81 =
+	altgr	keycode  81 = Hex_3           
+keycode  82 = Insert          
+	altgr	keycode  82 = Hex_0           
+	alt	keycode  82 = Scroll_Lock     
+keycode  83 = Delete           Delete           KP_Period        Delete          
+	alt	keycode  83 = Meta_Delete     
+	shift	alt	keycode  83 = Meta_Delete     
+	control	alt	keycode  83 = Delete          
+keycode  84 =
+	altgr	keycode  84 = Last_Console    
+keycode  85 =
+keycode  86 =
+	altgr	keycode  86 = bar             
+keycode  87 =
+	altgr	keycode  87 = Console_23      
+keycode  88 =
+	altgr	keycode  88 = Console_24      
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 =
+	altgr	keycode  96 = KP_Enter        
+keycode  97 = F24              Break            Control          F24             
+	alt	keycode  97 = Last_Console    
+	control	alt	keycode  97 = F24             
+keycode  98 = Help             Show_Memory      KP_Divide        Show_Registers  
+	alt	keycode  98 = Show_State      
+	control	alt	keycode  98 = Show_Registers  
+keycode  99 = parenleft        parenleft       
+	control	keycode  99 = parenleft       
+	shift	control	keycode  99 = parenleft       
+	alt	keycode  99 = parenleft       
+	shift	alt	keycode  99 = parenleft       
+	control	alt	keycode  99 = parenleft       
+	shift	control	alt	keycode  99 = parenleft       
+keycode 100 = parenright       parenright       AltGr            parenright       parenright       parenright       parenright       parenright       parenright      
+keycode 101 = KP_Divide       
+	altgr	keycode 101 = Break           
+keycode 102 = KP_Multiply     
+	altgr	keycode 102 = Find            
+keycode 103 = KP_7            
+	altgr	keycode 103 = Up              
+	alt	keycode 103 = Ascii_7         
+keycode 104 = KP_8            
+	altgr	keycode 104 = Prior           
+	alt	keycode 104 = Ascii_8         
+keycode 105 = KP_9            
+	altgr	keycode 105 = Left            
+	alt	keycode 105 = Ascii_9         
+keycode 106 = KP_4            
+	altgr	keycode 106 = Right           
+	alt	keycode 106 = Ascii_4         
+keycode 107 = KP_5            
+	altgr	keycode 107 = Select          
+	alt	keycode 107 = Ascii_5         
+keycode 108 = KP_6            
+	altgr	keycode 108 = Down            
+	alt	keycode 108 = Ascii_6         
+keycode 109 = KP_1            
+	altgr	keycode 109 = Next            
+	alt	keycode 109 = Ascii_1         
+keycode 110 = KP_2            
+	altgr	keycode 110 = Insert          
+	alt	keycode 110 = Ascii_2         
+keycode 111 = KP_3            
+	altgr	keycode 111 = Remove          
+	alt	keycode 111 = Ascii_3         
+keycode 112 = KP_0            
+	altgr	keycode 112 = Macro           
+	alt	keycode 112 = Ascii_0         
+keycode 113 = KP_Period       
+	altgr	keycode 113 = F13             
+keycode 114 = KP_Enter        
+	altgr	keycode 114 = F14             
+keycode 115 =
+	altgr	keycode 115 = Help            
+keycode 116 =
+	altgr	keycode 116 = Do              
+keycode 117 =
+	altgr	keycode 117 = F17             
+keycode 118 =
+	altgr	keycode 118 = KP_MinPlus      
+keycode 119 =
+	altgr	keycode 119 = Pause           
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+
diff --git a/keymaps/i386/README b/keymaps/i386/README
new file mode 100644
index 0000000..a5bc6d2
--- /dev/null
+++ b/keymaps/i386/README
@@ -0,0 +1,27 @@
+These maps are as contributed. Use at your own risk.
+(But please tell me if something is seriously wrong.)
+Mail corrections, improvements and new maps to aeb@cwi.nl.
+
+Several corrections were pointed out by Tom.Kartes@Materna.DE.
+
+mk_modmap is a utility that might help synchronizing
+your keymaps for loadkeys and for xmodmap (but note that
+(since version 2.1 of XFree86) X initialises its keymap using
+the Linux keymap, so that xmodmap will often be superfluous).
+
+Since version 0.87, put a line `charset "iso-8859-x"' in front
+of a map, when you are using symbols outside iso-8859-1.
+
+Since version 0.88, put a line `keymaps 0-1,4-5,8,12' or so
+in front of a map, in order to indicate what keymaps should
+be used.
+
+hypermap.m4 was contributed by shields@tembel.org (Michael Shields).
+Use: m4 hypermap.m4 | loadkeys .
+
+Please, if you submit something that includes compose key
+combinations, uuencode the keymap, since SMTP-compliant
+mailers will strip the eighth bit.
+
+Andries
+
diff --git a/keymaps/i386/azerty/azerty.map b/keymaps/i386/azerty/azerty.map
new file mode 100644
index 0000000..7f19fca
--- /dev/null
+++ b/keymaps/i386/azerty/azerty.map
@@ -0,0 +1,62 @@
+# This describes the key engravings on an AZERTY keyboard (brand Tandon)
+# that I just got. It might be useful in French-speaking countries.
+# aeb - April 1994.
+charset "iso-8859-1"
+keymaps 0-2,4-5,8,12
+include "azerty-layout"
+include "linux-with-two-alt-keys"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape           Escape          
+keycode   2 = ampersand        one              bar             
+	alt     keycode   2 = bar             
+keycode   3 = eacute           two              at
+        control keycode   3 = nul
+        control shift keycode 3 = nul             
+	alt     keycode   3 = at              
+keycode   4 = quotedbl         three            numbersign      
+	alt     keycode   4 = numbersign      
+keycode   5 = apostrophe       four            
+keycode   6 = parenleft        five            
+keycode   7 = section          six              asciicircum     
+	alt     keycode   7 = asciicircum     
+keycode   8 = egrave           seven           
+keycode   9 = exclam           eight           
+keycode  10 = ccedilla         nine             braceleft       
+	alt     keycode  10 = braceleft       
+keycode  11 = agrave           zero             braceright      
+	alt     keycode  11 = braceright      
+keycode  12 = parenright       degree          
+keycode  13 = minus            underscore       backslash
+	control keycode  13 = Control_underscore
+	control shift keycode  13 = Control_underscore
+keycode  14 = Delete           Delete          
+keycode  15 = Tab              Tab             
+keycode  26 = dead_circumflex  dead_diaeresis   bracketleft     
+	control keycode  26 = Escape          
+	alt     keycode  26 = bracketleft     
+keycode  27 = dollar           asterisk         bracketright    
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = bracketright    
+keycode  28 = Return          
+keycode  29 = Control         
+keycode  40 = ugrave           percent          acute           
+	alt     keycode  40 = dead_acute      
+keycode  41 = twosuperior      threesuperior   
+keycode  42 = Shift           
+keycode  43 = mu               sterling         grave           
+	alt     keycode  43 = dead_grave      
+keycode  50 = comma            question        
+keycode  51 = semicolon        period          
+keycode  52 = colon            slash           
+keycode  53 = equal            plus             asciitilde      
+	alt     keycode  53 = asciitilde      
+keycode  54 = Shift           
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+keycode  58 = Caps_Lock       
+keycode  86 = less             greater          backslash       
+	alt     keycode  86 = backslash       
+keycode  97 = Control         
diff --git a/keymaps/i386/azerty/be-latin1.map b/keymaps/i386/azerty/be-latin1.map
new file mode 100644
index 0000000..878be52
--- /dev/null
+++ b/keymaps/i386/azerty/be-latin1.map
@@ -0,0 +1,72 @@
+# This map derived from one contributed by Robert Herzog <rherzog@ulb.ac.be>.
+keymaps 0-2,4,6,8,12
+alt_is_meta
+include "azerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape
+keycode   2 = ampersand        one              bar
+	alt	keycode   2 = Meta_one
+keycode   3 = eacute           two              at
+	control keycode   3 = nul
+	alt	keycode   3 = Meta_two
+keycode   4 = quotedbl         three            numbersign
+	control keycode   4 = Escape
+	alt	keycode   4 = Meta_three
+keycode   5 = apostrophe       four
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = parenleft        five
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = paragraph        six              dead_circumflex
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = egrave           seven
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = exclam           eight
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = ccedilla         nine             braceleft
+	alt     keycode  10 = Meta_nine
+keycode  11 = agrave           zero             braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = parenright       degree
+	control keycode  12 = Control_underscore
+keycode  13 = minus            underscore
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = dead_circumflex     dead_diaeresis     bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dollar           asterisk          bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  40 = ugrave              percent        dead_acute
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = mu         sterling                dead_grave
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 =
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  50 = comma            question
+keycode  51 = semicolon        period
+keycode  52 = colon            slash
+keycode  53 = equal            plus        dead_tilde
+	control keycode  53 = Delete
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/azerty/be2-latin1.map b/keymaps/i386/azerty/be2-latin1.map
new file mode 100644
index 0000000..2c8723e
--- /dev/null
+++ b/keymaps/i386/azerty/be2-latin1.map
@@ -0,0 +1,20 @@
+#From srtxg@habcnx.interpac.be Wed Apr 26 07:21:00 1995
+#
+#I've seen some (minor) differences between be-latin1.map and my own keyboard,
+#so I send you the modified keymap.
+#(the differences are twosuperior and threesuperior added(keycode 41), grave at
+#the correct place(43), and changed the ^ on the numbers row (7) to have the
+#same behaviour than in ms-dos)
+
+# be-latin1.map modified by Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org>
+include "be-latin1.map"
+
+	altgr keycode 7 = asciicircum
+keycode  41 = twosuperior  threesuperior
+keycode  43 = mu  sterling  dead_grave
+	alt keycode 43 = Meta_grave
+
+# be-latin1.map has here:
+# altgr keycode 7 = dead_circumflex
+# keycode  41 = mu         sterling                dead_grave
+# keycode  43 = <absent>
diff --git a/keymaps/i386/azerty/fr-latin0.map b/keymaps/i386/azerty/fr-latin0.map
new file mode 100644
index 0000000..90a09f9
--- /dev/null
+++ b/keymaps/i386/azerty/fr-latin0.map
@@ -0,0 +1,648 @@
+# Copyright (c) 1997, 1998 Guylhem Aznar <guylhem @ oeil.qc.ca> : GPL
+# Copyright (c) 1997 Pierre-Charles David <pcdavid @ club-internet.fr>
+#
+# Les accents circonflexes des principales voyelles sont obtenus avec
+# la touche Alt_Gr, les trémas sont obtenus par Alt_Gr + Shift.
+#
+#  ____                                     _________ _____________ _______
+# | S A| S = Shift,  A = AltGr + Shift     | Compose | Arrêt défil | Pause |
+# | s a| s = normal, a = AltGr             |  Ferme  | Mem/Reg/Ste | Halte |
+#  ¯¯¯¯                                     ¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯
+#  ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______
+# | ½ «| 1 ·| 2 É| 3 ¸| 4 ´| 5 ¨| 6 ¦| 7 È| 8 ¯| 9 Ç| 0 À| ° ÿ| + ¾| <--   |
+# | ¼ »| & '| é ~| " #| ' {| ( [| - || è `| _ \| ç ^| à @| ) ]| = }|       |
+#  ========================================================================
+# | |<-  | A ä| Z Å| E ë| R Ç| T Þ| Y Ý| U ü| I ï| O ö| P '| " `| $ ê|   , |
+# |  ->| | a â| z å| e ¤| r ç| t þ| y ý| u û| i î| o ô| p ¶| ^ ~| £ ¢| <-' |
+#  ===================================================================¬    |
+# |       | Q Ä| S Ø| D Ë| F ª| G Æ| H Ð| J Ü| K Ï| L Ö| M º| % Ù| µ ¥|    |
+# | MAJ   | q Â| s ø| d Ê| f ±| g æ| h ð| j Û| k Î| l Ô| m ¹| ù ²| * ³|    |
+#  ========================================================================
+# | ^   | >  | W  | X  | C  | V  | B  | N  | ?  | .  | /  | §  |     ^     |
+# | |   | < || w «| x »| c ©| v ®| b ß| n ¬| , ¿| ; ×| : ÷| ! ¡|     |     |
+#  ========================================================================
+# |      |      |      |                       |       |      |     |      |
+# | Ctrl | Con+ | Alt  | Space    Nobreakspace | AltGr | Con- | Con | Ctrl |
+#  ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯
+#
+# 1. Control & Alt
+#
+# Les définitions de Alt & Control (touche) sont *NORMALEMENT* implicites ;
+# n'ont donc été redéfinis qu'Alt (nombre) & Alt + Shift (nombre) pour
+# inverser le comportement par défaut ainsi que les Alt(azqwm) pour coller
+# au clavier AZERTY au lieu de QWERTY :
+#
+# 		touche = signe
+#		touche + Shift = nombre
+#
+# La correspondance devient donc :
+#
+# 		Alt touche = Meta_nombre
+#		Alt + Shift touche = Meta_signe
+#
+# Signalez-moi si cette correspondance n'est pas implicite chez vous !
+#
+# 2. Hexadécimal :
+#
+# Shift (touche du pavé numérique) permet de taper de l'héxadécimal.
+#
+# 3. Fonctions :
+#
+# Redémarrer ou arrêter l'ordinateur, sont disponibles directement au clavier
+#
+#		Control Alt Delete/Backspace : redémarrer
+#		AltGr + Impr. Écran : arrêter
+#
+# Ajouter pour ces deux fonction les lignes suivantes à /etc/inittab :
+#
+#		ca:12345:ctrlaltdel:/sbin/shutdown -t1 -r now
+#		kb:12345:kbrequest:/sbin/halt
+#
+# 4. Accentuations :
+#
+# Les touches é, è, ç, à & ù, présentes en mode minuscule (i.e. sans shift)
+# ne sont pas disponibles en mode majuscule : elles sont respectivement
+# remplacées par 2, 7, 9, 0 & % ; donc pour obtenir les majuscules
+# accentuées É, È, Ç, À & Ù:
+#
+#	* Si les dead_keys ne fonctionnaient pas (certains programmes
+#	les refusent), vous pouvez toujours utiliser AltGr + Shift
+#	(minuscule accentuée) pour obtenir la majuscule ; pour
+#	l'accent circonflexe & le tréma :
+#
+#		AltGr (voyelle) : voyelle-minuscule ^
+#		AltGr + Shift (voyelle) : voyelle-minuscule "
+#		AltGr (en dessous de la voyelle) : voyelle-majuscule ^
+#		AltGr + Shift (en dessous de la voyelle) : voyelle majuscule "
+#
+# Seule exception : AltGr (e) donnant l'euro ¤, AltGr + Shift ($) donne ê 
+#
+#	* Si les dead_keys fonctionnent, utiliser les accent dits
+#	«morts», i.e. fonctionnant comme l'accent circonflexe & le
+#	tréma des machines à écrire ; sont disponibles :
+#
+#		(^) : accent circonflexe,
+#		Shift+  (^) : tréma,
+#		Shift + AltGr (^) : tilde,
+#		AltGr (1) : accent aigü,
+#		AltGr (7) : accent grave
+#
+# Pour s'en servir, procéder comme avec l'accent circonflexe & le tréma
+# sur les vielles machines à écrire :
+#
+#		AltGr (1) puis e : é
+#		Shift+AltGr (1) puis e : É ...
+#
+# 5. Les touches supplémentaires des claviers 105 touches
+#
+# Celles-ci servent à changer de console très facilement :
+#		Window Gauche : décrémente console
+#		Window Droite : incrémente console
+#		Souris sur menu : précédente console
+#
+# 6. Mode majuscule (CapsLock)
+#
+# Celui-ci à été refait pour correspondre à celui par défaut des veilles
+# machines à écrite ou PC sous d'autres systèmes d'exploitation :
+#		CapsLock : passe toutes les touches en mode majuscule
+#		CapsLock à nouveau : repasse toutes les touches en minuscules
+#		Shift + touche : touche temporairement en majuscule
+#		Shift après CapsLock : repasse toues les touches en minuscules
+
+keycode   0 =
+
+keycode   1 = Escape
+
+keycode   2 = +ampersand        +one              dead_acute       periodcentered
+        alt     keycode 2 = Meta_one
+        alt     shift   keycode 2 = Meta_ampersand
+
+keycode   3 = +eacute           +two              tilde            Eacute
+        alt     keycode 3 = Meta_two
+        alt     shift   keycode 3 = Meta_asciitilde
+
+keycode   4 = +quotedbl         +three            numbersign       cedilla
+        alt     keycode 4 = Meta_three
+        alt     shift   keycode 4 = Meta_quotedbl
+
+keycode   5 = +apostrophe       +four             braceleft        acute
+        alt     keycode 5 = Meta_four
+        alt     shift   keycode 5 = Meta_apostrophe
+
+keycode   6 = +parenleft        +five             bracketleft      diaeresis
+        alt     keycode 6 = Meta_five
+        alt     shift   keycode 6 = Meta_parenleft
+
+keycode   7 = +minus            +six              bar              brokenbar
+        alt     keycode 7 = Meta_six
+        alt     shift   keycode 7 = Meta_minus
+
+keycode   8 = +egrave           +seven            dead_grave       Egrave
+        alt     keycode 8 = Meta_seven
+        alt     shift   keycode  8 = Meta_grave
+
+keycode   9 = +underscore       +eight            backslash        macron
+        alt     keycode 9 = Meta_eight
+        alt     shift   keycode 9 = Meta_underscore
+
+keycode  10 = +ccedilla         +nine             asciicircum      Ccedilla
+        alt     keycode 10 = Meta_nine
+        alt     shift   keycode 10 = Meta_asciicircum
+
+keycode  11 = +agrave           +zero             at               Agrave
+        alt     keycode 11 = Meta_zero
+        alt     shift   keycode 11 = Meta_at
+
+keycode  12 = +parenright       +degree           bracketright     ydiaeresis
+        alt     keycode 12 = Meta_parenright
+        alt     shift   keycode  12 = Meta_bracketright
+
+keycode  13 = +equal            +plus             braceright       threequarters
+        alt     keycode 13 = Meta_equal
+        alt     shift   keycode  13 = Meta_plus
+
+keycode  14 = Delete           BackSpace
+        alt     keycode 111 = Meta_backslash
+        control keycode 111 = Control_backslash
+        alt     control keycode 14 = Boot
+        altgr   control keycode 14 = KeyboardSignal
+
+keycode  15 = Tab
+	control keycode  15 = Meta_Tab
+	alt     keycode	 15 = Last_Console
+
+keycode  16 = +a                +A		acircumflex     adiaeresis
+        control keycode 16 = Control_a
+
+keycode  17 = +z                +Z		aring           Aring
+        control keycode 17 = Control_z
+
+keycode  18 = +e                +E		currency        ediaeresis
+
+keycode  19 = +r                +R		ccedilla	Ccedilla
+
+keycode  20 = +t                +T		thorn		THORN
+
+keycode  21 = +y                +Y		yacute          Yacute
+
+keycode  22 = +u                +U		ucircumflex	udiaeresis
+
+keycode  23 = +i                +I		icircumflex	idiaeresis
+
+keycode  24 = +o                +O		ocircumflex 	odiaeresis
+
+keycode  25 = +p                +P		paragraph       apostrophe
+
+keycode  26 = dead_circumflex	dead_diaeresis	dead_tilde      grave
+
+keycode  27 = +dollar		+sterling	cent            ecircumflex
+
+keycode  28 = Return
+        alt     keycode  28 = 0x080d
+        altgr   keycode  26 = Linefeed
+
+keycode  29 = Control
+
+keycode  30 = +q                +Q		Acircumflex	Adiaeresis
+        control keycode 30 = Control_q
+
+keycode  31 = +s                +S		oslash		Ooblique
+
+keycode  32 = +d                +D		Ecircumflex	Ediaeresis 
+
+keycode  33 = +f                +F		plusminus	ordfeminine
+
+keycode  34 = +g                +G		ae		AE
+
+keycode  35 = +h                +H		eth		ETH
+
+keycode  36 = +j                +J		Ucircumflex	Udiaeresis
+
+keycode  37 = +k                +K		Icircumflex     Idiaeresis
+
+keycode  38 = +l                +L		Ocircumflex     Odiaeresis
+
+keycode  39 = +m                +M		onesuperior     masculine
+	alt     keycode 39 = Meta_semicolon
+        control keycode 39 = Control_m
+
+keycode  40 = +ugrave           +percent	twosuperior     +Ugrave
+#
+# Les 2 solutions de l'ancien comportement sont remplacées pour la norme latin0
+#
+#keycode  41 = twosuperior      threesuperior	onesuperior	macron
+#keycode  41 = guillemotleft    guillemotright   twosuperior	threesuperior
+keycode  41 =  +onehalf       +onequarter	guillemotleft	guillemotright
+	control keycode 41 = nul
+	alt     keycode 41 = Meta_grave
+
+keycode  42 = CapsShift
+
+keycode  43 = +asterisk         +mu		threesuperior	yen
+
+keycode  44 = +w                +W		guillemotleft
+        control keycode 44 = Control_w
+
+keycode  45 = +x                +X		guillemotright
+
+keycode  46 = +c                +C		copyright
+
+keycode  47 = +v                +V		registered
+
+keycode  48 = +b                +B		ssharp
+
+keycode  49 = +n                +N		notsign
+
+keycode  50 = +comma            +question	questiondown
+
+keycode  51 = +semicolon        +period		multiply
+
+keycode  52 = +colon            +slash		division
+
+keycode  53 = +exclam           +section	exclamdown
+
+keycode  54 = CapsShift
+
+keycode  55 = KP_Multiply      Hex_A		Hex_D
+
+keycode  56 = Alt
+
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+	altgr	keycode  57 = nobreakspace
+#
+# Au choix Caps_Lock ou Caps_On, avec des raccourcis pour les
+# personnes n'ayant pas l'usage de leurs 2 mains.
+#
+keycode  58 = Caps_Lock
+        shift   keycode  58 = Shift_Lock
+        control keycode  58 = Control_Lock
+        alt     keycode  58 = Alt_Lock
+        altgr   keycode  58 = AltGr_Lock
+
+keycode  59 = F1               F11              Console_13
+	alt     keycode  59 = Console_1
+	control	alt     keycode  59 = Console_1
+
+keycode  60 = F2               F12              Console_14
+	alt     keycode  60 = Console_2
+	control	alt     keycode  60 = Console_2
+
+keycode  61 = F3               F13              Console_15
+	alt     keycode  61 = Console_3
+	control	alt     keycode  61 = Console_3
+
+keycode  62 = F4               F14              Console_16
+	alt     keycode  62 = Console_4
+	control	alt     keycode  62 = Console_4
+
+keycode  63 = F5               F15              Console_17
+	alt     keycode  63 = Console_5
+	control	alt     keycode  63 = Console_5
+
+keycode  64 = F6               F16              Console_18
+	alt     keycode  64 = Console_6
+	control	alt     keycode  64 = Console_6
+
+keycode  65 = F7               F17              Console_19
+	alt     keycode  65 = Console_7
+	control	alt     keycode  65 = Console_7
+
+keycode  66 = F8               F18              Console_20
+	alt     keycode  66 = Console_8
+	control	alt     keycode  66 = Console_8
+
+keycode  67 = F9               F19              Console_21
+	alt     keycode  67 = Console_9
+	control	alt     keycode  67 = Console_9
+
+keycode  68 = F10              F20              Console_22
+	alt     keycode  68 = Console_10
+	control	alt     keycode  68 = Console_10
+
+keycode  69 = Num_Lock	       Bare_Num_Lock
+
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers
+	control keycode  70 = Show_State
+
+keycode  71 = KP_7             Hex_7
+	alt     keycode  71 = Ascii_7
+
+keycode  72 = KP_8             Hex_8
+	alt     keycode  72 = Ascii_8
+
+keycode  73 = KP_9             Hex_9
+	alt     keycode  73 = Ascii_9
+
+keycode  74 = KP_Subtract      Hex_B		Hex_E
+	alt	keycode  74 = minus
+
+keycode  75 = KP_4             Hex_4
+	alt     keycode  75 = Ascii_4
+
+keycode  76 = KP_5             Hex_5
+	alt     keycode  76 = Ascii_5
+
+keycode  77 = KP_6             Hex_6
+	alt     keycode  77 = Ascii_6
+
+keycode  78 = KP_Add           Hex_C		Hex_F
+	alt	keycode  78 = plus
+
+keycode  79 = KP_1             Hex_1
+	alt     keycode  79 = Ascii_1
+
+keycode  80 = KP_2             Hex_2
+	alt     keycode  80 = Ascii_2
+
+keycode  81 = KP_3             Hex_3
+	alt     keycode  81 = Ascii_3
+
+keycode  82 = KP_0             Hex_0
+	alt     keycode  82 = Ascii_0
+
+keycode  83 = KP_Period        KP_Comma
+        altgr   control keycode  83 = KeyboardSignal
+        control alt     keycode  83 = Boot
+
+#
+# La touche AltGr+«Impr. Écran» = «SysReq» a un code pour elle même
+#
+keycode  84 = SAK
+
+keycode  85 =
+
+keycode  86 = +less            +greater          bar
+	alt     keycode  86 = Meta_less
+
+keycode  87 = F11              F11              Console_23
+	alt     keycode  87 = Console_11
+	control	alt     keycode  87 = Console_11
+
+keycode  88 = F12              F12              Console_24
+	alt     keycode  88 = Console_12
+	control	alt     keycode  88 = Console_12
+
+keycode  89 =
+
+keycode  90 =
+
+keycode  91 =
+
+keycode  92 =
+
+keycode  93 =
+
+keycode  94 =
+
+keycode  95 =
+
+keycode  96 = KP_Enter
+
+keycode  97 = Control
+
+keycode  98 = KP_Divide
+
+#
+# La touche «Impr. Écran» ne sert à rien sous linux, alors mettons-y «Compose»
+#
+keycode  99 = Compose
+
+keycode 100 = AltGr
+        alt     keycode 100 = Compose
+
+#
+# La touche Ctrl+Pause = Attn = 101 a un code pour elle même
+#
+keycode 101 = Break
+
+keycode 102 = Home
+
+keycode 103 = Up
+#       alt     keycode 103 = First_Console
+
+keycode 104 = PageUp
+	shift   keycode 104 = Scroll_Backward
+
+keycode 105 = Left
+        alt     keycode 105 = Decr_Console
+
+keycode 106 = Right
+        alt     keycode 106 = Incr_Console
+
+keycode 107 = End
+
+keycode 108 = Down
+        alt     keycode 108 = Last_Console
+
+keycode 109 = PageDown
+	shift   keycode 109 = Scroll_Forward
+
+keycode 110 = Insert
+
+keycode 111 = Remove       BackSpace
+        alt     keycode 111 = Meta_backslash
+        control keycode 111 = Control_backslash
+        alt     control keycode 14 = Boot
+        altgr   control keycode 14 = KeyboardSignal
+
+keycode 112 = Macro
+
+keycode 113 = F13
+
+keycode 114 = F14
+
+keycode 115 = Help
+
+keycode 116 = Do
+
+keycode 117 = F17
+
+keycode 118 = KP_MinPlus
+
+keycode 119 = Pause
+
+keycode 120 =
+
+keycode 121 =
+
+keycode 122 =
+
+keycode 123 =
+
+keycode 124 =
+#
+# Touches supplémentaires des clavier 105 touches
+#
+
+#
+# Fenêtre gauche = Console précédente
+#
+keycode 125 = Decr_Console
+#
+# Fenêtre droite = Console suivante
+#
+keycode 126 = Incr_Console
+#
+# Menu = Dernière console
+#
+keycode 127 = Last_Console
+
+string Home = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string End = "\033[4~"
+string PageUp = "\033[5~"
+string PageDown = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string F21 = "\033[35~"
+string F22 = "\033[36~"
+string F23 = "\033[37~"
+string F24 = "\033[38~"
+string F25 = "\033[39~"
+string F26 = "\033[40~"
+string F27 = "\033[41~"
+string F28 = "\033[42~"
+string F29 = "\033[43~"
+string F30 = "\033[44~"
+string F31 = "\033[45~"
+string F32 = "\033[46~"
+string F33 = "\033[47~"
+string F34 = "\033[48~"
+string F35 = "\033[49~"
+
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose '-' 'a' to 'ª'
+compose '-' 'A' to 'ª'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose '°' 'A' to 'Å'
+compose '°' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '-' 'o' to 'º'
+compose '-' 'O' to 'º'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to '§'
+compose '"' 'y' to 'ÿ'
+compose '"' 'Y' to '¾'
+compose 's' 'z' to 'ß'
+compose 'i' 'j' to 'ÿ'
+compose 'I' 'J' to '¾'
+compose '^' 'S' to '¦'
+compose '^' 's' to '¨'
+compose '^' 'Z' to '´'
+compose '^' 'z' to '¸'
+compose '^' '1' to '¹'
+compose '^' '2' to '²'
+compose '^' '3' to '³'
+compose '+' '-' to '±'
+compose '|' '-' to '¬'
+compose '-' '|' to '¬'
+compose '|' '_' to '¬'
+compose '_' '|' to '¬'
+compose '-' 'y' to '¥'
+compose '-' 'Y' to '¥'
+compose '-' 'c' to '¢'
+compose '-' 'C' to '¢'
+compose '-' 'l' to '£'
+compose '-' 'L' to '£'
+compose '-' 'e' to '¤'
+compose '-' 'E' to '¤'
+compose '^' '!' to '¡'
+compose '^' '?' to '¿'
+compose '^' '-' to '¯'
+compose '^' '_' to '¯'
+compose '^' '.' to '·'
+compose '^' 'x' to '×'
+compose '^' 'X' to '×'
+compose '^' '*' to '×'
+compose '^' '/' to '÷'
+compose '<' '<' to '«'
+compose '>' '>' to '»'
+compose '"' 'c' to '©'
+compose '"' 'r' to '®'
+compose 'o' 'e' to '½'
+compose 'O' 'E' to '¼'
+
diff --git a/keymaps/i386/azerty/fr-latin1.map b/keymaps/i386/azerty/fr-latin1.map
new file mode 100644
index 0000000..9bdf775
--- /dev/null
+++ b/keymaps/i386/azerty/fr-latin1.map
@@ -0,0 +1,77 @@
+keymaps 0-2,4,6,8,12
+include "azerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape          
+	alt     keycode   1 = Meta_Escape     
+keycode   2 = ampersand        one             
+	alt     keycode   2 = Meta_one        
+keycode   3 = eacute           two              dead_tilde      
+	control keycode   3 = nul             
+	alt     keycode   3 = Meta_two        
+keycode   4 = quotedbl         three            numbersign      
+	control keycode   4 = Escape          
+	alt     keycode   4 = Meta_three      
+keycode   5 = apostrophe       four             braceleft       
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four       
+keycode   6 = parenleft        five             bracketleft     
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five       
+keycode   7 = minus            six              bar             
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six        
+keycode   8 = egrave           seven            dead_grave      
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven      
+keycode   9 = underscore       eight            backslash       
+	control keycode   9 = Delete          
+	alt     keycode   9 = Meta_eight      
+keycode  10 = ccedilla         nine             dead_circumflex 
+	alt     keycode  10 = Meta_nine       
+keycode  11 = agrave           zero             at              
+	alt     keycode  11 = Meta_zero       
+keycode  12 = parenright       degree           bracketright    
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus      
+keycode  13 = equal            plus             braceright      
+	alt     keycode  13 = Meta_equal      
+keycode  14 = Delete           Delete          
+	alt     keycode  14 = Meta_Delete     
+keycode  15 = Tab              Tab             
+	alt     keycode  15 = Meta_Tab        
+keycode  26 = dead_circumflex  dead_diaeresis  
+	control keycode  26 = Escape          
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dollar           sterling         currency        
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return          
+	alt     keycode  28 = Meta_Control_m          
+keycode  29 = Control         
+keycode  40 = ugrave           percent         
+	control keycode  40 = Control_g       
+	alt     keycode  40 = Meta_apostrophe 
+keycode  41 = twosuperior     
+	control keycode  41 = nul             
+	alt     keycode  41 = Meta_grave      
+keycode  42 = Shift           
+keycode  43 = asterisk         mu              
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash  
+keycode  50 = comma            question               
+keycode  51 = semicolon        period          
+keycode  52 = colon            slash           
+keycode  53 = exclam           section         
+	control keycode  53 = Delete          
+	alt     keycode  53 = Meta_slash      
+keycode  54 = Shift           
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+	alt     keycode  57 = Meta_space      
+keycode  58 = Caps_Lock       
+keycode  86 = less             greater          bar             
+	alt     keycode  86 = Meta_less       
+keycode  97 = Control         
diff --git a/keymaps/i386/azerty/fr-pc.map b/keymaps/i386/azerty/fr-pc.map
new file mode 100644
index 0000000..0cc660d
--- /dev/null
+++ b/keymaps/i386/azerty/fr-pc.map
@@ -0,0 +1,81 @@
+# fr-pc.map for French PC keyboard (non-US 102 keys)
+#
+#  1997-3-5
+#  Seak, Teng-Fong <seak@drfc.cad.cea.fr>
+#
+keymaps 0-2,4,6,8,12
+include "azerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape          
+	alt     keycode   1 = Meta_Escape     
+keycode   2 = ampersand        one             
+	alt     keycode   2 = Meta_one        
+keycode   3 = eacute           two              asciitilde      
+	control keycode   3 = nul             
+	alt     keycode   3 = Meta_two        
+keycode   4 = quotedbl         three            numbersign      
+	control keycode   4 = Escape          
+	alt     keycode   4 = Meta_three      
+keycode   5 = apostrophe       four             braceleft       
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four       
+keycode   6 = parenleft        five             bracketleft     
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five       
+keycode   7 = minus            six              bar             
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six        
+keycode   8 = egrave           seven            grave           
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven      
+keycode   9 = underscore       eight            backslash       
+	control keycode   9 = Delete          
+	alt     keycode   9 = Meta_eight      
+keycode  10 = ccedilla         nine             asciicircum     
+	alt     keycode  10 = Meta_nine       
+keycode  11 = agrave           zero             at              
+	alt     keycode  11 = Meta_zero       
+keycode  12 = parenright       degree           bracketright    
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus      
+keycode  13 = equal            plus             braceright      
+	alt     keycode  13 = Meta_equal      
+keycode  14 = Delete           Delete          
+	alt     keycode  14 = Meta_Delete     
+keycode  15 = Tab              Tab             
+	alt     keycode  15 = Meta_Tab        
+keycode  26 = dead_circumflex  dead_diaeresis
+	control keycode  26 = Escape          
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dollar           sterling         currency      
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return          
+	alt     keycode  28 = Meta_Control_m          
+keycode  29 = Control         
+keycode  40 = ugrave           percent         
+	control keycode  40 = Control_g       
+	alt     keycode  40 = Meta_apostrophe 
+keycode  41 = twosuperior
+	control keycode  41 = nul             
+	alt     keycode  41 = Meta_grave      
+keycode  42 = Shift           
+keycode  43 = asterisk         mu
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash  
+keycode  50 = comma            question      
+keycode  51 = semicolon        period          
+keycode  52 = colon            slash           
+keycode  53 = exclam           section
+	control keycode  53 = Delete          
+keycode  54 = Shift           
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+	alt     keycode  57 = Meta_space      
+keycode  58 = Caps_Lock       
+keycode  86 = less             greater          bar             
+	alt     keycode  86 = Meta_less       
+keycode  97 = Control         
diff --git a/keymaps/i386/azerty/fr.map b/keymaps/i386/azerty/fr.map
new file mode 100644
index 0000000..201c3eb
--- /dev/null
+++ b/keymaps/i386/azerty/fr.map
@@ -0,0 +1,79 @@
+keymaps 0-2,4,6,8,12
+include "azerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape          
+	alt     keycode   1 = Meta_Escape     
+keycode   2 = ampersand        one             
+	alt     keycode   2 = Meta_one        
+keycode   3 = braceleft        two              asciitilde      
+	control keycode   3 = nul             
+	alt     keycode   3 = Meta_two        
+keycode   4 = quotedbl         three            numbersign      
+	control keycode   4 = Escape          
+	alt     keycode   4 = Meta_three      
+keycode   5 = apostrophe       four             braceleft       
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four       
+keycode   6 = parenleft        five             bracketleft     
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five       
+keycode   7 = minus            six              bar             
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six        
+keycode   8 = braceright       seven            grave           
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven      
+keycode   9 = underscore       eight            backslash       
+	control keycode   9 = Delete          
+	alt     keycode   9 = Meta_eight      
+keycode  10 = slash            nine             asciicircum     
+	alt     keycode  10 = Meta_nine       
+keycode  11 = at               zero             at              
+	alt     keycode  11 = Meta_zero       
+keycode  12 = parenright       bracketright     bracketright    
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus      
+keycode  13 = equal            plus             braceright      
+	alt     keycode  13 = Meta_equal      
+keycode  14 = Delete           Delete          
+	alt     keycode  14 = Meta_Delete     
+keycode  15 = Tab              Tab             
+	alt     keycode  15 = Meta_Tab        
+keycode  26 = asciicircum      less            
+	control keycode  26 = Escape          
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dollar           greater          asciitilde      
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return          
+	alt     keycode  28 = Meta_Control_m          
+keycode  29 = Control         
+keycode  40 = bar              percent         
+	control keycode  40 = Control_g       
+	alt     keycode  40 = Meta_apostrophe 
+keycode  41 = asterisk         asciitilde      
+	control keycode  41 = nul             
+	alt     keycode  41 = Meta_grave      
+keycode  42 = Shift           
+keycode  43 = asterisk         numbersign      
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash  
+keycode  50 = comma            question      
+keycode  51 = semicolon        period          
+	alt     keycode  51 = Meta_comma      
+keycode  52 = colon            slash           
+	alt     keycode  52 = Meta_period     
+keycode  53 = exclam           backslash       
+	control keycode  53 = Delete          
+	alt     keycode  53 = Meta_slash      
+keycode  54 = Shift           
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+	alt     keycode  57 = Meta_space      
+keycode  58 = Caps_Lock       
+keycode  86 = less             greater          bar             
+	alt     keycode  86 = Meta_less       
+keycode  97 = Control         
diff --git a/keymaps/i386/azerty/wangbe.map b/keymaps/i386/azerty/wangbe.map
new file mode 100644
index 0000000..90ecadc
--- /dev/null
+++ b/keymaps/i386/azerty/wangbe.map
@@ -0,0 +1,23 @@
+# azerty.map with modified numeric key assignements
+# to fit an azerty wang belgium keyboard
+# Servaas Vandenberghe, servaas.vandenberghe@esat.kuleuven.ac.be - 1997.
+
+include "azerty.map"		# has two alt keys
+keymaps 6			# add one more keymap
+
+keycode 100 = AltGr		# install AltGr on right Alt
+
+control altgr keycode 83 = Boot
+control altgr keycode 111 = Boot
+
+altgr keycode  71 = less
+altgr keycode  72 = greater
+altgr keycode  73 = asciicircum
+altgr keycode  75 = bracketleft
+altgr keycode  76 = bracketright
+altgr keycode  77 = dollar
+altgr keycode  79 = ampersand
+altgr keycode  80 = at
+altgr keycode  81 = numbersign
+altgr keycode  82 = apostrophe
+altgr keycode  83 = comma
diff --git a/keymaps/i386/dvorak/ANSI-dvorak.map b/keymaps/i386/dvorak/ANSI-dvorak.map
new file mode 100644
index 0000000..d6fa4ac
--- /dev/null
+++ b/keymaps/i386/dvorak/ANSI-dvorak.map
@@ -0,0 +1,12 @@
+include "dvorak.map"
+
+plain keycode 12 = bracketright
+shift keycode 12 = bracketleft
+control keycode 12 = Control_bracketright
+
+plain keycode 13 = equal
+shift keycode 13 = plus
+control keycode 13 = Escape
+
+plain keycode 27 = braceleft
+shift keycode 27 = braceright
diff --git a/keymaps/i386/dvorak/dvorak-l.map b/keymaps/i386/dvorak/dvorak-l.map
new file mode 100644
index 0000000..64b5f48
--- /dev/null
+++ b/keymaps/i386/dvorak/dvorak-l.map
@@ -0,0 +1,103 @@
+! dvorak-l.map - Left single-handed Dvorak keyboard layout
+! Derived from a file that was
+!  Copyright (C) 1996 Dominik Kubla, <dominik@debian.org>
+!
+! This file is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+!
+! Thanks to Eddie Maddox for providing the information.
+!
+ 		charset "ISO-8859-1"
+		keymaps 0,1,4,8,12
+		include "linux-with-two-alt-keys.inc"
+		strings as usual
+		compose as usual for "iso-8859-1"
+! --------------------------------------------------------------------------
+! Row 1 (Function keys)
+! --------------------------------------------------------------------------
+		keycode   1 = Escape
+! --------------------------------------------------------------------------
+! Row 2
+! --------------------------------------------------------------------------
+		keycode  41 = grave		asciitilde      
+		keycode   2 = bracketleft	braceleft 
+		keycode   3 = bracketright	braceright
+		keycode   4 = slash		question
+		keycode   5 = p
+		keycode   6 = f
+		keycode   7 = m
+		keycode   8 = l
+		keycode   9 = j
+		keycode  10 = four		dollar
+		keycode  11 = three		numbersign
+		keycode  12 = two		at
+		keycode  13 = one		exclam
+		keycode  14 = BackSpace		Delete
+! --------------------------------------------------------------------------
+! Row 3
+! --------------------------------------------------------------------------
+		keycode  15 = Tab
+		keycode  16 = semicolon		colon
+		keycode  17 = q
+		keycode  18 = b
+		keycode  19 = y
+		keycode  20 = u
+		keycode  21 = r
+		keycode  22 = s
+		keycode  23 = o
+		keycode  24 = period		greater
+		keycode  25 = six		asciicircum
+		keycode  26 = five		percent
+		keycode  27 = equal		plus
+		keycode  43 = backslash		bar
+		keycode  28 = Return
+! --------------------------------------------------------------------------
+! Row 4
+! --------------------------------------------------------------------------
+		keycode  58 = Caps_Lock
+		keycode  30 = minus		underscore
+		keycode  31 = k
+		keycode  32 = c
+		keycode  33 = d
+		keycode  34 = t
+		keycode  35 = h
+		keycode  36 = e
+		keycode  37 = a
+		keycode  38 = z
+		keycode  39 = eight		asterisk
+		keycode  40 = seven		ampersand
+! --------------------------------------------------------------------------
+! Row 5
+! --------------------------------------------------------------------------
+		keycode  42 = Shift
+		keycode  44 = apostrophe	quotedbl
+		keycode  45 = x
+		keycode  46 = g
+		keycode  47 = v
+		keycode  48 = w
+		keycode  49 = n
+		keycode  50 = i
+		keycode  51 = comma		less
+	control	keycode  51 = Compose
+		keycode  52 = zero		 parenright
+		keycode  53 = nine		 parenleft
+		keycode  54 = Shift
+! --------------------------------------------------------------------------
+! Row 6
+! --------------------------------------------------------------------------
+		keycode  29 = Control
+		keycode  56 = Alt
+		keycode  57 = space
+#		keycode 100 = Alt
+		keycode  97 = Control
diff --git a/keymaps/i386/dvorak/dvorak-r.map b/keymaps/i386/dvorak/dvorak-r.map
new file mode 100644
index 0000000..4e5c4fa
--- /dev/null
+++ b/keymaps/i386/dvorak/dvorak-r.map
@@ -0,0 +1,103 @@
+! dvorak-r.map - Right single-handed Dvorak keyboard layout
+! Derived from a file that was
+!  Copyright (C) 1996 Dominik Kubla, <dominik@debian.org>
+!
+! This file is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+!
+! Thanks to Eddie Maddox for providing the information.
+!
+ 		charset "ISO-8859-1"
+		keymaps 0,1,4,8,12
+		include "linux-with-two-alt-keys.inc"
+		strings as usual
+		compose as usual for "iso-8859-1"
+! --------------------------------------------------------------------------
+! Row 1 (Function keys)
+! --------------------------------------------------------------------------
+		keycode   1 = Escape
+! --------------------------------------------------------------------------
+! Row 2
+! --------------------------------------------------------------------------
+		keycode  41 = grave		asciitilde      
+		keycode   2 = one		exclam
+		keycode   3 = two		at
+		keycode   4 = three		numbersign
+		keycode   5 = four		dollar
+		keycode   6 = j
+		keycode   7 = l
+		keycode   8 = m
+		keycode   9 = f
+		keycode  10 = p
+		keycode  11 = slash		question
+		keycode  12 = bracketleft	braceleft
+		keycode  13 = bracketright	braceright
+		keycode  14 = BackSpace		Delete
+! --------------------------------------------------------------------------
+! Row 3
+! --------------------------------------------------------------------------
+		keycode  15 = Tab
+		keycode  16 = five		percent
+		keycode  17 = six		asciicircum
+		keycode  18 = q
+		keycode  19 = period		greater
+		keycode  20 = o
+		keycode  21 = r
+		keycode  22 = s
+		keycode  23 = u
+		keycode  24 = y
+		keycode  25 = b
+		keycode  26 = semicolon		colon
+		keycode  27 = equal		plus
+		keycode  43 = backslash		bar
+		keycode  28 = Return
+! --------------------------------------------------------------------------
+! Row 4
+! --------------------------------------------------------------------------
+		keycode  58 = Caps_Lock
+		keycode  30 = seven		ampersand
+		keycode  31 = eight		asterisk
+		keycode  32 = z
+		keycode  33 = a
+		keycode  34 = e
+		keycode  35 = h
+		keycode  36 = t
+		keycode  37 = d
+		keycode  38 = c
+		keycode  39 = k
+		keycode  40 = minus	       underscore        
+! --------------------------------------------------------------------------
+! Row 5
+! --------------------------------------------------------------------------
+		keycode  42 = Shift
+		keycode  44 = nine		parenleft
+		keycode  45 = zero		parenright
+		keycode  46 = x
+		keycode  47 = comma		less
+	control	keycode  47 = Compose
+		keycode  48 = i
+		keycode  49 = n
+		keycode  50 = w
+		keycode  51 = v
+		keycode  52 = g
+		keycode  53 = apostrophe	quotedbl
+		keycode  54 = Shift
+! --------------------------------------------------------------------------
+! Row 6
+! --------------------------------------------------------------------------
+		keycode  29 = Control
+		keycode  56 = Alt
+		keycode  57 = space
+#		keycode 100 = Alt
+		keycode  97 = Control
diff --git a/keymaps/i386/dvorak/dvorak.map b/keymaps/i386/dvorak/dvorak.map
new file mode 100644
index 0000000..3af4219
--- /dev/null
+++ b/keymaps/i386/dvorak/dvorak.map
@@ -0,0 +1,81 @@
+keymaps 0-2,4,6,8,12
+alt_is_meta
+include "linux-with-alt-and-altgr.inc"
+strings as usual
+
+keycode   1 = Escape           Escape          
+keycode   2 = one              exclam          
+keycode   3 = two              at               at              
+	control keycode   3 = nul             
+keycode   4 = three            numbersign      
+	control keycode   4 = Escape          
+keycode   5 = four             dollar           dollar          
+	control keycode   5 = Control_backslash
+keycode   6 = five             percent         
+	control keycode   6 = Control_bracketright
+keycode   7 = six              asciicircum     
+	control keycode   7 = Control_asciicircum
+keycode   8 = seven            ampersand        braceleft       
+	control keycode   8 = Control_underscore
+keycode   9 = eight            asterisk         bracketleft     
+	control keycode   9 = Delete          
+keycode  10 = nine             parenleft        bracketright    
+keycode  11 = zero             parenright       braceright      
+keycode  12 = bracketleft      braceleft       
+	control keycode  12 = Escape          
+keycode  13 = bracketright     braceright       asciitilde      
+	control keycode  13 = Control_bracketright
+keycode  14 = Delete           Delete          
+keycode  15 = Tab              Tab             
+keycode  16 = apostrophe       quotedbl        
+	control keycode  16 = Control_g       
+keycode  17 = comma            less            
+keycode  18 = period           greater         
+keycode  19 = p               
+keycode  20 = y               
+keycode  21 = f               
+keycode  22 = g               
+keycode  23 = c               
+keycode  24 = r               
+keycode  25 = l               
+keycode  26 = slash            question        
+	control keycode  26 = Delete          
+keycode  27 = equal            plus            
+keycode  28 = Return          
+        alt     keycode  28 = Meta_Control_m
+keycode  29 = Control         
+keycode  30 = a               
+keycode  31 = o               
+keycode  32 = e               
+keycode  33 = u               
+keycode  34 = i               
+keycode  35 = d               
+keycode  36 = h               
+keycode  37 = t               
+keycode  38 = n               
+keycode  39 = s               
+keycode  40 = minus            underscore       backslash       
+	control keycode  40 = Control_underscore
+keycode  41 = grave            asciitilde      
+	control keycode  41 = nul             
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control keycode  43 = Control_backslash
+keycode  44 = semicolon        colon           
+keycode  45 = q               
+keycode  46 = j               
+keycode  47 = k               
+keycode  48 = x               
+keycode  49 = b               
+keycode  50 = m               
+keycode  51 = w               
+keycode  52 = v               
+keycode  53 = z               
+keycode  54 = Shift           
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+keycode  58 = Caps_Lock       
+keycode  86 = less             greater          bar             
+	alt     keycode  86 = Meta_less       
+keycode  97 = Control         
diff --git a/keymaps/i386/fgGIod/tr_f-latin5.map b/keymaps/i386/fgGIod/tr_f-latin5.map
new file mode 100644
index 0000000..8d21c81
--- /dev/null
+++ b/keymaps/i386/fgGIod/tr_f-latin5.map
@@ -0,0 +1,249 @@
+# turkish "F" keyboard, copyed from LyX turkish keyboard description
+# right Ctrl key switches to an almost US keyboard (number row is mangled 
+# us keyboard mode, this to allow simple access by AltGr while in turkish
+# mode to all needed symbols)
+#
+# Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org>
+
+charset "iso-8859-9"
+keymaps 0-6,8-9,12
+strings as usual
+
+keycode   1 = Escape           Escape          
+	alt     keycode   1 = Meta_Escape     
+keycode   2 = one              exclam          
+	alt     keycode   2 = Meta_one        
+	alt shift keycode 2 = Meta_exclam
+keycode   3 = two              apostrophe       at              
+	control keycode   3 = nul        
+	control shift keycode 3 = nul     
+	alt     keycode   3 = Meta_two        
+	alt shift keycode 3 = Meta_at
+keycode   4 = three            dead_circumflex  numbersign      
+	control keycode   4 = Escape          
+	alt     keycode   4 = Meta_three      
+	alt shift keycode 4 = Meta_numbersign
+keycode   5 = four             plus             dollar          
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four      
+	alt shift keycode 5 = Meta_dollar 
+keycode   6 = five             percent         
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five  
+	alt shift keycode 6 = Meta_percent     
+keycode   7 = six              ampersand         asciicircum     
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six    
+	alt shift keycode 7 = Meta_asciicircum    
+keycode   8 = seven            slash            braceleft       
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven      
+keycode   9 = eight            parenleft        bracketleft     
+	control keycode   9 = Delete          
+	alt     keycode   9 = Meta_eight      
+keycode  10 = nine             parenright       bracketright    
+	alt     keycode  10 = Meta_nine       
+keycode  11 = zero             equal            braceright      
+	alt     keycode  11 = Meta_zero       
+keycode  12 = asterisk         question         backslash       
+	control keycode  12 = Control_underscore
+	control shift keycode 12 = Control_underscore
+	alt     keycode  12 = Meta_minus      
+keycode  13 = minus            underscore      
+	alt     keycode  13 = Meta_equal      
+keycode  14 = BackSpace           Delete          
+	alt     keycode  14 = Meta_Delete     
+keycode  15 = Tab              Tab             
+	alt     keycode  15 = Meta_Tab        
+keycode  16 = +f	+F	+q	+Q               
+keycode  17 = +g	+G      +w	+W         
+keycode  18 = +gbreve	+Gbreve	+e	+E
+keycode  19 = +dotlessi	+I	+r	+R             
+keycode  20 = +o	+O	+t      +T    
+keycode  21 = +d	+D	+y	+Y
+keycode  22 = +r	+R	+u      +U   
+keycode  23 = +n	+N	+i    	+I
+keycode  24 = +h	+H	+o	+O
+keycode  25 = p      
+keycode  26 = +q	+Q	bracketleft      braceleft       
+	control keycode  26 = Escape          
+	alt     keycode  26 = Meta_bracketleft
+	alt shift keycode 26 = Meta_braceleft
+keycode  27 = +w	+W	bracketright     braceright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+	alt shift keycode 27 = Meta_braceright
+keycode  28 = Return          
+	alt     keycode  28 = Meta_Control_m          
+keycode  29 = Control         
+keycode  30 = +u	+U	+a	+A     
+keycode  31 = +i	+Idotabove	+s	+S
+keycode  32 = +e	+E	+d	+D               
+keycode  33 = +a	+A	+f	+F               
+keycode  34 = g               
+keycode  35 = +t	+T	+h	+H               
+keycode  36 = +k	+K	+j	+J               
+keycode  37 = +m	+M	+k	+K               
+keycode  38 = l               
+keycode  39 = +y	+Y	semicolon        colon           
+	alt     keycode  39 = Meta_semicolon  
+keycode  40 = +scedilla	+Scedilla	apostrophe       quotedbl
+	control keycode  40 = Control_g       
+	alt     keycode  40 = Meta_apostrophe 
+keycode  41 = backslash	quotedbl	grave            asciitilde
+	control keycode  41 = nul             
+	alt     keycode  41 = Meta_grave      
+keycode  42 = Shift           
+keycode  43 = +x	+X	backslash        bar             
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash  
+	alt shift keycode 43 = Meta_bar
+keycode  44 = +j	+J	+z	+Z               
+keycode  45 = +odiaeresis	+Odiaeresis	+x	+X               
+keycode  46 = +v	+V	+c	+C               
+keycode  47 = +c	+C	+v	+V               
+keycode  48 = +ccedilla	+Ccedilla	+b	+B               
+keycode  49 = +z	+Z	+n	+N               
+keycode  50 = +s	+S	+m	+M               
+keycode  51 = +b	+B	comma   less            
+	alt     keycode  51 = Meta_comma      
+	alt shift keycode 51 = Meta_less
+keycode  52 = period    colon		period	greater         
+	alt     keycode  52 = Meta_period     
+	alt shift keycode 52 = Meta_greater
+keycode  53 = comma 	semicolon	slash	question        
+	control keycode  53 = Delete          
+	alt     keycode  53 = Meta_slash      
+keycode  54 = Shift           
+keycode  55 = KP_Multiply     
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control keycode  57 = nul             
+	alt     keycode  57 = Meta_space      
+keycode  58 = Caps_Lock       
+keycode  59 = F1               F11              Console_13      
+	control keycode  59 = F1              
+	alt     keycode  59 = Console_1       
+	control	alt     keycode  59 = Console_1       
+keycode  60 = F2               F12              Console_14      
+	control keycode  60 = F2              
+	alt     keycode  60 = Console_2       
+	control	alt     keycode  60 = Console_2       
+keycode  61 = F3               F13              Console_15      
+	control keycode  61 = F3              
+	alt     keycode  61 = Console_3       
+	control	alt     keycode  61 = Console_3       
+keycode  62 = F4               F14              Console_16      
+	control keycode  62 = F4              
+	alt     keycode  62 = Console_4       
+	control	alt     keycode  62 = Console_4       
+keycode  63 = F5               F15              Console_17      
+	control keycode  63 = F5              
+	alt     keycode  63 = Console_5       
+	control	alt     keycode  63 = Console_5       
+keycode  64 = F6               F16              Console_18      
+	control keycode  64 = F6              
+	alt     keycode  64 = Console_6       
+	control	alt     keycode  64 = Console_6       
+keycode  65 = F7               F17              Console_19      
+	control keycode  65 = F7              
+	alt     keycode  65 = Console_7       
+	control	alt     keycode  65 = Console_7       
+keycode  66 = F8               F18              Console_20      
+	control keycode  66 = F8              
+	alt     keycode  66 = Console_8       
+	control	alt     keycode  66 = Console_8       
+keycode  67 = F9               F19              Console_21      
+	control keycode  67 = F9              
+	alt     keycode  67 = Console_9       
+	control	alt     keycode  67 = Console_9       
+keycode  68 = F10              F20              Console_22      
+	control keycode  68 = F10             
+	alt     keycode  68 = Console_10      
+	control	alt     keycode  68 = Console_10      
+keycode  69 = Num_Lock        
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
+	control keycode  70 = Show_State      
+	alt     keycode  70 = Scroll_Lock     
+keycode  71 = KP_7            
+	alt     keycode  71 = Ascii_7         
+keycode  72 = KP_8            
+	alt     keycode  72 = Ascii_8         
+keycode  73 = KP_9            
+	alt     keycode  73 = Ascii_9         
+keycode  74 = KP_Subtract     
+keycode  75 = KP_4            
+	alt     keycode  75 = Ascii_4         
+keycode  76 = KP_5            
+	alt     keycode  76 = Ascii_5         
+keycode  77 = KP_6            
+	alt     keycode  77 = Ascii_6         
+keycode  78 = KP_Add          
+keycode  79 = KP_1            
+	alt     keycode  79 = Ascii_1         
+keycode  80 = KP_2            
+	alt     keycode  80 = Ascii_2         
+keycode  81 = KP_3            
+	alt     keycode  81 = Ascii_3         
+keycode  82 = KP_0            
+	alt     keycode  82 = Ascii_0         
+keycode  83 = KP_Period       
+	altgr   control keycode  83 = Boot            
+	control alt     keycode  83 = Boot            
+keycode  84 = Last_Console    
+keycode  85 =
+keycode  86 = less             greater          bar             
+	alt     keycode  86 = Meta_less       
+keycode  87 = F11              F11              Console_23      
+	control keycode  87 = F11             
+	alt     keycode  87 = Console_11      
+	control	alt     keycode  87 = Console_11      
+keycode  88 = F12              F12              Console_24      
+	control keycode  88 = F12             
+	alt     keycode  88 = Console_12      
+	control	alt     keycode  88 = Console_12      
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter        
+keycode  97 = AltGr_Lock      
+keycode  98 = KP_Divide       
+keycode  99 = Control_backslash
+	control keycode  99 = Control_backslash
+	alt     keycode  99 = Control_backslash
+keycode 100 = AltGr           
+keycode 101 = Break           
+keycode 102 = Find            
+keycode 103 = Up              
+keycode 104 = Prior           
+	shift   keycode 104 = Scroll_Backward 
+keycode 105 = Left            
+keycode 106 = Right           
+keycode 107 = Select          
+keycode 108 = Down            
+keycode 109 = Next            
+	shift   keycode 109 = Scroll_Forward  
+keycode 110 = Insert          
+keycode 111 = Remove          
+	altgr   control keycode 111 = Boot            
+	control alt     keycode 111 = Boot            
+keycode 112 =
+keycode 113 =
+keycode 114 =
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 =
+keycode 119 =
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/i386/fgGIod/trf.map b/keymaps/i386/fgGIod/trf.map
new file mode 100644
index 0000000..1590579
--- /dev/null
+++ b/keymaps/i386/fgGIod/trf.map
@@ -0,0 +1,249 @@
+charset "iso-8859-9"
+strings as usual
+
+keycode   1 = Escape Escape
+	alt       keycode   1 = Meta_Escape
+keycode   2 = one exclam asciitilde
+	alt       keycode   2 = Meta_one
+	alt shift keycode   2 = Meta_exclam
+keycode   3 = two at ampersand
+	control   keycode   3 = nul
+	control shift keycode 3 = nul
+	alt       keycode   3 = Meta_two
+	alt shift keycode   3 = Meta_at
+keycode   4 = three quotedbl numbersign
+	control   keycode   4 = Escape
+	alt       keycode   4 = Meta_three
+	alt shift keycode   4 = Meta_quotedbl
+keycode   5 = four apostrophe dollar
+	control   keycode   5 = Control_backslash
+	alt       keycode   5 = Meta_four
+	alt shift keycode   5 = Meta_apostrophe
+keycode   6 = five parenleft less
+	control   keycode   6 = Control_bracketright
+	alt       keycode   6 = Meta_five
+	alt shift keycode   6 = Meta_parenleft
+keycode   7 = six slash greater
+	control   keycode   7 = Control_asciicircum
+	alt       keycode   7 = Meta_six
+	alt shift keycode   7 = Meta_slash
+keycode   8 = seven parenright braceleft
+	control   keycode   8 = Control_underscore
+	alt       keycode   8 = Meta_seven
+	alt shift keycode   8 = Meta_parenright
+keycode   9 = eight underscore braceleft
+	control   keycode   9 = Delete
+	alt       keycode   9 = Meta_eight
+	alt shift keycode   9 = Meta_underscore
+keycode  10 = nine percent bracketleft
+	alt       keycode  10 = Meta_nine
+	alt shift keycode  10 = Meta_percent
+keycode  11 = zero colon bracketright
+	alt       keycode  11 = Meta_zero
+	alt shift keycode  11 = Meta_colon
+keycode  12 = x
+	control   keycode  12 = Control_underscore
+	control shift keycode 12 = Control_underscore
+keycode  13 = q
+keycode  14 = Delete	Delete
+	alt       keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt       keycode  15 = Meta_Tab
+keycode  16 = f
+keycode  17 = g
+keycode  18 = +0360 +0320
+keycode  19 = +0375 +I
+	altgr keycode 19 = +0356
+	altgr shift keycode 19 = +0316
+keycode  20 = o
+	altgr keycode 20 = +0364
+	altgr shift keycode 20 = +0324
+keycode  21 = d
+keycode  22 = r
+keycode  23 = n
+keycode  24 = h
+keycode  25 = p
+keycode  26 = semicolon asterisk
+	control   keycode  26 = Escape
+	alt       keycode  26 = Meta_semicolon
+	alt shift keycode  26 = Meta_asterisk
+keycode  27 = asciicircum grave
+	control   keycode  27 = Control_bracketright
+	alt       keycode  27 = Meta_asciicircum
+	alt shift keycode  27 = Meta_grave
+keycode  28 = Return
+	alt       keycode  28 = 0x080d
+keycode  29 = Control
+keycode  30 = u
+	altgr keycode 30 = +0373
+	altgr shift keycode 30 = +0333
+keycode  31 = +i +0335
+keycode  32 = e
+keycode  33 = a
+	altgr keycode 33 = +0342
+	altgr shift keycode 33 = +0302
+keycode  34 = +0374 +0334
+keycode  35 = t
+keycode  36 = k
+keycode  37 = m
+keycode  38 = l
+keycode  39 = y
+keycode  40 = +0376 +0336
+	control   keycode  40 = Control_g
+keycode  41 = w
+	control   keycode  41 = nul
+keycode  42 = Shift
+keycode  43 = equal plus
+	control   keycode  43 = Control_backslash
+	alt       keycode  43 = Meta_equal
+	alt shift keycode  43 = Meta_plus
+keycode  44 = j
+keycode  45 = +0366 +0326
+keycode  46 = v
+keycode  47 = c
+keycode  48 = +0347 +0307
+keycode  49 = z
+keycode  50 = s
+keycode  51 = b
+keycode  52 = period question
+	control   keycode  52 = Delete
+	alt       keycode  52 = Meta_period
+	alt shift keycode  52 = Meta_question
+keycode  53 = comma minus slash
+	alt       keycode  53 = Meta_comma
+	alt shift keycode  53 = Meta_minus
+keycode  54 = Shift
+keycode  55 = KP_Multiply
+keycode  56 = Alt
+keycode  57 = space
+	control   keycode  57 = nul
+	alt       keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  59 = F1 F11 Console_13
+	control   keycode  59 = F1
+	alt       keycode  59 = Console_1
+	control	alt keycode 59 = Console_1
+keycode  60 = F2 F12 Console_14
+	control   keycode  60 = F2
+	alt       keycode  60 = Console_2
+	control	alt keycode 60 = Console_2
+keycode  61 = F3 F13 Console_15
+	control   keycode  61 = F3
+	alt       keycode  61 = Console_3
+	control	alt keycode 61 = Console_3
+keycode  62 = F4 F14 Console_16
+	control   keycode  62 = F4
+	alt       keycode  62 = Console_4
+	control	alt keycode 62 = Console_4
+keycode  63 = F5 F15 Console_17
+	control   keycode  63 = F5
+	alt       keycode  63 = Console_5
+	control	alt keycode 63 = Console_5
+keycode  64 = F6 F16 Console_18
+	control   keycode  64 = F6
+	alt       keycode  64 = Console_6
+	control	alt keycode 64 = Console_6
+keycode  65 = F7 F17 Console_19
+	control   keycode  65 = F7
+	alt       keycode  65 = Console_7
+	control	alt keycode 65 = Console_7
+keycode  66 = F8 F18 Console_20
+	control   keycode  66 = F8
+	alt       keycode  66 = Console_8
+	control	alt keycode 66 = Console_8
+keycode  67 = F9 F19 Console_21
+	control   keycode  67 = F9
+	alt       keycode  67 = Console_9
+	control	alt keycode 67 = Console_9
+keycode  68 = F10 F20 Console_22
+	control   keycode  68 = F10
+	alt       keycode  68 = Console_10
+	control	alt keycode 68 = Console_10
+keycode  69 = Num_Lock
+keycode  70 = Scroll_Lock Show_Memory Show_Registers
+	control   keycode  70 = Show_State
+	alt       keycode  70 = Scroll_Lock
+keycode  71 = KP_7
+	alt       keycode  71 = Ascii_7
+keycode  72 = KP_8
+	alt       keycode  72 = Ascii_8
+keycode  73 = KP_9
+	alt       keycode  73 = Ascii_9
+keycode  74 = KP_Subtract
+keycode  75 = KP_4
+	alt       keycode  75 = Ascii_4
+keycode  76 = KP_5
+	alt       keycode  76 = Ascii_5
+keycode  77 = KP_6
+	alt       keycode  77 = Ascii_6
+keycode  78 = KP_Add
+keycode  79 = KP_1
+	alt       keycode  79 = Ascii_1
+keycode  80 = KP_2
+	alt       keycode  80 = Ascii_2
+keycode  81 = KP_3
+	alt       keycode  81 = Ascii_3
+keycode  82 = KP_0
+	alt       keycode  82 = Ascii_0
+keycode  83 = KP_Period
+	altgr control keycode 83 = Boot
+	control alt   keycode 83 = Boot
+keycode  84 = Last_Console
+keycode  85 =
+keycode  86 = backslash bar
+	alt       keycode  86 = Meta_backslash
+	alt shift keycode  86 = Meta_bar
+keycode  87 = F11 F11 Console_23
+	control   keycode  87 = F11
+	alt       keycode  87 = Console_11
+	control	alt keycode 87 = Console_11
+keycode  88 = F12 F12 Console_24
+	control   keycode  88 = F12
+	alt       keycode  88 = Console_12
+	control	alt keycode 88 = Console_12
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter
+keycode  97 = Control
+keycode  98 = KP_Divide
+keycode  99 = Control_backslash
+	control   keycode  99 = Control_backslash
+	alt       keycode  99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+	shift     keycode 104 = Scroll_Backward
+keycode 105 = Left
+        alt       keycode 105 = Decr_Console
+keycode 106 = Right
+        alt       keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+	shift     keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Delete	Delete
+	alt   keycode 111 = Meta_Delete
+keycode 112 =
+keycode 113 =
+keycode 114 =
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 =
+keycode 119 =
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/i386/include/azerty-layout.inc b/keymaps/i386/include/azerty-layout.inc
new file mode 100644
index 0000000..618f5a4
--- /dev/null
+++ b/keymaps/i386/include/azerty-layout.inc
@@ -0,0 +1,30 @@
+# azerty-layout
+keycode 16 = a
+keycode 17 = z
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = y
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+#
+keycode 30 = q
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = m
+#
+keycode 44 = w
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+#
diff --git a/keymaps/i386/include/backspace.map b/keymaps/i386/include/backspace.map
new file mode 100644
index 0000000..cf2b2b5
--- /dev/null
+++ b/keymaps/i386/include/backspace.map
@@ -0,0 +1,2 @@
+keycode  14 = Control_h           Control_h
+       alt     keycode  14 = Meta_Control_h
diff --git a/keymaps/i386/include/ctrl.map b/keymaps/i386/include/ctrl.map
new file mode 100644
index 0000000..3db7259
--- /dev/null
+++ b/keymaps/i386/include/ctrl.map
@@ -0,0 +1,3 @@
+keycode  29 = Caps_Lock
+keycode  58 = Control
+keycode  97 = Compose
diff --git a/keymaps/i386/include/euro.map b/keymaps/i386/include/euro.map
new file mode 100644
index 0000000..04cd00b
--- /dev/null
+++ b/keymaps/i386/include/euro.map
@@ -0,0 +1,6 @@
+# Euro and cent
+# [Say: "loadkeys euro" to get Euro and cent with Alt on the positions
+#  where many keyboards have E and C.
+#  To get it displayed, use a latin0 (i.e., latin9) font.]
+alt keycode  18 = currency
+alt keycode  46 = cent
diff --git a/keymaps/i386/include/keypad.map b/keymaps/i386/include/keypad.map
new file mode 100644
index 0000000..c79f267
--- /dev/null
+++ b/keymaps/i386/include/keypad.map
@@ -0,0 +1,65 @@
+#
+# Keypad mapping:
+# - use Alt + KP_[0-9] to compose chars using decimal byte (eg. ASCII, latin1, ...) codes.
+# - use AltGr + KP_[0-9] + grey keys to compose with Hex unicodes.
+#   (digits A..F are mapped clockwise from NumLock to KP_Enter)
+#
+
+keycode	 69 = Num_Lock
+ AltGr keycode 69 = Hex_A
+ 
+keycode	 98 = KP_Divide
+ AltGr keycode 98 = Hex_B
+ 
+keycode	 55 = KP_Multiply
+ AltGr keycode 55 = Hex_C
+ 
+keycode	 74 = KP_Subtract
+ AltGr keycode 74 = Hex_D
+ 
+keycode	 78 = KP_Add
+ AltGr keycode 78 = Hex_E
+ 
+keycode	 96 = KP_Enter
+ AltGr keycode 96 = Hex_F
+ 
+
+keycode	 71 = KP_7
+ AltGr keycode 71 = Hex_7
+ Alt keycode 71 = Ascii_7
+
+keycode	 72 = KP_8
+ AltGr keycode 72 = Hex_8
+ Alt keycode 72 = Ascii_8
+
+keycode	 73 = KP_9
+ AltGr keycode 73 = Hex_9
+ Alt keycode 73 = Ascii_9
+
+keycode	 75 = KP_4
+ AltGr keycode 75 = Hex_4
+ Alt keycode 75 = Ascii_4
+
+keycode	 76 = KP_5
+ AltGr keycode 76 = Hex_5
+ Alt keycode 76 = Ascii_5
+
+keycode	 77 = KP_6
+ AltGr keycode 77 = Hex_6
+ Alt keycode 77 = Ascii_6
+
+keycode	 79 = KP_1
+ AltGr keycode 79 = Hex_1
+ Alt keycode 79 = Ascii_1
+
+keycode	 80 = KP_2
+ AltGr keycode 80 = Hex_2
+ Alt keycode 80 = Ascii_2
+
+keycode	 81 = KP_3
+ AltGr keycode 81 = Hex_3
+ Alt keycode 81 = Ascii_3
+
+keycode	 82 = KP_0
+ AltGr keycode 82 = Hex_0
+ Alt keycode 82 = Ascii_0
diff --git a/keymaps/i386/include/linux-keys-bare.inc b/keymaps/i386/include/linux-keys-bare.inc
new file mode 100644
index 0000000..d070303
--- /dev/null
+++ b/keymaps/i386/include/linux-keys-bare.inc
@@ -0,0 +1,160 @@
+# Linux-specific (and language-independent) keys
+#
+# This file describes function keys, console switching keys,
+# keypad, cursor keys, and SysRq, ScrollLock, Pause
+#
+# It does not use the AltGr modifier, so that the user can opt
+# to have both Alt keys produce the same effect.
+# As a consequence, the Hex_* keys are missing, as are
+#	control altgr keycode 83 = Boot
+#	control altgr keycode 111 = Boot
+#
+# One culture-specific item that will be overridden in many keymaps
+# is the KP_Period: many countries have a KP_Comma instead.
+#
+# One user-preference item will be the function of the Delete key.
+#
+# Old keyboards have 10 function keys, and keymaps have
+# sometimes used shift+F1 = F11, and sometimes shift+F1 = F13.
+# Here we assume an enhanced keyboard (with 12 function keys).
+#
+plain keycode  59 = F1
+plain keycode  60 = F2
+plain keycode  61 = F3
+plain keycode  62 = F4
+plain keycode  63 = F5
+plain keycode  64 = F6
+plain keycode  65 = F7
+plain keycode  66 = F8
+plain keycode  67 = F9
+plain keycode  68 = F10
+plain keycode  87 = F11
+plain keycode  88 = F12
+shift keycode  59 = F13
+shift keycode  60 = F14
+shift keycode  61 = F15
+shift keycode  62 = F16
+shift keycode  63 = F17
+shift keycode  64 = F18
+shift keycode  65 = F19
+shift keycode  66 = F20
+shift keycode  67 = F21
+shift keycode  68 = F22
+shift keycode  87 = F23
+shift keycode  88 = F24
+control keycode  59 = F25
+control keycode  60 = F26
+control keycode  61 = F27
+control keycode  62 = F28
+control keycode  63 = F29
+control keycode  64 = F30
+control keycode  65 = F31
+control keycode  66 = F32
+control keycode  67 = F33
+control keycode  68 = F34
+control keycode  87 = F35
+control keycode  88 = F36
+#
+# The canonical assignment for F37-F48 uses
+#	control shift keycode  59 = F37
+# etc. If you want that, load linux-keys-extd.inc
+#
+# Both Alt+Fn and Control+Alt+Fn switch to Console n
+# (in order to please Linux / dosemu / X).
+# Here Consoles 1..12. For 13..24 load linux-keys-extd.inc
+#
+alt keycode  59 = Console_1
+alt keycode  60 = Console_2
+alt keycode  61 = Console_3
+alt keycode  62 = Console_4
+alt keycode  63 = Console_5
+alt keycode  64 = Console_6
+alt keycode  65 = Console_7
+alt keycode  66 = Console_8
+alt keycode  67 = Console_9
+alt keycode  68 = Console_10
+alt keycode  87 = Console_11
+alt keycode  88 = Console_12
+control alt keycode  59 = Console_1
+control alt keycode  60 = Console_2
+control alt keycode  61 = Console_3
+control alt keycode  62 = Console_4
+control alt keycode  63 = Console_5
+control alt keycode  64 = Console_6
+control alt keycode  65 = Console_7
+control alt keycode  66 = Console_8
+control alt keycode  67 = Console_9
+control alt keycode  68 = Console_10
+control alt keycode  87 = Console_11
+control alt keycode  88 = Console_12
+
+#
+# Keypad keys
+#
+keycode  69 = Num_Lock
+keycode  98 = KP_Divide
+keycode  55 = KP_Multiply
+keycode  74 = KP_Subtract
+keycode  78 = KP_Add
+keycode  96 = KP_Enter
+#
+keycode  71 = KP_7
+keycode  72 = KP_8
+keycode  73 = KP_9
+keycode  75 = KP_4
+keycode  76 = KP_5
+keycode  77 = KP_6
+keycode  79 = KP_1
+keycode  80 = KP_2
+keycode  81 = KP_3
+keycode  82 = KP_0
+#
+keycode  83 = KP_Period			# or KP_Comma
+control alt keycode  83 = Boot
+#
+alt keycode  71 = Ascii_7
+alt keycode  72 = Ascii_8
+alt keycode  73 = Ascii_9
+alt keycode  75 = Ascii_4
+alt keycode  76 = Ascii_5
+alt keycode  77 = Ascii_6
+alt keycode  79 = Ascii_1
+alt keycode  80 = Ascii_2
+alt keycode  81 = Ascii_3
+alt keycode  82 = Ascii_0
+#
+# The four cursor keys
+#
+keycode 103 = Up
+keycode 105 = Left
+keycode 106 = Right
+keycode 108 = Down
+alt keycode 103 = KeyboardSignal
+alt keycode 105 = Decr_Console
+alt keycode 106 = Incr_Console
+#
+# The six edit keys
+#
+keycode 110 = Insert
+keycode 102 = Home		# Find
+keycode 104 = PageUp		# Prior
+keycode 111 = Remove
+keycode 107 = End		# Select
+keycode 109 = PageDown		# Next
+shift keycode 104 = Scroll_Backward
+shift keycode 109 = Scroll_Forward
+control	alt keycode 111 = Boot
+#
+# The three system keys
+#
+keycode  84 = Last_Console		# Alt+SysRq/PrintScrn
+keycode  99 = Control_backslash		# SysRq/PrintScrn
+
+plain   keycode 70 = Scroll_Lock
+shift	keycode 70 = Show_Memory
+control keycode 70 = Show_State
+alt	keycode 70 = Show_Registers
+
+keycode 101 = Break			# Ctrl+Break/Pause
+keycode 119 = Pause			# Break/Pause
+
diff --git a/keymaps/i386/include/linux-keys-extd.inc b/keymaps/i386/include/linux-keys-extd.inc
new file mode 100644
index 0000000..401a456
--- /dev/null
+++ b/keymaps/i386/include/linux-keys-extd.inc
@@ -0,0 +1,37 @@
+#
+# More function keys and console assignments
+# These are not in the main map in order to save keymaps
+# Load after the main keymap, or include in the main keymap.
+#
+keymaps 5,9
+
+control shift keycode  59 = F37
+control shift keycode  60 = F38
+control shift keycode  61 = F39
+control shift keycode  62 = F40
+control shift keycode  63 = F41
+control shift keycode  64 = F42
+control shift keycode  65 = F43
+control shift keycode  66 = F44
+control shift keycode  67 = F45
+control shift keycode  68 = F46
+control shift keycode  87 = F47
+control shift keycode  88 = F48
+#
+alt shift keycode  59 = Console_13
+alt shift keycode  60 = Console_14
+alt shift keycode  61 = Console_15
+alt shift keycode  62 = Console_16
+alt shift keycode  63 = Console_17
+alt shift keycode  64 = Console_18
+alt shift keycode  65 = Console_19
+alt shift keycode  66 = Console_20
+alt shift keycode  67 = Console_21
+alt shift keycode  68 = Console_22
+alt shift keycode  87 = Console_23
+alt shift keycode  88 = Console_24
+#
+# It would be reasonable to add lines like
+#	control alt shift keycode  59 = Console_13
+# but that would again require an extra key map, and is not worth it.
+#
diff --git a/keymaps/i386/include/linux-with-alt-and-altgr.inc b/keymaps/i386/include/linux-with-alt-and-altgr.inc
new file mode 100644
index 0000000..ba7178a
--- /dev/null
+++ b/keymaps/i386/include/linux-with-alt-and-altgr.inc
@@ -0,0 +1,28 @@
+include "linux-keys-bare"
+
+keycode 100 = AltGr
+
+altgr keycode 70 = Show_Registers
+alt keycode 70 = Scroll_Lock
+
+control altgr keycode 83 = Boot
+control altgr keycode 111 = Boot
+
+# Hex keypad keys (for giving a Unicode value in 4 hex digits)
+# Follow lt.map and assign Hex_A .. Hex_F to keypad border.
+altgr keycode  55 = Hex_C
+altgr keycode  69 = Hex_A
+altgr keycode  71 = Hex_7
+altgr keycode  72 = Hex_8
+altgr keycode  73 = Hex_9
+altgr keycode  74 = Hex_D
+altgr keycode  75 = Hex_4
+altgr keycode  76 = Hex_5
+altgr keycode  77 = Hex_6
+altgr keycode  78 = Hex_E
+altgr keycode  79 = Hex_1
+altgr keycode  80 = Hex_2
+altgr keycode  81 = Hex_3
+altgr keycode  82 = Hex_0
+altgr keycode  96 = Hex_F
+altgr keycode  98 = Hex_B
diff --git a/keymaps/i386/include/linux-with-modeshift-altgr.inc b/keymaps/i386/include/linux-with-modeshift-altgr.inc
new file mode 100644
index 0000000..ec8013a
--- /dev/null
+++ b/keymaps/i386/include/linux-with-modeshift-altgr.inc
@@ -0,0 +1,101 @@
+# For keymaps in which AltGr_Lock is used to switch between two alphabets.
+#
+# A common construction is
+#	alt keycode 42 = AltGr_Lock
+#	altgr alt keycode 42 = AltGr_Lock
+#
+# All Linux keys have the same meaning with or without AltGr.
+# No convention for Hex_* has been established.
+
+include "linux-keys-bare"
+
+keycode 100 = AltGr
+
+altgr keycode  59 = F1
+altgr keycode  60 = F2
+altgr keycode  61 = F3
+altgr keycode  62 = F4
+altgr keycode  63 = F5
+altgr keycode  64 = F6
+altgr keycode  65 = F7
+altgr keycode  66 = F8
+altgr keycode  67 = F9
+altgr keycode  68 = F10
+altgr keycode  87 = F11
+altgr keycode  88 = F12
+altgr shift keycode  59 = F13
+altgr shift keycode  60 = F14
+altgr shift keycode  61 = F15
+altgr shift keycode  62 = F16
+altgr shift keycode  63 = F17
+altgr shift keycode  64 = F18
+altgr shift keycode  65 = F19
+altgr shift keycode  66 = F20
+altgr shift keycode  67 = F21
+altgr shift keycode  68 = F22
+altgr shift keycode  87 = F23
+altgr shift keycode  88 = F24
+altgr control keycode  59 = F25
+altgr control keycode  60 = F26
+altgr control keycode  61 = F27
+altgr control keycode  62 = F28
+altgr control keycode  63 = F29
+altgr control keycode  64 = F30
+altgr control keycode  65 = F31
+altgr control keycode  66 = F32
+altgr control keycode  67 = F33
+altgr control keycode  68 = F34
+altgr control keycode  87 = F35
+altgr control keycode  88 = F36
+#
+altgr alt keycode  59 = Console_1
+altgr alt keycode  60 = Console_2
+altgr alt keycode  61 = Console_3
+altgr alt keycode  62 = Console_4
+altgr alt keycode  63 = Console_5
+altgr alt keycode  64 = Console_6
+altgr alt keycode  65 = Console_7
+altgr alt keycode  66 = Console_8
+altgr alt keycode  67 = Console_9
+altgr alt keycode  68 = Console_10
+altgr alt keycode  87 = Console_11
+altgr alt keycode  88 = Console_12
+altgr control alt keycode  59 = Console_1
+altgr control alt keycode  60 = Console_2
+altgr control alt keycode  61 = Console_3
+altgr control alt keycode  62 = Console_4
+altgr control alt keycode  63 = Console_5
+altgr control alt keycode  64 = Console_6
+altgr control alt keycode  65 = Console_7
+altgr control alt keycode  66 = Console_8
+altgr control alt keycode  67 = Console_9
+altgr control alt keycode  68 = Console_10
+altgr control alt keycode  87 = Console_11
+altgr control alt keycode  88 = Console_12
+#
+altgr alt keycode  71 = Ascii_7
+altgr alt keycode  72 = Ascii_8
+altgr alt keycode  73 = Ascii_9
+altgr alt keycode  75 = Ascii_4
+altgr alt keycode  76 = Ascii_5
+altgr alt keycode  77 = Ascii_6
+altgr alt keycode  79 = Ascii_1
+altgr alt keycode  80 = Ascii_2
+altgr alt keycode  81 = Ascii_3
+altgr alt keycode  82 = Ascii_0
+#
+altgr alt keycode 103 = KeyboardSignal
+altgr alt keycode 105 = Decr_Console
+altgr alt keycode 106 = Incr_Console
+#
+altgr shift keycode 104 = Scroll_Backward
+altgr shift keycode 109 = Scroll_Forward
+#
+# altgr control keycode 83 = Boot
+altgr control alt keycode 83 = Boot
+# altgr control keycode 111 = Boot
+altgr control alt keycode 111 = Boot
+#
+# an exception - altgr changes the function
+#
+altgr   keycode 70 = Show_Registers
diff --git a/keymaps/i386/include/linux-with-two-alt-keys.inc b/keymaps/i386/include/linux-with-two-alt-keys.inc
new file mode 100644
index 0000000..223bea6
--- /dev/null
+++ b/keymaps/i386/include/linux-with-two-alt-keys.inc
@@ -0,0 +1,6 @@
+# For keymaps in which both Alt keys are equivalent
+# No convention for Hex_* has been established.
+
+include "linux-keys-bare"
+
+keycode 100 = Alt
diff --git a/keymaps/i386/include/qwerty-layout.inc b/keymaps/i386/include/qwerty-layout.inc
new file mode 100644
index 0000000..0cd573c
--- /dev/null
+++ b/keymaps/i386/include/qwerty-layout.inc
@@ -0,0 +1,30 @@
+# qwerty-layout
+keycode 16 = q
+keycode 17 = w
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = y
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+#
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+#
+keycode 44 = z
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+#
diff --git a/keymaps/i386/include/qwertz-layout.inc b/keymaps/i386/include/qwertz-layout.inc
new file mode 100644
index 0000000..91ea77d
--- /dev/null
+++ b/keymaps/i386/include/qwertz-layout.inc
@@ -0,0 +1,30 @@
+# qwertz-layout
+keycode 16 = q
+keycode 17 = w
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = z
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+#
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+#
+keycode 44 = y
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+#
diff --git a/keymaps/i386/include/windowkeys.map b/keymaps/i386/include/windowkeys.map
new file mode 100644
index 0000000..bb5517f
--- /dev/null
+++ b/keymaps/i386/include/windowkeys.map
@@ -0,0 +1,5 @@
+# Extra 105 windows keys
+
+keycode 125 = Decr_Console
+keycode 126 = Incr_Console
+keycode 127 = Last_Console
diff --git a/keymaps/i386/mk_modmap b/keymaps/i386/mk_modmap
new file mode 100755
index 0000000..0065b43
--- /dev/null
+++ b/keymaps/i386/mk_modmap
@@ -0,0 +1,377 @@
+#!/bin/sh
+# mk_modmap
+# Tries to translate a keytable file into a file parseable by xmodmap
+#
+# This is a hack, and has a lot of magic numbers and names hardcoded
+# into it. Suggestions on how to avoid this are welcome.
+#
+# Kjetil T. Homme, University of Oslo 1993
+# <kjetilho@ifi.uio.no>
+#
+# Added support for BackSpace, dead keys, Cyrillic, Greek and Hebrew keysysms
+# Pablo Saratxaga <srtxg@chanae.stben.be> - May 1997
+#
+# Added support for keys found in Microsoft keyboards, Compose keysym
+# (translates to Multi_key in X11) and for numeric hexadecimal values.
+# Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org> - Jun 1997
+
+case $1 in
+	-v*)	verbose=1; shift ;;
+esac
+
+if test ! -f /usr/include/X11/X.h; then
+	echo Make sure you have a link to you X include files called
+	echo /usr/include/X11 first.
+	exit 1
+fi
+
+cat <<__EOH__
+! Converted keytable file to xmodmap file
+! with `basename $0` by `whoami`@`hostname` `date`
+clear Mod1
+clear Mod2
+__EOH__
+
+awk -F'#' '
+	/[a-z]+.*keycode/ { next }
+	/^[ \t]*$/ { next }
+	/^string/ { next }
+	{ sub("^[ \t]*", "") }
+	NF > 1 {
+		printf("!");
+		for (i = 2; i <= NF; i++) {
+			printf(" " $i);
+			$i = "";
+		}
+		print "";
+		if ($1 == "")
+			next;
+	}
+	{ print }
+' "$@" | awk -v verbose=$verbose '
+	BEGIN {
+		while (getline < "/usr/include/X11/keysymdef.h" == 1) {
+			if ($0 ~ /XK_/) {
+				sub(/.*XK_/, "");
+				sub(/[\t ].*/, "");
+				valid[$0] = 1;
+			}
+		}
+		valid["X386Sys_Req"] = 1;
+		valid["BackSpace"] = 1;
+
+		shifts["Control"] = shifts["Shift"] = 1;
+
+		shift_keys[29]  = "Control_L";
+		shift_keys[97]  = "Control_R";
+		shift_keys[42]  = "Shift_L";
+		shift_keys[54]  = "Shift_R";
+
+		trans_keys[ 96] = 108; # KP_Enter
+		trans_keys[ 97] = 109; # Control_R
+		trans_keys[ 98] = 112; # KP_Divide
+		trans_keys[100] = 113; # Mode_switch (AltGr)
+		trans_keys[101] = 114; # Break
+		trans_keys[103] =  98; # Up
+		trans_keys[104] =  99; # Prior
+		trans_keys[105] = 100; # Left
+		trans_keys[106] = 102; # Right
+		trans_keys[108] = 104; # Down
+		trans_keys[109] = 105; # Next
+		trans_keys[110] = 106; # Insert
+		trans_keys[111] = 107; # Delete
+		trans_keys[125] = 115; # left windows key (MS keyboards)
+		trans_keys[126] = 116; # right windows key (MS keyboards)
+		trans_keys[127] = 117; # menu key (MS keyboards)
+
+		trans_names["Alt"]	= "Alt_L Meta_L";
+		trans_names["AltGr"]	= "Mode_switch";
+		trans_names["one"]	= "1";
+		trans_names["two"]	= "2";
+		trans_names["three"]	= "3";
+		trans_names["four"]	= "4";
+		trans_names["five"]	= "5";
+		trans_names["six"]	= "6";
+		trans_names["seven"]	= "7";
+		trans_names["eight"]	= "8";
+		trans_names["nine"]	= "9";
+		trans_names["zero"]	= "0";
+		trans_names["KP_Comma"]	= "KP_Decimal";
+		trans_names["dead_tilde"]	= "dead_tilde";
+		trans_names["dead_circumflex"]	= "dead_circumflex";
+		trans_names["dead_acute"]	= "dead_acute";
+		trans_names["dead_grave"]	= "dead_grave";
+		trans_names["dead_diaeresis"]	= "dead_diaeresis";
+		trans_names["dead_cedilla"]	= "dead_cedilla";
+		trans_names["dead_ogonek"]	= "dead_ogonek";
+		trans_names["dead_caron"]	= "dead_caron";
+		trans_names["dead_breve"]	= "dead_breve";
+		trans_names["dead_doubleacute"]	= "dead_doubleacute";
+		trans_names["Compose"]		= "Multi_key";
+#		trans_names["Last_Console"]	= "X386Sys_Req";
+# Greek
+		trans_names["Alphaaccent"]	= "Greek_ALPHAaccent";
+		trans_names["Epsilonaccent"]	= "Greek_EPSILONaccent";
+		trans_names["Etaaccent"]	= "Greek_ETAaccent";
+		trans_names["Iotaaccent"]	= "Greek_IOTAaccent";
+		trans_names["Iotadiaeresis"]	= "Greek_IOTAdiaeresis";
+		trans_names["Omicronaccent"]	= "Greek_OMICRONaccent";
+		trans_names["Upsilonaccent"]	= "Greek_UPSILONaccent";
+		trans_names["Upsilondieresis"]	= "Greek_UPSILONdieresis";
+		trans_names["Omegaaccent"]	= "Greek_OMEGAaccent";
+		trans_names["Alpha"]	= "Greek_ALPHA";
+		trans_names["Beta"]	= "Greek_BETA";
+		trans_names["Gamma"]	= "Greek_GAMMA";
+		trans_names["Delta"]	= "Greek_DELTA";
+		trans_names["Epsilon"]	= "Greek_EPSILON";
+		trans_names["Zeta"]	= "Greek_ZETA";
+		trans_names["Eta"]	= "Greek_ETA";
+		trans_names["Theta"]	= "Greek_THETA";
+		trans_names["Iota"]	= "Greek_IOTA";
+		trans_names["Kappa"]	= "Greek_KAPPA";
+		trans_names["Lamda"]	= "Greek_LAMDA";
+		trans_names["Lambda"]	= "Greek_LAMBDA";
+		trans_names["Mu"]	= "Greek_MU";
+		trans_names["Nu"]	= "Greek_NU";
+		trans_names["Xi"]	= "Greek_XI";
+		trans_names["Ksi"]	= "Greek_XI";
+		trans_names["Omicron"]	= "Greek_OMICRON";
+		trans_names["Pi"]	= "Greek_PI";
+		trans_names["Rho"]	= "Greek_RHO";
+		trans_names["Sigma"]	= "Greek_SIGMA";
+		trans_names["Tau"]	= "Greek_TAU";
+		trans_names["Upsilon"]	= "Greek_UPSILON";
+		trans_names["Phi"]	= "Greek_PHI";
+		trans_names["Chi"]	= "Greek_CHI";
+		trans_names["Khi"]	= "Greek_CHI";
+		trans_names["Psi"]	= "Greek_PSI";
+		trans_names["Omega"]	= "Greek_OMEGA";
+		trans_names["accent"]	= "Greek_accentdieresis";
+		trans_names["horizbar"]	= "Greek_horizbar";
+		trans_names["alphaaccent"]	= "Greek_alphaaccent";
+		trans_names["epsilonaccent"]	= "Greek_epsilonaccent";
+		trans_names["etaaccent"]	= "Greek_etaaccent";
+		trans_names["iotaaccent"]	= "Greek_iotaaccent";
+		trans_names["iotadieresis"]	= "Greek_iotadieresis";
+		trans_names["iotaaccentdieresis"]	= "Greek_iotaaccentdieresis";
+		trans_names["omicronaccent"]	= "Greek_omicronaccent";
+		trans_names["upsilonaccent"]	= "Greek_upsilonaccent";
+		trans_names["upsilondieresis"]	= "Greek_upsilondieresis";
+		trans_names["upsilonaccentdieresis"]	= "Greek_upsilonaccentdieresis";
+		trans_names["omegaaccent"]	= "Greek_omegaaccent";
+		trans_names["alpha"]	= "Greek_alpha";
+		trans_names["beta"]	= "Greek_beta";
+		trans_names["gamma"]	= "Greek_gamma";
+		trans_names["delta"]	= "Greek_delta";
+		trans_names["epsilon"]	= "Greek_epsilon";
+		trans_names["zeta"]	= "Greek_zeta";
+		trans_names["eta"]	= "Greek_eta";
+		trans_names["theta"]	= "Greek_theta";
+		trans_names["iota"]	= "Greek_iota";
+		trans_names["kappa"]	= "Greek_kappa";
+		trans_names["lamda"]	= "Greek_lamda";
+		trans_names["lambda"]	= "Greek_lambda";
+		trans_names["mu"]	= "Greek_mu";
+		trans_names["nu"]	= "Greek_nu";
+		trans_names["xi"]	= "Greek_xi";
+		trans_names["ksi"]	= "Greek_xi";
+		trans_names["omicron"]	= "Greek_omicron";
+		trans_names["pi"]	= "Greek_pi";
+		trans_names["rho"]	= "Greek_rho";
+		trans_names["sigma"]	= "Greek_sigma";
+		trans_names["terminalsigma"]	= "Greek_finalsmallsigma";
+		trans_names["tau"]	= "Greek_tau";
+		trans_names["upsilon"]	= "Greek_upsilon";
+		trans_names["phi"]	= "Greek_phi";
+		trans_names["chi"]	= "Greek_chi";
+		trans_names["khi"]	= "Greek_chi";
+		trans_names["psi"]	= "Greek_psi";
+		trans_names["omega"]	= "Greek_omega";
+		trans_names["switch"]	= "Greek_switch";
+# Cyrillic
+		trans_names["cyrillic_capital_letter_io"]	= "Cyrillic_IO";
+		trans_names["cyrillic_capital_letter_je"]	= "Cyrillic_JE";
+		trans_names["cyrillic_capital_letter_lje"]	= "Cyrillic_LJE";
+		trans_names["cyrillic_capital_letter_nje"]	= "Cyrillic_NJE";
+		trans_names["cyrillic_capital_letter_dzhe"]	= "Cyrillic_DZHE";
+		trans_names["cyrillic_capital_letter_yu"]	= "Cyrillic_YU";
+		trans_names["cyrillic_capital_letter_iu"]	= "Cyrillic_YU";
+		trans_names["cyrillic_capital_letter_a"]	= "Cyrillic_A";
+		trans_names["cyrillic_capital_letter_be"]	= "Cyrillic_BE";
+		trans_names["cyrillic_capital_letter_tse"]	= "Cyrillic_TSE";
+		trans_names["cyrillic_capital_letter_de"]	= "Cyrillic_DE";
+		trans_names["cyrillic_capital_letter_ie"]	= "Cyrillic_IE";
+		trans_names["cyrillic_capital_letter_ef"]	= "Cyrillic_EF";
+		trans_names["cyrillic_capital_letter_ghe"]	= "Cyrillic_GHE";
+		trans_names["cyrillic_capital_letter_ge"]	= "Cyrillic_GHE";
+		trans_names["cyrillic_capital_letter_ha"]	= "Cyrillic_HA";
+		trans_names["cyrillic_capital_letter_kha"]	= "Cyrillic_HA";
+		trans_names["cyrillic_capital_letter_i"]	= "Cyrillic_I";
+		trans_names["cyrillic_capital_letter_ii"]	= "Cyrillic_I";
+		trans_names["cyrillic_capital_letter_short_i"]	= "Cyrillic_SHORTI";
+		trans_names["cyrillic_capital_letter_short_ii"]	= "Cyrillic_SHORTI";
+		trans_names["cyrillic_capital_letter_ka"]	= "Cyrillic_KA";
+		trans_names["cyrillic_capital_letter_el"]	= "Cyrillic_EL";
+		trans_names["cyrillic_capital_letter_em"]	= "Cyrillic_EM";
+		trans_names["cyrillic_capital_letter_en"]	= "Cyrillic_EN";
+		trans_names["cyrillic_capital_letter_o"]	= "Cyrillic_O";
+		trans_names["cyrillic_capital_letter_pe"]	= "Cyrillic_PE";
+		trans_names["cyrillic_capital_letter_ya"]	= "Cyrillic_YA";
+		trans_names["cyrillic_capital_letter_ia"]	= "Cyrillic_YA";
+		trans_names["cyrillic_capital_letter_er"]	= "Cyrillic_ER";
+		trans_names["cyrillic_capital_letter_es"]	= "Cyrillic_ES";
+		trans_names["cyrillic_capital_letter_te"]	= "Cyrillic_TE";
+		trans_names["cyrillic_capital_letter_u"]	= "Cyrillic_U";
+		trans_names["cyrillic_capital_letter_zhe"]	= "Cyrillic_ZHE";
+		trans_names["cyrillic_capital_letter_ve"]	= "Cyrillic_VE";
+		trans_names["cyrillic_capital_soft_sign"]	= "Cyrillic_SOFTSIGN";
+		trans_names["cyrillic_capital_letter_yeru"]	= "Cyrillic_YERU";
+		trans_names["cyrillic_capital_letter_yeri"]	= "Cyrillic_YERU";
+		trans_names["cyrillic_capital_letter_ze"]	= "Cyrillic_ZE";
+		trans_names["cyrillic_capital_letter_sha"]	= "Cyrillic_SHA";
+		trans_names["cyrillic_capital_letter_e"]	= "Cyrillic_E";
+		trans_names["cyrillic_capital_letter_reversed_e"]	= "Cyrillic_E";
+		trans_names["cyrillic_capital_letter_shcha"]	= "Cyrillic_SHCHA";
+		trans_names["cyrillic_capital_letter_che"]	= "Cyrillic_CHE";
+		trans_names["cyrillic_capital_hard_sign"]	= "Cyrillic_HARDSIGN";
+		trans_names["cyrillic_small_letter_io"]	= "Cyrillic_io";
+		trans_names["cyrillic_small_letter_je"]	= "Cyrillic_je";
+		trans_names["cyrillic_small_letter_lje"]	= "Cyrillic_lje";
+		trans_names["cyrillic_small_letter_nje"]	= "Cyrillic_nje";
+		trans_names["cyrillic_small_letter_dzhe"]	= "Cyrillic_dzhe";
+		trans_names["cyrillic_small_letter_yu"]	= "Cyrillic_yu";
+		trans_names["cyrillic_small_letter_iu"]	= "Cyrillic_yu";
+		trans_names["cyrillic_small_letter_a"]	= "Cyrillic_a";
+		trans_names["cyrillic_small_letter_be"]	= "Cyrillic_be";
+		trans_names["cyrillic_small_letter_tse"]	= "Cyrillic_tse";
+		trans_names["cyrillic_small_letter_de"]	= "Cyrillic_de";
+		trans_names["cyrillic_small_letter_ie"]	= "Cyrillic_ie";
+		trans_names["cyrillic_small_letter_ef"]	= "Cyrillic_ef";
+		trans_names["cyrillic_small_letter_ghe"]	= "Cyrillic_ghe";
+		trans_names["cyrillic_small_letter_ge"]	= "Cyrillic_ghe";
+		trans_names["cyrillic_small_letter_ha"]	= "Cyrillic_ha";
+		trans_names["cyrillic_small_letter_kha"]	= "Cyrillic_ha";
+		trans_names["cyrillic_small_letter_i"]	= "Cyrillic_i";
+		trans_names["cyrillic_small_letter_ii"]	= "Cyrillic_i";
+		trans_names["cyrillic_small_letter_short_i"]	= "Cyrillic_shorti";
+		trans_names["cyrillic_small_letter_short_ii"]	= "Cyrillic_shorti";
+		trans_names["cyrillic_small_letter_ka"]	= "Cyrillic_ka";
+		trans_names["cyrillic_small_letter_el"]	= "Cyrillic_el";
+		trans_names["cyrillic_small_letter_em"]	= "Cyrillic_em";
+		trans_names["cyrillic_small_letter_en"]	= "Cyrillic_en";
+		trans_names["cyrillic_small_letter_o"]	= "Cyrillic_o";
+		trans_names["cyrillic_small_letter_pe"]	= "Cyrillic_pe";
+		trans_names["cyrillic_small_letter_ya"]	= "Cyrillic_ya";
+		trans_names["cyrillic_small_letter_ia"]	= "Cyrillic_ya";
+		trans_names["cyrillic_small_letter_er"]	= "Cyrillic_er";
+		trans_names["cyrillic_small_letter_es"]	= "Cyrillic_es";
+		trans_names["cyrillic_small_letter_te"]	= "Cyrillic_te";
+		trans_names["cyrillic_small_letter_u"]	= "Cyrillic_u";
+		trans_names["cyrillic_small_letter_zhe"]	= "Cyrillic_zhe";
+		trans_names["cyrillic_small_letter_ve"]	= "Cyrillic_ve";
+		trans_names["cyrillic_small_soft_sign"]	= "Cyrillic_softsign";
+		trans_names["cyrillic_small_letter_yeru"]	= "Cyrillic_yeru";
+		trans_names["cyrillic_small_letter_yeri"]	= "Cyrillic_yeru";
+		trans_names["cyrillic_small_letter_ze"]	= "Cyrillic_ze";
+		trans_names["cyrillic_small_letter_sha"]	= "Cyrillic_sha";
+		trans_names["cyrillic_small_letter_e"]	= "Cyrillic_e";
+		trans_names["cyrillic_small_letter_reversed_e"]	= "Cyrillic_e";
+		trans_names["cyrillic_small_letter_shcha"]	= "Cyrillic_shcha";
+		trans_names["cyrillic_small_letter_che"]	= "Cyrillic_che";
+		trans_names["cyrillic_small_hard_sign"]	= "Cyrillic_hardsign";
+		trans_names["serbocroatian_cyrillic_capital_letter_dje"]	= "Serbian_DJE";
+		trans_names["serbocroatian_cyrillic_capital_letter_je"]	= "Serbian_JE";
+		trans_names["serbocroatian_cyrillic_capital_letter_lje"]	= "Serbian_LJE";
+		trans_names["serbocroatian_cyrillic_capital_letter_nje"]	= "Serbian_NJE";
+		trans_names["serbocroatian_cyrillic_capital_letter_tshe"]	= "Serbian_TSHE";
+		trans_names["serbocroatian_cyrillic_capital_letter_dze"]	= "Serbian_DZE";
+		trans_names["serbocroatian_cyrillic_small_letter_dje"]	= "Serbian_dje";
+		trans_names["serbocroatian_cyrillic_small_letter_je"]	= "Serbian_je";
+		trans_names["serbocroatian_cyrillic_small_letter_lje"]	= "Serbian_lje";
+		trans_names["serbocroatian_cyrillic_small_letter_nje"]	= "Serbian_nje";
+		trans_names["serbocroatian_cyrillic_small_letter_tshe"]	= "Serbian_tshe";
+		trans_names["serbocroatian_cyrillic_small_letter_dze"]	= "Serbian_dze";
+		trans_names["macedonian_cyrillic_capital_letter_gje"]	= "Macedonia_GJE";
+		trans_names["macedonian_cyrillic_capital_letter_dze"]	= "Macedonia_DSE";
+		trans_names["macedonian_cyrillic_capital_letter_kje"]	= "Macedonia_KJE";
+		trans_names["macedonian_cyrillic_small_letter_gje"]	= "Macedonia_gje";
+		trans_names["macedonian_cyrillic_small_letter_dze"]	= "Macedonia_dse";
+		trans_names["macedonian_cyrillic_small_letter_kje"]	= "Macedonia_kje";
+		trans_names["ukrainian_cyrillic_capital_letter_ie"]	= "Ukrainian_JE";
+		trans_names["ukrainian_cyrillic_capital_letter_i"]	= "Ukrainian_I";
+		trans_names["ukrainian_cyrillic_capital_letter_yi"]	= "Ukrainian_YI";
+		trans_names["ukrainian_cyrillic_small_letter_ie"]	= "Ukrainian_ie";
+		trans_names["ukrainian_cyrillic_small_letter_i"]	= "Ukrainian_i";
+		trans_names["ukrainian_cyrillic_small_letter_yi"]	= "Ukrainian_yi";
+		trans_names["bielorussian_cyrillic_capital_letter_short_u"]	= "Byelorussian_SHORTU";
+		trans_names["bielorussian_cyrillic_capital_letter_i"]	= "Ukrainian_I";
+		trans_names["bielorussian_cyrillic_small_letter_short_u"]	= "Byelorussian_shortu";
+		trans_names["bielorussian_cyrillic_small_letter_i"]	= "Ukrainian_i";
+# Hebrew
+		trans_names["doubleunderscore"]	= "hebrew_doublelowline";
+		trans_names["alef"]	= "hebrew_aleph";
+		trans_names["bet"]	= "hebrew_bet";
+		trans_names["gimel"]	= "hebrew_gimel";
+		trans_names["dalet"]	= "hebrew_dalet";
+		trans_names["he"]	= "hebrew_he";
+		trans_names["vav"]	= "hebrew_waw";
+		trans_names["zayin"]	= "hebrew_zain";
+		trans_names["het"]	= "hebrew_chet";
+		trans_names["tet"]	= "hebrew_tet";
+		trans_names["yod"]	= "hebrew_yod";
+		trans_names["finalkaf"]	= "hebrew_finalkaph";
+		trans_names["kaf"]	= "hebrew_kaph";
+		trans_names["lamed"]	= "hebrew_lamed";
+		trans_names["finalmem"]	= "hebrew_finalmem";
+		trans_names["mem"]	= "hebrew_mem";
+		trans_names["finalnun"]	= "hebrew_finalnun";
+		trans_names["nun"]	= "hebrew_nun";
+		trans_names["samekh"]	= "hebrew_samech";
+		trans_names["ayin"]	= "hebrew_ayin";
+		trans_names["finalpe"]	= "hebrew_finalpe";
+		trans_names["pe"]	= "hebrew_pe";
+		trans_names["finaltsadi"]	= "hebrew_finalzade";
+		trans_names["tsadi"]	= "hebrew_zade";
+		trans_names["qof"]	= "hebrew_qoph";
+		trans_names["resh"]	= "hebrew_resh";
+		trans_names["shin"]	= "hebrew_shin";
+		trans_names["tav"]	= "hebrew_taw";
+	}
+	$1 == "keycode" {
+		output = "";
+		keycode = $2;
+		i = ($3 == "=") ? 4 : 3;
+		for ( ; i <= NF; i++) {
+			sub(/^\+/, "", $i);
+			n = $i;
+			if ($i in shifts)
+				n = shift_keys[keycode];
+			else if ($i in trans_names)
+				n = trans_names[$i];
+
+			if (n in valid || n in valid || $i in trans_names)
+				output = output " " n;
+			else if (n ~ /0x[0-9a-fA-F]*/)
+				output = output " " n;
+			else
+				msg("Skipped " $i);
+		}
+
+		if (keycode in trans_keys)
+			keycode = trans_keys[keycode];
+		else
+			keycode += 8;
+
+		if (keycode > 117)
+			msg("Skipped keycode " keycode-8 ": " output);
+	 	else if (output)
+			printf("keycode %3d =%s\n", keycode, output);
+		next;
+	}
+	{ print }
+	function msg(m) { if (verbose) print m > "/dev/stderr"; }'
+
+cat <<__EOH__
+add Mod1 = Alt_L
+add Mod2 = Mode_switch
+__EOH__
diff --git a/keymaps/i386/qwerty/bg.map b/keymaps/i386/qwerty/bg.map
new file mode 100644
index 0000000..abd200d
--- /dev/null
+++ b/keymaps/i386/qwerty/bg.map
@@ -0,0 +1,291 @@
+# Bulgarian Cyrillic keyboard.map. "Cyrillic" mode is toggled by
+# Right_Ctrl key and shifted by AltGr key.  Eugene Crosser's `ru.map'
+# was used as a template.  Note that this is a "phonetic" keyboard,
+# not a `BDS' one!						--L.Georgiev
+
+keymaps 0-4,6,8,10,12
+strings as usual
+
+		keycode	1 =	Escape	Escape		Escape	Escape
+	alt	keycode	1 =	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+		keycode	3 =	two	at		two	at
+	control	keycode	3 =	nul	
+	alt	keycode	3 =	Meta_two	
+		keycode	4 =	three	numbersign	three	numbersign
+	control	keycode	4 =	Escape
+	alt	keycode	4 =	Meta_three
+		keycode	5 =	four	dollar		four	dollar
+	control	keycode	5 =	Control_backslash
+	alt	keycode	5 =	Meta_four
+		keycode	6 =	five	percent		five	percent
+	control	keycode	6 =	Control_bracketright
+	alt	keycode	6 =	Meta_five
+		keycode	7 =	six	asciicircum	six	asciicircum
+	control	keycode	7 =	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+		keycode	8 =	seven	ampersand	seven	ampersand
+	control	keycode	8 =	Control_underscore
+	alt	keycode	8 =	Meta_seven
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+	alt	keycode	9 =	Meta_eight
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+	alt	keycode	12 =	Meta_minus
+		keycode	13 =	equal	plus		+190	+158
+	alt	keycode	13 =	Meta_equal
+		keycode	14 =	Delete	Delete		Delete	Delete
+	control keycode 14 =	BackSpace
+	alt	keycode	14 =	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+		keycode	16 =	+q	+Q		+191	+159
+	control	keycode	16 =	Control_q
+altgr	control	keycode	16 =	Control_q
+		keycode	17 =	+w	+W		+162	+130
+	control	keycode	17 =	Control_w
+altgr	control	keycode	17 =	Control_w
+		keycode	18 =	+e	+E		+165	+133
+	control	keycode	18 =	Control_e
+altgr	control	keycode	18 =	Control_e
+		keycode	19 =	+r	+R		+176	+144
+	control	keycode	19 =	Control_r
+altgr	control	keycode	19 =	Control_r
+		keycode	20 =	+t	+T		+178	+146
+	control	keycode	20 =	Control_t
+altgr	control	keycode	20 =	Control_t
+		keycode	21 =	+y	+Y		+186	+154
+	control	keycode	21 =	Control_y
+altgr	control	keycode	21 =	Control_y
+		keycode	22 =	+u	+U		+179	+147
+	control	keycode	22 =	Control_u
+altgr	control	keycode	22 =	Control_u
+		keycode	23 =	+i	+I		+168	+136
+	control	keycode	23 =	Tab
+altgr	control	keycode	23 =	Tab
+		keycode	24 =	+o	+O		+174	+142
+	control	keycode	24 =	Control_o
+altgr	control	keycode	24 =	Control_o
+		keycode	25 =	+p	+P		+175	+143
+	control	keycode	25 =	Control_p
+altgr	control	keycode	25 =	Control_p
+		keycode	26 =	bracketleft braceleft	+184	+152
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+		keycode	27 =	bracketright braceright	+185	+153
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	Meta_Control_m	
+		keycode	29 =	Control	
+		keycode	30 =	+a	+A		+160	+128
+	control	keycode	30 =	Control_a
+altgr	control	keycode	30 =	Control_a
+		keycode	31 =	+s	+S		+177	+145
+	control	keycode	31 =	Control_s
+altgr	control	keycode	31 =	Control_s
+		keycode	32 =	+d	+D		+164	+132
+	control	keycode	32 =	Control_d
+altgr	control	keycode	32 =	Control_d
+		keycode	33 =	+f	+F		+180	+148
+	control	keycode	33 =	Control_f
+altgr	control	keycode	33 =	Control_f
+		keycode	34 =	+g	+G		+163	+131
+	control	keycode	34 =	Control_g
+altgr	control	keycode	34 =	Control_g
+		keycode	35 =	+h	+H		+181	+149
+	control	keycode	35 =	BackSpace
+altgr	control	keycode	35 =	BackSpace
+		keycode	36 =	+j	+J		+169	+137
+	control	keycode	36 =	Linefeed
+altgr	control	keycode	36 =	Linefeed
+		keycode	37 =	+k	+K		+170	+138
+	control	keycode	37 =	Control_k
+altgr	control	keycode	37 =	Control_k
+		keycode	38 =	+l	+L		+171	+139
+	control	keycode	38 =	Control_l
+altgr	control	keycode	38 =	Control_l
+		keycode	39 =	semicolon colon		semicolon colon
+	alt	keycode	39 =	Meta_semicolon
+		keycode	40 =	apostrophe quotedbl	apostrophe quotedbl
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+		keycode	41 =	grave	asciitilde	+183	+151
+	control	keycode	41 =	nul	
+	alt	keycode	41 =	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+		keycode	44 =	+z	+Z		+167	+135
+	control	keycode	44 =	Control_z
+altgr	control	keycode	44 =	Control_z
+		keycode	45 =	+x	+X		+188	+156
+	control	keycode	45 =	Control_x
+altgr	control	keycode	45 =	Control_x
+		keycode	46 =	+c	+C		+182	+150
+	control	keycode	46 =	Control_c
+altgr	control	keycode	46 =	Control_c
+		keycode	47 =	+v	+V		+166	+134
+	control	keycode	47 =	Control_v
+altgr	control	keycode	47 =	Control_v
+		keycode	48 =	+b	+B		+161	+129
+	control	keycode	48 =	Control_b
+altgr	control	keycode	48 =	Control_b
+		keycode	49 =	+n	+N		+173	+141
+	control	keycode	49 =	Control_n
+altgr	control	keycode	49 =	Control_n
+		keycode	50 =	+m	+M		+172	+140
+	control	keycode	50 =	Control_m
+altgr	control	keycode	50 =	Control_m
+		keycode	51 =	comma	less		comma	less
+	alt	keycode	51 =	Meta_comma
+		keycode	52 =	period	greater		period	greater
+	alt	keycode	52 =	Meta_period
+		keycode	53 =	slash	question	slash	question
+	control	keycode	53 =	Delete	
+	alt	keycode	53 =	Meta_slash
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+	alt	keycode	57 =	Meta_space
+		keycode	58 =	Caps_Lock
+		keycode	59 =	F1	F11	F1	F11
+	control	keycode	59 =	F1	
+	alt	keycode	59 =	Console_1
+altgr	alt	keycode	59 =	Console_1
+		keycode	60 =	F2	F12	F2	F12
+	control	keycode	60 =	F2	
+	alt	keycode	60 =	Console_2
+altgr	alt	keycode	60 =	Console_2
+		keycode	61 =	F3	F13	F3	F13
+	control	keycode	61 =	F3	
+	alt	keycode	61 =	Console_3
+altgr	alt	keycode	61 =	Console_3
+		keycode	62 =	F4	F14	F4	F14
+	control	keycode	62 =	F4	
+	alt	keycode	62 =	Console_4
+altgr	alt	keycode	62 =	Console_4
+		keycode	63 =	F5	F15	F5	F15
+	control	keycode	63 =	F5	
+	alt	keycode	63 =	Console_5
+altgr	alt	keycode	63 =	Console_5
+		keycode	64 =	F6	F16	F6	F16
+	control	keycode	64 =	F6	
+	alt	keycode	64 =	Console_6
+altgr	alt	keycode	64 =	Console_6
+		keycode	65 =	F7	F17	F7	F17
+	control	keycode	65 =	F7	
+	alt	keycode	65 =	Console_7
+altgr	alt	keycode	65 =	Console_7
+		keycode	66 =	F8	F18	F8	F18
+	control	keycode	66 =	F8	
+	alt	keycode	66 =	Console_8
+altgr	alt	keycode	66 =	Console_8
+		keycode	67 =	F9	F19	F9	F19
+	control	keycode	67 =	F9	
+	alt	keycode	67 =	Console_9
+altgr	alt	keycode	67 =	Console_9
+		keycode	68 =	F10	F20	F10	F20
+	control	keycode	68 =	F10	
+	alt	keycode	68 =	Console_10
+altgr	alt	keycode	68 =	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+		keycode	87 =	F11	F11	F11	F11
+	control	keycode	87 =	F11	
+	alt	keycode	87 =	Console_11
+altgr	alt	keycode	87 =	Console_11
+		keycode	88 =	F12	F12	F12	F12
+	control	keycode	88 =	F12	
+	alt	keycode	88 =	Console_12
+altgr	alt	keycode	88 =	Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+		keycode	97 =	AltGr_Lock
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+	alt	keycode	99 =	Control_backslash
+		keycode	100 =	AltGr	
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =   Decr_Console
+		keycode	106 =	Right	
+        alt     keycode 106 =   Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
diff --git a/keymaps/i386/qwerty/br-abnt2.map b/keymaps/i386/qwerty/br-abnt2.map
new file mode 100644
index 0000000..87b4952
--- /dev/null
+++ b/keymaps/i386/qwerty/br-abnt2.map
@@ -0,0 +1,67 @@
+# br-abnt2.map
+# Mapa para teclados ABNT2
+# Antonio Dias <accdias@sst.com.br>
+#
+# (slightly adapted, aeb)
+alt_is_meta
+keymaps 0-2,4-6,8,12
+include "qwerty-layout"
+	altgr   keycode 19 = registered
+	altgr  	keycode 50 = mu               
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+keycode   1 = Escape
+keycode   2 = one exclam onesuperior          
+keycode   3 = two at twosuperior
+keycode   4 = three numbersign threesuperior      
+	control		keycode   4 = Escape          
+keycode   5 = four dollar sterling Control_backslash
+keycode   6 = five percent cent         
+keycode   7 = six dead_diaeresis notsign     
+keycode   8 = seven ampersand braceleft Control_underscore
+keycode   9 = eight asterisk bracketleft Delete          
+keycode  10 = nine parenleft bracketright    
+keycode  11 = zero parenright braceright      
+keycode  12 = minus underscore 
+        control 	keycode  12 = Control_underscore 
+keycode  13 = equal plus section            
+keycode  14 = Delete
+	control		keycode  14 = BackSpace       
+keycode  15 = Tab
+keycode  26 = dead_acute dead_grave       
+	control		keycode  26 = Escape          
+keycode  27 = bracketleft braceleft ordfeminine 
+keycode  28 = Return          
+	alt		keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+
+keycode  39 = +ccedilla +Ccedilla
+keycode  40 = dead_tilde dead_circumflex
+        shift control 	keycode  40 = Control_asciicircum
+keycode  41 = apostrophe quotedbl      
+	control	    	keycode  41 = nul             
+	alt	    	keycode  41 = Meta_grave      
+keycode  42 = Shift           
+keycode  43 = bracketright braceright masculine
+        control     	keycode  43 = Control_bracketright
+        control alt 	keycode  43 = Meta_Control_bracketright
+
+keycode  51 = comma less            
+keycode  52 = period greater         
+	control	        keycode  52 = Compose         
+keycode  53 = semicolon colon
+keycode  54 = Shift           
+
+keycode  56 = Alt             
+keycode  57 = space
+	control	        keycode  57 = nul             
+keycode  58 = Caps_Lock       
+
+keycode  69 = Num_Lock        
+	shift		keycode  69 = Bare_Num_Lock   
+keycode  70 = Scroll_Lock Show_Memory Show_Registers Show_State      
+	alt		keycode  70 = Scroll_Lock     
+
+keycode  86 = backslash bar             
+	alt		keycode  86 = Meta_less       
diff --git a/keymaps/i386/qwerty/cf.map b/keymaps/i386/qwerty/cf.map
new file mode 100644
index 0000000..71faded
--- /dev/null
+++ b/keymaps/i386/qwerty/cf.map
@@ -0,0 +1,105 @@
+# French-Canadian keyboard
+#
+# Original from Simon Kaczor <shogun@step.polymtl.ca>
+# Corrections by Nicolas Pitre <nico@cam.org>
+# April 5, 1997
+#
+keymaps 0-6,8-9,12
+include "qwerty-layout"
+	altgr keycode 24 = section
+	altgr keycode 25 = paragraph
+	altgr keycode 50 = mu
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape           Escape
+	alt	keycode   1 = Meta_Escape
+keycode   2 = one              exclam           plusminus
+	alt	keycode   2 = Meta_one
+	shift	alt	keycode   2 = Meta_exclam
+keycode   3 = two              quotedbl         at
+	control	keycode   3 = nul
+	shift	control	keycode   3 = nul
+	alt	keycode   3 = Meta_two
+	shift	alt	keycode   3 = Meta_at
+keycode   4 = three            slash            sterling
+	control	keycode   4 = Escape
+	alt	keycode   4 = Meta_three
+	shift	alt	keycode   4 = Meta_numbersign
+keycode   5 = four             dollar           cent
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four
+	shift	alt	keycode   5 = Meta_dollar
+keycode   6 = five             percent          currency
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five
+	shift	alt	keycode   6 = Meta_percent
+keycode   7 = six              question         notsign
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six
+	shift	alt	keycode   7 = Meta_asciicircum
+keycode   8 = seven            ampersand        brokenbar
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         twosuperior
+	control	keycode   9 = Delete
+	alt	keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        threesuperior
+	alt	keycode  10 = Meta_nine
+keycode  11 = zero             parenright       onequarter
+	alt	keycode  11 = Meta_zero
+keycode  12 = minus            underscore       onehalf
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus
+keycode  13 = equal            plus             threequarters
+	alt	keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	control	keycode  14 = BackSpace
+	alt	keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt	keycode  15 = Meta_Tab
+keycode  26 = dead_circumflex  dead_circumflex  bracketleft
+	control	keycode  26 = Escape
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft
+keycode  27 = dead_cedilla     dead_diaeresis   bracketright
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = semicolon        colon            asciitilde
+	alt	keycode  39 = Meta_semicolon
+keycode  40 = dead_grave       dead_grave       braceleft
+	control	keycode  40 = Control_g
+	alt	keycode  40 = Meta_apostrophe
+keycode  41 = numbersign       bar              backslash
+	control	keycode  41 = nul
+	alt	keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = less             greater          braceright
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash
+	shift	alt	keycode  43 = Meta_bar
+keycode  51 = comma            apostrophe       underscore
+	alt	keycode  51 = Meta_comma
+	shift	alt	keycode  51 = Meta_less
+keycode  52 = period           period
+	control	keycode  52 = Compose
+	alt	keycode  52 = Meta_period
+	shift	alt	keycode  52 = Meta_greater
+keycode  53 = +eacute           +Eacute           dead_acute
+	control	keycode  53 = Delete
+	alt	keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control	keycode  57 = nul
+	alt	keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = guillemotleft    guillemotright   degree
+	alt	keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/cz-lat2-prog.map b/keymaps/i386/qwerty/cz-lat2-prog.map
new file mode 100644
index 0000000..1a189bb
--- /dev/null
+++ b/keymaps/i386/qwerty/cz-lat2-prog.map
@@ -0,0 +1,259 @@
+# Czech ISO 8859-2 keyboard map for text console
+# Written and (c) copyright by Jan Kasprzak (kas@ics.muni.cz)
+# You can distribute this file under the terms of GNU General
+# Public License (GPL). See the file COPYING.
+# Modified by Jan Kybic, kybic@earn.cvut.cz
+#
+# Ceska klavesnice se zapne a vypne klavesou Pause.
+# Klavesou AltGr (Right Alt) je mozne se prepnout z ceske do US a naopak.
+# Klavesa Pause pak funguje jako AltGr-lock.
+#
+# Klavesnice je programatorska - klavesy prvni rady generuji mala
+# akcentovana pismena, se Shiftem pak cislice. Ostatni pismena s diakritikou
+# je nutne psat pomoci mrtve klavesy, coz je klavesa s kodem 86 - v mem
+# pripade je to klavesa vlevo od Z, puvodne dublujici klavesu s kodem 43,
+# t.j. '\' a '|'. Vyznam ostatnich klaves zustava nezmenen.
+#
+# Contributed by "Pavel JANIK ml." <pjanik@aida.inet.cz>
+#             Date: Thu, 6 Mar 1997 20:24:27 +0100 (MET)
+# ftp site:   ftp://ftp.inet.cz/pub/People/Pavel.Janik/CzechKeyMaps/
+#
+charset "iso-8859-2"
+keymaps 0-15
+strings as usual
+keycode 1 = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape
+keycode 2 = one exclam plus one VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_one
+keycode 3 = two at ecaron two nul nul nul nul Meta_two Meta_two Meta_two Meta_two
+keycode 4 = three numbersign scaron three Escape VoidSymbol Escape VoidSymbol Meta_three Meta_three Meta_three Meta_three Meta_three
+keycode 5 = four dollar ccaron four Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_four Meta_four Meta_four Meta_four
+keycode 6 = five percent rcaron five Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_five Meta_five Meta_five Meta_five
+keycode 7 = six asciicircum zcaron six Control_asciicircum VoidSymbol Control_asciicircum VoidSymbol Meta_six Meta_six Meta_six Meta_six
+keycode 8 = seven ampersand yacute seven Control_underscore  VoidSymbol Control_underscore VoidSymbol Meta_seven Meta_seven Meta_seven Meta_seven
+keycode 9 = eight asterisk aacute eight Delete VoidSymbol Delete VoidSymbol Meta_eight Meta_eight Meta_eight Meta_eight
+keycode 10 = nine parenleft iacute nine VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_nine Meta_nine Meta_nine Meta_nine
+keycode 11 = zero parenright eacute zero VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_zero Meta_zero Meta_zero
+keycode 12 = minus underscore minus underscore Control_underscore Control_underscore Control_underscore Control_underscore Meta_minus Meta_minus Meta_minus Meta_minus
+keycode 13 = equal plus dead_acute dead_circumflex VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_equal Meta_equal Meta_equal Meta_equal
+keycode 14 = Delete Delete Delete Delete VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Delete Meta_Delete Meta_Delete Meta_Delete
+keycode 15 = Tab Tab Tab Tab VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Tab Meta_Tab Meta_Tab Meta_Tab
+keycode 16 = q
+keycode 17 = w
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = y
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = bracketleft braceleft  bracketleft braceleft
+keycode 27 = bracketright braceright  bracketright braceright
+keycode 28 = Return
+altgr keycode 28 = Return
+alt keycode 28 = Meta_Control_m
+alt altgr keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = semicolon colon  semicolon colon
+keycode 40 = apostrophe quotedbl  apostrophe quotedbl
+keycode 41 = grave asciitilde grave asciitilde
+keycode 42 = Shift
+keycode 43 = backslash bar backslash bar Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_backslash VoidSymbol Meta_backslash
+keycode 44 = z
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+keycode 51 = comma less comma less VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_less
+keycode 52 = period greater period greater Compose VoidSymbol Compose VoidSymbol Meta_period Meta_greater Meta_period Meta_greater
+keycode 53 = slash question slash question Delete VoidSymbol Delete VoidSymbol Meta_slash Meta_question Meta_slash Meta_question 
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+keycode 56 = Alt
+keycode 57 = space space space space nul nul nul nul Meta_space Meta_space Meta_space Meta_space
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 F1 F13 F1 VoidSymbol F1 VoidSymbol Console_1 VoidSymbol Console_1
+keycode 60 = F2 F14 F2 F14 F2 VoidSymbol F2 VoidSymbol Console_2 VoidSymbol Console_2
+keycode 61 = F3 F15 F3 F15 F3 VoidSymbol F3 VoidSymbol Console_3 VoidSymbol Console_3
+keycode 62 = F4 F16 F4 F15 F4 VoidSymbol F4 VoidSymbol Console_4 VoidSymbol Console_4
+keycode 63 = F5 F17 F5 F15 F5 VoidSymbol F5 VoidSymbol Console_5 VoidSymbol Console_5
+keycode 64 = F6 F18 F6 F15 F6 VoidSymbol F6 VoidSymbol Console_6 VoidSymbol Console_6
+keycode 65 = F7 F19 F7 F15 F7 VoidSymbol F7 VoidSymbol Console_7 VoidSymbol Console_7
+keycode 66 = F8 F20 F8 F15 F8 VoidSymbol F8 VoidSymbol Console_8 VoidSymbol Console_8
+keycode 67 = F9 F9 F9 F9 F9 VoidSymbol F9 VoidSymbol Console_9 VoidSymbol Console_9
+keycode 68 = F10 F10 F10 F10 F10 VoidSymbol F10 VoidSymbol Console_10 VoidSymbol Console_10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock Show_Memory Show_Registers
+control keycode 70 = Show_State
+alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_4
+alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+keycode 79 = KP_1
+alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+alt keycode 82 = Ascii_0
+keycode 83 = KP_Period
+control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = backslash bar dead_acute dead_circumflex
+alt keycode 86 = Meta_less
+keycode 87 = F11 F11 F11 F11 F11 VoidSymbol F11 VoidSymbol Console_11 VoidSymbol Console_11
+keycode 88 = F12 F12 F12 F12 F12 VoidSymbol F12 VoidSymbol Console_12 VoidSymbol Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+keycode 97 = Control
+keycode 98 = KP_Divide
+keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
+alt keycode 99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+	alt keycode 105 = Decr_Console
+	alt altgr keycode 105 = Decr_Console
+keycode 106 = Right
+	alt keycode 106 = Incr_Console
+	alt altgr keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+control alt keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+compose ',' 'A' to '¡'
+compose '/' 'L' to '£'
+compose '^' 'L' to '¥'
+compose '\'' 'S' to '¦'
+compose '^' 'S' to '©'
+compose ',' 'S' to 'ª'
+compose '^' 'T' to '«'
+compose '\'' 'Z' to '¬'
+compose '^' 'Z' to '®'
+compose '.' 'Z' to '¯'
+compose ',' 'a' to '±'
+compose '/' 'l' to '³'
+compose '^' 'l' to 'µ'
+compose '\'' 's' to '¶'
+compose '^' 's' to '¹'
+compose ',' 's' to 'º'
+compose '^' 't' to '»'
+compose '\'' 'z' to '¼'
+compose '^' 'z' to '¾'
+compose '.' 'z' to '¿'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '^' 'A' to 'Â'
+compose '^' 'A' to 'Ã'
+compose ':' 'A' to 'Ä'
+compose '\'' 'L' to 'Å'
+compose '\'' 'C' to 'Æ'
+compose ',' 'C' to 'Ç'
+compose '^' 'C' to 'È'
+compose '\'' 'E' to 'É'
+compose ',' 'E' to 'Ê'
+compose '"' 'E' to 'Ë'
+compose '^' 'E' to 'Ì'
+compose '\'' 'I' to 'Í'
+compose '^' 'I' to 'Î'
+compose '^' 'D' to 'Ï'
+compose '-' 'D' to 'Ð'
+compose '\'' 'N' to 'Ñ'
+compose '^' 'N' to 'Ò'
+compose '\'' 'O' to 'Ó'
+compose '^' 'O' to 'Ô'
+compose '"' 'O' to 'Õ'
+compose ':' 'O' to 'Ö'
+compose '^' 'R' to 'Ø'
+compose '^' 'U' to 'Ù'
+compose '\'' 'U' to 'Ú'
+compose '"' 'U' to 'Û'
+compose ':' 'U' to 'Ü'
+compose '\'' 'Y' to 'Ý'
+compose ',' 'T' to 'Þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to 'ß'
+compose '\'' 'r' to 'à'
+compose '\'' 'a' to 'á'
+compose '^' 'a' to 'â'
+compose '^' 'a' to 'ã'
+compose ':' 'a' to 'ä'
+compose '\'' 'l' to 'å'
+compose '\'' 'c' to 'æ'
+compose ',' 'c' to 'ç'
+compose '^' 'c' to 'è'
+compose '\'' 'e' to 'é'
+compose ',' 'e' to 'ê'
+compose ':' 'e' to 'ë'
+compose '^' 'e' to 'ì'
+compose '\'' 'i' to 'í'
+compose '^' 'e' to 'î'
+compose '^' 'd' to 'ï'
+compose '-' 'd' to 'ð'
+compose '\'' 'n' to 'ñ'
+compose '^' 'n' to 'ò'
+compose '\'' 'o' to 'ó'
+compose '^' 'o' to 'ô'
+compose ':' 'o' to 'õ'
+compose '"' 'o' to 'ö'
+compose '^' 'r' to 'ø'
+compose '^' 'u' to 'ù'
+compose '\'' 'u' to 'ú'
+compose '\'' 'u' to 'ú'
+compose '"' 'u' to 'û'
+compose ':' 'u' to 'ü'
+compose '\'' 'y' to 'ý'
+compose ',' 't' to 'þ'
diff --git a/keymaps/i386/qwerty/cz-lat2.map b/keymaps/i386/qwerty/cz-lat2.map
new file mode 100644
index 0000000..03d1298
--- /dev/null
+++ b/keymaps/i386/qwerty/cz-lat2.map
@@ -0,0 +1,255 @@
+# Czech ISO 8859-2 keyboard map for text console
+# Written and (c) copyright by Jan Kasprzak (kas@ics.muni.cz)
+# You can distribute this file under the terms of GNU General
+# Public License (GPL). See the file COPYING.
+#
+# Ceska klavesnice se zapne a vypne klavesou Pause.
+# Klavesou AltGr (Right Alt) je mozne se prepnout z ceske do US a naopak.
+# Klavesa Pause pak funguje jako AltGr-lock.
+#
+# Klavesnice je kompletne ceska, krome jedineho pripadu:
+# Ma rozlozeni klaves qwerty a nikoliv qwertz, jak je tomu
+# na standardnim ceskem psacim stroji.
+#
+# Contributed by "Pavel JANIK ml." <pjanik@aida.inet.cz>
+#             Date: Thu, 6 Mar 1997 20:24:27 +0100 (MET)
+# ftp site:   ftp://ftp.inet.cz/pub/People/Pavel.Janik/CzechKeyMaps/
+#
+charset "iso-8859-2"
+keymaps 0-15
+strings as usual
+keycode 1 = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape
+keycode 2 = one exclam plus one VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_exclam Meta_one Meta_one
+keycode 3 = two at ecaron two nul nul nul nul Meta_two Meta_two Meta_two Meta_two
+keycode 4 = three numbersign scaron three Escape VoidSymbol Escape VoidSymbol Meta_three Meta_three Meta_three Meta_three Meta_three
+keycode 5 = four dollar ccaron four Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_four Meta_four Meta_four Meta_four
+keycode 6 = five percent rcaron five Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_five Meta_five Meta_five Meta_five
+keycode 7 = six asciicircum zcaron six Control_asciicircum VoidSymbol Control_asciicircum VoidSymbol Meta_six Meta_six Meta_six Meta_six
+keycode 8 = seven ampersand yacute seven Control_underscore  VoidSymbol Control_underscore VoidSymbol Meta_seven Meta_seven Meta_seven Meta_seven
+keycode 9 = eight asterisk aacute eight Delete VoidSymbol Delete VoidSymbol Meta_eight Meta_eight Meta_eight Meta_eight
+keycode 10 = nine parenleft iacute nine VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_nine Meta_nine Meta_nine Meta_nine
+keycode 11 = zero parenright eacute zero VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_zero Meta_zero Meta_zero
+keycode 12 = minus underscore equal percent Control_underscore Control_underscore Control_underscore Control_underscore Meta_minus Meta_minus Meta_minus Meta_minus
+keycode 13 = equal plus dead_acute dead_circumflex VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_equal Meta_equal Meta_equal Meta_equal
+keycode 14 = Delete Delete Delete Delete VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Delete Meta_Delete Meta_Delete Meta_Delete
+keycode 15 = Tab Tab Tab Tab VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Tab Meta_Tab Meta_Tab Meta_Tab
+keycode 16 = q
+keycode 17 = w
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = y
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = bracketleft braceleft uacute slash Escape VoidSymbol Escape VoidSymbol Meta_bracketleft Meta_bracketleft Meta_bracketleft Meta_bracketleft
+keycode 27 = bracketright braceright parenright parenleft Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_bracketright Meta_bracketright Meta_bracketright Meta_bracketright
+keycode 28 = Return
+altgr keycode 28 = Return
+alt keycode 28 = Meta_Control_m
+alt altgr keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = semicolon colon uring quotedbl VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_semicolon Meta_semicolon Meta_semicolon Meta_semicolon
+keycode 40 = apostrophe quotedbl 0xa7 exclam Control_g VoidSymbol Control_g VoidSymbol Meta_apostrophe Meta_apostrophe Meta_apostrophe Meta_exclam
+keycode 41 = grave asciitilde grave semicolon nul VoidSymbol nul VoidSymbol Meta_grave VoidSymbol Meta_grave
+keycode 42 = Shift
+keycode 43 = backslash bar backslash bar Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_backslash VoidSymbol Meta_backslash
+keycode 44 = z
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+keycode 51 = comma less comma question VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_less Meta_comma Meta_question
+keycode 52 = period greater period colon Compose VoidSymbol Compose VoidSymbol Meta_period Meta_greater Meta_period
+keycode 53 = slash question minus underscore Delete VoidSymbol Delete VoidSymbol Meta_slash Meta_question Meta_slash
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+keycode 56 = Alt
+keycode 57 = space space space space nul nul nul nul Meta_space Meta_space Meta_space Meta_space
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 F1 F13 F1 VoidSymbol F1 VoidSymbol Console_1 VoidSymbol Console_1
+keycode 60 = F2 F14 F2 F14 F2 VoidSymbol F2 VoidSymbol Console_2 VoidSymbol Console_2
+keycode 61 = F3 F15 F3 F15 F3 VoidSymbol F3 VoidSymbol Console_3 VoidSymbol Console_3
+keycode 62 = F4 F16 F4 F15 F4 VoidSymbol F4 VoidSymbol Console_4 VoidSymbol Console_4
+keycode 63 = F5 F17 F5 F15 F5 VoidSymbol F5 VoidSymbol Console_5 VoidSymbol Console_5
+keycode 64 = F6 F18 F6 F15 F6 VoidSymbol F6 VoidSymbol Console_6 VoidSymbol Console_6
+keycode 65 = F7 F19 F7 F15 F7 VoidSymbol F7 VoidSymbol Console_7 VoidSymbol Console_7
+keycode 66 = F8 F20 F8 F15 F8 VoidSymbol F8 VoidSymbol Console_8 VoidSymbol Console_8
+keycode 67 = F9 F9 F9 F9 F9 VoidSymbol F9 VoidSymbol Console_9 VoidSymbol Console_9
+keycode 68 = F10 F10 F10 F10 F10 VoidSymbol F10 VoidSymbol Console_10 VoidSymbol Console_10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock Show_Memory Show_Registers
+control keycode 70 = Show_State
+alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_4
+alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+keycode 79 = KP_1
+alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+alt keycode 82 = Ascii_0
+keycode 83 = KP_Period
+control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = less greater bar
+alt keycode 86 = Meta_less
+keycode 87 = F11 F11 F11 F11 F11 VoidSymbol F11 VoidSymbol Console_11 VoidSymbol Console_11
+keycode 88 = F12 F12 F12 F12 F12 VoidSymbol F12 VoidSymbol Console_12 VoidSymbol Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+keycode 97 = Control
+keycode 98 = KP_Divide
+keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
+alt keycode 99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+	alt keycode 105 = Decr_Console
+	alt altgr keycode 105 = Decr_Console
+keycode 106 = Right
+	alt keycode 106 = Incr_Console
+	alt altgr keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+control alt keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+compose ',' 'A' to '¡'
+compose '/' 'L' to '£'
+compose '^' 'L' to '¥'
+compose '\'' 'S' to '¦'
+compose '^' 'S' to '©'
+compose ',' 'S' to 'ª'
+compose '^' 'T' to '«'
+compose '\'' 'Z' to '¬'
+compose '^' 'Z' to '®'
+compose '.' 'Z' to '¯'
+compose ',' 'a' to '±'
+compose '/' 'l' to '³'
+compose '^' 'l' to 'µ'
+compose '\'' 's' to '¶'
+compose '^' 's' to '¹'
+compose ',' 's' to 'º'
+compose '^' 't' to '»'
+compose '\'' 'z' to '¼'
+compose '^' 'z' to '¾'
+compose '.' 'z' to '¿'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '^' 'A' to 'Â'
+compose '^' 'A' to 'Ã'
+compose ':' 'A' to 'Ä'
+compose '\'' 'L' to 'Å'
+compose '\'' 'C' to 'Æ'
+compose ',' 'C' to 'Ç'
+compose '^' 'C' to 'È'
+compose '\'' 'E' to 'É'
+compose ',' 'E' to 'Ê'
+compose '"' 'E' to 'Ë'
+compose '^' 'E' to 'Ì'
+compose '\'' 'I' to 'Í'
+compose '^' 'I' to 'Î'
+compose '^' 'D' to 'Ï'
+compose '-' 'D' to 'Ð'
+compose '\'' 'N' to 'Ñ'
+compose '^' 'N' to 'Ò'
+compose '\'' 'O' to 'Ó'
+compose '^' 'O' to 'Ô'
+compose '"' 'O' to 'Õ'
+compose ':' 'O' to 'Ö'
+compose '^' 'R' to 'Ø'
+compose '^' 'U' to 'Ù'
+compose '\'' 'U' to 'Ú'
+compose '"' 'U' to 'Û'
+compose ':' 'U' to 'Ü'
+compose '\'' 'Y' to 'Ý'
+compose ',' 'T' to 'Þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to 'ß'
+compose '\'' 'r' to 'à'
+compose '\'' 'a' to 'á'
+compose '^' 'a' to 'â'
+compose '^' 'a' to 'ã'
+compose ':' 'a' to 'ä'
+compose '\'' 'l' to 'å'
+compose '\'' 'c' to 'æ'
+compose ',' 'c' to 'ç'
+compose '^' 'c' to 'è'
+compose '\'' 'e' to 'é'
+compose ',' 'e' to 'ê'
+compose ':' 'e' to 'ë'
+compose '^' 'e' to 'ì'
+compose '\'' 'i' to 'í'
+compose '^' 'e' to 'î'
+compose '^' 'd' to 'ï'
+compose '-' 'd' to 'ð'
+compose '\'' 'n' to 'ñ'
+compose '^' 'n' to 'ò'
+compose '\'' 'o' to 'ó'
+compose '^' 'o' to 'ô'
+compose ':' 'o' to 'õ'
+compose '"' 'o' to 'ö'
+compose '^' 'r' to 'ø'
+compose '^' 'u' to 'ù'
+compose '\'' 'u' to 'ú'
+compose '"' 'u' to 'û'
+compose ':' 'u' to 'ü'
+compose '\'' 'y' to 'ý'
+compose ',' 't' to 'þ'
diff --git a/keymaps/i386/qwerty/defkeymap.map b/keymaps/i386/qwerty/defkeymap.map
new file mode 100644
index 0000000..36bfcf9
--- /dev/null
+++ b/keymaps/i386/qwerty/defkeymap.map
@@ -0,0 +1,352 @@
+keymaps 0-15
+keycode   1 = Escape           Escape
+	alt	keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt	keycode   2 = Meta_one
+	shift	alt	keycode   2 = Meta_exclam
+keycode   3 = two              at               at
+	control	keycode   3 = nul
+	shift	control	keycode   3 = nul
+	alt	keycode   3 = Meta_two
+	shift	alt	keycode   3 = Meta_at
+keycode   4 = three            numbersign
+	control	keycode   4 = Escape
+	alt	keycode   4 = Meta_three
+	shift	alt	keycode   4 = Meta_numbersign
+keycode   5 = four             dollar           dollar
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four
+	shift	alt	keycode   5 = Meta_dollar
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five
+	shift	alt	keycode   6 = Meta_percent
+keycode   7 = six              asciicircum
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six
+	shift	alt	keycode   7 = Meta_asciicircum
+keycode   8 = seven            ampersand        braceleft
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         bracketleft
+	control	keycode   9 = Delete
+	alt	keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        bracketright
+	alt	keycode  10 = Meta_nine
+keycode  11 = zero             parenright       braceright
+	alt	keycode  11 = Meta_zero
+keycode  12 = minus            underscore       backslash
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus
+keycode  13 = equal            plus
+	alt	keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	control	keycode  14 = BackSpace
+	alt	keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt	keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = i
+keycode  24 = o
+keycode  25 = p
+keycode  26 = bracketleft      braceleft
+	control	keycode  26 = Escape
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = semicolon        colon
+	alt	keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	control	keycode  40 = Control_g
+	alt	keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde
+	control	keycode  41 = nul
+	alt	keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash
+	shift	alt	keycode  43 = Meta_bar
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = comma            less
+	alt	keycode  51 = Meta_comma
+	shift	alt	keycode  51 = Meta_less
+keycode  52 = period           greater
+	control	keycode  52 = Compose
+	alt	keycode  52 = Meta_period
+	shift	alt	keycode  52 = Meta_greater
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+	shift	control	keycode  53 = Delete
+	alt	keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  55 = KP_Multiply
+keycode  56 = Alt
+keycode  57 = space            space
+	control	keycode  57 = nul
+	alt	keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  59 = F1               F13              Console_13
+	control	keycode  59 = F25
+	shift	control	keycode  59 = F37
+	alt	keycode  59 = Console_1
+	control	alt	keycode  59 = Console_1
+keycode  60 = F2               F14              Console_14
+	control	keycode  60 = F26
+	shift	control	keycode  60 = F38
+	alt	keycode  60 = Console_2
+	control	alt	keycode  60 = Console_2
+keycode  61 = F3               F15              Console_15
+	control	keycode  61 = F27
+	shift	control	keycode  61 = F39
+	alt	keycode  61 = Console_3
+	control	alt	keycode  61 = Console_3
+keycode  62 = F4               F16              Console_16
+	control	keycode  62 = F28
+	shift	control	keycode  62 = F40
+	alt	keycode  62 = Console_4
+	control	alt	keycode  62 = Console_4
+keycode  63 = F5               F17              Console_17
+	control	keycode  63 = F29
+	shift	control	keycode  63 = F41
+	alt	keycode  63 = Console_5
+	control	alt	keycode  63 = Console_5
+keycode  64 = F6               F18              Console_18
+	control	keycode  64 = F30
+	shift	control	keycode  64 = F42
+	alt	keycode  64 = Console_6
+	control	alt	keycode  64 = Console_6
+keycode  65 = F7               F19              Console_19
+	control	keycode  65 = F31
+	shift	control	keycode  65 = F43
+	alt	keycode  65 = Console_7
+	control	alt	keycode  65 = Console_7
+keycode  66 = F8               F20              Console_20
+	control	keycode  66 = F32
+	shift	control	keycode  66 = F44
+	alt	keycode  66 = Console_8
+	control	alt	keycode  66 = Console_8
+keycode  67 = F9               F21              Console_21
+	control	keycode  67 = F33
+	shift	control	keycode  67 = F45
+	alt	keycode  67 = Console_9
+	control	alt	keycode  67 = Console_9
+keycode  68 = F10              F22              Console_22
+	control	keycode  68 = F34
+	shift	control	keycode  68 = F46
+	alt	keycode  68 = Console_10
+	control	alt	keycode  68 = Console_10
+keycode  69 = Num_Lock
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers
+	control	keycode  70 = Show_State
+	alt	keycode  70 = Scroll_Lock
+keycode  71 = KP_7
+	alt	keycode  71 = Ascii_7
+keycode  72 = KP_8
+	alt	keycode  72 = Ascii_8
+keycode  73 = KP_9
+	alt	keycode  73 = Ascii_9
+keycode  74 = KP_Subtract
+keycode  75 = KP_4
+	alt	keycode  75 = Ascii_4
+keycode  76 = KP_5
+	alt	keycode  76 = Ascii_5
+keycode  77 = KP_6
+	alt	keycode  77 = Ascii_6
+keycode  78 = KP_Add
+keycode  79 = KP_1
+	alt	keycode  79 = Ascii_1
+keycode  80 = KP_2
+	alt	keycode  80 = Ascii_2
+keycode  81 = KP_3
+	alt	keycode  81 = Ascii_3
+keycode  82 = KP_0
+	alt	keycode  82 = Ascii_0
+keycode  83 = KP_Period
+	altgr	control	keycode  83 = Boot
+	control	alt	keycode  83 = Boot
+keycode  84 = Last_Console
+keycode  85 =
+keycode  86 = less             greater          bar
+	alt	keycode  86 = Meta_less
+keycode  87 = F11              F23              Console_23
+	control	keycode  87 = F35
+	shift	control	keycode  87 = F47
+	alt	keycode  87 = Console_11
+	control	alt	keycode  87 = Console_11
+keycode  88 = F12              F24              Console_24
+	control	keycode  88 = F36
+	shift	control	keycode  88 = F48
+	alt	keycode  88 = Console_12
+	control	alt	keycode  88 = Console_12
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter
+keycode  97 = Control
+keycode  98 = KP_Divide
+keycode  99 = Control_backslash
+	control	keycode  99 = Control_backslash
+	alt	keycode  99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+	shift	keycode 104 = Scroll_Backward
+keycode 105 = Left
+	alt	keycode 105 = Decr_Console
+keycode 106 = Right
+	alt	keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+	shift	keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+	altgr	control	keycode 111 = Boot
+	control	alt	keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = Pause
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose '"' 'y' to 'ÿ'
+compose 's' 'z' to 'ß'
+compose 'i' 'j' to 'ÿ'
diff --git a/keymaps/i386/qwerty/defkeymap_V1.0.map b/keymaps/i386/qwerty/defkeymap_V1.0.map
new file mode 100644
index 0000000..6c2b500
--- /dev/null
+++ b/keymaps/i386/qwerty/defkeymap_V1.0.map
@@ -0,0 +1,315 @@
+keymaps 0-15
+keycode   1 = Escape           Escape
+	alt	keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt	keycode   2 = Meta_one
+keycode   3 = two              at               at
+	control	keycode   3 = nul
+	shift	control	keycode   3 = nul
+	alt	keycode   3 = Meta_two
+keycode   4 = three            numbersign
+	control	keycode   4 = Escape
+	alt	keycode   4 = Meta_three
+keycode   5 = four             dollar           dollar
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five
+keycode   7 = six              asciicircum
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six
+keycode   8 = seven            ampersand        braceleft
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         bracketleft
+	control	keycode   9 = Delete
+	alt	keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        bracketright
+	alt	keycode  10 = Meta_nine
+keycode  11 = zero             parenright       braceright
+	alt	keycode  11 = Meta_zero
+keycode  12 = minus            underscore       backslash
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus
+keycode  13 = equal            plus
+	alt	keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt	keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt	keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = i
+keycode  24 = o
+keycode  25 = p
+keycode  26 = bracketleft      braceleft
+	control	keycode  26 = Escape
+	alt	keycode  26 = Meta_bracketleft
+keycode  27 = bracketright     braceright       asciitilde
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = semicolon        colon
+	alt	keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	control	keycode  40 = Control_g
+	alt	keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde
+	control	keycode  41 = nul
+	alt	keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = comma            less
+	alt	keycode  51 = Meta_comma
+keycode  52 = period           greater
+	control	keycode  52 = Compose
+	alt	keycode  52 = Meta_period
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+	alt	keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  55 = KP_Multiply
+keycode  56 = Alt
+keycode  57 = space            space
+	control	keycode  57 = nul
+	alt	keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  59 = F1               F11              Console_13
+	control	keycode  59 = F1
+	alt	keycode  59 = Console_1
+keycode  60 = F2               F12              Console_14
+	control	keycode  60 = F2
+	alt	keycode  60 = Console_2
+keycode  61 = F3               F13              Console_15
+	control	keycode  61 = F3
+	alt	keycode  61 = Console_3
+keycode  62 = F4               F14              Console_16
+	control	keycode  62 = F4
+	alt	keycode  62 = Console_4
+keycode  63 = F5               F15              Console_17
+	control	keycode  63 = F5
+	alt	keycode  63 = Console_5
+keycode  64 = F6               F16              Console_18
+	control	keycode  64 = F6
+	alt	keycode  64 = Console_6
+keycode  65 = F7               F17              Console_19
+	control	keycode  65 = F7
+	alt	keycode  65 = Console_7
+keycode  66 = F8               F18              Console_20
+	control	keycode  66 = F8
+	alt	keycode  66 = Console_8
+keycode  67 = F9               F19              Console_21
+	control	keycode  67 = F9
+	alt	keycode  67 = Console_9
+keycode  68 = F10              F20              Console_22
+	control	keycode  68 = F10
+	alt	keycode  68 = Console_10
+keycode  69 = Num_Lock
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers
+	control	keycode  70 = Show_State
+	alt	keycode  70 = Scroll_Lock
+keycode  71 = KP_7
+	alt	keycode  71 = Ascii_7
+keycode  72 = KP_8
+	alt	keycode  72 = Ascii_8
+keycode  73 = KP_9
+	alt	keycode  73 = Ascii_9
+keycode  74 = KP_Subtract
+keycode  75 = KP_4
+	alt	keycode  75 = Ascii_4
+keycode  76 = KP_5
+	alt	keycode  76 = Ascii_5
+keycode  77 = KP_6
+	alt	keycode  77 = Ascii_6
+keycode  78 = KP_Add
+keycode  79 = KP_1
+	alt	keycode  79 = Ascii_1
+keycode  80 = KP_2
+	alt	keycode  80 = Ascii_2
+keycode  81 = KP_3
+	alt	keycode  81 = Ascii_3
+keycode  82 = KP_0
+	alt	keycode  82 = Ascii_0
+keycode  83 = KP_Period
+	altgr	control	keycode  83 = Boot
+	control	alt	keycode  83 = Boot
+keycode  84 = Last_Console
+keycode  85 =
+keycode  86 = less             greater          bar
+	alt	keycode  86 = Meta_less
+keycode  87 = F11              F11              Console_23
+	control	keycode  87 = F11
+	alt	keycode  87 = Console_11
+keycode  88 = F12              F12              Console_24
+	control	keycode  88 = F12
+	alt	keycode  88 = Console_12
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter
+keycode  97 = Control
+keycode  98 = KP_Divide
+keycode  99 = Control_backslash
+	control	keycode  99 = Control_backslash
+	alt	keycode  99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+	shift	keycode 104 = Scroll_Backward
+keycode 105 = Left
+        alt     keycode 105 = Decr_Console
+keycode 106 = Right
+        alt     keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+	shift	keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+	altgr	control	keycode 111 = Boot
+	control	alt	keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = Pause
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose '"' 'y' to 'ÿ'
+compose 's' 'z' to 'ß'
+compose 'i' 'j' to 'ÿ'
diff --git a/keymaps/i386/qwerty/dk-latin1.map b/keymaps/i386/qwerty/dk-latin1.map
new file mode 100644
index 0000000..fb8bd22
--- /dev/null
+++ b/keymaps/i386/qwerty/dk-latin1.map
@@ -0,0 +1,86 @@
+# danish keymap with dead accents
+# Niels Kristian Bech Jensen <nkbj@kemi.aau.dk>:
+#  shift keycode 5 is currency, not dollar
+#
+keymaps 0-2,4-6,8,12
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign       sterling
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+# keycode   5 = four             dollar           dollar
+keycode   5 = four             currency           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal            braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = plus             question
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = dead_acute       dead_grave       bar
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = +aring            +Aring
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dead_diaeresis   dead_circumflex  dead_tilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +ae               +AE
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = +oslash             +Oslash
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = onehalf          section
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = apostrophe       asterisk
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/dk.map b/keymaps/i386/qwerty/dk.map
new file mode 100644
index 0000000..d84f358
--- /dev/null
+++ b/keymaps/i386/qwerty/dk.map
@@ -0,0 +1,86 @@
+# danish keymap
+# Niels Kristian Bech Jensen <nkbj@kemi.aau.dk>:
+#  shift keycode 5 is currency, not dollar
+#
+keymaps 0-2,4,6,8,12
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign       sterling
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+# keycode   5 = four             dollar           dollar
+keycode   5 = four             currency           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal            braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = plus             question
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = acute            grave            bar
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = +aring            +Aring
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = diaeresis        asciicircum      asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +ae               +AE
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = +oslash             +Oslash
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = onehalf          section
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = apostrophe       asterisk
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/emacs.map b/keymaps/i386/qwerty/emacs.map
new file mode 100644
index 0000000..240a852
--- /dev/null
+++ b/keymaps/i386/qwerty/emacs.map
@@ -0,0 +1,69 @@
+#From stig@netcom.com Mon Feb 21 22:05:14 1994 (now stig@hackvan.com)
+#
+#Below is a keymap that I have customized for use with emacs.  Notably, I've
+#enabled the alt-letter, alt-shift-letter, and ctrl-alt-letter keystrokes
+#because they're all usable in emacs.  Also, I moved caps-lock to shift numlock
+#and the left half of my keyboard has two control keys...(you can never have
+#enough of them :)
+#
+#        Stig
+#
+#Slightly modified - aeb
+#
+keymaps 0-2,4-6,8-9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	keycode  69 = Num_Lock         Caps_Lock
+	plain keycode 103 = Control_p
+	plain keycode 105 = Control_b
+	plain keycode 106 = Control_f
+	plain keycode 108 = Control_n
+	string F1 = "\0331c"
+	string Prior = "\033v"		# ESC-v
+	string Next = "\026"		# Ctrl-v
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              at               at               nul
+keycode   4 = three            numbersign
+	control	keycode   4 = Escape
+keycode   5 = four             dollar           dollar           Control_backslash
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              asciicircum
+	control	keycode   7 = Control_asciicircum
+keycode   8 = seven            ampersand        braceleft        Control_underscore
+keycode   9 = eight            asterisk         bracketleft      Delete
+keycode  10 = nine             parenleft        bracketright
+keycode  11 = zero             parenright       braceright
+keycode  12 = minus            underscore       backslash        Control_underscore
+keycode  13 = equal            plus
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = bracketleft      braceleft
+	control	keycode  26 = Escape
+keycode  27 = bracketright     braceright
+	control	keycode  27 = Control_bracketright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+	shift	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = semicolon        colon
+keycode  40 = apostrophe       quotedbl
+keycode  41 = grave            asciitilde
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control	keycode  43 = Control_backslash
+keycode  51 = comma            less
+keycode  52 = period           greater
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Control
+keycode  86 = less             greater          bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/emacs2.map b/keymaps/i386/qwerty/emacs2.map
new file mode 100644
index 0000000..dd51945
--- /dev/null
+++ b/keymaps/i386/qwerty/emacs2.map
@@ -0,0 +1,58 @@
+#Originally From stig@netcom.com Mon Feb 21 22:05:14 1994
+# (now stig@hackvan.com)
+#
+#Modified by rafael@cse.ucsc.edu, Jochen Hein, aeb
+#
+keymaps 0-2,4-6,8-9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	keycode  69 = Num_Lock         Caps_Lock
+	control	keycode 105 = Meta_b
+	control	keycode 106 = Meta_f
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              at               at               nul              nul
+keycode   4 = three            numbersign
+	control	keycode   4 = Escape
+keycode   5 = four             dollar           dollar           Control_backslash
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              asciicircum
+	control	keycode   7 = Control_asciicircum
+keycode   8 = seven            ampersand        braceleft        Control_underscore
+keycode   9 = eight            asterisk         bracketleft      Delete
+keycode  10 = nine             parenleft        bracketright
+keycode  11 = zero             parenright       braceright
+keycode  12 = minus            underscore       backslash        Control_underscore Control_underscore
+keycode  13 = equal            plus
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = bracketleft      braceleft
+	control	keycode  26 = Escape
+keycode  27 = bracketright     braceright
+	control	keycode  27 = Control_bracketright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+	shift	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = semicolon        colon
+keycode  40 = apostrophe       quotedbl
+keycode  41 = grave            asciitilde
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control	keycode  43 = Control_backslash
+keycode  51 = comma            less
+keycode  52 = period           greater
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Control
+keycode  86 = less             greater          bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/es-cp850.map b/keymaps/i386/qwerty/es-cp850.map
new file mode 100644
index 0000000..ffa43b8
--- /dev/null
+++ b/keymaps/i386/qwerty/es-cp850.map
@@ -0,0 +1,65 @@
+! Teclado espa¤ol ajustado a la p gina de c¢digos CP-850. Especialmente creado
+! para aplicaciones que sean portadas de UNIX a MS-DOS o viceversa (como el
+! COBOL).
+!
+! Para obtener un mejor resultado recomiendo usar este mapa de caracteres junto
+! con el "setfont cp850-8x16".
+!
+! Para poder visualizar todos los caracteres dentro del editor VI, es posible
+! que deba modificarse la variable "isprint" y ajustarla con unos valores m s
+! anchos. (recomiendo "set isprint=@,128-255").
+!
+! Jordi Sanfeliu <mikaku@arrakis.es>
+!
+keymaps 0-2,4,6,8-9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one              exclam           bar
+keycode   3 = two              quotedbl         at               nul
+keycode   4 = three            0372   numbersign       Escape
+keycode   5 = four             dollar           asciitilde       Control_backslash
+keycode   6 = five             percent          VoidSymbol       Control_bracketright
+keycode   7 = six              ampersand        +0252          Control_asciicircum
+keycode   8 = seven            slash            braceleft        Control_underscore
+keycode   9 = eight            parenleft        bracketleft      Delete
+keycode  10 = nine             parenright       bracketright
+keycode  11 = zero             equal            braceright
+keycode  12 = apostrophe       question         backslash        Control_underscore
+	alt keycode  12 = Meta_minus
+keycode  13 = 0255       0250     asciitilde
+	alt keycode  13 = Meta_equal
+keycode  14 = Delete           Delete           Delete           Control_underscore Delete           Meta_Delete      Delete           Delete          
+keycode  15 = Tab
+keycode  26 = dead_grave       dead_circumflex  bracketleft      Escape           VoidSymbol       Meta_bracketleft
+keycode  27 = plus             asterisk         bracketright     Control_bracketright VoidSymbol       Meta_bracketright
+keycode  28 = Return
+	alt keycode 28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +0244           +0245
+	alt keycode  39 = Meta_semicolon
+keycode  40 = dead_acute       dead_diaeresis   braceleft        Control_g
+	alt keycode  40 = Meta_apostrophe
+keycode  41 = 0247        0246      backslash        nul
+	alt keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = +0207         +0200         braceright       Control_backslash
+	alt keycode  43 = Meta_backslash
+	shift alt keycode  43 = Meta_asciitilde
+keycode  51 = comma            semicolon
+	shift alt keycode  51 = Meta_less
+keycode  52 = period           colon
+	shift alt keycode  52 = Meta_greater
+keycode  53 = minus            underscore       VoidSymbol       Delete
+	alt keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode 57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater
+	shift alt keycode  86 = Meta_bar
diff --git a/keymaps/i386/qwerty/es.map b/keymaps/i386/qwerty/es.map
new file mode 100644
index 0000000..aacdbdd
--- /dev/null
+++ b/keymaps/i386/qwerty/es.map
@@ -0,0 +1,95 @@
+! Spanish keymap, note the spanish IBM keyboard lacks an ascitilde (~), I
+! have used ALT-Gr 4 as per IBM/AIX and some sun keyboards. ascitilde is also
+! on ALT-Gr-exclamdown for compatibility with Julio Sanchez' Spanish keymap.
+!
+! Jon Tombs <jon@gtex02.us.es> with corrections from
+! Julio Sanchez <jsanchez@gmv.es> and Urko Lusa <ulusa@arrakis.es>
+!
+! Added keymaps line - aeb
+!
+keymaps 0-2,4,6,8-9,12
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam    bar
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl	at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three           periodcentered        numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar          asciitilde
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand notsign
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash 		braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft	bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright	bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal       braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe       question       backslash
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = exclamdown questiondown		asciitilde
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete
+	control keycode  14 = Control_underscore
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+!keycode  26 =   dead_grave    asciicircum      bracketleft
+keycode  26 =   dead_grave    dead_circumflex      bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = plus     asterisk       bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +ntilde +Ntilde
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = dead_acute     dead_diaeresis	braceleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = masculine ordfeminine backslash		
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = +ccedilla		+Ccedilla       braceright
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+	shift alt keycode 43 = Meta_asciitilde
+keycode  51 = comma  semicolon
+	alt     keycode  51 = Meta_comma
+	shift alt keycode 51 = Meta_less
+keycode  52 = period       colon
+	alt     keycode  52 = Meta_period
+	shift alt keycode 52 = Meta_greater
+keycode  53 = minus      underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less greater
+	alt     keycode  86 = Meta_less
+	shift alt keycode 86 = Meta_bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/fi-latin1.map b/keymaps/i386/qwerty/fi-latin1.map
new file mode 100644
index 0000000..f6f4841
--- /dev/null
+++ b/keymaps/i386/qwerty/fi-latin1.map
@@ -0,0 +1,82 @@
+# fi-latin1.map: Finnish keymap
+# Changes by Johan Myréen <jem@iki.fi> 1997-08-19
+
+charset "iso-8859-1"
+keymaps 0-2,4-6,8-10,12-14
+alt_is_meta
+include "qwerty-layout"
+	altgr keycode 18 = Hex_E
+	altgr keycode 30 = Hex_A
+	altgr keycode 32 = Hex_D
+	altgr keycode 33 = Hex_F
+	altgr keycode 46 = Hex_C
+	altgr keycode 48 = Hex_B
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	control altgr keycode 3 = nul
+keycode   4 = three            numbersign       sterling
+	control keycode   4 = Escape
+keycode   5 = four             dollar         dollar
+	control keycode   5 = Control_backslash
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	control altgr keycode 9 = Escape
+keycode  10 = nine             parenright       bracketright
+	control altgr keycode 10 = Control_bracketright
+keycode  11 = zero             equal            braceright
+keycode  12 = plus             question         backslash
+	control keycode  12 = Control_underscore
+	control altgr keycode 12 = Control_backslash
+keycode  13 = dead_acute       dead_grave
+	alt     keycode  13 = Meta_equal
+	alt shift keycode 13 = Meta_grave
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = +aring            +Aring
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dead_diaeresis   dead_circumflex  dead_tilde
+	control keycode  27 = Control_bracketright
+	control shift keycode 27 = Control_asciicircum
+	alt keycode  27 = Meta_bracketright
+	alt shift keycode 27 = Meta_asciicircum
+	alt altgr keycode 27 = Meta_asciitilde
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +odiaeresis       +Odiaeresis
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = +adiaeresis       +Adiaeresis
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = section          onehalf
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = apostrophe       asterisk
+	control keycode  43 = Control_backslash
+keycode  51 = comma            semicolon
+keycode  52 = period           colon
+keycode  53 = minus            underscore
+	control keycode  53 = Control_underscore
+	control shift keycode 53 = Control_underscore
+	control alt shift keycode 53 = Meta_Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt altgr keycode 86 = Meta_bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/fi.map b/keymaps/i386/qwerty/fi.map
new file mode 100644
index 0000000..811126d
--- /dev/null
+++ b/keymaps/i386/qwerty/fi.map
@@ -0,0 +1,89 @@
+keymaps 0-4,6,8,12
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign       sterling
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal            braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = plus             question         backslash
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = apostrophe       grave
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = braceright       bracketright
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+	altgr	keycode  26 = aring
+	shift	altgr	keycode  26 = Aring
+keycode  27 =
+	shift   keycode  27 = asciicircum
+	altgr   keycode  27 = asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = bar              backslash
+	alt     keycode  39 = Meta_semicolon
+	altgr	keycode  39 = odiaeresis
+	shift	altgr	keycode  39 = Odiaeresis
+keycode  40 = braceleft        bracketleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+	altgr	keycode  40 = adiaeresis
+	shift	altgr	keycode  40 = Adiaeresis
+keycode  41 =
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = apostrophe       asterisk
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/gr-pc.map b/keymaps/i386/qwerty/gr-pc.map
new file mode 100644
index 0000000..38aa211
--- /dev/null
+++ b/keymaps/i386/qwerty/gr-pc.map
@@ -0,0 +1,261 @@
+# From gcapnias@acrogate.ath.forthnet.gr                   Sun Jul 10 1994
+#
+#	This is the map file that I use to have the greek Characters in
+# setup. The map was made according the map that exists at the IBM-clones
+# machines (437). The switch from greek to latin is with alt-enter key as
+# used here. You can't switch console when in greek mode (I didn't want to
+# do that for security reasons. If someone feels like, all he has to do is
+# to add, to each line that exists for a switch console key, a second
+# line that includes the 'altgr').
+#
+#   +=[ Dr Doom ]===========================+============================+
+#   | George Capnias - Athens, HellAs       | OOOIII   OOO III OOO II II |
+#   |                                       | O  O  I  O  O   I   OI I I |
+#   | drdoom@ars.ath.forthnet.gr            | O  OIII  O  O   I   OI I I |
+#   | drdoom@hol.ath.forthnet.gr            | O  O  I  O  O   I   OI   I |
+#   | gcapnias@acrogate.ath.forthnet.gr     | OOOI  I  OOO III OOO I   I |
+#   +=======================================+============================+
+#
+#
+# A rather similar keymap was constructed by Angelos Karageorgiou:
+#
+# Greek keyboard setup - compatible with the ELOT 437 standard
+# Angelos Karageorgiou angelos@netaxis.com - July 1994
+# >ª„’“‡ˆŽ    <ªœ¨«¬Ÿ ¦§
+# €‘ƒ”‚†‰Š      ˜©›­šž¥¡¢
+#  …•–—Œ‹        ®¯à™¤£
+#
+# [This is not an iso mapping, and code page 437 does not have the Greek
+# alphabet. I don't have information on DOS code pages for Greek.
+# Use this keymap together with the gr*.psf fonts. - aeb]
+#
+keymaps 0-4,6,8,10,12-13
+include "linux-with-alt-and-altgr"
+	keycode 100 = Alt	# but note keycode 28
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	altgr   keycode   2 = one
+	shift altgr keycode 2 = exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              at
+	altgr   keycode   3 = two
+	shift altgr keycode 3 = at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign
+	altgr   keycode   4 = three
+	shift altgr keycode 4 = numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar
+	altgr   keycode   5 = four
+	shift altgr keycode 5 = dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	altgr   keycode   6 = five
+	shift altgr keycode 6 = percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              asciicircum
+	altgr   keycode   7 = six
+	shift altgr keycode 6 = asciicircum
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            ampersand
+	altgr   keycode   8 = seven
+	shift altgr keycode 8 = ampersand
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            asterisk
+	altgr   keycode   9 = eight
+	shift altgr keycode 9 = asterisk
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenleft
+	altgr   keycode  10 = nine
+	shift altgr keycode 10 = parenleft
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             parenright
+	altgr   keycode  11 = zero
+	shift altgr keycode 11 = parenright
+	alt     keycode  11 = Meta_zero
+keycode  12 = minus            underscore
+	altgr   keycode  12 = minus
+	shift altgr keycode 12 = underscore
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = equal            plus
+	altgr   keycode  13 = equal
+	shift altgr keycode 13 = plus
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	altgr   keycode  14 = Delete
+	shift altgr keycode 14 = Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	altgr   keycode  15 = Tab
+	shift altgr keycode 15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q
+	altgr keycode  16 = semicolon
+	shift altgr keycode 16 = colon
+keycode  17 = w
+	altgr keycode  17 = 0xAA
+	shift altgr keycode  17 = 0x91
+keycode  18 = e
+	altgr keycode  18 = +0x9C
+	shift altgr keycode  18 = +0x84
+keycode  19 = r
+	altgr keycode  19 = +0xA8
+	shift altgr keycode  19 = +0x90
+keycode  20 = t
+	altgr keycode  20 = +0xAB
+	shift altgr keycode  20 = +0x92
+keycode  21 = y
+	altgr keycode  21 = +0xAC
+	shift altgr keycode  21 = +0x93
+keycode  22 = u
+	altgr keycode  22 = +0x9F
+	shift altgr keycode  22 = +0x87
+keycode  23 = i
+	altgr keycode  23 = +0xA0
+	shift altgr keycode  23 = +0x88
+keycode  24 = o
+	altgr keycode  24 = +0xA6
+	shift altgr keycode  24 = +0x8E
+keycode  25 = p
+	altgr keycode  25 = +0xA7
+	shift altgr keycode  25 = +0x8F
+keycode  26 = bracketleft      braceleft
+	altgr   keycode  26 = bracketleft
+	shift altgr keycode 26 = braceleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = bracketright     braceright
+	altgr   keycode  27 = bracketright
+	shift altgr keycode 27 = braceright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	altgr   keycode  28 = Return
+	alt     keycode  28 = AltGr_Lock
+	altgr alt keycode 28 = AltGr_Lock
+keycode  29 = Control
+keycode  30 = a
+	altgr keycode  30 = +0x98
+	shift altgr keycode  30 = +0x80
+keycode  31 = s
+	altgr keycode  31 = +0xA9
+	shift altgr keycode  31 = +0x91
+keycode  32 = d
+	altgr keycode  32 = +0x9B
+	shift altgr keycode  32 = +0x83
+keycode  33 = f
+	altgr keycode  33 = +0xAD
+	shift altgr keycode  33 = +0x94
+keycode  34 = g
+	altgr keycode  34 = +0x9A
+	shift altgr keycode  34 = +0x82
+keycode  35 = h
+	altgr keycode  35 = +0x9E
+	shift altgr keycode  35 = +0x86
+keycode  36 = j
+	altgr keycode  36 = +0xA5
+	shift altgr keycode  36 = +0x8D
+keycode  37 = k
+	altgr keycode  37 = +0xA1
+	shift altgr keycode  37 = +0x89
+keycode  38 = l
+	altgr keycode  38 = +0xA2
+	shift altgr keycode  38 = +0x8A
+keycode  39 = semicolon        colon
+	altgr keycode  39 = dead_acute
+	shift altgr keycode  39 = dead_diaeresis
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	altgr   keycode  40 = apostrophe
+	shift altgr keycode 40 = quotedbl
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde
+	altgr   keycode  41 = grave
+	shift altgr keycode 41 = asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	altgr   keycode  43 = backslash
+	shift altgr keycode 43 = bar
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  44 = z
+	altgr keycode  44 = +0x9D
+	shift altgr keycode  44 = +0x85
+keycode  45 = x
+	altgr keycode  45 = +0xAE
+	shift altgr keycode  45 = +0x95
+keycode  46 = c
+	altgr keycode  46 = +0xAF
+	shift altgr keycode  46 = +0x96
+keycode  47 = v
+	altgr keycode  47 = +0xE0
+	shift altgr keycode  47 = +0x97
+keycode  48 = b
+	altgr keycode  48 = +0x99
+	shift altgr keycode  48 = +0x81
+keycode  49 = n
+	altgr keycode  49 = +0xA4
+	shift altgr keycode  49 = +0x8C
+keycode  50 = m
+	altgr keycode  50 = +0xA3
+	shift altgr keycode  50 = +0x8B
+keycode  51 = comma            less
+	altgr   keycode  51 = comma
+	shift altgr keycode 51 = less
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           greater
+	altgr   keycode  52 = period
+	shift altgr keycode 52 = greater
+	alt     keycode  52 = Meta_period
+keycode  53 = slash            question
+	altgr   keycode  53 = slash
+	shift altgr keycode 53 = question
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
+
+compose '\'' '€' to 'ê'
+compose '\'' '„' to 'ë'
+compose '\'' '†' to 'ì'
+compose '\'' 'ˆ' to 'í'
+compose '\'' 'Ž' to 'î'
+compose '\'' '“' to 'ï'
+compose '\'' '—' to 'ð'
+compose '\'' '˜' to 'á'
+compose '\'' 'œ' to 'â'
+compose '\'' 'ž' to 'ã'
+compose '\'' ' ' to 'å'
+compose '\'' '¦' to 'æ'
+compose '\'' '¬' to 'ç'
+compose '\'' 'à' to 'é'
+compose '"' 'ˆ' to 'ˆ'
+compose '"' '“' to '“'
+compose '"' ' ' to 'ä'
+compose '"' '¬' to 'è'
+compose '^' ' ' to '+'
+compose '^' '¬' to '+'
+compose '\'' '\'' to ';'
+compose '"' '"' to ':'
+compose '\'' ' ' to '\''
diff --git a/keymaps/i386/qwerty/gr.map b/keymaps/i386/qwerty/gr.map
new file mode 100644
index 0000000..115a3be
--- /dev/null
+++ b/keymaps/i386/qwerty/gr.map
@@ -0,0 +1,473 @@
+# v0.95 Sat Jun 21 21:49:26 EET 1997. Replaces: v0.90 Tue Apr  5 17:20:51 1994
+# This is the improved greek map, (file gr.map), for linux kbd.
+# The compose combinations are back in, and better mode switch keys.
+#
+# Use:
+# Left-shift-alt is the greek-lock key (the same as in Win95).
+# The new win95 keys (on win95 keyboard) can be used too
+# (until a better use of them is found):
+# Left and Right win95 keys act like shift-to-greek,
+# and Right win95menu key acts like greek-lock.
+#
+# I was unable to define two dead keys in a row, so:
+# For both accent and dialytika use Ctrl and the accent key.
+#
+# For bugs/remarks, send mail to sarantos@ics.forth.gr
+# You can get updated versions from
+# http://www.ics.forth.gr/~sarantos/gr.map
+#
+# This is an iso-8859-7 mapping. Use together with "setfont iso07.*"
+# activated by sending Esc ( K to the console.
+#
+charset "iso-8859-7"
+keymaps 0-2,4-6,8-9,12,64-66,68-70,72-73,76
+include "linux-with-alt-and-altgr"
+strings as usual
+#
+# The definitions are divided into 6 parts.
+
+#
+# Part one: The full us map (us.map, from 14 Mar 1994),
+# without the (empty) keycodes for 125, 126 and 127.
+# The strings are appended at the end.
+#
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+	alt shift keycode 2 = Meta_exclam
+keycode   3 = two              at               at
+	control keycode   3 = nul
+	control shift keycode 3 = nul
+	alt     keycode   3 = Meta_two
+	alt shift keycode 3 = Meta_at
+keycode   4 = three            numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+	alt shift keycode 4 = Meta_numbersign
+keycode   5 = four             dollar           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	alt shift keycode 5 = Meta_dollar
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+	alt shift keycode 6 = Meta_percent
+keycode   7 = six              asciicircum
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+	alt shift keycode 7 = Meta_asciicircum
+keycode   8 = seven            ampersand        braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             parenright       braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = minus            underscore       backslash
+	control keycode  12 = Control_underscore
+	control shift keycode 12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = equal            plus
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	control	keycode  14 = BackSpace
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = i
+keycode  24 = o
+keycode  25 = p
+keycode  26 = bracketleft      braceleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+	alt shift keycode 26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+	alt shift keycode 27 = Meta_braceright
+keycode  28 = Return
+	alt     keycode  28 = 0x080d
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = semicolon        colon
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+	alt shift keycode 43 = Meta_bar
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = comma            less
+	alt     keycode  51 = Meta_comma
+	alt shift keycode 51 = Meta_less
+keycode  52 = period           greater
+	alt     keycode  52 = Meta_period
+	alt shift keycode 52 = Meta_greater
+keycode  53 = slash            question
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
+
+#
+# Part two: all these definitions, in CtrlL (greek) mode.
+# Only the redefined keys (letters, accents and quotas)
+# and the keys with one symbol defined for all modes, are excluded.
+#
+CtrlL	keycode   1 = Escape
+CtrlL	shift	keycode   1 = Escape
+CtrlL	alt	keycode   1 = Meta_Escape
+CtrlL	keycode   2 = one
+CtrlL	shift	keycode   2 = exclam
+CtrlL	alt	keycode   2 = Meta_one
+CtrlL	alt	shift	keycode 2 = Meta_exclam
+CtrlL	keycode   3 = two
+CtrlL	shift	keycode   3 = at
+CtrlL	altgr	keycode   3 = at
+CtrlL	control	keycode   3 = nul
+CtrlL	control	shift	keycode 3 = nul
+CtrlL	alt	keycode   3 = Meta_two
+CtrlL	alt	shift	keycode 3 = Meta_at
+CtrlL	keycode   4 = three
+CtrlL	shift	keycode   4 = numbersign
+CtrlL	control	keycode   4 = Escape
+CtrlL	alt	keycode   4 = Meta_three
+CtrlL	alt	shift	keycode 4 = Meta_numbersign
+CtrlL	keycode   5 = four
+CtrlL	shift	keycode   5 = dollar
+CtrlL	altgr	keycode   5 = dollar
+CtrlL	control	keycode   5 = Control_backslash
+CtrlL	alt	keycode   5 = Meta_four
+CtrlL	alt	shift	keycode 5 = Meta_dollar
+CtrlL	keycode   6 = five
+CtrlL	shift	keycode   6 = percent
+CtrlL	control	keycode   6 = Control_bracketright
+CtrlL	alt	keycode   6 = Meta_five
+CtrlL	alt	shift	keycode 6 = Meta_percent
+CtrlL	keycode   7 = six
+CtrlL	shift	keycode   7 = asciicircum
+CtrlL	control	keycode   7 = Control_asciicircum
+CtrlL	alt	keycode   7 = Meta_six
+CtrlL	alt	shift	keycode 7 = Meta_asciicircum
+CtrlL	keycode   8 = seven
+CtrlL	shift	keycode   8 = ampersand
+CtrlL	altgr	keycode   8 = braceleft
+CtrlL	control	keycode   8 = Control_underscore
+CtrlL	alt	keycode   8 = Meta_seven
+CtrlL	keycode   9 = eight
+CtrlL	shift	keycode   9 = asterisk
+CtrlL	altgr	keycode   9 = bracketleft
+CtrlL	control	keycode   9 = Delete
+CtrlL	alt	keycode   9 = Meta_eight
+CtrlL	keycode  10 = nine
+CtrlL	shift	keycode  10 = parenleft
+CtrlL	altgr	keycode  10 = bracketright
+CtrlL	alt	keycode  10 = Meta_nine
+CtrlL	keycode  11 = zero
+CtrlL	shift	keycode  11 = parenright
+CtrlL	altgr	keycode  11 = braceright
+CtrlL	alt	keycode  11 = Meta_zero
+CtrlL	keycode  12 = minus
+CtrlL	shift	keycode  12 = underscore
+CtrlL	altgr	keycode  12 = backslash
+CtrlL	control	keycode  12 = Control_underscore
+CtrlL	control	shift	keycode 12 = Control_underscore
+CtrlL	alt	keycode  12 = Meta_minus
+CtrlL	keycode  13 = equal
+CtrlL	shift	keycode  13 = plus
+CtrlL	alt	keycode  13 = Meta_equal
+CtrlL	keycode  14 = Delete
+CtrlL	shift	keycode  14 = Delete
+CtrlL	control	keycode  14 = BackSpace
+CtrlL	alt	keycode  14 = Meta_Delete
+CtrlL	keycode  15 = Tab
+CtrlL	shift	keycode  15 = Tab
+CtrlL	alt	keycode  15 = Meta_Tab
+CtrlL	keycode  26 = bracketleft
+CtrlL	shift	keycode  26 = braceleft
+CtrlL	control	keycode  26 = Escape
+CtrlL	alt	keycode  26 = Meta_bracketleft
+CtrlL	alt	shift	keycode 26 = Meta_braceleft
+CtrlL	keycode  27 = bracketright
+CtrlL	shift	keycode  27 = braceright
+CtrlL	altgr	keycode  27 = asciitilde
+CtrlL	control	keycode  27 = Control_bracketright
+CtrlL	alt	keycode  27 = Meta_bracketright
+CtrlL	alt	shift	keycode 27 = Meta_braceright
+CtrlL	alt	keycode  28 = 0x080d
+#CtrlL	keycode  39 = semicolon
+#CtrlL	shift	keycode  39 = colon
+CtrlL	alt	keycode  39 = Meta_semicolon
+#CtrlL	keycode  40 = apostrophe
+#CtrlL	shift	keycode  40 = quotedbl
+CtrlL	control	keycode  40 = Control_g
+CtrlL	alt	keycode  40 = Meta_apostrophe
+CtrlL	keycode  41 = grave
+CtrlL	shift	keycode  41 = asciitilde
+CtrlL	control	keycode  41 = nul
+CtrlL	alt	keycode  41 = Meta_grave
+CtrlL	keycode  43 = backslash
+CtrlL	shift	keycode  43 = bar
+CtrlL	control	keycode  43 = Control_backslash
+CtrlL	alt	keycode  43 = Meta_backslash
+CtrlL	alt	shift	keycode 43 = Meta_bar
+CtrlL	keycode  51 = comma
+CtrlL	shift	keycode  51 = less
+CtrlL	alt	keycode  51 = Meta_comma
+CtrlL	alt	shift	keycode 51 = Meta_less
+CtrlL	keycode  52 = period
+CtrlL	shift	keycode  52 = greater
+CtrlL	alt	keycode  52 = Meta_period
+CtrlL	alt	shift	keycode 52 = Meta_greater
+CtrlL	keycode  53 = slash
+CtrlL	shift	keycode  53 = question
+CtrlL	control	keycode  53 = Delete
+CtrlL	alt	keycode  53 = Meta_slash
+CtrlL	keycode  57 = space
+CtrlL	shift	keycode  57 = space
+CtrlL	control	keycode  57 = nul
+CtrlL	alt	keycode  57 = Meta_space
+CtrlL	keycode  59 = F1
+CtrlL	shift	keycode  59 = F11
+CtrlL	altgr	keycode  59 = Console_13
+CtrlL	control	keycode  59 = F1
+CtrlL	alt	keycode  59 = Console_1
+CtrlL	control	alt	keycode  59 = Console_1
+CtrlL	keycode  60 = F2
+CtrlL	shift	keycode  60 = F12
+CtrlL	altgr	keycode  60 = Console_14
+CtrlL	control	keycode  60 = F2
+CtrlL	alt	keycode  60 = Console_2
+CtrlL	control	alt	keycode  60 = Console_2
+CtrlL	keycode  61 = F3
+CtrlL	shift	keycode  61 = F13
+CtrlL	altgr	keycode  61 = Console_15
+CtrlL	control	keycode  61 = F3
+CtrlL	alt	keycode  61 = Console_3
+CtrlL	control	alt	keycode  61 = Console_3
+CtrlL	keycode  62 = F4
+CtrlL	shift	keycode  62 = F14
+CtrlL	altgr	keycode  62 = Console_16
+CtrlL	control	keycode  62 = F4
+CtrlL	alt	keycode  62 = Console_4
+CtrlL	control	alt	keycode  62 = Console_4
+CtrlL	keycode  63 = F5
+CtrlL	shift	keycode  63 = F15
+CtrlL	altgr	keycode  63 = Console_17
+CtrlL	control	keycode  63 = F5
+CtrlL	alt	keycode  63 = Console_5
+CtrlL	control	alt	keycode  63 = Console_5
+CtrlL	keycode  64 = F6
+CtrlL	shift	keycode  64 = F16
+CtrlL	altgr	keycode  64 = Console_18
+CtrlL	control	keycode  64 = F6
+CtrlL	alt	keycode  64 = Console_6
+CtrlL	control	alt	keycode  64 = Console_6
+CtrlL	keycode  65 = F7
+CtrlL	shift	keycode  65 = F17
+CtrlL	altgr	keycode  65 = Console_19
+CtrlL	control	keycode  65 = F7
+CtrlL	alt	keycode  65 = Console_7
+CtrlL	control	alt	keycode  65 = Console_7
+CtrlL	keycode  66 = F8
+CtrlL	shift	keycode  66 = F18
+CtrlL	altgr	keycode  66 = Console_20
+CtrlL	control	keycode  66 = F8
+CtrlL	alt	keycode  66 = Console_8
+CtrlL	control	alt	keycode  66 = Console_8
+CtrlL	keycode  67 = F9
+CtrlL	shift	keycode  67 = F19
+CtrlL	altgr	keycode  67 = Console_21
+CtrlL	control	keycode  67 = F9
+CtrlL	alt	keycode  67 = Console_9
+CtrlL	control	alt	keycode  67 = Console_9
+CtrlL	keycode  68 = F10
+CtrlL	shift	keycode  68 = F20
+CtrlL	altgr	keycode  68 = Console_22
+CtrlL	control	keycode  68 = F10
+CtrlL	alt	keycode  68 = Console_10
+CtrlL	control	alt	keycode  68 = Console_10
+CtrlL	keycode  70 = Scroll_Lock
+CtrlL	shift	keycode  70 = Show_Memory
+CtrlL	altgr	keycode  70 = Show_Registers
+CtrlL	control	keycode  70 = Show_State
+CtrlL	alt	keycode  70 = Scroll_Lock
+CtrlL	alt	keycode  71 = Ascii_7
+CtrlL	alt	keycode  72 = Ascii_8
+CtrlL	alt	keycode  73 = Ascii_9
+CtrlL	alt	keycode  75 = Ascii_4
+CtrlL	alt	keycode  76 = Ascii_5
+CtrlL	alt	keycode  77 = Ascii_6
+CtrlL	alt	keycode  79 = Ascii_1
+CtrlL	alt	keycode  80 = Ascii_2
+CtrlL	alt	keycode  81 = Ascii_3
+CtrlL	alt	keycode  82 = Ascii_0
+CtrlL	altgr	control	keycode  83 = Boot
+CtrlL	control	alt	keycode  83 = Boot
+CtrlL	keycode  86 = less
+CtrlL	shift	keycode  86 = greater
+CtrlL	altgr	keycode  86 = bar
+CtrlL	alt	keycode  86 = Meta_less
+CtrlL	keycode  87 = F11
+CtrlL	shift	keycode  87 = F11
+CtrlL	altgr	keycode  87 = Console_23
+CtrlL	control	keycode  87 = F11
+CtrlL	alt	keycode  87 = Console_11
+CtrlL	control	alt	keycode  87 = Console_11
+CtrlL	keycode  88 = F12
+CtrlL	shift	keycode  88 = F12
+CtrlL	altgr	keycode  88 = Console_24
+CtrlL	control	keycode  88 = F12
+CtrlL	alt	keycode  88 = Console_12
+CtrlL	control	alt	keycode  88 = Console_12
+CtrlL	control	keycode  99 = Control_backslash
+CtrlL	alt	keycode  99 = Control_backslash
+CtrlL	shift	keycode 104 = Scroll_Backward
+CtrlL	alt	keycode 105 = Decr_Console
+CtrlL	alt	keycode 106 = Incr_Console
+CtrlL	shift	keycode 109 = Scroll_Forward
+CtrlL	altgr	control	keycode 111 = Boot
+CtrlL	control	alt	keycode 111 = Boot
+
+#
+# Part three: The switching keys to CtrlL (greek) mode
+#
+# alt+shift, shift+alt (left side alt and shift only)
+	alt	keycode  42 = CtrlL_Lock
+	shift	keycode  56 = CtrlL_Lock
+CtrlL	alt	keycode  42 = CtrlL_Lock
+CtrlL	shift	keycode  56 = CtrlL_Lock
+
+# on win95 keyboards, we define extra keys
+
+keycode 125 = CtrlL
+keycode 126 = CtrlL
+keycode 127 = CtrlL_Lock
+
+#
+# Part four: The particular definitions of CtrlL (greek) mode
+#
+CtrlL	keycode  16 = semicolon
+CtrlL	shift	keycode  16 = colon
+CtrlL	keycode  17 = terminalsigma
+CtrlL	shift	keycode  17 = 0267 # anv teleia
+CtrlL	keycode  18 = +epsilon
+CtrlL	shift	keycode  18 = +Epsilon
+CtrlL	keycode  19 = +rho
+CtrlL	shift	keycode  19 = +Rho
+CtrlL	keycode  20 = +tau
+CtrlL	shift	keycode  20 = +Tau
+CtrlL	keycode  21 = +upsilon
+CtrlL	shift	keycode  21 = +Upsilon
+CtrlL	keycode  22 = +theta
+CtrlL	shift	keycode  22 = +Theta
+CtrlL	keycode  23 = +iota
+CtrlL	shift	keycode  23 = +Iota
+CtrlL	keycode  24 = +omicron
+CtrlL	shift	keycode  24 = +Omicron
+CtrlL	keycode  25 = +pi
+CtrlL	shift	keycode  25 = +Pi
+CtrlL	keycode  30 = +alpha
+CtrlL	shift	keycode  30 = +Alpha
+CtrlL	keycode  31 = +sigma
+CtrlL	shift	keycode  31 = +Sigma
+CtrlL	keycode  32 = +delta
+CtrlL	shift	keycode  32 = +Delta
+CtrlL	keycode  33 = +phi
+CtrlL	shift	keycode  33 = +Phi
+CtrlL	keycode  34 = +gamma
+CtrlL	shift	keycode  34 = +Gamma
+CtrlL	keycode  35 = +eta
+CtrlL	shift	keycode  35 = +Eta
+CtrlL	keycode  36 = +ksi
+CtrlL	shift	keycode  36 = +Ksi
+CtrlL	keycode  37 = +kappa
+CtrlL	shift	keycode  37 = +Kappa
+CtrlL	keycode  38 = +lambda
+CtrlL	shift	keycode  38 = +Lambda
+CtrlL	keycode  39 = dead_acute
+CtrlL	shift	keycode  39 = dead_diaeresis
+CtrlL	control	keycode  39 = dead_circumflex
+CtrlL	keycode  40 = semicolon
+CtrlL	shift	keycode  40 = colon
+CtrlL	keycode  44 = +zeta
+CtrlL	shift	keycode  44 = +Zeta
+CtrlL	keycode  45 = +khi
+CtrlL	shift	keycode  45 = +Khi
+CtrlL	keycode  46 = +psi
+CtrlL	shift	keycode  46 = +Psi
+CtrlL	keycode  47 = +omega
+CtrlL	shift	keycode  47 = +Omega
+CtrlL	keycode  48 = +beta
+CtrlL	shift	keycode  48 = +Beta
+CtrlL	keycode  49 = +nu
+CtrlL	shift	keycode  49 = +Nu
+CtrlL	keycode  50 = +mu
+CtrlL	shift	keycode  50 = +Mu
+
+#
+# Part five: The compose sequences
+#
+compose '\'' 'Á' to '¶' # Alphaaccent
+compose '\'' 'Å' to '¸' # Epsilonaccent
+compose '\'' 'Ç' to '¹' # Etaaccent
+compose '\'' 'É' to 'º' # Iotaaccent
+compose '\'' 'Ï' to '¼' # Omicronaccent
+compose '\'' 'Õ' to '¾' # Upsilonaccent
+compose '\'' 'Ù' to '¿' # Omegaaccent
+compose '\'' 'á' to 'Ü' # alphaaccent
+compose '\'' 'å' to 'Ý' # epsilonaccent
+compose '\'' 'ç' to 'Þ' # etaaccent
+compose '\'' 'é' to 'ß' # iotaaccent
+compose '\'' 'ï' to 'ü' # omicronaccent
+compose '\'' 'õ' to 'ý' # upsilonaccent
+compose '\'' 'ù' to 'þ' # omegaaccent
+compose '"' 'É' to 'Ú' # Iotadiaeresis
+compose '"' 'Õ' to 'Û' # Upsilondiaeresis
+compose '"' 'é' to 'ú' # iotadiaeresis
+compose '"' 'õ' to 'û' # upsilondiaeresis
+compose '^' 'é' to 'À' # iotadiaeresisaccent
+compose '^' 'õ' to 'à' # upsilondiaeresisaccent
+compose '\'' '\'' to ';' # semicolon
+compose '"' '"' to ':' # colon
+compose '\'' ' ' to '\'' # quota/accent
+
diff --git a/keymaps/i386/qwerty/hebrew.map b/keymaps/i386/qwerty/hebrew.map
new file mode 100644
index 0000000..f3fa8df
--- /dev/null
+++ b/keymaps/i386/qwerty/hebrew.map
@@ -0,0 +1,102 @@
+charset "iso-8859-8"
+keymaps 0-6,8,12
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam           one
+	alt     keycode   2 = Meta_one
+keycode   3 = two              at               two              VoidSymbol       nul              nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign       three
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar           four
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent          five
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              asciicircum      six
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            ampersand        seven
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         eight            multiplication   Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        nine
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             parenright       zero
+	alt     keycode  11 = Meta_zero
+keycode  12 = minus            underscore       backslash        VoidSymbol       Control_underscore Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = equal            plus             doubleunderscore doubleunderscore
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = +q                +Q                qof              qof              Control_q
+keycode  17 = +w                +W                vav              vav              Control_w
+keycode  18 = +e                +E                alef             alef             Control_e
+keycode  19 = +r                +R                resh             resh             Control_r
+keycode  20 = +t                +T                tav              tet              Control_t
+keycode  21 = +y                +Y                ayin             ayin             Control_y
+keycode  22 = +u                +U                vav              vav              Control_u
+keycode  23 = +i                +I                yod              yod              Tab
+keycode  24 = +o                +O                samekh           samekh           Control_o
+keycode  25 = +p                +P                pe               finalpe          Control_p
+keycode  26 = bracketleft      braceleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = bracketright     braceright       asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = +a                +A                alef             alef             Control_a
+keycode  31 = +s                +S                shin             shin             Control_s
+keycode  32 = +d                +D                dalet            dalet            Control_d
+keycode  33 = +f                +F                pe               finalpe          Control_f
+keycode  34 = +g                +G                gimel            gimel            Control_g
+keycode  35 = +h                +H                he               he               BackSpace
+keycode  36 = +j                +J                yod              yod              Linefeed
+keycode  37 = +k                +K                kaf              finalkaf         Control_k
+keycode  38 = +l                +L                lamed            lamed            Control_l
+keycode  39 = semicolon        colon           semicolon         colon
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde       overscore        overscore        nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  44 = +z                +Z                zayin            zayin            Control_z
+keycode  45 = +x                +X                het              het              Control_x
+keycode  46 = +c                +C                tsadi            finaltsadi       Control_c
+keycode  47 = +v                +V                vav              vav              Control_v
+keycode  48 = +b                +B                bet              bet              Control_b
+keycode  49 = +n                +N                nun              finalnun         Control_n
+keycode  50 = +m                +M                mem              finalmem         Control_m
+keycode  51 = comma            less             comma            less
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           greater          period           greater          Compose
+	alt     keycode  52 = Meta_period
+keycode  53 = slash            question         division         division         Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space            space            space            nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = AltGr_Lock
+
+compose 'c' 'h' to 'ç'
diff --git a/keymaps/i386/qwerty/hu101.map b/keymaps/i386/qwerty/hu101.map
new file mode 100644
index 0000000..501cadd
--- /dev/null
+++ b/keymaps/i386/qwerty/hu101.map
@@ -0,0 +1,170 @@
+#
+# Hungarian keymap for 101 key keyboards (iso8859-2)
+#
+# Modified by Soos Peter <sp@osb.hu>, 1997, 1998
+# based on Levardy Zoltan's <h0894118@witch.pmmf.hu> keymap
+#
+# The 1998 change interchanged Backspace and Delete
+#
+charset "iso-8859-2"
+keymaps 0-2,4-6,8,10,12
+alt_is_meta
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+		keycode   1 = Escape
+
+		keycode   2 = one              	apostrophe	asciitilde
+
+		keycode   3 = two              	quotedbl	caron
+	control keycode   3 = nul
+
+		keycode   4 = three            	plus		asciicircum
+	control keycode   4 = Escape
+
+		keycode   5 = four             	exclam		breve
+	control keycode   5 = Control_backslash
+
+		keycode   6 = five             	percent		degree
+	control keycode   6 = Control_bracketright
+
+		keycode   7 = six              	slash		ogonek
+	control keycode   7 = Control_asciicircum
+
+		keycode   8 = seven            	equal		grave
+	control keycode   8 = Control_underscore
+
+		keycode   9 = eight            	parenleft       abovedot
+	control keycode   9 = Delete
+
+		keycode  10 = nine              parenright      acute
+
+		keycode  11 = +odiaeresis	+Odiaeresis	doubleacute
+	alt     keycode  11 = Meta_zero
+
+		keycode  12 = +udiaeresis	+Udiaeresis	diaeresis
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+altgr	control	keycode  12 = Control_backslash
+
+		keycode  13 = +oacute		+Oacute		cedilla
+	alt     keycode  13 = Meta_plus
+
+#		keycode  14 = BackSpace        Delete
+#	control keycode  14 = Delete
+		keycode  14 = Delete
+	control keycode  14 = BackSpace
+	alt     keycode  14 = Meta_Delete
+
+		keycode  15 = Tab              Tab
+
+		keycode  16 = +q	+Q	backslash
+	control keycode  16 = Control_q
+altgr	alt	keycode  16 = Meta_backslash
+altgr	control	keycode  16 = Control_backslash
+
+		keycode  17 = +w	+W	bar
+	control keycode  17 = Control_w
+
+		keycode  18 = e
+		keycode  19 = r
+		keycode  20 = t
+
+		keycode  21 = +y	+Y
+	control keycode  21 = Control_y
+
+		keycode  22 = u
+
+		keycode  23 = +i	+I		Iacute
+	control keycode  23 = Control_i
+
+		keycode  24 = o
+		keycode  25 = p
+
+		keycode  26 = +odoubleacute	+Odoubleacute	division
+
+		keycode  27 = +uacute	+Uacute		multiplication
+
+		keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+
+		keycode  29 = Control
+
+		keycode  30 = a
+
+		keycode  31 = +s	+S		dstroke
+	control	keycode  31 = Control_s
+
+		keycode  32 = +d	+D		Dstroke
+	control	keycode  32 = Control_d
+
+		keycode  33 = +f	+F		bracketleft
+	control keycode  33 = Control_f
+
+		keycode  34 = +g	+G		bracketright
+	control keycode  34 = Control_g
+altgr	control	keycode  34 = Control_bracketright
+
+		keycode  35 = h
+
+		keycode  36 = +j	+J		iacute
+	control keycode  36 = Control_j
+
+		keycode  37 = +k	+K		lstroke
+	control keycode  37 = Control_k
+
+		keycode  38 = +l	+L		Lstroke
+	control keycode  38 = Control_l
+
+		keycode  39 = +eacute	+Eacute		dollar
+
+		keycode  40 = +aacute	+Aacute		ssharp
+
+		keycode  41 = +iacute	+Iacute		zero
+
+		keycode  42 = Shift
+
+		keycode  43 = +udoubleacute	+Udoubleacute	currency
+
+		keycode  44 = +z	+Z		greater
+        control keycode  44 = Control_z
+	
+                keycode  45 = +x        +X		numbersign
+        control keycode  45 = Control_x
+
+		keycode  46 = +c	+C		ampersand
+	control keycode  46 = Control_c
+
+		keycode  47 = +v	+V		at
+	control keycode  47 = Control_v
+
+		keycode  48 = +b	+B		braceleft
+	control keycode  48 = Control_b
+
+		keycode  49 = +n	+N		braceright
+	control keycode  49 = Control_n
+
+		keycode  50 = +m	+M		less
+	control keycode  50 = Control_m
+
+		keycode  51 = comma	question	semicolon
+
+		keycode  52 = period	colon		greater
+
+		keycode  53 = minus	underscore	asterisk
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+shift	control	keycode  53 = Control_underscore
+
+		keycode  54 = Shift
+		keycode  56 = Alt
+
+		keycode  57 = space
+	control keycode  57 = nul
+
+		keycode  58 = Caps_Lock
+
+		keycode  86 = +iacute		+Iacute		less
+
+		keycode  97 = Control
diff --git a/keymaps/i386/qwerty/hypermap.m4 b/keymaps/i386/qwerty/hypermap.m4
new file mode 100644
index 0000000..8083c49
--- /dev/null
+++ b/keymaps/i386/qwerty/hypermap.m4
@@ -0,0 +1,475 @@
+#
+# hypermap.map 1994/11/11
+# Michael Shields <shields@tembel.org>
+#
+# A keymap redesigned for sanity.
+#
+
+#
+# This keymap is a ground-up reimplementation of the keyboard map,
+# intended to be consistent and rational.  It uses an m4 metalanguage to
+# declare the key mappings.  Usage is `m4 hypermap.map | loadkeys'.
+#
+# The modifier flags used are `shift' (1), `control' (4), and `alt' (8).
+# Left and right modifiers are not distinguished.
+#
+# In general, Meta is always distinguished, and M-S-KEY is distinct from
+# M-KEY.  This is good news for Emacs users.  C-S-KEY is consistently
+# folded into C-KEY.
+#
+# Shift is more loosely interpreted than the other modifiers; usually if
+# S-KEY has no special meaning, the action will be the same as KEY.
+# However, if M-KEY or H-KEY is undefined, nothing happens.
+#
+# Because Caps Lock's position is so out of proportion to its utility,
+# it's been totally redefined to a new sort of modifier, which I've
+# arbitrarily named `Hyper'.  Shift is ignored with Hyper.  Hyper
+# provides dead keys:
+#	H-`	dead accent grave
+#	H-'	dead acute accent
+#	H-^	dead circumflex
+#	H-t	dead tilde
+#	H-d	dead diaeresis
+# and ISO-8859-1 symbols (some more mnemonic than others):
+#	H-SPC	nobreakspace
+#	H-!	inverted bang
+#	H-h	cents (`hundredths')
+#	H-#	pounds sterling
+#	H-$	currency
+#	H-y	yen
+#	H-|	broken bar
+#	H-s	section (the galaxy symbol)
+#	H-c	copyright
+#	H-a	feminine ordinal
+#	H-<	left guillemot
+#	H-]	not sign (it's angular)
+#	H--	soft hyphen
+#	H-r	registered trademark symbol
+#	H-=	macron
+#	H-0	degrees
+#	H-[	plus/minus (near + and -)
+#	H-k	superior 2 (jkl form a series)
+#	H-l	superior 3
+#	H-u	mu
+#	H-p	pilcrow
+#	H-:	centered dot
+#	H-j	superior 1
+#	H-o	masculine ordinal
+#	H->	right guillemot
+#	H-q	1/4 fraction (qwe form a series)
+#	H-w	1/2 fraction
+#	H-e	3/4 fraction
+#	H-?	inverted question mark
+#	H-x	multiplication symbol
+#	H-%	division symbol
+# You can also use Hyper plus Alt to type characters by decimal code on
+# the keypad, as with Alt alone, or in hex on the main keyboard.  And
+# H-TAB is a Caps Lock.
+#
+# Function keys work as marked, unless with Alt, in which case they
+# switch to the console with the same number.  Shift adds 12 and Hyper
+# adds 24 to the numbers (i.e., they logically switch to other banks).
+# Thus you can easily address up to 48.  Control is ignored, for
+# consistency with X.
+#
+# Finally, you can change the behavior of the Caps Lock and Controls
+# with m4 command-line options.  The default values are equivalent to
+# `-DCAPSLOCK_K=Hyper -DLEFTCTRL_K=Control -DRIGHTCTRL_K=Control'.  You
+# can remove the Hyper code entirely with `-DCAPSLOCK_K=Caps_Lock'.
+#
+# This file is arranged vaguely by key position on the classic PC layout.
+#
+
+
+dnl Set default values.
+ifdef(`CAPSLOCK_K', , `define(`CAPSLOCK_K', `Hyper')')
+ifdef(`LEFTCTRL_K', , `define(`LEFTCTRL_K', `Control')')
+ifdef(`RIGHTCTRL_K', , `define(`RIGHTCTRL_K', `Control')')
+
+dnl Figure out if any key is a Hyper key.  If so, define `hyper', both
+dnl for usefulness and `ifdef' testability.
+ifelse(CAPSLOCK_K, `Hyper', `define(`hyper', `ctrlr')',
+       LEFTCTRL_K, `Hyper', `define(`hyper', `ctrlr')',
+       RIGHTCTRL_K, `Hyper', `define(`hyper', `ctrlr')')
+
+define(`Hyper', `CtrlR')
+
+
+keymaps 0,1,4,5,8,9,12,13`'ifdef(`hyper', `,128,129,132,133,136,137,140,141')
+
+
+dnl General usage of these macros is MACRO(KEYCODE, UNSHIFTED, SHIFTED).
+
+dnl We first undefine `shift', which only causes problems.
+undefine(`shift')
+
+define(`SIMPLE', `keycode $1 = $2 $2')
+
+define(`KEY',
+`			keycode $1 = $2 VoidSymbol
+shift			keycode $1 = $3
+		alt	keycode $1 = Meta_$2
+shift		alt	keycode $1 = Meta_$3')
+
+dnl This macro adds Control variations to a key.
+define(`CONTROL',
+`	control		keycode $1 = $2
+shift	control		keycode $1 = $2
+	control	alt	keycode $1 = Meta_$2
+shift	control	alt	keycode $1 = Meta_$2')
+
+dnl Add Hyper variations to a key.
+define(`HYPER', ifdef(`hyper',
+`			hyper	keycode $1 = $2
+shift			hyper	keycode $1 = $2'))
+define(`CONTROLHYPER', ifdef(`hyper',
+`	control		hyper	keycode $1 = $2
+shift	control		hyper	keycode $1 = $2'))
+define(`METAHYPER', ifdef(`hyper',
+`		alt	hyper	keycode $1 = $2
+shift		alt	hyper	keycode $1 = $2'))
+define(`CONTROLMETAHYPER', ifdef(`hyper', dnl Ludicrous.
+`	control	alt	hyper	keycode $1 = $2
+shift	control	alt	hyper	keycode $1 = $2'))
+
+dnl Special case for letters.  Best to be explicit.
+define(`LETTER',
+`			keycode $1 = `+'$2 VoidSymbol
+shift			keycode $1 = `+'translit($2, `a-z', `A-Z')
+		alt	keycode $1 = `Meta_'$2
+shift		alt	keycode $1 = `Meta_'translit($2, `a-z', `A-Z')
+CONTROL($1, Control_$2)')
+
+dnl For function keys.  Call here is FUNCTION(KEYCODE, FKEYNUM).
+define(`BANKSIZE', 12)
+define(`FUNCTION',
+`			keycode $1 = `F'$2 VoidSymbol
+shift			keycode $1 = `F'eval($2 + BANKSIZE)
+	hyper		keycode $1 = `F'eval($2 + BANKSIZE * 2)
+shift	hyper		keycode $1 = `F'eval($2 + BANKSIZE * 3)
+		alt	keycode $1 = `Console_'$2
+shift		alt	keycode $1 = `Console_'eval($2 + BANKSIZE)
+	hyper	alt	keycode $1 = `Console_'eval($2 + BANKSIZE * 2)
+shift	hyper	alt	keycode $1 = `Console_'eval($2 + BANKSIZE * 3)')
+
+dnl For the keypad digits.  KPDIGIT(KEYCODE, DIGIT).
+define(`KPDIGIT',
+`			keycode $1 = KP_$2 VoidSymbol
+shift			keycode $1 = KP_$2
+		alt	keycode $1 = Ascii_$2
+shift		alt	keycode $1 = Ascii_$2
+METAHYPER($1, Ascii_$2)')
+
+dnl And a special approximation:
+define(`Meta_Return', `Meta_Control_m')
+
+
+KEY(1, Escape, Escape)
+
+FUNCTION(59, 1)
+FUNCTION(60, 2)
+FUNCTION(61, 3)
+FUNCTION(62, 4)
+FUNCTION(63, 5)
+FUNCTION(64, 6)
+FUNCTION(65, 7)
+FUNCTION(66, 8)
+FUNCTION(67, 9)
+FUNCTION(68, 10)
+FUNCTION(87, 11)
+FUNCTION(88, 12)
+
+KEY(2, one, exclam)
+    HYPER(2, exclamdown)
+    METAHYPER(2, Hex_1)
+KEY(3, two, at)
+    CONTROL(3, nul)
+    METAHYPER(3, Hex_2)
+KEY(4, three, numbersign)
+    HYPER(4, pound)
+    METAHYPER(4, Hex_3)
+KEY(5, four, dollar)
+    HYPER(5, currency)
+    METAHYPER(5, Hex_4)
+KEY(6, five, percent)
+    HYPER(6, division)
+    METAHYPER(6, Hex_5)
+KEY(7, six, asciicircum)
+    CONTROL(7, Control_asciicircum)
+    HYPER(7, dead_circumflex)
+    METAHYPER(7, Hex_6)
+KEY(8, seven, ampersand)
+    METAHYPER(8, Hex_7)
+KEY(9, eight, asterisk)
+    METAHYPER(9, Hex_8)
+KEY(10, nine, parenleft)
+    METAHYPER(10, Hex_9)
+KEY(11, zero, parenright)
+    HYPER(11, degree)
+    METAHYPER(11, Hex_0)
+KEY(12, minus, underscore)
+    CONTROL(12, Control_underscore)
+    HYPER(12, hyphen)
+KEY(13, equal, plus)
+    HYPER(13, macron)
+KEY(14, Delete, Delete)
+    CONTROL(14, BackSpace)
+
+KEY(15, Tab, Tab)
+    HYPER(15, Caps_Lock)
+LETTER(16, q)
+    HYPER(16, onequarter)
+LETTER(17, w)
+    HYPER(17, onehalf)
+LETTER(18, e)
+    HYPER(18, threequarters)
+    METAHYPER(18, Hex_E)
+LETTER(19, r)
+    HYPER(19, registered)
+LETTER(20, t)
+    HYPER(20, dead_tilde)
+LETTER(21, y)
+    HYPER(21, yen)
+LETTER(22, u)
+    HYPER(22, mu)
+LETTER(23, i)
+LETTER(24, o)
+    HYPER(24, masculine)
+LETTER(25, p)
+    HYPER(25, 182) # pilcrow
+KEY(26, bracketleft, braceleft)
+    CONTROL(26, Escape)
+    HYPER(26, plusminus)
+KEY(27, bracketright, braceright)
+    CONTROL(27, Control_bracketright)
+    HYPER(27, notsign)
+
+KEY(28, Return, Return)
+
+LETTER(30, a)
+    HYPER(30, ordfeminine)
+    METAHYPER(30, Hex_A)
+LETTER(31, s)
+    HYPER(31, section)
+LETTER(32, d)
+    HYPER(32, dead_diaeresis)
+    METAHYPER(32, Hex_D)
+LETTER(33, f)
+    METAHYPER(33, Hex_F)
+LETTER(34, g)
+LETTER(35, h)
+    HYPER(35, cent)
+LETTER(36, j)
+    HYPER(36, onesuperior)
+LETTER(37, k)
+    HYPER(37, twosuperior)
+LETTER(38, l)
+    HYPER(38, threesuperior)
+KEY(39, semicolon, colon)
+    HYPER(39, periodcentered)
+KEY(40, apostrophe, quotedbl)
+    HYPER(40, dead_acute)
+KEY(41, grave, asciitilde)
+    HYPER(41, dead_grave)
+
+KEY(43, backslash, bar)
+    CONTROL(43, Control_backslash)
+    HYPER(43, brokenbar)
+LETTER(44, z)
+LETTER(45, x)
+    HYPER(45, multiplication)
+LETTER(46, c)
+    HYPER(46, copyright)
+    METAHYPER(46, Hex_C)
+LETTER(47, v)
+LETTER(48, b)
+    METAHYPER(48, Hex_B)
+LETTER(49, n)
+LETTER(50, m)
+KEY(51, comma, less)
+    HYPER(51, guillemotleft)
+KEY(52, period, greater)
+    HYPER(52, guillemotright)
+KEY(53, slash, question)
+    HYPER(53, questiondown)
+
+KEY(57, space, space)
+    CONTROL(57, nul)
+    HYPER(57, nobreakspace)
+
+KPDIGIT(71, 7)
+KPDIGIT(72, 8)
+KPDIGIT(73, 9)
+SIMPLE(74, KP_Subtract)
+KPDIGIT(75, 4)
+KPDIGIT(76, 5)
+KPDIGIT(77, 6)
+SIMPLE(78, KP_Add)
+KPDIGIT(79, 1)
+KPDIGIT(80, 2)
+KPDIGIT(81, 3)
+KPDIGIT(82, 0)
+SIMPLE(83, KP_Period)
+SIMPLE(96, KP_Enter)
+SIMPLE(98, KP_Divide)
+SIMPLE(55, KP_Multiply)
+SIMPLE(118, KP_MinPlus)
+
+# Modifiers.
+keycode  42 = Shift
+keycode  54 = Shift
+keycode  56 = Alt
+keycode 100 = Alt
+keycode  58 = CAPSLOCK_K
+keycode  29 = LEFTCTRL_K
+keycode  97 = RIGHTCTRL_K
+
+# Everyone needs a compose key.  This is C-..
+control	keycode  52 = Compose
+
+SIMPLE(69, Num_Lock)
+
+keycode  70 = Scroll_Lock
+	shift	keycode  70 = Show_Memory
+	control	keycode  70 = Show_State
+	alt	keycode  70 = Show_Registers
+
+# SysRq.  I suppose there's some reason it's ^\.
+SIMPLE(99, Control_backslash)
+
+SIMPLE(119, Pause)
+# Ctrl-Break seems to have low-level hardware behind it.
+SIMPLE(101, Break)
+
+SIMPLE(110, Insert)
+SIMPLE(102, Find)
+keycode 104 = Prior Scroll_Backward
+SIMPLE(111, Remove)
+SIMPLE(107, Select)
+keycode 109 = Next Scroll_Forward
+
+SIMPLE(103, Up)
+SIMPLE(105, Left)
+alt keycode 105 = Decr_Console
+SIMPLE(106, Right)
+alt keycode 106 = Incr_Console
+SIMPLE(108, Down)
+
+control	alt keycode 83 = Boot
+control	alt keycode 111 = Boot
+
+
+# Stock VT102 string definitions.
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+
+# Stock ISO-8859-1 compositions.
+changequote()dnl
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose '"' 'y' to 'ÿ'
+compose 's' 'z' to 'ß'
+compose 'i' 'j' to 'ÿ'
+
+# ISO-8859-3 compositions for Esperanto.
+compose 'C' 'x' to 'Æ' #198
+compose 'G' 'x' to 'Ø' #216
+compose 'H' 'x' to '¦' #166
+compose 'J' 'x' to '¬' #172
+compose 'S' 'x' to 'Þ' #222
+compose 'U' 'x' to 'Ý' #221
+compose 'c' 'x' to 'æ' #230
+compose 'g' 'x' to 'ø' #248
+compose 'h' 'x' to '¶' #182
+compose 'j' 'x' to '¼' #188
+compose 's' 'x' to 'þ' #254
+compose 'u' 'x' to 'ý' #253
diff --git a/keymaps/i386/qwerty/is-latin1.map b/keymaps/i386/qwerty/is-latin1.map
new file mode 100644
index 0000000..28de427
--- /dev/null
+++ b/keymaps/i386/qwerty/is-latin1.map
@@ -0,0 +1,138 @@
+# This mainly follows
+#  is-latin1.map: Icelandic keyboard for Latin 1 character set
+#  Kristjan Jonsson (kj@raunvis.hi.is)
+# but also has some features of "ice-latin1.map' as submitted
+# by Einar Indridason (einari@rhi.hi.is)
+#
+# Where the two maps differed, the version of the latter map
+# is given as comment - the main difference is that the latter
+# map tends to make Alt and Altgr synonyms.
+#
+# Note that this map uses the right control key as Alt
+# People with a keyboard without a key with keycode 86
+# will not be able to produce < and > using this keymap.
+# - aeb, 950825
+charset "iso-8859-1"
+keymaps 0-2,4-6,8,12
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+	shift keycode  83 = KP_Comma
+	altgr keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam           onesuperior
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         twosuperior
+#       altgr   keycode   3 = at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign       threesuperior
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar           onequarter
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent          onehalf
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand        threequarters
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+#	alt     keycode   8 = braceleft
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+#	alt     keycode   9 = bracketleft
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+#	alt     keycode  10 = bracketright
+keycode  11 = zero             equal            braceright
+	alt     keycode  11 = Meta_zero
+#	alt     keycode  11 = braceright
+keycode  12 = +odiaeresis      +Odiaeresis      backslash
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+#	alt     keycode  12 = backslash
+keycode  13 = minus            underscore       hyphen
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete           Meta_Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q                Q                at
+	control keycode  16 = Control_q
+	alt     keycode  16 = Meta_q
+#	alt     keycode  16 = at
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = i
+keycode  24 = o
+keycode  25 = p
+keycode  26 = +eth             +ETH
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = apostrophe       question         asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+#	alt     keycode  27 = asciitilde
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = +ae              +AE
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = dead_acute       asciicircum
+#keycode  40 = dead_acute       dead_acute       asciicircum
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+#	alt     keycode  40 = asciicircum
+keycode  41 = degree             dead_diaeresis          bar
+#keycode  41 = apostrophe            asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = plus             asterisk         grave
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+#	alt     keycode  43 = grave
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = comma            semicolon        guillemotleft
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon            guillemotright
+	alt     keycode  52 = Meta_period
+keycode  53 = +thorn           +THORN
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+#	alt     keycode  86 = bar
+keycode  97 = Alt
diff --git a/keymaps/i386/qwerty/it-ibm.map b/keymaps/i386/qwerty/it-ibm.map
new file mode 100644
index 0000000..cbc2910
--- /dev/null
+++ b/keymaps/i386/qwerty/it-ibm.map
@@ -0,0 +1,107 @@
+# Keyboard map for italian IBM(c) PC keyboards
+# Dec 1994 - Leonardo Valcamonici /CASPUR
+# ----------------------------------------------------------
+# Please report bugs & improvements to valcamonici@caspur.it
+keymaps 0-2,4,6,8-9,12
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+
+          keycode   1 = Escape           Escape
+alt       keycode   1 = Meta_Escape
+          keycode   2 = one              exclam
+alt       keycode   2 = Meta_one
+alt shift keycode   2 = Meta_exclam
+	  keycode   3 = two              quotedbl
+alt       keycode   3 = Meta_two
+	  keycode   4 = three            sterling       numbersign
+control   keycode   4 = Escape
+alt       keycode   4 = Meta_three
+	  keycode   5 = four             dollar
+control   keycode   5 = Control_backslash
+alt       keycode   5 = Meta_four
+	  keycode   6 = five             percent
+control   keycode   6 = Control_bracketright
+alt       keycode   6 = Meta_five
+	  keycode   7 = six              ampersand
+alt       keycode   7 = Meta_six
+	  keycode   8 = seven            slash          braceleft
+control   keycode   8 = Control_underscore
+alt       keycode   8 = Meta_seven
+	  keycode   9 = eight            parenleft      bracketleft
+control   keycode   9 = Delete
+alt       keycode   9 = Meta_eight
+	  keycode  10 = nine             parenright     bracketright
+alt       keycode  10 = Meta_nine
+	  keycode  11 = zero             equal          braceright
+alt       keycode  11 = Meta_zero
+	  keycode  12 = apostrophe       question
+alt       keycode  12 = Meta_apostrophe
+	  keycode  13 = igrave           asciicircum
+alt       keycode  13 = Meta_equal
+	  keycode  14 = Delete           Delete
+alt       keycode  14 = Meta_Delete
+	  keycode  15 = Tab              Tab
+alt       keycode  15 = Meta_Tab
+	  keycode  16 = q                Q              at
+	  keycode  17 = w
+ 	  keycode  18 = e
+	  keycode  19 = r
+  	  keycode  20 = t
+	  keycode  21 = y
+	  keycode  22 = u
+	  keycode  23 = i
+	  keycode  24 = o
+	  keycode  25 = p
+	  keycode  26 = eacute	        egrave
+control   keycode  26 = Escape
+alt       keycode  26 = Meta_bracketleft
+	  keycode  27 = plus	        asterisk	asciitilde
+control   keycode  27 = Control_bracketright
+alt       keycode  27 = Meta_bracketright
+	  keycode  28 = Return
+alt       keycode  28 = Meta_Control_m
+	  keycode  29 = Control
+	  keycode  30 = a
+	  keycode  31 = s
+	  keycode  32 = d
+	  keycode  33 = f
+	  keycode  34 = g
+	  keycode  35 = h
+	  keycode  36 = j
+	  keycode  37 = k
+	  keycode  38 = l
+  	  keycode  39 = ograve           colon	
+alt       keycode  39 = Meta_semicolon
+	  keycode  40 = agrave           quotedbl	
+control   keycode  40 = Control_g
+alt       keycode  40 = Meta_apostrophe
+	  keycode  41 = backslash        bar
+control   keycode  41 = Control_backslash
+alt       keycode  41 = Meta_backslash
+	  keycode  42 = Shift
+	  keycode  43 = ugrave           bar             grave
+	  keycode  44 = z
+	  keycode  45 = x
+	  keycode  46 = c
+	  keycode  47 = v
+	  keycode  48 = b
+	  keycode  49 = n
+	  keycode  50 = m
+	  keycode  51 = comma            semicolon
+alt       keycode  51 = Meta_comma
+	  keycode  52 = period           colon
+control   keycode  52 = Compose
+alt       keycode  52 = Meta_period
+	  keycode  53 = minus            underscore
+control   keycode  53 = Delete
+alt       keycode  53 = Meta_minus
+	  keycode  54 = Shift
+	  keycode  56 = Alt
+	  keycode  57 = space
+control   keycode  57 = nul
+alt       keycode  57 = Meta_space
+	  keycode  58 = Caps_Lock
+	  keycode  86 = less             greater
+alt       keycode  86 = Meta_less
+	  keycode  97 = Control
diff --git a/keymaps/i386/qwerty/it.map b/keymaps/i386/qwerty/it.map
new file mode 100644
index 0000000..01d2841
--- /dev/null
+++ b/keymaps/i386/qwerty/it.map
@@ -0,0 +1,152 @@
+# Italian keymap with emacs enhancements
+#     Beta version Mon May  2 19:57:25 WET DST 1994
+# Available for anon. ftp at cnuce_arch.cnr.it:/pub/Linux-local/kbd/it.map
+#
+# Based on all other keymaps available in Slackware-1.2.0.
+#
+# '@', '#', '[', and ']' are obtained by AltGr with the appropriate key.
+#
+# I have added '{', '}', '~', '`', iacute and uacute.
+# They can be obtained by AltGr-(, AltGr-), AltGr-=, AltGr-', AltGr-igrave
+# and AltGr-ugrave respectively.
+#
+# I have also added most Alt-Shift and Ctrl-Alt codes needed for emacs
+# with the standard keymap of the fundamental mode.
+#
+# Place in your ~/.emacs the following two lines:
+#      (standard-display-european t)
+#      (set-input-mode nil nil 1)
+#
+# Place in your /usr/lib/X11/Xconfig:
+#      LeftAlt  Meta
+#      RightAlt ModeShift
+#
+# To use high characters with other programs, read the documentation ;-)
+# Please report all bugs and improvement proposals to the address below.
+#
+# Buona fortuna,
+# Dario Besseghini <besseghi@dm.unipi.it>
+#
+keymaps 0-2,4,6,8-9,12
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+	shift alt keycode 2 = Meta_exclam
+keycode   3 = two              quotedbl
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+	control alt keycode 3 = Meta_nul
+keycode   4 = three            sterling
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+	control alt keycode 4 = Meta_Escape
+keycode   5 = four             dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	shift alt keycode 5 = Meta_dollar
+	control alt keycode 5 = Meta_Control_backslash
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+	shift alt keycode 6 = Meta_percent
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+	shift alt keycode 8 = Meta_slash
+keycode   9 = eight            parenleft	braceleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+	shift alt keycode 9 = Meta_parenleft
+	control alt keycode 9 = Meta_Delete
+keycode  10 = nine             parenright       braceright
+	alt     keycode  10 = Meta_nine
+	shift alt keycode 10 = Meta_parenright
+keycode  11 = zero             equal		asciitilde
+	alt     keycode  11 = Meta_zero
+	shift alt keycode 11 = Meta_equal
+keycode  12 = apostrophe       question		grave
+	control	keycode  12 = Delete
+	alt     keycode  12 = Meta_minus
+	control alt keycode 12 = Meta_Delete
+keycode  13 = igrave	       asciicircum	iacute
+	control keycode  13 = Control_asciicircum
+	alt     keycode  13 = Meta_equal
+	shift alt keycode 13 = Meta_asciicircum
+keycode  14 = Delete           Delete
+	control keycode  14 = Control_underscore
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = i
+keycode  24 = o
+keycode  25 = p
+keycode  26 = egrave 	       eacute		bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = plus             asterisk         bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = ograve           ccedilla		at
+	control keycode  39 = nul
+	alt     keycode  39 = Meta_at
+	control alt keycode 39 = Meta_nul
+keycode  40 = agrave	       degree		numbersign
+	control keycode  40 = Control_g
+keycode  41 = backslash	       bar
+	control keycode  41 = Control_backslash
+	alt     keycode  41 = Meta_backslash
+	shift alt keycode 41 = Meta_bar
+keycode  42 = Shift
+keycode  43 = ugrave           section		uacute
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+	shift alt keycode 51 = Meta_semicolon
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus	       underscore
+	control keycode  53 = Control_underscore
+	alt	keycode  53 = Meta_minus
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+	control alt keycode 57 = Meta_nul
+keycode  58 = Caps_Lock
+keycode  86 = less	       greater
+	alt     keycode  86 = Meta_less
+	shift alt keycode 86 = Meta_greater
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/it2.map b/keymaps/i386/qwerty/it2.map
new file mode 100644
index 0000000..a96b72e
--- /dev/null
+++ b/keymaps/i386/qwerty/it2.map
@@ -0,0 +1,212 @@
+# From nosenzo@inrete.alpcom.it Fri Feb 24 12:29:04 1995
+! Italian keymap
+!
+!
+!  Note:
+!   	Since the Italian keyboard lacks of some basic keys ( like the '{}'
+!	parentheses  and the '`' grave ) and the most used keys like the
+!	unix slash '/' are in the wrong position, I added some new keys
+!	binding to the standard Italian keyboard. They are:
+!	CHARACTER 		KEY
+!	    `			AltGr-<'>
+!	    /			<->
+!	    -			AltGr-<->	
+!	    {			AltGr-<8>
+!	    }			AltGr-<9>
+!	    ~			AltGr-<\>
+!
+! To use the Italian keyboard under X11 you must make the $HOME/.Xmodmap using
+! the mk_modmap command found under /usr/lib/kbd/keymaps,
+! and then insert the following lines in your /usr/lib/X11/Xconfig :
+!
+!	LeftAlt	Meta
+!	RightAlt ModeShift
+!
+! Per utilizzare la tastiera Italiana sotto X11 e' necessario creare il file
+! $HOME/.Xmodmap usando il comando mk_modmap presente nella dir :
+! /usr/lib/kbd/keymaps ed inserire le seguenti linee nel
+! file /usr/lib/X11/Xconfig ( penso vada bene qualunque posizione ) :
+!
+!	LeftAlt	Meta
+!	RightAlt ModeShift
+!
+! Spero che questo mio file possa essere utile a qualcuno, se avete problemi
+! non esitate a scrivermi . :-)
+!
+! If  you find some bugs, please mail me.
+!
+!
+! 				Luca Nosenzo <nosenzo@inrete.alpcom.it>
+!
+
+keymaps 0-4,6,8-9,12
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+	alt shift keycode 2 = Meta_exclam
+keycode   3 = two              quotedbl
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            sterling
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	alt shift keycode 5 = Meta_dollar
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+	alt shift keycode 6 = Meta_percent
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash	bracketleft	 	
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft           braceleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+	alt shift keycode 9 = Meta_braceleft
+keycode  10 = nine             parenright          braceright
+	alt     keycode  10 = Meta_nine
+	alt shift keycode 10 = Meta_braceright
+keycode  11 = zero             equal       bracketright	
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe   question      grave
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = igrave asciicircum
+	alt     keycode  13 = Meta_equal
+	alt shift keycode 13 = Meta_asciicircum
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q                Q
+	control keycode  16 = Control_q
+	alt     keycode  16 = Meta_q
+keycode  17 = w                W
+	control keycode  17 = Control_w
+	alt     keycode  17 = Meta_w
+keycode  18 = e                E
+	control keycode  18 = Control_e
+	alt     keycode  18 = Meta_e
+keycode  19 = r                R
+	control keycode  19 = Control_r
+	alt     keycode  19 = Meta_r
+keycode  20 = t                T
+	control keycode  20 = Control_t
+	alt     keycode  20 = Meta_t
+keycode  21 = y                Y
+	control keycode  21 = Control_y
+	alt     keycode  21 = Meta_y
+keycode  22 = u                U
+	control keycode  22 = Control_u
+	alt     keycode  22 = Meta_u
+keycode  23 = i                I
+	control keycode  23 = Tab
+	alt     keycode  23 = Meta_i
+keycode  24 = o                O
+	control keycode  24 = Control_o
+	alt     keycode  24 = Meta_o
+keycode  25 = p                P
+	control keycode  25 = Control_p
+	alt     keycode  25 = Meta_p
+keycode  26 = egrave 	eacute	bracketleft      braceleft
+	altgr   keycode 26 = bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = plus asterisk   bracketright    asciitilde
+	altgr   keycode 27 = bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a                A
+	control keycode  30 = Control_a
+	alt     keycode  30 = Meta_a
+keycode  31 = s                S
+	control keycode  31 = Control_s
+	alt     keycode  31 = Meta_s
+keycode  32 = d                D
+	control keycode  32 = Control_d
+	alt     keycode  32 = Meta_d
+keycode  33 = f                F
+	control keycode  33 = Control_f
+	alt     keycode  33 = Meta_f
+keycode  34 = g                G
+	control keycode  34 = Control_g
+	alt     keycode  34 = Meta_g
+keycode  35 = h                H
+	control keycode  35 = BackSpace
+	alt     keycode  35 = Meta_h
+keycode  36 = j                J
+	control keycode  36 = Linefeed
+	alt     keycode  36 = Meta_j
+keycode  37 = k                K
+	control keycode  37 = Control_k
+	alt     keycode  37 = Meta_k
+keycode  38 = l                L
+	control keycode  38 = Control_l
+	alt     keycode  38 = Meta_l
+keycode  39 = 	ograve 	cent at
+	alt     keycode  39 = Meta_semicolon
+	alt shift keycode 39 = Meta_at
+keycode  40 = agrave   grave  numbersign
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+	altgr  keycode  40 = numbersign
+	alt shift keycode 40 = Meta_numbersign
+keycode  41 = backslash bar  asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+	altgr   keycode  41 = asciitilde
+	alt shift keycode 41 = Meta_bar
+keycode  42 = Shift
+keycode  43 =  ugrave	paragraph
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  44 = z                Z
+	control keycode  44 = Control_z
+	alt     keycode  44 = Meta_z
+keycode  45 = x                X
+	control keycode  45 = Control_x
+	alt     keycode  45 = Meta_x
+keycode  46 = c                C
+	control keycode  46 = Control_c
+	alt     keycode  46 = Meta_c
+keycode  47 = v                V
+	control keycode  47 = Control_v
+	alt     keycode  47 = Meta_v
+keycode  48 = b                B
+	control keycode  48 = Control_b
+	alt     keycode  48 = Meta_b
+keycode  49 = n                N
+	control keycode  49 = Control_n
+	alt     keycode  49 = Meta_n
+keycode  50 = m                M
+	control keycode  50 = Control_m
+	alt     keycode  50 = Meta_m
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = slash            underscore minus
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+	alt shift keycode 86 = Meta_greater
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/jp106.map b/keymaps/i386/qwerty/jp106.map
new file mode 100644
index 0000000..5741da3
--- /dev/null
+++ b/keymaps/i386/qwerty/jp106.map
@@ -0,0 +1,66 @@
+# jp106.map : Japanese 106 keyboard keymap
+#
+# Date: Tue, 20 Aug 1996 16:15:31 +0900
+# From: Hideya Hane <wing@aries.bekkoame.or.jp>
+#
+keymaps 0-1,4-5,8-9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-two-alt-keys"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl
+keycode   4 = three            numbersign
+	control	keycode   4 = Escape
+keycode   5 = four             dollar
+	control	keycode   5 = Control_backslash
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              ampersand
+	control	keycode   7 = Control_underscore
+keycode   8 = seven            apostrophe
+keycode   9 = eight            parenleft
+keycode  10 = nine             parenright
+keycode  11 = zero             asciitilde
+	control	keycode  11 = nul
+keycode  12 = minus            equal
+keycode  13 = asciicircum      asciitilde
+	control	keycode  13 = Control_asciicircum
+keycode  14 = Delete
+	control	keycode  14 = BackSpace
+keycode  15 = Tab
+keycode  26 = at               grave
+	control	keycode  26 = nul
+keycode  27 = bracketleft      braceleft
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = semicolon        plus
+keycode  40 = colon            asterisk
+	control keycode  40 = Control_g
+keycode  41 = Escape
+keycode  42 = Shift
+keycode  43 = bracketright     braceright
+	control	keycode  43 = Control_bracketright
+keycode  51 = comma            less
+keycode  52 = period           greater
+	control	keycode  52 = Compose
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+	shift	control	keycode  53 = Delete
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater
+keycode  89 = backslash        underscore
+	control	keycode  89 = Control_backslash
+keycode  92 = space
+keycode  94 = space
+keycode  97 = Control
+keycode 124 = backslash        bar
+	control	keycode 124 = Control_backslash
diff --git a/keymaps/i386/qwerty/la-latin1.map b/keymaps/i386/qwerty/la-latin1.map
new file mode 100644
index 0000000..6fade3c
--- /dev/null
+++ b/keymaps/i386/qwerty/la-latin1.map
@@ -0,0 +1,74 @@
+# From jfernand@dc.uba.ar Mon Apr 21 22:00:42 1997
+! Latin American keyboard, loosely based on Jon Tombs' and Julio Sanchez's
+! Spanish keyboard. Read the Spahish and Keyboard HOWTOs for information on
+! how to configure your system to use the extended symbols.
+!
+! shift keycode 41 is mapped to masculine because I wasn't able to
+! figure out the correct keysym for that character. If you do, please
+! contact me.
+!
+! Please do send any comments/suggestions to the following address:
+!
+! Javier Fernandez Ivern <jfernand@dc.uba.ar>
+!
+keymaps 0-2,4-6,8-10,12-14
+alt_is_meta
+include "qwerty-layout"
+	altgr   keycode  16 = at
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl
+keycode   4 = three            numbersign
+keycode   5 = four             dollar
+keycode   6 = five             percent
+keycode   7 = six              ampersand
+keycode   8 = seven            slash
+keycode   9 = eight            parenleft
+keycode  10 = nine             parenright
+keycode  11 = zero             equal
+keycode  12 = apostrophe       question         backslash
+	altgr	control	keycode  12 = Control_backslash
+keycode  13 = questiondown     exclamdown
+keycode  14 = Delete
+	control	keycode  14 = BackSpace
+	alt     keycode  14 = Meta_BackSpace
+keycode  15 = Tab
+keycode  26 = dead_acute       dead_diaeresis
+keycode  27 = plus             asterisk         asciitilde
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = ntilde           Ntilde
+keycode  40 = braceleft        bracketleft      asciicircum
+	altgr	control	keycode  40 = Control_asciicircum
+keycode  41 = bar              masculine        notsign
+keycode  42 = Shift
+keycode  43 = braceright       bracketright     grave
+	shift	control	keycode  43 = Control_bracketright
+keycode  51 = comma            semicolon
+keycode  52 = period           colon
+keycode  53 = minus            underscore
+	shift	control	keycode  53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater
+keycode  97 = Control
+
+compose '\'' 'a' to 'á'
+compose '\'' 'e' to 'é'
+compose '\'' 'i' to 'í'
+compose '\'' 'o' to 'ó'
+compose '\'' 'u' to 'ú'
+compose '\'' 'A' to 'Á'
+compose '\'' 'E' to 'É'
+compose '\'' 'I' to 'Í'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'U' to 'Ú'
+compose '"' 'u' to 'ü'
+compose '"' 'U' to 'Ü'
diff --git a/keymaps/i386/qwerty/lt.l4.map b/keymaps/i386/qwerty/lt.l4.map
new file mode 100644
index 0000000..077eead
--- /dev/null
+++ b/keymaps/i386/qwerty/lt.l4.map
@@ -0,0 +1,66 @@
+#encoding: UTF-8
+#     Lithuanian key-map for PC 101/102 keyboard in ISO 8859-4 mode. V1.0.
+# Comments & bug reports to: Ričardas Čepas <rch@pub.osf.lt>
+# Load after loading lt.map. See lt.map for more info.
+# Usage: kbd_mode -a; loadkeys lt.map lt.l4.map; setfont lat4u* -m vga2iso
+
+charset "iso-8859-4"
+
+#		U+0105		 U+0104	
+AltGr		keycode	  2 = +aogonek
+Shift	AltGr	keycode	  2 = +Aogonek
+
+#		U+010d		 U+010c	
+AltGr		keycode	  3 = +ccaron
+Shift	AltGr	keycode	  3 = +Ccaron
+
+#		U+0119		 U+0118	
+AltGr		keycode	  4 = +eogonek
+Shift	AltGr	keycode	  4 = +Eogonek
+
+#		U+0117		 U+0116	
+AltGr		keycode	  5 = +eabovedot
+Shift	AltGr	keycode	  5 = +Eabovedot
+
+#		U+012f		 U+012e	
+AltGr		keycode	  6 = +iogonek
+Shift	AltGr	keycode	  6 = +Iogonek
+
+#		U+0161		 U+0160	
+AltGr		keycode	  7 = +scaron
+Shift	AltGr	keycode	  7 = +Scaron
+
+#		U+0173		 U+0172	
+AltGr		keycode	  8 = +uogonek
+Shift	AltGr	keycode	  8 = +Uogonek
+
+#		U+016b		 U+016a	
+AltGr		keycode	  9 = +umacron
+Shift	AltGr	keycode	  9 = +Umacron
+
+# not available in ISO 8859-4  low_double_comma_quotation_mark „ U+201e
+AltGr		keycode	 10 =	0x90
+
+# not available in ISO 8859-4  double_turned_comma_quotation_mark “ U+201c
+AltGr		keycode	 11 =	0x91
+
+Shift		Control		keycode	 12 = hyphen
+Shift	AltGr	Control		keycode	 12 = hyphen
+Shift			Alt	keycode	 12 = minus
+Shift	AltGr		Alt	keycode	 12 = minus
+Shift		Control	Alt	keycode	 12 = hyphen
+Shift	AltGr	Control	Alt	keycode	 12 = hyphen
+
+#		U+017e		 U+017d	
+AltGr		keycode	 13 = +zcaron
+Shift	AltGr	keycode	 13 = +Zcaron
+
+		Control	Alt	keycode	 40 = quotedbl
+	AltGr	Control	Alt	keycode	 40 = quotedbl
+Shift		Control	Alt	keycode	 40 = quotedbl
+Shift	AltGr	Control	Alt	keycode	 40 = quotedbl
+
+Shift		Control		keycode	 57 = nobreakspace
+Shift	AltGr	Control		keycode	 57 = nobreakspace
+Shift		Control	Alt	keycode	 57 = nobreakspace
+Shift	AltGr	Control	Alt	keycode	 57 = nobreakspace
diff --git a/keymaps/i386/qwerty/lt.map b/keymaps/i386/qwerty/lt.map
new file mode 100644
index 0000000..ddc88b5
--- /dev/null
+++ b/keymaps/i386/qwerty/lt.map
@@ -0,0 +1,576 @@
+#charset "iso-10646"
+#charset "iso-8859-4"
+#encoding: UTF-8
+# Use	echo -ne '\033%G'   on current console to see all characters properly.
+#
+#     Lithuanian key-map for PC	 101/102 keyboard in Unicode mode. V1.03.
+# Comments & bug reports to: Ričardas Čepas <rch@pub.osf.lt>
+#     Usage:
+#	kbd_mode -u; loadkeys lt.map; setfont LatArCyrHeb* -m vga2iso
+# `vga2iso' map is  for non-Unicode mode to get proper ISO 8859-4 font maping.
+#
+#     BUGS: Caps-Lock doesn't work  properly for Unicode characters. Use
+# Shift-Lock (Control+Caps-Lock) instead if you really need that.
+#     Differences between this and  default Linux 2.0.29 key-map:
+#     AltGr is used  for Lithuanian mode and  AltGr+key combinations are
+# changed to Alt+Shift+key. Hex codes can  be entered using keypad while
+# Control+Shift or Alt+Shift is pressed. Keypad layout for hex digits:
+#		A  B  C	 D
+#		7  8  9	 E
+#		4  5  6	 E
+#		1  2  3	 F
+#		 00	 F
+#     Latin   <->  Lithuanian	modes  are   toggled  by   Alt+Enter  or
+# Alt+Control+Enter or	Alt+Caps-Lock. AltGr (right Alt) can  be used to
+# shift the mode. Key between left Control and Alt on German keyboard is
+# another AltGr.
+#     Keyboard layout (upper row of number keys) :
+#   1!Ą    2@Č    3#Ę    4$Ė   5 %Ä®    6^Å    7&Ų     8*Ū    9(„ 0)“ -_  +=Ž–
+# Aogonek Ccaron Eogonek Edot Iogonek Scaron Uogonek Umacron ,,  "  -_ Zcaron
+# All other keys are the same in both modes.
+#     Control+Alt+u   or  Control+Alt+8   generates  command   line  for
+# switching *current* (only) virtual console to Unicode mode.
+#     Control+Alt+1 - default ISO 8859-1 charset mapping and non-Unicode
+# mode.
+#     Control+Alt+4  - ISO  8859-4 charset  mapping if  you have  loaded
+# LatArCyrHeb* (or  lat4u-*) font  with `vga2iso' screen  map. Or lat4-*
+# font with `trivial' screen map.
+#
+#     Backspace key (above Return/Enter)  generates BackSpace (^H, octal
+# 010) and should delete a character before cursor. Delete key generates
+# Delete (^?, octal 177) and  should delete a character above cursor. If
+# that doesn't happen you should:
+# 1) Add to ~/.bashrc and /etc/profile commands:
+#	reset # should set stty erase character to ^H
+#	kbd_mode -u
+# 2) [You don't need 2) if you use only linux+utf8 terminal.]
+#  Fix terminfo entry:  infocmp -L linux >/tmp/linux
+#  Edit file /tmp/linux	 It should have key_backspace and key_dc entries:
+#	key_backspace=^H, key_btab=\E[Z, key_dc=\177,
+#	key_sdc=\E[3$, key_send=\E[8$, key_shome=\E[7$, key_sic=\E[2$,
+#	key_sleft=\E[d, key_sright=\E[c,
+#  Compile entry (as root):  tic /tmp/linux
+# 3) For bash and other programs using libreadline library create
+# ~/.inputrc or global file pointed by INPUTRC variable:
+#	       set meta-flag On
+#	       set convert-meta Off
+#	       set output-meta On
+#	       "\C-h": backward-delete-char
+#	       "\e\C-h": backward-kill-word
+#	       "\e[1~": beginning-of-line
+#	       "\e[H": beginning-of-line
+#	       "\e[7~": beginning-of-line
+#	       "\eOH": beginning-of-line
+#	       "\e[d": backward-word
+#	       "\C-?": delete-char
+#	       "\e[3~": delete-char
+#	       "\e[4~": end-of-line
+#	       "\e[F": end-of-line
+#	       "\e[8~": end-of-line
+#	       "\eOF": end-of-line
+#	       "\e[c": forward-word
+#	       "\e\C-?": kill-word
+# 4) Add to /etc/init.d/boot ( this startup file may be other for you system):
+#	 kbd_mode -u; loadkeys lt.map
+# loadkeys affects all virtual consoles.
+#
+#      Control+BackSpace   is  Delete	and  Control+Delete   is  Remove
+# (VT100   key).   Most	  Meta_	 and   Control_Meta_  combinations   are
+# enabled.
+#      Control+Space gives nul, Shift+Control+Space - non-break space.
+#      Shift+Control+minus    gives    discretionary   (soft)    hyphen,
+# Shift+Alt+minus - quotation dash  (long) and Shift+Control+Alt+minus -
+# non-breaking hyphen.
+#      Control+Alt+double_quote  gives  double  turned  comma  quotation
+# mark,  Shift+Control+Alt+double_quote  gives  double  comma  quotation
+# mark.
+#      Shift+Function  gives functions  F11..22,  Control+F. -  F21..32,
+# Shift+Control+F. - F31..42. Shift+[Control+]Alt+F.  - virtual consoles
+# 13..24.
+#      Added  Back_Tab as  Shift+Tab,  shifted  arrows, Insert,  Delete,
+# Home, End as in rxvt terminal.
+#      Added F1 as Shift+Control+H (Emacs "feature").
+#
+#      See kbd.FAQ for more info on Linux key-map.
+
+
+keymaps 0-15
+#	       Plain  +Shift	      +Shift
+#			      +AltGr  +AltGr
+# Plain		 0	 1	 2	 3
+# +Control	 4	 5	 6	 7
+# +Alt		 8	 9	10	11
+# +Control+Alt	12	13	14	15
+
+#	AltGr = right Alt
+
+keycode	  1 = Escape	       Escape		Escape		 Escape	   \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol \
+	      Meta_Escape      Meta_Escape	Meta_Escape	 Meta_Escape
+
+#						+aogonek €Ä…	 +Aogonek Ą
+keycode	  2 = one	       exclam		U+0105		 U+0104	   \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol \
+	      Meta_one	       Meta_exclam	Meta_one	 Meta_exclam \
+	      F202	       F202		F202		 F202
+# ISO 8859-1 - default Linux map
+string F202 = "kbd_mode -a; echo -ne '\\033\\045@\\033(B'\015"
+
+#						+ccaron č	 +Ccaron Č
+keycode	  3 = two	       at		U+010d		 U+010c	   \
+	      nul	       nul		nul		 nul	    \
+	      Meta_two	       Meta_at		Meta_two	 Meta_at     \
+	      nul	       nul		nul		 nul
+
+#						+eogonek ę	 +Eogonek Ę
+keycode	  4 = three	       numbersign	U+0119		 U+0118	   \
+	      Escape	       Escape		Escape		 Escape	    \
+	      Meta_three       Meta_numbersign	Meta_three	 Meta_numbersign
+
+#						+eabovedot ė	 +Eabovedot Ė
+keycode	  5 = four	       dollar		U+0117		 U+0116	   \
+    Control_backslash Control_backslash Control_backslash Control_backslash \
+	      Meta_four	       Meta_dollar	Meta_four	 Meta_dollar \
+	      F201	       F201		F201		 F201
+# ISO 8859-4 or other user map
+string F201 = "kbd_mode -a; echo -ne '\\033\\045@\\033(K'\015"
+
+#						+iogonek į	  +Iogonek Į
+keycode	  6 = five	       percent		U+012f		 U+012e	    \
+	Control_bracketright Control_bracketright Control_bracketright \
+							Control_bracketright \
+	      Meta_five	       Meta_percent	Meta_five	 Meta_percent
+
+#						+scaron	 š	 +Scaron Š
+keycode	  7 = six	       asciicircum	U+0161		 U+0160	    \
+	      Control_asciicircum Control_asciicircum Control_asciicircum \
+							 Control_asciicircum \
+	      Meta_six	       Meta_asciicircum Meta_six    Meta_asciicircum \
+ Meta_Control_asciicircum Meta_Control_asciicircum Meta_Control_asciicircum \
+						       Meta_Control_asciicircum
+
+#						+uogonek ų	 +Uogonek Ų
+keycode	  8 = seven	       ampersand	U+0173		 U+0172	   \
+	      Control_underscore Control_underscore Control_underscore \
+							Control_underscore  \
+	      Meta_seven       Meta_ampersand	Meta_seven	 Meta_ampersand
+
+#						+umacron ū	 +Umacron Ū	
+keycode	  9 = eight	       asterisk		U+016b		 U+016a	 \
+	      Delete	       Delete		Delete		 Delete	  \
+	      Meta_eight       Meta_asterisk	Meta_eight   Meta_asterisk \
+	      F200	       F200	        F200	         F200
+# UTF-8
+string F200 = "kbd_mode -u; echo -ne '\\033\\045G\\033(K'\015"
+
+
+# U+201C    not available in ISO 8859-4 low_double_comma_quotation_mark „
+keycode	 10 = nine	       parenleft	U+201e		 parenleft \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol \
+	      Meta_nine	       Meta_parenleft	Meta_nine	 Meta_parenleft
+
+# U+201C    not available in ISO 8859-4 double_turned_comma_quotation_mark “
+keycode	 11 = zero	       parenright	U+201c		 parenright \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol  \
+	      Meta_zero	       Meta_parenright	Meta_zero	 Meta_parenright
+
+# U+00AD    soft hyphen = discretionary hyphen
+# U+2015    horizontal bar = quotation dash * long dash introducing quoted text
+# U+2011    non-breaking hyphen
+keycode	 12 = minus	       underscore	minus		 underscore  \
+	      Control_underscore U+00ad		Control_underscore U+00ad \
+	      Meta_minus       U+2015		Meta_minus	 U+2015 \
+	      Meta_Control_underscore U+2011	Meta_Control_underscore U+2011
+
+#						+zcaron ž	 +Zcaron  Ž
+keycode	 13 = equal	       plus		U+017e		 U+017d	    \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol  \
+	      Meta_equal       Meta_plus	Meta_equal	 Meta_plus
+
+#	edit this if you want the key above <Enter> to delete symbols above
+# cursor, not before.
+keycode	 14 = \
+	      BackSpace	       BackSpace	BackSpace	 BackSpace  \
+	      Delete	       Delete		Delete		 Delete	     \
+	      Meta_BackSpace   Meta_BackSpace	Meta_BackSpace Meta_BackSpace \
+	      Meta_Delete      Meta_Delete	Meta_Delete	 Meta_Delete
+
+string F215 = "\033[Z"
+keycode	 15 = Tab	       F215		Tab		 F215	   \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol \
+	      Meta_Tab	       Meta_Tab		Meta_Tab	 Meta_Tab
+
+# Single characters are defined by default.
+keycode	 16 = +q
+keycode	 17 = +w
+keycode	 18 = +e
+keycode	 19 = +r
+keycode	 20 = +t
+keycode	 21 = +y
+keycode	 22 = +u
+	      control  alt     keycode	22 = F200
+  shift	      control  alt     keycode	22 = F200
+	altgr control  alt     keycode	22 = F200
+  shift altgr control  alt     keycode	22 = F200
+# UTF-8
+#string F200 = "kbd_mode -u; echo -ne '\\033\\045G\\033(K'\015"
+
+keycode	 23 = +i
+keycode	 24 = +o
+keycode	 25 = +p
+keycode	 26 = bracketleft      braceleft       bracketleft	braceleft  \
+	      Escape	       Escape	       Escape		Escape	    \
+	      Meta_bracketleft Meta_braceleft  Meta_bracketleft Meta_braceleft
+
+keycode	 27 = bracketright     braceright      bracketright	braceright \
+	      Control_bracketright Control_bracketright \
+				  Control_bracketright Control_bracketright \
+	 Meta_bracketright Meta_braceright Meta_bracketright Meta_braceright \
+	      Meta_Control_bracketright Meta_Control_bracketright \
+			   Meta_Control_bracketright Meta_Control_bracketright
+
+keycode	 28 = Return	       Return		Return		Return	  \
+	      Return	       Return		Return		Return	   \
+	      AltGr_Lock       AltGr_Lock	AltGr_Lock	AltGr_Lock  \
+	      AltGr_Lock       AltGr_Lock	AltGr_Lock	AltGr_Lock
+
+keycode	 29 = Control
+keycode	 30 = +a
+keycode	 31 = +s
+keycode	 32 = +d
+keycode	 33 = +f
+keycode	 34 = +g
+keycode	 35 = +h
+	shift control   keycode 35 = F1
+	shift AltGr control   keycode 35 = F1
+
+keycode	 36 = +j
+keycode	 37 = +k
+keycode	 38 = +l
+keycode	 39 = semicolon	       colon	       semicolon	colon	  \
+	      VoidSymbol       VoidSymbol      VoidSymbol	VoidSymbol \
+	      Meta_semicolon   Meta_colon      Meta_semicolon	Meta_colon
+
+# U+201C    left double quotation mark = double turned comma quotation mark “
+# U+201D    right double quotation mark = double comma quotation mark ”
+keycode	 40 = apostrophe       quotedbl	       apostrophe	quotedbl  \
+	      Control_g	       Control_g       Control_g	Control_g  \
+	      Meta_apostrophe  Meta_quotedbl   Meta_apostrophe	Meta_quotedbl \
+	      U+201C	       U+201D	       U+201C	        U+201D
+
+keycode	 41 = grave	       asciitilde      grave		asciitilde \
+	      nul	       nul	       nul		nul	    \
+	      Meta_grave       Meta_asciitilde Meta_grave     Meta_asciitilde
+
+keycode	 42 = Shift
+
+keycode	 43 = backslash	       bar	       backslash	bar \
+      Control_backslash Control_backslash Control_backslash Control_backslash \
+	      Meta_backslash   Meta_bar	       Meta_backslash	Meta_bar \
+	      Meta_Control_backslash Meta_Control_backslash \
+				 Meta_Control_backslash Meta_Control_backslash
+keycode	 44 = +z
+keycode	 45 = +x
+keycode	 46 = +c
+keycode	 47 = +v
+keycode	 48 = +b
+keycode	 49 = +n
+keycode	 50 = +m
+keycode	 51 = comma	       less		comma		 less	   \
+	      VoidSymbol       VoidSymbol	VoidSymbol	 VoidSymbol \
+	      Meta_comma       Meta_less	Meta_comma	 Meta_less
+
+keycode	 52 = period	       greater		period		 greater    \
+	      Compose	       Compose		Compose		 Compose     \
+	      Meta_period      Meta_greater	Meta_period	 Meta_greater
+
+keycode	 53 = slash	       question		slash		 question    \
+	      Delete	       Delete		Delete		 Delete	      \
+	      Meta_slash       Meta_question	Meta_slash	 Meta_question
+
+keycode	 54 = Shift	
+
+keycode	 55 = KP_Multiply      KP_Multiply	KP_Multiply	 KP_Multiply \
+	      KP_Multiply      Hex_C		KP_Multiply	 Hex_C	     \
+	      KP_Multiply      Hex_C		KP_Multiply	 Hex_C	      \
+	      KP_Multiply      KP_Multiply	KP_Multiply	 KP_Multiply
+
+keycode	 56 = Alt
+
+#			       0xA0 no-break space
+keycode	 57 = space	       space		space		 space	     \
+	      nul	       U+00a0		nul		 U+00a0	      \
+	      Meta_space       Meta_space	Meta_space	 Meta_space    \
+	      VoidSymbol       U+00a0		VoidSymbol	 U+00a0
+
+keycode	 58 = Caps_Lock	       Caps_Lock	Caps_Lock	 Caps_Lock \
+	      Shift_Lock       Shift_Lock	Shift_Lock	 Shift_Lock \
+	      AltGr_Lock       AltGr_Lock	AltGr_Lock	 AltGr_Lock  \
+	      Caps_Lock	       Caps_Lock	Caps_Lock	 Caps_Lock
+
+keycode	 59 = F1	       F11		F1		 F11	  \
+	      F21	       F31		F21		 F31	   \
+	      Console_1	       Console_13	Console_1	 Console_13 \
+	      Console_1	       Console_13	Console_1	 Console_13
+keycode	 60 = F2	       F12		F2		 F12	  \
+	      F22	       F32		F22		 F32	   \
+	      Console_2	       Console_14	Console_2	 Console_14 \
+	      Console_2	       Console_14	Console_2	 Console_14
+keycode	 61 = F3	       F13		F3		 F13	  \
+	      F23	       F33		F23		 F33	   \
+	      Console_3	       Console_15	Console_3	 Console_15 \
+	      Console_3	       Console_15	Console_3	 Console_15
+keycode	 62 = F4	       F14		F4		 F14	  \
+	      F24	       F34		F24		 F34	   \
+	      Console_4	       Console_16	Console_4	 Console_16 \
+	      Console_4	       Console_16	Console_4	 Console_16
+keycode	 63 = F5	       F15		F5		 F15	  \
+	      F25	       F35		F25		 F35	   \
+	      Console_5	       Console_17	Console_5	 Console_17 \
+	      Console_5	       Console_17	Console_5	 Console_17
+keycode	 64 = F6	       F16		F6		 F16	  \
+	      F26	       F36		F26		 F36	   \
+	      Console_6	       Console_18	Console_6	 Console_18 \
+	      Console_6	       Console_18	Console_6	 Console_18
+keycode	 65 = F7	       F17		F7		 F17	  \
+	      F27	       F37		F27		 F37	   \
+	      Console_7	       Console_19	Console_7	 Console_19 \
+	      Console_7	       Console_19	Console_7	 Console_19
+keycode	 66 = F8	       F18		F8		 F18	  \
+	      F28	       F38		F28		 F38	   \
+	      Console_8	       Console_20	Console_8	 Console_20 \
+	      Console_8	       Console_20	Console_8	 Console_20
+keycode	 67 = F9	       F19		F9		 F19	  \
+	      F29	       F39		F29		 F39	   \
+	      Console_9	       Console_21	Console_9	 Console_21 \
+	      Console_9	       Console_21	Console_9	 Console_21
+keycode	 68 = F10	       F20		F10		 F20	  \
+	      F30	       F40		F30		 F40	   \
+	      Console_10       Console_22	Console_10	 Console_22 \
+	      Console_10       Console_22	Console_10	 Console_22
+keycode	 69 = Num_Lock	       Bare_Num_Lock	Num_Lock	 Bare_Num_Lock \
+	      Num_Lock	       Hex_A		Num_Lock	 Hex_A	    \
+	      Num_Lock	       Hex_A		Num_Lock	 Hex_A	     \
+	      Num_Lock	       Num_Lock		Num_Lock	 Num_Lock
+keycode	 70 = Scroll_Lock      Show_Memory	Scroll_Lock	 Show_Memory \
+	      Show_State       VoidSymbol	Show_State	 VoidSymbol   \
+	      Scroll_Lock      Show_Registers	Scroll_Lock	 Show_Registers
+keycode	 71 = KP_7	       KP_7		KP_7		 KP_7  \
+	      KP_7	       Hex_7		KP_7		 Hex_7	\
+	      Ascii_7	       Hex_7		Ascii_7		 Hex_7	 \
+	      KP_7	       KP_7		KP_7		 KP_7
+keycode	 72 = KP_8	       KP_8		KP_8		 KP_8  \
+	      KP_8	       Hex_8		KP_8		 Hex_8	\
+	      Ascii_8	       Hex_8		Ascii_8		 Hex_8	 \
+	      KP_8	       KP_8		KP_8		 KP_8
+keycode	 73 = KP_9	       KP_9		KP_9		 KP_9  \
+	      KP_9	       Hex_9		KP_9		 Hex_9	\
+	      Ascii_9	       Hex_9		Ascii_9		 Hex_9	 \
+	      KP_9	       KP_9		KP_9		 KP_9
+keycode	 74 = KP_Subtract      KP_Subtract	KP_Subtract	 KP_Subtract \
+	      KP_Subtract      Hex_D		KP_Subtract	 Hex_D	     \
+	      KP_Subtract      Hex_D		KP_Subtract	 Hex_D	      \
+	      KP_Subtract      KP_Subtract	KP_Subtract	 KP_Subtract
+keycode	 75 = KP_4	       KP_4		KP_4		 KP_4  \
+	      KP_4	       Hex_4		KP_4		 Hex_4	\
+	      Ascii_4	       Hex_4		Ascii_4		 Hex_4	 \
+	      KP_4	       KP_4		KP_4		 KP_4
+keycode	 76 = KP_5	       KP_5		KP_5		 KP_5  \
+	      KP_5	       Hex_5		KP_5		 Hex_5	\
+	      Ascii_5	       Hex_5		Ascii_5		 Hex_5	 \
+	      KP_5	       KP_5		KP_5		 KP_5
+keycode	 77 = KP_6	       KP_6		KP_6		 KP_6  \
+	      KP_6	       Hex_6		KP_6		 Hex_6	\
+	      Ascii_6	       Hex_6		Ascii_6		 Hex_6	 \
+	      KP_6	       KP_6		KP_6		 KP_6
+keycode	 78 = KP_Add	       KP_Add		KP_Add		 KP_Add \
+	      KP_Add	       Hex_E		KP_Add		 Hex_E	 \
+	      KP_Add	       Hex_E		KP_Add		 Hex_E	  \
+	      KP_Add	       KP_Add		KP_Add		 KP_Add
+keycode	 79 = KP_1	       KP_1		KP_1		 KP_1  \
+	      KP_1	       Hex_1		KP_1		 Hex_1	\
+	      Ascii_1	       Hex_1		Ascii_1		 Hex_1	 \
+	      KP_1	       KP_1		KP_1		 KP_1
+keycode	 80 = KP_2	       KP_2		KP_2		 KP_2  \
+	      KP_2	       Hex_2		KP_2		 Hex_2	\
+	      Ascii_2	       Hex_2		Ascii_2		 Hex_2	 \
+	      KP_2	       KP_2		KP_2		 KP_2
+keycode	 81 = KP_3	       KP_3		KP_3		 KP_3  \
+	      KP_3	       Hex_3		KP_3		 Hex_3	\
+	      Ascii_3	       Hex_3		Ascii_3		 Hex_3	 \
+	      KP_3	       KP_3		KP_3		 KP_3
+keycode	 82 = KP_0	       KP_0		KP_0		 KP_0  \
+	      KP_0	       Hex_0		KP_0		 Hex_0	\
+	      Ascii_0	       Hex_0		Ascii_0		 Hex_0	 \
+	      KP_0	       KP_0		KP_0		 KP_0
+keycode	 83 = KP_Period
+	control alt	keycode	 83 = Boot	
+	altgr control	alt	keycode	 83 = Boot	
+
+#	 Alt + print-screen
+keycode	 84 = Last_Console
+keycode	 85 =
+#keycode  86 = less		greater		 bar		
+#	 alt	 keycode  86 = Meta_less
+
+# On German keyboards it is between left control and left alt keys:
+keycode	 86 = AltGr
+
+keycode	 87 = F11	       F21		F11		 F21	  \
+	      F31	       F41		F31		 F41	   \
+	      Console_11       Console_23	Console_11	 Console_23 \
+	      Console_11       Console_23	Console_11	 Console_23
+keycode	 88 = F12	       F22		F12		 F22	  \
+	      F32	       F42		F32		 F42	   \
+	      Console_12       Console_24	Console_12	 Console_24 \
+	      Console_12       Console_24	Console_12	 Console_24
+keycode	 89 =
+keycode	 90 =
+keycode	 91 =
+keycode	 92 =
+keycode	 93 =
+keycode	 94 =
+keycode	 95 =
+keycode	 96 = KP_Enter	       KP_Enter		KP_Enter	 KP_Enter \
+	      KP_Enter	       Hex_F		KP_Enter	 Hex_F	   \
+	      AltGr_Lock       Hex_F		AltGr_Lock	 Hex_F	    \
+	      AltGr_Lock       AltGr_Lock	AltGr_Lock	 AltGr_Lock
+
+keycode	 97 = Control
+
+keycode	 98 = KP_Divide	       KP_Divide	KP_Divide	 KP_Divide \
+	      KP_Divide	       Hex_B		KP_Divide	 Hex_B	    \
+	      KP_Divide	       Hex_B		KP_Divide	 Hex_B	     \
+	      KP_Divide	       KP_Divide	KP_Divide	 KP_Divide
+
+keycode	 99 = Control_backslash	 # 99=Print-Screen
+keycode 100 = AltGr
+keycode 101 = Break #	101=Control-Pause
+string F102 = "\033[7$"
+keycode 102 = Find  #	=Home
+	shift	      keycode 102 = F102
+	shift AltGr   keycode 102 = F102
+string F103 = "\033[a"
+keycode 103 = Up
+	shift	      keycode 103 = F103
+	shift AltGr   keycode 103 = F103
+	alt	      keycode 103 = Spawn_Console
+	AltGr alt     keycode 103 = Spawn_Console
+	shift alt	    keycode 103 = Spawn_Console	
+	shift AltGr alt	    keycode 103 = Spawn_Console	
+keycode 104 = Prior #	=PageUp
+	shift	      keycode 104 = Scroll_Backward
+	AltGr shift   keycode 104 = Scroll_Backward
+string F105 = "\033[d"
+keycode 105 = Left
+	shift	      keycode 105 = F105
+	shift AltGr   keycode 105 = F105
+	alt	      keycode 105 = Decr_Console
+	AltGr alt     keycode 105 = Decr_Console
+	shift alt	    keycode 105 = Decr_Console	
+	shift AltGr alt	    keycode 105 = Decr_Console
+string F106 = "\033[c"
+keycode 106 = Right
+	shift	      keycode 106 = F106
+	shift AltGr   keycode 106 = F106
+	alt	      keycode 106 = Incr_Console
+	AltGr alt     keycode 106 = Incr_Console
+	shift alt	    keycode 106 = Incr_Console	
+	shift AltGr alt	    keycode 106 = Incr_Console
+string F107 = "\033[8$"
+keycode 107 = Select   # =End
+	shift	      keycode 107 = F107
+	shift AltGr   keycode 107 = F107
+string F108 = "\033[b"
+keycode 108 = Down
+	shift	      keycode 108 = F108
+	shift AltGr   keycode 108 = F108
+keycode 109 = Next  #	 =PageDown
+	shift	      keycode 109 = Scroll_Forward
+	AltGr shift   keycode 109 = Scroll_Forward
+string F110 = "\033[2$"
+keycode 110 = Insert
+	shift	      keycode 110 = F110
+	shift AltGr   keycode 110 = F110
+
+# Edit this if you want strict VT100 emulation.
+string F111 = "\033[3$"
+keycode 111 = Delete	       F111		Delete		 F111	   \
+	      Remove	       Remove		Remove		 Remove	    \
+	      Meta_Delete      Meta_Delete	Meta_Delete	 Meta_Delete \
+	      Boot	       Boot		Boot		 Boot
+
+# My PC 102 keyboard seems don't have 112-118.
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+
+keycode 119 = Pause
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string F21 = "\033[35~"
+string F22 = "\033[36~"
+string F23 = "\033[37~"
+string F24 = "\033[38~"
+string F25 = "\033[39~"
+string F26 = "\033[40~"
+string F27 = "\033[41~"
+string F28 = "\033[42~"
+string F29 = "\033[43~"
+string F30 = "\033[44~"
+string F31 = "\033[45~"
+string F32 = "\033[46~"
+string F33 = "\033[47~"
+string F34 = "\033[48~"
+string F35 = "\033[49~"
+string F36 = "\033[50~"
+string F37 = "\033[51~"
+string F38 = "\033[52~"
+string F39 = "\033[53~"
+string F40 = "\033[54~"
+string F41 = "\033[55~"
+string F42 = "\033[56~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+
+#   ISO-8859-1 characters - don't work in Unicode mode as of
+# loadkeys V.89 and Linux 2.0.29. Use Control+Alt+1 to see them.
+compose as usual for "iso-8859-1"
+
+
diff --git a/keymaps/i386/qwerty/mk.map b/keymaps/i386/qwerty/mk.map
new file mode 100644
index 0000000..4ff529b
--- /dev/null
+++ b/keymaps/i386/qwerty/mk.map
@@ -0,0 +1,108 @@
+# From: Danko Ilik <danko@mindless.com>
+# Date: Sun Feb  7 19:58:47 CET 1999
+#
+# Macedonian Cyrilic Unicode keyboard mapping
+###############################################
+#
+# Vkluchuvanje/iskluchuvanje na kirilichen mod se pravi so left_alt+left_shift
+# 
+# kaj mene, so slednata niza naredbi se vkluchuva terminalskata podrshka
+# za nashiot jazik:
+#	setfont iso05.f14
+#	loadunimap iso05.uni
+#	kbd_mode -u
+#	loadkeys mk.map
+# so
+#	echo -e '\033%G'
+# se ovozmozhuva prikaz na kirilichni simboli na terminalot, shto nekogash
+# znae da go razneubavi displayot (kaj programi shto koristat ncurses,
+# na primer) pa e zgodno da se iskluchi ispisot na kirilicata:
+#	echo -e '\033%@'
+# 
+# Mnogu od programite se zbunuvaat koga kje im se prati tolku mokjen :)
+# karakter kako kirilichniot, pa treba da se iskluchat soodvetnite
+# blokadi na 8-bitovi.
+#
+# Verojatno, tekst so komentari za nashite raboti mozhe da najdete na
+# http://eon.pmf.ukim.edu.mk/~danko/linux.mk/
+#
+# Pratete komentar so sugestii.
+#
+# korisna e dokumentacijata za kbd paketot (/usr/doc/kbd*)
+###############################################
+# (adapted a bit, aeb)
+#
+charset "iso-8859-5"
+alt_is_meta
+keymaps 0-10,12,14
+include "linux-with-modeshift-altgr.inc"
+strings as usual
+
+keycode 1 = Escape
+keycode 2 = one exclam one exclam
+keycode 3 = two at two at nul nul
+keycode 4 = three numbersign three numbersign Escape
+keycode 5 = four dollar four dollar Control_backslash
+keycode 6 = five percent five percent Control_bracketright
+keycode 7 = six asciicircum six asciicircum Control_asciicircum
+keycode 8 = seven ampersand seven ampersand Control_underscore
+keycode 9 = eight asterisk eight asterisk Delete
+keycode 10 = nine parenleft nine parenleft
+keycode 11 = zero parenright zero parenright
+keycode 12 = minus underscore minus underscore Control_underscore Control_underscore
+keycode 13 = equal plus equal plus
+keycode 14 = Delete Delete Delete Delete BackSpace
+keycode 15 = Tab
+keycode 16 = +q +Q U+0459 U+0409 Control_q Control_q Control_q Control_q
+keycode 17 = +w +W U+045a U+040a Control_w Control_w Control_w Control_w
+keycode 18 = +e +E U+0435 U+0415 Control_e Control_e Control_e Control_e
+keycode 19 = +r +R U+0440 U+0420 Control_r Control_r Control_r Control_r
+keycode 20 = +t +T U+0442 U+0422 Control_t Control_t Control_t Control_t
+keycode 21 = +y +Y U+0455 U+0405 Control_y Control_y Control_y Control_y
+keycode 22 = +u +U U+0443 U+0423 Control_u Control_u Control_u Control_u
+keycode 23 = +i +I U+0438 U+0418 Tab Tab Tab Tab
+keycode 24 = +o +O U+043e U+041e Control_o Control_o Control_o Control_o
+keycode 25 = +p +P U+043f U+041f Control_p Control_p Control_p Control_p
+keycode 26 = bracketleft braceleft U+0448 U+0428 Escape
+keycode 27 = bracketright braceright U+0453 U+0403 Control_bracketright
+keycode 28 = Return
+alt keycode 28 = Meta_Control_m
+keycode  29 = Control
+keycode 30 = +a +A U+0430 U+0410 Control_a Control_a Control_a Control_a
+keycode 31 = +s +S U+0441 U+0421 Control_s Control_s Control_s Control_s
+keycode 32 = +d +D U+0434 U+0414 Control_d Control_d Control_d Control_d
+keycode 33 = +f +F U+0444 U+0424 Control_f Control_f Control_f Control_f
+keycode 34 = +g +G U+0433 U+0413 Control_g Control_g Control_g Control_g
+keycode 35 = +h +H U+0445 U+0425 BackSpace BackSpace BackSpace BackSpace
+keycode 36 = +j +J U+0458 U+0408 Linefeed Linefeed Linefeed Linefeed
+keycode 37 = +k +K U+043a U+041a Control_k Control_k Control_k Control_k
+keycode 38 = +l +L U+043b U+041b Control_l Control_l Control_l Control_l
+keycode 39 = semicolon colon U+0447 U+0427
+keycode 40 = apostrophe quotedbl U+045c U+040c Control_g
+keycode 41 = grave asciitilde apostrophe quotedbl nul
+
+keycode 42 = Shift
+alt keycode 42 = AltGr_Lock
+altgr alt keycode 42 = AltGr_Lock
+
+keycode 43 = backslash bar U+0436 U+0416 Control_backslash
+keycode 44 = +z +Z U+0437 U+0417 Control_z Control_z Control_z Control_z
+keycode 45 = +x +X U+045f U+040f Control_x Control_x Control_x Control_x
+keycode 46 = +c +C U+0446 U+0426 Control_c Control_c Control_c Control_c
+keycode 47 = +v +V U+0432 U+0412 Control_v Control_v Control_v Control_v
+keycode 48 = +b +B U+0431 U+0411 Control_b Control_b Control_b Control_b
+keycode 49 = +n +N U+043d U+041d Control_n Control_n Control_n Control_n
+keycode 50 = +m +M U+043c U+041c Control_m Control_m Control_m Control_m
+keycode 51 = comma less comma semicolon
+keycode 52 = period greater period colon
+keycode 53 = slash question slash question Delete Delete
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+keycode 56 = Alt
+keycode 57 = space
+control keycode 57 = nul
+keycode 58 = Caps_Lock
+
+keycode 86 = less greater bar
+
+altgr control alt keycode 111 = Boot
diff --git a/keymaps/i386/qwerty/nl.map b/keymaps/i386/qwerty/nl.map
new file mode 100644
index 0000000..dcd9005
--- /dev/null
+++ b/keymaps/i386/qwerty/nl.map
@@ -0,0 +1,66 @@
+# NL Keyboard Mapping  version 0.0.0.1
+#
+# From: wwessels@explore.demon.nl
+# Date: 22/12/98 
+# For an IBM 85 key international keyboard as found on a Thinkpad 765L.
+# 
+# This keyboard mapping is far from complete, I only have fixed the
+# most irritating not working keys on the NL/IBM keyboard.
+# I will try to fix all the keys if I have the knowledge and the time.
+# 
+# Best regards, Wouter.
+#
+# [slightly adapted - aeb]
+# [corrections welcome - it seems unlikely that both Shift-9 and Shift-0
+#  are parenright]
+charset "iso-8859-1"
+keymaps 0-2,4-6,8-9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one              exclam          
+keycode   3 = two              quotedbl               at               nul              nul             
+keycode   4 = three            numbersign      
+	control	keycode   4 = Escape          
+keycode   5 = four             dollar           dollar           Control_backslash
+keycode   6 = five             percent         
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              ampersand     
+	control	keycode   7 = Control_asciicircum
+keycode   8 = seven            underscore        braceleft        Control_underscore
+keycode   9 = eight            parenleft         bracketleft      Delete          
+keycode  10 = nine             parenright        bracketright    
+keycode  11 = zero             parenright       braceright      
+keycode  12 = slash            question		backslash        Control_underscore Control_underscore
+keycode  13 = equal            asciitilde            
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = bracketleft      asciicircum       
+	control	keycode  26 = Escape          
+keycode  27 = asterisk     bar	asciitilde       Control_bracketright
+keycode  28 = Return          
+	alt	keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+keycode  39 = plus        colon           
+keycode  40 = apostrophe      grave 
+	control	keycode  40 = Control_g       
+keycode  41 = at            asciitilde      
+	control	keycode  41 = nul             
+keycode  42 = Shift           
+keycode  43 = less        greater             
+	control	keycode  43 = Control_backslash
+keycode  51 = comma           semicolon 
+keycode  52 = period          colon 
+keycode  53 = minus          equal 
+	control	keycode  53 = Delete          
+keycode  54 = Shift           
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control	keycode  57 = nul             
+keycode  58 = Caps_Lock       
+keycode  86 = bracketright             greater          bar             
+keycode  97 = Control         
diff --git a/keymaps/i386/qwerty/no-latin1.doc b/keymaps/i386/qwerty/no-latin1.doc
new file mode 100644
index 0000000..337d718
--- /dev/null
+++ b/keymaps/i386/qwerty/no-latin1.doc
@@ -0,0 +1,50 @@
+/usr/lib/kbd/keymaps/i386/qwerty/no-latin1.map
+
+This generally conforms to the keycaps on my keyboard.
+I have deviated a little to make it more useful in a Unix
+environment, e.g. the tilde is not "hidden away" and dead.
+
+Here's a list of the dead keys:
+
+    ----
+    |$¼| dollar and currency
+    |4¤| have switched places
+    ----
+
+    ----                    --------------------------
+    |``| added dead grave:  | backtick  | dead grave |
+    |\'|                    | backslash | dead acute |
+    ----                    --------------------------
+
+    ----                    --------------------------
+    |^~| moved dead         | caret | dead tilde     |
+    |~¨| diaeresis:         | tilde | dead diaeresis |
+    ----                    --------------------------
+
+    ----                    --------------------------------
+    |*×| added dead         | asterisk   | multiply        |
+    |'^| circumflex:        | apostrophe | dead circumflex |
+    ----                    --------------------------------
+
+In addition special characters have been added to the alphanumerics
+when it seemed natural:
+
+    §¶ !¹ "² #³ $¼ %½ &¾ /÷ (  )  =  ?¿ ``
+    |¦ 1¡ 2@ 3£ 4¤ 5½ 6¾ 7{ 8[ 9] 0} +± \'
+
+        Q  W  EÉ R  TÞ Y  UÜ IÏ OÒ P  Å] ^~
+        q  w  eé r® tþ yÿ uü iï oò p¶ å} ~¨
+
+         AÁ S  DÐ Fª G  H  J  K  L  Ø\ Æ[ *×
+         aá sß dð fª g  h  j  k  l  ø| æ{ '^
+
+       >» Z  X  C© V  B  NÑ Mº ;« :» _
+       <« z  x× cç v  b  nñ mµ ,¸ .· -­
+
+               Space NoBreakSpace
+               Space NoBreakSpace
+
+Send comments to Kjetil T. Homme <kjetilho@ifi.uio.no>
+
+[ These characters can not be typed directly with the keyboard:
+  cent notsign macron degree acute(bug) diaeresis(bug) Ccedilla ]
diff --git a/keymaps/i386/qwerty/no-latin1.map b/keymaps/i386/qwerty/no-latin1.map
new file mode 100644
index 0000000..54b23a2
--- /dev/null
+++ b/keymaps/i386/qwerty/no-latin1.map
@@ -0,0 +1,192 @@
+# /usr/lib/kbd/keymaps/i386/qwerty/no-latin1.map
+#
+# Send comments to Kjetil T. Homme <kjetilho@ifi.uio.no>
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+	plain keycode 111 = Delete		# "Remove" originally, weird...
+strings as usual
+
+	keycode   1 = Escape
+    alt	keycode   1 = Meta_Escape
+
+	keycode   2 = one	exclam		exclamdown	onesuperior
+    alt	keycode   2 = Meta_one
+
+	keycode   3 = two	quotedbl	at		twosuperior
+control	keycode   3 = nul
+    alt	keycode   3 = Meta_two
+
+	keycode   4 = three	numbersign	sterling	threesuperior
+control	keycode   4 = Escape
+    alt	keycode   4 = Meta_three
+
+	keycode   5 = four	dollar		currency	onequarter
+control	keycode   5 = Control_backslash
+    alt	keycode   5 = Meta_four
+
+	keycode   6 = five	percent		onehalf		onehalf
+control	keycode   6 = Control_bracketright
+    alt	keycode   6 = Meta_five
+
+	keycode   7 = six	ampersand	threequarters	threequarters
+control	keycode   7 = Control_asciicircum
+    alt	keycode   7 = Meta_six
+
+	keycode   8 = seven	slash		braceleft	division
+control	keycode   8 = Control_underscore
+    alt	keycode   8 = Meta_seven
+
+	keycode   9 = eight	parenleft	bracketleft
+control	keycode   9 = Delete
+    alt	keycode   9 = Meta_eight
+
+	keycode  10 = nine	parenright	bracketright
+    alt	keycode  10 = Meta_nine
+
+	keycode  11 = zero	equal		braceright
+    alt	keycode  11 = Meta_zero
+
+	keycode  12 = plus	question	plusminus	questiondown
+    alt	keycode  12 = Meta_plus
+
+	keycode  13 = backslash	grave		dead_acute	dead_grave
+control	keycode  13 = Control_backslash
+    alt	keycode  13 = Meta_backslash
+
+	keycode  14 = Delete
+control	keycode  14 = Control_underscore	# For Emacs' UNDO :-)
+    alt	keycode  14 = Meta_Delete
+
+	keycode  15 = Tab
+    alt	keycode  15 = Meta_Tab
+
+	keycode  16 = +q
+	keycode  17 = +w
+
+	keycode  18 = +e	+E		+eacute		+Eacute
+control	keycode  18 = Control_e
+    alt	keycode  18 = Meta_e
+
+	keycode  19 = +r	+R		registered
+control	keycode  19 = Control_r
+    alt	keycode  19 = Meta_r
+
+	keycode  20 = +t	+T		+thorn		+THORN
+control	keycode  20 = Control_t
+    alt	keycode  20 = Meta_t
+
+	keycode  21 = +y	+Y		ydiaeresis	yen
+control	keycode  21 = Control_y
+    alt	keycode  21 = Meta_y
+
+	keycode  22 = +u	+U		+udiaeresis	+Udiaeresis
+control	keycode  22 = Control_u
+    alt	keycode  22 = Meta_u
+
+	keycode  23 = +i	+I		+idiaeresis	+Idiaeresis
+control	keycode  23 = Tab
+    alt	keycode  23 = Meta_i
+
+	keycode  24 = +o	+O		+ograve		+Ograve
+control	keycode  24 = Control_o
+    alt	keycode  24 = Meta_o
+
+	keycode  25 = +p	+P		paragraph
+control	keycode  25 = Control_p
+    alt	keycode  25 = Meta_p
+
+	keycode  26 = +aring	+Aring		braceright	bracketright
+control	keycode  26 = Control_bracketright
+    alt	keycode  26 = Meta_bracketright
+
+	keycode  27 = asciitilde asciicircum	dead_diaeresis	dead_tilde
+control	keycode  27 = Control_asciicircum
+    alt	keycode  27 = Meta_asciicircum
+
+	keycode  28 = Return
+    alt	keycode  28 = Meta_Control_m
+
+	keycode  29 = Control
+
+	keycode  30 = +a	+A		+aacute		+Aacute
+control	keycode  30 = Control_a
+    alt	keycode  30 = Meta_a
+
+	keycode  31 = +s	+S		ssharp
+control	keycode  31 = Control_s
+
+	keycode  32 = +d	+D		+eth		+ETH
+control	keycode  32 = Control_d
+    alt	keycode  32 = Meta_d
+
+	keycode  33 = +f	+F		ordfeminine	ordfeminine
+control	keycode  33 = Control_f
+    alt	keycode  33 = Meta_f
+
+	keycode  34 = +g
+	keycode  35 = +h
+	keycode  36 = +j
+	keycode  37 = +k
+	keycode  38 = +l
+
+	keycode  39 = +oslash	+Ooblique	bar	backslash
+control	keycode  39 = Control_backslash
+    alt	keycode  39 = Meta_backslash
+
+	keycode  40 = +ae	+AE		braceleft	bracketleft
+control	keycode  40 = Escape
+    alt	keycode  40 = Meta_bracketleft
+
+	keycode  41 = bar	section		brokenbar	paragraph
+control	keycode  41 = Control_backslash
+    alt	keycode  41 = Meta_bar
+
+	keycode  42 = Shift
+
+	keycode  43 = apostrophe asterisk	dead_circumflex	multiply
+    alt	keycode  43 = Meta_apostrophe
+
+	keycode  44 = +z
+
+	keycode  45 = +x	+X		multiply
+control	keycode  45 = Control_x
+    alt	keycode  45 = Meta_x
+
+	keycode  46 = +c	+C		ccedilla	copyright
+control	keycode  46 = Control_c
+    alt	keycode  46 = Meta_c
+
+	keycode  47 = +v
+	keycode  48 = +b
+
+	keycode  49 = +n	+N		+ntilde		+Ntilde
+control	keycode  49 = Control_n
+    alt	keycode  49 = Meta_n
+
+	keycode  50 = +m	+M		mu		masculine
+control	keycode  50 = Control_m
+    alt	keycode  50 = Meta_m
+
+	keycode  51 = comma	semicolon	cedilla		guillemotleft
+    alt	keycode  51 = Meta_comma
+
+	keycode  52 = period	colon		periodcentered	guillemotright
+    alt	keycode  52 = Meta_period
+
+	keycode  53 = minus	underscore	hyphen
+control	keycode  53 = Control_underscore
+    alt	keycode  53 = Meta_minus
+
+	keycode  54 = Shift
+	keycode  56 = Alt
+
+	keycode  57 = space	space		nobreakspace	nobreakspace
+control	keycode  57 = nul
+    alt	keycode  57 = Meta_space
+
+	keycode  58 = Caps_Lock
+
+	keycode  86 = less	greater		guillemotleft	guillemotright
+    alt	keycode  86 = Meta_less
+
+	keycode  97 = Control
diff --git a/keymaps/i386/qwerty/no.map b/keymaps/i386/qwerty/no.map
new file mode 100644
index 0000000..b3a9a10
--- /dev/null
+++ b/keymaps/i386/qwerty/no.map
@@ -0,0 +1,81 @@
+keymaps 0-2,4,6,8,12
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal            braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = plus             question
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = backslash        grave            apostrophe
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = braceright       bracketright
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = asciitilde       asciicircum      asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = bar              backslash
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = braceleft        bracketleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = bar
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = apostrophe       asterisk
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/pc110.map b/keymaps/i386/qwerty/pc110.map
new file mode 100644
index 0000000..9f229fd
--- /dev/null
+++ b/keymaps/i386/qwerty/pc110.map
@@ -0,0 +1,18 @@
+# pc110.map
+# Japanese/English keyboard on IBM PC110 Palm Top
+# The strange japanese key next to '1' is mapped to ESC
+# Those on either side of the space bar are mapped to SPACE
+# The one next to the right ALT key doesn't register!
+# The yen symbol is mapped to backslash (for no good reason)
+# 4 Apr 1997 robin@acm.org
+
+include "jp106.map"
+
+keycode  13 = circumflex       underscore
+	control keycode  13 = Control_underscore
+	control shift keycode 13 = Control_underscore
+	alt     keycode  13 = Meta_asciitilde
+
+# Are these keyboards really different?
+# What scancode do these extra keys produce?
+# Info is welcome - aeb@cwi.nl
diff --git a/keymaps/i386/qwerty/pl.map b/keymaps/i386/qwerty/pl.map
new file mode 100644
index 0000000..f2bef46
--- /dev/null
+++ b/keymaps/i386/qwerty/pl.map
@@ -0,0 +1,150 @@
+# From: Rafal Maszkowski <rzm@dain.oso.chalmers.se>
+# Date: Mon, 7 Feb 1994 12:00:39 +0100 (MET)
+#
+# Polish "programmers' keyboard" + paragraph sign AltGr-4, v. 0.92
+# Rafal Maszkowski <rzm@oso.chalmers.se>, <rzm@mat.uni.torun.pl>, 94.02.16
+#
+# Added keymaps line - aeb
+
+charset "iso-8859-2"
+keymaps 0-4,6,8,9,12
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              at               at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             dollar           section
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              asciicircum
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            ampersand        braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             parenright       braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = minus            underscore       backslash
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = equal            plus
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+	Alt   keycode  18 = +eogonek
+	AltGr keycode  18 = +eogonek
+	Alt   Shift keycode  18 = +Eogonek
+	AltGr Shift keycode  18 = +Eogonek
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = i
+keycode  24 = o
+	Alt   keycode  24 = +oacute
+	AltGr keycode  24 = +oacute
+	Alt   Shift keycode  24 = +Oacute
+	AltGr Shift keycode  24 = +Oacute
+keycode  25 = p
+keycode  26 = bracketleft      braceleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = bracketright     braceright       asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a
+	Alt   keycode  30 = +aogonek
+	AltGr keycode  30 = +aogonek
+	Alt   Shift keycode  30 = +Aogonek
+	AltGr Shift keycode  30 = +Aogonek
+keycode  31 = s
+	Alt   keycode  31 = +sacute
+	AltGr keycode  31 = +sacute
+	Alt   Shift keycode  31 = +Sacute
+	AltGr Shift keycode  31 = +Sacute
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+	Alt   keycode  38 = +lstroke
+	AltGr keycode  38 = +lstroke
+	Alt   Shift keycode  38 = +Lstroke
+	AltGr Shift keycode  38 = +Lstroke
+keycode  39 = semicolon        colon
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  44 = z
+	Alt   keycode  44 = +zabovedot
+	AltGr keycode  44 = +zabovedot
+	Alt   Shift keycode  44 = +Zabovedot
+	AltGr Shift keycode  44 = +Zabovedot
+keycode  45 = x
+	Alt   keycode  45 = +zacute
+	AltGr keycode  45 = +zacute
+	Alt   Shift keycode  45 = +Zacute
+	AltGr Shift keycode  45 = +Zacute
+keycode  46 = c
+	Alt   keycode  46 = +cacute
+	AltGr keycode  46 = +cacute
+	Alt   Shift keycode  46 = +Cacute
+	AltGr Shift keycode  46 = +Cacute
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+	Alt   keycode  49 = +nacute
+	AltGr keycode  49 = +nacute
+	Alt   Shift keycode  49 = +Nacute
+	AltGr Shift keycode  49 = +Nacute
+keycode  50 = m
+keycode  51 = comma            less
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           greater
+	alt     keycode  52 = Meta_period
+keycode  53 = slash            question
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/pt-latin1.map b/keymaps/i386/qwerty/pt-latin1.map
new file mode 100644
index 0000000..ace23bf
--- /dev/null
+++ b/keymaps/i386/qwerty/pt-latin1.map
@@ -0,0 +1,73 @@
+# Derived from pt.map by lacyp@unicorn.it.wsu.edu
+# This is good for my `Tatung' keyboard - aeb, 970222.
+#
+# With fixes for keycode 43 from pmmm@camoes.rnl.ist.utl.pt, 980626.
+# With fixes for keycodes 27 and 43 from Francisco Miguel Pedroso Honório Colaço
+# (fcolaco@wolf.fis.uc.pt).
+#
+charset "iso-8859-1"
+keymaps 0-2,4,6,8,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+keycode   4 = three            numbersign       sterling
+	control keycode   4 = Escape
+keycode   5 = four             dollar           section
+	control keycode   5 = Control_backslash
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              ampersand
+	control	keycode   7 = Control_asciicircum
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+keycode  10 = nine             parenright       bracketright
+keycode  11 = zero             equal            braceright
+keycode  12 = apostrophe       question         backslash
+	control keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus
+keycode  13 = guillemotleft    guillemotright
+	alt	keycode  13 = Meta_equal
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = plus             asterisk         dead_diaeresis
+	control keycode  26 = Escape
+	alt	keycode  26 = Meta_bracketleft
+keycode  27 = dead_acute       dead_grave       apostrophe       grave
+	control keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = ccedilla         Ccedilla
+	alt	keycode  39 = Meta_semicolon
+keycode  40 = masculine        ordfeminine
+	control	keycode  40 = Control_g
+	alt	keycode  40 = Meta_apostrophe
+keycode  41 = backslash        bar
+	control	keycode  41 = nul
+	alt	keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = dead_tilde       dead_circumflex   asciitilde  asciicircum
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+keycode  52 = period           colon
+keycode  53 = minus            underscore
+	control	keycode  53 = Delete
+	alt	keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/ru-cp1251.map b/keymaps/i386/qwerty/ru-cp1251.map
new file mode 100644
index 0000000..cbbc8de
--- /dev/null
+++ b/keymaps/i386/qwerty/ru-cp1251.map
@@ -0,0 +1,289 @@
+! Russian CP1251 Cyrillic keyboard.map. "Cyrillic" mode is toggled by
+! Right_Ctrl key and shifted by AltGr key.
+! 4-Mar-98 Andrew Aksyonov andraks@geocities.com
+keymaps 0-4,6,8,10,12
+include "linux-with-alt-and-altgr"
+strings as usual
+
+		keycode	1 =	Escape
+	alt	keycode	1 =	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+	alt	keycode	3 =	Meta_two	
+		keycode	4 =	three	numbersign	three	slash
+	control	keycode	4 =	Escape
+	alt	keycode	4 =	Meta_three
+		keycode	5 =	four	dollar		four	semicolon	
+	control	keycode	5 =	Control_backslash
+	alt	keycode	5 =	Meta_four
+		keycode	6 =	five	percent		five	colon
+	control	keycode	6 =	Control_bracketright
+	alt	keycode	6 =	Meta_five
+		keycode	7 =	six	asciicircum	six	comma
+	control	keycode	7 =	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+		keycode	8 =	seven	ampersand	seven	period
+	control	keycode	8 =	Control_underscore
+	alt	keycode	8 =	Meta_seven
+		keycode	9 =	eight	asterisk	eight	semicolon
+	control	keycode	9 =	Delete	
+	alt	keycode	9 =	Meta_eight
+		keycode	10 =	nine	parenleft	nine	question
+	alt	keycode	10 =	Meta_nine
+		keycode	11 =	zero	parenright	zero	percent
+	alt	keycode	11 =	Meta_zero
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+	alt	keycode	12 =	Meta_minus
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+		keycode	14 =	BackSpace
+	alt	keycode	14 =	Meta_Delete
+		keycode	15 =	Tab
+	alt	keycode	15 =	Meta_Tab	
+		keycode	16 =	+q	+Q		+233	+201
+	control	keycode	16 =	Control_q
+altgr	control	keycode	16 =	Control_q
+		keycode	17 =	+w	+W		+246	+214
+	control	keycode	17 =	Control_w
+altgr	control	keycode	17 =	Control_w
+		keycode	18 =	+e	+E		+243	+211
+	control	keycode	18 =	Control_e
+altgr	control	keycode	18 =	Control_e
+		keycode	19 =	+r	+R		+234	+202
+	control	keycode	19 =	Control_r
+altgr	control	keycode	19 =	Control_r
+		keycode	20 =	+t	+T		+229	+197
+	control	keycode	20 =	Control_t
+altgr	control	keycode	20 =	Control_t
+		keycode	21 =	+y	+Y		+237	+205
+	control	keycode	21 =	Control_y
+altgr	control	keycode	21 =	Control_y
+		keycode	22 =	+u	+U		+227	+195
+	control	keycode	22 =	Control_u
+altgr	control	keycode	22 =	Control_u
+		keycode	23 =	+i	+I		+248	+216
+	control	keycode	23 =	Tab
+altgr	control	keycode	23 =	Tab
+		keycode	24 =	+o	+O		+249	+217
+	control	keycode	24 =	Control_o
+altgr	control	keycode	24 =	Control_o
+		keycode	25 =	+p	+P		+231	+199
+	control	keycode	25 =	Control_p
+altgr	control	keycode	25 =	Control_p
+		keycode	26 =	bracketleft braceleft	+245	+213
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+		keycode	27 =	bracketright braceright	+250	+218
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	Meta_Control_m	
+		keycode	29 =	Control	
+		keycode	30 =	+a	+A		+244	+212
+	control	keycode	30 =	Control_a
+altgr	control	keycode	30 =	Control_a
+		keycode	31 =	+s	+S		+251	+219
+	control	keycode	31 =	Control_s
+altgr	control	keycode	31 =	Control_s
+		keycode	32 =	+d	+D		+226	+194
+	control	keycode	32 =	Control_d
+altgr	control	keycode	32 =	Control_d
+		keycode	33 =	+f	+F		+224	+192
+	control	keycode	33 =	Control_f
+altgr	control	keycode	33 =	Control_f
+		keycode	34 =	+g	+G		+239	+207
+	control	keycode	34 =	Control_g
+altgr	control	keycode	34 =	Control_g
+		keycode	35 =	+h	+H		+240	+208
+	control	keycode	35 =	BackSpace
+altgr	control	keycode	35 =	BackSpace
+		keycode	36 =	+j	+J		+238	+206
+	control	keycode	36 =	Linefeed
+altgr	control	keycode	36 =	Linefeed
+		keycode	37 =	+k	+K		+235	+203
+	control	keycode	37 =	Control_k
+altgr	control	keycode	37 =	Control_k
+		keycode	38 =	+l	+L		+228	+196
+	control	keycode	38 =	Control_l
+altgr	control	keycode	38 =	Control_l
+		keycode	39 =	semicolon colon		+230	+198
+	alt	keycode	39 =	Meta_semicolon
+		keycode	40 =	apostrophe quotedbl	+253	+221
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+		keycode	41 =	grave	asciitilde	parenright parenleft
+	control	keycode	41 =	nul	
+	alt	keycode	41 =	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+		keycode	44 =	+z	+Z		+255	+223
+	control	keycode	44 =	Control_z
+altgr	control	keycode	44 =	Control_z
+		keycode	45 =	+x	+X		+247	+215
+	control	keycode	45 =	Control_x
+altgr	control	keycode	45 =	Control_x
+		keycode	46 =	+c	+C		+241	+209
+	control	keycode	46 =	Control_c
+altgr	control	keycode	46 =	Control_c
+		keycode	47 =	+v	+V		+236	+204
+	control	keycode	47 =	Control_v
+altgr	control	keycode	47 =	Control_v
+		keycode	48 =	+b	+B		+232	+200
+	control	keycode	48 =	Control_b
+altgr	control	keycode	48 =	Control_b
+		keycode	49 =	+n	+N		+242	+210
+	control	keycode	49 =	Control_n
+altgr	control	keycode	49 =	Control_n
+		keycode	50 =	+m	+M		+252	+220
+	control	keycode	50 =	Control_m
+altgr	control	keycode	50 =	Control_m
+		keycode	51 =	comma	less		+225	+193
+	alt	keycode	51 =	Meta_comma
+		keycode	52 =	period	greater		+254	+222
+	alt	keycode	52 =	Meta_period
+		keycode	53 =	slash	question	+191	+161
+	control	keycode	53 =	Delete	
+	alt	keycode	53 =	Meta_slash
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space
+	control	keycode	57 =	nul	
+	alt	keycode	57 =	Meta_space
+		keycode	58 =	Caps_Lock
+		keycode	59 =	F1	F11	F1	F11
+	control	keycode	59 =	F1	
+	alt	keycode	59 =	Console_1
+altgr	alt	keycode	59 =	Console_1
+		keycode	60 =	F2	F12	F2	F12
+	control	keycode	60 =	F2	
+	alt	keycode	60 =	Console_2
+altgr	alt	keycode	60 =	Console_2
+		keycode	61 =	F3	F13	F3	F13
+	control	keycode	61 =	F3	
+	alt	keycode	61 =	Console_3
+altgr	alt	keycode	61 =	Console_3
+		keycode	62 =	F4	F14	F4	F14
+	control	keycode	62 =	F4	
+	alt	keycode	62 =	Console_4
+altgr	alt	keycode	62 =	Console_4
+		keycode	63 =	F5	F15	F5	F15
+	control	keycode	63 =	F5	
+	alt	keycode	63 =	Console_5
+altgr	alt	keycode	63 =	Console_5
+		keycode	64 =	F6	F16	F6	F16
+	control	keycode	64 =	F6	
+	alt	keycode	64 =	Console_6
+altgr	alt	keycode	64 =	Console_6
+		keycode	65 =	F7	F17	F7	F17
+	control	keycode	65 =	F7	
+	alt	keycode	65 =	Console_7
+altgr	alt	keycode	65 =	Console_7
+		keycode	66 =	F8	F18	F8	F18
+	control	keycode	66 =	F8	
+	alt	keycode	66 =	Console_8
+altgr	alt	keycode	66 =	Console_8
+		keycode	67 =	F9	F19	F9	F19
+	control	keycode	67 =	F9	
+	alt	keycode	67 =	Console_9
+altgr	alt	keycode	67 =	Console_9
+		keycode	68 =	F10	F20	F10	F20
+	control	keycode	68 =	F10	
+	alt	keycode	68 =	Console_10
+altgr	alt	keycode	68 =	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+		keycode	87 =	F11	F11	F11	F11
+	control	keycode	87 =	F11	
+	alt	keycode	87 =	Console_11
+altgr	alt	keycode	87 =	Console_11
+		keycode	88 =	F12	F12	F12	F12
+	control	keycode	88 =	F12	
+	alt	keycode	88 =	Console_12
+altgr	alt	keycode	88 =	Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+		keycode	97 =	AltGr_Lock
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+	alt	keycode	99 =	Control_backslash
+		keycode	100 =	AltGr	
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
diff --git a/keymaps/i386/qwerty/ru-ms.map b/keymaps/i386/qwerty/ru-ms.map
new file mode 100644
index 0000000..17bdb6d
--- /dev/null
+++ b/keymaps/i386/qwerty/ru-ms.map
@@ -0,0 +1,417 @@
+# This cyrillic keymap of Dmitry M. Klimoff <dmk@kosnet.ru> based
+# on keymap of Alexey Vovenko <vovenko@ixwin.ihep.su>.
+# Differences between my keymap and keymap of Vovenko:
+#
+# 1. My keymap use Microsoft Cyrillic keyboard layout (exclude russian
+#    symbol No., who not present in KOI8-r codetable);
+# 2. Change layout between US and Cyrillic proceed by pressing
+#    RightCtrl key
+
+strings as usual
+
+		keycode	0 =
+		keycode	1 =	Escape	Escape		Escape	Escape
+	alt	keycode	1 =	Meta_Escape
+altgr	alt     keycode 1 = 	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+altgr	alt     keycode 2 = 	Meta_one
+	shift alt keycode 2 = 	Meta_exclam
+altgr	shift alt keycode 2 = 	Meta_exclam
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+altgr	control keycode 3 = 	nul
+	alt	keycode	3 =	Meta_two	
+altgr	alt     keycode 3 = 	Meta_two
+	shift alt keycode 3 = 	Meta_at
+altgr	shift alt keycode 3 = 	Meta_at
+		keycode 4 = 	three numbersign	three	numbersign
+	control	keycode	4 =	Escape
+altgr	control keycode 4 = 	Escape
+	alt	keycode	4 =	Meta_three
+altgr	alt     keycode 4 = 	Meta_three
+	shift alt keycode 4 =	Meta_numbersign
+altgr	shift alt keycode 4 =	Meta_numbersign
+		keycode	5 =	four	dollar		four	semicolon
+	control	keycode	5 =	Control_backslash
+altgr	control keycode 5 = 	Control_backslash
+	alt	keycode	5 =	Meta_four
+altgr	alt     keycode 5 = 	Meta_four
+	shift alt keycode 5 = 	Meta_dollar
+altgr	shift alt keycode 5 = 	Meta_dollar
+		keycode	6 =	five	percent		five	percent
+	control	keycode	6 =	Control_bracketright
+altgr	control keycode 6 = 	Control_bracketright
+	alt	keycode	6 =	Meta_five
+altgr	alt     keycode 6 = 	Meta_five
+	shift alt keycode 6 = 	Meta_percent
+altgr	shift alt keycode 6 = 	Meta_percent    
+		keycode	7 =	six	asciicircum	six	colon
+	control	keycode	7 =	Control_asciicircum
+altgr	control keycode 7 = 	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+altgr	alt     keycode 7 = 	Meta_six
+	shift alt keycode 7 = 	Meta_asciicircum
+altgr	shift alt keycode 7 = 	Meta_asciicircum
+		keycode	8 =	seven	ampersand	seven	question
+	control	keycode	8 =	Control_underscore
+altgr	control keycode 8 = 	Control_underscore
+	alt	keycode	8 =	Meta_seven
+altgr	alt     keycode 8 = 	Meta_seven
+	shift alt keycode 8 = 	Meta_ampersand
+altgr	shift alt keycode 8 = 	Meta_ampersand
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+altgr	control keycode 9 = 	Delete
+	alt	keycode	9 =	Meta_eight
+altgr	alt     keycode 9 =     Meta_eight
+	shift alt keycode 9 = 	Meta_asterisk
+altgr	shift alt keycode 9 = 	Meta_asterisk
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+altgr	alt     keycode 10 =    Meta_nine
+	shift alt keycode 10 = 	Meta_parenleft
+altgr	shift alt keycode 10 = 	Meta_parenleft
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+altgr	alt     keycode 11 =    Meta_zero
+	shift alt keycode 11 = 	Meta_parenright
+altgr	shift alt keycode 11 = 	Meta_parenright
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+altgr	control keycode 12 =    Control_underscore
+	alt	keycode	12 =	Meta_minus
+altgr	alt     keycode 12 =    Meta_minus
+	shift alt keycode 12 = 	Meta_underscore
+altgr	shift alt keycode 12 = 	Meta_underscore
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+altgr	alt     keycode 13 =    Meta_equal
+	shift alt keycode 13 = 	Meta_plus
+altgr	shift alt keycode 13 = 	Meta_plus
+		keycode 14 = 	BackSpace  BackSpace  BackSpace  BackSpace
+#		keycode 14 = 	Delete  Delete  Delete  Delete
+	alt	keycode	14 =	Meta_Delete
+altgr	alt     keycode 14 = 	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+altgr	alt     keycode 15 = 	Meta_Tab
+		keycode 16 = 	+q	
+altgr		keycode 16 = 	+0xCA
+altgr	shift	keycode 16 = 	+0xEA
+		keycode 17 = 	+w	
+altgr		keycode	17 =	+0xC3
+altgr	shift	keycode 17 =	+0xE3
+		keycode 18 = 	+e
+altgr		keycode 18 = 	+0xD5
+altgr	shift 	keycode 18 = 	+0xF5
+		keycode 19 =	+r
+altgr		keycode 19 = 	+0xCB
+altgr	shift 	keycode 19 = 	+0xEB
+		keycode 20 = 	+t
+altgr		keycode 20 = 	+0xC5
+altgr	shift 	keycode 20 = 	+0xE5
+		keycode 21 = 	+y
+altgr		keycode 21 = 	+0xCE
+altgr	shift 	keycode 21 = 	+0xEE
+		keycode 22 = 	+u
+altgr		keycode 22 = 	+0xC7
+altgr	shift 	keycode 22 = 	+0xE7
+		keycode 23 = 	+i
+altgr		keycode 23 = 	+0xDB
+altgr	shift 	keycode 23 = 	+0xFB
+		keycode 24 = 	+o
+altgr		keycode 24 =	+0xDD
+altgr	shift 	keycode 24 = 	+0xFD
+		keycode 25 = 	+p
+altgr		keycode 25 = 	+0xDA
+altgr	shift 	keycode 25 = 	+0xFA
+		keycode 26 = 	bracketleft     braceleft
+altgr		keycode 26 = 	+0xC8
+altgr	shift	keycode 26 = 	+0xE8
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+altgr	alt     keycode 26 = 	Meta_bracketleft
+		keycode 27 =    bracketright braceright +223 +255
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+altgr	alt     keycode 27 = 	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	0x080d	
+altgr	alt     keycode 28 = 	0x080d
+	control keycode 28 = 	Linefeed
+altgr	control keycode 28 =	Linefeed
+		keycode	29 =	Control	
+		keycode 30 = 	+a
+altgr		keycode 30 = 	+0xC6
+altgr	shift 	keycode 30 = 	+0xE6
+		keycode 31 = 	+s
+altgr		keycode 31 = 	+0xD9
+altgr	shift 	keycode 31 = 	+0xF9
+		keycode 32 =	+d
+altgr		keycode 32 = 	+0xD7
+altgr	shift 	keycode 32 = 	+0xF7
+		keycode 33 = 	+f
+altgr		keycode 33 = 	+0xC1
+altgr	shift 	keycode 33 = 	+0xE1
+		keycode 34 = 	+g
+altgr		keycode 34 = 	+0xD0
+altgr	shift 	keycode 34 = 	+0xF0
+		keycode 35 = 	+h
+altgr		keycode 35 = 	+0xD2
+altgr	shift	keycode 35 = 	+0xF2
+		keycode 36 = 	+j
+altgr		keycode 36 = 	+0xCF
+altgr	shift 	keycode 36 = 	+0xEF
+		keycode 37 = 	+k
+altgr		keycode 37 = 	+0xCC
+altgr	shift 	keycode 37 = 	+0xEC
+		keycode 38 = 	+l
+altgr		keycode 38 = 	+0xC4
+altgr	shift 	keycode 38 = 	+0xE4
+		keycode 39 = 	semicolon        colon
+altgr		keycode 39 = 	+0xD6
+altgr	shift	keycode 39 = 	+0xF6
+	alt	keycode	39 =	Meta_semicolon
+altgr	alt     keycode 39 = 	Meta_semicolon
+		keycode 40 =	apostrophe       quotedbl
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+altgr	alt     keycode 40 = 	Meta_apostrophe
+altgr		keycode 40 = 	+0xDC
+altgr	shift	keycode 40 = 	+0xFC
+		keycode 41 = 	grave asciitilde +163 +179
+	control	keycode	41 =	nul	
+altgr	control keycode 41 =	nul
+	alt	keycode	41 =	Meta_grave
+altgr	alt     keycode 41 = 	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash slash	
+	control	keycode	43 =	Control_backslash
+altgr	control keycode 43 = 	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+altgr	alt     keycode 43 = 	Meta_backslash
+	shift alt keycode 43 = 	Meta_bar
+altgr	shift alt keycode 43 = 	Meta_bar
+		keycode 44 = 	+z
+altgr		keycode 44 = 	+0xD1
+altgr	shift 	keycode 44 = 	+0xF1
+		keycode 45 = 	+x
+altgr		keycode 45 = 	+0xDE
+altgr	shift 	keycode 45 = 	+0xFE
+		keycode 46 = 	+c
+altgr		keycode 46 = 	+0xD3
+altgr	shift 	keycode 46 = 	+0xF3
+		keycode 47 = 	+v
+altgr		keycode 47 = 	+0xCD
+altgr	shift 	keycode 47 = 	+0xED
+		keycode 48 = 	+b
+altgr		keycode 48 = 	+0xC9
+altgr	shift 	keycode 48 = 	+0xE9
+		keycode 49 = 	+n
+altgr		keycode 49 = 	+0xD4
+altgr	shift 	keycode 49 = 	+0xF4
+		keycode 50 = 	+m
+altgr		keycode 50 = 	+0xD8
+altgr	shift 	keycode 50 = 	+0xF8
+		keycode 51 = 	comma            less
+	alt	keycode	51 =	Meta_comma
+altgr	alt     keycode 51 = 	Meta_comma
+	alt shift keycode 51 = 	Meta_less
+altgr	alt shift keycode 51 = 	Meta_less
+altgr		keycode 51 = 	+0xC2
+altgr	shift	keycode 51 = 	+0xE2
+		keycode 52 = 	period            greater
+	alt	keycode	52 =	Meta_period
+altgr	alt     keycode 52 = 	Meta_period
+	alt shift keycode 52 = 	Meta_greater
+altgr	alt shift keycode 52 = 	Meta_greater
+altgr		keycode 52 = 	+0xC0
+altgr	shift	keycode 52 = 	+0xE0
+
+		keycode 53 = 	slash question period comma
+#		+163 +179
+#		keycode 53 = 	slash question +0xA3 +0xB7
+	control	keycode	53 =	Delete
+altgr	control keycode 53 = 	Delete
+	alt	keycode	53 =	Meta_slash
+altgr	alt     keycode 53 = 	Meta_slash
+	shift alt keycode 53 = 	Meta_question
+altgr	shift alt keycode 53 = 	Meta_question
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+altgr	control keycode 57 = 	nul
+	alt	keycode	57 =	Meta_space
+altgr	alt     keycode 57 = 	Meta_space
+		keycode	58 =	Caps_Lock
+			keycode	59 =	F1	F11	F1	F11
+	control		keycode	59 =	F1	
+altgr	control 	keycode 59 = 	F1
+	alt		keycode	59 =	Console_1
+altgr	alt		keycode	59 =	Console_1
+	control	alt     keycode 59 = 	Console_1
+altgr	control	alt     keycode 59 = 	Console_1
+			keycode	60 =	F2	F12	F2	F12
+	control		keycode	60 =	F2	
+altgr	control 	keycode 60 = 	F2
+	alt		keycode	60 =	Console_2
+altgr	alt		keycode	60 =	Console_2
+	control	alt     keycode 60 =	Console_2
+altgr	control	alt     keycode 60 = 	Console_2
+			keycode	61 =	F3	F13	F3	F13
+	control		keycode	61 =	F3	
+altgr	control 	keycode 61 =	F3
+	alt		keycode	61 =	Console_3
+altgr	alt		keycode	61 =	Console_3
+	control	alt     keycode 61 = 	Console_3
+altgr	control	alt     keycode 61 = 	Console_3
+			keycode	62 =	F4	F14	F4	F14
+	control		keycode	62 =	F4	
+	altgr	control keycode 62 = 	F4
+	alt		keycode	62 =	Console_4
+altgr	alt		keycode	62 =	Console_4
+	control	alt     keycode 62 = 	Console_4
+altgr	control	alt     keycode 62 = 	Console_4
+			keycode	63 =	F5	F15	F5	F15
+	control		keycode	63 =	F5	
+altgr	control 	keycode 63 = 	F5
+	alt		keycode	63 =	Console_5
+altgr	alt		keycode	63 =	Console_5
+	control	alt     keycode 63 =	Console_5
+altgr	control	alt     keycode 63 = 	Console_5
+			keycode	64 =	F6	F16	F6	F16
+	control		keycode	64 =	F6	
+altgr	control 	keycode 64 =	F6
+	alt		keycode	64 =	Console_6
+altgr	alt		keycode	64 =	Console_6
+	control	alt     keycode 64 = 	Console_6
+altgr	control	alt     keycode 64 = 	Console_6
+			keycode	65 =	F7	F17	F7	F17
+	control		keycode	65 =	F7	
+altgr	control 	keycode 65 = 	F7
+	alt		keycode	65 =	Console_7
+altgr	alt		keycode	65 =	Console_7
+	control	alt     keycode 65 = 	Console_7
+altgr	control	alt     keycode 65 = 	Console_7
+			keycode	66 =	F8	F18	F8	F18
+	control		keycode	66 =	F8
+altgr	control 	keycode 66 =	F8
+	alt		keycode	66 =	Console_8
+altgr	alt		keycode	66 =	Console_8
+	control	alt     keycode 66 = 	Console_8
+altgr	control	alt     keycode 66 = 	Console_8
+			keycode	67 =	F9	F19	F9	F19
+	control		keycode	67 =	F9	
+altgr	control 	keycode 67 = 	F9
+	alt		keycode	67 =	Console_9
+altgr	alt		keycode	67 =	Console_9
+	control	alt     keycode 67 = 	Console_9
+altgr	control	alt     keycode 67 = 	Console_9
+			keycode	68 =	F10	F20	F10	F20
+	control		keycode	68 =	F10	
+altgr	control 	keycode 68 =	F10
+	alt		keycode	68 =	Console_10
+altgr	alt		keycode	68 =	Console_10
+	control	alt     keycode 68 = 	Console_10
+altgr	control	alt     keycode 68 = 	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+altgr	control keycode 70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+altgr	alt     keycode 70 = 	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+altgr	alt     keycode 71 = 	Ascii_7
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+altgr	alt     keycode 72 = 	Ascii_8
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+altgr	alt     keycode 73 = 	Ascii_9
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+altgr	alt     keycode 75 =	Ascii_4
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+altgr	alt     keycode 76 = 	Ascii_5
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+altgr	alt     keycode 77 = 	Ascii_6
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+altgr	alt     keycode 79 =	Ascii_1
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+altgr	alt     keycode 80 = 	Ascii_2
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+altgr	alt     keycode 81 = 	Ascii_3
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+altgr	alt     keycode 82 = 	Ascii_0
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+altgr	control alt 	keycode  83 = Boot
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+altgr	alt     keycode 86 = 	Meta_less
+			keycode	87 =	F11	F11	F11	F11
+	control		keycode	87 =	F11	
+altgr	control 	keycode 87 = 	F11
+	alt		keycode	87 =	Console_11
+altgr	alt		keycode	87 =	Console_11
+	control	alt     keycode 87 = 	Console_11
+altgr	control	alt     keycode 87 =	Console_11
+			keycode	88 =	F12	F12	F12	F12
+	control		keycode	88 =	F12	
+altgr	control 	keycode 88 = 	F12
+	alt		keycode	88 =	Console_12
+altgr	alt		keycode	88 =	Console_12
+	control	alt     keycode  88 = Console_12
+altgr	control	alt     keycode  88 = Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+		keycode 97 =    AltGr_Lock
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+altgr	control keycode 99 = 	Control_backslash
+	alt	keycode	99 =	Control_backslash
+altgr	alt     keycode 99 = 	Control_backslash
+keycode 100 = AltGr
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+altgr	shift   keycode 104 = 	Scroll_Backward
+		keycode	105 =	Left	
+		keycode	106 =	Right	
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+altgr	shift   keycode 109 = 	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+altgr	control alt keycode 111 = Boot
diff --git a/keymaps/i386/qwerty/ru-yawerty.map b/keymaps/i386/qwerty/ru-yawerty.map
new file mode 100644
index 0000000..f40ec4e
--- /dev/null
+++ b/keymaps/i386/qwerty/ru-yawerty.map
@@ -0,0 +1,414 @@
+#
+# Cyrillic Yawerty map
+#
+# This map is designed to be as close to QWERTY as possible.  In particular,
+# important punctuation characters such as .,;:?'" occupy the same keys as
+# in QWERTY.  The correspondence between latin and cyrillic characters is
+# as in KOI (q=ya, x=soft sign etc.).  `Yu' is on the tilde key, `che' is
+# plus/equal, hard sign is mapped to underscore.  There is no capital hard
+# sign just because it would be much more useless than any of the keys it
+# would have taken.
+#
+# Mode is switched by the right alt key.
+#
+# This map is derived from Alexey Vovenko's ru1.map.
+#
+
+strings as usual
+
+                keycode 0 =
+                keycode 1 =     Escape  Escape          Escape  Escape
+        alt     keycode 1 =     Meta_Escape
+altgr   alt     keycode 1 =     Meta_Escape
+                keycode 2 =     one     exclam          one     exclam
+        alt     keycode 2 =     Meta_one        
+altgr   alt     keycode 2 =     Meta_one
+        shift alt keycode 2 =   Meta_exclam
+altgr   shift alt keycode 2 =   Meta_exclam
+                keycode 3 =     two     at              two     at
+        control keycode 3 =     nul     
+altgr   control keycode 3 =     nul
+        alt     keycode 3 =     Meta_two        
+altgr   alt     keycode 3 =     Meta_two
+        shift alt keycode 3 =   Meta_at
+altgr   shift alt keycode 3 =   Meta_at
+                keycode 4 =     three numbersign        three   0243
+        control keycode 4 =     Escape
+altgr   control keycode 4 =     Escape
+        alt     keycode 4 =     Meta_three
+altgr   alt     keycode 4 =     Meta_three
+        shift alt keycode 4 =   Meta_numbersign
+altgr   shift alt keycode 4 =   Meta_numbersign
+                keycode 5 =     four    dollar          four    0263
+        control keycode 5 =     Control_backslash
+altgr   control keycode 5 =     Control_backslash
+        alt     keycode 5 =     Meta_four
+altgr   alt     keycode 5 =     Meta_four
+        shift alt keycode 5 =   Meta_dollar
+altgr   shift alt keycode 5 =   Meta_dollar
+                keycode 6 =     five    percent         five    percent
+        control keycode 6 =     Control_bracketright
+altgr   control keycode 6 =     Control_bracketright
+        alt     keycode 6 =     Meta_five
+altgr   alt     keycode 6 =     Meta_five
+        shift alt keycode 6 =   Meta_percent
+altgr   shift alt keycode 6 =   Meta_percent    
+                keycode 7 =     six     asciicircum     six     asciicircum
+        control keycode 7 =     Control_asciicircum
+altgr   control keycode 7 =     Control_asciicircum
+        alt     keycode 7 =     Meta_six        
+altgr   alt     keycode 7 =     Meta_six
+        shift alt keycode 7 =   Meta_asciicircum
+altgr   shift alt keycode 7 =   Meta_asciicircum
+                keycode 8 =     seven   ampersand       seven   ampersand
+        control keycode 8 =     Control_underscore
+altgr   control keycode 8 =     Control_underscore
+        alt     keycode 8 =     Meta_seven
+altgr   alt     keycode 8 =     Meta_seven
+        shift alt keycode 8 =   Meta_ampersand
+altgr   shift alt keycode 8 =   Meta_ampersand
+                keycode 9 =     eight   asterisk        eight   asterisk
+        control keycode 9 =     Delete  
+altgr   control keycode 9 =     Delete
+        alt     keycode 9 =     Meta_eight
+altgr   alt     keycode 9 =     Meta_eight
+        shift alt keycode 9 =   Meta_asterisk
+altgr   shift alt keycode 9 =   Meta_asterisk
+                keycode 10 =    nine    parenleft       nine    parenleft
+        alt     keycode 10 =    Meta_nine
+altgr   alt     keycode 10 =    Meta_nine
+        shift alt keycode 10 =  Meta_parenleft
+altgr   shift alt keycode 10 =  Meta_parenleft
+                keycode 11 =    zero    parenright      zero    parenright
+        alt     keycode 11 =    Meta_zero
+altgr   alt     keycode 11 =    Meta_zero
+        shift alt keycode 11 =  Meta_parenright
+altgr   shift alt keycode 11 =  Meta_parenright
+                keycode 12 =    minus   underscore      minus   +0337
+        control keycode 12 =    Control_underscore
+altgr   control keycode 12 =    Control_underscore
+        alt     keycode 12 =    Meta_minus
+altgr   alt     keycode 12 =    Meta_minus
+        shift alt keycode 12 =  Meta_underscore
+altgr   shift alt keycode 12 =  Meta_underscore
+                keycode 13 =    equal   plus            +0336   +0376
+        alt     keycode 13 =    Meta_equal
+altgr   alt     keycode 13 =    Meta_equal
+        shift alt keycode 13 =  Meta_plus
+altgr   shift alt keycode 13 =  Meta_plus
+                keycode 14 =    Delete  Delete          Delete  Delete
+        alt     keycode 14 =    Meta_Delete
+altgr   alt     keycode 14 =    Meta_Delete
+                keycode 15 =    Tab     Tab             Tab     Tab     
+        alt     keycode 15 =    Meta_Tab        
+altgr   alt     keycode 15 =    Meta_Tab
+                keycode 16 =    +q      
+altgr           keycode 16 =    +0321
+altgr   shift   keycode 16 =    +0361
+                keycode 17 =    +w      
+altgr           keycode 17 =    +0327
+altgr   shift   keycode 17 =    +0367
+                keycode 18 =    +e
+altgr           keycode 18 =    +0305
+altgr   shift   keycode 18 =    +0345
+                keycode 19 =    +r
+altgr           keycode 19 =    +0322
+altgr   shift   keycode 19 =    +0362
+                keycode 20 =    +t
+altgr           keycode 20 =    +0324
+altgr   shift   keycode 20 =    +0364
+                keycode 21 =    +y
+altgr           keycode 21 =    +0331
+altgr   shift   keycode 21 =    +0371
+                keycode 22 =    +u
+altgr           keycode 22 =    +0325
+altgr   shift   keycode 22 =    +0365
+                keycode 23 =    +i
+altgr           keycode 23 =    +0311
+altgr   shift   keycode 23 =    +0351
+                keycode 24 =    +o
+altgr           keycode 24 =    +0317
+altgr   shift   keycode 24 =    +0357
+                keycode 25 =    +p
+altgr           keycode 25 =    +0320
+altgr   shift   keycode 25 =    +0360
+                keycode 26 =    bracketleft     braceleft
+altgr           keycode 26 =    +0333
+altgr   shift   keycode 26 =    +0373
+        control keycode 26 =    Escape  
+altgr   control keycode 26 =    Escape  
+        alt     keycode 26 =    Meta_bracketleft
+altgr   alt     keycode 26 =    Meta_bracketleft
+                keycode 27 =    bracketright    braceright
+altgr           keycode 27 =    +0335
+altgr   shift   keycode 27 =    +0375 
+        control keycode 27 =    Control_bracketright
+altgr   control keycode 27 =    Control_bracketright
+        alt     keycode 27 =    Meta_bracketright
+altgr   alt     keycode 27 =    Meta_bracketright
+                keycode 28 =    Return  
+        alt     keycode 28 =    0x080d  
+altgr   alt     keycode 28 =    0x080d
+        control keycode 28 =    Linefeed
+altgr   control keycode 28 =    Linefeed
+                keycode 29 =    Control 
+                keycode 30 =    +a
+altgr           keycode 30 =    +0301
+altgr   shift   keycode 30 =    +0341
+                keycode 31 =    +s
+altgr           keycode 31 =    +0323
+altgr   shift   keycode 31 =    +0363
+                keycode 32 =    +d
+altgr           keycode 32 =    +0304
+altgr   shift   keycode 32 =    +0344
+                keycode 33 =    +f
+altgr           keycode 33 =    +0306
+altgr   shift   keycode 33 =    +0346
+                keycode 34 =    +g
+altgr           keycode 34 =    +0307
+altgr   shift   keycode 34 =    +0347
+                keycode 35 =    +h
+altgr           keycode 35 =    +0310
+altgr   shift   keycode 35 =    +0350
+                keycode 36 =    +j
+altgr           keycode 36 =    +0312
+altgr   shift   keycode 36 =    +0352
+                keycode 37 =    +k
+altgr           keycode 37 =    +0313
+altgr   shift   keycode 37 =    +0353
+                keycode 38 =    +l
+altgr           keycode 38 =    +0314
+altgr   shift   keycode 38 =    +0354
+                keycode 39 =    semicolon        colon  semicolon       colon
+        alt     keycode 39 =    Meta_semicolon
+altgr   alt     keycode 39 =    Meta_semicolon
+                keycode 40 =    apostrophe       quotedbl  apostrophe  quotedbl
+        control keycode 40 =    Control_g
+altgr   control keycode 40 =    Control_g
+        alt     keycode 40 =    Meta_apostrophe
+altgr   alt     keycode 40 =    Meta_apostrophe
+                keycode 41 =    grave asciitilde        +0300   +0340
+        control keycode 41 =    nul     
+altgr   control keycode 41 =    nul
+        alt     keycode 41 =    Meta_grave
+altgr   alt     keycode 41 =    Meta_grave
+                keycode 42 =    Shift   
+                keycode 43 =    backslash bar           +0334   +0374
+        control keycode 43 =    Control_backslash
+altgr   control keycode 43 =    Control_backslash
+        alt     keycode 43 =    Meta_backslash
+altgr   alt     keycode 43 =    Meta_backslash
+        shift alt keycode 43 =  Meta_bar
+altgr   shift alt keycode 43 =  Meta_bar
+                keycode 44 =    +z
+altgr           keycode 44 =    +0332
+altgr   shift   keycode 44 =    +0372
+                keycode 45 =    +x
+altgr           keycode 45 =    +0330
+altgr   shift   keycode 45 =    +0370
+                keycode 46 =    +c
+altgr           keycode 46 =    +0303
+altgr   shift   keycode 46 =    +0343
+                keycode 47 =    +v
+altgr           keycode 47 =    +0326
+altgr   shift   keycode 47 =    +0366
+                keycode 48 =    +b
+altgr           keycode 48 =    +0302
+altgr   shift   keycode 48 =    +0342
+                keycode 49 =    +n
+altgr           keycode 49 =    +0316
+altgr   shift   keycode 49 =    +0356
+                keycode 50 =    +m
+altgr           keycode 50 =    +0315
+altgr   shift   keycode 50 =    +0355
+                keycode 51 =    comma            less   comma   less
+        alt     keycode 51 =    Meta_comma
+altgr   alt     keycode 51 =    Meta_comma
+        alt shift keycode 51 =  Meta_less
+altgr   alt shift keycode 51 =  Meta_less
+                keycode 52 =    period        greater   period  greater
+        alt     keycode 52 =    Meta_period
+altgr   alt     keycode 52 =    Meta_period
+        alt shift keycode 52 =  Meta_greater
+altgr   alt shift keycode 52 =  Meta_greater
+                keycode 53 =    slash question slash question
+        control keycode 53 =    Delete  
+altgr   control keycode 53 =    Delete
+        alt     keycode 53 =    Meta_slash
+altgr   alt     keycode 53 =    Meta_slash
+        shift alt keycode 53 =  Meta_question
+altgr   shift alt keycode 53 =  Meta_question
+                keycode 54 =    Shift
+                keycode 55 =    KP_Multiply
+                keycode 56 =    Alt     
+                keycode 57 =    space   space           space   space   
+        control keycode 57 =    nul     
+altgr   control keycode 57 =    nul
+        alt     keycode 57 =    Meta_space
+altgr   alt     keycode 57 =    Meta_space
+                keycode 58 =    Caps_Lock
+                        keycode 59 =    F1      F11     F1      F11
+        control         keycode 59 =    F1      
+altgr   control         keycode 59 =    F1
+        alt             keycode 59 =    Console_1
+altgr   alt             keycode 59 =    Console_1
+        control alt     keycode 59 =    Console_1
+altgr   control alt     keycode 59 =    Console_1
+                        keycode 60 =    F2      F12     F2      F12
+        control         keycode 60 =    F2      
+altgr   control         keycode 60 =    F2
+        alt             keycode 60 =    Console_2
+altgr   alt             keycode 60 =    Console_2
+        control alt     keycode 60 =    Console_2
+altgr   control alt     keycode 60 =    Console_2
+                        keycode 61 =    F3      F13     F3      F13
+        control         keycode 61 =    F3      
+altgr   control         keycode 61 =    F3
+        alt             keycode 61 =    Console_3
+altgr   alt             keycode 61 =    Console_3
+        control alt     keycode 61 =    Console_3
+altgr   control alt     keycode 61 =    Console_3
+                        keycode 62 =    F4      F14     F4      F14
+        control         keycode 62 =    F4      
+        altgr   control keycode 62 =    F4
+        alt             keycode 62 =    Console_4
+altgr   alt             keycode 62 =    Console_4
+        control alt     keycode 62 =    Console_4
+altgr   control alt     keycode 62 =    Console_4
+                        keycode 63 =    F5      F15     F5      F15
+        control         keycode 63 =    F5      
+altgr   control         keycode 63 =    F5
+        alt             keycode 63 =    Console_5
+altgr   alt             keycode 63 =    Console_5
+        control alt     keycode 63 =    Console_5
+altgr   control alt     keycode 63 =    Console_5
+                        keycode 64 =    F6      F16     F6      F16
+        control         keycode 64 =    F6      
+altgr   control         keycode 64 =    F6
+        alt             keycode 64 =    Console_6
+altgr   alt             keycode 64 =    Console_6
+        control alt     keycode 64 =    Console_6
+altgr   control alt     keycode 64 =    Console_6
+                        keycode 65 =    F7      F17     F7      F17
+        control         keycode 65 =    F7      
+altgr   control         keycode 65 =    F7
+        alt             keycode 65 =    Console_7
+altgr   alt             keycode 65 =    Console_7
+        control alt     keycode 65 =    Console_7
+altgr   control alt     keycode 65 =    Console_7
+                        keycode 66 =    F8      F18     F8      F18
+        control         keycode 66 =    F8
+altgr   control         keycode 66 =    F8
+        alt             keycode 66 =    Console_8
+altgr   alt             keycode 66 =    Console_8
+        control alt     keycode 66 =    Console_8
+altgr   control alt     keycode 66 =    Console_8
+                        keycode 67 =    F9      F19     F9      F19
+        control         keycode 67 =    F9      
+altgr   control         keycode 67 =    F9
+        alt             keycode 67 =    Console_9
+altgr   alt             keycode 67 =    Console_9
+        control alt     keycode 67 =    Console_9
+altgr   control alt     keycode 67 =    Console_9
+                        keycode 68 =    F10     F20     F10     F20
+        control         keycode 68 =    F10     
+altgr   control         keycode 68 =    F10
+        alt             keycode 68 =    Console_10
+altgr   alt             keycode 68 =    Console_10
+        control alt     keycode 68 =    Console_10
+altgr   control alt     keycode 68 =    Console_10
+                keycode 69 =    Num_Lock        
+                keycode 70 =    Scroll_Lock     Show_Memory     Show_Registers
+        control keycode 70 =    Show_State
+altgr   control keycode 70 =    Show_State
+        alt     keycode 70 =    Scroll_Lock
+altgr   alt     keycode 70 =    Scroll_Lock
+                keycode 71 =    KP_7    
+        alt     keycode 71 =    Ascii_7 
+altgr   alt     keycode 71 =    Ascii_7
+                keycode 72 =    KP_8    
+        alt     keycode 72 =    Ascii_8 
+altgr   alt     keycode 72 =    Ascii_8
+                keycode 73 =    KP_9    
+        alt     keycode 73 =    Ascii_9 
+altgr   alt     keycode 73 =    Ascii_9
+                keycode 74 =    KP_Subtract
+                keycode 75 =    KP_4    
+        alt     keycode 75 =    Ascii_4 
+altgr   alt     keycode 75 =    Ascii_4
+                keycode 76 =    KP_5    
+        alt     keycode 76 =    Ascii_5 
+altgr   alt     keycode 76 =    Ascii_5
+                keycode 77 =    KP_6    
+        alt     keycode 77 =    Ascii_6 
+altgr   alt     keycode 77 =    Ascii_6
+                keycode 78 =    KP_Add  
+                keycode 79 =    KP_1    
+        alt     keycode 79 =    Ascii_1 
+altgr   alt     keycode 79 =    Ascii_1
+                keycode 80 =    KP_2    
+        alt     keycode 80 =    Ascii_2 
+altgr   alt     keycode 80 =    Ascii_2
+                keycode 81 =    KP_3    
+        alt     keycode 81 =    Ascii_3 
+altgr   alt     keycode 81 =    Ascii_3
+                keycode 82 =    KP_0    
+        alt     keycode 82 =    Ascii_0 
+altgr   alt     keycode 82 =    Ascii_0
+                keycode 83 =    KP_Period
+altgr   control keycode 83 =    Boot    
+control alt     keycode 83 =    Boot    
+altgr   control alt     keycode  83 = Boot
+                keycode 84 =    Last_Console
+                keycode 85 =
+                keycode 86 =    Shift
+                        keycode 87 =    F11     F11     F11     F11
+        control         keycode 87 =    F11     
+altgr   control         keycode 87 =    F11
+        alt             keycode 87 =    Console_11
+altgr   alt             keycode 87 =    Console_11
+        control alt     keycode 87 =    Console_11
+altgr   control alt     keycode 87 =    Console_11
+                        keycode 88 =    F12     F12     F12     F12
+        control         keycode 88 =    F12     
+altgr   control         keycode 88 =    F12
+        alt             keycode 88 =    Console_12
+altgr   alt             keycode 88 =    Console_12
+        control alt     keycode  88 = Console_12
+altgr   control alt     keycode  88 = Console_12
+                keycode 89 =
+                keycode 90 =
+                keycode 91 =
+                keycode 92 =
+                keycode 93 =
+                keycode 94 =
+                keycode 95 =
+                keycode 96 =    KP_Enter        
+keycode  97 = Control
+                keycode 98 =    KP_Divide
+                keycode 99 =    Control_backslash
+        control keycode 99 =    Control_backslash
+altgr   control keycode 99 =    Control_backslash
+        alt     keycode 99 =    Control_backslash
+altgr   alt     keycode 99 =    Control_backslash
+keycode 100 = AltGr_Lock
+                keycode 101 =   Break   
+                keycode 102 =   Find    
+                keycode 103 =   Up      
+                keycode 104 =   Prior   
+        shift   keycode 104 =   Scroll_Backward
+altgr   shift   keycode 104 =   Scroll_Backward
+                keycode 105 =   Left    
+        alt     keycode 105 =   Decr_Console
+                keycode 106 =   Right
+        alt     keycode 106 =   Incr_Console
+                keycode 107 =   Select  
+                keycode 108 =   Down    
+                keycode 109 =   Next    
+        shift   keycode 109 =   Scroll_Forward
+altgr   shift   keycode 109 =   Scroll_Forward
+                keycode 110 =   Insert  
+                keycode 111 =   Remove  
+altgr   control keycode 111 =   Boot    
+control alt     keycode 111 =   Boot    
+altgr   control alt keycode 111 = Boot
diff --git a/keymaps/i386/qwerty/ru.map b/keymaps/i386/qwerty/ru.map
new file mode 100644
index 0000000..80e4290
--- /dev/null
+++ b/keymaps/i386/qwerty/ru.map
@@ -0,0 +1,287 @@
+! Russian Cyrillic keyboard.map. "Cyrillic" mode is toggled by
+! Right_Ctrl key and shifted by AltGr key.
+keymaps 0-4,6,8,10,12
+strings as usual
+
+		keycode	1 =	Escape	Escape		Escape	Escape
+	alt	keycode	1 =	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+	alt	keycode	3 =	Meta_two	
+		keycode	4 =	three	numbersign	three	question
+	control	keycode	4 =	Escape
+	alt	keycode	4 =	Meta_three
+		keycode	5 =	four	dollar		four	semicolon	
+	control	keycode	5 =	Control_backslash
+	alt	keycode	5 =	Meta_four
+		keycode	6 =	five	percent		five	colon
+	control	keycode	6 =	Control_bracketright
+	alt	keycode	6 =	Meta_five
+		keycode	7 =	six	asciicircum	six	comma
+	control	keycode	7 =	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+		keycode	8 =	seven	ampersand	seven	period
+	control	keycode	8 =	Control_underscore
+	alt	keycode	8 =	Meta_seven
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+	alt	keycode	9 =	Meta_eight
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+	alt	keycode	12 =	Meta_minus
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+		keycode	14 =	BackSpace BackSpace	BackSpace BackSpace
+	alt	keycode	14 =	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+		keycode	16 =	+q	+Q		+202	+234
+	control	keycode	16 =	Control_q
+altgr	control	keycode	16 =	Control_q
+		keycode	17 =	+w	+W		+195	+227
+	control	keycode	17 =	Control_w
+altgr	control	keycode	17 =	Control_w
+		keycode	18 =	+e	+E		+213	+245
+	control	keycode	18 =	Control_e
+altgr	control	keycode	18 =	Control_e
+		keycode	19 =	+r	+R		+203	+235
+	control	keycode	19 =	Control_r
+altgr	control	keycode	19 =	Control_r
+		keycode	20 =	+t	+T		+197	+229
+	control	keycode	20 =	Control_t
+altgr	control	keycode	20 =	Control_t
+		keycode	21 =	+y	+Y		+206	+238
+	control	keycode	21 =	Control_y
+altgr	control	keycode	21 =	Control_y
+		keycode	22 =	+u	+U		+199	+231
+	control	keycode	22 =	Control_u
+altgr	control	keycode	22 =	Control_u
+		keycode	23 =	+i	+I		+219	+251
+	control	keycode	23 =	Tab
+altgr	control	keycode	23 =	Tab
+		keycode	24 =	+o	+O		+221	+253
+	control	keycode	24 =	Control_o
+altgr	control	keycode	24 =	Control_o
+		keycode	25 =	+p	+P		+218	+250
+	control	keycode	25 =	Control_p
+altgr	control	keycode	25 =	Control_p
+		keycode	26 =	bracketleft braceleft	+200	+232
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+		keycode	27 =	bracketright braceright	bracketleft bracketright
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	Meta_Control_m	
+		keycode	29 =	Control	
+		keycode	30 =	+a	+A		+198	+230
+	control	keycode	30 =	Control_a
+altgr	control	keycode	30 =	Control_a
+		keycode	31 =	+s	+S		+217	+249
+	control	keycode	31 =	Control_s
+altgr	control	keycode	31 =	Control_s
+		keycode	32 =	+d	+D		+215	+247
+	control	keycode	32 =	Control_d
+altgr	control	keycode	32 =	Control_d
+		keycode	33 =	+f	+F		+193	+225
+	control	keycode	33 =	Control_f
+altgr	control	keycode	33 =	Control_f
+		keycode	34 =	+g	+G		+208	+240
+	control	keycode	34 =	Control_g
+altgr	control	keycode	34 =	Control_g
+		keycode	35 =	+h	+H		+210	+242
+	control	keycode	35 =	BackSpace
+altgr	control	keycode	35 =	BackSpace
+		keycode	36 =	+j	+J		+207	+239
+	control	keycode	36 =	Linefeed
+altgr	control	keycode	36 =	Linefeed
+		keycode	37 =	+k	+K		+204	+236
+	control	keycode	37 =	Control_k
+altgr	control	keycode	37 =	Control_k
+		keycode	38 =	+l	+L		+196	+228
+	control	keycode	38 =	Control_l
+altgr	control	keycode	38 =	Control_l
+		keycode	39 =	semicolon colon		+214	+246
+	alt	keycode	39 =	Meta_semicolon
+		keycode	40 =	apostrophe quotedbl	+220	+252
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+		keycode	41 =	grave	asciitilde	+223	+255
+	control	keycode	41 =	nul	
+	alt	keycode	41 =	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+		keycode	44 =	+z	+Z		+209	+241
+	control	keycode	44 =	Control_z
+altgr	control	keycode	44 =	Control_z
+		keycode	45 =	+x	+X		+222	+254
+	control	keycode	45 =	Control_x
+altgr	control	keycode	45 =	Control_x
+		keycode	46 =	+c	+C		+211	+243
+	control	keycode	46 =	Control_c
+altgr	control	keycode	46 =	Control_c
+		keycode	47 =	+v	+V		+205	+237
+	control	keycode	47 =	Control_v
+altgr	control	keycode	47 =	Control_v
+		keycode	48 =	+b	+B		+201	+233
+	control	keycode	48 =	Control_b
+altgr	control	keycode	48 =	Control_b
+		keycode	49 =	+n	+N		+212	+244
+	control	keycode	49 =	Control_n
+altgr	control	keycode	49 =	Control_n
+		keycode	50 =	+m	+M		+216	+248
+	control	keycode	50 =	Control_m
+altgr	control	keycode	50 =	Control_m
+		keycode	51 =	comma	less		+194	+226
+	alt	keycode	51 =	Meta_comma
+		keycode	52 =	period	greater		+192	+224
+	alt	keycode	52 =	Meta_period
+		keycode	53 =	slash	question	+163	+179
+	control	keycode	53 =	Delete	
+	alt	keycode	53 =	Meta_slash
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+	alt	keycode	57 =	Meta_space
+		keycode	58 =	Caps_Lock
+		keycode	59 =	F1	F11	F1	F11
+	control	keycode	59 =	F1	
+	alt	keycode	59 =	Console_1
+altgr	alt	keycode	59 =	Console_1
+		keycode	60 =	F2	F12	F2	F12
+	control	keycode	60 =	F2	
+	alt	keycode	60 =	Console_2
+altgr	alt	keycode	60 =	Console_2
+		keycode	61 =	F3	F13	F3	F13
+	control	keycode	61 =	F3	
+	alt	keycode	61 =	Console_3
+altgr	alt	keycode	61 =	Console_3
+		keycode	62 =	F4	F14	F4	F14
+	control	keycode	62 =	F4	
+	alt	keycode	62 =	Console_4
+altgr	alt	keycode	62 =	Console_4
+		keycode	63 =	F5	F15	F5	F15
+	control	keycode	63 =	F5	
+	alt	keycode	63 =	Console_5
+altgr	alt	keycode	63 =	Console_5
+		keycode	64 =	F6	F16	F6	F16
+	control	keycode	64 =	F6	
+	alt	keycode	64 =	Console_6
+altgr	alt	keycode	64 =	Console_6
+		keycode	65 =	F7	F17	F7	F17
+	control	keycode	65 =	F7	
+	alt	keycode	65 =	Console_7
+altgr	alt	keycode	65 =	Console_7
+		keycode	66 =	F8	F18	F8	F18
+	control	keycode	66 =	F8	
+	alt	keycode	66 =	Console_8
+altgr	alt	keycode	66 =	Console_8
+		keycode	67 =	F9	F19	F9	F19
+	control	keycode	67 =	F9	
+	alt	keycode	67 =	Console_9
+altgr	alt	keycode	67 =	Console_9
+		keycode	68 =	F10	F20	F10	F20
+	control	keycode	68 =	F10	
+	alt	keycode	68 =	Console_10
+altgr	alt	keycode	68 =	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+		keycode	87 =	F11	F11	F11	F11
+	control	keycode	87 =	F11	
+	alt	keycode	87 =	Console_11
+altgr	alt	keycode	87 =	Console_11
+		keycode	88 =	F12	F12	F12	F12
+	control	keycode	88 =	F12	
+	alt	keycode	88 =	Console_12
+altgr	alt	keycode	88 =	Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+		keycode	97 =	AltGr_Lock
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+	alt	keycode	99 =	Control_backslash
+		keycode	100 =	AltGr	
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
diff --git a/keymaps/i386/qwerty/ru1.map b/keymaps/i386/qwerty/ru1.map
new file mode 100644
index 0000000..4aa69fe
--- /dev/null
+++ b/keymaps/i386/qwerty/ru1.map
@@ -0,0 +1,446 @@
+# Here is the more or less complete list of differences between my keymap
+# (ru1.map) and Eugene Crosser's (ru.map):
+#
+# 1. The Backspace key sends \127 code in my version and ^H in Crosser's.
+# 2. Control-Enter sends ^J code vs. ^M
+# 3. Cyrillic Lock is Right-Alt vs Right-Ctrl.
+# 4. There is no letters "yo" (e with dots, \163 and \179)
+#    as they do not always survive in translations from KOI to ALT codings
+#    and are never used in book publishing anyway.
+# 5. Shift-3 is still # in this map, not that crazy ?.
+# 6. ` and ~ are on their usual place in cyrillic mode. There is no hard
+#    signs in my map. BTW, big hard sign has a code \255 and causes
+#    a lot of trouble. It crashes a lot of editors.
+# 7. This keymap has more key definitions for key combinations useful in
+#    emacs Alt-Shift-something, for example.
+#
+# Alexey Vovenko <vovenko@ixwin.ihep.su>.
+strings as usual
+
+		keycode	1 =	Escape
+	alt	keycode	1 =	Meta_Escape
+altgr	alt     keycode 1 = 	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+altgr	alt     keycode 2 = 	Meta_one
+	shift alt keycode 2 = 	Meta_exclam
+altgr	shift alt keycode 2 = 	Meta_exclam
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+altgr	control keycode 3 = 	nul
+	alt	keycode	3 =	Meta_two	
+altgr	alt     keycode 3 = 	Meta_two
+	shift alt keycode 3 = 	Meta_at
+altgr	shift alt keycode 3 = 	Meta_at
+		keycode 4 = 	three numbersign	three	numbersign
+	control	keycode	4 =	Escape
+altgr	control keycode 4 = 	Escape
+	alt	keycode	4 =	Meta_three
+altgr	alt     keycode 4 = 	Meta_three
+	shift alt keycode 4 =	Meta_numbersign
+altgr	shift alt keycode 4 =	Meta_numbersign
+		keycode	5 =	four	dollar		four	semicolon
+	control	keycode	5 =	Control_backslash
+altgr	control keycode 5 = 	Control_backslash
+	alt	keycode	5 =	Meta_four
+altgr	alt     keycode 5 = 	Meta_four
+	shift alt keycode 5 = 	Meta_dollar
+altgr	shift alt keycode 5 = 	Meta_dollar
+		keycode	6 =	five	percent		five	colon
+	control	keycode	6 =	Control_bracketright
+altgr	control keycode 6 = 	Control_bracketright
+	alt	keycode	6 =	Meta_five
+altgr	alt     keycode 6 = 	Meta_five
+	shift alt keycode 6 = 	Meta_percent
+altgr	shift alt keycode 6 = 	Meta_percent
+		keycode	7 =	six	asciicircum	six	comma
+	control	keycode	7 =	Control_asciicircum
+altgr	control keycode 7 = 	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+altgr	alt     keycode 7 = 	Meta_six
+	shift alt keycode 7 = 	Meta_asciicircum
+altgr	shift alt keycode 7 = 	Meta_asciicircum
+		keycode	8 =	seven	ampersand	seven	period
+	control	keycode	8 =	Control_underscore
+altgr	control keycode 8 = 	Control_underscore
+	alt	keycode	8 =	Meta_seven
+altgr	alt     keycode 8 = 	Meta_seven
+	shift alt keycode 8 = 	Meta_ampersand
+altgr	shift alt keycode 8 = 	Meta_ampersand
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+altgr	control keycode 9 = 	Delete
+	alt	keycode	9 =	Meta_eight
+altgr	alt     keycode 9 =     Meta_eight
+	shift alt keycode 9 = 	Meta_asterisk
+altgr	shift alt keycode 9 = 	Meta_asterisk
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+altgr	alt     keycode 10 =    Meta_nine
+	shift alt keycode 10 = 	Meta_parenleft
+altgr	shift alt keycode 10 = 	Meta_parenleft
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+altgr	alt     keycode 11 =    Meta_zero
+	shift alt keycode 11 = 	Meta_parenright
+altgr	shift alt keycode 11 = 	Meta_parenright
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+altgr	control keycode 12 =    Control_underscore
+	alt	keycode	12 =	Meta_minus
+altgr	alt     keycode 12 =    Meta_minus
+	shift alt keycode 12 = 	Meta_underscore
+altgr	shift alt keycode 12 = 	Meta_underscore
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+altgr	alt     keycode 13 =    Meta_equal
+	shift alt keycode 13 = 	Meta_plus
+altgr	shift alt keycode 13 = 	Meta_plus
+		keycode 14 = 	Delete  Delete  	Delete  Delete
+	alt	keycode	14 =	Meta_Delete
+altgr	alt     keycode 14 = 	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+altgr	alt     keycode 15 = 	Meta_Tab
+		keycode 16 = 	+q	
+altgr		keycode 16 = 	+0xCA
+altgr	shift	keycode 16 = 	+0xEA
+		keycode 17 = 	+w	
+altgr		keycode	17 =	+0xC3
+altgr	shift	keycode 17 =	+0xE3
+		keycode 18 = 	+e
+altgr		keycode 18 = 	+0xD5
+altgr	shift 	keycode 18 = 	+0xF5
+		keycode 19 =	+r
+altgr		keycode 19 = 	+0xCB
+altgr	shift 	keycode 19 = 	+0xEB
+		keycode 20 = 	+t
+altgr		keycode 20 = 	+0xC5
+altgr	shift 	keycode 20 = 	+0xE5
+		keycode 21 = 	+y
+altgr		keycode 21 = 	+0xCE
+altgr	shift 	keycode 21 = 	+0xEE
+		keycode 22 = 	+u
+altgr		keycode 22 = 	+0xC7
+altgr	shift 	keycode 22 = 	+0xE7
+		keycode 23 = 	+i
+altgr		keycode 23 = 	+0xDB
+altgr	shift 	keycode 23 = 	+0xFB
+		keycode 24 = 	+o
+altgr		keycode 24 =	+0xDD
+altgr	shift 	keycode 24 = 	+0xFD
+		keycode 25 = 	+p
+altgr		keycode 25 = 	+0xDA
+altgr	shift 	keycode 25 = 	+0xFA
+		keycode 26 = 	bracketleft     braceleft
+altgr		keycode 26 = 	+0xC8
+altgr	shift	keycode 26 = 	+0xE8
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+altgr	alt     keycode 26 = 	Meta_bracketleft
+		keycode 27 =  bracketright braceright bracketleft bracketright
+
+# The keycode "0xFF" is too dangerous for many programs (including emacs).
+# So let it be bracket instead of Hard Sign.
+# altgr		keycode 27 = 	+0xDF
+# altgr	shift 	keycode 27 = 	+0xFF
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+altgr	alt     keycode 27 = 	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	Meta_Control_m	
+altgr	alt     keycode 28 = 	Meta_Control_m
+	control keycode 28 = 	Linefeed
+altgr	control keycode 28 =	Linefeed
+		keycode	29 =	Control	
+		keycode 30 = 	+a
+altgr		keycode 30 = 	+0xC6
+altgr	shift 	keycode 30 = 	+0xE6
+		keycode 31 = 	+s
+altgr		keycode 31 = 	+0xD9
+altgr	shift 	keycode 31 = 	+0xF9
+		keycode 32 =	+d
+altgr		keycode 32 = 	+0xD7
+altgr	shift 	keycode 32 = 	+0xF7
+		keycode 33 = 	+f
+altgr		keycode 33 = 	+0xC1
+altgr	shift 	keycode 33 = 	+0xE1
+		keycode 34 = 	+g
+altgr		keycode 34 = 	+0xD0
+altgr	shift 	keycode 34 = 	+0xF0
+		keycode 35 = 	+h
+altgr		keycode 35 = 	+0xD2
+altgr	shift	keycode 35 = 	+0xF2
+		keycode 36 = 	+j
+altgr		keycode 36 = 	+0xCF
+altgr	shift 	keycode 36 = 	+0xEF
+		keycode 37 = 	+k
+altgr		keycode 37 = 	+0xCC
+altgr	shift 	keycode 37 = 	+0xEC
+		keycode 38 = 	+l
+altgr		keycode 38 = 	+0xC4
+altgr	shift 	keycode 38 = 	+0xE4
+		keycode 39 = 	semicolon        colon
+altgr		keycode 39 = 	+0xD6
+altgr	shift	keycode 39 = 	+0xF6
+	alt	keycode	39 =	Meta_semicolon
+altgr	alt     keycode 39 = 	Meta_semicolon
+		keycode 40 =	apostrophe       quotedbl
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+altgr	alt     keycode 40 = 	Meta_apostrophe
+altgr		keycode 40 = 	+0xDC
+altgr	shift	keycode 40 = 	+0xFC
+		keycode 41 = 	grave asciitilde grave asciitilde
+	control	keycode	41 =	nul	
+altgr	control keycode 41 =	nul
+	alt	keycode	41 =	Meta_grave
+altgr	alt     keycode 41 = 	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+altgr	control keycode 43 = 	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+altgr	alt     keycode 43 = 	Meta_backslash
+	shift alt keycode 43 = 	Meta_bar
+altgr	shift alt keycode 43 = 	Meta_bar
+		keycode 44 = 	+z
+altgr		keycode 44 = 	+0xD1
+altgr	shift 	keycode 44 = 	+0xF1
+		keycode 45 = 	+x
+altgr		keycode 45 = 	+0xDE
+altgr	shift 	keycode 45 = 	+0xFE
+		keycode 46 = 	+c
+altgr		keycode 46 = 	+0xD3
+altgr	shift 	keycode 46 = 	+0xF3
+		keycode 47 = 	+v
+altgr		keycode 47 = 	+0xCD
+altgr	shift 	keycode 47 = 	+0xED
+		keycode 48 = 	+b
+altgr		keycode 48 = 	+0xC9
+altgr	shift 	keycode 48 = 	+0xE9
+		keycode 49 = 	+n
+altgr		keycode 49 = 	+0xD4
+altgr	shift 	keycode 49 = 	+0xF4
+		keycode 50 = 	+m
+altgr		keycode 50 = 	+0xD8
+altgr	shift 	keycode 50 = 	+0xF8
+		keycode 51 = 	comma            less
+	alt	keycode	51 =	Meta_comma
+altgr	alt     keycode 51 = 	Meta_comma
+	alt shift keycode 51 = 	Meta_less
+altgr	alt shift keycode 51 = 	Meta_less
+altgr		keycode 51 = 	+0xC2
+altgr	shift	keycode 51 = 	+0xE2
+		keycode 52 = 	period            greater
+	alt	keycode	52 =	Meta_period
+altgr	alt     keycode 52 = 	Meta_period
+	alt shift keycode 52 = 	Meta_greater
+altgr	alt shift keycode 52 = 	Meta_greater
+altgr		keycode 52 = 	+0xC0
+altgr	shift	keycode 52 = 	+0xE0
+
+# Can you survive without "yuo" letter? If no put +163 and +179 for
+# altgr keycode 53.
+		keycode 53 = 	slash question slash question
+	control	keycode	53 =	Delete	
+altgr	control keycode 53 = 	Delete
+	alt	keycode	53 =	Meta_slash
+altgr	alt     keycode 53 = 	Meta_slash
+	shift alt keycode 53 = 	Meta_question
+altgr	shift alt keycode 53 = 	Meta_question
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space
+	control	keycode	57 =	nul	
+altgr	control keycode 57 = 	nul
+	alt	keycode	57 =	Meta_space
+altgr	alt     keycode 57 = 	Meta_space
+		keycode	58 =	Caps_Lock
+			keycode	59 =	F1	F11	F1	F11
+	control		keycode	59 =	F1	
+altgr	control 	keycode 59 = 	F1
+	alt		keycode	59 =	Console_1
+altgr	alt		keycode	59 =	Console_1
+	control	alt     keycode 59 = 	Console_1
+altgr	control	alt     keycode 59 = 	Console_1
+			keycode	60 =	F2	F12	F2	F12
+	control		keycode	60 =	F2	
+altgr	control 	keycode 60 = 	F2
+	alt		keycode	60 =	Console_2
+altgr	alt		keycode	60 =	Console_2
+	control	alt     keycode 60 =	Console_2
+altgr	control	alt     keycode 60 = 	Console_2
+			keycode	61 =	F3	F13	F3	F13
+	control		keycode	61 =	F3	
+altgr	control 	keycode 61 =	F3
+	alt		keycode	61 =	Console_3
+altgr	alt		keycode	61 =	Console_3
+	control	alt     keycode 61 = 	Console_3
+altgr	control	alt     keycode 61 = 	Console_3
+			keycode	62 =	F4	F14	F4	F14
+	control		keycode	62 =	F4	
+	altgr	control keycode 62 = 	F4
+	alt		keycode	62 =	Console_4
+altgr	alt		keycode	62 =	Console_4
+	control	alt     keycode 62 = 	Console_4
+altgr	control	alt     keycode 62 = 	Console_4
+			keycode	63 =	F5	F15	F5	F15
+	control		keycode	63 =	F5	
+altgr	control 	keycode 63 = 	F5
+	alt		keycode	63 =	Console_5
+altgr	alt		keycode	63 =	Console_5
+	control	alt     keycode 63 =	Console_5
+altgr	control	alt     keycode 63 = 	Console_5
+			keycode	64 =	F6	F16	F6	F16
+	control		keycode	64 =	F6	
+altgr	control 	keycode 64 =	F6
+	alt		keycode	64 =	Console_6
+altgr	alt		keycode	64 =	Console_6
+	control	alt     keycode 64 = 	Console_6
+altgr	control	alt     keycode 64 = 	Console_6
+			keycode	65 =	F7	F17	F7	F17
+	control		keycode	65 =	F7	
+altgr	control 	keycode 65 = 	F7
+	alt		keycode	65 =	Console_7
+altgr	alt		keycode	65 =	Console_7
+	control	alt     keycode 65 = 	Console_7
+altgr	control	alt     keycode 65 = 	Console_7
+			keycode	66 =	F8	F18	F8	F18
+	control		keycode	66 =	F8
+altgr	control 	keycode 66 =	F8
+	alt		keycode	66 =	Console_8
+altgr	alt		keycode	66 =	Console_8
+	control	alt     keycode 66 = 	Console_8
+altgr	control	alt     keycode 66 = 	Console_8
+			keycode	67 =	F9	F19	F9	F19
+	control		keycode	67 =	F9	
+altgr	control 	keycode 67 = 	F9
+	alt		keycode	67 =	Console_9
+altgr	alt		keycode	67 =	Console_9
+	control	alt     keycode 67 = 	Console_9
+altgr	control	alt     keycode 67 = 	Console_9
+			keycode	68 =	F10	F20	F10	F20
+	control		keycode	68 =	F10	
+altgr	control 	keycode 68 =	F10
+	alt		keycode	68 =	Console_10
+altgr	alt		keycode	68 =	Console_10
+	control	alt     keycode 68 = 	Console_10
+altgr	control	alt     keycode 68 = 	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+altgr	control keycode 70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+altgr	alt     keycode 70 = 	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+altgr	alt     keycode 71 = 	Ascii_7
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+altgr	alt     keycode 72 = 	Ascii_8
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+altgr	alt     keycode 73 = 	Ascii_9
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+altgr	alt     keycode 75 =	Ascii_4
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+altgr	alt     keycode 76 = 	Ascii_5
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+altgr	alt     keycode 77 = 	Ascii_6
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+altgr	alt     keycode 79 =	Ascii_1
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+altgr	alt     keycode 80 = 	Ascii_2
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+altgr	alt     keycode 81 = 	Ascii_3
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+altgr	alt     keycode 82 = 	Ascii_0
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+altgr	control alt 	keycode  83 = Boot
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+altgr	alt     keycode 86 = 	Meta_less
+			keycode	87 =	F11	F11	F11	F11
+	control		keycode	87 =	F11	
+altgr	control 	keycode 87 = 	F11
+	alt		keycode	87 =	Console_11
+altgr	alt		keycode	87 =	Console_11
+	control	alt     keycode 87 = 	Console_11
+altgr	control	alt     keycode 87 =	Console_11
+			keycode	88 =	F12	F12	F12	F12
+	control		keycode	88 =	F12	
+altgr	control 	keycode 88 = 	F12
+	alt		keycode	88 =	Console_12
+altgr	alt		keycode	88 =	Console_12
+	control	alt     keycode  88 = Console_12
+altgr	control	alt     keycode  88 = Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+keycode  97 = Control
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+altgr	control keycode 99 = 	Control_backslash
+	alt	keycode	99 =	Control_backslash
+altgr	alt     keycode 99 = 	Control_backslash
+keycode 100 = AltGr_Lock
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+altgr	shift   keycode 104 = 	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+altgr	shift   keycode 109 = 	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+altgr	control alt keycode 111 = Boot
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
diff --git a/keymaps/i386/qwerty/ru2.map b/keymaps/i386/qwerty/ru2.map
new file mode 100644
index 0000000..45b04f2
--- /dev/null
+++ b/keymaps/i386/qwerty/ru2.map
@@ -0,0 +1,296 @@
+! Date: Tue, 7 Jun 1994 10:06:20 +1000 (EST)
+! From: Alexandre Krioutchkov <A.Kriouctchkov@st.nepean.uws.edu.au>
+!
+! ru.map and ru1.map are keyboard maps for KOI-8 (sometimes called
+! main coding). Most of the people, who used Russian in MS-DOS,
+! work with an alternative coding. I'm not sure, but it seems to me
+! in WordPerfect 5.1 Russian, Ukrainian, Byelorussian language extension
+! it's code page 899. (Note: there is also another coding for MS-Windows).
+! Fonts for Russian alternative coding you can find in Cyr_a8x{8,14,16}.
+!
+! Russian Alternative Cyrillic keyboard.map. "Cyrillic" mode is toggled by
+! Right Alt key. 18-Apr-94 Alexandre Krioutchkov alexk@st.nepean.uws.edu.au
+strings as usual
+
+		keycode	1 =	Escape
+	alt	keycode	1 =	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+	alt	keycode	3 =	Meta_two	
+		keycode	4 =	three	numbersign	three	question
+	control	keycode	4 =	Escape
+	alt	keycode	4 =	Meta_three
+		keycode	5 =	four	dollar		four	semicolon	
+	control	keycode	5 =	Control_backslash
+	alt	keycode	5 =	Meta_four
+		keycode	6 =	five	percent		five	colon
+	control	keycode	6 =	Control_bracketright
+	alt	keycode	6 =	Meta_five
+		keycode	7 =	six	asciicircum	six	comma
+	control	keycode	7 =	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+		keycode	8 =	seven	ampersand	seven	period
+	control	keycode	8 =	Control_underscore
+	alt	keycode	8 =	Meta_seven
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+	alt	keycode	9 =	Meta_eight
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+	alt	keycode	12 =	Meta_minus
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+		keycode	14 =	BackSpace BackSpace	BackSpace BackSpace
+	alt	keycode	14 =	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+		keycode	16 =	+q	+Q		+169	+137
+	control	keycode	16 =	Control_q
+altgr	control	keycode	16 =	Control_q
+		keycode	17 =	+w	+W		+230	+150
+	control	keycode	17 =	Control_w
+altgr	control	keycode	17 =	Control_w
+		keycode	18 =	+e	+E		+227	+147
+	control	keycode	18 =	Control_e
+altgr	control	keycode	18 =	Control_e
+		keycode	19 =	+r	+R		+170	+138
+	control	keycode	19 =	Control_r
+altgr	control	keycode	19 =	Control_r
+		keycode	20 =	+t	+T		+165	+133
+	control	keycode	20 =	Control_t
+altgr	control	keycode	20 =	Control_t
+		keycode	21 =	+y	+Y		+173	+141
+	control	keycode	21 =	Control_y
+altgr	control	keycode	21 =	Control_y
+		keycode	22 =	+u	+U		+163	+131
+	control	keycode	22 =	Control_u
+altgr	control	keycode	22 =	Control_u
+		keycode	23 =	+i	+I		+232	+152
+	control	keycode	23 =	Tab
+altgr	control	keycode	23 =	Tab
+		keycode	24 =	+o	+O		+233	+153
+	control	keycode	24 =	Control_o
+altgr	control	keycode	24 =	Control_o
+		keycode	25 =	+p	+P		+167	+135
+	control	keycode	25 =	Control_p
+altgr	control	keycode	25 =	Control_p
+		keycode	26 =	bracketleft braceleft	+229	+149
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+		keycode	27 =	bracketright braceright	bracketleft bracketright
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	Meta_Control_m	
+		keycode	29 =	Control	
+		keycode	30 =	+a	+A		+228	+148
+	control	keycode	30 =	Control_a
+altgr	control	keycode	30 =	Control_a
+		keycode	31 =	+s	+S		+235	+155
+	control	keycode	31 =	Control_s
+altgr	control	keycode	31 =	Control_s
+		keycode	32 =	+d	+D		+162	+130
+	control	keycode	32 =	Control_d
+altgr	control	keycode	32 =	Control_d
+		keycode	33 =	+f	+F		+160	+128
+	control	keycode	33 =	Control_f
+altgr	control	keycode	33 =	Control_f
+		keycode	34 =	+g	+G		+175	+143
+	control	keycode	34 =	Control_g
+altgr	control	keycode	34 =	Control_g
+		keycode	35 =	+h	+H		+224	+144
+	control	keycode	35 =	BackSpace
+altgr	control	keycode	35 =	BackSpace
+		keycode	36 =	+j	+J		+174	+142
+	control	keycode	36 =	Linefeed
+altgr	control	keycode	36 =	Linefeed
+		keycode	37 =	+k	+K		+171	+139
+	control	keycode	37 =	Control_k
+altgr	control	keycode	37 =	Control_k
+		keycode	38 =	+l	+L		+164	+132
+	control	keycode	38 =	Control_l
+altgr	control	keycode	38 =	Control_l
+		keycode	39 =	semicolon colon		+166	+134
+	alt	keycode	39 =	Meta_semicolon
+		keycode	40 =	apostrophe quotedbl	+237	+157
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+		keycode	41 =	grave	asciitilde	+234	+154
+	control	keycode	41 =	nul	
+	alt	keycode	41 =	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+		keycode	44 =	+z	+Z		+239	+159
+	control	keycode	44 =	Control_z
+altgr	control	keycode	44 =	Control_z
+		keycode	45 =	+x	+X		+231	+151
+	control	keycode	45 =	Control_x
+altgr	control	keycode	45 =	Control_x
+		keycode	46 =	+c	+C		+225	+145
+	control	keycode	46 =	Control_c
+altgr	control	keycode	46 =	Control_c
+		keycode	47 =	+v	+V		+172	+140
+	control	keycode	47 =	Control_v
+altgr	control	keycode	47 =	Control_v
+		keycode	48 =	+b	+B		+168	+136
+	control	keycode	48 =	Control_b
+altgr	control	keycode	48 =	Control_b
+		keycode	49 =	+n	+N		+226	+146
+	control	keycode	49 =	Control_n
+altgr	control	keycode	49 =	Control_n
+		keycode	50 =	+m	+M		+236	+156
+	control	keycode	50 =	Control_m
+altgr	control	keycode	50 =	Control_m
+		keycode	51 =	comma	less		+161	+129
+	alt	keycode	51 =	Meta_comma
+		keycode	52 =	period	greater		+238	+158
+	alt	keycode	52 =	Meta_period
+		keycode	53 =	slash	question	slash	question !+163	+179
+	control	keycode	53 =	Delete	
+	alt	keycode	53 =	Meta_slash
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+	alt	keycode	57 =	Meta_space
+		keycode	58 =	Caps_Lock
+		keycode	59 =	F1	F11	F1	F11
+	control	keycode	59 =	F1	
+	alt	keycode	59 =	Console_1
+altgr	alt	keycode	59 =	Console_1
+		keycode	60 =	F2	F12	F2	F12
+	control	keycode	60 =	F2	
+	alt	keycode	60 =	Console_2
+altgr	alt	keycode	60 =	Console_2
+		keycode	61 =	F3	F13	F3	F13
+	control	keycode	61 =	F3	
+	alt	keycode	61 =	Console_3
+altgr	alt	keycode	61 =	Console_3
+		keycode	62 =	F4	F14	F4	F14
+	control	keycode	62 =	F4	
+	alt	keycode	62 =	Console_4
+altgr	alt	keycode	62 =	Console_4
+		keycode	63 =	F5	F15	F5	F15
+	control	keycode	63 =	F5	
+	alt	keycode	63 =	Console_5
+altgr	alt	keycode	63 =	Console_5
+		keycode	64 =	F6	F16	F6	F16
+	control	keycode	64 =	F6	
+	alt	keycode	64 =	Console_6
+altgr	alt	keycode	64 =	Console_6
+		keycode	65 =	F7	F17	F7	F17
+	control	keycode	65 =	F7	
+	alt	keycode	65 =	Console_7
+altgr	alt	keycode	65 =	Console_7
+		keycode	66 =	F8	F18	F8	F18
+	control	keycode	66 =	F8	
+	alt	keycode	66 =	Console_8
+altgr	alt	keycode	66 =	Console_8
+		keycode	67 =	F9	F19	F9	F19
+	control	keycode	67 =	F9	
+	alt	keycode	67 =	Console_9
+altgr	alt	keycode	67 =	Console_9
+		keycode	68 =	F10	F20	F10	F20
+	control	keycode	68 =	F10	
+	alt	keycode	68 =	Console_10
+altgr	alt	keycode	68 =	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+		keycode	87 =	F11	F11	F11	F11
+	control	keycode	87 =	F11	
+	alt	keycode	87 =	Console_11
+altgr	alt	keycode	87 =	Console_11
+		keycode	88 =	F12	F12	F12	F12
+	control	keycode	88 =	F12	
+	alt	keycode	88 =	Console_12
+altgr	alt	keycode	88 =	Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+		keycode	97 =	Control
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+	alt	keycode	99 =	Control_backslash
+		keycode	100 =	AltGr_Lock	
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
diff --git a/keymaps/i386/qwerty/ru3.map b/keymaps/i386/qwerty/ru3.map
new file mode 100644
index 0000000..263936b
--- /dev/null
+++ b/keymaps/i386/qwerty/ru3.map
@@ -0,0 +1,473 @@
+# ru3.map is a Russian keymap for a 102 key keyboard, prepared by 
+# IPLabs Linux Team (www.iplabs.ru/Linux   and  www.logic.ru)
+# from (ru1.map) by Eugene Crosser's (ru.map):
+# by Alexey Vovenko <vovenko@ixwin.ihep.su>.
+# 
+# CapsLock is used to change rus/lat, while Shift+CapsLock is used to 
+# lock capitals.
+
+		keycode	0 =
+		keycode	1 =	Escape	Escape		Escape	Escape
+	alt	keycode	1 =	Meta_Escape
+altgr	alt     keycode 1 = 	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+altgr	alt     keycode 2 = 	Meta_one
+	shift alt keycode 2 = 	Meta_exclam
+altgr	shift alt keycode 2 = 	Meta_exclam
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+altgr	control keycode 3 = 	nul
+	alt	keycode	3 =	Meta_two	
+altgr	alt     keycode 3 = 	Meta_two
+	shift alt keycode 3 = 	Meta_at
+altgr	shift alt keycode 3 = 	Meta_at
+		keycode 4 = 	three numbersign	three	numbersign
+	control	keycode	4 =	Escape
+altgr	control keycode 4 = 	Escape
+	alt	keycode	4 =	Meta_three
+altgr	alt     keycode 4 = 	Meta_three
+	shift alt keycode 4 =	Meta_numbersign
+altgr	shift alt keycode 4 =	Meta_numbersign
+		keycode	5 =	four	dollar		four	semicolon
+	control	keycode	5 =	Control_backslash
+altgr	control keycode 5 = 	Control_backslash
+	alt	keycode	5 =	Meta_four
+altgr	alt     keycode 5 = 	Meta_four
+	shift alt keycode 5 = 	Meta_dollar
+altgr	shift alt keycode 5 = 	Meta_dollar
+		keycode	6 =	five	percent		five	colon
+	control	keycode	6 =	Control_bracketright
+altgr	control keycode 6 = 	Control_bracketright
+	alt	keycode	6 =	Meta_five
+altgr	alt     keycode 6 = 	Meta_five
+	shift alt keycode 6 = 	Meta_percent
+altgr	shift alt keycode 6 = 	Meta_percent    
+		keycode	7 =	six	asciicircum	six	comma
+	control	keycode	7 =	Control_asciicircum
+altgr	control keycode 7 = 	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+altgr	alt     keycode 7 = 	Meta_six
+	shift alt keycode 7 = 	Meta_asciicircum
+altgr	shift alt keycode 7 = 	Meta_asciicircum
+		keycode	8 =	seven	ampersand	seven	period
+	control	keycode	8 =	Control_underscore
+altgr	control keycode 8 = 	Control_underscore
+	alt	keycode	8 =	Meta_seven
+altgr	alt     keycode 8 = 	Meta_seven
+	shift alt keycode 8 = 	Meta_ampersand
+altgr	shift alt keycode 8 = 	Meta_ampersand
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+altgr	control keycode 9 = 	Delete
+	alt	keycode	9 =	Meta_eight
+altgr	alt     keycode 9 =     Meta_eight
+	shift alt keycode 9 = 	Meta_asterisk
+altgr	shift alt keycode 9 = 	Meta_asterisk
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+altgr	alt     keycode 10 =    Meta_nine
+	shift alt keycode 10 = 	Meta_parenleft
+altgr	shift alt keycode 10 = 	Meta_parenleft
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+altgr	alt     keycode 11 =    Meta_zero
+	shift alt keycode 11 = 	Meta_parenright
+altgr	shift alt keycode 11 = 	Meta_parenright
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+altgr	control keycode 12 =    Control_underscore
+	alt	keycode	12 =	Meta_minus
+altgr	alt     keycode 12 =    Meta_minus
+	shift alt keycode 12 = 	Meta_underscore
+altgr	shift alt keycode 12 = 	Meta_underscore
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+altgr	alt     keycode 13 =    Meta_equal
+	shift alt keycode 13 = 	Meta_plus
+altgr	shift alt keycode 13 = 	Meta_plus
+		keycode 14 = 	Delete  Delete  	Delete  Delete
+	alt	keycode	14 =	Meta_Delete
+altgr	alt     keycode 14 = 	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+altgr	alt     keycode 15 = 	Meta_Tab
+		keycode 16 = 	+q	
+altgr		keycode 16 = 	+0xCA
+altgr	shift	keycode 16 = 	+0xEA
+		keycode 17 = 	+w	
+altgr		keycode	17 =	+0xC3
+altgr	shift	keycode 17 =	+0xE3
+		keycode 18 = 	+e
+altgr		keycode 18 = 	+0xD5
+altgr	shift 	keycode 18 = 	+0xF5
+		keycode 19 =	+r
+altgr		keycode 19 = 	+0xCB
+altgr	shift 	keycode 19 = 	+0xEB
+		keycode 20 = 	+t
+altgr		keycode 20 = 	+0xC5
+altgr	shift 	keycode 20 = 	+0xE5
+		keycode 21 = 	+y
+altgr		keycode 21 = 	+0xCE
+altgr	shift 	keycode 21 = 	+0xEE
+		keycode 22 = 	+u
+altgr		keycode 22 = 	+0xC7
+altgr	shift 	keycode 22 = 	+0xE7
+		keycode 23 = 	+i
+altgr		keycode 23 = 	+0xDB
+altgr	shift 	keycode 23 = 	+0xFB
+		keycode 24 = 	+o
+altgr		keycode 24 =	+0xDD
+altgr	shift 	keycode 24 = 	+0xFD
+		keycode 25 = 	+p
+altgr		keycode 25 = 	+0xDA
+altgr	shift 	keycode 25 = 	+0xFA
+		keycode 26 = 	bracketleft     braceleft
+altgr		keycode 26 = 	+0xC8
+altgr	shift	keycode 26 = 	+0xE8
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+altgr	alt     keycode 26 = 	Meta_bracketleft
+		keycode 27 =  bracketright braceright bracketleft bracketright
+
+# The keycode "0xFF" is too dangerous for many programs (including emacs).
+# So let it be bracket instead of Hard Sign.
+altgr		keycode 27 = 	+0xDF
+altgr	shift 	keycode 27 = 	+0xFF 
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+altgr	alt     keycode 27 = 	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	0x080d	
+altgr	alt     keycode 28 = 	0x080d
+	control keycode 28 = 	Linefeed
+altgr	control keycode 28 =	Linefeed
+		keycode	29 =	Control	
+		keycode 30 = 	+a
+altgr		keycode 30 = 	+0xC6
+altgr	shift 	keycode 30 = 	+0xE6
+		keycode 31 = 	+s
+altgr		keycode 31 = 	+0xD9
+altgr	shift 	keycode 31 = 	+0xF9
+		keycode 32 =	+d
+altgr		keycode 32 = 	+0xD7
+altgr	shift 	keycode 32 = 	+0xF7
+		keycode 33 = 	+f
+altgr		keycode 33 = 	+0xC1
+altgr	shift 	keycode 33 = 	+0xE1
+		keycode 34 = 	+g
+altgr		keycode 34 = 	+0xD0
+altgr	shift 	keycode 34 = 	+0xF0
+		keycode 35 = 	+h
+altgr		keycode 35 = 	+0xD2
+altgr	shift	keycode 35 = 	+0xF2
+		keycode 36 = 	+j
+altgr		keycode 36 = 	+0xCF
+altgr	shift 	keycode 36 = 	+0xEF
+		keycode 37 = 	+k
+altgr		keycode 37 = 	+0xCC
+altgr	shift 	keycode 37 = 	+0xEC
+		keycode 38 = 	+l
+altgr		keycode 38 = 	+0xC4
+altgr	shift 	keycode 38 = 	+0xE4
+		keycode 39 = 	semicolon        colon
+altgr		keycode 39 = 	+0xD6
+altgr	shift	keycode 39 = 	+0xF6
+	alt	keycode	39 =	Meta_semicolon
+altgr	alt     keycode 39 = 	Meta_semicolon
+		keycode 40 =	apostrophe       quotedbl
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+altgr	alt     keycode 40 = 	Meta_apostrophe
+altgr		keycode 40 = 	+0xDC
+altgr	shift	keycode 40 = 	+0xFC
+		keycode 41 = 	grave asciitilde grave asciitilde
+	control	keycode	41 =	nul	
+altgr	control keycode 41 =	nul
+	alt	keycode	41 =	Meta_grave
+altgr	alt     keycode 41 = 	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+altgr	control keycode 43 = 	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+altgr	alt     keycode 43 = 	Meta_backslash
+	shift alt keycode 43 = 	Meta_bar
+altgr	shift alt keycode 43 = 	Meta_bar
+		keycode 44 = 	+z
+altgr		keycode 44 = 	+0xD1
+altgr	shift 	keycode 44 = 	+0xF1
+		keycode 45 = 	+x
+altgr		keycode 45 = 	+0xDE
+altgr	shift 	keycode 45 = 	+0xFE
+		keycode 46 = 	+c
+altgr		keycode 46 = 	+0xD3
+altgr	shift 	keycode 46 = 	+0xF3
+		keycode 47 = 	+v
+altgr		keycode 47 = 	+0xCD
+altgr	shift 	keycode 47 = 	+0xED
+		keycode 48 = 	+b
+altgr		keycode 48 = 	+0xC9
+altgr	shift 	keycode 48 = 	+0xE9
+		keycode 49 = 	+n
+altgr		keycode 49 = 	+0xD4
+altgr	shift 	keycode 49 = 	+0xF4
+		keycode 50 = 	+m
+altgr		keycode 50 = 	+0xD8
+altgr	shift 	keycode 50 = 	+0xF8
+		keycode 51 = 	comma            less
+	alt	keycode	51 =	Meta_comma
+altgr	alt     keycode 51 = 	Meta_comma
+	alt shift keycode 51 = 	Meta_less
+altgr	alt shift keycode 51 = 	Meta_less
+altgr		keycode 51 = 	+0xC2
+altgr	shift	keycode 51 = 	+0xE2
+		keycode 52 = 	period            greater
+	alt	keycode	52 =	Meta_period
+altgr	alt     keycode 52 = 	Meta_period
+	alt shift keycode 52 = 	Meta_greater
+altgr	alt shift keycode 52 = 	Meta_greater
+altgr		keycode 52 = 	+0xC0
+altgr	shift	keycode 52 = 	+0xE0
+
+# Can you survive without "yuo" letter? If no put +163 and +179 for 
+# altgr keycode 53.
+		keycode 53 = 	slash question slash question
+altgr		keycode 53 =	+163
+altgr	shift	keycode 53 =	+179
+	control	keycode	53 =	Delete	
+altgr	control keycode 53 = 	Delete
+	alt	keycode	53 =	Meta_slash
+altgr	alt     keycode 53 = 	Meta_slash
+	shift alt keycode 53 = 	Meta_question
+altgr	shift alt keycode 53 = 	Meta_question
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+altgr	control keycode 57 = 	nul
+	alt	keycode	57 =	Meta_space
+altgr	alt     keycode 57 = 	Meta_space
+keycode	58 =AltGr_Lock
+	shift	keycode 58 =	Caps_Lock
+altgr	shift  	keycode 58 =	Caps_Lock
+			keycode	59 =	F1	F11	F1	F11
+	control		keycode	59 =	F1	
+altgr	control 	keycode 59 = 	F1
+	alt		keycode	59 =	Console_1
+altgr	alt		keycode	59 =	Console_1
+	control	alt     keycode 59 = 	Console_1
+altgr	control	alt     keycode 59 = 	Console_1
+			keycode	60 =	F2	F12	F2	F12
+	control		keycode	60 =	F2	
+altgr	control 	keycode 60 = 	F2
+	alt		keycode	60 =	Console_2
+altgr	alt		keycode	60 =	Console_2
+	control	alt     keycode 60 =	Console_2
+altgr	control	alt     keycode 60 = 	Console_2
+			keycode	61 =	F3	F13	F3	F13
+	control		keycode	61 =	F3	
+altgr	control 	keycode 61 =	F3
+	alt		keycode	61 =	Console_3
+altgr	alt		keycode	61 =	Console_3
+	control	alt     keycode 61 = 	Console_3
+altgr	control	alt     keycode 61 = 	Console_3
+			keycode	62 =	F4	F14	F4	F14
+	control		keycode	62 =	F4	
+	altgr	control keycode 62 = 	F4
+	alt		keycode	62 =	Console_4
+altgr	alt		keycode	62 =	Console_4
+	control	alt     keycode 62 = 	Console_4
+altgr	control	alt     keycode 62 = 	Console_4
+			keycode	63 =	F5	F15	F5	F15
+	control		keycode	63 =	F5	
+altgr	control 	keycode 63 = 	F5
+	alt		keycode	63 =	Console_5
+altgr	alt		keycode	63 =	Console_5
+	control	alt     keycode 63 =	Console_5
+altgr	control	alt     keycode 63 = 	Console_5
+			keycode	64 =	F6	F16	F6	F16
+	control		keycode	64 =	F6	
+altgr	control 	keycode 64 =	F6
+	alt		keycode	64 =	Console_6
+altgr	alt		keycode	64 =	Console_6
+	control	alt     keycode 64 = 	Console_6
+altgr	control	alt     keycode 64 = 	Console_6
+			keycode	65 =	F7	F17	F7	F17
+	control		keycode	65 =	F7	
+altgr	control 	keycode 65 = 	F7
+	alt		keycode	65 =	Console_7
+altgr	alt		keycode	65 =	Console_7
+	control	alt     keycode 65 = 	Console_7
+altgr	control	alt     keycode 65 = 	Console_7
+			keycode	66 =	F8	F18	F8	F18
+	control		keycode	66 =	F8
+altgr	control 	keycode 66 =	F8
+	alt		keycode	66 =	Console_8
+altgr	alt		keycode	66 =	Console_8
+	control	alt     keycode 66 = 	Console_8
+altgr	control	alt     keycode 66 = 	Console_8
+			keycode	67 =	F9	F19	F9	F19
+	control		keycode	67 =	F9	
+altgr	control 	keycode 67 = 	F9
+	alt		keycode	67 =	Console_9
+altgr	alt		keycode	67 =	Console_9
+	control	alt     keycode 67 = 	Console_9
+altgr	control	alt     keycode 67 = 	Console_9
+			keycode	68 =	F10	F20	F10	F20
+	control		keycode	68 =	F10	
+altgr	control 	keycode 68 =	F10
+	alt		keycode	68 =	Console_10
+altgr	alt		keycode	68 =	Console_10
+	control	alt     keycode 68 = 	Console_10
+altgr	control	alt     keycode 68 = 	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+altgr	control keycode 70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+altgr	alt     keycode 70 = 	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+altgr	alt     keycode 71 = 	Ascii_7
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+altgr	alt     keycode 72 = 	Ascii_8
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+altgr	alt     keycode 73 = 	Ascii_9
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+altgr	alt     keycode 75 =	Ascii_4
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+altgr	alt     keycode 76 = 	Ascii_5
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+altgr	alt     keycode 77 = 	Ascii_6
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+altgr	alt     keycode 79 =	Ascii_1
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+altgr	alt     keycode 80 = 	Ascii_2
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+altgr	alt     keycode 81 = 	Ascii_3
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+altgr	alt     keycode 82 = 	Ascii_0
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+altgr	control alt 	keycode  83 = Boot
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+altgr	alt     keycode 86 = 	Meta_less
+			keycode	87 =	F11	F11	F11	F11
+	control		keycode	87 =	F11	
+altgr	control 	keycode 87 = 	F11
+	alt		keycode	87 =	Console_11
+altgr	alt		keycode	87 =	Console_11
+	control	alt     keycode 87 = 	Console_11
+altgr	control	alt     keycode 87 =	Console_11
+			keycode	88 =	F12	F12	F12	F12
+	control		keycode	88 =	F12	
+altgr	control 	keycode 88 = 	F12
+	alt		keycode	88 =	Console_12
+altgr	alt		keycode	88 =	Console_12
+	control	alt     keycode  88 = Console_12
+altgr	control	alt     keycode  88 = Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+keycode  97 = Control
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+altgr	control keycode 99 = 	Control_backslash
+	alt	keycode	99 =	Control_backslash
+altgr	alt     keycode 99 = 	Control_backslash
+		keycode 100 = AltGr
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+altgr	shift   keycode 104 = 	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+altgr	shift   keycode 109 = 	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+altgr	control alt keycode 111 = Boot
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
+string	F1 =	"\033[[A"
+string	F2 =	"\033[[B"
+string	F3 =	"\033[[C"
+string	F4 =	"\033[[D"
+string	F5 =	"\033[[E"
+string	F6 =	"\033[17~"
+string	F7 =	"\033[18~"
+string	F8 =	"\033[19~"
+string	F9 =	"\033[20~"
+string	F10 =	"\033[21~"
+string	F11 =	"\033[23~"
+string	F12 =	"\033[24~"
+string	F13 =	"\033[25~"
+string	F14 =	"\033[26~"
+string	F15 =	"\033[28~"
+string	F16 =	"\033[29~"
+string	F17 =	"\033[31~"
+string	F18 =	"\033[32~"
+string	F19 =	"\033[33~"
+string	F20 =	"\033[34~"
+string	Find =	"\033[1~"
+string	Insert =	"\033[2~"
+string	Remove =	"\033[3~"
+string	Select =	"\033[4~"
+string	Prior =	"\033[5~"
+string	Next =	"\033[6~"
+string	F21 =	""
+string	F22 =	""
+string	F23 =	""
+string	F24 =	""
+string	F25 =	""
+string	F26 =	""
+
diff --git a/keymaps/i386/qwerty/ru4.map b/keymaps/i386/qwerty/ru4.map
new file mode 100644
index 0000000..948c3cf
--- /dev/null
+++ b/keymaps/i386/qwerty/ru4.map
@@ -0,0 +1,471 @@
+# ru4.map is a Russian keymap for a ms(105 keys) keyboard, prepared by 
+# IPLabs Linux Team (www.iplabs.ru/Linux   and  www.logic.ru)
+# from (ru1.map) by Eugene Crosser's (ru.map):
+# by Alexey Vovenko <vovenko@ixwin.ihep.su>.
+# 
+# CapsLock is used to change rus/lat, while Shift+CapsLock is used to 
+# lock capitals.
+
+		keycode	0 =
+		keycode	1 =	Escape	Escape		Escape	Escape
+	alt	keycode	1 =	Meta_Escape
+altgr	alt     keycode 1 = 	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+altgr	alt     keycode 2 = 	Meta_one
+	shift alt keycode 2 = 	Meta_exclam
+altgr	shift alt keycode 2 = 	Meta_exclam
+		keycode	3 =	two	at		two	quotedbl
+	control	keycode	3 =	nul	
+altgr	control keycode 3 = 	nul
+	alt	keycode	3 =	Meta_two	
+altgr	alt     keycode 3 = 	Meta_two
+	shift alt keycode 3 = 	Meta_at
+altgr	shift alt keycode 3 = 	Meta_at
+		keycode 4 = 	three numbersign	three	numbersign
+	control	keycode	4 =	Escape
+altgr	control keycode 4 = 	Escape
+	alt	keycode	4 =	Meta_three
+altgr	alt     keycode 4 = 	Meta_three
+	shift alt keycode 4 =	Meta_numbersign
+altgr	shift alt keycode 4 =	Meta_numbersign
+		keycode	5 =	four	dollar		four	semicolon
+	control	keycode	5 =	Control_backslash
+altgr	control keycode 5 = 	Control_backslash
+	alt	keycode	5 =	Meta_four
+altgr	alt     keycode 5 = 	Meta_four
+	shift alt keycode 5 = 	Meta_dollar
+altgr	shift alt keycode 5 = 	Meta_dollar
+		keycode	6 =	five     percent	five	percent
+	control	keycode	6 =	Control_bracketright
+altgr	control keycode 6 = 	Control_bracketright
+	alt	keycode	6 =	Meta_five
+altgr	alt     keycode 6 = 	Meta_five
+	shift alt keycode 6 = 	Meta_percent
+altgr	shift alt keycode 6 = 	Meta_percent    
+		keycode	7 =	six	asciicircum	six	colon
+	control	keycode	7 =	Control_asciicircum
+altgr	control keycode 7 = 	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+altgr	alt     keycode 7 = 	Meta_six
+	shift alt keycode 7 = 	Meta_asciicircum
+altgr	shift alt keycode 7 = 	Meta_asciicircum
+		keycode	8 =	seven	ampersand	seven	question
+	control	keycode	8 =	Control_underscore
+altgr	control keycode 8 = 	Control_underscore
+	alt	keycode	8 =	Meta_seven
+altgr	alt     keycode 8 = 	Meta_seven
+	shift alt keycode 8 = 	Meta_ampersand
+altgr	shift alt keycode 8 = 	Meta_ampersand
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+altgr	control keycode 9 = 	Delete
+	alt	keycode	9 =	Meta_eight
+altgr	alt     keycode 9 =     Meta_eight
+	shift alt keycode 9 = 	Meta_asterisk
+altgr	shift alt keycode 9 = 	Meta_asterisk
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+altgr	alt     keycode 10 =    Meta_nine
+	shift alt keycode 10 = 	Meta_parenleft
+altgr	shift alt keycode 10 = 	Meta_parenleft
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+altgr	alt     keycode 11 =    Meta_zero
+	shift alt keycode 11 = 	Meta_parenright
+altgr	shift alt keycode 11 = 	Meta_parenright
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+altgr	control keycode 12 =    Control_underscore
+	alt	keycode	12 =	Meta_minus
+altgr	alt     keycode 12 =    Meta_minus
+	shift alt keycode 12 = 	Meta_underscore
+altgr	shift alt keycode 12 = 	Meta_underscore
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+altgr	alt     keycode 13 =    Meta_equal
+	shift alt keycode 13 = 	Meta_plus
+altgr	shift alt keycode 13 = 	Meta_plus
+		keycode 14 = 	Delete  Delete  	Delete  Delete
+	alt	keycode	14 =	Meta_Delete
+altgr	alt     keycode 14 = 	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+altgr	alt     keycode 15 = 	Meta_Tab
+		keycode 16 = 	+q	
+altgr		keycode 16 = 	+0xCA
+altgr	shift	keycode 16 = 	+0xEA
+		keycode 17 = 	+w	
+altgr		keycode	17 =	+0xC3
+altgr	shift	keycode 17 =	+0xE3
+		keycode 18 = 	+e
+altgr		keycode 18 = 	+0xD5
+altgr	shift 	keycode 18 = 	+0xF5
+		keycode 19 =	+r
+altgr		keycode 19 = 	+0xCB
+altgr	shift 	keycode 19 = 	+0xEB
+		keycode 20 = 	+t
+altgr		keycode 20 = 	+0xC5
+altgr	shift 	keycode 20 = 	+0xE5
+		keycode 21 = 	+y
+altgr		keycode 21 = 	+0xCE
+altgr	shift 	keycode 21 = 	+0xEE
+		keycode 22 = 	+u
+altgr		keycode 22 = 	+0xC7
+altgr	shift 	keycode 22 = 	+0xE7
+		keycode 23 = 	+i
+altgr		keycode 23 = 	+0xDB
+altgr	shift 	keycode 23 = 	+0xFB
+		keycode 24 = 	+o
+altgr		keycode 24 =	+0xDD
+altgr	shift 	keycode 24 = 	+0xFD
+		keycode 25 = 	+p
+altgr		keycode 25 = 	+0xDA
+altgr	shift 	keycode 25 = 	+0xFA
+		keycode 26 = 	bracketleft     braceleft
+altgr		keycode 26 = 	+0xC8
+altgr	shift	keycode 26 = 	+0xE8
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+altgr	alt     keycode 26 = 	Meta_bracketleft
+		keycode 27 =  bracketright braceright bracketleft bracketright
+
+# The keycode "0xFF" is too dangerous for many programs (including emacs).
+# So let it be bracket instead of Hard Sign.
+altgr		keycode 27 = 	+0xDF
+altgr	shift 	keycode 27 = 	+0xFF 
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+altgr	alt     keycode 27 = 	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	0x080d	
+altgr	alt     keycode 28 = 	0x080d
+	control keycode 28 = 	Linefeed
+altgr	control keycode 28 =	Linefeed
+		keycode	29 =	Control	
+		keycode 30 = 	+a
+altgr		keycode 30 = 	+0xC6
+altgr	shift 	keycode 30 = 	+0xE6
+		keycode 31 = 	+s
+altgr		keycode 31 = 	+0xD9
+altgr	shift 	keycode 31 = 	+0xF9
+		keycode 32 =	+d
+altgr		keycode 32 = 	+0xD7
+altgr	shift 	keycode 32 = 	+0xF7
+		keycode 33 = 	+f
+altgr		keycode 33 = 	+0xC1
+altgr	shift 	keycode 33 = 	+0xE1
+		keycode 34 = 	+g
+altgr		keycode 34 = 	+0xD0
+altgr	shift 	keycode 34 = 	+0xF0
+		keycode 35 = 	+h
+altgr		keycode 35 = 	+0xD2
+altgr	shift	keycode 35 = 	+0xF2
+		keycode 36 = 	+j
+altgr		keycode 36 = 	+0xCF
+altgr	shift 	keycode 36 = 	+0xEF
+		keycode 37 = 	+k
+altgr		keycode 37 = 	+0xCC
+altgr	shift 	keycode 37 = 	+0xEC
+		keycode 38 = 	+l
+altgr		keycode 38 = 	+0xC4
+altgr	shift 	keycode 38 = 	+0xE4
+		keycode 39 = 	semicolon        colon
+altgr		keycode 39 = 	+0xD6
+altgr	shift	keycode 39 = 	+0xF6
+	alt	keycode	39 =	Meta_semicolon
+altgr	alt     keycode 39 = 	Meta_semicolon
+		keycode 40 =	apostrophe       quotedbl
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+altgr	alt     keycode 40 = 	Meta_apostrophe
+altgr		keycode 40 = 	+0xDC
+altgr	shift	keycode 40 = 	+0xFC
+		keycode 41 = 	grave asciitilde +163 +179
+	control	keycode	41 =	nul	
+altgr	control keycode 41 =	nul
+	alt	keycode	41 =	Meta_grave
+altgr	alt     keycode 41 = 	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		slash bar	
+	control	keycode	43 =	Control_backslash
+altgr	control keycode 43 = 	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+altgr	alt     keycode 43 = 	Meta_backslash
+	shift alt keycode 43 = 	Meta_bar
+altgr	shift alt keycode 43 = 	Meta_bar
+		keycode 44 = 	+z
+altgr		keycode 44 = 	+0xD1
+altgr	shift 	keycode 44 = 	+0xF1
+		keycode 45 = 	+x
+altgr		keycode 45 = 	+0xDE
+altgr	shift 	keycode 45 = 	+0xFE
+		keycode 46 = 	+c
+altgr		keycode 46 = 	+0xD3
+altgr	shift 	keycode 46 = 	+0xF3
+		keycode 47 = 	+v
+altgr		keycode 47 = 	+0xCD
+altgr	shift 	keycode 47 = 	+0xED
+		keycode 48 = 	+b
+altgr		keycode 48 = 	+0xC9
+altgr	shift 	keycode 48 = 	+0xE9
+		keycode 49 = 	+n
+altgr		keycode 49 = 	+0xD4
+altgr	shift 	keycode 49 = 	+0xF4
+		keycode 50 = 	+m
+altgr		keycode 50 = 	+0xD8
+altgr	shift 	keycode 50 = 	+0xF8
+		keycode 51 = 	comma            less
+	alt	keycode	51 =	Meta_comma
+altgr	alt     keycode 51 = 	Meta_comma
+	alt shift keycode 51 = 	Meta_less
+altgr	alt shift keycode 51 = 	Meta_less
+altgr		keycode 51 = 	+0xC2
+altgr	shift	keycode 51 = 	+0xE2
+		keycode 52 = 	period            greater
+	alt	keycode	52 =	Meta_period
+altgr	alt     keycode 52 = 	Meta_period
+	alt shift keycode 52 = 	Meta_greater
+altgr	alt shift keycode 52 = 	Meta_greater
+altgr		keycode 52 = 	+0xC0
+altgr	shift	keycode 52 = 	+0xE0
+
+# Can you survive without "yuo" letter? If no put +163 and +179 for 
+# altgr keycode 53.
+		keycode 53 = 	slash question period comma
+	control	keycode	53 =	Delete	
+altgr	control keycode 53 = 	Delete
+	alt	keycode	53 =	Meta_slash
+altgr	alt     keycode 53 = 	Meta_slash
+	shift alt keycode 53 = 	Meta_question
+altgr	shift alt keycode 53 = 	Meta_question
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+altgr	control keycode 57 = 	nul
+	alt	keycode	57 =	Meta_space
+altgr	alt     keycode 57 = 	Meta_space
+keycode	58 =AltGr_Lock
+	shift	keycode 58 =	Caps_Lock
+altgr	shift  	keycode 58 =	Caps_Lock
+			keycode	59 =	F1	F11	F1	F11
+	control		keycode	59 =	F1	
+altgr	control 	keycode 59 = 	F1
+	alt		keycode	59 =	Console_1
+altgr	alt		keycode	59 =	Console_1
+	control	alt     keycode 59 = 	Console_1
+altgr	control	alt     keycode 59 = 	Console_1
+			keycode	60 =	F2	F12	F2	F12
+	control		keycode	60 =	F2	
+altgr	control 	keycode 60 = 	F2
+	alt		keycode	60 =	Console_2
+altgr	alt		keycode	60 =	Console_2
+	control	alt     keycode 60 =	Console_2
+altgr	control	alt     keycode 60 = 	Console_2
+			keycode	61 =	F3	F13	F3	F13
+	control		keycode	61 =	F3	
+altgr	control 	keycode 61 =	F3
+	alt		keycode	61 =	Console_3
+altgr	alt		keycode	61 =	Console_3
+	control	alt     keycode 61 = 	Console_3
+altgr	control	alt     keycode 61 = 	Console_3
+			keycode	62 =	F4	F14	F4	F14
+	control		keycode	62 =	F4	
+	altgr	control keycode 62 = 	F4
+	alt		keycode	62 =	Console_4
+altgr	alt		keycode	62 =	Console_4
+	control	alt     keycode 62 = 	Console_4
+altgr	control	alt     keycode 62 = 	Console_4
+			keycode	63 =	F5	F15	F5	F15
+	control		keycode	63 =	F5	
+altgr	control 	keycode 63 = 	F5
+	alt		keycode	63 =	Console_5
+altgr	alt		keycode	63 =	Console_5
+	control	alt     keycode 63 =	Console_5
+altgr	control	alt     keycode 63 = 	Console_5
+			keycode	64 =	F6	F16	F6	F16
+	control		keycode	64 =	F6	
+altgr	control 	keycode 64 =	F6
+	alt		keycode	64 =	Console_6
+altgr	alt		keycode	64 =	Console_6
+	control	alt     keycode 64 = 	Console_6
+altgr	control	alt     keycode 64 = 	Console_6
+			keycode	65 =	F7	F17	F7	F17
+	control		keycode	65 =	F7	
+altgr	control 	keycode 65 = 	F7
+	alt		keycode	65 =	Console_7
+altgr	alt		keycode	65 =	Console_7
+	control	alt     keycode 65 = 	Console_7
+altgr	control	alt     keycode 65 = 	Console_7
+			keycode	66 =	F8	F18	F8	F18
+	control		keycode	66 =	F8
+altgr	control 	keycode 66 =	F8
+	alt		keycode	66 =	Console_8
+altgr	alt		keycode	66 =	Console_8
+	control	alt     keycode 66 = 	Console_8
+altgr	control	alt     keycode 66 = 	Console_8
+			keycode	67 =	F9	F19	F9	F19
+	control		keycode	67 =	F9	
+altgr	control 	keycode 67 = 	F9
+	alt		keycode	67 =	Console_9
+altgr	alt		keycode	67 =	Console_9
+	control	alt     keycode 67 = 	Console_9
+altgr	control	alt     keycode 67 = 	Console_9
+			keycode	68 =	F10	F20	F10	F20
+	control		keycode	68 =	F10	
+altgr	control 	keycode 68 =	F10
+	alt		keycode	68 =	Console_10
+altgr	alt		keycode	68 =	Console_10
+	control	alt     keycode 68 = 	Console_10
+altgr	control	alt     keycode 68 = 	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+altgr	control keycode 70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+altgr	alt     keycode 70 = 	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+altgr	alt     keycode 71 = 	Ascii_7
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+altgr	alt     keycode 72 = 	Ascii_8
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+altgr	alt     keycode 73 = 	Ascii_9
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+altgr	alt     keycode 75 =	Ascii_4
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+altgr	alt     keycode 76 = 	Ascii_5
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+altgr	alt     keycode 77 = 	Ascii_6
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+altgr	alt     keycode 79 =	Ascii_1
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+altgr	alt     keycode 80 = 	Ascii_2
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+altgr	alt     keycode 81 = 	Ascii_3
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+altgr	alt     keycode 82 = 	Ascii_0
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+altgr	control alt 	keycode  83 = Boot
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+altgr	alt     keycode 86 = 	Meta_less
+			keycode	87 =	F11	F11	F11	F11
+	control		keycode	87 =	F11	
+altgr	control 	keycode 87 = 	F11
+	alt		keycode	87 =	Console_11
+altgr	alt		keycode	87 =	Console_11
+	control	alt     keycode 87 = 	Console_11
+altgr	control	alt     keycode 87 =	Console_11
+			keycode	88 =	F12	F12	F12	F12
+	control		keycode	88 =	F12	
+altgr	control 	keycode 88 = 	F12
+	alt		keycode	88 =	Console_12
+altgr	alt		keycode	88 =	Console_12
+	control	alt     keycode  88 = Console_12
+altgr	control	alt     keycode  88 = Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+keycode  97 = Control
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+altgr	control keycode 99 = 	Control_backslash
+	alt	keycode	99 =	Control_backslash
+altgr	alt     keycode 99 = 	Control_backslash
+		keycode 100 = AltGr
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+altgr	shift   keycode 104 = 	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+altgr	shift   keycode 109 = 	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+altgr	control alt keycode 111 = Boot
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
+string	F1 =	"\033[[A"
+string	F2 =	"\033[[B"
+string	F3 =	"\033[[C"
+string	F4 =	"\033[[D"
+string	F5 =	"\033[[E"
+string	F6 =	"\033[17~"
+string	F7 =	"\033[18~"
+string	F8 =	"\033[19~"
+string	F9 =	"\033[20~"
+string	F10 =	"\033[21~"
+string	F11 =	"\033[23~"
+string	F12 =	"\033[24~"
+string	F13 =	"\033[25~"
+string	F14 =	"\033[26~"
+string	F15 =	"\033[28~"
+string	F16 =	"\033[29~"
+string	F17 =	"\033[31~"
+string	F18 =	"\033[32~"
+string	F19 =	"\033[33~"
+string	F20 =	"\033[34~"
+string	Find =	"\033[1~"
+string	Insert =	"\033[2~"
+string	Remove =	"\033[3~"
+string	Select =	"\033[4~"
+string	Prior =	"\033[5~"
+string	Next =	"\033[6~"
+string	F21 =	""
+string	F22 =	""
+string	F23 =	""
+string	F24 =	""
+string	F25 =	""
+string	F26 =	""
+
diff --git a/keymaps/i386/qwerty/ru_win.map b/keymaps/i386/qwerty/ru_win.map
new file mode 100644
index 0000000..d4122ce
--- /dev/null
+++ b/keymaps/i386/qwerty/ru_win.map
@@ -0,0 +1,327 @@
+! $Header: /home/abel/cvs/src/misc/cyr/ru_win.map,v 1.1 1998/03/05 23:05:32 abel Exp $
+!
+! Russian cp1251 (Windows Cyrillic) keyboard.map. 
+!
+! Adapted from ru.map by Alexander L. Belikoff (abel@bfr.co.il)
+!
+! "Cyrillic" mode is toggled by Right_Ctrl key and shifted by AltGr key.
+
+
+		keycode	0 =
+		keycode	1 =	Escape	Escape		Escape	Escape
+	alt	keycode	1 =	Meta_Escape
+		keycode	2 =	one	exclam		one	exclam
+	alt	keycode	2 =	Meta_one	
+		keycode	3 =	two	at		two	at
+	control	keycode	3 =	nul	
+	alt	keycode	3 =	Meta_two	
+		keycode	4 =	three	numbersign	three	question
+	control	keycode	4 =	Escape
+	alt	keycode	4 =	Meta_three
+		keycode	5 =	four	dollar		four	quotedbl
+	control	keycode	5 =	Control_backslash
+	alt	keycode	5 =	Meta_four
+		keycode	6 =	five	percent		five	colon
+	control	keycode	6 =	Control_bracketright
+	alt	keycode	6 =	Meta_five
+		keycode	7 =	six	asciicircum	six	comma
+	control	keycode	7 =	Control_asciicircum
+	alt	keycode	7 =	Meta_six	
+		keycode	8 =	seven	ampersand	seven	period
+	control	keycode	8 =	Control_underscore
+	alt	keycode	8 =	Meta_seven
+		keycode	9 =	eight	asterisk	eight	asterisk
+	control	keycode	9 =	Delete	
+	alt	keycode	9 =	Meta_eight
+		keycode	10 =	nine	parenleft	nine	parenleft
+	alt	keycode	10 =	Meta_nine
+		keycode	11 =	zero	parenright	zero	parenright
+	alt	keycode	11 =	Meta_zero
+		keycode	12 =	minus	underscore	minus	underscore
+	control	keycode	12 =	Control_underscore
+	alt	keycode	12 =	Meta_minus
+		keycode	13 =	equal	plus		equal	plus
+	alt	keycode	13 =	Meta_equal
+		keycode	14 =	BackSpace BackSpace	BackSpace BackSpace
+	alt	keycode	14 =	Meta_Delete
+		keycode	15 =	Tab	Tab		Tab	Tab	
+	alt	keycode	15 =	Meta_Tab	
+		keycode	16 =	+q	+Q		+0xE9	+0xC9
+	control	keycode	16 =	Control_q
+altgr	control	keycode	16 =	Control_q
+		keycode	17 =	+w	+W		+0xF6	+0xD6
+	control	keycode	17 =	Control_w
+altgr	control	keycode	17 =	Control_w
+		keycode	18 =	+e	+E		+0xF3	+0xD3
+	control	keycode	18 =	Control_e
+altgr	control	keycode	18 =	Control_e
+		keycode	19 =	+r	+R		+0xEA	+0xCA
+	control	keycode	19 =	Control_r
+altgr	control	keycode	19 =	Control_r
+		keycode	20 =	+t	+T		+0xE5	+0xC5
+	control	keycode	20 =	Control_t
+altgr	control	keycode	20 =	Control_t
+		keycode	21 =	+y	+Y		+0xED	+0xCD
+	control	keycode	21 =	Control_y
+altgr	control	keycode	21 =	Control_y
+		keycode	22 =	+u	+U		+0xE3	+0xC3
+	control	keycode	22 =	Control_u
+altgr	control	keycode	22 =	Control_u
+		keycode	23 =	+i	+I		+0xF8	+0xD8
+	control	keycode	23 =	Tab
+altgr	control	keycode	23 =	Tab
+		keycode	24 =	+o	+O		+0xF9	+0xD9
+	control	keycode	24 =	Control_o
+altgr	control	keycode	24 =	Control_o
+		keycode	25 =	+p	+P		+0xE7	+0xC7
+	control	keycode	25 =	Control_p
+altgr	control	keycode	25 =	Control_p
+		keycode	26 =	bracketleft braceleft	+0xF5	+0xD5
+	control	keycode	26 =	Escape	
+altgr	control	keycode	26 =	Escape	
+	alt	keycode	26 =	Meta_bracketleft
+		keycode	27 =	bracketright braceright	+0xFA   +0xDA
+	control	keycode	27 =	Control_bracketright
+altgr	control	keycode	27 =	Control_bracketright
+	alt	keycode	27 =	Meta_bracketright
+		keycode	28 =	Return	
+	alt	keycode	28 =	0x080d	
+		keycode	29 =	Control	
+		keycode	30 =	+a	+A		+0xF4	+0xD4
+	control	keycode	30 =	Control_a
+altgr	control	keycode	30 =	Control_a
+		keycode	31 =	+s	+S		+0xFB	+0xDB
+	control	keycode	31 =	Control_s
+altgr	control	keycode	31 =	Control_s
+		keycode	32 =	+d	+D		+0xE2	+0xC2
+	control	keycode	32 =	Control_d
+altgr	control	keycode	32 =	Control_d
+		keycode	33 =	+f	+F		+0xE0	+0xC0
+	control	keycode	33 =	Control_f
+altgr	control	keycode	33 =	Control_f
+		keycode	34 =	+g	+G		+0xEF	+0xCF
+	control	keycode	34 =	Control_g
+altgr	control	keycode	34 =	Control_g
+		keycode	35 =	+h	+H		+0xF0	+0xD0
+	control	keycode	35 =	BackSpace
+altgr	control	keycode	35 =	BackSpace
+		keycode	36 =	+j	+J		+0xEE	+0xCE
+	control	keycode	36 =	Linefeed
+altgr	control	keycode	36 =	Linefeed
+		keycode	37 =	+k	+K		+0xEB	+0xCB
+	control	keycode	37 =	Control_k
+altgr	control	keycode	37 =	Control_k
+		keycode	38 =	+l	+L		+0xE4	+0xC4
+	control	keycode	38 =	Control_l
+altgr	control	keycode	38 =	Control_l
+		keycode	39 =	semicolon colon		+0xE6	+0xC6
+	alt	keycode	39 =	Meta_semicolon
+		keycode	40 =	apostrophe quotedbl	+0xFD	+0xDD
+	control	keycode	40 =	Control_g
+altgr	control	keycode	40 =	Control_g
+	alt	keycode	40 =	Meta_apostrophe
+		keycode	41 =	grave	asciitilde	+0xB8	+0xA8
+	control	keycode	41 =	nul	
+	alt	keycode	41 =	Meta_grave
+		keycode	42 =	Shift	
+		keycode	43 =	backslash bar		backslash bar	
+	control	keycode	43 =	Control_backslash
+	alt	keycode	43 =	Meta_backslash
+		keycode	44 =	+z	+Z		+0xFF	+0xDF
+	control	keycode	44 =	Control_z
+altgr	control	keycode	44 =	Control_z
+		keycode	45 =	+x	+X		+0xF7	+0xD7
+	control	keycode	45 =	Control_x
+altgr	control	keycode	45 =	Control_x
+		keycode	46 =	+c	+C		+0xF1	+0xD1
+	control	keycode	46 =	Control_c
+altgr	control	keycode	46 =	Control_c
+		keycode	47 =	+v	+V		+0xEC	+0xCC
+	control	keycode	47 =	Control_v
+altgr	control	keycode	47 =	Control_v
+		keycode	48 =	+b	+B		+0xE8	+0xC8
+	control	keycode	48 =	Control_b
+altgr	control	keycode	48 =	Control_b
+		keycode	49 =	+n	+N		+0xF2	+0xD2
+	control	keycode	49 =	Control_n
+altgr	control	keycode	49 =	Control_n
+		keycode	50 =	+m	+M		+0xFC	+0xDC
+	control	keycode	50 =	Control_m
+altgr	control	keycode	50 =	Control_m
+		keycode	51 =	comma	less		+0xE1	+0xC1
+	alt	keycode	51 =	Meta_comma
+		keycode	52 =	period	greater		+0xFE	+0xDE
+	alt	keycode	52 =	Meta_period
+		keycode	53 =	slash	question	slash	question
+	control	keycode	53 =	Delete	
+	alt	keycode	53 =	Meta_slash
+		keycode	54 =	Shift
+		keycode	55 =	KP_Multiply
+		keycode	56 =	Alt	
+		keycode	57 =	space	space		space	space	
+	control	keycode	57 =	nul	
+	alt	keycode	57 =	Meta_space
+		keycode	58 =	Caps_Lock
+		keycode	59 =	F1	F11	F1	F11
+	control	keycode	59 =	F1	
+	alt	keycode	59 =	Console_1
+altgr	alt	keycode	59 =	Console_1
+		keycode	60 =	F2	F12	F2	F12
+	control	keycode	60 =	F2	
+	alt	keycode	60 =	Console_2
+altgr	alt	keycode	60 =	Console_2
+		keycode	61 =	F3	F13	F3	F13
+	control	keycode	61 =	F3	
+	alt	keycode	61 =	Console_3
+altgr	alt	keycode	61 =	Console_3
+		keycode	62 =	F4	F14	F4	F14
+	control	keycode	62 =	F4	
+	alt	keycode	62 =	Console_4
+altgr	alt	keycode	62 =	Console_4
+		keycode	63 =	F5	F15	F5	F15
+	control	keycode	63 =	F5	
+	alt	keycode	63 =	Console_5
+altgr	alt	keycode	63 =	Console_5
+		keycode	64 =	F6	F16	F6	F16
+	control	keycode	64 =	F6	
+	alt	keycode	64 =	Console_6
+altgr	alt	keycode	64 =	Console_6
+		keycode	65 =	F7	F17	F7	F17
+	control	keycode	65 =	F7	
+	alt	keycode	65 =	Console_7
+altgr	alt	keycode	65 =	Console_7
+		keycode	66 =	F8	F18	F8	F18
+	control	keycode	66 =	F8	
+	alt	keycode	66 =	Console_8
+altgr	alt	keycode	66 =	Console_8
+		keycode	67 =	F9	F19	F9	F19
+	control	keycode	67 =	F9	
+	alt	keycode	67 =	Console_9
+altgr	alt	keycode	67 =	Console_9
+		keycode	68 =	F10	F20	F10	F20
+	control	keycode	68 =	F10	
+	alt	keycode	68 =	Console_10
+altgr	alt	keycode	68 =	Console_10
+		keycode	69 =	Num_Lock	
+		keycode	70 =	Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode	70 =	Show_State
+	alt	keycode	70 =	Scroll_Lock
+		keycode	71 =	KP_7	
+	alt	keycode	71 =	Ascii_7	
+		keycode	72 =	KP_8	
+	alt	keycode	72 =	Ascii_8	
+		keycode	73 =	KP_9	
+	alt	keycode	73 =	Ascii_9	
+		keycode	74 =	KP_Subtract
+		keycode	75 =	KP_4	
+	alt	keycode	75 =	Ascii_4	
+		keycode	76 =	KP_5	
+	alt	keycode	76 =	Ascii_5	
+		keycode	77 =	KP_6	
+	alt	keycode	77 =	Ascii_6	
+		keycode	78 =	KP_Add	
+		keycode	79 =	KP_1	
+	alt	keycode	79 =	Ascii_1	
+		keycode	80 =	KP_2	
+	alt	keycode	80 =	Ascii_2	
+		keycode	81 =	KP_3	
+	alt	keycode	81 =	Ascii_3	
+		keycode	82 =	KP_0	
+	alt	keycode	82 =	Ascii_0	
+		keycode	83 =	KP_Period
+altgr	control	keycode	83 =	Boot	
+control	alt	keycode	83 =	Boot	
+		keycode	84 =	Last_Console
+		keycode	85 =
+		keycode	86 =	less	greater	bar	
+	alt	keycode	86 =	Meta_less
+		keycode	87 =	F11	F11	F11	F11
+	control	keycode	87 =	F11	
+	alt	keycode	87 =	Console_11
+altgr	alt	keycode	87 =	Console_11
+		keycode	88 =	F12	F12	F12	F12
+	control	keycode	88 =	F12	
+	alt	keycode	88 =	Console_12
+altgr	alt	keycode	88 =	Console_12
+		keycode	89 =
+		keycode	90 =
+		keycode	91 =
+		keycode	92 =
+		keycode	93 =
+		keycode	94 =
+		keycode	95 =
+		keycode	96 =	KP_Enter	
+		keycode	97 =	AltGr_Lock
+		keycode	98 =	KP_Divide
+		keycode	99 =	Control_backslash
+	control	keycode	99 =	Control_backslash
+	alt	keycode	99 =	Control_backslash
+		keycode	100 =	AltGr	
+		keycode	101 =	Break	
+		keycode	102 =	Find	
+		keycode	103 =	Up	
+		keycode	104 =	Prior	
+	shift	keycode	104 =	Scroll_Backward
+		keycode	105 =	Left	
+        alt     keycode 105 =	Decr_Console
+		keycode 106 =	Right
+        alt     keycode 106 =	Incr_Console
+		keycode	107 =	Select	
+		keycode	108 =	Down	
+		keycode	109 =	Next	
+	shift	keycode	109 =	Scroll_Forward
+		keycode	110 =	Insert	
+		keycode	111 =	Remove	
+altgr	control	keycode	111 =	Boot	
+control	alt	keycode	111 =	Boot	
+		keycode	112 =
+		keycode	113 =
+		keycode	114 =
+		keycode	115 =
+		keycode	116 =
+		keycode	117 =
+		keycode	118 =
+		keycode	119 =
+		keycode	120 =
+		keycode	121 =
+		keycode	122 =
+		keycode	123 =
+		keycode	124 =
+		keycode	125 =
+		keycode	126 =
+		keycode	127 =
+string	F1 =	"\033[[A"
+string	F2 =	"\033[[B"
+string	F3 =	"\033[[C"
+string	F4 =	"\033[[D"
+string	F5 =	"\033[[E"
+string	F6 =	"\033[17~"
+string	F7 =	"\033[18~"
+string	F8 =	"\033[19~"
+string	F9 =	"\033[20~"
+string	F10 =	"\033[21~"
+string	F11 =	"\033[23~"
+string	F12 =	"\033[24~"
+string	F13 =	"\033[25~"
+string	F14 =	"\033[26~"
+string	F15 =	"\033[28~"
+string	F16 =	"\033[29~"
+string	F17 =	"\033[31~"
+string	F18 =	"\033[32~"
+string	F19 =	"\033[33~"
+string	F20 =	"\033[34~"
+string	Find =	"\033[1~"
+string	Insert =	"\033[2~"
+string	Remove =	"\033[3~"
+string	Select =	"\033[4~"
+string	Prior =	"\033[5~"
+string	Next =	"\033[6~"
+string	F21 =	""
+string	F22 =	""
+string	F23 =	""
+string	F24 =	""
+string	F25 =	""
+string	F26 =	""
+
+
+! end of $Source: /home/abel/cvs/src/misc/cyr/ru_win.map,v $
diff --git a/keymaps/i386/qwerty/se-latin1.map b/keymaps/i386/qwerty/se-latin1.map
new file mode 100644
index 0000000..6b5526c
--- /dev/null
+++ b/keymaps/i386/qwerty/se-latin1.map
@@ -0,0 +1,89 @@
+# The Swedish and Finnish keyboards are the same (or so they tell me)
+# and the Finnish map should do for Sweden as well. Below a Swedish map
+# contributed by Andreas Almroth (andreas@traci.almroth.pp.se) on 950507
+# where no AltGr is used to get the three national characters.
+
+charset "iso-8859-1"
+keymaps 0-2,4-6,8,12
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            numbersign       sterling
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             ccedilla
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	altgr   keycode   5 = dollar
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand        notsign
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal
+	alt     keycode  11 = Meta_zero
+keycode  12 = plus       question         backslash
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = dead_acute  dead_grave
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = +aring          +Aring
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dead_diaeresis   asciicircum           asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +odiaeresis       +Odiaeresis
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = +adiaeresis       +Adiaeresis
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = section          degree
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = apostrophe       asterisk
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/se.readme b/keymaps/i386/qwerty/se.readme
new file mode 100644
index 0000000..e1a888f
--- /dev/null
+++ b/keymaps/i386/qwerty/se.readme
@@ -0,0 +1,2 @@
+The swedish maps are identical to the finnish ones.
+Use fi*.map.
diff --git a/keymaps/i386/qwerty/sk-prog.map b/keymaps/i386/qwerty/sk-prog.map
new file mode 100644
index 0000000..f34c7a8
--- /dev/null
+++ b/keymaps/i386/qwerty/sk-prog.map
@@ -0,0 +1,254 @@
+# Slovak ISO 8859-2 keyboard map for text console (for programmers)
+# Written and (c) copyright by Jan Ondrej (ondrejj@salstar.award.sk)
+# You can distribute this file under the terms of GNU General
+# Public License (GPL). See the file COPYING.
+#
+# Slovenska klavesnica sa zapne a vypne klavesou Pause.
+# Klavesou AltGr (Right Alt) je mozne sa prepnut zo slovenskej do US a naopak.
+# Klavesa Pause potom funguje ako AltGr-lock.
+#
+# Chybaju tu klavesy vokan a dvojbodka nad pismenom, ale znaky
+# "ô" a "ä" mozete dostat tak, ze pred danym pismenom stlacite
+# klaves makcena.
+#
+# Tento subor bol vytvoreny zo suboru cz-lat2.map, ktory
+# napisal Jan Kasprzak (kas@ics.muni.cz).
+#
+charset "iso-8859-2"
+keymaps 0-15
+strings as usual
+keycode 1 = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape
+keycode 2 = one exclam plus one VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_one Meta_one Meta_one 
+keycode 3 = two at lcaron two nul nul nul nul Meta_two Meta_two Meta_two Meta_two
+keycode 4 = three numbersign scaron three Escape VoidSymbol Escape VoidSymbol Meta_three Meta_three Meta_three Meta_three Meta_three  
+keycode 5 = four dollar ccaron four Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_four Meta_four Meta_four Meta_four  
+keycode 6 = five percent tcaron five Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_five Meta_five Meta_five Meta_five 
+keycode 7 = six asciicircum zcaron six Control_asciicircum VoidSymbol Control_asciicircum VoidSymbol Meta_six Meta_six Meta_six Meta_six  
+keycode 8 = seven ampersand yacute seven Control_underscore  VoidSymbol Control_underscore VoidSymbol Meta_seven Meta_seven Meta_seven Meta_seven  
+keycode 9 = eight asterisk aacute eight Delete VoidSymbol Delete VoidSymbol Meta_eight Meta_eight Meta_eight Meta_eight  
+keycode 10 = nine parenleft iacute nine VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_nine Meta_nine Meta_nine Meta_nine
+keycode 11 = zero parenright eacute zero VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_zero Meta_zero Meta_zero
+keycode 12 = minus underscore minus underscore Control_underscore Control_underscore Control_underscore Control_underscore Meta_minus Meta_minus Meta_minus Meta_minus  
+keycode 13 = equal plus dead_acute dead_circumflex VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_equal Meta_equal Meta_equal Meta_equal  
+keycode 14 = Delete Delete Delete Delete VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Delete Meta_Delete Meta_Delete Meta_Delete  
+keycode 15 = Tab Tab Tab Tab VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Tab Meta_Tab Meta_Tab Meta_Tab  
+keycode 16 = q 
+keycode 17 = w 
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = y
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = bracketleft braceleft bracketleft braceleft Escape VoidSymbol Escape VoidSymbol Meta_bracketleft Meta_bracketleft Meta_bracketleft Meta_bracketleft 
+keycode 27 = bracketright braceright bracketright braceright Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_bracketright Meta_bracketright Meta_bracketright Meta_bracketright 
+keycode 28 = Return
+altgr keycode 28 = Return
+alt keycode 28 = Meta_Control_m
+alt altgr keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = semicolon colon semicolon colon VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_semicolon Meta_semicolon Meta_semicolon Meta_semicolon 
+keycode 40 = apostrophe quotedbl apostrophe quotedbl Control_g VoidSymbol Control_g VoidSymbol Meta_apostrophe Meta_apostrophe Meta_apostrophe Meta_apostrophe 
+keycode 41 = grave asciitilde grave asciitilde nul VoidSymbol nul VoidSymbol Meta_grave VoidSymbol Meta_grave
+keycode 42 = Shift
+keycode 43 = backslash bar backslash bar Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_backslash VoidSymbol Meta_backslash
+keycode 44 = z
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+keycode 51 = comma less comma less
+alt keycode 51 = Meta_comma
+alt altgr keycode 51 = Meta_comma
+keycode 52 = period greater period greater Compose VoidSymbol Compose VoidSymbol Meta_period VoidSymbol Meta_period
+keycode 53 = slash question slash question Delete VoidSymbol Delete VoidSymbol Meta_slash VoidSymbol Meta_slash
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+keycode 56 = Alt
+keycode 57 = space space space space nul nul nul nul Meta_space Meta_space Meta_space Meta_space 
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 F1 F13 F1 VoidSymbol F1 VoidSymbol Console_1 VoidSymbol Console_1
+keycode 60 = F2 F14 F2 F14 F2 VoidSymbol F2 VoidSymbol Console_2 VoidSymbol Console_2
+keycode 61 = F3 F15 F3 F15 F3 VoidSymbol F3 VoidSymbol Console_3 VoidSymbol Console_3
+keycode 62 = F4 F16 F4 F15 F4 VoidSymbol F4 VoidSymbol Console_4 VoidSymbol Console_4
+keycode 63 = F5 F17 F5 F15 F5 VoidSymbol F5 VoidSymbol Console_5 VoidSymbol Console_5
+keycode 64 = F6 F18 F6 F15 F6 VoidSymbol F6 VoidSymbol Console_6 VoidSymbol Console_6
+keycode 65 = F7 F19 F7 F15 F7 VoidSymbol F7 VoidSymbol Console_7 VoidSymbol Console_7
+keycode 66 = F8 F20 F8 F15 F8 VoidSymbol F8 VoidSymbol Console_8 VoidSymbol Console_8
+keycode 67 = F9 F9 F9 F9 F9 VoidSymbol F9 VoidSymbol Console_9 VoidSymbol Console_9
+keycode 68 = F10 F10 F10 F10 F10 VoidSymbol F10 VoidSymbol Console_10 VoidSymbol Console_10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock Show_Memory Show_Registers
+control keycode 70 = Show_State
+alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_4
+alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+keycode 79 = KP_1
+alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+alt keycode 82 = Ascii_0
+keycode 83 = KP_Period
+control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = less greater bar
+alt keycode 86 = Meta_less
+keycode 87 = F11 F11 F11 F11 F11 VoidSymbol F11 VoidSymbol Console_11 VoidSymbol Console_11
+keycode 88 = F12 F12 F12 F12 F12 VoidSymbol F12 VoidSymbol Console_12 VoidSymbol Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+keycode 97 = Control
+keycode 98 = KP_Divide
+keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
+alt keycode 99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+	alt keycode 105 = Decr_Console
+	alt altgr keycode 105 = Decr_Console
+keycode 106 = Right
+	alt keycode 106 = Incr_Console
+	alt altgr keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+control alt keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock
+keycode 120 = 
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+compose ',' 'A' to '¡'
+compose '/' 'L' to '£'
+compose '^' 'L' to '¥'
+compose '\'' 'S' to '¦'
+compose '^' 'S' to '©'
+compose ',' 'S' to 'ª'
+compose '^' 'T' to '«'
+compose '\'' 'Z' to '¬'
+compose '^' 'Z' to '®'
+compose '.' 'Z' to '¯'
+compose ',' 'a' to '±'
+compose '/' 'l' to '³'
+compose '^' 'l' to 'µ'
+compose '\'' 's' to '¶'
+compose '^' 's' to '¹'
+compose ',' 's' to 'º'
+compose '^' 't' to '»'
+compose '\'' 'z' to '¼'
+compose '^' 'z' to '¾'
+compose '.' 'z' to '¿'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '^' 'A' to 'Ä'
+compose ':' 'A' to 'Ä'
+compose '\'' 'L' to 'Å'
+compose '\'' 'C' to 'Æ'
+compose ',' 'C' to 'Ç'
+compose '^' 'C' to 'È'
+compose '\'' 'E' to 'É'
+compose ',' 'E' to 'Ê'
+compose '"' 'E' to 'Ë'
+compose '^' 'E' to 'Ì'
+compose '\'' 'I' to 'Í'
+compose '^' 'I' to 'Î'
+compose '^' 'D' to 'Ï'
+compose '-' 'D' to 'Ð'
+compose '\'' 'N' to 'Ñ'
+compose '^' 'N' to 'Ò'
+compose '\'' 'O' to 'Ó'
+compose '^' 'O' to 'Ô'
+compose '"' 'O' to 'Õ'
+compose ':' 'O' to 'Ö'
+compose '^' 'R' to 'Ø'
+compose '^' 'U' to 'Ù'
+compose '\'' 'U' to 'Ú'
+compose '"' 'U' to 'Û'
+compose ':' 'U' to 'Ü'
+compose '\'' 'Y' to 'Ý'
+compose ',' 'T' to 'Þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to 'ß'
+compose '\'' 'r' to 'à'
+compose '\'' 'a' to 'á'
+compose '^' 'a' to 'ä'
+compose ':' 'a' to 'ä'
+compose '\'' 'l' to 'å'
+compose '\'' 'c' to 'æ'
+compose ',' 'c' to 'ç'
+compose '^' 'c' to 'è'
+compose '\'' 'e' to 'é'
+compose ',' 'e' to 'ê'
+compose ':' 'e' to 'ë'
+compose '^' 'e' to 'ì'
+compose '\'' 'i' to 'í'
+compose '^' 'e' to 'î'
+compose '^' 'd' to 'ï'
+compose '-' 'd' to 'ð'
+compose '\'' 'n' to 'ñ'
+compose '^' 'n' to 'ò'
+compose '\'' 'o' to 'ó'
+compose '^' 'o' to 'ô'
+compose ':' 'o' to 'õ'
+compose '"' 'o' to 'ö'
+compose '^' 'r' to 'ø'
+compose '^' 'u' to 'ù'
+compose '\'' 'u' to 'ú'
+compose '"' 'u' to 'û'
+compose ':' 'u' to 'ü'
+compose '\'' 'y' to 'ý'
+compose ',' 't' to 'þ'
diff --git a/keymaps/i386/qwerty/sk-qwerty.map b/keymaps/i386/qwerty/sk-qwerty.map
new file mode 100644
index 0000000..311ee2f
--- /dev/null
+++ b/keymaps/i386/qwerty/sk-qwerty.map
@@ -0,0 +1,259 @@
+# Slovak ISO 8859-2 keyboard map for text console
+# Written and (c) copyright by Jan Ondrej (ondrejj@salstar.award.sk)
+# You can distribute this file under the terms of GNU General
+# Public License (GPL). See the file COPYING.
+#
+# Slovenska klavesnica sa zapne a vypne klavesou Pause.
+# Klavesou AltGr (Right Alt) je mozne sa prepnut zo slovenskej do US a naopak.
+# Klavesa Pause potom funguje ako AltGr-lock.
+# Znak o s vokanom mozete dostat stlacenim klavesu makcen a "o".
+#
+# Zdalo sa mi, ze diaeresis nefunguje celkom spravne, pretoze
+# pri kombinacii s pismenom a daval vysledok dva znaky "a .
+# Upravil som to pridanim compose.
+#
+# Tento subor bol vytvoreny zo suboru cz-lat2.map, ktory
+# napisal Jan Kasprzak (kas@ics.muni.cz).
+#
+charset "iso-8859-2"
+keymaps 0-15
+strings as usual
+keycode 1 = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape
+keycode 2 = one exclam plus one VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_one Meta_one Meta_one 
+keycode 3 = two at lcaron two nul nul nul nul Meta_two Meta_two Meta_two Meta_two
+keycode 4 = three numbersign scaron three Escape VoidSymbol Escape VoidSymbol Meta_three Meta_three Meta_three Meta_three Meta_three  
+keycode 5 = four dollar ccaron four Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_four Meta_four Meta_four Meta_four  
+keycode 6 = five percent tcaron five Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_five Meta_five Meta_five Meta_five 
+keycode 7 = six asciicircum zcaron six Control_asciicircum VoidSymbol Control_asciicircum VoidSymbol Meta_six Meta_six Meta_six Meta_six  
+keycode 8 = seven ampersand yacute seven Control_underscore  VoidSymbol Control_underscore VoidSymbol Meta_seven Meta_seven Meta_seven Meta_seven  
+keycode 9 = eight asterisk aacute eight Delete VoidSymbol Delete VoidSymbol Meta_eight Meta_eight Meta_eight Meta_eight  
+keycode 10 = nine parenleft iacute nine VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_nine Meta_nine Meta_nine Meta_nine
+keycode 11 = zero parenright eacute zero VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_zero Meta_zero Meta_zero
+keycode 12 = minus underscore equal percent Control_underscore Control_underscore Control_underscore Control_underscore Meta_minus Meta_minus Meta_minus Meta_minus  
+keycode 13 = equal plus dead_acute dead_circumflex VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_equal Meta_equal Meta_equal Meta_equal  
+keycode 14 = Delete Delete Delete Delete VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Delete Meta_Delete Meta_Delete Meta_Delete  
+keycode 15 = Tab Tab Tab Tab VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Tab Meta_Tab Meta_Tab Meta_Tab  
+keycode 16 = q 
+keycode 17 = w 
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = y
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = bracketleft braceleft uacute slash Escape VoidSymbol Escape VoidSymbol Meta_bracketleft Meta_bracketleft Meta_bracketleft Meta_bracketleft 
+keycode 27 = bracketright braceright adiaeresis parenleft Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_bracketright Meta_bracketright Meta_bracketright Meta_bracketright 
+keycode 28 = Return 
+altgr keycode 28 = Return
+alt keycode 28 = Meta_Control_m
+alt altgr keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = semicolon colon ocircumflex quotedbl VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_semicolon Meta_semicolon Meta_semicolon Meta_semicolon 
+keycode 40 = apostrophe quotedbl 0xa7 exclam Control_g VoidSymbol Control_g VoidSymbol Meta_apostrophe Meta_apostrophe Meta_apostrophe Meta_apostrophe 
+keycode 41 = grave asciitilde grave dead_diaeresis nul VoidSymbol nul VoidSymbol Meta_grave VoidSymbol Meta_grave
+keycode 42 = Shift
+keycode 43 = backslash bar ncaron parenright Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_backslash VoidSymbol Meta_backslash
+keycode 44 = z
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+keycode 51 = comma less comma question
+alt keycode 51 = Meta_comma
+alt altgr keycode 51 = Meta_comma
+keycode 52 = period greater period colon Compose VoidSymbol Compose VoidSymbol Meta_period VoidSymbol Meta_period
+keycode 53 = slash question minus underscore Delete VoidSymbol Delete VoidSymbol Meta_slash VoidSymbol Meta_slash
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+keycode 56 = Alt
+keycode 57 = space space space space nul nul nul nul Meta_space Meta_space Meta_space Meta_space 
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 F1 F13 F1 VoidSymbol F1 VoidSymbol Console_1 VoidSymbol Console_1
+keycode 60 = F2 F14 F2 F14 F2 VoidSymbol F2 VoidSymbol Console_2 VoidSymbol Console_2
+keycode 61 = F3 F15 F3 F15 F3 VoidSymbol F3 VoidSymbol Console_3 VoidSymbol Console_3
+keycode 62 = F4 F16 F4 F15 F4 VoidSymbol F4 VoidSymbol Console_4 VoidSymbol Console_4
+keycode 63 = F5 F17 F5 F15 F5 VoidSymbol F5 VoidSymbol Console_5 VoidSymbol Console_5
+keycode 64 = F6 F18 F6 F15 F6 VoidSymbol F6 VoidSymbol Console_6 VoidSymbol Console_6
+keycode 65 = F7 F19 F7 F15 F7 VoidSymbol F7 VoidSymbol Console_7 VoidSymbol Console_7
+keycode 66 = F8 F20 F8 F15 F8 VoidSymbol F8 VoidSymbol Console_8 VoidSymbol Console_8
+keycode 67 = F9 F9 F9 F9 F9 VoidSymbol F9 VoidSymbol Console_9 VoidSymbol Console_9
+keycode 68 = F10 F10 F10 F10 F10 VoidSymbol F10 VoidSymbol Console_10 VoidSymbol Console_10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock Show_Memory Show_Registers
+control keycode 70 = Show_State
+alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_4
+alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+keycode 79 = KP_1
+alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+alt keycode 82 = Ascii_0
+keycode 83 = KP_Period
+control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = less greater bar
+alt keycode 86 = Meta_less
+keycode 87 = F11 F11 F11 F11 F11 VoidSymbol F11 VoidSymbol Console_11 VoidSymbol Console_11
+keycode 88 = F12 F12 F12 F12 F12 VoidSymbol F12 VoidSymbol Console_12 VoidSymbol Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+keycode 97 = Control
+keycode 98 = KP_Divide
+keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
+alt keycode 99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+	alt keycode 105 = Decr_Console
+	alt altgr keycode 105 = Decr_Console
+keycode 106 = Right
+	alt keycode 106 = Incr_Console
+	alt altgr keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+control alt keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock
+keycode 120 = 
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+compose ',' 'A' to '¡'
+compose '/' 'L' to '£'
+compose '^' 'L' to '¥'
+compose '\'' 'S' to '¦'
+compose '^' 'S' to '©'
+compose ',' 'S' to 'ª'
+compose '^' 'T' to '«'
+compose '\'' 'Z' to '¬'
+compose '^' 'Z' to '®'
+compose '.' 'Z' to '¯'
+compose ',' 'a' to '±'
+compose '/' 'l' to '³'
+compose '^' 'l' to 'µ'
+compose '\'' 's' to '¶'
+compose '^' 's' to '¹'
+compose ',' 's' to 'º'
+compose '^' 't' to '»'
+compose '\'' 'z' to '¼'
+compose '^' 'z' to '¾'
+compose '.' 'z' to '¿'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '^' 'A' to 'Â'
+compose '^' 'A' to 'Ã'
+compose ':' 'A' to 'Ä'
+compose '"' 'A' to 'Ä'
+compose '\'' 'L' to 'Å'
+compose '\'' 'C' to 'Æ'
+compose ',' 'C' to 'Ç'
+compose '^' 'C' to 'È'
+compose '\'' 'E' to 'É'
+compose ',' 'E' to 'Ê'
+compose '"' 'E' to 'Ë'
+compose '^' 'E' to 'Ì'
+compose '\'' 'I' to 'Í'
+compose '^' 'I' to 'Î'
+compose '^' 'D' to 'Ï'
+compose '-' 'D' to 'Ð'
+compose '\'' 'N' to 'Ñ'
+compose '^' 'N' to 'Ò'
+compose '\'' 'O' to 'Ó'
+compose '^' 'O' to 'Ô'
+compose '"' 'O' to 'Õ'
+compose ':' 'O' to 'Ö'
+compose '^' 'R' to 'Ø'
+compose '^' 'U' to 'Ù'
+compose '\'' 'U' to 'Ú'
+compose '"' 'U' to 'Û'
+compose ':' 'U' to 'Ü'
+compose '\'' 'Y' to 'Ý'
+compose ',' 'T' to 'Þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to 'ß'
+compose '\'' 'r' to 'à'
+compose '\'' 'a' to 'á'
+compose '^' 'a' to 'â'
+compose '^' 'a' to 'ã'
+compose ':' 'a' to 'ä'
+compose '"' 'a' to 'ä'
+compose '\'' 'l' to 'å'
+compose '\'' 'c' to 'æ'
+compose ',' 'c' to 'ç'
+compose '^' 'c' to 'è'
+compose '\'' 'e' to 'é'
+compose ',' 'e' to 'ê'
+compose ':' 'e' to 'ë'
+compose '^' 'e' to 'ì'
+compose '\'' 'i' to 'í'
+compose '^' 'e' to 'î'
+compose '^' 'd' to 'ï'
+compose '-' 'd' to 'ð'
+compose '\'' 'n' to 'ñ'
+compose '^' 'n' to 'ò'
+compose '\'' 'o' to 'ó'
+compose '^' 'o' to 'ô'
+compose ':' 'o' to 'õ'
+compose '"' 'o' to 'ö'
+compose '^' 'r' to 'ø'
+compose '^' 'u' to 'ù'
+compose '\'' 'u' to 'ú'
+compose '"' 'u' to 'û'
+compose ':' 'u' to 'ü'
+compose '\'' 'y' to 'ý'
+compose ',' 't' to 'þ'
diff --git a/keymaps/i386/qwerty/tr_q-latin5.map b/keymaps/i386/qwerty/tr_q-latin5.map
new file mode 100644
index 0000000..59cdac2
--- /dev/null
+++ b/keymaps/i386/qwerty/tr_q-latin5.map
@@ -0,0 +1,123 @@
+# turkish "Q" keyboard, copyed from LyX turkish keyboard description
+#
+# Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org>
+
+charset "iso-8859-9"
+keymaps 0-2,4-6,8-9,12
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+	alt shift keycode 2 = Meta_exclam
+keycode   3 = two              apostrophe	at
+	control keycode   3 = nul
+	control shift keycode 3 = nul
+	alt     keycode   3 = Meta_two
+	alt shift keycode 3 = Meta_at
+keycode   4 = three            dead_circumflex	numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+	alt shift keycode 4 = Meta_numbersign
+keycode   5 = four             plus           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	alt shift keycode 5 = Meta_dollar
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+	alt shift keycode 6 = Meta_percent
+keycode   7 = six              ampersand	asciicircum
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+	alt shift keycode 7 = Meta_asciicircum
+keycode   8 = seven            slash		braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft	bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright       bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal		braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = asterisk         question         backslash
+	control keycode  12 = Control_underscore
+	control shift keycode 12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = minus            underscore
+	alt     keycode  13 = Meta_equal
+keycode  14 = BackSpace           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+keycode  23 = +dotlessi         +I
+keycode  24 = o
+keycode  25 = p
+keycode  26 = +gbreve         +Gbreve
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+	alt shift keycode 26 = Meta_braceleft
+keycode  27 = udiaeresis       Udiaeresis       asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+	alt shift keycode 27 = Meta_braceright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = +scedilla        +Scedilla
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = +i               +Idotabove
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = backslash        quotedbl		asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = comma            semicolon        bar
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+	alt shift keycode 43 = Meta_bar
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = +odiaeresis      +Odiaeresis	less
+	alt     keycode  51 = Meta_comma
+	alt shift keycode 51 = Meta_less
+keycode  52 = +ccedilla        +Ccedilla	greater
+	alt     keycode  52 = Meta_period
+	alt shift keycode 52 = Meta_greater
+keycode  53 = period           colon
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/tralt.map b/keymaps/i386/qwerty/tralt.map
new file mode 100644
index 0000000..75e3613
--- /dev/null
+++ b/keymaps/i386/qwerty/tralt.map
@@ -0,0 +1,146 @@
+# tr.map
+# -cagri@tubitak.gov.tr
+charset "iso-8859-9"
+include "linux-with-alt-and-altgr"
+	plain keycode 111 = Delete
+	alt   keycode 111 = Meta_Delete
+strings as usual
+
+keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              exclam
+	alt     keycode   2 = Meta_one
+	alt shift keycode 2 = Meta_exclam
+keycode   3 = two              at               at
+	control keycode   3 = nul
+	control shift keycode 3 = nul
+	alt     keycode   3 = Meta_two
+	alt shift keycode 3 = Meta_at
+keycode   4 = three            numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+	alt shift keycode 4 = Meta_numbersign
+keycode   5 = four             dollar           dollar
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+	alt shift keycode 5 = Meta_dollar
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+	alt shift keycode 6 = Meta_percent
+keycode   7 = six              asciicircum
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+	alt shift keycode 7 = Meta_asciicircum
+keycode   8 = seven            ampersand        braceleft
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            asterisk         bracketleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenleft        bracketright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             parenright       braceright
+	alt     keycode  11 = Meta_zero
+keycode  12 = minus            underscore       backslash
+	control keycode  12 = Control_underscore
+	control shift keycode 12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = equal            plus
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+keycode  16 = q
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+	altgr	keycode 22 = +0374
+	altgr shift	keycode 22 = +0334
+	alt	keycode 22 = +0374
+	alt shift	keycode 22 = +0334
+keycode  23 = i
+	altgr	keycode  23 = +0375
+	altgr shift	keycode  23 = 0335
+	alt	keycode  23 = +0375
+	alt shift	keycode  23 = 0335
+keycode  24 = o
+	altgr	keycode  24 = +0366
+	altgr shift	keycode  24 = 0326
+	alt	keycode  24 = +0366
+	alt shift	keycode  24 = 0326
+keycode  25 = p
+keycode  26 = bracketleft      braceleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+	alt shift keycode 26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+	alt shift keycode 27 = Meta_braceright
+keycode  28 = Return
+	alt     keycode  28 = 0x080d
+keycode  29 = Control
+keycode  30 = a
+keycode  31 = s
+	altgr	keycode  31 = +0376
+	altgr shift	keycode  31 = 0336
+	alt	keycode  31 = +0376
+	alt shift	keycode  31 = 0336
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+	altgr	keycode  34 = +0360
+	altgr shift	keycode  34 = 0320
+	alt	keycode  34 = +0360
+	alt shift	keycode  34 = 0320
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = semicolon        colon
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = apostrophe       quotedbl
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = grave            asciitilde
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+	alt shift keycode 43 = Meta_bar
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+	altgr	keycode  46 = +0347
+	altgr shift	keycode  46 = 0307
+	alt	keycode  46 = +0347
+	alt shift	keycode  46 = 0307
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = comma            less
+	alt     keycode  51 = Meta_comma
+	alt shift keycode 51 = Meta_less
+keycode  52 = period           greater
+	alt     keycode  52 = Meta_period
+	alt shift keycode 52 = Meta_greater
+keycode  53 = slash            question
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/trq.map b/keymaps/i386/qwerty/trq.map
new file mode 100644
index 0000000..d96cce2
--- /dev/null
+++ b/keymaps/i386/qwerty/trq.map
@@ -0,0 +1,128 @@
+charset "iso-8859-9"
+keymaps 0-6,8-9,12
+include "linux-with-alt-and-altgr"
+	plain keycode 111 = Delete
+	alt   keycode 111 = Meta_Delete
+strings as usual
+
+keycode   1 = Escape
+	alt       keycode   1 = Meta_Escape
+keycode   2 = one exclam
+	alt       keycode   2 = Meta_one
+	alt shift keycode   2 = Meta_exclam
+keycode   3 = two apostrophe
+	control   keycode   3 = nul
+	control shift keycode 3 = nul
+	alt       keycode   3 = Meta_two
+	alt shift keycode   3 = Meta_apostrophe
+keycode   4 = three asciicircum numbersign
+	control   keycode   4 = Escape
+	alt       keycode   4 = Meta_three
+	alt shift keycode   4 = Meta_asciicircum
+keycode   5 = four plus dollar
+	control   keycode   5 = Control_backslash
+	alt       keycode   5 = Meta_four
+	alt shift keycode   5 = Meta_plus
+keycode   6 = five percent
+	control   keycode   6 = Control_bracketright
+	alt       keycode   6 = Meta_five
+	alt shift keycode   6 = Meta_percent
+keycode   7 = six ampersand
+	control   keycode   7 = Control_asciicircum
+	alt       keycode   7 = Meta_six
+	alt shift keycode   7 = Meta_ampersand
+keycode   8 = seven slash braceleft
+	control   keycode   8 = Control_underscore
+	alt       keycode   8 = Meta_seven
+	alt shift keycode   8 = Meta_slash
+keycode   9 = eight parenleft bracketleft
+	control   keycode   9 = Delete
+	alt       keycode   9 = Meta_eight
+	alt shift keycode   9 = Meta_parenleft
+keycode  10 = nine parenright bracketright
+	alt       keycode  10 = Meta_nine
+	alt shift keycode  10 = Meta_parenright
+keycode  11 = zero equal braceright
+	alt       keycode  11 = Meta_zero
+	alt shift keycode  11 = Meta_equal
+keycode  12 = asterisk question backslash
+	control   keycode  12 = Control_underscore
+	control shift keycode 12 = Control_underscore
+	alt       keycode  12 = Meta_asterisk
+	alt shift keycode  12 = Meta_question
+keycode  13 = minus underscore
+	alt       keycode  13 = Meta_minus
+	alt shift keycode  13 = Meta_underscore
+keycode  14 = Delete
+	alt       keycode  14 = Meta_Delete
+keycode  15 = Tab
+	alt       keycode  15 = Meta_Tab
+keycode  16 = q
+	altgr keycode 16 = at
+keycode  17 = w
+keycode  18 = e
+keycode  19 = r
+keycode  20 = t
+keycode  21 = y
+keycode  22 = u
+	altgr keycode 22 = +0373
+	altgr shift keycode 22 = +0333
+keycode  23 = +0375 +I
+	altgr keycode 23 = +0356
+	altgr shift keycode 23 = +0316
+keycode  24 = o
+	altgr keycode 24 = +0364
+	altgr shift keycode 24 = +0324
+keycode  25 = p
+keycode  26 = +0360 +0320
+	control   keycode  26 = Escape
+keycode  27 = +0374 +0334 asciitilde
+	control   keycode  27 = Control_bracketright
+keycode  28 = Return
+	alt       keycode  28 = 0x080d
+keycode  29 = Control
+keycode  30 = a
+	altgr keycode 30 = +0342
+	altgr shift keycode 30 = +0302
+keycode  31 = s
+keycode  32 = d
+keycode  33 = f
+keycode  34 = g
+keycode  35 = h
+keycode  36 = j
+keycode  37 = k
+keycode  38 = l
+keycode  39 = +0376 +0336
+keycode  40 = +i +0335
+	control   keycode  40 = Control_g
+keycode  41 = quotedbl eacute
+	control   keycode  41 = nul
+	alt       keycode  41 = Meta_quotedbl
+keycode  42 = Shift
+keycode  43 = comma semicolon grave
+	control   keycode  43 = Control_backslash
+	alt       keycode  43 = Meta_comma
+	alt shift keycode  43 = Meta_semicolon
+keycode  44 = z
+keycode  45 = x
+keycode  46 = c
+keycode  47 = v
+keycode  48 = b
+keycode  49 = n
+keycode  50 = m
+keycode  51 = +0366 +0326
+keycode  52 = +0347 +0307
+keycode  53 = period colon slash
+	control   keycode  53 = Delete
+	alt       keycode  53 = Meta_period
+	alt shift keycode  53 = Meta_colon
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control   keycode  57 = nul
+	alt       keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less greater bar
+	alt       keycode  86 = Meta_less
+	alt shift keycode  86 = Meta_greater
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/ua-utf-ws.map b/keymaps/i386/qwerty/ua-utf-ws.map
new file mode 100644
index 0000000..4b16161
--- /dev/null
+++ b/keymaps/i386/qwerty/ua-utf-ws.map
@@ -0,0 +1,1559 @@
+keymaps 0-2,4-6,8-9,12-13,64-66,68-69,72-73,76-77,128-130,132-133,136-137,140-141,192-194,196-197,200-201,204-205
+keycode   1 = Escape           Escape          
+	alt	keycode   1 = Meta_Escape     
+	ctrlr	keycode 1 = Escape
+	shift ctrlr keycode 1 = Escape
+	alt ctrlr keycode 1 = Meta_Escape
+	ctrll	keycode 1 = Escape
+	shift ctrll keycode 1 = Escape
+	alt ctrll keycode 1 = Meta_Escape
+	ctrll ctrlr	keycode 1 = Escape
+	shift ctrll ctrlr keycode 1 = Escape
+	alt ctrll ctrlr keycode 1 = Meta_Escape
+keycode   2 = one              exclam          
+	alt	keycode   2 = Meta_one        
+	shift	alt	keycode   2 = Meta_exclam     
+	ctrlr	keycode 2 = one
+	shift ctrlr keycode 2 = exclam
+	alt ctrlr keycode 2 = Meta_one
+	shift alt ctrlr keycode 2 = Meta_exclam
+	ctrll	keycode 2 = one
+	shift ctrll keycode 2 = exclam
+	alt ctrll keycode 2 = Meta_one
+	shift alt ctrll keycode 2 = Meta_exclam
+	ctrll ctrlr	keycode 2 = one
+	shift ctrll ctrlr keycode 2 = exclam
+	alt ctrll ctrlr keycode 2 = Meta_one
+	shift alt ctrll ctrlr keycode 2 = Meta_exclam
+	altgr keycode 2 = U+221a
+keycode   3 = two              at               at              
+	control	keycode   3 = nul             
+	shift	control	keycode   3 = nul             
+	alt	keycode   3 = Meta_two        
+	shift	alt	keycode   3 = Meta_at         
+	ctrlr	keycode 3 = two
+	shift ctrlr keycode 3 = quotedbl
+	control ctrlr keycode 3 = nul
+	shift control ctrlr keycode 3 = nul
+	alt ctrlr keycode 3 = Meta_two
+	shift alt ctrlr keycode 3 = Meta_at
+	ctrll	keycode 3 = two
+	shift ctrll keycode 3 = quotedbl
+	control ctrll keycode 3 = nul
+	shift control ctrll keycode 3 = nul
+	alt ctrll keycode 3 = Meta_two
+	shift alt ctrll keycode 3 = Meta_at
+	ctrll ctrlr	keycode 3 = two
+	shift ctrll ctrlr keycode 3 = quotedbl
+	control ctrll ctrlr keycode 3 = nul
+	shift control ctrll ctrlr keycode 3 = nul
+	alt ctrll ctrlr keycode 3 = Meta_two
+	shift alt ctrll ctrlr keycode 3 = Meta_at
+	altgr keycode 3 = U+00b2
+keycode   4 = three            numbersign      
+	control	keycode   4 = Escape          
+	alt	keycode   4 = Meta_three      
+	shift	alt	keycode   4 = Meta_numbersign 
+	ctrlr	keycode 4 = three
+	shift ctrlr keycode 4 = numbersign
+	control ctrlr keycode 4 = Escape
+	shift control ctrlr keycode 4 = Escape
+	alt ctrlr keycode 4 = Meta_three
+	shift alt ctrlr keycode 4 = Meta_numbersign
+	ctrll	keycode 4 = three
+	shift ctrll keycode 4 = numbersign
+	control ctrll keycode 4 = Escape
+	shift control ctrll keycode 4 = Escape
+	alt ctrll keycode 4 = Meta_three
+	shift alt ctrll keycode 4 = Meta_numbersign
+	ctrll ctrlr	keycode 4 = three
+	shift ctrll ctrlr keycode 4 = numbersign
+	control ctrll ctrlr keycode 4 = Escape
+	shift control ctrll ctrlr keycode 4 = Escape
+	alt ctrll ctrlr keycode 4 = Meta_three
+	shift alt ctrll ctrlr keycode 4 = Meta_numbersign
+	altgr keycode 4 = U+2264
+keycode   5 = four             dollar           dollar          
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four       
+	shift	alt	keycode   5 = Meta_dollar     
+	ctrlr	keycode 5 = four
+	shift ctrlr keycode 5 = semicolon
+	control ctrlr keycode 5 = Control_backslash
+	shift control ctrlr keycode 5 = Control_backslash
+	alt ctrlr keycode 5 = Meta_four
+	shift alt ctrlr keycode 5 = Meta_dollar
+	ctrll	keycode 5 = four
+	shift ctrll keycode 5 = semicolon
+	control ctrll keycode 5 = Control_backslash
+	shift control ctrll keycode 5 = Control_backslash
+	alt ctrll keycode 5 = Meta_four
+	shift alt ctrll keycode 5 = Meta_dollar
+	ctrll ctrlr	keycode 5 = four
+	shift ctrll ctrlr keycode 5 = semicolon
+	control ctrll ctrlr keycode 5 = Control_backslash
+	shift control ctrll ctrlr keycode 5 = Control_backslash
+	alt ctrll ctrlr keycode 5 = Meta_four
+	shift alt ctrll ctrlr keycode 5 = Meta_dollar
+	altgr keycode 5 = U+2265
+keycode   6 = five             percent         
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five       
+	shift	alt	keycode   6 = Meta_percent    
+	ctrlr	keycode 6 = five
+	shift ctrlr keycode 6 = colon
+	control ctrlr keycode 6 = Control_bracketright
+	shift control ctrlr keycode 6 = Control_bracketright
+	alt ctrlr keycode 6 = Meta_five
+	shift alt ctrlr keycode 6 = Meta_percent
+	ctrll	keycode 6 = five
+	shift ctrll keycode 6 = colon
+	control ctrll keycode 6 = Control_bracketright
+	shift control ctrll keycode 6 = Control_bracketright
+	alt ctrll keycode 6 = Meta_five
+	shift alt ctrll keycode 6 = Meta_percent
+	ctrll ctrlr	keycode 6 = five
+	shift ctrll ctrlr keycode 6 = colon
+	control ctrll ctrlr keycode 6 = Control_bracketright
+	shift control ctrll ctrlr keycode 6 = Control_bracketright
+	alt ctrll ctrlr keycode 6 = Meta_five
+	shift alt ctrll ctrlr keycode 6 = Meta_percent
+	altgr keycode 6 = U+00b0
+keycode   7 = six              asciicircum     
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six        
+	shift	alt	keycode   7 = Meta_asciicircum
+	ctrlr	keycode 7 = six
+	shift ctrlr keycode 7 = comma
+	control ctrlr keycode 7 = Control_asciicircum
+	shift control ctrlr keycode 7 = Control_asciicircum
+	alt ctrlr keycode 7 = Meta_six
+	shift alt ctrlr keycode 7 = Meta_asciicircum
+	ctrll	keycode 7 = six
+	shift ctrll keycode 7 = comma
+	control ctrll keycode 7 = Control_asciicircum
+	shift control ctrll keycode 7 = Control_asciicircum
+	alt ctrll keycode 7 = Meta_six
+	shift alt ctrll keycode 7 = Meta_asciicircum
+	ctrll ctrlr	keycode 7 = six
+	shift ctrll ctrlr keycode 7 = comma
+	control ctrll ctrlr keycode 7 = Control_asciicircum
+	shift control ctrll ctrlr keycode 7 = Control_asciicircum
+	alt ctrll ctrlr keycode 7 = Meta_six
+	shift alt ctrll ctrlr keycode 7 = Meta_asciicircum
+	altgr keycode 7 = U+2248
+keycode   8 = seven            ampersand        braceleft       
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven      
+	shift alt	keycode   8 = Meta_ampersand
+	ctrlr	keycode 8 = seven
+	shift ctrlr keycode 8 = period
+	control ctrlr keycode 8 = Control_underscore
+	shift control ctrlr keycode 8 = Control_underscore
+	alt ctrlr keycode 8 = Meta_seven
+	shift alt ctrlr keycode 8 = Meta_ampersand
+	ctrll	keycode 8 = seven
+	shift ctrll keycode 8 = period
+	control ctrll keycode 8 = Control_underscore
+	shift control ctrll keycode 8 = Control_underscore
+	alt ctrll keycode 8 = Meta_seven
+	shift alt ctrll keycode 8 = Meta_ampersand
+	ctrll ctrlr	keycode 8 = seven
+	shift ctrll ctrlr keycode 8 = period
+	control ctrll ctrlr keycode 8 = Control_underscore
+	shift control ctrll ctrlr keycode 8 = Control_underscore
+	alt ctrll ctrlr keycode 8 = Meta_seven
+	shift alt ctrll ctrlr keycode 8 = Meta_ampersand
+	altgr keycode 8 = U+00b7
+keycode   9 = eight            asterisk         bracketleft     
+	control	keycode   9 = Delete          
+	alt	keycode   9 = Meta_eight      
+	shift alt	keycode   9 = Meta_asterisk
+	ctrlr	keycode 9 = eight
+	shift ctrlr keycode 9 = asterisk
+	control ctrlr keycode 9 = Delete
+	shift control ctrlr keycode 9 = Delete
+	alt ctrlr keycode 9 = Meta_eight
+	shift alt ctrlr keycode 9 = Meta_asterisk
+	ctrll	keycode 9 = eight
+	shift ctrll keycode 9 = asterisk
+	control ctrll keycode 9 = Delete
+	shift control ctrll keycode 9 = Delete
+	alt ctrll keycode 9 = Meta_eight
+	shift alt ctrll keycode 9 = Meta_asterisk
+	ctrll ctrlr	keycode 9 = eight
+	shift ctrll ctrlr keycode 9 = asterisk
+	control ctrll ctrlr keycode 9 = Delete
+	shift control ctrll ctrlr keycode 9 = Delete
+	alt ctrll ctrlr keycode 9 = Meta_eight
+	shift alt ctrll ctrlr keycode 9 = Meta_asterisk
+	altgr keycode 9 = U+00f7
+keycode  10 = nine             parenleft        bracketright    
+	alt	keycode  10 = Meta_nine       
+	shift alt	keycode  10 = Meta_parenleft
+	ctrlr	keycode 10 = nine
+	shift ctrlr keycode 10 = parenleft
+	alt ctrlr keycode 10 = Meta_nine
+	shift alt ctrlr keycode 10 = Meta_parenleft
+	ctrll	keycode 10 = nine
+	shift ctrll keycode 10 = parenleft
+	alt ctrll keycode 10 = Meta_nine
+	shift alt ctrll keycode 10 = Meta_parenleft
+	ctrll ctrlr	keycode 10 = nine
+	shift ctrll ctrlr keycode 10 = parenleft
+	alt ctrll ctrlr keycode 10 = Meta_nine
+	shift alt ctrll ctrlr keycode 10 = Meta_parenleft
+	altgr keycode 10 = U+2320
+keycode  11 = zero             parenright       braceright      
+	alt	keycode  11 = Meta_zero       
+	alt	keycode  11 = Meta_parenright
+	ctrlr	keycode 11 = zero
+	shift ctrlr keycode 11 = parenright
+	alt ctrlr keycode 11 = Meta_zero
+	shift alt ctrlr keycode 11 = Meta_parenright
+	ctrll	keycode 11 = zero
+	shift ctrll keycode 11 = parenright
+	alt ctrll keycode 11 = Meta_zero
+	shift alt ctrll keycode 11 = Meta_parenright
+	ctrll ctrlr	keycode 11 = zero
+	shift ctrll ctrlr keycode 11 = parenright
+	alt ctrll ctrlr keycode 11 = Meta_zero
+	shift alt ctrll ctrlr keycode 11 = Meta_parenright
+	altgr keycode 11 = U+2321
+keycode  12 = minus            underscore       backslash       
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus      
+	shift alt	keycode  12 = Meta_underscore
+	ctrlr	keycode 12 = minus
+	shift ctrlr keycode 12 = underscore
+	control ctrlr keycode 12 = Control_underscore
+	shift control ctrlr keycode 12 = Control_underscore
+	alt ctrlr keycode 12 = Meta_minus
+	shift alt ctrlr keycode 12 = Meta_underscore
+	ctrll	keycode 12 = minus
+	shift ctrll keycode 12 = underscore
+	control ctrll keycode 12 = Control_underscore
+	shift control ctrll keycode 12 = Control_underscore
+	alt ctrll keycode 12 = Meta_minus
+	shift alt ctrll keycode 12 = Meta_underscore
+	ctrll ctrlr	keycode 12 = minus
+	shift ctrll ctrlr keycode 12 = underscore
+	control ctrll ctrlr keycode 12 = Control_underscore
+	shift control ctrll ctrlr keycode 12 = Control_underscore
+	alt ctrll ctrlr keycode 12 = Meta_minus
+	shift alt ctrll ctrlr keycode 12 = Meta_underscore
+	altgr keycode 12 = U+2219
+keycode  13 = equal            plus            
+	alt	keycode  13 = Meta_equal      
+	shift alt	keycode  13 = Meta_plus
+	ctrlr	keycode 13 = equal
+	shift ctrlr keycode 13 = plus
+	alt ctrlr keycode 13 = Meta_equal
+	shift alt ctrlr keycode 13 = Meta_plus
+	ctrll	keycode 13 = equal
+	shift ctrll keycode 13 = plus
+	alt ctrll keycode 13 = Meta_equal
+	shift alt ctrll keycode 13 = Meta_plus
+	ctrll ctrlr	keycode 13 = equal
+	shift ctrll ctrlr keycode 13 = plus
+	alt ctrll ctrlr keycode 13 = Meta_equal
+	shift alt ctrll ctrlr keycode 13 = Meta_plus
+keycode  14 = BackSpace           Delete          
+	control	keycode  14 = BackSpace       
+	alt	keycode  14 = Meta_Delete     
+	ctrlr	keycode 14 = BackSpace
+	shift ctrlr keycode 14 = BackSpace
+	control ctrlr keycode 14 = BackSpace
+	shift control ctrlr keycode 14 = BackSpace
+	alt ctrlr keycode 14 = Meta_Delete
+	shift alt ctrlr keycode 14 = Meta_Delete
+	ctrll	keycode 14 = BackSpace
+	shift ctrll keycode 14 = BackSpace
+	control ctrll keycode 14 = BackSpace
+	shift control ctrll keycode 14 = BackSpace
+	alt ctrll keycode 14 = Meta_Delete
+	shift alt ctrll keycode 14 = Meta_Delete
+	ctrll ctrlr	keycode 14 = BackSpace
+	shift ctrll ctrlr keycode 14 = BackSpace
+	control ctrll ctrlr keycode 14 = BackSpace
+	shift control ctrll ctrlr keycode 14 = BackSpace
+	alt ctrll ctrlr keycode 14 = Meta_Delete
+	shift alt ctrll ctrlr keycode 14 = Meta_Delete
+keycode  15 = Tab              Tab             
+	alt	keycode  15 = Meta_Tab        
+	ctrlr	keycode 15 = Tab
+	shift ctrlr keycode 15 = Tab
+	alt ctrlr keycode 15 = Meta_Tab
+	shift alt ctrlr keycode 15 = Meta_Tab
+	ctrll	keycode 15 = Tab
+	shift ctrll keycode 15 = Tab
+	alt ctrll keycode 15 = Meta_Tab
+	shift alt ctrll keycode 15 = Meta_Tab
+	ctrll ctrlr	keycode 15 = Tab
+	shift ctrll ctrlr keycode 15 = Tab
+	alt ctrll ctrlr keycode 15 = Meta_Tab
+	shift alt ctrll ctrlr keycode 15 = Meta_Tab
+keycode  16 = q               
+	ctrlr	keycode	16 = U+0439
+	shift ctrlr keycode 16 = U+0419
+	control ctrlr keycode 16 = Control_q
+	shift control ctrlr keycode 16 = Control_q
+	alt ctrlr keycode 16 = Meta_q
+	shift alt ctrlr keycode 16 = Meta_Q
+	control alt ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrlr keycode 16 = Meta_Control_q
+	ctrll	keycode	16 = U+0439
+	shift ctrll keycode 16 = U+0419
+	control ctrll keycode 16 = Control_q
+	shift control ctrll keycode 16 = Control_q
+	alt ctrll keycode 16 = Meta_q
+	shift alt ctrll keycode 16 = Meta_Q
+	control alt ctrll keycode 16 = Meta_Control_q
+	shift control alt ctrll keycode 16 = Meta_Control_q
+	ctrll ctrlr	keycode	16 = U+0439
+	shift ctrll ctrlr keycode 16 = U+0419
+	control ctrll ctrlr keycode 16 = Control_q
+	shift control ctrll ctrlr keycode 16 = Control_q
+	alt ctrll ctrlr keycode 16 = Meta_q
+	shift alt ctrll ctrlr keycode 16 = Meta_Q
+	control alt ctrll ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrll ctrlr keycode 16 = Meta_Control_q
+keycode  17 = w               
+	ctrlr	keycode	17 = U+0446
+	shift ctrlr keycode 17 = U+0426
+	control ctrlr keycode 17 = Control_w
+	shift control ctrlr keycode 17 = Control_w
+	alt ctrlr keycode 17 = Meta_w
+	shift alt ctrlr keycode 17 = Meta_W
+	control alt ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrlr keycode 17 = Meta_Control_w
+	ctrll	keycode	17 = U+0446
+	shift ctrll keycode 17 = U+0426
+	control ctrll keycode 17 = Control_w
+	shift control ctrll keycode 17 = Control_w
+	alt ctrll keycode 17 = Meta_w
+	shift alt ctrll keycode 17 = Meta_W
+	control alt ctrll keycode 17 = Meta_Control_w
+	shift control alt ctrll keycode 17 = Meta_Control_w
+	ctrll ctrlr	keycode	17 = U+0446
+	shift ctrll ctrlr keycode 17 = U+0426
+	control ctrll ctrlr keycode 17 = Control_w
+	shift control ctrll ctrlr keycode 17 = Control_w
+	alt ctrll ctrlr keycode 17 = Meta_w
+	shift alt ctrll ctrlr keycode 17 = Meta_W
+	control alt ctrll ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrll ctrlr keycode 17 = Meta_Control_w
+keycode  18 = e               
+	ctrlr	keycode 18 = U+0443
+	shift ctrlr keycode 18 = U+0423
+	control ctrlr keycode 18 = Control_e
+	shift control ctrlr keycode 18 = Control_e
+	alt ctrlr keycode 18 = Meta_e
+	shift alt ctrlr keycode 18 = Meta_E
+	control alt ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrlr keycode 18 = Meta_Control_e
+	ctrll	keycode 18 = U+0443
+	shift ctrll keycode 18 = U+0423
+	control ctrll keycode 18 = Control_e
+	shift control ctrll keycode 18 = Control_e
+	alt ctrll keycode 18 = Meta_e
+	shift alt ctrll keycode 18 = Meta_E
+	control alt ctrll keycode 18 = Meta_Control_e
+	shift control alt ctrll keycode 18 = Meta_Control_e
+	ctrll ctrlr	keycode 18 = U+0443
+	shift ctrll ctrlr keycode 18 = U+0423
+	control ctrll ctrlr keycode 18 = Control_e
+	shift control ctrll ctrlr keycode 18 = Control_e
+	alt ctrll ctrlr keycode 18 = Meta_e
+	shift alt ctrll ctrlr keycode 18 = Meta_E
+	control alt ctrll ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrll ctrlr keycode 18 = Meta_Control_e
+keycode  19 = r               
+	ctrlr	keycode 19 = U+043a
+	shift ctrlr keycode 19 = U+041a
+	control ctrlr keycode 19 = Control_r
+	shift control ctrlr keycode 19 = Control_r
+	alt ctrlr keycode 19 = Meta_r
+	shift alt ctrlr keycode 19 = Meta_R
+	control alt ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrlr keycode 19 = Meta_Control_r
+	ctrll	keycode 19 = U+043a
+	shift ctrll keycode 19 = U+041a
+	control ctrll keycode 19 = Control_r
+	shift control ctrll keycode 19 = Control_r
+	alt ctrll keycode 19 = Meta_r
+	shift alt ctrll keycode 19 = Meta_R
+	control alt ctrll keycode 19 = Meta_Control_r
+	shift control alt ctrll keycode 19 = Meta_Control_r
+	ctrll ctrlr	keycode 19 = U+043a
+	shift ctrll ctrlr keycode 19 = U+041a
+	control ctrll ctrlr keycode 19 = Control_r
+	shift control ctrll ctrlr keycode 19 = Control_r
+	alt ctrll ctrlr keycode 19 = Meta_r
+	shift alt ctrll ctrlr keycode 19 = Meta_R
+	control alt ctrll ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrll ctrlr keycode 19 = Meta_Control_r
+keycode  20 = t               
+	ctrlr	keycode 20 = U+0435
+	shift ctrlr keycode 20 = U+0415
+	control ctrlr keycode 20 = Control_t
+	shift control ctrlr keycode 20 = Control_t
+	alt ctrlr keycode 20 = Meta_t
+	shift alt ctrlr keycode 20 = Meta_T
+	control alt ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrlr keycode 20 = Meta_Control_t
+	ctrll	keycode 20 = U+0435
+	shift ctrll keycode 20 = U+0415
+	control ctrll keycode 20 = Control_t
+	shift control ctrll keycode 20 = Control_t
+	alt ctrll keycode 20 = Meta_t
+	shift alt ctrll keycode 20 = Meta_T
+	control alt ctrll keycode 20 = Meta_Control_t
+	shift control alt ctrll keycode 20 = Meta_Control_t
+	ctrll ctrlr	keycode 20 = U+0435
+	shift ctrll ctrlr keycode 20 = U+0415
+	control ctrll ctrlr keycode 20 = Control_t
+	shift control ctrll ctrlr keycode 20 = Control_t
+	alt ctrll ctrlr keycode 20 = Meta_t
+	shift alt ctrll ctrlr keycode 20 = Meta_T
+	control alt ctrll ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrll ctrlr keycode 20 = Meta_Control_t
+keycode  21 = y               
+	ctrlr	keycode 21 = U+043d
+	shift ctrlr keycode 21 = U+041d
+	control ctrlr keycode 21 = Control_y
+	shift control ctrlr keycode 21 = Control_y
+	alt ctrlr keycode 21 = Meta_y
+	shift alt ctrlr keycode 21 = Meta_Y
+	control alt ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrlr keycode 21 = Meta_Control_y
+	ctrll	keycode 21 = U+043d
+	shift ctrll keycode 21 = U+041d
+	control ctrll keycode 21 = Control_y
+	shift control ctrll keycode 21 = Control_y
+	alt ctrll keycode 21 = Meta_y
+	shift alt ctrll keycode 21 = Meta_Y
+	control alt ctrll keycode 21 = Meta_Control_y
+	shift control alt ctrll keycode 21 = Meta_Control_y
+	ctrll ctrlr	keycode 21 = U+043d
+	shift ctrll ctrlr keycode 21 = U+041d
+	control ctrll ctrlr keycode 21 = Control_y
+	shift control ctrll ctrlr keycode 21 = Control_y
+	alt ctrll ctrlr keycode 21 = Meta_y
+	shift alt ctrll ctrlr keycode 21 = Meta_Y
+	control alt ctrll ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrll ctrlr keycode 21 = Meta_Control_y
+keycode  22 = u               
+	ctrlr	keycode 22 = U+0433
+	shift ctrlr keycode 22 = U+0413
+	control ctrlr keycode 22 = Control_u
+	shift control ctrlr keycode 22 = Control_u
+	alt ctrlr keycode 22 = Meta_u
+	shift alt ctrlr keycode 22 = Meta_U
+	control alt ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrlr keycode 22 = Meta_Control_u
+	ctrll	keycode 22 = U+0433
+	shift ctrll keycode 22 = U+0413
+	control ctrll keycode 22 = Control_u
+	shift control ctrll keycode 22 = Control_u
+	alt ctrll keycode 22 = Meta_u
+	shift alt ctrll keycode 22 = Meta_U
+	control alt ctrll keycode 22 = Meta_Control_u
+	shift control alt ctrll keycode 22 = Meta_Control_u
+	ctrll ctrlr	keycode 22 = U+0433
+	shift ctrll ctrlr keycode 22 = U+0413
+	control ctrll ctrlr keycode 22 = Control_u
+	shift control ctrll ctrlr keycode 22 = Control_u
+	alt ctrll ctrlr keycode 22 = Meta_u
+	shift alt ctrll ctrlr keycode 22 = Meta_U
+	control alt ctrll ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrll ctrlr keycode 22 = Meta_Control_u
+keycode  23 = i               
+	ctrlr	keycode 23 = U+0448
+	shift ctrlr keycode 23 = U+0428
+	control ctrlr keycode 23 = Control_i
+	shift control ctrlr keycode 23 = Control_i
+	alt ctrlr keycode 23 = Meta_i
+	shift alt ctrlr keycode 23 = Meta_I
+	control alt ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrlr keycode 23 = Meta_Control_i
+	ctrll	keycode 23 = U+0448
+	shift ctrll keycode 23 = U+0428
+	control ctrll keycode 23 = Control_i
+	shift control ctrll keycode 23 = Control_i
+	alt ctrll keycode 23 = Meta_i
+	shift alt ctrll keycode 23 = Meta_I
+	control alt ctrll keycode 23 = Meta_Control_i
+	shift control alt ctrll keycode 23 = Meta_Control_i
+	ctrll ctrlr	keycode 23 = U+0448
+	shift ctrll ctrlr keycode 23 = U+0428
+	control ctrll ctrlr keycode 23 = Control_i
+	shift control ctrll ctrlr keycode 23 = Control_i
+	alt ctrll ctrlr keycode 23 = Meta_i
+	shift alt ctrll ctrlr keycode 23 = Meta_I
+	control alt ctrll ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrll ctrlr keycode 23 = Meta_Control_i
+keycode  24 = o               
+	ctrlr	keycode 24 = U+0449
+	shift ctrlr keycode 24 = U+0429
+	control ctrlr keycode 24 = Control_o
+	shift control ctrlr keycode 24 = Control_o
+	alt ctrlr keycode 24 = Meta_o
+	shift alt ctrlr keycode 24 = Meta_O
+	control alt ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrlr keycode 24 = Meta_Control_o
+	ctrll	keycode 24 = U+0449
+	shift ctrll keycode 24 = U+0429
+	control ctrll keycode 24 = Control_o
+	shift control ctrll keycode 24 = Control_o
+	alt ctrll keycode 24 = Meta_o
+	shift alt ctrll keycode 24 = Meta_O
+	control alt ctrll keycode 24 = Meta_Control_o
+	shift control alt ctrll keycode 24 = Meta_Control_o
+	ctrll ctrlr	keycode 24 = U+0449
+	shift ctrll ctrlr keycode 24 = U+0429
+	control ctrll ctrlr keycode 24 = Control_o
+	shift control ctrll ctrlr keycode 24 = Control_o
+	alt ctrll ctrlr keycode 24 = Meta_o
+	shift alt ctrll ctrlr keycode 24 = Meta_O
+	control alt ctrll ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrll ctrlr keycode 24 = Meta_Control_o
+keycode  25 = p               
+	ctrlr	keycode 25 = U+0437
+	shift ctrlr keycode 25 = U+0417
+	control ctrlr keycode 25 = Control_p
+	shift control ctrlr keycode 25 = Control_p
+	alt ctrlr keycode 25 = Meta_p
+	shift alt ctrlr keycode 25 = Meta_P
+	control alt ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrlr keycode 25 = Meta_Control_p
+	ctrll	keycode 25 = U+0437
+	shift ctrll keycode 25 = U+0417
+	control ctrll keycode 25 = Control_p
+	shift control ctrll keycode 25 = Control_p
+	alt ctrll keycode 25 = Meta_p
+	shift alt ctrll keycode 25 = Meta_P
+	control alt ctrll keycode 25 = Meta_Control_p
+	shift control alt ctrll keycode 25 = Meta_Control_p
+	ctrll ctrlr	keycode 25 = U+0437
+	shift ctrll ctrlr keycode 25 = U+0417
+	control ctrll ctrlr keycode 25 = Control_p
+	shift control ctrll ctrlr keycode 25 = Control_p
+	alt ctrll ctrlr keycode 25 = Meta_p
+	shift alt ctrll ctrlr keycode 25 = Meta_P
+	control alt ctrll ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrll ctrlr keycode 25 = Meta_Control_p
+keycode  26 = bracketleft      braceleft       
+	control	keycode  26 = Escape          
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft  
+	ctrlr	keycode 26 = U+0445
+	shift ctrlr keycode 26 = U+0425
+	control ctrlr keycode 26 = Escape
+	shift control ctrlr keycode 26 = Escape
+	alt ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrlr keycode 26 = Meta_braceleft
+	ctrll	keycode 26 = U+0445
+	shift ctrll keycode 26 = U+0425
+	control ctrll keycode 26 = Escape
+	shift control ctrll keycode 26 = Escape
+	alt ctrll keycode 26 = Meta_bracketleft
+	shift alt ctrll keycode 26 = Meta_braceleft
+	ctrll ctrlr	keycode 26 = U+0445
+	shift ctrll ctrlr keycode 26 = U+0425
+	control ctrll ctrlr keycode 26 = Escape
+	shift control ctrll ctrlr keycode 26 = Escape
+	alt ctrll ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrll ctrlr keycode 26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde      
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright 
+	ctrlr	keycode 27 = U+044a
+	shift ctrlr keycode 27 = U+042a
+	control ctrlr keycode 27 = Control_bracketright
+	shift control ctrlr keycode 27 = Control_bracketright
+	alt ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrlr keycode 27 = Meta_braceright
+	control alt ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrlr keycode 27 = Meta_Control_bracketright
+	ctrll	keycode 27 = U+0457
+	shift ctrll keycode 27 = U+0407
+	control ctrll keycode 27 = Control_bracketright
+	shift control ctrll keycode 27 = Control_bracketright
+	alt ctrll keycode 27 = Meta_bracketright
+	shift alt ctrll keycode 27 = Meta_braceright
+	control alt ctrll keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll keycode 27 = Meta_Control_bracketright
+	ctrll ctrlr	keycode 27 = U+0457
+	shift ctrll ctrlr keycode 27 = U+0407
+	control ctrll ctrlr keycode 27 = Control_bracketright
+	shift control ctrll ctrlr keycode 27 = Control_bracketright
+	alt ctrll ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrll ctrlr keycode 27 = Meta_braceright
+	control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt	keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+keycode  30 = a               
+	ctrlr	keycode 30 = U+0444
+	shift ctrlr keycode 30 = U+0424
+	control ctrlr keycode 30 = Control_a
+	shift control ctrlr keycode 30 = Control_a
+	alt ctrlr keycode 30 = Meta_a
+	shift alt ctrlr keycode 30 = Meta_A
+	control alt ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrlr keycode 30 = Meta_Control_a
+	ctrll	keycode 30 = U+0444
+	shift ctrll keycode 30 = U+0424
+	control ctrll keycode 30 = Control_a
+	shift control ctrll keycode 30 = Control_a
+	alt ctrll keycode 30 = Meta_a
+	shift alt ctrll keycode 30 = Meta_A
+	control alt ctrll keycode 30 = Meta_Control_a
+	shift control alt ctrll keycode 30 = Meta_Control_a
+	ctrll ctrlr	keycode 30 = U+0444
+	shift ctrll ctrlr keycode 30 = U+0424
+	control ctrll ctrlr keycode 30 = Control_a
+	shift control ctrll ctrlr keycode 30 = Control_a
+	alt ctrll ctrlr keycode 30 = Meta_a
+	shift alt ctrll ctrlr keycode 30 = Meta_A
+	control alt ctrll ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrll ctrlr keycode 30 = Meta_Control_a
+keycode  31 = s               
+	ctrlr	keycode 31 = U+044b
+	shift ctrlr keycode 31 = U+042b
+	control ctrlr keycode 31 = Control_s
+	shift control ctrlr keycode 31 = Control_s
+	alt ctrlr keycode 31 = Meta_s
+	shift alt ctrlr keycode 31 = Meta_S
+	control alt ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrlr keycode 31 = Meta_Control_s
+	ctrll	keycode 31 = U+0456
+	shift ctrll keycode 31 = U+0406
+	control ctrll keycode 31 = Control_s
+	shift control ctrll keycode 31 = Control_s
+	alt ctrll keycode 31 = Meta_s
+	shift alt ctrll keycode 31 = Meta_S
+	control alt ctrll keycode 31 = Meta_Control_s
+	shift control alt ctrll keycode 31 = Meta_Control_s
+	ctrll ctrlr	keycode 31 = U+0456
+	shift ctrll ctrlr keycode 31 = U+0406
+	control ctrll ctrlr keycode 31 = Control_s
+	shift control ctrll ctrlr keycode 31 = Control_s
+	alt ctrll ctrlr keycode 31 = Meta_s
+	shift alt ctrll ctrlr keycode 31 = Meta_S
+	control alt ctrll ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrll ctrlr keycode 31 = Meta_Control_s
+keycode  32 = d               
+	ctrlr	keycode 32 = U+0432
+	shift ctrlr keycode 32 = U+0432
+	control ctrlr keycode 32 = Control_d
+	shift control ctrlr keycode 32 = Control_d
+	alt ctrlr keycode 32 = Meta_d
+	shift alt ctrlr keycode 32 = Meta_D
+	control alt ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrlr keycode 32 = Meta_Control_d
+	ctrll	keycode 32 = U+0432
+	shift ctrll keycode 32 = U+0432
+	control ctrll keycode 32 = Control_d
+	shift control ctrll keycode 32 = Control_d
+	alt ctrll keycode 32 = Meta_d
+	shift alt ctrll keycode 32 = Meta_D
+	control alt ctrll keycode 32 = Meta_Control_d
+	shift control alt ctrll keycode 32 = Meta_Control_d
+	ctrll ctrlr	keycode 32 = U+0432
+	shift ctrll ctrlr keycode 32 = U+0432
+	control ctrll ctrlr keycode 32 = Control_d
+	shift control ctrll ctrlr keycode 32 = Control_d
+	alt ctrll ctrlr keycode 32 = Meta_d
+	shift alt ctrll ctrlr keycode 32 = Meta_D
+	control alt ctrll ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrll ctrlr keycode 32 = Meta_Control_d
+keycode  33 = f               
+	ctrlr	keycode 33 = U+0430
+	shift ctrlr keycode 33 = U+0410
+	control ctrlr keycode 33 = Control_f
+	shift control ctrlr keycode 33 = Control_f
+	alt ctrlr keycode 33 = Meta_f
+	shift alt ctrlr keycode 33 = Meta_F
+	control alt ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrlr keycode 33 = Meta_Control_f
+	ctrll	keycode 33 = U+0430
+	shift ctrll keycode 33 = U+0410
+	control ctrll keycode 33 = Control_f
+	shift control ctrll keycode 33 = Control_f
+	alt ctrll keycode 33 = Meta_f
+	shift alt ctrll keycode 33 = Meta_F
+	control alt ctrll keycode 33 = Meta_Control_f
+	shift control alt ctrll keycode 33 = Meta_Control_f
+	ctrll ctrlr	keycode 33 = U+0430
+	shift ctrll ctrlr keycode 33 = U+0410
+	control ctrll ctrlr keycode 33 = Control_f
+	shift control ctrll ctrlr keycode 33 = Control_f
+	alt ctrll ctrlr keycode 33 = Meta_f
+	shift alt ctrll ctrlr keycode 33 = Meta_F
+	control alt ctrll ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrll ctrlr keycode 33 = Meta_Control_f
+keycode  34 = g               
+	ctrlr	keycode 34 = U+043f
+	shift ctrlr keycode 34 = U+041f
+	control ctrlr keycode 34 = Control_g
+	shift control ctrlr keycode 34 = Control_g
+	alt ctrlr keycode 34 = Meta_g
+	shift alt ctrlr keycode 34 = Meta_G
+	control alt ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrlr keycode 34 = Meta_Control_g
+	ctrll	keycode 34 = U+043f
+	shift ctrll keycode 34 = U+041f
+	control ctrll keycode 34 = Control_g
+	shift control ctrll keycode 34 = Control_g
+	alt ctrll keycode 34 = Meta_g
+	shift alt ctrll keycode 34 = Meta_G
+	control alt ctrll keycode 34 = Meta_Control_g
+	shift control alt ctrll keycode 34 = Meta_Control_g
+	ctrll ctrlr	keycode 34 = U+043f
+	shift ctrll ctrlr keycode 34 = U+041f
+	control ctrll ctrlr keycode 34 = Control_g
+	shift control ctrll ctrlr keycode 34 = Control_g
+	alt ctrll ctrlr keycode 34 = Meta_g
+	shift alt ctrll ctrlr keycode 34 = Meta_G
+	control alt ctrll ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrll ctrlr keycode 34 = Meta_Control_g
+keycode  35 = h               
+	ctrlr	keycode 35 = U+0440
+	shift ctrlr keycode 35 = U+0420
+	control ctrlr keycode 35 = Control_h
+	shift control ctrlr keycode 35 = Control_h
+	alt ctrlr keycode 35 = Meta_h
+	shift alt ctrlr keycode 35 = Meta_H
+	control alt ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrlr keycode 35 = Meta_Control_h
+	ctrll	keycode 35 = U+0440
+	shift ctrll keycode 35 = U+0420
+	control ctrll keycode 35 = Control_h
+	shift control ctrll keycode 35 = Control_h
+	alt ctrll keycode 35 = Meta_h
+	shift alt ctrll keycode 35 = Meta_H
+	control alt ctrll keycode 35 = Meta_Control_h
+	shift control alt ctrll keycode 35 = Meta_Control_h
+	ctrll ctrlr	keycode 35 = U+0440
+	shift ctrll ctrlr keycode 35 = U+0420
+	control ctrll ctrlr keycode 35 = Control_h
+	shift control ctrll ctrlr keycode 35 = Control_h
+	alt ctrll ctrlr keycode 35 = Meta_h
+	shift alt ctrll ctrlr keycode 35 = Meta_H
+	control alt ctrll ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrll ctrlr keycode 35 = Meta_Control_h
+keycode  36 = j               
+	ctrlr	keycode 36 = U+043e
+	shift ctrlr keycode 36 = U+041e
+	control ctrlr keycode 36 = Control_j
+	shift control ctrlr keycode 36 = Control_j
+	alt ctrlr keycode 36 = Meta_j
+	shift alt ctrlr keycode 36 = Meta_J
+	control alt ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrlr keycode 36 = Meta_Control_j
+	ctrll	keycode 36 = U+043e
+	shift ctrll keycode 36 = U+041e
+	control ctrll keycode 36 = Control_j
+	shift control ctrll keycode 36 = Control_j
+	alt ctrll keycode 36 = Meta_j
+	shift alt ctrll keycode 36 = Meta_J
+	control alt ctrll keycode 36 = Meta_Control_j
+	shift control alt ctrll keycode 36 = Meta_Control_j
+	ctrll ctrlr	keycode 36 = U+043e
+	shift ctrll ctrlr keycode 36 = U+041e
+	control ctrll ctrlr keycode 36 = Control_j
+	shift control ctrll ctrlr keycode 36 = Control_j
+	alt ctrll ctrlr keycode 36 = Meta_j
+	shift alt ctrll ctrlr keycode 36 = Meta_J
+	control alt ctrll ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrll ctrlr keycode 36 = Meta_Control_j
+keycode  37 = k               
+	ctrlr	keycode 37 = U+043b
+	shift ctrlr keycode 37 = U+041b
+	control ctrlr keycode 37 = Control_k
+	shift control ctrlr keycode 37 = Control_k
+	alt ctrlr keycode 37 = Meta_k
+	shift alt ctrlr keycode 37 = Meta_K
+	control alt ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrlr keycode 37 = Meta_Control_k
+	ctrll	keycode 37 = U+043b
+	shift ctrll keycode 37 = U+041b
+	control ctrll keycode 37 = Control_k
+	shift control ctrll keycode 37 = Control_k
+	alt ctrll keycode 37 = Meta_k
+	shift alt ctrll keycode 37 = Meta_K
+	control alt ctrll keycode 37 = Meta_Control_k
+	shift control alt ctrll keycode 37 = Meta_Control_k
+	ctrll ctrlr	keycode 37 = U+043b
+	shift ctrll ctrlr keycode 37 = U+041b
+	control ctrll ctrlr keycode 37 = Control_k
+	shift control ctrll ctrlr keycode 37 = Control_k
+	alt ctrll ctrlr keycode 37 = Meta_k
+	shift alt ctrll ctrlr keycode 37 = Meta_K
+	control alt ctrll ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrll ctrlr keycode 37 = Meta_Control_k
+keycode  38 = l               
+	ctrlr	keycode 38 = U+0434
+	shift ctrlr keycode 38 = U+0414
+	control ctrlr keycode 38 = Control_l
+	shift control ctrlr keycode 38 = Control_l
+	alt ctrlr keycode 38 = Meta_l
+	shift alt ctrlr keycode 38 = Meta_L
+	control alt ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrlr keycode 38 = Meta_Control_l
+	ctrll	keycode 38 = U+0434
+	shift ctrll keycode 38 = U+0414
+	control ctrll keycode 38 = Control_l
+	shift control ctrll keycode 38 = Control_l
+	alt ctrll keycode 38 = Meta_l
+	shift alt ctrll keycode 38 = Meta_L
+	control alt ctrll keycode 38 = Meta_Control_l
+	shift control alt ctrll keycode 38 = Meta_Control_l
+	ctrll ctrlr	keycode 38 = U+0434
+	shift ctrll ctrlr keycode 38 = U+0414
+	control ctrll ctrlr keycode 38 = Control_l
+	shift control ctrll ctrlr keycode 38 = Control_l
+	alt ctrll ctrlr keycode 38 = Meta_l
+	shift alt ctrll ctrlr keycode 38 = Meta_L
+	control alt ctrll ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrll ctrlr keycode 38 = Meta_Control_l
+keycode  39 = semicolon        colon           
+	alt	keycode  39 = Meta_semicolon  
+	shift	alt	keycode	 39 = Meta_colon
+	ctrlr	keycode 39 = U+0436
+	shift ctrlr keycode 39 = U+0416
+	alt ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrlr keycode 39 = Meta_colon
+	ctrll	keycode 39 = U+0436
+	shift ctrll keycode 39 = U+0416
+	alt ctrll keycode 39 = Meta_semicolon
+	shift alt ctrll keycode 39 = Meta_colon
+	ctrll ctrlr	keycode 39 = U+0436
+	shift ctrll ctrlr keycode 39 = U+0416
+	alt ctrll ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrll ctrlr keycode 39 = Meta_colon
+keycode  40 = apostrophe       quotedbl        
+	control	keycode  40 = Control_g       
+	alt	keycode  40 = Meta_apostrophe 
+	shift	alt	keycode 40 = Meta_quotedbl
+	ctrlr	keycode 40 = U+044d
+	shift ctrlr keycode 40 = U+042d
+	control ctrlr keycode 40 = Control_g
+	shift control ctrlr keycode 40 = Control_g
+	alt ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrlr keycode 40 = Meta_quotedbl
+	ctrll	keycode 40 = U+0454
+	shift ctrll keycode 40 = U+0404
+	control ctrll keycode 40 = Control_g
+	shift control ctrll keycode 40 = Control_g
+	alt ctrll keycode 40 = Meta_apostrophe
+	shift alt ctrll keycode 40 = Meta_quotedbl
+	ctrll ctrlr	keycode 40 = U+0454
+	shift ctrll ctrlr keycode 40 = U+0404
+	control ctrll ctrlr keycode 40 = Control_g
+	shift control ctrll ctrlr keycode 40 = Control_g
+	alt ctrll ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrll ctrlr keycode 40 = Meta_quotedbl
+keycode  41 = grave            asciitilde      
+	control	keycode  41 = nul             
+	alt	keycode  41 = Meta_grave      
+	shift	alt	keycode 41 = Meta_asciitilde
+	ctrlr	keycode 41 = apostrophe
+	shift ctrlr keycode 41 = question
+	control ctrlr keycode 41 = nul
+	shift control ctrlr keycode 41 = nul
+	alt ctrlr keycode 41 = Meta_grave
+	shift alt ctrlr keycode 41 = Meta_asciitilde
+	ctrll	keycode 41 = apostrophe
+	shift ctrll keycode 41 = question
+	control ctrll keycode 41 = nul
+	shift control ctrll keycode 41 = nul
+	alt ctrll keycode 41 = Meta_grave
+	shift alt ctrll keycode 41 = Meta_asciitilde
+	ctrll ctrlr	keycode 41 = apostrophe
+	shift ctrll ctrlr keycode 41 = question
+	control ctrll ctrlr keycode 41 = nul
+	shift control ctrll ctrlr keycode 41 = nul
+	alt ctrll ctrlr keycode 41 = Meta_grave
+	shift alt ctrll ctrlr keycode 41 = Meta_asciitilde
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash  
+	shift	alt	keycode  43 = Meta_bar        
+	control alt	keycode 43 = Meta_Control_backslash
+	shift control alt keycode 43 = Meta_Control_backslash
+	ctrlr	keycode 43 = backslash
+	shift ctrlr keycode 43 = bar
+	control ctrlr keycode 43 = Control_backslash
+	shift control ctrlr keycode 43 = Control_backslash
+	alt ctrlr keycode 43 = Meta_backslash
+	shift alt ctrlr keycode 43 = Meta_bar
+	control alt ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrlr keycode 43 = Meta_Control_backslash
+	ctrll	keycode 43 = backslash
+	shift ctrll keycode 43 = bar
+	control ctrll keycode 43 = Control_backslash
+	shift control ctrll keycode 43 = Control_backslash
+	alt ctrll keycode 43 = Meta_backslash
+	shift alt ctrll keycode 43 = Meta_bar
+	control alt ctrll keycode 43 = Meta_Control_backslash
+	shift control alt ctrll keycode 43 = Meta_Control_backslash
+	ctrll ctrlr	keycode 43 = backslash
+	shift ctrll ctrlr keycode 43 = bar
+	control ctrll ctrlr keycode 43 = Control_backslash
+	shift control ctrll ctrlr keycode 43 = Control_backslash
+	alt ctrll ctrlr keycode 43 = Meta_backslash
+	shift alt ctrll ctrlr keycode 43 = Meta_bar
+	control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+keycode  44 = z               
+	ctrlr	keycode 44 = U+044f
+	shift ctrlr keycode 44 = U+042f
+	control ctrlr keycode 44 = Control_z
+	shift control ctrlr keycode 44 = Control_z
+	alt ctrlr keycode 44 = Meta_z
+	shift alt ctrlr keycode 44 = Meta_Z
+	control alt ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrlr keycode 44 = Meta_Control_z
+	ctrll	keycode 44 = U+044f
+	shift ctrll keycode 44 = U+042f
+	control ctrll keycode 44 = Control_z
+	shift control ctrll keycode 44 = Control_z
+	alt ctrll keycode 44 = Meta_z
+	shift alt ctrll keycode 44 = Meta_Z
+	control alt ctrll keycode 44 = Meta_Control_z
+	shift control alt ctrll keycode 44 = Meta_Control_z
+	ctrll ctrlr	keycode 44 = U+044f
+	shift ctrll ctrlr keycode 44 = U+042f
+	control ctrll ctrlr keycode 44 = Control_z
+	shift control ctrll ctrlr keycode 44 = Control_z
+	alt ctrll ctrlr keycode 44 = Meta_z
+	shift alt ctrll ctrlr keycode 44 = Meta_Z
+	control alt ctrll ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrll ctrlr keycode 44 = Meta_Control_z
+keycode  45 = x               
+	ctrlr	keycode 45 = U+0447
+	shift ctrlr keycode 45 = U+0427
+	control ctrlr keycode 45 = Control_x
+	shift control ctrlr keycode 45 = Control_x
+	alt ctrlr keycode 45 = Meta_x
+	shift alt ctrlr keycode 45 = Meta_X
+	control alt ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrlr keycode 45 = Meta_Control_x
+	ctrll	keycode 45 = U+0447
+	shift ctrll keycode 45 = U+0427
+	control ctrll keycode 45 = Control_x
+	shift control ctrll keycode 45 = Control_x
+	alt ctrll keycode 45 = Meta_x
+	shift alt ctrll keycode 45 = Meta_X
+	control alt ctrll keycode 45 = Meta_Control_x
+	shift control alt ctrll keycode 45 = Meta_Control_x
+	ctrll ctrlr	keycode 45 = U+0447
+	shift ctrll ctrlr keycode 45 = U+0427
+	control ctrll ctrlr keycode 45 = Control_x
+	shift control ctrll ctrlr keycode 45 = Control_x
+	alt ctrll ctrlr keycode 45 = Meta_x
+	shift alt ctrll ctrlr keycode 45 = Meta_X
+	control alt ctrll ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrll ctrlr keycode 45 = Meta_Control_x
+keycode  46 = c               
+	ctrlr	keycode 46 = U+0441
+	shift ctrlr keycode 46 = U+0421
+	control ctrlr keycode 46 = Control_c
+	shift control ctrlr keycode 46 = Control_c
+	alt ctrlr keycode 46 = Meta_c
+	shift alt ctrlr keycode 46 = Meta_C
+	control alt ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrlr keycode 46 = Meta_Control_c
+	ctrll	keycode 46 = U+0441
+	shift ctrll keycode 46 = U+0421
+	control ctrll keycode 46 = Control_c
+	shift control ctrll keycode 46 = Control_c
+	alt ctrll keycode 46 = Meta_c
+	shift alt ctrll keycode 46 = Meta_C
+	control alt ctrll keycode 46 = Meta_Control_c
+	shift control alt ctrll keycode 46 = Meta_Control_c
+	ctrll ctrlr	keycode 46 = U+0441
+	shift ctrll ctrlr keycode 46 = U+0421
+	control ctrll ctrlr keycode 46 = Control_c
+	shift control ctrll ctrlr keycode 46 = Control_c
+	alt ctrll ctrlr keycode 46 = Meta_c
+	shift alt ctrll ctrlr keycode 46 = Meta_C
+	control alt ctrll ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrll ctrlr keycode 46 = Meta_Control_c
+keycode  47 = v               
+	ctrlr	keycode 47 = U+043c
+	shift ctrlr keycode 47 = U+041c
+	control ctrlr keycode 47 = Control_v
+	shift control ctrlr keycode 47 = Control_v
+	alt ctrlr keycode 47 = Meta_v
+	shift alt ctrlr keycode 47 = Meta_V
+	control alt ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrlr keycode 47 = Meta_Control_v
+	ctrll	keycode 47 = U+043c
+	shift ctrll keycode 47 = U+041c
+	control ctrll keycode 47 = Control_v
+	shift control ctrll keycode 47 = Control_v
+	alt ctrll keycode 47 = Meta_v
+	shift alt ctrll keycode 47 = Meta_V
+	control alt ctrll keycode 47 = Meta_Control_v
+	shift control alt ctrll keycode 47 = Meta_Control_v
+	ctrll ctrlr	keycode 47 = U+043c
+	shift ctrll ctrlr keycode 47 = U+041c
+	control ctrll ctrlr keycode 47 = Control_v
+	shift control ctrll ctrlr keycode 47 = Control_v
+	alt ctrll ctrlr keycode 47 = Meta_v
+	shift alt ctrll ctrlr keycode 47 = Meta_V
+	control alt ctrll ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrll ctrlr keycode 47 = Meta_Control_v
+keycode  48 = b               
+	ctrlr	keycode	48 = U+0438
+	shift ctrlr keycode 48 = U+0418
+	control ctrlr keycode 48 = Control_b
+	shift control ctrlr keycode 48 = Control_b
+	alt ctrlr keycode 48 = Meta_b
+	shift alt ctrlr keycode 48 = Meta_B
+	control alt ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrlr keycode 48 = Meta_Control_b
+	ctrll	keycode	48 = U+0438
+	shift ctrll keycode 48 = U+0418
+	control ctrll keycode 48 = Control_b
+	shift control ctrll keycode 48 = Control_b
+	alt ctrll keycode 48 = Meta_b
+	shift alt ctrll keycode 48 = Meta_B
+	control alt ctrll keycode 48 = Meta_Control_b
+	shift control alt ctrll keycode 48 = Meta_Control_b
+	ctrll ctrlr	keycode	48 = U+0438
+	shift ctrll ctrlr keycode 48 = U+0418
+	control ctrll ctrlr keycode 48 = Control_b
+	shift control ctrll ctrlr keycode 48 = Control_b
+	alt ctrll ctrlr keycode 48 = Meta_b
+	shift alt ctrll ctrlr keycode 48 = Meta_B
+	control alt ctrll ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrll ctrlr keycode 48 = Meta_Control_b
+keycode  49 = n               
+	ctrlr	keycode 49 = U+0442
+	shift ctrlr keycode 49 = U+0422
+	control ctrlr keycode 49 = Control_n
+	shift control ctrlr keycode 49 = Control_n
+	alt ctrlr keycode 49 = Meta_n
+	shift alt ctrlr keycode 49 = Meta_N
+	control alt ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrlr keycode 49 = Meta_Control_n
+	ctrll	keycode 49 = U+0442
+	shift ctrll keycode 49 = U+0422
+	control ctrll keycode 49 = Control_n
+	shift control ctrll keycode 49 = Control_n
+	alt ctrll keycode 49 = Meta_n
+	shift alt ctrll keycode 49 = Meta_N
+	control alt ctrll keycode 49 = Meta_Control_n
+	shift control alt ctrll keycode 49 = Meta_Control_n
+	ctrll ctrlr	keycode 49 = U+0442
+	shift ctrll ctrlr keycode 49 = U+0422
+	control ctrll ctrlr keycode 49 = Control_n
+	shift control ctrll ctrlr keycode 49 = Control_n
+	alt ctrll ctrlr keycode 49 = Meta_n
+	shift alt ctrll ctrlr keycode 49 = Meta_N
+	control alt ctrll ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrll ctrlr keycode 49 = Meta_Control_n
+keycode  50 = m               
+	ctrlr	keycode 50 = U+044c
+	shift ctrlr keycode 50 = U+042c
+	control ctrlr keycode 50 = Control_m
+	shift control ctrlr keycode 50 = Control_m
+	alt ctrlr keycode 50 = Meta_m
+	shift alt ctrlr keycode 50 = Meta_M
+	control alt ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrlr keycode 50 = Meta_Control_m
+	ctrll	keycode 50 = U+044c
+	shift ctrll keycode 50 = U+042c
+	control ctrll keycode 50 = Control_m
+	shift control ctrll keycode 50 = Control_m
+	alt ctrll keycode 50 = Meta_m
+	shift alt ctrll keycode 50 = Meta_M
+	control alt ctrll keycode 50 = Meta_Control_m
+	shift control alt ctrll keycode 50 = Meta_Control_m
+	ctrll ctrlr	keycode 50 = U+044c
+	shift ctrll ctrlr keycode 50 = U+042c
+	control ctrll ctrlr keycode 50 = Control_m
+	shift control ctrll ctrlr keycode 50 = Control_m
+	alt ctrll ctrlr keycode 50 = Meta_m
+	shift alt ctrll ctrlr keycode 50 = Meta_M
+	control alt ctrll ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrll ctrlr keycode 50 = Meta_Control_m
+keycode  51 = comma            less            
+	alt	keycode  51 = Meta_comma      
+	shift	alt	keycode  51 = Meta_less       
+	ctrlr	keycode 51 = U+0431
+	shift ctrlr keycode 51 = U+0411
+	alt ctrlr keycode 51 = Meta_comma
+	shift alt ctrlr keycode 51 = Meta_less
+	ctrll	keycode 51 = U+0431
+	shift ctrll keycode 51 = U+0411
+	alt ctrll keycode 51 = Meta_comma
+	shift alt ctrll keycode 51 = Meta_less
+	ctrll ctrlr	keycode 51 = U+0431
+	shift ctrll ctrlr keycode 51 = U+0411
+	alt ctrll ctrlr keycode 51 = Meta_comma
+	shift alt ctrll ctrlr keycode 51 = Meta_less
+keycode  52 = period           greater         
+	control	keycode  52 = Compose         
+	alt	keycode  52 = Meta_period     
+	shift	alt	keycode  52 = Meta_greater    
+	ctrlr	keycode 52 = U+044e
+	shift ctrlr keycode 52 = U+042e
+	alt ctrlr keycode 52 = Meta_period
+	shift alt ctrlr keycode 52 = Meta_greater
+	ctrll	keycode 52 = U+044e
+	shift ctrll keycode 52 = U+042e
+	alt ctrll keycode 52 = Meta_period
+	shift alt ctrll keycode 52 = Meta_greater
+	ctrll ctrlr	keycode 52 = U+044e
+	shift ctrll ctrlr keycode 52 = U+042e
+	alt ctrll ctrlr keycode 52 = Meta_period
+	shift alt ctrll ctrlr keycode 52 = Meta_greater
+keycode  53 = slash            question        
+	control	keycode  53 = Delete          
+	shift	control	keycode  53 = Delete          
+	alt	keycode  53 = Meta_slash      
+	ctrlr	keycode 53 = U+0451
+	shift ctrlr keycode 53 = U+0401
+	alt ctrlr keycode 53 = Meta_slash
+	shift alt ctrlr keycode 53 = Meta_question
+	ctrll	keycode 53 = U+0491
+	shift ctrll keycode 53 = U+0490
+	alt ctrll keycode 53 = Meta_slash
+	shift alt ctrll keycode 53 = Meta_question
+	ctrll ctrlr	keycode 53 = U+0491
+	shift ctrll ctrlr keycode 53 = U+0490
+	alt ctrll ctrlr keycode 53 = Meta_slash
+	shift alt ctrll ctrlr keycode 53 = Meta_question
+keycode  54 = Shift           
+keycode  55 = KP_Multiply     
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control	keycode  57 = nul             
+	alt	keycode  57 = Meta_space      
+	ctrlr	keycode 57 = space
+	shift ctrlr keycode 57 = space
+	control ctrlr keycode 57 = nul
+	shift control ctrlr keycode 57 = nul
+	alt ctrlr keycode 57 = Meta_space
+	shift alt ctrlr keycode 57 = Meta_space
+	ctrll	keycode 57 = space
+	shift ctrll keycode 57 = space
+	control ctrll keycode 57 = nul
+	shift control ctrll keycode 57 = nul
+	alt ctrll keycode 57 = Meta_space
+	shift alt ctrll keycode 57 = Meta_space
+	ctrll ctrlr	keycode 57 = space
+	shift ctrll ctrlr keycode 57 = space
+	control ctrll ctrlr keycode 57 = nul
+	shift control ctrll ctrlr keycode 57 = nul
+	alt ctrll ctrlr keycode 57 = Meta_space
+	shift alt ctrll ctrlr keycode 57 = Meta_space
+keycode  58 = Caps_Lock       
+keycode  59 = F1               F13              Console_13      
+	control	keycode  59 = F25             
+	shift	control	keycode  59 = F37             
+	alt	keycode  59 = Console_1       
+	control	alt	keycode  59 = Console_1       
+	ctrlr keycode  59 = F1
+	ctrlr shift keycode 59 = F13
+	ctrlr altgr keycode 59 = Console_13      
+	ctrlr control	keycode  59 = F25             
+	ctrlr shift	control	keycode  59 = F37             
+	ctrlr alt	keycode  59 = Console_1       
+	ctrlr control	alt	keycode  59 = Console_1       
+	ctrll keycode  59 = F1
+	ctrll shift keycode 59 = F13
+	ctrll altgr keycode 59 = Console_13      
+	ctrll control	keycode  59 = F25             
+	ctrll shift	control	keycode  59 = F37             
+	ctrll alt	keycode  59 = Console_1       
+	ctrll control	alt	keycode  59 = Console_1       
+	ctrlr ctrll keycode  59 = F1
+	ctrlr ctrll shift keycode 59 = F13
+	ctrlr ctrll altgr keycode 59 = Console_13      
+	ctrlr ctrll control	keycode  59 = F25             
+	ctrlr ctrll shift	control	keycode  59 = F37             
+	ctrlr ctrll alt	keycode  59 = Console_1       
+	ctrlr ctrll control	alt	keycode  59 = Console_1       
+keycode  60 = F2               F14              Console_14      
+	control	keycode  60 = F26             
+	shift	control	keycode  60 = F38             
+	alt	keycode  60 = Console_2       
+	control	alt	keycode  60 = Console_2       
+	ctrlr keycode  60 = F2
+	ctrlr shift keycode 60 = F14
+	ctrlr altgr keycode 60 = Console_14      
+	ctrlr control	keycode  60 = F26             
+	ctrlr shift	control	keycode  60 = F38             
+	ctrlr alt	keycode  60 = Console_2       
+	ctrlr control	alt	keycode  60 = Console_2       
+	ctrll keycode  60 = F2
+	ctrll shift keycode 60 = F14
+	ctrll altgr keycode 60 = Console_14      
+	ctrll control	keycode  60 = F26             
+	ctrll shift	control	keycode  60 = F38             
+	ctrll alt	keycode  60 = Console_2       
+	ctrll control	alt	keycode  60 = Console_2       
+	ctrlr ctrll keycode  60 = F2
+	ctrlr ctrll shift keycode 60 = F14
+	ctrlr ctrll altgr keycode 60 = Console_14      
+	ctrlr ctrll control	keycode  60 = F26             
+	ctrlr ctrll shift	control	keycode  60 = F38             
+	ctrlr ctrll alt	keycode  60 = Console_2       
+	ctrlr ctrll control	alt	keycode  60 = Console_2       
+keycode  61 = F3               F15              Console_15      
+	control	keycode  61 = F27             
+	shift	control	keycode  61 = F39             
+	alt	keycode  61 = Console_3       
+	control	alt	keycode  61 = Console_3       
+	ctrlr keycode  61 = F3
+	ctrlr shift keycode 61 = F15
+	ctrlr altgr keycode 61 = Console_15      
+	ctrlr control	keycode  61 = F27             
+	ctrlr shift	control	keycode  61 = F39             
+	ctrlr alt	keycode  61 = Console_3       
+	ctrlr control	alt	keycode  61 = Console_3       
+	ctrll keycode  61 = F3
+	ctrll shift keycode 61 = F15
+	ctrll altgr keycode 61 = Console_15      
+	ctrll control	keycode  61 = F27             
+	ctrll shift	control	keycode  61 = F39             
+	ctrll alt	keycode  61 = Console_3       
+	ctrll control	alt	keycode  61 = Console_3       
+	ctrlr ctrll keycode  61 = F3
+	ctrlr ctrll shift keycode 61 = F15
+	ctrlr ctrll altgr keycode 61 = Console_15      
+	ctrlr ctrll control	keycode  61 = F27             
+	ctrlr ctrll shift	control	keycode  61 = F39             
+	ctrlr ctrll alt	keycode  61 = Console_3       
+	ctrlr ctrll control	alt	keycode  61 = Console_3       
+keycode  62 = F4               F16              Console_16      
+	control	keycode  62 = F28             
+	shift	control	keycode  62 = F40             
+	alt	keycode  62 = Console_4       
+	control	alt	keycode  62 = Console_4       
+	ctrlr keycode  62 = F4
+	ctrlr shift keycode 62 = F16
+	ctrlr altgr keycode 62 = Console_16      
+	ctrlr control	keycode  62 = F28             
+	ctrlr shift	control	keycode  62 = F40             
+	ctrlr alt	keycode  62 = Console_4       
+	ctrlr control	alt	keycode  62 = Console_4       
+	ctrll keycode  62 = F4
+	ctrll shift keycode 62 = F16
+	ctrll altgr keycode 62 = Console_16      
+	ctrll control	keycode  62 = F28             
+	ctrll shift	control	keycode  62 = F40             
+	ctrll alt	keycode  62 = Console_4       
+	ctrll control	alt	keycode  62 = Console_4       
+	ctrlr ctrll keycode  62 = F4
+	ctrlr ctrll shift keycode 62 = F16
+	ctrlr ctrll altgr keycode 62 = Console_16      
+	ctrlr ctrll control	keycode  62 = F28             
+	ctrlr ctrll shift	control	keycode  62 = F40             
+	ctrlr ctrll alt	keycode  62 = Console_4       
+	ctrlr ctrll control	alt	keycode  62 = Console_4       
+keycode  63 = F5               F17              Console_17      
+	control	keycode  63 = F29             
+	shift	control	keycode  63 = F41             
+	alt	keycode  63 = Console_5       
+	control	alt	keycode  63 = Console_5       
+	ctrlr keycode  63 = F5
+	ctrlr shift keycode 63 = F17
+	ctrlr altgr keycode 63 = Console_17      
+	ctrlr control	keycode  63 = F29             
+	ctrlr shift	control	keycode  63 = F41             
+	ctrlr alt	keycode  63 = Console_5       
+	ctrlr control	alt	keycode  63 = Console_5       
+	ctrll keycode  63 = F5
+	ctrll shift keycode 63 = F17
+	ctrll altgr keycode 63 = Console_17      
+	ctrll control	keycode  63 = F29             
+	ctrll shift	control	keycode  63 = F41             
+	ctrll alt	keycode  63 = Console_5       
+	ctrll control	alt	keycode  63 = Console_5       
+	ctrlr ctrll keycode  63 = F5
+	ctrlr ctrll shift keycode 63 = F17
+	ctrlr ctrll altgr keycode 63 = Console_17      
+	ctrlr ctrll control	keycode  63 = F29             
+	ctrlr ctrll shift	control	keycode  63 = F41             
+	ctrlr ctrll alt	keycode  63 = Console_5       
+	ctrlr ctrll control	alt	keycode  63 = Console_5       
+keycode  64 = F6               F18              Console_18      
+	control	keycode  64 = F30             
+	shift	control	keycode  64 = F42             
+	alt	keycode  64 = Console_6       
+	control	alt	keycode  64 = Console_6       
+	ctrlr keycode  64 = F6
+	ctrlr shift keycode 64 = F18
+	ctrlr altgr keycode 64 = Console_18      
+	ctrlr control	keycode  64 = F30             
+	ctrlr shift	control	keycode  64 = F42             
+	ctrlr alt	keycode  64 = Console_6       
+	ctrlr control	alt	keycode  64 = Console_6       
+	ctrll keycode  64 = F6
+	ctrll shift keycode 64 = F18
+	ctrll altgr keycode 64 = Console_18      
+	ctrll control	keycode  64 = F30             
+	ctrll shift	control	keycode  64 = F42             
+	ctrll alt	keycode  64 = Console_6       
+	ctrll control	alt	keycode  64 = Console_6       
+	ctrlr ctrll keycode  64 = F6
+	ctrlr ctrll shift keycode 64 = F18
+	ctrlr ctrll altgr keycode 64 = Console_18      
+	ctrlr ctrll control	keycode  64 = F30             
+	ctrlr ctrll shift	control	keycode  64 = F42             
+	ctrlr ctrll alt	keycode  64 = Console_6       
+	ctrlr ctrll control	alt	keycode  64 = Console_6       
+keycode  65 = F7               F19              Console_19      
+	control	keycode  65 = F31             
+	shift	control	keycode  65 = F43             
+	alt	keycode  65 = Console_7       
+	control	alt	keycode  65 = Console_7       
+	ctrlr keycode  65 = F7
+	ctrlr shift keycode 65 = F19
+	ctrlr altgr keycode 65 = Console_19      
+	ctrlr control	keycode  65 = F31             
+	ctrlr shift	control	keycode  65 = F43             
+	ctrlr alt	keycode  65 = Console_7       
+	ctrlr control	alt	keycode  65 = Console_7       
+	ctrll keycode  65 = F7
+	ctrll shift keycode 65 = F19
+	ctrll altgr keycode 65 = Console_19      
+	ctrll control	keycode  65 = F31             
+	ctrll shift	control	keycode  65 = F43             
+	ctrll alt	keycode  65 = Console_7       
+	ctrll control	alt	keycode  65 = Console_7       
+	ctrlr ctrll keycode  65 = F7
+	ctrlr ctrll shift keycode 65 = F19
+	ctrlr ctrll altgr keycode 65 = Console_19      
+	ctrlr ctrll control	keycode  65 = F31             
+	ctrlr ctrll shift	control	keycode  65 = F43             
+	ctrlr ctrll alt	keycode  65 = Console_7       
+	ctrlr ctrll control	alt	keycode  65 = Console_7       
+keycode  66 = F8               F20              Console_20      
+	control	keycode  66 = F32             
+	shift	control	keycode  66 = F44             
+	alt	keycode  66 = Console_8       
+	control	alt	keycode  66 = Console_8       
+	ctrlr keycode  66 = F8
+	ctrlr shift keycode 66 = F20
+	ctrlr altgr keycode 66 = Console_20      
+	ctrlr control	keycode  66 = F32             
+	ctrlr shift	control	keycode  66 = F44             
+	ctrlr alt	keycode  66 = Console_8       
+	ctrlr control	alt	keycode  66 = Console_8       
+	ctrll keycode  66 = F8
+	ctrll shift keycode 66 = F20
+	ctrll altgr keycode 66 = Console_20      
+	ctrll control	keycode  66 = F32             
+	ctrll shift	control	keycode  66 = F44             
+	ctrll alt	keycode  66 = Console_8       
+	ctrll control	alt	keycode  66 = Console_8       
+	ctrlr ctrll keycode  66 = F8
+	ctrlr ctrll shift keycode 66 = F20
+	ctrlr ctrll altgr keycode 66 = Console_20      
+	ctrlr ctrll control	keycode  66 = F32             
+	ctrlr ctrll shift	control	keycode  66 = F44             
+	ctrlr ctrll alt	keycode  66 = Console_8       
+	ctrlr ctrll control	alt	keycode  66 = Console_8       
+keycode  67 = F9               F21              Console_21      
+	control	keycode  67 = F33             
+	shift	control	keycode  67 = F45             
+	alt	keycode  67 = Console_9       
+	control	alt	keycode  67 = Console_9       
+	ctrlr keycode  67 = F9
+	ctrlr shift keycode 67 = F21
+	ctrlr altgr keycode 67 = Console_21      
+	ctrlr control	keycode  67 = F33             
+	ctrlr shift	control	keycode  67 = F45             
+	ctrlr alt	keycode  67 = Console_9       
+	ctrlr control	alt	keycode  67 = Console_9       
+	ctrll keycode  67 = F9
+	ctrll shift keycode 67 = F21
+	ctrll altgr keycode 67 = Console_21      
+	ctrll control	keycode  67 = F33             
+	ctrll shift	control	keycode  67 = F45             
+	ctrll alt	keycode  67 = Console_9       
+	ctrll control	alt	keycode  67 = Console_9       
+	ctrlr ctrll keycode  67 = F9
+	ctrlr ctrll shift keycode 67 = F21
+	ctrlr ctrll altgr keycode 67 = Console_21      
+	ctrlr ctrll control	keycode  67 = F33             
+	ctrlr ctrll shift	control	keycode  67 = F45             
+	ctrlr ctrll alt	keycode  67 = Console_9       
+	ctrlr ctrll control	alt	keycode  67 = Console_9       
+keycode  68 = F10              F22              Console_22      
+	control	keycode  68 = F34             
+	shift	control	keycode  68 = F46             
+	alt	keycode  68 = Console_10      
+	control	alt	keycode  68 = Console_10      
+	ctrlr keycode  68 = F10
+	ctrlr shift keycode 68 = F22
+	ctrlr altgr keycode 68 = Console_22      
+	ctrlr control	keycode  68 = F34             
+	ctrlr shift	control	keycode  68 = F46             
+	ctrlr alt	keycode  68 = Console_10       
+	ctrlr control	alt	keycode  68 = Console_10       
+	ctrll keycode  68 = F10
+	ctrll shift keycode 68 = F22
+	ctrll altgr keycode 68 = Console_22      
+	ctrll control	keycode  68 = F34             
+	ctrll shift	control	keycode  68 = F46             
+	ctrll alt	keycode  68 = Console_10       
+	ctrll control	alt	keycode  68 = Console_10       
+	ctrlr ctrll keycode  68 = F10
+	ctrlr ctrll shift keycode 68 = F22
+	ctrlr ctrll altgr keycode 68 = Console_22      
+	ctrlr ctrll control	keycode  68 = F34             
+	ctrlr ctrll shift	control	keycode  68 = F46             
+	ctrlr ctrll alt	keycode  68 = Console_10       
+	ctrlr ctrll control	alt	keycode  68 = Console_10       
+keycode  69 = Num_Lock        
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
+	control	keycode  70 = Show_State      
+	alt	keycode  70 = Scroll_Lock     
+keycode  71 = KP_7            
+	alt	keycode  71 = Ascii_7         
+keycode  72 = KP_8            
+	alt	keycode  72 = Ascii_8         
+keycode  73 = KP_9            
+	alt	keycode  73 = Ascii_9         
+keycode  74 = KP_Subtract     
+keycode  75 = KP_4            
+	alt	keycode  75 = Ascii_4         
+keycode  76 = KP_5            
+	alt	keycode  76 = Ascii_5         
+keycode  77 = KP_6            
+	alt	keycode  77 = Ascii_6         
+keycode  78 = KP_Add          
+keycode  79 = KP_1            
+	alt	keycode  79 = Ascii_1         
+keycode  80 = KP_2            
+	alt	keycode  80 = Ascii_2         
+keycode  81 = KP_3            
+	alt	keycode  81 = Ascii_3         
+keycode  82 = KP_0            
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_Period       
+	altgr	control	keycode  83 = Boot            
+	control	alt	keycode  83 = Boot            
+keycode  84 = Last_Console    
+keycode  85 =
+keycode  86 = less             greater          bar             
+	alt	keycode  86 = Meta_less       
+keycode  87 = F11              F23              Console_23      
+	control	keycode  87 = F35             
+	shift	control	keycode  87 = F47             
+	alt	keycode  87 = Console_11      
+	control	alt	keycode  87 = Console_11      
+	ctrlr keycode  87 = F11
+	ctrlr shift keycode 87 = F23
+	ctrlr altgr keycode 87 = Console_23      
+	ctrlr control	keycode  87 = F35             
+	ctrlr shift	control	keycode  87 = F47             
+	ctrlr alt	keycode  87 = Console_11       
+	ctrlr control	alt	keycode  87 = Console_11       
+	ctrll keycode  87 = F11
+	ctrll shift keycode 87 = F23
+	ctrll altgr keycode 87 = Console_23      
+	ctrll control	keycode  87 = F35             
+	ctrll shift	control	keycode  87 = F47             
+	ctrll alt	keycode  87 = Console_11       
+	ctrll control	alt	keycode  87 = Console_11       
+	ctrlr ctrll keycode  87 = F11
+	ctrlr ctrll shift keycode 87 = F23
+	ctrlr ctrll altgr keycode 87 = Console_23      
+	ctrlr ctrll control	keycode  87 = F35             
+	ctrlr ctrll shift	control	keycode  87 = F47             
+	ctrlr ctrll alt	keycode  87 = Console_11       
+	ctrlr ctrll control	alt	keycode  87 = Console_11       
+keycode  88 = F12              F24              Console_24      
+	control	keycode  88 = F36             
+	shift	control	keycode  88 = F48             
+	alt	keycode  88 = Console_12      
+	control	alt	keycode  88 = Console_12      
+	ctrlr keycode  88 = F12
+	ctrlr shift keycode 88 = F24
+	ctrlr altgr keycode 88 = Console_24      
+	ctrlr control	keycode  88 = F36             
+	ctrlr shift	control	keycode  88 = F48             
+	ctrlr alt	keycode  88 = Console_12       
+	ctrlr control	alt	keycode  88 = Console_12       
+	ctrll keycode  88 = F12
+	ctrll shift keycode 88 = F24
+	ctrll altgr keycode 88 = Console_24      
+	ctrll control	keycode  88 = F36             
+	ctrll shift	control	keycode  88 = F48             
+	ctrll alt	keycode  88 = Console_12       
+	ctrll control	alt	keycode  88 = Console_12       
+	ctrlr ctrll keycode  88 = F12
+	ctrlr ctrll shift keycode 88 = F24
+	ctrlr ctrll altgr keycode 88 = Console_24      
+	ctrlr ctrll control	keycode  88 = F36             
+	ctrlr ctrll shift	control	keycode  88 = F48             
+	ctrlr ctrll alt	keycode  88 = Console_12       
+	ctrlr ctrll control	alt	keycode  88 = Console_12       
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter        
+keycode 97 = Control
+ctrlr keycode 97 = CtrlL_Lock
+ctrll keycode 97 = CtrlL_Lock
+ctrll ctrlr keycode 97 = CtrlL_Lock
+keycode  98 = KP_Divide       
+keycode  99 = Control_backslash
+	control	keycode  99 = Control_backslash
+	alt	keycode  99 = Control_backslash
+keycode 100 = Alt
+ctrll keycode 100 = CtrlR_Lock
+ctrlr keycode 100 = CtrlR_Lock
+ctrll ctrlr keycode 100 = CtrlR_Lock
+keycode 101 = Break           
+keycode 102 = Find            
+keycode 103 = Up              
+keycode 104 = Prior           
+	shift	keycode 104 = Scroll_Backward 
+keycode 105 = Left            
+	alt	keycode 105 = Decr_Console    
+keycode 106 = Right           
+	alt	keycode 106 = Incr_Console    
+keycode 107 = Select          
+keycode 108 = Down            
+keycode 109 = Next            
+	shift	keycode 109 = Scroll_Forward  
+keycode 110 = Insert          
+keycode 111 = Remove          
+	altgr	control	keycode 111 = Boot            
+	control	alt	keycode 111 = Boot            
+keycode 112 = Macro           
+keycode 113 = F13             
+keycode 114 = F14             
+keycode 115 = Help            
+keycode 116 = Do              
+keycode 117 = F17             
+keycode 118 = KP_MinPlus      
+keycode 119 = Pause           
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 = AltGr
+keycode 126 = CtrlR_Lock
+keycode 127 = CtrlL_Lock
diff --git a/keymaps/i386/qwerty/ua-utf.map b/keymaps/i386/qwerty/ua-utf.map
new file mode 100644
index 0000000..9c1edef
--- /dev/null
+++ b/keymaps/i386/qwerty/ua-utf.map
@@ -0,0 +1,1549 @@
+keymaps 0-2,4-6,8-9,12-13,64-66,68-69,72-73,76-77,128-130,132-133,136-137,140-141,192-194,196-197,200-201,204-205
+strings as usual
+keycode   1 = Escape           Escape          
+	alt	keycode   1 = Meta_Escape     
+	ctrlr	keycode 1 = Escape
+	shift ctrlr keycode 1 = Escape
+	alt ctrlr keycode 1 = Meta_Escape
+	ctrll	keycode 1 = Escape
+	shift ctrll keycode 1 = Escape
+	alt ctrll keycode 1 = Meta_Escape
+	ctrll ctrlr	keycode 1 = Escape
+	shift ctrll ctrlr keycode 1 = Escape
+	alt ctrll ctrlr keycode 1 = Meta_Escape
+keycode   2 = one              exclam          
+	alt	keycode   2 = Meta_one        
+	shift	alt	keycode   2 = Meta_exclam     
+	ctrlr	keycode 2 = one
+	shift ctrlr keycode 2 = exclam
+	alt ctrlr keycode 2 = Meta_one
+	shift alt ctrlr keycode 2 = Meta_exclam
+	ctrll	keycode 2 = one
+	shift ctrll keycode 2 = exclam
+	alt ctrll keycode 2 = Meta_one
+	shift alt ctrll keycode 2 = Meta_exclam
+	ctrll ctrlr	keycode 2 = one
+	shift ctrll ctrlr keycode 2 = exclam
+	alt ctrll ctrlr keycode 2 = Meta_one
+	shift alt ctrll ctrlr keycode 2 = Meta_exclam
+keycode   3 = two              at               at              
+	control	keycode   3 = nul             
+	shift	control	keycode   3 = nul             
+	alt	keycode   3 = Meta_two        
+	shift	alt	keycode   3 = Meta_at         
+	ctrlr	keycode 3 = two
+	shift ctrlr keycode 3 = quotedbl
+	control ctrlr keycode 3 = nul
+	shift control ctrlr keycode 3 = nul
+	alt ctrlr keycode 3 = Meta_two
+	shift alt ctrlr keycode 3 = Meta_at
+	ctrll	keycode 3 = two
+	shift ctrll keycode 3 = quotedbl
+	control ctrll keycode 3 = nul
+	shift control ctrll keycode 3 = nul
+	alt ctrll keycode 3 = Meta_two
+	shift alt ctrll keycode 3 = Meta_at
+	ctrll ctrlr	keycode 3 = two
+	shift ctrll ctrlr keycode 3 = quotedbl
+	control ctrll ctrlr keycode 3 = nul
+	shift control ctrll ctrlr keycode 3 = nul
+	alt ctrll ctrlr keycode 3 = Meta_two
+	shift alt ctrll ctrlr keycode 3 = Meta_at
+keycode   4 = three            numbersign      
+	control	keycode   4 = Escape          
+	alt	keycode   4 = Meta_three      
+	shift	alt	keycode   4 = Meta_numbersign 
+	ctrlr	keycode 4 = three
+	shift ctrlr keycode 4 = numbersign
+	control ctrlr keycode 4 = Escape
+	shift control ctrlr keycode 4 = Escape
+	alt ctrlr keycode 4 = Meta_three
+	shift alt ctrlr keycode 4 = Meta_numbersign
+	ctrll	keycode 4 = three
+	shift ctrll keycode 4 = numbersign
+	control ctrll keycode 4 = Escape
+	shift control ctrll keycode 4 = Escape
+	alt ctrll keycode 4 = Meta_three
+	shift alt ctrll keycode 4 = Meta_numbersign
+	ctrll ctrlr	keycode 4 = three
+	shift ctrll ctrlr keycode 4 = numbersign
+	control ctrll ctrlr keycode 4 = Escape
+	shift control ctrll ctrlr keycode 4 = Escape
+	alt ctrll ctrlr keycode 4 = Meta_three
+	shift alt ctrll ctrlr keycode 4 = Meta_numbersign
+keycode   5 = four             dollar           dollar          
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four       
+	shift	alt	keycode   5 = Meta_dollar     
+	ctrlr	keycode 5 = four
+	shift ctrlr keycode 5 = semicolon
+	control ctrlr keycode 5 = Control_backslash
+	shift control ctrlr keycode 5 = Control_backslash
+	alt ctrlr keycode 5 = Meta_four
+	shift alt ctrlr keycode 5 = Meta_dollar
+	ctrll	keycode 5 = four
+	shift ctrll keycode 5 = semicolon
+	control ctrll keycode 5 = Control_backslash
+	shift control ctrll keycode 5 = Control_backslash
+	alt ctrll keycode 5 = Meta_four
+	shift alt ctrll keycode 5 = Meta_dollar
+	ctrll ctrlr	keycode 5 = four
+	shift ctrll ctrlr keycode 5 = semicolon
+	control ctrll ctrlr keycode 5 = Control_backslash
+	shift control ctrll ctrlr keycode 5 = Control_backslash
+	alt ctrll ctrlr keycode 5 = Meta_four
+	shift alt ctrll ctrlr keycode 5 = Meta_dollar
+keycode   6 = five             percent         
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five       
+	shift	alt	keycode   6 = Meta_percent    
+	ctrlr	keycode 6 = five
+	shift ctrlr keycode 6 = colon
+	control ctrlr keycode 6 = Control_bracketright
+	shift control ctrlr keycode 6 = Control_bracketright
+	alt ctrlr keycode 6 = Meta_five
+	shift alt ctrlr keycode 6 = Meta_percent
+	ctrll	keycode 6 = five
+	shift ctrll keycode 6 = colon
+	control ctrll keycode 6 = Control_bracketright
+	shift control ctrll keycode 6 = Control_bracketright
+	alt ctrll keycode 6 = Meta_five
+	shift alt ctrll keycode 6 = Meta_percent
+	ctrll ctrlr	keycode 6 = five
+	shift ctrll ctrlr keycode 6 = colon
+	control ctrll ctrlr keycode 6 = Control_bracketright
+	shift control ctrll ctrlr keycode 6 = Control_bracketright
+	alt ctrll ctrlr keycode 6 = Meta_five
+	shift alt ctrll ctrlr keycode 6 = Meta_percent
+keycode   7 = six              asciicircum     
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six        
+	shift	alt	keycode   7 = Meta_asciicircum
+	ctrlr	keycode 7 = six
+	shift ctrlr keycode 7 = comma
+	control ctrlr keycode 7 = Control_asciicircum
+	shift control ctrlr keycode 7 = Control_asciicircum
+	alt ctrlr keycode 7 = Meta_six
+	shift alt ctrlr keycode 7 = Meta_asciicircum
+	ctrll	keycode 7 = six
+	shift ctrll keycode 7 = comma
+	control ctrll keycode 7 = Control_asciicircum
+	shift control ctrll keycode 7 = Control_asciicircum
+	alt ctrll keycode 7 = Meta_six
+	shift alt ctrll keycode 7 = Meta_asciicircum
+	ctrll ctrlr	keycode 7 = six
+	shift ctrll ctrlr keycode 7 = comma
+	control ctrll ctrlr keycode 7 = Control_asciicircum
+	shift control ctrll ctrlr keycode 7 = Control_asciicircum
+	alt ctrll ctrlr keycode 7 = Meta_six
+	shift alt ctrll ctrlr keycode 7 = Meta_asciicircum
+keycode   8 = seven            ampersand        braceleft       
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven      
+	shift alt	keycode   8 = Meta_ampersand
+	ctrlr	keycode 8 = seven
+	shift ctrlr keycode 8 = period
+	control ctrlr keycode 8 = Control_underscore
+	shift control ctrlr keycode 8 = Control_underscore
+	alt ctrlr keycode 8 = Meta_seven
+	shift alt ctrlr keycode 8 = Meta_ampersand
+	ctrll	keycode 8 = seven
+	shift ctrll keycode 8 = period
+	control ctrll keycode 8 = Control_underscore
+	shift control ctrll keycode 8 = Control_underscore
+	alt ctrll keycode 8 = Meta_seven
+	shift alt ctrll keycode 8 = Meta_ampersand
+	ctrll ctrlr	keycode 8 = seven
+	shift ctrll ctrlr keycode 8 = period
+	control ctrll ctrlr keycode 8 = Control_underscore
+	shift control ctrll ctrlr keycode 8 = Control_underscore
+	alt ctrll ctrlr keycode 8 = Meta_seven
+	shift alt ctrll ctrlr keycode 8 = Meta_ampersand
+keycode   9 = eight            asterisk         bracketleft     
+	control	keycode   9 = Delete          
+	alt	keycode   9 = Meta_eight      
+	shift alt	keycode   9 = Meta_asterisk
+	ctrlr	keycode 9 = eight
+	shift ctrlr keycode 9 = asterisk
+	control ctrlr keycode 9 = Delete
+	shift control ctrlr keycode 9 = Delete
+	alt ctrlr keycode 9 = Meta_eight
+	shift alt ctrlr keycode 9 = Meta_asterisk
+	ctrll	keycode 9 = eight
+	shift ctrll keycode 9 = asterisk
+	control ctrll keycode 9 = Delete
+	shift control ctrll keycode 9 = Delete
+	alt ctrll keycode 9 = Meta_eight
+	shift alt ctrll keycode 9 = Meta_asterisk
+	ctrll ctrlr	keycode 9 = eight
+	shift ctrll ctrlr keycode 9 = asterisk
+	control ctrll ctrlr keycode 9 = Delete
+	shift control ctrll ctrlr keycode 9 = Delete
+	alt ctrll ctrlr keycode 9 = Meta_eight
+	shift alt ctrll ctrlr keycode 9 = Meta_asterisk
+keycode  10 = nine             parenleft        bracketright    
+	alt	keycode  10 = Meta_nine       
+	shift alt	keycode  10 = Meta_parenleft
+	ctrlr	keycode 10 = nine
+	shift ctrlr keycode 10 = parenleft
+	alt ctrlr keycode 10 = Meta_nine
+	shift alt ctrlr keycode 10 = Meta_parenleft
+	ctrll	keycode 10 = nine
+	shift ctrll keycode 10 = parenleft
+	alt ctrll keycode 10 = Meta_nine
+	shift alt ctrll keycode 10 = Meta_parenleft
+	ctrll ctrlr	keycode 10 = nine
+	shift ctrll ctrlr keycode 10 = parenleft
+	alt ctrll ctrlr keycode 10 = Meta_nine
+	shift alt ctrll ctrlr keycode 10 = Meta_parenleft
+keycode  11 = zero             parenright       braceright      
+	alt	keycode  11 = Meta_zero       
+	alt	keycode  11 = Meta_parenright
+	ctrlr	keycode 11 = zero
+	shift ctrlr keycode 11 = parenright
+	alt ctrlr keycode 11 = Meta_zero
+	shift alt ctrlr keycode 11 = Meta_parenright
+	ctrll	keycode 11 = zero
+	shift ctrll keycode 11 = parenright
+	alt ctrll keycode 11 = Meta_zero
+	shift alt ctrll keycode 11 = Meta_parenright
+	ctrll ctrlr	keycode 11 = zero
+	shift ctrll ctrlr keycode 11 = parenright
+	alt ctrll ctrlr keycode 11 = Meta_zero
+	shift alt ctrll ctrlr keycode 11 = Meta_parenright
+keycode  12 = minus            underscore       backslash       
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus      
+	shift alt	keycode  12 = Meta_underscore
+	ctrlr	keycode 12 = minus
+	shift ctrlr keycode 12 = underscore
+	control ctrlr keycode 12 = Control_underscore
+	shift control ctrlr keycode 12 = Control_underscore
+	alt ctrlr keycode 12 = Meta_minus
+	shift alt ctrlr keycode 12 = Meta_underscore
+	ctrll	keycode 12 = minus
+	shift ctrll keycode 12 = underscore
+	control ctrll keycode 12 = Control_underscore
+	shift control ctrll keycode 12 = Control_underscore
+	alt ctrll keycode 12 = Meta_minus
+	shift alt ctrll keycode 12 = Meta_underscore
+	ctrll ctrlr	keycode 12 = minus
+	shift ctrll ctrlr keycode 12 = underscore
+	control ctrll ctrlr keycode 12 = Control_underscore
+	shift control ctrll ctrlr keycode 12 = Control_underscore
+	alt ctrll ctrlr keycode 12 = Meta_minus
+	shift alt ctrll ctrlr keycode 12 = Meta_underscore
+keycode  13 = equal            plus            
+	alt	keycode  13 = Meta_equal      
+	shift alt	keycode  13 = Meta_plus
+	ctrlr	keycode 13 = equal
+	shift ctrlr keycode 13 = plus
+	alt ctrlr keycode 13 = Meta_equal
+	shift alt ctrlr keycode 13 = Meta_plus
+	ctrll	keycode 13 = equal
+	shift ctrll keycode 13 = plus
+	alt ctrll keycode 13 = Meta_equal
+	shift alt ctrll keycode 13 = Meta_plus
+	ctrll ctrlr	keycode 13 = equal
+	shift ctrll ctrlr keycode 13 = plus
+	alt ctrll ctrlr keycode 13 = Meta_equal
+	shift alt ctrll ctrlr keycode 13 = Meta_plus
+keycode  14 = BackSpace           Delete          
+	control	keycode  14 = BackSpace       
+	alt	keycode  14 = Meta_Delete     
+	ctrlr	keycode 14 = BackSpace
+	shift ctrlr keycode 14 = BackSpace
+	control ctrlr keycode 14 = BackSpace
+	shift control ctrlr keycode 14 = BackSpace
+	alt ctrlr keycode 14 = Meta_Delete
+	shift alt ctrlr keycode 14 = Meta_Delete
+	ctrll	keycode 14 = BackSpace
+	shift ctrll keycode 14 = BackSpace
+	control ctrll keycode 14 = BackSpace
+	shift control ctrll keycode 14 = BackSpace
+	alt ctrll keycode 14 = Meta_Delete
+	shift alt ctrll keycode 14 = Meta_Delete
+	ctrll ctrlr	keycode 14 = BackSpace
+	shift ctrll ctrlr keycode 14 = BackSpace
+	control ctrll ctrlr keycode 14 = BackSpace
+	shift control ctrll ctrlr keycode 14 = BackSpace
+	alt ctrll ctrlr keycode 14 = Meta_Delete
+	shift alt ctrll ctrlr keycode 14 = Meta_Delete
+keycode  15 = Tab              Tab             
+	alt	keycode  15 = Meta_Tab        
+	ctrlr	keycode 15 = Tab
+	shift ctrlr keycode 15 = Tab
+	alt ctrlr keycode 15 = Meta_Tab
+	shift alt ctrlr keycode 15 = Meta_Tab
+	ctrll	keycode 15 = Tab
+	shift ctrll keycode 15 = Tab
+	alt ctrll keycode 15 = Meta_Tab
+	shift alt ctrll keycode 15 = Meta_Tab
+	ctrll ctrlr	keycode 15 = Tab
+	shift ctrll ctrlr keycode 15 = Tab
+	alt ctrll ctrlr keycode 15 = Meta_Tab
+	shift alt ctrll ctrlr keycode 15 = Meta_Tab
+keycode  16 = q               
+	ctrlr	keycode	16 = U+0439
+	shift ctrlr keycode 16 = U+0419
+	control ctrlr keycode 16 = Control_q
+	shift control ctrlr keycode 16 = Control_q
+	alt ctrlr keycode 16 = Meta_q
+	shift alt ctrlr keycode 16 = Meta_Q
+	control alt ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrlr keycode 16 = Meta_Control_q
+	ctrll	keycode	16 = U+0439
+	shift ctrll keycode 16 = U+0419
+	control ctrll keycode 16 = Control_q
+	shift control ctrll keycode 16 = Control_q
+	alt ctrll keycode 16 = Meta_q
+	shift alt ctrll keycode 16 = Meta_Q
+	control alt ctrll keycode 16 = Meta_Control_q
+	shift control alt ctrll keycode 16 = Meta_Control_q
+	ctrll ctrlr	keycode	16 = U+0439
+	shift ctrll ctrlr keycode 16 = U+0419
+	control ctrll ctrlr keycode 16 = Control_q
+	shift control ctrll ctrlr keycode 16 = Control_q
+	alt ctrll ctrlr keycode 16 = Meta_q
+	shift alt ctrll ctrlr keycode 16 = Meta_Q
+	control alt ctrll ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrll ctrlr keycode 16 = Meta_Control_q
+keycode  17 = w               
+	ctrlr	keycode	17 = U+0446
+	shift ctrlr keycode 17 = U+0426
+	control ctrlr keycode 17 = Control_w
+	shift control ctrlr keycode 17 = Control_w
+	alt ctrlr keycode 17 = Meta_w
+	shift alt ctrlr keycode 17 = Meta_W
+	control alt ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrlr keycode 17 = Meta_Control_w
+	ctrll	keycode	17 = U+0446
+	shift ctrll keycode 17 = U+0426
+	control ctrll keycode 17 = Control_w
+	shift control ctrll keycode 17 = Control_w
+	alt ctrll keycode 17 = Meta_w
+	shift alt ctrll keycode 17 = Meta_W
+	control alt ctrll keycode 17 = Meta_Control_w
+	shift control alt ctrll keycode 17 = Meta_Control_w
+	ctrll ctrlr	keycode	17 = U+0446
+	shift ctrll ctrlr keycode 17 = U+0426
+	control ctrll ctrlr keycode 17 = Control_w
+	shift control ctrll ctrlr keycode 17 = Control_w
+	alt ctrll ctrlr keycode 17 = Meta_w
+	shift alt ctrll ctrlr keycode 17 = Meta_W
+	control alt ctrll ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrll ctrlr keycode 17 = Meta_Control_w
+keycode  18 = e               
+	ctrlr	keycode 18 = U+0443
+	shift ctrlr keycode 18 = U+0423
+	control ctrlr keycode 18 = Control_e
+	shift control ctrlr keycode 18 = Control_e
+	alt ctrlr keycode 18 = Meta_e
+	shift alt ctrlr keycode 18 = Meta_E
+	control alt ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrlr keycode 18 = Meta_Control_e
+	ctrll	keycode 18 = U+0443
+	shift ctrll keycode 18 = U+0423
+	control ctrll keycode 18 = Control_e
+	shift control ctrll keycode 18 = Control_e
+	alt ctrll keycode 18 = Meta_e
+	shift alt ctrll keycode 18 = Meta_E
+	control alt ctrll keycode 18 = Meta_Control_e
+	shift control alt ctrll keycode 18 = Meta_Control_e
+	ctrll ctrlr	keycode 18 = U+0443
+	shift ctrll ctrlr keycode 18 = U+0423
+	control ctrll ctrlr keycode 18 = Control_e
+	shift control ctrll ctrlr keycode 18 = Control_e
+	alt ctrll ctrlr keycode 18 = Meta_e
+	shift alt ctrll ctrlr keycode 18 = Meta_E
+	control alt ctrll ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrll ctrlr keycode 18 = Meta_Control_e
+keycode  19 = r               
+	ctrlr	keycode 19 = U+043a
+	shift ctrlr keycode 19 = U+041a
+	control ctrlr keycode 19 = Control_r
+	shift control ctrlr keycode 19 = Control_r
+	alt ctrlr keycode 19 = Meta_r
+	shift alt ctrlr keycode 19 = Meta_R
+	control alt ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrlr keycode 19 = Meta_Control_r
+	ctrll	keycode 19 = U+043a
+	shift ctrll keycode 19 = U+041a
+	control ctrll keycode 19 = Control_r
+	shift control ctrll keycode 19 = Control_r
+	alt ctrll keycode 19 = Meta_r
+	shift alt ctrll keycode 19 = Meta_R
+	control alt ctrll keycode 19 = Meta_Control_r
+	shift control alt ctrll keycode 19 = Meta_Control_r
+	ctrll ctrlr	keycode 19 = U+043a
+	shift ctrll ctrlr keycode 19 = U+041a
+	control ctrll ctrlr keycode 19 = Control_r
+	shift control ctrll ctrlr keycode 19 = Control_r
+	alt ctrll ctrlr keycode 19 = Meta_r
+	shift alt ctrll ctrlr keycode 19 = Meta_R
+	control alt ctrll ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrll ctrlr keycode 19 = Meta_Control_r
+keycode  20 = t               
+	ctrlr	keycode 20 = U+0435
+	shift ctrlr keycode 20 = U+0415
+	control ctrlr keycode 20 = Control_t
+	shift control ctrlr keycode 20 = Control_t
+	alt ctrlr keycode 20 = Meta_t
+	shift alt ctrlr keycode 20 = Meta_T
+	control alt ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrlr keycode 20 = Meta_Control_t
+	ctrll	keycode 20 = U+0435
+	shift ctrll keycode 20 = U+0415
+	control ctrll keycode 20 = Control_t
+	shift control ctrll keycode 20 = Control_t
+	alt ctrll keycode 20 = Meta_t
+	shift alt ctrll keycode 20 = Meta_T
+	control alt ctrll keycode 20 = Meta_Control_t
+	shift control alt ctrll keycode 20 = Meta_Control_t
+	ctrll ctrlr	keycode 20 = U+0435
+	shift ctrll ctrlr keycode 20 = U+0415
+	control ctrll ctrlr keycode 20 = Control_t
+	shift control ctrll ctrlr keycode 20 = Control_t
+	alt ctrll ctrlr keycode 20 = Meta_t
+	shift alt ctrll ctrlr keycode 20 = Meta_T
+	control alt ctrll ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrll ctrlr keycode 20 = Meta_Control_t
+keycode  21 = y               
+	ctrlr	keycode 21 = U+043d
+	shift ctrlr keycode 21 = U+041d
+	control ctrlr keycode 21 = Control_y
+	shift control ctrlr keycode 21 = Control_y
+	alt ctrlr keycode 21 = Meta_y
+	shift alt ctrlr keycode 21 = Meta_Y
+	control alt ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrlr keycode 21 = Meta_Control_y
+	ctrll	keycode 21 = U+043d
+	shift ctrll keycode 21 = U+041d
+	control ctrll keycode 21 = Control_y
+	shift control ctrll keycode 21 = Control_y
+	alt ctrll keycode 21 = Meta_y
+	shift alt ctrll keycode 21 = Meta_Y
+	control alt ctrll keycode 21 = Meta_Control_y
+	shift control alt ctrll keycode 21 = Meta_Control_y
+	ctrll ctrlr	keycode 21 = U+043d
+	shift ctrll ctrlr keycode 21 = U+041d
+	control ctrll ctrlr keycode 21 = Control_y
+	shift control ctrll ctrlr keycode 21 = Control_y
+	alt ctrll ctrlr keycode 21 = Meta_y
+	shift alt ctrll ctrlr keycode 21 = Meta_Y
+	control alt ctrll ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrll ctrlr keycode 21 = Meta_Control_y
+keycode  22 = u               
+	ctrlr	keycode 22 = U+0433
+	shift ctrlr keycode 22 = U+0413
+	control ctrlr keycode 22 = Control_u
+	shift control ctrlr keycode 22 = Control_u
+	alt ctrlr keycode 22 = Meta_u
+	shift alt ctrlr keycode 22 = Meta_U
+	control alt ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrlr keycode 22 = Meta_Control_u
+	ctrll	keycode 22 = U+0433
+	shift ctrll keycode 22 = U+0413
+	control ctrll keycode 22 = Control_u
+	shift control ctrll keycode 22 = Control_u
+	alt ctrll keycode 22 = Meta_u
+	shift alt ctrll keycode 22 = Meta_U
+	control alt ctrll keycode 22 = Meta_Control_u
+	shift control alt ctrll keycode 22 = Meta_Control_u
+	ctrll ctrlr	keycode 22 = U+0433
+	shift ctrll ctrlr keycode 22 = U+0413
+	control ctrll ctrlr keycode 22 = Control_u
+	shift control ctrll ctrlr keycode 22 = Control_u
+	alt ctrll ctrlr keycode 22 = Meta_u
+	shift alt ctrll ctrlr keycode 22 = Meta_U
+	control alt ctrll ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrll ctrlr keycode 22 = Meta_Control_u
+keycode  23 = i               
+	ctrlr	keycode 23 = U+0448
+	shift ctrlr keycode 23 = U+0428
+	control ctrlr keycode 23 = Control_i
+	shift control ctrlr keycode 23 = Control_i
+	alt ctrlr keycode 23 = Meta_i
+	shift alt ctrlr keycode 23 = Meta_I
+	control alt ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrlr keycode 23 = Meta_Control_i
+	ctrll	keycode 23 = U+0448
+	shift ctrll keycode 23 = U+0428
+	control ctrll keycode 23 = Control_i
+	shift control ctrll keycode 23 = Control_i
+	alt ctrll keycode 23 = Meta_i
+	shift alt ctrll keycode 23 = Meta_I
+	control alt ctrll keycode 23 = Meta_Control_i
+	shift control alt ctrll keycode 23 = Meta_Control_i
+	ctrll ctrlr	keycode 23 = U+0448
+	shift ctrll ctrlr keycode 23 = U+0428
+	control ctrll ctrlr keycode 23 = Control_i
+	shift control ctrll ctrlr keycode 23 = Control_i
+	alt ctrll ctrlr keycode 23 = Meta_i
+	shift alt ctrll ctrlr keycode 23 = Meta_I
+	control alt ctrll ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrll ctrlr keycode 23 = Meta_Control_i
+keycode  24 = o               
+	ctrlr	keycode 24 = U+0449
+	shift ctrlr keycode 24 = U+0429
+	control ctrlr keycode 24 = Control_o
+	shift control ctrlr keycode 24 = Control_o
+	alt ctrlr keycode 24 = Meta_o
+	shift alt ctrlr keycode 24 = Meta_O
+	control alt ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrlr keycode 24 = Meta_Control_o
+	ctrll	keycode 24 = U+0449
+	shift ctrll keycode 24 = U+0429
+	control ctrll keycode 24 = Control_o
+	shift control ctrll keycode 24 = Control_o
+	alt ctrll keycode 24 = Meta_o
+	shift alt ctrll keycode 24 = Meta_O
+	control alt ctrll keycode 24 = Meta_Control_o
+	shift control alt ctrll keycode 24 = Meta_Control_o
+	ctrll ctrlr	keycode 24 = U+0449
+	shift ctrll ctrlr keycode 24 = U+0429
+	control ctrll ctrlr keycode 24 = Control_o
+	shift control ctrll ctrlr keycode 24 = Control_o
+	alt ctrll ctrlr keycode 24 = Meta_o
+	shift alt ctrll ctrlr keycode 24 = Meta_O
+	control alt ctrll ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrll ctrlr keycode 24 = Meta_Control_o
+keycode  25 = p               
+	ctrlr	keycode 25 = U+0437
+	shift ctrlr keycode 25 = U+0417
+	control ctrlr keycode 25 = Control_p
+	shift control ctrlr keycode 25 = Control_p
+	alt ctrlr keycode 25 = Meta_p
+	shift alt ctrlr keycode 25 = Meta_P
+	control alt ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrlr keycode 25 = Meta_Control_p
+	ctrll	keycode 25 = U+0437
+	shift ctrll keycode 25 = U+0417
+	control ctrll keycode 25 = Control_p
+	shift control ctrll keycode 25 = Control_p
+	alt ctrll keycode 25 = Meta_p
+	shift alt ctrll keycode 25 = Meta_P
+	control alt ctrll keycode 25 = Meta_Control_p
+	shift control alt ctrll keycode 25 = Meta_Control_p
+	ctrll ctrlr	keycode 25 = U+0437
+	shift ctrll ctrlr keycode 25 = U+0417
+	control ctrll ctrlr keycode 25 = Control_p
+	shift control ctrll ctrlr keycode 25 = Control_p
+	alt ctrll ctrlr keycode 25 = Meta_p
+	shift alt ctrll ctrlr keycode 25 = Meta_P
+	control alt ctrll ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrll ctrlr keycode 25 = Meta_Control_p
+keycode  26 = bracketleft      braceleft       
+	control	keycode  26 = Escape          
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft  
+	ctrlr	keycode 26 = U+0445
+	shift ctrlr keycode 26 = U+0425
+	control ctrlr keycode 26 = Escape
+	shift control ctrlr keycode 26 = Escape
+	alt ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrlr keycode 26 = Meta_braceleft
+	ctrll	keycode 26 = U+0445
+	shift ctrll keycode 26 = U+0425
+	control ctrll keycode 26 = Escape
+	shift control ctrll keycode 26 = Escape
+	alt ctrll keycode 26 = Meta_bracketleft
+	shift alt ctrll keycode 26 = Meta_braceleft
+	ctrll ctrlr	keycode 26 = U+0445
+	shift ctrll ctrlr keycode 26 = U+0425
+	control ctrll ctrlr keycode 26 = Escape
+	shift control ctrll ctrlr keycode 26 = Escape
+	alt ctrll ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrll ctrlr keycode 26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde      
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright 
+	ctrlr	keycode 27 = U+044a
+	shift ctrlr keycode 27 = U+042a
+	control ctrlr keycode 27 = Control_bracketright
+	shift control ctrlr keycode 27 = Control_bracketright
+	alt ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrlr keycode 27 = Meta_braceright
+	control alt ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrlr keycode 27 = Meta_Control_bracketright
+	ctrll	keycode 27 = U+0457
+	shift ctrll keycode 27 = U+0407
+	control ctrll keycode 27 = Control_bracketright
+	shift control ctrll keycode 27 = Control_bracketright
+	alt ctrll keycode 27 = Meta_bracketright
+	shift alt ctrll keycode 27 = Meta_braceright
+	control alt ctrll keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll keycode 27 = Meta_Control_bracketright
+	ctrll ctrlr	keycode 27 = U+0457
+	shift ctrll ctrlr keycode 27 = U+0407
+	control ctrll ctrlr keycode 27 = Control_bracketright
+	shift control ctrll ctrlr keycode 27 = Control_bracketright
+	alt ctrll ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrll ctrlr keycode 27 = Meta_braceright
+	control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt	keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+keycode  30 = a               
+	ctrlr	keycode 30 = U+0444
+	shift ctrlr keycode 30 = U+0424
+	control ctrlr keycode 30 = Control_a
+	shift control ctrlr keycode 30 = Control_a
+	alt ctrlr keycode 30 = Meta_a
+	shift alt ctrlr keycode 30 = Meta_A
+	control alt ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrlr keycode 30 = Meta_Control_a
+	ctrll	keycode 30 = U+0444
+	shift ctrll keycode 30 = U+0424
+	control ctrll keycode 30 = Control_a
+	shift control ctrll keycode 30 = Control_a
+	alt ctrll keycode 30 = Meta_a
+	shift alt ctrll keycode 30 = Meta_A
+	control alt ctrll keycode 30 = Meta_Control_a
+	shift control alt ctrll keycode 30 = Meta_Control_a
+	ctrll ctrlr	keycode 30 = U+0444
+	shift ctrll ctrlr keycode 30 = U+0424
+	control ctrll ctrlr keycode 30 = Control_a
+	shift control ctrll ctrlr keycode 30 = Control_a
+	alt ctrll ctrlr keycode 30 = Meta_a
+	shift alt ctrll ctrlr keycode 30 = Meta_A
+	control alt ctrll ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrll ctrlr keycode 30 = Meta_Control_a
+keycode  31 = s               
+	ctrlr	keycode 31 = U+044b
+	shift ctrlr keycode 31 = U+042b
+	control ctrlr keycode 31 = Control_s
+	shift control ctrlr keycode 31 = Control_s
+	alt ctrlr keycode 31 = Meta_s
+	shift alt ctrlr keycode 31 = Meta_S
+	control alt ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrlr keycode 31 = Meta_Control_s
+	ctrll	keycode 31 = U+0456
+	shift ctrll keycode 31 = U+0406
+	control ctrll keycode 31 = Control_s
+	shift control ctrll keycode 31 = Control_s
+	alt ctrll keycode 31 = Meta_s
+	shift alt ctrll keycode 31 = Meta_S
+	control alt ctrll keycode 31 = Meta_Control_s
+	shift control alt ctrll keycode 31 = Meta_Control_s
+	ctrll ctrlr	keycode 31 = U+0456
+	shift ctrll ctrlr keycode 31 = U+0406
+	control ctrll ctrlr keycode 31 = Control_s
+	shift control ctrll ctrlr keycode 31 = Control_s
+	alt ctrll ctrlr keycode 31 = Meta_s
+	shift alt ctrll ctrlr keycode 31 = Meta_S
+	control alt ctrll ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrll ctrlr keycode 31 = Meta_Control_s
+keycode  32 = d               
+	ctrlr	keycode 32 = U+0432
+	shift ctrlr keycode 32 = U+0412
+	control ctrlr keycode 32 = Control_d
+	shift control ctrlr keycode 32 = Control_d
+	alt ctrlr keycode 32 = Meta_d
+	shift alt ctrlr keycode 32 = Meta_D
+	control alt ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrlr keycode 32 = Meta_Control_d
+	ctrll	keycode 32 = U+0432
+	shift ctrll keycode 32 = U+0412
+	control ctrll keycode 32 = Control_d
+	shift control ctrll keycode 32 = Control_d
+	alt ctrll keycode 32 = Meta_d
+	shift alt ctrll keycode 32 = Meta_D
+	control alt ctrll keycode 32 = Meta_Control_d
+	shift control alt ctrll keycode 32 = Meta_Control_d
+	ctrll ctrlr	keycode 32 = U+0432
+	shift ctrll ctrlr keycode 32 = U+0412
+	control ctrll ctrlr keycode 32 = Control_d
+	shift control ctrll ctrlr keycode 32 = Control_d
+	alt ctrll ctrlr keycode 32 = Meta_d
+	shift alt ctrll ctrlr keycode 32 = Meta_D
+	control alt ctrll ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrll ctrlr keycode 32 = Meta_Control_d
+keycode  33 = f               
+	ctrlr	keycode 33 = U+0430
+	shift ctrlr keycode 33 = U+0410
+	control ctrlr keycode 33 = Control_f
+	shift control ctrlr keycode 33 = Control_f
+	alt ctrlr keycode 33 = Meta_f
+	shift alt ctrlr keycode 33 = Meta_F
+	control alt ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrlr keycode 33 = Meta_Control_f
+	ctrll	keycode 33 = U+0430
+	shift ctrll keycode 33 = U+0410
+	control ctrll keycode 33 = Control_f
+	shift control ctrll keycode 33 = Control_f
+	alt ctrll keycode 33 = Meta_f
+	shift alt ctrll keycode 33 = Meta_F
+	control alt ctrll keycode 33 = Meta_Control_f
+	shift control alt ctrll keycode 33 = Meta_Control_f
+	ctrll ctrlr	keycode 33 = U+0430
+	shift ctrll ctrlr keycode 33 = U+0410
+	control ctrll ctrlr keycode 33 = Control_f
+	shift control ctrll ctrlr keycode 33 = Control_f
+	alt ctrll ctrlr keycode 33 = Meta_f
+	shift alt ctrll ctrlr keycode 33 = Meta_F
+	control alt ctrll ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrll ctrlr keycode 33 = Meta_Control_f
+keycode  34 = g               
+	ctrlr	keycode 34 = U+043f
+	shift ctrlr keycode 34 = U+041f
+	control ctrlr keycode 34 = Control_g
+	shift control ctrlr keycode 34 = Control_g
+	alt ctrlr keycode 34 = Meta_g
+	shift alt ctrlr keycode 34 = Meta_G
+	control alt ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrlr keycode 34 = Meta_Control_g
+	ctrll	keycode 34 = U+043f
+	shift ctrll keycode 34 = U+041f
+	control ctrll keycode 34 = Control_g
+	shift control ctrll keycode 34 = Control_g
+	alt ctrll keycode 34 = Meta_g
+	shift alt ctrll keycode 34 = Meta_G
+	control alt ctrll keycode 34 = Meta_Control_g
+	shift control alt ctrll keycode 34 = Meta_Control_g
+	ctrll ctrlr	keycode 34 = U+043f
+	shift ctrll ctrlr keycode 34 = U+041f
+	control ctrll ctrlr keycode 34 = Control_g
+	shift control ctrll ctrlr keycode 34 = Control_g
+	alt ctrll ctrlr keycode 34 = Meta_g
+	shift alt ctrll ctrlr keycode 34 = Meta_G
+	control alt ctrll ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrll ctrlr keycode 34 = Meta_Control_g
+keycode  35 = h               
+	ctrlr	keycode 35 = U+0440
+	shift ctrlr keycode 35 = U+0420
+	control ctrlr keycode 35 = Control_h
+	shift control ctrlr keycode 35 = Control_h
+	alt ctrlr keycode 35 = Meta_h
+	shift alt ctrlr keycode 35 = Meta_H
+	control alt ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrlr keycode 35 = Meta_Control_h
+	ctrll	keycode 35 = U+0440
+	shift ctrll keycode 35 = U+0420
+	control ctrll keycode 35 = Control_h
+	shift control ctrll keycode 35 = Control_h
+	alt ctrll keycode 35 = Meta_h
+	shift alt ctrll keycode 35 = Meta_H
+	control alt ctrll keycode 35 = Meta_Control_h
+	shift control alt ctrll keycode 35 = Meta_Control_h
+	ctrll ctrlr	keycode 35 = U+0440
+	shift ctrll ctrlr keycode 35 = U+0420
+	control ctrll ctrlr keycode 35 = Control_h
+	shift control ctrll ctrlr keycode 35 = Control_h
+	alt ctrll ctrlr keycode 35 = Meta_h
+	shift alt ctrll ctrlr keycode 35 = Meta_H
+	control alt ctrll ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrll ctrlr keycode 35 = Meta_Control_h
+keycode  36 = j               
+	ctrlr	keycode 36 = U+043e
+	shift ctrlr keycode 36 = U+041e
+	control ctrlr keycode 36 = Control_j
+	shift control ctrlr keycode 36 = Control_j
+	alt ctrlr keycode 36 = Meta_j
+	shift alt ctrlr keycode 36 = Meta_J
+	control alt ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrlr keycode 36 = Meta_Control_j
+	ctrll	keycode 36 = U+043e
+	shift ctrll keycode 36 = U+041e
+	control ctrll keycode 36 = Control_j
+	shift control ctrll keycode 36 = Control_j
+	alt ctrll keycode 36 = Meta_j
+	shift alt ctrll keycode 36 = Meta_J
+	control alt ctrll keycode 36 = Meta_Control_j
+	shift control alt ctrll keycode 36 = Meta_Control_j
+	ctrll ctrlr	keycode 36 = U+043e
+	shift ctrll ctrlr keycode 36 = U+041e
+	control ctrll ctrlr keycode 36 = Control_j
+	shift control ctrll ctrlr keycode 36 = Control_j
+	alt ctrll ctrlr keycode 36 = Meta_j
+	shift alt ctrll ctrlr keycode 36 = Meta_J
+	control alt ctrll ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrll ctrlr keycode 36 = Meta_Control_j
+keycode  37 = k               
+	ctrlr	keycode 37 = U+043b
+	shift ctrlr keycode 37 = U+041b
+	control ctrlr keycode 37 = Control_k
+	shift control ctrlr keycode 37 = Control_k
+	alt ctrlr keycode 37 = Meta_k
+	shift alt ctrlr keycode 37 = Meta_K
+	control alt ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrlr keycode 37 = Meta_Control_k
+	ctrll	keycode 37 = U+043b
+	shift ctrll keycode 37 = U+041b
+	control ctrll keycode 37 = Control_k
+	shift control ctrll keycode 37 = Control_k
+	alt ctrll keycode 37 = Meta_k
+	shift alt ctrll keycode 37 = Meta_K
+	control alt ctrll keycode 37 = Meta_Control_k
+	shift control alt ctrll keycode 37 = Meta_Control_k
+	ctrll ctrlr	keycode 37 = U+043b
+	shift ctrll ctrlr keycode 37 = U+041b
+	control ctrll ctrlr keycode 37 = Control_k
+	shift control ctrll ctrlr keycode 37 = Control_k
+	alt ctrll ctrlr keycode 37 = Meta_k
+	shift alt ctrll ctrlr keycode 37 = Meta_K
+	control alt ctrll ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrll ctrlr keycode 37 = Meta_Control_k
+keycode  38 = l               
+	ctrlr	keycode 38 = U+0434
+	shift ctrlr keycode 38 = U+0414
+	control ctrlr keycode 38 = Control_l
+	shift control ctrlr keycode 38 = Control_l
+	alt ctrlr keycode 38 = Meta_l
+	shift alt ctrlr keycode 38 = Meta_L
+	control alt ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrlr keycode 38 = Meta_Control_l
+	ctrll	keycode 38 = U+0434
+	shift ctrll keycode 38 = U+0414
+	control ctrll keycode 38 = Control_l
+	shift control ctrll keycode 38 = Control_l
+	alt ctrll keycode 38 = Meta_l
+	shift alt ctrll keycode 38 = Meta_L
+	control alt ctrll keycode 38 = Meta_Control_l
+	shift control alt ctrll keycode 38 = Meta_Control_l
+	ctrll ctrlr	keycode 38 = U+0434
+	shift ctrll ctrlr keycode 38 = U+0414
+	control ctrll ctrlr keycode 38 = Control_l
+	shift control ctrll ctrlr keycode 38 = Control_l
+	alt ctrll ctrlr keycode 38 = Meta_l
+	shift alt ctrll ctrlr keycode 38 = Meta_L
+	control alt ctrll ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrll ctrlr keycode 38 = Meta_Control_l
+keycode  39 = semicolon        colon           
+	alt	keycode  39 = Meta_semicolon  
+	shift	alt	keycode	 39 = Meta_colon
+	ctrlr	keycode 39 = U+0436
+	shift ctrlr keycode 39 = U+0416
+	alt ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrlr keycode 39 = Meta_colon
+	ctrll	keycode 39 = U+0436
+	shift ctrll keycode 39 = U+0416
+	alt ctrll keycode 39 = Meta_semicolon
+	shift alt ctrll keycode 39 = Meta_colon
+	ctrll ctrlr	keycode 39 = U+0436
+	shift ctrll ctrlr keycode 39 = U+0416
+	alt ctrll ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrll ctrlr keycode 39 = Meta_colon
+keycode  40 = apostrophe       quotedbl        
+	control	keycode  40 = Control_g       
+	alt	keycode  40 = Meta_apostrophe 
+	shift	alt	keycode 40 = Meta_quotedbl
+	ctrlr	keycode 40 = U+044d
+	shift ctrlr keycode 40 = U+042d
+	control ctrlr keycode 40 = Control_g
+	shift control ctrlr keycode 40 = Control_g
+	alt ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrlr keycode 40 = Meta_quotedbl
+	ctrll	keycode 40 = U+0454
+	shift ctrll keycode 40 = U+0404
+	control ctrll keycode 40 = Control_g
+	shift control ctrll keycode 40 = Control_g
+	alt ctrll keycode 40 = Meta_apostrophe
+	shift alt ctrll keycode 40 = Meta_quotedbl
+	ctrll ctrlr	keycode 40 = U+0454
+	shift ctrll ctrlr keycode 40 = U+0404
+	control ctrll ctrlr keycode 40 = Control_g
+	shift control ctrll ctrlr keycode 40 = Control_g
+	alt ctrll ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrll ctrlr keycode 40 = Meta_quotedbl
+keycode  41 = grave            asciitilde      
+	control	keycode  41 = nul             
+	alt	keycode  41 = Meta_grave      
+	shift	alt	keycode 41 = Meta_asciitilde
+	ctrlr	keycode 41 = apostrophe
+	shift ctrlr keycode 41 = question
+	control ctrlr keycode 41 = nul
+	shift control ctrlr keycode 41 = nul
+	alt ctrlr keycode 41 = Meta_grave
+	shift alt ctrlr keycode 41 = Meta_asciitilde
+	ctrll	keycode 41 = apostrophe
+	shift ctrll keycode 41 = question
+	control ctrll keycode 41 = nul
+	shift control ctrll keycode 41 = nul
+	alt ctrll keycode 41 = Meta_grave
+	shift alt ctrll keycode 41 = Meta_asciitilde
+	ctrll ctrlr	keycode 41 = apostrophe
+	shift ctrll ctrlr keycode 41 = question
+	control ctrll ctrlr keycode 41 = nul
+	shift control ctrll ctrlr keycode 41 = nul
+	alt ctrll ctrlr keycode 41 = Meta_grave
+	shift alt ctrll ctrlr keycode 41 = Meta_asciitilde
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash  
+	shift	alt	keycode  43 = Meta_bar        
+	control alt	keycode 43 = Meta_Control_backslash
+	shift control alt keycode 43 = Meta_Control_backslash
+	ctrlr	keycode 43 = backslash
+	shift ctrlr keycode 43 = bar
+	control ctrlr keycode 43 = Control_backslash
+	shift control ctrlr keycode 43 = Control_backslash
+	alt ctrlr keycode 43 = Meta_backslash
+	shift alt ctrlr keycode 43 = Meta_bar
+	control alt ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrlr keycode 43 = Meta_Control_backslash
+	ctrll	keycode 43 = backslash
+	shift ctrll keycode 43 = bar
+	control ctrll keycode 43 = Control_backslash
+	shift control ctrll keycode 43 = Control_backslash
+	alt ctrll keycode 43 = Meta_backslash
+	shift alt ctrll keycode 43 = Meta_bar
+	control alt ctrll keycode 43 = Meta_Control_backslash
+	shift control alt ctrll keycode 43 = Meta_Control_backslash
+	ctrll ctrlr	keycode 43 = backslash
+	shift ctrll ctrlr keycode 43 = bar
+	control ctrll ctrlr keycode 43 = Control_backslash
+	shift control ctrll ctrlr keycode 43 = Control_backslash
+	alt ctrll ctrlr keycode 43 = Meta_backslash
+	shift alt ctrll ctrlr keycode 43 = Meta_bar
+	control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+keycode  44 = z               
+	ctrlr	keycode 44 = U+044f
+	shift ctrlr keycode 44 = U+042f
+	control ctrlr keycode 44 = Control_z
+	shift control ctrlr keycode 44 = Control_z
+	alt ctrlr keycode 44 = Meta_z
+	shift alt ctrlr keycode 44 = Meta_Z
+	control alt ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrlr keycode 44 = Meta_Control_z
+	ctrll	keycode 44 = U+044f
+	shift ctrll keycode 44 = U+042f
+	control ctrll keycode 44 = Control_z
+	shift control ctrll keycode 44 = Control_z
+	alt ctrll keycode 44 = Meta_z
+	shift alt ctrll keycode 44 = Meta_Z
+	control alt ctrll keycode 44 = Meta_Control_z
+	shift control alt ctrll keycode 44 = Meta_Control_z
+	ctrll ctrlr	keycode 44 = U+044f
+	shift ctrll ctrlr keycode 44 = U+042f
+	control ctrll ctrlr keycode 44 = Control_z
+	shift control ctrll ctrlr keycode 44 = Control_z
+	alt ctrll ctrlr keycode 44 = Meta_z
+	shift alt ctrll ctrlr keycode 44 = Meta_Z
+	control alt ctrll ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrll ctrlr keycode 44 = Meta_Control_z
+keycode  45 = x               
+	ctrlr	keycode 45 = U+0447
+	shift ctrlr keycode 45 = U+0427
+	control ctrlr keycode 45 = Control_x
+	shift control ctrlr keycode 45 = Control_x
+	alt ctrlr keycode 45 = Meta_x
+	shift alt ctrlr keycode 45 = Meta_X
+	control alt ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrlr keycode 45 = Meta_Control_x
+	ctrll	keycode 45 = U+0447
+	shift ctrll keycode 45 = U+0427
+	control ctrll keycode 45 = Control_x
+	shift control ctrll keycode 45 = Control_x
+	alt ctrll keycode 45 = Meta_x
+	shift alt ctrll keycode 45 = Meta_X
+	control alt ctrll keycode 45 = Meta_Control_x
+	shift control alt ctrll keycode 45 = Meta_Control_x
+	ctrll ctrlr	keycode 45 = U+0447
+	shift ctrll ctrlr keycode 45 = U+0427
+	control ctrll ctrlr keycode 45 = Control_x
+	shift control ctrll ctrlr keycode 45 = Control_x
+	alt ctrll ctrlr keycode 45 = Meta_x
+	shift alt ctrll ctrlr keycode 45 = Meta_X
+	control alt ctrll ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrll ctrlr keycode 45 = Meta_Control_x
+keycode  46 = c               
+	ctrlr	keycode 46 = U+0441
+	shift ctrlr keycode 46 = U+0421
+	control ctrlr keycode 46 = Control_c
+	shift control ctrlr keycode 46 = Control_c
+	alt ctrlr keycode 46 = Meta_c
+	shift alt ctrlr keycode 46 = Meta_C
+	control alt ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrlr keycode 46 = Meta_Control_c
+	ctrll	keycode 46 = U+0441
+	shift ctrll keycode 46 = U+0421
+	control ctrll keycode 46 = Control_c
+	shift control ctrll keycode 46 = Control_c
+	alt ctrll keycode 46 = Meta_c
+	shift alt ctrll keycode 46 = Meta_C
+	control alt ctrll keycode 46 = Meta_Control_c
+	shift control alt ctrll keycode 46 = Meta_Control_c
+	ctrll ctrlr	keycode 46 = U+0441
+	shift ctrll ctrlr keycode 46 = U+0421
+	control ctrll ctrlr keycode 46 = Control_c
+	shift control ctrll ctrlr keycode 46 = Control_c
+	alt ctrll ctrlr keycode 46 = Meta_c
+	shift alt ctrll ctrlr keycode 46 = Meta_C
+	control alt ctrll ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrll ctrlr keycode 46 = Meta_Control_c
+keycode  47 = v               
+	ctrlr	keycode 47 = U+043c
+	shift ctrlr keycode 47 = U+041c
+	control ctrlr keycode 47 = Control_v
+	shift control ctrlr keycode 47 = Control_v
+	alt ctrlr keycode 47 = Meta_v
+	shift alt ctrlr keycode 47 = Meta_V
+	control alt ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrlr keycode 47 = Meta_Control_v
+	ctrll	keycode 47 = U+043c
+	shift ctrll keycode 47 = U+041c
+	control ctrll keycode 47 = Control_v
+	shift control ctrll keycode 47 = Control_v
+	alt ctrll keycode 47 = Meta_v
+	shift alt ctrll keycode 47 = Meta_V
+	control alt ctrll keycode 47 = Meta_Control_v
+	shift control alt ctrll keycode 47 = Meta_Control_v
+	ctrll ctrlr	keycode 47 = U+043c
+	shift ctrll ctrlr keycode 47 = U+041c
+	control ctrll ctrlr keycode 47 = Control_v
+	shift control ctrll ctrlr keycode 47 = Control_v
+	alt ctrll ctrlr keycode 47 = Meta_v
+	shift alt ctrll ctrlr keycode 47 = Meta_V
+	control alt ctrll ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrll ctrlr keycode 47 = Meta_Control_v
+keycode  48 = b               
+	ctrlr	keycode	48 = U+0438
+	shift ctrlr keycode 48 = U+0418
+	control ctrlr keycode 48 = Control_b
+	shift control ctrlr keycode 48 = Control_b
+	alt ctrlr keycode 48 = Meta_b
+	shift alt ctrlr keycode 48 = Meta_B
+	control alt ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrlr keycode 48 = Meta_Control_b
+	ctrll	keycode	48 = U+0438
+	shift ctrll keycode 48 = U+0418
+	control ctrll keycode 48 = Control_b
+	shift control ctrll keycode 48 = Control_b
+	alt ctrll keycode 48 = Meta_b
+	shift alt ctrll keycode 48 = Meta_B
+	control alt ctrll keycode 48 = Meta_Control_b
+	shift control alt ctrll keycode 48 = Meta_Control_b
+	ctrll ctrlr	keycode	48 = U+0438
+	shift ctrll ctrlr keycode 48 = U+0418
+	control ctrll ctrlr keycode 48 = Control_b
+	shift control ctrll ctrlr keycode 48 = Control_b
+	alt ctrll ctrlr keycode 48 = Meta_b
+	shift alt ctrll ctrlr keycode 48 = Meta_B
+	control alt ctrll ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrll ctrlr keycode 48 = Meta_Control_b
+keycode  49 = n               
+	ctrlr	keycode 49 = U+0442
+	shift ctrlr keycode 49 = U+0422
+	control ctrlr keycode 49 = Control_n
+	shift control ctrlr keycode 49 = Control_n
+	alt ctrlr keycode 49 = Meta_n
+	shift alt ctrlr keycode 49 = Meta_N
+	control alt ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrlr keycode 49 = Meta_Control_n
+	ctrll	keycode 49 = U+0442
+	shift ctrll keycode 49 = U+0422
+	control ctrll keycode 49 = Control_n
+	shift control ctrll keycode 49 = Control_n
+	alt ctrll keycode 49 = Meta_n
+	shift alt ctrll keycode 49 = Meta_N
+	control alt ctrll keycode 49 = Meta_Control_n
+	shift control alt ctrll keycode 49 = Meta_Control_n
+	ctrll ctrlr	keycode 49 = U+0442
+	shift ctrll ctrlr keycode 49 = U+0422
+	control ctrll ctrlr keycode 49 = Control_n
+	shift control ctrll ctrlr keycode 49 = Control_n
+	alt ctrll ctrlr keycode 49 = Meta_n
+	shift alt ctrll ctrlr keycode 49 = Meta_N
+	control alt ctrll ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrll ctrlr keycode 49 = Meta_Control_n
+keycode  50 = m               
+	ctrlr	keycode 50 = U+044c
+	shift ctrlr keycode 50 = U+042c
+	control ctrlr keycode 50 = Control_m
+	shift control ctrlr keycode 50 = Control_m
+	alt ctrlr keycode 50 = Meta_m
+	shift alt ctrlr keycode 50 = Meta_M
+	control alt ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrlr keycode 50 = Meta_Control_m
+	ctrll	keycode 50 = U+044c
+	shift ctrll keycode 50 = U+042c
+	control ctrll keycode 50 = Control_m
+	shift control ctrll keycode 50 = Control_m
+	alt ctrll keycode 50 = Meta_m
+	shift alt ctrll keycode 50 = Meta_M
+	control alt ctrll keycode 50 = Meta_Control_m
+	shift control alt ctrll keycode 50 = Meta_Control_m
+	ctrll ctrlr	keycode 50 = U+044c
+	shift ctrll ctrlr keycode 50 = U+042c
+	control ctrll ctrlr keycode 50 = Control_m
+	shift control ctrll ctrlr keycode 50 = Control_m
+	alt ctrll ctrlr keycode 50 = Meta_m
+	shift alt ctrll ctrlr keycode 50 = Meta_M
+	control alt ctrll ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrll ctrlr keycode 50 = Meta_Control_m
+keycode  51 = comma            less            
+	alt	keycode  51 = Meta_comma      
+	shift	alt	keycode  51 = Meta_less       
+	ctrlr	keycode 51 = U+0431
+	shift ctrlr keycode 51 = U+0411
+	alt ctrlr keycode 51 = Meta_comma
+	shift alt ctrlr keycode 51 = Meta_less
+	ctrll	keycode 51 = U+0431
+	shift ctrll keycode 51 = U+0411
+	alt ctrll keycode 51 = Meta_comma
+	shift alt ctrll keycode 51 = Meta_less
+	ctrll ctrlr	keycode 51 = U+0431
+	shift ctrll ctrlr keycode 51 = U+0411
+	alt ctrll ctrlr keycode 51 = Meta_comma
+	shift alt ctrll ctrlr keycode 51 = Meta_less
+keycode  52 = period           greater         
+	control	keycode  52 = Compose         
+	alt	keycode  52 = Meta_period     
+	shift	alt	keycode  52 = Meta_greater    
+	ctrlr	keycode 52 = U+044e
+	shift ctrlr keycode 52 = U+042e
+	alt ctrlr keycode 52 = Meta_period
+	shift alt ctrlr keycode 52 = Meta_greater
+	ctrll	keycode 52 = U+044e
+	shift ctrll keycode 52 = U+042e
+	alt ctrll keycode 52 = Meta_period
+	shift alt ctrll keycode 52 = Meta_greater
+	ctrll ctrlr	keycode 52 = U+044e
+	shift ctrll ctrlr keycode 52 = U+042e
+	alt ctrll ctrlr keycode 52 = Meta_period
+	shift alt ctrll ctrlr keycode 52 = Meta_greater
+keycode  53 = slash            question        
+	control	keycode  53 = Delete          
+	shift	control	keycode  53 = Delete          
+	alt	keycode  53 = Meta_slash      
+	ctrlr	keycode 53 = U+0451
+	shift ctrlr keycode 53 = U+0401
+	alt ctrlr keycode 53 = Meta_slash
+	shift alt ctrlr keycode 53 = Meta_question
+	ctrll	keycode 53 = U+0491
+	shift ctrll keycode 53 = U+0490
+	alt ctrll keycode 53 = Meta_slash
+	shift alt ctrll keycode 53 = Meta_question
+	ctrll ctrlr	keycode 53 = U+0491
+	shift ctrll ctrlr keycode 53 = U+0490
+	alt ctrll ctrlr keycode 53 = Meta_slash
+	shift alt ctrll ctrlr keycode 53 = Meta_question
+keycode  54 = Shift           
+keycode  55 = KP_Multiply     
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control	keycode  57 = nul             
+	alt	keycode  57 = Meta_space      
+	ctrlr	keycode 57 = space
+	shift ctrlr keycode 57 = space
+	control ctrlr keycode 57 = nul
+	shift control ctrlr keycode 57 = nul
+	alt ctrlr keycode 57 = Meta_space
+	shift alt ctrlr keycode 57 = Meta_space
+	ctrll	keycode 57 = space
+	shift ctrll keycode 57 = space
+	control ctrll keycode 57 = nul
+	shift control ctrll keycode 57 = nul
+	alt ctrll keycode 57 = Meta_space
+	shift alt ctrll keycode 57 = Meta_space
+	ctrll ctrlr	keycode 57 = space
+	shift ctrll ctrlr keycode 57 = space
+	control ctrll ctrlr keycode 57 = nul
+	shift control ctrll ctrlr keycode 57 = nul
+	alt ctrll ctrlr keycode 57 = Meta_space
+	shift alt ctrll ctrlr keycode 57 = Meta_space
+keycode  58 = Caps_Lock       
+keycode  59 = F1               F13              Console_13      
+	control	keycode  59 = F25             
+	shift	control	keycode  59 = F37             
+	alt	keycode  59 = Console_1       
+	control	alt	keycode  59 = Console_1       
+	ctrlr keycode  59 = F1
+	ctrlr shift keycode 59 = F13
+	ctrlr altgr keycode 59 = Console_13      
+	ctrlr control	keycode  59 = F25             
+	ctrlr shift	control	keycode  59 = F37             
+	ctrlr alt	keycode  59 = Console_1       
+	ctrlr control	alt	keycode  59 = Console_1       
+	ctrll keycode  59 = F1
+	ctrll shift keycode 59 = F13
+	ctrll altgr keycode 59 = Console_13      
+	ctrll control	keycode  59 = F25             
+	ctrll shift	control	keycode  59 = F37             
+	ctrll alt	keycode  59 = Console_1       
+	ctrll control	alt	keycode  59 = Console_1       
+	ctrlr ctrll keycode  59 = F1
+	ctrlr ctrll shift keycode 59 = F13
+	ctrlr ctrll altgr keycode 59 = Console_13      
+	ctrlr ctrll control	keycode  59 = F25             
+	ctrlr ctrll shift	control	keycode  59 = F37             
+	ctrlr ctrll alt	keycode  59 = Console_1       
+	ctrlr ctrll control	alt	keycode  59 = Console_1       
+keycode  60 = F2               F14              Console_14      
+	control	keycode  60 = F26             
+	shift	control	keycode  60 = F38             
+	alt	keycode  60 = Console_2       
+	control	alt	keycode  60 = Console_2       
+	ctrlr keycode  60 = F2
+	ctrlr shift keycode 60 = F14
+	ctrlr altgr keycode 60 = Console_14      
+	ctrlr control	keycode  60 = F26             
+	ctrlr shift	control	keycode  60 = F38             
+	ctrlr alt	keycode  60 = Console_2       
+	ctrlr control	alt	keycode  60 = Console_2       
+	ctrll keycode  60 = F2
+	ctrll shift keycode 60 = F14
+	ctrll altgr keycode 60 = Console_14      
+	ctrll control	keycode  60 = F26             
+	ctrll shift	control	keycode  60 = F38             
+	ctrll alt	keycode  60 = Console_2       
+	ctrll control	alt	keycode  60 = Console_2       
+	ctrlr ctrll keycode  60 = F2
+	ctrlr ctrll shift keycode 60 = F14
+	ctrlr ctrll altgr keycode 60 = Console_14      
+	ctrlr ctrll control	keycode  60 = F26             
+	ctrlr ctrll shift	control	keycode  60 = F38             
+	ctrlr ctrll alt	keycode  60 = Console_2       
+	ctrlr ctrll control	alt	keycode  60 = Console_2       
+keycode  61 = F3               F15              Console_15      
+	control	keycode  61 = F27             
+	shift	control	keycode  61 = F39             
+	alt	keycode  61 = Console_3       
+	control	alt	keycode  61 = Console_3       
+	ctrlr keycode  61 = F3
+	ctrlr shift keycode 61 = F15
+	ctrlr altgr keycode 61 = Console_15      
+	ctrlr control	keycode  61 = F27             
+	ctrlr shift	control	keycode  61 = F39             
+	ctrlr alt	keycode  61 = Console_3       
+	ctrlr control	alt	keycode  61 = Console_3       
+	ctrll keycode  61 = F3
+	ctrll shift keycode 61 = F15
+	ctrll altgr keycode 61 = Console_15      
+	ctrll control	keycode  61 = F27             
+	ctrll shift	control	keycode  61 = F39             
+	ctrll alt	keycode  61 = Console_3       
+	ctrll control	alt	keycode  61 = Console_3       
+	ctrlr ctrll keycode  61 = F3
+	ctrlr ctrll shift keycode 61 = F15
+	ctrlr ctrll altgr keycode 61 = Console_15      
+	ctrlr ctrll control	keycode  61 = F27             
+	ctrlr ctrll shift	control	keycode  61 = F39             
+	ctrlr ctrll alt	keycode  61 = Console_3       
+	ctrlr ctrll control	alt	keycode  61 = Console_3       
+keycode  62 = F4               F16              Console_16      
+	control	keycode  62 = F28             
+	shift	control	keycode  62 = F40             
+	alt	keycode  62 = Console_4       
+	control	alt	keycode  62 = Console_4       
+	ctrlr keycode  62 = F4
+	ctrlr shift keycode 62 = F16
+	ctrlr altgr keycode 62 = Console_16      
+	ctrlr control	keycode  62 = F28             
+	ctrlr shift	control	keycode  62 = F40             
+	ctrlr alt	keycode  62 = Console_4       
+	ctrlr control	alt	keycode  62 = Console_4       
+	ctrll keycode  62 = F4
+	ctrll shift keycode 62 = F16
+	ctrll altgr keycode 62 = Console_16      
+	ctrll control	keycode  62 = F28             
+	ctrll shift	control	keycode  62 = F40             
+	ctrll alt	keycode  62 = Console_4       
+	ctrll control	alt	keycode  62 = Console_4       
+	ctrlr ctrll keycode  62 = F4
+	ctrlr ctrll shift keycode 62 = F16
+	ctrlr ctrll altgr keycode 62 = Console_16      
+	ctrlr ctrll control	keycode  62 = F28             
+	ctrlr ctrll shift	control	keycode  62 = F40             
+	ctrlr ctrll alt	keycode  62 = Console_4       
+	ctrlr ctrll control	alt	keycode  62 = Console_4       
+keycode  63 = F5               F17              Console_17      
+	control	keycode  63 = F29             
+	shift	control	keycode  63 = F41             
+	alt	keycode  63 = Console_5       
+	control	alt	keycode  63 = Console_5       
+	ctrlr keycode  63 = F5
+	ctrlr shift keycode 63 = F17
+	ctrlr altgr keycode 63 = Console_17      
+	ctrlr control	keycode  63 = F29             
+	ctrlr shift	control	keycode  63 = F41             
+	ctrlr alt	keycode  63 = Console_5       
+	ctrlr control	alt	keycode  63 = Console_5       
+	ctrll keycode  63 = F5
+	ctrll shift keycode 63 = F17
+	ctrll altgr keycode 63 = Console_17      
+	ctrll control	keycode  63 = F29             
+	ctrll shift	control	keycode  63 = F41             
+	ctrll alt	keycode  63 = Console_5       
+	ctrll control	alt	keycode  63 = Console_5       
+	ctrlr ctrll keycode  63 = F5
+	ctrlr ctrll shift keycode 63 = F17
+	ctrlr ctrll altgr keycode 63 = Console_17      
+	ctrlr ctrll control	keycode  63 = F29             
+	ctrlr ctrll shift	control	keycode  63 = F41             
+	ctrlr ctrll alt	keycode  63 = Console_5       
+	ctrlr ctrll control	alt	keycode  63 = Console_5       
+keycode  64 = F6               F18              Console_18      
+	control	keycode  64 = F30             
+	shift	control	keycode  64 = F42             
+	alt	keycode  64 = Console_6       
+	control	alt	keycode  64 = Console_6       
+	ctrlr keycode  64 = F6
+	ctrlr shift keycode 64 = F18
+	ctrlr altgr keycode 64 = Console_18      
+	ctrlr control	keycode  64 = F30             
+	ctrlr shift	control	keycode  64 = F42             
+	ctrlr alt	keycode  64 = Console_6       
+	ctrlr control	alt	keycode  64 = Console_6       
+	ctrll keycode  64 = F6
+	ctrll shift keycode 64 = F18
+	ctrll altgr keycode 64 = Console_18      
+	ctrll control	keycode  64 = F30             
+	ctrll shift	control	keycode  64 = F42             
+	ctrll alt	keycode  64 = Console_6       
+	ctrll control	alt	keycode  64 = Console_6       
+	ctrlr ctrll keycode  64 = F6
+	ctrlr ctrll shift keycode 64 = F18
+	ctrlr ctrll altgr keycode 64 = Console_18      
+	ctrlr ctrll control	keycode  64 = F30             
+	ctrlr ctrll shift	control	keycode  64 = F42             
+	ctrlr ctrll alt	keycode  64 = Console_6       
+	ctrlr ctrll control	alt	keycode  64 = Console_6       
+keycode  65 = F7               F19              Console_19      
+	control	keycode  65 = F31             
+	shift	control	keycode  65 = F43             
+	alt	keycode  65 = Console_7       
+	control	alt	keycode  65 = Console_7       
+	ctrlr keycode  65 = F7
+	ctrlr shift keycode 65 = F19
+	ctrlr altgr keycode 65 = Console_19      
+	ctrlr control	keycode  65 = F31             
+	ctrlr shift	control	keycode  65 = F43             
+	ctrlr alt	keycode  65 = Console_7       
+	ctrlr control	alt	keycode  65 = Console_7       
+	ctrll keycode  65 = F7
+	ctrll shift keycode 65 = F19
+	ctrll altgr keycode 65 = Console_19      
+	ctrll control	keycode  65 = F31             
+	ctrll shift	control	keycode  65 = F43             
+	ctrll alt	keycode  65 = Console_7       
+	ctrll control	alt	keycode  65 = Console_7       
+	ctrlr ctrll keycode  65 = F7
+	ctrlr ctrll shift keycode 65 = F19
+	ctrlr ctrll altgr keycode 65 = Console_19      
+	ctrlr ctrll control	keycode  65 = F31             
+	ctrlr ctrll shift	control	keycode  65 = F43             
+	ctrlr ctrll alt	keycode  65 = Console_7       
+	ctrlr ctrll control	alt	keycode  65 = Console_7       
+keycode  66 = F8               F20              Console_20      
+	control	keycode  66 = F32             
+	shift	control	keycode  66 = F44             
+	alt	keycode  66 = Console_8       
+	control	alt	keycode  66 = Console_8       
+	ctrlr keycode  66 = F8
+	ctrlr shift keycode 66 = F20
+	ctrlr altgr keycode 66 = Console_20      
+	ctrlr control	keycode  66 = F32             
+	ctrlr shift	control	keycode  66 = F44             
+	ctrlr alt	keycode  66 = Console_8       
+	ctrlr control	alt	keycode  66 = Console_8       
+	ctrll keycode  66 = F8
+	ctrll shift keycode 66 = F20
+	ctrll altgr keycode 66 = Console_20      
+	ctrll control	keycode  66 = F32             
+	ctrll shift	control	keycode  66 = F44             
+	ctrll alt	keycode  66 = Console_8       
+	ctrll control	alt	keycode  66 = Console_8       
+	ctrlr ctrll keycode  66 = F8
+	ctrlr ctrll shift keycode 66 = F20
+	ctrlr ctrll altgr keycode 66 = Console_20      
+	ctrlr ctrll control	keycode  66 = F32             
+	ctrlr ctrll shift	control	keycode  66 = F44             
+	ctrlr ctrll alt	keycode  66 = Console_8       
+	ctrlr ctrll control	alt	keycode  66 = Console_8       
+keycode  67 = F9               F21              Console_21      
+	control	keycode  67 = F33             
+	shift	control	keycode  67 = F45             
+	alt	keycode  67 = Console_9       
+	control	alt	keycode  67 = Console_9       
+	ctrlr keycode  67 = F9
+	ctrlr shift keycode 67 = F21
+	ctrlr altgr keycode 67 = Console_21      
+	ctrlr control	keycode  67 = F33             
+	ctrlr shift	control	keycode  67 = F45             
+	ctrlr alt	keycode  67 = Console_9       
+	ctrlr control	alt	keycode  67 = Console_9       
+	ctrll keycode  67 = F9
+	ctrll shift keycode 67 = F21
+	ctrll altgr keycode 67 = Console_21      
+	ctrll control	keycode  67 = F33             
+	ctrll shift	control	keycode  67 = F45             
+	ctrll alt	keycode  67 = Console_9       
+	ctrll control	alt	keycode  67 = Console_9       
+	ctrlr ctrll keycode  67 = F9
+	ctrlr ctrll shift keycode 67 = F21
+	ctrlr ctrll altgr keycode 67 = Console_21      
+	ctrlr ctrll control	keycode  67 = F33             
+	ctrlr ctrll shift	control	keycode  67 = F45             
+	ctrlr ctrll alt	keycode  67 = Console_9       
+	ctrlr ctrll control	alt	keycode  67 = Console_9       
+keycode  68 = F10              F22              Console_22      
+	control	keycode  68 = F34             
+	shift	control	keycode  68 = F46             
+	alt	keycode  68 = Console_10      
+	control	alt	keycode  68 = Console_10      
+	ctrlr keycode  68 = F10
+	ctrlr shift keycode 68 = F22
+	ctrlr altgr keycode 68 = Console_22      
+	ctrlr control	keycode  68 = F34             
+	ctrlr shift	control	keycode  68 = F46             
+	ctrlr alt	keycode  68 = Console_10       
+	ctrlr control	alt	keycode  68 = Console_10       
+	ctrll keycode  68 = F10
+	ctrll shift keycode 68 = F22
+	ctrll altgr keycode 68 = Console_22      
+	ctrll control	keycode  68 = F34             
+	ctrll shift	control	keycode  68 = F46             
+	ctrll alt	keycode  68 = Console_10       
+	ctrll control	alt	keycode  68 = Console_10       
+	ctrlr ctrll keycode  68 = F10
+	ctrlr ctrll shift keycode 68 = F22
+	ctrlr ctrll altgr keycode 68 = Console_22      
+	ctrlr ctrll control	keycode  68 = F34             
+	ctrlr ctrll shift	control	keycode  68 = F46             
+	ctrlr ctrll alt	keycode  68 = Console_10       
+	ctrlr ctrll control	alt	keycode  68 = Console_10       
+keycode  69 = Num_Lock        
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
+	control	keycode  70 = Show_State      
+	alt	keycode  70 = Scroll_Lock     
+keycode  71 = KP_7            
+	alt	keycode  71 = Ascii_7         
+keycode  72 = KP_8            
+	alt	keycode  72 = Ascii_8         
+keycode  73 = KP_9            
+	alt	keycode  73 = Ascii_9         
+keycode  74 = KP_Subtract     
+keycode  75 = KP_4            
+	alt	keycode  75 = Ascii_4         
+keycode  76 = KP_5            
+	alt	keycode  76 = Ascii_5         
+keycode  77 = KP_6            
+	alt	keycode  77 = Ascii_6         
+keycode  78 = KP_Add          
+keycode  79 = KP_1            
+	alt	keycode  79 = Ascii_1         
+keycode  80 = KP_2            
+	alt	keycode  80 = Ascii_2         
+keycode  81 = KP_3            
+	alt	keycode  81 = Ascii_3         
+keycode  82 = KP_0            
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_Period       
+	altgr	control	keycode  83 = Boot            
+	control	alt	keycode  83 = Boot            
+keycode  84 = Last_Console    
+keycode  85 =
+keycode  86 = less             greater          bar             
+	alt	keycode  86 = Meta_less       
+keycode  87 = F11              F23              Console_23      
+	control	keycode  87 = F35             
+	shift	control	keycode  87 = F47             
+	alt	keycode  87 = Console_11      
+	control	alt	keycode  87 = Console_11      
+	ctrlr keycode  87 = F11
+	ctrlr shift keycode 87 = F23
+	ctrlr altgr keycode 87 = Console_23      
+	ctrlr control	keycode  87 = F35             
+	ctrlr shift	control	keycode  87 = F47             
+	ctrlr alt	keycode  87 = Console_11       
+	ctrlr control	alt	keycode  87 = Console_11       
+	ctrll keycode  87 = F11
+	ctrll shift keycode 87 = F23
+	ctrll altgr keycode 87 = Console_23      
+	ctrll control	keycode  87 = F35             
+	ctrll shift	control	keycode  87 = F47             
+	ctrll alt	keycode  87 = Console_11       
+	ctrll control	alt	keycode  87 = Console_11       
+	ctrlr ctrll keycode  87 = F11
+	ctrlr ctrll shift keycode 87 = F23
+	ctrlr ctrll altgr keycode 87 = Console_23      
+	ctrlr ctrll control	keycode  87 = F35             
+	ctrlr ctrll shift	control	keycode  87 = F47             
+	ctrlr ctrll alt	keycode  87 = Console_11       
+	ctrlr ctrll control	alt	keycode  87 = Console_11       
+keycode  88 = F12              F24              Console_24      
+	control	keycode  88 = F36             
+	shift	control	keycode  88 = F48             
+	alt	keycode  88 = Console_12      
+	control	alt	keycode  88 = Console_12      
+	ctrlr keycode  88 = F12
+	ctrlr shift keycode 88 = F24
+	ctrlr altgr keycode 88 = Console_24      
+	ctrlr control	keycode  88 = F36             
+	ctrlr shift	control	keycode  88 = F48             
+	ctrlr alt	keycode  88 = Console_12       
+	ctrlr control	alt	keycode  88 = Console_12       
+	ctrll keycode  88 = F12
+	ctrll shift keycode 88 = F24
+	ctrll altgr keycode 88 = Console_24      
+	ctrll control	keycode  88 = F36             
+	ctrll shift	control	keycode  88 = F48             
+	ctrll alt	keycode  88 = Console_12       
+	ctrll control	alt	keycode  88 = Console_12       
+	ctrlr ctrll keycode  88 = F12
+	ctrlr ctrll shift keycode 88 = F24
+	ctrlr ctrll altgr keycode 88 = Console_24      
+	ctrlr ctrll control	keycode  88 = F36             
+	ctrlr ctrll shift	control	keycode  88 = F48             
+	ctrlr ctrll alt	keycode  88 = Console_12       
+	ctrlr ctrll control	alt	keycode  88 = Console_12       
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter        
+keycode 97 = CtrlL_Lock
+ctrlr keycode 97 = CtrlL_Lock
+ctrll keycode 97 = CtrlL_Lock
+ctrll ctrlr keycode 97 = CtrlL_Lock
+keycode  98 = KP_Divide       
+keycode  99 = Control_backslash
+	control	keycode  99 = Control_backslash
+	alt	keycode  99 = Control_backslash
+keycode 100 = CtrlR_Lock
+ctrll keycode 100 = CtrlR_Lock
+ctrlr keycode 100 = CtrlR_Lock
+ctrll ctrlr keycode 100 = CtrlR_Lock
+keycode 101 = Break           
+keycode 102 = Find            
+keycode 103 = Up              
+keycode 104 = Prior           
+	shift	keycode 104 = Scroll_Backward 
+keycode 105 = Left            
+	alt	keycode 105 = Decr_Console    
+keycode 106 = Right           
+	alt	keycode 106 = Incr_Console    
+keycode 107 = Select          
+keycode 108 = Down            
+keycode 109 = Next            
+	shift	keycode 109 = Scroll_Forward  
+keycode 110 = Insert          
+keycode 111 = Remove          
+	altgr	control	keycode 111 = Boot            
+	control	alt	keycode 111 = Boot            
+keycode 112 = Macro           
+keycode 113 = F13             
+keycode 114 = F14             
+keycode 115 = Help            
+keycode 116 = Do              
+keycode 117 = F17             
+keycode 118 = KP_MinPlus      
+keycode 119 = Pause           
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/i386/qwerty/ua-ws.map b/keymaps/i386/qwerty/ua-ws.map
new file mode 100644
index 0000000..4cd8092
--- /dev/null
+++ b/keymaps/i386/qwerty/ua-ws.map
@@ -0,0 +1,1556 @@
+keymaps 0-2,4-6,8-9,12-13,64-66,68-69,72-73,76-77,128-130,132-133,136-137,140-141,192-194,196-197,200-201,204-205
+strings as usual
+keycode   1 = Escape           Escape          
+	alt	keycode   1 = Meta_Escape     
+	ctrlr	keycode 1 = Escape
+	shift ctrlr keycode 1 = Escape
+	alt ctrlr keycode 1 = Meta_Escape
+	ctrll	keycode 1 = Escape
+	shift ctrll keycode 1 = Escape
+	alt ctrll keycode 1 = Meta_Escape
+	ctrll ctrlr	keycode 1 = Escape
+	shift ctrll ctrlr keycode 1 = Escape
+	alt ctrll ctrlr keycode 1 = Meta_Escape
+keycode   2 = one              exclam          
+	alt	keycode   2 = Meta_one        
+	shift	alt	keycode   2 = Meta_exclam     
+	ctrlr	keycode 2 = one
+	shift ctrlr keycode 2 = exclam
+	alt ctrlr keycode 2 = Meta_one
+	shift alt ctrlr keycode 2 = Meta_exclam
+	ctrll	keycode 2 = one
+	shift ctrll keycode 2 = exclam
+	alt ctrll keycode 2 = Meta_one
+	shift alt ctrll keycode 2 = Meta_exclam
+	ctrll ctrlr	keycode 2 = one
+	shift ctrll ctrlr keycode 2 = exclam
+	alt ctrll ctrlr keycode 2 = Meta_one
+	shift alt ctrll ctrlr keycode 2 = Meta_exclam
+	altgr keycode 2 = 150
+keycode   3 = two              at               at              
+	control	keycode   3 = nul             
+	shift	control	keycode   3 = nul             
+	alt	keycode   3 = Meta_two        
+	shift	alt	keycode   3 = Meta_at         
+	ctrlr	keycode 3 = two
+	shift ctrlr keycode 3 = quotedbl
+	control ctrlr keycode 3 = nul
+	shift control ctrlr keycode 3 = nul
+	alt ctrlr keycode 3 = Meta_two
+	shift alt ctrlr keycode 3 = Meta_at
+	ctrll	keycode 3 = two
+	shift ctrll keycode 3 = quotedbl
+	control ctrll keycode 3 = nul
+	shift control ctrll keycode 3 = nul
+	alt ctrll keycode 3 = Meta_two
+	shift alt ctrll keycode 3 = Meta_at
+	ctrll ctrlr	keycode 3 = two
+	shift ctrll ctrlr keycode 3 = quotedbl
+	control ctrll ctrlr keycode 3 = nul
+	shift control ctrll ctrlr keycode 3 = nul
+	alt ctrll ctrlr keycode 3 = Meta_two
+	shift alt ctrll ctrlr keycode 3 = Meta_at
+	altgr keycode 3 = 157
+keycode   4 = three            numbersign      
+	control	keycode   4 = Escape          
+	alt	keycode   4 = Meta_three      
+	shift	alt	keycode   4 = Meta_numbersign 
+	ctrlr	keycode 4 = three
+	shift ctrlr keycode 4 = numbersign
+	control ctrlr keycode 4 = Escape
+	shift control ctrlr keycode 4 = Escape
+	alt ctrlr keycode 4 = Meta_three
+	shift alt ctrlr keycode 4 = Meta_numbersign
+	ctrll	keycode 4 = three
+	shift ctrll keycode 4 = numbersign
+	control ctrll keycode 4 = Escape
+	shift control ctrll keycode 4 = Escape
+	alt ctrll keycode 4 = Meta_three
+	shift alt ctrll keycode 4 = Meta_numbersign
+	ctrll ctrlr	keycode 4 = three
+	shift ctrll ctrlr keycode 4 = numbersign
+	control ctrll ctrlr keycode 4 = Escape
+	shift control ctrll ctrlr keycode 4 = Escape
+	alt ctrll ctrlr keycode 4 = Meta_three
+	shift alt ctrll ctrlr keycode 4 = Meta_numbersign
+	altgr keycode 4 = 152
+keycode   5 = four             dollar           dollar          
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four       
+	shift	alt	keycode   5 = Meta_dollar     
+	ctrlr	keycode 5 = four
+	shift ctrlr keycode 5 = semicolon
+	control ctrlr keycode 5 = Control_backslash
+	shift control ctrlr keycode 5 = Control_backslash
+	alt ctrlr keycode 5 = Meta_four
+	shift alt ctrlr keycode 5 = Meta_dollar
+	ctrll	keycode 5 = four
+	shift ctrll keycode 5 = semicolon
+	control ctrll keycode 5 = Control_backslash
+	shift control ctrll keycode 5 = Control_backslash
+	alt ctrll keycode 5 = Meta_four
+	shift alt ctrll keycode 5 = Meta_dollar
+	ctrll ctrlr	keycode 5 = four
+	shift ctrll ctrlr keycode 5 = semicolon
+	control ctrll ctrlr keycode 5 = Control_backslash
+	shift control ctrll ctrlr keycode 5 = Control_backslash
+	alt ctrll ctrlr keycode 5 = Meta_four
+	shift alt ctrll ctrlr keycode 5 = Meta_dollar
+	altgr keycode 5 = 153
+keycode   6 = five             percent         
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five       
+	shift	alt	keycode   6 = Meta_percent    
+	ctrlr	keycode 6 = five
+	shift ctrlr keycode 6 = colon
+	control ctrlr keycode 6 = Control_bracketright
+	shift control ctrlr keycode 6 = Control_bracketright
+	alt ctrlr keycode 6 = Meta_five
+	shift alt ctrlr keycode 6 = Meta_percent
+	ctrll	keycode 6 = five
+	shift ctrll keycode 6 = colon
+	control ctrll keycode 6 = Control_bracketright
+	shift control ctrll keycode 6 = Control_bracketright
+	alt ctrll keycode 6 = Meta_five
+	shift alt ctrll keycode 6 = Meta_percent
+	ctrll ctrlr	keycode 6 = five
+	shift ctrll ctrlr keycode 6 = colon
+	control ctrll ctrlr keycode 6 = Control_bracketright
+	shift control ctrll ctrlr keycode 6 = Control_bracketright
+	alt ctrll ctrlr keycode 6 = Meta_five
+	shift alt ctrll ctrlr keycode 6 = Meta_percent
+	altgr keycode 6 = 156
+keycode   7 = six              asciicircum     
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six        
+	shift	alt	keycode   7 = Meta_asciicircum
+	ctrlr	keycode 7 = six
+	shift ctrlr keycode 7 = comma
+	control ctrlr keycode 7 = Control_asciicircum
+	shift control ctrlr keycode 7 = Control_asciicircum
+	alt ctrlr keycode 7 = Meta_six
+	shift alt ctrlr keycode 7 = Meta_asciicircum
+	ctrll	keycode 7 = six
+	shift ctrll keycode 7 = comma
+	control ctrll keycode 7 = Control_asciicircum
+	shift control ctrll keycode 7 = Control_asciicircum
+	alt ctrll keycode 7 = Meta_six
+	shift alt ctrll keycode 7 = Meta_asciicircum
+	ctrll ctrlr	keycode 7 = six
+	shift ctrll ctrlr keycode 7 = comma
+	control ctrll ctrlr keycode 7 = Control_asciicircum
+	shift control ctrll ctrlr keycode 7 = Control_asciicircum
+	alt ctrll ctrlr keycode 7 = Meta_six
+	shift alt ctrll ctrlr keycode 7 = Meta_asciicircum
+	altgr keycode 7 = 151
+keycode   8 = seven            ampersand        braceleft       
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven      
+	shift alt	keycode   8 = Meta_ampersand
+	ctrlr	keycode 8 = seven
+	shift ctrlr keycode 8 = period
+	control ctrlr keycode 8 = Control_underscore
+	shift control ctrlr keycode 8 = Control_underscore
+	alt ctrlr keycode 8 = Meta_seven
+	shift alt ctrlr keycode 8 = Meta_ampersand
+	ctrll	keycode 8 = seven
+	shift ctrll keycode 8 = period
+	control ctrll keycode 8 = Control_underscore
+	shift control ctrll keycode 8 = Control_underscore
+	alt ctrll keycode 8 = Meta_seven
+	shift alt ctrll keycode 8 = Meta_ampersand
+	ctrll ctrlr	keycode 8 = seven
+	shift ctrll ctrlr keycode 8 = period
+	control ctrll ctrlr keycode 8 = Control_underscore
+	shift control ctrll ctrlr keycode 8 = Control_underscore
+	alt ctrll ctrlr keycode 8 = Meta_seven
+	shift alt ctrll ctrlr keycode 8 = Meta_ampersand
+	altgr keycode 8 = 158
+keycode   9 = eight            asterisk         bracketleft     
+	control	keycode   9 = Delete          
+	alt	keycode   9 = Meta_eight      
+	shift alt	keycode   9 = Meta_asterisk
+	ctrlr	keycode 9 = eight
+	shift ctrlr keycode 9 = asterisk
+	control ctrlr keycode 9 = Delete
+	shift control ctrlr keycode 9 = Delete
+	alt ctrlr keycode 9 = Meta_eight
+	shift alt ctrlr keycode 9 = Meta_asterisk
+	ctrll	keycode 9 = eight
+	shift ctrll keycode 9 = asterisk
+	control ctrll keycode 9 = Delete
+	shift control ctrll keycode 9 = Delete
+	alt ctrll keycode 9 = Meta_eight
+	shift alt ctrll keycode 9 = Meta_asterisk
+	ctrll ctrlr	keycode 9 = eight
+	shift ctrll ctrlr keycode 9 = asterisk
+	control ctrll ctrlr keycode 9 = Delete
+	shift control ctrll ctrlr keycode 9 = Delete
+	alt ctrll ctrlr keycode 9 = Meta_eight
+	shift alt ctrll ctrlr keycode 9 = Meta_asterisk
+	altgr keycode 9 = 159
+keycode  10 = nine             parenleft        bracketright    
+	alt	keycode  10 = Meta_nine       
+	shift alt	keycode  10 = Meta_parenleft
+	ctrlr	keycode 10 = nine
+	shift ctrlr keycode 10 = parenleft
+	alt ctrlr keycode 10 = Meta_nine
+	shift alt ctrlr keycode 10 = Meta_parenleft
+	ctrll	keycode 10 = nine
+	shift ctrll keycode 10 = parenleft
+	alt ctrll keycode 10 = Meta_nine
+	shift alt ctrll keycode 10 = Meta_parenleft
+	ctrll ctrlr	keycode 10 = nine
+	shift ctrll ctrlr keycode 10 = parenleft
+	alt ctrll ctrlr keycode 10 = Meta_nine
+	shift alt ctrll ctrlr keycode 10 = Meta_parenleft
+	altgr keycode 10 = 147
+keycode  11 = zero             parenright       braceright      
+	alt	keycode  11 = Meta_zero       
+	alt	keycode  11 = Meta_parenright
+	ctrlr	keycode 11 = zero
+	shift ctrlr keycode 11 = parenright
+	alt ctrlr keycode 11 = Meta_zero
+	shift alt ctrlr keycode 11 = Meta_parenright
+	ctrll	keycode 11 = zero
+	shift ctrll keycode 11 = parenright
+	alt ctrll keycode 11 = Meta_zero
+	shift alt ctrll keycode 11 = Meta_parenright
+	ctrll ctrlr	keycode 11 = zero
+	shift ctrll ctrlr keycode 11 = parenright
+	alt ctrll ctrlr keycode 11 = Meta_zero
+	shift alt ctrll ctrlr keycode 11 = Meta_parenright
+	altgr keycode 11 = 155
+keycode  12 = minus            underscore       backslash       
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus      
+	shift alt	keycode  12 = Meta_underscore
+	ctrlr	keycode 12 = minus
+	shift ctrlr keycode 12 = underscore
+	control ctrlr keycode 12 = Control_underscore
+	shift control ctrlr keycode 12 = Control_underscore
+	alt ctrlr keycode 12 = Meta_minus
+	shift alt ctrlr keycode 12 = Meta_underscore
+	ctrll	keycode 12 = minus
+	shift ctrll keycode 12 = underscore
+	control ctrll keycode 12 = Control_underscore
+	shift control ctrll keycode 12 = Control_underscore
+	alt ctrll keycode 12 = Meta_minus
+	shift alt ctrll keycode 12 = Meta_underscore
+	ctrll ctrlr	keycode 12 = minus
+	shift ctrll ctrlr keycode 12 = underscore
+	control ctrll ctrlr keycode 12 = Control_underscore
+	shift control ctrll ctrlr keycode 12 = Control_underscore
+	alt ctrll ctrlr keycode 12 = Meta_minus
+	shift alt ctrll ctrlr keycode 12 = Meta_underscore
+	altgr keycode 12 = 149
+keycode  13 = equal            plus            
+	alt	keycode  13 = Meta_equal      
+	shift alt	keycode  13 = Meta_plus
+	ctrlr	keycode 13 = equal
+	shift ctrlr keycode 13 = plus
+	alt ctrlr keycode 13 = Meta_equal
+	shift alt ctrlr keycode 13 = Meta_plus
+	ctrll	keycode 13 = equal
+	shift ctrll keycode 13 = plus
+	alt ctrll keycode 13 = Meta_equal
+	shift alt ctrll keycode 13 = Meta_plus
+	ctrll ctrlr	keycode 13 = equal
+	shift ctrll ctrlr keycode 13 = plus
+	alt ctrll ctrlr keycode 13 = Meta_equal
+	shift alt ctrll ctrlr keycode 13 = Meta_plus
+keycode  14 = BackSpace           Delete          
+	control	keycode  14 = BackSpace       
+	alt	keycode  14 = Meta_Delete     
+	ctrlr	keycode 14 = BackSpace
+	shift ctrlr keycode 14 = BackSpace
+	control ctrlr keycode 14 = BackSpace
+	shift control ctrlr keycode 14 = BackSpace
+	alt ctrlr keycode 14 = Meta_Delete
+	shift alt ctrlr keycode 14 = Meta_Delete
+	ctrll	keycode 14 = BackSpace
+	shift ctrll keycode 14 = BackSpace
+	control ctrll keycode 14 = BackSpace
+	shift control ctrll keycode 14 = BackSpace
+	alt ctrll keycode 14 = Meta_Delete
+	shift alt ctrll keycode 14 = Meta_Delete
+	ctrll ctrlr	keycode 14 = BackSpace
+	shift ctrll ctrlr keycode 14 = BackSpace
+	control ctrll ctrlr keycode 14 = BackSpace
+	shift control ctrll ctrlr keycode 14 = BackSpace
+	alt ctrll ctrlr keycode 14 = Meta_Delete
+	shift alt ctrll ctrlr keycode 14 = Meta_Delete
+keycode  15 = Tab              Tab             
+	alt	keycode  15 = Meta_Tab        
+	ctrlr	keycode 15 = Tab
+	shift ctrlr keycode 15 = Tab
+	alt ctrlr keycode 15 = Meta_Tab
+	shift alt ctrlr keycode 15 = Meta_Tab
+	ctrll	keycode 15 = Tab
+	shift ctrll keycode 15 = Tab
+	alt ctrll keycode 15 = Meta_Tab
+	shift alt ctrll keycode 15 = Meta_Tab
+	ctrll ctrlr	keycode 15 = Tab
+	shift ctrll ctrlr keycode 15 = Tab
+	alt ctrll ctrlr keycode 15 = Meta_Tab
+	shift alt ctrll ctrlr keycode 15 = Meta_Tab
+keycode  16 = q               
+	ctrlr	keycode	16 = +202
+	shift ctrlr keycode 16 = +234
+	control ctrlr keycode 16 = Control_q
+	shift control ctrlr keycode 16 = Control_q
+	alt ctrlr keycode 16 = Meta_q
+	shift alt ctrlr keycode 16 = Meta_Q
+	control alt ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrlr keycode 16 = Meta_Control_q
+	ctrll	keycode	16 = +202
+	shift ctrll keycode 16 = +234
+	control ctrll keycode 16 = Control_q
+	shift control ctrll keycode 16 = Control_q
+	alt ctrll keycode 16 = Meta_q
+	shift alt ctrll keycode 16 = Meta_Q
+	control alt ctrll keycode 16 = Meta_Control_q
+	shift control alt ctrll keycode 16 = Meta_Control_q
+	ctrll ctrlr	keycode	16 = +202
+	shift ctrll ctrlr keycode 16 = +234
+	control ctrll ctrlr keycode 16 = Control_q
+	shift control ctrll ctrlr keycode 16 = Control_q
+	alt ctrll ctrlr keycode 16 = Meta_q
+	shift alt ctrll ctrlr keycode 16 = Meta_Q
+	control alt ctrll ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrll ctrlr keycode 16 = Meta_Control_q
+keycode  17 = w               
+	ctrlr	keycode	17 = +195
+	shift ctrlr keycode 17 = +227
+	control ctrlr keycode 17 = Control_w
+	shift control ctrlr keycode 17 = Control_w
+	alt ctrlr keycode 17 = Meta_w
+	shift alt ctrlr keycode 17 = Meta_W
+	control alt ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrlr keycode 17 = Meta_Control_w
+	ctrll	keycode	17 = +195
+	shift ctrll keycode 17 = +227
+	control ctrll keycode 17 = Control_w
+	shift control ctrll keycode 17 = Control_w
+	alt ctrll keycode 17 = Meta_w
+	shift alt ctrll keycode 17 = Meta_W
+	control alt ctrll keycode 17 = Meta_Control_w
+	shift control alt ctrll keycode 17 = Meta_Control_w
+	ctrll ctrlr	keycode	17 = +195
+	shift ctrll ctrlr keycode 17 = +227
+	control ctrll ctrlr keycode 17 = Control_w
+	shift control ctrll ctrlr keycode 17 = Control_w
+	alt ctrll ctrlr keycode 17 = Meta_w
+	shift alt ctrll ctrlr keycode 17 = Meta_W
+	control alt ctrll ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrll ctrlr keycode 17 = Meta_Control_w
+keycode  18 = e               
+	ctrlr	keycode 18 = +213
+	shift ctrlr keycode 18 = +245
+	control ctrlr keycode 18 = Control_e
+	shift control ctrlr keycode 18 = Control_e
+	alt ctrlr keycode 18 = Meta_e
+	shift alt ctrlr keycode 18 = Meta_E
+	control alt ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrlr keycode 18 = Meta_Control_e
+	ctrll	keycode 18 = +213
+	shift ctrll keycode 18 = +245
+	control ctrll keycode 18 = Control_e
+	shift control ctrll keycode 18 = Control_e
+	alt ctrll keycode 18 = Meta_e
+	shift alt ctrll keycode 18 = Meta_E
+	control alt ctrll keycode 18 = Meta_Control_e
+	shift control alt ctrll keycode 18 = Meta_Control_e
+	ctrll ctrlr	keycode 18 = +213
+	shift ctrll ctrlr keycode 18 = +245
+	control ctrll ctrlr keycode 18 = Control_e
+	shift control ctrll ctrlr keycode 18 = Control_e
+	alt ctrll ctrlr keycode 18 = Meta_e
+	shift alt ctrll ctrlr keycode 18 = Meta_E
+	control alt ctrll ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrll ctrlr keycode 18 = Meta_Control_e
+keycode  19 = r               
+	ctrlr	keycode 19 = +203
+	shift ctrlr keycode 19 = +235
+	control ctrlr keycode 19 = Control_r
+	shift control ctrlr keycode 19 = Control_r
+	alt ctrlr keycode 19 = Meta_r
+	shift alt ctrlr keycode 19 = Meta_R
+	control alt ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrlr keycode 19 = Meta_Control_r
+	ctrll	keycode 19 = +203
+	shift ctrll keycode 19 = +235
+	control ctrll keycode 19 = Control_r
+	shift control ctrll keycode 19 = Control_r
+	alt ctrll keycode 19 = Meta_r
+	shift alt ctrll keycode 19 = Meta_R
+	control alt ctrll keycode 19 = Meta_Control_r
+	shift control alt ctrll keycode 19 = Meta_Control_r
+	ctrll ctrlr	keycode 19 = +203
+	shift ctrll ctrlr keycode 19 = +235
+	control ctrll ctrlr keycode 19 = Control_r
+	shift control ctrll ctrlr keycode 19 = Control_r
+	alt ctrll ctrlr keycode 19 = Meta_r
+	shift alt ctrll ctrlr keycode 19 = Meta_R
+	control alt ctrll ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrll ctrlr keycode 19 = Meta_Control_r
+keycode  20 = t               
+	ctrlr	keycode 20 = +197
+	shift ctrlr keycode 20 = +229
+	control ctrlr keycode 20 = Control_t
+	shift control ctrlr keycode 20 = Control_t
+	alt ctrlr keycode 20 = Meta_t
+	shift alt ctrlr keycode 20 = Meta_T
+	control alt ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrlr keycode 20 = Meta_Control_t
+	ctrll	keycode 20 = +197
+	shift ctrll keycode 20 = +229
+	control ctrll keycode 20 = Control_t
+	shift control ctrll keycode 20 = Control_t
+	alt ctrll keycode 20 = Meta_t
+	shift alt ctrll keycode 20 = Meta_T
+	control alt ctrll keycode 20 = Meta_Control_t
+	shift control alt ctrll keycode 20 = Meta_Control_t
+	ctrll ctrlr	keycode 20 = +197
+	shift ctrll ctrlr keycode 20 = +229
+	control ctrll ctrlr keycode 20 = Control_t
+	shift control ctrll ctrlr keycode 20 = Control_t
+	alt ctrll ctrlr keycode 20 = Meta_t
+	shift alt ctrll ctrlr keycode 20 = Meta_T
+	control alt ctrll ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrll ctrlr keycode 20 = Meta_Control_t
+keycode  21 = y               
+	ctrlr	keycode 21 = +206
+	shift ctrlr keycode 21 = +238
+	control ctrlr keycode 21 = Control_y
+	shift control ctrlr keycode 21 = Control_y
+	alt ctrlr keycode 21 = Meta_y
+	shift alt ctrlr keycode 21 = Meta_Y
+	control alt ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrlr keycode 21 = Meta_Control_y
+	ctrll	keycode 21 = +206
+	shift ctrll keycode 21 = +238
+	control ctrll keycode 21 = Control_y
+	shift control ctrll keycode 21 = Control_y
+	alt ctrll keycode 21 = Meta_y
+	shift alt ctrll keycode 21 = Meta_Y
+	control alt ctrll keycode 21 = Meta_Control_y
+	shift control alt ctrll keycode 21 = Meta_Control_y
+	ctrll ctrlr	keycode 21 = +206
+	shift ctrll ctrlr keycode 21 = +238
+	control ctrll ctrlr keycode 21 = Control_y
+	shift control ctrll ctrlr keycode 21 = Control_y
+	alt ctrll ctrlr keycode 21 = Meta_y
+	shift alt ctrll ctrlr keycode 21 = Meta_Y
+	control alt ctrll ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrll ctrlr keycode 21 = Meta_Control_y
+keycode  22 = u               
+	ctrlr	keycode 22 = +199
+	shift ctrlr keycode 22 = +231
+	control ctrlr keycode 22 = Control_u
+	shift control ctrlr keycode 22 = Control_u
+	alt ctrlr keycode 22 = Meta_u
+	shift alt ctrlr keycode 22 = Meta_U
+	control alt ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrlr keycode 22 = Meta_Control_u
+	ctrll	keycode 22 = +199
+	shift ctrll keycode 22 = +231
+	control ctrll keycode 22 = Control_u
+	shift control ctrll keycode 22 = Control_u
+	alt ctrll keycode 22 = Meta_u
+	shift alt ctrll keycode 22 = Meta_U
+	control alt ctrll keycode 22 = Meta_Control_u
+	shift control alt ctrll keycode 22 = Meta_Control_u
+	ctrll ctrlr	keycode 22 = +199
+	shift ctrll ctrlr keycode 22 = +231
+	control ctrll ctrlr keycode 22 = Control_u
+	shift control ctrll ctrlr keycode 22 = Control_u
+	alt ctrll ctrlr keycode 22 = Meta_u
+	shift alt ctrll ctrlr keycode 22 = Meta_U
+	control alt ctrll ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrll ctrlr keycode 22 = Meta_Control_u
+keycode  23 = i               
+	ctrlr	keycode 23 = +219
+	shift ctrlr keycode 23 = +251
+	control ctrlr keycode 23 = Control_i
+	shift control ctrlr keycode 23 = Control_i
+	alt ctrlr keycode 23 = Meta_i
+	shift alt ctrlr keycode 23 = Meta_I
+	control alt ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrlr keycode 23 = Meta_Control_i
+	ctrll	keycode 23 = +219
+	shift ctrll keycode 23 = +251
+	control ctrll keycode 23 = Control_i
+	shift control ctrll keycode 23 = Control_i
+	alt ctrll keycode 23 = Meta_i
+	shift alt ctrll keycode 23 = Meta_I
+	control alt ctrll keycode 23 = Meta_Control_i
+	shift control alt ctrll keycode 23 = Meta_Control_i
+	ctrll ctrlr	keycode 23 = +219
+	shift ctrll ctrlr keycode 23 = +251
+	control ctrll ctrlr keycode 23 = Control_i
+	shift control ctrll ctrlr keycode 23 = Control_i
+	alt ctrll ctrlr keycode 23 = Meta_i
+	shift alt ctrll ctrlr keycode 23 = Meta_I
+	control alt ctrll ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrll ctrlr keycode 23 = Meta_Control_i
+keycode  24 = o               
+	ctrlr	keycode 24 = +221
+	shift ctrlr keycode 24 = +253
+	control ctrlr keycode 24 = Control_o
+	shift control ctrlr keycode 24 = Control_o
+	alt ctrlr keycode 24 = Meta_o
+	shift alt ctrlr keycode 24 = Meta_O
+	control alt ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrlr keycode 24 = Meta_Control_o
+	ctrll	keycode 24 = +221
+	shift ctrll keycode 24 = +253
+	control ctrll keycode 24 = Control_o
+	shift control ctrll keycode 24 = Control_o
+	alt ctrll keycode 24 = Meta_o
+	shift alt ctrll keycode 24 = Meta_O
+	control alt ctrll keycode 24 = Meta_Control_o
+	shift control alt ctrll keycode 24 = Meta_Control_o
+	ctrll ctrlr	keycode 24 = +221
+	shift ctrll ctrlr keycode 24 = +253
+	control ctrll ctrlr keycode 24 = Control_o
+	shift control ctrll ctrlr keycode 24 = Control_o
+	alt ctrll ctrlr keycode 24 = Meta_o
+	shift alt ctrll ctrlr keycode 24 = Meta_O
+	control alt ctrll ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrll ctrlr keycode 24 = Meta_Control_o
+keycode  25 = p               
+	ctrlr	keycode 25 = +218
+	shift ctrlr keycode 25 = +250
+	control ctrlr keycode 25 = Control_p
+	shift control ctrlr keycode 25 = Control_p
+	alt ctrlr keycode 25 = Meta_p
+	shift alt ctrlr keycode 25 = Meta_P
+	control alt ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrlr keycode 25 = Meta_Control_p
+	ctrll	keycode 25 = +218
+	shift ctrll keycode 25 = +250
+	control ctrll keycode 25 = Control_p
+	shift control ctrll keycode 25 = Control_p
+	alt ctrll keycode 25 = Meta_p
+	shift alt ctrll keycode 25 = Meta_P
+	control alt ctrll keycode 25 = Meta_Control_p
+	shift control alt ctrll keycode 25 = Meta_Control_p
+	ctrll ctrlr	keycode 25 = +218
+	shift ctrll ctrlr keycode 25 = +250
+	control ctrll ctrlr keycode 25 = Control_p
+	shift control ctrll ctrlr keycode 25 = Control_p
+	alt ctrll ctrlr keycode 25 = Meta_p
+	shift alt ctrll ctrlr keycode 25 = Meta_P
+	control alt ctrll ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrll ctrlr keycode 25 = Meta_Control_p
+keycode  26 = bracketleft      braceleft       
+	control	keycode  26 = Escape          
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft  
+	ctrlr	keycode 26 = +200
+	shift ctrlr keycode 26 = +232
+	control ctrlr keycode 26 = Escape
+	shift control ctrlr keycode 26 = Escape
+	alt ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrlr keycode 26 = Meta_braceleft
+	ctrll	keycode 26 = +200
+	shift ctrll keycode 26 = +232
+	control ctrll keycode 26 = Escape
+	shift control ctrll keycode 26 = Escape
+	alt ctrll keycode 26 = Meta_bracketleft
+	shift alt ctrll keycode 26 = Meta_braceleft
+	ctrll ctrlr	keycode 26 = +200
+	shift ctrll ctrlr keycode 26 = +232
+	control ctrll ctrlr keycode 26 = Escape
+	shift control ctrll ctrlr keycode 26 = Escape
+	alt ctrll ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrll ctrlr keycode 26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde      
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright 
+	ctrlr	keycode 27 = +223
+	shift ctrlr keycode 27 = +255
+	control ctrlr keycode 27 = Control_bracketright
+	shift control ctrlr keycode 27 = Control_bracketright
+	alt ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrlr keycode 27 = Meta_braceright
+	control alt ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrlr keycode 27 = Meta_Control_bracketright
+	ctrll	keycode 27 = +167
+	shift ctrll keycode 27 = +183
+	control ctrll keycode 27 = Control_bracketright
+	shift control ctrll keycode 27 = Control_bracketright
+	alt ctrll keycode 27 = Meta_bracketright
+	shift alt ctrll keycode 27 = Meta_braceright
+	control alt ctrll keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll keycode 27 = Meta_Control_bracketright
+	ctrll ctrlr	keycode 27 = +167
+	shift ctrll ctrlr keycode 27 = +183
+	control ctrll ctrlr keycode 27 = Control_bracketright
+	shift control ctrll ctrlr keycode 27 = Control_bracketright
+	alt ctrll ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrll ctrlr keycode 27 = Meta_braceright
+	control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt	keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+keycode  30 = a               
+	ctrlr	keycode 30 = +198
+	shift ctrlr keycode 30 = +230
+	control ctrlr keycode 30 = Control_a
+	shift control ctrlr keycode 30 = Control_a
+	alt ctrlr keycode 30 = Meta_a
+	shift alt ctrlr keycode 30 = Meta_A
+	control alt ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrlr keycode 30 = Meta_Control_a
+	ctrll	keycode 30 = +198
+	shift ctrll keycode 30 = +230
+	control ctrll keycode 30 = Control_a
+	shift control ctrll keycode 30 = Control_a
+	alt ctrll keycode 30 = Meta_a
+	shift alt ctrll keycode 30 = Meta_A
+	control alt ctrll keycode 30 = Meta_Control_a
+	shift control alt ctrll keycode 30 = Meta_Control_a
+	ctrll ctrlr	keycode 30 = +198
+	shift ctrll ctrlr keycode 30 = +230
+	control ctrll ctrlr keycode 30 = Control_a
+	shift control ctrll ctrlr keycode 30 = Control_a
+	alt ctrll ctrlr keycode 30 = Meta_a
+	shift alt ctrll ctrlr keycode 30 = Meta_A
+	control alt ctrll ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrll ctrlr keycode 30 = Meta_Control_a
+keycode  31 = s               
+	ctrlr	keycode 31 = +217
+	shift ctrlr keycode 31 = +249
+	control ctrlr keycode 31 = Control_s
+	shift control ctrlr keycode 31 = Control_s
+	alt ctrlr keycode 31 = Meta_s
+	shift alt ctrlr keycode 31 = Meta_S
+	control alt ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrlr keycode 31 = Meta_Control_s
+	ctrll	keycode 31 = +166
+	shift ctrll keycode 31 = +182
+	control ctrll keycode 31 = Control_s
+	shift control ctrll keycode 31 = Control_s
+	alt ctrll keycode 31 = Meta_s
+	shift alt ctrll keycode 31 = Meta_S
+	control alt ctrll keycode 31 = Meta_Control_s
+	shift control alt ctrll keycode 31 = Meta_Control_s
+	ctrll ctrlr	keycode 31 = +166
+	shift ctrll ctrlr keycode 31 = +182
+	control ctrll ctrlr keycode 31 = Control_s
+	shift control ctrll ctrlr keycode 31 = Control_s
+	alt ctrll ctrlr keycode 31 = Meta_s
+	shift alt ctrll ctrlr keycode 31 = Meta_S
+	control alt ctrll ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrll ctrlr keycode 31 = Meta_Control_s
+keycode  32 = d               
+	ctrlr	keycode 32 = +215
+	shift ctrlr keycode 32 = +247
+	control ctrlr keycode 32 = Control_d
+	shift control ctrlr keycode 32 = Control_d
+	alt ctrlr keycode 32 = Meta_d
+	shift alt ctrlr keycode 32 = Meta_D
+	control alt ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrlr keycode 32 = Meta_Control_d
+	ctrll	keycode 32 = +215
+	shift ctrll keycode 32 = +247
+	control ctrll keycode 32 = Control_d
+	shift control ctrll keycode 32 = Control_d
+	alt ctrll keycode 32 = Meta_d
+	shift alt ctrll keycode 32 = Meta_D
+	control alt ctrll keycode 32 = Meta_Control_d
+	shift control alt ctrll keycode 32 = Meta_Control_d
+	ctrll ctrlr	keycode 32 = +215
+	shift ctrll ctrlr keycode 32 = +247
+	control ctrll ctrlr keycode 32 = Control_d
+	shift control ctrll ctrlr keycode 32 = Control_d
+	alt ctrll ctrlr keycode 32 = Meta_d
+	shift alt ctrll ctrlr keycode 32 = Meta_D
+	control alt ctrll ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrll ctrlr keycode 32 = Meta_Control_d
+keycode  33 = f               
+	ctrlr	keycode 33 = +193
+	shift ctrlr keycode 33 = +225
+	control ctrlr keycode 33 = Control_f
+	shift control ctrlr keycode 33 = Control_f
+	alt ctrlr keycode 33 = Meta_f
+	shift alt ctrlr keycode 33 = Meta_F
+	control alt ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrlr keycode 33 = Meta_Control_f
+	ctrll	keycode 33 = +193
+	shift ctrll keycode 33 = +225
+	control ctrll keycode 33 = Control_f
+	shift control ctrll keycode 33 = Control_f
+	alt ctrll keycode 33 = Meta_f
+	shift alt ctrll keycode 33 = Meta_F
+	control alt ctrll keycode 33 = Meta_Control_f
+	shift control alt ctrll keycode 33 = Meta_Control_f
+	ctrll ctrlr	keycode 33 = +193
+	shift ctrll ctrlr keycode 33 = +225
+	control ctrll ctrlr keycode 33 = Control_f
+	shift control ctrll ctrlr keycode 33 = Control_f
+	alt ctrll ctrlr keycode 33 = Meta_f
+	shift alt ctrll ctrlr keycode 33 = Meta_F
+	control alt ctrll ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrll ctrlr keycode 33 = Meta_Control_f
+keycode  34 = g               
+	ctrlr	keycode 34 = +208
+	shift ctrlr keycode 34 = +240
+	control ctrlr keycode 34 = Control_g
+	shift control ctrlr keycode 34 = Control_g
+	alt ctrlr keycode 34 = Meta_g
+	shift alt ctrlr keycode 34 = Meta_G
+	control alt ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrlr keycode 34 = Meta_Control_g
+	ctrll	keycode 34 = +208
+	shift ctrll keycode 34 = +240
+	control ctrll keycode 34 = Control_g
+	shift control ctrll keycode 34 = Control_g
+	alt ctrll keycode 34 = Meta_g
+	shift alt ctrll keycode 34 = Meta_G
+	control alt ctrll keycode 34 = Meta_Control_g
+	shift control alt ctrll keycode 34 = Meta_Control_g
+	ctrll ctrlr	keycode 34 = +208
+	shift ctrll ctrlr keycode 34 = +240
+	control ctrll ctrlr keycode 34 = Control_g
+	shift control ctrll ctrlr keycode 34 = Control_g
+	alt ctrll ctrlr keycode 34 = Meta_g
+	shift alt ctrll ctrlr keycode 34 = Meta_G
+	control alt ctrll ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrll ctrlr keycode 34 = Meta_Control_g
+keycode  35 = h               
+	ctrlr	keycode 35 = +210
+	shift ctrlr keycode 35 = +242
+	control ctrlr keycode 35 = Control_h
+	shift control ctrlr keycode 35 = Control_h
+	alt ctrlr keycode 35 = Meta_h
+	shift alt ctrlr keycode 35 = Meta_H
+	control alt ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrlr keycode 35 = Meta_Control_h
+	ctrll	keycode 35 = +210
+	shift ctrll keycode 35 = +242
+	control ctrll keycode 35 = Control_h
+	shift control ctrll keycode 35 = Control_h
+	alt ctrll keycode 35 = Meta_h
+	shift alt ctrll keycode 35 = Meta_H
+	control alt ctrll keycode 35 = Meta_Control_h
+	shift control alt ctrll keycode 35 = Meta_Control_h
+	ctrll ctrlr	keycode 35 = +210
+	shift ctrll ctrlr keycode 35 = +242
+	control ctrll ctrlr keycode 35 = Control_h
+	shift control ctrll ctrlr keycode 35 = Control_h
+	alt ctrll ctrlr keycode 35 = Meta_h
+	shift alt ctrll ctrlr keycode 35 = Meta_H
+	control alt ctrll ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrll ctrlr keycode 35 = Meta_Control_h
+keycode  36 = j               
+	ctrlr	keycode 36 = +207
+	shift ctrlr keycode 36 = +239
+	control ctrlr keycode 36 = Control_j
+	shift control ctrlr keycode 36 = Control_j
+	alt ctrlr keycode 36 = Meta_j
+	shift alt ctrlr keycode 36 = Meta_J
+	control alt ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrlr keycode 36 = Meta_Control_j
+	ctrll	keycode 36 = +207
+	shift ctrll keycode 36 = +239
+	control ctrll keycode 36 = Control_j
+	shift control ctrll keycode 36 = Control_j
+	alt ctrll keycode 36 = Meta_j
+	shift alt ctrll keycode 36 = Meta_J
+	control alt ctrll keycode 36 = Meta_Control_j
+	shift control alt ctrll keycode 36 = Meta_Control_j
+	ctrll ctrlr	keycode 36 = +207
+	shift ctrll ctrlr keycode 36 = +239
+	control ctrll ctrlr keycode 36 = Control_j
+	shift control ctrll ctrlr keycode 36 = Control_j
+	alt ctrll ctrlr keycode 36 = Meta_j
+	shift alt ctrll ctrlr keycode 36 = Meta_J
+	control alt ctrll ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrll ctrlr keycode 36 = Meta_Control_j
+keycode  37 = k               
+	ctrlr	keycode 37 = +204
+	shift ctrlr keycode 37 = +236
+	control ctrlr keycode 37 = Control_k
+	shift control ctrlr keycode 37 = Control_k
+	alt ctrlr keycode 37 = Meta_k
+	shift alt ctrlr keycode 37 = Meta_K
+	control alt ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrlr keycode 37 = Meta_Control_k
+	ctrll	keycode 37 = +204
+	shift ctrll keycode 37 = +236
+	control ctrll keycode 37 = Control_k
+	shift control ctrll keycode 37 = Control_k
+	alt ctrll keycode 37 = Meta_k
+	shift alt ctrll keycode 37 = Meta_K
+	control alt ctrll keycode 37 = Meta_Control_k
+	shift control alt ctrll keycode 37 = Meta_Control_k
+	ctrll ctrlr	keycode 37 = +204
+	shift ctrll ctrlr keycode 37 = +236
+	control ctrll ctrlr keycode 37 = Control_k
+	shift control ctrll ctrlr keycode 37 = Control_k
+	alt ctrll ctrlr keycode 37 = Meta_k
+	shift alt ctrll ctrlr keycode 37 = Meta_K
+	control alt ctrll ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrll ctrlr keycode 37 = Meta_Control_k
+keycode  38 = l               
+	ctrlr	keycode 38 = +196
+	shift ctrlr keycode 38 = +228
+	control ctrlr keycode 38 = Control_l
+	shift control ctrlr keycode 38 = Control_l
+	alt ctrlr keycode 38 = Meta_l
+	shift alt ctrlr keycode 38 = Meta_L
+	control alt ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrlr keycode 38 = Meta_Control_l
+	ctrll	keycode 38 = +196
+	shift ctrll keycode 38 = +228
+	control ctrll keycode 38 = Control_l
+	shift control ctrll keycode 38 = Control_l
+	alt ctrll keycode 38 = Meta_l
+	shift alt ctrll keycode 38 = Meta_L
+	control alt ctrll keycode 38 = Meta_Control_l
+	shift control alt ctrll keycode 38 = Meta_Control_l
+	ctrll ctrlr	keycode 38 = +196
+	shift ctrll ctrlr keycode 38 = +228
+	control ctrll ctrlr keycode 38 = Control_l
+	shift control ctrll ctrlr keycode 38 = Control_l
+	alt ctrll ctrlr keycode 38 = Meta_l
+	shift alt ctrll ctrlr keycode 38 = Meta_L
+	control alt ctrll ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrll ctrlr keycode 38 = Meta_Control_l
+keycode  39 = semicolon        colon           
+	alt	keycode  39 = Meta_semicolon  
+	shift	alt	keycode	 39 = Meta_colon
+	ctrlr	keycode 39 = +214
+	shift ctrlr keycode 39 = +246
+	alt ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrlr keycode 39 = Meta_colon
+	ctrll	keycode 39 = +214
+	shift ctrll keycode 39 = +246
+	alt ctrll keycode 39 = Meta_semicolon
+	shift alt ctrll keycode 39 = Meta_colon
+	ctrll ctrlr	keycode 39 = +214
+	shift ctrll ctrlr keycode 39 = +246
+	alt ctrll ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrll ctrlr keycode 39 = Meta_colon
+keycode  40 = apostrophe       quotedbl        
+	control	keycode  40 = Control_g       
+	alt	keycode  40 = Meta_apostrophe 
+	shift	alt	keycode 40 = Meta_quotedbl
+	ctrlr	keycode 40 = +220
+	shift ctrlr keycode 40 = +252
+	control ctrlr keycode 40 = Control_g
+	shift control ctrlr keycode 40 = Control_g
+	alt ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrlr keycode 40 = Meta_quotedbl
+	ctrll	keycode 40 = +164
+	shift ctrll keycode 40 = +180
+	control ctrll keycode 40 = Control_g
+	shift control ctrll keycode 40 = Control_g
+	alt ctrll keycode 40 = Meta_apostrophe
+	shift alt ctrll keycode 40 = Meta_quotedbl
+	ctrll ctrlr	keycode 40 = +164
+	shift ctrll ctrlr keycode 40 = +180
+	control ctrll ctrlr keycode 40 = Control_g
+	shift control ctrll ctrlr keycode 40 = Control_g
+	alt ctrll ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrll ctrlr keycode 40 = Meta_quotedbl
+keycode  41 = grave            asciitilde      
+	control	keycode  41 = nul             
+	alt	keycode  41 = Meta_grave      
+	shift	alt	keycode 41 = Meta_asciitilde
+	ctrlr	keycode 41 = apostrophe
+	shift ctrlr keycode 41 = question
+	control ctrlr keycode 41 = nul
+	shift control ctrlr keycode 41 = nul
+	alt ctrlr keycode 41 = Meta_grave
+	shift alt ctrlr keycode 41 = Meta_asciitilde
+	ctrll	keycode 41 = apostrophe
+	shift ctrll keycode 41 = question
+	control ctrll keycode 41 = nul
+	shift control ctrll keycode 41 = nul
+	alt ctrll keycode 41 = Meta_grave
+	shift alt ctrll keycode 41 = Meta_asciitilde
+	ctrll ctrlr	keycode 41 = apostrophe
+	shift ctrll ctrlr keycode 41 = question
+	control ctrll ctrlr keycode 41 = nul
+	shift control ctrll ctrlr keycode 41 = nul
+	alt ctrll ctrlr keycode 41 = Meta_grave
+	shift alt ctrll ctrlr keycode 41 = Meta_asciitilde
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash  
+	shift	alt	keycode  43 = Meta_bar        
+	control alt	keycode 43 = Meta_Control_backslash
+	shift control alt keycode 43 = Meta_Control_backslash
+	ctrlr	keycode 43 = backslash
+	shift ctrlr keycode 43 = bar
+	control ctrlr keycode 43 = Control_backslash
+	shift control ctrlr keycode 43 = Control_backslash
+	alt ctrlr keycode 43 = Meta_backslash
+	shift alt ctrlr keycode 43 = Meta_bar
+	control alt ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrlr keycode 43 = Meta_Control_backslash
+	ctrll	keycode 43 = backslash
+	shift ctrll keycode 43 = bar
+	control ctrll keycode 43 = Control_backslash
+	shift control ctrll keycode 43 = Control_backslash
+	alt ctrll keycode 43 = Meta_backslash
+	shift alt ctrll keycode 43 = Meta_bar
+	control alt ctrll keycode 43 = Meta_Control_backslash
+	shift control alt ctrll keycode 43 = Meta_Control_backslash
+	ctrll ctrlr	keycode 43 = backslash
+	shift ctrll ctrlr keycode 43 = bar
+	control ctrll ctrlr keycode 43 = Control_backslash
+	shift control ctrll ctrlr keycode 43 = Control_backslash
+	alt ctrll ctrlr keycode 43 = Meta_backslash
+	shift alt ctrll ctrlr keycode 43 = Meta_bar
+	control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+keycode  44 = z               
+	ctrlr	keycode 44 = +209
+	shift ctrlr keycode 44 = +241
+	control ctrlr keycode 44 = Control_z
+	shift control ctrlr keycode 44 = Control_z
+	alt ctrlr keycode 44 = Meta_z
+	shift alt ctrlr keycode 44 = Meta_Z
+	control alt ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrlr keycode 44 = Meta_Control_z
+	ctrll	keycode 44 = +209
+	shift ctrll keycode 44 = +241
+	control ctrll keycode 44 = Control_z
+	shift control ctrll keycode 44 = Control_z
+	alt ctrll keycode 44 = Meta_z
+	shift alt ctrll keycode 44 = Meta_Z
+	control alt ctrll keycode 44 = Meta_Control_z
+	shift control alt ctrll keycode 44 = Meta_Control_z
+	ctrll ctrlr	keycode 44 = +209
+	shift ctrll ctrlr keycode 44 = +241
+	control ctrll ctrlr keycode 44 = Control_z
+	shift control ctrll ctrlr keycode 44 = Control_z
+	alt ctrll ctrlr keycode 44 = Meta_z
+	shift alt ctrll ctrlr keycode 44 = Meta_Z
+	control alt ctrll ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrll ctrlr keycode 44 = Meta_Control_z
+keycode  45 = x               
+	ctrlr	keycode 45 = +222
+	shift ctrlr keycode 45 = +254
+	control ctrlr keycode 45 = Control_x
+	shift control ctrlr keycode 45 = Control_x
+	alt ctrlr keycode 45 = Meta_x
+	shift alt ctrlr keycode 45 = Meta_X
+	control alt ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrlr keycode 45 = Meta_Control_x
+	ctrll	keycode 45 = +222
+	shift ctrll keycode 45 = +254
+	control ctrll keycode 45 = Control_x
+	shift control ctrll keycode 45 = Control_x
+	alt ctrll keycode 45 = Meta_x
+	shift alt ctrll keycode 45 = Meta_X
+	control alt ctrll keycode 45 = Meta_Control_x
+	shift control alt ctrll keycode 45 = Meta_Control_x
+	ctrll ctrlr	keycode 45 = +222
+	shift ctrll ctrlr keycode 45 = +254
+	control ctrll ctrlr keycode 45 = Control_x
+	shift control ctrll ctrlr keycode 45 = Control_x
+	alt ctrll ctrlr keycode 45 = Meta_x
+	shift alt ctrll ctrlr keycode 45 = Meta_X
+	control alt ctrll ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrll ctrlr keycode 45 = Meta_Control_x
+keycode  46 = c               
+	ctrlr	keycode 46 = +211
+	shift ctrlr keycode 46 = +243
+	control ctrlr keycode 46 = Control_c
+	shift control ctrlr keycode 46 = Control_c
+	alt ctrlr keycode 46 = Meta_c
+	shift alt ctrlr keycode 46 = Meta_C
+	control alt ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrlr keycode 46 = Meta_Control_c
+	ctrll	keycode 46 = +211
+	shift ctrll keycode 46 = +243
+	control ctrll keycode 46 = Control_c
+	shift control ctrll keycode 46 = Control_c
+	alt ctrll keycode 46 = Meta_c
+	shift alt ctrll keycode 46 = Meta_C
+	control alt ctrll keycode 46 = Meta_Control_c
+	shift control alt ctrll keycode 46 = Meta_Control_c
+	ctrll ctrlr	keycode 46 = +211
+	shift ctrll ctrlr keycode 46 = +243
+	control ctrll ctrlr keycode 46 = Control_c
+	shift control ctrll ctrlr keycode 46 = Control_c
+	alt ctrll ctrlr keycode 46 = Meta_c
+	shift alt ctrll ctrlr keycode 46 = Meta_C
+	control alt ctrll ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrll ctrlr keycode 46 = Meta_Control_c
+keycode  47 = v               
+	ctrlr	keycode 47 = +205
+	shift ctrlr keycode 47 = +237
+	control ctrlr keycode 47 = Control_v
+	shift control ctrlr keycode 47 = Control_v
+	alt ctrlr keycode 47 = Meta_v
+	shift alt ctrlr keycode 47 = Meta_V
+	control alt ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrlr keycode 47 = Meta_Control_v
+	ctrll	keycode 47 = +205
+	shift ctrll keycode 47 = +237
+	control ctrll keycode 47 = Control_v
+	shift control ctrll keycode 47 = Control_v
+	alt ctrll keycode 47 = Meta_v
+	shift alt ctrll keycode 47 = Meta_V
+	control alt ctrll keycode 47 = Meta_Control_v
+	shift control alt ctrll keycode 47 = Meta_Control_v
+	ctrll ctrlr	keycode 47 = +205
+	shift ctrll ctrlr keycode 47 = +237
+	control ctrll ctrlr keycode 47 = Control_v
+	shift control ctrll ctrlr keycode 47 = Control_v
+	alt ctrll ctrlr keycode 47 = Meta_v
+	shift alt ctrll ctrlr keycode 47 = Meta_V
+	control alt ctrll ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrll ctrlr keycode 47 = Meta_Control_v
+keycode  48 = b               
+	ctrlr	keycode	48 = +201
+	shift ctrlr keycode 48 = +233
+	control ctrlr keycode 48 = Control_b
+	shift control ctrlr keycode 48 = Control_b
+	alt ctrlr keycode 48 = Meta_b
+	shift alt ctrlr keycode 48 = Meta_B
+	control alt ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrlr keycode 48 = Meta_Control_b
+	ctrll	keycode	48 = +201
+	shift ctrll keycode 48 = +233
+	control ctrll keycode 48 = Control_b
+	shift control ctrll keycode 48 = Control_b
+	alt ctrll keycode 48 = Meta_b
+	shift alt ctrll keycode 48 = Meta_B
+	control alt ctrll keycode 48 = Meta_Control_b
+	shift control alt ctrll keycode 48 = Meta_Control_b
+	ctrll ctrlr	keycode	48 = +201
+	shift ctrll ctrlr keycode 48 = +233
+	control ctrll ctrlr keycode 48 = Control_b
+	shift control ctrll ctrlr keycode 48 = Control_b
+	alt ctrll ctrlr keycode 48 = Meta_b
+	shift alt ctrll ctrlr keycode 48 = Meta_B
+	control alt ctrll ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrll ctrlr keycode 48 = Meta_Control_b
+keycode  49 = n               
+	ctrlr	keycode 49 = +212
+	shift ctrlr keycode 49 = +244
+	control ctrlr keycode 49 = Control_n
+	shift control ctrlr keycode 49 = Control_n
+	alt ctrlr keycode 49 = Meta_n
+	shift alt ctrlr keycode 49 = Meta_N
+	control alt ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrlr keycode 49 = Meta_Control_n
+	ctrll	keycode 49 = +212
+	shift ctrll keycode 49 = +244
+	control ctrll keycode 49 = Control_n
+	shift control ctrll keycode 49 = Control_n
+	alt ctrll keycode 49 = Meta_n
+	shift alt ctrll keycode 49 = Meta_N
+	control alt ctrll keycode 49 = Meta_Control_n
+	shift control alt ctrll keycode 49 = Meta_Control_n
+	ctrll ctrlr	keycode 49 = +212
+	shift ctrll ctrlr keycode 49 = +244
+	control ctrll ctrlr keycode 49 = Control_n
+	shift control ctrll ctrlr keycode 49 = Control_n
+	alt ctrll ctrlr keycode 49 = Meta_n
+	shift alt ctrll ctrlr keycode 49 = Meta_N
+	control alt ctrll ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrll ctrlr keycode 49 = Meta_Control_n
+keycode  50 = m               
+	ctrlr	keycode 50 = +216
+	shift ctrlr keycode 50 = +248
+	control ctrlr keycode 50 = Control_m
+	shift control ctrlr keycode 50 = Control_m
+	alt ctrlr keycode 50 = Meta_m
+	shift alt ctrlr keycode 50 = Meta_M
+	control alt ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrlr keycode 50 = Meta_Control_m
+	ctrll	keycode 50 = +216
+	shift ctrll keycode 50 = +248
+	control ctrll keycode 50 = Control_m
+	shift control ctrll keycode 50 = Control_m
+	alt ctrll keycode 50 = Meta_m
+	shift alt ctrll keycode 50 = Meta_M
+	control alt ctrll keycode 50 = Meta_Control_m
+	shift control alt ctrll keycode 50 = Meta_Control_m
+	ctrll ctrlr	keycode 50 = +216
+	shift ctrll ctrlr keycode 50 = +248
+	control ctrll ctrlr keycode 50 = Control_m
+	shift control ctrll ctrlr keycode 50 = Control_m
+	alt ctrll ctrlr keycode 50 = Meta_m
+	shift alt ctrll ctrlr keycode 50 = Meta_M
+	control alt ctrll ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrll ctrlr keycode 50 = Meta_Control_m
+keycode  51 = comma            less            
+	alt	keycode  51 = Meta_comma      
+	shift	alt	keycode  51 = Meta_less       
+	ctrlr	keycode 51 = +194
+	shift ctrlr keycode 51 = +226
+	alt ctrlr keycode 51 = Meta_comma
+	shift alt ctrlr keycode 51 = Meta_less
+	ctrll	keycode 51 = +194
+	shift ctrll keycode 51 = +226
+	alt ctrll keycode 51 = Meta_comma
+	shift alt ctrll keycode 51 = Meta_less
+	ctrll ctrlr	keycode 51 = +194
+	shift ctrll ctrlr keycode 51 = +226
+	alt ctrll ctrlr keycode 51 = Meta_comma
+	shift alt ctrll ctrlr keycode 51 = Meta_less
+keycode  52 = period           greater         
+	control	keycode  52 = Compose         
+	alt	keycode  52 = Meta_period     
+	shift	alt	keycode  52 = Meta_greater    
+	ctrlr	keycode 52 = +192
+	shift ctrlr keycode 52 = +224
+	alt ctrlr keycode 52 = Meta_period
+	shift alt ctrlr keycode 52 = Meta_greater
+	ctrll	keycode 52 = +192
+	shift ctrll keycode 52 = +224
+	alt ctrll keycode 52 = Meta_period
+	shift alt ctrll keycode 52 = Meta_greater
+	ctrll ctrlr	keycode 52 = +192
+	shift ctrll ctrlr keycode 52 = +224
+	alt ctrll ctrlr keycode 52 = Meta_period
+	shift alt ctrll ctrlr keycode 52 = Meta_greater
+keycode  53 = slash            question        
+	control	keycode  53 = Delete          
+	shift	control	keycode  53 = Delete          
+	alt	keycode  53 = Meta_slash      
+	ctrlr	keycode 53 = +163
+	shift ctrlr keycode 53 = +179
+	alt ctrlr keycode 53 = Meta_slash
+	shift alt ctrlr keycode 53 = Meta_question
+	ctrll	keycode 53 = +173
+	shift ctrll keycode 53 = +189
+	alt ctrll keycode 53 = Meta_slash
+	shift alt ctrll keycode 53 = Meta_question
+	ctrll ctrlr	keycode 53 = +173
+	shift ctrll ctrlr keycode 53 = +189
+	alt ctrll ctrlr keycode 53 = Meta_slash
+	shift alt ctrll ctrlr keycode 53 = Meta_question
+keycode  54 = Shift           
+keycode  55 = KP_Multiply     
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control	keycode  57 = nul             
+	alt	keycode  57 = Meta_space      
+	ctrlr	keycode 57 = space
+	shift ctrlr keycode 57 = space
+	control ctrlr keycode 57 = nul
+	shift control ctrlr keycode 57 = nul
+	alt ctrlr keycode 57 = Meta_space
+	shift alt ctrlr keycode 57 = Meta_space
+	ctrll	keycode 57 = space
+	shift ctrll keycode 57 = space
+	control ctrll keycode 57 = nul
+	shift control ctrll keycode 57 = nul
+	alt ctrll keycode 57 = Meta_space
+	shift alt ctrll keycode 57 = Meta_space
+	ctrll ctrlr	keycode 57 = space
+	shift ctrll ctrlr keycode 57 = space
+	control ctrll ctrlr keycode 57 = nul
+	shift control ctrll ctrlr keycode 57 = nul
+	alt ctrll ctrlr keycode 57 = Meta_space
+	shift alt ctrll ctrlr keycode 57 = Meta_space
+keycode  58 = Caps_Lock       
+keycode  59 = F1               F13              Console_13      
+	control	keycode  59 = F25             
+	shift	control	keycode  59 = F37             
+	alt	keycode  59 = Console_1       
+	control	alt	keycode  59 = Console_1       
+	ctrlr keycode  59 = F1
+	ctrlr shift keycode 59 = F13
+	ctrlr altgr keycode 59 = Console_13      
+	ctrlr control	keycode  59 = F25             
+	ctrlr shift	control	keycode  59 = F37             
+	ctrlr alt	keycode  59 = Console_1       
+	ctrlr control	alt	keycode  59 = Console_1       
+	ctrll keycode  59 = F1
+	ctrll shift keycode 59 = F13
+	ctrll altgr keycode 59 = Console_13      
+	ctrll control	keycode  59 = F25             
+	ctrll shift	control	keycode  59 = F37             
+	ctrll alt	keycode  59 = Console_1       
+	ctrll control	alt	keycode  59 = Console_1       
+	ctrlr ctrll keycode  59 = F1
+	ctrlr ctrll shift keycode 59 = F13
+	ctrlr ctrll altgr keycode 59 = Console_13      
+	ctrlr ctrll control	keycode  59 = F25             
+	ctrlr ctrll shift	control	keycode  59 = F37             
+	ctrlr ctrll alt	keycode  59 = Console_1       
+	ctrlr ctrll control	alt	keycode  59 = Console_1       
+keycode  60 = F2               F14              Console_14      
+	control	keycode  60 = F26             
+	shift	control	keycode  60 = F38             
+	alt	keycode  60 = Console_2       
+	control	alt	keycode  60 = Console_2       
+	ctrlr keycode  60 = F2
+	ctrlr shift keycode 60 = F14
+	ctrlr altgr keycode 60 = Console_14      
+	ctrlr control	keycode  60 = F26             
+	ctrlr shift	control	keycode  60 = F38             
+	ctrlr alt	keycode  60 = Console_2       
+	ctrlr control	alt	keycode  60 = Console_2       
+	ctrll keycode  60 = F2
+	ctrll shift keycode 60 = F14
+	ctrll altgr keycode 60 = Console_14      
+	ctrll control	keycode  60 = F26             
+	ctrll shift	control	keycode  60 = F38             
+	ctrll alt	keycode  60 = Console_2       
+	ctrll control	alt	keycode  60 = Console_2       
+	ctrlr ctrll keycode  60 = F2
+	ctrlr ctrll shift keycode 60 = F14
+	ctrlr ctrll altgr keycode 60 = Console_14      
+	ctrlr ctrll control	keycode  60 = F26             
+	ctrlr ctrll shift	control	keycode  60 = F38             
+	ctrlr ctrll alt	keycode  60 = Console_2       
+	ctrlr ctrll control	alt	keycode  60 = Console_2       
+keycode  61 = F3               F15              Console_15      
+	control	keycode  61 = F27             
+	shift	control	keycode  61 = F39             
+	alt	keycode  61 = Console_3       
+	control	alt	keycode  61 = Console_3       
+	ctrlr keycode  61 = F3
+	ctrlr shift keycode 61 = F15
+	ctrlr altgr keycode 61 = Console_15      
+	ctrlr control	keycode  61 = F27             
+	ctrlr shift	control	keycode  61 = F39             
+	ctrlr alt	keycode  61 = Console_3       
+	ctrlr control	alt	keycode  61 = Console_3       
+	ctrll keycode  61 = F3
+	ctrll shift keycode 61 = F15
+	ctrll altgr keycode 61 = Console_15      
+	ctrll control	keycode  61 = F27             
+	ctrll shift	control	keycode  61 = F39             
+	ctrll alt	keycode  61 = Console_3       
+	ctrll control	alt	keycode  61 = Console_3       
+	ctrlr ctrll keycode  61 = F3
+	ctrlr ctrll shift keycode 61 = F15
+	ctrlr ctrll altgr keycode 61 = Console_15      
+	ctrlr ctrll control	keycode  61 = F27             
+	ctrlr ctrll shift	control	keycode  61 = F39             
+	ctrlr ctrll alt	keycode  61 = Console_3       
+	ctrlr ctrll control	alt	keycode  61 = Console_3       
+keycode  62 = F4               F16              Console_16      
+	control	keycode  62 = F28             
+	shift	control	keycode  62 = F40             
+	alt	keycode  62 = Console_4       
+	control	alt	keycode  62 = Console_4       
+	ctrlr keycode  62 = F4
+	ctrlr shift keycode 62 = F16
+	ctrlr altgr keycode 62 = Console_16      
+	ctrlr control	keycode  62 = F28             
+	ctrlr shift	control	keycode  62 = F40             
+	ctrlr alt	keycode  62 = Console_4       
+	ctrlr control	alt	keycode  62 = Console_4       
+	ctrll keycode  62 = F4
+	ctrll shift keycode 62 = F16
+	ctrll altgr keycode 62 = Console_16      
+	ctrll control	keycode  62 = F28             
+	ctrll shift	control	keycode  62 = F40             
+	ctrll alt	keycode  62 = Console_4       
+	ctrll control	alt	keycode  62 = Console_4       
+	ctrlr ctrll keycode  62 = F4
+	ctrlr ctrll shift keycode 62 = F16
+	ctrlr ctrll altgr keycode 62 = Console_16      
+	ctrlr ctrll control	keycode  62 = F28             
+	ctrlr ctrll shift	control	keycode  62 = F40             
+	ctrlr ctrll alt	keycode  62 = Console_4       
+	ctrlr ctrll control	alt	keycode  62 = Console_4       
+keycode  63 = F5               F17              Console_17      
+	control	keycode  63 = F29             
+	shift	control	keycode  63 = F41             
+	alt	keycode  63 = Console_5       
+	control	alt	keycode  63 = Console_5       
+	ctrlr keycode  63 = F5
+	ctrlr shift keycode 63 = F17
+	ctrlr altgr keycode 63 = Console_17      
+	ctrlr control	keycode  63 = F29             
+	ctrlr shift	control	keycode  63 = F41             
+	ctrlr alt	keycode  63 = Console_5       
+	ctrlr control	alt	keycode  63 = Console_5       
+	ctrll keycode  63 = F5
+	ctrll shift keycode 63 = F17
+	ctrll altgr keycode 63 = Console_17      
+	ctrll control	keycode  63 = F29             
+	ctrll shift	control	keycode  63 = F41             
+	ctrll alt	keycode  63 = Console_5       
+	ctrll control	alt	keycode  63 = Console_5       
+	ctrlr ctrll keycode  63 = F5
+	ctrlr ctrll shift keycode 63 = F17
+	ctrlr ctrll altgr keycode 63 = Console_17      
+	ctrlr ctrll control	keycode  63 = F29             
+	ctrlr ctrll shift	control	keycode  63 = F41             
+	ctrlr ctrll alt	keycode  63 = Console_5       
+	ctrlr ctrll control	alt	keycode  63 = Console_5       
+keycode  64 = F6               F18              Console_18      
+	control	keycode  64 = F30             
+	shift	control	keycode  64 = F42             
+	alt	keycode  64 = Console_6       
+	control	alt	keycode  64 = Console_6       
+	ctrlr keycode  64 = F6
+	ctrlr shift keycode 64 = F18
+	ctrlr altgr keycode 64 = Console_18      
+	ctrlr control	keycode  64 = F30             
+	ctrlr shift	control	keycode  64 = F42             
+	ctrlr alt	keycode  64 = Console_6       
+	ctrlr control	alt	keycode  64 = Console_6       
+	ctrll keycode  64 = F6
+	ctrll shift keycode 64 = F18
+	ctrll altgr keycode 64 = Console_18      
+	ctrll control	keycode  64 = F30             
+	ctrll shift	control	keycode  64 = F42             
+	ctrll alt	keycode  64 = Console_6       
+	ctrll control	alt	keycode  64 = Console_6       
+	ctrlr ctrll keycode  64 = F6
+	ctrlr ctrll shift keycode 64 = F18
+	ctrlr ctrll altgr keycode 64 = Console_18      
+	ctrlr ctrll control	keycode  64 = F30             
+	ctrlr ctrll shift	control	keycode  64 = F42             
+	ctrlr ctrll alt	keycode  64 = Console_6       
+	ctrlr ctrll control	alt	keycode  64 = Console_6       
+keycode  65 = F7               F19              Console_19      
+	control	keycode  65 = F31             
+	shift	control	keycode  65 = F43             
+	alt	keycode  65 = Console_7       
+	control	alt	keycode  65 = Console_7       
+	ctrlr keycode  65 = F7
+	ctrlr shift keycode 65 = F19
+	ctrlr altgr keycode 65 = Console_19      
+	ctrlr control	keycode  65 = F31             
+	ctrlr shift	control	keycode  65 = F43             
+	ctrlr alt	keycode  65 = Console_7       
+	ctrlr control	alt	keycode  65 = Console_7       
+	ctrll keycode  65 = F7
+	ctrll shift keycode 65 = F19
+	ctrll altgr keycode 65 = Console_19      
+	ctrll control	keycode  65 = F31             
+	ctrll shift	control	keycode  65 = F43             
+	ctrll alt	keycode  65 = Console_7       
+	ctrll control	alt	keycode  65 = Console_7       
+	ctrlr ctrll keycode  65 = F7
+	ctrlr ctrll shift keycode 65 = F19
+	ctrlr ctrll altgr keycode 65 = Console_19      
+	ctrlr ctrll control	keycode  65 = F31             
+	ctrlr ctrll shift	control	keycode  65 = F43             
+	ctrlr ctrll alt	keycode  65 = Console_7       
+	ctrlr ctrll control	alt	keycode  65 = Console_7       
+keycode  66 = F8               F20              Console_20      
+	control	keycode  66 = F32             
+	shift	control	keycode  66 = F44             
+	alt	keycode  66 = Console_8       
+	control	alt	keycode  66 = Console_8       
+	ctrlr keycode  66 = F8
+	ctrlr shift keycode 66 = F20
+	ctrlr altgr keycode 66 = Console_20      
+	ctrlr control	keycode  66 = F32             
+	ctrlr shift	control	keycode  66 = F44             
+	ctrlr alt	keycode  66 = Console_8       
+	ctrlr control	alt	keycode  66 = Console_8       
+	ctrll keycode  66 = F8
+	ctrll shift keycode 66 = F20
+	ctrll altgr keycode 66 = Console_20      
+	ctrll control	keycode  66 = F32             
+	ctrll shift	control	keycode  66 = F44             
+	ctrll alt	keycode  66 = Console_8       
+	ctrll control	alt	keycode  66 = Console_8       
+	ctrlr ctrll keycode  66 = F8
+	ctrlr ctrll shift keycode 66 = F20
+	ctrlr ctrll altgr keycode 66 = Console_20      
+	ctrlr ctrll control	keycode  66 = F32             
+	ctrlr ctrll shift	control	keycode  66 = F44             
+	ctrlr ctrll alt	keycode  66 = Console_8       
+	ctrlr ctrll control	alt	keycode  66 = Console_8       
+keycode  67 = F9               F21              Console_21      
+	control	keycode  67 = F33             
+	shift	control	keycode  67 = F45             
+	alt	keycode  67 = Console_9       
+	control	alt	keycode  67 = Console_9       
+	ctrlr keycode  67 = F9
+	ctrlr shift keycode 67 = F21
+	ctrlr altgr keycode 67 = Console_21      
+	ctrlr control	keycode  67 = F33             
+	ctrlr shift	control	keycode  67 = F45             
+	ctrlr alt	keycode  67 = Console_9       
+	ctrlr control	alt	keycode  67 = Console_9       
+	ctrll keycode  67 = F9
+	ctrll shift keycode 67 = F21
+	ctrll altgr keycode 67 = Console_21      
+	ctrll control	keycode  67 = F33             
+	ctrll shift	control	keycode  67 = F45             
+	ctrll alt	keycode  67 = Console_9       
+	ctrll control	alt	keycode  67 = Console_9       
+	ctrlr ctrll keycode  67 = F9
+	ctrlr ctrll shift keycode 67 = F21
+	ctrlr ctrll altgr keycode 67 = Console_21      
+	ctrlr ctrll control	keycode  67 = F33             
+	ctrlr ctrll shift	control	keycode  67 = F45             
+	ctrlr ctrll alt	keycode  67 = Console_9       
+	ctrlr ctrll control	alt	keycode  67 = Console_9       
+keycode  68 = F10              F22              Console_22      
+	control	keycode  68 = F34             
+	shift	control	keycode  68 = F46             
+	alt	keycode  68 = Console_10      
+	control	alt	keycode  68 = Console_10      
+	ctrlr keycode  68 = F10
+	ctrlr shift keycode 68 = F22
+	ctrlr altgr keycode 68 = Console_22      
+	ctrlr control	keycode  68 = F34             
+	ctrlr shift	control	keycode  68 = F46             
+	ctrlr alt	keycode  68 = Console_10       
+	ctrlr control	alt	keycode  68 = Console_10       
+	ctrll keycode  68 = F10
+	ctrll shift keycode 68 = F22
+	ctrll altgr keycode 68 = Console_22      
+	ctrll control	keycode  68 = F34             
+	ctrll shift	control	keycode  68 = F46             
+	ctrll alt	keycode  68 = Console_10       
+	ctrll control	alt	keycode  68 = Console_10       
+	ctrlr ctrll keycode  68 = F10
+	ctrlr ctrll shift keycode 68 = F22
+	ctrlr ctrll altgr keycode 68 = Console_22      
+	ctrlr ctrll control	keycode  68 = F34             
+	ctrlr ctrll shift	control	keycode  68 = F46             
+	ctrlr ctrll alt	keycode  68 = Console_10       
+	ctrlr ctrll control	alt	keycode  68 = Console_10       
+keycode  69 = Num_Lock        
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
+	control	keycode  70 = Show_State      
+	alt	keycode  70 = Scroll_Lock     
+keycode  71 = KP_7            
+	alt	keycode  71 = Ascii_7         
+keycode  72 = KP_8            
+	alt	keycode  72 = Ascii_8         
+keycode  73 = KP_9            
+	alt	keycode  73 = Ascii_9         
+keycode  74 = KP_Subtract     
+keycode  75 = KP_4            
+	alt	keycode  75 = Ascii_4         
+keycode  76 = KP_5            
+	alt	keycode  76 = Ascii_5         
+keycode  77 = KP_6            
+	alt	keycode  77 = Ascii_6         
+keycode  78 = KP_Add          
+keycode  79 = KP_1            
+	alt	keycode  79 = Ascii_1         
+keycode  80 = KP_2            
+	alt	keycode  80 = Ascii_2         
+keycode  81 = KP_3            
+	alt	keycode  81 = Ascii_3         
+keycode  82 = KP_0            
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_Period       
+	altgr	control	keycode  83 = Boot            
+	control	alt	keycode  83 = Boot            
+keycode  84 = Last_Console    
+keycode  85 =
+keycode  86 = less             greater          bar             
+	alt	keycode  86 = Meta_less       
+keycode  87 = F11              F23              Console_23      
+	control	keycode  87 = F35             
+	shift	control	keycode  87 = F47             
+	alt	keycode  87 = Console_11      
+	control	alt	keycode  87 = Console_11      
+	ctrlr keycode  87 = F11
+	ctrlr shift keycode 87 = F23
+	ctrlr altgr keycode 87 = Console_23      
+	ctrlr control	keycode  87 = F35             
+	ctrlr shift	control	keycode  87 = F47             
+	ctrlr alt	keycode  87 = Console_11       
+	ctrlr control	alt	keycode  87 = Console_11       
+	ctrll keycode  87 = F11
+	ctrll shift keycode 87 = F23
+	ctrll altgr keycode 87 = Console_23      
+	ctrll control	keycode  87 = F35             
+	ctrll shift	control	keycode  87 = F47             
+	ctrll alt	keycode  87 = Console_11       
+	ctrll control	alt	keycode  87 = Console_11       
+	ctrlr ctrll keycode  87 = F11
+	ctrlr ctrll shift keycode 87 = F23
+	ctrlr ctrll altgr keycode 87 = Console_23      
+	ctrlr ctrll control	keycode  87 = F35             
+	ctrlr ctrll shift	control	keycode  87 = F47             
+	ctrlr ctrll alt	keycode  87 = Console_11       
+	ctrlr ctrll control	alt	keycode  87 = Console_11       
+keycode  88 = F12              F24              Console_24      
+	control	keycode  88 = F36             
+	shift	control	keycode  88 = F48             
+	alt	keycode  88 = Console_12      
+	control	alt	keycode  88 = Console_12      
+	ctrlr keycode  88 = F12
+	ctrlr shift keycode 88 = F24
+	ctrlr altgr keycode 88 = Console_24      
+	ctrlr control	keycode  88 = F36             
+	ctrlr shift	control	keycode  88 = F48             
+	ctrlr alt	keycode  88 = Console_12       
+	ctrlr control	alt	keycode  88 = Console_12       
+	ctrll keycode  88 = F12
+	ctrll shift keycode 88 = F24
+	ctrll altgr keycode 88 = Console_24      
+	ctrll control	keycode  88 = F36             
+	ctrll shift	control	keycode  88 = F48             
+	ctrll alt	keycode  88 = Console_12       
+	ctrll control	alt	keycode  88 = Console_12       
+	ctrlr ctrll keycode  88 = F12
+	ctrlr ctrll shift keycode 88 = F24
+	ctrlr ctrll altgr keycode 88 = Console_24      
+	ctrlr ctrll control	keycode  88 = F36             
+	ctrlr ctrll shift	control	keycode  88 = F48             
+	ctrlr ctrll alt	keycode  88 = Console_12       
+	ctrlr ctrll control	alt	keycode  88 = Console_12       
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+#keycode  96 = KP_Enter        
+keycode  96 = AltGr        
+keycode 97 = Control
+keycode  98 = KP_Divide       
+keycode  99 = Control_backslash
+	control	keycode  99 = Control_backslash
+	alt	keycode  99 = Control_backslash
+keycode 100 = Alt
+keycode 101 = Break           
+keycode 102 = Find            
+keycode 103 = Up              
+keycode 104 = Prior           
+	shift	keycode 104 = Scroll_Backward 
+keycode 105 = Left            
+	alt	keycode 105 = Decr_Console    
+keycode 106 = Right           
+	alt	keycode 106 = Incr_Console    
+keycode 107 = Select          
+keycode 108 = Down            
+keycode 109 = Next            
+	shift	keycode 109 = Scroll_Forward  
+keycode 110 = Insert          
+keycode 111 = Remove          
+	altgr	control	keycode 111 = Boot            
+	control	alt	keycode 111 = Boot            
+keycode 112 = Macro           
+keycode 113 = F13             
+keycode 114 = F14             
+keycode 115 = Help            
+keycode 116 = Do              
+keycode 117 = F17             
+keycode 118 = KP_MinPlus      
+keycode 119 = Pause           
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+#keycode 125 = AltGr
+keycode 125 =
+keycode 126 = CtrlR_Lock
+keycode 127 = CtrlL_Lock
diff --git a/keymaps/i386/qwerty/ua.map b/keymaps/i386/qwerty/ua.map
new file mode 100644
index 0000000..52fcdfb
--- /dev/null
+++ b/keymaps/i386/qwerty/ua.map
@@ -0,0 +1,1549 @@
+keymaps 0-2,4-6,8-9,12-13,64-66,68-69,72-73,76-77,128-130,132-133,136-137,140-141,192-194,196-197,200-201,204-205
+strings as usual
+keycode   1 = Escape           Escape          
+	alt	keycode   1 = Meta_Escape     
+	ctrlr	keycode 1 = Escape
+	shift ctrlr keycode 1 = Escape
+	alt ctrlr keycode 1 = Meta_Escape
+	ctrll	keycode 1 = Escape
+	shift ctrll keycode 1 = Escape
+	alt ctrll keycode 1 = Meta_Escape
+	ctrll ctrlr	keycode 1 = Escape
+	shift ctrll ctrlr keycode 1 = Escape
+	alt ctrll ctrlr keycode 1 = Meta_Escape
+keycode   2 = one              exclam          
+	alt	keycode   2 = Meta_one        
+	shift	alt	keycode   2 = Meta_exclam     
+	ctrlr	keycode 2 = one
+	shift ctrlr keycode 2 = exclam
+	alt ctrlr keycode 2 = Meta_one
+	shift alt ctrlr keycode 2 = Meta_exclam
+	ctrll	keycode 2 = one
+	shift ctrll keycode 2 = exclam
+	alt ctrll keycode 2 = Meta_one
+	shift alt ctrll keycode 2 = Meta_exclam
+	ctrll ctrlr	keycode 2 = one
+	shift ctrll ctrlr keycode 2 = exclam
+	alt ctrll ctrlr keycode 2 = Meta_one
+	shift alt ctrll ctrlr keycode 2 = Meta_exclam
+keycode   3 = two              at               at              
+	control	keycode   3 = nul             
+	shift	control	keycode   3 = nul             
+	alt	keycode   3 = Meta_two        
+	shift	alt	keycode   3 = Meta_at         
+	ctrlr	keycode 3 = two
+	shift ctrlr keycode 3 = quotedbl
+	control ctrlr keycode 3 = nul
+	shift control ctrlr keycode 3 = nul
+	alt ctrlr keycode 3 = Meta_two
+	shift alt ctrlr keycode 3 = Meta_at
+	ctrll	keycode 3 = two
+	shift ctrll keycode 3 = quotedbl
+	control ctrll keycode 3 = nul
+	shift control ctrll keycode 3 = nul
+	alt ctrll keycode 3 = Meta_two
+	shift alt ctrll keycode 3 = Meta_at
+	ctrll ctrlr	keycode 3 = two
+	shift ctrll ctrlr keycode 3 = quotedbl
+	control ctrll ctrlr keycode 3 = nul
+	shift control ctrll ctrlr keycode 3 = nul
+	alt ctrll ctrlr keycode 3 = Meta_two
+	shift alt ctrll ctrlr keycode 3 = Meta_at
+keycode   4 = three            numbersign      
+	control	keycode   4 = Escape          
+	alt	keycode   4 = Meta_three      
+	shift	alt	keycode   4 = Meta_numbersign 
+	ctrlr	keycode 4 = three
+	shift ctrlr keycode 4 = numbersign
+	control ctrlr keycode 4 = Escape
+	shift control ctrlr keycode 4 = Escape
+	alt ctrlr keycode 4 = Meta_three
+	shift alt ctrlr keycode 4 = Meta_numbersign
+	ctrll	keycode 4 = three
+	shift ctrll keycode 4 = numbersign
+	control ctrll keycode 4 = Escape
+	shift control ctrll keycode 4 = Escape
+	alt ctrll keycode 4 = Meta_three
+	shift alt ctrll keycode 4 = Meta_numbersign
+	ctrll ctrlr	keycode 4 = three
+	shift ctrll ctrlr keycode 4 = numbersign
+	control ctrll ctrlr keycode 4 = Escape
+	shift control ctrll ctrlr keycode 4 = Escape
+	alt ctrll ctrlr keycode 4 = Meta_three
+	shift alt ctrll ctrlr keycode 4 = Meta_numbersign
+keycode   5 = four             dollar           dollar          
+	control	keycode   5 = Control_backslash
+	alt	keycode   5 = Meta_four       
+	shift	alt	keycode   5 = Meta_dollar     
+	ctrlr	keycode 5 = four
+	shift ctrlr keycode 5 = semicolon
+	control ctrlr keycode 5 = Control_backslash
+	shift control ctrlr keycode 5 = Control_backslash
+	alt ctrlr keycode 5 = Meta_four
+	shift alt ctrlr keycode 5 = Meta_dollar
+	ctrll	keycode 5 = four
+	shift ctrll keycode 5 = semicolon
+	control ctrll keycode 5 = Control_backslash
+	shift control ctrll keycode 5 = Control_backslash
+	alt ctrll keycode 5 = Meta_four
+	shift alt ctrll keycode 5 = Meta_dollar
+	ctrll ctrlr	keycode 5 = four
+	shift ctrll ctrlr keycode 5 = semicolon
+	control ctrll ctrlr keycode 5 = Control_backslash
+	shift control ctrll ctrlr keycode 5 = Control_backslash
+	alt ctrll ctrlr keycode 5 = Meta_four
+	shift alt ctrll ctrlr keycode 5 = Meta_dollar
+keycode   6 = five             percent         
+	control	keycode   6 = Control_bracketright
+	alt	keycode   6 = Meta_five       
+	shift	alt	keycode   6 = Meta_percent    
+	ctrlr	keycode 6 = five
+	shift ctrlr keycode 6 = colon
+	control ctrlr keycode 6 = Control_bracketright
+	shift control ctrlr keycode 6 = Control_bracketright
+	alt ctrlr keycode 6 = Meta_five
+	shift alt ctrlr keycode 6 = Meta_percent
+	ctrll	keycode 6 = five
+	shift ctrll keycode 6 = colon
+	control ctrll keycode 6 = Control_bracketright
+	shift control ctrll keycode 6 = Control_bracketright
+	alt ctrll keycode 6 = Meta_five
+	shift alt ctrll keycode 6 = Meta_percent
+	ctrll ctrlr	keycode 6 = five
+	shift ctrll ctrlr keycode 6 = colon
+	control ctrll ctrlr keycode 6 = Control_bracketright
+	shift control ctrll ctrlr keycode 6 = Control_bracketright
+	alt ctrll ctrlr keycode 6 = Meta_five
+	shift alt ctrll ctrlr keycode 6 = Meta_percent
+keycode   7 = six              asciicircum     
+	control	keycode   7 = Control_asciicircum
+	alt	keycode   7 = Meta_six        
+	shift	alt	keycode   7 = Meta_asciicircum
+	ctrlr	keycode 7 = six
+	shift ctrlr keycode 7 = comma
+	control ctrlr keycode 7 = Control_asciicircum
+	shift control ctrlr keycode 7 = Control_asciicircum
+	alt ctrlr keycode 7 = Meta_six
+	shift alt ctrlr keycode 7 = Meta_asciicircum
+	ctrll	keycode 7 = six
+	shift ctrll keycode 7 = comma
+	control ctrll keycode 7 = Control_asciicircum
+	shift control ctrll keycode 7 = Control_asciicircum
+	alt ctrll keycode 7 = Meta_six
+	shift alt ctrll keycode 7 = Meta_asciicircum
+	ctrll ctrlr	keycode 7 = six
+	shift ctrll ctrlr keycode 7 = comma
+	control ctrll ctrlr keycode 7 = Control_asciicircum
+	shift control ctrll ctrlr keycode 7 = Control_asciicircum
+	alt ctrll ctrlr keycode 7 = Meta_six
+	shift alt ctrll ctrlr keycode 7 = Meta_asciicircum
+keycode   8 = seven            ampersand        braceleft       
+	control	keycode   8 = Control_underscore
+	alt	keycode   8 = Meta_seven      
+	shift alt	keycode   8 = Meta_ampersand
+	ctrlr	keycode 8 = seven
+	shift ctrlr keycode 8 = period
+	control ctrlr keycode 8 = Control_underscore
+	shift control ctrlr keycode 8 = Control_underscore
+	alt ctrlr keycode 8 = Meta_seven
+	shift alt ctrlr keycode 8 = Meta_ampersand
+	ctrll	keycode 8 = seven
+	shift ctrll keycode 8 = period
+	control ctrll keycode 8 = Control_underscore
+	shift control ctrll keycode 8 = Control_underscore
+	alt ctrll keycode 8 = Meta_seven
+	shift alt ctrll keycode 8 = Meta_ampersand
+	ctrll ctrlr	keycode 8 = seven
+	shift ctrll ctrlr keycode 8 = period
+	control ctrll ctrlr keycode 8 = Control_underscore
+	shift control ctrll ctrlr keycode 8 = Control_underscore
+	alt ctrll ctrlr keycode 8 = Meta_seven
+	shift alt ctrll ctrlr keycode 8 = Meta_ampersand
+keycode   9 = eight            asterisk         bracketleft     
+	control	keycode   9 = Delete          
+	alt	keycode   9 = Meta_eight      
+	shift alt	keycode   9 = Meta_asterisk
+	ctrlr	keycode 9 = eight
+	shift ctrlr keycode 9 = asterisk
+	control ctrlr keycode 9 = Delete
+	shift control ctrlr keycode 9 = Delete
+	alt ctrlr keycode 9 = Meta_eight
+	shift alt ctrlr keycode 9 = Meta_asterisk
+	ctrll	keycode 9 = eight
+	shift ctrll keycode 9 = asterisk
+	control ctrll keycode 9 = Delete
+	shift control ctrll keycode 9 = Delete
+	alt ctrll keycode 9 = Meta_eight
+	shift alt ctrll keycode 9 = Meta_asterisk
+	ctrll ctrlr	keycode 9 = eight
+	shift ctrll ctrlr keycode 9 = asterisk
+	control ctrll ctrlr keycode 9 = Delete
+	shift control ctrll ctrlr keycode 9 = Delete
+	alt ctrll ctrlr keycode 9 = Meta_eight
+	shift alt ctrll ctrlr keycode 9 = Meta_asterisk
+keycode  10 = nine             parenleft        bracketright    
+	alt	keycode  10 = Meta_nine       
+	shift alt	keycode  10 = Meta_parenleft
+	ctrlr	keycode 10 = nine
+	shift ctrlr keycode 10 = parenleft
+	alt ctrlr keycode 10 = Meta_nine
+	shift alt ctrlr keycode 10 = Meta_parenleft
+	ctrll	keycode 10 = nine
+	shift ctrll keycode 10 = parenleft
+	alt ctrll keycode 10 = Meta_nine
+	shift alt ctrll keycode 10 = Meta_parenleft
+	ctrll ctrlr	keycode 10 = nine
+	shift ctrll ctrlr keycode 10 = parenleft
+	alt ctrll ctrlr keycode 10 = Meta_nine
+	shift alt ctrll ctrlr keycode 10 = Meta_parenleft
+keycode  11 = zero             parenright       braceright      
+	alt	keycode  11 = Meta_zero       
+	alt	keycode  11 = Meta_parenright
+	ctrlr	keycode 11 = zero
+	shift ctrlr keycode 11 = parenright
+	alt ctrlr keycode 11 = Meta_zero
+	shift alt ctrlr keycode 11 = Meta_parenright
+	ctrll	keycode 11 = zero
+	shift ctrll keycode 11 = parenright
+	alt ctrll keycode 11 = Meta_zero
+	shift alt ctrll keycode 11 = Meta_parenright
+	ctrll ctrlr	keycode 11 = zero
+	shift ctrll ctrlr keycode 11 = parenright
+	alt ctrll ctrlr keycode 11 = Meta_zero
+	shift alt ctrll ctrlr keycode 11 = Meta_parenright
+keycode  12 = minus            underscore       backslash       
+	control	keycode  12 = Control_underscore
+	shift	control	keycode  12 = Control_underscore
+	alt	keycode  12 = Meta_minus      
+	shift alt	keycode  12 = Meta_underscore
+	ctrlr	keycode 12 = minus
+	shift ctrlr keycode 12 = underscore
+	control ctrlr keycode 12 = Control_underscore
+	shift control ctrlr keycode 12 = Control_underscore
+	alt ctrlr keycode 12 = Meta_minus
+	shift alt ctrlr keycode 12 = Meta_underscore
+	ctrll	keycode 12 = minus
+	shift ctrll keycode 12 = underscore
+	control ctrll keycode 12 = Control_underscore
+	shift control ctrll keycode 12 = Control_underscore
+	alt ctrll keycode 12 = Meta_minus
+	shift alt ctrll keycode 12 = Meta_underscore
+	ctrll ctrlr	keycode 12 = minus
+	shift ctrll ctrlr keycode 12 = underscore
+	control ctrll ctrlr keycode 12 = Control_underscore
+	shift control ctrll ctrlr keycode 12 = Control_underscore
+	alt ctrll ctrlr keycode 12 = Meta_minus
+	shift alt ctrll ctrlr keycode 12 = Meta_underscore
+keycode  13 = equal            plus            
+	alt	keycode  13 = Meta_equal      
+	shift alt	keycode  13 = Meta_plus
+	ctrlr	keycode 13 = equal
+	shift ctrlr keycode 13 = plus
+	alt ctrlr keycode 13 = Meta_equal
+	shift alt ctrlr keycode 13 = Meta_plus
+	ctrll	keycode 13 = equal
+	shift ctrll keycode 13 = plus
+	alt ctrll keycode 13 = Meta_equal
+	shift alt ctrll keycode 13 = Meta_plus
+	ctrll ctrlr	keycode 13 = equal
+	shift ctrll ctrlr keycode 13 = plus
+	alt ctrll ctrlr keycode 13 = Meta_equal
+	shift alt ctrll ctrlr keycode 13 = Meta_plus
+keycode  14 = BackSpace           Delete          
+	control	keycode  14 = BackSpace       
+	alt	keycode  14 = Meta_Delete     
+	ctrlr	keycode 14 = BackSpace
+	shift ctrlr keycode 14 = BackSpace
+	control ctrlr keycode 14 = BackSpace
+	shift control ctrlr keycode 14 = BackSpace
+	alt ctrlr keycode 14 = Meta_Delete
+	shift alt ctrlr keycode 14 = Meta_Delete
+	ctrll	keycode 14 = BackSpace
+	shift ctrll keycode 14 = BackSpace
+	control ctrll keycode 14 = BackSpace
+	shift control ctrll keycode 14 = BackSpace
+	alt ctrll keycode 14 = Meta_Delete
+	shift alt ctrll keycode 14 = Meta_Delete
+	ctrll ctrlr	keycode 14 = BackSpace
+	shift ctrll ctrlr keycode 14 = BackSpace
+	control ctrll ctrlr keycode 14 = BackSpace
+	shift control ctrll ctrlr keycode 14 = BackSpace
+	alt ctrll ctrlr keycode 14 = Meta_Delete
+	shift alt ctrll ctrlr keycode 14 = Meta_Delete
+keycode  15 = Tab              Tab             
+	alt	keycode  15 = Meta_Tab        
+	ctrlr	keycode 15 = Tab
+	shift ctrlr keycode 15 = Tab
+	alt ctrlr keycode 15 = Meta_Tab
+	shift alt ctrlr keycode 15 = Meta_Tab
+	ctrll	keycode 15 = Tab
+	shift ctrll keycode 15 = Tab
+	alt ctrll keycode 15 = Meta_Tab
+	shift alt ctrll keycode 15 = Meta_Tab
+	ctrll ctrlr	keycode 15 = Tab
+	shift ctrll ctrlr keycode 15 = Tab
+	alt ctrll ctrlr keycode 15 = Meta_Tab
+	shift alt ctrll ctrlr keycode 15 = Meta_Tab
+keycode  16 = q               
+	ctrlr	keycode	16 = +202
+	shift ctrlr keycode 16 = +234
+	control ctrlr keycode 16 = Control_q
+	shift control ctrlr keycode 16 = Control_q
+	alt ctrlr keycode 16 = Meta_q
+	shift alt ctrlr keycode 16 = Meta_Q
+	control alt ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrlr keycode 16 = Meta_Control_q
+	ctrll	keycode	16 = +202
+	shift ctrll keycode 16 = +234
+	control ctrll keycode 16 = Control_q
+	shift control ctrll keycode 16 = Control_q
+	alt ctrll keycode 16 = Meta_q
+	shift alt ctrll keycode 16 = Meta_Q
+	control alt ctrll keycode 16 = Meta_Control_q
+	shift control alt ctrll keycode 16 = Meta_Control_q
+	ctrll ctrlr	keycode	16 = +202
+	shift ctrll ctrlr keycode 16 = +234
+	control ctrll ctrlr keycode 16 = Control_q
+	shift control ctrll ctrlr keycode 16 = Control_q
+	alt ctrll ctrlr keycode 16 = Meta_q
+	shift alt ctrll ctrlr keycode 16 = Meta_Q
+	control alt ctrll ctrlr keycode 16 = Meta_Control_q
+	shift control alt ctrll ctrlr keycode 16 = Meta_Control_q
+keycode  17 = w               
+	ctrlr	keycode	17 = +195
+	shift ctrlr keycode 17 = +227
+	control ctrlr keycode 17 = Control_w
+	shift control ctrlr keycode 17 = Control_w
+	alt ctrlr keycode 17 = Meta_w
+	shift alt ctrlr keycode 17 = Meta_W
+	control alt ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrlr keycode 17 = Meta_Control_w
+	ctrll	keycode	17 = +195
+	shift ctrll keycode 17 = +227
+	control ctrll keycode 17 = Control_w
+	shift control ctrll keycode 17 = Control_w
+	alt ctrll keycode 17 = Meta_w
+	shift alt ctrll keycode 17 = Meta_W
+	control alt ctrll keycode 17 = Meta_Control_w
+	shift control alt ctrll keycode 17 = Meta_Control_w
+	ctrll ctrlr	keycode	17 = +195
+	shift ctrll ctrlr keycode 17 = +227
+	control ctrll ctrlr keycode 17 = Control_w
+	shift control ctrll ctrlr keycode 17 = Control_w
+	alt ctrll ctrlr keycode 17 = Meta_w
+	shift alt ctrll ctrlr keycode 17 = Meta_W
+	control alt ctrll ctrlr keycode 17 = Meta_Control_w
+	shift control alt ctrll ctrlr keycode 17 = Meta_Control_w
+keycode  18 = e               
+	ctrlr	keycode 18 = +213
+	shift ctrlr keycode 18 = +245
+	control ctrlr keycode 18 = Control_e
+	shift control ctrlr keycode 18 = Control_e
+	alt ctrlr keycode 18 = Meta_e
+	shift alt ctrlr keycode 18 = Meta_E
+	control alt ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrlr keycode 18 = Meta_Control_e
+	ctrll	keycode 18 = +213
+	shift ctrll keycode 18 = +245
+	control ctrll keycode 18 = Control_e
+	shift control ctrll keycode 18 = Control_e
+	alt ctrll keycode 18 = Meta_e
+	shift alt ctrll keycode 18 = Meta_E
+	control alt ctrll keycode 18 = Meta_Control_e
+	shift control alt ctrll keycode 18 = Meta_Control_e
+	ctrll ctrlr	keycode 18 = +213
+	shift ctrll ctrlr keycode 18 = +245
+	control ctrll ctrlr keycode 18 = Control_e
+	shift control ctrll ctrlr keycode 18 = Control_e
+	alt ctrll ctrlr keycode 18 = Meta_e
+	shift alt ctrll ctrlr keycode 18 = Meta_E
+	control alt ctrll ctrlr keycode 18 = Meta_Control_e
+	shift control alt ctrll ctrlr keycode 18 = Meta_Control_e
+keycode  19 = r               
+	ctrlr	keycode 19 = +203
+	shift ctrlr keycode 19 = +235
+	control ctrlr keycode 19 = Control_r
+	shift control ctrlr keycode 19 = Control_r
+	alt ctrlr keycode 19 = Meta_r
+	shift alt ctrlr keycode 19 = Meta_R
+	control alt ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrlr keycode 19 = Meta_Control_r
+	ctrll	keycode 19 = +203
+	shift ctrll keycode 19 = +235
+	control ctrll keycode 19 = Control_r
+	shift control ctrll keycode 19 = Control_r
+	alt ctrll keycode 19 = Meta_r
+	shift alt ctrll keycode 19 = Meta_R
+	control alt ctrll keycode 19 = Meta_Control_r
+	shift control alt ctrll keycode 19 = Meta_Control_r
+	ctrll ctrlr	keycode 19 = +203
+	shift ctrll ctrlr keycode 19 = +235
+	control ctrll ctrlr keycode 19 = Control_r
+	shift control ctrll ctrlr keycode 19 = Control_r
+	alt ctrll ctrlr keycode 19 = Meta_r
+	shift alt ctrll ctrlr keycode 19 = Meta_R
+	control alt ctrll ctrlr keycode 19 = Meta_Control_r
+	shift control alt ctrll ctrlr keycode 19 = Meta_Control_r
+keycode  20 = t               
+	ctrlr	keycode 20 = +197
+	shift ctrlr keycode 20 = +229
+	control ctrlr keycode 20 = Control_t
+	shift control ctrlr keycode 20 = Control_t
+	alt ctrlr keycode 20 = Meta_t
+	shift alt ctrlr keycode 20 = Meta_T
+	control alt ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrlr keycode 20 = Meta_Control_t
+	ctrll	keycode 20 = +197
+	shift ctrll keycode 20 = +229
+	control ctrll keycode 20 = Control_t
+	shift control ctrll keycode 20 = Control_t
+	alt ctrll keycode 20 = Meta_t
+	shift alt ctrll keycode 20 = Meta_T
+	control alt ctrll keycode 20 = Meta_Control_t
+	shift control alt ctrll keycode 20 = Meta_Control_t
+	ctrll ctrlr	keycode 20 = +197
+	shift ctrll ctrlr keycode 20 = +229
+	control ctrll ctrlr keycode 20 = Control_t
+	shift control ctrll ctrlr keycode 20 = Control_t
+	alt ctrll ctrlr keycode 20 = Meta_t
+	shift alt ctrll ctrlr keycode 20 = Meta_T
+	control alt ctrll ctrlr keycode 20 = Meta_Control_t
+	shift control alt ctrll ctrlr keycode 20 = Meta_Control_t
+keycode  21 = y               
+	ctrlr	keycode 21 = +206
+	shift ctrlr keycode 21 = +238
+	control ctrlr keycode 21 = Control_y
+	shift control ctrlr keycode 21 = Control_y
+	alt ctrlr keycode 21 = Meta_y
+	shift alt ctrlr keycode 21 = Meta_Y
+	control alt ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrlr keycode 21 = Meta_Control_y
+	ctrll	keycode 21 = +206
+	shift ctrll keycode 21 = +238
+	control ctrll keycode 21 = Control_y
+	shift control ctrll keycode 21 = Control_y
+	alt ctrll keycode 21 = Meta_y
+	shift alt ctrll keycode 21 = Meta_Y
+	control alt ctrll keycode 21 = Meta_Control_y
+	shift control alt ctrll keycode 21 = Meta_Control_y
+	ctrll ctrlr	keycode 21 = +206
+	shift ctrll ctrlr keycode 21 = +238
+	control ctrll ctrlr keycode 21 = Control_y
+	shift control ctrll ctrlr keycode 21 = Control_y
+	alt ctrll ctrlr keycode 21 = Meta_y
+	shift alt ctrll ctrlr keycode 21 = Meta_Y
+	control alt ctrll ctrlr keycode 21 = Meta_Control_y
+	shift control alt ctrll ctrlr keycode 21 = Meta_Control_y
+keycode  22 = u               
+	ctrlr	keycode 22 = +199
+	shift ctrlr keycode 22 = +231
+	control ctrlr keycode 22 = Control_u
+	shift control ctrlr keycode 22 = Control_u
+	alt ctrlr keycode 22 = Meta_u
+	shift alt ctrlr keycode 22 = Meta_U
+	control alt ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrlr keycode 22 = Meta_Control_u
+	ctrll	keycode 22 = +199
+	shift ctrll keycode 22 = +231
+	control ctrll keycode 22 = Control_u
+	shift control ctrll keycode 22 = Control_u
+	alt ctrll keycode 22 = Meta_u
+	shift alt ctrll keycode 22 = Meta_U
+	control alt ctrll keycode 22 = Meta_Control_u
+	shift control alt ctrll keycode 22 = Meta_Control_u
+	ctrll ctrlr	keycode 22 = +199
+	shift ctrll ctrlr keycode 22 = +231
+	control ctrll ctrlr keycode 22 = Control_u
+	shift control ctrll ctrlr keycode 22 = Control_u
+	alt ctrll ctrlr keycode 22 = Meta_u
+	shift alt ctrll ctrlr keycode 22 = Meta_U
+	control alt ctrll ctrlr keycode 22 = Meta_Control_u
+	shift control alt ctrll ctrlr keycode 22 = Meta_Control_u
+keycode  23 = i               
+	ctrlr	keycode 23 = +219
+	shift ctrlr keycode 23 = +251
+	control ctrlr keycode 23 = Control_i
+	shift control ctrlr keycode 23 = Control_i
+	alt ctrlr keycode 23 = Meta_i
+	shift alt ctrlr keycode 23 = Meta_I
+	control alt ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrlr keycode 23 = Meta_Control_i
+	ctrll	keycode 23 = +219
+	shift ctrll keycode 23 = +251
+	control ctrll keycode 23 = Control_i
+	shift control ctrll keycode 23 = Control_i
+	alt ctrll keycode 23 = Meta_i
+	shift alt ctrll keycode 23 = Meta_I
+	control alt ctrll keycode 23 = Meta_Control_i
+	shift control alt ctrll keycode 23 = Meta_Control_i
+	ctrll ctrlr	keycode 23 = +219
+	shift ctrll ctrlr keycode 23 = +251
+	control ctrll ctrlr keycode 23 = Control_i
+	shift control ctrll ctrlr keycode 23 = Control_i
+	alt ctrll ctrlr keycode 23 = Meta_i
+	shift alt ctrll ctrlr keycode 23 = Meta_I
+	control alt ctrll ctrlr keycode 23 = Meta_Control_i
+	shift control alt ctrll ctrlr keycode 23 = Meta_Control_i
+keycode  24 = o               
+	ctrlr	keycode 24 = +221
+	shift ctrlr keycode 24 = +253
+	control ctrlr keycode 24 = Control_o
+	shift control ctrlr keycode 24 = Control_o
+	alt ctrlr keycode 24 = Meta_o
+	shift alt ctrlr keycode 24 = Meta_O
+	control alt ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrlr keycode 24 = Meta_Control_o
+	ctrll	keycode 24 = +221
+	shift ctrll keycode 24 = +253
+	control ctrll keycode 24 = Control_o
+	shift control ctrll keycode 24 = Control_o
+	alt ctrll keycode 24 = Meta_o
+	shift alt ctrll keycode 24 = Meta_O
+	control alt ctrll keycode 24 = Meta_Control_o
+	shift control alt ctrll keycode 24 = Meta_Control_o
+	ctrll ctrlr	keycode 24 = +221
+	shift ctrll ctrlr keycode 24 = +253
+	control ctrll ctrlr keycode 24 = Control_o
+	shift control ctrll ctrlr keycode 24 = Control_o
+	alt ctrll ctrlr keycode 24 = Meta_o
+	shift alt ctrll ctrlr keycode 24 = Meta_O
+	control alt ctrll ctrlr keycode 24 = Meta_Control_o
+	shift control alt ctrll ctrlr keycode 24 = Meta_Control_o
+keycode  25 = p               
+	ctrlr	keycode 25 = +218
+	shift ctrlr keycode 25 = +250
+	control ctrlr keycode 25 = Control_p
+	shift control ctrlr keycode 25 = Control_p
+	alt ctrlr keycode 25 = Meta_p
+	shift alt ctrlr keycode 25 = Meta_P
+	control alt ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrlr keycode 25 = Meta_Control_p
+	ctrll	keycode 25 = +218
+	shift ctrll keycode 25 = +250
+	control ctrll keycode 25 = Control_p
+	shift control ctrll keycode 25 = Control_p
+	alt ctrll keycode 25 = Meta_p
+	shift alt ctrll keycode 25 = Meta_P
+	control alt ctrll keycode 25 = Meta_Control_p
+	shift control alt ctrll keycode 25 = Meta_Control_p
+	ctrll ctrlr	keycode 25 = +218
+	shift ctrll ctrlr keycode 25 = +250
+	control ctrll ctrlr keycode 25 = Control_p
+	shift control ctrll ctrlr keycode 25 = Control_p
+	alt ctrll ctrlr keycode 25 = Meta_p
+	shift alt ctrll ctrlr keycode 25 = Meta_P
+	control alt ctrll ctrlr keycode 25 = Meta_Control_p
+	shift control alt ctrll ctrlr keycode 25 = Meta_Control_p
+keycode  26 = bracketleft      braceleft       
+	control	keycode  26 = Escape          
+	alt	keycode  26 = Meta_bracketleft
+	shift	alt	keycode  26 = Meta_braceleft  
+	ctrlr	keycode 26 = +200
+	shift ctrlr keycode 26 = +232
+	control ctrlr keycode 26 = Escape
+	shift control ctrlr keycode 26 = Escape
+	alt ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrlr keycode 26 = Meta_braceleft
+	ctrll	keycode 26 = +200
+	shift ctrll keycode 26 = +232
+	control ctrll keycode 26 = Escape
+	shift control ctrll keycode 26 = Escape
+	alt ctrll keycode 26 = Meta_bracketleft
+	shift alt ctrll keycode 26 = Meta_braceleft
+	ctrll ctrlr	keycode 26 = +200
+	shift ctrll ctrlr keycode 26 = +232
+	control ctrll ctrlr keycode 26 = Escape
+	shift control ctrll ctrlr keycode 26 = Escape
+	alt ctrll ctrlr keycode 26 = Meta_bracketleft
+	shift alt ctrll ctrlr keycode 26 = Meta_braceleft
+keycode  27 = bracketright     braceright       asciitilde      
+	control	keycode  27 = Control_bracketright
+	alt	keycode  27 = Meta_bracketright
+	shift	alt	keycode  27 = Meta_braceright 
+	ctrlr	keycode 27 = +223
+	shift ctrlr keycode 27 = +255
+	control ctrlr keycode 27 = Control_bracketright
+	shift control ctrlr keycode 27 = Control_bracketright
+	alt ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrlr keycode 27 = Meta_braceright
+	control alt ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrlr keycode 27 = Meta_Control_bracketright
+	ctrll	keycode 27 = +167
+	shift ctrll keycode 27 = +183
+	control ctrll keycode 27 = Control_bracketright
+	shift control ctrll keycode 27 = Control_bracketright
+	alt ctrll keycode 27 = Meta_bracketright
+	shift alt ctrll keycode 27 = Meta_braceright
+	control alt ctrll keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll keycode 27 = Meta_Control_bracketright
+	ctrll ctrlr	keycode 27 = +167
+	shift ctrll ctrlr keycode 27 = +183
+	control ctrll ctrlr keycode 27 = Control_bracketright
+	shift control ctrll ctrlr keycode 27 = Control_bracketright
+	alt ctrll ctrlr keycode 27 = Meta_bracketright
+	shift alt ctrll ctrlr keycode 27 = Meta_braceright
+	control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+	shift control alt ctrll ctrlr keycode 27 = Meta_Control_bracketright
+keycode  28 = Return          
+	alt	keycode  28 = Meta_Control_m  
+keycode  29 = Control         
+keycode  30 = a               
+	ctrlr	keycode 30 = +198
+	shift ctrlr keycode 30 = +230
+	control ctrlr keycode 30 = Control_a
+	shift control ctrlr keycode 30 = Control_a
+	alt ctrlr keycode 30 = Meta_a
+	shift alt ctrlr keycode 30 = Meta_A
+	control alt ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrlr keycode 30 = Meta_Control_a
+	ctrll	keycode 30 = +198
+	shift ctrll keycode 30 = +230
+	control ctrll keycode 30 = Control_a
+	shift control ctrll keycode 30 = Control_a
+	alt ctrll keycode 30 = Meta_a
+	shift alt ctrll keycode 30 = Meta_A
+	control alt ctrll keycode 30 = Meta_Control_a
+	shift control alt ctrll keycode 30 = Meta_Control_a
+	ctrll ctrlr	keycode 30 = +198
+	shift ctrll ctrlr keycode 30 = +230
+	control ctrll ctrlr keycode 30 = Control_a
+	shift control ctrll ctrlr keycode 30 = Control_a
+	alt ctrll ctrlr keycode 30 = Meta_a
+	shift alt ctrll ctrlr keycode 30 = Meta_A
+	control alt ctrll ctrlr keycode 30 = Meta_Control_a
+	shift control alt ctrll ctrlr keycode 30 = Meta_Control_a
+keycode  31 = s               
+	ctrlr	keycode 31 = +217
+	shift ctrlr keycode 31 = +249
+	control ctrlr keycode 31 = Control_s
+	shift control ctrlr keycode 31 = Control_s
+	alt ctrlr keycode 31 = Meta_s
+	shift alt ctrlr keycode 31 = Meta_S
+	control alt ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrlr keycode 31 = Meta_Control_s
+	ctrll	keycode 31 = +166
+	shift ctrll keycode 31 = +182
+	control ctrll keycode 31 = Control_s
+	shift control ctrll keycode 31 = Control_s
+	alt ctrll keycode 31 = Meta_s
+	shift alt ctrll keycode 31 = Meta_S
+	control alt ctrll keycode 31 = Meta_Control_s
+	shift control alt ctrll keycode 31 = Meta_Control_s
+	ctrll ctrlr	keycode 31 = +166
+	shift ctrll ctrlr keycode 31 = +182
+	control ctrll ctrlr keycode 31 = Control_s
+	shift control ctrll ctrlr keycode 31 = Control_s
+	alt ctrll ctrlr keycode 31 = Meta_s
+	shift alt ctrll ctrlr keycode 31 = Meta_S
+	control alt ctrll ctrlr keycode 31 = Meta_Control_s
+	shift control alt ctrll ctrlr keycode 31 = Meta_Control_s
+keycode  32 = d               
+	ctrlr	keycode 32 = +215
+	shift ctrlr keycode 32 = +247
+	control ctrlr keycode 32 = Control_d
+	shift control ctrlr keycode 32 = Control_d
+	alt ctrlr keycode 32 = Meta_d
+	shift alt ctrlr keycode 32 = Meta_D
+	control alt ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrlr keycode 32 = Meta_Control_d
+	ctrll	keycode 32 = +215
+	shift ctrll keycode 32 = +247
+	control ctrll keycode 32 = Control_d
+	shift control ctrll keycode 32 = Control_d
+	alt ctrll keycode 32 = Meta_d
+	shift alt ctrll keycode 32 = Meta_D
+	control alt ctrll keycode 32 = Meta_Control_d
+	shift control alt ctrll keycode 32 = Meta_Control_d
+	ctrll ctrlr	keycode 32 = +215
+	shift ctrll ctrlr keycode 32 = +247
+	control ctrll ctrlr keycode 32 = Control_d
+	shift control ctrll ctrlr keycode 32 = Control_d
+	alt ctrll ctrlr keycode 32 = Meta_d
+	shift alt ctrll ctrlr keycode 32 = Meta_D
+	control alt ctrll ctrlr keycode 32 = Meta_Control_d
+	shift control alt ctrll ctrlr keycode 32 = Meta_Control_d
+keycode  33 = f               
+	ctrlr	keycode 33 = +193
+	shift ctrlr keycode 33 = +225
+	control ctrlr keycode 33 = Control_f
+	shift control ctrlr keycode 33 = Control_f
+	alt ctrlr keycode 33 = Meta_f
+	shift alt ctrlr keycode 33 = Meta_F
+	control alt ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrlr keycode 33 = Meta_Control_f
+	ctrll	keycode 33 = +193
+	shift ctrll keycode 33 = +225
+	control ctrll keycode 33 = Control_f
+	shift control ctrll keycode 33 = Control_f
+	alt ctrll keycode 33 = Meta_f
+	shift alt ctrll keycode 33 = Meta_F
+	control alt ctrll keycode 33 = Meta_Control_f
+	shift control alt ctrll keycode 33 = Meta_Control_f
+	ctrll ctrlr	keycode 33 = +193
+	shift ctrll ctrlr keycode 33 = +225
+	control ctrll ctrlr keycode 33 = Control_f
+	shift control ctrll ctrlr keycode 33 = Control_f
+	alt ctrll ctrlr keycode 33 = Meta_f
+	shift alt ctrll ctrlr keycode 33 = Meta_F
+	control alt ctrll ctrlr keycode 33 = Meta_Control_f
+	shift control alt ctrll ctrlr keycode 33 = Meta_Control_f
+keycode  34 = g               
+	ctrlr	keycode 34 = +208
+	shift ctrlr keycode 34 = +240
+	control ctrlr keycode 34 = Control_g
+	shift control ctrlr keycode 34 = Control_g
+	alt ctrlr keycode 34 = Meta_g
+	shift alt ctrlr keycode 34 = Meta_G
+	control alt ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrlr keycode 34 = Meta_Control_g
+	ctrll	keycode 34 = +208
+	shift ctrll keycode 34 = +240
+	control ctrll keycode 34 = Control_g
+	shift control ctrll keycode 34 = Control_g
+	alt ctrll keycode 34 = Meta_g
+	shift alt ctrll keycode 34 = Meta_G
+	control alt ctrll keycode 34 = Meta_Control_g
+	shift control alt ctrll keycode 34 = Meta_Control_g
+	ctrll ctrlr	keycode 34 = +208
+	shift ctrll ctrlr keycode 34 = +240
+	control ctrll ctrlr keycode 34 = Control_g
+	shift control ctrll ctrlr keycode 34 = Control_g
+	alt ctrll ctrlr keycode 34 = Meta_g
+	shift alt ctrll ctrlr keycode 34 = Meta_G
+	control alt ctrll ctrlr keycode 34 = Meta_Control_g
+	shift control alt ctrll ctrlr keycode 34 = Meta_Control_g
+keycode  35 = h               
+	ctrlr	keycode 35 = +210
+	shift ctrlr keycode 35 = +242
+	control ctrlr keycode 35 = Control_h
+	shift control ctrlr keycode 35 = Control_h
+	alt ctrlr keycode 35 = Meta_h
+	shift alt ctrlr keycode 35 = Meta_H
+	control alt ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrlr keycode 35 = Meta_Control_h
+	ctrll	keycode 35 = +210
+	shift ctrll keycode 35 = +242
+	control ctrll keycode 35 = Control_h
+	shift control ctrll keycode 35 = Control_h
+	alt ctrll keycode 35 = Meta_h
+	shift alt ctrll keycode 35 = Meta_H
+	control alt ctrll keycode 35 = Meta_Control_h
+	shift control alt ctrll keycode 35 = Meta_Control_h
+	ctrll ctrlr	keycode 35 = +210
+	shift ctrll ctrlr keycode 35 = +242
+	control ctrll ctrlr keycode 35 = Control_h
+	shift control ctrll ctrlr keycode 35 = Control_h
+	alt ctrll ctrlr keycode 35 = Meta_h
+	shift alt ctrll ctrlr keycode 35 = Meta_H
+	control alt ctrll ctrlr keycode 35 = Meta_Control_h
+	shift control alt ctrll ctrlr keycode 35 = Meta_Control_h
+keycode  36 = j               
+	ctrlr	keycode 36 = +207
+	shift ctrlr keycode 36 = +239
+	control ctrlr keycode 36 = Control_j
+	shift control ctrlr keycode 36 = Control_j
+	alt ctrlr keycode 36 = Meta_j
+	shift alt ctrlr keycode 36 = Meta_J
+	control alt ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrlr keycode 36 = Meta_Control_j
+	ctrll	keycode 36 = +207
+	shift ctrll keycode 36 = +239
+	control ctrll keycode 36 = Control_j
+	shift control ctrll keycode 36 = Control_j
+	alt ctrll keycode 36 = Meta_j
+	shift alt ctrll keycode 36 = Meta_J
+	control alt ctrll keycode 36 = Meta_Control_j
+	shift control alt ctrll keycode 36 = Meta_Control_j
+	ctrll ctrlr	keycode 36 = +207
+	shift ctrll ctrlr keycode 36 = +239
+	control ctrll ctrlr keycode 36 = Control_j
+	shift control ctrll ctrlr keycode 36 = Control_j
+	alt ctrll ctrlr keycode 36 = Meta_j
+	shift alt ctrll ctrlr keycode 36 = Meta_J
+	control alt ctrll ctrlr keycode 36 = Meta_Control_j
+	shift control alt ctrll ctrlr keycode 36 = Meta_Control_j
+keycode  37 = k               
+	ctrlr	keycode 37 = +204
+	shift ctrlr keycode 37 = +236
+	control ctrlr keycode 37 = Control_k
+	shift control ctrlr keycode 37 = Control_k
+	alt ctrlr keycode 37 = Meta_k
+	shift alt ctrlr keycode 37 = Meta_K
+	control alt ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrlr keycode 37 = Meta_Control_k
+	ctrll	keycode 37 = +204
+	shift ctrll keycode 37 = +236
+	control ctrll keycode 37 = Control_k
+	shift control ctrll keycode 37 = Control_k
+	alt ctrll keycode 37 = Meta_k
+	shift alt ctrll keycode 37 = Meta_K
+	control alt ctrll keycode 37 = Meta_Control_k
+	shift control alt ctrll keycode 37 = Meta_Control_k
+	ctrll ctrlr	keycode 37 = +204
+	shift ctrll ctrlr keycode 37 = +236
+	control ctrll ctrlr keycode 37 = Control_k
+	shift control ctrll ctrlr keycode 37 = Control_k
+	alt ctrll ctrlr keycode 37 = Meta_k
+	shift alt ctrll ctrlr keycode 37 = Meta_K
+	control alt ctrll ctrlr keycode 37 = Meta_Control_k
+	shift control alt ctrll ctrlr keycode 37 = Meta_Control_k
+keycode  38 = l               
+	ctrlr	keycode 38 = +196
+	shift ctrlr keycode 38 = +228
+	control ctrlr keycode 38 = Control_l
+	shift control ctrlr keycode 38 = Control_l
+	alt ctrlr keycode 38 = Meta_l
+	shift alt ctrlr keycode 38 = Meta_L
+	control alt ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrlr keycode 38 = Meta_Control_l
+	ctrll	keycode 38 = +196
+	shift ctrll keycode 38 = +228
+	control ctrll keycode 38 = Control_l
+	shift control ctrll keycode 38 = Control_l
+	alt ctrll keycode 38 = Meta_l
+	shift alt ctrll keycode 38 = Meta_L
+	control alt ctrll keycode 38 = Meta_Control_l
+	shift control alt ctrll keycode 38 = Meta_Control_l
+	ctrll ctrlr	keycode 38 = +196
+	shift ctrll ctrlr keycode 38 = +228
+	control ctrll ctrlr keycode 38 = Control_l
+	shift control ctrll ctrlr keycode 38 = Control_l
+	alt ctrll ctrlr keycode 38 = Meta_l
+	shift alt ctrll ctrlr keycode 38 = Meta_L
+	control alt ctrll ctrlr keycode 38 = Meta_Control_l
+	shift control alt ctrll ctrlr keycode 38 = Meta_Control_l
+keycode  39 = semicolon        colon           
+	alt	keycode  39 = Meta_semicolon  
+	shift	alt	keycode	 39 = Meta_colon
+	ctrlr	keycode 39 = +214
+	shift ctrlr keycode 39 = +246
+	alt ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrlr keycode 39 = Meta_colon
+	ctrll	keycode 39 = +214
+	shift ctrll keycode 39 = +246
+	alt ctrll keycode 39 = Meta_semicolon
+	shift alt ctrll keycode 39 = Meta_colon
+	ctrll ctrlr	keycode 39 = +214
+	shift ctrll ctrlr keycode 39 = +246
+	alt ctrll ctrlr keycode 39 = Meta_semicolon
+	shift alt ctrll ctrlr keycode 39 = Meta_colon
+keycode  40 = apostrophe       quotedbl        
+	control	keycode  40 = Control_g       
+	alt	keycode  40 = Meta_apostrophe 
+	shift	alt	keycode 40 = Meta_quotedbl
+	ctrlr	keycode 40 = +220
+	shift ctrlr keycode 40 = +252
+	control ctrlr keycode 40 = Control_g
+	shift control ctrlr keycode 40 = Control_g
+	alt ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrlr keycode 40 = Meta_quotedbl
+	ctrll	keycode 40 = +164
+	shift ctrll keycode 40 = +180
+	control ctrll keycode 40 = Control_g
+	shift control ctrll keycode 40 = Control_g
+	alt ctrll keycode 40 = Meta_apostrophe
+	shift alt ctrll keycode 40 = Meta_quotedbl
+	ctrll ctrlr	keycode 40 = +164
+	shift ctrll ctrlr keycode 40 = +180
+	control ctrll ctrlr keycode 40 = Control_g
+	shift control ctrll ctrlr keycode 40 = Control_g
+	alt ctrll ctrlr keycode 40 = Meta_apostrophe
+	shift alt ctrll ctrlr keycode 40 = Meta_quotedbl
+keycode  41 = grave            asciitilde      
+	control	keycode  41 = nul             
+	alt	keycode  41 = Meta_grave      
+	shift	alt	keycode 41 = Meta_asciitilde
+	ctrlr	keycode 41 = apostrophe
+	shift ctrlr keycode 41 = question
+	control ctrlr keycode 41 = nul
+	shift control ctrlr keycode 41 = nul
+	alt ctrlr keycode 41 = Meta_grave
+	shift alt ctrlr keycode 41 = Meta_asciitilde
+	ctrll	keycode 41 = apostrophe
+	shift ctrll keycode 41 = question
+	control ctrll keycode 41 = nul
+	shift control ctrll keycode 41 = nul
+	alt ctrll keycode 41 = Meta_grave
+	shift alt ctrll keycode 41 = Meta_asciitilde
+	ctrll ctrlr	keycode 41 = apostrophe
+	shift ctrll ctrlr keycode 41 = question
+	control ctrll ctrlr keycode 41 = nul
+	shift control ctrll ctrlr keycode 41 = nul
+	alt ctrll ctrlr keycode 41 = Meta_grave
+	shift alt ctrll ctrlr keycode 41 = Meta_asciitilde
+keycode  42 = Shift           
+keycode  43 = backslash        bar             
+	control	keycode  43 = Control_backslash
+	alt	keycode  43 = Meta_backslash  
+	shift	alt	keycode  43 = Meta_bar        
+	control alt	keycode 43 = Meta_Control_backslash
+	shift control alt keycode 43 = Meta_Control_backslash
+	ctrlr	keycode 43 = backslash
+	shift ctrlr keycode 43 = bar
+	control ctrlr keycode 43 = Control_backslash
+	shift control ctrlr keycode 43 = Control_backslash
+	alt ctrlr keycode 43 = Meta_backslash
+	shift alt ctrlr keycode 43 = Meta_bar
+	control alt ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrlr keycode 43 = Meta_Control_backslash
+	ctrll	keycode 43 = backslash
+	shift ctrll keycode 43 = bar
+	control ctrll keycode 43 = Control_backslash
+	shift control ctrll keycode 43 = Control_backslash
+	alt ctrll keycode 43 = Meta_backslash
+	shift alt ctrll keycode 43 = Meta_bar
+	control alt ctrll keycode 43 = Meta_Control_backslash
+	shift control alt ctrll keycode 43 = Meta_Control_backslash
+	ctrll ctrlr	keycode 43 = backslash
+	shift ctrll ctrlr keycode 43 = bar
+	control ctrll ctrlr keycode 43 = Control_backslash
+	shift control ctrll ctrlr keycode 43 = Control_backslash
+	alt ctrll ctrlr keycode 43 = Meta_backslash
+	shift alt ctrll ctrlr keycode 43 = Meta_bar
+	control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+	shift control alt ctrll ctrlr keycode 43 = Meta_Control_backslash
+keycode  44 = z               
+	ctrlr	keycode 44 = +209
+	shift ctrlr keycode 44 = +241
+	control ctrlr keycode 44 = Control_z
+	shift control ctrlr keycode 44 = Control_z
+	alt ctrlr keycode 44 = Meta_z
+	shift alt ctrlr keycode 44 = Meta_Z
+	control alt ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrlr keycode 44 = Meta_Control_z
+	ctrll	keycode 44 = +209
+	shift ctrll keycode 44 = +241
+	control ctrll keycode 44 = Control_z
+	shift control ctrll keycode 44 = Control_z
+	alt ctrll keycode 44 = Meta_z
+	shift alt ctrll keycode 44 = Meta_Z
+	control alt ctrll keycode 44 = Meta_Control_z
+	shift control alt ctrll keycode 44 = Meta_Control_z
+	ctrll ctrlr	keycode 44 = +209
+	shift ctrll ctrlr keycode 44 = +241
+	control ctrll ctrlr keycode 44 = Control_z
+	shift control ctrll ctrlr keycode 44 = Control_z
+	alt ctrll ctrlr keycode 44 = Meta_z
+	shift alt ctrll ctrlr keycode 44 = Meta_Z
+	control alt ctrll ctrlr keycode 44 = Meta_Control_z
+	shift control alt ctrll ctrlr keycode 44 = Meta_Control_z
+keycode  45 = x               
+	ctrlr	keycode 45 = +222
+	shift ctrlr keycode 45 = +254
+	control ctrlr keycode 45 = Control_x
+	shift control ctrlr keycode 45 = Control_x
+	alt ctrlr keycode 45 = Meta_x
+	shift alt ctrlr keycode 45 = Meta_X
+	control alt ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrlr keycode 45 = Meta_Control_x
+	ctrll	keycode 45 = +222
+	shift ctrll keycode 45 = +254
+	control ctrll keycode 45 = Control_x
+	shift control ctrll keycode 45 = Control_x
+	alt ctrll keycode 45 = Meta_x
+	shift alt ctrll keycode 45 = Meta_X
+	control alt ctrll keycode 45 = Meta_Control_x
+	shift control alt ctrll keycode 45 = Meta_Control_x
+	ctrll ctrlr	keycode 45 = +222
+	shift ctrll ctrlr keycode 45 = +254
+	control ctrll ctrlr keycode 45 = Control_x
+	shift control ctrll ctrlr keycode 45 = Control_x
+	alt ctrll ctrlr keycode 45 = Meta_x
+	shift alt ctrll ctrlr keycode 45 = Meta_X
+	control alt ctrll ctrlr keycode 45 = Meta_Control_x
+	shift control alt ctrll ctrlr keycode 45 = Meta_Control_x
+keycode  46 = c               
+	ctrlr	keycode 46 = +211
+	shift ctrlr keycode 46 = +243
+	control ctrlr keycode 46 = Control_c
+	shift control ctrlr keycode 46 = Control_c
+	alt ctrlr keycode 46 = Meta_c
+	shift alt ctrlr keycode 46 = Meta_C
+	control alt ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrlr keycode 46 = Meta_Control_c
+	ctrll	keycode 46 = +211
+	shift ctrll keycode 46 = +243
+	control ctrll keycode 46 = Control_c
+	shift control ctrll keycode 46 = Control_c
+	alt ctrll keycode 46 = Meta_c
+	shift alt ctrll keycode 46 = Meta_C
+	control alt ctrll keycode 46 = Meta_Control_c
+	shift control alt ctrll keycode 46 = Meta_Control_c
+	ctrll ctrlr	keycode 46 = +211
+	shift ctrll ctrlr keycode 46 = +243
+	control ctrll ctrlr keycode 46 = Control_c
+	shift control ctrll ctrlr keycode 46 = Control_c
+	alt ctrll ctrlr keycode 46 = Meta_c
+	shift alt ctrll ctrlr keycode 46 = Meta_C
+	control alt ctrll ctrlr keycode 46 = Meta_Control_c
+	shift control alt ctrll ctrlr keycode 46 = Meta_Control_c
+keycode  47 = v               
+	ctrlr	keycode 47 = +205
+	shift ctrlr keycode 47 = +237
+	control ctrlr keycode 47 = Control_v
+	shift control ctrlr keycode 47 = Control_v
+	alt ctrlr keycode 47 = Meta_v
+	shift alt ctrlr keycode 47 = Meta_V
+	control alt ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrlr keycode 47 = Meta_Control_v
+	ctrll	keycode 47 = +205
+	shift ctrll keycode 47 = +237
+	control ctrll keycode 47 = Control_v
+	shift control ctrll keycode 47 = Control_v
+	alt ctrll keycode 47 = Meta_v
+	shift alt ctrll keycode 47 = Meta_V
+	control alt ctrll keycode 47 = Meta_Control_v
+	shift control alt ctrll keycode 47 = Meta_Control_v
+	ctrll ctrlr	keycode 47 = +205
+	shift ctrll ctrlr keycode 47 = +237
+	control ctrll ctrlr keycode 47 = Control_v
+	shift control ctrll ctrlr keycode 47 = Control_v
+	alt ctrll ctrlr keycode 47 = Meta_v
+	shift alt ctrll ctrlr keycode 47 = Meta_V
+	control alt ctrll ctrlr keycode 47 = Meta_Control_v
+	shift control alt ctrll ctrlr keycode 47 = Meta_Control_v
+keycode  48 = b               
+	ctrlr	keycode	48 = +201
+	shift ctrlr keycode 48 = +233
+	control ctrlr keycode 48 = Control_b
+	shift control ctrlr keycode 48 = Control_b
+	alt ctrlr keycode 48 = Meta_b
+	shift alt ctrlr keycode 48 = Meta_B
+	control alt ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrlr keycode 48 = Meta_Control_b
+	ctrll	keycode	48 = +201
+	shift ctrll keycode 48 = +233
+	control ctrll keycode 48 = Control_b
+	shift control ctrll keycode 48 = Control_b
+	alt ctrll keycode 48 = Meta_b
+	shift alt ctrll keycode 48 = Meta_B
+	control alt ctrll keycode 48 = Meta_Control_b
+	shift control alt ctrll keycode 48 = Meta_Control_b
+	ctrll ctrlr	keycode	48 = +201
+	shift ctrll ctrlr keycode 48 = +233
+	control ctrll ctrlr keycode 48 = Control_b
+	shift control ctrll ctrlr keycode 48 = Control_b
+	alt ctrll ctrlr keycode 48 = Meta_b
+	shift alt ctrll ctrlr keycode 48 = Meta_B
+	control alt ctrll ctrlr keycode 48 = Meta_Control_b
+	shift control alt ctrll ctrlr keycode 48 = Meta_Control_b
+keycode  49 = n               
+	ctrlr	keycode 49 = +212
+	shift ctrlr keycode 49 = +244
+	control ctrlr keycode 49 = Control_n
+	shift control ctrlr keycode 49 = Control_n
+	alt ctrlr keycode 49 = Meta_n
+	shift alt ctrlr keycode 49 = Meta_N
+	control alt ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrlr keycode 49 = Meta_Control_n
+	ctrll	keycode 49 = +212
+	shift ctrll keycode 49 = +244
+	control ctrll keycode 49 = Control_n
+	shift control ctrll keycode 49 = Control_n
+	alt ctrll keycode 49 = Meta_n
+	shift alt ctrll keycode 49 = Meta_N
+	control alt ctrll keycode 49 = Meta_Control_n
+	shift control alt ctrll keycode 49 = Meta_Control_n
+	ctrll ctrlr	keycode 49 = +212
+	shift ctrll ctrlr keycode 49 = +244
+	control ctrll ctrlr keycode 49 = Control_n
+	shift control ctrll ctrlr keycode 49 = Control_n
+	alt ctrll ctrlr keycode 49 = Meta_n
+	shift alt ctrll ctrlr keycode 49 = Meta_N
+	control alt ctrll ctrlr keycode 49 = Meta_Control_n
+	shift control alt ctrll ctrlr keycode 49 = Meta_Control_n
+keycode  50 = m               
+	ctrlr	keycode 50 = +216
+	shift ctrlr keycode 50 = +248
+	control ctrlr keycode 50 = Control_m
+	shift control ctrlr keycode 50 = Control_m
+	alt ctrlr keycode 50 = Meta_m
+	shift alt ctrlr keycode 50 = Meta_M
+	control alt ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrlr keycode 50 = Meta_Control_m
+	ctrll	keycode 50 = +216
+	shift ctrll keycode 50 = +248
+	control ctrll keycode 50 = Control_m
+	shift control ctrll keycode 50 = Control_m
+	alt ctrll keycode 50 = Meta_m
+	shift alt ctrll keycode 50 = Meta_M
+	control alt ctrll keycode 50 = Meta_Control_m
+	shift control alt ctrll keycode 50 = Meta_Control_m
+	ctrll ctrlr	keycode 50 = +216
+	shift ctrll ctrlr keycode 50 = +248
+	control ctrll ctrlr keycode 50 = Control_m
+	shift control ctrll ctrlr keycode 50 = Control_m
+	alt ctrll ctrlr keycode 50 = Meta_m
+	shift alt ctrll ctrlr keycode 50 = Meta_M
+	control alt ctrll ctrlr keycode 50 = Meta_Control_m
+	shift control alt ctrll ctrlr keycode 50 = Meta_Control_m
+keycode  51 = comma            less            
+	alt	keycode  51 = Meta_comma      
+	shift	alt	keycode  51 = Meta_less       
+	ctrlr	keycode 51 = +194
+	shift ctrlr keycode 51 = +226
+	alt ctrlr keycode 51 = Meta_comma
+	shift alt ctrlr keycode 51 = Meta_less
+	ctrll	keycode 51 = +194
+	shift ctrll keycode 51 = +226
+	alt ctrll keycode 51 = Meta_comma
+	shift alt ctrll keycode 51 = Meta_less
+	ctrll ctrlr	keycode 51 = +194
+	shift ctrll ctrlr keycode 51 = +226
+	alt ctrll ctrlr keycode 51 = Meta_comma
+	shift alt ctrll ctrlr keycode 51 = Meta_less
+keycode  52 = period           greater         
+	control	keycode  52 = Compose         
+	alt	keycode  52 = Meta_period     
+	shift	alt	keycode  52 = Meta_greater    
+	ctrlr	keycode 52 = +192
+	shift ctrlr keycode 52 = +224
+	alt ctrlr keycode 52 = Meta_period
+	shift alt ctrlr keycode 52 = Meta_greater
+	ctrll	keycode 52 = +192
+	shift ctrll keycode 52 = +224
+	alt ctrll keycode 52 = Meta_period
+	shift alt ctrll keycode 52 = Meta_greater
+	ctrll ctrlr	keycode 52 = +192
+	shift ctrll ctrlr keycode 52 = +224
+	alt ctrll ctrlr keycode 52 = Meta_period
+	shift alt ctrll ctrlr keycode 52 = Meta_greater
+keycode  53 = slash            question        
+	control	keycode  53 = Delete          
+	shift	control	keycode  53 = Delete          
+	alt	keycode  53 = Meta_slash      
+	ctrlr	keycode 53 = +163
+	shift ctrlr keycode 53 = +179
+	alt ctrlr keycode 53 = Meta_slash
+	shift alt ctrlr keycode 53 = Meta_question
+	ctrll	keycode 53 = +173
+	shift ctrll keycode 53 = +189
+	alt ctrll keycode 53 = Meta_slash
+	shift alt ctrll keycode 53 = Meta_question
+	ctrll ctrlr	keycode 53 = +173
+	shift ctrll ctrlr keycode 53 = +189
+	alt ctrll ctrlr keycode 53 = Meta_slash
+	shift alt ctrll ctrlr keycode 53 = Meta_question
+keycode  54 = Shift           
+keycode  55 = KP_Multiply     
+keycode  56 = Alt             
+keycode  57 = space            space           
+	control	keycode  57 = nul             
+	alt	keycode  57 = Meta_space      
+	ctrlr	keycode 57 = space
+	shift ctrlr keycode 57 = space
+	control ctrlr keycode 57 = nul
+	shift control ctrlr keycode 57 = nul
+	alt ctrlr keycode 57 = Meta_space
+	shift alt ctrlr keycode 57 = Meta_space
+	ctrll	keycode 57 = space
+	shift ctrll keycode 57 = space
+	control ctrll keycode 57 = nul
+	shift control ctrll keycode 57 = nul
+	alt ctrll keycode 57 = Meta_space
+	shift alt ctrll keycode 57 = Meta_space
+	ctrll ctrlr	keycode 57 = space
+	shift ctrll ctrlr keycode 57 = space
+	control ctrll ctrlr keycode 57 = nul
+	shift control ctrll ctrlr keycode 57 = nul
+	alt ctrll ctrlr keycode 57 = Meta_space
+	shift alt ctrll ctrlr keycode 57 = Meta_space
+keycode  58 = Caps_Lock       
+keycode  59 = F1               F13              Console_13      
+	control	keycode  59 = F25             
+	shift	control	keycode  59 = F37             
+	alt	keycode  59 = Console_1       
+	control	alt	keycode  59 = Console_1       
+	ctrlr keycode  59 = F1
+	ctrlr shift keycode 59 = F13
+	ctrlr altgr keycode 59 = Console_13      
+	ctrlr control	keycode  59 = F25             
+	ctrlr shift	control	keycode  59 = F37             
+	ctrlr alt	keycode  59 = Console_1       
+	ctrlr control	alt	keycode  59 = Console_1       
+	ctrll keycode  59 = F1
+	ctrll shift keycode 59 = F13
+	ctrll altgr keycode 59 = Console_13      
+	ctrll control	keycode  59 = F25             
+	ctrll shift	control	keycode  59 = F37             
+	ctrll alt	keycode  59 = Console_1       
+	ctrll control	alt	keycode  59 = Console_1       
+	ctrlr ctrll keycode  59 = F1
+	ctrlr ctrll shift keycode 59 = F13
+	ctrlr ctrll altgr keycode 59 = Console_13      
+	ctrlr ctrll control	keycode  59 = F25             
+	ctrlr ctrll shift	control	keycode  59 = F37             
+	ctrlr ctrll alt	keycode  59 = Console_1       
+	ctrlr ctrll control	alt	keycode  59 = Console_1       
+keycode  60 = F2               F14              Console_14      
+	control	keycode  60 = F26             
+	shift	control	keycode  60 = F38             
+	alt	keycode  60 = Console_2       
+	control	alt	keycode  60 = Console_2       
+	ctrlr keycode  60 = F2
+	ctrlr shift keycode 60 = F14
+	ctrlr altgr keycode 60 = Console_14      
+	ctrlr control	keycode  60 = F26             
+	ctrlr shift	control	keycode  60 = F38             
+	ctrlr alt	keycode  60 = Console_2       
+	ctrlr control	alt	keycode  60 = Console_2       
+	ctrll keycode  60 = F2
+	ctrll shift keycode 60 = F14
+	ctrll altgr keycode 60 = Console_14      
+	ctrll control	keycode  60 = F26             
+	ctrll shift	control	keycode  60 = F38             
+	ctrll alt	keycode  60 = Console_2       
+	ctrll control	alt	keycode  60 = Console_2       
+	ctrlr ctrll keycode  60 = F2
+	ctrlr ctrll shift keycode 60 = F14
+	ctrlr ctrll altgr keycode 60 = Console_14      
+	ctrlr ctrll control	keycode  60 = F26             
+	ctrlr ctrll shift	control	keycode  60 = F38             
+	ctrlr ctrll alt	keycode  60 = Console_2       
+	ctrlr ctrll control	alt	keycode  60 = Console_2       
+keycode  61 = F3               F15              Console_15      
+	control	keycode  61 = F27             
+	shift	control	keycode  61 = F39             
+	alt	keycode  61 = Console_3       
+	control	alt	keycode  61 = Console_3       
+	ctrlr keycode  61 = F3
+	ctrlr shift keycode 61 = F15
+	ctrlr altgr keycode 61 = Console_15      
+	ctrlr control	keycode  61 = F27             
+	ctrlr shift	control	keycode  61 = F39             
+	ctrlr alt	keycode  61 = Console_3       
+	ctrlr control	alt	keycode  61 = Console_3       
+	ctrll keycode  61 = F3
+	ctrll shift keycode 61 = F15
+	ctrll altgr keycode 61 = Console_15      
+	ctrll control	keycode  61 = F27             
+	ctrll shift	control	keycode  61 = F39             
+	ctrll alt	keycode  61 = Console_3       
+	ctrll control	alt	keycode  61 = Console_3       
+	ctrlr ctrll keycode  61 = F3
+	ctrlr ctrll shift keycode 61 = F15
+	ctrlr ctrll altgr keycode 61 = Console_15      
+	ctrlr ctrll control	keycode  61 = F27             
+	ctrlr ctrll shift	control	keycode  61 = F39             
+	ctrlr ctrll alt	keycode  61 = Console_3       
+	ctrlr ctrll control	alt	keycode  61 = Console_3       
+keycode  62 = F4               F16              Console_16      
+	control	keycode  62 = F28             
+	shift	control	keycode  62 = F40             
+	alt	keycode  62 = Console_4       
+	control	alt	keycode  62 = Console_4       
+	ctrlr keycode  62 = F4
+	ctrlr shift keycode 62 = F16
+	ctrlr altgr keycode 62 = Console_16      
+	ctrlr control	keycode  62 = F28             
+	ctrlr shift	control	keycode  62 = F40             
+	ctrlr alt	keycode  62 = Console_4       
+	ctrlr control	alt	keycode  62 = Console_4       
+	ctrll keycode  62 = F4
+	ctrll shift keycode 62 = F16
+	ctrll altgr keycode 62 = Console_16      
+	ctrll control	keycode  62 = F28             
+	ctrll shift	control	keycode  62 = F40             
+	ctrll alt	keycode  62 = Console_4       
+	ctrll control	alt	keycode  62 = Console_4       
+	ctrlr ctrll keycode  62 = F4
+	ctrlr ctrll shift keycode 62 = F16
+	ctrlr ctrll altgr keycode 62 = Console_16      
+	ctrlr ctrll control	keycode  62 = F28             
+	ctrlr ctrll shift	control	keycode  62 = F40             
+	ctrlr ctrll alt	keycode  62 = Console_4       
+	ctrlr ctrll control	alt	keycode  62 = Console_4       
+keycode  63 = F5               F17              Console_17      
+	control	keycode  63 = F29             
+	shift	control	keycode  63 = F41             
+	alt	keycode  63 = Console_5       
+	control	alt	keycode  63 = Console_5       
+	ctrlr keycode  63 = F5
+	ctrlr shift keycode 63 = F17
+	ctrlr altgr keycode 63 = Console_17      
+	ctrlr control	keycode  63 = F29             
+	ctrlr shift	control	keycode  63 = F41             
+	ctrlr alt	keycode  63 = Console_5       
+	ctrlr control	alt	keycode  63 = Console_5       
+	ctrll keycode  63 = F5
+	ctrll shift keycode 63 = F17
+	ctrll altgr keycode 63 = Console_17      
+	ctrll control	keycode  63 = F29             
+	ctrll shift	control	keycode  63 = F41             
+	ctrll alt	keycode  63 = Console_5       
+	ctrll control	alt	keycode  63 = Console_5       
+	ctrlr ctrll keycode  63 = F5
+	ctrlr ctrll shift keycode 63 = F17
+	ctrlr ctrll altgr keycode 63 = Console_17      
+	ctrlr ctrll control	keycode  63 = F29             
+	ctrlr ctrll shift	control	keycode  63 = F41             
+	ctrlr ctrll alt	keycode  63 = Console_5       
+	ctrlr ctrll control	alt	keycode  63 = Console_5       
+keycode  64 = F6               F18              Console_18      
+	control	keycode  64 = F30             
+	shift	control	keycode  64 = F42             
+	alt	keycode  64 = Console_6       
+	control	alt	keycode  64 = Console_6       
+	ctrlr keycode  64 = F6
+	ctrlr shift keycode 64 = F18
+	ctrlr altgr keycode 64 = Console_18      
+	ctrlr control	keycode  64 = F30             
+	ctrlr shift	control	keycode  64 = F42             
+	ctrlr alt	keycode  64 = Console_6       
+	ctrlr control	alt	keycode  64 = Console_6       
+	ctrll keycode  64 = F6
+	ctrll shift keycode 64 = F18
+	ctrll altgr keycode 64 = Console_18      
+	ctrll control	keycode  64 = F30             
+	ctrll shift	control	keycode  64 = F42             
+	ctrll alt	keycode  64 = Console_6       
+	ctrll control	alt	keycode  64 = Console_6       
+	ctrlr ctrll keycode  64 = F6
+	ctrlr ctrll shift keycode 64 = F18
+	ctrlr ctrll altgr keycode 64 = Console_18      
+	ctrlr ctrll control	keycode  64 = F30             
+	ctrlr ctrll shift	control	keycode  64 = F42             
+	ctrlr ctrll alt	keycode  64 = Console_6       
+	ctrlr ctrll control	alt	keycode  64 = Console_6       
+keycode  65 = F7               F19              Console_19      
+	control	keycode  65 = F31             
+	shift	control	keycode  65 = F43             
+	alt	keycode  65 = Console_7       
+	control	alt	keycode  65 = Console_7       
+	ctrlr keycode  65 = F7
+	ctrlr shift keycode 65 = F19
+	ctrlr altgr keycode 65 = Console_19      
+	ctrlr control	keycode  65 = F31             
+	ctrlr shift	control	keycode  65 = F43             
+	ctrlr alt	keycode  65 = Console_7       
+	ctrlr control	alt	keycode  65 = Console_7       
+	ctrll keycode  65 = F7
+	ctrll shift keycode 65 = F19
+	ctrll altgr keycode 65 = Console_19      
+	ctrll control	keycode  65 = F31             
+	ctrll shift	control	keycode  65 = F43             
+	ctrll alt	keycode  65 = Console_7       
+	ctrll control	alt	keycode  65 = Console_7       
+	ctrlr ctrll keycode  65 = F7
+	ctrlr ctrll shift keycode 65 = F19
+	ctrlr ctrll altgr keycode 65 = Console_19      
+	ctrlr ctrll control	keycode  65 = F31             
+	ctrlr ctrll shift	control	keycode  65 = F43             
+	ctrlr ctrll alt	keycode  65 = Console_7       
+	ctrlr ctrll control	alt	keycode  65 = Console_7       
+keycode  66 = F8               F20              Console_20      
+	control	keycode  66 = F32             
+	shift	control	keycode  66 = F44             
+	alt	keycode  66 = Console_8       
+	control	alt	keycode  66 = Console_8       
+	ctrlr keycode  66 = F8
+	ctrlr shift keycode 66 = F20
+	ctrlr altgr keycode 66 = Console_20      
+	ctrlr control	keycode  66 = F32             
+	ctrlr shift	control	keycode  66 = F44             
+	ctrlr alt	keycode  66 = Console_8       
+	ctrlr control	alt	keycode  66 = Console_8       
+	ctrll keycode  66 = F8
+	ctrll shift keycode 66 = F20
+	ctrll altgr keycode 66 = Console_20      
+	ctrll control	keycode  66 = F32             
+	ctrll shift	control	keycode  66 = F44             
+	ctrll alt	keycode  66 = Console_8       
+	ctrll control	alt	keycode  66 = Console_8       
+	ctrlr ctrll keycode  66 = F8
+	ctrlr ctrll shift keycode 66 = F20
+	ctrlr ctrll altgr keycode 66 = Console_20      
+	ctrlr ctrll control	keycode  66 = F32             
+	ctrlr ctrll shift	control	keycode  66 = F44             
+	ctrlr ctrll alt	keycode  66 = Console_8       
+	ctrlr ctrll control	alt	keycode  66 = Console_8       
+keycode  67 = F9               F21              Console_21      
+	control	keycode  67 = F33             
+	shift	control	keycode  67 = F45             
+	alt	keycode  67 = Console_9       
+	control	alt	keycode  67 = Console_9       
+	ctrlr keycode  67 = F9
+	ctrlr shift keycode 67 = F21
+	ctrlr altgr keycode 67 = Console_21      
+	ctrlr control	keycode  67 = F33             
+	ctrlr shift	control	keycode  67 = F45             
+	ctrlr alt	keycode  67 = Console_9       
+	ctrlr control	alt	keycode  67 = Console_9       
+	ctrll keycode  67 = F9
+	ctrll shift keycode 67 = F21
+	ctrll altgr keycode 67 = Console_21      
+	ctrll control	keycode  67 = F33             
+	ctrll shift	control	keycode  67 = F45             
+	ctrll alt	keycode  67 = Console_9       
+	ctrll control	alt	keycode  67 = Console_9       
+	ctrlr ctrll keycode  67 = F9
+	ctrlr ctrll shift keycode 67 = F21
+	ctrlr ctrll altgr keycode 67 = Console_21      
+	ctrlr ctrll control	keycode  67 = F33             
+	ctrlr ctrll shift	control	keycode  67 = F45             
+	ctrlr ctrll alt	keycode  67 = Console_9       
+	ctrlr ctrll control	alt	keycode  67 = Console_9       
+keycode  68 = F10              F22              Console_22      
+	control	keycode  68 = F34             
+	shift	control	keycode  68 = F46             
+	alt	keycode  68 = Console_10      
+	control	alt	keycode  68 = Console_10      
+	ctrlr keycode  68 = F10
+	ctrlr shift keycode 68 = F22
+	ctrlr altgr keycode 68 = Console_22      
+	ctrlr control	keycode  68 = F34             
+	ctrlr shift	control	keycode  68 = F46             
+	ctrlr alt	keycode  68 = Console_10       
+	ctrlr control	alt	keycode  68 = Console_10       
+	ctrll keycode  68 = F10
+	ctrll shift keycode 68 = F22
+	ctrll altgr keycode 68 = Console_22      
+	ctrll control	keycode  68 = F34             
+	ctrll shift	control	keycode  68 = F46             
+	ctrll alt	keycode  68 = Console_10       
+	ctrll control	alt	keycode  68 = Console_10       
+	ctrlr ctrll keycode  68 = F10
+	ctrlr ctrll shift keycode 68 = F22
+	ctrlr ctrll altgr keycode 68 = Console_22      
+	ctrlr ctrll control	keycode  68 = F34             
+	ctrlr ctrll shift	control	keycode  68 = F46             
+	ctrlr ctrll alt	keycode  68 = Console_10       
+	ctrlr ctrll control	alt	keycode  68 = Console_10       
+keycode  69 = Num_Lock        
+keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
+	control	keycode  70 = Show_State      
+	alt	keycode  70 = Scroll_Lock     
+keycode  71 = KP_7            
+	alt	keycode  71 = Ascii_7         
+keycode  72 = KP_8            
+	alt	keycode  72 = Ascii_8         
+keycode  73 = KP_9            
+	alt	keycode  73 = Ascii_9         
+keycode  74 = KP_Subtract     
+keycode  75 = KP_4            
+	alt	keycode  75 = Ascii_4         
+keycode  76 = KP_5            
+	alt	keycode  76 = Ascii_5         
+keycode  77 = KP_6            
+	alt	keycode  77 = Ascii_6         
+keycode  78 = KP_Add          
+keycode  79 = KP_1            
+	alt	keycode  79 = Ascii_1         
+keycode  80 = KP_2            
+	alt	keycode  80 = Ascii_2         
+keycode  81 = KP_3            
+	alt	keycode  81 = Ascii_3         
+keycode  82 = KP_0            
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_Period       
+	altgr	control	keycode  83 = Boot            
+	control	alt	keycode  83 = Boot            
+keycode  84 = Last_Console    
+keycode  85 =
+keycode  86 = less             greater          bar             
+	alt	keycode  86 = Meta_less       
+keycode  87 = F11              F23              Console_23      
+	control	keycode  87 = F35             
+	shift	control	keycode  87 = F47             
+	alt	keycode  87 = Console_11      
+	control	alt	keycode  87 = Console_11      
+	ctrlr keycode  87 = F11
+	ctrlr shift keycode 87 = F23
+	ctrlr altgr keycode 87 = Console_23      
+	ctrlr control	keycode  87 = F35             
+	ctrlr shift	control	keycode  87 = F47             
+	ctrlr alt	keycode  87 = Console_11       
+	ctrlr control	alt	keycode  87 = Console_11       
+	ctrll keycode  87 = F11
+	ctrll shift keycode 87 = F23
+	ctrll altgr keycode 87 = Console_23      
+	ctrll control	keycode  87 = F35             
+	ctrll shift	control	keycode  87 = F47             
+	ctrll alt	keycode  87 = Console_11       
+	ctrll control	alt	keycode  87 = Console_11       
+	ctrlr ctrll keycode  87 = F11
+	ctrlr ctrll shift keycode 87 = F23
+	ctrlr ctrll altgr keycode 87 = Console_23      
+	ctrlr ctrll control	keycode  87 = F35             
+	ctrlr ctrll shift	control	keycode  87 = F47             
+	ctrlr ctrll alt	keycode  87 = Console_11       
+	ctrlr ctrll control	alt	keycode  87 = Console_11       
+keycode  88 = F12              F24              Console_24      
+	control	keycode  88 = F36             
+	shift	control	keycode  88 = F48             
+	alt	keycode  88 = Console_12      
+	control	alt	keycode  88 = Console_12      
+	ctrlr keycode  88 = F12
+	ctrlr shift keycode 88 = F24
+	ctrlr altgr keycode 88 = Console_24      
+	ctrlr control	keycode  88 = F36             
+	ctrlr shift	control	keycode  88 = F48             
+	ctrlr alt	keycode  88 = Console_12       
+	ctrlr control	alt	keycode  88 = Console_12       
+	ctrll keycode  88 = F12
+	ctrll shift keycode 88 = F24
+	ctrll altgr keycode 88 = Console_24      
+	ctrll control	keycode  88 = F36             
+	ctrll shift	control	keycode  88 = F48             
+	ctrll alt	keycode  88 = Console_12       
+	ctrll control	alt	keycode  88 = Console_12       
+	ctrlr ctrll keycode  88 = F12
+	ctrlr ctrll shift keycode 88 = F24
+	ctrlr ctrll altgr keycode 88 = Console_24      
+	ctrlr ctrll control	keycode  88 = F36             
+	ctrlr ctrll shift	control	keycode  88 = F48             
+	ctrlr ctrll alt	keycode  88 = Console_12       
+	ctrlr ctrll control	alt	keycode  88 = Console_12       
+keycode  89 =
+keycode  90 =
+keycode  91 =
+keycode  92 =
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = KP_Enter        
+keycode 97 = CtrlL_Lock
+ctrlr keycode 97 = CtrlL_Lock
+ctrll keycode 97 = CtrlL_Lock
+ctrll ctrlr keycode 97 = CtrlL_Lock
+keycode  98 = KP_Divide       
+keycode  99 = Control_backslash
+	control	keycode  99 = Control_backslash
+	alt	keycode  99 = Control_backslash
+keycode 100 = CtrlR_Lock
+ctrll keycode 100 = CtrlR_Lock
+ctrlr keycode 100 = CtrlR_Lock
+ctrll ctrlr keycode 100 = CtrlR_Lock
+keycode 101 = Break           
+keycode 102 = Find            
+keycode 103 = Up              
+keycode 104 = Prior           
+	shift	keycode 104 = Scroll_Backward 
+keycode 105 = Left            
+	alt	keycode 105 = Decr_Console    
+keycode 106 = Right           
+	alt	keycode 106 = Incr_Console    
+keycode 107 = Select          
+keycode 108 = Down            
+keycode 109 = Next            
+	shift	keycode 109 = Scroll_Forward  
+keycode 110 = Insert          
+keycode 111 = Remove          
+	altgr	control	keycode 111 = Boot            
+	control	alt	keycode 111 = Boot            
+keycode 112 = Macro           
+keycode 113 = F13             
+keycode 114 = F14             
+keycode 115 = Help            
+keycode 116 = Do              
+keycode 117 = F17             
+keycode 118 = KP_MinPlus      
+keycode 119 = Pause           
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/i386/qwerty/uk.map b/keymaps/i386/qwerty/uk.map
new file mode 100644
index 0000000..97868ec
--- /dev/null
+++ b/keymaps/i386/qwerty/uk.map
@@ -0,0 +1,58 @@
+# uk.map
+# From bam@wcl-l.bham.ac.uk Fri May  2 20:20:59 1997
+# reduced number of keymaps, adapted to alt_is_meta - aeb
+#
+# old: shift keycode 41 = asciitilde
+# bam: shift keycode 41 = notsign
+#
+keymaps 0-2,4-6,8,9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl         at               nul
+keycode   4 = three            sterling
+	control	keycode   4 = Escape
+keycode   5 = four             dollar           dollar           Control_backslash
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              asciicircum
+	control	keycode   7 = Control_asciicircum
+keycode   8 = seven            ampersand        braceleft        Control_underscore
+keycode   9 = eight            asterisk         bracketleft      Delete
+keycode  10 = nine             parenleft        bracketright
+keycode  11 = zero             parenright       braceright
+#	alt	keycode  11 = Meta_parenright
+keycode  12 = minus            underscore       backslash        Control_underscore
+keycode  13 = equal            plus
+keycode  14 = Delete
+	control	keycode  14 = Control_underscore
+keycode  15 = Tab
+keycode  26 = bracketleft      braceleft
+	control	keycode  26 = Escape
+keycode  27 = bracketright     braceright       asciitilde       Control_bracketright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = semicolon        colon
+keycode  40 = apostrophe       at
+	control	keycode  40 = Control_g
+	shift	control	keycode  40 = nul
+keycode  41 = grave            notsign          bar              nul
+keycode  42 = Shift
+keycode  43 = numbersign       asciitilde
+	control	keycode  43 = Control_backslash
+keycode  51 = comma            less
+keycode  52 = period           greater
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = backslash        bar              bar              Control_backslash
+keycode  97 = Control
diff --git a/keymaps/i386/qwerty/us.map b/keymaps/i386/qwerty/us.map
new file mode 100644
index 0000000..7a29b48
--- /dev/null
+++ b/keymaps/i386/qwerty/us.map
@@ -0,0 +1,50 @@
+# us.map
+keymaps 0-2,4-6,8-9,12
+alt_is_meta
+include "qwerty-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape
+keycode   2 = one              exclam
+keycode   3 = two              at               at               nul              nul
+keycode   4 = three            numbersign
+	control	keycode   4 = Escape
+keycode   5 = four             dollar           dollar           Control_backslash
+keycode   6 = five             percent
+	control	keycode   6 = Control_bracketright
+keycode   7 = six              asciicircum
+	control	keycode   7 = Control_asciicircum
+keycode   8 = seven            ampersand        braceleft        Control_underscore
+keycode   9 = eight            asterisk         bracketleft      Delete
+keycode  10 = nine             parenleft        bracketright
+keycode  11 = zero             parenright       braceright
+keycode  12 = minus            underscore       backslash        Control_underscore Control_underscore
+keycode  13 = equal            plus
+keycode  14 = Delete
+keycode  15 = Tab
+keycode  26 = bracketleft      braceleft
+	control	keycode  26 = Escape
+keycode  27 = bracketright     braceright       asciitilde       Control_bracketright
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = semicolon        colon
+keycode  40 = apostrophe       quotedbl
+	control	keycode  40 = Control_g
+keycode  41 = grave            asciitilde
+	control	keycode  41 = nul
+keycode  42 = Shift
+keycode  43 = backslash        bar
+	control	keycode  43 = Control_backslash
+keycode  51 = comma            less
+keycode  52 = period           greater
+keycode  53 = slash            question
+	control	keycode  53 = Delete
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space
+	control	keycode  57 = nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/croat.map b/keymaps/i386/qwertz/croat.map
new file mode 100644
index 0000000..3987749
--- /dev/null
+++ b/keymaps/i386/qwertz/croat.map
@@ -0,0 +1,169 @@
+# Croatian keymap 1.0
+# Based on keymaps available in kbd-0.90
+#
+# Alen Zekulic <azekulic@fesb.hr>
+
+charset "iso-8859-2"
+keymaps 0-2,4-6,8,10,12
+include "linux-with-alt-and-altgr.inc"
+strings as usual
+
+                keycode   1 = Escape
+        alt     keycode   1 = Meta_Escape
+
+                keycode   2 = one               exclam          asciitilde
+        alt     keycode   2 = Meta_one
+
+                keycode   3 = two               quotedbl        caron
+        control keycode   3 = nul
+        alt     keycode   3 = Meta_two
+
+                keycode   4 = three             numbersign      asciicircum
+        control keycode   4 = Escape
+        alt     keycode   4 = Meta_three
+
+                keycode   5 = four              dollar          breve
+        control keycode   5 = Control_backslash
+        alt     keycode   5 = Meta_four
+
+                keycode   6 = five              percent         degree
+        control keycode   6 = Control_bracketright
+        alt     keycode   6 = Meta_five
+
+                keycode   7 = six               ampersand       ogonek
+        control keycode   7 = Control_asciicircum
+        alt     keycode   7 = Meta_six
+
+                keycode   8 = seven             slash           grave
+        control keycode   8 = Control_underscore
+        alt     keycode   8 = Meta_seven
+
+                keycode   9 = eight             parenleft       abovedot
+        control keycode   9 = Delete
+        alt     keycode   9 = Meta_eight
+
+                keycode  10 = nine              parenright      acute
+        alt     keycode  10 = Meta_nine
+
+                keycode  11 = zero              equal           doubleacute
+        alt     keycode  11 = Meta_zero
+
+                keycode  12 = apostrophe        question        diaeresis
+        control keycode  12 = Control_underscore
+        alt     keycode  12 = Meta_minus
+control altgr   keycode  12 = Control_backslash
+
+                keycode  13 = plus              asterisk        cedilla
+        alt     keycode  13 = Meta_plus
+
+                keycode  14 = Delete            Delete
+        control keycode  14 = Control_backslash
+        alt     keycode  14 = Meta_Delete
+
+                keycode  15 = Tab              Tab
+        alt     keycode  15 = Meta_Tab
+
+                keycode  16 = +q        +Q      backslash
+        control keycode  16 = Control_q
+        alt     keycode  16 = Meta_q
+altgr   alt     keycode  16 = Meta_backslash
+altgr   control keycode  16 = Control_backslash
+
+                keycode  17 = +w        +W      bar
+        control keycode  17 = Control_w
+        alt     keycode  17 = Meta_w
+
+                keycode  18 = e
+                keycode  19 = r
+                keycode  20 = t
+                keycode  21 = z
+                keycode  22 = u
+                keycode  23 = i
+                keycode  24 = o
+                keycode  25 = p
+
+                keycode  26 = +scaron   +Scaron         division
+                keycode  27 = +dstroke  +Dstroke        multiplication
+
+                keycode  28 = Return
+        alt     keycode  28 = 0x080d
+
+                keycode  29 = Control
+
+                keycode  30 = a
+                keycode  31 = s
+                keycode  32 = d
+
+                keycode  33 = +f        +F              bracketleft
+        control keycode  33 = Control_f
+        alt     keycode  33 = Meta_f
+
+                keycode  34 = +g        +G              bracketright
+        control keycode  34 = Control_g
+        alt     keycode  34 = Meta_g
+
+                keycode  35 = h
+                keycode  36 = j
+
+                keycode  37 = +k        +K              lstroke
+        control keycode  37 = Control_k
+        alt     keycode  37 = Meta_k
+
+                keycode  38 = +l        +L              Lstroke
+        control keycode  38 = Control_l
+        alt     keycode  38 = Meta_l
+
+                keycode  39 = +ccaron   +Ccaron         backslash
+                keycode  40 = +cacute   +Cacute         ssharp
+
+                keycode  41 = cedilla   diaeresis
+        control keycode  41 = nul
+        alt     keycode  41 = Meta_grave
+
+                keycode  42 = Shift
+                keycode  43 = +zcaron   +Zcaron         currency
+
+                keycode  44 = y
+                keycode  45 = x
+                keycode  46 = c
+
+                keycode  47 = +v        +V              at
+        control keycode  47 = Control_v
+        alt     keycode  47 = Meta_v
+
+                keycode  48 = +b        +B              braceleft
+        control keycode  48 = Control_b
+        alt     keycode  48 = Meta_b
+
+                keycode  49 = +n        +N              braceright
+        control keycode  49 = Control_n
+        alt     keycode  49 = Meta_n
+
+                keycode  50 = +m        +M              section
+        control keycode  50 = Control_m
+        alt     keycode  50 = Meta_m
+
+                keycode  51 = comma     semicolon
+        alt     keycode  51 = Meta_comma
+
+                keycode  52 = period    colon           bar
+        alt     keycode  52 = Meta_period
+
+                keycode  53 = minus     underscore      slash
+        control keycode  53 = Delete
+        alt     keycode  53 = Meta_minus
+shift   control keycode  53 = Control_underscore
+
+                keycode  54 = Shift
+                keycode  56 = Alt
+
+                keycode  57 = space     space
+        control keycode  57 = nul
+        alt     keycode  57 = Meta_space
+
+                keycode  58 = Caps_Lock
+
+                keycode  86 = less             greater
+        alt     keycode  86 = Meta_less
+
+                keycode  97 = Control
diff --git a/keymaps/i386/qwertz/cz-us-qwertz.map b/keymaps/i386/qwertz/cz-us-qwertz.map
new file mode 100644
index 0000000..4bd3a98
--- /dev/null
+++ b/keymaps/i386/qwertz/cz-us-qwertz.map
@@ -0,0 +1,252 @@
+# Czech ISO 8859-2 keyboard map for text console
+# Written and (c) copyright by Jan Kasprzak (kas@ics.muni.cz)
+# You can distribute this file under the terms of GNU General
+# Public License (GPL). See the file COPYING.
+#
+# US klavesnice se zapne a vypne klavesou Pause.
+# Klavesou AltGr (Right Alt) je mozne se prepnout ceske do US a naopak.
+# Klavesa Pause pak funguje jako AltGr-lock.
+#
+# Klavesnice je kompletne cesky psacim stroji.
+#
+# Upravil na QWERTZ + CZ-US "©nek" Stanìk Petr snek@www.alla.sk
+# http://linux-cz.upce.cz
+#
+charset "iso-8859-2"
+keymaps 0-15
+strings as usual
+keycode 1  = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape
+keycode 2  = plus one one exclam VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_one Meta_one Meta_exclam 
+keycode 3  = ecaron two two at nul nul nul nul Meta_two Meta_two Meta_two Meta_two
+keycode 4  = scaron three three numbersign Escape VoidSymbol Escape VoidSymbol Meta_three Meta_three Meta_three Meta_three Meta_three VoidSymbol
+keycode 5  = ccaron four four dollar Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_four Meta_four Meta_four Meta_four
+keycode 6  = rcaron five five percent Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_five Meta_five Meta_five Meta_five
+keycode 7  = zcaron six six asciicircum Control_asciicircum VoidSymbol Control_asciicircum VoidSymbol Meta_six Meta_six Meta_six Meta_six
+keycode 8  = yacute seven seven ampersand Control_underscore VoidSymbol Control_underscore VoidSymbol Meta_seven Meta_seven Meta_seven Meta_seven
+keycode 9  = aacute eight eight asterisk Delete VoidSymbol Delete VoidSymbol Meta_eight Meta_eight Meta_eight Meta_eight
+keycode 10  = iacute nine nine parenleft VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_nine Meta_nine Meta_nine Meta_nine
+keycode 11  = eacute zero zero parenright VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_zero Meta_zero Meta_zero
+keycode 12  = equal percent minus underscore Control_underscore Control_underscore Control_underscore Control_underscore Meta_minus Meta_minus Meta_minus Meta_minus
+keycode 13  = dead_acute dead_circumflex equal plus VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_equal Meta_equal Meta_equal Meta_equal
+keycode 14  = Delete Delete Delete Delete VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Delete Meta_Delete Meta_Delete Meta_Delete
+keycode 15  = Tab Tab Tab Tab VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Tab Meta_Tab Meta_Tab Meta_Tab
+keycode 16  = q
+keycode 17  = w
+keycode 18  = e
+keycode 19  = r
+keycode 20  = t
+keycode 21  = z
+keycode 22  = u
+keycode 23  = i
+keycode 24  = o
+keycode 25  = p
+keycode 26  = uacute slash bracketleft braceleft Escape VoidSymbol Escape VoidSymbol Meta_bracketleft Meta_bracketleft Meta_bracketleft Meta_bracketleft
+keycode 27  = parenright parenleft bracketright braceright Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_bracketright Meta_bracketright Meta_bracketright Meta_bracketright
+keycode 28  = Return
+altgr keycode 28  = Return
+alt keycode 28  = Meta_Control_m
+alt altgr keycode 28  = Meta_Control_m
+keycode 29  = Control
+keycode 30  = a
+keycode 31  = s
+keycode 32  = d
+keycode 33  = f
+keycode 34  = g
+keycode 35  = h
+keycode 36  = j
+keycode 37  = k
+keycode 38  = l
+keycode 39  = uring quotedbl semicolon colon VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_semicolon Meta_semicolon Meta_semicolon Meta_semicolon
+keycode 40  = 0xa7 exclam apostrophe quotedbl Control_g VoidSymbol Control_g VoidSymbol Meta_apostrophe Meta_exclam Meta_apostrophe Meta_apostrophe
+keycode 41  = grave semicolon grave asciitilde nul VoidSymbol nul VoidSymbol Meta_grave VoidSymbol Meta_grave VoidSymbol
+keycode 42  = Shift
+keycode 43  = backslash bar backslash bar Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_backslash VoidSymbol Meta_backslash VoidSymbol
+keycode 44  = y
+keycode 45  = x
+keycode 46  = c
+keycode 47  = v
+keycode 48  = b
+keycode 49  = n
+keycode 50  = m
+keycode 51  = comma question comma less VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_comma Meta_question Meta_comma Meta_less 
+keycode 52  = period colon period greater Compose VoidSymbol Compose VoidSymbol Meta_period VoidSymbol Meta_period Meta_greater
+keycode 53  = minus underscore slash question Delete VoidSymbol Delete VoidSymbol Meta_slash VoidSymbol Meta_slash Meta_question
+keycode 54  = Shift
+keycode 55  = KP_Multiply
+keycode 56  = Alt
+keycode 57  = space space space space nul nul nul nul Meta_space Meta_space Meta_space Meta_space
+keycode 58  = Caps_Lock
+keycode 59  = F1 F13 F1 F13 F1 VoidSymbol F1 VoidSymbol Console_1 VoidSymbol Console_1 VoidSymbol
+keycode 60  = F2 F14 F2 F14 F2 VoidSymbol F2 VoidSymbol Console_2 VoidSymbol Console_2 VoidSymbol
+keycode 61  = F3 F15 F3 F15 F3 VoidSymbol F3 VoidSymbol Console_3 VoidSymbol Console_3 VoidSymbol
+keycode 62  = F4 F15 F4 F16 F4 VoidSymbol F4 VoidSymbol Console_4 VoidSymbol Console_4 VoidSymbol
+keycode 63  = F5 F15 F5 F17 F5 VoidSymbol F5 VoidSymbol Console_5 VoidSymbol Console_5 VoidSymbol
+keycode 64  = F6 F15 F6 F18 F6 VoidSymbol F6 VoidSymbol Console_6 VoidSymbol Console_6 VoidSymbol
+keycode 65  = F7 F15 F7 F19 F7 VoidSymbol F7 VoidSymbol Console_7 VoidSymbol Console_7 VoidSymbol
+keycode 66  = F8 F15 F8 F20 F8 VoidSymbol F8 VoidSymbol Console_8 VoidSymbol Console_8 VoidSymbol
+keycode 67  = F9 F9 F9 F9 F9 VoidSymbol F9 VoidSymbol Console_9 VoidSymbol Console_9 VoidSymbol
+keycode 68  = F10 F10 F10 F10 F10 VoidSymbol F10 VoidSymbol Console_10 VoidSymbol Console_10 VoidSymbol
+keycode 69  = Num_Lock
+keycode 70  = Show_Registers VoidSymbol Scroll_Lock Show_Memory
+control keycode 70  = Show_State
+alt keycode 70  = Scroll_Lock
+keycode 71  = KP_7
+alt keycode 71  = Ascii_7
+keycode 72  = KP_8
+alt keycode 72  = Ascii_8
+keycode 73  = KP_9
+alt keycode 73  = Ascii_9
+keycode 74  = KP_Subtract
+keycode 75  = KP_4
+alt keycode 75  = Ascii_4
+keycode 76  = KP_5
+alt keycode 76  = Ascii_5
+keycode 77  = KP_6
+alt keycode 77  = Ascii_6
+keycode 78  = KP_Add
+keycode 79  = KP_1
+alt keycode 79  = Ascii_1
+keycode 80  = KP_2
+alt keycode 80  = Ascii_2
+keycode 81  = KP_3
+alt keycode 81  = Ascii_3
+keycode 82  = KP_0
+alt keycode 82  = Ascii_0
+keycode 83  = KP_Period
+control alt keycode 83  = Boot
+keycode 84  = Last_Console
+keycode 85 =
+keycode 86  = bar VoidSymbol less greater
+alt keycode 86  = Meta_less
+keycode 87  = F11 F11 F11 F11 F11 VoidSymbol F11 VoidSymbol Console_11 VoidSymbol Console_11 VoidSymbol
+keycode 88  = F12 F12 F12 F12 F12 VoidSymbol F12 VoidSymbol Console_12 VoidSymbol Console_12 VoidSymbol
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96  = KP_Enter
+keycode 97  = Control
+keycode 98  = KP_Divide
+keycode 99  = Control_backslash
+control keycode 99  = Control_backslash
+alt keycode 99  = Control_backslash
+keycode 100  = AltGr
+keycode 101  = Break
+keycode 102  = Find
+keycode 103  = Up
+keycode 104  = Prior
+shift keycode 104  = Scroll_Backward
+keycode 105  = Left
+	alt keycode 105  = Decr_Console
+	alt altgr keycode 105  = Decr_Console
+keycode 106  = Right
+	alt keycode 106  = Incr_Console
+	alt altgr keycode 106  = Incr_Console
+keycode 107  = Select
+keycode 108  = Down
+keycode 109  = Next
+shift keycode 109  = Scroll_Forward
+keycode 110  = Insert
+keycode 111  = Remove
+control alt keycode 111  = Boot
+keycode 112  = Macro
+keycode 113  = F13
+keycode 114  = F14
+keycode 115  = Help
+keycode 116  = Do
+keycode 117  = F17
+keycode 118  = KP_MinPlus
+keycode 119  = AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock
+keycode 120 =
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+compose ',' 'A' to '¡'
+compose '/' 'L' to '£'
+compose '^' 'L' to '¥'
+compose '\'' 'S' to '¦'
+compose '^' 'S' to '©'
+compose ',' 'S' to 'ª'
+compose '^' 'T' to '«'
+compose '\'' 'Z' to '¬'
+compose '^' 'Z' to '®'
+compose '.' 'Z' to '¯'
+compose ',' 'a' to '±'
+compose '/' 'l' to '³'
+compose '^' 'l' to 'µ'
+compose '\'' 's' to '¶'
+compose '^' 's' to '¹'
+compose ',' 's' to 'º'
+compose '^' 't' to '»'
+compose '\'' 'z' to '¼'
+compose '^' 'z' to '¾'
+compose '.' 'z' to '¿'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '^' 'A' to 'Â'
+compose '^' 'A' to 'Ã'
+compose ':' 'A' to 'Ä'
+compose '\'' 'L' to 'Å'
+compose '\'' 'C' to 'Æ'
+compose ',' 'C' to 'Ç'
+compose '^' 'C' to 'È'
+compose '\'' 'E' to 'É'
+compose ',' 'E' to 'Ê'
+compose '"' 'E' to 'Ë'
+compose '^' 'E' to 'Ì'
+compose '\'' 'I' to 'Í'
+compose '^' 'I' to 'Î'
+compose '^' 'D' to 'Ï'
+compose '-' 'D' to 'Ð'
+compose '\'' 'N' to 'Ñ'
+compose '^' 'N' to 'Ò'
+compose '\'' 'O' to 'Ó'
+compose '^' 'O' to 'Ô'
+compose '"' 'O' to 'Õ'
+compose ':' 'O' to 'Ö'
+compose '^' 'R' to 'Ø'
+compose '^' 'U' to 'Ù'
+compose '\'' 'U' to 'Ú'
+compose '"' 'U' to 'Û'
+compose ':' 'U' to 'Ü'
+compose '\'' 'Y' to 'Ý'
+compose ',' 'T' to 'Þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to 'ß'
+compose '\'' 'r' to 'à'
+compose '\'' 'a' to 'á'
+compose '^' 'a' to 'â'
+compose '^' 'a' to 'ã'
+compose ':' 'a' to 'ä'
+compose '\'' 'l' to 'å'
+compose '\'' 'c' to 'æ'
+compose ',' 'c' to 'ç'
+compose '^' 'c' to 'è'
+compose '\'' 'e' to 'é'
+compose ',' 'e' to 'ê'
+compose ':' 'e' to 'ë'
+compose '^' 'e' to 'ì'
+compose '\'' 'i' to 'í'
+compose '^' 'e' to 'î'
+compose '^' 'd' to 'ï'
+compose '-' 'd' to 'ð'
+compose '\'' 'n' to 'ñ'
+compose '^' 'n' to 'ò'
+compose '\'' 'o' to 'ó'
+compose '^' 'o' to 'ô'
+compose ':' 'o' to 'õ'
+compose '"' 'o' to 'ö'
+compose '^' 'r' to 'ø'
+compose '^' 'u' to 'ù'
+compose '\'' 'u' to 'ú'
+compose '"' 'u' to 'û'
+compose ':' 'u' to 'ü'
+compose '\'' 'y' to 'ý'
+compose ',' 't' to 'þ'
diff --git a/keymaps/i386/qwertz/de-latin1-nodeadkeys.map b/keymaps/i386/qwertz/de-latin1-nodeadkeys.map
new file mode 100644
index 0000000..4e76300
--- /dev/null
+++ b/keymaps/i386/qwertz/de-latin1-nodeadkeys.map
@@ -0,0 +1,14 @@
+# de-latin1-nodeadkeys.map: German keymap
+# Due to Olaf Flebbe (flebbe@pluto.tat.physik.uni-tuebingen.de)
+
+include "de-latin1.map"
+
+control keycode   7 = Control_asciicircum
+keycode  13 = apostrophe       grave
+keycode  27 = plus             asterisk         asciitilde
+keycode  41 = asciicircum      degree
+
+# corresponding keys in de-latin1.map:
+# keycode  13 = dead_acute       dead_grave
+# keycode  27 = plus             asterisk         dead_tilde
+# keycode  41 = dead_circumflex  degree
diff --git a/keymaps/i386/qwertz/de-latin1.map b/keymaps/i386/qwertz/de-latin1.map
new file mode 100644
index 0000000..b9a3a67
--- /dev/null
+++ b/keymaps/i386/qwertz/de-latin1.map
@@ -0,0 +1,55 @@
+# de-latin1.map: German keymap
+# (Renamed from gr-latin1.map, since it is not a Greek map.)
+# Some changes due to Olaf Flebbe (flebbe@pluto.tat.physik.uni-tuebingen.de)
+# More changes by Jochen Hein <jochen.hein@delphi.central.de>.
+
+keymaps 0-2,4-6,8-10,12
+alt_is_meta
+include "qwertz-layout"
+	altgr keycode 16 = at
+	altgr keycode 50 = mu
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+#             Normal           Shift            AltGr           Strg
+keycode   1 = Escape           Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl         twosuperior     nul
+keycode   4 = three            section          threesuperior   Escape
+keycode   5 = four             dollar
+keycode   6 = five             percent
+keycode   7 = six              ampersand
+keycode   8 = seven            slash            braceleft
+keycode   9 = eight            parenleft        bracketleft
+keycode  10 = nine             parenright       bracketright
+        control altgr keycode 10 = Control_bracketright
+keycode  11 = zero             equal            braceright
+keycode  12 = ssharp           question         backslash
+        control altgr keycode  12 = Control_backslash
+keycode  13 = dead_acute       dead_grave
+        alt     keycode  13 = Meta_acute
+        shift   alt   keycode  13 = Meta_grave
+keycode  14 = Delete           Delete
+        alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+keycode  26 = +udiaeresis       +Udiaeresis
+keycode  27 = plus             asterisk         dead_tilde
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = +odiaeresis       +Odiaeresis
+keycode  40 = +adiaeresis       +Adiaeresis
+keycode  41 = dead_circumflex   degree   Meta_asciicircum        Control_asciicircum
+keycode  42 = Shift
+keycode  43 = numbersign       apostrophe
+keycode  51 = comma            semicolon
+keycode  52 = period           colon
+keycode  53 = minus            underscore       Meta_minus
+        shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space            Meta_space      nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/de.map b/keymaps/i386/qwertz/de.map
new file mode 100644
index 0000000..524fe06
--- /dev/null
+++ b/keymaps/i386/qwertz/de.map
@@ -0,0 +1,54 @@
+# de.map: German keymap
+# (Renamed from gr.map, since it is not a Greek map.)
+# Some changes due to Olaf Flebbe (flebbe@pluto.tat.physik.uni-tuebingen.de)
+# More changes by Jochen Hein <jochen.hein@delphi.central.de>.
+
+keymaps 0-2,4-6,8-10,12
+alt_is_meta
+include "qwertz-layout"
+	altgr keycode 16 = at
+	altgr keycode 50 = mu
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+#             Normal           Shift            AltGr           Strg
+keycode   1 = Escape           Escape
+keycode   2 = one              exclam
+keycode   3 = two              quotedbl         two             nul
+keycode   4 = three            numbersign       three           Escape
+keycode   5 = four             dollar
+keycode   6 = five             percent
+keycode   7 = six              ampersand
+keycode   8 = seven            slash            braceleft
+keycode   9 = eight            parenleft        bracketleft
+keycode  10 = nine             parenright       bracketright
+        control altgr keycode 10 = Control_bracketright
+keycode  11 = zero             equal            braceright
+keycode  12 = backslash        question
+        control altgr keycode  12 = Control_backslash
+keycode  13 = apostrophe       grave
+keycode  14 = Delete           Delete
+        alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+keycode  26 = at               backslash
+keycode  27 = plus             asterisk         asciitilde
+keycode  28 = Return
+	alt	keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = bracketleft      braceleft
+keycode  40 = bracketright     braceright
+        control shift keycode 40 = Control_bracketright
+keycode  41 = asciicircum      asciitilde      Meta_grave       Control_asciicircum
+keycode  42 = Shift
+keycode  43 = numbersign       apostrophe
+keycode  51 = comma            semicolon
+keycode  52 = period           colon
+keycode  53 = minus            underscore       Meta_minus
+        shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space            Meta_space      nul
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          bar
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/fr_CH-latin1.map b/keymaps/i386/qwertz/fr_CH-latin1.map
new file mode 100644
index 0000000..ca2c8bc
--- /dev/null
+++ b/keymaps/i386/qwertz/fr_CH-latin1.map
@@ -0,0 +1,84 @@
+# This used to be sf-latin1.map
+# Renamed because too many Fins thought this was for them.
+keymaps 0-2,4-6,8,12
+include "qwertz-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              plus
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            asterisk         numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             ccedilla
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand        notsign
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            bar
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        cent
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe       question         dead_acute
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = dead_circumflex  dead_grave       dead_tilde
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = egrave           udiaeresis       bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 = dead_diaeresis   exclam           bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = eacute           odiaeresis
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = agrave           adiaeresis       braceleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = section          degree
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = dollar           sterling         braceright
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/fr_CH.map b/keymaps/i386/qwertz/fr_CH.map
new file mode 100644
index 0000000..a195e2e
--- /dev/null
+++ b/keymaps/i386/qwertz/fr_CH.map
@@ -0,0 +1,89 @@
+# This used to be sf-latin1.map
+# Renamed because too many Fins thought this was for them.
+keymaps 0-2,4-6,8,12
+include "qwertz-layout"
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              plus
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            asterisk         numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            bar
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe       question         apostrophe
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = asciicircum      grave            asciitilde
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 =
+	altgr   keycode  26 = bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 =
+	shift   keycode  27 = exclam
+	altgr   keycode  27 = bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 =
+	alt     keycode  39 = Meta_semicolon
+keycode  40 =
+	altgr   keycode  40 = braceleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 =
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = dollar
+	altgr   keycode  43 = braceright
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/hu.map b/keymaps/i386/qwertz/hu.map
new file mode 100644
index 0000000..c21d229
--- /dev/null
+++ b/keymaps/i386/qwertz/hu.map
@@ -0,0 +1,162 @@
+#
+# The standard Hungarian keymap (iso8859-2)
+#
+# Modified by Soos Peter <sp@osb.hu>, 1997, 1998
+# based on Levárdy Zoltán's <pogacsa@programmer.net> keymap
+#
+# The 1998 change interchanged Backspace and Delete
+#
+charset "iso-8859-2"
+keymaps 0-2,4-6,8,10,12
+alt_is_meta
+include "linux-with-alt-and-altgr"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+		keycode   1 = Escape
+
+		keycode   2 = one              	apostrophe	asciitilde
+
+		keycode   3 = two              	quotedbl	caron
+	control keycode   3 = nul
+
+		keycode   4 = three            	plus		asciicircum
+	control keycode   4 = Escape
+
+		keycode   5 = four             	exclam		breve
+	control keycode   5 = Control_backslash
+
+		keycode   6 = five             	percent		degree
+	control keycode   6 = Control_bracketright
+
+		keycode   7 = six              	slash		ogonek
+	control keycode   7 = Control_asciicircum
+
+		keycode   8 = seven            	equal		grave
+	control keycode   8 = Control_underscore
+
+		keycode   9 = eight            	parenleft       abovedot
+	control keycode   9 = Delete
+
+		keycode  10 = nine              parenright      acute
+
+		keycode  11 = +odiaeresis	+Odiaeresis	doubleacute
+	alt     keycode  11 = Meta_zero
+
+		keycode  12 = +udiaeresis	+Udiaeresis	diaeresis
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+altgr	control	keycode  12 = Control_backslash
+
+		keycode  13 = +oacute		+Oacute		cedilla
+	alt     keycode  13 = Meta_plus
+
+		keycode  14 = Delete
+	control	keycode  14 = BackSpace
+
+		keycode  15 = Tab
+
+		keycode  16 = +q	+Q	backslash
+	control keycode  16 = Control_q
+altgr	control	keycode  16 = Control_backslash
+
+		keycode  17 = +w	+W	bar
+	control keycode  17 = Control_w
+
+		keycode  18 = e
+		keycode  19 = r
+		keycode  20 = t
+		keycode  21 = z
+		keycode  22 = u
+
+		keycode  23 = +i	+I		Iacute
+	control	keycode  23 = Control_i
+
+		keycode  24 = o
+		keycode  25 = p
+
+		keycode  26 = +odoubleacute	+Odoubleacute	division
+
+		keycode  27 = +uacute	+Uacute		multiplication
+
+		keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+
+		keycode  29 = Control
+
+		keycode  30 = a
+
+		keycode  31 = +s	+S		dstroke
+	control	keycode  31 = Control_s
+
+		keycode  32 = +d	+D		Dstroke
+	control	keycode  32 = Control_d
+
+		keycode  33 = +f	+F		bracketleft
+	control keycode  33 = Control_f
+
+		keycode  34 = +g	+G		bracketright
+	control keycode  34 = Control_g
+
+		keycode  35 = h
+
+		keycode  36 = +j	+J		iacute
+	control keycode  36 = Control_j
+
+		keycode  37 = +k	+K		lstroke
+	control keycode  37 = Control_k
+
+		keycode  38 = +l	+L		Lstroke
+	control keycode  38 = Control_l
+
+		keycode  39 = +eacute	+Eacute		dollar
+
+		keycode  40 = +aacute	+Aacute		ssharp
+
+		keycode  41 = zero	section
+	control keycode  41 = nul
+
+		keycode  42 = Shift
+
+		keycode  43 = +udoubleacute	+Udoubleacute	currency
+
+		keycode  44 = +y	+Y		greater
+	control keycode  44 = Control_y
+	
+                keycode  45 = +x        +X		numbersign
+        control keycode  45 = Control_x
+
+		keycode  46 = +c	+C		ampersand
+	control keycode  46 = Control_c
+
+		keycode  47 = +v	+V		at
+	control keycode  47 = Control_v
+
+		keycode  48 = +b	+B		braceleft
+	control keycode  48 = Control_b
+
+		keycode  49 = +n	+N		braceright
+	control keycode  49 = Control_n
+
+		keycode  50 = m
+
+		keycode  51 = comma	question	semicolon
+
+		keycode  52 = period	colon
+
+		keycode  53 = minus	underscore	asterisk
+	control keycode  53 = Delete
+shift	control	keycode  53 = Control_underscore
+
+		keycode  54 = Shift
+		keycode  56 = Alt
+
+		keycode  57 = space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+
+		keycode  58 = Caps_Lock
+
+		keycode  86 = +iacute		+Iacute		less
+
+		keycode  97 = Control
diff --git a/keymaps/i386/qwertz/sg-latin1-lk450.map b/keymaps/i386/qwertz/sg-latin1-lk450.map
new file mode 100644
index 0000000..9b77665
--- /dev/null
+++ b/keymaps/i386/qwertz/sg-latin1-lk450.map
@@ -0,0 +1,80 @@
+keymaps 0-2,4-6,8,12
+include "qwertz-layout"
+include "linux-with-alt-and-altgr"
+	keycode 117 = KP_Add
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              plus
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            asterisk         numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             ccedilla         degree
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent          section
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            bar
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe       question         dead_acute
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = dead_circumflex  dead_grave       dead_tilde
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = udiaeresis       egrave           bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 =   dead_diaeresis exclam           bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = odiaeresis       eacute           braceleft
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = adiaeresis       agrave           braceright
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = less             greater          backslash
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = dollar           sterling
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/sg-latin1.map b/keymaps/i386/qwertz/sg-latin1.map
new file mode 100644
index 0000000..db9930e
--- /dev/null
+++ b/keymaps/i386/qwertz/sg-latin1.map
@@ -0,0 +1,81 @@
+keymaps 0-2,4-6,8,12
+include "qwertz-layout"
+include "linux-with-alt-and-altgr"
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              plus            bar
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            asterisk         numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four             ccedilla
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand        notsign
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            bar
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft        cent
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe       question         dead_acute
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = dead_circumflex  dead_grave       dead_tilde
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 = udiaeresis       egrave           bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 =   dead_diaeresis exclam           bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 = odiaeresis       eacute
+	alt     keycode  39 = Meta_semicolon
+keycode  40 = adiaeresis       agrave           braceleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 = section          degree
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = dollar           sterling         braceright
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/sg.map b/keymaps/i386/qwertz/sg.map
new file mode 100644
index 0000000..c4f108f
--- /dev/null
+++ b/keymaps/i386/qwertz/sg.map
@@ -0,0 +1,87 @@
+keymaps 0-2,4-6,8,12
+include "qwertz-layout"
+include "linux-with-alt-and-altgr.inc"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+keycode   1 = Escape           Escape
+	alt     keycode   1 = Meta_Escape
+keycode   2 = one              plus
+	alt     keycode   2 = Meta_one
+keycode   3 = two              quotedbl         at
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+keycode   4 = three            asterisk         numbersign
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+keycode   5 = four
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+keycode   6 = five             percent
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+keycode   7 = six              ampersand
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+keycode   8 = seven            slash            bar
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+keycode   9 = eight            parenleft
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+keycode  10 = nine             parenright
+	alt     keycode  10 = Meta_nine
+keycode  11 = zero             equal
+	alt     keycode  11 = Meta_zero
+keycode  12 = apostrophe       question         apostrophe
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+keycode  13 = asciicircum      grave            asciitilde
+	alt     keycode  13 = Meta_equal
+keycode  14 = Delete           Delete
+	alt     keycode  14 = Meta_Delete
+keycode  15 = Tab              Tab
+	alt     keycode  15 = Meta_Tab
+keycode  26 =
+	altgr   keycode  26 = bracketleft
+	control keycode  26 = Escape
+	alt     keycode  26 = Meta_bracketleft
+keycode  27 =
+	shift   keycode  27 = exclam
+	altgr   keycode  27 = bracketright
+	control keycode  27 = Control_bracketright
+	alt     keycode  27 = Meta_bracketright
+keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+keycode  29 = Control
+keycode  39 =
+	alt     keycode  39 = Meta_semicolon
+keycode  40 =
+	altgr   keycode  40 = braceleft
+	control keycode  40 = Control_g
+	alt     keycode  40 = Meta_apostrophe
+keycode  41 =
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+keycode  42 = Shift
+keycode  43 = dollar
+	altgr   keycode  43 = braceright
+	control keycode  43 = Control_backslash
+	alt     keycode  43 = Meta_backslash
+keycode  51 = comma            semicolon
+	alt     keycode  51 = Meta_comma
+keycode  52 = period           colon
+	alt     keycode  52 = Meta_period
+keycode  53 = minus            underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+	shift control keycode 53 = Control_underscore
+keycode  54 = Shift
+keycode  56 = Alt
+keycode  57 = space            space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+keycode  58 = Caps_Lock
+keycode  86 = less             greater          backslash
+	alt     keycode  86 = Meta_less
+keycode  97 = Control
diff --git a/keymaps/i386/qwertz/sk-qwertz.map b/keymaps/i386/qwertz/sk-qwertz.map
new file mode 100644
index 0000000..9e0237a
--- /dev/null
+++ b/keymaps/i386/qwertz/sk-qwertz.map
@@ -0,0 +1,258 @@
+# Slovak ISO 8859-2 keyboard map for text console
+# Written and (c) copyright by Jan Kasprzak (kas@ics.muni.cz)
+# You can distribute this file under the terms of GNU General
+# Public License (GPL). See the file COPYING.
+#
+# Funguje jako US-Keyboard, na slovenskou klavesnici se prepne
+# klavesou Pause. Podrzenim klavesy AltGr (= Right Alt) se lze kratkodobe
+# prepnout na slovenskou nebo naopak na US klavesnici. Pause
+# pak funguje jako AltGr-lock.
+#
+# Klavesnice je udelana podle rozlozeni, ktere mi bylo doruceno Petrem
+# Olsakem od pana Stefana Porubskeho. Ja sam slovenskou klavesnici
+# neznam, takze nemohu rucit za korektni rozlozeni klaves.
+#
+# Nemel jsem mnoho prilezitosti tuto klavesnici testovat, takze prosim
+# omluvte pripadne nedostatky.
+#
+charset "iso-8859-2"
+keymaps 0-15
+strings as usual
+keycode 0 =
+keycode 1 = Escape Escape Escape Escape Escape Escape Escape Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape Meta_Escape
+keycode 2 = one exclam plus one VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_one Meta_one Meta_one Meta_one 
+keycode 3 = two at lcaron two nul nul nul nul Meta_two Meta_two Meta_two Meta_two
+keycode 4 = three numbersign scaron three Escape VoidSymbol Escape VoidSymbol Meta_three Meta_three Meta_three Meta_three Meta_three  
+keycode 5 = four dollar ccaron four Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_four Meta_four Meta_four Meta_four  
+keycode 6 = five percent tcaron five Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_five Meta_five Meta_five Meta_five 
+keycode 7 = six asciicircum zcaron six Control_asciicircum VoidSymbol Control_asciicircum VoidSymbol Meta_six Meta_six Meta_six Meta_six  
+keycode 8 = seven ampersand yacute seven Control_underscore  VoidSymbol Control_underscore VoidSymbol Meta_seven Meta_seven Meta_seven Meta_seven  
+keycode 9 = eight asterisk aacute eight Delete VoidSymbol Delete VoidSymbol Meta_eight Meta_eight Meta_eight Meta_eight  
+keycode 10 = nine parenleft iacute nine VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_nine Meta_nine Meta_nine Meta_nine
+keycode 11 = zero parenright eacute zero VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_zero Meta_zero Meta_zero Meta_zero
+keycode 12 = minus underscore equal percent Control_underscore Control_underscore Control_underscore Control_underscore Meta_minus Meta_minus Meta_minus Meta_minus  
+keycode 13 = equal plus dead_acute dead_circumflex VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_equal Meta_equal Meta_equal Meta_equal  
+keycode 14 = Delete Delete Delete Delete VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Delete Meta_Delete Meta_Delete Meta_Delete  
+keycode 15 = Tab Tab Tab Tab VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_Tab Meta_Tab Meta_Tab Meta_Tab  
+keycode 16 = q 
+keycode 17 = w 
+keycode 18 = e
+keycode 19 = r
+keycode 20 = t
+keycode 21 = z
+keycode 22 = u
+keycode 23 = i
+keycode 24 = o
+keycode 25 = p
+keycode 26 = bracketleft braceleft uacute slash Escape VoidSymbol Escape VoidSymbol Meta_bracketleft Meta_bracketleft Meta_bracketleft Meta_bracketleft 
+keycode 27 = bracketright braceright adiaeresis parenleft Control_bracketright VoidSymbol Control_bracketright VoidSymbol Meta_bracketright Meta_bracketright Meta_bracketright Meta_bracketright 
+keycode 28 = Return 
+altgr keycode 28 = Return
+alt keycode 28 = Meta_Control_m
+alt altgr keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a
+keycode 31 = s
+keycode 32 = d
+keycode 33 = f
+keycode 34 = g
+keycode 35 = h
+keycode 36 = j
+keycode 37 = k
+keycode 38 = l
+keycode 39 = semicolon colon ocircumflex quotedbl VoidSymbol VoidSymbol VoidSymbol VoidSymbol Meta_semicolon Meta_semicolon Meta_semicolon Meta_semicolon 
+keycode 40 = apostrophe quotedbl 0xa7 exclam Control_g VoidSymbol Control_g VoidSymbol Meta_apostrophe Meta_apostrophe Meta_apostrophe Meta_apostrophe 
+keycode 41 = grave asciitilde grave semicolon nul VoidSymbol nul VoidSymbol Meta_grave VoidSymbol Meta_grave
+keycode 42 = Shift
+keycode 43 = backslash bar oacute parenright Control_backslash VoidSymbol Control_backslash VoidSymbol Meta_backslash VoidSymbol Meta_backslash
+keycode 44 = y
+keycode 45 = x
+keycode 46 = c
+keycode 47 = v
+keycode 48 = b
+keycode 49 = n
+keycode 50 = m
+keycode 51 = comma less comma question
+alt keycode 51 = Meta_comma
+alt altgr keycode 51 = Meta_comma
+keycode 52 = period greater period colon Compose VoidSymbol Compose VoidSymbol Meta_period VoidSymbol Meta_period
+keycode 53 = slash question minus underscore Delete VoidSymbol Delete VoidSymbol Meta_slash VoidSymbol Meta_slash
+keycode 54 = Shift
+keycode 55 = KP_Multiply
+keycode 56 = Alt
+keycode 57 = space space space space nul nul nul nul Meta_space Meta_space Meta_space Meta_space 
+keycode 58 = Caps_Lock
+keycode 59 = F1 F13 F1 F13 F1 VoidSymbol F1 VoidSymbol Console_1 VoidSymbol Console_1
+keycode 60 = F2 F14 F2 F14 F2 VoidSymbol F2 VoidSymbol Console_2 VoidSymbol Console_2
+keycode 61 = F3 F15 F3 F15 F3 VoidSymbol F3 VoidSymbol Console_3 VoidSymbol Console_3
+keycode 62 = F4 F16 F4 F15 F4 VoidSymbol F4 VoidSymbol Console_4 VoidSymbol Console_4
+keycode 63 = F5 F17 F5 F15 F5 VoidSymbol F5 VoidSymbol Console_5 VoidSymbol Console_5
+keycode 64 = F6 F18 F6 F15 F6 VoidSymbol F6 VoidSymbol Console_6 VoidSymbol Console_6
+keycode 65 = F7 F19 F7 F15 F7 VoidSymbol F7 VoidSymbol Console_7 VoidSymbol Console_7
+keycode 66 = F8 F20 F8 F15 F8 VoidSymbol F8 VoidSymbol Console_8 VoidSymbol Console_8
+keycode 67 = F9 F9 F9 F9 F9 VoidSymbol F9 VoidSymbol Console_9 VoidSymbol Console_9
+keycode 68 = F10 F10 F10 F10 F10 VoidSymbol F10 VoidSymbol Console_10 VoidSymbol Console_10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock Show_Memory Show_Registers
+control keycode 70 = Show_State
+alt keycode 70 = Scroll_Lock
+keycode 71 = KP_7
+alt keycode 71 = Ascii_7
+keycode 72 = KP_8
+alt keycode 72 = Ascii_8
+keycode 73 = KP_9
+alt keycode 73 = Ascii_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_4
+alt keycode 75 = Ascii_4
+keycode 76 = KP_5
+alt keycode 76 = Ascii_5
+keycode 77 = KP_6
+alt keycode 77 = Ascii_6
+keycode 78 = KP_Add
+keycode 79 = KP_1
+alt keycode 79 = Ascii_1
+keycode 80 = KP_2
+alt keycode 80 = Ascii_2
+keycode 81 = KP_3
+alt keycode 81 = Ascii_3
+keycode 82 = KP_0
+alt keycode 82 = Ascii_0
+keycode 83 = KP_Period
+control alt keycode 83 = Boot
+keycode 84 = Last_Console
+keycode 85 =
+keycode 86 = less greater bar
+alt keycode 86 = Meta_less
+keycode 87 = F11 F11 F11 F11 F11 VoidSymbol F11 VoidSymbol Console_11 VoidSymbol Console_11
+keycode 88 = F12 F12 F12 F12 F12 VoidSymbol F12 VoidSymbol Console_12 VoidSymbol Console_12
+keycode 89 =
+keycode 90 =
+keycode 91 =
+keycode 92 =
+keycode 93 =
+keycode 94 =
+keycode 95 =
+keycode 96 = KP_Enter
+keycode 97 = Control
+keycode 98 = KP_Divide
+keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
+alt keycode 99 = Control_backslash
+keycode 100 = AltGr
+keycode 101 = Break
+keycode 102 = Find
+keycode 103 = Up
+keycode 104 = Prior
+shift keycode 104 = Scroll_Backward
+keycode 105 = Left
+	alt keycode 105 = Decr_Console
+	alt altgr keycode 105 = Decr_Console
+keycode 106 = Right
+	alt keycode 106 = Incr_Console
+	alt altgr keycode 106 = Incr_Console
+keycode 107 = Select
+keycode 108 = Down
+keycode 109 = Next
+shift keycode 109 = Scroll_Forward
+keycode 110 = Insert
+keycode 111 = Remove
+control alt keycode 111 = Boot
+keycode 112 = Macro
+keycode 113 = F13
+keycode 114 = F14
+keycode 115 = Help
+keycode 116 = Do
+keycode 117 = F17
+keycode 118 = KP_MinPlus
+keycode 119 = AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock AltGr_Lock
+keycode 120 = 
+keycode 121 =
+keycode 122 =
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+compose ',' 'A' to '¡'
+compose '/' 'L' to '£'
+compose '^' 'L' to '¥'
+compose '^' 'A' to 'Ä'
+compose '^' 'a' to 'ä'
+compose '\'' 'S' to '¦'
+compose '^' 'S' to '©'
+compose ',' 'S' to 'ª'
+compose '^' 'T' to '«'
+compose '\'' 'Z' to '¬'
+compose '^' 'Z' to '®'
+compose '.' 'Z' to '¯'
+compose ',' 'a' to '±'
+compose '/' 'l' to '³'
+compose '^' 'l' to 'µ'
+compose '\'' 's' to '¶'
+compose '^' 's' to '¹'
+compose ',' 's' to 'º'
+compose '^' 't' to '»'
+compose '\'' 'z' to '¼'
+compose '^' 'z' to '¾'
+compose '.' 'z' to '¿'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '^' 'A' to 'Â'
+compose '^' 'A' to 'Ã'
+compose '\'' 'L' to 'Å'
+compose '\'' 'C' to 'Æ'
+compose ',' 'C' to 'Ç'
+compose '^' 'C' to 'È'
+compose '\'' 'E' to 'É'
+compose ',' 'E' to 'Ê'
+compose '"' 'E' to 'Ë'
+compose '^' 'E' to 'Ì'
+compose '\'' 'I' to 'Í'
+compose '^' 'I' to 'Î'
+compose '^' 'D' to 'Ï'
+compose '-' 'D' to 'Ð'
+compose '\'' 'N' to 'Ñ'
+compose '^' 'N' to 'Ò'
+compose '\'' 'O' to 'Ó'
+compose '^' 'O' to 'Ô'
+compose '"' 'O' to 'Õ'
+compose ':' 'O' to 'Ö'
+compose '^' 'R' to 'Ø'
+compose '^' 'U' to 'Ù'
+compose '\'' 'U' to 'Ú'
+compose '"' 'U' to 'Û'
+compose ':' 'U' to 'Ü'
+compose '\'' 'Y' to 'Ý'
+compose ',' 'T' to 'Þ'
+compose 's' 's' to 'ß'
+compose 'S' 'S' to 'ß'
+compose '\'' 'r' to 'à'
+compose '\'' 'a' to 'á'
+compose '^' 'a' to 'â'
+compose '^' 'a' to 'ã'
+compose '\'' 'l' to 'å'
+compose '\'' 'c' to 'æ'
+compose ',' 'c' to 'ç'
+compose '^' 'c' to 'è'
+compose '\'' 'e' to 'é'
+compose ',' 'e' to 'ê'
+compose ':' 'e' to 'ë'
+compose '^' 'e' to 'ì'
+compose '\'' 'i' to 'í'
+compose '^' 'e' to 'î'
+compose '^' 'd' to 'ï'
+compose '-' 'd' to 'ð'
+compose '\'' 'n' to 'ñ'
+compose '^' 'n' to 'ò'
+compose '\'' 'o' to 'ó'
+compose '^' 'o' to 'ô'
+compose ':' 'o' to 'õ'
+compose '"' 'o' to 'ö'
+compose '^' 'r' to 'ø'
+compose '^' 'u' to 'ù'
+compose '\'' 'u' to 'ú'
+compose '"' 'u' to 'û'
+compose ':' 'u' to 'ü'
+compose '\'' 'y' to 'ý'
+compose ',' 't' to 'þ'
diff --git a/keymaps/i386/qwertz/slovene.map b/keymaps/i386/qwertz/slovene.map
new file mode 100644
index 0000000..904a36e
--- /dev/null
+++ b/keymaps/i386/qwertz/slovene.map
@@ -0,0 +1,122 @@
+# From: Primoz Peterlin <peterlin@biofiz.mf.uni-lj.si>
+# Date: Tue, 10 Jan 95 22:22:55 MET
+#
+# Following is the Slovene keytable.  You are free to include it
+# with the next release of kbd.  BTW:  Pavel Zaboj's ISO 8859-2
+# fonts have misplaced Rcaron at 0xEB in place of ediaeresis
+# (actually, I have only checked lat2-16).
+#
+charset "iso-8859-2"
+keymaps 0-2,4-6,8,10,12
+include "qwertz-layout"
+	altgr keycode 16 = backslash
+	altgr keycode 17 = bar
+	altgr keycode 33 = bracketleft
+	altgr keycode 34 = bracketright
+	altgr keycode 37 = lstroke
+	altgr keycode 38 = Lstroke
+	altgr keycode 47 = at
+	altgr keycode 48 = braceleft
+	altgr keycode 49 = braceright
+	altgr keycode 50 = section
+include "linux-with-alt-and-altgr.inc"
+	plain keycode  83 = KP_Comma
+strings as usual
+
+		keycode   1 = Escape
+	alt     keycode   1 = Meta_Escape
+
+		keycode   2 = one              	exclam		asciitilde
+	alt     keycode   2 = Meta_one
+
+		keycode   3 = two              	quotedbl	caron
+	control keycode   3 = nul
+	alt     keycode   3 = Meta_two
+
+		keycode   4 = three            	numbersign	asciicircum
+	control keycode   4 = Escape
+	alt     keycode   4 = Meta_three
+
+		keycode   5 = four             	dollar		breve
+	control keycode   5 = Control_backslash
+	alt     keycode   5 = Meta_four
+
+		keycode   6 = five             	percent		degree
+	control keycode   6 = Control_bracketright
+	alt     keycode   6 = Meta_five
+
+		keycode   7 = six              	ampersand	ogonek
+	control keycode   7 = Control_asciicircum
+	alt     keycode   7 = Meta_six
+
+		keycode   8 = seven            	slash           grave
+	control keycode   8 = Control_underscore
+	alt     keycode   8 = Meta_seven
+
+		keycode   9 = eight            	parenleft       abovedot
+	control keycode   9 = Delete
+	alt     keycode   9 = Meta_eight
+
+		keycode  10 = nine              parenright      acute
+	alt     keycode  10 = Meta_nine
+
+		keycode  11 = zero              equal           doubleacute
+	alt     keycode  11 = Meta_zero
+
+		keycode  12 = apostrophe	question        diaeresis
+	control keycode  12 = Control_underscore
+	alt     keycode  12 = Meta_minus
+control altgr	keycode  12 = Control_backslash
+
+		keycode  13 = plus		asterisk	cedilla
+	alt     keycode  13 = Meta_plus
+
+		keycode  14 = Delete		Delete
+	control keycode  14 = Control_backslash			# emacs UNDO
+	alt     keycode  14 = Meta_Delete
+
+		keycode  15 = Tab
+	alt     keycode  15 = Meta_Tab
+
+		keycode  26 = +scaron	+Scaron		division
+		keycode  27 = +dstroke	+Dstroke	multiplication
+
+		keycode  28 = Return
+	alt     keycode  28 = Meta_Control_m
+
+		keycode  29 = Control
+
+		keycode  39 = +ccaron	+Ccaron
+		keycode  40 = +cacute	+Cacute		ssharp
+
+		keycode  41 = cedilla	diaeresis
+	control keycode  41 = nul
+	alt     keycode  41 = Meta_grave
+
+		keycode  42 = Shift
+		keycode  43 = +zcaron	+Zcaron		currency
+
+		keycode  51 = comma	semicolon
+	alt     keycode  51 = Meta_comma
+
+		keycode  52 = period	colon
+	alt     keycode  52 = Meta_period
+
+		keycode  53 = minus	underscore
+	control keycode  53 = Delete
+	alt     keycode  53 = Meta_slash
+shift	control	keycode  53 = Control_underscore
+
+		keycode  54 = Shift
+		keycode  56 = Alt
+
+		keycode  57 = space	space
+	control keycode  57 = nul
+	alt     keycode  57 = Meta_space
+
+		keycode  58 = Caps_Lock
+
+		keycode  86 = less             greater
+	alt     keycode  86 = Meta_less
+
+		keycode  97 = Control
diff --git a/keymaps/include/compose.8859_7 b/keymaps/include/compose.8859_7
new file mode 100644
index 0000000..bcb3db0
--- /dev/null
+++ b/keymaps/include/compose.8859_7
@@ -0,0 +1,24 @@
+# tonos and dialitika
+compose '^' 'é' to 'À'
+compose '^' 'õ' to 'à'
+# tonos
+compose '\'' 'Á' to '¶'
+compose '\'' 'Å' to '¸'
+compose '\'' 'Ç' to '¹'
+compose '\'' 'É' to 'º'
+compose '\'' 'Ï' to '¼'
+compose '\'' 'Ù' to '¿'
+compose '\'' 'Õ' to '¾'
+compose '\'' 'á' to 'Ü'
+compose '\'' 'å' to 'Ý'
+compose '\'' 'ç' to 'Þ'
+compose '\'' 'é' to 'ß'
+compose '\'' 'ï' to 'ü'
+compose '\'' 'õ' to 'ý'
+compose '\'' 'ù' to 'þ'
+# dialitika
+compose '"' 'É' to 'Ú'
+compose '"' 'Õ' to 'Û'
+compose '"' 'é' to 'ú'
+compose '"' 'õ' to 'û'
+
diff --git a/keymaps/include/compose.8859_8 b/keymaps/include/compose.8859_8
new file mode 100644
index 0000000..3ac8f7a
--- /dev/null
+++ b/keymaps/include/compose.8859_8
@@ -0,0 +1 @@
+compose 'c' 'h' to 'ç'
diff --git a/keymaps/include/compose.latin b/keymaps/include/compose.latin
new file mode 100644
index 0000000..9ea95aa
--- /dev/null
+++ b/keymaps/include/compose.latin
@@ -0,0 +1,255 @@
+# Those compose lines can be shared between latin1, 2 and 3. They give good
+# results.
+compose '!' '!' to '¡'
+compose '"' 'A' to 'Ä'
+compose '"' 'E' to 'Ë'
+compose '"' 'I' to 'Ï'
+compose '"' 'O' to 'Ö'
+compose '"' 'U' to 'Ü'
+compose '"' 'Y' to '¾'
+compose '"' 'a' to 'ä'
+compose '"' 'c' to '©'
+compose '"' 'e' to 'ë'
+compose '"' 'i' to 'ï'
+compose '"' 'o' to 'ö'
+compose '"' 'r' to '®'
+compose '"' 'u' to 'ü'
+compose '"' 'y' to 'ÿ'
+compose '(' 'c' to '©'
+compose '(' 'r' to '®'
+compose '+' '-' to '±'
+compose ',' 'A' to '¡'
+compose ',' 'C' to 'Ç'
+compose ',' 'E' to 'Ê'
+compose ',' 'G' to '«'
+compose ',' 'I' to 'Ç'
+compose ',' 'K' to 'Ó'
+compose ',' 'L' to '¦'
+compose ',' 'N' to 'Ñ'
+compose ',' 'R' to '£'
+compose ',' 'S' to 'ª'
+compose ',' 'T' to 'Þ'
+compose ',' 'U' to 'Ù'
+compose ',' 'a' to '±'
+compose ',' 'c' to 'ç'
+compose ',' 'e' to 'ê'
+compose ',' 'g' to '»'
+compose ',' 'i' to 'ç'
+compose ',' 'k' to 'ó'
+compose ',' 'l' to '¶'
+compose ',' 'n' to 'ñ'
+compose ',' 'r' to '³'
+compose ',' 's' to 'º'
+compose ',' 't' to 'þ'
+compose ',' 'u' to 'ù'
+compose '-' ':' to '÷'
+compose '-' 'A' to 'ª'
+compose '-' 'C' to '¢'
+compose '-' 'D' to 'Ð'
+compose '-' 'E' to '¤'
+compose '-' 'H' to '¡'
+compose '-' 'L' to '£'
+compose '-' 'O' to 'º'
+compose '-' 'T' to '¬'
+compose '-' 'Y' to '¥'
+compose '-' 'a' to 'ª'
+compose '-' 'c' to '¢'
+compose '-' 'd' to 'ð'
+compose '-' 'e' to '¤'
+compose '-' 'h' to '±'
+compose '-' 'l' to '£'
+compose '-' 'l' to '¥'
+compose '-' 'l' to '³'
+compose '-' 'o' to 'º'
+compose '-' 't' to '¼'
+compose '.' '.' to '·'
+compose '.' 'C' to 'Å'
+compose '.' 'C' to 'Õ'
+compose '.' 'E' to 'Ì'
+compose '.' 'I' to '©'
+compose '.' 'Z' to '¯'
+compose '.' 'c' to 'å'
+compose '.' 'c' to 'õ'
+compose '.' 'e' to 'ì'
+compose '.' 'i' to '¹'
+compose '.' 'z' to '¿'
+compose '/' 'D' to 'Ð'
+compose '/' 'L' to '£'
+compose '/' 'O' to 'Ø'
+compose '/' 'T' to '¬'
+compose '/' 'c' to '¢'
+compose '/' 'd' to 'ð'
+compose '/' 'l' to '³'
+compose '/' 'o' to 'ø'
+compose '/' 't' to '¼'
+compose '0' 'A' to 'Å'
+compose '0' 'U' to 'Ù'
+compose '0' 'a' to 'å'
+compose '0' 'u' to 'ù'
+compose '1' '2' to '½'
+compose '1' '4' to '¼'
+compose '3' '4' to '¾'
+compose ':' '-' to '÷'
+compose ':' 'A' to 'Ä'
+compose ':' 'E' to 'Ë'
+compose ':' 'O' to 'Ö'
+compose ':' 'U' to 'Ü'
+compose ':' 'a' to 'ä'
+compose ':' 'e' to 'ë'
+compose ':' 'o' to 'ö'
+compose ':' 'u' to 'ü'
+compose '<' '<' to '«'
+compose '>' '>' to '»'
+compose '?' '?' to '¿'
+compose 'A' 'A' to 'Å'
+compose 'A' 'E' to 'Æ'
+compose 'I' 'J' to '¾'
+compose 'L' '=' to '£'
+compose 'N' 'G' to '½'
+compose 'N' 'H' to 'Ñ'
+compose 'N' 'N' to 'Ñ'
+compose 'N' 'Y' to 'Ñ'
+compose 'N' 'h' to 'Ñ'
+compose 'N' 'n' to 'Ñ'
+compose 'N' 'y' to 'Ñ'
+compose 'O' 'A' to 'Å'
+compose 'O' 'E' to '¼'
+compose 'O' 'e' to '¼'
+compose 'T' 'H' to 'Þ'
+compose 'U' 'U' to 'Ù'
+compose 'Y' '=' to '¥'
+compose '\'' 'A' to 'Á'
+compose '\'' 'C' to 'Æ'
+compose '\'' 'E' to 'É'
+compose '\'' 'I' to 'Í'
+compose '\'' 'L' to 'Å'
+compose '\'' 'N' to 'Ñ'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'R' to 'À'
+compose '\'' 'S' to '¦'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'Z' to '¬'
+compose '\'' 'a' to 'á'
+compose '\'' 'c' to 'æ'
+compose '\'' 'e' to 'é'
+compose '\'' 'i' to 'í'
+compose '\'' 'l' to 'å'
+compose '\'' 'n' to 'ñ'
+compose '\'' 'o' to 'ó'
+compose '\'' 'r' to 'à'
+compose '\'' 's' to '¶'
+compose '\'' 'u' to 'ú'
+compose '\'' 'y' to 'ý'
+compose '\'' 'z' to '¼'
+compose '^' '!' to '¡'
+compose '^' '*' to '×'
+compose '^' '.' to '·'
+compose '^' '/' to '÷'
+compose '^' '1' to '¹'
+compose '^' '2' to '²'
+compose '^' '3' to '³'
+compose '^' ':' to '÷'
+compose '^' '?' to '¿'
+compose '^' 'A' to 'Â'
+#compose '^' 'C' to 'Æ'
+compose '^' 'C' to 'Ç'
+#compose '^' 'C' to 'È'
+#compose '^' 'D' to 'Ï'
+compose '^' 'D' to 'Ð'
+compose '^' 'E' to 'Ê'
+#compose '^' 'E' to 'Ì'
+compose '^' 'G' to 'Ô'
+compose '^' 'H' to '¦'
+compose '^' 'I' to 'Î'
+compose '^' 'J' to '¬'
+compose '^' 'L' to '¥'
+compose '^' 'N' to 'Ñ'
+#compose '^' 'N' to 'Ò'
+#compose '^' 'O' to 'Ô'
+#compose '^' 'O' to 'Ø'
+compose '^' 'R' to 'Ø'
+compose '^' 'S' to '¦'
+#compose '^' 'S' to '©'
+#compose '^' 'S' to 'Þ'
+compose '^' 'T' to '«'
+compose '^' 'U' to 'Û'
+#compose '^' 'Z' to '®'
+compose '^' 'Z' to '´'
+compose '^' 'a' to 'â'
+#compose '^' 'c' to 'æ'
+compose '^' 'c' to 'ç'
+#compose '^' 'c' to 'è'
+#compose '^' 'd' to 'ï'
+compose '^' 'd' to 'ð'
+compose '^' 'e' to 'ê'
+#compose '^' 'e' to 'ì'
+compose '^' 'g' to 'ø'
+compose '^' 'h' to '¶'
+compose '^' 'i' to 'î'
+compose '^' 'j' to '¼'
+compose '^' 'l' to 'µ'
+compose '^' 'n' to 'ñ'
+#compose '^' 'n' to 'ò'
+compose '^' 'o' to 'ô'
+compose '^' 'r' to 'ø'
+compose '^' 's' to '¨'
+#compose '^' 's' to '¹'
+#compose '^' 's' to 'þ'
+compose '^' 't' to '»'
+compose '^' 'u' to 'û'
+compose '^' 'x' to '×'
+compose '^' 'z' to '¸'
+#compose '^' 'z' to '¾'
+compose '`' 'A' to 'À'
+#compose '`' 'E' to 'ª'
+compose '`' 'E' to 'È'
+compose '`' 'I' to 'Ì'
+#compose '`' 'I' to 'Ï'
+compose '`' 'O' to 'Ò'
+compose '`' 'U' to 'Ù'
+#compose '`' 'U' to 'Þ'
+compose '`' 'a' to 'à'
+#compose '`' 'e' to 'º'
+compose '`' 'e' to 'è'
+compose '`' 'i' to 'ì'
+#compose '`' 'i' to 'ï'
+compose '`' 'o' to 'ò'
+#compose '`' 'u' to 'ò'
+compose '`' 'u' to 'ù'
+#compose '`' 'u' to 'þ'
+compose 'a' 'a' to 'å'
+compose 'a' 'e' to 'æ'
+compose 'c' '/' to '¢'
+compose 'c' '=' to '¢'
+compose 'e' '=' to '¤'
+compose 'i' 'j' to 'ÿ'
+compose 'm' 'u' to 'µ'
+compose 'n' 'g' to '¿'
+compose 'n' 'h' to 'ñ'
+compose 'n' 'n' to 'ñ'
+compose 'o' 'a' to 'å'
+compose 'o' 'e' to '½'
+compose 's' 's' to 'ß'
+compose 's' 'z' to 'ß'
+compose 't' 'h' to 'þ'
+compose 'u' 'u' to 'ù'
+compose 'v' 'S' to '¦'
+compose 'v' 'Z' to '´'
+compose 'v' 's' to '¨'
+compose 'v' 'z' to '¸'
+compose 'x' 'x' to '×'
+compose '~' 'A' to 'Ã'
+compose '~' 'G' to '«'
+compose '~' 'I' to '¥'
+compose '~' 'N' to 'Ñ'
+compose '~' 'O' to 'Õ'
+#compose '~' 'U' to 'Û'
+compose '~' 'U' to 'Ý'
+compose '~' 'a' to 'ã'
+compose '~' 'g' to '»'
+compose '~' 'i' to 'µ'
+compose '~' 'n' to 'ñ'
+compose '~' 'o' to 'õ'
+#compose '~' 'u' to 'û'
+compose '~' 'u' to 'ý'
diff --git a/keymaps/include/compose.latin1 b/keymaps/include/compose.latin1
new file mode 100644
index 0000000..e58733b
--- /dev/null
+++ b/keymaps/include/compose.latin1
@@ -0,0 +1,161 @@
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose '-' 'a' to 'ª'
+compose '-' 'A' to 'ª'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose '°' 'A' to 'Å'
+compose '°' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '^' 'C' to 'Ç'
+compose '^' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '^' 'D' to 'Ð'
+compose '^' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '^' 'N' to 'Ñ'
+compose '^' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '-' 'o' to 'º'
+compose '-' 'O' to 'º'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose '"' 'y' to 'ÿ'
+compose 's' 'z' to 'ß'
+compose 'n' 'n' to 'ñ'
+compose 'n' 'h' to 'ñ'
+compose 'N' 'Y' to 'Ñ'
+compose 'N' 'N' to 'Ñ'
+compose 'N' 'H' to 'Ñ'
+compose 'N' 'y' to 'Ñ'
+compose 'N' 'n' to 'Ñ'
+compose 'N' 'h' to 'Ñ'
+compose '-' 'L' to '£'
+compose '<' '<' to '«'
+compose '>' '>' to '»'
+compose '?' '?' to '¿'
+compose '^' '?' to '¿'
+compose '!' '!' to '¡'
+compose '^' '!' to '¡'
+compose '^' '1' to '¹'
+compose '^' '2' to '²'
+compose '^' '3' to '³'
+compose '+' '-' to '±'
+compose 'c' '=' to '¢'
+compose 'c' '/' to '¢'
+compose '/' 'c' to '¢'
+compose '-' 'c' to '¢'
+compose '-' 'C' to '¢'
+compose 'L' '=' to '£'
+compose '-' 'L' to '£'
+compose '-' 'l' to '£'
+compose '^' '*' to '×'
+compose '^' 'x' to '×'
+compose 'x' 'x' to '×'
+compose '^' '.' to '·'
+compose '.' '.' to '·'
+compose '^' '/' to '÷'
+compose '^' ':' to '÷'
+compose '-' ':' to '÷'
+compose ':' '-' to '÷'
+# ¤
+compose 'Y' '=' to '¥'
+compose '-' 'Y' to '¥'
+compose '-' 'l' to '¥'
+# ¦§¨
+compose '(' 'c' to '©'
+compose '"' 'c' to '©'
+compose '-' 'a' to 'ª'
+compose '-' 'A' to 'ª'
+compose '-' 'o' to 'º'
+compose '-' 'O' to 'º'
+# ¬­
+compose '(' 'r' to '®'
+compose '"' 'r' to '®'
+# ¯°´
+compose 'm' 'u' to 'µ'
+# ¶·
+# conflict whith iso-8859-15
+#compose ',' ',' to '¸'
+#compose ',' ' ' to '¸'
+compose '1' '4' to '¼'
+compose '1' '2' to '½'
+compose '3' '4' to '¾'
+# iso-8859-15
+# euro
+compose 'e' '=' to '¤'
+compose '-' 'e' to '¤'
+compose '-' 'E' to '¤'
+# S< s< Z< z<
+compose 'v' 'S' to '¦'
+compose '^' 'S' to '¦'
+compose 'v' 's' to '¨'
+compose '^' 's' to '¨'
+compose 'v' 'Z' to '´'
+compose '^' 'Z' to '´'
+compose 'v' 'z' to '¸'
+compose '^' 'z' to '¸'
+# OE oe Y:
+compose 'O' 'E' to '¼'
+compose 'O' 'e' to '¼'
+compose 'o' 'e' to '½'
+compose '"' 'Y' to '¾'
+# those are in fact wrong
+# the symbols are LATIN Y WHITH DIAERESIS and not LATIN LIGATURE IJ
+compose 'i' 'j' to 'ÿ'
+compose 'I' 'J' to '¾'
diff --git a/keymaps/include/compose.latin2 b/keymaps/include/compose.latin2
new file mode 100644
index 0000000..1fd2e6b
--- /dev/null
+++ b/keymaps/include/compose.latin2
@@ -0,0 +1,146 @@
+# as dead_ogonek, dead_caron, dead_breve and dead_doubleacute doesn't exist
+# (yet), I put also compose lines for use with respectively dead_cedilla,
+# dead_circumflex, dead_tilde and dead_tilde
+compose '²' 'A' to '¡'
+compose '²' 'a' to '±'
+compose '²' 'e' to 'ê'
+compose '²' 'E' to 'Ê'
+compose ',' 'A' to '¡'
+compose ',' 'a' to '±'
+compose ',' 'e' to 'ê'
+compose ',' 'E' to 'Ê'
+compose ',' 'S' to 'ª'
+compose ',' 's' to 'º'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose ',' 'T' to 'Þ'
+compose ',' 't' to 'þ'
+compose '¢' 'a' to 'ã'
+compose '¢' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '~' 'A' to 'Ã'
+compose '-' 'l' to '³'
+compose '-' 'L' to '£'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '/' 'l' to '³'
+compose '/' 'L' to '£'
+compose '/' 'D' to 'Ð'
+compose '/' 'd' to 'ð'
+compose '\'' 's' to '¶'
+compose '\'' 'S' to '¦'
+compose '\'' 'z' to '¼'
+compose '\'' 'Z' to '¬'
+compose '\'' 'r' to 'à'
+compose '\'' 'R' to 'À'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '\'' 'l' to 'å'
+compose '\'' 'L' to 'Å'
+compose '\'' 'c' to 'æ'
+compose '\'' 'C' to 'Æ'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '\'' 'n' to 'ñ'
+compose '\'' 'N' to 'Ñ'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose '"' 'a' to 'ä'
+compose '"' 'A' to 'Ä'
+compose '"' 'e' to 'ë'
+compose '"' 'E' to 'Ë'
+compose '"' 'o' to 'ö'
+compose '"' 'O' to 'Ö'
+compose '"' 'u' to 'ü'
+compose '"' 'U' to 'Ü'
+compose '·' 'l' to 'µ'
+compose '·' 'L' to '¥'
+compose '·' 'S' to '©'
+compose '·' 's' to '¹'
+compose '·' 'T' to '«'
+compose '·' 't' to '»'
+compose '·' 'Z' to '®'
+compose '·' 'z' to '¾'
+compose '·' 'C' to 'È'
+compose '·' 'c' to 'è'
+compose '·' 'e' to 'ì'
+compose '·' 'E' to 'Ì'
+compose '·' 'D' to 'Ï'
+compose '·' 'd' to 'ï'
+compose '·' 'N' to 'Ò'
+compose '·' 'n' to 'ò'
+compose '·' 'R' to 'Ø'
+compose '·' 'r' to 'ø'
+compose 'ÿ' 'Z' to '¯'
+compose 'ÿ' 'z' to '¿'
+compose '.' 'Z' to '¯'
+compose '.' 'z' to '¿'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '^' 'l' to 'µ'
+compose '^' 'L' to '¥'
+compose '^' 'S' to '©'
+compose '^' 's' to '¹'
+compose '^' 'T' to '«'
+compose '^' 't' to '»'
+compose '^' 'Z' to '®'
+compose '^' 'z' to '¾'
+compose '^' 'C' to 'È'
+compose '^' 'c' to 'è'
+compose '^' 'e' to 'ì'
+compose '^' 'E' to 'Ì'
+compose '^' 'D' to 'Ï'
+compose '^' 'd' to 'ï'
+compose '^' 'N' to 'Ò'
+compose '^' 'n' to 'ò'
+compose '^' 'R' to 'Ø'
+compose '^' 'r' to 'ø'
+compose '½' 'O' to 'Õ'
+compose '½' 'o' to 'õ'
+compose '½' 'U' to 'Û'
+compose '½' 'u' to 'û'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '~' 'U' to 'Û'
+compose '~' 'u' to 'û'
+compose 's' 's' to 'ß'
+compose 's' 'z' to 'ß'
+compose '-' 'L' to '£'
+compose '-' 'l' to '³'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '°' 'U' to 'Ù'
+compose '°' 'u' to 'ù'
+compose '0' 'U' to 'Ù'
+compose '0' 'u' to 'ù'
+compose 'U' 'U' to 'Ù'
+compose 'u' 'u' to 'ù'
+compose ':' 'A' to 'Ä'
+compose ':' 'E' to 'Ë'
+compose ':' 'O' to 'Ö'
+compose ':' 'U' to 'Ü'
+compose ':' 'a' to 'ä'
+compose ':' 'e' to 'ë'
+compose ':' 'o' to 'ö'
+compose ':' 'u' to 'ü'
+#
+compose '^' '*' to '×'
+compose '^' 'x' to '×'
+compose 'x' 'x' to '×'
+compose '^' '.' to '·'
+compose '.' '.' to '·'
+compose '^' '/' to '÷'
+compose '^' ':' to '÷'
+compose '-' ':' to '÷'
+compose ':' '-' to '÷'
+
diff --git a/keymaps/include/compose.latin3 b/keymaps/include/compose.latin3
new file mode 100644
index 0000000..34a92d3
--- /dev/null
+++ b/keymaps/include/compose.latin3
@@ -0,0 +1,90 @@
+compose '-' 'H' to '¡'
+compose '-' 'h' to '±'
+compose '^' 'h' to '¶'
+compose '^' 'H' to '¦'
+compose '^' 'j' to '¼'
+compose '^' 'J' to '¬'
+compose '^' 'a' to 'â'
+compose '^' 'A' to 'Â'
+compose '^' 'c' to 'æ'
+compose '^' 'C' to 'Æ'
+compose '^' 'e' to 'ê'
+compose '^' 'E' to 'Ê'
+compose '^' 'o' to 'ô'
+compose '^' 'O' to 'Ø'
+compose '^' 'g' to 'ø'
+compose '^' 'G' to 'Ô'
+compose '^' 'u' to 'û'
+compose '^' 'U' to 'Û'
+compose '^' 'S' to 'Þ'
+compose '^' 's' to 'þ'
+compose 'ÿ' 'i' to '¹'
+compose 'ÿ' 'I' to '©'
+compose 'ÿ' 'c' to 'å'
+compose 'ÿ' 'C' to 'Å'
+compose 'ÿ' 'c' to 'õ'
+compose 'ÿ' 'C' to 'Õ'
+compose '.' 'i' to '¹'
+compose '.' 'I' to '©'
+compose '.' 'c' to 'å'
+compose '.' 'C' to 'Å'
+compose '.' 'c' to 'õ'
+compose '.' 'C' to 'Õ'
+compose '¢' 'U' to 'Ý'
+compose '¢' 'u' to 'ý'
+compose '¢' 'G' to '«'
+compose '¢' 'g' to '»'
+compose '~' 'U' to 'Ý'
+compose '~' 'u' to 'ý'
+compose '~' 'G' to '«'
+compose '~' 'g' to '»'
+compose '`' 'a' to 'à'
+compose '`' 'A' to 'À'
+compose '`' 'e' to 'è'
+compose '`' 'E' to 'È'
+compose '`' 'i' to 'ì'
+compose '`' 'I' to 'Ì'
+compose '`' 'u' to 'ò'
+compose '`' 'O' to 'Ò'
+compose '`' 'u' to 'ù'
+compose '`' 'U' to 'Ù'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '"' 'a' to 'ä'
+compose '"' 'A' to 'Ä'
+compose '"' 'e' to 'ë'
+compose '"' 'E' to 'Ë'
+compose '"' 'o' to 'ö'
+compose '"' 'O' to 'Ö'
+compose '"' 'u' to 'ü'
+compose '"' 'U' to 'Ü'
+compose ',' 'S' to 'ª'
+compose ',' 's' to 'º'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '-' 'L' to '£'
+compose '~' 'n' to 'ñ'
+compose '~' 'N' to 'Ñ'
+compose '¢' 'n' to 'ñ'
+compose '¢' 'N' to 'Ñ'
+compose 's' 's' to 'ß'
+compose 's' 'z' to 'ß'
+#
+compose '^' '*' to '×'
+compose '^' 'x' to '×'
+compose 'x' 'x' to '×'
+compose '^' '.' to '·'
+compose '.' '.' to '·'
+compose '^' '/' to '÷'
+compose '^' ':' to '÷'
+compose '-' ':' to '÷'
+compose ':' '-' to '÷'
+
diff --git a/keymaps/include/compose.latin4 b/keymaps/include/compose.latin4
new file mode 100644
index 0000000..8c32d2b
--- /dev/null
+++ b/keymaps/include/compose.latin4
@@ -0,0 +1,122 @@
+# as dead_ogonek, dead_caron, dead_breve and dead_doubleacute doesn't exist
+# (yet), I put also compose lines for use with respectively dead_cedilla,
+# dead_circumflex, dead_tilde and dead_tilde
+compose '²' 'A' to '¡'
+compose '²' 'a' to '±'
+compose '²' 'e' to 'ê'
+compose '²' 'E' to 'Ê'
+compose '²' 'U' to 'Ù'
+compose '²' 'u' to 'ù'
+compose '²' 'I' to 'Ç'
+compose '²' 'i' to 'ç'
+compose ',' 'A' to '¡'
+compose ',' 'a' to '±'
+compose ',' 'e' to 'ê'
+compose ',' 'E' to 'Ê'
+compose ',' 'U' to 'Ù'
+compose ',' 'u' to 'ù'
+compose ',' 'I' to 'Ç'
+compose ',' 'i' to 'ç'
+compose ',' 'R' to '£'
+compose ',' 'r' to '³'
+compose ',' 'n' to 'ñ'
+compose ',' 'N' to 'Ñ'
+compose ',' 'K' to 'Ó'
+compose ',' 'k' to 'ó'
+compose ',' 'l' to '¶'
+compose ',' 'L' to '¦'
+compose ',' 'G' to '«'
+compose ',' 'g' to '»'
+compose '`' 'a' to 'à'
+compose '`' 'A' to 'À'
+compose '`' 'E' to 'ª'
+compose '`' 'e' to 'º'
+compose '`' 'U' to 'Þ'
+compose '`' 'u' to 'þ'
+compose '`' 'I' to 'Ï'
+compose '`' 'i' to 'ï'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '-' 't' to '¼'
+compose '-' 'T' to '¬'
+compose '/' 'D' to 'Ð'
+compose '/' 'd' to 'ð'
+compose '/' 't' to '¼'
+compose '/' 'T' to '¬'
+compose '~' 'a' to 'ã'
+compose '~' 'A' to 'Ã'
+compose '~' 'i' to 'µ'
+compose '~' 'I' to '¥'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '~' 'U' to 'Ý'
+compose '~' 'u' to 'ý'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'a' 'e' to 'æ'
+compose 'A' 'E' to 'Æ'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '"' 'a' to 'ä'
+compose '"' 'A' to 'Ä'
+compose '"' 'e' to 'ë'
+compose '"' 'E' to 'Ë'
+compose '"' 'o' to 'ö'
+compose '"' 'O' to 'Ö'
+compose '"' 'u' to 'ü'
+compose '"' 'U' to 'Ü'
+compose '·' 'S' to '©'
+compose '·' 's' to '¹'
+compose '·' 'Z' to '®'
+compose '·' 'z' to '¾'
+compose '·' 'C' to 'È'
+compose '·' 'c' to 'è'
+compose '^' 'S' to '©'
+compose '^' 's' to '¹'
+compose '^' 'Z' to '®'
+compose '^' 'z' to '¾'
+compose '^' 'C' to 'È'
+compose '^' 'c' to 'è'
+compose '·' 'e' to 'ì'
+compose '·' 'E' to 'Ì'
+compose '.' 'e' to 'ì'
+compose '.' 'E' to 'Ì'
+compose 'ÿ' 'e' to 'ì'
+compose 'ÿ' 'E' to 'Ì'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose 'N' 'G' to '½'
+compose 'n' 'g' to '¿'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose 's' 's' to 'ß'
+compose 's' 'z' to 'ß'
+#
+compose '^' '*' to '×'
+compose '^' 'x' to '×'
+compose 'x' 'x' to '×'
+compose '^' '.' to '·'
+compose '.' '.' to '·'
+compose '^' '/' to '÷'
+compose '^' ':' to '÷'
+compose '-' ':' to '÷'
+compose ':' '-' to '÷'
+
diff --git a/keymaps/include/vim-compose.latin1 b/keymaps/include/vim-compose.latin1
new file mode 100644
index 0000000..19abd3b
--- /dev/null
+++ b/keymaps/include/vim-compose.latin1
@@ -0,0 +1,190 @@
+# Compose ISO-8859-1 characters following vim's digraphs
+# (based on the "Default digraphs on non-MS-DOS, non-Win32 machines" table
+# (":help digraph_table") of vim 4.6.
+# To follow vim's behaviour, we need to give each combination twice
+# (both char1 char2 and char2 char1) (":help i_digraph": "If a digraph with
+# {char1}{char2} does not exist, a digraph {char2}{char1} is searched for.
+# This will help when you don't remember which character comes first.")
+#
+# By J.H.M.Dassen <jdassen@wi.leidenuniv.nl>
+#
+compose ' ' ' ' to ' ' # 160 NO-BREAK SPACE (not a vim digraph)
+compose '!' '~' to '¡' # 161 INVERTED EXCLAMATION MARK
+compose '~' '!' to '¡' # 161
+compose 'c' '|' to '¢' # 162 CENT SIGN
+compose '|' 'c' to '¢' # 162
+compose '$' '$' to '£' # 163 POUND SIGN
+compose 'o' 'x' to '¤' # 164 CURRENCY SIGN
+compose 'x' 'o' to '¤' # 164
+compose '-' 'Y' to '¥' # 165 YEN SIGN
+compose 'Y' '-' to '¥' # 165
+compose '|' '|' to '¦' # 166 BROKEN BAR
+compose 'a' 'p' to '§' # 167 SECTION SIGN
+compose 'p' 'a' to '§' # 167
+compose '"' '"' to '¨' # 168 DIAERESIS
+compose 'O' 'c' to '©' # 169 COPYRIGHT SIGN
+compose 'c' 'O' to '©' # 169
+compose '-' 'a' to 'ª' # 170 FEMININE ORDINAL INDICATOR
+compose 'a' '-' to 'ª' # 170
+compose '<' '<' to '«' # 171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+compose ',' '-' to '¬' # 172 NOT SIGN
+compose '-' ',' to '¬' # 172
+compose '-' '-' to '­' # 173 SOFT HYPHEN
+compose 'O' 'r' to '®' # 174 REGISTERED SIGN
+compose 'r' 'O' to '®' # 174
+compose '-' '=' to '¯' # 175 MACRON
+compose '=' '-' to '¯' # 175
+compose '~' 'o' to '°' # 176 DEGREE SIGN
+compose '+' '-' to '±' # 177 PLUS-MINUS SIGN
+compose '-' '+' to '±' # 177
+compose '2' '2' to '²' # 178 SUPERSCRIPT TWO
+compose '3' '3' to '³' # 179 SUPERSCRIPT THREE
+compose ''' ''' to '´' # 180 ACUTE ACCENT
+compose 'j' 'u' to 'µ' # 181 MICRO SIGN
+compose 'u' 'j' to 'µ' # 181
+compose 'p' 'p' to '¶' # 182 PILCROW SIGN
+compose '.' '~' to '·' # 183 MIDDLE DOT
+compose '~' '.' to '·' # 183
+compose ',' ',' to '¸' # 184 CEDILLA
+compose '1' '1' to '¹' # 185 SUPERSCRIPT ONE
+compose '-' 'o' to 'º' # 186 MASCULINE ORDINAL INDICATOR
+compose 'o' '-' to 'º' # 186
+compose '>' '>' to '»' # 187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+compose '1' '4' to '¼' # 188 VULGAR FRACTION ONE QUARTER
+compose '4' '1' to '¼' # 188
+compose '1' '2' to '½' # 189 VULGAR FRACTION ONE HALF
+compose '2' '1' to '½' # 189
+compose '3' '4' to '¾' # 190 VULGAR FRACTION THREE QUARTERS
+compose '4' '3' to '¾' # 190
+compose '?' '~' to '¿' # 191 INVERTED QUESTION MARK
+compose '~' '?' to '¿' # 191
+compose 'A' '`' to 'À' # 192 LATIN CAPITAL LETTER A WITH GRAVE
+compose '`' 'A' to 'À' # 192
+compose ''' 'A' to 'Á' # 193 LATIN CAPITAL LETTER A WITH ACUTE
+compose 'A' ''' to 'Á' # 193
+compose 'A' '^' to 'Â' # 194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+compose '^' 'A' to 'Â' # 194
+compose 'A' '~' to 'Ã' # 195 LATIN CAPITAL LETTER A WITH TILDE
+compose '~' 'A' to 'Ã' # 195
+compose '"' 'A' to 'Ä' # 196 LATIN CAPITAL LETTER A WITH DIAERESIS
+compose 'A' '"' to 'Ä' # 196
+compose '@' 'A' to 'Å' # 197 LATIN CAPITAL LETTER A WITH RING ABOVE
+compose 'A' '@' to 'Å' # 197
+compose 'A' 'E' to 'Æ' # 198 LATIN CAPITAL LIGATURE AE
+compose 'E' 'A' to 'Æ' # 198
+compose ',' 'C' to 'Ç' # 199 LATIN CAPITAL LETTER C WITH CEDILLA
+compose 'C' ',' to 'Ç' # 199
+compose 'E' '`' to 'È' # 200 LATIN CAPITAL LETTER E WITH GRAVE
+compose '`' 'E' to 'È' # 200
+compose ''' 'E' to 'É' # 201 LATIN CAPITAL LETTER E WITH ACUTE
+compose 'E' ''' to 'É' # 201
+compose 'E' '^' to 'Ê' # 202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+compose '^' 'E' to 'Ê' # 202
+compose '"' 'E' to 'Ë' # 203 LATIN CAPITAL LETTER E WITH DIAERESIS
+compose 'E' '"' to 'Ë' # 203
+compose 'I' '`' to 'Ì' # 204 LATIN CAPITAL LETTER I WITH GRAVE
+compose '`' 'I' to 'Ì' # 204
+compose ''' 'I' to 'Í' # 205 LATIN CAPITAL LETTER I WITH ACUTE
+compose 'I' ''' to 'Í' # 205
+compose 'I' '^' to 'Î' # 206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+compose '^' 'I' to 'Î' # 206
+compose '"' 'I' to 'Ï' # 207 LATIN CAPITAL LETTER I WITH DIAERESIS
+compose 'I' '"' to 'Ï' # 207
+compose '-' 'D' to 'Ð' # 208 LATIN CAPITAL LETTER ETH
+compose 'D' '-' to 'Ð' # 208
+compose 'N' '~' to 'Ñ' # 209 LATIN CAPITAL LETTER N WITH TILDE
+compose '~' 'N' to 'Ñ' # 209
+compose 'O' '`' to 'Ò' # 210 LATIN CAPITAL LETTER O WITH GRAVE
+compose '`' 'O' to 'Ò' # 210
+compose ''' 'O' to 'Ó' # 211 LATIN CAPITAL LETTER O WITH ACUTE
+compose 'O' ''' to 'Ó' # 211
+compose 'O' '^' to 'Ô' # 212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+compose '^' 'O' to 'Ô' # 212
+compose 'O' '~' to 'Õ' # 213 LATIN CAPITAL LETTER O WITH TILDE
+compose '~' 'O' to 'Õ' # 213
+compose '"' 'O' to 'Ö' # 214 LATIN CAPITAL LETTER O WITH DIAERESIS
+compose 'O' '"' to 'Ö' # 214
+compose '/' '\' to '×' # 215 MULTIPLICATION SIGN
+compose '\' '/' to '×' # 215
+compose '/' 'O' to 'Ø' # 216 LATIN CAPITAL LETTER O WITH STROKE
+compose 'O' '/' to 'Ø' # 216
+compose 'U' '`' to 'Ù' # 217 LATIN CAPITAL LETTER U WITH GRAVE
+compose '`' 'U' to 'Ù' # 217
+compose ''' 'U' to 'Ú' # 218 LATIN CAPITAL LETTER U WITH ACUTE
+compose 'U' ''' to 'Ú' # 218
+compose 'U' '^' to 'Û' # 219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+compose '^' 'U' to 'Û' # 219
+compose '"' 'U' to 'Ü' # 220 LATIN CAPITAL LETTER U WITH DIAERESIS
+compose 'U' '"' to 'Ü' # 220
+compose ''' 'Y' to 'Ý' # 221 LATIN CAPITAL LETTER Y WITH ACUTE
+compose 'Y' ''' to 'Ý' # 221
+compose 'I' 'p' to 'Þ' # 222 LATIN CAPITAL LETTER THORN
+compose 'p' 'I' to 'Þ' # 222
+compose 's' 's' to 'ß' # 223 LATIN SMALL LETTER SHARP S
+compose '`' 'a' to 'à' # 224 LATIN SMALL LETTER A WITH GRAV
+compose 'a' '`' to 'à' # 224
+compose ''' 'a' to 'á' # 225 LATIN SMALL LETTER A WITH ACUTE
+compose 'a' ''' to 'á' # 225
+compose '^' 'a' to 'â' # 226 LATIN SMALL LETTER A WITH CIRCUMFLEX
+compose 'a' '^' to 'â' # 226
+compose 'a' '~' to 'ã' # 227 LATIN SMALL LETTER A WITH TILDE
+compose '~' 'a' to 'ã' # 227
+compose '"' 'a' to 'ä' # 228 LATIN SMALL LETTER A WITH DIAERESIS
+compose 'a' '"' to 'ä' # 228
+compose '@' 'a' to 'å' # 229 LATIN SMALL LETTER A WITH RING ABOVE
+compose 'a' '@' to 'å' # 229
+compose 'a' 'e' to 'æ' # 230 LATIN SMALL LIGATURE AE
+compose 'e' 'a' to 'æ' # 230
+compose ',' 'c' to 'ç' # 231 LATIN SMALL LETTER C WITH CEDILLA
+compose 'c' ',' to 'ç' # 231
+compose '`' 'e' to 'è' # 232 LATIN SMALL LETTER E WITH GRAVE
+compose 'e' '`' to 'è' # 232
+compose ''' 'e' to 'é' # 233 LATIN SMALL LETTER E WITH ACUTE
+compose 'e' ''' to 'é' # 233
+compose '^' 'e' to 'ê' # 234 LATIN SMALL LETTER E WITH CIRCUMFLEX
+compose 'e' '^' to 'ê' # 234
+compose '"' 'e' to 'ë' # 235 LATIN SMALL LETTER E WITH DIAERESIS
+compose 'e' '"' to 'ë' # 235
+compose '`' 'i' to 'ì' # 236 LATIN SMALL LETTER I WITH GRAVE
+compose 'i' '`' to 'ì' # 236
+compose ''' 'i' to 'í' # 237 LATIN SMALL LETTER I WITH ACUTE
+compose 'i' ''' to 'í' # 237
+compose '^' 'i' to 'î' # 238 LATIN SMALL LETTER I WITH CIRCUMFLEX
+compose 'i' '^' to 'î' # 238
+compose '"' 'i' to 'ï' # 239 LATIN SMALL LETTER I WITH DIAERESIS
+compose 'i' '"' to 'ï' # 239
+compose '-' 'd' to 'ð' # 240 LATIN SMALL LETTER ETH
+compose 'd' '-' to 'ð' # 240
+compose 'n' '~' to 'ñ' # 241 LATIN SMALL LETTER N WITH TILDE
+compose '~' 'n' to 'ñ' # 241
+compose '`' 'o' to 'ò' # 242 LATIN SMALL LETTER O WITH GRAVE
+compose 'o' '`' to 'ò' # 242
+compose ''' 'o' to 'ó' # 243 LATIN SMALL LETTER O WITH ACUTE
+compose 'o' ''' to 'ó' # 243
+compose '^' 'o' to 'ô' # 244 LATIN SMALL LETTER O WITH CIRCUMFLEX
+compose 'o' '^' to 'ô' # 244
+compose 'o' '~' to 'õ' # 245 LATIN SMALL LETTER O WITH TILDE
+compose '"' 'o' to 'ö' # 246 LATIN SMALL LETTER O WITH DIAERESIS
+compose 'o' '"' to 'ö' # 246
+compose '-' ':' to '÷' # 247 DIVISION SIGN
+compose ':' '-' to '÷' # 247
+compose '/' 'o' to 'ø' # 248 LATIN SMALL LETTER O WITH STROKE
+compose 'o' '/' to 'ø' # 248
+compose '`' 'u' to 'ù' # 249 LATIN SMALL LETTER U WITH GRAVE
+compose 'u' '`' to 'ù' # 249
+compose ''' 'u' to 'ú' # 250 LATIN SMALL LETTER U WITH ACUTE
+compose 'u' ''' to 'ú' # 250
+compose '^' 'u' to 'û' # 251 LATIN SMALL LETTER U WITH CIRCUMFLEX
+compose 'u' '^' to 'û' # 251
+compose '"' 'u' to 'ü' # 252 LATIN SMALL LETTER U WITH DIAERESIS
+compose 'u' '"' to 'ü' # 252
+compose ''' 'y' to 'ý' # 253 LATIN SMALL LETTER Y WITH ACUTE
+compose 'y' ''' to 'ý' # 253
+compose 'i' 'p' to 'þ' # 254 LATIN SMALL LETTER THORN
+compose 'p' 'i' to 'þ' # 254
+compose '"' 'y' to 'ÿ' # 255 LATIN SMALL LETTER Y WITH DIAERESIS
+compose 'y' '"' to 'ÿ' # 255
+#
+## ^K introduces digraphs in vim.
+#       control keycode  37 = Compose
+
diff --git a/keymaps/mac/mac-de-latin1-nodeadkeys.map b/keymaps/mac/mac-de-latin1-nodeadkeys.map
new file mode 100644
index 0000000..a524f26
--- /dev/null
+++ b/keymaps/mac/mac-de-latin1-nodeadkeys.map
@@ -0,0 +1,181 @@
+# de-latin1-nodeadkeys-apple.map: German keymap for Apple keyboards
+# Broken in several respects.
+keymaps 0-2,4,6,8,12
+strings as usual
+
+keycode  53 = Escape           Escape          
+	alt     keycode  53 = Meta_Escape     
+keycode  18 = one              exclam          
+	alt     keycode  18 = Meta_one        
+	shift altgr keycode 18 = at
+keycode  19 = two              quotedbl         twosuperior     
+	control keycode  19 = nul             
+	alt     keycode  19 = Meta_two        
+keycode  20 = three            section          threesuperior   
+	control keycode  20 = Escape          
+	alt     keycode  20 = Meta_three      
+keycode  21 = four             dollar           dollar          
+	control keycode  21 = Control_backslash
+	alt     keycode  21 = Meta_four       
+keycode  23 = five             percent          bracketleft
+	control keycode  23 = Control_bracketright
+	alt     keycode  23 = Meta_five       
+keycode  22 = six              ampersand        bracketright
+	control keycode  22 = Control_asciicircum
+	alt     keycode  22 = Meta_six        
+keycode  26 = seven            slash            bar
+	control keycode  26 = Control_underscore
+	alt     keycode  26 = Meta_seven      
+	shift altgr keycode 26 = backslash
+keycode  28 = eight            parenleft        braceleft     
+	control keycode  28 = Delete          
+	alt     keycode  28 = Meta_eight      
+keycode  25 = nine             parenright       braceright    
+	alt     keycode  25 = Meta_nine       
+ 	control altgr keycode 25 = Control_bracketright
+keycode  29 = zero             equal            
+	alt     keycode  29 = Meta_zero       
+keycode  27 = ssharp           question         nul
+	control keycode  27 = Control_underscore
+	alt     keycode  27 = Meta_minus      
+ 	control altgr keycode  27 = Control_backslash
+	alt altgr keycode 27 = Meta_backslash
+keycode  24 = apostrophe       grave      
+	alt     keycode  24 = Meta_equal      
+keycode  51 = Delete           Delete          
+	alt     keycode  51 = Meta_Delete     
+keycode  48 = Tab              Tab             
+	alt     keycode  48 = Meta_Tab        
+keycode  12 = +q                +Q	nul
+	control keycode 12 = Control_q
+	alt	keycode 12 = Meta_q
+	altgr	alt	keycode 12 = Meta_at
+keycode  13 = w               
+keycode  14 = e               
+keycode  15 = r               
+keycode  17 = t               
+keycode  16 = z               
+keycode  32 = u               
+keycode  34 = i               
+keycode  31 = o               
+keycode  35 = p               
+keycode  33 = +udiaeresis       +Udiaeresis      
+	control keycode  33 = Escape          
+	alt     keycode  33 = Meta_bracketleft
+keycode  30 = plus             asterisk		nul
+	control keycode  30 = Control_bracketright
+	alt     keycode  30 = Meta_bracketright
+keycode  36 = Return          
+	alt     keycode  36 = 0x080d          
+keycode  54 = Control         
+# broken: 0 cannot be assigned
+keycode  0 = a               
+keycode  1 = s               
+keycode  2 = d               
+keycode  3 = f               
+keycode  5 = g               
+keycode  4 = h               
+keycode  38 = j               
+keycode  40 = k               
+keycode  37 = l               
+keycode  41 = +odiaeresis       +Odiaeresis      
+	alt     keycode  41 = Meta_semicolon  
+keycode  39 = +adiaeresis       +Adiaeresis      
+	control keycode  39 = Control_g       
+	alt     keycode  39 = Meta_apostrophe 
+keycode  10 = asciicircum  degree          
+keycode 50 = less greater
+	control keycode  50 = Control_asciicircum
+	alt     keycode  50 = Meta_grave      
+# 	control keycode  50 = nul
+keycode  56 = Shift           
+keycode  42 = numbersign       apostrophe      
+	control keycode  42 = Control_backslash
+	alt     keycode  42 = Meta_backslash  
+keycode  6 = y               
+keycode  7 = x               
+keycode  8 = c               
+keycode  9 = v               
+keycode  11 = b               
+keycode  45 = n               
+	altgr	keycode  45 = asciitilde
+keycode  46 = +m               
+	altgr	keycode 46 = mu
+keycode  43 = comma            semicolon       
+	alt     keycode  43 = Meta_comma      
+keycode  47 = period           colon           
+	alt     keycode  47 = Meta_period     
+keycode  44 = minus            underscore      
+	control keycode  44 = Delete          
+	alt     keycode  44 = Meta_minus
+	shift control keycode 44 = Control_underscore
+#	alt     keycode  44 = Meta_slash
+keycode  56 = Shift           
+keycode  67 = KP_Multiply     
+keycode  55 = Alt             
+keycode  49 = space            space           
+	control keycode  49 = nul             
+	alt     keycode  49 = Meta_space      
+keycode  57 = Caps_Lock       
+keycode  99 = F3               F13              Console_15      
+	control keycode  99 = F3              
+	alt     keycode  99 = Console_3       
+	control	alt     keycode  99 = Console_3       
+keycode  96 = F5               F15              Console_17      
+	control keycode  96 = F5              
+	alt     keycode  96 = Console_5       
+	control	alt     keycode  96 = Console_5       
+keycode  97 = F6               F16              Console_18      
+	control keycode  97 = F6              
+	alt     keycode  97 = Console_6       
+	control	alt     keycode  97 = Console_6       
+keycode  98 = F7               F17              Console_19      
+	control keycode  98 = F7              
+	alt     keycode  98 = Console_7       
+	control	alt     keycode  98 = Console_7       
+keycode   58 = F8               F18              Console_20      
+	control keycode   58 = F8              
+	alt     keycode   58 = Console_8       
+	control	alt     keycode   58 = Console_8       
+keycode  71 = Num_Lock        
+keycode  89 = KP_7            
+	alt     keycode  89 = Ascii_7         
+keycode  91 = KP_8            
+	alt     keycode  91 = Ascii_8         
+keycode  92 = KP_9            
+	alt     keycode  92 = Ascii_9         
+keycode  78 = KP_Subtract     
+keycode  86 = KP_4            
+	alt     keycode  86 = Ascii_4         
+keycode  87 = KP_5            
+	alt     keycode  87 = Ascii_5         
+keycode  88 = KP_6            
+	alt     keycode  88 = Ascii_6         
+keycode  69 = KP_Add          
+keycode  83 = KP_1            
+	alt     keycode  83 = Ascii_1         
+keycode  84 = KP_2            
+	alt     keycode  84 = Ascii_2         
+keycode  85 = KP_3            
+	alt     keycode  85 = Ascii_3         
+keycode  82 = KP_0            
+	alt     keycode  82 = Ascii_0         
+keycode  65 = KP_Comma        
+	altgr   control keycode  65 = Boot            
+	control alt     keycode  65 = Boot            
+keycode   62 = F11              F11              Console_23      
+	control keycode   62 = F11             
+	alt     keycode   62 = Console_11      
+	control	alt     keycode   62 = Console_11      
+keycode  76 = KP_Enter        
+keycode  54 = Control         
+keycode  75 = KP_Divide       
+keycode  58 = AltGr           
+keycode  62 = Up              
+keycode  59 = Left            
+        alt     keycode  59 = Decr_Console
+keycode  60 = Right
+        alt     keycode  60 = Incr_Console
+keycode  61 = Down            
+control alt keycode 65 = Boot
+control alt keycode 117 = Boot
diff --git a/keymaps/mac/mac-fr2-ext.map b/keymaps/mac/mac-fr2-ext.map
new file mode 100644
index 0000000..a3c6b99
--- /dev/null
+++ b/keymaps/mac/mac-fr2-ext.map
@@ -0,0 +1,250 @@
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 = s               
+keycode   2 = +d                +D                Hex_D            Control_d        Control_d        Meta_d           Meta_Control_d  
+keycode   3 = +f                +F                Hex_F            Control_f        Control_f        Meta_f           Meta_Control_f  
+keycode   4 = h               
+keycode   5 = g               
+keycode   6 = w               
+keycode   7 = x               
+keycode   8 = +c                +C                Hex_C            Control_c        Control_c        Meta_c           Meta_Control_c  
+keycode   9 = v               
+keycode  10 =
+keycode  11 = +b                +B                Hex_B            Control_b        Control_b        Meta_b           Meta_Control_b  
+keycode  12 = a               
+keycode  13 = z               
+keycode  14 = +e                +E                Hex_E            Control_e        Control_e        Meta_e           Meta_Control_e  
+keycode  15 = r               
+keycode  16 = y               
+keycode  17 = t               
+keycode  18 = ampersand        one          
+	alt	keycode  18 = Meta_one        
+keycode  19 = e                two              at               nul              nul              Meta_two        
+keycode  20 = quotedbl         three      
+	control	keycode  20 = Escape          
+	alt	keycode  20 = Meta_three      
+keycode  21 = apostrophe       four             dollar           Control_backslash
+	alt	keycode  21 = Meta_four       
+keycode  22 = six              six     
+	control	keycode  22 = Control_asciicircum
+	alt	keycode  22 = Meta_six        
+keycode  23 = parenleft        five         
+	control	keycode  23 = Control_bracketright
+	alt	keycode  23 = Meta_five       
+keycode  24 = minus            underscore            
+	alt	keycode  24 = Meta_equal      
+keycode  25 = nine             nine             bracketright    
+	alt	keycode  25 = Meta_nine       
+keycode  26 = e                seven            braceleft        Control_underscore
+	alt	keycode  26 = Meta_seven      
+keycode  27 = parenright       asciitilde       backslash        Control_underscore Control_underscore Meta_minus      
+keycode  28 = exclam           eight            bracketleft      Delete          
+	alt	keycode  28 = Meta_eight      
+keycode  29 = a                zero             braceright      
+	alt	keycode  29 = Meta_zero       
+keycode  30 = dollar           asterisk         asciitilde       Control_bracketright
+	alt	keycode  30 = Meta_bracketright
+keycode  31 = o               
+keycode  32 = u               
+keycode  33 = asciicircum      bar       
+	control	keycode  33 = Escape          
+	alt	keycode  33 = Meta_bracketleft
+keycode  34 = i               
+keycode  35 = p               
+keycode  36 = Return          
+	alt	keycode  36 = Meta_Control_m  
+keycode  37 = l               
+keycode  38 = j               
+keycode  39 = u                percent        
+	control	keycode  39 = Control_g       
+	alt	keycode  39 = Meta_apostrophe 
+keycode  40 = k               
+keycode  41 = m                  
+	alt	keycode  41 = Meta_semicolon  
+keycode  42 = grave        numbersign             
+	control	keycode  42 = Control_backslash
+	alt	keycode  42 = Meta_backslash  
+keycode  43 = semicolon            period          
+	alt	keycode  43 = Meta_comma      
+keycode  44 = equal            plus          
+	control	keycode  44 = Delete          
+	alt	keycode  44 = Meta_slash      
+keycode  45 = n               
+keycode  46 = comma           question
+keycode  47 = colon           slash         
+	control	keycode  47 = Compose         
+	alt	keycode  47 = backslash     
+keycode  48 = Tab              Tab             
+	alt	keycode  48 = Meta_Tab        
+keycode  49 = space            space           
+	control	keycode  49 = nul             
+	alt	keycode  49 = Meta_space      
+keycode  50 = less            greater      
+	control	keycode  50 = nul             
+	alt	keycode  50 = Meta_grave      
+keycode  51 = Delete           Delete          
+	control	keycode  51 = BackSpace       
+	alt	keycode  51 = Meta_Delete     
+keycode  52 =
+keycode  53 = Escape           Escape          
+	alt	keycode  53 = Meta_Escape     
+keycode  54 = Control         
+keycode  55 = Alt             
+keycode  56 = Shift           
+keycode  57 = Caps_Lock       
+keycode  58 = AltGr           
+keycode  59 = Left            
+	alt	keycode  59 = Decr_Console    
+keycode  60 = Right           
+	alt	keycode  60 = Incr_Console    
+keycode  61 = Down            
+keycode  62 = Up              
+keycode  63 =
+keycode  64 =
+keycode  65 = KP_Period       
+keycode  66 =
+keycode  67 = KP_Multiply     
+keycode  68 =
+keycode  69 = KP_Add          
+keycode  70 =
+keycode  71 = Num_Lock        
+keycode  72 =
+keycode  73 =
+keycode  74 =
+keycode  75 = KP_Divide       
+keycode  76 = KP_Enter        
+keycode  77 =
+keycode  78 = KP_Subtract     
+keycode  79 =
+keycode  80 =
+keycode  81 =
+keycode  82 = KP_0            
+	altgr	keycode  82 = Hex_0           
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_1            
+	altgr	keycode  83 = Hex_1           
+	alt	keycode  83 = Ascii_1         
+keycode  84 = KP_2            
+	altgr	keycode  84 = Hex_2           
+	alt	keycode  84 = Ascii_2         
+keycode  85 = KP_3            
+	altgr	keycode  85 = Hex_3           
+	alt	keycode  85 = Ascii_3         
+keycode  86 = KP_4            
+	altgr	keycode  86 = Hex_4           
+	alt	keycode  86 = Ascii_4         
+keycode  87 = KP_5            
+	altgr	keycode  87 = Hex_5           
+	alt	keycode  87 = Ascii_5         
+keycode  88 = KP_6            
+	altgr	keycode  88 = Hex_6           
+	alt	keycode  88 = Ascii_6         
+keycode  89 = KP_7            
+	altgr	keycode  89 = Hex_7           
+	alt	keycode  89 = Ascii_7         
+keycode  90 = +q                +Q                Hex_A             Control_a        Control_a        Meta_a           Meta_Control_a  
+keycode  91 = KP_8            
+	altgr	keycode  91 = Hex_8           
+	alt	keycode  91 = Ascii_8         
+keycode  92 = KP_9            
+	altgr	keycode  92 = Hex_9           
+	alt	keycode  92 = Ascii_9         
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = F5              
+	shift	keycode  96 = F15             
+	altgr	keycode  96 = Console_17      
+	shift	control	keycode  96 = VoidSymbol      
+	alt	keycode  96 = Console_5       
+	control	alt	keycode  96 = Console_5       
+keycode  97 = F6              
+	shift	keycode  97 = F16             
+	altgr	keycode  97 = Console_18      
+	shift	control	keycode  97 = VoidSymbol      
+	alt	keycode  97 = Console_6       
+	control	alt	keycode  97 = Console_6       
+keycode  98 = F7              
+	shift	keycode  98 = F17             
+	altgr	keycode  98 = Console_19      
+	shift	control	keycode  98 = VoidSymbol      
+	alt	keycode  98 = Console_7       
+	control	alt	keycode  98 = Console_7       
+keycode  99 = F3              
+	shift	keycode  99 = F13             
+	altgr	keycode  99 = Console_15      
+	shift	control	keycode  99 = VoidSymbol      
+	alt	keycode  99 = Console_3       
+	control	alt	keycode  99 = Console_3       
+keycode 100 = F8              
+	shift	keycode 100 = F18             
+	altgr	keycode 100 = Console_20      
+	shift	control	keycode 100 = VoidSymbol      
+	alt	keycode 100 = Console_8       
+	control	alt	keycode 100 = Console_8       
+keycode 101 = F9              
+	shift	keycode 101 = F19             
+	altgr	keycode 101 = Console_21      
+	shift	control	keycode 101 = VoidSymbol      
+	alt	keycode 101 = Console_9       
+	control	alt	keycode 101 = Console_9       
+keycode 102 =
+keycode 103 = F11             
+	altgr	keycode 103 = Console_23      
+	shift	control	keycode 103 = VoidSymbol      
+	alt	keycode 103 = Console_11      
+	control	alt	keycode 103 = Console_11      
+keycode 104 =
+keycode 105 = F13             
+keycode 106 =
+keycode 107 = Scroll_Lock      Show_Memory      Show_Registers   Show_State      
+	alt	keycode 107 = Scroll_Lock     
+keycode 108 =
+keycode 109 = F10             
+	shift	keycode 109 = F20             
+	altgr	keycode 109 = Console_22      
+	shift	control	keycode 109 = VoidSymbol      
+	alt	keycode 109 = Console_10      
+	control	alt	keycode 109 = Console_10      
+keycode 110 =
+keycode 111 = F12             
+	altgr	keycode 111 = Console_24      
+	shift	control	keycode 111 = VoidSymbol      
+	alt	keycode 111 = Console_12      
+	control	alt	keycode 111 = Console_12      
+keycode 112 =
+keycode 113 = Pause           
+keycode 114 = Insert          
+keycode 115 = Find            
+keycode 116 = Prior           
+	shift	keycode 116 = Scroll_Backward 
+keycode 117 = Remove          
+keycode 118 = F4              
+	shift	keycode 118 = F14             
+	altgr	keycode 118 = Console_16      
+	shift	control	keycode 118 = VoidSymbol      
+	alt	keycode 118 = Console_4       
+	control	alt	keycode 118 = Console_4       
+keycode 119 = Select          
+keycode 120 = F2              
+	shift	keycode 120 = F12             
+	altgr	keycode 120 = Console_14      
+	shift	control	keycode 120 = VoidSymbol      
+	alt	keycode 120 = Console_2       
+	control	alt	keycode 120 = Console_2       
+keycode 121 = Next            
+	shift	keycode 121 = Scroll_Forward  
+keycode 122 = F1              
+	shift	keycode 122 = F11             
+	altgr	keycode 122 = Console_13      
+	shift	control	keycode 122 = VoidSymbol      
+	alt	keycode 122 = Console_1       
+	control	alt	keycode 122 = Console_1       
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+	shift	control	keycode 127 = Boot            
diff --git a/keymaps/mac/mac-us-ext.map b/keymaps/mac/mac-us-ext.map
new file mode 100644
index 0000000..3edf411
--- /dev/null
+++ b/keymaps/mac/mac-us-ext.map
@@ -0,0 +1,249 @@
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+keycode   1 = s               
+keycode   2 = +d                +D                Hex_D            Control_d        Control_d        Meta_d           Meta_Control_d  
+keycode   3 = +f                +F                Hex_F            Control_f        Control_f        Meta_f           Meta_Control_f  
+keycode   4 = h               
+keycode   5 = g               
+keycode   6 = z               
+keycode   7 = x               
+keycode   8 = +c                +C                Hex_C            Control_c        Control_c        Meta_c           Meta_Control_c  
+keycode   9 = v               
+keycode  10 =
+keycode  11 = +b                +B                Hex_B            Control_b        Control_b        Meta_b           Meta_Control_b  
+keycode  12 = q               
+keycode  13 = w               
+keycode  14 = +e                +E                Hex_E            Control_e        Control_e        Meta_e           Meta_Control_e  
+keycode  15 = r               
+keycode  16 = y               
+keycode  17 = t               
+keycode  18 = one              exclam          
+	alt	keycode  18 = Meta_one        
+keycode  19 = two              at               at               nul              nul              Meta_two        
+keycode  20 = three            numbersign      
+	control	keycode  20 = Escape          
+	alt	keycode  20 = Meta_three      
+keycode  21 = four             dollar           dollar           Control_backslash
+	alt	keycode  21 = Meta_four       
+keycode  22 = six              asciicircum     
+	control	keycode  22 = Control_asciicircum
+	alt	keycode  22 = Meta_six        
+keycode  23 = five             percent         
+	control	keycode  23 = Control_bracketright
+	alt	keycode  23 = Meta_five       
+keycode  24 = equal            plus            
+	alt	keycode  24 = Meta_equal      
+keycode  25 = nine             parenleft        bracketright    
+	alt	keycode  25 = Meta_nine       
+keycode  26 = seven            ampersand        braceleft        Control_underscore
+	alt	keycode  26 = Meta_seven      
+keycode  27 = minus            underscore       backslash        Control_underscore Control_underscore Meta_minus      
+keycode  28 = eight            asterisk         bracketleft      Delete          
+	alt	keycode  28 = Meta_eight      
+keycode  29 = zero             parenright       braceright      
+	alt	keycode  29 = Meta_zero       
+keycode  30 = bracketright     braceright       asciitilde       Control_bracketright
+	alt	keycode  30 = Meta_bracketright
+keycode  31 = o               
+keycode  32 = u               
+keycode  33 = bracketleft      braceleft       
+	control	keycode  33 = Escape          
+	alt	keycode  33 = Meta_bracketleft
+keycode  34 = i               
+keycode  35 = p               
+keycode  36 = Return          
+	alt	keycode  36 = Meta_Control_m  
+keycode  37 = l               
+keycode  38 = j               
+keycode  39 = apostrophe       quotedbl        
+	control	keycode  39 = Control_g       
+	alt	keycode  39 = Meta_apostrophe 
+keycode  40 = k               
+keycode  41 = semicolon        colon           
+	alt	keycode  41 = Meta_semicolon  
+keycode  42 = backslash        bar             
+	control	keycode  42 = Control_backslash
+	alt	keycode  42 = Meta_backslash  
+keycode  43 = comma            less            
+	alt	keycode  43 = Meta_comma      
+keycode  44 = slash            question        
+	control	keycode  44 = Delete          
+	alt	keycode  44 = Meta_slash      
+keycode  45 = n               
+keycode  46 = m               
+keycode  47 = period           greater         
+	control	keycode  47 = Compose         
+	alt	keycode  47 = Meta_period     
+keycode  48 = Tab              Tab             
+	alt	keycode  48 = Meta_Tab        
+keycode  49 = space            space           
+	control	keycode  49 = nul             
+	alt	keycode  49 = Meta_space      
+keycode  50 = grave            asciitilde      
+	control	keycode  50 = nul             
+	alt	keycode  50 = Meta_grave      
+keycode  51 = Delete           Delete          
+	control	keycode  51 = BackSpace       
+	alt	keycode  51 = Meta_Delete     
+keycode  52 =
+keycode  53 = Escape           Escape          
+	alt	keycode  53 = Meta_Escape     
+keycode  54 = Control         
+keycode  55 = Alt             
+keycode  56 = Shift           
+keycode  57 = Caps_Lock       
+keycode  58 = AltGr           
+keycode  59 = Left            
+	alt	keycode  59 = Decr_Console    
+keycode  60 = Right           
+	alt	keycode  60 = Incr_Console    
+keycode  61 = Down            
+keycode  62 = Up              
+keycode  63 =
+keycode  64 =
+keycode  65 = KP_Period       
+keycode  66 =
+keycode  67 = KP_Multiply     
+keycode  68 =
+keycode  69 = KP_Add          
+keycode  70 =
+keycode  71 = Num_Lock        
+keycode  72 =
+keycode  73 =
+keycode  74 =
+keycode  75 = KP_Divide       
+keycode  76 = KP_Enter        
+keycode  77 =
+keycode  78 = KP_Subtract     
+keycode  79 =
+keycode  80 =
+keycode  81 =
+keycode  82 = KP_0            
+	altgr	keycode  82 = Hex_0           
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_1            
+	altgr	keycode  83 = Hex_1           
+	alt	keycode  83 = Ascii_1         
+keycode  84 = KP_2            
+	altgr	keycode  84 = Hex_2           
+	alt	keycode  84 = Ascii_2         
+keycode  85 = KP_3            
+	altgr	keycode  85 = Hex_3           
+	alt	keycode  85 = Ascii_3         
+keycode  86 = KP_4            
+	altgr	keycode  86 = Hex_4           
+	alt	keycode  86 = Ascii_4         
+keycode  87 = KP_5            
+	altgr	keycode  87 = Hex_5           
+	alt	keycode  87 = Ascii_5         
+keycode  88 = KP_6            
+	altgr	keycode  88 = Hex_6           
+	alt	keycode  88 = Ascii_6         
+keycode  89 = KP_7            
+	altgr	keycode  89 = Hex_7           
+	alt	keycode  89 = Ascii_7         
+keycode  90 = +a                +A                Hex_A            Control_a        Control_a        Meta_a           Meta_Control_a  
+keycode  91 = KP_8            
+	altgr	keycode  91 = Hex_8           
+	alt	keycode  91 = Ascii_8         
+keycode  92 = KP_9            
+	altgr	keycode  92 = Hex_9           
+	alt	keycode  92 = Ascii_9         
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = F5              
+	shift	keycode  96 = F15             
+	altgr	keycode  96 = Console_17      
+	shift	control	keycode  96 = VoidSymbol      
+	alt	keycode  96 = Console_5       
+	control	alt	keycode  96 = Console_5       
+keycode  97 = F6              
+	shift	keycode  97 = F16             
+	altgr	keycode  97 = Console_18      
+	shift	control	keycode  97 = VoidSymbol      
+	alt	keycode  97 = Console_6       
+	control	alt	keycode  97 = Console_6       
+keycode  98 = F7              
+	shift	keycode  98 = F17             
+	altgr	keycode  98 = Console_19      
+	shift	control	keycode  98 = VoidSymbol      
+	alt	keycode  98 = Console_7       
+	control	alt	keycode  98 = Console_7       
+keycode  99 = F3              
+	shift	keycode  99 = F13             
+	altgr	keycode  99 = Console_15      
+	shift	control	keycode  99 = VoidSymbol      
+	alt	keycode  99 = Console_3       
+	control	alt	keycode  99 = Console_3       
+keycode 100 = F8              
+	shift	keycode 100 = F18             
+	altgr	keycode 100 = Console_20      
+	shift	control	keycode 100 = VoidSymbol      
+	alt	keycode 100 = Console_8       
+	control	alt	keycode 100 = Console_8       
+keycode 101 = F9              
+	shift	keycode 101 = F19             
+	altgr	keycode 101 = Console_21      
+	shift	control	keycode 101 = VoidSymbol      
+	alt	keycode 101 = Console_9       
+	control	alt	keycode 101 = Console_9       
+keycode 102 =
+keycode 103 = F11             
+	altgr	keycode 103 = Console_23      
+	shift	control	keycode 103 = VoidSymbol      
+	alt	keycode 103 = Console_11      
+	control	alt	keycode 103 = Console_11      
+keycode 104 =
+keycode 105 = F13             
+keycode 106 =
+keycode 107 = Scroll_Lock      Show_Memory      Show_Registers   Show_State      
+	alt	keycode 107 = Scroll_Lock     
+keycode 108 =
+keycode 109 = F10             
+	shift	keycode 109 = F20             
+	altgr	keycode 109 = Console_22      
+	shift	control	keycode 109 = VoidSymbol      
+	alt	keycode 109 = Console_10      
+	control	alt	keycode 109 = Console_10      
+keycode 110 =
+keycode 111 = F12             
+	altgr	keycode 111 = Console_24      
+	shift	control	keycode 111 = VoidSymbol      
+	alt	keycode 111 = Console_12      
+	control	alt	keycode 111 = Console_12      
+keycode 112 =
+keycode 113 = Pause           
+keycode 114 = Insert          
+keycode 115 = Find            
+keycode 116 = Prior           
+	shift	keycode 116 = Scroll_Backward 
+keycode 117 = Remove          
+keycode 118 = F4              
+	shift	keycode 118 = F14             
+	altgr	keycode 118 = Console_16      
+	shift	control	keycode 118 = VoidSymbol      
+	alt	keycode 118 = Console_4       
+	control	alt	keycode 118 = Console_4       
+keycode 119 = Select          
+keycode 120 = F2              
+	shift	keycode 120 = F12             
+	altgr	keycode 120 = Console_14      
+	shift	control	keycode 120 = VoidSymbol      
+	alt	keycode 120 = Console_2       
+	control	alt	keycode 120 = Console_2       
+keycode 121 = Next            
+	shift	keycode 121 = Scroll_Forward  
+keycode 122 = F1              
+	shift	keycode 122 = F11             
+	altgr	keycode 122 = Console_13      
+	shift	control	keycode 122 = VoidSymbol      
+	alt	keycode 122 = Console_1       
+	control	alt	keycode 122 = Console_1       
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+	shift	control	keycode 127 = Boot            
diff --git a/keymaps/mac/mac-us-std.map b/keymaps/mac/mac-us-std.map
new file mode 100644
index 0000000..1edbb61
--- /dev/null
+++ b/keymaps/mac/mac-us-std.map
@@ -0,0 +1,259 @@
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+keycode   1 = s               
+keycode   2 = +d                +D                Hex_D            Control_d        Control_d        Meta_d           Meta_Control_d  
+keycode   3 = +f                +F                Hex_F            Control_f        Control_f        Meta_f           Meta_Control_f  
+keycode   4 = h               
+keycode   5 = g               
+keycode   6 = z               
+keycode   7 = x               
+keycode   8 = +c                +C                Hex_C            Control_c        Control_c        Meta_c           Meta_Control_c  
+keycode   9 = v               
+keycode  10 =
+keycode  11 = +b                +B                Hex_B            Control_b        Control_b        Meta_b           Meta_Control_b  
+keycode  12 = q               
+keycode  13 = w               
+keycode  14 = +e                +E                Hex_E            Control_e        Control_e        Meta_e           Meta_Control_e  
+keycode  15 = r               
+keycode  16 = y               
+keycode  17 = t               
+keycode  18 = one              exclam          
+	alt	keycode  18 = Meta_one        
+	control	alt	keycode  18 = Console_1        
+keycode  19 = two              at               at               nul              nul              Meta_two        
+	control	alt	keycode  19 = Console_2        
+keycode  20 = three            numbersign      
+	control	keycode  20 = Escape          
+	alt	keycode  20 = Meta_three      
+	control	alt	keycode  20 = Console_3        
+keycode  21 = four             dollar           dollar           Control_backslash
+	alt	keycode  21 = Meta_four       
+	control	alt	keycode  21 = Console_4        
+keycode  22 = six              asciicircum     
+	control	keycode  22 = Control_asciicircum
+	alt	keycode  22 = Meta_six        
+	control	alt	keycode  22 = Console_6        
+keycode  23 = five             percent         
+	control	keycode  23 = Control_bracketright
+	alt	keycode  23 = Meta_five       
+	control	alt	keycode  23 = Console_5        
+keycode  24 = equal            plus            
+	alt	keycode  24 = Meta_equal      
+keycode  25 = nine             parenleft        bracketright    
+	alt	keycode  25 = Meta_nine       
+	control	alt	keycode  25 = Console_9        
+keycode  26 = seven            ampersand        braceleft        Control_underscore
+	alt	keycode  26 = Meta_seven      
+	control	alt	keycode  26 = Console_7        
+keycode  27 = minus            underscore       backslash        Control_underscore Control_underscore Meta_minus      
+keycode  28 = eight            asterisk         bracketleft      Delete          
+	alt	keycode  28 = Meta_eight      
+	control	alt	keycode  28 = Console_8        
+keycode  29 = zero             parenright       braceright      
+	alt	keycode  29 = Meta_zero       
+	control	alt	keycode  29 = Console_10        
+keycode  30 = bracketright     braceright       asciitilde       Control_bracketright
+	alt	keycode  30 = Meta_bracketright
+keycode  31 = o               
+keycode  32 = u               
+keycode  33 = bracketleft      braceleft       
+	control	keycode  33 = Escape          
+	alt	keycode  33 = Meta_bracketleft
+keycode  34 = i               
+keycode  35 = p               
+keycode  36 = Return          
+	alt	keycode  36 = Meta_Control_m  
+keycode  37 = l               
+keycode  38 = j               
+keycode  39 = apostrophe       quotedbl        
+	control	keycode  39 = Control_g       
+	alt	keycode  39 = Meta_apostrophe 
+keycode  40 = k               
+keycode  41 = semicolon        colon           
+	alt	keycode  41 = Meta_semicolon  
+keycode  42 = backslash        bar             
+	control	keycode  42 = Control_backslash
+	alt	keycode  42 = Meta_backslash  
+keycode  43 = comma            less            
+	alt	keycode  43 = Meta_comma      
+keycode  44 = slash            question        
+	control	keycode  44 = Delete          
+	alt	keycode  44 = Meta_slash      
+keycode  45 = n               
+keycode  46 = m               
+keycode  47 = period           greater         
+	control	keycode  47 = Compose         
+	alt	keycode  47 = Meta_period     
+keycode  48 = Tab              Tab             
+	alt	keycode  48 = Meta_Tab        
+keycode  49 = space            space           
+	control	keycode  49 = nul             
+	alt	keycode  49 = Meta_space      
+keycode  50 = grave            asciitilde      
+	control	keycode  50 = nul             
+	alt	keycode  50 = Meta_grave      
+keycode  51 = Delete           Delete          
+	control	keycode  51 = BackSpace       
+	alt	keycode  51 = Meta_Delete     
+keycode  52 =
+keycode  53 = Escape           Escape          
+	alt	keycode  53 = Meta_Escape     
+keycode  54 = Control         
+keycode  55 = Alt             
+keycode  56 = Shift           
+keycode  57 = Caps_Lock       
+keycode  58 = AltGr           
+keycode  59 = Left            
+	alt	keycode  59 = Decr_Console    
+keycode  60 = Right           
+	alt	keycode  60 = Incr_Console    
+keycode  61 = Down            
+keycode  62 = Up              
+keycode  63 =
+keycode  64 =
+keycode  65 = KP_Period       
+keycode  66 =
+keycode  67 = KP_Multiply     
+keycode  68 =
+keycode  69 = KP_Add          
+keycode  70 =
+keycode  71 = Num_Lock        
+keycode  72 =
+keycode  73 =
+keycode  74 =
+keycode  75 = KP_Divide       
+keycode  76 = KP_Enter        
+keycode  77 =
+keycode  78 = KP_Subtract     
+keycode  79 =
+keycode  80 =
+keycode  81 =
+keycode  82 = KP_0            
+	altgr	keycode  82 = Hex_0           
+	alt	keycode  82 = Ascii_0         
+keycode  83 = KP_1            
+	altgr	keycode  83 = Hex_1           
+	alt	keycode  83 = Ascii_1         
+keycode  84 = KP_2            
+	altgr	keycode  84 = Hex_2           
+	alt	keycode  84 = Ascii_2         
+keycode  85 = KP_3            
+	altgr	keycode  85 = Hex_3           
+	alt	keycode  85 = Ascii_3         
+keycode  86 = KP_4            
+	altgr	keycode  86 = Hex_4           
+	alt	keycode  86 = Ascii_4         
+keycode  87 = KP_5            
+	altgr	keycode  87 = Hex_5           
+	alt	keycode  87 = Ascii_5         
+keycode  88 = KP_6            
+	altgr	keycode  88 = Hex_6           
+	alt	keycode  88 = Ascii_6         
+keycode  89 = KP_7            
+	altgr	keycode  89 = Hex_7           
+	alt	keycode  89 = Ascii_7         
+keycode  90 = +a                +A                Hex_A            Control_a        Control_a        Meta_a           Meta_Control_a  
+keycode  91 = KP_8            
+	altgr	keycode  91 = Hex_8           
+	alt	keycode  91 = Ascii_8         
+keycode  92 = KP_9            
+	altgr	keycode  92 = Hex_9           
+	alt	keycode  92 = Ascii_9         
+keycode  93 =
+keycode  94 =
+keycode  95 =
+keycode  96 = F5              
+	shift	keycode  96 = F15             
+	altgr	keycode  96 = Console_17      
+	shift	control	keycode  96 = VoidSymbol      
+	alt	keycode  96 = Console_5       
+	control	alt	keycode  96 = Console_5       
+keycode  97 = F6              
+	shift	keycode  97 = F16             
+	altgr	keycode  97 = Console_18      
+	shift	control	keycode  97 = VoidSymbol      
+	alt	keycode  97 = Console_6       
+	control	alt	keycode  97 = Console_6       
+keycode  98 = F7              
+	shift	keycode  98 = F17             
+	altgr	keycode  98 = Console_19      
+	shift	control	keycode  98 = VoidSymbol      
+	alt	keycode  98 = Console_7       
+	control	alt	keycode  98 = Console_7       
+keycode  99 = F3              
+	shift	keycode  99 = F13             
+	altgr	keycode  99 = Console_15      
+	shift	control	keycode  99 = VoidSymbol      
+	alt	keycode  99 = Console_3       
+	control	alt	keycode  99 = Console_3       
+keycode 100 = F8              
+	shift	keycode 100 = F18             
+	altgr	keycode 100 = Console_20      
+	shift	control	keycode 100 = VoidSymbol      
+	alt	keycode 100 = Console_8       
+	control	alt	keycode 100 = Console_8       
+keycode 101 = F9              
+	shift	keycode 101 = F19             
+	altgr	keycode 101 = Console_21      
+	shift	control	keycode 101 = VoidSymbol      
+	alt	keycode 101 = Console_9       
+	control	alt	keycode 101 = Console_9       
+keycode 102 =
+keycode 103 = F11             
+	altgr	keycode 103 = Console_23      
+	shift	control	keycode 103 = VoidSymbol      
+	alt	keycode 103 = Console_11      
+	control	alt	keycode 103 = Console_11      
+keycode 104 =
+keycode 105 = F13             
+keycode 106 =
+keycode 107 = Scroll_Lock      Show_Memory      Show_Registers   Show_State      
+	alt	keycode 107 = Scroll_Lock     
+keycode 108 =
+keycode 109 = F10             
+	shift	keycode 109 = F20             
+	altgr	keycode 109 = Console_22      
+	shift	control	keycode 109 = VoidSymbol      
+	alt	keycode 109 = Console_10      
+	control	alt	keycode 109 = Console_10      
+keycode 110 =
+keycode 111 = F12             
+	altgr	keycode 111 = Console_24      
+	shift	control	keycode 111 = VoidSymbol      
+	alt	keycode 111 = Console_12      
+	control	alt	keycode 111 = Console_12      
+keycode 112 =
+keycode 113 = Pause           
+keycode 114 = Insert          
+keycode 115 = Find            
+keycode 116 = Prior           
+	shift	keycode 116 = Scroll_Backward 
+keycode 117 = Remove          
+keycode 118 = F4              
+	shift	keycode 118 = F14             
+	altgr	keycode 118 = Console_16      
+	shift	control	keycode 118 = VoidSymbol      
+	alt	keycode 118 = Console_4       
+	control	alt	keycode 118 = Console_4       
+keycode 119 = Select          
+keycode 120 = F2              
+	shift	keycode 120 = F12             
+	altgr	keycode 120 = Console_14      
+	shift	control	keycode 120 = VoidSymbol      
+	alt	keycode 120 = Console_2       
+	control	alt	keycode 120 = Console_2       
+keycode 121 = Next            
+	shift	keycode 121 = Scroll_Forward  
+keycode 122 = F1              
+	shift	keycode 122 = F11             
+	altgr	keycode 122 = Console_13      
+	shift	control	keycode 122 = VoidSymbol      
+	alt	keycode 122 = Console_1       
+	control	alt	keycode 122 = Console_1       
+keycode 123 =
+keycode 124 =
+keycode 125 =
+keycode 126 =
+keycode 127 =
+	shift	control	keycode 127 = Boot            
diff --git a/keymaps/sun/sun-pl-altgraph.map b/keymaps/sun/sun-pl-altgraph.map
new file mode 100644
index 0000000..8b2b857
--- /dev/null
+++ b/keymaps/sun/sun-pl-altgraph.map
@@ -0,0 +1,394 @@
+# Keyboard map for the Sun Type4/Type5 keyboards
+# found on SparcStations
+# Polish version - 1998 rzm@icm.edu.pl
+keymaps 0-5,8,12
+#
+#
+# Stop/L1
+keycode	0x01 =
+# SND_LOWER
+keycode	0x02 =
+# Again/L2
+keycode	0x03 =
+# SND_LOUDER
+keycode	0x04 =
+keycode	0x05 = F1			F11	Console_13
+	control	keycode			0x05 = F1
+	alt	keycode			0x05 = Console_1
+	control	alt	keycode		0x05 = Console_1
+keycode	0x06 = F2			F12	Console_14
+	control	keycode			0x06 = F2
+	alt	keycode			0x06 = Console_2
+	control	alt	keycode		0x06 = Console_2
+keycode	0x07 = F10			F20	Console_22
+	control	keycode			0x07 = F10
+	alt	keycode			0x07 = Console_10
+	control	alt	keycode		0x07 = Console_10
+keycode	0x08 = F3			F13	Console_15
+	control	keycode			0x08 = F3
+	alt	keycode			0x08 = Console_3
+	control	alt	keycode		0x08 = Console_3
+keycode	0x09 = F11			F11	Console_23
+	control	keycode			0x09 = F11
+	alt	keycode			0x09 = Console_11
+	control	alt	keycode		0x09 = Console_11
+keycode	0x0a = F4			F14	Console_16
+	control	keycode			0x0a = F4
+	alt	keycode			0x0a = Console_4
+	control	alt	keycode		0x0a = Console_4
+keycode	0x0b = F12			F12	Console_24
+	control	keycode			0x0b = F12
+	alt	keycode			0x0b = Console_12
+	control	alt	keycode		0x0b = Console_12
+keycode	0x0c = F5			F15	Console_17
+	control	Keycode			0x0c = F5
+	alt	keycode			0x0c = Console_5
+	control	alt	keycode		0x0c = Console_5
+keycode	0x0d = AltGr
+keycode 0x0e = F6			F16	Console_18
+	control	keycode			0x0e = F6
+	alt	keycode			0x0e = Console_6
+	control	alt	keycode		0x0e = Console_6
+# BLANK KEY on type 5 keyboards
+keycode 0x0f =
+keycode 0x10 = F7			F17	Console_19
+	control	keycode			0x10 = F7
+	alt	keycode			0x10 = Console_7
+	control	alt	keycode		0x10 = Console_7
+keycode 0x11 = F8			F18	Console_20
+	control	keycode			0x11 = F8
+	alt	keycode			0x11 = Console_8
+	control	alt	keycode		0x11 = Console_8
+keycode 0x12 = F9			F19	Console_21
+	control	keycode			0x12 = F9
+	alt	keycode			0x12 = Console_9
+	control	alt	keycode		0x12 = Console_9
+keycode 0x13 = Alt
+keycode 0x14 = Up
+keycode 0x15 = Pause
+# Print Screen
+keycode 0x16 = 
+keycode 0x17 = Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode				0x17 = Show_State
+	alt	keycode				0x17 = Scroll_Lock
+keycode 0x18 = Left
+	alt	keycode				0x18 = Decr_Console
+# Props/L3
+keycode 0x19 =
+# UNDO/L4
+keycode 0x1a =
+keycode 0x1b = Down
+keycode 0x1c = Right
+	alt	keycode				0x1c = Incr_Console
+keycode 0x1d = Escape		Escape
+	alt	keycode				0x1d = Meta_Escape
+keycode 0x1e = one		exclam
+	alt	keycode				0x1e = Meta_one
+keycode 0x1f = two		at		at
+	control	keycode				0x1f = nul
+	shift	control	keycode			0x1f = nul
+	alt	keycode				0x1f = Meta_two
+keycode 0x20 = three		numbersign
+	control	keycode				0x20 = Escape
+	alt	keycode				0x20 = Meta_three
+keycode 0x21 = four		dollar		dollar
+	control	keycode				0x21 = Control_backslash
+	alt	keycode				0x21 = Meta_four
+keycode 0x22 = five		percent
+	control	keycode				0x22 = Control_bracketright
+	alt	keycode				0x22 = Meta_five
+keycode 0x23 = six		asciicircum
+	control	keycode				0x23 = Control_asciicircum
+	alt	keycode				0x23 = Meta_six
+keycode 0x24 = seven		ampersand	braceleft
+	control	keycode				0x24 = Control_underscore
+	alt	keycode				0x24 = Meta_seven
+keycode 0x25 = eight		asterisk	bracketleft
+	control	keycode				0x25 = Delete
+	alt	keycode				0x25 = Meta_eight
+keycode 0x26 = nine		parenleft	bracketright
+	alt	keycode				0x26 = Meta_nine
+keycode 0x27 = zero		parenright	braceright
+	alt	keycode				0x27 = Meta_zero
+keycode 0x28 = minus		underscore	backslash
+	control	keycode				0x28 = Control_underscore
+	shift	control	keycode			0x28 = Control_underscore
+	alt	keycode				0x28 = Meta_minus
+keycode 0x29 = equal		plus
+	alt	keycode				0x29 = Meta_equal
+keycode 0x2a = grave		asciitilde
+	control	keycode				0x2a = nul
+	alt	keycode				0x2a = Meta_grave
+# Is marked as BackSpace but we define it as delete just like the i386
+# keyboard maps does
+keycode 0x2b = Delete		Delete
+	control	keycode				0x2b = BackSpace
+	alt	keycode				0x2b = Meta_Delete
+keycode 0x2c = Insert
+# This is really keypad = on type 4 keyboards
+keycode 0x2d = equal
+keycode 0x2e = KP_Divide
+keycode 0x2f = KP_Multiply
+# Power ON/OFF key on type 5 keyboard
+keycode 0x30 =
+# FRONT/L5
+keycode 0x31 = 
+keycode 0x32 = KP_Period
+#	altgr	control	keycode			0x32 = Boot
+	control	alt	keycode			0x32 = Boot
+# COPY/L6
+keycode 0x33 =
+# Home key, same difference
+keycode 0x34 = Find
+keycode 0x35 = Tab		Tab
+	alt	keycode				0x35 = Meta_Tab
+keycode 0x36 = q
+keycode 0x37 = w
+keycode 0x38 = e
+#	altgr	keycode				0x38 = Hex_E
+	altgr		keycode			0x38 = +eogonek
+	altgr shift	keycode			0x38 = +Eogonek
+keycode 0x39 = r
+keycode 0x3a = t
+keycode 0x3b = y
+keycode 0x3c = u
+keycode 0x3d = i
+keycode 0x3e = o
+	altgr		keycode			0x3e = +oacute
+	altgr shift	keycode			0x3e = +Oacute
+keycode 0x3f = p
+keycode 0x40 = bracketleft	braceleft
+	control	keycode				0x40 = Escape
+	alt	keycode				0x40 = Meta_bracketleft
+keycode 0x41 = bracketright	braceright	asciitilde
+	control	keycode				0x41 = Control_bracketright
+	alt	keycode				0x41 = Meta_bracketright
+keycode 0x42 = Delete		Delete
+	control	keycode				0x42 = BackSpace
+	alt	keycode				0x43 = Meta_Delete
+	control	alt	keycode			0x42 = Boot
+keycode 0x43 = Compose
+keycode 0x44 = KP_7
+	alt	keycode				0x44 = Ascii_7
+	altgr	keycode				0x44 = Hex_7
+keycode 0x45 = KP_8
+	alt	keycode				0x45 = Ascii_8
+	altgr	keycode				0x45 = Hex_8
+keycode 0x46 = KP_9
+	alt	keycode				0x46 = Ascii_9
+	altgr	keycode				0x46 = Hex_9
+keycode 0x47 = KP_Subtract
+# OPEN/L6
+keycode 0x48 = 
+# PASTE/L8
+keycode 0x49 =
+keycode 0x4a = Select
+# No key produces 0x4b to my knowledge
+keycode 0x4b =
+keycode 0x4c = Control
+keycode 0x4d = a
+#	altgr	keycode				0x4d = Hex_A
+	altgr		keycode			0x4d = +aogonek
+	altgr shift	keycode			0x4d = +Aogonek
+keycode 0x4e = s
+	altgr		keycode			0x4e = +sacute
+	altgr shift	keycode			0x4e = +Sacute
+keycode 0x4f = d
+	altgr	keycode				0x4f = Hex_D
+keycode 0x50 = f
+	altgr	keycode				0x50 = Hex_F
+keycode 0x51 = g
+keycode 0x52 = h
+keycode 0x53 = j
+keycode 0x54 = k
+keycode 0x55 = l
+	altgr		keycode			0x55 = +lstroke
+	altgr shift	keycode			0x55 = +Lstroke
+keycode 0x56 = semicolon	colon
+	alt	keycode				0x56 = Meta_semicolon
+keycode 0x57 = apostrophe	quotedbl
+	control	keycode				0x57 = Control_g
+	alt	keycode				0x57 = Meta_apostrophe
+keycode 0x58 = backslash	bar
+	control	keycode				0x58 = Control_backslash
+	alt	keycode				0x58 = Meta_backslash
+keycode 0x59 = Return
+	alt	keycode				0x59 = Meta_Control_m
+keycode 0x5a = KP_Enter
+keycode 0x5b = KP_4
+	alt	keycode				0x5b = Ascii_4
+	altgr	keycode				0x5b = Hex_4
+keycode 0x5c = KP_5
+	alt	keycode				0x5c = Ascii_5
+	altgr	keycode				0x5c = Hex_5
+keycode 0x5d = KP_6
+	alt	keycode				0x5d = Ascii_6
+	altgr	keycode				0x5d = Hex_6
+keycode 0x5e = KP_0
+	alt	keycode				0x5e = Ascii_0
+	altgr	keycode				0x5e = Hex_0
+# FIND/L9
+keycode 0x5f =
+keycode 0x60 = Prior
+	shift	keycode				0x60 = Scroll_Backward
+# CUT/L10
+keycode 0x61 =
+keycode 0x62 = Num_Lock
+# Linux/i386 console makes no distinction between right/left shift
+# so neither do we.
+keycode 0x63 = Shift
+keycode 0x64 = z
+	altgr		keycode			0x64 = +zabovedot
+	altgr shift	keycode			0x64 = +Zabovedot
+keycode 0x65 = x
+	altgr		keycode			0x65 = +zacute
+	altgr shift	keycode			0x65 = +Zacute
+keycode 0x66 = c
+#	altgr	keycode				0x66 = Hex_C
+	altgr		keycode			0x66 = +cacute
+	altgr shift	keycode			0x66 = +Cacute
+keycode 0x67 = v
+keycode 0x68 = b
+	altgr	keycode				0x68 = Hex_B
+keycode 0x69 = n
+	altgr		keycode			0x69 = +nacute
+	altgr shift	keycode			0x69 = +Nacute
+keycode 0x6a = m
+keycode 0x6b = comma		less
+	alt	keycode				0x6b = Meta_comma
+keycode 0x6c = period		greater
+	control	keycode				0x6c = Compose
+	alt	keycode				0x6c = Meta_period
+keycode 0x6d = slash		question
+	control	keycode				0x6d = Delete
+	alt	keycode				0x6d = Meta_slash
+keycode 0x6e = Shift
+keycode 0x6f = Linefeed
+keycode 0x70 = KP_1
+	alt	keycode				0x70 = Ascii_1
+	altgr	keycode				0x70 = Hex_1
+keycode 0x71 = KP_2
+	alt	keycode				0x71 = Ascii_2
+	altgr	keycode				0x71 = Hex_2
+keycode 0x72 = KP_3
+	alt	keycode				0x72 = Ascii_3
+	altgr	keycode				0x72 = Hex_3
+# To my knowledge no key produces 0x73, 0x74, or 0x75
+keycode 0x73 =
+keycode 0x74 =
+keycode 0x75 =
+keycode 0x76 = Help
+keycode 0x77 = Caps_Lock
+# A True Meta-key, unused at this time
+keycode 0x78 =
+keycode 0x79 = space		space
+	control	keycode				0x79 = nul
+	alt	keycode				0x79 = Meta_space
+# Another real Meta-key, again unused
+keycode 0x7a =
+keycode 0x7b = Next
+	shift	keycode				0x7b = Scroll_Forward
+# No keys produce the following
+keycode 0x7c =
+keycode 0x7d = KP_Add
+keycode 0x7e =
+# keycode 0x7f is special and it means 'all keys released' and is
+# taken care of within the sun keyboard driver itself
+keycode 0x7f =
+# That's all folks...
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose '"' 'y' to 'ÿ'
+compose 's' 'z' to 'ß'
+compose 'i' 'j' to 'ÿ'
diff --git a/keymaps/sun/sun-pl.map b/keymaps/sun/sun-pl.map
new file mode 100644
index 0000000..049f952
--- /dev/null
+++ b/keymaps/sun/sun-pl.map
@@ -0,0 +1,415 @@
+# Keyboard map for the Sun Type4/Type5 keyboards
+# found on SparcStations
+#
+# Polish version - 1998 Rafa³ Maszkowski <rzm@icm.edu.pl>
+# 19980221 Meta_R used as CtrlR
+#
+keymaps 0-5,8,12,128-129
+#
+#
+# Stop/L1
+keycode	0x01 =
+# SND_LOWER
+keycode	0x02 =
+# Again/L2
+keycode	0x03 =
+# SND_LOUDER
+keycode	0x04 =
+keycode	0x05 = F1			F11	Console_13
+	control	keycode			0x05 = F1
+	alt	keycode			0x05 = Console_1
+	control	alt	keycode		0x05 = Console_1
+keycode	0x06 = F2			F12	Console_14
+	control	keycode			0x06 = F2
+	alt	keycode			0x06 = Console_2
+	control	alt	keycode		0x06 = Console_2
+keycode	0x07 = F10			F20	Console_22
+	control	keycode			0x07 = F10
+	alt	keycode			0x07 = Console_10
+	control	alt	keycode		0x07 = Console_10
+keycode	0x08 = F3			F13	Console_15
+	control	keycode			0x08 = F3
+	alt	keycode			0x08 = Console_3
+	control	alt	keycode		0x08 = Console_3
+keycode	0x09 = F11			F11	Console_23
+	control	keycode			0x09 = F11
+	alt	keycode			0x09 = Console_11
+	control	alt	keycode		0x09 = Console_11
+keycode	0x0a = F4			F14	Console_16
+	control	keycode			0x0a = F4
+	alt	keycode			0x0a = Console_4
+	control	alt	keycode		0x0a = Console_4
+keycode	0x0b = F12			F12	Console_24
+	control	keycode			0x0b = F12
+	alt	keycode			0x0b = Console_12
+	control	alt	keycode		0x0b = Console_12
+keycode	0x0c = F5			F15	Console_17
+	control	Keycode			0x0c = F5
+	alt	keycode			0x0c = Console_5
+	control	alt	keycode		0x0c = Console_5
+keycode	0x0d = AltGr
+keycode 0x0e = F6			F16	Console_18
+	control	keycode			0x0e = F6
+	alt	keycode			0x0e = Console_6
+	control	alt	keycode		0x0e = Console_6
+# BLANK KEY on type 5 keyboards
+keycode 0x0f =
+keycode 0x10 = F7			F17	Console_19
+	control	keycode			0x10 = F7
+	alt	keycode			0x10 = Console_7
+	control	alt	keycode		0x10 = Console_7
+keycode 0x11 = F8			F18	Console_20
+	control	keycode			0x11 = F8
+	alt	keycode			0x11 = Console_8
+	control	alt	keycode		0x11 = Console_8
+keycode 0x12 = F9			F19	Console_21
+	control	keycode			0x12 = F9
+	alt	keycode			0x12 = Console_9
+	control	alt	keycode		0x12 = Console_9
+keycode 0x13 = Alt
+keycode 0x14 = Up
+keycode 0x15 = Pause
+# Print Screen
+keycode 0x16 = 
+keycode 0x17 = Scroll_Lock	Show_Memory	Show_Registers
+	control	keycode				0x17 = Show_State
+	alt	keycode				0x17 = Scroll_Lock
+keycode 0x18 = Left
+	alt	keycode				0x18 = Decr_Console
+# Props/L3
+keycode 0x19 =
+# UNDO/L4
+keycode 0x1a =
+keycode 0x1b = Down
+keycode 0x1c = Right
+	alt	keycode				0x1c = Incr_Console
+keycode 0x1d = Escape		Escape
+	alt	keycode				0x1d = Meta_Escape
+keycode 0x1e = one		exclam
+	alt	keycode				0x1e = Meta_one
+keycode 0x1f = two		at		at
+	control	keycode				0x1f = nul
+	shift	control	keycode			0x1f = nul
+	alt	keycode				0x1f = Meta_two
+keycode 0x20 = three		numbersign
+	control	keycode				0x20 = Escape
+	alt	keycode				0x20 = Meta_three
+keycode 0x21 = four		dollar		dollar
+	control	keycode				0x21 = Control_backslash
+	alt	keycode				0x21 = Meta_four
+keycode 0x22 = five		percent
+	control	keycode				0x22 = Control_bracketright
+	alt	keycode				0x22 = Meta_five
+keycode 0x23 = six		asciicircum
+	control	keycode				0x23 = Control_asciicircum
+	alt	keycode				0x23 = Meta_six
+keycode 0x24 = seven		ampersand	braceleft
+	control	keycode				0x24 = Control_underscore
+	alt	keycode				0x24 = Meta_seven
+keycode 0x25 = eight		asterisk	bracketleft
+	control	keycode				0x25 = Delete
+	alt	keycode				0x25 = Meta_eight
+keycode 0x26 = nine		parenleft	bracketright
+	alt	keycode				0x26 = Meta_nine
+keycode 0x27 = zero		parenright	braceright
+	alt	keycode				0x27 = Meta_zero
+keycode 0x28 = minus		underscore	backslash
+	control	keycode				0x28 = Control_underscore
+	shift	control	keycode			0x28 = Control_underscore
+	alt	keycode				0x28 = Meta_minus
+keycode 0x29 = equal		plus
+	alt	keycode				0x29 = Meta_equal
+keycode 0x2a = grave		asciitilde
+	control	keycode				0x2a = nul
+	alt	keycode				0x2a = Meta_grave
+# Is marked as BackSpace but we define it as delete just like the i386
+# keyboard maps does
+keycode 0x2b = Delete		Delete
+	control	keycode				0x2b = BackSpace
+	alt	keycode				0x2b = Meta_Delete
+keycode 0x2c = Insert
+# This is really keypad = on type 4 keyboards
+keycode 0x2d = equal
+keycode 0x2e = KP_Divide
+keycode 0x2f = KP_Multiply
+# Power ON/OFF key on type 5 keyboard
+keycode 0x30 =
+# FRONT/L5
+keycode 0x31 = 
+keycode 0x32 = KP_Period
+#	AltGr	control	keycode			0x32 = Boot
+	control	alt	keycode			0x32 = Boot
+# COPY/L6
+keycode 0x33 =
+# Home key, same difference
+keycode 0x34 = Find
+keycode 0x35 = Tab		Tab
+	alt	keycode				0x35 = Meta_Tab
+keycode 0x36 = q
+keycode 0x37 = w
+keycode 0x38 = e
+#	AltGr	keycode				0x38 = Hex_E
+	AltGr		keycode			0x38 = +eogonek
+	AltGr Shift	keycode			0x38 = +Eogonek
+	CtrlR		keycode			0x38 = +eogonek
+	CtrlR Shift	keycode			0x38 = +Eogonek
+keycode 0x39 = r
+keycode 0x3a = t
+keycode 0x3b = y
+keycode 0x3c = u
+keycode 0x3d = i
+keycode 0x3e = o
+	AltGr		keycode			0x3e = +oacute
+	AltGr Shift	keycode			0x3e = +Oacute
+	CtrlR		keycode			0x3e = +oacute
+	CtrlR Shift	keycode			0x3e = +Oacute
+keycode 0x3f = p
+keycode 0x40 = bracketleft	braceleft
+	control	keycode				0x40 = Escape
+	alt	keycode				0x40 = Meta_bracketleft
+keycode 0x41 = bracketright	braceright	asciitilde
+	control	keycode				0x41 = Control_bracketright
+	alt	keycode				0x41 = Meta_bracketright
+keycode 0x42 = Delete		Delete
+	control	keycode				0x42 = BackSpace
+	alt	keycode				0x43 = Meta_Delete
+	control	alt	keycode			0x42 = Boot
+keycode 0x43 = Compose
+keycode 0x44 = KP_7
+	alt	keycode				0x44 = Ascii_7
+	AltGr	keycode				0x44 = Hex_7
+keycode 0x45 = KP_8
+	alt	keycode				0x45 = Ascii_8
+	AltGr	keycode				0x45 = Hex_8
+keycode 0x46 = KP_9
+	alt	keycode				0x46 = Ascii_9
+	AltGr	keycode				0x46 = Hex_9
+keycode 0x47 = KP_Subtract
+# OPEN/L6
+keycode 0x48 = 
+# PASTE/L8
+keycode 0x49 =
+keycode 0x4a = Select
+# No key produces 0x4b to my knowledge
+keycode 0x4b =
+keycode 0x4c = Control
+keycode 0x4d = a
+#	AltGr	keycode				0x4d = Hex_A
+	AltGr		keycode			0x4d = +aogonek
+	AltGr Shift	keycode			0x4d = +Aogonek
+	CtrlR		keycode			0x4d = +aogonek
+	CtrlR Shift	keycode			0x4d = +Aogonek
+keycode 0x4e = s
+	AltGr		keycode			0x4e = +sacute
+	AltGr Shift	keycode			0x4e = +Sacute
+	CtrlR		keycode			0x4e = +sacute
+	CtrlR Shift	keycode			0x4e = +Sacute
+keycode 0x4f = d
+	AltGr	keycode				0x4f = Hex_D
+keycode 0x50 = f
+	AltGr	keycode				0x50 = Hex_F
+keycode 0x51 = g
+keycode 0x52 = h
+keycode 0x53 = j
+keycode 0x54 = k
+keycode 0x55 = l
+	AltGr		keycode			0x55 = +lstroke
+	AltGr Shift	keycode			0x55 = +Lstroke
+	CtrlR		keycode			0x55 = +lstroke
+	CtrlR Shift	keycode			0x55 = +Lstroke
+keycode 0x56 = semicolon	colon
+	alt	keycode				0x56 = Meta_semicolon
+keycode 0x57 = apostrophe	quotedbl
+	control	keycode				0x57 = Control_g
+	alt	keycode				0x57 = Meta_apostrophe
+keycode 0x58 = backslash	bar
+	control	keycode				0x58 = Control_backslash
+	alt	keycode				0x58 = Meta_backslash
+keycode 0x59 = Return
+	alt	keycode				0x59 = Meta_Control_m
+keycode 0x5a = KP_Enter
+keycode 0x5b = KP_4
+	alt	keycode				0x5b = Ascii_4
+	AltGr	keycode				0x5b = Hex_4
+keycode 0x5c = KP_5
+	alt	keycode				0x5c = Ascii_5
+	AltGr	keycode				0x5c = Hex_5
+keycode 0x5d = KP_6
+	alt	keycode				0x5d = Ascii_6
+	AltGr	keycode				0x5d = Hex_6
+keycode 0x5e = KP_0
+	alt	keycode				0x5e = Ascii_0
+	AltGr	keycode				0x5e = Hex_0
+# FIND/L9
+keycode 0x5f =
+keycode 0x60 = Prior
+	shift	keycode				0x60 = Scroll_Backward
+# CUT/L10
+keycode 0x61 =
+keycode 0x62 = Num_Lock
+# Linux/i386 console makes no distinction between right/left shift
+# so neither do we.
+keycode 0x63 = Shift
+keycode 0x64 = z
+	AltGr		keycode			0x64 = +zabovedot
+	AltGr Shift	keycode			0x64 = +Zabovedot
+	CtrlR		keycode			0x64 = +zabovedot
+	CtrlR Shift	keycode			0x64 = +Zabovedot
+keycode 0x65 = x
+	AltGr		keycode			0x65 = +zacute
+	AltGr Shift	keycode			0x65 = +Zacute
+	CtrlR		keycode			0x65 = +zacute
+	CtrlR Shift	keycode			0x65 = +Zacute
+keycode 0x66 = c
+#	AltGr	keycode				0x66 = Hex_C
+	AltGr		keycode			0x66 = +cacute
+	AltGr Shift	keycode			0x66 = +Cacute
+	CtrlR		keycode			0x66 = +cacute
+	CtrlR Shift	keycode			0x66 = +Cacute
+keycode 0x67 = v
+keycode 0x68 = b
+	AltGr	keycode				0x68 = Hex_B
+keycode 0x69 = n
+	AltGr		keycode			0x69 = +nacute
+	AltGr Shift	keycode			0x69 = +Nacute
+	CtrlR		keycode			0x69 = +nacute
+	CtrlR Shift	keycode			0x69 = +Nacute
+keycode 0x6a = m
+keycode 0x6b = comma		less
+	alt	keycode				0x6b = Meta_comma
+keycode 0x6c = period		greater
+	control	keycode				0x6c = Compose
+	alt	keycode				0x6c = Meta_period
+keycode 0x6d = slash		question
+	control	keycode				0x6d = Delete
+	alt	keycode				0x6d = Meta_slash
+keycode 0x6e = Shift
+keycode 0x6f = Linefeed
+keycode 0x70 = KP_1
+	alt	keycode				0x70 = Ascii_1
+	AltGr	keycode				0x70 = Hex_1
+keycode 0x71 = KP_2
+	alt	keycode				0x71 = Ascii_2
+	AltGr	keycode				0x71 = Hex_2
+keycode 0x72 = KP_3
+	alt	keycode				0x72 = Ascii_3
+	AltGr	keycode				0x72 = Hex_3
+# To my knowledge no key produces 0x73, 0x74, or 0x75
+keycode 0x73 =
+keycode 0x74 =
+keycode 0x75 =
+keycode 0x76 = Help
+keycode 0x77 = Caps_Lock
+# A True Meta-key, unused at this time
+keycode 0x78 =
+keycode 0x79 = space		space
+	control	keycode				0x79 = nul
+	alt	keycode				0x79 = Meta_space
+# Another real Meta-key, Meta_R, left from space, more convenient for Polish characters
+keycode 0x7a = CtrlR
+keycode 0x7b = Next
+	shift	keycode				0x7b = Scroll_Forward
+# No keys produce the following
+keycode 0x7c =
+keycode 0x7d = KP_Add
+keycode 0x7e =
+# keycode 0x7f is special and it means 'all keys released' and is
+# taken care of within the sun keyboard driver itself
+keycode 0x7f =
+# That's all folks...
+string F1 = "\033[[A"
+string F2 = "\033[[B"
+string F3 = "\033[[C"
+string F4 = "\033[[D"
+string F5 = "\033[[E"
+string F6 = "\033[17~"
+string F7 = "\033[18~"
+string F8 = "\033[19~"
+string F9 = "\033[20~"
+string F10 = "\033[21~"
+string F11 = "\033[23~"
+string F12 = "\033[24~"
+string F13 = "\033[25~"
+string F14 = "\033[26~"
+string F15 = "\033[28~"
+string F16 = "\033[29~"
+string F17 = "\033[31~"
+string F18 = "\033[32~"
+string F19 = "\033[33~"
+string F20 = "\033[34~"
+string Find = "\033[1~"
+string Insert = "\033[2~"
+string Remove = "\033[3~"
+string Select = "\033[4~"
+string Prior = "\033[5~"
+string Next = "\033[6~"
+string Macro = "\033[M"
+string Pause = "\033[P"
+compose '`' 'A' to 'À'
+compose '`' 'a' to 'à'
+compose '\'' 'A' to 'Á'
+compose '\'' 'a' to 'á'
+compose '^' 'A' to 'Â'
+compose '^' 'a' to 'â'
+compose '~' 'A' to 'Ã'
+compose '~' 'a' to 'ã'
+compose '"' 'A' to 'Ä'
+compose '"' 'a' to 'ä'
+compose 'O' 'A' to 'Å'
+compose 'o' 'a' to 'å'
+compose '0' 'A' to 'Å'
+compose '0' 'a' to 'å'
+compose 'A' 'A' to 'Å'
+compose 'a' 'a' to 'å'
+compose 'A' 'E' to 'Æ'
+compose 'a' 'e' to 'æ'
+compose ',' 'C' to 'Ç'
+compose ',' 'c' to 'ç'
+compose '`' 'E' to 'È'
+compose '`' 'e' to 'è'
+compose '\'' 'E' to 'É'
+compose '\'' 'e' to 'é'
+compose '^' 'E' to 'Ê'
+compose '^' 'e' to 'ê'
+compose '"' 'E' to 'Ë'
+compose '"' 'e' to 'ë'
+compose '`' 'I' to 'Ì'
+compose '`' 'i' to 'ì'
+compose '\'' 'I' to 'Í'
+compose '\'' 'i' to 'í'
+compose '^' 'I' to 'Î'
+compose '^' 'i' to 'î'
+compose '"' 'I' to 'Ï'
+compose '"' 'i' to 'ï'
+compose '-' 'D' to 'Ð'
+compose '-' 'd' to 'ð'
+compose '~' 'N' to 'Ñ'
+compose '~' 'n' to 'ñ'
+compose '`' 'O' to 'Ò'
+compose '`' 'o' to 'ò'
+compose '\'' 'O' to 'Ó'
+compose '\'' 'o' to 'ó'
+compose '^' 'O' to 'Ô'
+compose '^' 'o' to 'ô'
+compose '~' 'O' to 'Õ'
+compose '~' 'o' to 'õ'
+compose '"' 'O' to 'Ö'
+compose '"' 'o' to 'ö'
+compose '/' 'O' to 'Ø'
+compose '/' 'o' to 'ø'
+compose '`' 'U' to 'Ù'
+compose '`' 'u' to 'ù'
+compose '\'' 'U' to 'Ú'
+compose '\'' 'u' to 'ú'
+compose '^' 'U' to 'Û'
+compose '^' 'u' to 'û'
+compose '"' 'U' to 'Ü'
+compose '"' 'u' to 'ü'
+compose '\'' 'Y' to 'Ý'
+compose '\'' 'y' to 'ý'
+compose 'T' 'H' to 'Þ'
+compose 't' 'h' to 'þ'
+compose 's' 's' to 'ß'
+compose '"' 'y' to 'ÿ'
+compose 's' 'z' to 'ß'
+compose 'i' 'j' to 'ÿ'
diff --git a/keymaps/sun/sunkeymap.map b/keymaps/sun/sunkeymap.map
new file mode 100644
index 0000000..ff06a36
--- /dev/null
+++ b/keymaps/sun/sunkeymap.map
@@ -0,0 +1,281 @@
+# Keyboard map for the Sun Type4/Type5 keyboards
+# found on SparcStations
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+#
+#
+# Stop/L1
+keycode        0x01 =
+# SND_LOWER
+keycode        0x02 =
+# Again/L2
+keycode        0x03 =
+# SND_LOUDER
+keycode        0x04 =
+keycode        0x05 = F1                       F11     Console_13
+       control keycode                 0x05 = F1
+       alt     keycode                 0x05 = Console_1
+       control alt     keycode         0x05 = Console_1
+keycode        0x06 = F2                       F12     Console_14
+       control keycode                 0x06 = F2
+       alt     keycode                 0x06 = Console_2
+       control alt     keycode         0x06 = Console_2
+keycode        0x07 = F10                      F20     Console_22
+       control keycode                 0x07 = F10
+       alt     keycode                 0x07 = Console_10
+       control alt     keycode         0x07 = Console_10
+keycode        0x08 = F3                       F13     Console_15
+       control keycode                 0x08 = F3
+       alt     keycode                 0x08 = Console_3
+       control alt     keycode         0x08 = Console_3
+keycode        0x09 = F11                      F11     Console_23
+       control keycode                 0x09 = F11
+       alt     keycode                 0x09 = Console_11
+       control alt     keycode         0x09 = Console_11
+keycode        0x0a = F4                       F14     Console_16
+       control keycode                 0x0a = F4
+       alt     keycode                 0x0a = Console_4
+       control alt     keycode         0x0a = Console_4
+keycode        0x0b = F12                      F12     Console_24
+       control keycode                 0x0b = F12
+       alt     keycode                 0x0b = Console_12
+       control alt     keycode         0x0b = Console_12
+keycode        0x0c = F5                       F15     Console_17
+       control Keycode                 0x0c = F5
+       alt     keycode                 0x0c = Console_5
+       control alt     keycode         0x0c = Console_5
+keycode        0x0d = AltGr
+keycode 0x0e = F6                      F16     Console_18
+       control keycode                 0x0e = F6
+       alt     keycode                 0x0e = Console_6
+       control alt     keycode         0x0e = Console_6
+# BLANK KEY on type 5 keyboards
+keycode 0x0f =
+keycode 0x10 = F7                      F17     Console_19
+       control keycode                 0x10 = F7
+       alt     keycode                 0x10 = Console_7
+       control alt     keycode         0x10 = Console_7
+keycode 0x11 = F8                      F18     Console_20
+       control keycode                 0x11 = F8
+       alt     keycode                 0x11 = Console_8
+       control alt     keycode         0x11 = Console_8
+keycode 0x12 = F9                      F19     Console_21
+       control keycode                 0x12 = F9
+       alt     keycode                 0x12 = Console_9
+       control alt     keycode         0x12 = Console_9
+keycode 0x13 = Alt
+keycode 0x14 = Up
+keycode 0x15 = Pause
+# Print Screen
+keycode 0x16 =
+keycode 0x17 = Scroll_Lock     Show_Memory     Show_Registers
+       control keycode                         0x17 = Show_State
+       alt     keycode                         0x17 = Scroll_Lock
+keycode 0x18 = Left
+       alt     keycode                         0x18 = Decr_Console
+# Props/L3
+keycode 0x19 =
+# UNDO/L4
+keycode 0x1a =
+keycode 0x1b = Down
+keycode 0x1c = Right
+       alt     keycode                         0x1c = Incr_Console
+keycode 0x1d = Escape          Escape
+       alt     keycode                         0x1d = Meta_Escape
+keycode 0x1e = one             exclam
+       alt     keycode                         0x1e = Meta_one
+keycode 0x1f = two             at              at
+       control keycode                         0x1f = nul
+       shift   control keycode                 0x1f = nul
+       alt     keycode                         0x1f = Meta_two
+keycode 0x20 = three           numbersign
+       control keycode                         0x20 = Escape
+       alt     keycode                         0x20 = Meta_three
+keycode 0x21 = four            dollar          dollar
+       control keycode                         0x21 = Control_backslash
+       alt     keycode                         0x21 = Meta_four
+keycode 0x22 = five            percent
+       control keycode                         0x22 = Control_bracketright
+       alt     keycode                         0x22 = Meta_five
+keycode 0x23 = six             asciicircum
+       control keycode                         0x23 = Control_asciicircum
+       alt     keycode                         0x23 = Meta_six
+keycode 0x24 = seven           ampersand       braceleft
+       control keycode                         0x24 = Control_underscore
+       alt     keycode                         0x24 = Meta_seven
+keycode 0x25 = eight           asterisk        bracketleft
+       control keycode                         0x25 = Delete
+       alt     keycode                         0x25 = Meta_eight
+keycode 0x26 = nine            parenleft       bracketright
+       alt     keycode                         0x26 = Meta_nine
+keycode 0x27 = zero            parenright      braceright
+       alt     keycode                         0x27 = Meta_zero
+keycode 0x28 = minus           underscore      backslash
+       control keycode                         0x28 = Control_underscore
+       shift   control keycode                 0x28 = Control_underscore
+       alt     keycode                         0x28 = Meta_minus
+keycode 0x29 = equal           plus
+       alt     keycode                         0x29 = Meta_equal
+keycode 0x2a = grave           asciitilde
+       control keycode                         0x2a = nul
+       alt     keycode                         0x2a = Meta_grave
+# Is marked as BackSpace but we define it as delete just like the i386
+# keyboard maps does
+keycode 0x2b = Delete          Delete
+       control keycode                         0x2b = BackSpace
+       alt     keycode                         0x2b = Meta_Delete
+keycode 0x2c = Insert
+# This is really keypad = on type 4 keyboards
+keycode 0x2d = equal
+keycode 0x2e = KP_Divide
+keycode 0x2f = KP_Multiply
+# Power ON/OFF key on type 5 keyboard
+keycode 0x30 =
+# FRONT/L5
+keycode 0x31 =
+keycode 0x32 = KP_Period
+#      altgr   control keycode                 0x32 = Boot
+       control alt     keycode                 0x32 = Boot
+# COPY/L6
+keycode 0x33 =
+# Home key, same difference
+keycode 0x34 = Find
+keycode 0x35 = Tab             Tab
+       alt     keycode                         0x35 = Meta_Tab
+keycode 0x36 = q
+keycode 0x37 = w
+keycode 0x38 = e
+       altgr   keycode                         0x38 = Hex_E
+keycode 0x39 = r
+keycode 0x3a = t
+keycode 0x3b = y
+keycode 0x3c = u
+keycode 0x3d = i
+keycode 0x3e = o
+keycode 0x3f = p
+keycode 0x40 = bracketleft     braceleft
+       control keycode                         0x40 = Escape
+       alt     keycode                         0x40 = Meta_bracketleft
+keycode 0x41 = bracketright    braceright      asciitilde
+       control keycode                         0x41 = Control_bracketright
+       alt     keycode                         0x41 = Meta_bracketright
+keycode 0x42 = Delete          Delete
+       control keycode                         0x42 = BackSpace
+       alt     keycode                         0x43 = Meta_Delete
+       control alt     keycode                 0x42 = Boot
+keycode 0x43 = Compose
+keycode 0x44 = KP_7
+       alt     keycode                         0x44 = Ascii_7
+       altgr   keycode                         0x44 = Hex_7
+keycode 0x45 = KP_8
+       alt     keycode                         0x45 = Ascii_8
+       altgr   keycode                         0x45 = Hex_8
+keycode 0x46 = KP_9
+       alt     keycode                         0x46 = Ascii_9
+       altgr   keycode                         0x46 = Hex_9
+keycode 0x47 = KP_Subtract
+# OPEN/L6
+keycode 0x48 =
+# PASTE/L8
+keycode 0x49 =
+keycode 0x4a = Select
+# No key produces 0x4b to my knowledge
+keycode 0x4b =
+keycode 0x4c = Control
+keycode 0x4d = a
+       altgr   keycode                         0x4d = Hex_A
+keycode 0x4e = s
+keycode 0x4f = d
+       altgr   keycode                         0x4f = Hex_D
+keycode 0x50 = f
+       altgr   keycode                         0x50 = Hex_F
+keycode 0x51 = g
+keycode 0x52 = h
+keycode 0x53 = j
+keycode 0x54 = k
+keycode 0x55 = l
+keycode 0x56 = semicolon       colon
+       alt     keycode                         0x56 = Meta_semicolon
+keycode 0x57 = apostrophe      quotedbl
+       control keycode                         0x57 = Control_g
+       alt     keycode                         0x57 = Meta_apostrophe
+keycode 0x58 = backslash       bar
+       control keycode                         0x58 = Control_backslash
+       alt     keycode                         0x58 = Meta_backslash
+keycode 0x59 = Return
+       alt     keycode                         0x59 = Meta_Control_m
+keycode 0x5a = KP_Enter
+keycode 0x5b = KP_4
+       alt     keycode                         0x5b = Ascii_4
+       altgr   keycode                         0x5b = Hex_4
+keycode 0x5c = KP_5
+       alt     keycode                         0x5c = Ascii_5
+       altgr   keycode                         0x5c = Hex_5
+keycode 0x5d = KP_6
+       alt     keycode                         0x5d = Ascii_6
+       altgr   keycode                         0x5d = Hex_6
+keycode 0x5e = KP_0
+       alt     keycode                         0x5e = Ascii_0
+       altgr   keycode                         0x5e = Hex_0
+# FIND/L9
+keycode 0x5f =
+keycode 0x60 = Prior
+       shift   keycode                         0x60 = Scroll_Backward
+# CUT/L10
+keycode 0x61 =
+keycode 0x62 = Num_Lock
+# Linux/i386 console makes no distinction between right/left shift
+# so neither do we.
+keycode 0x63 = Shift
+keycode 0x64 = z
+keycode 0x65 = x
+keycode 0x66 = c
+       altgr   keycode                         0x66 = Hex_C
+keycode 0x67 = v
+keycode 0x68 = b
+       altgr   keycode                         0x68 = Hex_B
+keycode 0x69 = n
+keycode 0x6a = m
+keycode 0x6b = comma           less
+       alt     keycode                         0x6b = Meta_comma
+keycode 0x6c = period          greater
+       control keycode                         0x6c = Compose
+       alt     keycode                         0x6c = Meta_period
+keycode 0x6d = slash           question
+       control keycode                         0x6d = Delete
+       alt     keycode                         0x6d = Meta_slash
+keycode 0x6e = Shift
+keycode 0x6f = Linefeed
+keycode 0x70 = KP_1
+       alt     keycode                         0x70 = Ascii_1
+       altgr   keycode                         0x70 = Hex_1
+keycode 0x71 = KP_2
+       alt     keycode                         0x71 = Ascii_2
+       altgr   keycode                         0x71 = Hex_2
+keycode 0x72 = KP_3
+       alt     keycode                         0x72 = Ascii_3
+       altgr   keycode                         0x72 = Hex_3
+# To my knowledge no key produces 0x73, 0x74, or 0x75
+keycode 0x73 =
+keycode 0x74 =
+keycode 0x75 =
+keycode 0x76 = Help
+keycode 0x77 = Caps_Lock
+# A True Meta-key, unused at this time
+keycode 0x78 =
+keycode 0x79 = space           space
+       control keycode                         0x79 = nul
+       alt     keycode                         0x79 = Meta_space
+# Another real Meta-key, again unused
+keycode 0x7a =
+keycode 0x7b = Next
+       shift   keycode                         0x7b = Scroll_Forward
+# No keys produce the following
+keycode 0x7c =
+keycode 0x7d = KP_Add
+keycode 0x7e =
+# keycode 0x7f is special and it means 'all keys released' and is
+# taken care of within the sun keyboard driver itself
+keycode 0x7f =
+# That's all folks...
diff --git a/keymaps/sun/sunt4-es.map b/keymaps/sun/sunt4-es.map
new file mode 100644
index 0000000..8ff5f10
--- /dev/null
+++ b/keymaps/sun/sunt4-es.map
@@ -0,0 +1,258 @@
+# Sun Type 4 Catalan and Spanish keyboard mapping
+#
+# Antoni Pàmies Olivé <toni@readysoft.net>
+#
+keymaps 0-2,4-5,8-9,12
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 =
+keycode   2 =
+keycode   3 =
+keycode   4 =
+keycode   5 = F1
+       shift   keycode   5 = F11
+       altgr   keycode   5 = Console_13
+       shift   control keycode   5 = VoidSymbol
+       alt     keycode   5 = Console_1
+       control alt     keycode   5 = Console_1
+keycode   6 = F2
+       shift   keycode   6 = F12
+       altgr   keycode   6 = Console_14
+       shift   control keycode   6 = VoidSymbol
+       alt     keycode   6 = Console_2
+       control alt     keycode   6 = Console_2
+keycode   7 = F10
+       shift   keycode   7 = F20
+       altgr   keycode   7 = Console_22
+       shift   control keycode   7 = VoidSymbol
+       alt     keycode   7 = Console_10
+       control alt     keycode   7 = Console_10
+keycode   8 = F3
+       shift   keycode   8 = F13
+       altgr   keycode   8 = Console_15
+       shift   control keycode   8 = VoidSymbol
+       alt     keycode   8 = Console_3
+       control alt     keycode   8 = Console_3
+keycode   9 = F11
+       altgr   keycode   9 = Console_23
+       shift   control keycode   9 = VoidSymbol
+       alt     keycode   9 = Console_11
+       control alt     keycode   9 = Console_11
+keycode  10 = F4
+       shift   keycode  10 = F14
+       altgr   keycode  10 = Console_16
+       shift   control keycode  10 = VoidSymbol
+       alt     keycode  10 = Console_4
+       control alt     keycode  10 = Console_4
+keycode  11 = F12
+       altgr   keycode  11 = Console_24
+       shift   control keycode  11 = VoidSymbol
+       alt     keycode  11 = Console_12
+       control alt     keycode  11 = Console_12
+keycode  12 = F5
+       shift   keycode  12 = F15
+       altgr   keycode  12 = Console_17
+       shift   control keycode  12 = VoidSymbol
+       alt     keycode  12 = Console_5
+       control alt     keycode  12 = Console_5
+keycode  13 = AltGr
+keycode  14 = F6
+       shift   keycode  14 = F16
+       altgr   keycode  14 = Console_18
+       shift   control keycode  14 = VoidSymbol
+       alt     keycode  14 = Console_6
+       control alt     keycode  14 = Console_6
+keycode  15 = bracketright braceright guillemotright
+keycode  16 = F7       F17     Console_19      F8
+       alt     keycode  16 = Console_7
+       control alt     keycode  16 = Console_7
+keycode  17 = F8               F18              Console_20
+       alt     keycode  17 = Console_8
+       control alt     keycode  17 = Console_8
+keycode  18 = F9
+       shift   keycode  18 = F19
+       altgr   keycode  18 = Console_21
+       shift   control keycode  18 = VoidSymbol
+       alt     keycode  18 = Console_9
+       control alt     keycode  18 = Console_9
+keycode  19 = Alt
+keycode  20 = Up
+keycode  21 = Pause
+keycode  22 =
+keycode  23 = Scroll_Lock      Show_Memory      Show_Registers   Show_State
+       alt     keycode  23 = Scroll_Lock
+keycode  24 = Left
+       alt     keycode  24 = Decr_Console
+keycode  25 =
+keycode  26 =
+keycode  27 = Down
+keycode  28 = Right
+       alt     keycode  28 = Incr_Console
+keycode  29 = Escape           Escape
+       alt     keycode  29 = Meta_Escape
+keycode  30 = one              exclam
+       alt     keycode  30 = Meta_one
+keycode  31 = two              quotedbl               at
+       control keycode   31 = nul
+       alt     keycode   31 = Meta_two
+keycode  32 = three            periodcentered numbersign
+       control keycode  32 = Escape
+       alt     keycode  32 = Meta_three
+keycode  33 = four             dollar
+       control keycode  33 = Control_backslash
+       alt     keycode  33 = Meta_four
+keycode  34 = five             percent         degree
+       control keycode  34 = Control_bracketright
+       alt     keycode  34 = Meta_five
+keycode  35 = six              ampersand notsign
+       control keycode  35 = Control_asciicircum
+       alt     keycode  35 = Meta_six
+keycode  36 = seven            slash
+       control keycode  36 = Control_underscore
+       alt     keycode  36 = Meta_seven
+keycode  37 = eight            parenleft
+       control keycode  37 = Delete
+       alt     keycode  37 = Meta_eight
+keycode  38 = nine             parenright        backslash
+       alt     keycode  38 = Meta_nine
+keycode  39 = zero             equal       bar
+       alt     keycode  39 = Meta_zero
+keycode  40 = apostrophe            question       grave
+       control keycode  40 = Control_underscore
+       alt     keycode  40 = Meta_minus
+keycode  41 = exclamdown questiondown asciitilde
+       alt     keycode  41 = Meta_equal
+keycode  42 = ccedilla Ccedilla
+keycode  43 = Delete           Delete
+       control keycode  43 = BackSpace
+       alt     keycode  43 = Meta_Delete
+keycode  44 = Insert
+keycode  45 = equal
+keycode  46 = KP_Divide
+keycode  47 = KP_Multiply
+keycode  48 =
+keycode  49 =
+keycode  50 = KP_Period
+       control alt     keycode  50 = Boot
+keycode  51 =
+keycode  52 = Find
+keycode  53 = Tab              Tab
+       alt     keycode  53 = Meta_Tab
+keycode  54 = q
+keycode  55 = w
+keycode  56 = +e       +E      Hex_E   Control_e       Control_e       Meta_e  Meta_Control_e
+keycode  57 = r
+keycode  58 = t
+keycode  59 = y
+keycode  60 = u
+keycode  61 = i
+keycode  62 = o O masculine
+keycode  63 = p
+keycode  64 = dead_grave      dead_circumflex asciicircum
+       control keycode  64 = Escape
+       alt     keycode  64 = Meta_bracketleft
+keycode  65 = plus     asterisk       asciitilde
+       control keycode  65 = Control_bracketright
+       alt     keycode  65 = Meta_bracketright
+keycode  66 = Delete           Delete
+       control keycode  66 = BackSpace
+keycode  67 = Compose
+       alt     keycode  67 = Meta_Delete
+keycode  68 = KP_7
+       altgr   keycode  68 = Hex_7
+       alt     keycode  68 = Ascii_7
+keycode  69 = KP_8
+       altgr   keycode  69 = Hex_8
+       alt     keycode  69 = Ascii_8
+keycode  70 = KP_9
+       altgr   keycode  70 = Hex_9
+       alt     keycode  70 = Ascii_9
+keycode  71 = KP_Subtract
+keycode  72 =
+keycode  73 =
+keycode  74 = Select
+keycode  75 =
+keycode  76 = Caps_Lock
+keycode  77 = a        A       ordfeminine Control_a   Control_a       Meta_a  Meta_Control_a
+keycode  78 = s
+keycode  79 = +d       +D      Hex_D   Control_d       Control_d       Meta_d  Meta_Control_d
+keycode  80 = +f       +F      Hex_F   Control_f       Control_f       Meta_f  Meta_Control_f
+keycode  81 = g
+keycode  82 = h
+keycode  83 = j
+keycode  84 = k
+keycode  85 = l
+keycode  86 = ntilde        Ntilde
+       alt     keycode  86 = Meta_semicolon
+keycode  87 = dead_acute       dead_diaeresis        braceleft
+       control keycode  87 = Control_g
+       alt     keycode  87 = Meta_apostrophe
+keycode  88 = bracketleft braceleft guillemotleft
+       control keycode  88 = Control_backslash
+       alt     keycode  88 = Meta_backslash
+       shift alt keycode 88 = Meta_asciitilde
+keycode  89 = Return
+       alt     keycode  89 = Meta_Control_m
+keycode  90 = KP_Enter
+keycode  91 = KP_4
+       altgr   keycode  91 = Hex_4
+       alt     keycode  91 = Ascii_4
+keycode  92 = KP_5
+       altgr   keycode  92 = Hex_5
+       alt     keycode  92 = Ascii_5
+keycode  93 = KP_6
+       altgr   keycode  93 = Hex_6
+       alt     keycode  93 = Ascii_6
+keycode  94 = KP_0
+       altgr   keycode  94 = Hex_0
+       alt     keycode  94 = Ascii_0
+keycode  95 =
+keycode  96 = Prior
+       shift   keycode  96 = Scroll_Backward
+keycode  97 =
+keycode  98 = Num_Lock
+keycode  99 = Shift
+keycode 100 = z
+keycode 101 = x
+keycode 102 = +c       +C      Hex_C   Control_c       Control_c       Meta_c  Meta_Control_c
+keycode 103 = v
+keycode 104 = +b       +B      Hex_B   Control_b       Control_b       Meta_b  Meta_Control_b
+keycode 105 = n
+keycode 106 = m
+keycode 107 = comma            semicolon
+       alt     keycode 107 = Meta_comma
+       shift alt keycode 107 = Meta_less
+keycode 108 = period           colon
+       alt     keycode  108 = Meta_period
+       shift alt keycode 108 = Meta_greater
+keycode 109 = minus            underscore
+       control keycode 109 = Delete
+       alt     keycode 109 = Meta_slash
+keycode 110 = Shift
+keycode 111 = Linefeed
+keycode 112 = KP_1
+       altgr   keycode 112 = Hex_1
+       alt     keycode 112 = Ascii_1
+keycode 113 = KP_2
+       altgr   keycode 113 = Hex_2
+       alt     keycode 113 = Ascii_2
+keycode 114 = KP_3
+       altgr   keycode 114 = Hex_3
+       alt     keycode 114 = Ascii_3
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 = Help
+keycode 119 = Control
+keycode 120 =
+keycode 121 = space            space
+       control keycode 121 = nul
+       alt     keycode 121 = Meta_space
+keycode 122 =
+keycode 123 = Next
+       shift   keycode 123 = Scroll_Forward
+keycode 124 = less greater
+keycode 125 = KP_Add
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/sun/sunt5-de-latin1.map b/keymaps/sun/sunt5-de-latin1.map
new file mode 100644
index 0000000..e23914e
--- /dev/null
+++ b/keymaps/sun/sunt5-de-latin1.map
@@ -0,0 +1,249 @@
+# german SUN-type-5 keyboard mapping
+# Fri Oct 25 1996, Wolfgang Szöcs <wolfi@tfh-berlin.de>
+#
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 =
+keycode   2 =
+keycode   3 =
+keycode   4 =
+keycode   5 = F1
+       shift   keycode   5 = F11
+       altgr   keycode   5 = Console_13
+       shift   control keycode   5 = VoidSymbol
+       alt     keycode   5 = Console_1
+       control alt     keycode   5 = Console_1
+keycode   6 = F2
+       shift   keycode   6 = F12
+       altgr   keycode   6 = Console_14
+       shift   control keycode   6 = VoidSymbol
+       alt     keycode   6 = Console_2
+       control alt     keycode   6 = Console_2
+keycode   7 = F10
+       shift   keycode   7 = F20
+       altgr   keycode   7 = Console_22
+       shift   control keycode   7 = VoidSymbol
+       alt     keycode   7 = Console_10
+       control alt     keycode   7 = Console_10
+keycode   8 = F3
+       shift   keycode   8 = F13
+       altgr   keycode   8 = Console_15
+       shift   control keycode   8 = VoidSymbol
+       alt     keycode   8 = Console_3
+       control alt     keycode   8 = Console_3
+keycode   9 = F11
+       altgr   keycode   9 = Console_23
+       shift   control keycode   9 = VoidSymbol
+       alt     keycode   9 = Console_11
+       control alt     keycode   9 = Console_11
+keycode  10 = F4
+       shift   keycode  10 = F14
+       altgr   keycode  10 = Console_16
+       shift   control keycode  10 = VoidSymbol
+       alt     keycode  10 = Console_4
+       control alt     keycode  10 = Console_4
+keycode  11 = F12
+       altgr   keycode  11 = Console_24
+       shift   control keycode  11 = VoidSymbol
+       alt     keycode  11 = Console_12
+       control alt     keycode  11 = Console_12
+keycode  12 = F5
+       shift   keycode  12 = F15
+       altgr   keycode  12 = Console_17
+       shift   control keycode  12 = VoidSymbol
+       alt     keycode  12 = Console_5
+       control alt     keycode  12 = Console_5
+keycode  13 = AltGr
+keycode  14 = F6
+       shift   keycode  14 = F16
+       altgr   keycode  14 = Console_18
+       shift   control keycode  14 = VoidSymbol
+       alt     keycode  14 = Console_6
+       control alt     keycode  14 = Console_6
+keycode  15 =
+keycode  16 = F7               F17              Console_19       F8
+       alt     keycode  16 = Console_7
+       control alt     keycode  16 = Console_7
+keycode  17 = F8               F18              Console_20
+       alt     keycode  17 = Console_8
+       control alt     keycode  17 = Console_8
+keycode  18 = F9
+       shift   keycode  18 = F19
+       altgr   keycode  18 = Console_21
+       shift   control keycode  18 = VoidSymbol
+       alt     keycode  18 = Console_9
+       control alt     keycode  18 = Console_9
+keycode  19 = Alt
+keycode  20 = Up
+keycode  21 = Pause
+keycode  22 =
+keycode  23 = Scroll_Lock      Show_Memory      Show_Registers   Show_State
+       alt     keycode  23 = Scroll_Lock
+keycode  24 = Left
+       alt     keycode  24 = Decr_Console
+keycode  25 =
+keycode  26 =
+keycode  27 = Down
+keycode  28 = Right
+       alt     keycode  28 = Incr_Console
+keycode  29 = Escape           Escape
+       alt     keycode  29 = Meta_Escape
+keycode  30 = one              exclam
+       alt     keycode  30 = Meta_one
+keycode  31 = two              quotedbl               twosuperior               nul              nul              Meta_two
+keycode  32 = three            section         threesuperior
+       control keycode  32 = Escape
+       alt     keycode  32 = Meta_three
+keycode  33 = four             dollar           dollar           Control_backslash
+       alt     keycode  33 = Meta_four
+keycode  34 = five             percent
+       control keycode  34 = Control_bracketright
+       alt     keycode  34 = Meta_five
+keycode  35 = six              ampersand
+       control keycode  35 = Control_asciicircum
+       alt     keycode  35 = Meta_six
+keycode  36 = seven            slash        braceleft        Control_underscore
+       alt     keycode  36 = Meta_seven
+keycode  37 = eight            parenleft         bracketleft      Delete
+       alt     keycode  37 = Meta_eight
+keycode  38 = nine             parenright        bracketright
+       alt     keycode  38 = Meta_nine
+keycode  39 = zero             equal       braceright
+       alt     keycode  39 = Meta_zero
+keycode  40 = ssharp            question       backslash        Control_underscore Control_underscore Meta_minus
+keycode  41 = dead_acute            dead_grave
+       alt     keycode  41 = Meta_equal
+keycode  42 = asciicircum      degree
+       control keycode  42 = nul
+       alt     keycode  42 = Meta_grave
+keycode  43 = Delete           Delete
+       control keycode  43 = BackSpace
+       alt     keycode  43 = Meta_Delete
+keycode  44 = Insert
+keycode  45 = equal
+keycode  46 = KP_Divide
+keycode  47 = KP_Multiply
+keycode  48 =
+keycode  49 =
+keycode  50 = KP_Period
+       control alt     keycode  50 = Boot
+keycode  51 =
+keycode  52 = Find
+keycode  53 = Tab              Tab
+       alt     keycode  53 = Meta_Tab
+keycode  54 = +q       +Q      at
+keycode  55 = w
+keycode  56 = +e                +E                Hex_E            Control_e        Control_e        Meta_e           Meta_Control_e
+keycode  57 = r
+keycode  58 = t
+keycode  59 = z
+keycode  60 = u
+keycode  61 = i
+keycode  62 = o
+keycode  63 = p
+keycode  64 = +udiaeresis      +Udiaeresis
+       control keycode  64 = Escape
+       alt     keycode  64 = Meta_bracketleft
+keycode  65 = plus     asterisk       asciitilde       Control_bracketright
+       alt     keycode  65 = Meta_bracketright
+keycode  66 = Delete           Delete
+       control keycode  66 = BackSpace
+keycode  67 = Compose
+       alt     keycode  67 = Meta_Delete
+keycode  68 = KP_7
+       altgr   keycode  68 = Hex_7
+       alt     keycode  68 = Ascii_7
+keycode  69 = KP_8
+       altgr   keycode  69 = Hex_8
+       alt     keycode  69 = Ascii_8
+keycode  70 = KP_9
+       altgr   keycode  70 = Hex_9
+       alt     keycode  70 = Ascii_9
+keycode  71 = KP_Subtract
+keycode  72 =
+keycode  73 =
+keycode  74 = Select
+keycode  75 =
+keycode  76 = Control
+keycode  77 = +a                +A                Hex_A            Control_a        Control_a        Meta_a           Meta_Control_a
+keycode  78 = s
+keycode  79 = +d                +D                Hex_D            Control_d        Control_d        Meta_d           Meta_Control_d
+keycode  80 = +f                +F                Hex_F            Control_f        Control_f        Meta_f           Meta_Control_f
+keycode  81 = g
+keycode  82 = h
+keycode  83 = j
+keycode  84 = k
+keycode  85 = l
+keycode  86 = +odiaeresis        +Odiaeresis
+       alt     keycode  86 = Meta_semicolon
+keycode  87 = +adiaeresis       +Adiaeresis
+       control keycode  87 = Control_g
+       alt     keycode  87 = Meta_apostrophe
+keycode  88 = numbersign        apostrophe     grave
+       control keycode  88 = Control_backslash
+       alt     keycode  88 = Meta_backslash
+keycode  89 = Return
+       alt     keycode  89 = Meta_Control_m
+keycode  90 = KP_Enter
+keycode  91 = KP_4
+       altgr   keycode  91 = Hex_4
+       alt     keycode  91 = Ascii_4
+keycode  92 = KP_5
+       altgr   keycode  92 = Hex_5
+       alt     keycode  92 = Ascii_5
+keycode  93 = KP_6
+       altgr   keycode  93 = Hex_6
+       alt     keycode  93 = Ascii_6
+keycode  94 = KP_0
+       altgr   keycode  94 = Hex_0
+       alt     keycode  94 = Ascii_0
+keycode  95 =
+keycode  96 = Prior
+       shift   keycode  96 = Scroll_Backward
+keycode  97 =
+keycode  98 = Num_Lock
+keycode  99 = Shift
+keycode 100 = y
+keycode 101 = x
+keycode 102 = +c                +C                Hex_C            Control_c        Control_c        Meta_c           Meta_Control_c
+keycode 103 = v
+keycode 104 = +b                +B                Hex_B            Control_b        Control_b        Meta_b           Meta_Control_b
+keycode 105 = n
+keycode 106 = +m               +M      mu      Control_m
+keycode 107 = comma            semicolon
+       alt     keycode 107 = Meta_comma
+keycode 108 = period           colon
+       control keycode 108 = Compose
+       alt     keycode 108 = Meta_period
+keycode 109 = minus            underscore
+       control keycode 109 = Delete
+       alt     keycode 109 = Meta_slash
+keycode 110 = Shift
+keycode 111 = Linefeed
+keycode 112 = KP_1
+       altgr   keycode 112 = Hex_1
+       alt     keycode 112 = Ascii_1
+keycode 113 = KP_2
+       altgr   keycode 113 = Hex_2
+       alt     keycode 113 = Ascii_2
+keycode 114 = KP_3
+       altgr   keycode 114 = Hex_3
+       alt     keycode 114 = Ascii_3
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 = Help
+keycode 119 = Caps_Lock
+keycode 120 =
+keycode 121 = space            space
+       control keycode 121 = nul
+       alt     keycode 121 = Meta_space
+keycode 122 =
+keycode 123 = Next
+       shift   keycode 123 = Scroll_Forward
+keycode 124 = less greater bar
+keycode 125 = KP_Add
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/sun/sunt5-es.map b/keymaps/sun/sunt5-es.map
new file mode 100644
index 0000000..e5755d1
--- /dev/null
+++ b/keymaps/sun/sunt5-es.map
@@ -0,0 +1,264 @@
+# Sun Type 5 Spanish keyboard mapping
+#
+# Eduardo Casino <eduardo@medusa.es>
+#
+# Derived somehow from Jon Tombs' Spanish keyboard:
+# Jon Tombs <jon@gtex02.us.es> with corrections from
+# Julio Sanchez <jsanchez@gmv.es>
+#
+keymaps 0-2,4-5,8-9,12
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 =
+keycode   2 =
+keycode   3 =
+keycode   4 =
+keycode   5 = F1
+       shift   keycode   5 = F11
+       altgr   keycode   5 = Console_13
+       shift   control keycode   5 = VoidSymbol
+       alt     keycode   5 = Console_1
+       control alt     keycode   5 = Console_1
+keycode   6 = F2
+       shift   keycode   6 = F12
+       altgr   keycode   6 = Console_14
+       shift   control keycode   6 = VoidSymbol
+       alt     keycode   6 = Console_2
+       control alt     keycode   6 = Console_2
+keycode   7 = F10
+       shift   keycode   7 = F20
+       altgr   keycode   7 = Console_22
+       shift   control keycode   7 = VoidSymbol
+       alt     keycode   7 = Console_10
+       control alt     keycode   7 = Console_10
+keycode   8 = F3
+       shift   keycode   8 = F13
+       altgr   keycode   8 = Console_15
+       shift   control keycode   8 = VoidSymbol
+       alt     keycode   8 = Console_3
+       control alt     keycode   8 = Console_3
+keycode   9 = F11
+       altgr   keycode   9 = Console_23
+       shift   control keycode   9 = VoidSymbol
+       alt     keycode   9 = Console_11
+       control alt     keycode   9 = Console_11
+keycode  10 = F4
+       shift   keycode  10 = F14
+       altgr   keycode  10 = Console_16
+       shift   control keycode  10 = VoidSymbol
+       alt     keycode  10 = Console_4
+       control alt     keycode  10 = Console_4
+keycode  11 = F12
+       altgr   keycode  11 = Console_24
+       shift   control keycode  11 = VoidSymbol
+       alt     keycode  11 = Console_12
+       control alt     keycode  11 = Console_12
+keycode  12 = F5
+       shift   keycode  12 = F15
+       altgr   keycode  12 = Console_17
+       shift   control keycode  12 = VoidSymbol
+       alt     keycode  12 = Console_5
+       control alt     keycode  12 = Console_5
+keycode  13 = AltGr
+keycode  14 = F6
+       shift   keycode  14 = F16
+       altgr   keycode  14 = Console_18
+       shift   control keycode  14 = VoidSymbol
+       alt     keycode  14 = Console_6
+       control alt     keycode  14 = Console_6
+keycode  15 =
+keycode  16 = F7       F17     Console_19      F8
+       alt     keycode  16 = Console_7
+       control alt     keycode  16 = Console_7
+keycode  17 = F8               F18              Console_20
+       alt     keycode  17 = Console_8
+       control alt     keycode  17 = Console_8
+keycode  18 = F9
+       shift   keycode  18 = F19
+       altgr   keycode  18 = Console_21
+       shift   control keycode  18 = VoidSymbol
+       alt     keycode  18 = Console_9
+       control alt     keycode  18 = Console_9
+keycode  19 = Alt
+keycode  20 = Up
+keycode  21 = Pause
+keycode  22 =
+keycode  23 = Scroll_Lock      Show_Memory      Show_Registers   Show_State
+       alt     keycode  23 = Scroll_Lock
+keycode  24 = Left
+       alt     keycode  24 = Decr_Console
+keycode  25 =
+keycode  26 =
+keycode  27 = Down
+keycode  28 = Right
+       alt     keycode  28 = Incr_Console
+keycode  29 = Escape           Escape
+       alt     keycode  29 = Meta_Escape
+keycode  30 = one              exclam          bar
+       alt     keycode  30 = Meta_one
+keycode  31 = two              quotedbl               at
+       control keycode   31 = nul
+       alt     keycode   31 = Meta_two
+keycode  32 = three            periodcentered numbersign
+       control keycode  32 = Escape
+       alt     keycode  32 = Meta_three
+keycode  33 = four             dollar           asciicircum
+       control keycode  33 = Control_backslash
+       alt     keycode  33 = Meta_four
+keycode  34 = five             percent         asciitilde
+       control keycode  34 = Control_bracketright
+       alt     keycode  34 = Meta_five
+keycode  35 = six              ampersand notsign
+       control keycode  35 = Control_asciicircum
+       alt     keycode  35 = Meta_six
+keycode  36 = seven            slash        braceleft
+       control keycode  36 = Control_underscore
+       alt     keycode  36 = Meta_seven
+keycode  37 = eight            parenleft         bracketleft
+       control keycode  37 = Delete
+       alt     keycode  37 = Meta_eight
+keycode  38 = nine             parenright        bracketright
+       alt     keycode  38 = Meta_nine
+keycode  39 = zero             equal       braceright
+       alt     keycode  39 = Meta_zero
+keycode  40 = apostrophe            question       grave
+       control keycode  40 = Control_underscore
+       alt     keycode  40 = Meta_minus
+keycode  41 = exclamdown questiondown asciitilde
+       alt     keycode  41 = Meta_equal
+keycode  42 = masculine            ordfeminine      backslash
+       control keycode  42 = nul
+       alt     keycode  42 = Meta_grave
+keycode  43 = Delete           Delete
+       control keycode  43 = BackSpace
+       alt     keycode  43 = Meta_Delete
+keycode  44 = Insert
+keycode  45 = equal
+keycode  46 = KP_Divide
+keycode  47 = KP_Multiply
+keycode  48 =
+keycode  49 =
+keycode  50 = KP_Period
+       control alt     keycode  50 = Boot
+keycode  51 =
+keycode  52 = Find
+keycode  53 = Tab              Tab
+       alt     keycode  53 = Meta_Tab
+keycode  54 = q
+keycode  55 = w
+keycode  56 = +e       +E      Hex_E   Control_e       Control_e       Meta_e  Meta_Control_e
+keycode  57 = r
+keycode  58 = t
+keycode  59 = y
+keycode  60 = u
+keycode  61 = i
+keycode  62 = o
+keycode  63 = p
+keycode  64 = dead_grave      dead_circumflex bracketleft
+       control keycode  64 = Escape
+       alt     keycode  64 = Meta_bracketleft
+keycode  65 = plus     asterisk       bracketright
+       control keycode  65 = Control_bracketright
+       alt     keycode  65 = Meta_bracketright
+keycode  66 = Delete           Delete
+       control keycode  66 = BackSpace
+keycode  67 = Compose
+       alt     keycode  67 = Meta_Delete
+keycode  68 = KP_7
+       altgr   keycode  68 = Hex_7
+       alt     keycode  68 = Ascii_7
+keycode  69 = KP_8
+       altgr   keycode  69 = Hex_8
+       alt     keycode  69 = Ascii_8
+keycode  70 = KP_9
+       altgr   keycode  70 = Hex_9
+       alt     keycode  70 = Ascii_9
+keycode  71 = KP_Subtract
+keycode  72 =
+keycode  73 =
+keycode  74 = Select
+keycode  75 =
+keycode  76 = Control
+keycode  77 = +a       +A      Hex_A   Control_a       Control_a       Meta_a  Meta_Control_a
+keycode  78 = s
+keycode  79 = +d       +D      Hex_D   Control_d       Control_d       Meta_d  Meta_Control_d
+keycode  80 = +f       +F      Hex_F   Control_f       Control_f       Meta_f  Meta_Control_f
+keycode  81 = g
+keycode  82 = h
+keycode  83 = j
+keycode  84 = k
+keycode  85 = l
+keycode  86 = ntilde        Ntilde
+       alt     keycode  86 = Meta_semicolon
+keycode  87 = dead_acute       dead_diaeresis        braceleft
+       control keycode  87 = Control_g
+       alt     keycode  87 = Meta_apostrophe
+keycode  88 = ccedilla        Ccedilla   braceright
+       control keycode  88 = Control_backslash
+       alt     keycode  88 = Meta_backslash
+       shift alt keycode 88 = Meta_asciitilde
+keycode  89 = Return
+       alt     keycode  89 = Meta_Control_m
+keycode  90 = KP_Enter
+keycode  91 = KP_4
+       altgr   keycode  91 = Hex_4
+       alt     keycode  91 = Ascii_4
+keycode  92 = KP_5
+       altgr   keycode  92 = Hex_5
+       alt     keycode  92 = Ascii_5
+keycode  93 = KP_6
+       altgr   keycode  93 = Hex_6
+       alt     keycode  93 = Ascii_6
+keycode  94 = KP_0
+       altgr   keycode  94 = Hex_0
+       alt     keycode  94 = Ascii_0
+keycode  95 =
+keycode  96 = Prior
+       shift   keycode  96 = Scroll_Backward
+keycode  97 =
+keycode  98 = Num_Lock
+keycode  99 = Shift
+keycode 100 = z
+keycode 101 = x
+keycode 102 = +c       +C      Hex_C   Control_c       Control_c       Meta_c  Meta_Control_c
+keycode 103 = v
+keycode 104 = +b       +B      Hex_B   Control_b       Control_b       Meta_b  Meta_Control_b
+keycode 105 = n
+keycode 106 = m
+keycode 107 = comma            semicolon
+       alt     keycode 107 = Meta_comma
+       shift alt keycode 107 = Meta_less
+keycode 108 = period           colon
+       alt     keycode  108 = Meta_period
+       shift alt keycode 108 = Meta_greater
+keycode 109 = minus            underscore
+       control keycode 109 = Delete
+       alt     keycode 109 = Meta_slash
+keycode 110 = Shift
+keycode 111 = Linefeed
+keycode 112 = KP_1
+       altgr   keycode 112 = Hex_1
+       alt     keycode 112 = Ascii_1
+keycode 113 = KP_2
+       altgr   keycode 113 = Hex_2
+       alt     keycode 113 = Ascii_2
+keycode 114 = KP_3
+       altgr   keycode 114 = Hex_3
+       alt     keycode 114 = Ascii_3
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 = Help
+keycode 119 = Caps_Lock
+keycode 120 =
+keycode 121 = space            space
+       control keycode 121 = nul
+       alt     keycode 121 = Meta_space
+keycode 122 =
+keycode 123 = Next
+       shift   keycode 123 = Scroll_Forward
+keycode 124 = less greater
+keycode 125 = KP_Add
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/sun/sunt5-fi-latin1.map b/keymaps/sun/sunt5-fi-latin1.map
new file mode 100644
index 0000000..379dace
--- /dev/null
+++ b/keymaps/sun/sunt5-fi-latin1.map
@@ -0,0 +1,253 @@
+# Sun Type 5 Finnish keyboard mapping
+#
+# Riku Meskanen <mesrik@cc.jyu.fi>
+#
+# $Id: sun5-fi-latin1.map,v 1.2 1997/01/09 09:03:59 mesrik Exp $
+#
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+
+keycode   1 =
+keycode   2 =
+keycode   3 =
+keycode   4 =
+keycode   5 = F1
+       shift   keycode   5 = F11
+       altgr   keycode   5 = Console_13
+       shift   control keycode   5 = VoidSymbol
+       alt     keycode   5 = Console_1
+       control alt     keycode   5 = Console_1
+keycode   6 = F2
+       shift   keycode   6 = F12
+       altgr   keycode   6 = Console_14
+       shift   control keycode   6 = VoidSymbol
+       alt     keycode   6 = Console_2
+       control alt     keycode   6 = Console_2
+keycode   7 = F10
+       shift   keycode   7 = F20
+       altgr   keycode   7 = Console_22
+       shift   control keycode   7 = VoidSymbol
+       alt     keycode   7 = Console_10
+       control alt     keycode   7 = Console_10
+keycode   8 = F3
+       shift   keycode   8 = F13
+       altgr   keycode   8 = Console_15
+       shift   control keycode   8 = VoidSymbol
+       alt     keycode   8 = Console_3
+       control alt     keycode   8 = Console_3
+keycode   9 = F11
+       altgr   keycode   9 = Console_23
+       shift   control keycode   9 = VoidSymbol
+       alt     keycode   9 = Console_11
+       control alt     keycode   9 = Console_11
+keycode  10 = F4
+       shift   keycode  10 = F14
+       altgr   keycode  10 = Console_16
+       shift   control keycode  10 = VoidSymbol
+       alt     keycode  10 = Console_4
+       control alt     keycode  10 = Console_4
+keycode  11 = F12
+       altgr   keycode  11 = Console_24
+       shift   control keycode  11 = VoidSymbol
+       alt     keycode  11 = Console_12
+       control alt     keycode  11 = Console_12
+keycode  12 = F5
+       shift   keycode  12 = F15
+       altgr   keycode  12 = Console_17
+       shift   control keycode  12 = VoidSymbol
+       alt     keycode  12 = Console_5
+       control alt     keycode  12 = Console_5
+keycode  13 = AltGr
+keycode  14 = F6
+       shift   keycode  14 = F16
+       altgr   keycode  14 = Console_18
+       shift   control keycode  14 = VoidSymbol
+       alt     keycode  14 = Console_6
+       control alt     keycode  14 = Console_6
+keycode  15 =
+keycode  16 = F7               F17              Console_19       F8
+       alt     keycode  16 = Console_7
+       control alt     keycode  16 = Console_7
+keycode  17 = F8               F18              Console_20
+       alt     keycode  17 = Console_8
+       control alt     keycode  17 = Console_8
+keycode  18 = F9
+       shift   keycode  18 = F19
+       altgr   keycode  18 = Console_21
+       shift   control keycode  18 = VoidSymbol
+       alt     keycode  18 = Console_9
+       control alt     keycode  18 = Console_9
+keycode  19 = Alt
+keycode  20 = Up
+keycode  21 = Pause
+keycode  22 =
+keycode  23 = Scroll_Lock      Show_Memory      Show_Registers   Show_State
+       alt     keycode  23 = Scroll_Lock
+keycode  24 = Left
+       alt     keycode  24 = Decr_Console
+keycode  25 =
+keycode  26 =
+keycode  27 = Down
+keycode  28 = Right
+       alt     keycode  28 = Incr_Console
+keycode  29 = Escape           Escape
+       alt     keycode  29 = Meta_Escape
+keycode  30 = one              exclam
+       alt     keycode  30 = Meta_one
+keycode  31 = two              quotedbl         at               nul              nul              Meta_two
+keycode  32 = three            numbersign       pound
+       control keycode  32 = Escape
+       alt     keycode  32 = Meta_three
+keycode  33 = four             dollar           dollar           Control_backslash
+       alt     keycode  33 = Meta_four
+keycode  34 = five             percent
+       control keycode  34 = Control_bracketright
+       alt     keycode  34 = Meta_five
+keycode  35 = six              ampersand
+       control keycode  35 = Control_asciicircum
+       alt     keycode  35 = Meta_six
+keycode  36 = seven            slash            braceleft        Control_underscore
+       alt     keycode  36 = Meta_seven
+keycode  37 = eight            parenleft        bracketleft      Delete
+       alt     keycode  37 = Meta_eight
+keycode  38 = nine             parenright       bracketright
+       alt     keycode  38 = Meta_nine
+keycode  39 = zero             equal            braceright
+       alt     keycode  39 = Meta_zero
+keycode  40 = plus             question         backslash        Control_underscore Control_underscore Meta_minus
+keycode  41 = dead_acute       dead_grave
+       alt     keycode  41 = Meta_equal
+keycode  42 = section          onehalf
+       control keycode  42 = nul
+       alt     keycode  42 = Meta_grave
+keycode  43 = Delete           Delete
+       control keycode  43 = BackSpace
+       alt     keycode  43 = Meta_Delete
+keycode  44 = Insert
+keycode  45 = equal
+keycode  46 = KP_Divide
+keycode  47 = KP_Multiply
+keycode  48 =
+keycode  49 =
+keycode  50 = KP_Period
+       control alt     keycode  50 = Boot
+keycode  51 =
+keycode  52 = Find
+keycode  53 = Tab              Tab
+       alt     keycode  53 = Meta_Tab
+keycode  54 = q
+keycode  55 = w
+keycode  56 = +e         +E    Hex_E   Control_e        Control_e        Meta_e      Meta_Control_e
+keycode  57 = r
+keycode  58 = t
+keycode  59 = y
+keycode  60 = u
+keycode  61 = i
+keycode  62 = o
+keycode  63 = p
+keycode  64 = +aring          +Aring
+       control keycode  64 = Escape
+       alt     keycode  64 = Meta_bracketleft
+keycode  65 = dead_diaeresis     dead_circumflex       dead_tilde       Control_bracketright
+       alt     keycode  65 = Meta_bracketright
+keycode  66 = Delete           Delete
+       control keycode  66 = BackSpace
+keycode  67 = Compose
+       alt     keycode  67 = Meta_Delete
+keycode  68 = KP_7
+       altgr   keycode  68 = Hex_7
+       alt     keycode  68 = Ascii_7
+keycode  69 = KP_8
+       altgr   keycode  69 = Hex_8
+       alt     keycode  69 = Ascii_8
+keycode  70 = KP_9
+       altgr   keycode  70 = Hex_9
+       alt     keycode  70 = Ascii_9
+keycode  71 = KP_Subtract
+keycode  72 =
+keycode  73 =
+keycode  74 = Select
+keycode  75 =
+keycode  76 = Control
+keycode  77 = +a         +A      Hex_A            Control_a        Control_a        Meta_a           Meta_Control_a
+keycode  78 = s
+keycode  79 = +d         +D      Hex_D            Control_d        Control_d        Meta_d           Meta_Control_d
+keycode  80 = +f         +F      Hex_F            Control_f        Control_f        Meta_f           Meta_Control_f
+keycode  81 = g
+keycode  82 = h
+keycode  83 = j
+keycode  84 = k
+keycode  85 = l
+keycode  86 = +odiaeresis       +Odiaeresis
+       alt     keycode  86 = Meta_semicolon
+keycode  87 = +adiaeresis       +Adiaeresis
+       control keycode  87 = Control_g
+       alt     keycode  87 = Meta_apostrophe
+keycode  88 = apostrophe        asterisk       grave
+       control keycode  88 = Control_backslash
+       alt     keycode  88 = Meta_backslash
+keycode  89 = Return
+       alt     keycode  89 = Meta_Control_m
+keycode  90 = KP_Enter
+keycode  91 = KP_4
+       altgr   keycode  91 = Hex_4
+       alt     keycode  91 = Ascii_4
+keycode  92 = KP_5
+       altgr   keycode  92 = Hex_5
+       alt     keycode  92 = Ascii_5
+keycode  93 = KP_6
+       altgr   keycode  93 = Hex_6
+       alt     keycode  93 = Ascii_6
+keycode  94 = KP_0
+       altgr   keycode  94 = Hex_0
+       alt     keycode  94 = Ascii_0
+keycode  95 =
+keycode  96 = Prior
+       shift   keycode  96 = Scroll_Backward
+keycode  97 =
+keycode  98 = Num_Lock
+keycode  99 = Shift
+keycode 100 = z
+keycode 101 = x
+keycode 102 = +c         +C     Hex_C            Control_c        Control_c        Meta_c           Meta_Control_c
+keycode 103 = v
+keycode 104 = +b         +B                Hex_B            Control_b        Control_b        Meta_b           Meta_Control_b
+keycode 105 = n
+keycode 106 = m
+keycode 107 = comma            semicolon
+       alt     keycode 107 = Meta_comma
+keycode 108 = period           colon
+       control keycode 108 = Compose
+       alt     keycode 108 = Meta_period
+keycode 109 = minus            underscore
+       control keycode 109 = Delete
+       alt     keycode 109 = Meta_slash
+keycode 110 = Shift
+keycode 111 = Linefeed
+keycode 112 = KP_1
+       altgr   keycode 112 = Hex_1
+       alt     keycode 112 = Ascii_1
+keycode 113 = KP_2
+       altgr   keycode 113 = Hex_2
+       alt     keycode 113 = Ascii_2
+keycode 114 = KP_3
+       altgr   keycode 114 = Hex_3
+       alt     keycode 114 = Ascii_3
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 = Help
+keycode 119 = Caps_Lock
+keycode 120 =
+keycode 120 =
+keycode 121 = space            space
+       control keycode 121 = nul
+       alt     keycode 121 = Meta_space
+keycode 122 =
+keycode 123 = Next
+       shift   keycode 123 = Scroll_Forward
+keycode 124 = less greater bar
+keycode 125 = KP_Add
+keycode 126 =
+keycode 127 =
diff --git a/keymaps/sun/sunt5-fr-latin1.map b/keymaps/sun/sunt5-fr-latin1.map
new file mode 100644
index 0000000..83e38a6
--- /dev/null
+++ b/keymaps/sun/sunt5-fr-latin1.map
@@ -0,0 +1,283 @@
+# Keyboard map for the Sun Type4/Type5 keyboards
+# found on SparcStations
+keymaps 0-2,4-5,8,12
+strings as usual
+compose as usual for "iso-8859-1"
+#
+#
+# Stop/L1
+keycode        0x01 =
+# SND_LOWER
+keycode        0x02 =
+# Encore/L2
+keycode        0x03 =
+# SND_LOUDER
+keycode        0x04 =
+keycode        0x05 = F1                       F11     Console_13
+       control keycode                 0x05 = F1
+       alt     keycode                 0x05 = Console_1
+       control alt     keycode         0x05 = Console_1
+keycode        0x06 = F2                       F12     Console_14
+       control keycode                 0x06 = F2
+       alt     keycode                 0x06 = Console_2
+       control alt     keycode         0x06 = Console_2
+keycode        0x07 = F10                      F20     Console_22
+       control keycode                 0x07 = F10
+       alt     keycode                 0x07 = Console_10
+       control alt     keycode         0x07 = Console_10
+keycode        0x08 = F3                       F13     Console_15
+       control keycode                 0x08 = F3
+       alt     keycode                 0x08 = Console_3
+       control alt     keycode         0x08 = Console_3
+keycode        0x09 = F11                      F11     Console_23
+       control keycode                 0x09 = F11
+       alt     keycode                 0x09 = Console_11
+       control alt     keycode         0x09 = Console_11
+keycode        0x0a = F4                       F14     Console_16
+       control keycode                 0x0a = F4
+       alt     keycode                 0x0a = Console_4
+       control alt     keycode         0x0a = Console_4
+keycode        0x0b = F12                      F12     Console_24
+       control keycode                 0x0b = F12
+       alt     keycode                 0x0b = Console_12
+       control alt     keycode         0x0b = Console_12
+keycode        0x0c = F5                       F15     Console_17
+       control Keycode                 0x0c = F5
+       alt     keycode                 0x0c = Console_5
+       control alt     keycode         0x0c = Console_5
+keycode        0x0d = AltGr
+keycode 0x0e = F6                      F16     Console_18
+       control keycode                 0x0e = F6
+       alt     keycode                 0x0e = Console_6
+       control alt     keycode         0x0e = Console_6
+# BLANK KEY on type 5 keyboards
+keycode 0x0f =
+keycode 0x10 = F7                      F17     Console_19
+       control keycode                 0x10 = F7
+       alt     keycode                 0x10 = Console_7
+       control alt     keycode         0x10 = Console_7
+keycode 0x11 = F8                      F18     Console_20
+       control keycode                 0x11 = F8
+       alt     keycode                 0x11 = Console_8
+       control alt     keycode         0x11 = Console_8
+keycode 0x12 = F9                      F19     Console_21
+       control keycode                 0x12 = F9
+       alt     keycode                 0x12 = Console_9
+       control alt     keycode         0x12 = Console_9
+keycode 0x13 = Alt
+keycode 0x14 = Up
+keycode 0x15 = Pause
+# Print Screen
+keycode 0x16 =
+keycode 0x17 = Scroll_Lock     Show_Memory     Show_Registers
+       control keycode                         0x17 = Show_State
+       alt     keycode                         0x17 = Scroll_Lock
+keycode 0x18 = Left
+       alt     keycode                         0x18 = Decr_Console
+# Props/L3
+keycode 0x19 =
+# Annuler/L4
+keycode 0x1a =
+keycode 0x1b = Down
+keycode 0x1c = Right
+       alt     keycode                         0x1c = Incr_Console
+keycode 0x1d = Escape          Escape
+       alt     keycode                         0x1d = Meta_Escape
+keycode 0x1e = ampersand       one
+       alt     keycode                         0x1e = Meta_one
+keycode 0x1f = eacute          two             asciitilde
+       control keycode                         0x1f = nul
+       shift   control keycode                 0x1f = nul
+       alt     keycode                         0x1f = Meta_two
+keycode 0x20 = quotedbl        three           numbersign
+       control keycode                         0x20 = Escape
+       alt     keycode                         0x20 = Meta_three
+keycode 0x21 = apostrophe      four            braceleft
+       control keycode                         0x21 = Control_backslash
+       alt     keycode                         0x21 = Meta_four
+keycode 0x22 = parenleft       five            bracketleft
+       control keycode                         0x22 = Control_bracketright
+       alt     keycode                         0x22 = Meta_five
+keycode 0x23 = minus           six             bar
+       control keycode                         0x23 = Control_asciicircum
+       alt     keycode                         0x23 = Meta_six
+keycode 0x24 = egrave          seven           grave
+       control keycode                         0x24 = Control_underscore
+       alt     keycode                         0x24 = Meta_seven
+keycode 0x25 = underscore      eight           backslash
+       control keycode                         0x25 = Delete
+       alt     keycode                         0x25 = Meta_eight
+keycode 0x26 = ccedilla        nine            asciicircum
+       alt     keycode                         0x26 = Meta_nine
+keycode 0x27 = agrave          zero            at
+       alt     keycode                         0x27 = Meta_zero
+keycode 0x28 = parenright      degree          bracketright
+       control keycode                         0x28 = Control_underscore
+       shift   control keycode                 0x28 = Control_underscore
+       alt     keycode                         0x28 = Meta_minus
+keycode 0x29 = equal           plus            braceright
+       alt     keycode                         0x29 = Meta_equal
+keycode 0x2a = twosuperior
+       control keycode                         0x2a = nul
+       alt     keycode                         0x2a = Meta_grave
+# Is marked as BackSpace but we define it as delete just like the i386
+# keyboard maps does
+keycode 0x2b = Delete          Delete
+       control keycode                         0x2b = BackSpace
+       alt     keycode                         0x2b = Meta_Delete
+keycode 0x2c = Insert
+# SND_OFF
+keycode 0x2d =
+keycode 0x2e = KP_Divide
+keycode 0x2f = KP_Multiply
+# Power ON/OFF key on type 5 keyboard
+keycode 0x30 =
+# Devant/L5
+keycode 0x31 =
+keycode 0x32 = KP_Period
+#      altgr   control keycode                 0x32 = Boot
+       control alt     keycode                 0x32 = Boot
+# Copier/L6
+keycode 0x33 =
+# Home key, same difference
+keycode 0x34 = Find
+keycode 0x35 = Tab             Tab
+       alt     keycode                         0x35 = Meta_Tab
+keycode 0x36 = a
+       altgr   keycode                         0x4d = Hex_A
+keycode 0x37 = z
+keycode 0x38 = e
+       altgr   keycode                         0x38 = Hex_E
+keycode 0x39 = r
+keycode 0x3a = t
+keycode 0x3b = y
+keycode 0x3c = u
+keycode 0x3d = i
+keycode 0x3e = o
+keycode 0x3f = p
+keycode 0x40 = dead_circumflex dead_diaeresis
+       control keycode                         0x40 = Escape
+       alt     keycode                         0x40 = Meta_bracketleft
+keycode 0x41 = dollar          sterling        currency
+       control keycode                         0x41 = Control_bracketright
+       alt     keycode                         0x41 = Meta_bracketright
+keycode 0x42 = Delete          Delete
+       control keycode                         0x42 = BackSpace
+       alt     keycode                         0x43 = Meta_Delete
+       control alt     keycode                 0x42 = Boot
+keycode 0x43 = Compose
+keycode 0x44 = KP_7
+       alt     keycode                         0x44 = Ascii_7
+       altgr   keycode                         0x44 = Hex_7
+keycode 0x45 = KP_8
+       alt     keycode                         0x45 = Ascii_8
+       altgr   keycode                         0x45 = Hex_8
+keycode 0x46 = KP_9
+       alt     keycode                         0x46 = Ascii_9
+       altgr   keycode                         0x46 = Hex_9
+keycode 0x47 = KP_Subtract
+# Ouvrir/L6
+keycode 0x48 =
+# Coller/L8
+keycode 0x49 =
+keycode 0x4a = Select
+# No key produces 0x4b to my knowledge
+keycode 0x4b =
+keycode 0x4c = Control
+keycode 0x4d = q
+       altgr   keycode                         0x4d = Hex_A
+keycode 0x4e = s
+keycode 0x4f = d
+       altgr   keycode                         0x4f = Hex_D
+keycode 0x50 = f
+       altgr   keycode                         0x50 = Hex_F
+keycode 0x51 = g
+keycode 0x52 = h
+keycode 0x53 = j
+keycode 0x54 = k
+keycode 0x55 = l
+keycode 0x56 = +m              +M
+       alt     keycode                         0x56 = Meta_semicolon
+keycode 0x57 = ugrave          percent
+       control keycode                         0x57 = Control_g
+       alt     keycode                         0x57 = Meta_apostrophe
+keycode 0x58 = asterisk        mu
+       control keycode                         0x58 = Control_backslash
+       alt     keycode                         0x58 = Meta_backslash
+keycode 0x59 = Return
+       alt     keycode                         0x59 = Meta_Control_m
+keycode 0x5a = KP_Enter
+keycode 0x5b = KP_4
+       alt     keycode                         0x5b = Ascii_4
+       altgr   keycode                         0x5b = Hex_4
+keycode 0x5c = KP_5
+       alt     keycode                         0x5c = Ascii_5
+       altgr   keycode                         0x5c = Hex_5
+keycode 0x5d = KP_6
+       alt     keycode                         0x5d = Ascii_6
+       altgr   keycode                         0x5d = Hex_6
+keycode 0x5e = KP_0
+       alt     keycode                         0x5e = Ascii_0
+       altgr   keycode                         0x5e = Hex_0
+# Cher./L9
+keycode 0x5f =
+keycode 0x60 = Prior
+       shift   keycode                         0x60 = Scroll_Backward
+# Couper/L10
+keycode 0x61 =
+keycode 0x62 = Num_Lock
+# Linux/i386 console makes no distinction between right/left shift
+# so neither do we.
+keycode 0x63 = Shift
+keycode 0x64 = w
+keycode 0x65 = x
+keycode 0x66 = c
+       altgr   keycode                         0x66 = Hex_C
+keycode 0x67 = v
+keycode 0x68 = b
+       altgr   keycode                         0x68 = Hex_B
+keycode 0x69 = n
+keycode 0x6a = comma           question
+keycode 0x6b = semicolon       period
+       alt     keycode                         0x6b = Meta_comma
+keycode 0x6c = colon           slash
+       control keycode                         0x6c = Compose
+       alt     keycode                         0x6c = Meta_period
+keycode 0x6d = exclam          section
+       control keycode                         0x6d = Delete
+       alt     keycode                         0x6d = Meta_slash
+keycode 0x6e = Shift
+keycode 0x6f = Linefeed
+keycode 0x70 = KP_1
+       alt     keycode                         0x70 = Ascii_1
+       altgr   keycode                         0x70 = Hex_1
+keycode 0x71 = KP_2
+       alt     keycode                         0x71 = Ascii_2
+       altgr   keycode                         0x71 = Hex_2
+keycode 0x72 = KP_3
+       alt     keycode                         0x72 = Ascii_3
+       altgr   keycode                         0x72 = Hex_3
+# To my knowledge no key produces 0x73, 0x74, or 0x75
+keycode 0x73 =
+keycode 0x74 =
+keycode 0x75 =
+keycode 0x76 = Help
+keycode 0x77 = Caps_Lock
+# A True Meta-key, unused at this time
+keycode 0x78 =
+keycode 0x79 = space           space
+       control keycode                         0x79 = nul
+       alt     keycode                         0x79 = Meta_space
+# Another real Meta-key, again unused
+keycode 0x7a =
+keycode 0x7b = Next
+       shift   keycode                         0x7b = Scroll_Forward
+keycode 0x7c = less            greater
+       alt     keycode                         0x7c = Meta_less
+keycode 0x7d = KP_Add
+# No keys produce the following
+keycode 0x7e =
+# keycode 0x7f is special and it means 'all keys released' and is
+# taken care of within the sun keyboard driver itself
+keycode 0x7f =
+# That's all folks...
diff --git a/keymaps/sun/sunt5-ru.map b/keymaps/sun/sunt5-ru.map
new file mode 100644
index 0000000..f217b4e
--- /dev/null
+++ b/keymaps/sun/sunt5-ru.map
@@ -0,0 +1,383 @@
+# Russian keyboard layout for Type4/5 Sun keyboards
+# Written by Alexander V. Lukyanov <lav@yars.free.net>
+# Version 1.0
+#
+# Uses KOI8-R coding without 'jo'
+#
+keymaps 0-6,8,10,12,14
+keycode   1 =
+keycode   2 =
+keycode   3 =
+keycode   4 =
+keycode   5 = F1
+       shift   keycode   5 = F11
+       alt     keycode   5 = Console_1
+       control alt     keycode   5 = Console_1
+       altgr   shift   keycode   5 = F11
+       altgr   alt     keycode   5 = Console_1
+       altgr   control alt     keycode   5 = Console_1
+keycode   6 = F2
+       shift   keycode   6 = F12
+       alt     keycode   6 = Console_2
+       control alt     keycode   6 = Console_2
+       altgr   shift   keycode   6 = F12
+       altgr   alt     keycode   6 = Console_2
+       altgr   control alt     keycode   6 = Console_2
+keycode   7 = F10
+       shift   keycode   7 = F20
+       alt     keycode   7 = Console_10
+       control alt     keycode   7 = Console_10
+       altgr   shift   keycode   7 = F20
+       altgr   alt     keycode   7 = Console_10
+       altgr   control alt     keycode   7 = Console_10
+keycode   8 = F3
+       shift   keycode   8 = F13
+       alt     keycode   8 = Console_3
+       control alt     keycode   8 = Console_3
+       altgr   shift   keycode   8 = F13
+       altgr   alt     keycode   8 = Console_3
+       altgr   control alt     keycode   8 = Console_3
+keycode   9 = F11
+       alt     keycode   9 = Console_11
+       control alt     keycode   9 = Console_11
+       altgr   alt     keycode   9 = Console_11
+       altgr   control alt     keycode   9 = Console_11
+keycode  10 = F4
+       shift   keycode  10 = F14
+       alt     keycode  10 = Console_4
+       control alt     keycode  10 = Console_4
+       altgr   shift   keycode  10 = F14
+       altgr   alt     keycode  10 = Console_4
+       altgr   control alt     keycode  10 = Console_4
+keycode  11 = F12
+       alt     keycode  11 = Console_12
+       control alt     keycode  11 = Console_12
+       altgr   alt     keycode  11 = Console_12
+       altgr   control alt     keycode  11 = Console_12
+keycode  12 = F5
+       shift   keycode  12 = F15
+       alt     keycode  12 = Console_5
+       control alt     keycode  12 = Console_5
+       altgr   shift   keycode  12 = F15
+       altgr   alt     keycode  12 = Console_5
+       altgr   control alt     keycode  12 = Console_5
+keycode  13 = AltGr_Lock
+keycode  14 = F6
+       shift   keycode  14 = F16
+       alt     keycode  14 = Console_6
+       control alt     keycode  14 = Console_6
+       altgr   shift   keycode  14 = F16
+       altgr   alt     keycode  14 = Console_6
+       altgr   control alt     keycode  14 = Console_6
+keycode  15 =
+keycode  16 = F7
+       shift   keycode  16 = F17
+       alt     keycode  16 = Console_7
+       control alt     keycode  16 = Console_7
+       altgr   shift   keycode  16 = F17
+       altgr   alt     keycode  16 = Console_7
+       altgr   control alt     keycode  16 = Console_7
+keycode  17 = F8
+       shift   keycode  17 = F18
+       alt     keycode  17 = Console_8
+       control alt     keycode  17 = Console_8
+       altgr   shift   keycode  17 = F18
+       altgr   alt     keycode  17 = Console_8
+       altgr   control alt     keycode  18 = Console_8
+keycode  18 = F9
+       shift   keycode  18 = F19
+       alt     keycode  18 = Console_9
+       control alt     keycode  18 = Console_9
+       altgr   shift   keycode  18 = F19
+       altgr   alt     keycode  18 = Console_9
+       altgr   control alt     keycode  18 = Console_9
+keycode  19 = Alt
+keycode  20 = Up
+keycode  21 = Pause
+keycode  22 =
+keycode  23 = Scroll_Lock      Show_Memory      Show_Registers   Show_State
+       alt     keycode  23 = Scroll_Lock
+keycode  24 = Left
+       alt     keycode  24 = Decr_Console
+       altgr   alt     keycode  24 = Decr_Console
+keycode  25 =
+keycode  26 =
+keycode  27 = Down
+keycode  28 = Right
+       alt     keycode  28 = Incr_Console
+       altgr   alt     keycode  28 = Incr_Console
+keycode  29 = Escape
+       alt     keycode  29 = Meta_Escape
+       altgr   alt     keycode  29 = Meta_Escape
+keycode  30 = one              exclam  one     exclam
+       alt     keycode  30 = Meta_one
+       altgr   alt     keycode  30 = Meta_one
+keycode  31 = two              at               two               at
+       control keycode  31 = nul
+       alt     keycode  31 = Meta_two
+       altgr   control keycode  31 = nul
+       altgr   alt     keycode  31 = Meta_two
+keycode  32 = three            numbersign      three   numbersign
+       control keycode  32 = Escape
+       alt     keycode  32 = Meta_three
+       altgr   control keycode  32 = Escape
+       altgr   alt     keycode  32 = Meta_three
+keycode  33 = four             dollar           four   dollar
+       control keycode  33 = Control_backslash
+       alt     keycode  33 = Meta_four
+       altgr   control keycode  33 = Control_backslash
+       altgr   alt     keycode  33 = Meta_four
+keycode  34 = five             percent         five    colon
+       control keycode  34 = Control_bracketright
+       alt     keycode  34 = Meta_five
+       altgr   control keycode  34 = Control_bracketright
+       altgr   alt     keycode  34 = Meta_five
+keycode  35 = six              asciicircum     six     comma
+       control keycode  35 = Control_asciicircum
+       alt     keycode  35 = Meta_six
+       altgr   control keycode  35 = Control_asciicircum
+       altgr   alt     keycode  35 = Meta_six
+keycode  36 = seven            ampersand       seven   period
+       control keycode 36 = Control_underscore
+       alt     keycode  36 = Meta_seven
+       altgr   alt     keycode  36 = Meta_seven
+keycode  37 = eight            asterisk                eight   semicolon
+       control keycode  37 = Delete
+       alt     keycode  37 = Meta_eight
+       altgr   control keycode  37 = Delete
+       altgr   alt     keycode  37 = Meta_eight
+keycode  38 = nine             parenleft       nine    parenleft
+       alt     keycode  38 = Meta_nine
+       altgr   alt     keycode  38 = Meta_nine
+keycode  39 = zero             parenright      zero    parenright
+       alt     keycode  39 = Meta_zero
+       altgr   alt     keycode  39 = Meta_zero
+keycode  40 = minus            underscore       minus  underscore
+       control keycode  40 = Control_underscore
+       alt     keycode  40 = Meta_minus
+       altgr   control keycode  40 = Control_underscore
+       altgr   alt     keycode  40 = Meta_minus
+keycode  41 = equal            plus            equal   plus
+       alt     keycode  41 = Meta_equal
+       altgr   alt     keycode  41 = Meta_equal
+keycode  42 = grave            asciitilde      grave   asciitilde
+       control keycode  42 = nul
+       alt     keycode  42 = Meta_grave
+       altgr   control keycode  42 = nul
+       altgr   alt     keycode  42 = Meta_grave
+keycode  43 = Delete           Delete          Delete  Delete
+       control keycode  43 = BackSpace
+       alt     keycode  43 = Meta_Delete
+       altgr   control keycode  43 = BackSpace
+       altgr   alt     keycode  43 = Meta_Delete
+keycode  44 = Insert
+keycode  45 = equal
+keycode  46 = KP_Divide
+keycode  47 = KP_Multiply
+keycode  48 =
+keycode  49 =
+keycode  50 = KP_Period
+       control alt     keycode  50 = Boot
+       altgr   control alt     keycode  50 = Boot
+keycode  51 =
+keycode  52 = Find
+keycode  53 = Tab              Tab
+       alt     keycode  53 = Meta_Tab
+       altgr   alt     keycode  53 = Meta_Tab
+keycode  54 = q
+       altgr           keycode 54 = +0xCA
+       altgr   shift   keycode 54 = +0xEA
+keycode  55 = w
+       altgr           keycode 55 = +0xC3
+       altgr   shift   keycode 55 = +0xE3
+keycode  56 = e
+       altgr           keycode 56 = +0xD5
+       altgr   shift   keycode 56 = +0xF5
+keycode  57 = r
+       altgr           keycode 57 = +0xCB
+       altgr   shift   keycode 57 = +0xEB
+keycode  58 = t
+       altgr           keycode 58 = +0xC5
+       altgr   shift   keycode 58 = +0xE5
+keycode  59 = y
+       altgr           keycode 59 = +0xCE
+       altgr   shift   keycode 59 = +0xEE
+keycode  60 = u
+       altgr           keycode 60 = +0xC7
+       altgr   shift   keycode 60 = +0xE7
+keycode  61 = i
+       altgr           keycode 61 = +0xDB
+       altgr   shift   keycode 61 = +0xFB
+keycode  62 = o
+       altgr           keycode 62 = +0xDD
+       altgr   shift   keycode 62 = +0xFD
+keycode  63 = p
+       altgr           keycode 63 = +0xDA
+       altgr   shift   keycode 63 = +0xFA
+keycode  64 = bracketleft      braceleft
+       control keycode  64 = Escape
+       alt     keycode  64 = Meta_bracketleft
+       altgr   control keycode  64 = Escape
+       altgr   alt     keycode  64 = Meta_bracketleft
+       altgr           keycode 64 = +0xC8
+       altgr   shift   keycode 64 = +0xE8
+keycode  65 = bracketright     braceright
+       control keycode  65 = Control_bracketright
+       alt     keycode  65 = Meta_bracketright
+       altgr   control keycode  65 = Control_bracketright
+       altgr   alt     keycode  65 = Meta_bracketright
+       altgr           keycode  65 = +0xDF
+       altgr   shift   keycode  65 = +0xFF
+keycode  66 = Remove
+       control alt     keycode  66 = Boot
+       altgr   control alt     keycode  66 = Boot
+keycode  67 =
+keycode  68 = KP_7
+       alt     keycode  68 = Ascii_7
+       altgr   alt     keycode  68 = Ascii_7
+keycode  69 = KP_8
+       alt     keycode  69 = Ascii_8
+       altgr   alt     keycode  69 = Ascii_8
+keycode  70 = KP_9
+       alt     keycode  70 = Ascii_9
+       altgr   alt     keycode  70 = Ascii_9
+keycode  71 = KP_Subtract
+keycode  72 =
+keycode  73 =
+keycode  74 = Select
+keycode  75 =
+keycode  76 = Control
+keycode  77 = a
+       altgr           keycode 77 = +0xC6
+       altgr   shift   keycode 77 = +0xE6
+keycode  78 = s
+       altgr           keycode 78 = +0xD9
+       altgr   shift   keycode 78 = +0xF9
+keycode  79 = d
+       altgr           keycode 79 = +0xD7
+       altgr   shift   keycode 79 = +0xF7
+keycode  80 = f
+       altgr           keycode 80 = +0xC1
+       altgr   shift   keycode 80 = +0xE1
+keycode  81 = g
+       altgr           keycode 81 = +0xD0
+       altgr   shift   keycode 81 = +0xF0
+keycode  82 = h
+       altgr           keycode 82 = +0xD2
+       altgr   shift   keycode 82 = +0xF2
+keycode  83 = j
+       altgr           keycode 83 = +0xCF
+       altgr   shift   keycode 83 = +0xEF
+keycode  84 = k
+       altgr           keycode 84 = +0xCC
+       altgr   shift   keycode 84 = +0xEC
+keycode  85 = l
+       altgr           keycode 85 = +0xC4
+       altgr   shift   keycode 85 = +0xE4
+keycode  86 = semicolon        colon
+       alt     keycode  86 = Meta_semicolon
+       altgr   alt     keycode  86 = Meta_semicolon
+       altgr           keycode 86 = +0xD6
+       altgr   shift   keycode 86 = +0xF6
+keycode  87 = apostrophe       quotedbl
+       control keycode  87 = Control_g
+       alt     keycode  87 = Meta_apostrophe
+       altgr   control keycode  87 = Control_g
+       altgr   alt     keycode  87 = Meta_apostrophe
+       altgr           keycode 87 = +0xDC
+       altgr   shift   keycode 87 = +0xFC
+keycode  88 = backslash        bar     backslash       bar
+       control keycode  88 = Control_backslash
+       alt     keycode  88 = Meta_backslash
+       altgr   control keycode  88 = Control_backslash
+       altgr   alt     keycode  88 = Meta_backslash
+keycode  89 = Return
+       alt     keycode  89 = Meta_Control_m
+       altgr   alt     keycode  89 = Meta_Control_m
+keycode  90 = KP_Enter
+keycode  91 = KP_4
+       alt     keycode  91 = Ascii_4
+       altgr   alt     keycode  91 = Ascii_4
+keycode  92 = KP_5
+       alt     keycode  92 = Ascii_5
+       altgr   alt     keycode  92 = Ascii_5
+keycode  93 = KP_6
+       alt     keycode  93 = Ascii_6
+       altgr   alt     keycode  93 = Ascii_6
+keycode  94 = KP_0
+       alt     keycode  94 = Ascii_0
+       altgr   alt     keycode  94 = Ascii_0
+keycode  95 =
+keycode  96 = Prior
+       shift   keycode  96 = Scroll_Backward
+       altgr   shift   keycode  96 = Scroll_Backward
+keycode  97 =
+keycode  98 = Num_Lock
+keycode  99 = Shift
+keycode 100 = z
+       altgr           keycode 100 = +0xD1
+       altgr   shift   keycode 100 = +0xF1
+keycode 101 = x
+       altgr           keycode 101 = +0xDE
+       altgr   shift   keycode 101 = +0xFE
+keycode 102 = c
+       altgr           keycode 102 = +0xD3
+       altgr   shift   keycode 102 = +0xF3
+keycode 103 = v
+       altgr           keycode 103 = +0xCD
+       altgr   shift   keycode 103 = +0xED
+keycode 104 = b
+       altgr           keycode 104 = +0xC9
+       altgr   shift   keycode 104 = +0xE9
+keycode 105 = n
+       altgr           keycode 105 = +0xD4
+       altgr   shift   keycode 105 = +0xF4
+keycode 106 = m
+       altgr           keycode 106 = +0xD8
+       altgr   shift   keycode 106 = +0xF8
+keycode 107 = comma            less
+       alt     keycode 107 = Meta_comma
+       altgr   alt     keycode 107 = Meta_comma
+       altgr           keycode 107 = +0xC2
+       altgr   shift   keycode 107 = +0xE2
+keycode 108 = period           greater
+#      control keycode 108 = Compose
+       alt     keycode 108 = Meta_period
+       altgr   alt     keycode 108 = Meta_period
+       altgr           keycode 108 = +0xC0
+       altgr   shift   keycode 108 = +0xE0
+keycode 109 = slash    question        slash   question
+       control keycode 109 = Delete
+       alt     keycode 109 = Meta_slash
+       altgr   control keycode 109 = Delete
+       altgr   alt     keycode 109 = Meta_slash
+keycode 110 = Shift
+keycode 111 = Linefeed
+keycode 112 = KP_1
+       alt     keycode 112 = Ascii_1
+       altgr   alt     keycode 112 = Ascii_1
+keycode 113 = KP_2
+       alt     keycode 113 = Ascii_2
+       altgr   alt     keycode 113 = Ascii_2
+keycode 114 = KP_3
+       alt     keycode 114 = Ascii_3
+       altgr   alt     keycode 114 = Ascii_3
+keycode 115 =
+keycode 116 =
+keycode 117 =
+keycode 118 = Help
+keycode 119 = Caps_Lock
+keycode 120 =
+keycode 121 = space
+       control keycode 121 = nul
+       alt     keycode 121 = Meta_space
+       altgr   control keycode 121 = nul
+       altgr   alt     keycode 121 = Meta_space
+keycode 122 =
+keycode 123 = Next
+       shift   keycode 123 = Scroll_Forward
+       altgr   shift   keycode 123 = Scroll_Forward
+keycode 124 =
+keycode 125 = KP_Add
+keycode 126 =
+keycode 127 =
diff --git a/man1/chvt.1 b/man1/chvt.1
new file mode 100644
index 0000000..c7b9105
--- /dev/null
+++ b/man1/chvt.1
@@ -0,0 +1,23 @@
+.\" @(#)chvt.1 1.0 970126 aeb
+.TH CHVT 1 "26 January 1997"
+.SH NAME
+chvt \- change foreground virtual terminal
+.SH SYNOPSIS
+.B chvt
+.I N
+.SH DESCRIPTION
+The command
+.B chvt
+.I N
+makes
+.I /dev/ttyN
+the foreground terminal.
+(The corresponding screen is created if it did not exist yet.
+To get rid of unused VTs,
+use
+.BR deallocvt (1).)
+The key combination
+.RI (Ctrl-)LeftAlt-F N
+(with
+.I N
+in the range 1-12) usually has a similar effect.
diff --git a/man1/deallocvt.1 b/man1/deallocvt.1
new file mode 100644
index 0000000..45a329d
--- /dev/null
+++ b/man1/deallocvt.1
@@ -0,0 +1,27 @@
+.\" @(#)deallocvt.1 1.0 970317 aeb
+.TH DEALLOCVT 1 "17 Mar 1997"
+.SH NAME
+deallocvt \- deallocate unused virtual consoles
+.SH SYNOPSIS
+.B deallocvt
+.RI [ N " ...]"
+.SH DESCRIPTION
+.LP
+The command
+.B deallocvt
+deallocates kernel memory and data structures
+for all unused virtual consoles.
+If one or more arguments
+.IR N " ..."
+are given, only the corresponding consoles
+.I /dev/ttyN
+are deallocated.
+
+A virtual console is unused if it is not the foreground console,
+and no process has it open for reading or writing, and no text
+has been selected on its screen.
+.SH "SEE ALSO"
+.BR chvt (1),
+.BR openvt (1)
+
+
diff --git a/man1/dumpkeys.1.in b/man1/dumpkeys.1.in
new file mode 100644
index 0000000..d1743e2
--- /dev/null
+++ b/man1/dumpkeys.1.in
@@ -0,0 +1,209 @@
+.\" @(#)loadkeys.1 1.0 93/09/1 RK
+.TH DUMPKEYS 1 "1 Sep 1993"
+.SH NAME
+dumpkeys \- dump keyboard translation tables
+.SH SYNOPSIS
+.B dumpkeys
+[
+.B \-hilfn
+.BI \-c charset
+.B \-\-help \-\-short\-info \-\-long\-info \-\-numeric \-\-full\-table \-\-funcs\-only \-\-keys\-only \-\-compose\-only
+.BI \-\-charset= charset
+]
+.SH DESCRIPTION
+.IX "dumpkeys command" "" "\fLdumpkeys\fR command"  
+.LP
+.B dumpkeys
+writes, to the standard output, the current contents of the keyboard
+driver's translation tables, in the format specified by
+.BR keymaps (5).
+.LP
+Using the various options, the format of the output can be controlled
+and also other information from the kernel and the programs
+.BR dumpkeys (1)
+and
+.BR loadkeys (1)
+can be obtained.
+.SH OPTIONS
+.TP
+.B \-h \-\-help
+Prints the program's version number and a short usage message to the
+program's standard error output and exits.
+.TP
+.B \-i \-\-short-info
+Prints some characteristics of the kernel's keyboard driver. The items
+shown are:
+.LP
+.RS
+Keycode range supported by the kernel
+.LP
+.RS
+This tells what values can be used after the
+.B keycode
+keyword in keytable files. See
+.BR keymaps (5)
+for more information and the syntax of these files.
+.RE
+.LP
+Number of actions bindable to a key
+.LP
+.RS
+This tells how many different actions a single key can output using
+various modifier keys. If the value is 16 for example, you can define up
+to 16 different actions to a key combined with modifiers. When the value
+is 16, the kernel probably knows about four modifier keys, which you can
+press in different combinations with the key to access all the bound
+actions.
+.RE
+.LP
+Ranges of action codes supported by the kernel
+.LP
+.RS
+This item contains a list of action code ranges in hexadecimal notation.
+These are the values that can be used in the right hand side of a key
+definition, ie. the
+.IR vv 's
+in a line
+.LP
+.RS
+.B keycode
+.I xx
+=
+.I vv vv vv vv
+.RE
+.LP
+(see
+.BR keymaps (5)
+for more information about the format of key definition lines).
+.BR dumpkeys (1)
+and
+.BR loadkeys (1)
+support a symbolic notation, which is preferable to the numeric one, as
+the action codes may vary from kernel to kernel while the symbolic names
+usually remain the same. However, the list of action code ranges can be
+used to determine, if the kernel actually supports all the symbols
+.BR loadkeys (1)
+knows, or are there maybe some actions supported by the kernel that
+have no symbolic name in your
+.BR loadkeys (1)
+program. To see this, you compare the range list with the action symbol
+list, see option
+.B --long-info
+below.
+.RE
+.LP
+Number of function keys supported by kernel
+.LP
+.RS
+This tells the number of action codes that can be used to output
+strings of characters. These action codes are traditionally bound to
+the various function and editing keys of the keyboard and are defined
+to send standard escape sequences. However, you can redefine these to
+send common command lines, email addresses or whatever you like.
+Especially if the number of this item is greater than the number of
+function and editing keys in your keyboard, you may have some "spare"
+action codes that you can bind to AltGr-letter combinations, for example,
+to send some useful strings. See
+.BR loadkeys (1)
+for more details.
+.RE
+.LP
+Function strings
+.LP
+.RS
+You can see you current function key definitions with the command
+.LP
+.RS
+.B dumpkeys --funcs-only
+.RE
+.LP
+.RE
+.RE
+.LP
+.TP
+.B \-l \-\-long-info
+This option instructs
+.B dumpkeys
+to print a long information listing. The output is the same as with the
+.B --short-info
+appended with the list of action symbols supported by
+.BR loadkeys (1)
+and
+.BR dumpkeys (1),
+along with the symbols' numeric values.
+.LP
+.TP
+.B \-n \-\-numeric
+This option causes
+.B dumpkeys
+to by-pass the conversion of action code values to symbolic notation and
+to print the in hexadecimal format instead.
+.LP
+.TP
+.B \-f \-\-full-table
+This makes
+.B dumpkeys
+skip all the short-hand heuristics (see
+.BR keymaps (5))
+and output the key bindings in the canonical form. First a keymaps
+line describing the currently defined modifier combinations
+is printed. Then for each key a row with a column for each
+modifier combination is printed. For
+example, if the current keymap in use uses seven modifiers,
+every row will have seven action code columns. This format
+can be useful for example to programs that post-process the
+output of
+.BR dumpkeys .
+.LP
+.TP
+.B \-\-funcs-only
+When this option is given,
+.B dumpkeys
+prints only the function key string definitions. Normally
+.B dumpkeys
+prints both the key bindings and the string definitions.
+.LP
+.TP
+.B \-\-keys-only
+When this option is given,
+.B dumpkeys
+prints only the key bindings. Normally
+.B dumpkeys
+prints both the key bindings and the string definitions.
+.LP
+.TP
+.B \-\-compose-only
+When this option is given,
+.B dumpkeys
+prints only the compose key combinations.
+This option is available only if your kernel has compose key support.
+.LP
+.TP
+.BI \-c charset " " " " \-\-charset= charset
+This instructs
+.B dumpkeys
+to interpret character code values according to the specified character
+set. This affects only the translation of character code values to
+symbolic names. Valid values for
+.I charset
+currently are
+.BR iso-8859-X ,
+Where X is a digit in 1-9.  If no
+.I charset
+is specified,
+.B iso-8859-1
+is used as a default.
+This option produces an output line `charset "iso-8859-X"', telling
+loadkeys how to interpret the keymap. (For example, "division" is
+0xf7 in iso-8859-1 but 0xba in iso-8859-8.)
+.LP
+.SH FILES
+.PD 0
+.TP 20
+.BI @datadir@/keymaps
+recommended directory for keytable files
+.PD
+.SH "SEE ALSO"
+.BR loadkeys (1),
+.BR keymaps (5)
+
diff --git a/man1/kbd_mode.1 b/man1/kbd_mode.1
new file mode 100644
index 0000000..ee3316a
--- /dev/null
+++ b/man1/kbd_mode.1
@@ -0,0 +1,41 @@
+.\" @(#)kbd_mode.1 1.0 940406 aeb
+.TH KBD_MODE 1 "6 Apr 1994"
+.SH NAME
+kbd_mode \- report or set the keyboard mode
+.SH SYNOPSIS
+.B kbd_mode
+[
+.I -a | -u | -k | -s 
+]
+.SH DESCRIPTION
+.IX "kbd_mode command" "" "\fLkbd_mode\fR command"  
+.LP
+Without argument,
+.B kbd_mode
+prints the current keyboard mode (RAW, MEDIUMRAW or XLATE).
+With argument, it sets the keyboard mode as indicated:
+.LP
+\-s: scancode mode (RAW),
+.LP
+\-k: keycode mode (MEDIUMRAW),
+.LP
+\-a: ASCII mode (XLATE),
+.LP
+\-u: UTF-8 mode (UNICODE).
+.LP
+Of course the "\-a" is only traditional, and the code used can be any
+8-bit character set.  With "\-u" a 16-bit character set is expected,
+and these chars are transmitted to the kernel as 1, 2, or 3 bytes
+(following the UTF-8 coding).
+In these latter two modes the key mapping defined by loadkeys(1)
+is used.
+
+Warning: changing the keyboard mode, other than between ASCII and
+Unicode, will probably make your keyboard unusable.
+This command is only meant for use (say via remote login)
+when some program left your keyboard in the wrong state.
+Note that in some obsolete versions of this program the "\-u"
+option was a synonym for "\-s".
+.SH "SEE ALSO"
+.BR loadkeys (1)
+
diff --git a/man1/loadkeys.1.in b/man1/loadkeys.1.in
new file mode 100644
index 0000000..28d473e
--- /dev/null
+++ b/man1/loadkeys.1.in
@@ -0,0 +1,153 @@
+.\" @(#)loadkeys.1
+.TH LOADKEYS 1 "6 Feb 1994"
+.SH NAME
+loadkeys \- load keyboard translation tables
+.SH SYNOPSIS
+.B loadkeys
+[
+.I -c --clearcompose
+] [
+.I -d --default
+] [
+.I -h --help
+] [
+.I -m --mktable
+] [
+.I -s --clearstrings
+] [
+.I -v --verbose
+] [
+.I filename...
+]
+.LP
+.SH DESCRIPTION
+.IX "loadkeys command" "" "\fLloadkeys\fR command"  
+.LP
+The program
+.B loadkeys
+reads the file or files specified by
+.IR filename... .
+Its main purpose is to load the kernel keymap for the console.
+.SH "RESET TO DEFAULT"
+If the
+.I -d
+(or
+.I --default
+) option is given,
+.B loadkeys
+loads a default keymap, probably the file
+.I defkeymap.map
+either in
+.I @datadir@/keymaps
+or in
+.IR /usr/src/linux/drivers/char .
+(Probably the former was user-defined, while the latter
+is a qwerty keyboard map for PCs - maybe not what was desired.)
+Sometimes, with a strange keymap loaded (with the minus on
+some obscure unknown modifier combination) it is easier to
+type `loadkeys defkeymap'.
+.SH "LOAD KERNEL KEYMAP"
+The main function of
+.B loadkeys
+is to load or modify the keyboard driver's translation tables.
+When specifying the file names, standard input can be denoted
+by dash (-). If no file is specified, the data is read from
+the standard input.
+.LP
+For many countries and keyboard types appropriate keymaps
+are available already, and a command like `loadkeys uk' might
+do what you want. On the other hand, it is easy to construct
+one's own keymap. The user has to tell what symbols belong
+to each key. She can find the keycode for a key by use of
+.BR showkey (1),
+while the keymap format is given in
+.BR keymaps (5)
+and can also be seen from the output of
+.BR dumpkeys (1).
+.SH "LOAD KERNEL ACCENT TABLE"
+If the input file does not contain any compose key definitions,
+the kernel accent table is left unchanged, unless the
+.I -c
+(or
+.I --clearcompose
+) option is given, in which case the kernel accent table is emptied.
+If the input file does contain compose key definitions, then all
+old definitions are removed, and replaced by the specified new entries.
+The kernel accent table is a sequence of (by default 68) entries
+describing how dead diacritical signs and compose keys behave.
+For example, a line
+.LP
+.RS
+compose ',' 'c' to ccedilla
+.RE
+.LP
+means that <ComposeKey><,><c> must be combined to <ccedilla>.
+The current content of this table can be see
+using `dumpkeys --compose-only'.
+.SH "LOAD KERNEL STRING TABLE"
+The option
+.I -s
+(or
+.I --clearstrings
+) clears the kernel string table. If this option is not given,
+.B loadkeys
+will only add or replace strings, not remove them.
+(Thus, the option \-s is required to reach a well-defined state.)
+The kernel string table is a sequence of strings
+with names like F31. One can make function key F5 (on
+an ordinary PC keyboard) produce the text `Hello!',
+and Shift+F5 `Goodbye!' using lines
+.LP
+.RS
+keycode 63 = F70 F71
+.br
+string F70 = "Hello!"
+.br
+string F71 = "Goodbye!"
+.RE
+.LP
+in the keymap.
+The default bindings for the function keys are certain
+escape sequences mostly inspired by the VT100 terminal.
+.SH "CREATE KERNEL SOURCE TABLE"
+If the 
+.I -m
+(or
+.I --mktable
+) option is given
+.B loadkeys
+prints to the standard output a file that may be used as
+.I /usr/src/linux\%/drivers\%/char\%/defkeymap.c,
+specifying the default key bindings for a kernel
+(and does not modify the current keymap).
+.SH "OTHER OPTIONS"
+.TP
+.B \-h \-\-help
+.B loadkeys
+prints its version number and a short usage message to the programs
+standard error output and exits.
+.SH WARNING
+Note that anyone having read access to
+.B /dev/console
+can run
+.B loadkeys
+and thus change the keyboard layout, possibly making it unusable. Note
+that the keyboard translation table is common for all the virtual
+consoles, so any changes to the keyboard bindings affect all the virtual
+consoles simultaneously.
+.LP
+Note that because the changes affect all the virtual consoles, they also
+outlive your session. This means that even at the login prompt the key
+bindings may not be what the user expects.
+.SH FILES
+.TP
+.BI @datadir@/keymaps
+default directory for keymaps
+.LP
+.TP
+.BI /usr/src/linux/drivers/char/defkeymap.map
+default kernel keymap
+.SH "SEE ALSO"
+.BR dumpkeys (1),
+.BR keymaps (5)
+
diff --git a/man1/psfaddtable.1 b/man1/psfaddtable.1
new file mode 100644
index 0000000..7bdaf40
--- /dev/null
+++ b/man1/psfaddtable.1
@@ -0,0 +1,49 @@
+.\" @(#)psfaddtable.1
+.TH PSFADDTABLE 1 "25 Oct 1994"
+.SH NAME
+psfaddtable \- add a Unicode character table to a console font
+.SH SYNOPSIS
+.B psfaddtable
+.I fontfile tablefile
+.RI [ outfile ]
+.SH DESCRIPTION
+.IX "psfaddtable command" "" "\fLpsfaddtable\fR command"  
+.LP
+.B psfaddtable
+takes a console font in .psf format given by
+.I fontfile
+and merges it with the Unicode character table given by
+.I tablefile
+to produce a font file with an embedded character table, which is
+written to
+.I outfile
+if given, or else to standard output.  Either
+.I fontfile
+or
+.I outfile
+(but not both) can be replaced by a single dash (\-) to read from
+standard input instead.  If the
+.I fontfile
+already contains an embedded character table, it is ignored.
+.SH TABLE FILE FORMAT
+Each line in the
+.I tablefile
+should be either blank, contain a comment (preceded by
+.IR # ),
+or contain a sequence of numbers in either decimal (default), octal
+(preceded by
+.IR 0 ),
+or hexadecimal (preceded by
+.IR 0x )
+format.  The first number on each line indicates the glyph slot in the
+font that is being referred to, this is between 0 and 0xff for a
+256-character font and 0 and 0x1ff for a 512-character font.  Any
+subsequent numbers on the same line are Unicodes matched by this
+specific glyph slot.  It is permissible to have multiple lines for the
+same glyph.
+.SH "SEE ALSO"
+.BR setfont (8),
+.BR psfgettable (1),
+.BR psfstriptable (1)
+
+
diff --git a/man1/psfgettable.1 b/man1/psfgettable.1
new file mode 100644
index 0000000..702f2e3
--- /dev/null
+++ b/man1/psfgettable.1
@@ -0,0 +1,23 @@
+.\" @(#)psfgettable.1
+.TH PSFGETTABLE 1 "25 Oct 1994"
+.SH NAME
+psfgettable \- extract the embedded Unicode character table from a console font
+.SH SYNOPSIS
+.B psfgettable
+.I fontfile
+.RI [ outfile ]
+.SH DESCRIPTION
+.IX "psfgettable command" "" "\fLpsfgettable\fR command"  
+.LP
+.B psfgettable
+extracts the embedded Unicode character table from a .psf format
+console font into a human readable ASCII file of the format used by
+.BR psfaddtable (1).
+If the font file name is a single dash (\-), the font is read from
+standard input.
+.SH "SEE ALSO"
+.BR setfont (8),
+.BR psfaddtable (1),
+.BR psfstriptable (1)
+
+
diff --git a/man1/psfstriptable.1 b/man1/psfstriptable.1
new file mode 100644
index 0000000..bb471cd
--- /dev/null
+++ b/man1/psfstriptable.1
@@ -0,0 +1,26 @@
+.\" @(#)psfstriptable.1
+.TH PSFSTRIPTABLE 1 "25 Oct 1994"
+.SH NAME
+psfstriptable \- remove the embedded Unicode character table from a console font
+.SH SYNOPSIS
+.B psfstriptable
+.I fontfile
+.RI [ outfile ]
+.SH DESCRIPTION
+.IX "psfstriptable command" "" "\fLpsfstriptable\fR command"  
+.LP
+.B psfstriptable
+reads a .psf format console font from 
+.IR fontfile ,
+or standard input if
+.I fontfile
+is a single dash (\-), which may have
+an embedded Unicode font table, and writes (to standard output or the
+specified file) a .psf format console font file without an embedded
+character table.
+.SH "SEE ALSO"
+.BR setfont (8),
+.BR psfaddtable (1),
+.BR psfgettable (1)
+
+
diff --git a/man1/setleds.1 b/man1/setleds.1
new file mode 100644
index 0000000..21b50c9
--- /dev/null
+++ b/man1/setleds.1
@@ -0,0 +1,84 @@
+.\" @(#)setleds.1 1.0 940924 aeb
+.TH SETLEDS 1 "24 Sep 1994"
+.SH NAME
+setleds \- set the keyboard leds
+.SH SYNOPSIS
+.B setleds
+.RI [ "-v" "] [" "-L" "] [" "-D" "] [" "-F" ]
+.RI [ {+|-}num "] [" {+|-}caps "] [" {+|-}scroll ]
+.SH DESCRIPTION
+.IX "setleds command" "" "\fLsetleds\fR command"  
+.LP
+.B Setleds
+reports and changes the led flag settings of a VT
+(namely NumLock, CapsLock and ScrollLock).
+Without arguments,
+.B setleds
+prints the current settings.
+With arguments, it sets or clears the indicated flags
+(and leaves the others unchanged). The settings before
+and after the change are reported if the -v flag is given.
+.LP
+The led flag settings are specific for each VT (and the VT
+corresponding to stdin is used).
+.LP
+By default (or with option -F),
+.B setleds
+will only change the VT flags (and their setting may be
+reflected by the keyboard leds).
+.LP
+With option -D,
+.B setleds
+will change both the VT flags and their default settings
+(so that a subsequent reset will not undo the change).
+This might be useful for people who always want to have numlock set.
+.LP
+With option -L,
+.B setleds
+will not touch the VT flags, but only change the leds.
+From this moment on, the leds will no longer reflect the VT flags
+(but display whatever is put into them). The command
+.B "setleds -L"
+(without further arguments) will restore the situation in which
+the leds reflect the VT flags.
+.LP
+One might use
+.B setleds
+in /etc/rc to define the initial and default state of NumLock,
+e.g. by
+.br
+.in +5m
+INITTY=/dev/tty[1-8]
+.br
+for tty in $INITTY; do
+.br
+.in +5m
+setleds -D +num < $tty
+.br
+.in -5m
+done
+.in -5m
+.SH OPTIONS
+.TP
+\-num \+num
+Clear or set NumLock.
+(At present, the NumLock setting influences the
+interpretation of keypad keys.
+Pressing the NumLock key complements the NumLock setting.)
+.TP
+\-caps \+caps
+Clear or set CapsLock.
+(At present, the CapsLock setting complements the Shift key
+when applied to letters.
+Pressing the CapsLock key complements the CapsLock setting.)
+.TP
+\-scroll \+scroll
+Clear or set ScrollLock.
+(At present, pressing the ScrollLock key (or ^S/^Q) stops/starts
+console output.)
+.SH "BUGS"
+In keyboard application mode the NumLock key does not
+influence the NumLock flag setting.
+.SH "SEE ALSO"
+.BR loadkeys (1)
+
diff --git a/man1/setmetamode.1 b/man1/setmetamode.1
new file mode 100644
index 0000000..2a0dd81
--- /dev/null
+++ b/man1/setmetamode.1
@@ -0,0 +1,46 @@
+.\" @(#)setmetamode.1 1.0 940130 aeb
+.TH SETMETAMODE 1 "30 Jan 1994"
+.SH NAME
+setmetamode \- define the keyboard meta key handling
+.SH SYNOPSIS
+.B setmetamode
+[
+.I {meta|bit|metabit | esc|prefix|escprefix}
+]
+.SH DESCRIPTION
+.IX "setmetamode command" "" "\fLsetmetamode\fR command"  
+.LP
+Without argument,
+.B setmetamode
+prints the current Meta key mode.
+With argument, it sets the Meta key mode as indicated.
+The setting before and after the change are reported.
+.LP
+The Meta key mode is specific for each VT (and the VT
+corresponding to stdin is used).
+One might use
+.B setmetamode
+in /etc/rc to define the initial state of the Meta key mode,
+e.g. by
+.br
+.in +5m
+INITTY=/dev/tty[1-8]
+.br
+for tty in $INITTY; do
+.br
+.in +5m
+setmetamode escprefix < $tty
+.br
+.in -5m
+done
+.in -5m
+.SH OPTIONS
+.TP
+esc prefix escprefix
+The Meta key sends an Escape prefix.
+.TP
+meta bit metabit
+The Meta key sets the high order bit of the character.
+.SH "SEE ALSO"
+.BR loadkeys (1)
+
diff --git a/man1/showkey.1 b/man1/showkey.1
new file mode 100644
index 0000000..06bd565
--- /dev/null
+++ b/man1/showkey.1
@@ -0,0 +1,70 @@
+.\" @(#)showkey.1 1.1 980201 aeb
+.TH SHOWKEY 1 "1 Feb 1998"
+.SH NAME
+showkey \- examine the codes sent by the keyboard
+.SH SYNOPSIS
+showkey [-h|--help] [-a|--ascii] [-s|--scancodes] [-k|--keycodes]
+.SH DESCRIPTION
+.IX "showkey command" "" "\fLshowkey\fR command"  
+.LP
+.B showkey
+prints to standard output either the scan codes or the keycode
+or the `ascii' code of each key pressed.
+In the first two modes the program runs until 10 seconds have elapsed
+since the last key press or release event, or until it receives
+a suitable signal, like SIGTERM, from another process.
+In `ascii' mode the program terminates when the user types ^D.
+.LP
+When in scancode dump mode, 
+.B showkey
+prints in hexadecimal format each byte received from the keyboard to the
+standard output. A new line is printed when an interval of about 0.1
+seconds occurs between the bytes received, or when the internal receive
+buffer fills up. This can be used to determine roughly, what byte
+sequences the keyboard sends at once on a given key press. The scan code
+dumping mode is primarily intended for debugging the keyboard driver or
+other low level interfaces. As such it shouldn't be of much interest to
+the regular end-user.
+.LP
+When in the default keycode dump mode,
+.B showkey
+prints to the standard output the keycode number or each key pressed or
+released. The kind of the event, press or release, is also reported.
+Keycodes are numbers assigned by the kernel to each individual physical
+key. Every key has always only one associated keycode number, whether
+the keyboard sends single or multiple scan codes when pressing it. Using
+.B showkey
+in this mode, you can find out what numbers to use in your personalized
+keymap files.
+.LP
+When in `ascii' dump mode,
+.B showkey
+prints to the standard output the decimal, octal, and hexadecimal
+value(s) of the key pressed, according to he present keymap.
+.SH OPTIONS
+.TP
+\-h \-\-help
+.B showkey
+prints to the standard error output its version number, a compile
+option and a short usage message, then exits.
+.TP
+\-s \-\-scancodes
+Starts
+.B showkey
+in scan code dump mode.
+.TP
+\-k \-\-keycodes
+Starts
+.B showkey
+in keycode dump mode. This is the default, when no command line options
+are present.
+.TP
+\-a \-\-ascii
+Starts
+.B showkey
+in `ascii' dump mode.
+.SH "SEE ALSO"
+.BR loadkeys (1),
+.BR dumpkeys (1),
+.BR keymaps (5)
+
diff --git a/man5/keymaps.5 b/man5/keymaps.5
new file mode 100644
index 0000000..7e55e25
--- /dev/null
+++ b/man5/keymaps.5
@@ -0,0 +1,438 @@
+.\" @(#)keymaps.5 1.10 940130 aeb
+.TH KEYMAPS 5 "24 April 1998"
+.SH NAME
+keymaps \- keyboard table descriptions for loadkeys and dumpkeys
+.SH DESCRIPTION
+.IX "keymaps" "" "\fLkeymaps\fR \(em keyboard table descriptions for loadkeys and dumpkeys" ""
+.IX "loadkeys" "keyboard table descriptions" "\fLloadkeys\fR" "keyboard table descriptions"
+.IX "dumpkeys" "keyboard table descriptions" "\fLdumpkeys\fR" "keyboard table descriptions"
+.IX keyboard "table descriptions for loadkeys and dumpkeys" keyboard "table descriptions for \fLloadkeys\fR and \fLdumpkeys\fR"
+.IX "translation tables"
+.LP
+These files are used by
+.BR loadkeys (1)
+to modify the translation tables used by the kernel keyboard driver
+and generated by
+.BR dumpkeys (1)
+from those translation tables.
+.LP
+The format of these files is vaguely similar to the one accepted by
+.BR xmodmap (1).
+The file consists of charset or key or string definition lines
+interspersed with comments.
+.LP
+Comments are introduced with
+.B !
+or
+.B #
+characters and continue to the end of the line. Anything following one
+of these characters on that line is ignored. Note that comments need
+not begin from column one as with
+.BR xmodmap (1).
+.LP
+The syntax of keymap files is line oriented; a complete definition
+must fit on a single logical line. Logical lines can, however, be split
+into multiple physical lines by ending each subline with the backslash
+character (\\).
+.SH "INCLUDE FILES"
+A keymap can include other keymaps using the syntax
+.LP
+.RS
+include "pathname"
+.RE
+.LP
+.SH "CHARSET DEFINITIONS"
+A character set definition line is of the form:
+.LP
+.RS
+.EX
+charset "iso-8859-x"
+.EE
+.RE
+.LP
+It defines how following keysyms are to be interpreted.
+For example, in iso-8859-1 the symbol mu (or micro) has code 0265,
+while in iso-8859-7 the letter mu has code 0354.
+.SH "COMPLETE KEYCODE DEFINITIONS"
+Each complete key definition line is of the form:
+.LP
+.RS
+.nf
+.BI keycode " keynumber " = " keysym keysym keysym" \fR...
+.fi
+.RE
+.LP
+.I keynumber
+is the internal identification number of the key, roughly equivalent to
+the scan code of it.
+.I keynumber
+can be given in decimal, octal or hexadecimal notation.
+Octal is denoted by a leading zero and hexadecimal by the prefix
+.B 0x.
+.LP
+Each of the
+.I keysyms
+represent keyboard actions, of which up to 256 can be bound to a single
+key. The actions available include outputting Latin1 character codes or
+character sequences, switching consoles or keymaps, booting the machine
+etc. (The complete list can be obtained from dumpkeys(1) by saying
+.BI " dumpkeys -l"
+\&.)
+.LP
+Each
+.I keysym
+may be prefixed by a '+' (plus sign), in wich case this keysym is treated
+as a "letter" and therefore affected by the "CapsLock" the same way as by
+"Shift" (to be correct, the CapsLock inverts the Shift state).
+The ASCII letters ('a'-'z' and 'A'-'Z') are made CapsLock'able by default.
+If Shift+CapsLock should not produce a lower case symbol, put lines like
+.LP
+.RS
+.nf
+.BI "keycode 30 = +a  A"
+.fi
+.RE
+.LP
+in the map file.
+.LP
+Which of the actions bound to a given key is taken when it is pressed
+depends on what modifiers are in effect at that moment.
+The keyboard driver supports 8 modifiers. These modifiers are labeled
+(completely arbitrarily) Shift, AltGr, Control, Alt, ShiftL, ShiftR,
+CtrlL and CtrlR.
+Each of these modifiers has an associated weight of power of two
+according to the following table:
+.LP
+.RS
+.TP 24
+.I modifier
+.I weight
+.TP 24
+Shift
+  1
+.PD 0
+.TP 24
+AltGr
+  2
+.TP 24
+Control
+  4
+.TP 24
+Alt
+  8
+.TP 24
+ShiftL
+ 16
+.TP 24
+ShiftR
+ 32
+.TP 24
+CtrlL
+ 64
+.TP 24
+CtrlR
+128
+.PD
+.RE
+.LP
+The effective action of a key is found out by adding up the weights of
+all the modifiers in effect. By default, no modifiers are in effect, so
+action number zero, i.e. the one in the first column in a key definition
+line, is taken when the key is pressed or released. When e.g. Shift and
+Alt modifiers are in effect, action number nine (from the 10th column)
+is the effective one.
+.LP
+Changing the state of what modifiers are in effect can be achieved by
+binding appropriate key actions to desired keys. For example, binding
+the symbol Shift to a key sets the Shift modifier in effect when that
+key is pressed and cancels the effect of that modifier when the key is
+released. Binding AltGr_Lock to a key sets AltGr in effect when the key
+is pressed and cancels the effect when the key is pressed again.
+(By default Shift, AltGr, Control and Alt are bound to the keys that bear
+a similar label; AltGr may denote the right Alt key.)
+.LP
+Note that you should be very careful when binding the modifier keys,
+otherwise you can end up with an unusable keyboard mapping. If you for
+example define a key to have Control in its first column and leave the
+rest of the columns to be VoidSymbols, you're in trouble. This is
+because pressing the key puts Control modifier in effect and the
+following actions are looked up from the fifth column (see the table
+above). So, when you release the key, the action from the fifth column
+is taken. It has VoidSymbol in it, so nothing happens. This means that
+the Control modifier is still in effect, although you have released the key.
+Re-pressing and releasing the key has no effect. To avoid this,
+you should always define all the columns to have the same modifier
+symbol. There is a handy short-hand notation for this, see below.
+.LP
+.I keysyms
+can be given in decimal, octal, hexadecimal or symbolic notation.
+The numeric notations use the same format as with
+.IR keynumber .
+The symbolic notation resembles that used by
+.BR xmodmap (1).
+Notable differences are the number symbols. The numeric
+symbols '0', ..., '9' of
+.BR xmodmap (1)
+are replaced with the corresponding words 'zero', 'one', ... 'nine' to
+avoid confusion with the numeric notation.
+.LP
+It should be noted that using numeric notation for the
+.I keysyms
+is highly unportable as the key action numbers may vary from one kernel
+version to another and the use of numeric notations is thus strongly
+discouraged. They are intended to be used only when you know there is a
+supported keyboard action in your kernel for which your current version
+of
+.BR loadkeys (1)
+has no symbolic name.
+.LP
+There is a number of short-hand notations to add readability and reduce
+typing work and the probability of typing-errors.
+.LP
+First of all, you can give a map specification line, of the form
+.LP
+.RS
+.EX
+keymaps 0-2,4-5,8,12
+.EE
+.RE
+.LP
+to indicate that the lines of the keymap will not specify all 256 columns,
+but only the indicated ones. (In the example: only the plain, Shift,
+AltGr, Control, Control+Shift, Alt and Control+Alt maps, that is, 7 columns
+instead of 256.)
+When no such line is given, the keymaps 0-M will be defined, where
+M+1 is the maximum number of entries found in any definition line.
+.LP
+Next, you can leave off any trailing VoidSymbol entries from a key
+definition line. VoidSymbol denotes a keyboard action which produces no
+output and has no other effects either. For example, to define key
+number 30 to output 'a' unshifted, 'A' when pressed with Shift and do
+nothing when pressed with AltGr or other modifiers, you can write
+.LP
+.RS
+.nf
+keycode  30 = a	A
+.fi
+.RE
+.LP
+instead of the more verbose
+.LP
+.RS
+.nf
+keycode  30 = a	A	VoidSymbol	VoidSymbol \\
+		VoidSymbol VoidSymbol VoidSymbol ...
+.fi
+.RE
+.LP
+For added convenience, you can usually get off with still more terse
+definitions. If you enter a key definition line with only and exactly
+one action code after the equals sign, it has a special meaning. If the
+code (numeric or symbolic) is not an ASCII letter, it means the code
+is implicitly replicated through all columns being defined.
+If, on the other hand, the action code is an ASCII character in the
+range 'a', ..., 'z' or 'A', ..., 'Z' in the ASCII collating sequence,
+the following definitions are made for the different modifier combinations,
+provided these are actually being defined.
+(The table lists the two possible cases:
+either the single action code is a lower case letter,
+denoted by 'x' or an upper case letter, denoted by 'Y'.)
+.LP
+.RS 4
+.TP 24
+.I modifier
+.I symbol
+.TP 24
+none
+x			Y
+.PD 0
+.TP 24
+Shift
+X			y
+.TP 24
+AltGr
+x			Y
+.TP 24
+Shift+AltGr
+X			y
+.TP 24
+Control
+Control_x		Control_y
+.TP 24
+Shift+Control
+Control_x		Control_y
+.TP 24
+AltGr+Control
+Control_x		Control_y
+.TP 24
+Shift+AltGr+Control
+Control_x		Control_y
+.TP 24
+Alt
+Meta_x		Meta_Y
+.TP 24
+Shift+Alt
+Meta_X		Meta_y
+.TP 24
+AltGr+Alt
+Meta_x		Meta_Y
+.TP 24
+Shift+AltGr+Alt
+Meta_X		Meta_y
+.TP 24
+Control+Alt
+Meta_Control_x	Meta_Control_y
+.TP 24
+Shift+Control+Alt
+Meta_Control_x	Meta_Control_y
+.TP 24
+AltGr+Control+Alt
+Meta_Control_x	Meta_Control_y
+.TP 24
+Shift+AltGr+Control+Alt
+Meta_Control_x	Meta_Control_y
+.PD
+.RE
+.LP
+.SH "SINGLE MODIFIER DEFINITIONS"
+All the previous forms of key definition lines always define all the M+1
+possible modifier combinations being defined, whether the line actually
+contains that many action codes or not.
+There is, however, a variation of the definition
+syntax for defining only single actions to a particular modifier
+combination of a key. This is especially useful, if you load a keymap
+which doesn't match your needs in only some modifier combinations, like
+AltGr+function keys. You can then make a small local file redefining
+only those modifier combinations and loading it after the main file.
+The syntax of this form is:
+.LP
+.BR "" { " plain " "| <modifier sequence> } " keycode
+.I keynumber
+.B =
+.I keysym
+.LP
+, e.g.,
+.RS
+.EX
+.nf
+plain keycode 14 = BackSpace
+control alt keycode 83 = Boot
+alt keycode 105 = Decr_Console
+alt keycode 106 = Incr_Console
+.fi
+.EE
+.RE
+Using "plain" will define only the base entry of a
+key (i.e. the one with no modifiers in effect) without affecting the
+bindings of other modifier combinations of that key.
+.SH "STRING DEFINITIONS"
+In addition to comments and key definition lines, a keymap can
+contain string definitions. These are used to define what each function
+key action code sends. The syntax of string definitions is:
+.LP
+.RS
+.B string
+.I keysym
+.B =
+.BI
+"text"
+.RE
+.LP
+.I text
+can contain literal characters, octal character codes in the format of
+backslash followed by up to three octal digits, and the three escape
+sequences \fB\\n\fP, \fB\\\\\fP, and \fB\\"\fP,
+for newline, backslash and quote, respectively.
+.SH "COMPOSE DEFINITIONS"
+Then there may also be compose definitions. They have syntax
+.LP
+.RS
+.BI "compose '" char "' '" char "' to '" char "'"
+.RE
+and describe how two bytes are combined to form a third one
+(when a dead accent or compose key is used).
+This is used to get accented letters and the like on a standard
+keyboard.
+.SH ABBREVIATIONS
+Various abbreviations can be used with kbd-0.96 and later.
+.TP
+.B "strings as usual"
+Defines the usual values of the strings (but not the keys
+they are bound to).
+.TP
+\fBcompose as usual for "iso-8859-1"\fP
+Defines the usual compose combinations.
+.LP
+To find out what
+.I keysyms
+there are available for use in keymaps, use the command
+.LP
+.RS
+.nf
+.B dumpkeys --long-info
+.fi
+.RE
+.LP
+Unfortunately, there is currently no description of what each symbol
+does. It has to be guessed from the name or figured out from the kernel
+sources.
+.LP
+.SH EXAMPLES
+(Be careful to use a keymaps line, like the first line of `dumpkeys`,
+or "keymaps 0-15" or so.)
+.LP
+The following entry exchanges the left Control key and the Caps Lock
+key on the keyboard:
+.LP
+.RS
+.nf
+keycode  58 = Control
+keycode  29 = Caps_Lock
+.fi
+.RE
+.LP
+Key number 58 is normally the Caps Lock key, and key number 29 is
+normally the Control key.
+.LP
+The following entry sets the Shift and Caps Lock keys to behave more
+nicely, like in older typewriters. That is, pressing Caps Lock key once
+or more sets the keyboard in CapsLock state and pressing either of the
+Shift keys releases it.
+.LP
+.RS
+.nf
+keycode  42 = Uncaps_Shift
+keycode  54 = Uncaps_Shift
+keycode  58 = Caps_On
+.fi
+.RE
+.LP
+The following entry sets the layout of the edit pad in the enhanced
+keyboard to be more like that in the VT200 series terminals:
+.LP
+.RS
+.nf
+keycode 102 = Insert
+keycode 104 = Remove
+keycode 107 = Prior
+shift keycode 107 = Scroll_Backward
+keycode 110 = Find
+keycode 111 = Select
+control alt   keycode 111 = Boot
+control altgr keycode 111 = Boot
+.fi
+.RE
+.LP
+Here's an example to bind the string "du\\ndf\\n" to the key AltGr-D. We use
+the "spare" action code F100 not normally bound to any key.
+.LP
+.RS
+.nf
+altgr keycode 32 = F100
+string F100 = "du\\ndf\\n"
+.LP
+.SH "SEE ALSO"
+.BR loadkeys (1),
+.BR dumpkeys (1),
+.BR showkey (1),
+.BR xmodmap (1)
diff --git a/man8/getkeycodes.8 b/man8/getkeycodes.8
new file mode 100644
index 0000000..bb816c6
--- /dev/null
+++ b/man8/getkeycodes.8
@@ -0,0 +1,16 @@
+.\" @(#)man/man8/getkeycodes.8	1.0 Nov  8 22:30:48 MET 1994
+.TH GETKEYCODES 8 "8 Nov 1994" "Local" "Keyboard Support"
+.SH NAME
+getkeycodes \- print kernel scancode-to-keycode mapping table
+.SH SYNOPSIS
+.B getkeycodes
+.SH DESCRIPTION
+The
+.I getkeycodes
+command prints the kernel scancode-to-keycode mapping table.
+.SH OPTIONS
+None.
+.SH "SEE ALSO"
+.I "setkeycodes (8)"
+
+
diff --git a/man8/loadunimap.8 b/man8/loadunimap.8
new file mode 100644
index 0000000..6db18c3
--- /dev/null
+++ b/man8/loadunimap.8
@@ -0,0 +1,35 @@
+.\" @(#)loadunimap.8 1.0 970317 aeb
+.TH LOADUNIMAP 8 "17 Mar 1997"
+.SH NAME
+loadunimap \- load the kernel unicode-to-font mapping table
+.SH SYNOPSIS
+.B loadunimap
+[
+.B -o
+.I oldmap
+] [
+.I map
+]
+.SH DESCRIPTION
+.LP
+The program
+.B loadunimap
+loads the specified map in the kernel unicode-to-font mapping table.
+If no map is given
+.I def
+is assumed.
+The default extension (that can be omitted) is
+.IR .uni .
+If the
+.B -o
+.I oldmap
+option is given, the old map is saved in the file specified.
+Usually one does not call
+.B loadunimap
+directly - its function is also built into
+.BR setfont .
+.SH "FILES"
+/usr/lib/kbd/consoletrans is the default directory for mappings.
+.SH "SEE ALSO"
+.BR setfont (8)
+
diff --git a/man8/mapscrn.8 b/man8/mapscrn.8
new file mode 100644
index 0000000..d071657
--- /dev/null
+++ b/man8/mapscrn.8
@@ -0,0 +1,78 @@
+.\" @(#)man/man8/mapscrn.8	1.0 3/19/93 17:04:00
+.TH MAPSCRN 8 "20 March 1993" "Local" "International Support"
+.SH NAME
+mapscrn \- load screen output mapping table
+.SH SYNOPSIS
+.B mapscrn
+[
+.I -o map.orig
+]
+.I mapfile
+.SH DESCRIPTION
+The
+.I mapscrn
+command loads a user defined output character mapping table into the
+console driver. The console driver may be later put into
+.B use user-defined mapping table
+mode by outputting a special escape sequence to the console device.
+This sequence is
+.I <esc>(K
+for the
+.B G0 
+character set and
+.I <esc>)K
+for the
+.B G1
+character set.
+When the
+.I -o
+option is given, the old map is saved in
+.I map.orig.
+.SH "OPERATION"
+The
+.I mapscrn
+command can read the map in either of two formats:
+.br
+1. 256 byte binary data
+.br
+2. two-column text file
+.br
+Format (1) is is an image of translation 
+.I table. 
+Any time a character with the code
+.I i
+is output to the console device, the character with the code 
+.I table[i]
+appears on the screen. Format (2) is used to fill the 
+.I table
+as follows: cell with offset mentioned in the first column is filled
+with the value mentioned in the second column.
+.PP
+Values in the file may be specified in one of four 
+.B formats:
+.br
+.B 1. Decimal: 
+string of decimal digits not beginning with '0'
+.br
+.B 2. Octal: 
+string of octal digits beginning with '0'
+.br
+.B 3. Hexadecimal: 
+string of hexadecimal digits preceded by "0x"
+.br
+.B 4. Character: 
+Single character enclosed in single quotes.
+Note that blank, comma, tab character and '#' cannot be specified
+with the 4th format.
+.PP
+Note that control characters ( with codes < 32) cannot be re-mapped with
+.I mapscrn
+because they have special meaning for the driver.
+.SH "SEE ALSO"
+.IR setfont (8)
+.SH AUTHOR
+Copyright (C) 1993 Eugene G. Crosser
+.br
+<crosser@pccross.msk.su>
+.br
+This software and documentation may be distributed freely.
diff --git a/man8/resizecons.8 b/man8/resizecons.8
new file mode 100644
index 0000000..81efa6e
--- /dev/null
+++ b/man8/resizecons.8
@@ -0,0 +1,70 @@
+.\" @(#)man/man8/resizecons.8	1.0 Jan 17 12:04:28 MET 1995
+.TH RESIZECONS 8 "17 Jan 1995" "Local" "Console Support"
+.SH NAME
+resizecons \- change kernel idea of the console size
+.SH SYNOPSIS
+.BI "resizecons " COLSxROWS
+.br
+.BI "resizecons -lines " ROWS
+.SH DESCRIPTION
+The
+.I resizecons
+command tries to change the videomode of the console.
+There are several aspects to this: (a) the kernel must know about it,
+(b) the hardware must know about it, (c) user programs must know
+about it, (d) the console font may have to be adapted.
+
+(a) The kernel is told about the change using the ioctl VT_RESIZE.
+This causes the kernel to reallocate console screen memory for
+all virtual consoles, and might fail if there is not enough memory.
+(In that case, try to disallocate some virtual consoles first.)
+If this ioctl succeeds, but a later step fails (e.g., because
+you do not have root permissions), you may be left with a very messy
+screen.
+
+The most difficult part of this is (b), since it requires detailed
+knowledge of the video card hardware, and the setting of numerous
+registers. Only changing the number of rows is slightly easier, and 
+.I resizecons
+will try to do that itself, when given the
+.I -lines
+option. (Probably, root permission will be required.)
+The command
+.I "resizecons COLSxROWS"
+will execute
+.I "restoretextmode -r COLSxROWS"
+(and hence requires that you have svgalib installed). Here COLSxROWS
+is a file that was created earlier by
+.I "restoretextmode -w COLSxROWS."
+Again, either root permissions are required, or
+.I restoretextmode
+has to be suid root.
+
+In order to deal with (c),
+.I resizecons
+does a `stty rows ROWS cols COLS' for each active console (in the
+range tty0..tty15), and sends a SIGWINCH signal to
+.I selection
+if it finds the file /tmp/selection.pid.
+
+Finally, (d) is dealt with by executing a
+.I setfont
+command. Most likely, the wrong font is loaded, and you may want to
+do another
+.I setfont
+yourself afterwards.
+
+.SH BUGS
+.I resizecons
+does not work on all hardware.
+This command used to be called
+.I resize,
+but was renamed to avoid conflict with another command with the same name.
+
+.SH "SEE ALSO"
+.BR setfont (8),
+.BR stty (1),
+.BR selection (1),
+.BR restoretextmode (8),
+.BR disalloc (8)
+
diff --git a/man8/setfont.8.in b/man8/setfont.8.in
new file mode 100644
index 0000000..6d929d1
--- /dev/null
+++ b/man8/setfont.8.in
@@ -0,0 +1,108 @@
+.\" @(#)man/man8/setfont.8	1.0 981121
+.TH SETFONT 8 "21 Nov 1998" "Local" "International Support"
+.SH NAME
+setfont \- load EGA/VGA console screen font
+.SH SYNOPSIS
+.B setfont
+.RI "[-O " "font+umap.orig" ]
+.RI "[-o " "font.orig" "] [-om " "cmap.orig" "] [-ou " "umap.orig" ]
+.RI "[-" "N" "] [" "font.new" ]
+.RI "[-m " "cmap"
+.RI "[-u " "umap" "]
+.RI "[-h" "H" ]
+.RI "[-v] [-V]"
+.IX "setfont command" "" "\fLsetfont\fR command"
+.SH DESCRIPTION
+The
+.B setfont
+command loads a font into the EGA/VGA character generator,
+and optionally outputs the previous font.
+This command reads an 8xN font from the file
+.I font.new
+and loads it into the character generator memory. Usually the font size N
+will be clear from the file size, but if the input file has
+code page format (probably with suffix .cp), containing three fonts
+with sizes 8x8, 8x14 and 8x16, then one of the options \-8 or \-14 or \-16
+must be used to select one.
+If no args are given (or only the option
+.RI \- N
+for some number
+.IR N ),
+then a default font is loaded (see below).
+With the \-v option,
+.B setfont
+will be verbose.
+With the \-V option, it prints its version and exits.
+.PP
+The program
+.B setfont
+has no built-in knowledge of VGA video modes, but just asks
+the kernel to load the character ROM of the video card with
+certain bitmaps. However, since Linux 1.3.1 the kernel knows
+enough about EGA/VGA video modes to select a different line
+distance. The default character height will be the number
+.I N
+inferred from the font or specified by option. However, the
+user can specify a different character height
+.I H
+using the \-h option.
+.PP
+Font files are binary files of size 256*N bytes, containing
+bit images for each of 256 characters, one byte per scan line, and
+N bytes per character (0 < N <= 32).
+Also .psf files are accepted; these files have the same format
+but an additional 4 byte header, and may have 512 instead of 256
+characters, and additional Unicode mapping info.
+
+The ordering of the symbols in the font is described by a
+mapping table. Some fonts have a mapping table included in
+the font file, and
+.I setfont
+will load such a mapping table. If no explicit mapping
+table is included in the font, and no mapping table is
+provided using the -m option, the `trivial' mapping is assumed.
+In any case the mapping table just loaded is activated
+by outputting the string Esc ( K.
+Giving a
+.I "-m none"
+argument inhibits the loading and activation of a mapping table.
+The previous mapping table can be saved to a file using the
+.I "-om file"
+option.
+These options of setfont render mapscrn(8) obsolete.
+
+The correspondence between the glyphs in the font and
+Unicode values is described by a Unicode mapping table.
+Some fonts have a Unicode mapping table included in
+the font file, and an explicit table can be indicated using
+the -u option.
+.I Setfont
+will load such a Unicode mapping table, unless a
+.I "-u none"
+argument is given. The previous Unicode mapping table
+will be saved as part of the saved font file when the \-O
+option is used. It can be saved to a separate file using the
+.RI "-ou " file
+option.
+
+One may add a Unicode mapping table to a psf font using
+.IR psfaddtable (1).
+
+.SH "FILES"
+.I @datadir@/consolefonts
+is the default font directory.
+.I @datadir@/consoletrans
+is the default directory for mappings.
+The default font is a file
+.I default
+(or
+.IR default8x N
+if the \-N option was given for some number N)
+perhaps with suitable extension (like .psf).
+.SH "SEE ALSO"
+.BR psfaddtable (1),
+.BR mapscrn (8)
+.\" .SH "AUTHORS"
+.\" Eugene G. Crosser (crosser@pccross.msk.su)
+.\" .br
+.\" Andries E. Brouwer (aeb@cwi.nl)
diff --git a/man8/setkeycodes.8 b/man8/setkeycodes.8
new file mode 100644
index 0000000..23fd57f
--- /dev/null
+++ b/man8/setkeycodes.8
@@ -0,0 +1,51 @@
+.\" @(#)man/man8/setkeycodes.8	1.0 Nov  8 22:30:48 MET 1994
+.TH SETKEYCODES 8 "8 Nov 1994" "Local" "Keyboard Support"
+.SH NAME
+setkeycodes \- load kernel scancode-to-keycode mapping table entries
+.SH SYNOPSIS
+.B setkeycodes
+.I "scancode keycode ..."
+.SH DESCRIPTION
+The
+.I setkeycodes
+command reads its arguments two at a time, each pair of arguments
+consisting of a scancode (given in hexadecimal) and a keycode (given
+in decimal). For each such pair, it tells the kernel keyboard driver
+to map the specified scancode to the specified keycode.
+
+This command is useful only for people with slightly unusual keyboards,
+that have a few keys which produce scancodes that the kernel does not
+recognize.
+
+.SH THEORY
+The usual PC keyboard produces a series of scancodes for each
+key press and key release. (Scancodes are shown by
+\fBshowkey -s\fP, see showkey(1).)
+The kernel parses this stream of scancodes, and converts it to
+a stream of keycodes (key press/release events).
+(Keycodes are shown by \fBshowkey\fP.)
+Apart from a few scancodes with special meaning, and apart from
+the sequence produced by the Pause key, and apart from shiftstate
+related scancodes, and apart from the key up/down bit,
+the stream of scancodes consists of unescaped
+scancodes xx (7 bits) and escaped scancodes e0 xx (8+7 bits).
+It is hardwired in the current kernel that in the range 1-88
+(0x01-0x58) keycode equals scancode. For the remaining scancodes
+(0x59-0x7f) or scancode pairs (0xe0 0x00 - 0xe0 0x7f) a
+corresponding keycode can be assigned (in the range 1-127).
+For example, if you have a Macro key that produces e0 6f according
+to showkey(1), the command
+.RS
+.B "setkeycodes e06f 112"
+.RE
+will assign the keycode 112 to it, and then loadkeys(1) can be used
+to define the function of this key.
+.SH OPTIONS
+None.
+.SH BUGS
+The keycodes of X have nothing to do with those of Linux.
+Unusual keys can be made visible under Linux, but not under X.
+.SH "SEE ALSO"
+.I "dumpkeys (1), loadkeys (1), showkey (1), getkeycodes (8)"
+
+
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..a01481b
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.10 1996/05/03 07:37:52 friedman Exp $
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp" 1>&2
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+  	  errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/openvt/COPYING b/openvt/COPYING
new file mode 100644
index 0000000..a43ea21
--- /dev/null
+++ b/openvt/COPYING
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/openvt/Makefile b/openvt/Makefile
new file mode 100644
index 0000000..fc0ecf8
--- /dev/null
+++ b/openvt/Makefile
@@ -0,0 +1,31 @@
+
+CC=gcc
+CFLAGS=-O2 -Wall -ansi
+LDFLAGS=$(CFLAGS) -s 
+
+SRC=openvt.c
+OBJ=openvt.o getfd.o
+PROG=openvt
+PROGS=$(PROG)
+MAN=openvt.1
+BINDIR=/usr/bin
+MANDIR=/usr/man/man1
+
+all: $(PROGS)
+
+openvt: $(OBJ) 
+
+openvt.o: openvt.h
+
+clean:
+	-rm -f $(OBJ)
+
+realclean distclean: clean
+	-rm -f $(PROGS)
+
+install: $(PROGS)
+	install -c $(PROGS) $(BINDIR)
+	install -c $(MAN)  $(MANDIR)
+
+setuid:
+	chmod 4711 $(BINDIR)/$(PROG)
diff --git a/openvt/README b/openvt/README
new file mode 100644
index 0000000..a64bfb5
--- /dev/null
+++ b/openvt/README
@@ -0,0 +1,11 @@
+This directory is derived from Jon Tombs' sources for the program open
+(with -u option added by Joshua Spoerri), as found in open-1.4.tar.gz
+
+I fixed a few minor flaws, and renamed the program to openvt
+in order to diminish namespace pollution.
+The -vt suffix fits with chvt and deallocvt.
+
+In open-1.4.tar.gz there was also a program switchto,
+but since it is completely identical to chvt
+(and slightly less robust), I removed it.
+
diff --git a/openvt/README.cad b/openvt/README.cad
new file mode 100644
index 0000000..7a75af8
--- /dev/null
+++ b/openvt/README.cad
@@ -0,0 +1,16 @@
+
+cad is a simple program to handle Cntrl Alt Delete in an enviroment
+where there may be remote logins. It give the remote users time to
+finish up before shutting down.
+
+
+usage:
+In /etc/inittab cadd the lines
+
+# What to do at the "Three Finger Salute".
+ca::ctrlaltdel:openvt -sw /sbin/cad
+
+
+If you already have a ca: line, comment it out with a #
+
+Jon.
diff --git a/openvt/README.init b/openvt/README.init
new file mode 100644
index 0000000..591b277
--- /dev/null
+++ b/openvt/README.init
@@ -0,0 +1,17 @@
+You don't have to log into a getty on every virtual console anymore:
+just run a single getty on tty1, put this line in your /etc/inittab:
+
+	kb::kbrequest:/usr/bin/openvt -us
+
+and put this in your rc.local (or equivalent):
+
+	echo "alt keycode 103 = Spawn_Console" | loadkeys
+
+Then, once you login, you can press alt-up-arrow to spawn another
+virtual console. This behavior requires a recent sysvinit package.
+I used 2.64, but as early as 2.60 might support it. You also must
+be using the proc filesystem.
+
+WARNING: this may circumvent vlock.
+
+Joshua Spoerri
diff --git a/openvt/README.openvt b/openvt/README.openvt
new file mode 100644
index 0000000..9f8a5bf
--- /dev/null
+++ b/openvt/README.openvt
@@ -0,0 +1,21 @@
+
+openvt opens a new vt and runs a command on it. It can be used as a simple
+way to start several console logins without having to type your passwd
+on each VT in turn.
+
+openvt can be used as a simpler to use replacement for the doshell(8) command.
+
+openvt is similar in functionality to the AIX/RS6000 command open.
+
+
+To use openvt it must be installed setuid root (type make install; make
+setuid) or all the VT device that are not allocated to getty should be
+read/write by all, e.g.
+
+chmod a=rw /dev/tty[5678]
+
+Note, new in v1.1 -- is required to separate command/child options. See
+the manual page.
+
+Jon.
+
diff --git a/openvt/cad b/openvt/cad
new file mode 100755
index 0000000..aaf8b33
--- /dev/null
+++ b/openvt/cad
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+trap "" 0 1 2 15
+
+LOG=/tmp/w.log.$$
+dialog --clear
+
+w | egrep -v tty[1-8] | tail +2 > $LOG
+count=`wc -l < $LOG`
+
+dont_panic() {
+ dialog --infobox "
+
+               THE SYSTEM IS SHUTTING DOWN
+
+                   !!!!!!!WAIT!!!!!!
+
+            !!!!DON'T POWER DOWN YET!!!!!!!!
+
+             wait for this message to clear.
+             $*
+
+ " 15 60 &
+}
+
+if [ $count -lt 2 ]; then
+ dont_panic "
+              The system is shutting down"
+ /sbin/shutdown -r now "sistema esta en shutdown"
+else
+ dialog --yesno "
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+There are the following remote users in
+the machine:
+
+`cat $LOG`
+
+Shutdown will be delayed by 2 minutes
+inorder to warn the remote users.
+
+Do you still want to start the shutdown?
+
+" 22 60 
+
+
+if [ $? = 0 ];then
+  dont_panic "
+               Shutting down in 2 minutes"
+  /sbin/shutdown -r +2 "sistema esta en shutdown"
+else 
+  sleep 1
+  dialog --infobox "
+
+        The shutdown has been aborted
+
+  " 7 50 &
+ sleep 5
+ dialog --clear
+fi
+fi
diff --git a/openvt/getfd.c b/openvt/getfd.c
new file mode 100644
index 0000000..9dbe15c
--- /dev/null
+++ b/openvt/getfd.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <linux/kd.h>
+#include <sys/ioctl.h>
+
+/*
+ * getfd.c
+ *
+ * Get an fd for use with kbd/console ioctls.
+ * We try several things because opening /dev/console will fail
+ * if someone else used X (which does a chown on /dev/console).
+ */
+
+static int
+is_a_console(int fd) {
+    char arg;
+
+    arg = 0;
+    return (ioctl(fd, KDGKBTYPE, &arg) == 0
+	    && ((arg == KB_101) || (arg == KB_84)));
+}
+
+static int
+open_a_console(char *fnam) {
+    int fd;
+
+    fd = open(fnam, O_RDONLY);
+    if (fd < 0 && errno == EACCES)
+      fd = open(fnam, O_WRONLY);
+    if (fd < 0 || ! is_a_console(fd))
+      return -1;
+    return fd;
+}
+
+int getfd() {
+    int fd;
+
+    fd = open_a_console("/dev/tty");
+    if (fd >= 0)
+      return fd;
+
+    fd = open_a_console("/dev/console");
+    if (fd >= 0)
+      return fd;
+
+    for (fd = 0; fd < 3; fd++)
+      if (is_a_console(fd))
+	return fd;
+
+    return -1;
+}
diff --git a/openvt/openvt.1 b/openvt/openvt.1
new file mode 100644
index 0000000..9035dfd
--- /dev/null
+++ b/openvt/openvt.1
@@ -0,0 +1,80 @@
+.\" Copyright 1994-95 Jon Tombs (jon@gtex02.us.es, jon@robots.ox.ac.uk)
+.\" May be distributed under the GNU General Public License
+.TH OPEN 1 V1.4 "19 Jul 1996" "Linux 1.x" "Linux Users' Manual"
+.SH NAME
+openvt \- start a program on a new virtual terminal (VT).
+.SH SYNOPSIS
+.B openvt 
+[\-c vtnumber] [\-s] [\-u] [\-l] [\-v] [\-\-] command command_options
+.SH DESCRIPTION
+.B openvt
+will find the first available VT, and run on it the given 
+.BR command
+with the given 
+.BR "command options",
+standard input, output and error are directed to that terminal. The current
+search path ($PATH) is used to find the requested command. If no command is
+specified then the environment variable $SHELL is used.
+.SS OPTIONS
+.TP
+.I "\-c vtnumber" 
+Use the given VT number and not the first available. Note you
+must have write access to the supplied VT for this to work.
+.TP
+.I "\-s"
+Switch to the new VT when starting the command. The VT of the new command
+will be made the new current VT.
+.TP
+.I "\-u"
+Figure out the owner of the current VT, and run login as that user.
+Suitable to be called by init. Shouldn't be used with -c or -l.
+.TP
+.I "\-l"
+Make the command a login shell. A \- is prepended to the name of the command
+to be executed.
+.TP
+.I "\-v"
+Be a bit more verbose.
+.TP
+.I "\-w"
+wait for command to complete. If \-w and \-s are used together then
+.B openvt
+will switch back to the controlling terminal when the command completes.
+.TP
+.I "\-\-" 
+end of options to
+.BR openvt .
+.SH NOTE
+If
+.B openvt
+is compiled with a POSIX (Gnu) getopt() and you wish to set
+options to the command to be run, then you must supply
+the end of options \-\- flag before the command.
+.BR
+.SH EXAMPLES
+.B openvt
+can be used to start a shell on the next free VT, by using the command:
+.TP
+.I "openvt bash"
+.TP
+
+To start the shell as a login shell, use:
+.TP
+.I "openvt -l bash"
+.TP
+
+To get a long listing you must supply the \-\- separator:
+.TP
+.I "openvt -- ls -l"
+.BR
+
+
+.SH "SEE ALSO"
+.BR chvt (1),
+.BR doshell (8),
+.BR login (1).
+
+.SH AUTHOR
+Jon Tombs <jon@gtex02.us.es or jon@robots.ox.ac.uk>
+.br
+\-w idea from "sam".
diff --git a/openvt/openvt.c b/openvt/openvt.c
new file mode 100644
index 0000000..2f968ae
--- /dev/null
+++ b/openvt/openvt.c
@@ -0,0 +1,353 @@
+/*
+ *       openvt.c open a vt to run a new command (or shell).
+ *       
+ *	 Copyright (c) 1994 by Jon Tombs <jon@gtex02.us.es>
+ *
+ *       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 the Free Software Foundation; either version
+ *       2 of the License, or (at your option) any later version.
+ */
+
+/*
+ * Added the not-in-use check, aeb@cwi.nl, 940924.
+ *
+ *   [Accidentally starting a process on a VT that is in use
+ *    yields unfortunate effects: two processes reading the keyboard.
+ *    This can be a disaster if the old process was in scancode mode.]
+ *
+ * Added the -u (`as user') stuff for use from inittab,
+ *  Joshua Spoerri <josh@cooper.edu>, 1996-07-18
+ *
+ * Fixed some bugs; made it a bit more robust; renamed to openvt
+ *  aeb@cwi.nl, 1998-06-06.
+ */
+
+#include "openvt.h"
+
+const char *version = "openvt 1.4a - (c) Jon Tombs 1994";
+
+#ifndef VTNAME
+#error vt device name must be defined in openvt.h
+#endif
+
+
+int 
+main(int argc, char *argv[])
+{
+
+   int opt, pid;
+   struct vt_stat vtstat;
+   int vtno     = -1;
+   int fd       = -1;
+   char optc	= FALSE;
+   char show    = FALSE;
+   char login   = FALSE;
+   char force   = FALSE;
+   char verbose = FALSE;
+   char do_wait	= FALSE;
+   char as_user = FALSE;
+   char vtname[sizeof VTNAME + 2]; /* allow 999 possible VTs */
+   char *cmd = NULL, *def_cmd = NULL, *username = NULL;
+
+   /*
+    * I don't like using getopt for this, but otherwise this gets messy.
+    * POSIX/Gnu getopt forces the use of -- to separate child/program
+    * options. RTFM.
+    */
+   while ((opt = getopt(argc, argv, "c:lsvfuw")) != -1) {
+      switch (opt) {
+	case 'c':
+	  optc = 1;		/* vtno was specified by the user */
+	  vtno = (int) atol(optarg);
+	  if (vtno <= 0 || vtno > 63) {	  
+	    fprintf(stderr, "openvt: %s illegal vt number\n", optarg); 
+	    return 5;
+	  }
+	  /* close security holes - until we can do this safely */
+	  (void) setuid(getuid());
+	  break;
+	case 'l':
+	  login = TRUE;
+	  break;
+	case 's':
+	  show = TRUE;
+	  break;
+	case 'v':
+	  verbose = TRUE;
+	  break;
+        case 'f':
+	  force = TRUE;
+	  break;
+	case 'w':
+	  do_wait = TRUE;
+	  break;
+	case 'u':
+          /* we'll let 'em get away with the meaningless -ul combo */
+          if(getuid()) {
+		fprintf(stderr,"%s: only root can use the -u flag.\n",argv[0]);
+		exit(1);
+          }
+	  as_user = TRUE;
+	  break;
+	default:
+	  usage(1);
+	
+      }
+   }
+
+   fd = getfd();
+   if (fd < 0) {
+      fprintf(stderr,
+	      "Couldnt get a file descriptor referring to the console\n");
+      return(2);
+   }
+
+   if (ioctl(fd, VT_GETSTATE, &vtstat) < 0) {
+	perror("openvt: can't get VTstate\n");
+        return(4);
+   }
+
+   if (vtno == -1) {
+     if ((ioctl(fd, VT_OPENQRY, &vtno) < 0) || (vtno == -1)) {
+        perror("openvt: Cannot find a free VT\n");
+        return(3);
+     }
+   } else if (!force) {
+     if (vtno >= 16) {
+        fprintf(stderr, "openvt: cannot check whether vt %d is free\n", vtno);
+	fprintf(stderr, "        use `openvt -f' to force.\n");
+	return(7);
+     }
+     if (vtstat.v_state & (1 << vtno)) {
+        fprintf(stderr, "openvt: vt %d is in use; command aborted\n", vtno);
+	fprintf(stderr, "        use `openvt -f' to force.\n");
+	return(7);
+     }
+   }
+
+   sprintf(vtname, VTNAME, vtno);
+
+   /* Can we open the vt we want? */
+   if ((fd = open(vtname, O_RDWR)) == -1) {
+      int errsv = errno;
+      if (!optc) {
+	      /* We found vtno ourselves - it is free according
+		 to the kernel, but we cannot open it. Maybe X
+		 used it and did a chown.  Try a few vt's more
+		 before giving up. Note: the 16 is a kernel limitation. */
+	      int i;
+	      for (i=vtno+1; i<16; i++) {
+		      if((vtstat.v_state & (1<<i)) == 0) {
+			      sprintf(vtname, VTNAME, i);
+			      if ((fd = open(vtname, O_RDWR)) >= 0) {
+				      vtno = i;
+				      goto got_vtno;
+			      }
+		      }
+	      }
+	      sprintf(vtname, VTNAME, vtno);
+      }
+      fprintf(stderr, "openvt: Unable to open %s: %s\n",
+	      vtname, strerror(errsv));
+      return(5);
+   }
+got_vtno:
+   close(fd);
+
+   /* Maybe we are suid root, and the -c option was given.
+      Check that the real user can access this VT.
+      We assume getty has made any in use VT non accessable */
+   if (access(vtname, R_OK | W_OK) < 0) {
+      fprintf(stderr, "openvt: Cannot open %s read/write (%s)\n", vtname,
+	     strerror(errno));
+      return (5);
+   }
+
+   if (as_user)
+	   username = authenticate_user(vtstat.v_active);
+   else {
+	   if (!geteuid()) {
+		   uid_t uid = getuid();
+		   chown(vtname, uid, getgid());
+		   setuid(uid);
+	   }
+
+	   if (!(argc > optind)) {
+		   def_cmd = getenv("SHELL");
+		   if (def_cmd == NULL)
+			   usage(0);
+		   cmd = malloc(strlen(def_cmd + 2));
+	   } else {
+		   cmd = malloc(strlen(argv[optind] + 2));
+	   }
+
+	   if (login)
+		   strcpy(cmd, "-");
+	   else
+		   cmd[0] = '\0';
+
+	   if (def_cmd)
+		   strcat(cmd, def_cmd);
+	   else
+		   strcat(cmd, argv[optind]);
+
+	   if (login) 
+		   argv[optind] = cmd++;
+   }
+
+   if (verbose)
+	fprintf(stderr,	"openvt: using VT %s\n", vtname);
+	
+   fflush(stderr);
+
+   if((pid = fork()) == 0) {
+      /* leave current vt */
+#ifdef   ESIX_5_3_2_D
+      if (setpgrp() < 0) {
+#else
+      if (setsid() < 0) {
+#endif      
+        fprintf(stderr, "openvt: Unable to set new session (%s)\n",
+	strerror(errno));
+      }
+      close(0);			/* so that new vt becomes stdin */
+
+      /* and grab new one */
+      if ((fd = open(vtname, O_RDWR)) == -1) { /* strange ... */
+	fprintf(stderr, "\nopenvt: could not open %s R/W (%s)\n",
+		vtname, strerror(errno));
+	fflush(stderr);
+        _exit (1);		/* maybe above user limit? */
+      }
+
+      if (show) {
+         if (ioctl(fd, VT_ACTIVATE, vtno)) {
+	    fprintf(stderr, "\nopenvt: could not activate vt %d (%s)\n",
+		    vtno, strerror(errno));
+	    fflush(stderr);
+	    _exit (1); /* probably fd does not refer to a tty device file */
+	 }
+
+	 if (ioctl(fd, VT_WAITACTIVE, vtno)){
+	    fprintf(stderr, "\nopenvt: activation interrupted? (%s)\n",
+		    strerror(errno));
+	    fflush(stderr);
+	    _exit (1);
+	 }
+      }
+      close(1);
+      close(2);
+      if (fd > 2)
+	 close(fd);	 
+      dup(fd);
+      dup(fd);
+
+      if(as_user)
+	 execlp("login", "login", "-f", username, NULL);
+      else if (def_cmd)
+         execlp(cmd, def_cmd, NULL);
+      else
+	 execvp(cmd, &argv[optind]);
+      _exit(127);		/* exec failed */
+   }
+
+   if ( pid < 0 ) {
+      perror("openvt: fork() error");
+      return(6);
+   }
+
+   if ( do_wait ) {
+      wait(NULL);
+      if (show) { /* Switch back... */
+	 (void) ioctl(fd, VT_ACTIVATE, vtstat.v_active);
+	 /* wait to be really sure we have switched */
+	 (void) ioctl(fd, VT_WAITACTIVE, vtstat.v_active);
+      }
+   }
+
+   return 0;
+}
+
+
+void usage(int stat)
+{
+   fprintf(stderr,
+     "Usage: openvt [-c vtnumber] [-l] [-u] [-s] [-v] [-w] -- command_line\n");
+   exit (stat);
+}
+
+/*
+ * Support for Spawn_Console: openvt running from init
+ * added by Joshua Spoerri, Thu Jul 18 21:13:16 EDT 1996
+ *
+ *  -u     Figure  out  the  owner  of the current VT, and run
+ *         login as that user.  Suitable to be called by init.
+ *         Shouldn't be used with -c or -l.
+ *         Sample inittab line:
+ *                kb::kbrequest:/usr/bin/openvt -us
+ *
+ * It is the job of authenticate_user() to find out who
+ * produced this keyboard signal.  It is called only as root.
+ *
+ * Note that there is a race condition: curvt may not be the vt
+ * from which the keyboard signal was produced.
+ * (Possibly the signal was not produced at the keyboard at all,
+ * but by a "kill -SIG 1".  However, only root can do this.)
+ *
+ * Conclusion: do not use this in high security environments.
+ * Or fix the code below to be more suspicious.
+ *
+ * Maybe it is better to just start a login at the new vt,
+ * instead of pre-authenticating the user with "login -f".
+ */
+
+char *
+authenticate_user(int curvt) {
+	DIR *dp;
+	struct dirent *dentp;
+	struct stat buf;
+	dev_t console_dev;
+	ino_t console_ino;
+	uid_t console_uid;
+	char filename[NAME_MAX+12];
+	struct passwd *pwnam;
+
+	if (!(dp=opendir("/proc"))) {
+		perror("/proc");
+		exit(1);
+	}
+	
+	/* get the current tty */
+	sprintf(filename,"/dev/tty%d", curvt);
+	if (stat(filename,&buf)) {
+		perror(filename);
+		exit(1);
+	}
+	console_dev=buf.st_dev;
+	console_ino=buf.st_ino;
+	console_uid=buf.st_uid;
+
+	/* get the owner of current tty */
+	if (!(pwnam = getpwuid(console_uid))) {
+		perror("can't getpwuid");
+		exit(1);
+	}
+
+	/* check to make sure that user has a process on that tty */
+	/* this will fail for example when X is running on the tty */
+	while ((dentp=readdir(dp))) {
+		sprintf(filename,"/proc/%s/fd/0",dentp->d_name);
+		if (stat(filename,&buf))
+			continue;
+		if(buf.st_dev == console_dev && buf.st_ino == console_ino
+				&& buf.st_uid == console_uid)
+			goto got_a_process;
+	}
+
+	fprintf(stderr,"couldn't find owner of current tty!\n");
+	exit(1);
+
+   got_a_process:
+	return pwnam->pw_name;
+}
diff --git a/openvt/openvt.h b/openvt/openvt.h
new file mode 100644
index 0000000..69eda57
--- /dev/null
+++ b/openvt/openvt.h
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <string.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <pwd.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/vt.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#ifndef NAME_MAX
+#define NAME_MAX 255
+#endif
+
+void usage(int);
+char *authenticate_user(int);
+int getfd(void);
+
+/*
+ * There must be a universal way to find these!
+ */
+
+#define TRUE (1)
+#define FALSE (0)
+
+
+/*
+ * Where your VTs are hidden
+ */
+#ifdef __linux__
+#define VTNAME "/dev/tty%d"
+#endif
+
+#ifdef ESIX_5_3_2_D
+#define	VTBASE		"/dev/vt%02d"
+#endif
diff --git a/po/.null b/po/.null
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/po/.null
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 0000000..e69333c
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,5 @@
+1999-02-22
+	Taken po/* from util-linux
+	(with nls stuff by Arkadiusz Mi¶kiewicz <misiek@misiek.eu.org>)
+
+	
diff --git a/po/GNU.ABOUT-NLS b/po/GNU.ABOUT-NLS
new file mode 100644
index 0000000..28d38c7
--- /dev/null
+++ b/po/GNU.ABOUT-NLS
@@ -0,0 +1,226 @@
+Notes on the Free Translation Project
+*************************************
+
+   Free software is going international!  The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do *not*
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+One advise in advance
+=====================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias or message inheritance) as the
+implementation here.  It is also not possible to offer this additional
+functionality on top of a `catgets' implementation.  Future versions of
+GNU `gettext' will very likely convey even more functionality.  So it
+might be a good idea to change to GNU `gettext' as soon as possible.
+
+   So you need not provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+   Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'.  Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system provides
+usable `catgets' (if using this is selected by the installer) or
+`gettext' functions.  If neither is available, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is *not* required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --with-catgets
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `catgets' or `gettext' to use
+the internationalizing routines provided within this package, enable
+the use of the `catgets' functions (if found on the locale system), or
+else, *totally* disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   By default the configuration process will not test for the `catgets'
+function and therefore they will not be used.  The reasons are already
+given above: the emulation on top of `catgets' cannot provide all the
+extensions provided by the GNU `gettext' library.  If you nevertheless
+want to use the `catgets' functions use
+
+     ./configure --with-catgets
+
+to enable the test for `catgets' (this causes no harm if `catgets' is
+not available on your system).  If you really select this option we
+would like to hear about the reasons because we cannot think of any
+good one ourself.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+   As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+ISO 639 `LL' two-letter code prior to using the programs in the
+package.  For example, let's suppose that you speak German.  At the
+shell prompt, merely execute `setenv LANG de' (in `csh'),
+`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash').  This
+can be done from your `.login' or `.profile' file, once and for all.
+
+   An operating system might already offer message localization for
+many of its programs, while other programs have been installed locally
+with the full capabilities of GNU `gettext'.  Just using `gettext'
+extended syntax for `LANG' would break proper localization of already
+available operating system programs.  In this case, users should set
+both `LANGUAGE' and `LANG' variables in their environment, as programs
+using GNU `gettext' give preference to `LANGUAGE'.  For example, some
+Swedish users would rather read translations in German than English for
+when Swedish is not available.  This is easily accomplished by setting
+`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
+
+Translating Teams
+=================
+
+   For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list, courtesy of Linux
+International.  You may reach your translation team at the address
+`LL@li.org', replacing LL by the two-letter ISO 639 code for your
+language.  Language codes are *not* the same as the country codes given
+in ISO 3166.  The following translation teams exist, as of December
+1997:
+
+     Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
+     Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
+     `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
+     Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
+     `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
+     Swedish `sv', and Turkish `tr'.
+
+For example, you may reach the Chinese translation team by writing to
+`zh@li.org'.
+
+   If you'd like to volunteer to *work* at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is *not* the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+*actively* in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of December
+1997.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination.
+
+     Ready PO files    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+                     .----------------------------------------------------.
+     bash            |       []          []          []                   |  3
+     bison           |       []          []          []                   |  3
+     clisp           |       [] [] []    []                               |  4
+     cpio            |       []    []    []       [] []    []             |  6
+     diffutils       |       []    []    []                []          [] |  5
+     enscript        |       []    [] [] []          []             []    |  6
+     fileutils       | []    []    []    []       [] []    [] []    [] [] | 10
+     findutils       |       []    []    [] []    [] []    []    []    [] |  9
+     flex            |             []    []       []                   [] |  4
+     gcal            |       []          []          []    []          [] |  5
+     gettext         |    [] []    []    []       [] [] [] [] []    [] [] | 12
+     grep            |       []    []    []       [] [] [] []    [] [] [] | 10
+     hello           |    [] []    []    []       [] [] [] [] []    [] [] | 11
+     id-utils        |       []          []                []             |  3
+     indent          |    [] []                   []       []    []       |  5
+     libc            |       []    []    []       [] []    []          [] |  7
+     m4              |       []          []    []    []          []    [] |  6
+     make            |       []    []    []       [] []    []             |  6
+     music           |                   []                []             |  2
+     ptx             |       []    []    []          [] [] [] []       [] |  8
+     recode          |    [] []    []    []          []    [] []    [] [] |  9
+     sh-utils        |       []    []    []          [] [] [] []       [] |  8
+     sharutils       | []    []    []    []          []                [] |  6
+     tar             | []    []          [] []    [] [] [] [] []    [] [] | 11
+     texinfo         | []    []          []                               |  3
+     textutils       | []    []    []    []       [] [] [] []          [] |  9
+     wdiff           | []    []    []    []          [] [] []          [] |  8
+                     `----------------------------------------------------'
+       17 languages    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+       27 packages      6  4 25  1 18  1 26  2  1 12 20  9 19  7  4  7 17  179
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If December 1997 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.
+
diff --git a/po/Makefile b/po/Makefile
new file mode 100644
index 0000000..cb7c3d7
--- /dev/null
+++ b/po/Makefile
@@ -0,0 +1,145 @@
+PACKAGE = kbd
+VERSION = 0.99
+
+#
+# po2tbl.sed is not taken from /usr/share/gettext/intl
+# Often it is not present.
+# A RedHat 5.2 installation only has po2tbl.sed.in.
+#
+PO2TBL = ./po2tbl.sed
+INTL = /usr/share/gettext/intl
+# FOREIGN=--foreign-user
+FOREIGN=
+SHELL = /bin/sh
+
+prefix = /usr
+exec_prefix = ${prefix}
+datadir = $(prefix)/share
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+
+# Not giving an explicit path improves the chances of finding these
+GENCAT = gencat
+MSGFMT = msgfmt
+XGETTEXT = xgettext
+MSGMERGE = msgmerge
+
+# ..      for <config.h> (if HAVE_CONFIG_H is set)
+# $(INTL) for "libgettext.h"
+INCLUDES = -I.. -I$(INTL)
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+# Enter here all .po files
+POFILES =  nl.po ru.po
+# the same but with .gmo
+GMOFILES = nl.gmo ru.gmo
+
+CATALOGS = $(GMOFILES)
+CATOBJEXT = .gmo
+INSTOBJEXT = .mo
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .gmo .mo .msg .cat
+
+.c.o:
+	$(COMPILE) $<
+
+.po.mo:
+	$(MSGFMT) -o $@ $<
+
+.po.gmo:
+	$(MSGFMT) -o $@ $<
+
+.po.cat:
+	sed -f $(PO2TBL) < $< > $*.msg \
+	  && rm -f $@ && $(GENCAT) $@ $*.msg
+
+all: all-yes
+
+all-yes: cat-id-tbl.c $(CATALOGS)
+all-no:
+
+kbd.pot:
+	$(XGETTEXT) --default-domain=kbd --directory=.. \
+	  --add-comments --keyword=_ --keyword=N_ \
+	  --files-from=POTFILES.in $(FOREIGN)
+	mv kbd.po kbd.pot
+
+cat-id-tbl.c: stamp-cat-id
+stamp-cat-id: kbd.pot
+	rm -f cat-id-tbl.tmp
+	sed -f $(PO2TBL) kbd.pot \
+		| sed -e "s/@PACKAGE NAME@/kbd/" > cat-id-tbl.tmp
+	if cmp -s cat-id-tbl.tmp cat-id-tbl.c; then \
+	  rm cat-id-tbl.tmp; \
+	else \
+	  echo cat-id-tbl.c changed; \
+	  rm -f cat-id-tbl.c; \
+	  mv cat-id-tbl.tmp cat-id-tbl.c; \
+	fi
+	rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+
+install: install-data-yes
+install-data-no: all
+install-data-yes: all
+	../mkinstalldirs $(datadir);
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  case "$$cat" in \
+	    *.gmo) destdir=$(gnulocaledir);; \
+	    *)     destdir=$(localedir);; \
+	  esac; \
+	  lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
+	  dir=$$destdir/$$lang/LC_MESSAGES; \
+	  ../mkinstalldirs $$dir; \
+	  $(INSTALL_DATA) $$cat $$dir/kbd$(INSTOBJEXT); \
+	  echo "installing $$cat as $$dir/kbd$(INSTOBJEXT)"; \
+	  if test -r $$cat.m; then \
+	    $(INSTALL_DATA) $$cat.m $$dir/kbd$(INSTOBJEXT).m; \
+	    echo "installing $$cat.m as $$dir/kbd$(INSTOBJEXT).m"; \
+	  fi; \
+	done
+
+uninstall:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
+	  rm -f $(localedir)/$$lang/LC_MESSAGES/kbd$(INSTOBJEXT); \
+	  rm -f $(localedir)/$$lang/LC_MESSAGES/kbd$(INSTOBJEXT).m; \
+	  rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/kbd$(INSTOBJEXT); \
+	  rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/kbd$(INSTOBJEXT).m; \
+	done
+	rm -f $(gettextsrcdir)/po-Makefile.in.in
+
+cat-id-tbl.o: $(INTL)/libgettext.h
+
+clean:
+	rm -f core core.* *~ *.o kbd.pot cat-id-tbl.tmp
+
+distclean: clean
+	rm -f POTFILES *.gmo *.mo *.msg *.cat *.cat.m
+
+update-po: 
+	$(MAKE) kbd.pot
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
+	  mv $$lang.po $$lang.old.po; \
+	  echo "$$lang:"; \
+	  if $(MSGMERGE) $$lang.old.po kbd.pot -o $$lang.po; then \
+	    rm -f $$lang.old.po; \
+	  else \
+	    echo "msgmerge for $$cat failed!"; \
+	    rm -f $$lang.po; \
+	    mv $$lang.old.po $$lang.po; \
+	  fi; \
+	done
+
+POTFILES: 
+	./update-potfiles
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..c4b3ab0
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,37 @@
+contrib/codepage.c
+contrib/splitfont.c
+contrib/sti.c
+contrib/vcstime.c
+openvt/getfd.c
+openvt/openvt.c
+po/cat-id-tbl.c
+src/chvt.c
+src/clrunimap.c
+src/deallocvt.c
+src/dumpkeys.c
+src/fgconsole.c
+src/findfile.c
+src/getfd.c
+src/getkeycodes.c
+src/getunimap.c
+src/kbd_mode.c
+src/kdfontop.c
+src/ksyms.c
+src/loadunimap.c
+src/mapscrn.c
+src/psfaddtable.c
+src/psfgettable.c
+src/psfstriptable.c
+src/resizecons.c
+src/screendump.c
+src/setfont.c
+src/setkeycodes.c
+src/setleds.c
+src/setmetamode.c
+src/setvesablank.c
+src/showfont.c
+src/showkey.c
+src/spawn_console.c
+src/spawn_login.c
+src/wctomb.c
+src/loadkeys.y
diff --git a/po/cat-id-tbl.c b/po/cat-id-tbl.c
new file mode 100644
index 0000000..5c990f3
--- /dev/null
+++ b/po/cat-id-tbl.c
@@ -0,0 +1,347 @@
+/* Automatically generated by po2tbl.sed from kbd.pot.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgettext.h"
+
+const struct _msg_ent _msg_tbl[] = {
+  {"", 1},
+  {"usage: chvt N\n", 2},
+  {"usage: %s [N1 N2 ...]\n", 3},
+  {"%s: deallocating all unused consoles failed\n", 4},
+  {"%s: 0: illegal VT number\n", 5},
+  {"%s: VT 1 is the console and cannot be deallocated\n", 6},
+  {"%s: could not deallocate console %d\n", 7},
+  {"KDGKBENT error at index 0 in table %d: ", 8},
+  {"%s: cannot find any keymaps?\n", 9},
+  {"%s: plain map not allocated? very strange ...\n", 10},
+  {"KDGKBENT error at index %d in table %d: ", 11},
+  {"keycode range supported by kernel:           1 - %d\n", 12},
+  {"max number of actions bindable to a key:         %d\n", 13},
+  {"number of keymaps in actual use:                 %d\n", 14},
+  {"of which %d dynamically allocated\n", 15},
+  {"ranges of action codes supported by kernel:\n", 16},
+  {"number of function keys supported by kernel: %d\n", 17},
+  {"max nr of compose definitions: %d\n", 18},
+  {"nr of compose definitions in actual use: %d\n", 19},
+  {"\
+Symbols recognized by %s:\n\
+(numeric value, symbol)\n\
+\n", 20},
+  {"\
+\n\
+The following synonyms are recognized:\n\
+\n", 21},
+  {"%-15s for %s\n", 22},
+  {"\
+\n\
+Recognized modifier names and their column numbers:\n", 23},
+  {"# not alt_is_meta: on keymap %d key %d is bound to", 24},
+  {"impossible: not meta?\n", 25},
+  {"KDGKBSENT failed at index %d: ", 26},
+  {"dumpkeys version %s", 27},
+  {"\
+\n\
+usage: dumpkeys [options...]\n\
+\n\
+valid options are:\n\
+\n\
+\t-h --help\t    display this help text\n\
+\t-i --short-info\t    display information about keyboard driver\n\
+\t-l --long-info\t    display above and symbols known to loadkeys\n\
+\t-n --numeric\t    display keytable in hexadecimal notation\n\
+\t-f --full-table\t    don't use short-hand notations, one row per keycode\n\
+\t-1 --separate-lines one line per (modifier,keycode) pair\n\
+\t   --funcs-only\t    display only the function key strings\n\
+\t   --keys-only\t    display only key bindings\n\
+\t   --compose-only   display only compose key combinations\n\
+\t-c --charset=iso-8859-{1,2,3,4,5,7,8,9}\n\
+\t             koi8-{r,u}\t\t\n\
+\t\t\t    interpret character action codes to be from the\n\
+\t\t\t    specified character set\n", 28},
+  {"Out of Memory\n", 29},
+  {"Out of Memory?\n", 30},
+  {"error executing  %s\n", 31},
+  {"Couldnt get a file descriptor referring to the console\n", 32},
+  {"usage: getkeycodes\n", 33},
+  {"Plain scancodes xx (hex) versus keycodes (dec)\n", 34},
+  {"0 is an error; for 1-88 (0x01-0x58) scancode equals keycode\n", 35},
+  {"\
+\n\
+\n\
+Escaped scancodes e0 xx (hex)\n", 36},
+  {"failed to get keycode for scancode 0x%x\n", 37},
+  {"strange... ct changed from %d to %d\n", 38},
+  {"usage: kbd_mode [-a|-u|-k|-s]\n", 39},
+  {"kbd_mode: error reading keyboard mode\n", 40},
+  {"The keyboard is in raw (scancode) mode\n", 41},
+  {"The keyboard is in mediumraw (keycode) mode\n", 42},
+  {"The keyboard is in the default (ASCII) mode\n", 43},
+  {"The keyboard is in Unicode (UTF-8) mode\n", 44},
+  {"The keyboard is in some unknown mode\n", 45},
+  {"%s: error setting keyboard mode\n", 46},
+  {"setfont bug: getfont called with count<256\n", 47},
+  {"unknown charset %s - ignoring charset request\n", 48},
+  {"assuming iso-8859-2 %s\n", 49},
+  {"assuming iso-8859-3 %s\n", 50},
+  {"assuming iso-8859-4 %s\n", 51},
+  {"unknown keysym '%s'\n", 52},
+  {"usage: %s [-o map.orig] map-file\n", 53},
+  {"trying hashlevel %d\n", 54},
+  {"%s: out of memory\n", 55},
+  {"Loading unicode map from file %s\n", 56},
+  {"%s: %s: Warning: line too long\n", 57},
+  {"Bad input line: %s\n", 58},
+  {"%s: Glyph number (0x%x) larger than font length\n", 59},
+  {"%s: Bad end of range (0x%x)\n", 60},
+  {"\
+%s: Corresponding to a range of font positions, there should be a Unicode \
+range\n", 61},
+  {"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n", 62},
+  {"\
+%s: Unicode range U+%x-U+%x not of the same length as font position range \
+0x%x-0x%x\n", 63},
+  {"%s: trailing junk (%s) ignored\n", 64},
+  {"\
+%s: not loading empty unimap\n\
+(if you insist: use option -f to override)\n", 65},
+  {"%s: out of memory?\n", 66},
+  {"entry", 67},
+  {"entries", 68},
+  {"Saved unicode map on `%s'\n", 69},
+  {"Appended Unicode map\n", 70},
+  {"mapscrn: cannot open map file _%s_\n", 71},
+  {"Cannot stat map file", 72},
+  {"Loading symbolic screen map from file %s\n", 73},
+  {"Error parsing symbolic map\n", 74},
+  {"Loading binary screen map from file %s\n", 75},
+  {"Cannot read map from file", 76},
+  {"Loaded screen map from `%s'\n", 77},
+  {"mapscrn: format error detected in _%s_\n", 78},
+  {"Error writing map to file", 79},
+  {"Saved screen map in `%s'\n", 80},
+  {"\
+Usage: \n\
+        %s psffont chartable [outfile]\n", 81},
+  {"%s: Cannot read psf header\n", 82},
+  {"%s: Bad magic number\n", 83},
+  {"%s: Unknown mode number (%d)\n", 84},
+  {"%s: Warning: line too long\n", 85},
+  {"\
+Usage: \n\
+        %s psffont [outfile]\n", 86},
+  {"%s: Font has no character table\n", 87},
+  {"%s: Font already had no character table\n", 88},
+  {"resizecons: cannot find videomode file %s\n", 89},
+  {"Invalid number of lines\n", 90},
+  {"Old mode: %dx%d  New mode: %dx%d\n", 91},
+  {"Old #scanlines: %d  New #scanlines: %d  Character height: %d\n", 92},
+  {"resizecons: the command `%s' failed\n", 93},
+  {"\
+resizecons: don't forget to change TERM (maybe to con%dx%d or linux-%dx%d)\n", 94},
+  {"\
+resizecons:\n\
+call is:  resizecons COLSxROWS  or:  resizecons COLS ROWS\n\
+or: resizecons -lines ROWS, with ROWS one of 25, 28, 30, 34, 36, 40, 44, 50, \
+60\n", 95},
+  {"resizecons: cannot get I/O permissions.\n", 96},
+  {"usage: screendump [n]\n", 97},
+  {"Out of memory?\n", 98},
+  {"Error reading %s\n", 99},
+  {"Out of memory.\n", 100},
+  {"couldn't read %s, and cannot ioctl dump\n", 101},
+  {"Strange ... screen is both %dx%d and %dx%d ??\n", 102},
+  {"Error writing screendump\n", 103},
+  {"\
+Usage: setfont [write-options] [-<N>] [newfont] [-m consolemap] [-u \
+unicodemap]\n\
+  write-options (take place before file loading):\n\
+    -o  <filename>\tWrite current font to <filename>\n\
+    -om <filename>\tWrite current consolemap to <filename>\n\
+    -ou <filename>\tWrite current unicodemap to <filename>\n\
+If no newfont and no -[o|om|ou|m|u] option is given, a default font is \
+loaded:\n\
+    setfont             Load font \"default[.gz]\"\n\
+    setfont -<N>        Load font \"default8x<N>[.gz]\"\n\
+The -<N> option selects a font from a codepage that contains three fonts:\n\
+    setfont -{8|14|16} codepage.cp[.gz]   Load 8x<N> font from codepage.cp\n\
+Explicitly (with -m or -u) or implicitly (in the fontfile) given mappings \
+will\n\
+be loaded and, in the case of consolemaps, activated.\n\
+    -h<N>       (no space) Override font height.\n\
+    -m none\tSuppress loading and activation of a mapping table.\n\
+    -u none\tSuppress loading of a unicode map.\n\
+    -v\t\tBe verbose.\n\
+    -V\t\tPrint version and exit.\n\
+Files are loaded from the current directory or /usr/lib/kbd/*/.\n", 104},
+  {"setfont version %s\n", 105},
+  {"\
+setfont: cannot both restore from character ROM and from file. Font \
+unchanged.\n", 106},
+  {"Bad character size %d\n", 107},
+  {"Loading %d-char 8x%d font from file %s\n", 108},
+  {"Loading Unicode mapping table...\n", 109},
+  {"\
+It seems this kernel is older than 1.1.92\n\
+No Unicode mapping table loaded.\n", 110},
+  {"Cannot find default font\n", 111},
+  {"Cannot find %s font\n", 112},
+  {"Cannot open font file %s\n", 113},
+  {"Error reading input font", 114},
+  {"\
+Setfont is so naive as to believe that font files\n\
+have a size of at most 32kB.  Unfortunately it seems\n\
+that you encountered an exception.  If this really is\n\
+a font file, (i) recompile setfont, (ii) tell aeb@cwi.nl .\n", 115},
+  {"Unsupported psf file mode\n", 116},
+  {"Input file: bad length\n", 117},
+  {"Bad input file size\n", 118},
+  {"\
+This file contains 3 fonts: 8x8, 8x14 and 8x16. Please indicate\n\
+using an option -8 or -14 or -16 which one you want loaded.\n", 119},
+  {"You asked for font size %d, but only 8, 14, 16 are possible here.\n", 120},
+  {"Cannot write font file header", 121},
+  {"Found nothing to save\n", 122},
+  {"Cannot write font file", 123},
+  {"Saved %d-char 8x%d font file on %s\n", 124},
+  {"\
+usage: setkeycode scancode keycode ...\n\
+ (where scancode is either xx or e0xx, given in hexadecimal,\n\
+  and keycode is given in decimal)\n", 125},
+  {"even number of arguments expected", 126},
+  {"error reading scancode", 127},
+  {"code outside bounds", 128},
+  {"failed to set scancode %x to keycode %d\n", 129},
+  {"\
+Usage:\n\
+\tsetleds [-v] [-L] [-D] [-F] [[+|-][ num | caps | scroll ]]\n\
+Thus,\n\
+\tsetleds +caps -num\n\
+will set CapsLock, clear NumLock and leave ScrollLock unchanged.\n\
+The settings before and after the change (if any) are reported\n\
+when the -v option is given or when no change is requested.\n\
+Normally, setleds influences the vt flag settings\n\
+(and these are usually reflected in the leds).\n\
+With -L, setleds only sets the leds, and leaves the flags alone.\n\
+With -D, setleds sets both the flags and the default flags, so\n\
+that a subsequent reset will not change the flags.\n", 130},
+  {"Error reading current led setting. Maybe stdin is not a VT?\n", 131},
+  {"Error reading current flags setting. Maybe an old kernel?\n", 132},
+  {"Error resetting ledmode\n", 133},
+  {"Current default flags:  ", 134},
+  {"Current flags:          ", 135},
+  {"Current leds:           ", 136},
+  {"\
+unrecognized argument: _%s_\n\
+\n", 137},
+  {"Old default flags:    ", 138},
+  {"New default flags:    ", 139},
+  {"Old flags:            ", 140},
+  {"New flags:            ", 141},
+  {"Old leds:             ", 142},
+  {"New leds:             ", 143},
+  {"\
+Usage:\n\
+\tsetmetamode [ metabit | meta | bit | escprefix | esc | prefix ]\n\
+Each vt has his own copy of this bit. Use\n\
+\tsetmetamode [arg] < /dev/ttyn\n\
+to change the settings of another vt.\n\
+The setting before and after the change are reported.\n", 144},
+  {"Meta key sets high order bit\n", 145},
+  {"Meta key gives Esc prefix\n", 146},
+  {"Strange mode for Meta key?\n", 147},
+  {"Error reading current setting. Maybe stdin is not a VT?\n", 148},
+  {"old state:    ", 149},
+  {"new state:    ", 150},
+  {"usage: %s\n", 151},
+  {"failed to restore original translation table\n", 152},
+  {"\
+usage: showfont\n\
+(probably after loading a font with `setfont font')\n", 153},
+  {"cannot change translation table\n", 154},
+  {"cannot change translation table??\n", 155},
+  {"?UNKNOWN?", 156},
+  {"kb mode was %s\n", 157},
+  {"\
+[ if you are trying this under X, it might not work\n\
+since the X server is also reading /dev/console ]\n", 158},
+  {"caught signal %d, cleaning up...\n", 159},
+  {"\
+showkey version %s\n\
+\n\
+usage: showkey [options...]\n\
+\n\
+valid options are:\n\
+\n\
+\t-h --help\tdisplay this help text\n\
+\t-a --ascii\tdisplay the decimal/octal/hex values of the keys\n\
+\t-s --scancodes\tdisplay only the raw scan-codes\n\
+\t-k --keycodes\tdisplay only the interpreted keycodes (default)\n", 160},
+  {"\
+\n\
+Press any keys - Ctrl-D will terminate this program\n\
+\n", 161},
+  {"press any key (program terminates 10s after last keypress)...\n", 162},
+  {"keycode %3d %s\n", 163},
+  {"release", 164},
+  {"press", 165},
+  {"'%s' is not a function key symbol", 166},
+  {"too many (%d) entries on one line", 167},
+  {"too many keydefinitions on one line", 168},
+  {"\
+loadkeys version %s\n\
+\n\
+Usage: loadkeys [option...] [mapfile...]\n\
+\n\
+valid options are:\n\
+\n\
+\t-c --clearcompose clear kernel compose table\n\
+\t-d --default\t  load \"", 169},
+  {"syntax error in map file\n", 170},
+  {"key bindings not changed\n", 171},
+  {"includes nested too deeply", 172},
+  {"switching to %s\n", 173},
+  {"cannot open include file %s", 174},
+  {"Cannot find %s\n", 175},
+  {"cannot open file %s\n", 176},
+  {"Loading %s\n", 177},
+  {"addmap called with bad index %d", 178},
+  {"adding map %d violates explicit keymaps line", 179},
+  {"killkey called with bad index %d", 180},
+  {"killkey called with bad table %d", 181},
+  {"addkey called with bad index %d", 182},
+  {"addkey called with bad table %d", 183},
+  {"%s: addfunc called with bad func %d\n", 184},
+  {"%s: addfunc: func_buf overflow\n", 185},
+  {"compose table overflow\n", 186},
+  {"Keymap %d: Permission denied\n", 187},
+  {"    FAILED", 188},
+  {"failed to bind key %d to value %d\n", 189},
+  {"deallocate keymap %d\n", 190},
+  {"%s: could not deallocate keymap %d\n", 191},
+  {"%s: cannot deallocate or clear keymap\n", 192},
+  {"%s: failed to restore keyboard mode\n", 193},
+  {"\
+%s: warning: this map uses Unicode symbols\n\
+    (perhaps you want to do `kbd_mode -u'?)\n", 194},
+  {"failed to bind string '%s' to function %s\n", 195},
+  {"failed to clear string %s\n", 196},
+  {"too many compose definitions\n", 197},
+  {"impossible error in do_constant", 198},
+  {"\
+\n\
+Changed %d %s and %d %s.\n", 199},
+  {"key", 200},
+  {"keys", 201},
+  {"string", 202},
+  {"strings", 203},
+  {"Loaded %d compose %s.\n", 204},
+  {"definition", 205},
+  {"definitions", 206},
+  {"(No change in compose definitions.)\n", 207},
+  {"loadkeys: don't know how to compose for %s\n", 208},
+};
+
+int _msg_tbl_length = 208;
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..066f49b
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1186 @@
+# SOME DESCRIPTIVE TITLE.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: kbd 0.99\n"
+"POT-Creation-Date: 1999-03-14 20:57+0100\n"
+"PO-Revision-Date: 1999-03-08 11:58+0100\n"
+"Last-Translator: Andries Brouwer <aeb@cwi.nl>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: src/chvt.c:23
+msgid "usage: chvt N\n"
+msgstr "aanroep: chvt N\n"
+
+#: src/deallocvt.c:18
+#, c-format
+msgid "usage: %s [N1 N2 ...]\n"
+msgstr "aanroep: %s [N1 N2 ...]\n"
+
+#: src/deallocvt.c:41
+#, c-format
+msgid "%s: deallocating all unused consoles failed\n"
+msgstr "%s: het opruimen van alle ongebruikte consoles faalde\n"
+
+#: src/deallocvt.c:49
+#, c-format
+msgid "%s: 0: illegal VT number\n"
+msgstr "%s: 0: niet-toegestaan VT nummer\n"
+
+#: src/deallocvt.c:52
+msgid "%s: VT 1 is the console and cannot be deallocated\n"
+msgstr "%s: VT 1 is het console en kan niet opgeruimd worden\n"
+
+#: src/deallocvt.c:57
+#, c-format
+msgid "%s: could not deallocate console %d\n"
+msgstr "%s: kon console %d niet opruimen\n"
+
+#: src/dumpkeys.c:63
+#, c-format
+msgid "KDGKBENT error at index 0 in table %d: "
+msgstr "KDGKBENT fout bij index 0 in tabel %d: "
+
+#: src/dumpkeys.c:76
+msgid "%s: cannot find any keymaps?\n"
+msgstr "%s: kan geen toetsenbordtabellen vinden?\n"
+
+#: src/dumpkeys.c:81
+msgid "%s: plain map not allocated? very strange ...\n"
+msgstr "%s: geen gewone toetsenbordtabel? vreemd ...\n"
+
+#: src/dumpkeys.c:111
+msgid "KDGKBENT error at index %d in table %d: "
+msgstr "KDGKBENT fout bij index %d in tabel %d: "
+
+#: src/dumpkeys.c:228
+#, c-format
+msgid "keycode range supported by kernel:           1 - %d\n"
+msgstr "deze kernel kent de toetscodes in het interval: 1 - %d\n"
+
+#: src/dumpkeys.c:230
+#, c-format
+msgid "max number of actions bindable to a key:         %d\n"
+msgstr "aantal bekende toetsacties:                     %d\n"
+
+#: src/dumpkeys.c:233
+#, c-format
+msgid "number of keymaps in actual use:                 %d\n"
+msgstr "aantal toetsenbordtabellen nu in gebruik:       %d\n"
+
+#: src/dumpkeys.c:236
+#, c-format
+msgid "of which %d dynamically allocated\n"
+msgstr "waarvan %d dynamisch gealloceerd\n"
+
+#: src/dumpkeys.c:237
+msgid "ranges of action codes supported by kernel:\n"
+msgstr "intervallen van actiecodes die deze kernel kent:\n"
+
+#: src/dumpkeys.c:242
+#, c-format
+msgid "number of function keys supported by kernel: %d\n"
+msgstr "aantal functietoetsen ondersteund door deze kernel: %d\n"
+
+#: src/dumpkeys.c:245
+#, c-format
+msgid "max nr of compose definitions: %d\n"
+msgstr "maximum aantal definities van samengestelde symbolen: %d\n"
+
+#: src/dumpkeys.c:247
+#, c-format
+msgid "nr of compose definitions in actual use: %d\n"
+msgstr "huidig aantal definities van samengestelde symbolen: %d\n"
+
+#: src/dumpkeys.c:270
+#, c-format
+msgid ""
+"Symbols recognized by %s:\n"
+"(numeric value, symbol)\n"
+"\n"
+msgstr ""
+"Symbolen die %s kent:\n"
+"(getalswaarde, symbool)\n"
+"\n"
+
+#: src/dumpkeys.c:282
+msgid ""
+"\n"
+"The following synonyms are recognized:\n"
+"\n"
+msgstr ""
+"\n"
+"De volgende synoniemen kunnen gebruikt worden:\n"
+"\n"
+
+#: src/dumpkeys.c:284
+#, c-format
+msgid "%-15s for %s\n"
+msgstr "%-15s voor %s\n"
+
+#: src/dumpkeys.c:286
+msgid ""
+"\n"
+"Recognized modifier names and their column numbers:\n"
+msgstr ""
+"\n"
+"Namen van Shift-achtige toetsen en de bijbehorende kolommen:\n"
+
+#: src/dumpkeys.c:346
+#, c-format
+msgid "# not alt_is_meta: on keymap %d key %d is bound to"
+msgstr "# geen alt_is_meta: op tabel %d is toets %d toegewezen aan"
+
+#: src/dumpkeys.c:421
+msgid "impossible: not meta?\n"
+msgstr "dit kan niet: niet meta?\n"
+
+#: src/dumpkeys.c:477
+#, c-format
+msgid "KDGKBSENT failed at index %d: "
+msgstr "KDGKBSENT faalde bij index %d: "
+
+#: src/dumpkeys.c:497
+#, c-format
+msgid "dumpkeys version %s"
+msgstr "dumpkeys versie %s"
+
+#: src/dumpkeys.c:499
+msgid ""
+"\n"
+"usage: dumpkeys [options...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"\t-h --help\t    display this help text\n"
+"\t-i --short-info\t    display information about keyboard driver\n"
+"\t-l --long-info\t    display above and symbols known to loadkeys\n"
+"\t-n --numeric\t    display keytable in hexadecimal notation\n"
+"\t-f --full-table\t    don't use short-hand notations, one row per keycode\n"
+"\t-1 --separate-lines one line per (modifier,keycode) pair\n"
+"\t   --funcs-only\t    display only the function key strings\n"
+"\t   --keys-only\t    display only key bindings\n"
+"\t   --compose-only   display only compose key combinations\n"
+"\t-c --charset=iso-8859-{1,2,3,4,5,7,8,9}\n"
+"\t             koi8-{r,u}\t\t\n"
+"\t\t\t    interpret character action codes to be from the\n"
+"\t\t\t    specified character set\n"
+msgstr ""
+"\n"
+"aanroep: dumpkeys [opties...]\n"
+"\n"
+"geldige opties:\n"
+"\n"
+"\t-h --help\t    vertoon deze hulp tekst\n"
+"\t-i --short-info\t    geef informatie over de toetsenbordbesturing\n"
+"\t-l --long-info\t    geef het bovenstaande, en ook de lijst bekende "
+"symbolen\n"
+"\t-n --numeric\t    geef de toetsenbordtabel in hexadecimaal\n"
+"\t-f --full-table\t    gebruik geen afkortingen, een rij per toestcode\n"
+"\t-1 --separate-lines een regel per paar (shift-toets,toetscode)\n"
+"\t   --funcs-only\t    geef alleen de functietoetsdefinities\n"
+"\t   --keys-only\t    geef alleen de toetsenbordtabel\n"
+"\t   --compose-only   geef alleen de lijst met samengestelde symbolen\n"
+"\t-c --charset=iso-8859-{1,2,3,4,5,7,8,9}\n"
+"\t             koi8-{r,u}\t\t\n"
+"\t\t\t    interpreteer de symboolnamen als passend in de genoemde standaard\n"
+
+#: src/findfile.c:14
+msgid "Out of Memory\n"
+msgstr "Onvoldoende geheugen\n"
+
+#: src/findfile.c:24
+msgid "Out of Memory?\n"
+msgstr "Onvoldoende geheugen?\n"
+
+#: src/findfile.c:61
+#, c-format
+msgid "error executing  %s\n"
+msgstr "fout bij het uitvoeren van %s\n"
+
+#: src/getfd.c:57
+msgid "Couldnt get a file descriptor referring to the console\n"
+msgstr "Het lukte me niet een referentie (fd) naar het console te krijgen\n"
+
+#: src/getkeycodes.c:18
+msgid "usage: getkeycodes\n"
+msgstr "aanroep: getkeycodes\n"
+
+#: src/getkeycodes.c:34
+msgid "Plain scancodes xx (hex) versus keycodes (dec)\n"
+msgstr "Gewone scancodes xx (hex) met bijbehorende toetscodes (decimaal)\n"
+
+#: src/getkeycodes.c:35
+msgid "0 is an error; for 1-88 (0x01-0x58) scancode equals keycode\n"
+msgstr ""
+"0 is een fout; voor 1-88 (0x01-0x58) zijn scancode en toetscode gelijk\n"
+
+#: src/getkeycodes.c:39
+msgid ""
+"\n"
+"\n"
+"Escaped scancodes e0 xx (hex)\n"
+msgstr ""
+"\n"
+"\n"
+"Scancodes voorafgegaan door e0 (hex)\n"
+
+#: src/getkeycodes.c:59
+#, c-format
+msgid "failed to get keycode for scancode 0x%x\n"
+msgstr "kon geen toetscode vinden bij scancode 0x%x\n"
+
+#: src/getunimap.c:43
+#, c-format
+msgid "strange... ct changed from %d to %d\n"
+msgstr "vreemd... # veranderde van %d in %d\n"
+
+#: src/kbd_mode.c:20
+msgid "usage: kbd_mode [-a|-u|-k|-s]\n"
+msgstr "aanroep: kbd_mode [-a|-u|-k|-s]\n"
+
+#: src/kbd_mode.c:40
+msgid "kbd_mode: error reading keyboard mode\n"
+msgstr "kbd_mode: kan de toetsenbordtoestend niet uitlezen\n"
+
+#: src/kbd_mode.c:45
+msgid "The keyboard is in raw (scancode) mode\n"
+msgstr "Het toetsenbord levert ruwe scancodes af\n"
+
+#: src/kbd_mode.c:48
+msgid "The keyboard is in mediumraw (keycode) mode\n"
+msgstr "Het toetsenbord levert toetscodes af\n"
+
+#: src/kbd_mode.c:51
+msgid "The keyboard is in the default (ASCII) mode\n"
+msgstr "Het toetsenbord levert gewone letters af\n"
+
+#: src/kbd_mode.c:54
+msgid "The keyboard is in Unicode (UTF-8) mode\n"
+msgstr "Het toetsenbord levert Unicode symbolen af\n"
+
+#: src/kbd_mode.c:57
+msgid "The keyboard is in some unknown mode\n"
+msgstr "Het toetsenbord levert iets onbekends af\n"
+
+#: src/kbd_mode.c:75
+#, c-format
+msgid "%s: error setting keyboard mode\n"
+msgstr "%s: fout bij het instellen van de toetsenbord toestand\n"
+
+#: src/kdfontop.c:164 src/kdfontop.c:214
+msgid "setfont bug: getfont called with count<256\n"
+msgstr "interne fout in setfont: getfont aangeroepen met count<256\n"
+
+#: src/ksyms.c:857
+#, c-format
+msgid "unknown charset %s - ignoring charset request\n"
+msgstr "onbekende standaard %s - invoerregel genegeerd\n"
+
+#: src/ksyms.c:891
+#, c-format
+msgid "assuming iso-8859-2 %s\n"
+msgstr "ik zal %s uit iso-8859-2 nemen\n"
+
+#: src/ksyms.c:898
+#, c-format
+msgid "assuming iso-8859-3 %s\n"
+msgstr "ik zal %s uit iso-8859-3 nemen\n"
+
+#: src/ksyms.c:905
+#, c-format
+msgid "assuming iso-8859-4 %s\n"
+msgstr "ik zal %s uit iso-8859-4 nemen\n"
+
+#: src/ksyms.c:909
+#, c-format
+msgid "unknown keysym '%s'\n"
+msgstr "onbekend symbool '%s'\n"
+
+#: src/loadunimap.c:59 src/mapscrn.c:51
+#, c-format
+msgid "usage: %s [-o map.orig] map-file\n"
+msgstr "aanroep: %s [-o toetsbestand.oud] toetsbestand\n"
+
+#: src/loadunimap.c:109
+#, c-format
+msgid "trying hashlevel %d\n"
+msgstr "ik probeer hash niveau %d\n"
+
+#: src/loadunimap.c:124
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: onvoldoende geheugen\n"
+
+#: src/loadunimap.c:149
+#, c-format
+msgid "Loading unicode map from file %s\n"
+msgstr "Zal Unicode toetsbestand %s laden\n"
+
+#: src/loadunimap.c:155
+#, c-format
+msgid "%s: %s: Warning: line too long\n"
+msgstr "%s: %s: Waarschuwing: regel te lang\n"
+
+#: src/loadunimap.c:177 src/loadunimap.c:188 src/psfaddtable.c:204
+#: src/psfaddtable.c:217
+#, c-format
+msgid "Bad input line: %s\n"
+msgstr "Invoer fout in de regel: %s\n"
+
+#: src/loadunimap.c:198 src/psfaddtable.c:228
+#, c-format
+msgid "%s: Glyph number (0x%x) larger than font length\n"
+msgstr "%s: Tekennummer (0x%x) groter dan fontgrootte\n"
+
+#: src/loadunimap.c:204 src/psfaddtable.c:235
+#, c-format
+msgid "%s: Bad end of range (0x%x)\n"
+msgstr "%s: Fout intervaleind (0x%x)\n"
+
+#: src/loadunimap.c:224 src/psfaddtable.c:260
+#, c-format
+msgid ""
+"%s: Corresponding to a range of font positions, there should be a Unicode "
+"range\n"
+msgstr "%s: Bj een interval van fontposities hoort een Unicode interval\n"
+
+#: src/loadunimap.c:233 src/psfaddtable.c:270
+#, c-format
+msgid "%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n"
+msgstr "%s: Fout Unicode interval bij fontpositieinterval 0x%x-0x%x\n"
+
+#: src/loadunimap.c:240 src/psfaddtable.c:278
+#, c-format
+msgid ""
+"%s: Unicode range U+%x-U+%x not of the same length as font position range "
+"0x%x-0x%x\n"
+msgstr ""
+"%s: Unicode interval U+%x-U+%x niet even lang als fontpositie interval "
+"0x%x-0x%x\n"
+
+#: src/loadunimap.c:258 src/psfaddtable.c:297
+#, c-format
+msgid "%s: trailing junk (%s) ignored\n"
+msgstr "%s: rommel (%s) aan het eind genegeerd\n"
+
+#: src/loadunimap.c:264
+#, c-format
+msgid ""
+"%s: not loading empty unimap\n"
+"(if you insist: use option -f to override)\n"
+msgstr ""
+"%s: ik laad geen lege Unicodetabel\n"
+"(als je dat echt wilt, gebruik de -f [forceer] optie)\n"
+
+#: src/loadunimap.c:285
+#, c-format
+msgid "%s: out of memory?\n"
+msgstr "%s: onvoldoende geheugen?\n"
+
+#: src/loadunimap.c:295
+msgid "entry"
+msgstr "element"
+
+#: src/loadunimap.c:295
+msgid "entries"
+msgstr "elementen"
+
+#: src/loadunimap.c:321
+#, c-format
+msgid "Saved unicode map on `%s'\n"
+msgstr "Heb de Unicodetabel weggeschreven in `%s'\n"
+
+#: src/loadunimap.c:353
+msgid "Appended Unicode map\n"
+msgstr "Heb de Unicodetabel toegevoegd\n"
+
+#: src/mapscrn.c:68
+#, c-format
+msgid "mapscrn: cannot open map file _%s_\n"
+msgstr "mapscrn: kan het omnummerbestand _%s_ niet openen\n"
+
+#: src/mapscrn.c:73
+msgid "Cannot stat map file"
+msgstr "De stat() aanroep faalt op het omnummerbestand"
+
+#: src/mapscrn.c:78
+#, c-format
+msgid "Loading symbolic screen map from file %s\n"
+msgstr "Zal het symbolische omnummerbestand %s laden\n"
+
+#: src/mapscrn.c:82
+msgid "Error parsing symbolic map\n"
+msgstr "Fout bij het ontleden van het symbolische omnummerbestand\n"
+
+#: src/mapscrn.c:86
+#, c-format
+msgid "Loading binary screen map from file %s\n"
+msgstr "Zal het binaire omnummerbestand %s laden\n"
+
+#: src/mapscrn.c:90
+msgid "Cannot read map from file"
+msgstr "Fout bij het lezen van het omnummerbestand"
+
+#: src/mapscrn.c:103
+#, c-format
+msgid "Loaded screen map from `%s'\n"
+msgstr "Afbeeldingsbestand uit `%s' geladen\n"
+
+#: src/mapscrn.c:149
+#, c-format
+msgid "mapscrn: format error detected in _%s_\n"
+msgstr "mapscrn: syntax fout ontdekt in _%s_\n"
+
+#: src/mapscrn.c:172
+msgid "Error writing map to file"
+msgstr "Fout bij het schrijven van het omnummerbestand"
+
+#: src/mapscrn.c:178
+#, c-format
+msgid "Saved screen map in `%s'\n"
+msgstr "Huidige omnummering weggeschreven in het bestand `%s'\n"
+
+#: src/psfaddtable.c:33
+#, c-format
+msgid ""
+"Usage: \n"
+"        %s psffont chartable [outfile]\n"
+msgstr ""
+"Aanroep: \n"
+"         %s psf-font Unicodetabel [uitvoer]\n"
+
+#: src/psfaddtable.c:136 src/psfgettable.c:75 src/psfstriptable.c:75
+#, c-format
+msgid "%s: Cannot read psf header\n"
+msgstr "%s: Kan de psf kop niet lezen\n"
+
+#: src/psfaddtable.c:142 src/psfgettable.c:81 src/psfstriptable.c:81
+msgid "%s: Bad magic number\n"
+msgstr "%s: Fout magisch getal\n"
+
+#: src/psfaddtable.c:148 src/psfgettable.c:87 src/psfstriptable.c:87
+#, c-format
+msgid "%s: Unknown mode number (%d)\n"
+msgstr "%s: Onbekend psf type (%d)\n"
+
+#: src/psfaddtable.c:181
+#, c-format
+msgid "%s: Warning: line too long\n"
+msgstr "%s: Waarschuwing: regel te lang\n"
+
+#: src/psfgettable.c:23 src/psfstriptable.c:25
+#, c-format
+msgid ""
+"Usage: \n"
+"        %s psffont [outfile]\n"
+msgstr ""
+"Aanroep: \n"
+"         %s psf-font [uitvoer]\n"
+
+#: src/psfgettable.c:96
+#, c-format
+msgid "%s: Font has no character table\n"
+msgstr "%s: Dit font heeft geen Unicode tabel\n"
+
+#: src/psfstriptable.c:96
+#, c-format
+msgid "%s: Font already had no character table\n"
+msgstr "%s: Dit font had geen Unicode tabel\n"
+
+#: src/resizecons.c:145
+#, c-format
+msgid "resizecons: cannot find videomode file %s\n"
+msgstr "resizecons: kan videomode bestand %s niet vinden\n"
+
+#: src/resizecons.c:164
+msgid "Invalid number of lines\n"
+msgstr "Ongeldig aantal regels\n"
+
+#: src/resizecons.c:230
+#, c-format
+msgid "Old mode: %dx%d  New mode: %dx%d\n"
+msgstr "Oud scherm: %dx%d  Nieuw scherm: %dx%d\n"
+
+#: src/resizecons.c:232
+#, c-format
+msgid "Old #scanlines: %d  New #scanlines: %d  Character height: %d\n"
+msgstr "Oud #scanlijnen: %d  Nieuw #scanlijnen: %d  Letterhoogte: %d\n"
+
+#: src/resizecons.c:243
+#, c-format
+msgid "resizecons: the command `%s' failed\n"
+msgstr "resizecons: het commando `%s' faalde\n"
+
+#: src/resizecons.c:308
+#, c-format
+msgid ""
+"resizecons: don't forget to change TERM (maybe to con%dx%d or linux-%dx%d)\n"
+msgstr ""
+"resizecons: vergeet niet om TERM aan te passen (mogelijk tot con%dx%d of "
+"linux-%dx%d)\n"
+
+#: src/resizecons.c:321
+msgid ""
+"resizecons:\n"
+"call is:  resizecons COLSxROWS  or:  resizecons COLS ROWS\n"
+"or: resizecons -lines ROWS, with ROWS one of 25, 28, 30, 34, 36, 40, 44, 50, "
+"60\n"
+msgstr ""
+"resizecons:\n"
+"aanroep: resizecons COLSxROWS  of:  resizecons COLS ROWS\n"
+"of: resizecons -lines ROWS, waarbij ROWS een van de waarden 25, 28, 30, 34, "
+"36, 40, 44, 50, 60 heeft\n"
+
+#: src/resizecons.c:359
+msgid "resizecons: cannot get I/O permissions.\n"
+msgstr "resizecons: ik heb geen toestemming voor directe I/O\n"
+
+#: src/screendump.c:38
+msgid "usage: screendump [n]\n"
+msgstr "aanroep: screendump [n]\n"
+
+#: src/screendump.c:55 src/screendump.c:120 src/setfont.c:251
+msgid "Out of memory?\n"
+msgstr "Onvoldoende geheugen?\n"
+
+#: src/screendump.c:59
+#, c-format
+msgid "Error reading %s\n"
+msgstr "Fout bij het lezen van %s\n"
+
+#: src/screendump.c:94
+msgid "Out of memory.\n"
+msgstr "Onvoldoende geheugen.\n"
+
+#: src/screendump.c:104
+#, c-format
+msgid "couldn't read %s, and cannot ioctl dump\n"
+msgstr "kan %s niet lezen, en kan ook niet dumpen via een ioctl\n"
+
+#: src/screendump.c:113
+#, c-format
+msgid "Strange ... screen is both %dx%d and %dx%d ??\n"
+msgstr "Vreemd ... het scherm is zowel %dx%d als %dx%d ??\n"
+
+#: src/screendump.c:135
+msgid "Error writing screendump\n"
+msgstr "Fout bij het schrijven van de schermdump\n"
+
+#: src/setfont.c:63
+msgid ""
+"Usage: setfont [write-options] [-<N>] [newfont] [-m consolemap] [-u "
+"unicodemap]\n"
+"  write-options (take place before file loading):\n"
+"    -o  <filename>\tWrite current font to <filename>\n"
+"    -om <filename>\tWrite current consolemap to <filename>\n"
+"    -ou <filename>\tWrite current unicodemap to <filename>\n"
+"If no newfont and no -[o|om|ou|m|u] option is given, a default font is "
+"loaded:\n"
+"    setfont             Load font \"default[.gz]\"\n"
+"    setfont -<N>        Load font \"default8x<N>[.gz]\"\n"
+"The -<N> option selects a font from a codepage that contains three fonts:\n"
+"    setfont -{8|14|16} codepage.cp[.gz]   Load 8x<N> font from codepage.cp\n"
+"Explicitly (with -m or -u) or implicitly (in the fontfile) given mappings "
+"will\n"
+"be loaded and, in the case of consolemaps, activated.\n"
+"    -h<N>       (no space) Override font height.\n"
+"    -m none\tSuppress loading and activation of a mapping table.\n"
+"    -u none\tSuppress loading of a unicode map.\n"
+"    -v\t\tBe verbose.\n"
+"    -V\t\tPrint version and exit.\n"
+"Files are loaded from the current directory or /usr/lib/kbd/*/.\n"
+msgstr ""
+"Aanroep: setfont [schrijf-opties] [-<N>] [nieuw_font] [-m omnummerbestand] "
+"[-u Unicodetabel]\n"
+"  schrijf-opties (worden uitgevoerd voor het laden van een nieuw font):\n"
+"    -o  <bestand>\tSchrijf het huidige font naar <bestand>\n"
+"    -om <bestand>\tSchrijf de huidige omnummering naar <bestand>\n"
+"    -ou <bestand>\tSchrijf de huidige Unicodetabel naar <bestand>\n"
+"Als geen nieuw_font en geen -[o|om|ou|m|u] optie is gegeven, wordt een "
+"standaard font geladen:\n"
+"    setfont              Laad het font \"default[.gz]\"\n"
+"    setfont -<N>         Laad het font default8x<N>[.gz]\"\n"
+"De -<N> optie selecteert een font uit een codepagina met drie fonts:\n"
+"    setfont -{8|14|16} codepage.cp[.gz]  Laad 8x<N> font uit codepage.cp\n"
+"Expliciet (met -m of -u) of impliciet (in het font) gegeven (om)nummeringen\n"
+"worden geladen en geactiveerd.\n"
+"    -h<N>       (zonder spatie) Doe net alsof het font hoogte N heeft\n"
+"    -m none\tLaad geen omnummertabel\n"
+"    -u none\tLaad geen Unicodetabel\n"
+"    -v\t\tGeef uitvoerig commentaar\n"
+"    -V\t\tDruk de programmaversie af\n"
+"Bestanden worden geladen uit het huidige directory of  /usr/lib/kbd/*/.\n"
+
+#: src/setfont.c:106
+#, c-format
+msgid "setfont version %s\n"
+msgstr "setfont versie %s\n"
+
+#: src/setfont.c:160
+msgid ""
+"setfont: cannot both restore from character ROM and from file. Font "
+"unchanged.\n"
+msgstr ""
+"setfont: kan niet tegelijk vanuit teken-ROM en van een bestand lezen. Font "
+"ongewijzigd.\n"
+
+#: src/setfont.c:221
+#, c-format
+msgid "Bad character size %d\n"
+msgstr "Foute tegengrootte %d\n"
+
+#: src/setfont.c:232
+#, c-format
+msgid "Loading %d-char 8x%d font from file %s\n"
+msgstr "Ga %d-teken 8x%d font uit het bestand %s laden\n"
+
+#: src/setfont.c:270
+msgid "Loading Unicode mapping table...\n"
+msgstr "Ga Unicodetabel laden\n"
+
+#: src/setfont.c:279
+msgid ""
+"It seems this kernel is older than 1.1.92\n"
+"No Unicode mapping table loaded.\n"
+msgstr ""
+"Zo te zien is de kernel ouder dan 1.1.92\n"
+"Geen Unicodetabel geladen.\n"
+
+#: src/setfont.c:317
+msgid "Cannot find default font\n"
+msgstr "Kan het standaard font niet vinden\n"
+
+#: src/setfont.c:324
+#, c-format
+msgid "Cannot find %s font\n"
+msgstr "Kan het %s font niet vinden\n"
+
+#: src/setfont.c:330
+#, c-format
+msgid "Cannot open font file %s\n"
+msgstr "Kan het font %s niet openen\n"
+
+#: src/setfont.c:342
+msgid "Error reading input font"
+msgstr "Fout bij het lezen van het font"
+
+#: src/setfont.c:351
+msgid ""
+"Setfont is so naive as to believe that font files\n"
+"have a size of at most 32kB.  Unfortunately it seems\n"
+"that you encountered an exception.  If this really is\n"
+"a font file, (i) recompile setfont, (ii) tell aeb@cwi.nl .\n"
+msgstr ""
+"Setfont denkt dat een font nooit groter dan 32kB kan zijn.\n"
+"Helaas ziet het er naar uit dat U een uitzondering bent tegengekomen.\n"
+"Als dit echt een font is, (i) compileer setfont opnieuw, en (ii) schrijf "
+"naar aeb@cwi.nl .\n"
+
+#: src/setfont.c:376
+msgid "Unsupported psf file mode\n"
+msgstr "Niet ondersteund psf bestand\n"
+
+#: src/setfont.c:385
+msgid "Input file: bad length\n"
+msgstr "Invoer heeft rare grootte\n"
+
+#: src/setfont.c:402
+msgid "Bad input file size\n"
+msgstr "Invoer heeft foute grootte\n"
+
+#: src/setfont.c:421
+msgid ""
+"This file contains 3 fonts: 8x8, 8x14 and 8x16. Please indicate\n"
+"using an option -8 or -14 or -16 which one you want loaded.\n"
+msgstr ""
+"Dit bestand bevat 3 fonts: 8x8, 8x14 en 8x16. Vertel met behulp\n"
+"van een optie -8 of -14 of -16 welke van de drie geladen moet worden.\n"
+
+#: src/setfont.c:435
+#, c-format
+msgid "You asked for font size %d, but only 8, 14, 16 are possible here.\n"
+msgstr "U vroeg om fontgrootte %d, maar ik heb alleen 8, 14, 16 in voorraad.\n"
+
+#: src/setfont.c:471
+msgid "Cannot write font file header"
+msgstr "Fout bij het schrijven van de font kop"
+
+#: src/setfont.c:477
+msgid "Found nothing to save\n"
+msgstr "Er was niets om weg te schrijven\n"
+
+#: src/setfont.c:481
+msgid "Cannot write font file"
+msgstr "Fout bij het wegschrijven van het font"
+
+#: src/setfont.c:485
+#, c-format
+msgid "Saved %d-char 8x%d font file on %s\n"
+msgstr "Heb %d-teken 8x%d font in het bestand %s weggeschreven\n"
+
+#: src/setkeycodes.c:21
+msgid ""
+"usage: setkeycode scancode keycode ...\n"
+" (where scancode is either xx or e0xx, given in hexadecimal,\n"
+"  and keycode is given in decimal)\n"
+msgstr ""
+"aanroep: setkeycode scancode toetscode ...\n"
+" (waarbij scancode xx of e0xx is, gegeven in hexadecimaal,\n"
+"  en de toetscode decimaal gegeven wordt)\n"
+
+#: src/setkeycodes.c:38
+msgid "even number of arguments expected"
+msgstr "ik verwacht een even aantal parameters"
+
+#: src/setkeycodes.c:45
+msgid "error reading scancode"
+msgstr "fout bij het lezen van de scancode"
+
+#: src/setkeycodes.c:51
+msgid "code outside bounds"
+msgstr "codewaarde te groot"
+
+#: src/setkeycodes.c:54
+#, c-format
+msgid "failed to set scancode %x to keycode %d\n"
+msgstr "kon scancode %x niet toewijzen aan toetscode %d\n"
+
+#: src/setleds.c:20
+msgid ""
+"Usage:\n"
+"\tsetleds [-v] [-L] [-D] [-F] [[+|-][ num | caps | scroll ]]\n"
+"Thus,\n"
+"\tsetleds +caps -num\n"
+"will set CapsLock, clear NumLock and leave ScrollLock unchanged.\n"
+"The settings before and after the change (if any) are reported\n"
+"when the -v option is given or when no change is requested.\n"
+"Normally, setleds influences the vt flag settings\n"
+"(and these are usually reflected in the leds).\n"
+"With -L, setleds only sets the leds, and leaves the flags alone.\n"
+"With -D, setleds sets both the flags and the default flags, so\n"
+"that a subsequent reset will not change the flags.\n"
+msgstr ""
+"Aanroep:\n"
+"\tsetleds [-v] [-L] [-D] [-F] [[+|-][ num | caps | scroll ]]\n"
+"Bijvoorbeeld,\n"
+"\tsetleds +caps -num\n"
+"zet CapsLock aan, NumLock uit, en laat ScrollLock ongewijzigs.\n"
+"Als geen wijziging wordt gevraagd, of de -v optie is gegeven,\n"
+"wordt de toestand voor en na de aanroep gerapporteerd.\n"
+"Met de -L optie worden alleen de leds gezet, niet de bijbehorende\n"
+"toetsenbordtoestand\n"
+"Met de -D vlag wordt ook de standaard toestand aangepast, zodat een\n"
+"latere reset de toestand niet wijzigt.\n"
+
+#: src/setleds.c:74
+msgid "Error reading current led setting. Maybe stdin is not a VT?\n"
+msgstr "Fout bij het lezen van de leds. Is stdin wel een VT?\n"
+
+#: src/setleds.c:81
+msgid "Error reading current flags setting. Maybe an old kernel?\n"
+msgstr "Fout bij het lezen van de toetsenbordtoestand. Een oude kernel?\n"
+
+#: src/setleds.c:108
+msgid "Error resetting ledmode\n"
+msgstr "Fout bij het zetten van de leds\n"
+
+#: src/setleds.c:117
+msgid "Current default flags:  "
+msgstr "Huidige standaardtoestand:  "
+
+#: src/setleds.c:121
+msgid "Current flags:          "
+msgstr "Huidige toestand:           "
+
+#: src/setleds.c:125
+msgid "Current leds:           "
+msgstr "Huidige leds:               "
+
+#: src/setleds.c:153 src/setmetamode.c:90
+#, c-format
+msgid ""
+"unrecognized argument: _%s_\n"
+"\n"
+msgstr "onbekende parameter: _%s_\n"
+
+#: src/setleds.c:162
+msgid "Old default flags:    "
+msgstr "Oude standaardtoestand:   "
+
+#: src/setleds.c:164
+msgid "New default flags:    "
+msgstr "Nieuwe standaardtoestand: "
+
+#: src/setleds.c:171
+msgid "Old flags:            "
+msgstr "Oude toestand:            "
+
+#: src/setleds.c:173
+msgid "New flags:            "
+msgstr "Nieuwe toestand:"
+
+#: src/setleds.c:186
+msgid "Old leds:             "
+msgstr "Oude leds:                "
+
+#: src/setleds.c:188
+msgid "New leds:             "
+msgstr "Nieuwe leds:              "
+
+#: src/setmetamode.c:19
+msgid ""
+"Usage:\n"
+"\tsetmetamode [ metabit | meta | bit | escprefix | esc | prefix ]\n"
+"Each vt has his own copy of this bit. Use\n"
+"\tsetmetamode [arg] < /dev/ttyn\n"
+"to change the settings of another vt.\n"
+"The setting before and after the change are reported.\n"
+msgstr ""
+"Aanroep:\n"
+"\tsetmetamode [ metabit | meta | bit | escprefix | esc | prefix ]\n"
+"Elke VT heeft zijn eigen kopie van dit bit. Gebruik\n"
+"\tsetmetamode [param] < /dev/ttyn\n"
+"om het metabit van een andere VT te veranderen.\n"
+"De toestand voor en na de aanroep wordt gerapporteerd.\n"
+
+#: src/setmetamode.c:36
+msgid "Meta key sets high order bit\n"
+msgstr "De Metatoets zet het achtste bit\n"
+
+#: src/setmetamode.c:39
+msgid "Meta key gives Esc prefix\n"
+msgstr "De Metatoets geeft een Esc prefix\n"
+
+#: src/setmetamode.c:42
+msgid "Strange mode for Meta key?\n"
+msgstr "Rare Metatoets instelling??\n"
+
+#: src/setmetamode.c:74
+msgid "Error reading current setting. Maybe stdin is not a VT?\n"
+msgstr "Fout bij het lezen van de huidige toestand. Is stdin wel een VT?\n"
+
+#: src/setmetamode.c:94
+msgid "old state:    "
+msgstr "oude toestand:    "
+
+#: src/setmetamode.c:100
+msgid "new state:    "
+msgstr "nieuwe toestand:  "
+
+#: src/setvesablank.c:21
+msgid "usage: %s\n"
+msgstr "aanroep: %s\n"
+
+#: src/showfont.c:18
+msgid "failed to restore original translation table\n"
+msgstr "kon de oorspronkelijke omnummertabel niet herstellen\n"
+
+#: src/showfont.c:34
+msgid ""
+"usage: showfont\n"
+"(probably after loading a font with `setfont font')\n"
+msgstr ""
+"aanroep: showfont\n"
+"(gewoonlijk na het laden van een font met `setfont font')\n"
+
+#: src/showfont.c:60
+msgid "cannot change translation table\n"
+msgstr "kan de omnummertabel niet aanpassen\n"
+
+#: src/showfont.c:86
+msgid "cannot change translation table??\n"
+msgstr "kan de omnummertabel niet aanpassen??\n"
+
+#: src/showkey.c:42
+msgid "?UNKNOWN?"
+msgstr "?ONBEKEND?"
+
+#: src/showkey.c:44
+#, c-format
+msgid "kb mode was %s\n"
+msgstr "de toetsenbordtoestand was %s\n"
+
+#: src/showkey.c:46
+msgid ""
+"[ if you are trying this under X, it might not work\n"
+"since the X server is also reading /dev/console ]\n"
+msgstr ""
+"[ als je dit under X probeert, dan werkt het misschien niet\n"
+"want de X server leest ook van /dev/console ]\n"
+
+#: src/showkey.c:63
+#, c-format
+msgid "caught signal %d, cleaning up...\n"
+msgstr "kreeg signaal %d, herstel de oude toestand weer...\n"
+
+#: src/showkey.c:75
+#, c-format
+msgid ""
+"showkey version %s\n"
+"\n"
+"usage: showkey [options...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"\t-h --help\tdisplay this help text\n"
+"\t-a --ascii\tdisplay the decimal/octal/hex values of the keys\n"
+"\t-s --scancodes\tdisplay only the raw scan-codes\n"
+"\t-k --keycodes\tdisplay only the interpreted keycodes (default)\n"
+msgstr ""
+"showkey versie %s\n"
+"\n"
+"aanroep: showkey [opties...]\n"
+"\n"
+"geldige opties zijn:\n"
+"\n"
+"\t-h --help\tvertoon deze hulp tekst\n"
+"\t-a --ascii\tgeef de 10/8/16-tallige waarden van de toetsen\n"
+"\t-s --scancodes\tgeef alleen de scancodes\n"
+"\t-k --keycodes\tgeef alleen de toetscodes (standaard)\n"
+
+#: src/showkey.c:148
+msgid ""
+"\n"
+"Press any keys - Ctrl-D will terminate this program\n"
+"\n"
+msgstr ""
+"\n"
+"Druk willekeurige toetsen in. Ctrl-D beeindigt het programma\n"
+
+#: src/showkey.c:217
+msgid "press any key (program terminates 10s after last keypress)...\n"
+msgstr "Druk willekeurige toetsen in. Na 10 sec wachten stopt het programma.\n"
+
+#: src/showkey.c:225
+msgid "keycode %3d %s\n"
+msgstr "toetscode %3d %s\n"
+
+#: src/showkey.c:227
+msgid "release"
+msgstr "loslaten"
+
+#: src/showkey.c:228
+msgid "press"
+msgstr "indrukken"
+
+#: src/loadkeys.y:196
+#, c-format
+msgid "'%s' is not a function key symbol"
+msgstr "'%s' is geen functietoetssymbool"
+
+#: src/loadkeys.y:259
+#, c-format
+msgid "too many (%d) entries on one line"
+msgstr "teveel (%d) elementen op een regel"
+
+#: src/loadkeys.y:272
+msgid "too many keydefinitions on one line"
+msgstr "teveel toetsdefinities op een regel"
+
+#: src/loadkeys.y:291
+#, c-format
+msgid ""
+"loadkeys version %s\n"
+"\n"
+"Usage: loadkeys [option...] [mapfile...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"\t-c --clearcompose clear kernel compose table\n"
+"\t-d --default\t  load \""
+msgstr ""
+"loadkeys versie %s\n"
+"\n"
+"Aanroep: loadkeys [option...] [mapfile...]\n"
+"\n"
+"geldige opties zijn:\n"
+"\n"
+"\t-c --clearcompose clear kernel compose table\n"
+"\t-d --default\t  load \""
+
+#: src/loadkeys.y:362
+msgid "syntax error in map file\n"
+msgstr "Fout in het omnummerbestand\n"
+
+#: src/loadkeys.y:364
+msgid "key bindings not changed\n"
+msgstr "toetsinstellingen onveranderd\n"
+
+#: src/loadkeys.y:421
+msgid "includes nested too deeply"
+msgstr "include-bestanden te diep genest"
+
+#. start reading include file
+#: src/loadkeys.y:544
+#, c-format
+msgid "switching to %s\n"
+msgstr "ik lees nu van %s\n"
+
+#: src/loadkeys.y:550
+msgid "cannot open include file %s"
+msgstr "Kan het include-bestand %s niet openen"
+
+#: src/loadkeys.y:597
+msgid "Cannot find %s\n"
+msgstr "Kan het bestand %s niet vinden\n"
+
+#: src/loadkeys.y:610
+msgid "cannot open file %s\n"
+msgstr "Kan het bestand %s niet openen\n"
+
+#: src/loadkeys.y:621
+msgid "Loading %s\n"
+msgstr "Fout bij het lezen van %s\n"
+
+#: src/loadkeys.y:633
+#, c-format
+msgid "addmap called with bad index %d"
+msgstr "addmap aangeroepen met foute index %d"
+
+#: src/loadkeys.y:637
+#, c-format
+msgid "adding map %d violates explicit keymaps line"
+msgstr "het toevoegen van tabel %d is in strijd met de gegeven `keymaps' regel"
+
+#: src/loadkeys.y:651
+#, c-format
+msgid "killkey called with bad index %d"
+msgstr "killkey aangeroepen met foute index %d"
+
+#: src/loadkeys.y:653
+#, c-format
+msgid "killkey called with bad table %d"
+msgstr "killkey aangeroepen met foute tabel %d"
+
+#: src/loadkeys.y:667
+#, c-format
+msgid "addkey called with bad index %d"
+msgstr "addkey aangeroepen met foute index %d"
+
+#: src/loadkeys.y:669
+#, c-format
+msgid "addkey called with bad table %d"
+msgstr "addkey aangeroepen met foute tabel %d"
+
+#: src/loadkeys.y:709
+#, c-format
+msgid "%s: addfunc called with bad func %d\n"
+msgstr "%s: addfunc aangeroepen met foute func %d\n"
+
+#: src/loadkeys.y:729
+#, c-format
+msgid "%s: addfunc: func_buf overflow\n"
+msgstr "%s: addfunc: func_buf is te klein\n"
+
+#: src/loadkeys.y:747
+msgid "compose table overflow\n"
+msgstr "de compose-tabel is te klein\n"
+
+#: src/loadkeys.y:784
+#, c-format
+msgid "Keymap %d: Permission denied\n"
+msgstr "Toettabel %d: dat mag niet\n"
+
+#: src/loadkeys.y:793
+msgid "    FAILED"
+msgstr "    FAALDE"
+
+#: src/loadkeys.y:796
+msgid "failed to bind key %d to value %d\n"
+msgstr "kon toets %d niet de waarde %d toekennen\n"
+
+#: src/loadkeys.y:807
+#, c-format
+msgid "deallocate keymap %d\n"
+msgstr "geef het geheugen van toetsdefinitietabel %d vrij\n"
+
+#: src/loadkeys.y:813
+msgid "%s: could not deallocate keymap %d\n"
+msgstr "%s: kon toetsdefinitietabel %d niet opruimen\n"
+
+#: src/loadkeys.y:828
+msgid "%s: cannot deallocate or clear keymap\n"
+msgstr "%s: kan toetsdefinitietabel niet vrijgeven of schoonvegen\n"
+
+#: src/loadkeys.y:839
+msgid "%s: failed to restore keyboard mode\n"
+msgstr "%s: fout bij het herstellen van de toetsenbord toestand\n"
+
+#: src/loadkeys.y:842
+#, c-format
+msgid ""
+"%s: warning: this map uses Unicode symbols\n"
+"    (perhaps you want to do `kbd_mode -u'?)\n"
+msgstr ""
+"%s: waarschuwing: deze toetsenbordtabel gebruikt Unicode symbolen\n"
+"    (misschien wilt u `kbd_mode -u' zeggen?)\n"
+
+#: src/loadkeys.y:886
+#, c-format
+msgid "failed to bind string '%s' to function %s\n"
+msgstr "kon de string '%s' niet aan de functie %s binden\n"
+
+#: src/loadkeys.y:893
+#, c-format
+msgid "failed to clear string %s\n"
+msgstr "kon de string %s niet leegmaken\n"
+
+#: src/loadkeys.y:910
+msgid "too many compose definitions\n"
+msgstr "teveel definities van samengestelde symbolen\n"
+
+#: src/loadkeys.y:970
+msgid "impossible error in do_constant"
+msgstr "onmogelijke fout in do_constant"
+
+#: src/loadkeys.y:988
+#, c-format
+msgid ""
+"\n"
+"Changed %d %s and %d %s.\n"
+msgstr ""
+"\n"
+"Veranderde %d %s en %d %s.\n"
+
+#: src/loadkeys.y:989
+msgid "key"
+msgstr "toets"
+
+#: src/loadkeys.y:989
+msgid "keys"
+msgstr "toetsen"
+
+#: src/loadkeys.y:990
+msgid "string"
+msgstr "string"
+
+#: src/loadkeys.y:990
+msgid "strings"
+msgstr "strings"
+
+#: src/loadkeys.y:992
+msgid "Loaded %d compose %s.\n"
+msgstr "%d %s voor samengestelde symbolen geladen\n"
+
+#: src/loadkeys.y:993
+msgid "definition"
+msgstr "definitie"
+
+#: src/loadkeys.y:993
+msgid "definitions"
+msgstr "definities"
+
+#: src/loadkeys.y:995
+msgid "(No change in compose definitions.)\n"
+msgstr "(Geen wijziging in definities van samengestelde symbolen.)\n"
+
+#: src/loadkeys.y:1028
+#, c-format
+msgid "loadkeys: don't know how to compose for %s\n"
+msgstr "loadkeys: ik ken de definities van de samengestelde symbolen voor %s niet\n"
diff --git a/po/po2tbl.sed b/po/po2tbl.sed
new file mode 100644
index 0000000..b3bcca4
--- /dev/null
+++ b/po/po2tbl.sed
@@ -0,0 +1,102 @@
+# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# 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
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+1 {
+  i\
+/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
+\
+#if HAVE_CONFIG_H\
+# include <config.h>\
+#endif\
+\
+#include "libgettext.h"\
+\
+const struct _msg_ent _msg_tbl[] = {
+  h
+  s/.*/0/
+  x
+}
+#
+# Write msgid entries in C array form.
+#
+/^msgid/ {
+  s/msgid[ 	]*\(".*"\)/  {\1/
+  tb
+# Append the next line
+  :b
+  N
+# Look whether second part is continuation line.
+  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
+# Yes, then branch.
+  ta
+# Because we assume that the input file correctly formed the line
+# just read cannot be again be a msgid line.  So it's safe to ignore
+# it.
+  s/\(.*\)\n.*/\1/
+  bc
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use D here.
+  s/.*\n\(.*\)/\1/
+# Some buggy seds do not clear the `successful substitution since last ``t'''
+# flag on `N', so we do a `t' here to clear it.
+  tb
+# Not reached
+  :c
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+  G
+  s/\(.*\)\n\([0-9]*\)/\1, \2},/
+  s/\(.*\)"$/\1/
+  p
+}
+#
+# Last line.
+#
+$ {
+  i\
+};\
+
+  g
+  s/0*\(.*\)/int _msg_tbl_length = \1;/p
+}
+d
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..f67fee6
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: kbd 0.98\n"
+"POT-Creation-Date: 1999-03-14 20:57+0100\n"
+"PO-Revision-Date: 1999-03-14 09:36+0500\n"
+"Last-Translator: QingLong <QingLong@Bolizm>\n"
+"Language-Team: LANGUAGE <RU@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/chvt.c:23
+msgid "usage: chvt N\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: chvt N\n"
+
+#: src/deallocvt.c:18
+#, c-format
+msgid "usage: %s [N1 N2 ...]\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: %s [N1 N2 ...]\n"
+
+#: src/deallocvt.c:41
+#, c-format
+msgid "%s: deallocating all unused consoles failed\n"
+msgstr "%s: ÎÅ ÕÄÁÌÏÓØ ×ÙÓ×ÏÂÏÄÉÔØ ×ÓÅ ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ËÏÎÓÏÌÉ\n"
+
+#: src/deallocvt.c:49
+#, c-format
+msgid "%s: 0: illegal VT number\n"
+msgstr "%s: 0: ÎÅÄÏÐÕÓÔÉÍÙÊ ÎÏÍÅÒ VT\n"
+
+#: src/deallocvt.c:52
+#, c-format
+msgid "%s: VT 1 is the console and cannot be deallocated\n"
+msgstr "%s: VT 1 --- ÜÔÏ ËÏÎÓÏÌØ É ÎÅ ÍÏÖÅÔ ÂÙÔØ ×ÙÓ×ÏÂÏÖÄÅÎÁ\n"
+
+#: src/deallocvt.c:57
+#, c-format
+msgid "%s: could not deallocate console %d\n"
+msgstr "%s: ÎÕ, ÎÅ ÓÍÏÇÌÁ Ñ ×ÙÓ×ÏÂÏÄÉÔØ ËÏÎÓÏÌØ %d\n"
+
+#: src/dumpkeys.c:63
+#, c-format
+msgid "KDGKBENT error at index 0 in table %d: "
+msgstr "ÏÛÉÂËÁ KDGKBENT ÐÏ ÉÎÄÅËÓÕ 0 × ÔÁÂÌÉÃÅ %d: "
+
+#: src/dumpkeys.c:76
+#, c-format
+msgid "%s: cannot find any keymaps?\n"
+msgstr "%s: ÎÅÔ ÎÉËÁËÉÈ ÒÁÓËÌÁÄÏË, ×ÏÏÂÝÅ?\n"
+
+#: src/dumpkeys.c:81
+#, c-format
+msgid "%s: plain map not allocated? very strange ...\n"
+msgstr "%s: ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ ÐÒÏÓÔÁÑ ÒÁÓËÌÁÄËÁ? ïÞÅÎØ ÓÔÒÁÎÎÏ...\n"
+
+#: src/dumpkeys.c:111
+#, c-format
+msgid "KDGKBENT error at index %d in table %d: "
+msgstr "ÏÛÉÂËÁ KDGKBENT ÐÏ ÉÎÄÅËÓÕ %d × ÔÁÂÌÉÃÅ %d: "
+
+#: src/dumpkeys.c:228
+#, c-format
+msgid "keycode range supported by kernel:           1 - %d\n"
+msgstr "ÄÉÁÐÁÚÏÎ ËÏÄÏ× ËÌÁ×ÉÛ, ÉÚ×ÅÓÔÎÙÈ ÑÄÒÕ:      1 -- %d\n"
+
+#: src/dumpkeys.c:230
+#, c-format
+msgid "max number of actions bindable to a key:         %d\n"
+msgstr "ÎÁ ÏÄÎÕ ËÌÁ×ÉÛÕ ×ÓÅÇÏ ÍÏÖÎÏ ÐÏ×ÅÓÉÔØ ÄÅÊÓÔ×ÉÊ:   %d\n"
+
+#: src/dumpkeys.c:233
+#, c-format
+msgid "number of keymaps in actual use:                 %d\n"
+msgstr "ÒÅÁÌØÎÏ ÉÓÐÏÌØÚÕÅÍÙÈ ÒÁÓËÌÁÄÏË:                  %d\n"
+
+#: src/dumpkeys.c:236
+#, c-format
+msgid "of which %d dynamically allocated\n"
+msgstr "ÉÚ ÎÉÈ ÕÓÔÁÎÏ×ÌÅÎÏ ÄÉÎÁÍÉÞÅÓËÉ:                  %d\n"
+
+#: src/dumpkeys.c:237
+msgid "ranges of action codes supported by kernel:\n"
+msgstr "ËÏÄÙ ÄÅÊÓÔ×ÉÊ, ÄÏÐÕÓËÁÅÍÙÅ ÑÄÒÏÍ:\n"
+
+#: src/dumpkeys.c:242
+#, c-format
+msgid "number of function keys supported by kernel: %d\n"
+msgstr "ÆÕÎËÃÉÏÎÁÌØÎÙÈ ËÌÁ×ÉÛ, ÐÏÄÄÅÒÖÉ×ÁÅÍÙÈ ÑÄÒÏÍ: %d\n"
+
+#: src/dumpkeys.c:245
+#, c-format
+msgid "max nr of compose definitions: %d\n"
+msgstr "ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÏÓÔÁ×ÎÙÈ ÏÐÒÅÄÅÌÅÎÉÊ: %d\n"
+
+#: src/dumpkeys.c:247
+#, c-format
+msgid "nr of compose definitions in actual use: %d\n"
+msgstr "ÒÅÁÌØÎÏ ÉÓÐÏÌØÚÕÅÍÙÈ ÓÏÓÔÁ×ÎÙÈ ÏÐÒÅÄÅÌÅÎÉÊ: %d\n"
+
+#: src/dumpkeys.c:270
+#, c-format
+msgid ""
+"Symbols recognized by %s:\n"
+"(numeric value, symbol)\n"
+"\n"
+msgstr ""
+"óÉÍ×ÏÌÙ, ÐÏÎÉÍÁÅÍÙÅ %s:\n"
+"(ÞÉÓÌÏ×ÏÅ ÚÎÁÞÅÎÉÅ, ÓÉÍ×ÏÌ)\n"
+"\n"
+
+#: src/dumpkeys.c:282
+msgid ""
+"\n"
+"The following synonyms are recognized:\n"
+"\n"
+msgstr ""
+"\n"
+"ðÏÎÉÍÁÅÍÙÅ ÓÉÎÏÎÉÍÙ:\n"
+"\n"
+
+#: src/dumpkeys.c:284
+#, c-format
+msgid "%-15s for %s\n"
+msgstr "%-15s ×ÍÅÓÔÏ %s\n"
+
+#: src/dumpkeys.c:286
+msgid ""
+"\n"
+"Recognized modifier names and their column numbers:\n"
+msgstr ""
+"\n"
+"éÚ×ÅÓÔÎÙÅ ÎÁÚ×ÁÎÉÑ ÍÏÄÉÆÉËÁÔÏÒÏ× É ÎÏÍÅÒÁ ÉÍ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ËÏÌÏÎÏË: \n"
+
+#: src/dumpkeys.c:346
+#, c-format
+msgid "# not alt_is_meta: on keymap %d key %d is bound to"
+msgstr "# ÎÅ alt_is_meta: × ÒÁÓËÌÁÄËÅ %d ËÌÁ×ÉÛÅ %d ÎÁÚÎÁÞÅÎÏ"
+
+#: src/dumpkeys.c:421
+msgid "impossible: not meta?\n"
+msgstr "ÇÌÀË: ÎÅ `meta'?\n"
+
+#: src/dumpkeys.c:477
+#, c-format
+msgid "KDGKBSENT failed at index %d: "
+msgstr "KDGKBSENT ÏÂÌÏÍÉÌÓÑ ÎÁ ÉÎÄÅËÓÅ %d: "
+
+#: src/dumpkeys.c:497
+#, c-format
+msgid "dumpkeys version %s"
+msgstr "dumpkeys ×ÅÒÓÉÉ %s"
+
+#: src/dumpkeys.c:499
+msgid ""
+"\n"
+"usage: dumpkeys [options...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"\t-h --help\t    display this help text\n"
+"\t-i --short-info\t    display information about keyboard driver\n"
+"\t-l --long-info\t    display above and symbols known to loadkeys\n"
+"\t-n --numeric\t    display keytable in hexadecimal notation\n"
+"\t-f --full-table\t    don't use short-hand notations, one row per keycode\n"
+"\t-1 --separate-lines one line per (modifier,keycode) pair\n"
+"\t   --funcs-only\t    display only the function key strings\n"
+"\t   --keys-only\t    display only key bindings\n"
+"\t   --compose-only   display only compose key combinations\n"
+"\t-c --charset=iso-8859-{1,2,3,4,5,7,8,9}\n"
+"\t             koi8-{r,u}\t\t\n"
+"\t\t\t    interpret character action codes to be from the\n"
+"\t\t\t    specified character set\n"
+msgstr ""
+"\n"
+"ðÏÌØÚÕ×ÁÔÉÓÑ ÔÁË: dumpkeys [ÏÐÃÉÉ...]\n"
+"\n"
+"ïÐÃÉÉ:\n"
+"\n"
+"\t-h --help          \tÄÁÔØ ÜÔÕ ÐÏÄÓËÁÚËÕ\n"
+"\t-i --short-info    \t×ÙÄÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÄÒÁÊ×ÅÒÅ ËÌÁ×ÉÁÔÕÒÙ\n"
+"\t-l --long-info     \tÔÏ ÖÅ + ÓÐÉÓÏË ÓÉÍ×ÏÌÏ×, ÉÚ×ÅÓÔÎÙÈ loadkeys\n"
+"\t-n --numeric       \t×ÙÄÁÔØ ËÌÁ×ÉÁÔÕÒÎÕÀ ÔÁÂÌÉÃÕ × hex-Å\n"
+"\t-f --full-table    \tÔÁÂÌÉÃÕ ÐÏÌÎÏÓÔØÀ, ÐÏÓÔÒÏÞÎÏ, ÂÅÚ ÓÏËÒÁÝÅÎÉÊ\n"
+"\t-1 --separate-lines\tÐÏ ÓÔÒÏÞËÅ ÎÁ ÐÁÒÕ (ÍÏ-ÄÅÆÅËÁÔÏÒ, ËÏÄ ËÌÁ×ÉÛÉ)\n"
+"\t   --funcs-only    \tÔÏÌØËÏ ÏÐÒÅÄÅÌÅÎÉÑ ÆÕÎËÃÉÏÎÁÌØÎÙÈ ËÌÁ×ÉÛ\n"
+"\t   --keys-only     \tÔÏÌØËÏ ËÌÁ×ÉÁÔÕÒÎÙÅ ÎÁÚÎÁÞÅÎÉÑ\n"
+"\t   --compose-only  \tÔÏÌØËÏ ÓÏÞÅÔÁÎÉÑ ËÌÁ×ÉÛ-ÍÏÄÉÆÉËÁÔÏÒÏ×\n"
+"\t-c --charset=iso-8859-{1,2,3,4,5,7,8,9}\n"
+"\t             koi8-{r,u}\n"
+"\t                   \tÐÏÌÁÇÁÔØ ËÏÄÉÒÏ×ËÏÊ ÕËÁÚÁÎÎÕÀ\n"
+"\t                   \t(ÉÍÅÅÔ ÓÍÙÓÌ ÄÌÑ ÂÕË×ÅÎÎÙÈ ÓÉÍ×ÏÌÏ×)\n"
+
+#: src/findfile.c:14
+msgid "Out of Memory\n"
+msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ\n"
+
+#: src/findfile.c:24
+msgid "Out of Memory?\n"
+msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ?\n"
+
+#: src/findfile.c:61
+#, c-format
+msgid "error executing  %s\n"
+msgstr "ÏÛÉÂËÁ ÉÓÐÏÌÎÅÎÉÑ %s\n"
+
+#: src/getfd.c:57
+msgid "Couldnt get a file descriptor referring to the console\n"
+msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÆÁÊÌÏ×ÙÊ ÄÅÓËÒÉÐÔÏÒ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ËÏÎÓÏÌÉ\n"
+
+#: src/getkeycodes.c:18
+msgid "usage: getkeycodes\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: getkeycodes\n"
+
+#: src/getkeycodes.c:34
+msgid "Plain scancodes xx (hex) versus keycodes (dec)\n"
+msgstr ""
+"óÏÂÓÔ×ÅÎÎÏ ÓËÁÎ-ËÏÄÙ xx (hex) É, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ, ËÏÄÙ ËÌÁ×ÉÛ (ÄÅÓÑÔÉÞÎÙÅ)\n"
+
+#: src/getkeycodes.c:35
+msgid "0 is an error; for 1-88 (0x01-0x58) scancode equals keycode\n"
+msgstr ""
+"0 --- ÏÛÉÂËÁ; ÓËÁÎ-ËÏÄÙ 1--88 (0x01--0x58) ÒÁ×ÎÙ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍ ËÏÄÁÍ "
+"ËÌÁ×ÉÛ\n"
+
+#: src/getkeycodes.c:39
+msgid ""
+"\n"
+"\n"
+"Escaped scancodes e0 xx (hex)\n"
+msgstr ""
+"\n"
+"\n"
+"óËÁÎ-ËÏÄÙ Ó `Escape' e0 xx (hex)\n"
+
+#: src/getkeycodes.c:59
+#, c-format
+msgid "failed to get keycode for scancode 0x%x\n"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÎÁÊÔÉ ËÏÄ ËÌÁ×ÉÛÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÓËÁÎ-ËÏÄÕ 0x%x\n"
+
+#: src/getunimap.c:43
+#, c-format
+msgid "strange... ct changed from %d to %d\n"
+msgstr "ÓÔÒÁÎÎÏ... ct ÉÚÍÅÎÉÌÓÑ Ó %d ÎÁ %d\n"
+
+#: src/kbd_mode.c:20
+msgid "usage: kbd_mode [-a|-u|-k|-s]\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: kbd_mode [-s|-u|-k|-a]\n"
+
+#: src/kbd_mode.c:40
+msgid "kbd_mode: error reading keyboard mode\n"
+msgstr "kbd_mode: ÏÛÉÂËÁ ÞÔÅÎÉÑ ÒÅÖÉÍÁ ËÌÁ×ÉÁÔÕÒÙ\n"
+
+#: src/kbd_mode.c:45
+msgid "The keyboard is in raw (scancode) mode\n"
+msgstr "ëÌÁ×ÉÁÔÕÒÁ ÎÁÈÏÄÉÔÓÑ × ÓÙÒÏÍ (raw) ÒÅÖÉÍÅ (ÛÌ£Ô ÓËÁÎ-ËÏÄÙ)\n"
+
+#: src/kbd_mode.c:48
+msgid "The keyboard is in mediumraw (keycode) mode\n"
+msgstr "ëÌÁ×ÉÁÔÕÒÁ ÎÁÈÏÄÉÔÓÑ × ÐÏÌÕÓÙÒÏÍ ÒÅÖÉÍÅ (ÛÌ£Ô ËÏÄÙ ËÌÁ×ÉÛ)\n"
+
+#: src/kbd_mode.c:51
+msgid "The keyboard is in the default (ASCII) mode\n"
+msgstr "ëÌÁ×ÉÁÔÕÒÁ ÎÁÈÏÄÉÔÓÑ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ (ÛÌ£Ô ASCII-ËÏÄÙ ÚÎÁËÏ×)\n"
+
+#: src/kbd_mode.c:54
+msgid "The keyboard is in Unicode (UTF-8) mode\n"
+msgstr "ëÌÁ×ÉÁÔÕÒÁ ÎÁÈÏÄÉÔÓÑ × ÒÅÖÉÍÅ Unicode (ÛÌ£Ô ËÏÄÙ ÚÎÁËÏ× × UTF-8)\n"
+
+#: src/kbd_mode.c:57
+msgid "The keyboard is in some unknown mode\n"
+msgstr "ëÌÁ×ÉÁÔÕÒÁ (×ÒÏÄÅ ÕÎÄÅÒ×ÕÄÁ) ÎÁÈÏÄÉÔÓÑ × ÎÅÉÚ×ÅÓÔÎÏÍ ÒÅÖÉÍÅ\n"
+
+#: src/kbd_mode.c:75
+#, c-format
+msgid "%s: error setting keyboard mode\n"
+msgstr "%s: ÏÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÒÅÖÉÍÁ ËÌÁ×ÉÁÔÕÒÙ\n"
+
+#: src/kdfontop.c:164 src/kdfontop.c:214
+msgid "setfont bug: getfont called with count<256\n"
+msgstr "ÏÛÉÂËÁ × setfont: getfont ÂÙÌÁ ×ÙÚ×ÁÎÁ Ó count < 256\n"
+
+#: src/ksyms.c:857
+#, c-format
+msgid "unknown charset %s - ignoring charset request\n"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ËÏÄÉÒÏ×ËÁ %s --- ÐÒÏÐÕÓËÁÀ ÚÁÐÒÏÓ ËÏÄÉÒÏ×ËÉ ÍÅÖÄÕ ÕÛÅÊ\n"
+
+#: src/ksyms.c:891
+#, c-format
+msgid "assuming iso-8859-2 %s\n"
+msgstr "ÐÏÌÁÇÁÀ iso-8859-2 %s\n"
+
+#: src/ksyms.c:898
+#, c-format
+msgid "assuming iso-8859-3 %s\n"
+msgstr "ÐÏÌÁÇÁÀ iso-8859-3 %s\n"
+
+#: src/ksyms.c:905
+#, c-format
+msgid "assuming iso-8859-4 %s\n"
+msgstr "ÐÏÌÁÇÁÀ iso-8859-4 %s\n"
+
+#: src/ksyms.c:909
+#, c-format
+msgid "unknown keysym '%s'\n"
+msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ keysym `%s'\n"
+
+#: src/loadunimap.c:59 src/mapscrn.c:51
+#, c-format
+msgid "usage: %s [-o map.orig] map-file\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: %s [-o ÉÓÈÏÄÎÁÑ_ÒÁÓËÌÁÄËÁ] ÆÁÊÌ_Ó_ÒÁÓËÌÁÄËÏÊ\n"
+
+#: src/loadunimap.c:109
+#, c-format
+msgid "trying hashlevel %d\n"
+msgstr "ÐÒÏÂÕÀ hashlevel %d\n"
+
+#: src/loadunimap.c:124
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: ÎÅÈ×ÁÔËÁ ÐÁÍÑÔÉ\n"
+
+#: src/loadunimap.c:149
+#, c-format
+msgid "Loading unicode map from file %s\n"
+msgstr "úÁÇÒÕÖÁÀ unicode-ÓÈÅÍÕ ÉÚ ÆÁÊÌÁ %s\n"
+
+#: src/loadunimap.c:155
+#, c-format
+msgid "%s: %s: Warning: line too long\n"
+msgstr "%s: %s: ðÒÅÄÏÓÔÅÒÅÖÅÎÉÅ: ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ ÓÔÒÏÞËÁ\n"
+
+#: src/loadunimap.c:177 src/loadunimap.c:188 src/psfaddtable.c:204
+#: src/psfaddtable.c:217
+#, c-format
+msgid "Bad input line: %s\n"
+msgstr "ëÒÉ×ÁÑ ÓÔÒÏÞËÁ ÎÁ ××ÏÄÅ: %s\n"
+
+#: src/loadunimap.c:198 src/psfaddtable.c:228
+#, c-format
+msgid "%s: Glyph number (0x%x) larger than font length\n"
+msgstr "%s: îÏÍÅÒ ÚÎÁËÁ (0x%x) ÂÏÌØÛÅ ËÏÌÉÞÅÓÔ×Á ÚÎÁËÏ× × ÜÔÏÍ ÛÒÉÆÔÅ\n"
+
+#: src/loadunimap.c:204 src/psfaddtable.c:235
+#, c-format
+msgid "%s: Bad end of range (0x%x)\n"
+msgstr "%s: ëÒÉ×ÏÊ ËÏÎÅà ÄÉÁÐÁÚÏÎÁ (0x%x)\n"
+
+#: src/loadunimap.c:224 src/psfaddtable.c:260
+#, c-format
+msgid ""
+"%s: Corresponding to a range of font positions, there should be a Unicode "
+"range\n"
+msgstr ""
+"%s: äÉÁÐÁÚÏÎÕ ÐÏÚÉÃÉÊ ÛÒÉÆÔÁ ÄÏÌÖÅÎ ÓÏÏÔ×ÅÔÓÔ×Ï×ÁÔØ ÎÅËÉÊ ÄÉÁÐÁÚÏÎ × "
+"Unicode\n"
+
+#: src/loadunimap.c:233 src/psfaddtable.c:270
+#, c-format
+msgid "%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n"
+msgstr ""
+"îÅÄÏÐÕÓÔÉÍÙÊ Unicode-ÄÉÁÐÁÚÏÎ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÄÉÁÐÁÚÏÎÕ ÛÒÉÆÔÁ 0x%x--0x%x\n"
+
+#: src/loadunimap.c:240 src/psfaddtable.c:278
+#, c-format
+msgid ""
+"%s: Unicode range U+%x-U+%x not of the same length as font position range "
+"0x%x-0x%x\n"
+msgstr ""
+"%s: Unicode-ÄÉÁÐÁÚÏÎ U+%x--U+%x ÏÔÌÉÞÁÅÔÓÑ ÄÌÉÎÏÊ ÏÔ ÄÉÁÐÁÚÏÎÁ ÛÒÉÆÔÁ "
+"0x%x--0x%x\n"
+
+#: src/loadunimap.c:258 src/psfaddtable.c:297
+#, c-format
+msgid "%s: trailing junk (%s) ignored\n"
+msgstr "%s: ÓÉÆ ÎÁ ËÏÎÃÅ (%s) --- ÐÒÏÐÕÓËÁÀ\n"
+
+#: src/loadunimap.c:264
+#, c-format
+msgid ""
+"%s: not loading empty unimap\n"
+"(if you insist: use option -f to override)\n"
+msgstr ""
+"%s: ÎÅ ÓÔÁÎÕ ÇÒÕÚÉÔØ ÐÕÓÔÕÀ unimap\n"
+"(ÅÓÌÉ ÷Ù ÎÁÓÔÁÉ×ÁÅÔÅ, ×ÏÓÐÏÌØÚÕÊÔÅÓØ ÏÐÃÉÅÊ `-f')\n"
+
+#: src/loadunimap.c:285
+#, c-format
+msgid "%s: out of memory?\n"
+msgstr "%s: ÎÅÈ×ÁÔËÁ ÐÁÍÑÔÉ?\n"
+
+#: src/loadunimap.c:295
+msgid "entry"
+msgstr "ÐÕÎËÔ"
+
+#: src/loadunimap.c:295
+msgid "entries"
+msgstr "ÐÕÎËÔÙ"
+
+#: src/loadunimap.c:321
+#, c-format
+msgid "Saved unicode map on `%s'\n"
+msgstr "úÁÐÉÓÁÌ unicode-ÓÈÅÍÕ × `%s'\n"
+
+#: src/loadunimap.c:353
+msgid "Appended Unicode map\n"
+msgstr "äÏÂÁ×ÉÌ × Unicode-ÓÈÅÍÕ\n"
+
+#: src/mapscrn.c:68
+#, c-format
+msgid "mapscrn: cannot open map file _%s_\n"
+msgstr "mapscrn: ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ \"%s\"\n"
+
+#: src/mapscrn.c:73
+msgid "Cannot stat map file"
+msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÆÁÊÌÅ (stat)"
+
+#: src/mapscrn.c:78
+#, c-format
+msgid "Loading symbolic screen map from file %s\n"
+msgstr "úÁÇÒÕÖÁÀ ÏÐÉÓÁÎÉÅ ÓÈÅÍÙ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ ÉÚ ÆÁÊÌÁ %s\n"
+
+#: src/mapscrn.c:82
+msgid "Error parsing symbolic map\n"
+msgstr "ïÛÉÂËÁ ÒÁÓÓÁÓÙ×ÁÎÉÑ ÏÐÉÓÁÎÉÑ ÓÈÅÍÙ ÏÔÏÂÒÁÖÅÎÉÑ\n"
+
+#: src/mapscrn.c:86
+#, c-format
+msgid "Loading binary screen map from file %s\n"
+msgstr "úÁÇÒÕÖÁÀ ÓÈÅÍÕ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ ÉÚ ÆÁÊÌÁ %s\n"
+
+#: src/mapscrn.c:90
+msgid "Cannot read map from file"
+msgstr "îÅ ÍÏÇÕ ÐÒÏÞÉÔÁÔØ ÓÈÅÍÕ ÏÔÏÂÒÁÖÅÎÉÑ ÉÚ ÆÁÊÌÁ"
+
+#: src/mapscrn.c:103
+#, c-format
+msgid "Loaded screen map from `%s'\n"
+msgstr "óÈÅÍÁ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ ÚÁÇÒÕÖÅÎÁ ÉÚ `%s'\n"
+
+#: src/mapscrn.c:149
+#, c-format
+msgid "mapscrn: format error detected in _%s_\n"
+msgstr "mapscrn: ÏÂÎÁÒÕÖÅÎÁ ÏÛÉÂËÁ × ÆÏÒÍÁÔÅ ÄÁÎÎÙÈ × \"%s\"\n"
+
+#: src/mapscrn.c:172
+msgid "Error writing map to file"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ"
+
+#: src/mapscrn.c:178
+#, c-format
+msgid "Saved screen map in `%s'\n"
+msgstr "óÈÅÍÁ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ ÚÁÐÉÓÁÎÁ × `%s'\n"
+
+#: src/psfaddtable.c:33
+#, c-format
+msgid ""
+"Usage: \n"
+"        %s psffont chartable [outfile]\n"
+msgstr ""
+"ðÏÌØÚÏ×ÁÔØÓÑ ÔÁË:\n"
+"\t%s psf-ÛÒÉÆÔ ÔÁÂÌÉÃÁ-ÚÎÁËÏ× [ÆÁÊÌ_×Ù×ÏÄÁ]\n"
+
+#: src/psfaddtable.c:136 src/psfgettable.c:75 src/psfstriptable.c:75
+#, c-format
+msgid "%s: Cannot read psf header\n"
+msgstr "%s: îÅ ÍÏÇÕ ÐÒÏÞÉÔÁÔØ psf-ÚÁÇÏÌÏ×ÏË\n"
+
+#: src/psfaddtable.c:142 src/psfgettable.c:81 src/psfstriptable.c:81
+#, c-format
+msgid "%s: Bad magic number\n"
+msgstr "%s: ëÒÉ×ÏÊ ÐÒÉÚÎÁË (magic number)\n"
+
+#: src/psfaddtable.c:148 src/psfgettable.c:87 src/psfstriptable.c:87
+#, c-format
+msgid "%s: Unknown mode number (%d)\n"
+msgstr "%s: îÅÉÚ×ÅÓÔÎÙÊ ÎÏÍÅÒ ÒÅÖÉÍÁ (%d)\n"
+
+#: src/psfaddtable.c:181
+#, c-format
+msgid "%s: Warning: line too long\n"
+msgstr "%s: ðÒÅÄÏÓÔÅÒÅÖÅÎÉÅ: ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ ÓÔÒÏÞËÁ\n"
+
+#: src/psfgettable.c:23 src/psfstriptable.c:25
+#, c-format
+msgid ""
+"Usage: \n"
+"        %s psffont [outfile]\n"
+msgstr ""
+"ðÏÌØÚÏ×ÁÔØÓÑ ÔÁË:\n"
+"\t%s psf-ÛÒÉÆÔ [ÆÁÊÌ_×Ù×ÏÄÁ]\n"
+
+#: src/psfgettable.c:96
+#, c-format
+msgid "%s: Font has no character table\n"
+msgstr "%s: ûÒÉÆÔ ÎÅ ÉÍÅÅÔ ÚÎÁËÏ×ÏÊ ÔÁÂÌÉÃÙ\n"
+
+#: src/psfstriptable.c:96
+#, c-format
+msgid "%s: Font already had no character table\n"
+msgstr "%s: ûÒÉÆÔ ÕÖÅ ÂÙÌ ÂÅÚ ÚÎÁËÏ×ÏÊ ÔÁÂÌÉÃÙ\n"
+
+#: src/resizecons.c:145
+#, c-format
+msgid "resizecons: cannot find videomode file %s\n"
+msgstr "resizecons: ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ ×ÉÄÅÏÒÅÖÉÍÁ %s\n"
+
+#: src/resizecons.c:164
+msgid "Invalid number of lines\n"
+msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ÞÉÓÌÏ ÓÔÒÏË\n"
+
+#: src/resizecons.c:230
+#, c-format
+msgid "Old mode: %dx%d  New mode: %dx%d\n"
+msgstr ""
+"ðÒÅÖÎÉÊ ÒÅÖÉÍ: %dx%d\n"
+"  îÏ×ÙÊ ÒÅÖÉÍ: %dx%d\n"
+
+#: src/resizecons.c:232
+#, c-format
+msgid "Old #scanlines: %d  New #scanlines: %d  Character height: %d\n"
+msgstr ""
+"óÔÒÏË ÒÁÚ×£ÒÔËÉ × ÐÒÅÖÎÅÍ ÒÅÖÉÍÅ: %d\n"
+"óÔÒÏË ÒÁÚ×£ÒÔËÉ ×   ÎÏ×ÏÍ ÒÅÖÉÍÅ: %d\n"
+"                   ÷ÙÓÏÔÁ ÛÒÉÆÔÁ: %d\n"
+
+#: src/resizecons.c:243
+#, c-format
+msgid "resizecons: the command `%s' failed\n"
+msgstr "resizecons: ËÏÍÁÎÄÁ `%s' ÎÅ ÕÄÁÌÁÓØ\n"
+
+#: src/resizecons.c:308
+#, c-format
+msgid ""
+"resizecons: don't forget to change TERM (maybe to con%dx%d or linux-%dx%d)\n"
+msgstr ""
+"resizecons: ÎÅ ÚÁÂÕÄØÔÅ ÓÍÅÎÉÔØ TERM (×ÏÚÍÏÖÎÏ, ÎÁ con%dx%d ÉÌÉ "
+"linux-%dx%d)\n"
+
+#: src/resizecons.c:321
+msgid ""
+"resizecons:\n"
+"call is:  resizecons COLSxROWS  or:  resizecons COLS ROWS\n"
+"or: resizecons -lines ROWS, with ROWS one of 25, 28, 30, 34, 36, 40, 44, 50, "
+"60\n"
+msgstr ""
+"resizecons:\n"
+"×ÙÚÏ×:\tresizecons óôïìâãï÷xóôòïþåë\n"
+"  ÉÌÉ:\tresizecons óôïìâãï÷ óôòïþåë\n"
+"  ÉÌÉ:\tresizecons -lines óôòïþåë\n"
+", ÇÄÅ ÐÁÒÁÍÅÔÒ óôòïþåë ÍÏÖÅÔ ÐÒÉÎÉÍÁÔØ ÚÎÁÞÅÎÉÑ:\n"
+"\t25, 28, 30, 34, 36, 40, 44, 50, 60\n"
+
+#: src/resizecons.c:359
+msgid "resizecons: cannot get I/O permissions.\n"
+msgstr "resizecons: ÎÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÐÒÁ×Á ÎÁ ÄÏÓÔÕÐ ËÏ ××ÏÄÕ-×Ù×ÏÄÕ.\n"
+
+#: src/screendump.c:38
+msgid "usage: screendump [n]\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: screendump [n]\n"
+
+#: src/screendump.c:55 src/screendump.c:120 src/setfont.c:251
+msgid "Out of memory?\n"
+msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ?\n"
+
+#: src/screendump.c:59
+#, c-format
+msgid "Error reading %s\n"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ %s\n"
+
+#: src/screendump.c:94
+msgid "Out of memory.\n"
+msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ.\n"
+
+#: src/screendump.c:104
+#, c-format
+msgid "couldn't read %s, and cannot ioctl dump\n"
+msgstr ""
+"ÎÅ ÓÍÏÇ ÐÒÏÞÉÔÁÔØ %s É ÎÅ ÍÏÇÕ ÕÐÒÁ×ÌÑÔØ ÆÁÊÌ-ÄÅÓËÒÉÐÔÏÒÏÍ ÓÂÒÏÓÁ (ioctl "
+"dump)\n"
+
+#: src/screendump.c:113
+#, c-format
+msgid "Strange ... screen is both %dx%d and %dx%d ??\n"
+msgstr "îÕ É ÎÕ! üËÒÁÎ ÏÄÎÏ×ÒÅÍÅÎÎÏ É %dx%d, É %dx%d?\n"
+
+#: src/screendump.c:135
+msgid "Error writing screendump\n"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÜËÒÁÎÎÏÇÏ ÓÂÒÏÓÁ\n"
+
+#: src/setfont.c:63
+msgid ""
+"Usage: setfont [write-options] [-<N>] [newfont] [-m consolemap] [-u "
+"unicodemap]\n"
+"  write-options (take place before file loading):\n"
+"    -o  <filename>\tWrite current font to <filename>\n"
+"    -om <filename>\tWrite current consolemap to <filename>\n"
+"    -ou <filename>\tWrite current unicodemap to <filename>\n"
+"If no newfont and no -[o|om|ou|m|u] option is given, a default font is "
+"loaded:\n"
+"    setfont             Load font \"default[.gz]\"\n"
+"    setfont -<N>        Load font \"default8x<N>[.gz]\"\n"
+"The -<N> option selects a font from a codepage that contains three fonts:\n"
+"    setfont -{8|14|16} codepage.cp[.gz]   Load 8x<N> font from codepage.cp\n"
+"Explicitly (with -m or -u) or implicitly (in the fontfile) given mappings "
+"will\n"
+"be loaded and, in the case of consolemaps, activated.\n"
+"    -h<N>       (no space) Override font height.\n"
+"    -m none\tSuppress loading and activation of a mapping table.\n"
+"    -u none\tSuppress loading of a unicode map.\n"
+"    -v\t\tBe verbose.\n"
+"    -V\t\tPrint version and exit.\n"
+"Files are loaded from the current directory or /usr/lib/kbd/*/.\n"
+msgstr ""
+"ðÏÌØÚÏ×ÁÔØÓÑ ÔÁË:\n"
+"\tsetfont [ÐÁÒÁÍÅÔÒÙ_ÚÁÐÉÓÉ] [-<N>] [ÎÏ×ÙÊ_ÛÒÉÆÔ] [-m ÓÈÅÍÁ_ÜËÒÁÎÁ] [-u "
+"unicode-ÓÈÅÍÁ]\n"
+"   , ÇÄÅ:\n"
+"\tÐÁÒÁÍÅÔÒÙ_ÚÁÐÉÓÉ (ÉÍÅÀÔ ÍÅÓÔÏ ÐÅÒÅÄ ÞÔÅÎÉÅÍ ÉÚ ÆÁÊÌÁ):\n"
+"\n"
+"\t   -o  <ÉÍÑ ÆÁÊÌÁ>   úÁÐÉÓÁÔØ ÐÒÅÖÎÉÊ ÛÒÉÆÔ Ó ÜËÒÁÎÁ × ÆÁÊÌ\n"
+"\t   -om <ÉÍÑ ÆÁÊÌÁ>   úÁÐÉÓÁÔØ ÐÒÅÖÎÀÀ ÓÈÅÍÕ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ × ÆÁÊÌ\n"
+"\t   -ou <ÉÍÑ ÆÁÊÌÁ>   úÁÐÉÓÁÔØ ÐÒÅÖÎÀÀ unicode-ÓÈÅÍÕ × ÆÁÊÌ\n"
+"\n"
+"åÓÌÉ ÎÅ ÕËÁÚÁÎÏ ÎÉ ÎÏ×ÏÇÏ ÛÒÉÆÔÁ, ÎÉ ËÌÀÞÅÊ -[o|om|ou|m|u],\n"
+"ÔÏ ÂÕÄÅÔ ÚÁÇÒÕÖÅÎ ÎÁÞÁÌØÎÙÊ ÛÒÉÆÔ (ËÏÔÏÒÙÊ `default' --- `ÐÏ ÕÍÏÌÞÁÎÉÀ'):\n"
+"\n"
+"\t   setfont           úÁÇÒÕÚÉÔØ ÛÒÉÆÔ \"default[.gz]\"\n"
+"\t   setfont -<N>      úÁÇÒÕÚÉÔØ ÛÒÉÆÔ \"default8x<N>[.gz]\"\n"
+"\n"
+"ëÌÀÞÉË -<N> ÕËÁÚÙ×ÁÅÔ ÛÒÉÆÔ × ËÏÄÉÒÏ×ËÅ, ÓÏÄÅÒÖÁÝÅÊ ÔÒÉ ÛÒÉÆÔÁ (ÒÁÚÍÅÒÁ):\n"
+"\n"
+"\t   setfont -{8|14|16} ËÏÄÉÒÏ×ËÁ.cp[.gz]\n"
+"\t                     úÁÇÒÕÚÉÔØ ÛÒÉÆÔ 8x<N> ÉÚ `ËÏÄÉÒÏ×ËÁ.cp'\n"
+"\n"
+"åÓÌÉ ÚÁÄÁÎÁ ÓÈÅÍÁ --- Ñ×ÎÏ (ËÌÀÞÁÍÉ -m ÉÌÉ -u) ÉÌÉ ÎÅÑ×ÎÏ (× ÓÁÍÏÍ ÛÒÉÆÔÅ) "
+"---\n"
+"ÏÎÁ ÂÕÄÅÔ ÚÁÇÒÕÖÅÎÁ É, ÅÓÌÉ ÜÔÏ ÓÈÅÍÁ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ, ÚÁÄÅÊÓÔ×Ï×ÁÎÁ.\n"
+"\n"
+"\t   -h<N>  (ÓÌÉÔÎÏ!)  îÁÓÔÏÑÔØ ÎÁ ÕËÁÚÁÎÎÏÊ ×ÙÓÏÔÅ ÛÒÉÆÔÁ.\n"
+"\t   -m none           ïÔÍÅÎÉÔØ ÚÁÇÒÕÚËÕ É ÐÒÉ×ÅÄÅÎÉÅ × ÄÅÊÓÔ×ÉÅ\n"
+"\t                     ÓÈÅÍÙ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ.\n"
+"\t   -u none           ïÔÍÅÎÉÔØ ÚÁÇÒÕÚËÕ É ÚÁÄÅÊÓÔ×Ï×ÁÎÉÅ unicode-ÓÈÅÍÙ.\n"
+"\t   -v                ðÏÄÒÏÂÎÏ ÒÁÓÓËÁÚÙ×ÁÔØ Ï ÐÒÏÉÚ×ÏÄÉÍÙÈ ÄÅÊÓÔ×ÉÑÈ.\n"
+"\t   -V                ðÒÏÓÔÏ ÐÏËÁÚÁÔØ ×ÅÒÓÉÀ É ÔÏÌØËÏ.\n"
+"\n"
+"æÁÊÌÙ ÚÁÇÒÕÖÁÀÔÓÑ ÉÚ ÔÅËÕÝÅÊ ÄÉÒÅËÔÏÒÉÉ ÉÌÉ ÉÚ `/usr/share/kbd/...'.\n"
+
+#: src/setfont.c:106
+#, c-format
+msgid "setfont version %s\n"
+msgstr "setfont ×ÅÒÓÉÉ %s\n"
+
+#: src/setfont.c:160
+msgid ""
+"setfont: cannot both restore from character ROM and from file. Font "
+"unchanged.\n"
+msgstr ""
+"setfont: ÎÅ ÍÏÇÕ ÓÔÁ×ÉÔØ ÛÒÉÆÔ ÓÒÁÚÕ É ÉÚ ðúõ, É ÉÚ ÆÁÊÌÁ. ûÒÉÆÔ îå "
+"ÉÚÍÅΣÎ.\n"
+
+#: src/setfont.c:221
+#, c-format
+msgid "Bad character size %d\n"
+msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÒÁÚÍÅÒ ÚÎÁËÁ %d\n"
+
+#: src/setfont.c:232
+#, c-format
+msgid "Loading %d-char 8x%d font from file %s\n"
+msgstr "úÁÇÒÕÖÁÀ %d-ÚÎÁËÏ×ÙÊ ÛÒÉÆÔ 8x%d ÉÚ ÆÁÊÌÁ %s\n"
+
+#: src/setfont.c:270
+msgid "Loading Unicode mapping table...\n"
+msgstr "úÁÇÒÕÖÁÀ Unicode-ÔÁÂÌÉÃÕ...\n"
+
+#: src/setfont.c:279
+msgid ""
+"It seems this kernel is older than 1.1.92\n"
+"No Unicode mapping table loaded.\n"
+msgstr ""
+"ðÏÈÏÖÅ, ÑÄÒÏ ÄÒÅ×ÎÅÅ 1.1.92!\n"
+"îÉËÁËÉÈ Unicode-ÔÁÂÌÉà ÎÅ ÚÁÇÒÕÖÅÎÏ.\n"
+
+#: src/setfont.c:317
+msgid "Cannot find default font\n"
+msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÏÓÎÏ×ÎÏÊ ÛÒÉÆÔ (ËÏÔÏÒÙÊ `ÐÏ ÕÍÏÌÞÁÎÉÀ')\n"
+
+#: src/setfont.c:324
+#, c-format
+msgid "Cannot find %s font\n"
+msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ %s\n"
+
+#: src/setfont.c:330
+#, c-format
+msgid "Cannot open font file %s\n"
+msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ %s\n"
+
+#: src/setfont.c:342
+msgid "Error reading input font"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ×ÈÏÄÎÏÇÏ ÛÒÉÆÔÁ"
+
+#: src/setfont.c:351
+msgid ""
+"Setfont is so naive as to believe that font files\n"
+"have a size of at most 32kB.  Unfortunately it seems\n"
+"that you encountered an exception.  If this really is\n"
+"a font file, (i) recompile setfont, (ii) tell aeb@cwi.nl .\n"
+msgstr ""
+"Setfont ÎÁÉ×ÅÎ ÎÁÓÔÏÌØËÏ, ÞÔÏ ÐÏÌÁÇÁÅÔ,\n"
+"ÞÔÏ ÆÁÊÌÙ ÛÒÉÆÔÏ× ÍÏÇÕÔ ÂÙÔØ ÏÔ ÓÉÌÙ 32KB.\n"
+"õ×Ù, ÐÏÈÏÖÅ, ÷Ù ÎÁÔËÎÕÌÉÓØ ÎÁ ÉÓËÌÀÞÅÎÉÅ.\n"
+"åÓÌÉ ÜÔÏ É × ÓÁÍÏÍ ÄÅÌÅ ÛÒÉÆÔÏ×ÙÊ ÆÁÊÌ, ÔÏ:\n"
+"   1. ÐÅÒÅËÏÍÐÉÌÉÒÕÊÔÅ, ÐÏÖÁÌÕÊÓÔÁ, setfont,\n"
+"   2. ÓÏÏÂÝÉÔÅ ÏÂ ÜÔÏÍ <aeb@cwi.nl>.\n"
+
+#: src/setfont.c:376
+msgid "Unsupported psf file mode\n"
+msgstr "ó ÜÔÉÍ ÔÉÐÏÍ psf-ÆÁÊÌÁ Ñ ÒÁÂÏÔÁÔØ ÎÅ ÕÍÅÀ\n"
+
+#: src/setfont.c:385
+msgid "Input file: bad length\n"
+msgstr "æÁÊÌ ××ÏÄÁ: ÎÅÄÏÐÕÓÔÉÍÁÑ ÄÌÉÎÁ\n"
+
+#: src/setfont.c:402
+msgid "Bad input file size\n"
+msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÒÁÚÍÅÒ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ\n"
+
+#: src/setfont.c:421
+msgid ""
+"This file contains 3 fonts: 8x8, 8x14 and 8x16. Please indicate\n"
+"using an option -8 or -14 or -16 which one you want loaded.\n"
+msgstr ""
+"üÔÏ ÆÁÊÌ ÓÏÄÅÒÖÉÔ 3 ÛÒÉÆÔÁ: 8x8, 8x14 É 8x16.\n"
+"õËÁÖÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÏÄÎÉÍ ÉÚ ËÌÀÞÉËÏ×: -8, -14 ÉÌÉ -16,\n"
+"ËÁËÏÊ ÉÍÅÎÎÏ ÷Ù ÈÏÔÉÔÅ ÚÁÇÒÕÚÉÔØ.\n"
+
+#: src/setfont.c:435
+#, c-format
+msgid "You asked for font size %d, but only 8, 14, 16 are possible here.\n"
+msgstr "÷Ù ÐÒÏÓÉÌÉ ÛÒÉÆÔ ÒÁÚÍÅÒÁ %d, ÎÏ ×ÏÚÍÏÖÎÙ ÔÏÌØËÏ 8, 14 ÉÌÉ 16.\n"
+
+#: src/setfont.c:471
+msgid "Cannot write font file header"
+msgstr "îÅ ÍÏÇÕ ÚÁÐÉÓÁÔØ ÚÁÇÏÌÏ×ÏË ÆÁÊÌÁ ÛÒÉÆÔÁ"
+
+#: src/setfont.c:477
+msgid "Found nothing to save\n"
+msgstr "îÅ ÎÁÛ£Ì, ÞÔÏ ÚÁÐÉÓÁÔØ\n"
+
+#: src/setfont.c:481
+msgid "Cannot write font file"
+msgstr "îÅ ÍÏÇÕ ÚÁÐÉÓÁÔØ ÆÁÊÌ ÛÒÉÆÔÁ"
+
+#: src/setfont.c:485
+#, c-format
+msgid "Saved %d-char 8x%d font file on %s\n"
+msgstr "úÁÐÉÓÁÌ %d-ÚÎÁËÏ×ÙÊ ÛÒÉÆÔ 8x%d × ÆÁÊÌ %s\n"
+
+#: src/setkeycodes.c:21
+msgid ""
+"usage: setkeycode scancode keycode ...\n"
+" (where scancode is either xx or e0xx, given in hexadecimal,\n"
+"  and keycode is given in decimal)\n"
+msgstr ""
+"ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: setkeycode ÓËÁÎ-ËÏÄ ËÏÄ_ËÌÁ×ÉÛÉ ...\n"
+"óËÁÎ-ËÏÄ ÓÌÅÄÕÅÔ ÐÉÓÁÔØ × ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÏÍ ×ÉÄÅ: xx ÉÌÉ e0xx,\n"
+"ËÏÄ ËÌÁ×ÉÛÉ --- × ÄÅÓÑÔÉÞÎÏÊ ÚÁÐÉÓÉ.\n"
+
+#: src/setkeycodes.c:38
+msgid "even number of arguments expected"
+msgstr "ÏÖÉÄÁÅÔÓÑ Þ£ÔÎÏÅ ÞÉÓÌÏ ÁÒÇÕÍÅÎÔÏ×"
+
+#: src/setkeycodes.c:45
+msgid "error reading scancode"
+msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ ÓËÁÎ-ËÏÄÁ"
+
+#: src/setkeycodes.c:51
+msgid "code outside bounds"
+msgstr "ËÏÄ ×ÎÅ ÄÏÐÕÓÔÉÍÏÇÏ ÄÉÁÐÁÚÏÎÁ"
+
+#: src/setkeycodes.c:54
+#, c-format
+msgid "failed to set scancode %x to keycode %d\n"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÓËÁÎ-ËÏÄ %x ËÏÄÕ %d\n"
+
+#: src/setleds.c:20
+msgid ""
+"Usage:\n"
+"\tsetleds [-v] [-L] [-D] [-F] [[+|-][ num | caps | scroll ]]\n"
+"Thus,\n"
+"\tsetleds +caps -num\n"
+"will set CapsLock, clear NumLock and leave ScrollLock unchanged.\n"
+"The settings before and after the change (if any) are reported\n"
+"when the -v option is given or when no change is requested.\n"
+"Normally, setleds influences the vt flag settings\n"
+"(and these are usually reflected in the leds).\n"
+"With -L, setleds only sets the leds, and leaves the flags alone.\n"
+"With -D, setleds sets both the flags and the default flags, so\n"
+"that a subsequent reset will not change the flags.\n"
+msgstr ""
+"ðÏÌØÚÏ×ÁÔØÓÑ ÔÁË:\n"
+"\tsetleds [-v] [-L] [-D] [-F] [[+|-][num|caps|scroll]]\n"
+"îÁÐÒÉÍÅÒ,\n"
+"\tsetleds +caps -num\n"
+"×ËÌÀÞÉÔ CapsLock, ×ÙËÌÀÞÉÔ NumLock É ÏÓÔÁ×ÉÔ ScrollLock × ÐÒÅÖÎÅÍ "
+"ÓÏÓÔÏÑÎÉÉ.\n"
+"äÏËÌÁÄÁÀÔÓÑ ÓÏÓÔÏÑÎÉÑ ÄÏ É ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ (ÂÕÄÅ ÔÁËÏ×ÏÅ ÉÍÅÅÔ ÍÅÓÔÏ),\n"
+"ÅÖÅÌÉ ÄÁÄÅÎ ËÌÀÞÉË `-v', ÉÌÉ ÖÅ ÎÉËÁËÉÈ ÉÚÍÅÎÅÎÉÊ ÎÅ ÚÁÐÒÏÛÅÎÏ.\n"
+"ïÂÙËÎÏ×ÅÎÎÏ, `setleds' ×ÏÚÄÅÊÓÔ×ÕÅÔ ÎÁ ÓÏÓÔÏÑÎÉÅ ÆÌÁÇÏ× vt\n"
+"(É ÜÔÏ, ÏÂÙÞÎÏ, ÏÔÒÁÖÁÅÔÓÑ ÎÁ ËÌÁ×ÉÁÔÕÒÎÙÈ ``ÌÁÍÐÏÞËÁÈ'').\n"
+"âÕÄÕÞÉ ÚÁÐÕÝÅÎ Ó ËÌÀÞÏÍ `-L', `setleds' ËÒÕÔÉÔ ÌÁÍÐÏÞËÉ É ÎÅ ÔÒÏÇÁÅÔ vt.\n"
+"âÕÄÕÞÉ ÚÁÐÕÝÅÎ Ó ËÌÀÞÏÍ `-D', `setleds' ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ É ÆÌÁÖËÉ vt,\n"
+"ÉÈ ÉÈ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÔÁË ÞÔÏ ÐÏÓÌÅÄÕÀÝÉÊ ÐÅÒÅÚÁÐÕÓË ÓÉÓÔÅÍÙ\n"
+"ÏÓÔÁ×ÉÔ ÜÔÉ ÆÌÁÖËÉ ÂÅÚ ÉÚÍÅÎÅÎÉÊ.\n"
+
+#: src/setleds.c:74
+msgid "Error reading current led setting. Maybe stdin is not a VT?\n"
+msgstr ""
+"ïÛÉÂËÁ ÞÔÅÎÉÑ ÔÅËÕÝÅÇÏ ÓÏÓÔÏÑÎÉÑ ÌÁÍÐÏÞÅË. íÏÖÅÔ, stdin É ÎÅ VT ÓÏ×ÓÅÍ?\n"
+
+#: src/setleds.c:81
+msgid "Error reading current flags setting. Maybe an old kernel?\n"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÔÅËÕÝÅÇÏ ÓÏÓÔÏÑÎÉÑ ÆÌÁÖËÏ×. íÏÖÅÔ, ÑÄÒÏ ÓÔÁÒÏ×ÁÔÏ?\n"
+
+#: src/setleds.c:108
+msgid "Error resetting ledmode\n"
+msgstr "ïÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÌÁÍÐÏÞÅË × ÉÓÈÏÄÎÏÅ ÓÏÓÔÏÑÎÉÅ\n"
+
+#: src/setleds.c:117
+msgid "Current default flags:  "
+msgstr "ôÅËÕÝÉÅ ÆÌÁÖËÉ `ÐÏ ÕÍÏÌÞÁÎÉÀ':   "
+
+#: src/setleds.c:121
+msgid "Current flags:          "
+msgstr "ôÅËÕÝÉÅ ÆÌÁÖËÉ:                   "
+
+#: src/setleds.c:125
+msgid "Current leds:           "
+msgstr "ôÅËÕÝÅÅ ÓÏÓÔÏÑÎÉÅ ÌÁÍÐÏÞÅË:      "
+
+#: src/setleds.c:153 src/setmetamode.c:90
+#, c-format
+msgid ""
+"unrecognized argument: _%s_\n"
+"\n"
+msgstr ""
+"ÎÅÐÏÎÑÔÎÙÊ ÁÒÇÕÍÅÎÔ: \"%s\"\n"
+"\n"
+
+#: src/setleds.c:162
+msgid "Old default flags:    "
+msgstr "ðÒÅÖÎÉÅ ÆÌÁÖËÉ `ÐÏ ÕÍÏÌÞÁÎÉÀ':   "
+
+#: src/setleds.c:164
+msgid "New default flags:    "
+msgstr "  îÏ×ÙÅ ÆÌÁÖËÉ `ÐÏ ÕÍÏÌÞÁÎÉÀ':   "
+
+#: src/setleds.c:171
+msgid "Old flags:            "
+msgstr "ðÒÅÖÎÉÅ ÆÌÁÖËÉ:                  "
+
+#: src/setleds.c:173
+msgid "New flags:            "
+msgstr "  îÏ×ÙÅ ÆÌÁÖËÉ:                  "
+
+#: src/setleds.c:186
+msgid "Old leds:             "
+msgstr "ðÒÅÖÎÅÅ ÓÏÓÔÏÑÎÉÅ ÌÁÍÐÏÞÅË:      "
+
+#: src/setleds.c:188
+msgid "New leds:             "
+msgstr "  îÏ×ÏÅ ÓÏÓÔÏÑÎÉÅ ÌÁÍÐÏÞÅË:      "
+
+#: src/setmetamode.c:19
+msgid ""
+"Usage:\n"
+"\tsetmetamode [ metabit | meta | bit | escprefix | esc | prefix ]\n"
+"Each vt has his own copy of this bit. Use\n"
+"\tsetmetamode [arg] < /dev/ttyn\n"
+"to change the settings of another vt.\n"
+"The setting before and after the change are reported.\n"
+msgstr ""
+"ðÏÌØÚÏ×ÁÔØÓÑ ÔÁË:\n"
+"\tsetmetamode [meta-ÂÉÔ | meta | ÂÉÔ | esc-ÐÒÅÆÉËÓ | esc | ÐÒÅÆÉËÓ ]\n"
+"ëÁÖÎÙÊ VT ÉÍÅÅÔ Ó×ÏÀ ÓÏÂÓÔ×ÅÎÎÕÀ ËÏÐÉÀ ÜÔÏÇÏ ÂÉÔÁ.\n"
+"éÓÐÏÌØÚÕÊÔÅ:\n"
+"\tsetmetamode [ÁÒÇÕÍÅÎÔ] < /dev/ttyN\n"
+"ÞÔÏÂÙ ÕÐÒÁ×ÌÑÔØ ÓÏÓÔÏÑÎÉÅÍ ÄÒÕÇÏÇÏ VT.\n"
+"äÏËÌÁÄÁÀÔÓÑ ÓÏÓÔÏÑÎÉÑ ÄÏ É ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ.\n"
+
+#: src/setmetamode.c:36
+msgid "Meta key sets high order bit\n"
+msgstr "ëÌÁ×ÉÛÁ Meta ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÓÔÁÒÛÉÊ ÂÉÔ\n"
+
+#: src/setmetamode.c:39
+msgid "Meta key gives Esc prefix\n"
+msgstr "ëÌÁ×ÉÛÁ Meta ÄÁ£Ô Esc-ÐÒÅÆÉËÓ\n"
+
+#: src/setmetamode.c:42
+msgid "Strange mode for Meta key?\n"
+msgstr "óÔÒÁÎÎÙÊ ÒÅÖÉÍ ËÌÁ×ÉÛÉ Meta\n"
+
+#: src/setmetamode.c:74
+msgid "Error reading current setting. Maybe stdin is not a VT?\n"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÔÅËÕÝÅÇÏ ÓÏÓÔÏÑÎÉÑ. íÏÖÅÔ, stdin É ÎÅ VT ÓÏ×ÓÅÍ?\n"
+
+#: src/setmetamode.c:94
+msgid "old state:    "
+msgstr "ÐÒÅÖÎÅÅ ÓÏÓÔÏÑÎÉÅ:   "
+
+#: src/setmetamode.c:100
+msgid "new state:    "
+msgstr "  ÎÏ×ÏÅ ÓÏÓÔÏÑÎÉÅ:   "
+
+#: src/setvesablank.c:21
+#, c-format
+msgid "usage: %s\n"
+msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: %s\n"
+
+#: src/showfont.c:18
+msgid "failed to restore original translation table\n"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÏÓÓÔÁÎÏ×ÉÔØ ÉÓÈÏÄÎÕÀ ÔÁÂÌÉÃÕ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÊ\n"
+
+#: src/showfont.c:34
+msgid ""
+"usage: showfont\n"
+"(probably after loading a font with `setfont font')\n"
+msgstr ""
+"ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: showfont\n"
+"(ÓËÏÒÅÅ ×ÓÅÇÏ, ÐÏÓÌÅ ÚÁÇÒÕÚËÉ ÛÒÉÆÔÁ ÐÏÓÒÅÄÓÔ×ÏÍ `setfont font')\n"
+
+#: src/showfont.c:60
+msgid "cannot change translation table\n"
+msgstr "ÎÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÁÂÌÉÃÕ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÊ\n"
+
+#: src/showfont.c:86
+msgid "cannot change translation table??\n"
+msgstr "ÎÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÁÂÌÉÃÕ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÊ (?)\n"
+
+#: src/showkey.c:42
+msgid "?UNKNOWN?"
+msgstr "?îåéú÷åóôîï?"
+
+#: src/showkey.c:44
+#, c-format
+msgid "kb mode was %s\n"
+msgstr "ÒÅÖÉÍ ËÌÁ×ÉÁÔÕÒÙ ÂÙÌ %s\n"
+
+#: src/showkey.c:46
+msgid ""
+"[ if you are trying this under X, it might not work\n"
+"since the X server is also reading /dev/console ]\n"
+msgstr ""
+"[ ÅÓÌÉ ÷Ù ÐÙÔÁÅÔÅÓØ ÐÒÏÄÅÌÁÔØ ÜÔÏ ÐÏÄ X-ÁÍÉ, ÏÎÏ, ×ÏÚÍÏÖÎÏ,\n"
+"  É ÎÅ ÓÒÁÂÏÔÁÅÔ, ÔÁË ËÁË X ÓÅÒ×ÅÒ ÔÏÖÅ ÞÉÔÁÅÔ /dev/console ]\n"
+
+#: src/showkey.c:63
+#, c-format
+msgid "caught signal %d, cleaning up...\n"
+msgstr "ÐÏÊÍÁÌ ÓÉÇÎÁÌ %d, ÕÂÉÒÁÀ ÚÁ ÓÏÂÏÊ...\n"
+
+#: src/showkey.c:75
+#, c-format
+msgid ""
+"showkey version %s\n"
+"\n"
+"usage: showkey [options...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"\t-h --help\tdisplay this help text\n"
+"\t-a --ascii\tdisplay the decimal/octal/hex values of the keys\n"
+"\t-s --scancodes\tdisplay only the raw scan-codes\n"
+"\t-k --keycodes\tdisplay only the interpreted keycodes (default)\n"
+msgstr ""
+"showkey ×ÅÒÓÉÉ %s\n"
+"\n"
+"ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: showkey [ÏÐÃÉÉ...]\n"
+"\n"
+"ïÐÃÉÉ:\n"
+"\t-h --help     \tÄÁÔØ ÜÔÕ ÐÏÄÓËÁÚËÕ\n"
+"\t-a --ascii    \tÐÏËÁÚÁÔØ ÄÅÓÑÔÉÞÎÙÅ/×ÏÓØÍÅÒÉÞÎÙÅ/ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÅ\n"
+"\t              \tÚÎÁÞÅÎÉÑ ËÌÁ×ÉÛ\n"
+"\t-s --scancodes\tÐÏËÁÚÁÔØ ÔÏÌØËÏ ÓËÁÎ-ËÏÄÙ\n"
+"\t-k --keycodes \tÐÏËÁÚÁÔØ ÔÏÌØËÏ ÐÒÏÉÎÔÅÒÐÒÅÔÉÒÏ×ÁÎÎÙÅ ËÏÄÙ ËÌÁ×ÉÛ\n"
+"\t              \t(ÅÓÌÉ ÎÅ ÕËÁÚÁÎÏ Ñ×ÎÏ ÉÎÏÅ, ÐÏÌÁÇÁÅÔÓÑ `keycodes')\n"
+
+#: src/showkey.c:148
+msgid ""
+"\n"
+"Press any keys - Ctrl-D will terminate this program\n"
+"\n"
+msgstr ""
+"\n"
+"\tïÄÎÁ ËÌÁ×ÉÁÔÕÒÁ,\n"
+"\t\t×ÒÏÄÅ õÎÄÅÒ×ÕÄÁ:\n"
+"\tâÅÊ ËÌÁ×ÉÛÉ,\n"
+"\t\tÎÁÄÏ ËÏÔÏÒÙÅ, ---\n"
+"\t\t\tïÓÔÁÌØÎÏÅ ÓÄÅÌÁÅÔÓÑ ÍÏÔÏÒÁÍÉ!\n"
+"\t\t\t\t\t\t\t(÷ÅÌÉÞÁÊÛÉÊ ðÏÜÔÉÝÅ)\n"
+"\n"
+" (×ÙÈÏÄÉÔØ ÐÏ Ctrl-D)\n"
+
+#: src/showkey.c:217
+msgid "press any key (program terminates 10s after last keypress)...\n"
+msgstr ""
+"ÎÁÖÍÉÔÅ ÎÁ ËÌÁ×ÉÛÕ `any' (ÏÎÁ ÎÁ ÓÉÓÔÅÍÎÏÍ ÂÌÏËÅ)...\n"
+"ðÒÏÇÒÁÍÍÁ ÚÁ×ÅÒÛÁÅÔÓÑ ÐÏÓÌÅ 10 ÓÅËÕÎÄ `ÐÏËÏÑ' (ÎÅ ÎÁÖÉÍÁÅÔÓÑ ÎÉ ÏÄÎÁ "
+"ËÌÁ×ÉÛÁ)\n"
+
+#: src/showkey.c:225
+#, c-format
+msgid "keycode %3d %s\n"
+msgstr "ËÌÁ×ÉÛÁ %3d (ËÏÄ) %s\n"
+
+#: src/showkey.c:227
+msgid "release"
+msgstr "ÏÔÐÕÝÅÎÁ"
+
+#: src/showkey.c:228
+msgid "press"
+msgstr "ÎÁÖÁÔÁ"
+
+#: src/loadkeys.y:196
+#, c-format
+msgid "'%s' is not a function key symbol"
+msgstr ""
+
+#: src/loadkeys.y:259
+#, c-format
+msgid "too many (%d) entries on one line"
+msgstr ""
+
+#: src/loadkeys.y:272
+msgid "too many keydefinitions on one line"
+msgstr ""
+
+#: src/loadkeys.y:291
+#, c-format
+msgid ""
+"loadkeys version %s\n"
+"\n"
+"Usage: loadkeys [option...] [mapfile...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"\t-c --clearcompose clear kernel compose table\n"
+"\t-d --default\t  load \""
+msgstr ""
+
+#: src/loadkeys.y:362
+#, fuzzy
+msgid "syntax error in map file\n"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ"
+
+#: src/loadkeys.y:364
+msgid "key bindings not changed\n"
+msgstr ""
+
+#: src/loadkeys.y:421
+msgid "includes nested too deeply"
+msgstr ""
+
+#. start reading include file
+#: src/loadkeys.y:544
+#, c-format
+msgid "switching to %s\n"
+msgstr ""
+
+#: src/loadkeys.y:550
+#, fuzzy, c-format
+msgid "cannot open include file %s"
+msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ %s\n"
+
+#: src/loadkeys.y:597
+#, fuzzy, c-format
+msgid "Cannot find %s\n"
+msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÛÒÉÆÔ %s\n"
+
+#: src/loadkeys.y:610
+#, fuzzy, c-format
+msgid "cannot open file %s\n"
+msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ %s\n"
+
+#: src/loadkeys.y:621
+#, fuzzy, c-format
+msgid "Loading %s\n"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ %s\n"
+
+#: src/loadkeys.y:633
+#, c-format
+msgid "addmap called with bad index %d"
+msgstr ""
+
+#: src/loadkeys.y:637
+#, c-format
+msgid "adding map %d violates explicit keymaps line"
+msgstr ""
+
+#: src/loadkeys.y:651
+#, c-format
+msgid "killkey called with bad index %d"
+msgstr ""
+
+#: src/loadkeys.y:653
+#, c-format
+msgid "killkey called with bad table %d"
+msgstr ""
+
+#: src/loadkeys.y:667
+#, c-format
+msgid "addkey called with bad index %d"
+msgstr ""
+
+#: src/loadkeys.y:669
+#, c-format
+msgid "addkey called with bad table %d"
+msgstr ""
+
+#: src/loadkeys.y:709
+#, c-format
+msgid "%s: addfunc called with bad func %d\n"
+msgstr ""
+
+#: src/loadkeys.y:729
+#, c-format
+msgid "%s: addfunc: func_buf overflow\n"
+msgstr ""
+
+#: src/loadkeys.y:747
+msgid "compose table overflow\n"
+msgstr ""
+
+#: src/loadkeys.y:784
+#, c-format
+msgid "Keymap %d: Permission denied\n"
+msgstr ""
+
+#: src/loadkeys.y:793
+msgid "    FAILED"
+msgstr ""
+
+#: src/loadkeys.y:796
+#, fuzzy, c-format
+msgid "failed to bind key %d to value %d\n"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÓËÁÎ-ËÏÄ %x ËÏÄÕ %d\n"
+
+#: src/loadkeys.y:807
+#, c-format
+msgid "deallocate keymap %d\n"
+msgstr ""
+
+#: src/loadkeys.y:813
+#, fuzzy, c-format
+msgid "%s: could not deallocate keymap %d\n"
+msgstr "%s: ÎÕ, ÎÅ ÓÍÏÇÌÁ Ñ ×ÙÓ×ÏÂÏÄÉÔØ ËÏÎÓÏÌØ %d\n"
+
+#: src/loadkeys.y:828
+#, fuzzy, c-format
+msgid "%s: cannot deallocate or clear keymap\n"
+msgstr "%s: ÎÕ, ÎÅ ÓÍÏÇÌÁ Ñ ×ÙÓ×ÏÂÏÄÉÔØ ËÏÎÓÏÌØ %d\n"
+
+#: src/loadkeys.y:839
+#, fuzzy, c-format
+msgid "%s: failed to restore keyboard mode\n"
+msgstr "%s: ÏÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÒÅÖÉÍÁ ËÌÁ×ÉÁÔÕÒÙ\n"
+
+#: src/loadkeys.y:842
+#, c-format
+msgid ""
+"%s: warning: this map uses Unicode symbols\n"
+"    (perhaps you want to do `kbd_mode -u'?)\n"
+msgstr ""
+
+#: src/loadkeys.y:886
+#, c-format
+msgid "failed to bind string '%s' to function %s\n"
+msgstr ""
+
+#: src/loadkeys.y:893
+#, c-format
+msgid "failed to clear string %s\n"
+msgstr ""
+
+#: src/loadkeys.y:910
+#, fuzzy
+msgid "too many compose definitions\n"
+msgstr "ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÏÓÔÁ×ÎÙÈ ÏÐÒÅÄÅÌÅÎÉÊ: %d\n"
+
+#: src/loadkeys.y:970
+msgid "impossible error in do_constant"
+msgstr ""
+
+#: src/loadkeys.y:988
+#, c-format
+msgid ""
+"\n"
+"Changed %d %s and %d %s.\n"
+msgstr ""
+
+#: src/loadkeys.y:989
+msgid "key"
+msgstr ""
+
+#: src/loadkeys.y:989
+msgid "keys"
+msgstr ""
+
+#: src/loadkeys.y:990
+msgid "string"
+msgstr ""
+
+#: src/loadkeys.y:990
+msgid "strings"
+msgstr ""
+
+#: src/loadkeys.y:992
+#, fuzzy, c-format
+msgid "Loaded %d compose %s.\n"
+msgstr "óÈÅÍÁ ÏÔÏÂÒÁÖÅÎÉÑ ÜËÒÁÎÁ ÚÁÇÒÕÖÅÎÁ ÉÚ `%s'\n"
+
+#: src/loadkeys.y:993
+msgid "definition"
+msgstr ""
+
+#: src/loadkeys.y:993
+msgid "definitions"
+msgstr ""
+
+#: src/loadkeys.y:995
+#, fuzzy
+msgid "(No change in compose definitions.)\n"
+msgstr "ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÏÓÔÁ×ÎÙÈ ÏÐÒÅÄÅÌÅÎÉÊ: %d\n"
+
+#: src/loadkeys.y:1028
+#, c-format
+msgid "loadkeys: don't know how to compose for %s\n"
+msgstr ""
diff --git a/po/stamp-cat-id b/po/stamp-cat-id
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-cat-id
@@ -0,0 +1 @@
+timestamp
diff --git a/po/update-potfiles b/po/update-potfiles
new file mode 100755
index 0000000..2b7baf8
--- /dev/null
+++ b/po/update-potfiles
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+#
+
+> POTFILES
+> .null
+> POTFILES.in
+
+for x in ../*/*.c; do
+echo "$x \\" >> POTFILES
+done
+echo .null   >> POTFILES
+
+cd ..
+for x in */*.c; do
+echo "$x" >> po/POTFILES.in
+done
+cd po
diff --git a/sample.rc b/sample.rc
new file mode 100644
index 0000000..dcabfb5
--- /dev/null
+++ b/sample.rc
@@ -0,0 +1,45 @@
+# Consoles to be initialized
+# INITTY=/dev/tty[1-9]*
+INITTY=/dev/tty1
+
+# set numlock and set metabit mode on all virtual consoles
+for tty in $INITTY
+do
+	setleds -D +num < $tty > /dev/null
+	setmetamode metabit < /dev/tty$t > /dev/null
+done
+
+# Cyrillic keyboard/console
+setfont	Cyr_a8x16 -m koi2alt
+loadkeys ru
+
+# or: Latin1 keyboard/console
+setfont lat1-16 -m trivial
+loadkeys -d
+
+# enable mapping
+for tty in $INITTY
+do
+	echo -n -e "\\033(K" > $tty
+done
+
+# Opening a tty for reading or writing will create the corresponding
+# console. So, probably you want to do the above not on all /dev/tty*
+# but only on those where you start a getty. If the remaining ones
+# are opened using "open -s -l bash", then a "setleds -D +num" or so
+# in .profile will take care of the newly opened console.
+
+# Let alt-uparrow (given at the shell prompt) create a new virtual console
+#
+loadkeys << EOF
+alt keycode 103 = F100
+string F100 = "open -l -s bash\n"
+EOF
+#
+# Let alt-uparrow (anytime) create a new virtual console
+# (watch out for security aspects!)
+#
+spawn_console&	# start a deamon that listens to the keyboard
+loadkeys << EOF
+alt keycode 103 = Spawn_Console
+EOF
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..ddd8944
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,95 @@
+# Something like /usr/lib/kbd or /usr/share/kbd
+ifndef DATADIR
+DATADIR = @datadir@
+endif
+
+ifndef BINDIR
+BINDIR = /usr/bin
+endif
+
+PROGS   = dumpkeys loadkeys showkey setfont showfont \
+	  setleds setmetamode kbd_mode chvt deallocvt \
+	  psfaddtable psfgettable psfstriptable \
+	  getkeycodes setkeycodes
+
+# probably also getkeycodes and setkeycodes are arch-specific;
+# they will work on an alpha, though, and perhaps be dummy on a sun
+
+I386PROGS = resizecons
+
+OLDPROGS= mapscrn loadunimap
+
+MISC    = screendump setvesablank spawn_console spawn_login \
+	  getunimap clrunimap fgconsole
+
+SHCMDS  = unicode_start unicode_stop
+
+WARN	= -Wall
+DEFS	= -DDATADIR=\"$(DATADIR)\"
+CFLAGS  = -O2
+LDFLAGS = -s
+
+CC	= gcc
+YACC	= bison -y
+LEX	= flex -8
+
+.c.o:
+	$(CC) -c $(WARN) $(CFLAGS) $(DEFS) $<
+
+all:	$(PROGS) $(OLDPROGS) $(MISC)
+
+progs:	$(PROGS)
+
+old:	$(OLDPROGS)
+
+i386:	$(I386PROGS)
+
+install:	all
+	install -s -m 0755 -o root $(PROGS) $(OLDPROGS) $(BINDIR)
+#	install -s -m 0755 -o root $(MISC) $(BINDIR)
+#	install -c -m 0755 -o root $(SHCMDS) $(BINDIR)
+
+
+install386:	i386
+	install $(I386PROGS) $(BINDIR)
+
+# loadkeys.o: separate rule since the flex output does not permit -Wall
+loadkeys.o:	loadkeys.c analyze.c
+	$(CC) -c $(CFLAGS) $(DEFS) $<
+
+
+# mapscrn and loadunimap are now part of setfont
+# but can be compiled separately, if desired
+main_mapscrn.o: mapscrn.c paths.h
+	$(CC) $(CFLAGS) $(WARN) $(DEFS) -DMAIN -c $< -o $@
+
+main_loadunimap.o: loadunimap.c paths.h
+	$(CC) $(CFLAGS) $(WARN) $(DEFS) -DMAIN -c $< -o $@
+
+$(OLDPROGS): %: main_%.o findfile.o
+	$(CC) $(LDFLAGS) $^ -o $@
+
+
+clean:
+	rm -f core *.o analyze.c loadkeys.c
+
+reallyclean spotless distclean: clean
+	rm -f $(PROGS) $(OLDPROGS) $(MISC) $(I386PROGS) *~
+
+$(PROGS): %: %.o
+
+dumpkeys loadkeys: ksyms.o
+
+ksyms.o: cyrillic.syms.h ethiopic.syms.h
+
+loadkeys.o mapscrn.o setfont.o resizecons.o loadunimap.o: paths.h
+
+psfaddtable.o psfgettable.o psfstriptable.o setfont.o: psf.h
+
+loadkeys mapscrn setfont resizecons loadunimap: findfile.o
+
+chvt clrunimap deallocvt dumpkeys getkeycodes getunimap kbd_mode: getfd.o
+loadkeys loadunimap mapscrn resizecons setkeycodes setfont: getfd.o
+setvesablank showkey: getfd.o
+
+setfont: mapscrn.o loadunimap.o kdfontop.o
diff --git a/src/README b/src/README
new file mode 100644
index 0000000..3c463bf
--- /dev/null
+++ b/src/README
@@ -0,0 +1,15 @@
+Several corrections in kbd-0.90 are due to shields@tembel.org
+(Michael Shields).
+
+jrs@world.std.com (Rick Sladkey) suggested some improvements
+to the Makefile.
+
+resize has been renamed resizecons in order to avoid name conflicts.
+
+disalloc has been renamed deallocvt since people tell me
+that `disallocate' is bad English; also it is good to have
+the `vt' in the name, just like in chvt.
+Now open should be renamed openvt...
+
+A few Unicode related things are not installed by default, since
+not many people use them. Install them yourself, if you need them.
diff --git a/src/README.psftable b/src/README.psftable
new file mode 100644
index 0000000..b217d14
--- /dev/null
+++ b/src/README.psftable
@@ -0,0 +1,4 @@
+These programs contributed by H. Peter Anwin (hpa@nwu.edu), 25 Oct 1994,
+modified by aeb.
+
+Add psf.magic to /etc/magic if you use that.
diff --git a/src/analyze.l b/src/analyze.l
new file mode 100644
index 0000000..4a163b9
--- /dev/null
+++ b/src/analyze.l
@@ -0,0 +1,126 @@
+%{
+#include <stdlib.h>
+#include <linux/kd.h>
+
+extern int ksymtocode(char *s);
+
+extern int line_nr;
+int	yylval;
+int	rvalct;
+struct kbsentry kbs_buf;
+char *p, *pmax;
+char *filename;
+
+#undef yywrap
+extern int yywrap(void);
+extern int yyerror(char *s);
+extern void stringovfl(void);
+extern void lkfatal(char *s);
+extern void lkfatal1(char *s, char *s2);
+extern void open_include(char *s);
+extern void *xmalloc(size_t);
+%}
+
+%s RVALUE
+%x STR
+%x INCLSTR
+Comment			#|!
+Continuation		\\\n
+Eol			\n
+Blank			[ \t]
+Include			include[ \t]*
+Decimal			[1-9][0-9]*
+Octal			0[0-7]*
+Hex			0[xX][0-9a-fA-F]+
+Unicode			U\+([0-9a-fA-F]){4}
+Literal			[a-zA-Z][a-zA-Z_0-9]*
+Octa			([0-7]){1,3}
+Charset			charset|Charset|CharSet|CHARSET
+Keymaps			keymaps|Keymaps|KeyMaps|KEYMAPS
+Keycode			keycode|Keycode|KeyCode|KEYCODE
+String			string|String|STRING
+Equals			=
+Plain			plain|Plain|PLAIN
+Shift			shift|Shift|SHIFT
+Control			control|Control|CONTROL
+Alt			alt|Alt|ALT
+AltGr			altgr|Altgr|AltGr|ALTGR
+ShiftL			shiftl|ShiftL|SHIFTL
+ShiftR			shiftr|ShiftR|SHIFTR
+CtrlL			ctrll|CtrlL|CTRLL
+CtrlR			ctrlr|CtrlR|CTRLR
+AltIsMeta		[aA][lL][tT][-_][iI][sS][-_][mM][eE][tT][aA]
+Strings			strings|Strings|STRINGS
+Compose                 compose|Compose|COMPOSE
+As			as|As|AS
+Usual			usual|Usual|USUAL
+For			for|For|FOR
+On			on|On|ON
+To                      to|To|TO
+%%
+{Include}               {BEGIN(INCLSTR);}
+<INCLSTR>\"[^"\n]+\"	{ int l; char *s;
+			 l = strlen(yytext);
+			 s = xmalloc(l);
+			 strcpy(s, yytext+1);
+			 s[l-2] = 0;		/* wipe out " */
+			 open_include(s);
+			 BEGIN(0);
+			}
+<INCLSTR>[^"]|\"\"|\"[^"\n]*{Eol}	{
+			  yyerror("expected filename between quotes");
+			  BEGIN(0); }
+{Continuation}		{line_nr++;}
+{Eol}			{line_nr++;BEGIN(0);return(EOL);}
+{Blank}+		; /* do nothing */
+{Comment}.*/{Eol}	; /* do nothing */
+{Equals}		{BEGIN(RVALUE);rvalct=0;return(EQUALS);}
+\-			{return(DASH);}
+\,			{return(COMMA);}
+\+			{return(PLUS);}
+{Unicode}		{yylval=strtol(yytext+1,NULL,16);return(UNUMBER);}
+{Decimal}|{Octal}|{Hex}	{yylval=strtol(yytext,NULL,0);return(NUMBER);}
+<RVALUE>{Literal}	{return((yylval=ksymtocode(yytext))==-1?ERROR:LITERAL);}
+{Charset}		{return(CHARSET);}
+{Keymaps}		{return(KEYMAPS);}
+{Keycode}		{return(KEYCODE);}
+{String}		{BEGIN(RVALUE);return(STRING);}
+{Plain}			{return(PLAIN);}
+{Shift}			{return(SHIFT);}
+{Control}		{return(CONTROL);}
+{Alt}			{return(ALT);}
+{AltGr}			{return(ALTGR);}
+{ShiftL}		{return(SHIFTL);}
+{ShiftR}		{return(SHIFTR);}
+{CtrlL}			{return(CTRLL);}
+{CtrlR}			{return(CTRLR);}
+{AltIsMeta}		{return(ALT_IS_META);}
+{Strings}		{return(STRINGS);}
+{Compose}               {return(COMPOSE);}
+{As}			{return(AS);}
+{Usual}			{return(USUAL);}
+{To}                    {BEGIN(RVALUE); return(TO);}
+{On}			{return(ON);}
+{For}			{return(FOR);}
+'\\{Octa}'              {yylval = strtol(yytext+2,NULL,8); return(CCHAR);}
+'\\.'                   {yylval = yytext[2]; return(CCHAR);}
+'.'                     {yylval = yytext[1]; return(CCHAR);}
+\"			{p=kbs_buf.kb_string;
+				pmax=p+sizeof(kbs_buf.kb_string)-1;
+				BEGIN(STR);}
+<STR>\\{Octa}		{if(p>=pmax)stringovfl();*p++=strtol(yytext+1,NULL,8);}
+<STR>\\\"               {if(p>=pmax)stringovfl();*p++='"';}
+<STR>\\\\               {if(p>=pmax)stringovfl();*p++='\\';}
+<STR>\\n		{if(p>=pmax)stringovfl();*p++='\n';}
+<STR>[^"\\]*		{char *ptmp=p;p+=strlen(yytext);
+				if(p>pmax)stringovfl();strcpy(ptmp,yytext);}
+<STR>\"			{*p='\0';BEGIN(0);return(STRLITERAL);}
+.			{return(ERROR); /* report any unknown characters */}
+%%
+#include "ksyms.h"
+#include <linux/keyboard.h>
+
+void
+stringovfl(void) {
+	lkfatal("string too long");
+}
diff --git a/src/chvt.c b/src/chvt.c
new file mode 100644
index 0000000..1626dcf
--- /dev/null
+++ b/src/chvt.c
@@ -0,0 +1,37 @@
+/*
+ * chvt.c - aeb - 940227 - Change virtual terminal
+ */
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <linux/vt.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include "nls.h"
+
+extern int getfd(void);
+
+int
+main(int argc, char *argv[]) {
+    int fd, num;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (argc != 2) {
+	fprintf(stderr, _("usage: chvt N\n"));
+	exit(1);
+    }
+    fd = getfd();
+    num = atoi(argv[1]);
+    if (ioctl(fd,VT_ACTIVATE,num)) {
+	perror("chvt: VT_ACTIVATE");
+	exit(1);
+    }
+    if (ioctl(fd,VT_WAITACTIVE,num)) {
+	perror("VT_WAITACTIVE");
+	exit(1);
+    }
+    exit(0);
+}
diff --git a/src/clrunimap.c b/src/clrunimap.c
new file mode 100644
index 0000000..e75a3f9
--- /dev/null
+++ b/src/clrunimap.c
@@ -0,0 +1,35 @@
+/*
+ * clrunimap.c
+ *
+ * Note: nowadays this kills kernel console output!
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <linux/kd.h>
+#include <sys/ioctl.h>
+#include "nls.h"
+
+extern int getfd(void);
+
+int
+main(int argc, char *argv[]) {
+	struct unimapinit advice;
+	int fd;
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	fd = getfd();
+
+	advice.advised_hashsize = 0;
+	advice.advised_hashstep = 0;
+	advice.advised_hashlevel = 0;
+
+	if(ioctl(fd, PIO_UNIMAPCLR, &advice)) {
+		perror("PIO_UNIMAPCLR");
+		exit(1);
+	}
+}
diff --git a/src/cyrillic.syms.h b/src/cyrillic.syms.h
new file mode 100644
index 0000000..7e61f7b
--- /dev/null
+++ b/src/cyrillic.syms.h
@@ -0,0 +1,98 @@
+char *koi8_r_syms[] = { /* 160-255 */
+    "",                        /* 0240 */
+    "",
+    "",
+    "cyrillic_small_letter_io",
+    "",
+    "",
+    "",
+    "",
+    "",                        /* 0250 */
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",                        /* 0260 */
+    "",
+    "",
+    "cyrillic_capital_letter_io",
+    "",
+    "",
+    "",
+    "",
+    "",                        /* 0270 */
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "copyright",
+    "cyrillic_small_letter_yu",                        /* 0300 */
+    "cyrillic_small_letter_a",
+    "cyrillic_small_letter_be",
+    "cyrillic_small_letter_tse",
+    "cyrillic_small_letter_de",
+    "cyrillic_small_letter_ie",
+    "cyrillic_small_letter_ef",
+    "cyrillic_small_letter_ghe",
+    "cyrillic_small_letter_ha",                        /* 0310 */
+    "cyrillic_small_letter_i",
+    "cyrillic_small_letter_short_i",
+    "cyrillic_small_letter_ka",
+    "cyrillic_small_letter_el",
+    "cyrillic_small_letter_em",
+    "cyrillic_small_letter_en",
+    "cyrillic_small_letter_o",
+    "cyrillic_small_letter_pe",                                /* 0320 */
+    "cyrillic_small_letter_ya",
+    "cyrillic_small_letter_er",
+    "cyrillic_small_letter_es",
+    "cyrillic_small_letter_te",
+    "cyrillic_small_letter_u",
+    "cyrillic_small_letter_zhe",
+    "cyrillic_small_letter_ve",
+    "cyrillic_small_soft_sign",                                /* 0330 */
+    "cyrillic_small_letter_yeru",
+    "cyrillic_small_letter_ze",
+    "cyrillic_small_letter_sha",
+    "cyrillic_small_letter_e",
+    "cyrillic_small_letter_shcha",
+    "cyrillic_small_letter_che",
+    "cyrillic_small_hard_sign",
+    "cyrillic_capital_letter_yu",                      /* 0340 */
+    "cyrillic_capital_letter_a",
+    "cyrillic_capital_letter_be",
+    "cyrillic_capital_letter_tse",
+    "cyrillic_capital_letter_de",
+    "cyrillic_capital_letter_ie",
+    "cyrillic_capital_letter_ef",
+    "cyrillic_capital_letter_ghe",
+    "cyrillic_capital_letter_ha",                      /* 0350 */
+    "cyrillic_capital_letter_i",
+    "cyrillic_capital_letter_short_i",
+    "cyrillic_capital_letter_ka",
+    "cyrillic_capital_letter_el",
+    "cyrillic_capital_letter_em",
+    "cyrillic_capital_letter_en",
+    "cyrillic_capital_letter_o",
+    "cyrillic_capital_letter_pe",                      /* 0360 */
+    "cyrillic_capital_letter_ya",
+    "cyrillic_capital_letter_er",
+    "cyrillic_capital_letter_es",
+    "cyrillic_capital_letter_te",
+    "cyrillic_capital_letter_u",
+    "cyrillic_capital_letter_zhe",
+    "cyrillic_capital_letter_ve",
+    "cyrillic_capital_soft_sign",                      /* 0370 */
+    "cyrillic_capital_letter_yeru",
+    "cyrillic_capital_letter_ze",
+    "cyrillic_capital_letter_sha",
+    "cyrillic_capital_letter_e",
+    "cyrillic_capital_letter_shcha",
+    "cyrillic_capital_letter_che",
+    "cyrillic_capital_hard_sign"
+};
diff --git a/src/deallocvt.c b/src/deallocvt.c
new file mode 100644
index 0000000..264144f
--- /dev/null
+++ b/src/deallocvt.c
@@ -0,0 +1,63 @@
+/*
+ * disalloc.c - aeb - 940501 - Disallocate virtual terminal(s)
+ * Renamed deallocvt.
+ */
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <linux/vt.h>
+#include <stdio.h>
+#include "nls.h"
+
+extern int getfd(void);
+char *progname;
+
+void
+usage(){
+    fprintf(stderr, _("usage: %s [N1 N2 ...]\n"), progname);
+    exit(1);
+}
+
+int
+main(int argc, char *argv[]) {
+    int fd, num, i;
+
+    if (argc < 1)		/* unlikely */
+      exit(1);
+    progname = argv[0];
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    fd = getfd();
+
+    if (argc == 1) {
+	/* deallocate all unused consoles */
+	if (ioctl(fd,VT_DISALLOCATE,0)) {
+	    perror("VT_DISALLOCATE");
+	    fprintf(stderr,
+		    _("%s: deallocating all unused consoles failed\n"),
+		    progname);
+	    exit(1);
+	}
+    } else
+    for (i = 1; i < argc; i++) {
+	num = atoi(argv[i]);
+	if (num == 0)
+	    fprintf(stderr, _("%s: 0: illegal VT number\n"), progname);
+	else if (num == 1)
+	    fprintf(stderr,
+		    _("%s: VT 1 is the console and cannot be deallocated\n"),
+		    progname);
+	else
+	if (ioctl(fd,VT_DISALLOCATE,num)) {
+	    perror("VT_DISALLOCATE");
+	    fprintf(stderr, _("%s: could not deallocate console %d\n"),
+		    progname, num);
+	    exit(1);
+	}
+    }
+    exit(0);
+}
diff --git a/src/dumpkeys.c b/src/dumpkeys.c
new file mode 100644
index 0000000..80a85c3
--- /dev/null
+++ b/src/dumpkeys.c
@@ -0,0 +1,625 @@
+/*
+ * dumpkeys.c
+ *
+ * derived from version 0.81 - aeb@cwi.nl
+ * Fix: escape quotes and backslashes in strings
+ * Fix: after  dumpkeys > x; loadkeys x; dumpkeys > y
+ *      the files x and y should be identical
+ * Added: compose key support
+ *
+ * for 0.83: output a "+" for KT_LETTER
+ * for 0.85: with -i option: also output MAX_DIACR
+ * for 0.86: with -l option: also tell about synonyms
+ * for 0.87: output "charset iso-8859-x" so that loadkeys
+ *      can handle the output of dumpkeys -c
+ * for 0.88: handle sparse keymaps
+ * for 0.94: support alt_is_meta
+ * for 0.96: option -1
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <linux/types.h>
+#include <linux/kd.h>
+#include <linux/keyboard.h>
+#include <sys/ioctl.h>
+#include <string.h>
+#include <errno.h>
+#include "ksyms.h"
+#include "modifiers.h"
+#include "nls.h"
+
+#ifndef KT_LETTER
+#define KT_LETTER KT_LATIN
+#endif
+
+#ifndef MAX_NR_KEYMAPS
+#define MAX_NR_KEYMAPS NR_KEYMAPS
+#endif
+
+#define VERSION "0.98"
+char *progname;
+extern int getfd();
+static int fd;
+
+static int verbose;
+
+int keymap_index[MAX_NR_KEYMAPS];		/* inverse of good_keymap */
+int good_keymap[MAX_NR_KEYMAPS], keymapnr, allocct;
+
+void get_keymaps(void) {
+	int i, j;
+	struct kbentry ke;
+
+	keymapnr = allocct = 0;
+	for (i=0; i<MAX_NR_KEYMAPS; i++) {
+	    ke.kb_index = 0;
+	    ke.kb_table = i;
+	    j = ioctl(fd, KDGKBENT, (unsigned long)&ke);
+	    if (j && errno != EINVAL) {
+		perror("KDGKBENT");
+		fprintf(stderr, _("KDGKBENT error at index 0 in table %d: "), i);
+		exit(1);
+	    }
+	    if (!j && ke.kb_value != K_NOSUCHMAP) {
+		keymap_index[i] = keymapnr;
+		good_keymap[keymapnr++] = i;
+		if (ke.kb_value == K_ALLOCATED)
+		  allocct++;
+	    } else {
+		keymap_index[i] = -1;
+	    }
+	}
+	if (keymapnr == 0) {
+	    fprintf(stderr, _("%s: cannot find any keymaps?\n"), progname);
+	    exit(1);
+	}
+	if (good_keymap[0] != 0) {
+	    fprintf(stderr,
+		    _("%s: plain map not allocated? very strange ...\n"), progname);
+	    /* this is not fatal */
+	}
+}
+
+void print_keymaps(void) {
+	int i,m0,m;
+
+	printf("keymaps ");
+	for (i=0; i<keymapnr; i++) {
+	    if (i)
+	      printf(",");
+	    m0 = m = good_keymap[i];
+	    while (i+1 < keymapnr && good_keymap[i+1] == m+1)
+	      i++, m++;
+	    if (m0 == m)
+	      printf("%d", m0);
+	    else
+	      printf("%d-%d", m0, m);
+	}
+	printf("\n");
+}
+
+int get_bind(u_char index, u_char table) {
+	struct kbentry ke;
+
+	ke.kb_index = index;
+	ke.kb_table = table;
+	if (ioctl(fd, KDGKBENT, (unsigned long)&ke)) {
+		perror("KDGKBENT");
+		fprintf(stderr, _("KDGKBENT error at index %d in table %d: "),
+			index, table);
+		exit(1);
+	}
+	return ke.kb_value;
+}
+
+void print_keysym(int code, char numeric) {
+	int t;
+	int v;
+	char *p;
+
+	printf(" ");
+	t = KTYP(code);
+	v = KVAL(code);
+	if (t > KT_LETTER) {
+		printf("U+%04x          ", code ^ 0xf000);
+		return;
+	}
+	if (t == KT_LETTER) {
+		t = KT_LATIN;
+		printf("+");
+	}
+	if (!numeric && t < syms_size && v < syms[t].size &&
+	    (p = syms[t].table[v])[0])
+		printf("%-16s", p);
+	else if (!numeric && t == KT_META && v < 128 && v < syms[0].size &&
+		 (p = syms[0].table[v])[0])
+		printf("Meta_%-11s", p);
+	else
+		printf("0x%04x          ", code);
+}
+
+char valid_type(int t) {
+	struct kbentry ke;
+	char status;
+
+	ke.kb_index = 0;
+	ke.kb_table = 0;
+	ke.kb_value = K(t, 0);
+	status = (ioctl(fd, KDSKBENT, (unsigned long)&ke) == 0);
+	return status;
+}
+
+u_char maximum_val(int t) {
+	struct kbentry ke, ke0;
+	int i;
+
+	ke.kb_index = 0;
+	ke.kb_table = 0;
+	ke.kb_value = K_HOLE;
+	ke0 = ke;
+	ioctl(fd, KDGKBENT, (unsigned long)&ke0);
+
+	for (i = 0; i < 256; i++) {
+		ke.kb_value = K(t, i);
+		if (ioctl(fd, KDSKBENT, (unsigned long)&ke))
+			break;
+	}
+	ke.kb_value = K_HOLE;
+	ioctl(fd, KDSKBENT, (unsigned long)&ke0);
+
+	return i - 1;
+}
+
+#define NR_TYPES 15
+int maxval[NR_TYPES];
+
+#ifdef KDGKBDIACR
+/* isgraph() does not know about iso-8859; printing the character
+   unescaped makes the output easier to check. Maybe this should
+   be an option. Use locale? */
+void
+outchar (unsigned char c) {
+	printf("'");
+	printf((c == '\'' || c == '\\') ? "\\%c"
+	       : (isgraph(c) || c == ' ' || c >= 0200) ? "%c"
+	       : "\\%03o", c);
+	printf("'");
+}
+
+struct kbdiacrs kd;
+
+void get_diacs(void) {
+	static int got_diacs = 0;
+
+	if(!got_diacs && ioctl(fd, KDGKBDIACR, (unsigned long)&kd)) {
+	    perror("KDGKBDIACR");
+	    exit(1);
+	}
+	got_diacs = 1;
+}
+
+int nr_of_diacs(void) {
+	get_diacs();
+	return kd.kb_cnt;
+}
+
+void dump_diacs(void) {
+	int i;
+
+	get_diacs();
+	for (i = 0; i < kd.kb_cnt; i++) {
+		printf("compose ");
+		outchar(kd.kbdiacr[i].diacr);
+		printf(" ");
+		outchar(kd.kbdiacr[i].base);
+		printf(" to ");
+		outchar(kd.kbdiacr[i].result);
+		printf("\n");
+	}
+}
+#endif        
+
+void show_short_info(void) {
+	int i;
+
+	printf(_("keycode range supported by kernel:           1 - %d\n"),
+	       NR_KEYS - 1);
+	printf(_("max number of actions bindable to a key:         %d\n"),
+	       MAX_NR_KEYMAPS);
+	get_keymaps();
+	printf(_("number of keymaps in actual use:                 %d\n"),
+	       keymapnr);
+	if (allocct)
+	  printf(_("of which %d dynamically allocated\n"), allocct);
+	printf(_("ranges of action codes supported by kernel:\n"));
+	for (i = 0; i < NR_TYPES && valid_type(i); i++) {
+	    maxval[i] = maximum_val(i);
+	    printf("	0x%04x - 0x%04x\n", K(i, 0), K(i, maxval[i]));
+	}
+	printf(_("number of function keys supported by kernel: %d\n"),
+	       MAX_NR_FUNC);
+
+	printf(_("max nr of compose definitions: %d\n"),
+	       MAX_DIACR);
+	printf(_("nr of compose definitions in actual use: %d\n"),
+	       nr_of_diacs());
+}
+
+struct {
+    char *name;
+    int bit;
+} modifiers[] = {
+    { "shift",	KG_SHIFT  },
+    { "altgr",	KG_ALTGR  },
+    { "control",KG_CTRL   },
+    { "alt",	KG_ALT    },
+    { "shiftl",	KG_SHIFTL },
+    { "shiftr",	KG_SHIFTR },
+    { "ctrll",	KG_CTRLL  },
+    { "ctrlr",	KG_CTRLR  }
+};
+
+void dump_symbols(void) {
+	int t;
+	int v;
+	char *p;
+
+	printf(_("Symbols recognized by %s:\n(numeric value, symbol)\n\n"), progname);
+	for (t = 0; t < syms_size; t++) {
+	    if (syms[t].size) {
+		for (v = 0; v < syms[t].size; v++)
+			if ((p = syms[t].table[v])[0])
+				printf("0x%04x\t%s\n", K(t, v), p);
+	    } else if (t == KT_META) {
+		for (v = 0; v < syms[0].size && v < 128; v++)
+			if ((p = syms[0].table[v])[0])
+				printf("0x%04x\tMeta_%s\n", K(t, v), p);
+	    }
+	}
+	printf(_("\nThe following synonyms are recognized:\n\n"));
+	for (t = 0; t < syn_size; t++)
+	  printf(_("%-15s for %s\n"), synonyms[t].synonym,
+		 synonyms[t].official_name);
+	printf(_("\nRecognized modifier names and their column numbers:\n"));
+	for (t = 0; t < sizeof(modifiers)/sizeof(modifiers[0]); t++)
+	  printf("%s\t\t%3d\n", modifiers[t].name, 1 << modifiers[t].bit);
+}
+
+void print_mod(int x) {
+	int t;
+
+	if (!x)
+		printf("plain\t");
+	else
+	for (t = 0; t < sizeof(modifiers)/sizeof(modifiers[0]); t++)
+	  if (x & (1 << modifiers[t].bit))
+	    printf("%s\t", modifiers[t].name);
+}
+
+void print_bind(int bufj, int i, int j, char numeric) {
+	if(j)
+	    printf("\t");
+	print_mod(j);
+	printf("keycode %3d =", i);
+	print_keysym(bufj, numeric);
+	printf("\n");
+}
+
+#define DEFAULT		0
+#define FULL_TABLE	1	/* one line for each keycode */
+#define SEPARATE_LINES	2	/* one line for each (modifier,keycode) pair */
+#define	UNTIL_HOLE	3	/* one line for each keycode, until 1st hole */
+
+void dump_keys(char table_shape, char numeric) {
+	int i, j, k;
+	int buf[MAX_NR_KEYMAPS];
+	int isletter, islatin, isasexpected;
+	int typ, val;
+	int alt_is_meta = 0;
+	int zapped[MAX_NR_KEYMAPS];
+
+	get_keymaps();
+	print_keymaps();
+	if (!keymapnr)
+	  return;
+
+	if (table_shape == FULL_TABLE || table_shape == SEPARATE_LINES)
+	  goto no_shorthands;
+
+	/* first pass: determine whether to set alt_is_meta */
+	for (j = 0; j < MAX_NR_KEYMAPS; j++) {
+	     int ja = (j | M_ALT);
+	     if (j != ja && keymap_index[j] >= 0 && keymap_index[ja] >= 0)
+		  for (i = 1; i < NR_KEYS; i++) {
+		       int buf0, buf1, type;
+
+		       buf0 = get_bind(i, j);
+		       type = KTYP(buf0);
+		       if ((type == KT_LATIN || type == KT_LETTER)
+			   && KVAL(buf0) < 128) {
+			    buf1 = get_bind(i, ja);
+			    if (buf1 != K(KT_META, KVAL(buf0))) {
+				 if (verbose) {
+				      printf(_("# not alt_is_meta: "
+		      		"on keymap %d key %d is bound to"),
+					      ja, i);
+				      print_keysym(buf1, numeric);
+				      printf("\n");
+				 }
+				 goto not_alt_is_meta;
+			    }
+		       }
+		  }
+	}
+	alt_is_meta = 1;
+	printf("alt_is_meta\n");
+not_alt_is_meta:
+
+no_shorthands:
+	for (i = 1; i < NR_KEYS; i++) {
+	    for (j = 0; j < keymapnr; j++)
+	      buf[j] = get_bind(i, good_keymap[j]);
+
+	    if (table_shape == FULL_TABLE) {
+		printf("keycode %3d =", i);
+		for (j = 0; j < keymapnr; j++)
+		  print_keysym(buf[j], numeric);
+		printf("\n");
+		continue;
+	    }
+
+	    if (table_shape == SEPARATE_LINES) {
+		for (j = 0; j < keymapnr; j++)
+		  print_bind(buf[j], i, good_keymap[j], numeric);
+		printf("\n");
+		continue;
+	    }
+
+	    typ = KTYP(buf[0]);
+	    val = KVAL(buf[0]);
+	    islatin = (typ == KT_LATIN || typ == KT_LETTER);
+	    isletter = (islatin &&
+			((val >= 'A' && val <= 'Z') ||
+			 (val >= 'a' && val <= 'z')));
+	    isasexpected = 0;
+	    if (isletter) {
+		u_short defs[16];
+		defs[0] = K(KT_LETTER, val);
+		defs[1] = K(KT_LETTER, val ^ 32);
+		defs[2] = defs[0];
+		defs[3] = defs[1];
+		for(j=4; j<8; j++)
+		  defs[j] = K(KT_LATIN, val & ~96);
+		for(j=8; j<16; j++)
+		  defs[j] = K(KT_META, KVAL(defs[j-8]));
+
+		for(j = 0; j < keymapnr; j++) {
+		    k = good_keymap[j];
+		    if ((k >= 16 && buf[j] != K_HOLE) || (k < 16 && buf[j] != defs[k]))
+		      goto unexpected;
+		}
+		isasexpected = 1;
+	    }
+	  unexpected:
+
+	    /* wipe out predictable meta bindings */
+	    for (j = 0; j < keymapnr; j++)
+		    zapped[j] = 0;
+	    if (alt_is_meta) {
+		 for(j = 0; j < keymapnr; j++) {
+		      int ka, ja, typ;
+		      k = good_keymap[j];
+		      ka = (k | M_ALT);
+		      ja = keymap_index[ka];
+		      if (k != ka && ja >= 0
+		       && ((typ=KTYP(buf[j])) == KT_LATIN || typ == KT_LETTER)
+		       && KVAL(buf[j]) < 128) {
+			   if (buf[ja] != K(KT_META, KVAL(buf[j])))
+				fprintf(stderr, _("impossible: not meta?\n"));
+			   buf[ja] = K_HOLE;
+			   zapped[ja] = 1;
+		      }
+		 }
+	    }
+
+	    printf("keycode %3d =", i);
+	    if (isasexpected) {
+		/* print only a single entry */
+		/* suppress the + for ordinary a-zA-Z */
+		print_keysym(K(KT_LATIN, val), numeric);
+		printf("\n");
+	    } else {
+		/* choose between single entry line followed by exceptions,
+		   and long line followed by exceptions; avoid VoidSymbol */
+		int bad = 0;
+		int count = 0;
+		for(j = 1; j < keymapnr; j++) if (!zapped[j]) {
+		    if (buf[j] != buf[0])
+		      bad++;
+		    if (buf[j] != K_HOLE)
+		      count++;
+		}
+		if (bad <= count && bad < keymapnr-1) {
+		    if (buf[0] != K_HOLE)
+		      print_keysym(buf[0], numeric);
+		    printf("\n");
+		    for (j = 1; j < keymapnr; j++)
+		      if (buf[j] != buf[0] && !zapped[j])
+			print_bind(buf[j], i, good_keymap[j], numeric);
+		} else {
+		    for (j = 0; j < keymapnr && buf[j] != K_HOLE &&
+				 (j == 0 || table_shape != UNTIL_HOLE ||
+				  good_keymap[j] == good_keymap[j-1]+1); j++)
+		      print_keysym(buf[j], numeric);
+		    printf("\n");
+		    for ( ; j < keymapnr; j++)
+		      if (buf[j] != K_HOLE)
+			print_bind(buf[j], i, good_keymap[j], numeric);
+		}
+	    }
+	}
+}
+
+void dump_funcs(void) {
+	int i;
+	struct kbsentry fbuf;
+	char *p;
+
+	for (i = 0; i < MAX_NR_FUNC; i++) {
+		fbuf.kb_func = i;
+		if (ioctl(fd, KDGKBSENT, (unsigned long)&fbuf)) {
+		    if (errno == EINVAL && i > 0) /* an old kernel */
+		      break;
+		    perror("KDGKBSENT");
+		    fprintf(stderr, _("KDGKBSENT failed at index %d: "), i);
+		    exit(1);
+		}
+		if (!fbuf.kb_string[0])
+			continue;
+		printf("string %s = \"", syms[KT_FN].table[i]);
+		for (p = fbuf.kb_string; *p; p++) {
+			if (*p == '"' || *p == '\\') {
+				putchar('\\'); putchar(*p);
+			} else if (isgraph(*p) || *p == ' ')
+				putchar(*p);
+			else
+				printf("\\%03o", *p);
+		}
+		printf("\"\n");
+	}
+}
+
+/* bah - xgettext forces us to uglify this */
+void usage(void) {
+	fprintf(stderr, _("dumpkeys version %s"), VERSION);
+	fprintf(stderr, _(
+"\n"
+"usage: dumpkeys [options...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"	-h --help	    display this help text\n"
+"	-i --short-info	    display information about keyboard driver\n"
+"	-l --long-info	    display above and symbols known to loadkeys\n"
+"	-n --numeric	    display keytable in hexadecimal notation\n"
+"	-f --full-table	    don't use short-hand notations, one row per keycode\n"
+"	-1 --separate-lines one line per (modifier,keycode) pair\n"
+"	   --funcs-only	    display only the function key strings\n"
+"	   --keys-only	    display only key bindings\n"
+"	   --compose-only   display only compose key combinations\n"
+"	-c --charset=iso-8859-{1,2,3,4,5,7,8,9}\n"
+"	             koi8-{r,u}		\n"
+"			    interpret character action codes to be from the\n"
+"			    specified character set\n"
+));
+	exit(1);
+}
+
+int
+main (int argc, char *argv[]) {
+	const char *short_opts = "hilvsnf1S:c:";
+	const struct option long_opts[] = {
+		{ "help",	no_argument,		NULL, 'h' },
+		{ "short-info",	no_argument,		NULL, 'i' },
+		{ "long-info",	no_argument,		NULL, 'l' },
+		{ "numeric",	no_argument,		NULL, 'n' },
+		{ "full-table",	no_argument,		NULL, 'f' },
+		{ "separate-lines",no_argument,		NULL, '1' },
+		{ "shape",	required_argument,	NULL, 'S' },
+		{ "funcs-only",	no_argument,		NULL, 't' },
+		{ "keys-only",	no_argument,		NULL, 'k' },
+		{ "compose-only",no_argument,		NULL, 'd' },
+		{ "verbose",	no_argument,		NULL, 'v' },
+		{ "charset",	required_argument,	NULL, 'c' },
+		{ NULL,	0, NULL, 0 }
+	};
+	int c;
+	char long_info = 0;
+	char short_info = 0;
+	char numeric = 0;
+	char table_shape = 0;
+	char funcs_only = 0;
+	char keys_only = 0;
+	char diac_only = 0;
+
+	progname = argv[0];
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	while ((c = getopt_long(argc, argv,
+		short_opts, long_opts, NULL)) != -1) {
+		switch (c) {
+			case 'i':
+				short_info = 1;
+				break;
+			case 's':
+			case 'l':
+				long_info = 1;
+				break;
+			case 'n':
+				numeric = 1;
+				break;
+			case 'f':
+				table_shape = FULL_TABLE;
+				break;
+			case '1':
+				table_shape = SEPARATE_LINES;
+				break;
+			case 'S':
+				table_shape = atoi(optarg);
+				break;
+			case 't':
+				funcs_only = 1;
+				break;
+			case 'k':
+				keys_only = 1;
+				break;
+			case 'd':
+				diac_only = 1;
+				break;
+			case 'v':
+				verbose = 1;
+				break;
+			case 'c':
+				if ((set_charset(optarg)) != 0)
+					usage();
+				printf("charset \"%s\"\n", optarg);
+				break;
+			case 'h':
+			case '?':
+				usage();
+		}
+	}
+
+	if (optind < argc)
+		usage();
+
+	fd = getfd();
+
+	if (short_info || long_info) {
+		show_short_info();
+		if (long_info)
+			dump_symbols();
+		exit(0);
+	}
+
+#ifdef KDGKBDIACR
+	if (!diac_only) {
+#endif
+	    if (!funcs_only)
+		dump_keys(table_shape, numeric);
+	    if (!keys_only)
+		dump_funcs();
+#ifdef KDGKBDIACR
+	}
+	if (!funcs_only && !keys_only)
+		dump_diacs();
+#endif
+
+	exit(0);
+}
diff --git a/src/ethiopic.syms.h b/src/ethiopic.syms.h
new file mode 100644
index 0000000..928838e
--- /dev/null
+++ b/src/ethiopic.syms.h
@@ -0,0 +1,58 @@
+/*
+ *  This is the Ethiopic Unicode table as per pDAM ISO/IEC JTC1/SC2/WG2 N 1485.
+ *  Ethiopic begins on the 18th "row" of 256 columns in the Unicode specification,
+ *  hence the name choice here.  There are 384 entries that begin at position
+ *  159 in the Ethiopic console fonts.
+ *
+ *  { "iso-10646-18", iso_10646_18_syms, 159 },
+ */
+char* iso_10646_18_syms[] = {  /* 0x1200 - 0x137F */
+    "ethiopic_syllable_ha", "ethiopic_syllable_hu", "ethiopic_syllable_hi", "ethiopic_syllable_haa", "ethiopic_syllable_hee", "ethiopic_syllable_he", "ethiopic_syllable_ho", "",
+    "ethiopic_syllable_la", "ethiopic_syllable_lu", "ethiopic_syllable_li", "ethiopic_syllable_laa", "ethiopic_syllable_lee", "ethiopic_syllable_le", "ethiopic_syllable_lo", "ethiopic_syllable_lwa",
+    "ethiopic_syllable_hha", "ethiopic_syllable_hhu", "ethiopic_syllable_hhi", "ethiopic_syllable_hhaa", "ethiopic_syllable_hhee", "ethiopic_syllable_hhe", "ethiopic_syllable_hho", "ethiopic_syllable_hhwa",
+    "ethiopic_syllable_ma", "ethiopic_syllable_mu", "ethiopic_syllable_mi", "ethiopic_syllable_maa", "ethiopic_syllable_mee", "ethiopic_syllable_me", "ethiopic_syllable_mo", "ethiopic_syllable_mwaa",
+    "ethiopic_syllable_sza", "ethiopic_syllable_szu", "ethiopic_syllable_szi", "ethiopic_syllable_szaa", "ethiopic_syllable_szee", "ethiopic_syllable_sze", "ethiopic_syllable_szo", "ethiopic_syllable_szwa",
+    "ethiopic_syllable_ra", "ethiopic_syllable_ru", "ethiopic_syllable_ri", "ethiopic_syllable_raa", "ethiopic_syllable_ree", "ethiopic_syllable_re", "ethiopic_syllable_ro", "ethiopic_syllable_rwa",
+    "ethiopic_syllable_sa", "ethiopic_syllable_su", "ethiopic_syllable_si", "ethiopic_syllable_saa", "ethiopic_syllable_see", "ethiopic_syllable_se", "ethiopic_syllable_so", "ethiopic_syllable_swa",
+    "ethiopic_syllable_sha", "ethiopic_syllable_shu", "ethiopic_syllable_shi", "ethiopic_syllable_shaa", "ethiopic_syllable_shee", "ethiopic_syllable_she", "ethiopic_syllable_sho", "ethiopic_syllable_shwa",
+    "ethiopic_syllable_qa", "ethiopic_syllable_qu", "ethiopic_syllable_qi", "ethiopic_syllable_qaa", "ethiopic_syllable_qee", "ethiopic_syllable_qe", "ethiopic_syllable_qo", "",
+    "ethiopic_syllable_qwa", "", "ethiopic_syllable_qwi", "ethiopic_syllable_qwaa", "ethiopic_syllable_qwee", "ethiopic_syllable_qwe", "", "",
+    "ethiopic_syllable_qha", "ethiopic_syllable_qhu", "ethiopic_syllable_qhi", "ethiopic_syllable_qhaa", "ethiopic_syllable_qhee", "ethiopic_syllable_qhe", "ethiopic_syllable_qho", "",
+    "ethiopic_syllable_qhwa", "", "ethiopic_syllable_qhwi", "ethiopic_syllable_qhwaa", "ethiopic_syllable_qhwee", "ethiopic_syllable_qhwe", "", "",
+    "ethiopic_syllable_ba", "ethiopic_syllable_bu", "ethiopic_syllable_bi", "ethiopic_syllable_baa", "ethiopic_syllable_bee", "ethiopic_syllable_be", "ethiopic_syllable_bo", "ethiopic_syllable_bwaa",
+    "ethiopic_syllable_va", "ethiopic_syllable_vu", "ethiopic_syllable_vi", "ethiopic_syllable_vaa", "ethiopic_syllable_vee", "ethiopic_syllable_ve", "ethiopic_syllable_vo", "ethiopic_syllable_vwa",
+    "ethiopic_syllable_ta", "ethiopic_syllable_tu", "ethiopic_syllable_ti", "ethiopic_syllable_taa", "ethiopic_syllable_tee", "ethiopic_syllable_te", "ethiopic_syllable_to", "ethiopic_syllable_twa",
+    "ethiopic_syllable_ca", "ethiopic_syllable_cu", "ethiopic_syllable_ci", "ethiopic_syllable_caa", "ethiopic_syllable_cee", "ethiopic_syllable_ce", "ethiopic_syllable_co", "ethiopic_syllable_cwa",
+    "ethiopic_syllable_xa", "ethiopic_syllable_xu", "ethiopic_syllable_xi", "ethiopic_syllable_xaa", "ethiopic_syllable_xee", "ethiopic_syllable_xe", "ethiopic_syllable_xo", "",
+    "ethiopic_syllable_xwa", "", "ethiopic_syllable_xwi", "ethiopic_syllable_xwaa", "ethiopic_syllable_xwee", "ethiopic_syllable_xwe", "", "",
+    "ethiopic_syllable_na", "ethiopic_syllable_nu", "ethiopic_syllable_ni", "ethiopic_syllable_naa", "ethiopic_syllable_nee", "ethiopic_syllable_ne", "ethiopic_syllable_no", "ethiopic_syllable_nwa",
+    "ethiopic_syllable_nya", "ethiopic_syllable_nyu", "ethiopic_syllable_nyi", "ethiopic_syllable_nyaa", "ethiopic_syllable_nyee", "ethiopic_syllable_nye", "ethiopic_syllable_nyo", "ethiopic_syllable_nywa",
+    "ethiopic_syllable_glottal_a", "ethiopic_syllable_glottal_u", "ethiopic_syllable_glottal_i", "ethiopic_syllable_glottal_aa", "ethiopic_syllable_glottal_ee", "ethiopic_syllable_glottal_e", "ethiopic_syllable_glottal_o", "ethiopic_syllable_glottal_wa",
+    "ethiopic_syllable_ka", "ethiopic_syllable_ku", "ethiopic_syllable_ki", "ethiopic_syllable_kaa", "ethiopic_syllable_kee", "ethiopic_syllable_ke", "ethiopic_syllable_ko", "",
+    "ethiopic_syllable_kwa", "", "ethiopic_syllable_kwi", "ethiopic_syllable_kwaa", "ethiopic_syllable_kwee", "ethiopic_syllable_kwe", "", "",
+    "ethiopic_syllable_kxa", "ethiopic_syllable_kxu", "ethiopic_syllable_kxi", "ethiopic_syllable_kxaa", "ethiopic_syllable_kxee", "ethiopic_syllable_kxe", "ethiopic_syllable_kxo", "",
+    "ethiopic_syllable_kxwa", "", "ethiopic_syllable_kxwi", "ethiopic_syllable_kxwaa", "ethiopic_syllable_kxwee", "ethiopic_syllable_kxwe", "", "",
+    "ethiopic_syllable_wa", "ethiopic_syllable_wu", "ethiopic_syllable_wi", "ethiopic_syllable_waa", "ethiopic_syllable_wee", "ethiopic_syllable_we", "ethiopic_syllable_wo", "",
+    "ethiopic_syllable_pharyngeal_a", "ethiopic_syllable_pharyngeal_u", "ethiopic_syllable_pharyngeal_i", "ethiopic_syllable_pharyngeal_aa", "ethiopic_syllable_pharyngeal_ee", "ethiopic_syllable_pharyngeal_e", "ethiopic_syllable_pharyngeal_o", "",
+    "ethiopic_syllable_za", "ethiopic_syllable_zu", "ethiopic_syllable_zi", "ethiopic_syllable_zaa", "ethiopic_syllable_zee", "ethiopic_syllable_ze", "ethiopic_syllable_zo", "ethiopic_syllable_zwa",
+    "ethiopic_syllable_zha", "ethiopic_syllable_zhu", "ethiopic_syllable_zhi", "ethiopic_syllable_zhaa", "ethiopic_syllable_zhee", "ethiopic_syllable_zhe", "ethiopic_syllable_zho", "ethiopic_syllable_zhwa",
+    "ethiopic_syllable_ya", "ethiopic_syllable_yu", "ethiopic_syllable_yi", "ethiopic_syllable_yaa", "ethiopic_syllable_yee", "ethiopic_syllable_ye", "ethiopic_syllable_yo", "",
+    "ethiopic_syllable_da", "ethiopic_syllable_du", "ethiopic_syllable_di", "ethiopic_syllable_daa", "ethiopic_syllable_dee", "ethiopic_syllable_de", "ethiopic_syllable_do", "ethiopic_syllable_dwa",
+    "ethiopic_syllable_dda", "ethiopic_syllable_ddu", "ethiopic_syllable_ddi", "ethiopic_syllable_ddaa", "ethiopic_syllable_ddee", "ethiopic_syllable_dde", "ethiopic_syllable_ddo", "ethiopic_syllable_ddwa",
+    "ethiopic_syllable_ja", "ethiopic_syllable_ju", "ethiopic_syllable_ji", "ethiopic_syllable_jaa", "ethiopic_syllable_jee", "ethiopic_syllable_je", "ethiopic_syllable_jo", "ethiopic_syllable_jwa",
+    "ethiopic_syllable_ga", "ethiopic_syllable_gu", "ethiopic_syllable_gi", "ethiopic_syllable_gaa", "ethiopic_syllable_gee", "ethiopic_syllable_ge", "ethiopic_syllable_go", "",
+    "ethiopic_syllable_gwa", "", "ethiopic_syllable_gwi", "ethiopic_syllable_gwaa", "ethiopic_syllable_gwee", "ethiopic_syllable_gwe", "", "",
+    "ethiopic_syllable_gga", "ethiopic_syllable_ggu", "ethiopic_syllable_ggi", "ethiopic_syllable_ggaa", "ethiopic_syllable_ggee", "ethiopic_syllable_gge", "ethiopic_syllable_ggo", "",
+    "ethiopic_syllable_tha", "ethiopic_syllable_thu", "ethiopic_syllable_thi", "ethiopic_syllable_thaa", "ethiopic_syllable_thee", "ethiopic_syllable_the", "ethiopic_syllable_tho", "ethiopic_syllable_thwa",
+    "ethiopic_syllable_cha", "ethiopic_syllable_chu", "ethiopic_syllable_chi", "ethiopic_syllable_chaa", "ethiopic_syllable_chee", "ethiopic_syllable_che", "ethiopic_syllable_cho", "ethiopic_syllable_chwa",
+    "ethiopic_syllable_pha", "ethiopic_syllable_phu", "ethiopic_syllable_phi", "ethiopic_syllable_phaa", "ethiopic_syllable_phee", "ethiopic_syllable_phe", "ethiopic_syllable_pho", "ethiopic_syllable_phwa",
+    "ethiopic_syllable_tsa", "ethiopic_syllable_tsu", "ethiopic_syllable_tsi", "ethiopic_syllable_tsaa", "ethiopic_syllable_tsee", "ethiopic_syllable_tse", "ethiopic_syllable_tso", "ethiopic_syllable_tswa",
+    "ethiopic_syllable_tza", "ethiopic_syllable_tzu", "ethiopic_syllable_tzi", "ethiopic_syllable_tzaa", "ethiopic_syllable_tzee", "ethiopic_syllable_tze", "ethiopic_syllable_tzo", "",
+    "ethiopic_syllable_fa", "ethiopic_syllable_fu", "ethiopic_syllable_fi", "ethiopic_syllable_faa", "ethiopic_syllable_fee", "ethiopic_syllable_fe", "ethiopic_syllable_fo", "ethiopic_syllable_fwaa",
+    "ethiopic_syllable_pa", "ethiopic_syllable_pu", "ethiopic_syllable_pi", "ethiopic_syllable_paa", "ethiopic_syllable_pee", "ethiopic_syllable_pe", "ethiopic_syllable_po", "ethiopic_syllable_pwaa",
+    "ethiopic_syllable_mya", "ethiopic_syllable_rya", "ethiopic_syllable_fya", "", "", "", "", "",
+    "", "ethiopic_wordspace", "ethiopic_full_stop", "ethiopic_comma", "ethiopic_semicolon", "ethiopic_colon", "ethiopic_preface_colon", "ethiopic_question_mark",
+    "ethiopic_paragraph_separator", "ethiopic_digit_one", "ethiopic_digit_two", "ethiopic_digit_three", "ethiopic_digit_four", "ethiopic_digit_five", "ethiopic_digit_six", "ethiopic_digit_seven",
+    "ethiopic_digit_eight", "ethiopic_digit_nine", "ethiopic_number_ten", "ethiopic_number_twenty", "ethiopic_number_thirty", "ethiopic_number_forty", "ethiopic_number_fifty", "ethiopic_number_sixty",
+    "ethiopic_number_seventy", "ethiopic_number_eighty", "ethiopic_number_ninety", "ethiopic_number_hundred", "ethiopic_number_ten_thousand", "", "", ""
+};
diff --git a/src/fgconsole.c b/src/fgconsole.c
new file mode 100644
index 0000000..f845974
--- /dev/null
+++ b/src/fgconsole.c
@@ -0,0 +1,23 @@
+/*
+ * fgconsole.c - aeb - 960123 - Print foreground console
+ */
+#include <sys/ioctl.h>
+#include <linux/vt.h>
+#include "nls.h"
+
+int
+main(){
+    struct vt_stat vtstat;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    /* replace 0 by getfd() for a somewhat more robust version */
+    if (ioctl(0, VT_GETSTATE, &vtstat)) {
+        perror("fgconsole: VT_GETSTATE");
+	exit(1);
+    }
+    printf("%d\n", vtstat.v_active);
+    return 0;
+}
diff --git a/src/findfile.c b/src/findfile.c
new file mode 100644
index 0000000..dd5b5c8
--- /dev/null
+++ b/src/findfile.c
@@ -0,0 +1,236 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include "nls.h"
+
+void *
+xmalloc(size_t n) {
+	void *p = malloc(n);
+	if (p == NULL) {
+		fprintf(stderr, _("Out of Memory\n"));
+		exit(1);
+	}
+	return p;
+}
+
+char *
+xstrdup(char *p) {
+	char *q = strdup(p);
+	if (q == NULL) {
+		fprintf(stderr, _("Out of Memory?\n"));
+		exit(1);
+	}
+	return q;
+}
+
+char pathname[1024];
+static int ispipe;
+
+void fpclose(FILE *fp) {
+	if (ispipe)
+	     pclose(fp);
+	else
+	     fclose(fp);
+}
+
+#define SIZE(a) (sizeof(a)/sizeof(a[0]))
+
+static struct decompressor {
+	char *ext;		/* starts with `.', has no other dots */
+	char *cmd;
+} decompressors[] = {
+	{ ".gz", "gzip -d -c" },
+	{ ".bz2", "bzip2 -d -c" },
+	{ 0, 0 }
+};
+
+static FILE *
+pipe_open(struct decompressor *dc) {
+	char *pipe_cmd;
+	FILE *fp;
+
+	ispipe = 1;
+	pipe_cmd = xmalloc(strlen(dc->cmd) + strlen(pathname) + 2);
+	sprintf(pipe_cmd, "%s %s", dc->cmd, pathname);
+	fp = popen(pipe_cmd, "r");
+	if (fp == NULL)
+		fprintf(stderr, _("error executing  %s\n"), pipe_cmd);
+	return fp;
+}
+
+/* If a file PATHNAME exists, then open it.
+   If is has a `compressed' extension, then open a pipe reading it */
+static FILE *
+maybe_pipe_open(void) {
+	FILE *fp;
+	char *t;
+	struct decompressor *dc;
+
+	if ((fp = fopen(pathname, "r")) != NULL) {
+	    t = rindex(pathname, '.');
+	    if (t) {
+		for (dc = &decompressors[0]; dc->cmd; dc++)
+		    if (strcmp(t, dc->ext) == 0) {
+			fclose(fp);
+			return pipe_open(dc);
+		    }
+	    }
+	}
+	return fp;
+}
+
+static FILE *
+findfile_in_dir(char *fnam, char *dir, int recdepth, char **suf) {
+	FILE *fp = NULL;
+	DIR *d;
+	struct dirent *de;
+	char *ff, *fdir, *p, *q, **sp;
+	struct decompressor *dc;
+
+	ispipe = 0;
+
+	ff = index(fnam, '/');
+	if (ff) {
+		fdir = xstrdup(fnam);
+		fdir[ff-fnam] = 0; 	/* caller guarantees fdir != "" */
+	} else
+		fdir = 0;		/* just to please gcc */
+
+	d = opendir(dir);
+	if (d == NULL)
+	    return NULL;
+	while ((de = readdir(d)) != NULL) {
+	    int okdir;
+
+	    if (strcmp(de->d_name, ".") == 0 ||
+		strcmp(de->d_name, "..") == 0)
+		continue;
+
+	    if (strlen(dir) + strlen(de->d_name) + 2 > sizeof(pathname))
+		continue;
+
+	    okdir = (ff && strcmp(de->d_name, fdir) == 0);
+
+	    if (recdepth || okdir) {
+       		struct stat statbuf;
+		char *a;
+
+		a = xmalloc(strlen(dir) + strlen(de->d_name) + 2);
+		sprintf(a, "%s/%s", dir, de->d_name);
+		if (stat(a, &statbuf) == 0 &&
+		    S_ISDIR(statbuf.st_mode)) {
+			if (okdir)
+				fp = findfile_in_dir(ff+1, a, 0, suf);
+			if (!fp && recdepth)
+				fp = findfile_in_dir(fnam, a, recdepth-1, suf);
+			if (fp)
+				return fp;
+		}
+		free(a);
+	    }
+
+	    /* Should we be in a subdirectory? */
+	    if (ff)
+		    continue;
+
+	    /* Does d_name start right? */
+	    p = &de->d_name[0];
+	    q = fnam;
+	    while (*p && *p == *q) p++,q++;
+	    if (*q)
+		    continue;
+
+	    sprintf(pathname, "%s/%s", dir, de->d_name);
+
+	    /* Does tail consist of a known suffix and possibly
+	       a compression suffix? */
+	    for(sp = suf; *sp; sp++) {
+		    int l;
+
+		    if (!strcmp(p, *sp))
+			    return maybe_pipe_open();
+
+		    l = strlen(*sp);
+		    if (strncmp(p,*sp,l) == 0) {
+			for (dc = &decompressors[0]; dc->cmd; dc++)
+			    if (strcmp(p+l, dc->ext) == 0)
+				return pipe_open(dc);
+		    }
+	    }
+	}
+	return NULL;
+}
+
+/* find input file; leave name in pathname[] */
+FILE *findfile(char *fnam, char **dirpath, char **suffixes) {
+        char **dp, *dir, **sp;
+	FILE *fp;
+	int dl, recdepth;
+	struct decompressor *dc;
+
+	if (strlen(fnam) >= sizeof(pathname))
+		return NULL;
+
+	/* Try explicitly given name first */
+	strcpy(pathname, fnam);
+	fp = maybe_pipe_open();
+	if (fp)
+		return fp;
+
+	/* Test for full pathname - opening it failed, so need suffix */
+	/* (This is just nonsense, for backwards compatibility.) */
+	if (*fnam == '/') {
+	    for (sp = suffixes; *sp; sp++) {
+		if (strlen(fnam) + strlen(*sp) + 1 > sizeof(pathname))
+		    continue;
+		if (*sp == 0)
+		    continue;	/* we tried it already */
+		sprintf(pathname, "%s%s", fnam, *sp);
+		if((fp = fopen(pathname, "r")) != NULL)
+		    return fp;
+	    }
+
+	    for (sp = suffixes; *sp; sp++) {
+		for (dc = &decompressors[0]; dc->cmd; dc++) {
+		    if (strlen(fnam) + strlen(*sp)
+			+ strlen(dc->ext) + 1 > sizeof(pathname))
+			    continue;
+		    sprintf(pathname, "%s%s%s", fnam, *sp, dc->ext);
+		    if ((fp = fopen(pathname, "r")) != NULL) {
+			    fclose(fp);
+			    return pipe_open(dc);
+		    }
+		}
+	    }
+
+	    return NULL;
+	}
+
+	/* Search a list of directories and directory hierarchies */
+	for (dp = dirpath; *dp; dp++) {
+
+	    /* delete trailing slashes; trailing stars denote recursion */
+	    dir = xstrdup(*dp);
+	    dl = strlen(dir);
+	    recdepth = 0;
+	    while (dl && dir[dl-1] == '*') {
+		    dir[--dl] = 0;
+		    recdepth++;
+	    }
+	    if (dl == 0) {
+		    dir = ".";
+	    } else if (dl > 1 && dir[dl-1] == '/') {
+		    dir[dl-1] = 0;
+	    }
+
+	    fp = findfile_in_dir(fnam, dir, recdepth, suffixes);
+	    if (fp)
+		    return fp;
+	}
+
+	return NULL;
+}
diff --git a/src/getfd.c b/src/getfd.c
new file mode 100644
index 0000000..e714f5e
--- /dev/null
+++ b/src/getfd.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <linux/kd.h>
+#include <sys/ioctl.h>
+#include "nls.h"
+
+/*
+ * getfd.c
+ *
+ * Get an fd for use with kbd/console ioctls.
+ * We try several things because opening /dev/console will fail
+ * if someone else used X (which does a chown on /dev/console).
+ */
+
+static int
+is_a_console(int fd) {
+    char arg;
+
+    arg = 0;
+    return (ioctl(fd, KDGKBTYPE, &arg) == 0
+	    && ((arg == KB_101) || (arg == KB_84)));
+}
+
+static int
+open_a_console(char *fnam) {
+    int fd;
+
+    fd = open(fnam, O_RDONLY);
+    if (fd < 0 && errno == EACCES)
+      fd = open(fnam, O_WRONLY);
+    if (fd < 0 || ! is_a_console(fd))
+      return -1;
+    return fd;
+}
+
+int getfd() {
+    int fd;
+
+    fd = open_a_console("/dev/tty");
+    if (fd >= 0)
+      return fd;
+
+    fd = open_a_console("/dev/tty0");
+    if (fd >= 0)
+      return fd;
+
+    fd = open_a_console("/dev/console");
+    if (fd >= 0)
+      return fd;
+
+    for (fd = 0; fd < 3; fd++)
+      if (is_a_console(fd))
+	return fd;
+
+    fprintf(stderr,
+	    _("Couldnt get a file descriptor referring to the console\n"));
+    exit(1);		/* total failure */
+}
diff --git a/src/getkeycodes.c b/src/getkeycodes.c
new file mode 100644
index 0000000..27b029a
--- /dev/null
+++ b/src/getkeycodes.c
@@ -0,0 +1,68 @@
+/*
+ * call: getkeycodes
+ *
+ * aeb, 941108
+ */
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/kd.h>
+#include "nls.h"
+
+extern int getfd(void);
+
+void
+usage(void) {
+    fprintf(stderr, _("usage: getkeycodes\n"));
+    exit(1);
+}
+
+int
+main(int argc, char **argv) {
+    int fd, sc;
+    struct kbkeycode a;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (argc != 1)
+      usage();
+    fd = getfd();
+    printf(_("Plain scancodes xx (hex) versus keycodes (dec)\n"));
+    printf(_("0 is an error; for 1-88 (0x01-0x58) scancode equals keycode\n"));
+
+    for(sc=88; sc<256; sc++) {
+	if (sc == 128)
+	  printf(_("\n\nEscaped scancodes e0 xx (hex)\n"));
+	if (sc % 8 == 0) {
+	    if (sc < 128)
+	      printf("\n 0x%02x: ", sc);
+	    else
+	      printf("\ne0 %02x: ", sc-128);
+	}
+
+	if (sc <= 88) {
+	    printf(" %3d", sc);
+	    continue;
+	}
+
+	a.scancode = sc;
+	a.keycode = 0;
+	if (ioctl(fd,KDGETKEYCODE,&a)) {
+	    if (errno == EINVAL)
+	      printf("   -");
+	    else {
+		perror("KDGETKEYCODE");
+		fprintf(stderr, _("failed to get keycode for scancode 0x%x\n"),
+			sc);
+		exit(1);
+	    }
+	} else
+	  printf(" %3d", a.keycode);
+    }
+    printf("\n");
+    return 0;
+}
diff --git a/src/getunimap.c b/src/getunimap.c
new file mode 100644
index 0000000..c355477
--- /dev/null
+++ b/src/getunimap.c
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <errno.h>
+#include <asm/ioctls.h>
+#include <linux/kd.h>
+#include "nls.h"
+
+#ifndef USE_LIBC
+/* There is such function in libc5 but it doesn't work for me [libc 5.4.13] */
+#include "wctomb.c"
+#define wctomb our_wctomb
+#endif
+
+extern int getfd();
+extern char *malloc();
+
+main(){
+    char mb[]={0,0,0,0,0,0,0,0};
+    unsigned mb_length;
+    int fd, ct;
+    struct unimapdesc ud;
+    int i;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    fd = getfd();
+
+    ud.entry_ct = ct = 0;
+    ud.entries = 0;
+    if (ioctl(fd, GIO_UNIMAP, &ud)) {
+	if (errno != ENOMEM) {
+	    perror("GIO_UNIMAP");
+	    exit(1);
+	}
+	ct = ud.entry_ct;
+	ud.entries = (struct unipair *) malloc(ct * sizeof(struct unipair));
+	if (ioctl(fd, GIO_UNIMAP, &ud)) {
+	    perror("GIO_UNIMAP (2)");
+	    exit(1);
+	}
+	if (ct != ud.entry_ct)
+	  fprintf(stderr, _("strange... ct changed from %d to %d\n"),
+		  ct, ud.entry_ct);
+
+	/* someone could change the unimap between our
+	   first and second ioctl, so the above errors
+	   are not impossible */
+    }
+    printf("# count=%d\n", ud.entry_ct);
+    for(i=0; i<ud.entry_ct && i<ct; i++) {
+	 mb_length=wctomb (mb, ud.entries[i].unicode);
+	 mb[ (mb_length > 6) ? 0 : mb_length ] = 0 ;
+	 printf("0x%03x\tU+%04x\t# %s \n", ud.entries[i].fontpos,
+		ud.entries[i].unicode, mb);
+    }
+}
diff --git a/src/kbd_mode.c b/src/kbd_mode.c
new file mode 100644
index 0000000..6799a9e
--- /dev/null
+++ b/src/kbd_mode.c
@@ -0,0 +1,79 @@
+/*
+ * kbd_mode: report and set keyboard mode - aeb, 940406
+ * 
+ * If you make \215A\201 an alias for "kbd_mode -a", and you are
+ * in raw mode, then hitting F7 = (two keys) will return you to sanity.
+ */
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <linux/types.h>
+#include <linux/kd.h>
+#include "nls.h"
+
+char *progname;
+
+extern int getfd(void);
+
+void
+usage(){
+    fprintf(stderr, _("usage: kbd_mode [-a|-u|-k|-s]\n"));
+    exit(1);
+}
+
+int
+main(int argc, char *argv[]){
+        int fd, mode;
+
+	progname = argv[0];
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	fd = getfd();
+
+	if (argc == 1) {
+	    /* report mode */
+	    if (ioctl(fd, KDGKBMODE, &mode)) {
+		perror("KDGKBMODE");
+	        fprintf(stderr, _("kbd_mode: error reading keyboard mode\n"));
+		exit(1);
+	    }
+	    switch(mode) {
+	      case K_RAW:
+		printf(_("The keyboard is in raw (scancode) mode\n"));
+		break;
+	      case K_MEDIUMRAW:
+		printf(_("The keyboard is in mediumraw (keycode) mode\n"));
+		break;
+	      case K_XLATE:
+		printf(_("The keyboard is in the default (ASCII) mode\n"));
+		break;
+	      case K_UNICODE:
+		printf(_("The keyboard is in Unicode (UTF-8) mode\n"));
+		break;
+	      default:
+		printf(_("The keyboard is in some unknown mode\n"));
+	    }
+	    exit(1);
+	}
+	if (argc != 2)
+	  usage();
+	if (!strcmp(argv[1], "-a"))
+	  mode = K_XLATE;
+	else if (!strcmp(argv[1], "-u"))
+	  mode = K_UNICODE;
+	else if (!strcmp(argv[1], "-s"))
+	  mode = K_RAW;
+	else if (!strcmp(argv[1], "-k"))
+	  mode = K_MEDIUMRAW;
+	else
+	  usage();
+	if (ioctl(fd, KDSKBMODE, mode)) {
+		perror("KDSKBMODE");
+		fprintf(stderr, _("%s: error setting keyboard mode\n"), progname);
+		exit(1);
+	}
+	exit(0);
+}
diff --git a/src/kdfontop.c b/src/kdfontop.c
new file mode 100644
index 0000000..e524d80
--- /dev/null
+++ b/src/kdfontop.c
@@ -0,0 +1,223 @@
+/* Font handling differs between various kernel versions */
+#include <stdio.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <linux/kd.h>
+#include "nls.h"
+
+/*
+ * Linux pre-0.96 introduced, and 1.1.63 removed the defines
+ * #define GIO_FONT8x8     0x4B28
+ * #define PIO_FONT8x8     0x4B29
+ * #define GIO_FONT8x14    0x4B2A
+ * #define PIO_FONT8x14    0x4B2B
+ * #define GIO_FONT8x16    0x4B2C
+ * #define PIO_FONT8x16    0x4B2D
+ * but these ioctls have never been implemented.
+ */
+
+/*
+ * Linux 0.99.15 introduces the GIO_FONT and PIO_FONT ioctls.
+ * Usage:
+	char buf[8192];
+	ioctl(fd, GIO_FONT, buf);
+ * to get 256*32=8192 bytes of data for 256 characters,
+ * 32 for each symbol, of which only the first H are used
+ * for an 8xH font.
+ * Changes in use: 1.1.74: you have to be root for PIO_FONT.
+ */
+#ifndef GIO_FONT
+#define GIO_FONT        0x4B60
+#define PIO_FONT        0x4B61
+#endif
+
+/*
+ * Linux 1.3.1 introduces 512-character fonts and the
+ * GIO_FONTX and PIO_FONTX ioctls to read and load them.
+ * The PIO_FONTX ioctl also adjusts screen character height.
+ * Usage:
+	char buf[16384];
+	struct consolefontdesc cfd;
+	cfd.charcount = fontsize;
+	cfd.charheight = height;
+	cfd.chardata = buf;
+	ioctl(fd, PIO_FONTX, &cfd);
+ * and
+	char buf[32*N];
+	cfd.charcount = N;
+	cfd.chardata = buf;
+	ioctl(fd, GIO_FONTX, &cfd);
+ * (where the ioctl will fail if N was too small);
+ * the ioctl fills cfd.charcount and cfd.charheight.
+ * With GIO_FONTX, the chardata pointer may be NULL.
+ * The old GIO_FONT will fail if the fontsize is 512.
+ */
+#ifndef GIO_FONTX
+#define GIO_FONTX  0x4B6B
+#define PIO_FONTX  0x4B6C
+struct consolefontdesc {
+	unsigned short charcount;
+	unsigned short charheight;
+	char *chardata;
+};
+#endif
+
+/*
+ * Linux 1.3.28 introduces the PIO_FONTRESET ioctl.
+ * Usage:
+	ioctl(fd, PIO_FONTRESET, 0);
+ * The default font is kept in slot 0 of the video card character ROM,
+ * and is never touched.
+ * A custom font is loaded in slot 2 (256 char) or 2:3 (512 char).
+ *
+ * However, 1.3.30 takes this away again by hiding it behind
+ * #ifndef BROKEN_GRAPHICS_PROGRAMS, while in fact this variable
+ * is defined (in vt_kern.h).  Now by default every font lives in
+ * slot 0 (256 char) or 0:1 (512 char).
+ * And these days (2.2pre), even if BROKEN_GRAPHICS_PROGRAMS is undefined,
+ * the PIO_FONTRESET does not work since it is not implemented for vgacon.
+ *
+ * In other words, this ioctl is totally useless today.
+ */
+#ifndef PIO_FONTRESET
+#define PIO_FONTRESET   0x4B6D  /* reset to default font */
+#endif
+
+/*
+ * Linux 2.1.111 introduces the KDFONTOP ioctl.
+ * Details of use have changed a bit in 2.1.111-115,124.
+ * Usage:
+	struct console_font_op cfo;
+	ioctl(fd, KDFONTOP, &cfo);
+ */
+#ifndef KDFONTOP
+#define KDFONTOP 0x4B72
+struct console_font_op {
+        unsigned int op;	/* KD_FONT_OP_* */
+        unsigned int flags;	/* KD_FONT_FLAG_* */
+        unsigned int width, height;
+        unsigned int charcount;
+        unsigned char *data;	/* font data with height fixed to 32 */
+};
+
+#define KD_FONT_OP_SET          0     /* Set font */
+#define KD_FONT_OP_GET          1     /* Get font */
+#define KD_FONT_OP_SET_DEFAULT  2     /* Set font to default,
+					 data points to name / NULL */
+#define KD_FONT_OP_COPY         3     /* Copy from another console */
+
+#define KD_FONT_FLAG_DONT_RECALC 1    /* Don't call adjust_height() */
+			  /* (Used internally for PIO_FONT support) */
+#endif /* KDFONTOP */
+
+int
+font_charheight(char *buf, int count) {
+	int h, i;
+
+	for (h = 32; h > 0; h--)
+		for (i = 0; i < count; i++)
+			if (buf[32*i+h-1])
+				goto nonzero;
+ nonzero:
+	return h;
+}
+	
+
+int
+getfont(int fd, char *buf, int *count) {
+	struct consolefontdesc cfd;
+	struct console_font_op cfo;
+	int i;
+
+	/* First attempt: KDFONTOP */
+	cfo.op = KD_FONT_OP_GET;
+	cfo.flags = 0;
+	cfo.width = cfo.height = 0;
+	cfo.charcount = *count;
+	cfo.data = buf;
+	i = ioctl(fd, KDFONTOP, &cfo);
+	if (i == 0) {
+		*count = cfo.charcount;
+		return 0;
+	}
+	if (errno != ENOSYS && errno != EINVAL) {
+		perror("setfont: KDFONTOP");
+		return -1;
+	}
+
+	/* Second attempt: GIO_FONTX */
+	cfd.charcount = *count;
+	cfd.charheight = 0;
+	cfd.chardata = buf;
+	i = ioctl(fd, GIO_FONTX, &cfd);
+	if (i == 0) {
+		*count = cfd.charcount;
+		return 0;
+	}
+	if (errno != ENOSYS && errno != EINVAL) {
+		perror("setfont: GIO_FONTX");
+		return -1;
+	}
+
+	/* Third attempt: GIO_FONT */
+	if (*count < 256) {
+		fprintf(stderr, _("setfont bug: getfont called with count<256\n"));
+		exit(1);
+	}
+	i = ioctl(fd, GIO_FONT, buf);
+	if (i) {
+		perror("setfont: GIO_FONT");
+		return -1;
+	}
+	*count = 256;
+	return 0;
+}
+
+int
+putfont(int fd, char *buf, int count, int height) {
+	struct consolefontdesc cfd;
+	struct console_font_op cfo;
+	int i;
+
+	if (!height)
+		height = font_charheight(buf, count);
+
+	/* First attempt: KDFONTOP */
+	cfo.op = KD_FONT_OP_SET;
+	cfo.flags = 0;
+	cfo.width = 8;
+	cfo.height = height;
+	cfo.charcount = count;
+	cfo.data = buf;
+	i = ioctl(fd, KDFONTOP, &cfo);
+	if (i == 0)
+		return 0;
+	if (errno != ENOSYS && errno != EINVAL) {
+		perror("setfont: KDFONTOP");
+		return -1;
+	}
+
+	/* Second attempt: PIO_FONTX */
+	cfd.charcount = count;
+	cfd.charheight = height;
+	cfd.chardata = buf;
+	i = ioctl(fd, PIO_FONTX, &cfd);
+	if (i == 0)
+		return 0;
+	if (errno != ENOSYS && errno != EINVAL) {
+		perror("setfont: PIO_FONTX");
+		return -1;
+	}
+
+	/* Third attempt: PIO_FONT */
+	if (count < 256) {
+		fprintf(stderr, _("setfont bug: getfont called with count<256\n"));
+		exit(1);
+	}
+	i = ioctl(fd, PIO_FONT, buf);
+	if (i) {
+		perror("setfont: PIO_FONT");
+		return -1;
+	}
+	return 0;
+}
diff --git a/src/ksyms.c b/src/ksyms.c
new file mode 100644
index 0000000..e516cd0
--- /dev/null
+++ b/src/ksyms.c
@@ -0,0 +1,912 @@
+#include <linux/keyboard.h>
+#include <stdio.h>
+#include <string.h>
+#include "ksyms.h"
+#include "nls.h"
+
+static char *latin1_syms[] = {
+	"nul",
+	"Control_a",
+	"Control_b",
+	"Control_c",
+	"Control_d",
+	"Control_e",
+	"Control_f",
+	"Control_g",
+	"BackSpace",
+	"Tab",
+	"Linefeed",
+	"Control_k",
+	"Control_l",
+	"Control_m",
+	"Control_n",
+	"Control_o",
+	"Control_p",
+	"Control_q",
+	"Control_r",
+	"Control_s",
+	"Control_t",
+	"Control_u",
+	"Control_v",
+	"Control_w",
+	"Control_x",
+	"Control_y",
+	"Control_z",
+	"Escape",
+	"Control_backslash",
+	"Control_bracketright",
+	"Control_asciicircum",
+	"Control_underscore",
+	"space",
+	"exclam",
+	"quotedbl",
+	"numbersign",
+	"dollar",
+	"percent",
+	"ampersand",
+	"apostrophe",
+	"parenleft",
+	"parenright",
+	"asterisk",
+	"plus",
+	"comma",
+	"minus",
+	"period",
+	"slash",
+	"zero",
+	"one",
+	"two",
+	"three",
+	"four",
+	"five",
+	"six",
+	"seven",
+	"eight",
+	"nine",
+	"colon",
+	"semicolon",
+	"less",
+	"equal",
+	"greater",
+	"question",
+	"at",
+	"A",
+	"B",
+	"C",
+	"D",
+	"E",
+	"F",
+	"G",
+	"H",
+	"I",
+	"J",
+	"K",
+	"L",
+	"M",
+	"N",
+	"O",
+	"P",
+	"Q",
+	"R",
+	"S",
+	"T",
+	"U",
+	"V",
+	"W",
+	"X",
+	"Y",
+	"Z",
+	"bracketleft",
+	"backslash",
+	"bracketright",
+	"asciicircum",
+	"underscore",
+	"grave",
+	"a",
+	"b",
+	"c",
+	"d",
+	"e",
+	"f",
+	"g",
+	"h",
+	"i",
+	"j",
+	"k",
+	"l",
+	"m",
+	"n",
+	"o",
+	"p",
+	"q",
+	"r",
+	"s",
+	"t",
+	"u",
+	"v",
+	"w",
+	"x",
+	"y",
+	"z",
+	"braceleft",
+	"bar",
+	"braceright",
+	"asciitilde",
+	"Delete",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"nobreakspace",
+	"exclamdown",
+	"cent",
+	"sterling",
+	"currency",
+	"yen",
+	"brokenbar",
+	"section",
+	"diaeresis",
+	"copyright",
+	"ordfeminine",
+	"guillemotleft",
+	"notsign",
+	"hyphen",
+	"registered",
+	"macron",
+	"degree",
+	"plusminus",
+	"twosuperior",
+	"threesuperior",
+	"acute",
+	"mu",
+	"paragraph",
+	"periodcentered",
+	"cedilla",
+	"onesuperior",
+	"masculine",
+	"guillemotright",
+	"onequarter",
+	"onehalf",
+	"threequarters",
+	"questiondown",
+	"Agrave",
+	"Aacute",
+	"Acircumflex",
+	"Atilde",
+	"Adiaeresis",
+	"Aring",
+	"AE",
+	"Ccedilla",
+	"Egrave",
+	"Eacute",
+	"Ecircumflex",
+	"Ediaeresis",
+	"Igrave",
+	"Iacute",
+	"Icircumflex",
+	"Idiaeresis",
+	"ETH",
+	"Ntilde",
+	"Ograve",
+	"Oacute",
+	"Ocircumflex",
+	"Otilde",
+	"Odiaeresis",
+	"multiply",
+	"Ooblique",
+	"Ugrave",
+	"Uacute",
+	"Ucircumflex",
+	"Udiaeresis",
+	"Yacute",
+	"THORN",
+	"ssharp",
+	"agrave",
+	"aacute",
+	"acircumflex",
+	"atilde",
+	"adiaeresis",
+	"aring",
+	"ae",
+	"ccedilla",
+	"egrave",
+	"eacute",
+	"ecircumflex",
+	"ediaeresis",
+	"igrave",
+	"iacute",
+	"icircumflex",
+	"idiaeresis",
+	"eth",
+	"ntilde",
+	"ograve",
+	"oacute",
+	"ocircumflex",
+	"otilde",
+	"odiaeresis",
+	"division",
+	"oslash",
+	"ugrave",
+	"uacute",
+	"ucircumflex",
+	"udiaeresis",
+	"yacute",
+	"thorn",
+	"ydiaeresis"
+};
+
+static char *latin2_syms[] = {
+    "", "Aogonek", "breve", "Lstroke", "", "Lcaron", "Sacute", "",
+    "", "Scaron", "Scedilla", "Tcaron", "Zacute", "", "Zcaron", "Zabovedot",
+    "", "aogonek", "ogonek", "lstroke", "", "lcaron", "sacute", "caron",
+    "", "scaron", "scedilla", "tcaron", "zacute", "doubleacute", "zcaron", "zabovedot",
+    "Racute", "", "", "Abreve", "", "Lacute", "Cacute", "",
+    "Ccaron", "", "Eogonek", "", "Ecaron", "", "", "Dcaron",
+    "Dstroke", "Nacute", "Ncaron", "", "", "Odoubleacute", "", "",
+    "Rcaron", "Uring", "", "Udoubleacute", "", "", "Tcedilla", "",
+    "racute", "", "", "abreve", "", "lacute", "cacute", "",
+    "ccaron", "", "eogonek", "", "ecaron", "", "", "dcaron",
+    "dstroke", "nacute", "ncaron", "", "", "odoubleacute", "", "",
+    "rcaron", "uring", "", "udoubleacute", "", "", "tcedilla", "abovedot"
+};
+
+static char *mazovia_syms[] = { /* as specified by Wlodek Bzyl <matwb@univ.gda.pl> */
+    "", "", "", "", "", "", "aogonek", "", /* 8x */
+    "", "", "", "", "", "cacute", "", "Aogonek",
+    "Eogonek", "eogonek", "lstroke", "", "", "Cacute", "", "", /* 9x */
+    "Sacute", "", "", "", "Lstroke", "", "sacute", "",
+    "Zacute", "Zabovedot", "oacute", "Oacute",
+    "nacute", "Nacute", "zacute", "zabovedot", /* ax */
+    "", "", "", "", "", "", "guillemotleft", "guillemotright",
+    "", "", "", "", "", "", "", "", /* bx */
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "", /* cx */
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "", /* dx */
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "", /* ex */
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "", /* fx */
+    "", "", "", "", "", "", "", "quotedblbase"
+};
+
+static char *latin3_syms[] = {
+    "", "Hstroke", "", "", "", "", "Hcircumflex", "",
+    "", "Iabovedot", "", "Gbreve", "Jcircumflex", "", "", "",
+    "", "hstroke", "", "", "", "", "hcircumflex", "",
+    "", "idotless", "", "gbreve", "jcircumflex", "", "", "",
+    "", "", "", "", "", "Cabovedot", "Ccircumflex", "",
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "Gabovedot", "", "",
+    "Gcircumflex", "", "", "", "", "Ubreve", "Scircumflex", "",
+    "", "", "", "", "", "cabovedot", "ccircumflex", "",
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "gabovedot", "", "",
+    "gcircumflex", "", "", "", "", "ubreve", "scircumflex", ""
+};
+
+static char *latin4_syms[] = {
+    "", "", "kra", "Rcedilla", "", "Itilde", "Lcedilla", "",
+    "", "", "Emacron", "Gcedilla", "Tslash", "", "", "",
+    "", "", "", "rcedilla", "", "itilde", "lcedilla", "",
+    "", "", "emacron", "gcedilla", "tslash", "ENG", "", "eng",
+    "Amacron", "", "", "", "", "", "", "Iogonek",
+    "", "", "", "", "Eabovedot", "", "", "Imacron",
+    "", "Ncedilla", "Omacron", "Kcedilla", "", "", "", "",
+    "", "Uogonek", "", "", "", "Utilde", "Umacron", "",
+    "amacron", "", "", "", "", "", "", "iogonek",
+    "", "", "", "", "eabovedot", "", "", "imacron",
+    "", "ncedilla", "omacron", "kcedilla", "", "", "", "",
+    "", "uogonek", "", "", "", "utilde", "umacron", ""
+};
+
+static char *iso_8859_5_syms[] = { /* 160-255 */
+    "no-break_space",					/* 0240 */
+    "cyrillic_capital_letter_io",
+    "serbocroatian_cyrillic_capital_letter_dje",
+    "macedonian_cyrillic_capital_letter_gje",
+    "ukrainian_cyrillic_capital_letter_ie",
+    "macedonian_cyrillic_capital_letter_dze",
+    "ukrainian_cyrillic_capital_letter_i",
+    "ukrainian_cyrillic_capital_letter_yi",
+    "cyrillic_capital_letter_je", 			/* 0250 */
+    "cyrillic_capital_letter_lje",
+    "cyrillic_capital_letter_nje",
+    "serbocroatian_cyrillic_capital_letter_chje",
+    "macedonian_cyrillic_capital_letter_kje",
+    "soft_hyphen",
+    "bielorussian_cyrillic_capital_letter_short_u",
+    "cyrillic_capital_letter_dze",
+    "cyrillic_capital_letter_a", 			/* 0260 */
+    "cyrillic_capital_letter_be",
+    "cyrillic_capital_letter_ve",
+    "cyrillic_capital_letter_ghe",
+    "cyrillic_capital_letter_de",
+    "cyrillic_capital_letter_ie",
+    "cyrillic_capital_letter_zhe",
+    "cyrillic_capital_letter_ze",
+    "cyrillic_capital_letter_i", 			/* 0270 */
+    "cyrillic_capital_letter_short_i",
+    "cyrillic_capital_letter_ka",
+    "cyrillic_capital_letter_el",
+    "cyrillic_capital_letter_em",
+    "cyrillic_capital_letter_en",
+    "cyrillic_capital_letter_o",
+    "cyrillic_capital_letter_pe",
+    "cyrillic_capital_letter_er", 			/* 0300 */
+    "cyrillic_capital_letter_es",
+    "cyrillic_capital_letter_te",
+    "cyrillic_capital_letter_u",
+    "cyrillic_capital_letter_ef",
+    "cyrillic_capital_letter_ha",
+    "cyrillic_capital_letter_tse",
+    "cyrillic_capital_letter_che",
+    "cyrillic_capital_letter_sha", 			/* 0310 */
+    "cyrillic_capital_letter_shcha",
+    "cyrillic_capital_hard_sign",
+    "cyrillic_capital_letter_yeru",
+    "cyrillic_capital_soft_sign",
+    "cyrillic_capital_letter_e",
+    "cyrillic_capital_letter_yu",
+    "cyrillic_capital_letter_ya",
+    "cyrillic_small_letter_a",				/* 0320 */
+    "cyrillic_small_letter_be",
+    "cyrillic_small_letter_ve",
+    "cyrillic_small_letter_ghe",
+    "cyrillic_small_letter_de",
+    "cyrillic_small_letter_ie",
+    "cyrillic_small_letter_zhe",
+    "cyrillic_small_letter_ze",
+    "cyrillic_small_letter_i",				/* 0330 */
+    "cyrillic_small_letter_short_i",
+    "cyrillic_small_letter_ka",
+    "cyrillic_small_letter_el",
+    "cyrillic_small_letter_em",
+    "cyrillic_small_letter_en",
+    "cyrillic_small_letter_o",
+    "cyrillic_small_letter_pe",
+    "cyrillic_small_letter_er",				/* 0340 */
+    "cyrillic_small_letter_es",
+    "cyrillic_small_letter_te",
+    "cyrillic_small_letter_u",
+    "cyrillic_small_letter_ef",
+    "cyrillic_small_letter_ha",
+    "cyrillic_small_letter_tse",
+    "cyrillic_small_letter_che",
+    "cyrillic_small_letter_sha", 			/* 0350 */
+    "cyrillic_small_letter_shcha",
+    "cyrillic_small_hard_sign",
+    "cyrillic_small_letter_yeru",
+    "cyrillic_small_soft_sign",
+    "cyrillic_small_letter_e",
+    "cyrillic_small_letter_yu",
+    "cyrillic_small_letter_ya",
+    "number_acronym",					/* 0360 */
+    "cyrillic_small_letter_io",
+    "serbocroatian_cyrillic_small_letter_dje",
+    "macedonian_cyrillic_small_letter_gje",
+    "ukrainian_cyrillic_small_letter_ie",
+    "macedonian_cyrillic_small_letter_dze",
+    "ukrainian_cyrillic_small_letter_i",
+    "ukrainian_cyrillic_small_letter_yi",
+    "cyrillic_small_letter_je",				/* 0370 */
+    "cyrillic_small_letter_lje",
+    "cyrillic_small_letter_nje",
+    "serbocroatian_cyrillic_small_letter_chje",
+    "macedonian_cyrillic_small_letter_kje",
+    "paragraph_sign",
+    "bielorussian_cyrillic_small_letter_short_u", 	/* printing error in ECMA-113 */
+    "cyrillic_small_letter_dze"
+};
+
+static char *iso_8859_7_syms[] = { /* 160-255 */
+    "", "leftquote", "rightquote", "", "", "", "", "",
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "accent", "diaeresisaccent", "Alphaaccent", "",
+    "Epsilonaccent", "Etaaccent", "Iotaaccent", "rightanglequote", "Omicronaccent", "onehalf", "Upsilonaccent", "Omegaaccent",
+    "iotadiaeresisaccent", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta",
+    "Theta", "Iota", "Kappa", "Lamda" /*sic*/, "Mu", "Nu", "Ksi", "Omicron",
+    "Pi", "Rho", "", "Sigma", "Tau", "Upsilon", "Phi", "Khi",
+    "Psi", "Omega", "Iotadiaeresis", "Upsilondiaeresis", "alphaaccent", "epsilonaccent", "etaaccent", "iotaaccent",
+    "upsilondiaeresisaccent", "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta",
+    "theta", "iota", "kappa", "lamda" /*sic*/, "mu", "nu", "ksi", "omicron",
+    "pi", "rho", "terminalsigma", "sigma", "tau", "upsilon", "phi", "khi",
+    "psi", "omega", "iotadiaeresis", "upsilondiaeresis", "omicronaccent", "upsilonaccent", "omegaaccent", ""
+};
+
+static char *iso_8859_8_syms[] = {
+    "", "", "", "", "", "", "", "",
+    "", "", "multiplication", "", "", "", "", "overscore",
+    "", "", "", "", "", "", "", "",
+    "", "", "division", "", "", "", "", "",
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "",
+    "", "", "", "", "", "", "", "doubleunderscore",
+    "alef", "bet", "gimel", "dalet", "he", "vav", "zayin", "het",
+    "tet", "yod", "finalkaf", "kaf", "lamed", "finalmem", "mem", "finalnun",
+    "nun", "samekh", "ayin", "finalpe", "pe", "finaltsadi", "tsadi", "qof",
+    "resh", "shin", "tav", "", "", "", "", ""
+};
+
+static char *iso_8859_9_syms[] = { /* latin-5 */
+	/* Identical to latin-1, but with the 6 symbols
+	   ETH, eth, THORN, thorn, Yacute, yacute replaced by
+	   Gbreve, gbreve, Scedilla, scedilla, Idotabove, dotlessi */
+	"Gbreve", "", "", "", "", "", "", "",         /* 0320-0327 */
+	"", "", "", "", "", "Idotabove", "Scedilla", "",
+	"", "", "", "", "", "", "", "",	              /* 0340-0347 */
+	"", "", "", "", "", "", "", "",	              /* 0350-0357 */
+	"gbreve", "", "", "", "", "", "", "",         /* 0360-0367 */
+	"", "", "", "", "", "dotlessi", "scedilla", ""
+};
+
+#include "cyrillic.syms.h"
+#include "ethiopic.syms.h"
+
+static char *fn_syms[] = {
+	"F1", 	"F2",	"F3",	"F4",	"F5",
+	"F6",	"F7",	"F8",	"F9",	"F10",
+	"F11",	"F12",	"F13",	"F14",	"F15",
+	"F16",	"F17",	"F18",	"F19",	"F20",
+	"Find",			/* also called: "Home" */
+	"Insert",
+	"Remove",
+	"Select",		/* also called: "End" */
+	"Prior",		/* also called: "PageUp" */
+	"Next",			/* also called: "PageDown" */
+	"Macro",
+	"Help",
+	"Do",
+	"Pause",
+	"F21",	"F22",	"F23",	"F24",	"F25",
+	"F26",	"F27",	"F28",	"F29",	"F30",
+	"F31",	"F32",	"F33",	"F34",	"F35",
+	"F36",	"F37",	"F38",	"F39",	"F40",
+	"F41",	"F42",	"F43",	"F44",	"F45",
+	"F46",	"F47",	"F48",	"F49",	"F50",
+	"F51",	"F52",	"F53",	"F54",	"F55",
+	"F56",	"F57",	"F58",	"F59",	"F60",
+	"F61",	"F62",	"F63",	"F64",	"F65",
+	"F66",	"F67",	"F68",	"F69",	"F70",
+	"F71",	"F72",	"F73",	"F74",	"F75",
+	"F76",	"F77",	"F78",	"F79",	"F80",
+	"F81",	"F82",	"F83",	"F84",	"F85",
+	"F86",	"F87",	"F88",	"F89",	"F90",
+	"F91",	"F92",	"F93",	"F94",	"F95",
+	"F96",	"F97",	"F98",	"F99",	"F100",
+	"F101",	"F102",	"F103",	"F104",	"F105",
+	"F106",	"F107",	"F108",	"F109",	"F110",
+	"F111",	"F112",	"F113",	"F114",	"F115",
+	"F116",	"F117",	"F118",	"F119",	"F120",
+	"F121",	"F122",	"F123",	"F124",	"F125",
+	"F126",	"F127",	"F128",	"F129",	"F130",
+	"F131",	"F132",	"F133",	"F134",	"F135",
+	"F136",	"F137",	"F138",	"F139",	"F140",
+	"F141",	"F142",	"F143",	"F144",	"F145",
+	"F146",	"F147",	"F148",	"F149",	"F150",
+	"F151",	"F152",	"F153",	"F154",	"F155",
+	"F156",	"F157",	"F158",	"F159",	"F160",
+	"F161",	"F162",	"F163",	"F164",	"F165",
+	"F166",	"F167",	"F168",	"F169",	"F170",
+	"F171",	"F172",	"F173",	"F174",	"F175",
+	"F176",	"F177",	"F178",	"F179",	"F180",
+	"F181",	"F182",	"F183",	"F184",	"F185",
+	"F186",	"F187",	"F188",	"F189",	"F190",
+	"F191",	"F192",	"F193",	"F194",	"F195",
+	"F196",	"F197",	"F198",	"F199",	"F200",
+	"F201",	"F202",	"F203",	"F204",	"F205",
+	"F206",	"F207",	"F208",	"F209",	"F210",
+	"F211",	"F212",	"F213",	"F214",	"F215",
+	"F216",	"F217",	"F218",	"F219",	"F220",
+	"F221",	"F222",	"F223",	"F224",	"F225",
+	"F226",	"F227",	"F228",	"F229",	"F230",
+	"F231",	"F232",	"F233",	"F234",	"F235",
+	"F236",	"F237",	"F238",	"F239",	"F240",
+	"F241",	"F242",	"F243",	"F244",	"F245",
+	"F246"		/* there are 10 keys named Insert etc., total 256 */
+};
+
+static char *spec_syms[] = {
+	"VoidSymbol",
+	"Return",
+	"Show_Registers",
+	"Show_Memory",
+	"Show_State",
+	"Break",
+	"Last_Console",
+	"Caps_Lock",
+	"Num_Lock",
+	"Scroll_Lock",
+	"Scroll_Forward",
+	"Scroll_Backward",
+	"Boot",
+	"Caps_On",
+	"Compose",
+	"SAK",
+	"Decr_Console",
+	"Incr_Console",
+	"KeyboardSignal",
+	"Bare_Num_Lock"
+};
+
+static char *pad_syms[] = {
+	"KP_0",
+	"KP_1",
+	"KP_2",
+	"KP_3",
+	"KP_4",
+	"KP_5",
+	"KP_6",
+	"KP_7",
+	"KP_8",
+	"KP_9",
+	"KP_Add",
+	"KP_Subtract",
+	"KP_Multiply",
+	"KP_Divide",
+	"KP_Enter",
+	"KP_Comma",
+	"KP_Period",
+	"KP_MinPlus"
+};
+
+static char *dead_syms[] = {
+	"dead_grave",
+	"dead_acute",
+	"dead_circumflex",
+	"dead_tilde",
+	"dead_diaeresis",
+	"dead_cedilla"
+};
+
+static char *cons_syms[] = {
+	"Console_1",
+	"Console_2",
+	"Console_3",
+	"Console_4",
+	"Console_5",
+	"Console_6",
+	"Console_7",
+	"Console_8",
+	"Console_9",
+	"Console_10",
+	"Console_11",
+	"Console_12",
+	"Console_13",
+	"Console_14",
+	"Console_15",
+	"Console_16",
+	"Console_17",
+	"Console_18",
+	"Console_19",
+	"Console_20",
+	"Console_21",
+	"Console_22",
+	"Console_23",
+	"Console_24",
+	"Console_25",
+	"Console_26",
+	"Console_27",
+	"Console_28",
+	"Console_29",
+	"Console_30",
+	"Console_31",
+	"Console_32",
+	"Console_33",
+	"Console_34",
+	"Console_35",
+	"Console_36",
+	"Console_37",
+	"Console_38",
+	"Console_39",
+	"Console_40",
+	"Console_41",
+	"Console_42",
+	"Console_43",
+	"Console_44",
+	"Console_45",
+	"Console_46",
+	"Console_47",
+	"Console_48",
+	"Console_49",
+	"Console_50",
+	"Console_51",
+	"Console_52",
+	"Console_53",
+	"Console_54",
+	"Console_55",
+	"Console_56",
+	"Console_57",
+	"Console_58",
+	"Console_59",
+	"Console_60",
+	"Console_61",
+	"Console_62",
+	"Console_63"
+};
+
+static char *cur_syms[] = {
+	"Down",
+	"Left",
+	"Right",
+	"Up"
+};
+
+static char *shift_syms[] = {
+	"Shift",
+	"AltGr",
+	"Control",
+	"Alt",
+	"ShiftL",
+	"ShiftR",
+	"CtrlL",
+	"CtrlR",
+	"CapsShift"
+};
+
+static char *ascii_syms[] = {
+	"Ascii_0",
+	"Ascii_1",
+	"Ascii_2",
+	"Ascii_3",
+	"Ascii_4",
+	"Ascii_5",
+	"Ascii_6",
+	"Ascii_7",
+	"Ascii_8",
+	"Ascii_9",
+	"Hex_0",
+	"Hex_1",
+	"Hex_2",
+	"Hex_3",
+	"Hex_4",
+	"Hex_5",
+	"Hex_6",
+	"Hex_7",
+	"Hex_8",
+	"Hex_9",
+	"Hex_A",
+	"Hex_B",
+	"Hex_C",
+	"Hex_D",
+	"Hex_E",
+	"Hex_F"
+};
+
+static char *lock_syms[] = {
+	"Shift_Lock",
+	"AltGr_Lock",
+	"Control_Lock",
+	"Alt_Lock",
+	"ShiftL_Lock",
+	"ShiftR_Lock",
+	"CtrlL_Lock",
+	"CtrlR_Lock"
+};
+
+static char *sticky_syms[] = {
+	"SShift",
+	"SAltGr",
+	"SControl",
+	"SAlt",
+	"SShiftL",
+	"SShiftR",
+	"SCtrlL",
+	"SCtrlR"
+};
+
+#define E(x) { x, sizeof(x) / sizeof(char **) }
+
+syms_entry syms[] = {
+	E(latin1_syms),
+	E(fn_syms),
+	E(spec_syms),
+	E(pad_syms),
+	E(dead_syms),
+	E(cons_syms),
+	E(cur_syms),
+	E(shift_syms),
+	{ 0, 0 },		/* KT_META */
+	E(ascii_syms),
+	E(lock_syms),
+	{ 0, 0 },		/* KT_LETTER */
+	E(sticky_syms)
+};
+
+#undef E
+
+struct syn
+synonyms[] = {
+	{ "Control_h",		"BackSpace" },
+	{ "Control_i",		"Tab" },
+	{ "Control_j",		"Linefeed" },
+	{ "Home",		"Find" },
+/* Unfortunately Delete already denotes ASCII 0177 */
+/*	{ "Delete",		"Remove" }, */
+	{ "End",		"Select" },
+	{ "PageUp",		"Prior" },
+	{ "PageDown",		"Next" },
+	{ "multiplication",	"multiply" },
+	{ "pound",		"sterling" },
+	{ "pilcrow",		"paragraph" },
+	{ "Oslash",		"Ooblique" },
+	{ "Shift_L",		"ShiftL" },
+	{ "Shift_R",		"ShiftR" },
+	{ "Control_L",		"CtrlL" },
+	{ "Control_R",		"CtrlR" },
+	{ "AltL",		"Alt" },
+	{ "AltR",		"AltGr" },
+	{ "Alt_L",		"Alt" },
+	{ "Alt_R",		"AltGr" },
+	{ "AltGr_L",		"Alt" },
+	{ "AltGr_R",		"AltGr" },
+	{ "AltLLock",		"Alt_Lock" },
+	{ "AltRLock",		"AltGr_Lock" },
+	{ "SCtrl",		"SControl" },
+	{ "Spawn_Console",	"KeyboardSignal" },
+	{ "Uncaps_Shift",	"CapsShift" },
+/* the names of the Greek letters are spelled differently
+   in the iso-8859-7 and the Unicode standards */
+	{ "lambda",             "lamda" },
+	{ "Lambda",             "Lamda" },
+	{ "xi",                 "ksi" },
+	{ "Xi",                 "Ksi" },
+	{ "chi",                "khi" },
+	{ "Chi",                "Khi" },
+/* diacriticals */
+	{ "tilde",		"asciitilde" },
+	{ "circumflex",		"asciicircum" },
+/* as dead_ogonek, dead_caron, dead_breve and dead_doubleacute do not exist
+ * (yet), I put also compose lines for use with respectively dead_cedilla,
+ * dead_circumflex, dead_tilde and dead_tilde */
+	{ "dead_ogonek",        "dead_cedilla" },
+	{ "dead_caron",         "dead_circumflex" },
+	{ "dead_breve",         "dead_tilde" },
+	{ "dead_doubleacute",   "dead_tilde" },
+/* cyrillic */
+	{ "bielorussian_cyrillic_capital_letter_i", "ukrainian_cyrillic_capital_letter_i" },
+	{ "cyrillic_capital_letter_kha", "cyrillic_capital_letter_ha" },
+	{ "cyrillic_capital_letter_ge", "cyrillic_capital_letter_ghe" },
+	{ "cyrillic_capital_letter_ia", "cyrillic_capital_letter_ya" },
+	{ "cyrillic_capital_letter_iu", "cyrillic_capital_letter_yu" },
+	{ "cyrillic_capital_letter_yeri", "cyrillic_capital_letter_yeru" },
+	{ "cyrillic_capital_letter_reversed_e", "cyrillic_capital_letter_e" },
+	{ "cyrillic_capital_letter_ii", "cyrillic_capital_letter_i" },
+	{ "cyrillic_capital_letter_short_ii", "cyrillic_capital_letter_short_i" },
+	{ "bielorussian_cyrillic_small_letter_i", "ukrainian_cyrillic_small_letter_i" },
+	{ "cyrillic_small_letter_kha", "cyrillic_small_letter_ha" },
+	{ "cyrillic_small_letter_ge", "cyrillic_small_letter_ghe" },
+	{ "cyrillic_small_letter_ia", "cyrillic_small_letter_ya" },
+	{ "cyrillic_small_letter_iu", "cyrillic_small_letter_yu" },
+	{ "cyrillic_small_letter_yeri", "cyrillic_small_letter_yeru" },
+	{ "cyrillic_small_letter_reversed_e", "cyrillic_small_letter_e" },
+	{ "cyrillic_small_letter_ii", "cyrillic_small_letter_i" },
+	{ "cyrillic_small_letter_short_ii", "cyrillic_small_letter_short_i" }
+};
+
+const int syms_size = sizeof(syms) / sizeof(syms_entry);
+const int syn_size = sizeof(synonyms) / sizeof(synonyms[0]);
+
+struct cs {
+    char *charset;
+    char **charnames;
+    int start;
+} charsets[] = {
+    { "iso-8859-1", 0, 0 },
+    { "mazovia", mazovia_syms, 128 },
+    { "iso-8859-2", latin2_syms, 160 },
+    { "iso-8859-3", latin3_syms, 160 },
+    { "iso-8859-4", latin4_syms, 160 },
+    { "iso-8859-5", iso_8859_5_syms, 160 },
+    { "iso-8859-7", iso_8859_7_syms, 160 },
+    { "iso-8859-8", iso_8859_8_syms, 160 },
+    { "iso-8859-9", iso_8859_9_syms, 208 },
+    { "koi8-r",     koi8_r_syms, 160 },
+    { "koi8-u",     koi8_r_syms, 160 },
+/* I don't know the differences between koi8-r and koi8-u,
+   so I use the same syms table - Pablo Saratxaga */
+    { "iso-10646-18", iso_10646_18_syms, 159 },		/* ethiopic */
+};
+
+int
+set_charset(char *charset) {
+	char **p;
+	int i;
+
+	for (i = 0; i < sizeof(charsets)/sizeof(charsets[0]); i++) {
+	    if (!strcasecmp(charsets[i].charset, charset)) {
+		p = charsets[i].charnames;
+		if (p)
+		  for (i = charsets[i].start; i < 256; i++,p++) {
+		    if(*p && **p)
+		      syms[0].table[i] = *p;
+		}
+		return 0;
+	    }
+	}
+	if (!strcasecmp(charset, "unicode")) {
+	  fprintf (stderr, _("unknown charset %s - ignoring charset request\n"),
+		   charset);
+	  return 1;
+	}
+	return 0;
+}
+
+int
+ksymtocode(char *s)
+{
+	int i;
+	int j;
+	int keycode;
+	static int warn = 0;
+
+	if (!strncmp(s, "Meta_", 5)) {
+		keycode = ksymtocode(s+5);
+		if (KTYP(keycode) == KT_LATIN)
+			return K(KT_META, KVAL(keycode));
+		/* fall through to error printf */
+	}
+
+	for (i = 0; i < syms_size; i++)
+		for (j = 0; j < syms[i].size; j++)
+			if (!strcmp(s,syms[i].table[j]))
+				return K(i, j);
+
+	for (i = 0; i < syn_size; i++)
+		if (!strcmp(s, synonyms[i].synonym))
+			return ksymtocode(synonyms[i].official_name);
+
+	for (i = 0; i < 256 - 160; i++)
+		if (!strcmp(s, latin2_syms[i])) {
+			if(!warn++)
+				fprintf(stderr, _("assuming iso-8859-2 %s\n"), s);
+			return K(KT_LATIN, 160 + i);
+		}
+
+	for (i = 0; i < 256 - 160; i++)
+		if (!strcmp(s, latin3_syms[i])) {
+			if(!warn++)
+				fprintf(stderr, _("assuming iso-8859-3 %s\n"), s);
+			return K(KT_LATIN, 160 + i);
+		}
+
+	for (i = 0; i < 256 - 160; i++)
+		if (!strcmp(s, latin4_syms[i])) {
+			if(!warn++)
+				fprintf(stderr, _("assuming iso-8859-4 %s\n"), s);
+			return K(KT_LATIN, 160 + i);
+		}
+
+	fprintf(stderr, _("unknown keysym '%s'\n"), s);
+
+	return -1;
+}
diff --git a/src/ksyms.h b/src/ksyms.h
new file mode 100644
index 0000000..973d8b9
--- /dev/null
+++ b/src/ksyms.h
@@ -0,0 +1,17 @@
+typedef struct {
+	char **table;
+	int size;
+} syms_entry;
+
+extern syms_entry syms[];
+
+struct syn {
+	char *synonym;
+	char *official_name;
+};
+extern struct syn synonyms[];
+
+extern const int syms_size;
+extern const int syn_size;
+
+extern int set_charset(char *name);
diff --git a/src/loadkeys.y b/src/loadkeys.y
new file mode 100644
index 0000000..d68d9c9
--- /dev/null
+++ b/src/loadkeys.y
@@ -0,0 +1,1218 @@
+/*
+ * loadkeys.y
+ *
+ * Changes for 0.82:
+ * Merged from version 0.81 of loadkeys.y and mktable.c - aeb@cwi.nl
+ * Reason for change:
+ *   The original version of mktable would use the current kernel
+ *   for getting at the entries. However, this does not work if
+ *   e.g. NR_FUNC in keyboard.h has changed. So, instead of getting
+ *   the information from the current kernel, we must get it out of
+ *   defkeymap.map, just like loadkeys. Thus, mktable is now an
+ *   option of loadkeys.
+ * (Other advantage: we first do the parsing, and then the key binding.
+ *  No bindings are changed in case of a syntax error.)
+ * Fix: contrary to the documentation in keytables.5 it was assumed
+ * by default that the AltGr modifier had no effect. This assumption
+ * has been removed.
+ *
+ * Changes for 0.83:
+ * Added the intl_con patch by Eugene G. Crosser:
+ * The modifier + in front of a keysym means that it is a letter,
+ * and susceptible for change under CapsLock. For ASCII 'a'-'z'
+ * and 'A'-'Z' no + is required (when given as a single entry).
+ *
+ * Changes for 0.84:
+ * More compose key support. Default search path. Option -d.
+ *
+ * Change for 0.85:
+ * Do not change compose key table when no definitions given.
+ * Option -c to override this.
+ *
+ * Changes for 0.86:
+ * Added a few synonyms. Comment may now contain non-ASCII symbols.
+ *
+ * Changes for 0.87:
+ * Accept the "charset iso-8859-x" directive.
+ *
+ * Changes for 0.88:
+ * Handle sparse keymaps and many strings. Accept "keymaps" directive.
+ * Handle 8 modifiers. Handle Unicode.
+ *
+ * Change for 0.93:
+ * Set K_UNICODE during the loading of keymaps requiring that.
+ *
+ * Change for 0.94:
+ * Add alt_is_meta keyword:
+ * Whenever some combination is defined as an ASCII symbol, and there
+ * is a corresponding Alt keymap, define by default the corresponding
+ * Alt combination as Meta_value.
+ *
+ * Change for 0.96:
+ * Compose now accepts letter names.
+ * Add strings_as_usual etc.
+ * Add include directive.
+ *
+ * Change for 0.99:
+ * Internationalized
+ */
+
+%token EOL NUMBER LITERAL CHARSET KEYMAPS KEYCODE EQUALS
+%token PLAIN SHIFT CONTROL ALT ALTGR SHIFTL SHIFTR CTRLL CTRLR
+%token COMMA DASH STRING STRLITERAL COMPOSE TO CCHAR ERROR PLUS
+%token UNUMBER ALT_IS_META STRINGS AS USUAL ON FOR
+
+%{
+#include <errno.h>
+#include <stdio.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <linux/kd.h>
+#include <linux/keyboard.h>
+#include <sys/ioctl.h>
+#include <ctype.h>
+#include "paths.h"
+#include "modifiers.h"
+#include "nls.h"
+
+#ifndef KT_LETTER
+#define KT_LETTER KT_LATIN
+#endif
+
+/* name to use in error messages */
+char *progname;
+
+/* What keymaps are we defining? */
+char defining[MAX_NR_KEYMAPS];
+char keymaps_line_seen = 0;
+int max_keymap = 0;		/* from here on, defining[] is false */
+int alt_is_meta = 0;
+
+/* the kernel structures we want to set or print */
+u_short *key_map[MAX_NR_KEYMAPS];
+char *func_table[MAX_NR_FUNC];
+struct kbdiacr accent_table[MAX_DIACR];
+unsigned int accent_table_size = 0;
+
+char key_is_constant[NR_KEYS];
+char *keymap_was_set[MAX_NR_KEYMAPS];
+char func_buf[4096];		/* should be allocated dynamically */
+char *fp = func_buf;
+
+#define U(x) ((x) ^ 0xf000)
+
+#undef ECHO
+#include "analyze.c"
+
+#define VERSION "0.99"
+
+static void addmap(int map, int explicit);
+static void addkey(int index, int table, int keycode);
+static void addfunc(struct kbsentry kbs_buf);
+static void killkey(int index, int table);
+static void compose(int diacr, int base, int res);
+static void do_constant(void);
+static void do_constant_key (int, u_short);
+static void loadkeys(void);
+static void mktable(void);
+static void strings_as_usual(void);
+static void keypad_as_usual(char *keyboard);
+static void function_keys_as_usual(char *keyboard);
+static void consoles_as_usual(char *keyboard);
+static void compose_as_usual(char *charset);
+static void lkfatal0(char *, int);
+extern int set_charset(char *charset);
+extern int getfd(void);
+extern char *xstrdup(char *);
+int key_buf[MAX_NR_KEYMAPS];
+int mod;
+int unicode_used;
+int private_error_ct = 0;
+%}
+
+%%
+keytable	:
+		| keytable line
+		;
+line		: EOL
+		| charsetline
+		| altismetaline
+		| usualstringsline
+		| usualcomposeline
+		| keymapline
+		| fullline
+		| singleline
+		| strline
+                | compline
+		;
+charsetline	: CHARSET STRLITERAL EOL
+			{
+			    set_charset(kbs_buf.kb_string);
+			}
+		;
+altismetaline	: ALT_IS_META EOL
+			{
+			    alt_is_meta = 1;
+			}
+		;
+usualstringsline: STRINGS AS USUAL EOL
+			{
+			    strings_as_usual();
+			}
+		;
+usualcomposeline: COMPOSE AS USUAL FOR STRLITERAL EOL
+			{
+			    compose_as_usual(kbs_buf.kb_string);
+			}
+		  | COMPOSE AS USUAL EOL
+			{
+			    compose_as_usual(0);
+			}
+		;
+keymapline	: KEYMAPS range EOL
+			{
+			    keymaps_line_seen = 1;
+			}
+		;
+range		: range COMMA range0
+		| range0
+		;
+range0		: NUMBER DASH NUMBER
+			{
+			    int i;
+			    for (i = $1; i<= $3; i++)
+			      addmap(i,1);
+			}
+		| NUMBER
+			{
+			    addmap($1,1);
+			}
+		;
+strline		: STRING LITERAL EQUALS STRLITERAL EOL
+			{
+			    if (KTYP($2) != KT_FN)
+				lkfatal1(_("'%s' is not a function key symbol"),
+					syms[KTYP($2)].table[KVAL($2)]);
+			    kbs_buf.kb_func = KVAL($2);
+			    addfunc(kbs_buf);
+			}
+		;
+compline        : COMPOSE CCHAR CCHAR TO CCHAR EOL
+                        {
+			    compose($2, $3, $5);
+			}
+		 | COMPOSE CCHAR CCHAR TO rvalue EOL
+			{
+			    compose($2, $3, $5);
+			}
+                ;
+singleline	:	{ mod = 0; }
+		  modifiers KEYCODE NUMBER EQUALS rvalue EOL
+			{
+			    addkey($4, mod, $6);
+			}
+		| PLAIN KEYCODE NUMBER EQUALS rvalue EOL
+			{
+			    addkey($4, 0, $6);
+			}
+		;
+modifiers	: modifiers modifier
+		| modifier
+		;
+modifier	: SHIFT		{ mod |= M_SHIFT;	}
+		| CONTROL	{ mod |= M_CTRL;	}
+		| ALT		{ mod |= M_ALT;		}
+		| ALTGR		{ mod |= M_ALTGR;	}
+		| SHIFTL	{ mod |= M_SHIFTL;	}
+		| SHIFTR	{ mod |= M_SHIFTR;	}
+		| CTRLL		{ mod |= M_CTRLL;	}
+		| CTRLR		{ mod |= M_CTRLR;	}
+		;
+fullline	: KEYCODE NUMBER EQUALS rvalue0 EOL
+	{
+	    int i, j;
+
+	    if (rvalct == 1) {
+	      /* Some files do not have a keymaps line, and
+		 we have to wait until all input has been read
+		 before we know which maps to fill. */
+	      key_is_constant[$2] = 1;
+
+	      /* On the other hand, we now have include files,
+		 and it should be possible to override lines
+		 from an include file. So, kill old defs. */
+	      for (j = 0; j < max_keymap; j++)
+		if (defining[j])
+		  killkey($2, j);
+	    }
+	    if (keymaps_line_seen) {
+		i = 0;
+		for (j = 0; j < max_keymap; j++)
+		  if (defining[j]) {
+		      if (rvalct != 1 || i == 0)
+			addkey($2, j, (i < rvalct) ? key_buf[i] : K_HOLE);
+		      i++;
+		  }
+		if (i < rvalct)
+		    lkfatal0(_("too many (%d) entries on one line"), rvalct);
+	    } else
+	      for (i = 0; i < rvalct; i++)
+		addkey($2, i, key_buf[i]);
+	}
+		;
+
+rvalue0		: 
+		| rvalue1 rvalue0
+		;
+rvalue1		: rvalue
+			{
+			    if (rvalct >= MAX_NR_KEYMAPS)
+				lkfatal(_("too many keydefinitions on one line"));
+			    key_buf[rvalct++] = $1;
+			}
+		;
+rvalue		: NUMBER
+			{$$=$1;}
+		| UNUMBER
+			{$$=($1 ^ 0xf000); unicode_used=1;}
+                | PLUS NUMBER
+                        {$$=K(KT_LETTER, KVAL($2));}
+		| LITERAL
+			{$$=$1;}
+                | PLUS LITERAL
+                        {$$=K(KT_LETTER, KVAL($2));}
+		;
+%%			
+
+void
+usage(void) {
+	fprintf(stderr, _("loadkeys version %s\n"
+"\n"
+"Usage: loadkeys [option...] [mapfile...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"	-c --clearcompose clear kernel compose table\n"
+"	-d --default	  load \"" DEFMAP "\"\n"
+"	-h --help	  display this help text\n"
+"	-m --mktable      output a \"defkeymap.c\" to stdout\n"
+"	-s --clearstrings clear kernel string table\n"
+"	-v --verbose      report the changes\n"), VERSION);
+	exit(1);
+}
+
+char **args;
+int optd = 0;
+int optm = 0;
+int opts = 0;
+int verbose = 0;
+int quiet = 0;
+int nocompose = 0;
+
+int
+main(unsigned int argc, char *argv[]) {
+	const char *short_opts = "cdhmsqv";
+	const struct option long_opts[] = {
+		{ "clearcompose", no_argument, NULL, 'c' },
+	        { "default",    no_argument, NULL, 'd' },
+		{ "help",	no_argument, NULL, 'h' },
+		{ "mktable",    no_argument, NULL, 'm' },
+		{ "clearstrings", no_argument, NULL, 's' },
+		{ "quiet",	no_argument, NULL, 'q' },
+		{ "verbose",    no_argument, NULL, 'v' },
+		{ NULL, 0, NULL, 0 }
+	};
+	int c;
+
+	progname = argv[0];
+
+	while ((c = getopt_long(argc, argv,
+		short_opts, long_opts, NULL)) != -1) {
+		switch (c) {
+		        case 'c':
+		                nocompose = 1;
+				break;
+		        case 'd':
+		    		optd = 1;
+				break;
+		        case 'm':
+		                optm = 1;
+				break;
+			case 's':
+				opts = 1;
+				break;
+			case 'q':
+				quiet = 1;
+				break;
+			case 'v':
+				verbose++;
+				break;
+			case 'h':
+			case '?':
+				usage();
+		}
+	}
+
+	args = argv + optind - 1;
+	unicode_used = 0;
+	yywrap();	/* set up the first input file, if any */
+	if (yyparse() || private_error_ct) {
+		fprintf(stderr, _("syntax error in map file\n"));
+		if(!optm)
+		  fprintf(stderr, _("key bindings not changed\n"));
+		exit(1);
+	}
+	do_constant();
+	if(optm)
+	        mktable();
+	else
+	        loadkeys();
+	exit(0);
+}
+
+extern char pathname[];
+char *filename;
+int line_nr = 1;
+
+int
+yyerror(char *s) {
+	fprintf(stderr, "%s:%d: %s\n", filename, line_nr, s);
+	private_error_ct++;
+	return(0);
+}
+
+/* fatal errors - change to varargs next time */
+void
+lkfatal(char *s) {
+	fprintf(stderr, "%s: %s:%d: %s\n", progname, filename, line_nr, s);
+	exit(1);
+}
+
+void
+lkfatal0(char *s, int d) {
+	fprintf(stderr, "%s: %s:%d: ", progname, filename, line_nr);
+	fprintf(stderr, s, d);
+	fprintf(stderr, "\n");
+	exit(1);
+}
+
+void
+lkfatal1(char *s, char *s2) {
+	fprintf(stderr, "%s: %s:%d: ", progname, filename, line_nr);
+	fprintf(stderr, s, s2);
+	fprintf(stderr, "\n");
+	exit(1);
+}
+
+/* Include file handling - unfortunately flex-specific. */
+#define MAX_INCLUDE_DEPTH 20
+struct infile {
+	int linenr;
+	char *filename;
+	YY_BUFFER_STATE bs;
+} infile_stack[MAX_INCLUDE_DEPTH];
+int infile_stack_ptr = 0;
+
+void
+lk_push(void) {
+	if (infile_stack_ptr >= MAX_INCLUDE_DEPTH)
+		lkfatal(_("includes nested too deeply"));
+
+	/* preserve current state */
+	infile_stack[infile_stack_ptr].filename = filename;
+	infile_stack[infile_stack_ptr].linenr = line_nr;
+	infile_stack[infile_stack_ptr++].bs =
+		YY_CURRENT_BUFFER;
+}
+
+int
+lk_pop(void) {
+	if (--infile_stack_ptr >= 0) {
+		filename = infile_stack[infile_stack_ptr].filename;
+		line_nr = infile_stack[infile_stack_ptr].linenr;
+		yy_delete_buffer(YY_CURRENT_BUFFER);
+		yy_switch_to_buffer(infile_stack[infile_stack_ptr].bs);
+		return 0;
+	}
+	return 1;
+}
+
+/*
+ * Where shall we look for an include file?
+ * Current strategy (undocumented, may change):
+ *
+ * 1. Look for a user-specified LOADKEYS_INCLUDE_PATH
+ * 2. Try . and ../include and ../../include
+ * 3. Try D and D/../include and D/../../include
+ *    where D is the directory from where we are loading the current file.
+ * 4. Try KD/include and KD/#/include where KD = DATADIR/KEYMAPDIR.
+ *
+ * Expected layout:
+ * KD has subdirectories amiga, atari, sun, i386, include
+ * KD/include contains architecture-independent stuff
+ * like strings and iso-8859-x compose tables.
+ * KD/i386 has subdirectories qwerty, ... and include;
+ * this latter include dir contains stuff with keycode=...
+ *
+ * (Of course, if the present setup turns out to be reasonable,
+ * then later also the other architectures will grow and get
+ * subdirectories, and the hard-coded i386 below will go again.)
+ *
+ * People that dislike a dozen lookups for loadkeys
+ * can easily do "loadkeys file_with_includes; dumpkeys > my_keymap"
+ * and afterwards use only "loadkeys /fullpath/mykeymap", where no
+ * lookups are required.
+ */
+char *include_dirpath0[] = { "", 0 };
+char *include_dirpath1[] = { "", "../include/", "../../include/", 0 };
+char *include_dirpath2[] = { 0, 0, 0, 0 };
+char *include_dirpath3[] = { DATADIR "/" KEYMAPDIR "/include/",
+			     DATADIR "/" KEYMAPDIR "/i386/include/", 0 };
+char *include_suffixes[] = { "", ".inc", 0 };
+
+FILE *find_standard_incl_file(char *s) {
+	FILE *f;
+	char *t, *te, *t1, *t2;
+	int len;
+
+	f = findfile(s, include_dirpath1, include_suffixes);
+	if (f)
+		return f;
+
+	t = xstrdup(filename);
+	te = rindex(t, '/');
+	if (te) {
+		te[1] = 0;
+		include_dirpath2[0] = t;
+		len = strlen(t);
+		include_dirpath2[1] = t1 = xmalloc(len + 12);
+		include_dirpath2[2] = t2 = xmalloc(len + 15);
+		strcpy(t1, t);
+		strcat(t1, "../include/");
+		strcpy(t2, t);
+		strcat(t2, "../../include/");
+		f = findfile(s, include_dirpath2, include_suffixes);
+		if (f)
+			return f;
+	}
+
+	return findfile(s, include_dirpath3, include_suffixes);
+}
+
+FILE *find_incl_file(char *s) {
+	FILE *f;
+	char *ev;
+	if (!s || !*s)
+		return NULL;
+	if (*s == '/')		/* no path required */
+		return (findfile(s, include_dirpath0, include_suffixes));
+
+	if((ev = getenv("LOADKEYS_INCLUDE_PATH")) != NULL) {
+		/* try user-specified path */
+		char *user_dir[2] = { 0, 0 };
+		while(ev) {
+			char *t = index(ev, ':');
+			char sv;
+			if (t) {
+				sv = *t;
+				*t = 0;
+			}
+			user_dir[0] = ev;
+			if (*ev)
+				f = findfile(s, user_dir, include_suffixes);
+			else	/* empty string denotes system path */
+				f = find_standard_incl_file(s);
+			if (f)
+				return f;
+			if (t)
+				*t++ = sv;
+			ev = t;
+		}
+		return NULL;
+	}
+	return find_standard_incl_file(s);
+}
+
+void
+open_include(char *s) {
+	char *t, *te;
+
+	if (verbose)
+		/* start reading include file */
+		fprintf(stderr, _("switching to %s\n"), s);
+
+	lk_push();
+
+	yyin = find_incl_file(s);
+	if (!yyin)
+		lkfatal1(_("cannot open include file %s"), s);
+	filename = xstrdup(pathname);
+	line_nr = 1;
+	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
+}
+
+/* String file handling - flex-specific. */
+int in_string = 0;
+
+void
+lk_scan_string(char *s) {
+	lk_push();
+	in_string = 1;
+	yy_scan_string(s);
+}
+
+void
+lk_end_string(void) {
+	lk_pop();
+	in_string = 0;
+}
+
+char *dirpath[] = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 };
+char *suffixes[] = { "", ".map", 0 };
+extern FILE *findfile(char *fnam, char **dirpath, char **suffixes);
+
+#undef yywrap
+int
+yywrap(void) {
+	FILE *f;
+	static int first_file = 1; /* ugly kludge flag */
+
+	if (in_string) {
+		lk_end_string();
+		return 0;
+	}
+
+	if (infile_stack_ptr > 0) {
+		lk_pop();
+		return 0;
+	}
+
+	line_nr = 1;
+	if (optd) {
+	        /* first read default map */
+	        optd = 0;
+	        if((f = findfile(DEFMAP, dirpath, suffixes)) == NULL) {
+		    fprintf(stderr, _("Cannot find %s\n"), DEFMAP);
+		    exit(1);
+		}
+		goto gotf;
+	}
+	if (*args)
+		args++;
+	if (!*args)
+		return 1;
+	if (!strcmp(*args, "-")) {
+		f = stdin;
+		strcpy(pathname, "<stdin>");
+	} else if ((f = findfile(*args, dirpath, suffixes)) == NULL) {
+		fprintf(stderr, _("cannot open file %s\n"), *args);
+		exit(1);
+	}
+	/*
+		Can't use yyrestart if this is called before entering yyparse()
+		I think assigning directly to yyin isn't necessarily safe in
+		other situations, hence the flag.
+	*/
+      gotf:
+	filename = xstrdup(pathname);
+	if (!quiet)
+		fprintf(stderr, _("Loading %s\n"), pathname);
+	if (first_file) {
+		yyin = f;
+		first_file = 0;
+	} else
+		yyrestart(f);
+	return 0;
+}
+
+static void
+addmap(int i, int explicit) {
+	if (i < 0 || i >= MAX_NR_KEYMAPS)
+	    lkfatal0(_("addmap called with bad index %d"), i);
+
+	if (!defining[i]) {
+	    if (keymaps_line_seen && !explicit)
+		lkfatal0(_("adding map %d violates explicit keymaps line"), i);
+
+	    defining[i] = 1;
+	    if (max_keymap <= i)
+	      max_keymap = i+1;
+	}
+}
+
+/* unset a key */
+static void
+killkey(int index, int table) {
+	/* roughly: addkey(index, table, K_HOLE); */
+
+        if (index < 0 || index >= NR_KEYS)
+	        lkfatal0(_("killkey called with bad index %d"), index);
+        if (table < 0 || table >= MAX_NR_KEYMAPS)
+	        lkfatal0(_("killkey called with bad table %d"), table);
+	if (key_map[table])
+		(key_map[table])[index] = K_HOLE;
+	if (keymap_was_set[table])
+		(keymap_was_set[table])[index] = 0;
+}
+
+static void
+addkey(int index, int table, int keycode) {
+	int i;
+
+	if (keycode == -1)
+		return;
+        if (index < 0 || index >= NR_KEYS)
+	        lkfatal0(_("addkey called with bad index %d"), index);
+        if (table < 0 || table >= MAX_NR_KEYMAPS)
+	        lkfatal0(_("addkey called with bad table %d"), table);
+
+	if (!defining[table])
+		addmap(table, 0);
+	if (!key_map[table]) {
+	        key_map[table] = (u_short *)xmalloc(NR_KEYS * sizeof(u_short));
+		for (i = 0; i < NR_KEYS; i++)
+		  (key_map[table])[i] = K_HOLE;
+	}
+	if (!keymap_was_set[table]) {
+	        keymap_was_set[table] = (char *) xmalloc(NR_KEYS);
+		for (i = 0; i < NR_KEYS; i++)
+		  (keymap_was_set[table])[i] = 0;
+	}
+
+	if (alt_is_meta && keycode == K_HOLE && (keymap_was_set[table])[index])
+		return;
+
+	(key_map[table])[index] = keycode;
+	(keymap_was_set[table])[index] = 1;
+
+	if (alt_is_meta) {
+	     int alttable = table | M_ALT;
+	     int type = KTYP(keycode);
+	     int val = KVAL(keycode);
+	     char *p;
+	     if (alttable != table && defining[alttable] &&
+		 (!keymap_was_set[alttable] ||
+		  !(keymap_was_set[alttable])[index]) &&
+		 (type == KT_LATIN || type == KT_LETTER) && val < 128)
+		  addkey(index, alttable, K(KT_META, val));
+	}
+}
+
+static void
+addfunc(struct kbsentry kbs) {
+        int sh, i;
+	char *p, *q, *r;
+
+        if (kbs.kb_func >= MAX_NR_FUNC) {
+	        fprintf(stderr, _("%s: addfunc called with bad func %d\n"),
+			progname, kbs.kb_func);
+		exit(1);
+	}
+	if ((q = func_table[kbs.kb_func])) { /* throw out old previous def */
+	        sh = strlen(q) + 1;
+		p = q + sh;
+		while (p < fp)
+		        *q++ = *p++;
+		fp -= sh;
+	}
+	p = func_buf;                        /* find place for new def */
+	for (i = 0; i < kbs.kb_func; i++)
+	        if (func_table[i]) {
+		        p = func_table[i];
+			while(*p++);
+		}
+	func_table[kbs.kb_func] = p;
+        sh = strlen(kbs.kb_string) + 1;
+	if (fp + sh > func_buf + sizeof(func_buf)) {
+	        fprintf(stderr, _("%s: addfunc: func_buf overflow\n"), progname);
+		exit(1);
+	}
+	q = fp;
+	fp += sh;
+	r = fp;
+	while (q > p)
+	        *--r = *--q;
+	strcpy(p, kbs.kb_string);
+	for (i++; i < MAX_NR_FUNC; i++)
+	        if (func_table[i])
+		        func_table[i] += sh;
+}
+
+static void
+compose(int diacr, int base, int res) {
+        struct kbdiacr *p;
+        if (accent_table_size == MAX_DIACR) {
+	        fprintf(stderr, _("compose table overflow\n"));
+		exit(1);
+	}
+	p = &accent_table[accent_table_size++];
+	p->diacr = diacr;
+	p->base = base;
+	p->result = res;
+}
+
+static int
+defkeys(int fd) {
+	struct kbentry ke;
+	int ct = 0;
+	int i,j,fail;
+	int oldm;
+
+	if (unicode_used) {
+	     /* Switch keyboard mode for a moment -
+		do not complain about errors.
+		Do not attempt a reset if the change failed. */
+	     if (ioctl(fd, KDGKBMODE, &oldm)
+	        || (oldm != K_UNICODE && ioctl(fd, KDSKBMODE, K_UNICODE)))
+		  oldm = K_UNICODE;
+	}
+
+	for(i=0; i<MAX_NR_KEYMAPS; i++) {
+	    if (key_map[i]) {
+		for(j=0; j<NR_KEYS; j++) {
+		    if ((keymap_was_set[i])[j]) {
+			ke.kb_index = j;
+			ke.kb_table = i;
+			ke.kb_value = (key_map[i])[j];
+
+			fail = ioctl(fd, KDSKBENT, (unsigned long)&ke);
+			if (fail) {
+			    if (errno == EPERM) {
+				fprintf(stderr,
+					_("Keymap %d: Permission denied\n"), i);
+				j = NR_KEYS;
+				continue;
+			    }
+			    perror("KDSKBENT");
+			} else
+			  ct++;
+			if(verbose)
+			  printf("keycode %d, table %d = %d%s\n", j, i,
+				 (key_map[i])[j], fail ? _("    FAILED") : "");
+			else if (fail)
+			  fprintf(stderr,
+				  _("failed to bind key %d to value %d\n"),
+				  j, (key_map[i])[j]);
+		    }
+		}
+	    } else if (keymaps_line_seen && !defining[i]) {
+		/* deallocate keymap */
+		ke.kb_index = 0;
+		ke.kb_table = i;
+		ke.kb_value = K_NOSUCHMAP;
+
+		if (verbose > 1)
+		  printf(_("deallocate keymap %d\n"), i);
+
+		if(ioctl(fd, KDSKBENT, (unsigned long)&ke)) {
+		    if (errno != EINVAL) {
+			perror("KDSKBENT");
+			fprintf(stderr,
+				_("%s: could not deallocate keymap %d\n"),
+				progname, i);
+			exit(1);
+		    }
+		    /* probably an old kernel */
+		    /* clear keymap by hand */
+		    for (j = 0; j < NR_KEYS; j++) {
+			ke.kb_index = j;
+			ke.kb_table = i;
+			ke.kb_value = K_HOLE;
+			if(ioctl(fd, KDSKBENT, (unsigned long)&ke)) {
+			    if (errno == EINVAL && i >= 16)
+			      break; /* old kernel */
+			    perror("KDSKBENT");
+			    fprintf(stderr,
+				    _("%s: cannot deallocate or clear keymap\n"),
+				    progname);
+			    exit(1);
+			}
+		    }
+		}
+	    }
+	}
+
+	if(unicode_used && oldm != K_UNICODE) {
+	     if (ioctl(fd, KDSKBMODE, oldm)) {
+		  fprintf(stderr, _("%s: failed to restore keyboard mode\n"),
+			  progname);
+	     }
+	     fprintf(stderr, _("%s: warning: this map uses Unicode symbols\n"
+		             "    (perhaps you want to do `kbd_mode -u'?)\n"),
+		     progname);
+	}
+	return ct;
+}
+
+static char *
+ostr(char *s) {
+	int lth = strlen(s);
+	char *ns0 = xmalloc(4*lth + 1);
+	char *ns = ns0;
+
+	while(*s) {
+	  switch(*s) {
+	  case '\n':
+	    *ns++ = '\\';
+	    *ns++ = 'n';
+	    break;
+	  case '\033':
+	    *ns++ = '\\';
+	    *ns++ = '0';
+	    *ns++ = '3';
+	    *ns++ = '3';
+	    break;
+	  default:
+	    *ns++ = *s;
+	  }
+	  s++;
+	}
+	*ns = 0;
+	return ns0;
+}
+
+static int
+deffuncs(int fd){
+        int i, ct = 0;
+	char *p;
+
+        for (i = 0; i < MAX_NR_FUNC; i++) {
+	    kbs_buf.kb_func = i;
+	    if ((p = func_table[i])) {
+		strcpy(kbs_buf.kb_string, p);
+		if (ioctl(fd, KDSKBSENT, (unsigned long)&kbs_buf))
+		  fprintf(stderr, _("failed to bind string '%s' to function %s\n"),
+			  ostr(kbs_buf.kb_string), syms[KT_FN].table[kbs_buf.kb_func]);
+		else
+		  ct++;
+	    } else if (opts) {
+		kbs_buf.kb_string[0] = 0;
+		if (ioctl(fd, KDSKBSENT, (unsigned long)&kbs_buf))
+		  fprintf(stderr, _("failed to clear string %s\n"),
+			  syms[KT_FN].table[kbs_buf.kb_func]);
+		else
+		  ct++;
+	    }
+	  }
+	return ct;
+}
+
+static int
+defdiacs(int fd){
+        struct kbdiacrs kd;
+	int i;
+
+	kd.kb_cnt = accent_table_size;
+	if (kd.kb_cnt > MAX_DIACR) {
+	    kd.kb_cnt = MAX_DIACR;
+	    fprintf(stderr, _("too many compose definitions\n"));
+	}
+	for (i = 0; i < kd.kb_cnt; i++)
+	    kd.kbdiacr[i] = accent_table[i];
+
+	if(ioctl(fd, KDSKBDIACR, (unsigned long) &kd)) {
+	    perror("KDSKBDIACR");
+	    exit(1);
+	}
+	return kd.kb_cnt;
+}
+
+void
+do_constant_key (int i, u_short key) {
+	int typ, val, j;
+
+	typ = KTYP(key);
+	val = KVAL(key);
+	if ((typ == KT_LATIN || typ == KT_LETTER) &&
+	    ((val >= 'a' && val <= 'z') ||
+	     (val >= 'A' && val <= 'Z'))) {
+		u_short defs[16];
+		defs[0] = K(KT_LETTER, val);
+		defs[1] = K(KT_LETTER, val ^ 32);
+		defs[2] = defs[0];
+		defs[3] = defs[1];
+		for(j=4; j<8; j++)
+			defs[j] = K(KT_LATIN, val & ~96);
+		for(j=8; j<16; j++)
+			defs[j] = K(KT_META, KVAL(defs[j-8]));
+		for(j=0; j<max_keymap; j++) {
+			if (!defining[j])
+				continue;
+			if (j > 0 &&
+			    keymap_was_set[j] && (keymap_was_set[j])[i])
+				continue;
+			addkey(i, j, defs[j%16]);
+		}
+	} else {
+		/* do this also for keys like Escape,
+		   as promised in the man page */
+		for (j=1; j<max_keymap; j++)
+			if(defining[j] &&
+			    (!(keymap_was_set[j]) || !(keymap_was_set[j])[i]))
+				addkey(i, j, key);
+	}
+}
+
+static void
+do_constant (void) {
+	int i, r0 = 0;
+
+	if (keymaps_line_seen)
+		while (r0 < max_keymap && !defining[r0])
+			r0++;
+
+	for (i=0; i<NR_KEYS; i++) {
+		if (key_is_constant[i]) {
+			u_short key;
+			if (!key_map[r0])
+				lkfatal(_("impossible error in do_constant"));
+			key = (key_map[r0])[i];
+			do_constant_key (i, key);
+		}
+	}
+}
+
+static void
+loadkeys (void) {
+        int fd;
+        int keyct, funcct, diacct;
+
+	fd = getfd();
+	keyct = defkeys(fd);
+	funcct = deffuncs(fd);
+	if (accent_table_size > 0 || nocompose)
+		diacct = defdiacs(fd);
+	if (verbose) {
+	        printf(_("\nChanged %d %s and %d %s.\n"),
+		       keyct, (keyct == 1) ? _("key") : _("keys"),
+		       funcct, (funcct == 1) ? _("string") : _("strings"));
+		if (accent_table_size > 0 || nocompose)
+			printf(_("Loaded %d compose %s.\n"), diacct,
+			       (diacct == 1) ? _("definition") : _("definitions"));
+		else
+			printf(_("(No change in compose definitions.)\n"));
+	}
+}
+
+static void strings_as_usual(void) {
+	/*
+	 * 28 strings, mostly inspired by the VT100 family
+	 */
+	char *stringvalues[30] = {
+		/* F1 .. F20 */
+		"\033[[A", "\033[[B", "\033[[C", "\033[[D", "\033[[E",
+		"\033[17~", "\033[18~", "\033[19~", "\033[20~", "\033[21~",
+		"\033[23~", "\033[24~", "\033[25~", "\033[26~",
+		"\033[28~", "\033[29~",
+		"\033[31~", "\033[32~", "\033[33~", "\033[34~",
+		/* Find,    Insert,    Remove,    Select,    Prior */
+		"\033[1~", "\033[2~", "\033[3~", "\033[4~", "\033[5~",
+		/* Next,    Macro,  Help, Do,  Pause */
+		"\033[6~", "\033[M",  0,   0, "\033[P"
+	};
+	int i;
+	for (i=0; i<30; i++) if(stringvalues[i]) {
+		struct kbsentry ke;
+		ke.kb_func = i;
+		strncpy(ke.kb_string, stringvalues[i], sizeof(ke.kb_string));
+		ke.kb_string[sizeof(ke.kb_string)-1] = 0;
+		addfunc(ke);
+	}
+}
+
+static void
+compose_as_usual(char *charset) {
+	if (charset && strcmp(charset, "iso-8859-1")) {
+		fprintf(stderr, _("loadkeys: don't know how to compose for %s\n"),
+			charset);
+		exit(1);
+	} else {
+		struct ccc {
+			char c1, c2, c3;
+		} def_latin1_composes[68] = {
+			{ '`', 'A', 0300 }, { '`', 'a', 0340 },
+			{ '\'', 'A', 0301 }, { '\'', 'a', 0341 },
+			{ '^', 'A', 0302 }, { '^', 'a', 0342 },
+			{ '~', 'A', 0303 }, { '~', 'a', 0343 },
+			{ '"', 'A', 0304 }, { '"', 'a', 0344 },
+			{ 'O', 'A', 0305 }, { 'o', 'a', 0345 },
+			{ '0', 'A', 0305 }, { '0', 'a', 0345 },
+			{ 'A', 'A', 0305 }, { 'a', 'a', 0345 },
+			{ 'A', 'E', 0306 }, { 'a', 'e', 0346 },
+			{ ',', 'C', 0307 }, { ',', 'c', 0347 },
+			{ '`', 'E', 0310 }, { '`', 'e', 0350 },
+			{ '\'', 'E', 0311 }, { '\'', 'e', 0351 },
+			{ '^', 'E', 0312 }, { '^', 'e', 0352 },
+			{ '"', 'E', 0313 }, { '"', 'e', 0353 },
+			{ '`', 'I', 0314 }, { '`', 'i', 0354 },
+			{ '\'', 'I', 0315 }, { '\'', 'i', 0355 },
+			{ '^', 'I', 0316 }, { '^', 'i', 0356 },
+			{ '"', 'I', 0317 }, { '"', 'i', 0357 },
+			{ '-', 'D', 0320 }, { '-', 'd', 0360 },
+			{ '~', 'N', 0321 }, { '~', 'n', 0361 },
+			{ '`', 'O', 0322 }, { '`', 'o', 0362 },
+			{ '\'', 'O', 0323 }, { '\'', 'o', 0363 },
+			{ '^', 'O', 0324 }, { '^', 'o', 0364 },
+			{ '~', 'O', 0325 }, { '~', 'o', 0365 },
+			{ '"', 'O', 0326 }, { '"', 'o', 0366 },
+			{ '/', 'O', 0330 }, { '/', 'o', 0370 },
+			{ '`', 'U', 0331 }, { '`', 'u', 0371 },
+			{ '\'', 'U', 0332 }, { '\'', 'u', 0372 },
+			{ '^', 'U', 0333 }, { '^', 'u', 0373 },
+			{ '"', 'U', 0334 }, { '"', 'u', 0374 },
+			{ '\'', 'Y', 0335 }, { '\'', 'y', 0375 },
+			{ 'T', 'H', 0336 }, { 't', 'h', 0376 },
+			{ 's', 's', 0337 }, { '"', 'y', 0377 },
+			{ 's', 'z', 0337 }, { 'i', 'j', 0377 }
+		};
+		int i;
+		for(i=0; i<68; i++) {
+			struct ccc p = def_latin1_composes[i];
+			compose(p.c1, p.c2, p.c3);
+		}
+	}
+}
+
+/*
+ * mktable.c
+ *
+ */
+static char *modifiers[8] = {
+    "shift", "altgr", "ctrl", "alt", "shl", "shr", "ctl", "ctr"
+};
+
+static char *mk_mapname(char mod) {
+    static char buf[60];
+    int i;
+
+    if (!mod)
+      return "plain";
+    buf[0] = 0;
+    for (i=0; i<8; i++)
+      if (mod & (1<<i)) {
+	  if (buf[0])
+	    strcat(buf, "_");
+	  strcat(buf, modifiers[i]);
+      }
+    return buf;
+}
+
+
+static void
+outchar (unsigned char c, int comma) {
+        printf("'");
+        printf((c == '\'' || c == '\\') ? "\\%c" : isgraph(c) ? "%c"
+	       : "\\%03o", c);
+	printf(comma ? "', " : "'");
+}
+
+static void
+mktable () {
+	int i, imax, j;
+
+	struct kbsentry kbs;
+	u_char *p;
+	int maxfunc;
+	unsigned int keymap_count = 0;
+
+	printf(
+/* not to be translated... */
+"/* Do not edit this file! It was automatically generated by   */\n");
+	printf(
+"/*    loadkeys --mktable defkeymap.map > defkeymap.c          */\n\n");
+	printf("#include <linux/types.h>\n");
+	printf("#include <linux/keyboard.h>\n");
+	printf("#include <linux/kd.h>\n\n");
+
+	for (i = 0; i < MAX_NR_KEYMAPS; i++)
+	  if (key_map[i]) {
+	      keymap_count++;
+	      if (i)
+		   printf("static ");
+	      printf("u_short %s_map[NR_KEYS] = {", mk_mapname(i));
+	      for (j = 0; j < NR_KEYS; j++) {
+		  if (!(j % 8))
+		    printf("\n");
+		  printf("\t0x%04x,", U((key_map[i])[j]));
+	      }
+	      printf("\n};\n\n");
+	  }
+
+	for (imax = MAX_NR_KEYMAPS-1; imax > 0; imax--)
+	  if (key_map[imax])
+	    break;
+	printf("ushort *key_maps[MAX_NR_KEYMAPS] = {");
+	for (i = 0; i <= imax; i++) {
+	    printf((i%4) ? " " : "\n\t");
+	    if (key_map[i])
+	      printf("%s_map,", mk_mapname(i));
+	    else
+	      printf("0,");
+	}
+	if (imax < MAX_NR_KEYMAPS-1)
+	  printf("\t0");
+	printf("\n};\n\nunsigned int keymap_count = %d;\n\n", keymap_count);
+
+/* uglified just for xgettext - it complains about nonterminated strings */
+	printf(
+"/*\n"
+" * Philosophy: most people do not define more strings, but they who do\n"
+" * often want quite a lot of string space. So, we statically allocate\n"
+" * the default and allocate dynamically in chunks of 512 bytes.\n"
+" */\n"
+"\n");
+	for (maxfunc = MAX_NR_FUNC; maxfunc; maxfunc--)
+	  if(func_table[maxfunc-1])
+	    break;
+
+	printf("char func_buf[] = {\n");
+	for (i = 0; i < maxfunc; i++) {
+	    p = func_table[i];
+	    if (p) {
+		printf("\t");
+		for ( ; *p; p++)
+		        outchar(*p, 1);
+		printf("0, \n");
+	    }
+	}
+	if (!maxfunc)
+	  printf("\t0\n");
+	printf("};\n\n");
+
+	printf(
+"char *funcbufptr = func_buf;\n"
+"int funcbufsize = sizeof(func_buf);\n"
+"int funcbufleft = 0;          /* space left */\n"
+"\n");
+
+	printf("char *func_table[MAX_NR_FUNC] = {\n");
+	for (i = 0; i < maxfunc; i++) {
+	    if (func_table[i])
+	      printf("\tfunc_buf + %d,\n", func_table[i] - func_buf);
+	    else
+	      printf("\t0,\n");
+	}
+	if (maxfunc < MAX_NR_FUNC)
+	  printf("\t0,\n");
+	printf("};\n");
+
+	printf("\nstruct kbdiacr accent_table[MAX_DIACR] = {\n");
+	for (i = 0; i < accent_table_size; i++) {
+	        printf("\t{");
+	        outchar(accent_table[i].diacr, 1);
+		outchar(accent_table[i].base, 1);
+		outchar(accent_table[i].result, 0);
+		printf("},");
+		if(i%2) printf("\n");
+	}
+	if(i%2) printf("\n");
+	printf("};\n\n");
+	printf("unsigned int accent_table_size = %d;\n",
+	       accent_table_size);
+
+	exit(0);
+}
+
+
diff --git a/src/loadunimap.c b/src/loadunimap.c
new file mode 100644
index 0000000..2377b38
--- /dev/null
+++ b/src/loadunimap.c
@@ -0,0 +1,354 @@
+/*
+ * loadunimap.c - aeb
+ *
+ * Version 0.97
+ */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <linux/kd.h>
+#include <sys/ioctl.h>
+#include "paths.h"
+#include "psf.h"
+#include "nls.h"
+
+/* the three exported functions */
+void saveunicodemap(int fd, char *oufil);	/* save humanly readable */
+void loadunicodemap(int fd, char *ufil);
+void appendunicodemap(int fd, FILE *fp, int ct);/* append in psf style */
+
+extern char *malloc(), *realloc();
+extern char *progname;
+extern int getfd(void);
+extern int force;
+
+static char *unidirpath[] = { "", DATADIR "/" TRANSDIR "/", 0 };
+static char *unisuffixes[] = { "", ".uni", 0 };
+
+#ifdef MAIN
+int verbose = 0;
+int force = 0;
+char *progname;
+
+int
+main(int argc, char *argv[]) {
+	int fd;
+
+	progname = argv[0];
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	fd = getfd();
+
+	if (argc >= 3 && !strcmp(argv[1], "-o")) {
+	    saveunicodemap(fd, argv[2]);
+	    argc -= 2;
+	    argv += 2;
+	    if (argc == 1)
+	      exit(0);
+	}
+		
+	if (argc > 2) {
+		fprintf(stderr, _("usage: %s [-o map.orig] map-file\n"),
+			progname);
+		exit(1);
+	}
+
+	loadunicodemap(fd, (argc > 1) ? argv[1] : "def.uni");
+	exit(0);
+}
+#endif
+
+/*
+ * Skip spaces and read U+1234 or return -1 for error.
+ * Return first non-read position in *p0 (unchanged on error).
+ */ 
+int getunicode(char **p0) {
+  char *p = *p0;
+
+  while (*p == ' ' || *p == '\t')
+    p++;
+  if (*p != 'U' || p[1] != '+' || !isxdigit(p[2]) || !isxdigit(p[3]) ||
+      !isxdigit(p[4]) || !isxdigit(p[5]) || isxdigit(p[6]))
+    return -1;
+  *p0 = p+6;
+  return strtol(p+2,0,16);
+}
+
+struct unimapinit advice;
+
+struct unimapdesc descr;
+
+struct unipair *list = 0;
+int listsz = 0;
+int listct = 0;
+int fd;
+
+void outlist() {
+    advice.advised_hashsize = 0;
+    advice.advised_hashstep = 0;
+    advice.advised_hashlevel = 1;
+  again:
+    if(ioctl(fd, PIO_UNIMAPCLR, &advice)) {
+	perror("PIO_UNIMAPCLR");
+	exit(1);
+    }
+    descr.entry_ct = listct;
+    descr.entries = list;
+    if(ioctl(fd, PIO_UNIMAP, &descr)) {
+	if (errno == ENOMEM && advice.advised_hashlevel < 100) {
+	    advice.advised_hashlevel++;
+#ifdef MAIN
+	    printf(_("trying hashlevel %d\n"), advice.advised_hashlevel);
+#endif
+	    goto again;
+	}
+	perror("PIO_UNIMAP");
+	exit(1);
+    }
+    listct = 0;
+}
+
+void addpair(int fp, int un) {
+    if (listct == listsz) {
+	listsz += 4096;
+	list = realloc((char *)list, listsz);
+	if (!list) {
+	    fprintf(stderr, _("%s: out of memory\n"), progname);
+	    exit(1);
+	}
+    }
+    list[listct].fontpos = fp;
+    list[listct].unicode = un;
+    listct++;
+}
+
+void
+loadunicodemap(int fd, char *tblname) {
+    FILE *mapf;
+    char buffer[65536];
+    int fontlen = 512;
+    int i;
+    int fp0, fp1, un0, un1;
+    char *p, *p1;
+
+    mapf = findfile(tblname, unidirpath, unisuffixes);
+    if ( !mapf ) {
+	perror(tblname);
+	exit(EX_NOINPUT);
+    }
+
+    if (verbose)
+      printf(_("Loading unicode map from file %s\n"), pathname);
+
+    while ( fgets(buffer, sizeof(buffer), mapf) != NULL ) {
+	if ( (p = strchr(buffer, '\n')) != NULL )
+	  *p = '\0';
+	else
+	  fprintf(stderr, _("%s: %s: Warning: line too long\n"), progname, tblname);
+
+	p = buffer;
+
+/*
+ * Syntax accepted:
+ *	<fontpos>	<unicode> <unicode> ...
+ *	<range>		idem
+ *	<range>		<unicode range>
+ *
+ * where <range> ::= <fontpos>-<fontpos>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+ */
+
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	if (!*p || *p == '#')
+	  continue;	/* skip comment or blank line */
+
+	fp0 = strtol(p, &p1, 0);
+	if (p1 == p) {
+	    fprintf(stderr, _("Bad input line: %s\n"), buffer);
+	    exit(EX_DATAERR);
+	}
+	p = p1;
+
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	if (*p == '-') {
+	    p++;
+	    fp1 = strtol(p, &p1, 0);
+	    if (p1 == p) {
+		fprintf(stderr, _("Bad input line: %s\n"), buffer);
+		exit(EX_DATAERR);
+	    }
+	    p = p1;
+	}
+	else
+	  fp1 = 0;
+
+	if ( fp0 < 0 || fp0 >= fontlen ) {
+	    fprintf(stderr,
+		    _("%s: Glyph number (0x%x) larger than font length\n"),
+		    tblname, fp0);
+	    exit(EX_DATAERR);
+	}
+	if ( fp1 && (fp1 < fp0 || fp1 >= fontlen) ) {
+	    fprintf(stderr,
+		    _("%s: Bad end of range (0x%x)\n"),
+		    tblname, fp1);
+	    exit(EX_DATAERR);
+	}
+
+	if (fp1) {
+	    /* we have a range; expect the word "idem" or a Unicode range
+	       of the same length */
+	    while (*p == ' ' || *p == '\t')
+	      p++;
+	    if (!strncmp(p, "idem", 4)) {
+		for (i=fp0; i<=fp1; i++)
+		  addpair(i,i);
+		p += 4;
+	    } else {
+		un0 = getunicode(&p);
+		while (*p == ' ' || *p == '\t')
+		  p++;
+		if (*p != '-') {
+		    fprintf(stderr,
+			    _("%s: Corresponding to a range of font positions, "
+			    "there should be a Unicode range\n"),
+			    tblname);
+		    exit(EX_DATAERR);
+		}
+		p++;
+		un1 = getunicode(&p);
+		if (un0 < 0 || un1 < 0) {
+		    fprintf(stderr,
+			    _("%s: Bad Unicode range corresponding to "
+			    "font position range 0x%x-0x%x\n"),
+			    tblname, fp0, fp1);
+		    exit(EX_DATAERR);
+		}
+		if (un1 - un0 != fp1 - fp0) {
+		    fprintf(stderr,
+			    _("%s: Unicode range U+%x-U+%x not of the same"
+			      " length as font position range 0x%x-0x%x\n"),
+			    tblname, un0, un1, fp0, fp1);
+		    exit(EX_DATAERR);
+		}
+		for(i=fp0; i<=fp1; i++)
+		  addpair(i,un0-fp0+i);
+	    }
+	} else {
+	    /* no range; expect a list of unicode values
+	       for a single font position */
+
+	    while ( (un0 = getunicode(&p)) >= 0 )
+	      addpair(fp0, un0);
+	}
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	if (*p && *p != '#')
+	  fprintf(stderr, _("%s: trailing junk (%s) ignored\n"), tblname, p);
+    }
+
+    fpclose(mapf);
+
+    if (listct == 0 && !force)
+      fprintf(stderr, _("%s: not loading empty unimap\n"
+	              "(if you insist: use option -f to override)\n"),
+	      progname);
+    else
+      outlist();
+}
+
+static struct unimapdesc
+getunicodemap(int fd) {
+  struct unimapdesc descr;
+
+  descr.entry_ct = 0;
+  descr.entries = 0;
+  if(ioctl(fd, GIO_UNIMAP, (unsigned long) &descr)) {
+      if(errno != ENOMEM || descr.entry_ct == 0) {
+	  perror("GIO_UNIMAP");
+	  exit(1);
+      }
+      descr.entries = (struct unipair *)
+	malloc(descr.entry_ct * sizeof(struct unipair));
+      if (descr.entries == NULL) {
+	  fprintf(stderr, _("%s: out of memory?\n"), progname);
+	  exit(1);
+      }
+      if(ioctl(fd, GIO_UNIMAP, (unsigned long) &descr)) {
+	  perror("GIO_UNIMAP(2)");
+	  exit(1);
+      }
+  }
+#ifdef MAIN
+  fprintf(stderr, "# %d %s\n", descr.entry_ct,
+	 (descr.entry_ct == 1) ? _("entry") : _("entries"));
+#endif
+
+  return descr;
+}
+
+void
+saveunicodemap(int fd, char *oufil) {
+  FILE *fpo;
+  struct unimapdesc descr;
+  struct unipair *list;
+  int i;
+
+  if ((fpo = fopen(oufil, "w")) == NULL) {
+      perror(oufil);
+      exit(1);
+  }
+
+  descr = getunicodemap(fd);
+  list = descr.entries;
+
+  for(i=0; i<descr.entry_ct; i++)
+      fprintf(fpo, "0x%02x\tU+%04x\n", list[i].fontpos, list[i].unicode);
+  fclose(fpo);
+
+  if (verbose)
+    printf(_("Saved unicode map on `%s'\n"), oufil);
+}
+
+static void
+appendunsignedshort(FILE *fp, unsigned short u) {
+  unsigned char unicodepair[2];
+
+  unicodepair[0] = (u & 0xff);
+  unicodepair[1] = ((u >> 8) & 0xff);
+  if (fwrite(unicodepair, sizeof(unicodepair), 1, fp) != 1) {
+    perror("appendunimap");
+    exit(1);
+  }
+}
+
+void
+appendunicodemap(int fd, FILE *fp, int fontsize) {
+  struct unimapdesc descr;
+  struct unipair *list;
+  int i, j;
+
+  descr = getunicodemap(fd);
+  list = descr.entries;
+
+  for(i=0; i<fontsize; i++) {
+    for(j=0; j<descr.entry_ct; j++)
+      if (list[j].fontpos == i)
+	appendunsignedshort(fp, list[j].unicode);
+    appendunsignedshort(fp, PSF_SEPARATOR);
+  }
+
+  if (verbose)
+     printf(_("Appended Unicode map\n"));
+}
diff --git a/src/mapscrn.c b/src/mapscrn.c
new file mode 100644
index 0000000..d127efe
--- /dev/null
+++ b/src/mapscrn.c
@@ -0,0 +1,179 @@
+/*
+ * mapscrn.c - version 0.98
+ */
+
+#include <stdio.h>
+#include <memory.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/kd.h>
+#include "paths.h"
+#include "nls.h"
+
+/* the two exported functions */
+void saveoldmap(int fd, char *omfil);
+void loadnewmap(int fd, char *mfil);
+
+static int parsemap (FILE *, char*);
+static int ctoi (unsigned char *);
+
+/* search for the map file in these directories (with trailing /) */
+static char *mapdirpath[] = { "", DATADIR "/" TRANSDIR "/", 0 };
+static char *mapsuffixes[] = { "", 0 };
+
+#ifdef MAIN
+extern int getfd(void);
+
+int verbose = 0;
+
+int
+main(int argc, char *argv[]) {
+	int fd;
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	fd = getfd();
+
+	if (argc >= 3 && !strcmp(argv[1], "-o")) {
+	    saveoldmap(fd, argv[2]);
+	    argc -= 2;
+	    argv += 2;
+	    if (argc == 1)
+	      exit(0);
+	}
+		
+	if (argc != 2) {
+		fprintf(stderr, _("usage: %s [-o map.orig] map-file\n"),
+			argv[0]);
+		exit(1);
+	}
+	loadnewmap(fd, argv[1]);
+	exit(0);
+}
+#endif
+
+void
+loadnewmap(int fd, char *mfil) {
+	FILE *fp;
+	struct stat stbuf;
+	char buf[E_TABSZ];
+	int i;
+
+	if ((fp = findfile(mfil, mapdirpath, mapsuffixes)) == NULL) {
+	        fprintf(stderr, _("mapscrn: cannot open map file _%s_\n"), mfil);
+		exit(1);
+	}
+	if (stat(pathname, &stbuf)) {
+		perror(pathname);
+		fprintf(stderr, _("Cannot stat map file"));
+		exit(1);
+	}
+	if (stbuf.st_size != E_TABSZ) {
+		fprintf(stderr,
+			_("Loading symbolic screen map from file %s\n"),
+			pathname);
+
+		if (parsemap(fp,buf)) {
+			fprintf(stderr, _("Error parsing symbolic map\n"));
+			exit(1);
+		}
+	} else 	{
+		fprintf(stderr, _("Loading binary screen map from file %s\n"),
+			pathname);
+
+		if (fread(buf,E_TABSZ,1,fp) != 1) {
+			fprintf(stderr, _("Cannot read map from file"));
+			exit(1);
+		}
+	}
+	fpclose(fp);
+
+	i = ioctl(fd,PIO_SCRNMAP,buf);
+	if (i) {
+	    perror("PIO_SCRNMAP");
+	    exit(1);
+	}
+
+	if (verbose)
+	  printf(_("Loaded screen map from `%s'\n"), mfil);
+}
+
+static int
+parsemap(FILE *fp, char buf[]) {
+  char buffer[256];
+  int in, on;
+  char *p, *q;
+
+  for (in=0; in<256; in++) buf[in]=in;
+
+  while (fgets(buffer,sizeof(buffer)-1,fp)) {
+      p = strtok(buffer," \t\n");
+      if (p && *p != '#') {
+	  q = strtok(NULL," \t\n#");
+	  if (q) {
+	      in = ctoi(p);
+	      on = ctoi(q);
+	      if (in >= 0 && on >= 0) buf[in] = on;
+	  }
+      }
+  }
+  return(0);
+}
+
+int
+ctoi(unsigned char *s) {
+  int i;
+
+  if ((strncmp(s,"0x",2) == 0) && 
+      (strspn(s+2,"0123456789abcdefABCDEF") == strlen(s+2)))
+    sscanf(s+2,"%x",&i);
+
+  else if ((*s == '0') &&
+	   (strspn(s,"01234567") == strlen(s)))
+    sscanf(s,"%o",&i);
+
+  else if (strspn(s,"0123456789") == strlen(s)) 
+    sscanf(s,"%d",&i);
+
+  else if ((strlen(s) == 3) && (s[0] == '\'') && (s[2] == '\''))
+    i=s[1];
+
+  else return(-1);
+
+  if (i < 0 || i > 255) {
+      fprintf(stderr, _("mapscrn: format error detected in _%s_\n"), s);
+      exit(1);
+  }
+
+  return(i);
+}
+
+void
+saveoldmap(int fd, char *omfil) {
+    FILE *fp;
+    int i;
+    char buf[E_TABSZ];
+
+    if ((fp = fopen(omfil, "w")) == NULL) {
+	perror(omfil);
+	exit(1);
+    }
+    i = ioctl(fd,GIO_SCRNMAP,buf);
+    if (i) {
+	perror("GIO_SCRNMAP");
+	exit(1);
+    }
+    if (fwrite(buf,E_TABSZ,1,fp) != 1) {
+	fprintf(stderr, _("Error writing map to file"));
+	exit(1);
+    }
+    fclose(fp);
+
+    if (verbose)
+      printf(_("Saved screen map in `%s'\n"), omfil);
+}
diff --git a/src/modifiers.h b/src/modifiers.h
new file mode 100644
index 0000000..af44b33
--- /dev/null
+++ b/src/modifiers.h
@@ -0,0 +1,9 @@
+#define M_PLAIN  0
+#define M_SHIFT  (1 << KG_SHIFT)
+#define M_CTRL   (1 << KG_CTRL)
+#define M_ALT    (1 << KG_ALT)
+#define M_ALTGR  (1 << KG_ALTGR)
+#define M_SHIFTL (1 << KG_SHIFTL)
+#define M_SHIFTR (1 << KG_SHIFTR)
+#define M_CTRLL  (1 << KG_CTRLL)
+#define M_CTRLR  (1 << KG_CTRLR)
diff --git a/src/nls.h b/src/nls.h
new file mode 100644
index 0000000..899aff9
--- /dev/null
+++ b/src/nls.h
@@ -0,0 +1,33 @@
+
+#include "../defines.h"		/* for HAVE_locale_h */
+
+#ifndef PACKAGE
+#define PACKAGE	"kbd"
+#endif
+
+#ifndef LOCALEDIR
+#define LOCALEDIR "/usr/share/locale"
+#endif
+
+#ifdef HAVE_locale_h
+# include <locale.h>
+#endif
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# define _(Text) gettext (Text)
+# ifdef gettext_noop
+#  define N_(String) gettext_noop (String)
+# else
+#  define N_(String) (String)
+# endif
+#else
+# undef bindtextdomain
+# define bindtextdomain(Domain, Directory) /* empty */
+# undef textdomain
+# define textdomain(Domain) /* empty */
+# define _(Text) (Text)
+# define N_(Text) (Text)
+#endif
+
+
diff --git a/src/paths.h b/src/paths.h
new file mode 100644
index 0000000..568f8f8
--- /dev/null
+++ b/src/paths.h
@@ -0,0 +1,26 @@
+/*
+ * All data is in subdirectories of DATADIR, by default /usr/lib/kbd
+ * The following four subdirectories are defined:
+ */
+#define KEYMAPDIR "keymaps"
+#define OLDKEYMAPDIR "keytables"
+#define FONTDIR "consolefonts"
+#define TRANSDIR "consoletrans"
+#define VIDEOMODEDIR "videomodes"
+
+/*
+ * Default keymap, and where the kernel copy of it lives.
+ */
+#ifdef sparc
+# define DEFMAP "sunkeymap.map"
+# define KERNDIR "/usr/src/linux/drivers/sbus/char"
+#else
+# define DEFMAP "defkeymap.map"
+# define KERNDIR "/usr/src/linux/drivers/char"
+#endif
+
+extern FILE *findfile(char *fnam, char **dirpath, char **suffixes);
+extern char pathname[];
+extern void fpclose(FILE *fp);
+
+extern int verbose;
diff --git a/src/psf.h b/src/psf.h
new file mode 100644
index 0000000..a87c31e
--- /dev/null
+++ b/src/psf.h
@@ -0,0 +1,16 @@
+#define PSF_MAGIC1	0x36
+#define PSF_MAGIC2	0x04
+
+#define PSF_MODE512    0x01
+#define PSF_MODEHASTAB 0x02
+#define PSF_MAXMODE    0x03
+#define PSF_SEPARATOR  0xFFFF
+
+struct psf_header
+{
+  unsigned char magic1, magic2;	/* Magic number */
+  unsigned char mode;		/* PSF font mode */
+  unsigned char charsize;	/* Character size */
+};
+
+#define PSF_MAGIC_OK(x)	((x).magic1 == PSF_MAGIC1 && (x).magic2 == PSF_MAGIC2)
diff --git a/src/psf.magic b/src/psf.magic
new file mode 100644
index 0000000..220b896
--- /dev/null
+++ b/src/psf.magic
@@ -0,0 +1,8 @@
+#
+# PC Screen (console) Fonts
+#
+0       leshort         0x0436          psf screen font data
+>2      byte            0               256 characters, no index
+>2      byte            1               512 characters, no index
+>2	byte		2		256 characters, Unicode index
+>2	byte		3		512 characters, Unicode index
diff --git a/src/psfaddtable.c b/src/psfaddtable.c
new file mode 100644
index 0000000..141ba23
--- /dev/null
+++ b/src/psfaddtable.c
@@ -0,0 +1,324 @@
+/*
+ * psfaddtable.c
+ *
+ * Add a Unicode character table to a PSF font
+ *
+ * Copyright (C) 1994 H. Peter Anvin
+ *
+ * This program may be freely copied under the terms of the GNU
+ * General Public License (GPL), version 2, or at your option
+ * any later version.
+ *
+ * Added input ranges, aeb.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include <ctype.h>
+#include "psf.h"
+#include "nls.h"
+
+typedef unsigned short unicode;
+
+struct unicode_list
+{
+  unicode uc;			/* Unicode listed */
+  struct unicode_list *next;
+};
+
+void usage(char *argv0)
+{
+  fprintf(stderr, _("Usage: \n"
+	          "        %s psffont chartable [outfile]\n"), argv0);
+  exit(EX_USAGE);
+}
+
+int getunicode(char **p0)
+{
+  char *p = *p0;
+
+  while (*p == ' ' || *p == '\t')
+    p++;
+  if (*p != 'U' || p[1] != '+' ||
+      !isxdigit(p[2]) || !isxdigit(p[3]) || !isxdigit(p[4]) ||
+      !isxdigit(p[5]) || isxdigit(p[6]))
+    return -1;
+  *p0 = p+6;
+  return strtol(p+2,0,16);
+}
+
+struct unicode_list **hookptr[512];
+
+void addpair(int fp, int un)
+{
+  struct unicode_list *newmbr;
+
+  if ( un != PSF_SEPARATOR && un <= 0xFFFF )
+    {
+	/* Add to linked list IN ORDER READ */
+		      
+	newmbr = malloc(sizeof(struct unicode_list));
+	newmbr->uc = (unicode) un;
+	newmbr->next = NULL;
+	*(hookptr[fp]) = newmbr;
+	hookptr[fp] = &(newmbr->next);
+    }
+  /* otherwise: ignore */
+}
+
+int main(int argc, char *argv[])
+{
+  FILE *in, *ctbl, *out;
+  char *inname, *tblname;
+  char buffer[65536];
+  unsigned char unicodepair[2];
+  struct unicode_list *unilist[512];
+  struct unicode_list *newmbr, tmpmbr;
+  struct psf_header psfhdr;
+  int fontlen;
+  int i;
+  int fp0, fp1, un0, un1;
+  char *p, *p1;
+
+  setlocale(LC_ALL, "");
+  bindtextdomain(PACKAGE, LOCALEDIR);
+  textdomain(PACKAGE);
+
+  if ( argc < 3 || argc > 4 )
+    usage(argv[0]);
+
+  if ( !strcmp(argv[1],"-") )
+    {
+      in = stdin;
+      inname = "stdin";
+    }
+  else
+    {
+      in = fopen(inname = argv[1], "r");
+      if ( !in )
+	{
+	  perror(inname);
+	  exit(EX_NOINPUT);
+	}
+    }
+
+  if ( !strcmp(argv[2],"-") && in != stdin )
+    {
+      ctbl = stdin;
+      tblname = "stdin";
+    }
+  else
+    {
+      ctbl = fopen(tblname = argv[2], "r");
+      if ( !ctbl )
+	{
+	  perror(tblname);
+	  exit(EX_NOINPUT);
+	}
+    }
+
+  if ( argc < 4 || !strcmp(argv[3],"-") )
+    out = stdout;
+  else
+    {
+      out = fopen(argv[3], "w");
+      if ( !out )
+	{
+	  perror(argv[3]);
+	  exit(EX_CANTCREAT);
+	}
+    }
+
+  if ( fread(&psfhdr, sizeof(struct psf_header), 1, in) < 1 )
+    {
+      fprintf(stderr, _("%s: Cannot read psf header\n"), inname);
+      exit(EX_DATAERR);
+    }
+
+  if (! PSF_MAGIC_OK(psfhdr) )
+    {
+      fprintf(stderr, _("%s: Bad magic number\n"), inname);
+      exit(EX_DATAERR);
+    }
+
+  if ( psfhdr.mode > PSF_MAXMODE )
+    {
+      fprintf(stderr, _("%s: Unknown mode number (%d)\n"), inname, psfhdr.mode);
+      exit(EX_DATAERR);
+    }
+
+  fontlen = ( psfhdr.mode & PSF_MODE512 ) ? 512 : 256;
+
+  /* Copy font data */
+  if ( fread(buffer, psfhdr.charsize, fontlen, in) < fontlen )
+    {
+      perror(inname);
+      exit(EX_DATAERR);
+    }
+  fclose(in);			/* Done with input */
+
+  /* Set has-table bit in mode field, and copy to output */
+  
+  psfhdr.mode |= PSF_MODEHASTAB;
+  fwrite(&psfhdr, sizeof(struct psf_header), 1, out);
+  fwrite(buffer, psfhdr.charsize, fontlen, out);
+
+  /* Now we come to the tricky part.  Parse the input table. */
+
+  for ( i = 0 ; i < 512 ; i++ )	/* Initialize unicode list */
+    unilist[i] = NULL;
+
+  for ( i = 0 ; i < 512 ; i++ )	/* Initialize hook pointer list */
+    hookptr[i] = &(unilist[i]);
+
+  while ( fgets(buffer, sizeof(buffer), ctbl) != NULL )
+    {
+      if ( (p = strchr(buffer, '\n')) != NULL )
+	*p = '\0';
+      else
+	fprintf(stderr, _("%s: Warning: line too long\n"), tblname);
+
+      p = buffer;
+
+/*
+ * Syntax accepted:
+ *	<fontpos>	<unicode> <unicode> ...
+ *	<range>		idem
+ *	<range>		<unicode range>
+ *
+ * where <range> ::= <fontpos>-<fontpos>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+ */
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (!*p || *p == '#')
+	continue;	/* skip comment or blank line */
+
+      fp0 = strtol(p, &p1, 0);
+      if (p1 == p)
+	{
+	  fprintf(stderr, _("Bad input line: %s\n"), buffer);
+	  exit(EX_DATAERR);
+        }
+      p = p1;
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (*p == '-')
+	{
+	  p++;
+	  fp1 = strtol(p, &p1, 0);
+	  if (p1 == p)
+	    {
+	      fprintf(stderr, _("Bad input line: %s\n"), buffer);
+	      exit(EX_DATAERR);
+	    }
+	  p = p1;
+        }
+      else
+	fp1 = 0;
+
+      if ( fp0 < 0 || fp0 >= fontlen )
+	{
+	    fprintf(stderr,
+		    _("%s: Glyph number (0x%x) larger than font length\n"),
+		    tblname, fp0);
+	    exit(EX_DATAERR);
+	}
+      if ( fp1 && (fp1 < fp0 || fp1 >= fontlen) )
+	{
+	    fprintf(stderr,
+		    _("%s: Bad end of range (0x%x)\n"),
+		    tblname, fp1);
+	    exit(EX_DATAERR);
+	}
+
+      if (fp1)
+	{
+	  /* we have a range; expect the word "idem" or a Unicode range of the
+	     same length */
+	  while (*p == ' ' || *p == '\t')
+	    p++;
+	  if (!strncmp(p, "idem", 4))
+	    {
+	      for (i=fp0; i<=fp1; i++)
+		addpair(i,i);
+	      p += 4;
+	    }
+	  else
+	    {
+	      un0 = getunicode(&p);
+	      while (*p == ' ' || *p == '\t')
+		p++;
+	      if (*p != '-')
+		{
+		  fprintf(stderr,
+			  _("%s: Corresponding to a range of font positions, "
+			    "there should be a Unicode range\n"),
+			  tblname);
+		  exit(EX_DATAERR);
+	        }
+	      p++;
+	      un1 = getunicode(&p);
+	      if (un0 < 0 || un1 < 0)
+		{
+		  fprintf(stderr,
+			  _("%s: Bad Unicode range corresponding to font "
+			    "position range 0x%x-0x%x\n"),
+			  tblname, fp0, fp1);
+		  exit(EX_DATAERR);
+	        }
+	      if (un1 - un0 != fp1 - fp0)
+		{
+		  fprintf(stderr,
+			  _("%s: Unicode range U+%x-U+%x not of the same "
+			    "length as font position range 0x%x-0x%x\n"),
+			  tblname, un0, un1, fp0, fp1);
+		  exit(EX_DATAERR);
+	        }
+	      for (i=fp0; i<=fp1; i++)
+		addpair(i, un0-fp0+i);
+	    }
+        }
+      else
+	{
+	    /* no range; expect a list of unicode values for a single font position */
+
+	    while ( (un0 = getunicode(&p)) >= 0 )
+	      addpair(fp0, un0);
+	}
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (*p && *p != '#')
+	fprintf(stderr, _("%s: trailing junk (%s) ignored\n"), tblname, p);
+    }
+
+  /* Okay, we hit EOF, now glyph table should be read */
+
+  fclose(ctbl);
+
+  for ( i = 0 ; i < fontlen ; i++ )
+    {
+      for ( newmbr = unilist[i] ; newmbr ; newmbr = tmpmbr.next )
+	{
+	  tmpmbr = *newmbr;
+	  unicodepair[0] = (tmpmbr.uc & 0xff);
+	  unicodepair[1] = ((tmpmbr.uc >> 8) & 0xff);
+	  fwrite(unicodepair, sizeof(unicodepair), 1, out);
+	  free(newmbr);
+	}
+
+      /* Write string terminator */
+      unicodepair[0] = (PSF_SEPARATOR & 0xff);
+      unicodepair[1] = ((PSF_SEPARATOR >> 8) & 0xff);
+      fwrite(unicodepair, sizeof(unicodepair), 1, out);
+    }
+
+  fclose(out);
+
+  exit(EX_OK);
+}
diff --git a/src/psfgettable.c b/src/psfgettable.c
new file mode 100644
index 0000000..552daf2
--- /dev/null
+++ b/src/psfgettable.c
@@ -0,0 +1,131 @@
+/*
+ * psfgettable.c
+ *
+ * Extract a Unicode character table from a PSF font
+ *
+ * Copyright (C) 1994 H. Peter Anvin
+ *
+ * This program may be freely copied under the terms of the GNU
+ * General Public License (GPL), version 2, or at your option
+ * any later version.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include "psf.h"
+#include "nls.h"
+
+typedef unsigned short unicode;
+void usage(char *argv0)
+{
+  fprintf(stderr, _("Usage: \n"
+		    "        %s psffont [outfile]\n"), argv0);
+  exit(EX_USAGE);
+}
+
+int
+main(int argc, char *argv[])
+{
+  FILE *in, *out;
+  char *inname;
+  struct psf_header psfhdr;
+  int glyph;
+  unicode unichar;
+  unsigned char unicodepair[2];
+  int fontlen;
+
+  setlocale(LC_ALL, "");
+  bindtextdomain(PACKAGE, LOCALEDIR);
+  textdomain(PACKAGE);
+
+  if ( argc < 2 || argc > 3 )
+    usage(argv[0]);
+
+  if ( !strcmp(argv[1],"-") )
+    {
+      in = stdin;
+      inname = "stdin";
+    }
+  else
+    {
+      in = fopen(inname = argv[1], "r");
+      if ( !in )
+        {
+          perror(inname);
+          exit(EX_NOINPUT);
+        }
+    }
+
+  if ( argc < 4 || !strcmp(argv[3],"-") )
+    out = stdout;
+  else
+    {
+      out = fopen(argv[3], "w");
+      if ( !out )
+        {
+          perror(argv[3]);
+          exit(EX_CANTCREAT);
+        }
+    }
+
+  if ( fread(&psfhdr, sizeof(struct psf_header), 1, in) < 1 )
+    {
+      fprintf(stderr, _("%s: Cannot read psf header\n"), inname);
+      exit(EX_DATAERR);
+    }
+  
+  if (! PSF_MAGIC_OK(psfhdr) )
+    {
+      fprintf(stderr, _("%s: Bad magic number\n"), inname);
+      exit(EX_DATAERR);
+    }
+  
+  if ( psfhdr.mode > PSF_MAXMODE )
+    {
+      fprintf(stderr, _("%s: Unknown mode number (%d)\n"),
+	      inname, psfhdr.mode);
+      exit(EX_DATAERR);
+    }
+  
+  fontlen = ( psfhdr.mode & PSF_MODE512 ) ? 512 : 256;
+
+  if ( ! (psfhdr.mode & PSF_MODEHASTAB ) )
+    {
+      fprintf(stderr, _("%s: Font has no character table\n"), inname);
+      exit(EX_DATAERR);
+    }
+
+    /* Skip font data */
+  if ( fseek(in, psfhdr.charsize * fontlen, SEEK_CUR) == -1)
+    {
+      perror(inname);
+      exit(EX_DATAERR);
+    }
+
+  /* Copy table */
+
+  fprintf(out, "#\n# Character table extracted from font %s\n#\n", inname);
+
+  for ( glyph = 0 ; glyph < fontlen ; glyph++ )
+    {
+      if ( fontlen <= 256 )
+	fprintf(out, "0x%02x\t", glyph);
+      else
+	fprintf(out, "0x%03x\t", glyph);
+
+      while ( fread(unicodepair, sizeof(unicodepair), 1, in) == 1 ) {
+	      unichar = (unicodepair[0] | (unicodepair[1] << 8));
+	      if ( unichar == PSF_SEPARATOR )
+		      break;
+	      fprintf(out, " U+%04x", unichar);
+      }
+      putc('\n', out);
+    }
+
+  fclose(in);
+  fclose(out);
+
+  exit(EX_OK);
+}
diff --git a/src/psfstriptable.c b/src/psfstriptable.c
new file mode 100644
index 0000000..0704e6c
--- /dev/null
+++ b/src/psfstriptable.c
@@ -0,0 +1,116 @@
+/*
+ * psfgettable.c
+ *
+ * Extract a Unicode character table from a PSF font
+ *
+ * Copyright (C) 1994 H. Peter Anvin
+ *
+ * This program may be freely copied under the terms of the GNU
+ * General Public License (GPL), version 2, or at your option
+ * any later version.
+ *
+ * fix, aeb, 970316
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include "psf.h"
+#include "nls.h"
+
+typedef unsigned short unicode;
+void usage(char *argv0)
+{
+  fprintf(stderr, _("Usage: \n"
+		    "        %s psffont [outfile]\n"), argv0);
+  exit(EX_USAGE);
+}
+
+int
+main(int argc, char *argv[])
+{
+  FILE *in, *out;
+  char *inname;
+  struct psf_header psfhdr;
+  int fontlen;
+  char buffer[65536];		/* Font data, is scratch only */
+
+  setlocale(LC_ALL, "");
+  bindtextdomain(PACKAGE, LOCALEDIR);
+  textdomain(PACKAGE);
+
+  if ( argc < 2 || argc > 3 )
+    usage(argv[0]);
+
+  if ( !strcmp(argv[1],"-") )
+    {
+      in = stdin;
+      inname = "stdin";
+    }
+  else
+    {
+      in = fopen(inname = argv[1], "r");
+      if ( !in )
+        {
+          perror(inname);
+          exit(EX_NOINPUT);
+        }
+    }
+
+  if ( argc < 3 || !strcmp(argv[2],"-") )
+    out = stdout;
+  else
+    {
+      out = fopen(argv[2], "w");
+      if ( !out )
+        {
+          perror(argv[2]);
+          exit(EX_CANTCREAT);
+        }
+    }
+
+  if ( fread(&psfhdr, sizeof(struct psf_header), 1, in) < 1 )
+    {
+      fprintf(stderr, _("%s: Cannot read psf header\n"), inname);
+      exit(EX_DATAERR);
+    }
+  
+  if (! PSF_MAGIC_OK(psfhdr) )
+    {
+      fprintf(stderr, _("%s: Bad magic number\n"), inname);
+      exit(EX_DATAERR);
+    }
+  
+  if ( psfhdr.mode > PSF_MAXMODE )
+    {
+      fprintf(stderr, _("%s: Unknown mode number (%d)\n"),
+	      inname, psfhdr.mode);
+      exit(EX_DATAERR);
+    }
+  
+  fontlen = ( psfhdr.mode & PSF_MODE512 ) ? 512 : 256;
+
+  if ( ! (psfhdr.mode & PSF_MODEHASTAB ) )
+    {
+      fprintf(stderr, _("%s: Font already had no character table\n"), inname);
+    }
+
+  psfhdr.mode &= ~PSF_MODEHASTAB; /* Clear the bit */
+  
+  /* Read font data */
+  if ( fread(buffer, psfhdr.charsize, fontlen, in) < fontlen )
+    {
+      perror(inname);
+      exit(EX_DATAERR);
+    }
+
+  fclose(in);
+
+  /* Write new font file */
+  fwrite(&psfhdr, sizeof(struct psf_header), 1, out);
+  fwrite(buffer, psfhdr.charsize, fontlen, out);
+  fclose(out);
+
+  exit(EX_OK);
+}
diff --git a/src/resizecons.c b/src/resizecons.c
new file mode 100644
index 0000000..14b3bed
--- /dev/null
+++ b/src/resizecons.c
@@ -0,0 +1,471 @@
+/*
+ * resizecons.c - change console video mode
+ *
+ * Version 0.98
+ *
+ * How to use this:
+ *
+ * 1. Get svgalib, make restoretextmode, put it somewhere in your path.
+ * 2. Put vga=ask in /etc/lilo/config, boot your machine a number of times,
+ *    each time with a different vga mode, and run the command
+ *        "restoretextmode -w COLSxROWS".
+ *    For me this resulted in the files 80x25, 80x28, 80x50, 80x60, 100x40,
+ *    132x25, 132x28, 132x44. Put these files in /usr/lib/kbd/videomodes
+ *    (or in your current dir).
+ * 3. Now "resizecons COLSxROWS" will change your video mode. (Assuming you have
+ *    an appropriate kernel, and svgalib works for your video card.)
+ *
+ * Note: this is experimental, but it works for me. Comments are welcome.
+ * You may have to be root to get the appropriate ioperm permissions.
+ * It is not safe to make this program suid root.
+ *
+ * aeb@cwi.nl - 940924
+ *
+ * Harm Hanemaaijer added the -lines option, which reprograms the
+ * number of scanlines. He writes:
+ *
+ * Added -lines option, which reprograms the number of scanlines and
+ * the font height of the VGA hardware with register I/O, so that
+ * switching is possible between textmodes with different numbers
+ * of lines, in a VGA compatible way. It should work for 132 column
+ * modes also, except that number of columns cannot be changed.
+ *
+ * Standard VGA textmode uses a 400 scanline screen which is refreshed
+ * at 70 Hz. The following modes are supported that use this vertical
+ * resolution (C is the number of columns, usually 80 or 132).
+ *
+ *	mode		font height
+ *	C x 25		16
+ *	C x 28		14
+ *	C x 36		11	(non-standard height)
+ *	C x 44		9	(8-line fonts are a good match)
+ *	C x 50		8
+ *
+ * The following modes are supported with a 480 scanline resolution,
+ * refresh at 60 Hz. Some not quite VGA compatible displays may not
+ * support this (it uses the same vertical timing as standard VGA
+ * 640x480x16 graphics mode).
+ *
+ *	mode		font height
+ *	C x 30		16
+ *	C x 34		14
+ *	C x 40		12	(non-standard height)
+ *	C x 60		8
+ *
+ * Two 12-line fonts are already in the consolefonts directory,
+ * namely lat1-12.psf and lat2-12.psf.
+ * For the 36 lines mode (11 line font), lat1-10.psf and lat2-10.psf
+ * can be used.
+ * 
+ * hhanemaa@cs.ruu.nl - 941028
+ * 
+ * Notes:
+ *
+ * In the consolefonts directory there is 'default8x9' font file but
+ * no 'default8x8'. Why is this? The standard VGA BIOS has an 8-line
+ * font, and they are much more common in SVGA modes (e.g. 50 and 60
+ * row modes). It is true that standard VGA textmode uses effectively
+ * 9 pixel wide characters, but that has nothing to do with the font
+ * data.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <errno.h>
+#include <signal.h>
+#include <sys/ioctl.h>
+#if (__GNU_LIBRARY__ >= 6)
+#include <sys/perm.h>
+#else
+#include <linux/types.h>
+#include <linux/termios.h>
+#endif
+#include <linux/vt.h>
+#include "paths.h"
+#include "nls.h"
+
+#define MODE_RESTORETEXTMODE	0
+#define MODE_VGALINES		1
+
+extern char *index();
+extern int getfd();
+static void usage(void);
+
+/* VGA textmode register tweaking. */
+static void vga_init_io();
+static void vga_400_scanlines();
+static void vga_480_scanlines();
+static void vga_set_fontheight( int );
+static int vga_get_fontheight();
+static void vga_set_cursor( int, int );
+static void vga_set_verticaldisplayend_lowbyte( int );
+
+char *dirpath[] = { "", DATADIR "/" VIDEOMODEDIR "/", 0};
+char *suffixes[] = { "", 0 };
+
+int
+main(argc, argv) int argc; char **argv; {
+    int rr, cc, fd, i, mode;
+    struct vt_sizes vtsizes;
+    struct vt_stat vtstat;
+    struct winsize winsize;
+    char *p;
+    char tty[12], cmd[80], infile[1024];
+    FILE *fin;
+    char *defaultfont;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (argc < 2)
+      usage();
+    rr = 0;			/* make gcc happy */
+    cc = atoi(argv[1]);
+    mode = MODE_RESTORETEXTMODE;
+    if (argc == 3 && strcmp(argv[1], "-lines") == 0) {
+    	mode = MODE_VGALINES;
+    	rr = atoi(argv[2]);
+    }
+    else
+    if (argc == 2 && (p = index(argv[1], 'x')) != 0)
+      rr = atoi(p+1);
+    else if(argc == 3)
+      rr = atoi(argv[2]);
+    else
+      usage();
+
+    if (mode == MODE_RESTORETEXTMODE) {
+        /* prepare for: restoretextmode -r 80x25 */
+        sprintf(infile, "%dx%d", cc, rr);
+        fin = findfile(infile, dirpath, suffixes);
+        if (!fin) {
+	    fprintf(stderr, _("resizecons: cannot find videomode file %s\n"),
+		    infile);
+	    exit(1);
+	}
+ 	fpclose(fin);
+    }
+
+    fd = getfd();
+
+    if(ioctl(fd, TIOCGWINSZ, &winsize)) {
+	perror("TIOCGWINSZ");
+	exit(1);
+    }
+
+    if (mode == MODE_VGALINES) {
+    	/* Get the number of columns. */
+    	cc = winsize.ws_col;
+    	if (rr != 25 && rr != 28 && rr !=30 && rr != 34 && rr != 36
+    	&& rr != 40 && rr != 44 && rr != 50 && rr != 60) {
+    	    fprintf(stderr, _("Invalid number of lines\n"));
+	    exit(1);
+	}
+    }
+
+    if(ioctl(fd, VT_GETSTATE, &vtstat)) {
+	perror("VT_GETSTATE");
+	exit(1);
+    }
+
+    vtsizes.v_rows = rr;
+    vtsizes.v_cols = cc;
+    vtsizes.v_scrollsize = 0;
+
+    vga_init_io();		/* maybe only if (mode == MODE_VGALINES) */
+
+    if(ioctl(fd, VT_RESIZE, &vtsizes)) {
+	perror("VT_RESIZE");
+	exit(1);
+    }
+
+    if (mode == MODE_VGALINES) {
+        /* Program the VGA registers. */
+        int scanlines_old;
+        int scanlines_new;
+        int fontheight;
+   	if (winsize.ws_row == 25 || winsize.ws_row == 28 ||
+   	winsize.ws_row == 36 || winsize.ws_row == 44 ||
+   	winsize.ws_row == 50)
+   	    scanlines_old = 400;
+   	else
+   	    scanlines_old = 480;
+   	if (rr == 25 || rr == 28 || rr == 36 || rr == 44 || rr == 50)
+   	    scanlines_new = 400;
+   	else
+   	    scanlines_new = 480;
+        /* Switch to 400 or 480 scanline vertical timing if required. */
+        if (scanlines_old != 400 && scanlines_new == 400)
+            vga_400_scanlines();
+        if (scanlines_old != 480 && scanlines_new == 480)
+            vga_480_scanlines();
+        switch (rr) {
+        case 25 : fontheight = 16; break;
+        case 28 : fontheight = 14; break;
+        case 30 : fontheight = 16; break;
+        case 34 : fontheight = 14; break;
+        case 36 : fontheight = 12; break;
+        case 40 : fontheight = 12; break;
+        case 44 : fontheight = 9; break;
+        case 50 : fontheight = 8; break;
+        case 60 : fontheight = 8; break;
+        default : fontheight = 8; break;
+	}
+	/* Set the VGA character height. */
+	vga_set_fontheight(fontheight);
+	/* Set the line offsets within a character cell of the cursor. */
+	if (fontheight >= 10)
+	    vga_set_cursor(fontheight - 3, fontheight - 2);
+	else
+	    vga_set_cursor(fontheight - 2, fontheight - 1);
+	/*
+	 * If there are a few unused scanlines at the bottom of the
+	 * screen, make sure they are not displayed (otherwise
+	 * there is a annoying changing partial line at the bottom).
+	 */
+        vga_set_verticaldisplayend_lowbyte((fontheight * rr - 1) & 0xff);
+	printf(_("Old mode: %dx%d  New mode: %dx%d\n"), winsize.ws_col,
+		winsize.ws_row, cc, rr);
+	printf(_("Old #scanlines: %d  New #scanlines: %d  Character height: %d\n"),
+		scanlines_old, scanlines_new, fontheight);
+    }
+
+    if (mode == MODE_RESTORETEXTMODE) {
+	/* do: restoretextmode -r 25x80 */
+	sprintf(cmd, "restoretextmode -r %s\n", pathname);
+	errno = 0;
+	if(system(cmd)) {
+	    if(errno)
+		perror("restoretextmode");
+	    fprintf(stderr, _("resizecons: the command `%s' failed\n"), cmd);
+	    exit(1);
+	}
+    }
+
+    /*
+     * for i in /dev/tty[0-9] /dev/tty[0-9][0-9]
+     * do
+     *     stty rows $rr cols $cc < $i
+     * done
+     * kill -SIGWINCH `cat /tmp/selection.pid`
+     */
+    winsize.ws_row = rr;
+    winsize.ws_col = cc;
+    for (i=0; i<16; i++)
+      if (vtstat.v_state & (1<<i)) {
+	  sprintf(tty, "/dev/tty%d", i);
+	  if ((fd = open(tty, 0)) > 0) {
+	      if(ioctl(fd, TIOCSWINSZ, &winsize))
+		perror("TIOCSWINSZ");
+	      close(fd);
+	  }
+      }
+
+    /* Try to tell selection about the change */
+    if ((fd = open("/tmp/selection.pid", 0)) >= 0) {
+	char buf[64];
+	int n = read(fd, buf, sizeof(buf));
+	if (n > 0) {
+	    int pid;
+
+	    buf[n-1] = 0;
+	    pid = atoi(buf);
+	    kill(pid, SIGWINCH);
+	}
+	close(fd);
+    }
+
+    /* do: setfont default8x16 */
+    /* (other people might wish other fonts - this should be settable) */
+
+    /* We read the VGA font height register to be sure. */
+    /* There isn't much consistency in this. */
+    switch (vga_get_fontheight()) {
+    case 8 :
+    case 9 : defaultfont = "default8x9"; break;
+    case 10 : defaultfont = "lat1-10.psf"; break;
+    case 11 :
+    case 12 : defaultfont = "lat1-12.psf"; break;
+    case 13 :
+    case 14 : defaultfont = "iso01.f14"; break;
+    case 15 :
+    case 16 :
+    default : defaultfont = "default8x16"; break;
+    }
+
+    sprintf(cmd, "setfont %s", defaultfont);
+    errno = 0;
+    if(system(cmd)) {
+	if(errno)
+	    perror("setfont");
+	fprintf(stderr, "resizecons: the command `%s' failed\n", cmd);
+	exit(1);
+    }
+
+    fprintf(stderr, _("resizecons: don't forget to change TERM "
+		      "(maybe to con%dx%d or linux-%dx%d)\n"),
+	    cc, rr, cc, rr);
+    if (getenv("LINES") || getenv("COLUMNS"))
+      fprintf(stderr,
+	      "Also the variables LINES and COLUMNS may need adjusting.\n");
+
+    return 0;
+}
+
+void
+usage() {
+    fprintf(stderr,
+	    _("resizecons:\n"
+	      "call is:  resizecons COLSxROWS  or:  resizecons COLS ROWS\n"
+	      "or: resizecons -lines ROWS, with ROWS one of 25, 28, 30, 34,"
+	      " 36, 40, 44, 50, 60\n"));
+    exit(1);
+}
+
+/*
+ * The code below is used only with the option `-lines ROWS', and is
+ * very hardware dependent, and requires root privileges.
+ */
+
+/* Port I/O macros. Note that these are not compatible with the ones */
+/* defined in the kernel header files. */
+
+static inline void outb( int port, int value )
+{
+	__asm__ volatile ("outb %0,%1"
+	: : "a" ((unsigned char)value), "d" ((unsigned short)port));
+}
+
+static inline int inb( int port )
+{
+	unsigned char value;
+	__asm__ volatile ("inb %1,%0"
+		: "=a" (value)
+		: "d" ((unsigned short)port));
+	return value;
+}
+
+
+/* VGA textmode register tweaking functions. */
+
+static int crtcport;
+
+static void vga_init_io() {
+	if (iopl(3) < 0) {
+		fprintf(stderr,
+			_("resizecons: cannot get I/O permissions.\n"));
+		exit(1);
+	}
+	crtcport = 0x3d4;
+	if ((inb(0x3cc) & 0x01) == 0)
+		crtcport = 0x3b4;
+}
+
+static void vga_set_fontheight( int h ) {
+	outb(crtcport, 0x09);
+	outb(crtcport + 1, (inb(crtcport + 1) & 0xe0) | (h - 1));
+}
+
+static int vga_get_fontheight() {
+	outb(crtcport, 0x09);
+	return (inb(crtcport + 1) & 0x1f) + 1;
+}
+
+static void vga_set_cursor( int top, int bottom ) {
+	outb(crtcport, 0x0a);
+	outb(crtcport + 1, (inb(crtcport + 1) & 0xc0) | top);
+	outb(crtcport, 0x0b);
+	outb(crtcport + 1, (inb(crtcport + 1) & 0xe0) | bottom);
+}
+
+static void vga_set_verticaldisplayend_lowbyte( int byte ) {
+	/* CRTC register 0x12 */
+	/* vertical display end */
+	outb(crtcport, 0x12);
+	outb(crtcport + 1, byte);
+}
+
+static void vga_480_scanlines() {
+	/* CRTC register 0x11 */
+	/* vertical sync end (also unlocks CR0-7) */
+	outb(crtcport, 0x11);
+	outb(crtcport + 1, 0x0c);
+
+	/* CRTC register 0x06 */
+	/* vertical total */
+	outb(crtcport, 0x06);
+	outb(crtcport + 1, 0x0b);
+
+	/* CRTC register 0x07 */
+	/* (vertical) overflow */
+	outb(crtcport, 0x07);
+	outb(crtcport + 1, 0x3e);
+
+	/* CRTC register 0x10 */
+	/* vertical sync start */
+	outb(crtcport, 0x10);
+	outb(crtcport + 1, 0xea);
+
+	/* CRTC register 0x12 */
+	/* vertical display end */
+	outb(crtcport, 0x12);
+	outb(crtcport + 1, 0xdf);
+
+	/* CRTC register 0x15 */
+	/* vertical blank start */
+	outb(crtcport, 0x15);
+	outb(crtcport + 1, 0xe7);
+
+	/* CRTC register 0x16 */
+	/* vertical blank end */
+	outb(crtcport, 0x16);
+	outb(crtcport + 1, 0x04);
+
+	/* Misc Output register */
+	/* Preserver clock select bits and set correct sync polarity */
+	outb(0x3c2, (inb(0x3cc) & 0x0d) | 0xe2);
+}
+
+static void vga_400_scanlines() {
+	/* CRTC register 0x11 */
+	/* vertical sync end (also unlocks CR0-7) */
+	outb(crtcport, 0x11);
+	outb(crtcport + 1, 0x0e);
+
+	/* CRTC register 0x06 */
+	/* vertical total */
+	outb(crtcport, 0x06);
+	outb(crtcport + 1, 0xbf);
+
+	/* CRTC register 0x07 */
+	/* (vertical) overflow */
+	outb(crtcport, 0x07);
+	outb(crtcport + 1, 0x1f);
+
+	/* CRTC register 0x10 */
+	/* vertical sync start */
+	outb(crtcport, 0x10);
+	outb(crtcport + 1, 0x9c);
+
+	/* CRTC register 0x12 */
+	/* vertical display end */
+	outb(crtcport, 0x12);
+	outb(crtcport + 1, 0x8f);
+
+	/* CRTC register 0x15 */
+	/* vertical blank start */
+	outb(crtcport, 0x15);
+	outb(crtcport + 1, 0x96);
+
+	/* CRTC register 0x16 */
+	/* vertical blank end */
+	outb(crtcport, 0x16);
+	outb(crtcport + 1, 0xb9);
+
+	/* Misc Output register */
+	/* Preserver clock select bits and set correct sync polarity */
+	outb(0x3c2, (inb(0x3cc) & 0x0d) | 0x62);
+}
diff --git a/src/screendump.c b/src/screendump.c
new file mode 100644
index 0000000..24ebaa6
--- /dev/null
+++ b/src/screendump.c
@@ -0,0 +1,139 @@
+/*
+ * screendump.c - aeb 950214
+ *
+ * [Note: similar functionality can be found in setterm]
+ *
+ * Call: "screendump N" when the screen of /dev/ttyN has to be dumped
+ *
+ * On Linux up to 1.1.91 there is an ioctl that will do the dumping.
+ * Because of problems with security this has been scrapped.
+ * From 1.1.92 on, make devices "virtual console screen" and
+ * "virtual console screen with attributes" by (fill in the ellipses):
+ *	cd /dev
+ *	for i in 0 1 2 3 ...; do
+ *		mknod vcs$i c 7 $i
+ *		mknod vcsa$i c 7 `expr 128 + $i`
+ *	done
+ * and give them your favourite owners and permissions.
+ */
+#include <stdio.h>
+#include <linux/termios.h>
+#include "nls.h"
+extern char *malloc();
+
+int
+main(int argc, char **argv) {
+    int cons = 0;
+    char infile[20];
+    unsigned char header[4];
+    unsigned int rows, cols;
+    int fd, i, j;
+    char *inbuf, *outbuf, *p, *q;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (argc > 2) {
+	fprintf(stderr, _("usage: screendump [n]\n"));
+	exit(1);
+    }
+
+    cons = (argc == 2) ? atoi(argv[1]) : 0;
+
+    sprintf(infile, "/dev/vcsa%d", cons);
+    fd = open(infile, 0);
+    if (fd < 0 || read(fd, header, 4) != 4)
+      goto try_ioctl;
+    rows = header[0];
+    cols = header[1];
+    if (rows * cols == 0)
+      goto try_ioctl;
+    inbuf = malloc(rows*cols*2);
+    outbuf = malloc(rows*(cols+1));
+    if(!inbuf || !outbuf) {
+        fprintf(stderr, _("Out of memory?\n"));
+        exit(1);
+    }
+    if (read(fd, inbuf, rows*cols*2) != rows*cols*2) {
+        fprintf(stderr, _("Error reading %s\n"), infile);
+        exit(1);
+    }
+    p = inbuf;
+    q = outbuf;
+    for(i=0; i<rows; i++) {
+        for(j=0; j<cols; j++) {
+            *q++ = *p;
+            p += 2;
+        }
+        while(j-- > 0 && q[-1] == ' ')
+          q--;
+        *q++ = '\n';
+    }
+    goto done;
+
+try_ioctl:
+    {
+	struct winsize win;
+	char consnam[20];
+	unsigned char *screenbuf;
+
+	sprintf(consnam, "/dev/tty%d", cons);
+	if((fd = open(consnam, 0)) < 0) {
+	    perror(consnam);
+	    fd = 0;
+	}
+
+	if (ioctl(fd,TIOCGWINSZ,&win)) {
+	    perror("TIOCGWINSZ");
+	    exit(1);
+	}
+
+	screenbuf = malloc(2 + win.ws_row * win.ws_col);
+	if (!screenbuf) {
+	    fprintf(stderr, _("Out of memory.\n"));
+	    exit(1);
+	}
+
+	screenbuf[0] = 0;
+	screenbuf[1] = (unsigned char) cons;
+
+	if (ioctl(fd,TIOCLINUX,screenbuf) &&
+	    (!fd || ioctl(0,TIOCLINUX,screenbuf))) {
+	    perror("TIOCLINUX");
+	    fprintf(stderr,_("couldn't read %s, and cannot ioctl dump\n"),
+		    infile);
+	    exit(1);
+	}
+
+        rows = screenbuf[0];
+        cols = screenbuf[1];
+	if (rows != win.ws_row || cols != win.ws_col) {
+	    fprintf(stderr,
+		    _("Strange ... screen is both %dx%d and %dx%d ??\n"),
+		    win.ws_col, win.ws_row, cols, rows);
+	    exit(1);
+	}
+
+	outbuf = malloc(rows*(cols+1));
+	if(!outbuf) {
+	    fprintf(stderr, _("Out of memory?\n"));
+	    exit(1);
+	}
+	p = screenbuf + 2;
+	q = outbuf;
+        for (i=0; i<rows; i++) {
+	    for (j=0; j<cols; j++)
+	      *q++ = *p++;
+            while (j-- > 0 && (q[-1] == ' '))
+              q--;
+	    *q++ = '\n';
+        }
+    }
+done:
+    if (write(1, outbuf, q-outbuf) != q-outbuf) {
+        fprintf(stderr, _("Error writing screendump\n"));
+        exit(1);
+    }
+    exit(0);
+}
diff --git a/src/setfont.c b/src/setfont.c
new file mode 100644
index 0000000..01b0125
--- /dev/null
+++ b/src/setfont.c
@@ -0,0 +1,532 @@
+/*
+ * setfont.c - Eugene Crosser & Andries Brouwer
+ *
+ * Version 0.98
+ *
+ * Loads the console font, and possibly the corresponding screen map(s).
+ * We accept two kind of screen maps, one [-m] giving the correspondence
+ * between some arbitrary 8-bit character set currently in use and the
+ * font positions, and the second [-u] giving the correspondence between
+ * font positions and Unicode values.
+ */
+#define VERSION "0.98"
+
+#include <stdio.h>
+#include <memory.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/kd.h>
+#include <endian.h>
+#include "paths.h"
+#include "psf.h"
+#include "nls.h"
+
+char *progname;
+
+static int position_codepage(int iunit);
+static void saveoldfont(int fd, char *ofil);
+static void saveoldfontplusunicodemap(int fd, char *Ofil);
+static void loadnewfont(int fd, char *ifil,
+			int iunit, int hwunit, int no_m, int no_u);
+static void restorefont(int fd);
+extern void saveoldmap(int fd, char *omfil);
+extern void loadnewmap(int fd, char *mfil);
+extern void saveunicodemap(int fd, char *oufil);
+extern void loadunicodemap(int fd, char *ufil);
+extern void appendunicodemap(int fd, FILE *fp, int ct);
+extern void activatemap(void);
+extern int getfd(void);
+extern int getfont(int fd, char *buf, int *count);
+extern int putfont(int fd, char *buf, int count, int height);
+extern int font_charheight(char *buf, int count);
+extern char *malloc();
+
+int verbose = 0;
+int force = 0;
+
+/* search for the font in these directories (with trailing /) */
+char *fontdirpath[] = { "", DATADIR "/" FONTDIR "/", 0 };
+char *fontsuffixes[] = { "", ".psfu", ".psf", ".cp", ".fnt", 0 };
+
+static inline FILE*
+findfont(char *fnam) {
+    return findfile(fnam, fontdirpath, fontsuffixes);
+}
+
+void
+usage(void)
+{
+        fprintf(stderr, _(
+"Usage: setfont [write-options] [-<N>] [newfont] [-m consolemap] [-u unicodemap]\n"
+"  write-options (take place before file loading):\n"
+"    -o  <filename>	Write current font to <filename>\n"
+"    -om <filename>	Write current consolemap to <filename>\n"
+"    -ou <filename>	Write current unicodemap to <filename>\n"
+"If no newfont and no -[o|om|ou|m|u] option is given, a default font is loaded:\n"
+"    setfont             Load font \"default[.gz]\"\n"
+"    setfont -<N>        Load font \"default8x<N>[.gz]\"\n"
+"The -<N> option selects a font from a codepage that contains three fonts:\n"
+"    setfont -{8|14|16} codepage.cp[.gz]   Load 8x<N> font from codepage.cp\n"
+"Explicitly (with -m or -u) or implicitly (in the fontfile) given mappings will\n"
+"be loaded and, in the case of consolemaps, activated.\n"
+"    -h<N>       (no space) Override font height.\n"
+"    -m none	Suppress loading and activation of a mapping table.\n"
+"    -u none	Suppress loading of a unicode map.\n"
+"    -v		Be verbose.\n"
+"    -V		Print version and exit.\n"
+"Files are loaded from the current directory or /usr/lib/kbd/*/.\n"
+));
+	exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+	char *ifil, *mfil, *ufil, *Ofil, *ofil, *omfil, *oufil;
+	int fd, i, iunit, hwunit, no_m, no_u;
+	int restore = 0;
+
+	progname = argv[0];
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	fd = getfd();
+
+	ifil = mfil = ufil = Ofil = ofil = omfil = oufil = 0;
+	iunit = hwunit = 0;
+	no_m = no_u = 0;
+
+	for (i = 1; i < argc; i++) {
+	    if (!strcmp(argv[i], "-V")) {
+	        printf(_("setfont version %s\n"), VERSION);
+		exit(0);
+	    } else if (!strcmp(argv[i], "-v")) {
+	        verbose = 1;
+	    } else if (!strcmp(argv[i], "-R")) {
+		restore = 1;
+	    } else if (!strcmp(argv[i], "-O")) {
+		if (++i == argc || Ofil)
+		  usage();
+		Ofil = argv[i];
+	    } else if (!strcmp(argv[i], "-o")) {
+		if (++i == argc || ofil)
+		  usage();
+		ofil = argv[i];
+	    } else if (!strcmp(argv[i], "-om")) {
+		if (++i == argc || omfil)
+		  usage();
+		omfil = argv[i];
+	    } else if (!strcmp(argv[i], "-ou")) {
+		if (++i == argc || oufil)
+		  usage();
+		oufil = argv[i];
+	    } else if (!strcmp(argv[i], "-m")) {
+		if (++i == argc || mfil)
+		  usage();
+		if (!strcmp(argv[i], "none"))
+		  no_m = 1;
+		else
+		  mfil = argv[i];
+	    } else if (!strcmp(argv[i], "-u")) {
+		if (++i == argc || ufil)
+		  usage();
+		if (!strcmp(argv[i], "none"))
+		  no_u = 1;
+		else
+		  ufil = argv[i];
+	    } else if (!strcmp(argv[i], "-f")) {
+		force = 1;
+	    } else if (!strncmp(argv[i], "-h", 2)) {
+		hwunit = atoi(argv[i]+2);
+		if (hwunit <= 0 || hwunit > 32)
+		  usage();
+	    } else if (argv[i][0] == '-') {
+		iunit = atoi(argv[i]+1);
+		if(iunit <= 0 || iunit > 32)
+		  usage();
+	    } else {
+		if (ifil)
+		  usage();
+		ifil = argv[i];
+	    }
+	}
+
+	if (ifil && restore) {
+	    fprintf(stderr, _("setfont: cannot both restore from character ROM"
+			      " and from file. Font unchanged.\n"));
+	    exit(1);
+	}
+
+	if (!ifil && !mfil && !ufil &&
+	    !Ofil && !ofil && !omfil && !oufil && !restore)
+	  /* reset to some default */
+	  ifil = "";
+
+	if (Ofil)
+	  saveoldfontplusunicodemap(fd, Ofil);
+
+	if (ofil)
+	  saveoldfont(fd, ofil);
+
+	if (omfil)
+	  saveoldmap(fd, omfil);
+
+	if (oufil)
+	  saveunicodemap(fd, oufil);
+
+	if (mfil) {
+	    loadnewmap(fd, mfil);
+	    activatemap();
+	    no_m = 1;
+	}
+
+	if (ufil)
+	  no_u = 1;
+
+	if (restore)
+	  restorefont(fd);
+
+	if (ifil)
+	  loadnewfont(fd, ifil, iunit, hwunit, no_m, no_u);
+
+	if (ufil)
+	  loadunicodemap(fd, ufil);
+
+	return 0;
+}
+
+static void
+restorefont(int fd) {
+	/* On most kernels this won't work since it is not supported
+	   when BROKEN_GRAPHICS_PROGRAMS is defined, and that is defined
+	   by default.  Moreover, this is not defined for vgacon. */
+	if (ioctl(fd, PIO_FONTRESET, 0)) {
+		perror("PIO_FONTRESET");
+	}
+}
+
+static void
+do_loadfont(int fd, char *inbuf, int unit, int hwunit, int fontsize) {
+	char buf[16384];
+	int i;
+
+	memset(buf,0,sizeof(buf));
+
+	if (unit < 1 || unit > 32) {
+	    fprintf(stderr, _("Bad character size %d\n"), unit);
+	    exit(1);
+	}
+
+	if (!hwunit)
+	    hwunit = unit;
+
+	for (i = 0; i < fontsize; i++)
+	    memcpy(buf+(32*i), inbuf+(unit*i), unit);
+
+	if (verbose)
+	  printf(_("Loading %d-char 8x%d font from file %s\n"),
+		 fontsize, unit, pathname);
+
+	if (putfont(fd, buf, fontsize, hwunit))
+	  exit(1);
+}
+
+static void
+do_loadtable(int fd, unsigned char *inbuf, int tailsz, int fontsize) {
+	struct unimapinit advice;
+	struct unimapdesc ud;
+	struct unipair *up;
+	int ct = 0, maxct;
+	int glyph;
+	u_short unicode;
+
+	maxct = tailsz;		/* more than enough */
+	up = (struct unipair *) malloc(maxct * sizeof(struct unipair));
+	if (!up) {
+	    fprintf(stderr, _("Out of memory?\n"));
+	    exit(1);
+	}
+	for (glyph = 0; glyph < fontsize; glyph++) {
+	    while (tailsz >= 2) {
+		unicode = (((u_short) inbuf[1]) << 8) + inbuf[0];
+		tailsz -= 2;
+		inbuf += 2;
+		if (unicode == PSF_SEPARATOR)
+		    break;
+		up[ct].unicode = unicode;
+		up[ct].fontpos = glyph;
+		ct++;
+	    }
+	}
+
+	/* Note: after PIO_UNIMAPCLR and before PIO_UNIMAP
+	   this printf did not work on many kernels */
+	if (verbose)
+	  printf(_("Loading Unicode mapping table...\n"));
+
+	advice.advised_hashsize = 0;
+	advice.advised_hashstep = 0;
+	advice.advised_hashlevel = 0;
+	if(ioctl(fd, PIO_UNIMAPCLR, &advice)) {
+#ifdef ENOIOCTLCMD
+	    if (errno == ENOIOCTLCMD) {
+		fprintf(stderr,
+			_("It seems this kernel is older than 1.1.92\n"
+			  "No Unicode mapping table loaded.\n"));
+	    } else
+#endif
+	      perror("PIO_UNIMAPCLR");
+	    exit(1);
+	}
+	ud.entry_ct = ct;
+	ud.entries = up;
+	if(ioctl(fd, PIO_UNIMAP, &ud)) {
+#if 0
+	    if (errno == ENOMEM) {
+		/* change advice parameters */
+	    }
+#endif
+	    perror("PIO_UNIMAP");
+	    exit(1);
+	}
+}
+
+static void
+loadnewfont(int fd, char *ifil, int iunit, int hwunit, int no_m, int no_u) {
+	FILE *fpi;
+	char defname[20];
+	int unit;
+	char inbuf[32768];	/* primitive */
+	int inputlth, offset;
+
+	if (!*ifil) {
+	    /* try to find some default file */
+
+	    if (iunit < 0 || iunit > 32)
+	      iunit = 0;
+	    if (iunit == 0) {
+		if ((fpi = findfont(ifil = "default")) == NULL &&
+		    (fpi = findfont(ifil = "default8x16")) == NULL &&
+		    (fpi = findfont(ifil = "default8x14")) == NULL &&
+		    (fpi = findfont(ifil = "default8x8")) == NULL) {
+		    fprintf(stderr, _("Cannot find default font\n"));
+		    exit(1);
+		}
+	    } else {
+		sprintf(defname, "default8x%d", iunit);
+		if ((fpi = findfont(ifil = defname)) == NULL &&
+		    (fpi = findfont(ifil = "default")) == NULL) {
+		    fprintf(stderr, _("Cannot find %s font\n"), ifil);
+		    exit(1);
+		}
+	    }
+	} else {
+	    if ((fpi = findfont(ifil)) == NULL) {
+		fprintf(stderr, _("Cannot open font file %s\n"), ifil);
+		exit(1);
+	    }
+	}
+
+	/*
+	 * We used to look at the length of the input file
+	 * with stat(); now that we accept compressed files,
+	 * just read the entire file.
+	 */
+	inputlth = fread(inbuf, 1, sizeof(inbuf), fpi);
+	if (ferror(fpi)) {
+		fprintf(stderr, _("Error reading input font"));
+		exit(1);
+	}
+	/* use malloc/realloc in case of giant files;
+	   maybe these do not occur: 16kB for the font,
+	   and 16kB for the map leaves 32 unicode values
+	   for each font position */
+	if (!feof(fpi)) {
+		fprintf(stderr, _(
+"Setfont is so naive as to believe that font files\n"
+"have a size of at most 32kB.  Unfortunately it seems\n"
+"that you encountered an exception.  If this really is\n"
+"a font file, (i) recompile setfont, (ii) tell aeb@cwi.nl .\n"
+));
+		exit(1);
+	}
+	fpclose(fpi);
+
+	/* test for psf first */
+	{
+	    struct psf_header psfhdr;
+	    int fontsize;
+	    int hastable;
+	    int head0, head;
+
+	    if (inputlth < sizeof(struct psf_header))
+		goto no_psf;
+
+	    psfhdr = * (struct psf_header *) &inbuf[0];
+
+	    if (!PSF_MAGIC_OK(psfhdr))
+		goto no_psf;
+
+	    if (psfhdr.mode > PSF_MAXMODE) {
+		fprintf(stderr, _("Unsupported psf file mode\n"));
+		exit(1);
+	    }
+	    fontsize = ((psfhdr.mode & PSF_MODE512) ? 512 : 256);
+	    hastable = (psfhdr.mode & PSF_MODEHASTAB);
+	    unit = psfhdr.charsize;
+	    head0 = sizeof(struct psf_header);
+	    head = head0 + fontsize*unit;
+	    if (head > inputlth || (!hastable && head != inputlth)) {
+		fprintf(stderr, _("Input file: bad length\n"));
+		exit(1);
+	    }
+	    do_loadfont(fd, inbuf + head0, unit, hwunit, fontsize);
+	    if (hastable && !no_u)
+	      do_loadtable(fd, inbuf + head, inputlth-head, fontsize);
+	    return;
+	}
+      no_psf:
+
+	/* file with three code pages? */
+	if (inputlth == 9780) {
+	    offset = position_codepage(iunit);
+	    unit = iunit;
+	} else {
+	    /* bare font */
+	    if (inputlth & 0377) {
+		fprintf(stderr, _("Bad input file size\n"));
+		exit(1);
+	    }
+	    offset = 0;
+	    unit = inputlth/256;
+	}
+	do_loadfont(fd, inbuf+offset, unit, hwunit, 256);
+}
+
+static int
+position_codepage(int iunit) {
+        int offset;
+
+	/* code page: first 40 bytes, then 8x16 font,
+	   then 6 bytes, then 8x14 font,
+	   then 6 bytes, then 8x8 font */
+
+	if (!iunit) {
+	    fprintf(stderr,
+		    _("This file contains 3 fonts: 8x8, 8x14 and 8x16."
+		      " Please indicate\n"
+		      "using an option -8 or -14 or -16 "
+		      "which one you want loaded.\n"));
+	    exit(1);
+	}
+	switch (iunit) {
+	  case 8:
+	    offset = 7732; break;
+	  case 14:
+	    offset = 4142; break;
+	  case 16:
+	    offset = 40; break;
+	  default:
+	    fprintf(stderr, _("You asked for font size %d, "
+			      "but only 8, 14, 16 are possible here.\n"),
+		    iunit);
+	    exit(1);
+	}
+	return offset;
+}
+
+static void
+do_saveoldfont(int fd, char *ofil, FILE *fpo, int unimap_follows, int *count) {
+    int i, unit, ct;
+    char buf[16384];
+
+    ct = sizeof(buf)/32;
+    if (getfont(fd, buf, &ct))
+	exit(1);
+
+    /* save as efficiently as possible */
+    unit = font_charheight(buf, ct);
+
+    /* Do we need a psf header? */
+    /* Yes if ct=512 - otherwise we cannot distinguish
+       a 512-char 8x8 and a 256-char 8x16 font. */
+
+    if (ct != 256 || unimap_follows) {
+        struct psf_header psfhdr;
+
+	psfhdr.magic1 = PSF_MAGIC1;
+	psfhdr.magic2 = PSF_MAGIC2;
+	psfhdr.mode = 0;
+	if (ct != 256)
+	    psfhdr.mode |= PSF_MODE512;
+	if (unimap_follows)
+	    psfhdr.mode |= PSF_MODEHASTAB;
+	psfhdr.charsize = unit;
+	if (fwrite(&psfhdr, sizeof(struct psf_header), 1, fpo) != 1) {
+	    fprintf(stderr, _("Cannot write font file header"));
+	    exit(1);
+	}
+    }
+
+    if (unit == 0)
+      fprintf(stderr, _("Found nothing to save\n"));
+    else {
+      for (i = 0; i < ct; i++)
+	if (fwrite(buf+(32*i), unit, 1, fpo) != 1) {
+	   fprintf(stderr, _("Cannot write font file"));
+	   exit(1);
+	}
+      if (verbose)
+	printf(_("Saved %d-char 8x%d font file on %s\n"), ct, unit, ofil);
+    }
+
+    if (count)
+      *count = ct;
+}
+
+static void
+saveoldfont(int fd, char *ofil) {
+    FILE *fpo;
+
+    if((fpo = fopen(ofil, "w")) == NULL) {
+	perror(ofil);
+	exit(1);
+    }
+    do_saveoldfont(fd, ofil, fpo, 0, NULL);
+    fclose(fpo);
+}
+
+static void
+saveoldfontplusunicodemap(int fd, char *Ofil){
+    FILE *fpo;
+    int ct;
+
+    if((fpo = fopen(Ofil, "w")) == NULL) {
+	perror(Ofil);
+	exit(1);
+    }
+    ct = 0;
+    do_saveoldfont(fd, Ofil, fpo, 1, &ct);
+    appendunicodemap(fd, fpo, ct);
+    fclose(fpo);
+}
+
+/* Only on the current console? On all allocated consoles? */
+/* A newly allocated console has NORM_MAP by default -
+   probably it should copy the default from the current console?
+   But what if we want a new one because the current one is messed up? */
+/* For the moment: only the current console, only the G0 set */
+void
+activatemap(void) {
+    printf("\033(K");
+}
+
+void
+disactivatemap(void) {
+    printf("\033(B");
+}
diff --git a/src/setkeycodes.c b/src/setkeycodes.c
new file mode 100644
index 0000000..d7a7842
--- /dev/null
+++ b/src/setkeycodes.c
@@ -0,0 +1,62 @@
+/*
+ * call: setkeycode scancode keycode ...
+ *  (where scancode is either xx or e0xx, given in hexadecimal,
+ *   and keycode is given in decimal)
+ *
+ * aeb, 941108
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/kd.h>
+#include "nls.h"
+
+extern int getfd();
+
+void
+usage(char *s) {
+    fprintf(stderr, "setkeycode: %s\n", s);
+    fprintf(stderr, _(
+"usage: setkeycode scancode keycode ...\n"
+" (where scancode is either xx or e0xx, given in hexadecimal,\n"
+"  and keycode is given in decimal)\n"));
+    exit(1);
+}
+
+int
+main(int argc, char **argv) {
+    char *ep;
+    int fd, sc;
+    struct kbkeycode a;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (argc % 2 != 1)
+      usage(_("even number of arguments expected"));
+    fd = getfd();
+
+    while (argc > 2) {
+	a.keycode = atoi(argv[2]);
+	a.scancode = sc = strtol(argv[1], &ep, 16);
+	if (*ep)
+	  usage(_("error reading scancode"));
+	if (a.scancode > 127) {
+	    a.scancode -= 0xe000;
+	    a.scancode += 128;
+	}
+	if (a.scancode > 255 || a.keycode > 127)
+	  usage(_("code outside bounds"));
+	if (ioctl(fd,KDSETKEYCODE,&a)) {
+	    perror("KDSETKEYCODE");
+	    fprintf(stderr, _("failed to set scancode %x to keycode %d\n"),
+		    sc, a.keycode);
+	    exit(1);
+	}
+	argc -= 2;
+	argv += 2;
+    }
+    return 0;
+}
diff --git a/src/setleds.c b/src/setleds.c
new file mode 100644
index 0000000..2a7777e
--- /dev/null
+++ b/src/setleds.c
@@ -0,0 +1,197 @@
+/*
+ * setleds.c - aeb, 940130, 940909
+ *
+ * Call: setleds [-L] [-D] [-F] [{+|-}{num|caps|scroll}]*
+ * will set or clear the indicated flags on the stdin tty,
+ * and report the settings before and after.
+ * In particular, setleds without arguments will only report.
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <linux/kd.h>
+#include <sys/ioctl.h>
+#include "nls.h"
+
+void
+usage(void)
+{
+    fprintf(stderr, _(
+"Usage:\n"
+"	setleds [-v] [-L] [-D] [-F] [[+|-][ num | caps | scroll ]]\n"
+"Thus,\n"
+"	setleds +caps -num\n"
+"will set CapsLock, clear NumLock and leave ScrollLock unchanged.\n"
+"The settings before and after the change (if any) are reported\n"
+"when the -v option is given or when no change is requested.\n"
+"Normally, setleds influences the vt flag settings\n"
+"(and these are usually reflected in the leds).\n"
+"With -L, setleds only sets the leds, and leaves the flags alone.\n"
+"With -D, setleds sets both the flags and the default flags, so\n"
+"that a subsequent reset will not change the flags.\n"
+));
+    exit(1);
+}
+
+    
+
+#define onoff(a) ((a) ? _("on ") : _("off"))
+
+void
+report(leds) int leds;
+{
+    printf("NumLock %s   CapsLock %s   ScrollLock %s\n",
+	   onoff(leds & LED_NUM),
+	   onoff(leds & LED_CAP),
+	   onoff(leds & LED_SCR));
+}
+
+struct led {
+    char *name;
+    int bit;
+} leds[3] = {
+    { "scroll", LED_SCR },
+    { "num", LED_NUM },
+    { "caps", LED_CAP }
+};
+
+int
+main(argc,argv) int argc; char **argv;
+{
+    int optL = 0, optD = 0, optF = 0, verbose = 0;
+    char oleds, nleds, oflags, nflags, odefflags, ndefflags;
+    char nval, ndef, sign;
+    char *ap;
+    struct led *lp;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (ioctl(0, KDGETLED, &oleds)) {
+	perror("KDGETLED");
+	fprintf(stderr,
+	  _("Error reading current led setting. Maybe stdin is not a VT?\n"));
+	exit(1);
+    }
+
+    if (ioctl(0, KDGKBLED, &oflags)) {
+	perror("KDGKBLED");
+	fprintf(stderr,
+          _("Error reading current flags setting. Maybe an old kernel?\n"));
+	exit(1);
+    }
+
+    while (argc > 1) {
+	if (!strcmp("-L", argv[1]))
+	  optL = 1;
+	else if (!strcmp("-D", argv[1]))
+	  optD = 1;
+	else if (!strcmp("-F", argv[1]))
+	  optF = 1;
+	else if (!strcmp("-v", argv[1]))
+	  verbose = 1;
+	else
+	  break;
+	argc--;
+	argv++;
+    }
+
+    odefflags = ndefflags = ((oflags >> 4) & 7);
+    oflags = nflags = (oflags & 7);
+
+    if (argc <= 1) {
+	if (optL) {
+	    nleds = 0xff;
+	    if (ioctl(0, KDSETLED, &nleds)) {
+		perror("KDSETLED");
+		fprintf(stderr, _("Error resetting ledmode\n"));
+		exit(1);
+	    }
+	}
+
+	/* If nothing to do, report, even if not verbose */
+	if (!optD && !optL && !optF)
+	  optD = optL = optF = 1;
+	if (optD) {
+	    printf(_("Current default flags:  "));
+	    report(odefflags);
+	}
+	if (optF) {
+	    printf(_("Current flags:          "));
+	    report(oflags & 07);
+	}
+	if (optL) {
+	    printf(_("Current leds:           "));
+	    report(oleds);
+	}
+	exit(0);
+    }
+
+    if (!optL)
+      optF = 1;
+    nval = 0;
+    ndef = 0;
+
+    while(--argc) {
+	ap = *++argv;
+	sign = 1;		/* by default: set */
+	if(*ap == '+')
+	  ap++;
+	else if(*ap == '-') {
+	    sign = 0;
+	    ap++;
+	}
+	for (lp = leds; lp-leds < 3; lp++) {
+	    if(!strcmp(ap, lp->name)) {
+		if(sign)
+		  nval |= lp->bit;
+		ndef |= lp->bit;
+		goto nxtarg;
+	    }
+	}
+	fprintf(stderr, _("unrecognized argument: _%s_\n\n"), ap);
+	usage();
+
+      nxtarg: ;
+    }
+
+    if (optD) {
+	ndefflags = (odefflags & ~ndef) | nval;
+	if (verbose) {
+	    printf(_("Old default flags:    "));
+	    report(odefflags);
+	    printf(_("New default flags:    "));
+	    report(ndefflags);
+	}
+    }
+    if (optF) {
+	nflags = ((oflags & ~ndef) | nval);
+	if (verbose) {
+	    printf(_("Old flags:            "));
+	    report(oflags & 07);
+	    printf(_("New flags:            "));
+	    report(nflags & 07);
+	}
+    }
+    if (optD || optF) {
+	if (ioctl(0, KDSKBLED, (ndefflags << 4) | nflags)) {
+	    perror("KDSKBLED");
+	    exit(1);
+	}
+    }
+    if (optL) {
+	nleds = (oleds & ~ndef) | nval;
+	if (verbose) {
+	    printf(_("Old leds:             "));
+	    report(oleds);
+	    printf(_("New leds:             "));
+	    report(nleds);
+	}
+	if (ioctl(0, KDSETLED, nleds)) {
+	    perror("KDSETLED");
+	    exit(1);
+	}
+    }
+    exit(0);
+}
diff --git a/src/setmetamode.c b/src/setmetamode.c
new file mode 100644
index 0000000..2849225
--- /dev/null
+++ b/src/setmetamode.c
@@ -0,0 +1,103 @@
+/*
+ * setmetamode.c - aeb, 940130
+ *
+ * Call: setmetamode { metabit | escprefix }
+ * and report the setting before and after.
+ * Without arguments setmetamode will only report.
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <linux/kd.h>
+#include <sys/ioctl.h>
+#include "nls.h"
+
+void
+usage(void)
+{
+    fprintf(stderr, _(
+"Usage:\n"
+"	setmetamode [ metabit | meta | bit | escprefix | esc | prefix ]\n"
+"Each vt has his own copy of this bit. Use\n"
+"	setmetamode [arg] < /dev/ttyn\n"
+"to change the settings of another vt.\n"
+"The setting before and after the change are reported.\n"
+));
+    exit(1);
+}
+
+void
+report(meta) int meta;
+{
+    char *s;
+
+    switch(meta) {
+      case K_METABIT:
+	s = _("Meta key sets high order bit\n");
+	break;
+      case K_ESCPREFIX:
+	s = _("Meta key gives Esc prefix\n");
+	break;
+      default:
+	s = _("Strange mode for Meta key?\n");
+    }
+    printf(s);
+}
+
+struct meta {
+    char *name;
+    int val;
+} metas[] = {
+    { "metabit",   K_METABIT },
+    { "meta",      K_METABIT },
+    { "bit",       K_METABIT },
+    { "escprefix", K_ESCPREFIX },
+    { "esc",       K_ESCPREFIX },
+    { "prefix",    K_ESCPREFIX }
+};
+
+#define SIZE(a) (sizeof(a)/sizeof(a[0]))
+
+int
+main(argc,argv) int argc; char **argv;
+{
+    char ometa, nmeta;
+    struct meta *mp;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (ioctl(0, KDGKBMETA, &ometa)) {
+	perror("KDGKBMETA");
+	fprintf(stderr,
+		_("Error reading current setting. Maybe stdin is not a VT?\n"));
+	exit(1);
+    }
+
+    if (argc <= 1) {
+	report(ometa);
+	exit(0);
+    }
+
+    nmeta = 0;			/* make gcc happy */
+    for (mp = metas; mp-metas < SIZE(metas); mp++) {
+	if(!strcmp(argv[1], mp->name)) {
+	    nmeta = mp->val;
+	    goto fnd;
+	}
+    }
+    fprintf(stderr, _("unrecognized argument: _%s_\n\n"), argv[1]);
+    usage();
+
+  fnd:
+    printf(_("old state:    "));
+    report(ometa);
+    if (ioctl(0, KDSKBMETA, nmeta)) {
+	perror("KDSKBMETA");
+	exit(1);
+    }
+    printf(_("new state:    "));
+    report(nmeta);
+    exit(0);
+}
diff --git a/src/setvesablank.c b/src/setvesablank.c
new file mode 100644
index 0000000..09c03b3
--- /dev/null
+++ b/src/setvesablank.c
@@ -0,0 +1,36 @@
+/*
+ * setvesablank.c - aeb - 941230
+ *
+ * usage: setvesablank ON|on|off
+ */
+#include <stdio.h>
+#include <linux/termios.h>
+#include "nls.h"
+
+extern int getfd();
+
+main(int argc, char *argv[]) {
+    int fd;
+    struct { char ten, onoff; } arg;
+
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+
+    if (argc != 2) {
+       fprintf(stderr, _("usage: %s\n"), "setvesablank ON|on|off");
+       exit(1);
+    }
+    fd = getfd();
+    arg.ten = 10;
+    arg.onoff = 0;
+    if (!strcmp(argv[1], "on"))
+      arg.onoff = 1;
+    else if (!strcmp(argv[1], "ON"))
+      arg.onoff = 2;
+    if (ioctl(fd, TIOCLINUX, &arg)) {
+       perror("setvesablank: TIOCLINUX");
+       exit(1);
+    }
+    exit(0);
+}
diff --git a/src/showfont.c b/src/showfont.c
new file mode 100644
index 0000000..dc8c764
--- /dev/null
+++ b/src/showfont.c
@@ -0,0 +1,108 @@
+/* showfont.c - aeb, 940207 */
+#include <sys/types.h>
+#include <linux/kd.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include "nls.h"
+
+#define CSI		155
+#define CSI_ERSATZ	126
+
+char obuf[E_TABSZ], nbuf[E_TABSZ];
+
+void
+leave(n) int n; {
+  printf("\0338");		/* restore attributes */
+  if (ioctl(0,PIO_SCRNMAP,obuf)) {
+      perror("PIO_SCRNMAP");
+      fprintf(stderr, _("failed to restore original translation table\n"));
+      exit(1);
+  }
+  exit(n);
+}
+
+int
+main (argc,argv) int argc; char **argv; {
+  unsigned char i, j, k;
+
+  setlocale(LC_ALL, "");
+  bindtextdomain(PACKAGE, LOCALEDIR);
+  textdomain(PACKAGE);
+
+  if (argc != 1) {
+      fprintf(stderr,
+	      _("usage: showfont\n"
+		"(probably after loading a font with `setfont font')\n"));
+      exit(1);
+  }
+
+  if (ioctl(0,GIO_SCRNMAP,obuf)) {
+      perror("GIO_SCRNMAP");
+      exit(1);
+  }
+  for (i=0; i<25; i++) printf("\n"); /* go down */
+  printf("\0337");		/* save attributes */
+
+  /* Since control characters are treated specially, we must
+     avoid printing control characters. Therefore we do the
+     printing in two stages. */
+
+  k = 128;
+  for (i = 0; i < 8; i++)
+      for (j = 0; j < 16; j++)
+	nbuf[k++] = 16*j+i;
+  nbuf[CSI_ERSATZ] = nbuf[CSI];	/* avoid CSI = 128+27 */
+  nbuf[128] = 32;		/* it will not be shown anyway */
+  nbuf[32] = 32;
+  nbuf[10] = 0;
+  if (ioctl(0,PIO_SCRNMAP,nbuf)) {
+      perror("PIO_SCRNMAP");
+      fprintf(stderr, _("cannot change translation table\n"));
+      exit(1);
+  }
+
+  printf("\033%%@");		/* leave Unicode */
+  printf("\033(K");		/* select user translation */
+
+  /* show first half of font, avoiding CSI */
+  printf("\n");
+  k = 128;
+  for (i = 0; i < 8; i++) {
+      for (j = 0; j < 16; j++) {
+	  printf ("  %c", (k==CSI) ? CSI_ERSATZ : k);
+	  k++;
+      }
+      printf ("\n");
+  }
+
+  /* construct second half */
+  k = 128;
+  for (i = 8; i < 16; i++)
+      for (j = 0; j < 16; j++)
+	nbuf[k++] = 16*j+i;
+  nbuf[CSI_ERSATZ] = nbuf[CSI];
+  if (ioctl(0,PIO_SCRNMAP,nbuf)) {
+      perror("PIO_SCRNMAP");
+      fprintf(stderr, _("cannot change translation table??\n"));
+      leave(1);
+  }
+
+  /* show second half of font, avoiding CSI */
+  printf("\n");
+  k = 128;
+  for (i = 0; i < 8; i++) {
+      for (j = 0; j < 16; j++) {
+	  printf ("  %c", (k==CSI) ? CSI_ERSATZ : k);
+	  k++;
+      }
+      printf ("\n");
+  }
+  printf ("\n");
+
+#if 0
+  printf("\033(B");		/* and return to usual translation */
+#endif
+  leave(0);
+
+  exit(0);			/* make gcc happy */
+}
diff --git a/src/showkey.c b/src/showkey.c
new file mode 100644
index 0000000..8411eba
--- /dev/null
+++ b/src/showkey.c
@@ -0,0 +1,236 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <termios.h>
+#include <linux/kd.h>
+#include <linux/keyboard.h>
+#include <sys/ioctl.h>
+#include "nls.h"
+
+#define VERSION "0.98"
+
+int tmp;	/* for debugging */
+
+extern int getfd();
+int fd;
+int oldkbmode;
+struct termios old;
+
+/*
+ * version 0.81 of showkey would restore kbmode unconditially to XLATE,
+ * thus making the console unusable when it was called under X.
+ */
+void get_mode(void) {
+        char *m;
+
+	if (ioctl(fd, KDGKBMODE, &oldkbmode)) {
+		perror("KDGKBMODE");
+		exit(1);
+	}
+	switch(oldkbmode) {
+	  case K_RAW:
+	    m = "RAW"; break;
+	  case K_XLATE:
+	    m = "XLATE"; break;
+	  case K_MEDIUMRAW:
+	    m = "MEDIUMRAW"; break;
+	  case K_UNICODE:
+	    m = "UNICODE"; break;
+	  default:
+	    m = _("?UNKNOWN?"); break;
+	}
+	printf(_("kb mode was %s\n"), m);
+	if (oldkbmode != K_XLATE) {
+	    printf(_("[ if you are trying this under X, it might not work\n"
+		     "since the X server is also reading /dev/console ]\n"));
+	}
+	printf("\n");
+}
+
+void clean_up(void) {
+	if (ioctl(fd, KDSKBMODE, oldkbmode)) {
+		perror("KDSKBMODE");
+		exit(1);
+	}
+	if (tcsetattr(fd, 0, &old) == -1)
+		perror("tcsetattr");
+	close(fd);
+}
+
+void die(int x) {
+	printf(_("caught signal %d, cleaning up...\n"), x);
+	clean_up();
+	exit(1);
+}
+
+void watch_dog(int x) {
+	clean_up();
+	exit(0);
+}
+
+void usage(void) {
+	fprintf(stderr, _(
+"showkey version %s\n\n"
+"usage: showkey [options...]\n"
+"\n"
+"valid options are:\n"
+"\n"
+"	-h --help	display this help text\n"
+"	-a --ascii	display the decimal/octal/hex values of the keys\n"
+"	-s --scancodes	display only the raw scan-codes\n"
+"	-k --keycodes	display only the interpreted keycodes (default)\n"
+), VERSION);
+	exit(1);
+}
+
+int
+main (int argc, char *argv[]) {
+	const char *short_opts = "hask";
+	const struct option long_opts[] = {
+		{ "help",	no_argument, NULL, 'h' },
+		{ "ascii",	no_argument, NULL, 'a' },
+		{ "scancodes",	no_argument, NULL, 's' },
+		{ "keycodes",	no_argument, NULL, 'k' },
+		{ NULL, 0, NULL, 0 }
+	};
+	int c;
+	int show_keycodes = 1;
+	int print_ascii = 0;
+
+	struct termios new;
+	unsigned char buf[16];
+	int i, n;
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	while ((c = getopt_long(argc, argv,
+		short_opts, long_opts, NULL)) != -1) {
+		switch (c) {
+			case 's':
+				show_keycodes = 0;
+				break;
+			case 'k':
+				show_keycodes = 1;
+				break;
+			case 'a':
+				print_ascii = 1;
+				break;
+			case 'h':
+			case '?':
+				usage();
+		}
+	}
+
+	if (optind < argc)
+		usage();
+
+	if (print_ascii) {
+		/* no mode and signal and timer stuff - just read stdin */
+	        fd = 0;
+
+		if (tcgetattr(fd, &old) == -1)
+			perror("tcgetattr");
+		if (tcgetattr(fd, &new) == -1)
+			perror("tcgetattr");
+
+		new.c_lflag &= ~ (ICANON | ISIG);
+		new.c_lflag |= (ECHO | ECHOCTL);
+		new.c_iflag = 0;
+		new.c_cc[VMIN] = 1;
+		new.c_cc[VTIME] = 0;
+
+		if (tcsetattr(fd, TCSAFLUSH, &new) == -1)
+			perror("tcgetattr");
+		printf(_("\nPress any keys - "
+		         "Ctrl-D will terminate this program\n\n"));
+
+		while (1) {
+			n = read(fd, buf, 1);
+			if (n == 1)
+				printf(" \t%3d 0%03o 0x%02x\n",
+				       buf[0], buf[0], buf[0]);
+			if (n != 1 || buf[0] == 04)
+				break;
+		}
+
+		if (tcsetattr(fd, 0, &old) == -1)
+			perror("tcsetattr");
+		exit(0);
+	}
+
+
+	fd = getfd();
+
+	/* the program terminates when there is no input for 10 secs */
+	signal(SIGALRM, watch_dog);
+
+	/*
+		if we receive a signal, we want to exit nicely, in
+		order not to leave the keyboard in an unusable mode
+	*/
+	signal(SIGHUP, die);
+	signal(SIGINT, die);
+	signal(SIGQUIT, die);
+	signal(SIGILL, die);
+	signal(SIGTRAP, die);
+	signal(SIGABRT, die);
+	signal(SIGIOT, die);
+	signal(SIGFPE, die);
+	signal(SIGKILL, die);
+	signal(SIGUSR1, die);
+	signal(SIGSEGV, die);
+	signal(SIGUSR2, die);
+	signal(SIGPIPE, die);
+	signal(SIGTERM, die);
+#ifdef SIGSTKFLT
+	signal(SIGSTKFLT, die);
+#endif
+	signal(SIGCHLD, die);
+	signal(SIGCONT, die);
+	signal(SIGSTOP, die);
+	signal(SIGTSTP, die);
+	signal(SIGTTIN, die);
+	signal(SIGTTOU, die);
+
+	get_mode();
+	if (tcgetattr(fd, &old) == -1)
+		perror("tcgetattr");
+	if (tcgetattr(fd, &new) == -1)
+		perror("tcgetattr");
+
+	new.c_lflag &= ~ (ICANON | ECHO | ISIG);
+	new.c_iflag = 0;
+	new.c_cc[VMIN] = sizeof(buf);
+	new.c_cc[VTIME] = 1;	/* 0.1 sec intercharacter timeout */
+
+	if (tcsetattr(fd, TCSAFLUSH, &new) == -1)
+		perror("tcsetattr");
+	if (ioctl(fd, KDSKBMODE, show_keycodes ? K_MEDIUMRAW : K_RAW)) {
+		perror("KDSKBMODE");
+		exit(1);
+	}
+
+	printf(_("press any key (program terminates 10s after last keypress)...\n"));
+	while (1) {
+		alarm(10);
+		n = read(fd, buf, sizeof(buf));
+		for (i = 0; i < n; i++) {
+			if (!show_keycodes)
+				printf("0x%02x ", buf[i]);
+			else
+				printf(_("keycode %3d %s\n"),
+					buf[i] & 0x7f,
+					buf[i] & 0x80 ? _("release")
+				                      : _("press"));
+		}
+		if (!show_keycodes)
+			printf("\n");
+	}
+
+	clean_up();
+	exit(0);
+}
diff --git a/src/spawn_console.c b/src/spawn_console.c
new file mode 100644
index 0000000..77229bf
--- /dev/null
+++ b/src/spawn_console.c
@@ -0,0 +1,31 @@
+/*
+ * Tiny test program for the `spawn console' key
+ * (should not use signal; should not use sleep)
+ * aeb - 941025
+ *
+ * Note: this functionality will probably go away and become
+ * part of init. For the time being, be very careful when
+ * you use this - if you have this in /etc/rc.local you should
+ * start getty, not open, or anybody will have a root shell
+ * with a single keystroke.
+ */
+#include <signal.h>
+#include <linux/kd.h>
+
+void
+sighup(){
+    system("open -s -l bash");
+    signal(SIGHUP, sighup);
+}
+
+main(){
+    int fd;
+
+    fd = open("/dev/console", 0);
+    if (fd < 0)
+      fd = 0;
+    signal(SIGHUP, sighup);
+    ioctl(fd, KDSIGACCEPT, (long) SIGHUP);
+    while(1)
+      sleep(3600);
+}
diff --git a/src/spawn_login.c b/src/spawn_login.c
new file mode 100644
index 0000000..d12caac
--- /dev/null
+++ b/src/spawn_login.c
@@ -0,0 +1,26 @@
+/*
+ * Tiny test program for the `spawn console' key
+ * (should not use signal; should not use sleep)
+ * aeb - 941025
+ *
+ */
+#include <signal.h>
+#include <linux/kd.h>
+
+void
+sighup(){
+    system("open -s -l -- login -h spawn");
+    signal(SIGHUP, sighup);
+}
+
+main(){
+    int fd;
+
+    fd = open("/dev/console", 0);
+    if (fd < 0)
+      fd = 0;
+    signal(SIGHUP, sighup);
+    ioctl(fd, KDSIGACCEPT, (long) SIGHUP);
+    while(1)
+      sleep(3600);
+}
diff --git a/src/unicode_start b/src/unicode_start
new file mode 100755
index 0000000..6b23241
--- /dev/null
+++ b/src/unicode_start
@@ -0,0 +1,26 @@
+#!/bin/sh
+# start unicode
+#
+# When a Unicode symbol is not found in the Unicode mapping table,
+# and it is in the range U+0000-00FF, then it is looked up in the
+# current translation table; outside that range it is replaced by
+# a space. The arguments "-m space" below make sure that also inside
+# this range unknown symbols are replaced by spaces.
+#
+case $# in
+	2)
+		setfont $1 -u $2 -m space ;;
+	1)
+		setfont $1 -m space;;
+	0)
+		setfont
+		setfont -u def.uni -m space
+		;;
+	*)
+		echo "usage: unicode_start [font [unicode map]]"
+		;;
+esac
+
+kbd_mode -u
+# Since 1.2.1 - for older kernels, use: echo -n -e '\033%8'
+echo -n -e '\033%G'
diff --git a/src/unicode_stop b/src/unicode_stop
new file mode 100755
index 0000000..e839d16
--- /dev/null
+++ b/src/unicode_stop
@@ -0,0 +1,4 @@
+#!/bin/sh
+# stop unicode
+kbd_mode -a
+echo -n -e '\033%@'
diff --git a/src/wctomb.c b/src/wctomb.c
new file mode 100644
index 0000000..b74423f
--- /dev/null
+++ b/src/wctomb.c
@@ -0,0 +1,102 @@
+/*
+#include	<sys/types.h>
+#include	<stdio.h>
+#include	<stdlib.h>
+#include	<string.h>
+#include	<unistd.h>
+#include	<errno.h>
+*/
+
+/*
+	the our_* routines are implementations for the corresponding library
+	routines. for a while, i tried to actually name them wctomb etc
+	but stopped that after i found a system which made wchar_t an
+	unsigned char.
+*/
+enum
+{
+	T1	= 0x00,
+	Tx	= 0x80,
+	T2	= 0xC0,
+	T3	= 0xE0,
+	T4	= 0xF0,
+	T5	= 0xF8,
+	T6	= 0xFC,
+
+	Bit1	= 7,
+	Bitx	= 6,
+	Bit2	= 5,
+	Bit3	= 4,
+	Bit4	= 3,
+	Bit5	= 2,
+	Bit6	= 2,
+
+	Mask1	= (1<<Bit1)-1,
+	Maskx	= (1<<Bitx)-1,
+	Mask2	= (1<<Bit2)-1,
+	Mask3	= (1<<Bit3)-1,
+	Mask4	= (1<<Bit4)-1,
+	Mask5	= (1<<Bit5)-1,
+	Mask6	= (1<<Bit6)-1,
+
+	Wchar1	= (1UL<<Bit1)-1,
+	Wchar2	= (1UL<<(Bit2+Bitx))-1,
+	Wchar3	= (1UL<<(Bit3+2*Bitx))-1,
+	Wchar4	= (1UL<<(Bit4+3*Bitx))-1,
+	Wchar5	= (1UL<<(Bit5+4*Bitx))-1
+
+#ifndef	EILSEQ
+	, /* we hate ansi c's comma rules */
+	EILSEQ	= 123
+#endif /* PLAN9 */
+};
+
+int
+our_wctomb(char *s, unsigned long wc)
+{
+	if(s == 0)
+		return 0;		/* no shift states */
+	if(wc & ~Wchar2) {
+		if(wc & ~Wchar4) {
+			if(wc & ~Wchar5) {
+				/* 6 bytes */
+				s[0] = T6 | ((wc >> 5*Bitx) & Mask6);
+				s[1] = Tx | ((wc >> 4*Bitx) & Maskx);
+				s[2] = Tx | ((wc >> 3*Bitx) & Maskx);
+				s[3] = Tx | ((wc >> 2*Bitx) & Maskx);
+				s[4] = Tx | ((wc >> 1*Bitx) & Maskx);
+				s[5] = Tx |  (wc & Maskx);
+				return 6;
+			}
+			/* 5 bytes */
+			s[0] = T5 |  (wc >> 4*Bitx);
+			s[1] = Tx | ((wc >> 3*Bitx) & Maskx);
+			s[2] = Tx | ((wc >> 2*Bitx) & Maskx);
+			s[3] = Tx | ((wc >> 1*Bitx) & Maskx);
+			s[4] = Tx |  (wc & Maskx);
+			return 5;
+		}
+		if(wc & ~Wchar3) {
+			/* 4 bytes */
+			s[0] = T4 |  (wc >> 3*Bitx);
+			s[1] = Tx | ((wc >> 2*Bitx) & Maskx);
+			s[2] = Tx | ((wc >> 1*Bitx) & Maskx);
+			s[3] = Tx |  (wc & Maskx);
+			return 4;
+		}
+		/* 3 bytes */
+		s[0] = T3 |  (wc >> 2*Bitx);
+		s[1] = Tx | ((wc >> 1*Bitx) & Maskx);
+		s[2] = Tx |  (wc & Maskx);
+		return 3;
+	}
+	if(wc & ~Wchar1) {
+		/* 2 bytes */
+		s[0] = T2 | (wc >> 1*Bitx);
+		s[1] = Tx | (wc & Maskx);
+		return 2;
+	}
+	/* 1 byte */
+	s[0] = T1 | wc;
+	return 1;
+}