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, ~< 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 <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 <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><AD></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>'
+</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 << 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 (< 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\
+ <KeyPress> BackSpace : string(0x7f)\n\
+ <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\
+ <Key>osfDelete: delete-previous-character()
+ *XmTextField.translations: #override\n\
+ <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 <<-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
+</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\
+ <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 -> Unicode, b) VT100 graphics -> Unicode,
+c) PC -> 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 << EOF
+ alt keycode 103 = Spawn_Console
+ EOF
+ spawn_login &
+</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 &</CODE> instead of
+<CODE>spawn_login &</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 <= 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-.
+</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 (>= 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><linux/keyboard.h></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 [ 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 <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>\</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 #).
+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>˜/.inputrc</tt>, <tt>˜/.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˜":delete-char
+</verb></tscreen>
+into <tt>˜/.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>\010\040\010</tt>)
+when it got a DEL (<tt>\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>$HOME/.Xresources</tt>, assuming that you have a line
+<tscreen><verb>
+ xrdb -merge $HOME/.Xresources
+</verb></tscreen>
+in your <tt>$HOME/.xinitrc</tt> or <tt>$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>$HOME/.Xdefaults</tt> or
+<tt>$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 -> 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 <tt/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
+<tt>echo ˆ[c</tt>.
+If your termcap entry for the console is correct (and has an entry
+<tt>:rs=\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 &/ instead of
+<tt/spawn_login &/ 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 (>= 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><linux/keyboard.h></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>\215A\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=\E[2˜</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>$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 ', `, ", ˆ, ˜, / 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, ˜< 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 <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/\255/ or <tt/<AD>/
+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>$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>\documentstyle[isolatin]{article}</tt>.
+For LaTeX2e: <tt>\documentclass{article}\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/[arch/i386/]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 [ 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 [ z ˜ for
+certain y and z. Setting application keypad key mode is done by
+<verb> % echo -e '\033=' </verb>
+and
+<verb> % echo -e '\033>' </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;
+}