-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 1.08
-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.
+o Programs:
+ - loadkeys.y: fix for bison 1.50 (Per Lidén)
+ - loadkeys.y: fix in addfunc()
+ - Makefile etc: minor cleanup (Daniel R. Grayson)
+ - Makefile etc: --prefix support (Michael Covi)
+o Keymaps:
+ - passim: don't map PrtSc to Ctrl-\ so that poor innocents do not
+ kill applications when they only want to print the screen;
+ only map Ctrl-PrtSc to Ctrl-\ (Kurt Garloff)
+ - modified fi-latin1.map, new fi-latin9.map (Marko Myllynen)
+ - bg-cp1251.map (Dimitar Zhekov)
+ - il-heb.map (Oded S. Resnik)
+ - sr-cy.map (Milos Rancic)
+ - fr-latin9.map (Guylhem Aznar), removed older fr-latin0.map.
-Changes for 0.98 (aeb):
+Changes for 1.07
-o Added internationalization and Dutch texts (nl.po)
+o Programs:
+ - showfont renamed to showconsolefont to avoid clash with X
+ - loadkeys.y: fix in addfunc() (Shigeharu Hirayma)
+ - loadkeys.y: handle relative symlinks (Matthias Benkmann)
+ - sami.syms.h: symbol definitions for Northern Sámi (Regnor Jernsletten)
+ - findfile.c: search entire dir before looking at subdirs (Matthias Benkmann)
+ - getfd.c, etc.: also try devfs names (Alastair McKinstry)
+ - kbdrate.c: do not use <linux/kd.h>: the struct elements changed name
+ - setleds: typo fixed
+o Man pages:
+ - New: fgconsole.1 (Alastair McKinstry)
+ - Added a few man[18]misc pages, for non-installed stuff (Alastair McKinstry)
+o Fonts:
+ - Added cyr-sun16.psfu (Bero)
+o Unimaps:
+ - Added cp1251_to_uni.trans, koi8-r_to_uni.trans, koi8-u_to_uni.trans (Bero)
+o Keymaps:
+ - Renamed the Swedish se-latin1.map to sv-latin1.map
+ - Added se-fi-ir209.map, se-fi-lat6.map, se-ir209.map, se-lat6.map
+ for Northern Sámi (Regnor Jernsletten)
+ - Added pt-latin9.map (Carlos Monteiro)
+ - The old nl.map was really bad. Renamed nl3.map to nl.map.
+ - fi-latin1.map small changes
+o Docs:
+ - kbd.FAQ: small additions
-Changes for 1.00 (aeb):
+Changes for 1.06 (aeb)
-o Introduced psf2 fonts, allowing one to describe a font position
- with a Unicode sequence (base character with combining accents).
-o Reorganized fonts; added Unicode table to most of them.
- The consolefonts directory got a subdirectory partialfonts.
- The Unicode maps got a directory of their own.
-o Moved kbdrate from util-linux to here.
-o Added -s (sort) option to getunimap.c.
-o Setfont now accepts several psf2 fonts, each of arbitrary length.
- Setfont now accepts certain codepage fonts.
- Setfont now accepts a text file containing a list of fonts to load.
-o Made distinction between koi8-r and koi8-u.
-o spawn_console and spawn_login invoke openvt, not open.
+o Programs:
+ - Some Makefile changes (Peter Breitenlohner)
+ - Added fgconsole to the installed programs
+ - resizecons.c: removed .psf extension from default fonts (bero)
+ - psffontop.c: correction to handling of unicode sequences (Kurt Garloff)
+ - loadkeys: work better in the presence of symlinks
+o Documentation:
+ - Removed scancode docs (these will be distributed separately, had grown to
+ over 1 MB; see also http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html)
+o Fonts:
+ - Added iso02-12x22.psfu (Jacek Lipkowski)
+ - Renamed sun-12x22.psfu to iso01-12x22.psfu since Kurt Garloff
+ explained that it was not the kernel font but a modified version.
+ Added the original sun-12x22.psfu.
+ - Renamed lat7-16.psfu to iso07u-16.psfu. (lat7 is iso13, not iso07)
+ - Added lat7a-14.psfu (earlier: lt-brim*) and lat7a-16.psf (bad fonts)
+ - Added lat7-14.psfu (ugly, but with the right characters)
+o Unimaps:
+ - Renamed lat7u.uni to iso07u.uni since it is not a Latin-7 map.
+ - Added lat7.uni
+o Keymaps (mostly Kurt Garloff, SuSE):
+ - Corrected br-latin1-abnt2.map (Frédéric Meunier), mac-de_CH.map,
+ sunt5-uk.map
+ - Added missing Latin-1 symbols to fi-latin1.map (Marko Myllynen)
+ - Added sundvorak.map, sunt4-no-latin1.map, sunt5-cz-us.map,
+ sunt5-us-cz.map, mac-dvorak.map, mac-qwertz-layout.inc
-Changes for 1.03 (aeb):
+Changes for 1.05 (aeb)
-o Added doc/scancodes/* with information on the scancodes produced
- by PC keyboards.
-o Added by.map.
-o Added Unicode maps to Greek fonts.
+o Programs:
+ - kdmapop.c, kdmapop.h, utf8.c, utf8.h: new
+ - loadunimap.c: also allow a range mapped to a single Unicode symbol
+ - mapscrn.c: also allow a character given as utf8 string
+ - mapscrn.c: handle PIO_SCRNMAP and PIO_UNISCRNMAP with same -m/-om options
+ - showfont.c: also show fonts larger than 256 glyphs
+ - unicode_start: updated; added text from Bruno Haible
+o Documentation:
+ - font-formats, unicode_start.1, unicode_stop.1: new
+ - loadunimap.8, mapscrn.8, setfont.8: updated
+o Fonts:
+ - Added drdos8xN.psfu
+o Unimaps:
+ - Added cybercafe.uni
+o Console translations:
+ - Added 8859-N_to_uni.trans, cpNNNN_to_uni.trans
+o Data:
+ - Corrected corrupted 737.cp, lat5-N.psfu, baltic.trans
Changes for 1.04 (aeb, Olaf Hering, Kurt Garloff):
- Added cybercafe.fnt, sun12x22.psfu, cp1250.psfu,
cp857.08, cp857.14, cp857.16.
-Changes for 1.05 (aeb)
+Changes for 1.03 (aeb):
-o Programs:
- - kdmapop.c, kdmapop.h, utf8.c, utf8.h: new
- - loadunimap.c: also allow a range mapped to a single Unicode symbol
- - mapscrn.c: also allow a character given as utf8 string
- - mapscrn.c: handle PIO_SCRNMAP and PIO_UNISCRNMAP with same -m/-om options
- - showfont.c: also show fonts larger than 256 glyphs
- - unicode_start: updated; added text from Bruno Haible
-o Documentation:
- - font-formats, unicode_start.1, unicode_stop.1: new
- - loadunimap.8, mapscrn.8, setfont.8: updated
-o Fonts:
- - Added drdos8xN.psfu
-o Unimaps:
- - Added cybercafe.uni
-o Console translations:
- - Added 8859-N_to_uni.trans, cpNNNN_to_uni.trans
-o Data:
- - Corrected corrupted 737.cp, lat5-N.psfu, baltic.trans
+o Added doc/scancodes/* with information on the scancodes produced
+ by PC keyboards.
+o Added by.map.
+o Added Unicode maps to Greek fonts.
-Changes for 1.06 (aeb)
+Changes for 1.00 (aeb):
-o Programs:
- - Some Makefile changes (Peter Breitenlohner)
- - Added fgconsole to the installed programs
- - resizecons.c: removed .psf extension from default fonts (bero)
- - psffontop.c: correction to handling of unicode sequences (Kurt Garloff)
- - loadkeys: work better in the presence of symlinks
-o Documentation:
- - Removed scancode docs (these will be distributed separately, had grown to
- over 1 MB; see also http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html)
-o Fonts:
- - Added iso02-12x22.psfu (Jacek Lipkowski)
- - Renamed sun-12x22.psfu to iso01-12x22.psfu since Kurt Garloff
- explained that it was not the kernel font but a modified version.
- Added the original sun-12x22.psfu.
- - Renamed lat7-16.psfu to iso07u-16.psfu. (lat7 is iso13, not iso07)
- - Added lat7a-14.psfu (earlier: lt-brim*) and lat7a-16.psf (bad fonts)
- - Added lat7-14.psfu (ugly, but with the right characters)
-o Unimaps:
- - Renamed lat7u.uni to iso07u.uni since it is not a Latin-7 map.
- - Added lat7.uni
-o Keymaps (mostly Kurt Garloff, SuSE):
- - Corrected br-latin1-abnt2.map (Frédéric Meunier), mac-de_CH.map,
- sunt5-uk.map
- - Added missing Latin-1 symbols to fi-latin1.map (Marko Myllynen)
- - Added sundvorak.map, sunt4-no-latin1.map, sunt5-cz-us.map,
- sunt5-us-cz.map, mac-dvorak.map, mac-qwertz-layout.inc
+o Introduced psf2 fonts, allowing one to describe a font position
+ with a Unicode sequence (base character with combining accents).
+o Reorganized fonts; added Unicode table to most of them.
+ The consolefonts directory got a subdirectory partialfonts.
+ The Unicode maps got a directory of their own.
+o Moved kbdrate from util-linux to here.
+o Added -s (sort) option to getunimap.c.
+o Setfont now accepts several psf2 fonts, each of arbitrary length.
+ Setfont now accepts certain codepage fonts.
+ Setfont now accepts a text file containing a list of fonts to load.
+o Made distinction between koi8-r and koi8-u.
+o spawn_console and spawn_login invoke openvt, not open.
+
+Changes for 0.98 (aeb):
+
+o Added internationalization and Dutch texts (nl.po)
+
+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.94 (aeb):
+
+o Added keyword alt_is_meta.
+
+Changes for 0.91 (aeb):
+
+o Added hpa's setfont patch.
+
+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.89 (aeb):
+
+o Some minor things.
+
+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.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.85-0.86 (aeb):
+
+o Minor things only. Added contributed keymaps and fonts.
+
+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.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 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 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 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)
chvt.c clrunimap.c deallocvt.c fgconsole.c findfile.c
getfd.c getkeycodes.c getunimap.c kbd_mode.c loadunimap.c
psffontop.c psfxtable.c resizecons.c screendump.c setkeycodes.c
- setleds.c setmetamode.c setvesablank.c showfont.c spawn_console.c
- spawn_login.c
+ setleds.c setmetamode.c setvesablank.c showconsolefont.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.*
# Note: BINDIR, DATA_DIR, and DESTDIR also occur in src/Makefile.
+DESTDIR = @prefix@
DATA_DIR = @datadir@
MAN_DIR = @mandir@
-BINDIR = $(DESTDIR)/usr/bin
-MANDIR = $(DESTDIR)$(MAN_DIR)
-DATADIR = $(DESTDIR)$(DATA_DIR)
+BINDIR = $(DESTDIR)/bin
+MANDIR = $(MAN_DIR)
+DATADIR = $(DATA_DIR)
# If you change the names of any of the following subdirs,
# also change paths.h.
OLDKEYMAPDIR = keytables
# Do not use GZIP - it is interpreted by gzip
MYGZIP = gzip -f -9
-DIR = kbd-1.06
-
SUBDIRS = src openvt po
.EXPORT_ALL_VARIABLES:
all:
- for i in $(SUBDIRS) data; do (cd $$i && $(MAKE) all); done
+ for i in $(SUBDIRS) data; do $(MAKE) -C $$i all || exit 1; done
@echo "Done. You can now do make install"
install: install-progs install-data install-man
install-progs:
- for i in $(SUBDIRS); do (cd $$i && $(MAKE) install); done
+ for i in $(SUBDIRS); do $(MAKE) -C $$i install || exit 1; done
install-man:
cd man && $(MAKE) install
install-data:
cd data && $(MAKE) install
-tar: reallyclean # analyze.c loadkeys.c
- cd ..; tar cvfz $(DIR).tar.gz ./$(DIR)
-
clean:
- for i in $(SUBDIRS); do (cd $$i && $(MAKE) clean); done
+ for i in $(SUBDIRS); do $(MAKE) -C $$i clean || exit 1; done
cd man && $(MAKE) clean
cd data && $(MAKE) clean
reallyclean distclean spotless: clean
find . -name "*~" -exec rm {} ";"
- for i in $(SUBDIRS); do (cd $$i && $(MAKE) distclean); done
+ for i in $(SUBDIRS); do $(MAKE) -C $$i distclean || exit 1; done
rm -f Makefile src/Makefile make_include defines.h
-This is kbd-1.06.tar.gz
+This is kbd-1.08.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.
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.)
+The home site of this package is
+ ftp://ftp.win.tue.nl/pub/linux-local/utils/kbd/
Report problems with this package to Andries Brouwer <aeb@cwi.nl>.
-May 2001
+Oct 2002
# New default: /usr/share/kbd
#
+prefix=
datadir=
mandir=
nls=1
--da*)
datadir=$optarg
;;
+ --di*)
+ nls=0
+ ;;
--ma*)
mandir=$optarg
;;
- --di*)
- nls=0
+ --pr*)
+ prefix=$optarg
;;
*)
- echo "usage: configure [--datadir=DATADIR] [--mandir=MANDIR]"
+ echo "usage: configure [--prefix=PREFIXDIR] [--datadir=DATADIR] [--mandir=MANDIR]"
exit 1
;;
esac
done
+if [ x$prefix = x ]; then
+ # the default case - don't bother the user with messages
+ prefix=/usr
+else
+ case "$prefix" in
+ /*)
+ echo "Configuring for PREFIX=$prefix"
+ ;;
+ *)
+ echo "PREFIX must have a leading slash"
+ exit 1
+ ;;
+ esac
+fi
+
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
+ if [ -d $prefix/lib/kbd ]; then
+ datadir=$prefix/lib/kbd
+ elif [ -d $prefix/share/consolefonts ]; then
+ datadir=$prefix/share
+ elif [ -d $prefix/share ]; then
+ datadir=$prefix/share/kbd
else
- datadir=/usr/lib/kbd
+ datadir=$prefix/lib/kbd
fi
-fi
-
-case "$datadir" in
+else
+ case "$datadir" in
/*)
+ datadir="$prefix$datadir"
echo "Configuring for DATADIR=$datadir"
;;
*)
echo "DATADIR must have a leading slash"
exit 1
;;
-esac
+ esac
+fi
if [ x$mandir = x ]; then
- if [ -d /usr/share/man ]; then
- mandir=/usr/share/man
+ if [ -d $prefix/share/man ]; then
+ mandir=$prefix/share/man
else
- mandir=/usr/man
+ mandir=$prefix/man
fi
-fi
-
-case "$mandir" in
+else
+ case "$mandir" in
/*)
+ mandir="$prefix$mandir"
echo "Configuring for MANDIR=$mandir"
;;
*)
echo "MANDIR must have a leading slash"
exit 1
;;
-esac
+ esac
+fi
for i in Makefile src/Makefile man/man1/dumpkeys.1 man/man1/loadkeys.1 man/man8/setfont.8 man/man8/loadunimap.8 man/man8/mapscrn.8; do
sed -e "
s,@datadir@,$datadir,
s,@mandir@,$mandir,
+s,@prefix@,$prefix,
" $i.in > $i
done
#
# From klaus.stehle@uni-tuebingen.de Tue Jan 25 07:24:02 2000
#
-# A small shell script version of the `showfont' program
+# A small shell script version of the `showconsolefont' C program
#
echo -e "\033%G"
--- /dev/null
+0x00 U+0000 # NULL (NUL)
+0x01 U+0001 # START OF HEADING (SOH)
+0x02 U+0002 # START OF TEXT (STX)
+0x03 U+0003 # END OF TEXT (ETX)
+0x04 U+0004 # END OF TRANSMISSION (EOT)
+0x05 U+0005 # ENQUIRY (ENQ)
+0x06 U+0006 # ACKNOWLEDGE (ACK)
+0x07 U+0007 # BELL (BEL)
+0x08 U+0008 # BACKSPACE (BS)
+0x09 U+0009 # CHARACTER TABULATION (HT)
+0x0a U+000A # LINE FEED (LF)
+0x0b U+000B # LINE TABULATION (VT)
+0x0c U+000C # FORM FEED (FF)
+0x0d U+000D # CARRIAGE RETURN (CR)
+0x0e U+000E # SHIFT OUT (SO)
+0x0f U+000F # SHIFT IN (SI)
+0x10 U+0010 # DATALINK ESCAPE (DLE)
+0x11 U+0011 # DEVICE CONTROL ONE (DC1)
+0x12 U+0012 # DEVICE CONTROL TWO (DC2)
+0x13 U+0013 # DEVICE CONTROL THREE (DC3)
+0x14 U+0014 # DEVICE CONTROL FOUR (DC4)
+0x15 U+0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 U+0016 # SYNCHRONOUS IDLE (SYN)
+0x17 U+0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 U+0018 # CANCEL (CAN)
+0x19 U+0019 # END OF MEDIUM (EM)
+0x1a U+001A # SUBSTITUTE (SUB)
+0x1b U+001B # ESCAPE (ESC)
+0x1c U+001C # FILE SEPARATOR (IS4)
+0x1d U+001D # GROUP SEPARATOR (IS3)
+0x1e U+001E # RECORD SEPARATOR (IS2)
+0x1f U+001F # UNIT SEPARATOR (IS1)
+0x20 U+0020 # SPACE
+0x21 U+0021 # EXCLAMATION MARK
+0x22 U+0022 # QUOTATION MARK
+0x23 U+0023 # NUMBER SIGN
+0x24 U+0024 # DOLLAR SIGN
+0x25 U+0025 # PERCENT SIGN
+0x26 U+0026 # AMPERSAND
+0x27 U+0027 # APOSTROPHE
+0x28 U+0028 # LEFT PARENTHESIS
+0x29 U+0029 # RIGHT PARENTHESIS
+0x2a U+002A # ASTERISK
+0x2b U+002B # PLUS SIGN
+0x2c U+002C # COMMA
+0x2d U+002D # HYPHEN-MINUS
+0x2e U+002E # FULL STOP
+0x2f U+002F # SOLIDUS
+0x30 U+0030 # DIGIT ZERO
+0x31 U+0031 # DIGIT ONE
+0x32 U+0032 # DIGIT TWO
+0x33 U+0033 # DIGIT THREE
+0x34 U+0034 # DIGIT FOUR
+0x35 U+0035 # DIGIT FIVE
+0x36 U+0036 # DIGIT SIX
+0x37 U+0037 # DIGIT SEVEN
+0x38 U+0038 # DIGIT EIGHT
+0x39 U+0039 # DIGIT NINE
+0x3a U+003A # COLON
+0x3b U+003B # SEMICOLON
+0x3c U+003C # LESS-THAN SIGN
+0x3d U+003D # EQUALS SIGN
+0x3e U+003E # GREATER-THAN SIGN
+0x3f U+003F # QUESTION MARK
+0x40 U+0040 # COMMERCIAL AT
+0x41 U+0041 # LATIN CAPITAL LETTER A
+0x42 U+0042 # LATIN CAPITAL LETTER B
+0x43 U+0043 # LATIN CAPITAL LETTER C
+0x44 U+0044 # LATIN CAPITAL LETTER D
+0x45 U+0045 # LATIN CAPITAL LETTER E
+0x46 U+0046 # LATIN CAPITAL LETTER F
+0x47 U+0047 # LATIN CAPITAL LETTER G
+0x48 U+0048 # LATIN CAPITAL LETTER H
+0x49 U+0049 # LATIN CAPITAL LETTER I
+0x4a U+004A # LATIN CAPITAL LETTER J
+0x4b U+004B # LATIN CAPITAL LETTER K
+0x4c U+004C # LATIN CAPITAL LETTER L
+0x4d U+004D # LATIN CAPITAL LETTER M
+0x4e U+004E # LATIN CAPITAL LETTER N
+0x4f U+004F # LATIN CAPITAL LETTER O
+0x50 U+0050 # LATIN CAPITAL LETTER P
+0x51 U+0051 # LATIN CAPITAL LETTER Q
+0x52 U+0052 # LATIN CAPITAL LETTER R
+0x53 U+0053 # LATIN CAPITAL LETTER S
+0x54 U+0054 # LATIN CAPITAL LETTER T
+0x55 U+0055 # LATIN CAPITAL LETTER U
+0x56 U+0056 # LATIN CAPITAL LETTER V
+0x57 U+0057 # LATIN CAPITAL LETTER W
+0x58 U+0058 # LATIN CAPITAL LETTER X
+0x59 U+0059 # LATIN CAPITAL LETTER Y
+0x5a U+005A # LATIN CAPITAL LETTER Z
+0x5b U+005B # LEFT SQUARE BRACKET
+0x5c U+005C # REVERSE SOLIDUS
+0x5d U+005D # RIGHT SQUARE BRACKET
+0x5e U+005E # CIRCUMFLEX ACCENT
+0x5f U+005F # LOW LINE
+0x60 U+0060 # GRAVE ACCENT
+0x61 U+0061 # LATIN SMALL LETTER A
+0x62 U+0062 # LATIN SMALL LETTER B
+0x63 U+0063 # LATIN SMALL LETTER C
+0x64 U+0064 # LATIN SMALL LETTER D
+0x65 U+0065 # LATIN SMALL LETTER E
+0x66 U+0066 # LATIN SMALL LETTER F
+0x67 U+0067 # LATIN SMALL LETTER G
+0x68 U+0068 # LATIN SMALL LETTER H
+0x69 U+0069 # LATIN SMALL LETTER I
+0x6a U+006A # LATIN SMALL LETTER J
+0x6b U+006B # LATIN SMALL LETTER K
+0x6c U+006C # LATIN SMALL LETTER L
+0x6d U+006D # LATIN SMALL LETTER M
+0x6e U+006E # LATIN SMALL LETTER N
+0x6f U+006F # LATIN SMALL LETTER O
+0x70 U+0070 # LATIN SMALL LETTER P
+0x71 U+0071 # LATIN SMALL LETTER Q
+0x72 U+0072 # LATIN SMALL LETTER R
+0x73 U+0073 # LATIN SMALL LETTER S
+0x74 U+0074 # LATIN SMALL LETTER T
+0x75 U+0075 # LATIN SMALL LETTER U
+0x76 U+0076 # LATIN SMALL LETTER V
+0x77 U+0077 # LATIN SMALL LETTER W
+0x78 U+0078 # LATIN SMALL LETTER X
+0x79 U+0079 # LATIN SMALL LETTER Y
+0x7a U+007A # LATIN SMALL LETTER Z
+0x7b U+007B # LEFT CURLY BRACKET
+0x7c U+007C # VERTICAL LINE
+0x7d U+007D # RIGHT CURLY BRACKET
+0x7e U+007E # TILDE
+0x7f U+007F # DELETE (DEL)
+0x80 U+0402 # CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+0x81 U+0403 # CYRILLIC CAPITAL LETTER GJE
+0x82 U+201A # SINGLE LOW-9 QUOTATION MARK
+0x83 U+0453 # CYRILLIC SMALL LETTER GJE
+0x84 U+201E # DOUBLE LOW-9 QUOTATION MARK
+0x85 U+2026 # HORIZONTAL ELLIPSIS
+0x86 U+2020 # DAGGER
+0x87 U+2021 # DOUBLE DAGGER
+0x88 U+20AC # EURO SIGN
+0x89 U+2030 # PER MILLE SIGN
+0x8a U+0409 # CYRILLIC CAPITAL LETTER LJE
+0x8b U+2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x8c U+040A # CYRILLIC CAPITAL LETTER NJE
+0x8d U+040C # CYRILLIC CAPITAL LETTER KJE
+0x8e U+040B # CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+0x8f U+040F # CYRILLIC CAPITAL LETTER DZHE
+0x90 U+0452 # CYRILLIC SMALL LETTER DJE (Serbocroatian)
+0x91 U+2018 # LEFT SINGLE QUOTATION MARK
+0x92 U+2019 # RIGHT SINGLE QUOTATION MARK
+0x93 U+201C # LEFT DOUBLE QUOTATION MARK
+0x94 U+201D # RIGHT DOUBLE QUOTATION MARK
+0x95 U+2022 # BULLET
+0x96 U+2013 # EN DASH
+0x97 U+2014 # EM DASH
+0x99 U+2122 # TRADE MARK SIGN
+0x9a U+0459 # CYRILLIC SMALL LETTER LJE
+0x9b U+203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x9c U+045A # CYRILLIC SMALL LETTER NJE
+0x9d U+045C # CYRILLIC SMALL LETTER KJE
+0x9e U+045B # CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+0x9f U+045F # CYRILLIC SMALL LETTER DZHE
+0xa0 U+00A0 # NO-BREAK SPACE
+0xa1 U+040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+0xa2 U+045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+0xa3 U+0408 # CYRILLIC CAPITAL LETTER JE
+0xa4 U+00A4 # CURRENCY SIGN
+0xa5 U+0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0xa6 U+00A6 # BROKEN BAR
+0xa7 U+00A7 # SECTION SIGN
+0xa8 U+0401 # CYRILLIC CAPITAL LETTER IO
+0xa9 U+00A9 # COPYRIGHT SIGN
+0xaa U+0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xab U+00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xac U+00AC # NOT SIGN
+0xad U+00AD # SOFT HYPHEN
+0xae U+00AE # REGISTERED SIGN
+0xaf U+0407 # CYRILLIC CAPITAL LETTER YI (Ukrainian)
+0xb0 U+00B0 # DEGREE SIGN
+0xb1 U+00B1 # PLUS-MINUS SIGN
+0xb2 U+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xb3 U+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xb4 U+0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0xb5 U+00B5 # MICRO SIGN
+0xb6 U+00B6 # PILCROW SIGN
+0xb7 U+00B7 # MIDDLE DOT
+0xb8 U+0451 # CYRILLIC SMALL LETTER IO
+0xb9 U+2116 # NUMERO SIGN
+0xba U+0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
+0xbb U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xbc U+0458 # CYRILLIC SMALL LETTER JE
+0xbd U+0405 # CYRILLIC CAPITAL LETTER DZE
+0xbe U+0455 # CYRILLIC SMALL LETTER DZE
+0xbf U+0457 # CYRILLIC SMALL LETTER YI (Ukrainian)
+0xc0 U+0410 # CYRILLIC CAPITAL LETTER A
+0xc1 U+0411 # CYRILLIC CAPITAL LETTER BE
+0xc2 U+0412 # CYRILLIC CAPITAL LETTER VE
+0xc3 U+0413 # CYRILLIC CAPITAL LETTER GHE
+0xc4 U+0414 # CYRILLIC CAPITAL LETTER DE
+0xc5 U+0415 # CYRILLIC CAPITAL LETTER IE
+0xc6 U+0416 # CYRILLIC CAPITAL LETTER ZHE
+0xc7 U+0417 # CYRILLIC CAPITAL LETTER ZE
+0xc8 U+0418 # CYRILLIC CAPITAL LETTER I
+0xc9 U+0419 # CYRILLIC CAPITAL LETTER SHORT I
+0xca U+041A # CYRILLIC CAPITAL LETTER KA
+0xcb U+041B # CYRILLIC CAPITAL LETTER EL
+0xcc U+041C # CYRILLIC CAPITAL LETTER EM
+0xcd U+041D # CYRILLIC CAPITAL LETTER EN
+0xce U+041E # CYRILLIC CAPITAL LETTER O
+0xcf U+041F # CYRILLIC CAPITAL LETTER PE
+0xd0 U+0420 # CYRILLIC CAPITAL LETTER ER
+0xd1 U+0421 # CYRILLIC CAPITAL LETTER ES
+0xd2 U+0422 # CYRILLIC CAPITAL LETTER TE
+0xd3 U+0423 # CYRILLIC CAPITAL LETTER U
+0xd4 U+0424 # CYRILLIC CAPITAL LETTER EF
+0xd5 U+0425 # CYRILLIC CAPITAL LETTER HA
+0xd6 U+0426 # CYRILLIC CAPITAL LETTER TSE
+0xd7 U+0427 # CYRILLIC CAPITAL LETTER CHE
+0xd8 U+0428 # CYRILLIC CAPITAL LETTER SHA
+0xd9 U+0429 # CYRILLIC CAPITAL LETTER SHCHA
+0xda U+042A # CYRILLIC CAPITAL LETTER HARD SIGN
+0xdb U+042B # CYRILLIC CAPITAL LETTER YERU
+0xdc U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN
+0xdd U+042D # CYRILLIC CAPITAL LETTER E
+0xde U+042E # CYRILLIC CAPITAL LETTER YU
+0xdf U+042F # CYRILLIC CAPITAL LETTER YA
+0xe0 U+0430 # CYRILLIC SMALL LETTER A
+0xe1 U+0431 # CYRILLIC SMALL LETTER BE
+0xe2 U+0432 # CYRILLIC SMALL LETTER VE
+0xe3 U+0433 # CYRILLIC SMALL LETTER GHE
+0xe4 U+0434 # CYRILLIC SMALL LETTER DE
+0xe5 U+0435 # CYRILLIC SMALL LETTER IE
+0xe6 U+0436 # CYRILLIC SMALL LETTER ZHE
+0xe7 U+0437 # CYRILLIC SMALL LETTER ZE
+0xe8 U+0438 # CYRILLIC SMALL LETTER I
+0xe9 U+0439 # CYRILLIC SMALL LETTER SHORT I
+0xea U+043A # CYRILLIC SMALL LETTER KA
+0xeb U+043B # CYRILLIC SMALL LETTER EL
+0xec U+043C # CYRILLIC SMALL LETTER EM
+0xed U+043D # CYRILLIC SMALL LETTER EN
+0xee U+043E # CYRILLIC SMALL LETTER O
+0xef U+043F # CYRILLIC SMALL LETTER PE
+0xf0 U+0440 # CYRILLIC SMALL LETTER ER
+0xf1 U+0441 # CYRILLIC SMALL LETTER ES
+0xf2 U+0442 # CYRILLIC SMALL LETTER TE
+0xf3 U+0443 # CYRILLIC SMALL LETTER U
+0xf4 U+0444 # CYRILLIC SMALL LETTER EF
+0xf5 U+0445 # CYRILLIC SMALL LETTER HA
+0xf6 U+0446 # CYRILLIC SMALL LETTER TSE
+0xf7 U+0447 # CYRILLIC SMALL LETTER CHE
+0xf8 U+0448 # CYRILLIC SMALL LETTER SHA
+0xf9 U+0449 # CYRILLIC SMALL LETTER SHCHA
+0xfa U+044A # CYRILLIC SMALL LETTER HARD SIGN
+0xfb U+044B # CYRILLIC SMALL LETTER YERU
+0xfc U+044C # CYRILLIC SMALL LETTER SOFT SIGN
+0xfd U+044D # CYRILLIC SMALL LETTER E
+0xfe U+044E # CYRILLIC SMALL LETTER YU
+0xff U+044F # CYRILLIC SMALL LETTER YA
--- /dev/null
+0x00 U+0000 # NULL (NUL)
+0x01 U+0001 # START OF HEADING (SOH)
+0x02 U+0002 # START OF TEXT (STX)
+0x03 U+0003 # END OF TEXT (ETX)
+0x04 U+0004 # END OF TRANSMISSION (EOT)
+0x05 U+0005 # ENQUIRY (ENQ)
+0x06 U+0006 # ACKNOWLEDGE (ACK)
+0x07 U+0007 # BELL (BEL)
+0x08 U+0008 # BACKSPACE (BS)
+0x09 U+0009 # CHARACTER TABULATION (HT)
+0x0a U+000A # LINE FEED (LF)
+0x0b U+000B # LINE TABULATION (VT)
+0x0c U+000C # FORM FEED (FF)
+0x0d U+000D # CARRIAGE RETURN (CR)
+0x0e U+000E # SHIFT OUT (SO)
+0x0f U+000F # SHIFT IN (SI)
+0x10 U+0010 # DATALINK ESCAPE (DLE)
+0x11 U+0011 # DEVICE CONTROL ONE (DC1)
+0x12 U+0012 # DEVICE CONTROL TWO (DC2)
+0x13 U+0013 # DEVICE CONTROL THREE (DC3)
+0x14 U+0014 # DEVICE CONTROL FOUR (DC4)
+0x15 U+0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 U+0016 # SYNCHRONOUS IDLE (SYN)
+0x17 U+0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 U+0018 # CANCEL (CAN)
+0x19 U+0019 # END OF MEDIUM (EM)
+0x1a U+001A # SUBSTITUTE (SUB)
+0x1b U+001B # ESCAPE (ESC)
+0x1c U+001C # FILE SEPARATOR (IS4)
+0x1d U+001D # GROUP SEPARATOR (IS3)
+0x1e U+001E # RECORD SEPARATOR (IS2)
+0x1f U+001F # UNIT SEPARATOR (IS1)
+0x20 U+0020 # SPACE
+0x21 U+0021 # EXCLAMATION MARK
+0x22 U+0022 # QUOTATION MARK
+0x23 U+0023 # NUMBER SIGN
+0x24 U+0024 # DOLLAR SIGN
+0x25 U+0025 # PERCENT SIGN
+0x26 U+0026 # AMPERSAND
+0x27 U+0027 # APOSTROPHE
+0x28 U+0028 # LEFT PARENTHESIS
+0x29 U+0029 # RIGHT PARENTHESIS
+0x2a U+002A # ASTERISK
+0x2b U+002B # PLUS SIGN
+0x2c U+002C # COMMA
+0x2d U+002D # HYPHEN-MINUS
+0x2e U+002E # FULL STOP
+0x2f U+002F # SOLIDUS
+0x30 U+0030 # DIGIT ZERO
+0x31 U+0031 # DIGIT ONE
+0x32 U+0032 # DIGIT TWO
+0x33 U+0033 # DIGIT THREE
+0x34 U+0034 # DIGIT FOUR
+0x35 U+0035 # DIGIT FIVE
+0x36 U+0036 # DIGIT SIX
+0x37 U+0037 # DIGIT SEVEN
+0x38 U+0038 # DIGIT EIGHT
+0x39 U+0039 # DIGIT NINE
+0x3a U+003A # COLON
+0x3b U+003B # SEMICOLON
+0x3c U+003C # LESS-THAN SIGN
+0x3d U+003D # EQUALS SIGN
+0x3e U+003E # GREATER-THAN SIGN
+0x3f U+003F # QUESTION MARK
+0x40 U+0040 # COMMERCIAL AT
+0x41 U+0041 # LATIN CAPITAL LETTER A
+0x42 U+0042 # LATIN CAPITAL LETTER B
+0x43 U+0043 # LATIN CAPITAL LETTER C
+0x44 U+0044 # LATIN CAPITAL LETTER D
+0x45 U+0045 # LATIN CAPITAL LETTER E
+0x46 U+0046 # LATIN CAPITAL LETTER F
+0x47 U+0047 # LATIN CAPITAL LETTER G
+0x48 U+0048 # LATIN CAPITAL LETTER H
+0x49 U+0049 # LATIN CAPITAL LETTER I
+0x4a U+004A # LATIN CAPITAL LETTER J
+0x4b U+004B # LATIN CAPITAL LETTER K
+0x4c U+004C # LATIN CAPITAL LETTER L
+0x4d U+004D # LATIN CAPITAL LETTER M
+0x4e U+004E # LATIN CAPITAL LETTER N
+0x4f U+004F # LATIN CAPITAL LETTER O
+0x50 U+0050 # LATIN CAPITAL LETTER P
+0x51 U+0051 # LATIN CAPITAL LETTER Q
+0x52 U+0052 # LATIN CAPITAL LETTER R
+0x53 U+0053 # LATIN CAPITAL LETTER S
+0x54 U+0054 # LATIN CAPITAL LETTER T
+0x55 U+0055 # LATIN CAPITAL LETTER U
+0x56 U+0056 # LATIN CAPITAL LETTER V
+0x57 U+0057 # LATIN CAPITAL LETTER W
+0x58 U+0058 # LATIN CAPITAL LETTER X
+0x59 U+0059 # LATIN CAPITAL LETTER Y
+0x5a U+005A # LATIN CAPITAL LETTER Z
+0x5b U+005B # LEFT SQUARE BRACKET
+0x5c U+005C # REVERSE SOLIDUS
+0x5d U+005D # RIGHT SQUARE BRACKET
+0x5e U+005E # CIRCUMFLEX ACCENT
+0x5f U+005F # LOW LINE
+0x60 U+0060 # GRAVE ACCENT
+0x61 U+0061 # LATIN SMALL LETTER A
+0x62 U+0062 # LATIN SMALL LETTER B
+0x63 U+0063 # LATIN SMALL LETTER C
+0x64 U+0064 # LATIN SMALL LETTER D
+0x65 U+0065 # LATIN SMALL LETTER E
+0x66 U+0066 # LATIN SMALL LETTER F
+0x67 U+0067 # LATIN SMALL LETTER G
+0x68 U+0068 # LATIN SMALL LETTER H
+0x69 U+0069 # LATIN SMALL LETTER I
+0x6a U+006A # LATIN SMALL LETTER J
+0x6b U+006B # LATIN SMALL LETTER K
+0x6c U+006C # LATIN SMALL LETTER L
+0x6d U+006D # LATIN SMALL LETTER M
+0x6e U+006E # LATIN SMALL LETTER N
+0x6f U+006F # LATIN SMALL LETTER O
+0x70 U+0070 # LATIN SMALL LETTER P
+0x71 U+0071 # LATIN SMALL LETTER Q
+0x72 U+0072 # LATIN SMALL LETTER R
+0x73 U+0073 # LATIN SMALL LETTER S
+0x74 U+0074 # LATIN SMALL LETTER T
+0x75 U+0075 # LATIN SMALL LETTER U
+0x76 U+0076 # LATIN SMALL LETTER V
+0x77 U+0077 # LATIN SMALL LETTER W
+0x78 U+0078 # LATIN SMALL LETTER X
+0x79 U+0079 # LATIN SMALL LETTER Y
+0x7a U+007A # LATIN SMALL LETTER Z
+0x7b U+007B # LEFT CURLY BRACKET
+0x7c U+007C # VERTICAL LINE
+0x7d U+007D # RIGHT CURLY BRACKET
+0x7e U+007E # TILDE
+0x7f U+007F # DELETE (DEL)
+0x80 U+2500 # BOX DRAWINGS LIGHT HORIZONTAL
+0x81 U+2502 # BOX DRAWINGS LIGHT VERTICAL
+0x82 U+250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
+0x83 U+2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
+0x84 U+2514 # BOX DRAWINGS LIGHT UP AND RIGHT
+0x85 U+2518 # BOX DRAWINGS LIGHT UP AND LEFT
+0x86 U+251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0x87 U+2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0x88 U+252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0x89 U+2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0x8a U+253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0x8b U+2580 # UPPER HALF BLOCK
+0x8c U+2584 # LOWER HALF BLOCK
+0x8d U+2588 # FULL BLOCK
+0x8e U+258C # LEFT HALF BLOCK
+0x8f U+2590 # RIGHT HALF BLOCK
+0x90 U+2591 # LIGHT SHADE
+0x91 U+2592 # MEDIUM SHADE
+0x92 U+2593 # DARK SHADE
+0x93 U+2320 # TOP HALF INTEGRAL
+0x94 U+25A0 # BLACK SQUARE
+0x95 U+2219 # BULLET OPERATOR
+0x96 U+221A # SQUARE ROOT
+0x97 U+2248 # ALMOST EQUAL TO
+0x98 U+2264 # LESS-THAN OR EQUAL TO
+0x99 U+2265 # GREATER-THAN OR EQUAL TO
+0x9a U+00A0 # NO-BREAK SPACE
+0x9b U+2321 # BOTTOM HALF INTEGRAL
+0x9c U+00B0 # DEGREE SIGN
+0x9d U+00B2 # SUPERSCRIPT TWO
+0x9e U+00B7 # MIDDLE DOT
+0x9f U+00F7 # DIVISION SIGN
+0xa0 U+2550 # BOX DRAWINGS DOUBLE HORIZONTAL
+0xa1 U+2551 # BOX DRAWINGS DOUBLE VERTICAL
+0xa2 U+2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xa3 U+0451 # CYRILLIC SMALL LETTER IO
+0xa4 U+2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+0xa5 U+2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xa6 U+2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+0xa7 U+2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+0xa8 U+2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xa9 U+2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xaa U+2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xab U+255A # BOX DRAWINGS DOUBLE UP AND RIGHT
+0xac U+255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xad U+255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+0xae U+255D # BOX DRAWINGS DOUBLE UP AND LEFT
+0xaf U+255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xb0 U+255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xb1 U+2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xb2 U+2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xb3 U+0401 # CYRILLIC CAPITAL LETTER IO
+0xb4 U+2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+0xb5 U+2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xb6 U+2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xb7 U+2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xb8 U+2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xb9 U+2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xba U+2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xbb U+2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xbc U+256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xbd U+256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xbe U+256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xbf U+00A9 # COPYRIGHT SIGN
+0xc0 U+044E # CYRILLIC SMALL LETTER YU
+0xc1 U+0430 # CYRILLIC SMALL LETTER A
+0xc2 U+0431 # CYRILLIC SMALL LETTER BE
+0xc3 U+0446 # CYRILLIC SMALL LETTER TSE
+0xc4 U+0434 # CYRILLIC SMALL LETTER DE
+0xc5 U+0435 # CYRILLIC SMALL LETTER IE
+0xc6 U+0444 # CYRILLIC SMALL LETTER EF
+0xc7 U+0433 # CYRILLIC SMALL LETTER GHE
+0xc8 U+0445 # CYRILLIC SMALL LETTER HA
+0xc9 U+0438 # CYRILLIC SMALL LETTER I
+0xca U+0439 # CYRILLIC SMALL LETTER SHORT I
+0xcb U+043A # CYRILLIC SMALL LETTER KA
+0xcc U+043B # CYRILLIC SMALL LETTER EL
+0xcd U+043C # CYRILLIC SMALL LETTER EM
+0xce U+043D # CYRILLIC SMALL LETTER EN
+0xcf U+043E # CYRILLIC SMALL LETTER O
+0xd0 U+043F # CYRILLIC SMALL LETTER PE
+0xd1 U+044F # CYRILLIC SMALL LETTER YA
+0xd2 U+0440 # CYRILLIC SMALL LETTER ER
+0xd3 U+0441 # CYRILLIC SMALL LETTER ES
+0xd4 U+0442 # CYRILLIC SMALL LETTER TE
+0xd5 U+0443 # CYRILLIC SMALL LETTER U
+0xd6 U+0436 # CYRILLIC SMALL LETTER ZHE
+0xd7 U+0432 # CYRILLIC SMALL LETTER VE
+0xd8 U+044C # CYRILLIC SMALL LETTER SOFT SIGN
+0xd9 U+044B # CYRILLIC SMALL LETTER YERU
+0xda U+0437 # CYRILLIC SMALL LETTER ZE
+0xdb U+0448 # CYRILLIC SMALL LETTER SHA
+0xdc U+044D # CYRILLIC SMALL LETTER E
+0xdd U+0449 # CYRILLIC SMALL LETTER SHCHA
+0xde U+0447 # CYRILLIC SMALL LETTER CHE
+0xdf U+044A # CYRILLIC SMALL LETTER HARD SIGN
+0xe0 U+042E # CYRILLIC CAPITAL LETTER YU
+0xe1 U+0410 # CYRILLIC CAPITAL LETTER A
+0xe2 U+0411 # CYRILLIC CAPITAL LETTER BE
+0xe3 U+0426 # CYRILLIC CAPITAL LETTER TSE
+0xe4 U+0414 # CYRILLIC CAPITAL LETTER DE
+0xe5 U+0415 # CYRILLIC CAPITAL LETTER IE
+0xe6 U+0424 # CYRILLIC CAPITAL LETTER EF
+0xe7 U+0413 # CYRILLIC CAPITAL LETTER GHE
+0xe8 U+0425 # CYRILLIC CAPITAL LETTER HA
+0xe9 U+0418 # CYRILLIC CAPITAL LETTER I
+0xea U+0419 # CYRILLIC CAPITAL LETTER SHORT I
+0xeb U+041A # CYRILLIC CAPITAL LETTER KA
+0xec U+041B # CYRILLIC CAPITAL LETTER EL
+0xed U+041C # CYRILLIC CAPITAL LETTER EM
+0xee U+041D # CYRILLIC CAPITAL LETTER EN
+0xef U+041E # CYRILLIC CAPITAL LETTER O
+0xf0 U+041F # CYRILLIC CAPITAL LETTER PE
+0xf1 U+042F # CYRILLIC CAPITAL LETTER YA
+0xf2 U+0420 # CYRILLIC CAPITAL LETTER ER
+0xf3 U+0421 # CYRILLIC CAPITAL LETTER ES
+0xf4 U+0422 # CYRILLIC CAPITAL LETTER TE
+0xf5 U+0423 # CYRILLIC CAPITAL LETTER U
+0xf6 U+0416 # CYRILLIC CAPITAL LETTER ZHE
+0xf7 U+0412 # CYRILLIC CAPITAL LETTER VE
+0xf8 U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN
+0xf9 U+042B # CYRILLIC CAPITAL LETTER YERU
+0xfa U+0417 # CYRILLIC CAPITAL LETTER ZE
+0xfb U+0428 # CYRILLIC CAPITAL LETTER SHA
+0xfc U+042D # CYRILLIC CAPITAL LETTER E
+0xfd U+0429 # CYRILLIC CAPITAL LETTER SHCHA
+0xfe U+0427 # CYRILLIC CAPITAL LETTER CHE
+0xff U+042A # CYRILLIC CAPITAL LETTER HARD SIGN
--- /dev/null
+0x00 U+0000 # NULL (NUL)
+0x01 U+0001 # START OF HEADING (SOH)
+0x02 U+0002 # START OF TEXT (STX)
+0x03 U+0003 # END OF TEXT (ETX)
+0x04 U+0004 # END OF TRANSMISSION (EOT)
+0x05 U+0005 # ENQUIRY (ENQ)
+0x06 U+0006 # ACKNOWLEDGE (ACK)
+0x07 U+0007 # BELL (BEL)
+0x08 U+0008 # BACKSPACE (BS)
+0x09 U+0009 # CHARACTER TABULATION (HT)
+0x0a U+000A # LINE FEED (LF)
+0x0b U+000B # LINE TABULATION (VT)
+0x0c U+000C # FORM FEED (FF)
+0x0d U+000D # CARRIAGE RETURN (CR)
+0x0e U+000E # SHIFT OUT (SO)
+0x0f U+000F # SHIFT IN (SI)
+0x10 U+0010 # DATALINK ESCAPE (DLE)
+0x11 U+0011 # DEVICE CONTROL ONE (DC1)
+0x12 U+0012 # DEVICE CONTROL TWO (DC2)
+0x13 U+0013 # DEVICE CONTROL THREE (DC3)
+0x14 U+0014 # DEVICE CONTROL FOUR (DC4)
+0x15 U+0015 # NEGATIVE ACKNOWLEDGE (NAK)
+0x16 U+0016 # SYNCHRONOUS IDLE (SYN)
+0x17 U+0017 # END OF TRANSMISSION BLOCK (ETB)
+0x18 U+0018 # CANCEL (CAN)
+0x19 U+0019 # END OF MEDIUM (EM)
+0x1a U+001A # SUBSTITUTE (SUB)
+0x1b U+001B # ESCAPE (ESC)
+0x1c U+001C # FILE SEPARATOR (IS4)
+0x1d U+001D # GROUP SEPARATOR (IS3)
+0x1e U+001E # RECORD SEPARATOR (IS2)
+0x1f U+001F # UNIT SEPARATOR (IS1)
+0x20 U+0020 # SPACE
+0x21 U+0021 # EXCLAMATION MARK
+0x22 U+0022 # QUOTATION MARK
+0x23 U+0023 # NUMBER SIGN
+0x24 U+0024 # DOLLAR SIGN
+0x25 U+0025 # PERCENT SIGN
+0x26 U+0026 # AMPERSAND
+0x27 U+0027 # APOSTROPHE
+0x28 U+0028 # LEFT PARENTHESIS
+0x29 U+0029 # RIGHT PARENTHESIS
+0x2a U+002A # ASTERISK
+0x2b U+002B # PLUS SIGN
+0x2c U+002C # COMMA
+0x2d U+002D # HYPHEN-MINUS
+0x2e U+002E # FULL STOP
+0x2f U+002F # SOLIDUS
+0x30 U+0030 # DIGIT ZERO
+0x31 U+0031 # DIGIT ONE
+0x32 U+0032 # DIGIT TWO
+0x33 U+0033 # DIGIT THREE
+0x34 U+0034 # DIGIT FOUR
+0x35 U+0035 # DIGIT FIVE
+0x36 U+0036 # DIGIT SIX
+0x37 U+0037 # DIGIT SEVEN
+0x38 U+0038 # DIGIT EIGHT
+0x39 U+0039 # DIGIT NINE
+0x3a U+003A # COLON
+0x3b U+003B # SEMICOLON
+0x3c U+003C # LESS-THAN SIGN
+0x3d U+003D # EQUALS SIGN
+0x3e U+003E # GREATER-THAN SIGN
+0x3f U+003F # QUESTION MARK
+0x40 U+0040 # COMMERCIAL AT
+0x41 U+0041 # LATIN CAPITAL LETTER A
+0x42 U+0042 # LATIN CAPITAL LETTER B
+0x43 U+0043 # LATIN CAPITAL LETTER C
+0x44 U+0044 # LATIN CAPITAL LETTER D
+0x45 U+0045 # LATIN CAPITAL LETTER E
+0x46 U+0046 # LATIN CAPITAL LETTER F
+0x47 U+0047 # LATIN CAPITAL LETTER G
+0x48 U+0048 # LATIN CAPITAL LETTER H
+0x49 U+0049 # LATIN CAPITAL LETTER I
+0x4a U+004A # LATIN CAPITAL LETTER J
+0x4b U+004B # LATIN CAPITAL LETTER K
+0x4c U+004C # LATIN CAPITAL LETTER L
+0x4d U+004D # LATIN CAPITAL LETTER M
+0x4e U+004E # LATIN CAPITAL LETTER N
+0x4f U+004F # LATIN CAPITAL LETTER O
+0x50 U+0050 # LATIN CAPITAL LETTER P
+0x51 U+0051 # LATIN CAPITAL LETTER Q
+0x52 U+0052 # LATIN CAPITAL LETTER R
+0x53 U+0053 # LATIN CAPITAL LETTER S
+0x54 U+0054 # LATIN CAPITAL LETTER T
+0x55 U+0055 # LATIN CAPITAL LETTER U
+0x56 U+0056 # LATIN CAPITAL LETTER V
+0x57 U+0057 # LATIN CAPITAL LETTER W
+0x58 U+0058 # LATIN CAPITAL LETTER X
+0x59 U+0059 # LATIN CAPITAL LETTER Y
+0x5a U+005A # LATIN CAPITAL LETTER Z
+0x5b U+005B # LEFT SQUARE BRACKET
+0x5c U+005C # REVERSE SOLIDUS
+0x5d U+005D # RIGHT SQUARE BRACKET
+0x5e U+005E # CIRCUMFLEX ACCENT
+0x5f U+005F # LOW LINE
+0x60 U+0060 # GRAVE ACCENT
+0x61 U+0061 # LATIN SMALL LETTER A
+0x62 U+0062 # LATIN SMALL LETTER B
+0x63 U+0063 # LATIN SMALL LETTER C
+0x64 U+0064 # LATIN SMALL LETTER D
+0x65 U+0065 # LATIN SMALL LETTER E
+0x66 U+0066 # LATIN SMALL LETTER F
+0x67 U+0067 # LATIN SMALL LETTER G
+0x68 U+0068 # LATIN SMALL LETTER H
+0x69 U+0069 # LATIN SMALL LETTER I
+0x6a U+006A # LATIN SMALL LETTER J
+0x6b U+006B # LATIN SMALL LETTER K
+0x6c U+006C # LATIN SMALL LETTER L
+0x6d U+006D # LATIN SMALL LETTER M
+0x6e U+006E # LATIN SMALL LETTER N
+0x6f U+006F # LATIN SMALL LETTER O
+0x70 U+0070 # LATIN SMALL LETTER P
+0x71 U+0071 # LATIN SMALL LETTER Q
+0x72 U+0072 # LATIN SMALL LETTER R
+0x73 U+0073 # LATIN SMALL LETTER S
+0x74 U+0074 # LATIN SMALL LETTER T
+0x75 U+0075 # LATIN SMALL LETTER U
+0x76 U+0076 # LATIN SMALL LETTER V
+0x77 U+0077 # LATIN SMALL LETTER W
+0x78 U+0078 # LATIN SMALL LETTER X
+0x79 U+0079 # LATIN SMALL LETTER Y
+0x7a U+007A # LATIN SMALL LETTER Z
+0x7b U+007B # LEFT CURLY BRACKET
+0x7c U+007C # VERTICAL LINE
+0x7d U+007D # RIGHT CURLY BRACKET
+0x7e U+007E # TILDE
+0x7f U+007F # DELETE (DEL)
+0x80 U+2500 # BOX DRAWINGS LIGHT HORIZONTAL
+0x81 U+2502 # BOX DRAWINGS LIGHT VERTICAL
+0x82 U+250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
+0x83 U+2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
+0x84 U+2514 # BOX DRAWINGS LIGHT UP AND RIGHT
+0x85 U+2518 # BOX DRAWINGS LIGHT UP AND LEFT
+0x86 U+251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0x87 U+2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0x88 U+252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0x89 U+2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0x8a U+253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0x8b U+2580 # UPPER HALF BLOCK
+0x8c U+2584 # LOWER HALF BLOCK
+0x8d U+2588 # FULL BLOCK
+0x8e U+258C # LEFT HALF BLOCK
+0x8f U+2590 # RIGHT HALF BLOCK
+0x90 U+2591 # LIGHT SHADE
+0x91 U+2592 # MEDIUM SHADE
+0x92 U+2593 # DARK SHADE
+0x93 U+2320 # TOP HALF INTEGRAL
+0x94 U+25A0 # BLACK SQUARE
+0x95 U+2219 # BULLET OPERATOR
+0x96 U+221A # SQUARE ROOT
+0x97 U+2248 # ALMOST EQUAL TO
+0x98 U+2264 # LESS THAN OR EQUAL TO
+0x99 U+2265 # GREATER THAN OR EQUAL TO
+0x9a U+00A0 # NO-BREAK SPACE
+0x9b U+2321 # BOTTOM HALF INTEGRAL
+0x9c U+00B0 # DEGREE SIGN
+0x9d U+00B2 # SUPERSCRIPT DIGIT TWO
+0x9e U+00B7 # MIDDLE DOT
+0x9f U+00F7 # DIVISION SIGN
+0xa0 U+2550 # BOX DRAWINGS DOUBLE HORIZONTAL
+0xa1 U+2551 # BOX DRAWINGS DOUBLE VERTICAL
+0xa2 U+2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xa3 U+0451 # CYRILLIC SMALL LETTER IO
+0xa4 U+0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
+0xa5 U+2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xa6 U+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0xa7 U+0457 # CYRILLIC SMALL LETTER YI (Ukrainian)
+0xa8 U+2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xa9 U+2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xaa U+2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xab U+255A # BOX DRAWINGS DOUBLE UP AND RIGHT
+0xac U+255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xad U+0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0xae U+255D # BOX DRAWINGS DOUBLE UP AND LEFT
+0xaf U+255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xb0 U+255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xb1 U+2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xb2 U+2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xb3 U+0401 # CYRILLIC CAPITAL LETTER IO
+0xb4 U+0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0xb5 U+2563 # DOUBLE VERTICAL AND LEFT
+0xb6 U+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xb7 U+0407 # CYRILLIC CAPITAL LETTER YI (Ukrainian)
+0xb8 U+2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xb9 U+2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xba U+2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xbb U+2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xbc U+256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xbd U+0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0xbe U+256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xbf U+00A9 # COPYRIGHT SIGN
+0xc0 U+044E # CYRILLIC SMALL LETTER YU
+0xc1 U+0430 # CYRILLIC SMALL LETTER A
+0xc2 U+0431 # CYRILLIC SMALL LETTER BE
+0xc3 U+0446 # CYRILLIC SMALL LETTER TSE
+0xc4 U+0434 # CYRILLIC SMALL LETTER DE
+0xc5 U+0435 # CYRILLIC SMALL LETTER IE
+0xc6 U+0444 # CYRILLIC SMALL LETTER EF
+0xc7 U+0433 # CYRILLIC SMALL LETTER GHE
+0xc8 U+0445 # CYRILLIC SMALL LETTER HA
+0xc9 U+0438 # CYRILLIC SMALL LETTER I
+0xca U+0439 # CYRILLIC SMALL LETTER SHORT I
+0xcb U+043A # CYRILLIC SMALL LETTER KA
+0xcc U+043B # CYRILLIC SMALL LETTER EL
+0xcd U+043C # CYRILLIC SMALL LETTER EM
+0xce U+043D # CYRILLIC SMALL LETTER EN
+0xcf U+043E # CYRILLIC SMALL LETTER O
+0xd0 U+043F # CYRILLIC SMALL LETTER PE
+0xd1 U+044F # CYRILLIC SMALL LETTER YA
+0xd2 U+0440 # CYRILLIC SMALL LETTER ER
+0xd3 U+0441 # CYRILLIC SMALL LETTER ES
+0xd4 U+0442 # CYRILLIC SMALL LETTER TE
+0xd5 U+0443 # CYRILLIC SMALL LETTER U
+0xd6 U+0436 # CYRILLIC SMALL LETTER ZHE
+0xd7 U+0432 # CYRILLIC SMALL LETTER VE
+0xd8 U+044C # CYRILLIC SMALL LETTER SOFT SIGN
+0xd9 U+044B # CYRILLIC SMALL LETTER YERU
+0xda U+0437 # CYRILLIC SMALL LETTER ZE
+0xdb U+0448 # CYRILLIC SMALL LETTER SHA
+0xdc U+044D # CYRILLIC SMALL LETTER E
+0xdd U+0449 # CYRILLIC SMALL LETTER SHCHA
+0xde U+0447 # CYRILLIC SMALL LETTER CHE
+0xdf U+044A # CYRILLIC SMALL LETTER HARD SIGN
+0xe0 U+042E # CYRILLIC CAPITAL LETTER YU
+0xe1 U+0410 # CYRILLIC CAPITAL LETTER A
+0xe2 U+0411 # CYRILLIC CAPITAL LETTER BE
+0xe3 U+0426 # CYRILLIC CAPITAL LETTER TSE
+0xe4 U+0414 # CYRILLIC CAPITAL LETTER DE
+0xe5 U+0415 # CYRILLIC CAPITAL LETTER IE
+0xe6 U+0424 # CYRILLIC CAPITAL LETTER EF
+0xe7 U+0413 # CYRILLIC CAPITAL LETTER GHE
+0xe8 U+0425 # CYRILLIC CAPITAL LETTER HA
+0xe9 U+0418 # CYRILLIC CAPITAL LETTER I
+0xea U+0419 # CYRILLIC CAPITAL LETTER SHORT I
+0xeb U+041A # CYRILLIC CAPITAL LETTER KA
+0xec U+041B # CYRILLIC CAPITAL LETTER EL
+0xed U+041C # CYRILLIC CAPITAL LETTER EM
+0xee U+041D # CYRILLIC CAPITAL LETTER EN
+0xef U+041E # CYRILLIC CAPITAL LETTER O
+0xf0 U+041F # CYRILLIC CAPITAL LETTER PE
+0xf1 U+042F # CYRILLIC CAPITAL LETTER YA
+0xf2 U+0420 # CYRILLIC CAPITAL LETTER ER
+0xf3 U+0421 # CYRILLIC CAPITAL LETTER ES
+0xf4 U+0422 # CYRILLIC CAPITAL LETTER TE
+0xf5 U+0423 # CYRILLIC CAPITAL LETTER U
+0xf6 U+0416 # CYRILLIC CAPITAL LETTER ZHE
+0xf7 U+0412 # CYRILLIC CAPITAL LETTER VE
+0xf8 U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN
+0xf9 U+042B # CYRILLIC CAPITAL LETTER YERU
+0xfa U+0417 # CYRILLIC CAPITAL LETTER ZE
+0xfb U+0428 # CYRILLIC CAPITAL LETTER SHA
+0xfc U+042D # CYRILLIC CAPITAL LETTER E
+0xfd U+0429 # CYRILLIC CAPITAL LETTER SHCHA
+0xfe U+0427 # CYRILLIC CAPITAL LETTER CHE
+0xff U+042A # CYRILLIC CAPITAL LETTER HARD SIGN
# | ½ «| 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 ¶| ^ ~| £ ¢| <-' |
+# | |<- | 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 ¹| ù ²| * ³| |
# Control Alt Delete/Backspace : redémarrer
# AltGr + Impr. Écran : arrêter
#
-# Ajouter pour ces deux fonction les lignes suivantes à /etc/inittab :
+# Ajouter pour ces deux fonctions les lignes suivantes à /etc/inittab :
#
# ca:12345:ctrlaltdel:/sbin/shutdown -t1 -r now
# kb:12345:kbrequest:/sbin/halt
#
# Seule exception : AltGr (e) donnant l'euro ¤, AltGr + Shift ($) donne ê
#
-# * Si les dead_keys fonctionnent, utiliser les accent dits
+# * Si les dead_keys fonctionnent, utiliser les accents dits
# «morts», i.e. fonctionnant comme l'accent circonflexe & le
# tréma des machines à écrire ; sont disponibles :
#
#
# 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 :
+# Celui-ci à été refait pour correspondre à celui par défaut des vieilles
+# machines à écrire 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
+charset "iso-8859-15"
keycode 0 =
keycode 28 = Return
alt keycode 28 = 0x080d
- altgr keycode 26 = Linefeed
+ altgr keycode 28 = Linefeed
keycode 29 = Control
keycode 54 = CapsShift
-keycode 55 = KP_Multiply Hex_A Hex_D
+keycode 55 = asterisk Hex_A Hex_D
keycode 56 = Alt
keycode 70 = Scroll_Lock Show_Memory Show_Registers
control keycode 70 = Show_State
-keycode 71 = KP_7 Hex_7
+keycode 71 = seven Hex_7
alt keycode 71 = Ascii_7
-keycode 72 = KP_8 Hex_8
+keycode 72 = eight Hex_8
alt keycode 72 = Ascii_8
-keycode 73 = KP_9 Hex_9
+keycode 73 = nine Hex_9
alt keycode 73 = Ascii_9
-keycode 74 = KP_Subtract Hex_B Hex_E
+keycode 74 = minus Hex_B Hex_E
alt keycode 74 = minus
-keycode 75 = KP_4 Hex_4
+keycode 75 = four Hex_4
alt keycode 75 = Ascii_4
-keycode 76 = KP_5 Hex_5
+keycode 76 = five Hex_5
alt keycode 76 = Ascii_5
-keycode 77 = KP_6 Hex_6
+keycode 77 = six Hex_6
alt keycode 77 = Ascii_6
-keycode 78 = KP_Add Hex_C Hex_F
+keycode 78 = plus Hex_C Hex_F
alt keycode 78 = plus
-keycode 79 = KP_1 Hex_1
+keycode 79 = one Hex_1
alt keycode 79 = Ascii_1
-keycode 80 = KP_2 Hex_2
+keycode 80 = two Hex_2
alt keycode 80 = Ascii_2
-keycode 81 = KP_3 Hex_3
+keycode 81 = three Hex_3
alt keycode 81 = Ascii_3
-keycode 82 = KP_0 Hex_0
+keycode 82 = zero Hex_0
alt keycode 82 = Ascii_0
-keycode 83 = KP_Period KP_Comma
+keycode 83 = period comma
altgr control keycode 83 = KeyboardSignal
control alt keycode 83 = Boot
#
-# La touche AltGr+«Impr. Écran» = «SysReq» a un code pour elle même
+# La touche AltGr+«Impr. Écran» = «SysReq» a un code pour elle-même
#
keycode 84 = SAK
keycode 95 =
-keycode 96 = KP_Enter
+keycode 96 = Return
keycode 97 = Control
-keycode 98 = KP_Divide
+keycode 98 = slash
#
-# La touche «Impr. Écran» ne sert à rien sous linux, alors mettons-y «Compose»
+# La touche «Impr. Écran» ne sert à rien sous Linux, alors mettons-y «Compose»
#
keycode 99 = Compose
alt keycode 100 = Compose
#
-# La touche Ctrl+Pause = Attn = 101 a un code pour elle même
+# La touche Ctrl+Pause = Attn = 101 a un code pour elle-même
#
keycode 101 = Break
keycode 117 = F17
-keycode 118 = KP_MinPlus
+keycode 118 = plusminus
keycode 119 = Pause
keycode 123 =
keycode 124 =
+
#
-# Touches supplémentaires des clavier 105 touches
+# Touches supplémentaires des claviers 105 touches
#
#
string F34 = "\033[48~"
string F35 = "\033[49~"
+# Latin1 compatible
compose '`' 'A' to 'À'
compose '`' 'a' to 'à'
compose '\'' 'A' to 'Á'
compose '-' 'a' to 'ª'
compose '-' 'A' to 'ª'
compose 'O' 'A' to 'Å'
+compose 'o' '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 '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 '"' '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 '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 '`' 'O' to 'Ò'
compose '`' 'o' to 'ò'
compose '\'' 'O' 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 's' 'z' to 'ß'
+compose 's' 's' to 'ß'
+compose '^' '1' to '¹'
+compose '^' '2' to '²'
+compose '^' '3' to '³'
+compose '<' '<' 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 '(' 'c' to '©'
+compose '(' 'r' to '®'
+compose 'm' 'u' to 'µ'
compose '^' '!' to '¡'
compose '^' '?' to '¿'
compose '^' '-' to '¯'
compose '^' 'x' to '×'
compose '^' 'X' 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 '"' 'y' to 'ÿ'
+compose 'i' 'j' to 'ÿ'
+# Latin0 specific
+compose '"' 'Y' to '¾'
+compose 'I' 'J' to '¾'
+compose '-' 'e' to '¤'
+compose '-' 'E' to '¤'
+compose '=' 'e' to '¤'
+compose '=' 'c' to '¤'
+compose '=' 'E' to '¤'
+compose '=' 'C' to '¤'
+compose 'e' '=' to '¤'
+compose 'c' '=' to '¤'
+compose 'E' '=' to '¤'
+compose 'C' '=' to '¤'
+compose '^' 'S' to '¦'
+compose '^' 's' to '¨'
+compose '^' 'Z' to '´'
+compose '^' 'z' to '¸'
+compose 'v' 'S' to '¦'
+compose 'v' 's' to '¨'
+compose 'v' 'Z' to '´'
+compose 'v' 'z' to '¸'
compose 'O' 'E' to '¼'
-
+compose 'O' 'e' to '¼'
+compose 'o' 'e' to '½'
+compose '"' 'Y' to '¾'
Meta_less Meta_greater Meta_backslash
alt Control keycode 86 = Meta_bar
keycode 97 = Control
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 118 = KP_MinPlus
keycode 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
-keycode 101 = Break
+keycode 101 = Break
keycode 102 = Find
keycode 103 = Up
keycode 104 = Prior
# The three system keys
#
keycode 84 = Last_Console # Alt+SysRq/PrintScrn
-keycode 99 = Control_backslash # SysRq/PrintScrn
+keycode 99 = VoidSymbol # SysRq/PrintScrn
+alt keycode 99 = Control_backslash
+control keycode 99 = Control_backslash
plain keycode 70 = Scroll_Lock
shift keycode 70 = Show_Memory
--- /dev/null
+# Bulgarian Phonetic Cyrillic code page 1251 keyboard map.
+# Cyrillic mode is toggled by Right_Ctrl key and shifted by AltGr key.
+# Based on the default linux kernel keyboard map. -- Dimitar Zhekov
+
+keymaps 0-5,8,12
+
+# Change the above line into:
+# keymaps 0-6,8,12
+# in case you want the entries:
+# altgr control keycode 83 = Boot
+# altgr control keycode 111 = Boot
+# below.
+
+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
+ 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
+ control keycode 14 = BackSpace
+ alt keycode 14 = Meta_Delete
+keycode 15 = Tab
+ alt keycode 15 = Meta_Tab
+keycode 16 = q Q +255 +223 Control_q
+ alt keycode 16 = Meta_q
+ control alt keycode 16 = Meta_Control_q
+keycode 17 = w W +226 +194 Control_w
+ alt keycode 17 = Meta_w
+ control alt keycode 17 = Meta_Control_w
+keycode 18 = e E +229 +197 Control_e
+ alt keycode 18 = Meta_e
+ control alt keycode 18 = Meta_Control_e
+keycode 19 = r R +240 +208 Control_r
+ alt keycode 19 = Meta_r
+ control alt keycode 19 = Meta_Control_r
+keycode 20 = t T +242 +210 Control_t
+ alt keycode 20 = Meta_t
+ control alt keycode 20 = Meta_Control_t
+keycode 21 = y Y +250 +218 Control_y
+ alt keycode 21 = Meta_y
+ control alt keycode 21 = Meta_Control_y
+keycode 22 = u U +243 +211 Control_u
+ alt keycode 22 = Meta_u
+ control alt keycode 22 = Meta_Control_u
+keycode 23 = i I +232 +200 Tab
+ alt keycode 23 = Meta_i
+ control alt keycode 23 = Meta_Tab
+keycode 24 = o O +238 +206 Control_o
+ alt keycode 24 = Meta_o
+ control alt keycode 24 = Meta_Control_o
+keycode 25 = p P +239 +207 Control_p
+ alt keycode 25 = Meta_p
+ control alt keycode 25 = Meta_Control_p
+keycode 26 = bracketleft braceleft +248 +216 Escape
+ alt keycode 26 = Meta_bracketleft
+ control alt keycode 26 = Meta_Escape
+keycode 27 = bracketright braceright +249 +217 Control_bracketright
+ alt keycode 27 = Meta_bracketright
+ control alt keycode 27 = Meta_Control_bracketright
+keycode 28 = Return
+ alt keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 30 = a A +224 +192 Control_a
+ alt keycode 30 = Meta_a
+ control alt keycode 30 = Meta_Control_a
+keycode 31 = s S +241 +209 Control_s
+ alt keycode 31 = Meta_s
+ control alt keycode 31 = Meta_Control_s
+keycode 32 = d D +228 +196 Control_d
+ alt keycode 32 = Meta_d
+ control alt keycode 32 = Meta_Control_d
+keycode 33 = f F +244 +212 Control_f
+ alt keycode 33 = Meta_f
+ control alt keycode 33 = Meta_Control_f
+keycode 34 = g G +227 +195 Control_g
+ alt keycode 34 = Meta_g
+ control alt keycode 34 = Meta_Control_g
+keycode 35 = h H +245 +213 Control_h
+ alt keycode 35 = Meta_h
+ control alt keycode 35 = Meta_Control_h
+keycode 36 = j J +233 +201 Control_j
+ alt keycode 35 = Meta_j
+ control alt keycode 35 = Meta_Control_j
+keycode 37 = k K +234 +202 Control_k
+ alt keycode 37 = Meta_k
+ control alt keycode 37 = Meta_Control_k
+keycode 38 = l L +235 +203 Control_l
+ alt keycode 38 = Meta_l
+ control alt keycode 38 = Meta_Control_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 +247 +215 nul
+ alt keycode 41 = Meta_grave
+keycode 42 = Shift
+keycode 43 = backslash bar +254 +222 Control_backslash
+ alt keycode 43 = Meta_backslash
+ control alt keycode 43 = Meta_Control_backslash
+keycode 44 = z Z +231 +199 Control_z
+ alt keycode 44 = Meta_z
+ control alt keycode 44 = Meta_Control_z
+keycode 45 = x X +252 +220 Control_x
+ alt keycode 45 = Meta_x
+ control alt keycode 45 = Meta_Control_x
+keycode 46 = c C +246 +214 Control_c
+ alt keycode 46 = Meta_c
+ control alt keycode 46 = Meta_Control_c
+keycode 47 = v V +230 +198 Control_v
+ alt keycode 47 = Meta_v
+ control alt keycode 47 = Meta_Control_v
+keycode 48 = b B +225 +193 Control_b
+ alt keycode 48 = Meta_b
+ control alt keycode 48 = Meta_Control_b
+keycode 49 = n N +237 +205 Control_n
+ alt keycode 49 = Meta_n
+ control alt keycode 49 = Meta_Control_n
+keycode 50 = m M +236 +204 Control_m
+ alt keycode 50 = Meta_m
+ control alt keycode 50 = Meta_Control_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
+ 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
+ shift keycode 69 = Bare_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
+ altgr keycode 71 = Hex_7
+keycode 72 = KP_8
+ alt keycode 72 = Ascii_8
+ altgr keycode 72 = Hex_8
+keycode 73 = KP_9
+ alt keycode 73 = Ascii_9
+ altgr keycode 73 = Hex_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_4
+ alt keycode 75 = Ascii_4
+ altgr keycode 75 = Hex_4
+keycode 76 = KP_5
+ alt keycode 76 = Ascii_5
+ altgr keycode 76 = Hex_5
+keycode 77 = KP_6
+ alt keycode 77 = Ascii_6
+ altgr keycode 77 = Hex_6
+keycode 78 = KP_Add
+keycode 79 = KP_1
+ alt keycode 79 = Ascii_1
+ altgr keycode 79 = Hex_1
+keycode 80 = KP_2
+ alt keycode 80 = Ascii_2
+ altgr keycode 80 = Hex_2
+keycode 81 = KP_3
+ alt keycode 81 = Ascii_3
+ altgr keycode 81 = Hex_3
+keycode 82 = KP_0
+ alt keycode 82 = Ascii_0
+ altgr keycode 82 = Hex_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 96 = KP_Enter
+keycode 97 = AltGr_Lock
+keycode 98 = KP_Divide
+keycode 99 = VoidSymbol
+ 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 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
control keycode 43 = Control_bracketright
keycode 51 = comma less
keycode 52 = period greater
-keycode 53 = semicolon colon
control keycode 52 = nul
+keycode 53 = semicolon colon
keycode 54 = Shift
keycode 56 = Alt
keycode 57 = space
KP_Divide KP_Divide KP_Divide \
KP_Divide KP_Divide Hex_B \
KP_Divide KP_Divide KP_Divide
-keycode 99 = Control_backslash Control_backslash Control_backslash \
+keycode 99 = VoidSymbol Control_backslash Control_backslash \
Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash \
Control_backslash Control_backslash Control_backslash \
Meta_Control_backslash Meta_Control_backslash Meta_Control_backslash \
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 99 = VoidSymbol
+ 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
+ shift keycode 104 = Scroll_Backward
keycode 105 = Left
alt keycode 105 = Decr_Console
alt altgr keycode 105 = Decr_Console
keycode 107 = Select
keycode 108 = Down
keycode 109 = Next
-shift keycode 109 = Scroll_Forward
+ shift keycode 109 = Scroll_Forward
keycode 110 = Insert
keycode 111 = Remove
-control alt keycode 111 = Boot
+ control alt keycode 111 = Boot
keycode 112 = Macro
keycode 113 = F13
keycode 114 = F14
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 99 = VoidSymbol
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
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 99 = VoidSymbol
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
-# fi-latin1.map: Finnish keymap
+# fi-latin1.map: Finnish keymap with ISO-8859-1 symbols
# Changes by Johan Myréen <jem@iki.fi> 1997-08-19
-# Changes by Marko Myllynen <myllynen@lut.fi> 2001-04-05
+# Changes by Marko Myllynen <myllynen@lut.fi> 2001-04-05, 2002-01-16
charset "iso-8859-1"
-keymaps 0-2,4-6,8-10,12-14
+keymaps 0-6,8-10,12-14
alt_is_meta
include "qwerty-layout"
- altgr keycode 18 = Hex_E
+ altgr keycode 18 = currency
altgr keycode 19 = registered
altgr keycode 20 = +thorn
- control shift keycode 20 = +THORN
+ altgr shift keycode 20 = +THORN
altgr keycode 25 = paragraph
- altgr keycode 30 = Hex_A
- altgr keycode 31 = ssharp
- altgr keycode 32 = Hex_D
+ altgr control keycode 31 = ssharp
altgr keycode 32 = +eth
- control shift keycode 32 = +ETH
- altgr keycode 33 = Hex_F
- altgr keycode 46 = Hex_C
- control shift keycode 46 = copyright
- altgr keycode 48 = Hex_B
+ altgr shift keycode 32 = +ETH
+ altgr keycode 45 = multiply
+ shift altgr keycode 45 = division
+ altgr keycode 46 = copyright
+ altgr shift keycode 46 = cent
altgr keycode 49 = +ntilde
- control shift keycode 49 = +Ntilde
+ altgr shift keycode 49 = +Ntilde
altgr keycode 50 = mu
include "linux-with-alt-and-altgr"
plain keycode 83 = KP_Comma
keycode 1 = Escape
keycode 2 = one exclam exclamdown
- control shift keycode 2 = onesuperior
+ altgr shift keycode 2 = onesuperior
keycode 3 = two quotedbl at
- control shift keycode 3 = twosuperior
control keycode 3 = nul
control altgr keycode 3 = nul
+ altgr shift keycode 3 = twosuperior
keycode 4 = three numbersign sterling
- control shift keycode 4 = threesuperior
control keycode 4 = Escape
-# old: keycode 5 = four dollar dollar
+ altgr shift keycode 4 = threesuperior
keycode 5 = four currency dollar
- control shift keycode 5 = cent
control keycode 5 = Control_backslash
+ altgr shift keycode 5 = cent
keycode 6 = five percent currency
- control shift keycode 6 = masculine
control keycode 6 = Control_bracketright
+ altgr shift keycode 6 = masculine
keycode 7 = six ampersand yen
- control shift keycode 7 = ordfeminine
control keycode 7 = Control_asciicircum
+ altgr shift keycode 7 = ordfeminine
keycode 8 = seven slash braceleft
- control shift keycode 8 = plusminus
control keycode 8 = Control_underscore
+ altgr shift keycode 8 = plusminus
keycode 9 = eight parenleft bracketleft
- control shift keycode 9 = guillemotleft
control keycode 9 = Delete
control altgr keycode 9 = Escape
+ altgr shift keycode 9 = guillemotleft
keycode 10 = nine parenright bracketright
- control shift keycode 10 = guillemotright
control altgr keycode 10 = Control_bracketright
+ altgr shift keycode 10 = guillemotright
keycode 11 = zero equal braceright
- control shift keycode 11 = degree
+ altgr shift keycode 11 = degree
keycode 12 = plus question backslash
- control shift keycode 12 = questiondown
control keycode 12 = Control_underscore
control altgr keycode 12 = Control_backslash
+ altgr shift keycode 12 = questiondown
keycode 13 = dead_acute dead_grave
alt keycode 13 = Meta_equal
alt shift keycode 13 = Meta_grave
keycode 28 = Return
alt keycode 28 = Meta_Control_m
keycode 29 = Control
-keycode 39 = +odiaeresis +Odiaeresis +oslash
- control shift keycode 39 = +Oslash
+keycode 39 = +odiaeresis +Odiaeresis +oslash
alt keycode 39 = Meta_semicolon
-keycode 40 = +adiaeresis +Adiaeresis +ae
- control shift keycode 40 = +AE
+ altgr shift keycode 39 = +Oslash
+keycode 40 = +adiaeresis +Adiaeresis +ae
alt keycode 40 = Meta_apostrophe
-keycode 41 = section onehalf onequarter
- control shift keycode 41 = threequarters
+ altgr shift keycode 40 = +AE
+keycode 41 = section onehalf onequarter
control keycode 41 = nul
alt keycode 41 = Meta_grave
+ altgr shift keycode 41 = threequarters
keycode 42 = Shift
-# 43: Add caron and dead_caron here when supported properly
keycode 43 = apostrophe asterisk
control keycode 43 = Control_backslash
-keycode 51 = comma semicolon cedilla
- control shift keycode 51 = ccedilla
- control shift keycode 51 = dead_cedilla
-keycode 52 = period colon periodcentered
- control shift keycode 52 = notsign
-keycode 53 = minus underscore hyphen
+keycode 51 = comma semicolon dead_cedilla
+keycode 52 = period colon periodcentered
+ altgr shift keycode 52 = notsign
+keycode 53 = minus underscore hyphen
control keycode 53 = Control_underscore
- control shift keycode 53 = macron
+ control shift keycode 53 = Control_underscore
control alt shift keycode 53 = Meta_Control_underscore
+ altgr shift keycode 53 = macron
keycode 54 = Shift
keycode 56 = Alt
keycode 57 = space
control keycode 57 = nul
+ altgr shift keycode 57 = nobreakspace
keycode 58 = Caps_Lock
keycode 86 = less greater bar
- control shift keycode 86 = brokenbar
alt altgr keycode 86 = Meta_bar
+ altgr shift keycode 86 = brokenbar
keycode 97 = Control
--- /dev/null
+# fi-latin9.map: Finnish keymap with ISO-8859-15 symbols
+# Marko Myllynen <myllynen@lut.fi> 2002-01-16
+# Based on fi-latin1.map by Johan Myréen
+
+charset "iso-8859-15"
+keymaps 0-6,8-10,12-14
+alt_is_meta
+include "qwerty-layout"
+ altgr keycode 18 = euro
+ altgr keycode 19 = registered
+ altgr keycode 20 = +thorn
+ altgr shift keycode 20 = +THORN
+ altgr keycode 25 = paragraph
+ altgr keycode 31 = +scaron
+ altgr shift keycode 31 = +Scaron
+ altgr control keycode 31 = ssharp
+ altgr keycode 32 = +eth
+ altgr shift keycode 32 = +ETH
+ altgr keycode 44 = +zcaron
+ altgr shift keycode 44 = +Zcaron
+ altgr keycode 45 = multiply
+ shift altgr keycode 45 = division
+ altgr keycode 46 = copyright
+ altgr shift keycode 46 = cent
+ altgr keycode 49 = +ntilde
+ altgr shift keycode 49 = +Ntilde
+ altgr keycode 50 = mu
+include "linux-with-alt-and-altgr"
+ plain keycode 83 = KP_Comma
+strings as usual
+
+keycode 1 = Escape
+keycode 2 = one exclam exclamdown
+ altgr shift keycode 2 = onesuperior
+keycode 3 = two quotedbl at
+ control keycode 3 = nul
+ control altgr keycode 3 = nul
+ altgr shift keycode 3 = twosuperior
+keycode 4 = three numbersign sterling
+ control keycode 4 = Escape
+ altgr shift keycode 4 = threesuperior
+keycode 5 = four VoidSymbol dollar
+ control keycode 5 = Control_backslash
+ altgr shift keycode 5 = cent
+keycode 6 = five percent euro
+ control keycode 6 = Control_bracketright
+ altgr shift keycode 6 = masculine
+keycode 7 = six ampersand yen
+ control keycode 7 = Control_asciicircum
+ altgr shift keycode 7 = ordfeminine
+keycode 8 = seven slash braceleft
+ control keycode 8 = Control_underscore
+ altgr shift keycode 8 = plusminus
+keycode 9 = eight parenleft bracketleft
+ control keycode 9 = Delete
+ control altgr keycode 9 = Escape
+ altgr shift keycode 9 = guillemotleft
+keycode 10 = nine parenright bracketright
+ control altgr keycode 10 = Control_bracketright
+ altgr shift keycode 10 = guillemotright
+keycode 11 = zero equal braceright
+ altgr shift keycode 11 = degree
+keycode 12 = plus question backslash
+ control keycode 12 = Control_underscore
+ control altgr keycode 12 = Control_backslash
+ altgr shift keycode 12 = questiondown
+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 +oe
+ control keycode 26 = Escape
+ alt keycode 26 = Meta_bracketleft
+ altgr shift keycode 26 = +OE
+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
+ altgr shift keycode 27 = dead_caron
+keycode 28 = Return
+ alt keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 39 = +odiaeresis +Odiaeresis +oslash
+ alt keycode 39 = Meta_semicolon
+ altgr shift keycode 39 = +Oslash
+keycode 40 = +adiaeresis +Adiaeresis +ae
+ alt keycode 40 = Meta_apostrophe
+ altgr shift keycode 40 = +AE
+keycode 41 = section
+ 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 dead_cedilla
+keycode 52 = period colon periodcentered
+ altgr shift keycode 52 = notsign
+keycode 53 = minus underscore hyphen
+ control keycode 53 = Control_underscore
+ control shift keycode 53 = Control_underscore
+ control alt shift keycode 53 = Meta_Control_underscore
+ altgr shift keycode 53 = macron
+keycode 54 = Shift
+keycode 56 = Alt
+keycode 57 = space
+ control keycode 57 = nul
+ altgr shift keycode 57 = nobreakspace
+keycode 58 = Caps_Lock
+keycode 86 = less greater bar
+ alt altgr keycode 86 = Meta_bar
+keycode 97 = Control
--- /dev/null
+# From Oded S. Resnik
+charset "iso-8859-8"
+keymaps 0-6,8,12
+include "linux-with-alt-and-altgr"
+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 nul 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 Delete
+ alt keycode 9 = Meta_eight
+keycode 10 = nine parenleft nine parenright
+ alt keycode 10 = Meta_nine
+keycode 11 = zero parenright zero parenleft
+ alt keycode 11 = Meta_zero
+keycode 12 = minus underscore minus underscore Control_underscore Control_underscore
+ alt keycode 12 = Meta_minus
+keycode 13 = equal plus equal plus
+ alt keycode 13 = Meta_equal
+keycode 14 = Delete Delete Delete Delete
+ alt keycode 14 = Meta_Delete
+keycode 15 = Tab Tab Tab Tab
+ alt keycode 15 = Meta_Tab
+keycode 16 = +q +Q slash slash Control_q Control_q Control_q Control_q
+keycode 17 = +w +W apostrophe apostrophe Control_w Control_w Control_w Control_w
+keycode 18 = +e +E qof qof Control_e Control_e Control_e Control_e
+keycode 19 = +r +R resh resh Control_r Control_r Control_r Control_r
+keycode 20 = +t +T alef alef Control_t Control_t Control_t Control_t
+keycode 21 = +y +Y tet tet Control_y Control_y Control_y Control_y
+keycode 22 = +u +U vav vav Control_u Control_u Control_u Control_u
+keycode 23 = +i +I finalnun finalnun Tab Tab Tab Tab
+keycode 24 = +o +O finalmem finalmem Control_o Control_o Control_o Control_o
+keycode 25 = +p +P pe pe Control_p Control_p Control_p Control_p
+keycode 26 = bracketleft braceleft bracketright braceright
+ control keycode 26 = Escape
+ alt keycode 26 = Meta_bracketleft
+keycode 27 = bracketright braceright bracketleft braceleft
+ 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 shin shin Control_a Control_a Control_a Control_a
+keycode 31 = +s +S dalet dalet Control_s Control_s Control_s Control_s
+keycode 32 = +d +D gimel gimel Control_d Control_d Control_d Control_d
+keycode 33 = +f +F kaf kaf Control_f Control_f Control_f Control_f
+keycode 34 = +g +G ayin ayin Control_g Control_g Control_g Control_g
+keycode 35 = +h +H yod yod BackSpace BackSpace BackSpace BackSpace
+keycode 36 = +j +J het yod Linefeed Linefeed Linefeed Linefeed
+keycode 37 = +k +K lamed finalkaf Control_k Control_k Control_k Control_k
+keycode 38 = +l +L finalkaf finalkaf Control_l Control_l Control_l Control_l
+keycode 39 = semicolon colon finalpe colon
+ alt keycode 39 = Meta_semicolon
+keycode 40 = apostrophe quotedbl comma quotedbl
+ control keycode 40 = Control_g
+ alt keycode 40 = Meta_apostrophe
+keycode 41 = grave asciitilde semicolon semicolon nul
+ alt keycode 41 = Meta_grave
+keycode 42 = Shift
+keycode 43 = backslash bar backslash
+ control keycode 43 = Control_backslash
+ alt keycode 43 = Meta_backslash
+keycode 44 = +z +Z zayin zayin Control_z Control_z Control_z Control_z
+keycode 45 = +x +X samekh samekh Control_x Control_x Control_x Control_x
+keycode 46 = +c +C bet bet Control_c Control_c Control_c Control_c
+keycode 47 = +v +V he he Control_v Control_v Control_v Control_v
+keycode 48 = +b +B nun nun Control_b Control_b Control_b Control_b
+keycode 49 = +n +N mem mem Control_n Control_n Control_n Control_n
+keycode 50 = +m +M tsadi tsadi Control_m Control_m Control_m Control_m
+keycode 51 = comma less tav greater
+ alt keycode 51 = Meta_comma
+keycode 52 = period greater finaltsadi less Compose
+ alt keycode 52 = Meta_period
+keycode 53 = slash question period question 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
+
keycode 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = Alt
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
KP_Divide Hex_B KP_Divide Hex_B \
KP_Divide KP_Divide KP_Divide KP_Divide
-keycode 99 = Control_backslash # 99=Print-Screen
+keycode 99 = VoidSymbol # 99=Print-Screen
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break # 101=Control-Pause
string F102 = "\033[7$"
KP_Divide Hex_B KP_Divide Hex_B \
KP_Divide KP_Divide KP_Divide KP_Divide
-keycode 99 = Control_backslash # 99=Print-Screen
+keycode 99 = VoidSymbol # 99=Print-Screen
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break # 101=Control-Pause
string F102 = "\033[7$"
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
+ alt keycode 99 = Control_backslash
+ control keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
+ alt keycode 99 = Control_backslash
+ control keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
-# NL Keyboard Mapping version 0.0.0.1
+# From eha@dasc.nl Wed Mar 31 13:55:06 1999
+# From: Eric Hameleers <eha@dasc.nl>
#
-# 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.
+# Dutch keymap for IBM ThinkPads (765L, 600, 770 and 380).
+#
+# Key mapping for dutch keyboard (on my IBM-ThinkPad but generally useable)
+# Contributed by Eric Hameleers (eric.hameleers@nl.ibm.com)
+#
+# Added the circumflex as AltGr func. of the key with the dead_circumflex
#
-# [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"
+ altgr keycode 19 = paragraph
+ altgr keycode 31 = ssharp
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ altgr keycode 50 = mu
+# extension
+ altgr keycode 24 = +oslash
+ altgr shift keycode 24 = +Oslash
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 keycode 8 = Control_underscore
-keycode 9 = eight parenleft bracketleft Delete
-keycode 10 = nine parenright bracketright
-keycode 11 = zero parenright braceright
-keycode 12 = slash question backslash
- control keycode 12 = Control_underscore
- shift control keycode 12 = Control_underscore
-keycode 13 = equal asciitilde
+keycode 2 = one exclam onesuperior
+keycode 3 = two quotedbl twosuperior
+keycode 4 = three numbersign threesuperior
+ control keycode 4 = Escape
+keycode 5 = four dollar onequarter
+ control keycode 5 = Control_backslash
+keycode 6 = five percent onehalf
+ control keycode 6 = Control_bracketright
+keycode 7 = six ampersand threequarters
+ control keycode 7 = Control_asciicircum
+keycode 8 = seven underscore pound
+ control keycode 8 = Control_underscore
+ control shift keycode 8 = Control_underscore
+keycode 9 = eight parenleft braceleft
+ control keycode 9 = Delete
+keycode 10 = nine parenright braceright
+keycode 11 = zero apostrophe
+keycode 12 = slash question backslash
+# some use dead_tilde instead of asciitilde
+keycode 13 = degree asciitilde dead_cedilla
keycode 14 = Delete
+ control keycode 14 = BackSpace
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 26 = dead_diaeresis dead_circumflex circumflex
+ control keycode 26 = Escape
+keycode 27 = asterisk bar
+keycode 28 = Return
+ alt keycode 28 = Meta_Control_m
+keycode 29 = Control
+keycode 39 = plus plusminus
+keycode 40 = dead_acute dead_grave
+ control keycode 40 = Control_g
+keycode 41 = at section notsign
+ control keycode 41 = nul
+ control shift keycode 41 = nul
+ control alt keycode 41 = Meta_nul
+keycode 42 = Shift
+keycode 43 = less greater
+keycode 51 = comma semicolon
+keycode 52 = period colon periodcentered
+ control keycode 52 = Compose
+keycode 53 = minus equal
+keycode 54 = Shift
+keycode 56 = Alt
keycode 57 = space
- control keycode 57 = nul
-keycode 58 = Caps_Lock
-keycode 86 = bracketright greater bar
-keycode 97 = Control
+ control keycode 57 = nul
+keycode 58 = Caps_Lock
+keycode 86 = bracketright bracketleft brokenbar
+keycode 97 = Control
+++ /dev/null
-# From eha@dasc.nl Wed Mar 31 13:55:06 1999
-# From: Eric Hameleers <eha@dasc.nl>
-#
-# Dutch keymap for IBM ThinkPads (765L, 600, 770 and 380).
-#
-# Key mapping for dutch keyboard (on my IBM-ThinkPad but generally useable)
-# Contributed by Eric Hameleers (eric.hameleers@nl.ibm.com)
-#
-# Added the circumflex as AltGr func. of the key with the dead_circumflex
-#
-charset "iso-8859-1"
-keymaps 0-2,4-6,8-9,12
-alt_is_meta
-include "qwerty-layout"
- altgr keycode 19 = paragraph
- altgr keycode 31 = ssharp
- altgr keycode 44 = guillemotleft
- altgr keycode 45 = guillemotright
- altgr keycode 46 = cent
- 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 quotedbl twosuperior
- control keycode 3 = nul
- shift control keycode 3 = nul
-keycode 4 = three numbersign threesuperior
- control keycode 4 = Escape
-keycode 5 = four dollar onequarter
- control keycode 5 = Control_backslash
-keycode 6 = five percent onehalf
- control keycode 6 = Control_bracketright
-keycode 7 = six ampersand threequarters
- control keycode 7 = Control_asciicircum
-keycode 8 = seven underscore pound
- control keycode 8 = Control_underscore
-keycode 9 = eight parenleft braceleft
- control keycode 9 = Delete
-keycode 10 = nine parenright braceright
-keycode 11 = zero apostrophe
-keycode 12 = slash question backslash
- control keycode 12 = Control_underscore
- shift control keycode 12 = Control_underscore
-keycode 13 = degree tilde dead_cedilla
-keycode 14 = Delete
- control keycode 14 = BackSpace
-keycode 15 = Tab
-keycode 26 = dead_diaeresis dead_circumflex circumflex
- control keycode 26 = Escape
-keycode 27 = asterisk bar
-keycode 28 = Return
- alt keycode 28 = Meta_Control_m
-keycode 29 = Control
-keycode 39 = plus plusminus
-keycode 40 = dead_acute dead_grave
- control keycode 40 = Control_g
-keycode 41 = at section notsign
-keycode 42 = Shift
-keycode 43 = less greater
-keycode 51 = comma semicolon
-keycode 52 = period colon periodcentered
- control keycode 52 = Compose
-keycode 53 = minus equal
-keycode 54 = Shift
-keycode 56 = Alt
-keycode 57 = space
- control keycode 57 = nul
-keycode 58 = Caps_Lock
-keycode 86 = bracketright bracketleft brokenbar
-keycode 97 = Control
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
--- /dev/null
+# Derived from pt-latin1.map by aeb@cwi.nl.
+#
+# With fixes for keycode 18 and 29 from jcm@netcabo.pt, 20010715.
+#
+charset "iso-8859-15"
+keymaps 0-2,4,6,8,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
+ 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 18 = e E euro cent
+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
+ shift keycode 29 = Compose
+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
+compose 'e' '=' to '¤'
+compose '-' 'e' to '¤'
+compose '-' 'E' to '¤'
+compose '=' 'E' to '¤'
+
keycode 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
altgr control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
altgr control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
altgr control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr_Lock
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
altgr control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
altgr control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 96 = KP_Enter
keycode 97 = AltGr_Lock
keycode 98 = KP_Divide
- keycode 99 = Control_backslash
+ keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
--- /dev/null
+# se-fi-ir209.map
+# Also used for ir197.
+# by <Regnor.Jernsletten@sami.uit.no>
+#
+# Depends on/Alters se-ir209.map:
+ keycode 39 = +odiaeresis +Odiaeresis +oslash +Ooblique
+ keycode 40 = +adiaeresis +Adiaeresis +ae +AE
+
+# End.
--- /dev/null
+# se-fi-lat6.map
+# Covers ISO 8859-10, 1993
+# Modifies se-lat6.map for use in Finland and Sweden
+# by <Regnor.Jernsletten@sami.uit.no>
+
+keycode 39 = +odiaeresis +Odiaeresis +oslash +Ooblique
+keycode 40 = +adiaeresis +Adiaeresis +ae +AE
--- /dev/null
+# This is se-ir209.map.
+# It also serves as a keymap for the character set ir197
+# se-fi-ir209.map alters this keymap for use in Finland and Sweden.
+#
+# by <Regnor.Jernsletten@sami.uit.no>
+#
+keymaps 0-4,6,8,12
+strings as usual
+
+ keycode 1 = Escape
+ alt keycode 1 = Meta_Escape
+
+ keycode 2 = one exclam copyright
+ alt keycode 2 = Meta_one
+
+ keycode 3 = two quotedbl at
+control keycode 3 = nul
+ alt keycode 3 = Meta_two
+
+ keycode 4 = three numbersign VoidSymbol degree
+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
+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 braceright
+ alt keycode 11 = Meta_zero
+
+ keycode 12 = plus question VoidSymbol VoidSymbol
+ 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 Delete
+control keycode 14 = Control_underscore # For Emacs' UNDO :-)
+ alt keycode 14 = Meta_Delete
+
+ keycode 15 = Tab Tab
+ alt keycode 15 = Meta_Tab
+
+ keycode 16 = +q +Q +agrave +Agrave
+ keycode 17 = +w
+
+ keycode 18 = +e +E +eacute +Eacute
+control keycode 18 = Control_e
+ alt keycode 18 = Meta_e
+
+ keycode 19 = +r +R +egrave +Egrave
+control keycode 19 = Control_r
+ alt keycode 19 = Meta_r
+
+ keycode 20 = +t +T +cedilla +mu
+control keycode 20 = Control_t
+ alt keycode 20 = Meta_t
+
+ keycode 21 = +y +Y ydiaeresis VoidSymbol
+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 +oacute +Oacute
+control keycode 23 = Tab
+ alt keycode 23 = Meta_i
+
+ keycode 24 = +o +O +ocircumflex +Ocircumflex
+control keycode 24 = Control_o
+ alt keycode 24 = Meta_o
+
+ keycode 25 = +p +P +ograve +Ograve
+control keycode 25 = Control_p
+ alt keycode 25 = Meta_p
+
+ keycode 26 = +aring +Aring +acircumflex +Acircumflex
+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 = 0x080d
+
+ keycode 29 = Control
+
+ keycode 30 = +a +A +aacute +Aacute
+control keycode 30 = Control_a
+ alt keycode 30 = Meta_a
+
+ keycode 31 = +s +S +threesuperior +twosuperior
+control keycode 31 = Control_s
+
+# d, small and capital letter d with stroke
+# Check!
+ keycode 32 = +d +D +0x0a4 +0xa3
+control keycode 32 = Control_d
+ alt keycode 32 = Meta_d
+
+ keycode 33 = +f +F +eth +ETH
+control keycode 33 = Control_f
+ alt keycode 33 = Meta_f
+
+# g, small and capital letter g with stroke
+ keycode 34 = +g +G +0xa6 +0xa5
+
+# Alternatives: ISO-IR-197 ISO-IR-209
+## Either:
+# ISO-IR-209: h, small and capital letter h with caron
+## Or:
+# ISO-IR-197: h, small and guillemot right and left
+##
+ keycode 35 = +h +H +0xab +0xbb
+ keycode 36 = +j
+# k, small and capital letter k with caron
+ keycode 37 = +k +K +0xae +0xac
+ keycode 38 = +l
+
+ keycode 39 = +oslash +Ooblique +odiaeresis +Odiaeresis
+control keycode 39 = Control_backslash
+ alt keycode 39 = Meta_backslash
+
+ keycode 40 = +ae +AE +adiaeresis +Adiaeresis
+control keycode 40 = Escape
+ alt keycode 40 = Meta_bracketleft
+
+# Chcck!
+ 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 +Z +masculine +onesuperior
+
+ keycode 45 = +x +X +ccedilla +Ccedilla
+control keycode 45 = Control_x
+ alt keycode 45 = Meta_x
+
+ keycode 46 = +c +C cent exclamdown
+control keycode 46 = Control_c
+ alt keycode 46 = Meta_c
+
+ keycode 47 = +v
+ keycode 48 = +b +B +ntilde +Ntilde
+
+# Check!
+# m, eng
+ keycode 49 = +n +N +0x0b1 +0xaf
+control keycode 49 = Control_n
+ alt keycode 49 = Meta_n
+
+ keycode 50 = +m
+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 55 = KP_Multiply
+ keycode 56 = Alt
+
+ keycode 57 = space space nobreakspace nobreakspace
+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_Comma
+control altgr keycode 83 = Boot
+control alt keycode 83 = Boot
+
+ keycode 84 = Last_Console
+ keycode 85 =
+
+# Alternatives: ISO-IR-197 ISO-IR-209
+
+## Either ISO-IR-197:
+# keycode 86 = less greater guillemotleft guillemotright
+## Or ISO-IR-209: less, greater, h caron, H caron
+ keycode 86 = less greater +0xab +0xbb
+ 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 96 = KP_Enter
+ keycode 97 = Control
+ keycode 98 = KP_Divide
+
+ keycode 99 = VoidSymbol
+control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
+
+ keycode 100 = AltGr
+ keycode 101 = Break
+ keycode 102 = Find
+
+ keycode 103 = Up
+control keycode 103 = Scroll_Backward
+
+ keycode 104 = Prior Scroll_Backward
+ keycode 105 = Left
+alt keycode 105 = Decr_Console
+ keycode 106 = Right
+alt keycode 106 = Incr_Console
+ keycode 107 = Select
+
+ keycode 108 = Down
+control keycode 108 = Scroll_Forward
+
+ keycode 109 = Next Scroll_Forward
+ keycode 110 = Insert
+
+ keycode 111 = Delete # "Remove" originally, weird...
+control alt keycode 111 = Boot
+control altgr keycode 111 = Boot
+
--- /dev/null
+# se-lat6.map
+# Covers ISO 8859-10, 1993
+# se-fi-lat6.map modifies this keymap for use in Finland and Sweden.
+# by <Regnor.Jernsletten@sami.uit.no>
+# Documented. Accents in <> are dead keys.
+# Order: key, Shift+key, AltGr-key, AltGr+Shift+key
+#
+keymaps 0-4,6,8,12
+strings as usual
+
+ keycode 1 = Escape
+ alt keycode 1 = Meta_Escape
+
+# 1 !
+ keycode 2 = one exclam one exclam
+ alt keycode 2 = Meta_one
+
+# 2 " @ "
+ keycode 3 = two quotedbl at quotedbl
+control keycode 3 = nul
+ alt keycode 3 = Meta_two
+
+# 3 #
+ keycode 4 = three numbersign three numbersign
+control keycode 4 = Escape
+ alt keycode 4 = Meta_three
+
+# 4 $ < >
+ keycode 5 = four dollar less greater
+control keycode 5 = Control_backslash
+ alt keycode 5 = Meta_four
+
+# 5 %
+ keycode 6 = five percent five five percent
+control keycode 6 = Control_bracketright
+ alt keycode 6 = Meta_five
+
+# 6 &
+ keycode 7 = six ampersand six ampersand
+control keycode 7 = Control_asciicircum
+ alt keycode 7 = Meta_six
+
+# 7 / { |
+ keycode 8 = seven slash braceleft 0x7c
+control keycode 8 = Control_underscore
+ alt keycode 8 = Meta_seven
+
+# 8 ( [ {
+ keycode 9 = eight parenleft bracketleft braceleft
+control keycode 9 = Delete
+ alt keycode 9 = Meta_eight
+
+# 9 ) ] }
+ keycode 10 = nine parenright bracketright braceright
+ alt keycode 10 = Meta_nine
+
+# 0 = } =
+ keycode 11 = zero equal braceright equal
+ alt keycode 11 = Meta_zero
+
+# + ? + ?
+ keycode 12 = plus question plus question
+ 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 Delete
+control keycode 14 = Control_underscore # For Emacs' UNDO :-)
+ alt keycode 14 = Meta_Delete
+
+ keycode 15 = Tab Tab
+ alt keycode 15 = Meta_Tab
+
+# q Q ä Ä
+ keycode 16 = +q +Q +adiaeresis +Adiaeresis
+ keycode 17 = +w
+
+# e E é É
+ keycode 18 = +e +E +eacute +Eacute
+control keycode 18 = Control_e
+ alt keycode 18 = Meta_e
+
+# r R
+ keycode 19 = +r +R
+control keycode 19 = Control_r
+ alt keycode 19 = Meta_r
+
+# t stroke on AltGr!
+# t T » «
+ keycode 20 = +t +T +0xbb +0xab
+control keycode 20 = Control_t
+ alt keycode 20 = Meta_t
+
+
+# y Y ý Ý
+ keycode 21 = +y +Y +yacute +Yacute
+control keycode 21 = Control_y
+ alt keycode 21 = Meta_y
+
+# u U ü Ü
+ keycode 22 = +u +U +udiaeresis +Udiaeresis
+control keycode 22 = Control_u
+ alt keycode 22 = Meta_u
+
+# i I ï Ï
+ keycode 23 = +i +I +idiaeresis +Idiaeresis
+control keycode 23 = Tab
+ alt keycode 23 = Meta_i
+
+# o O ö Ö
+ keycode 24 = +o +O +odiaeresis +Odiaeresis
+control keycode 24 = Control_o
+ alt keycode 24 = Meta_o
+
+# p P þ þ
+ keycode 25 = +p +P 0xfe 0xde
+control keycode 25 = Control_p
+ alt keycode 25 = Meta_p
+
+# å Å â Â
+ keycode 26 = +aring +Aring +acircumflex +Acircumflex
+control keycode 26 = Control_bracketright
+ alt keycode 26 = Meta_bracketright
+
+# <"> <~> ~ ^
+ keycode 27 = dead_diaeresis dead_tilde asciitilde asciicircum
+control keycode 27 = Control_asciicircum
+ alt keycode 27 = Meta_asciicircum
+
+ keycode 28 = Return
+ alt keycode 28 = 0x080d
+
+ keycode 29 = Control
+
+# a A á Á
+ keycode 30 = +a +A +aacute +Aacute
+control keycode 30 = Control_a
+ alt keycode 30 = Meta_a
+
+# s S º ª
+ keycode 31 = +s +S +0xba +0xaa
+control keycode 31 = Control_s
+
+# d D ð Ð
+ keycode 32 = +d +D +eth +ETH
+control keycode 32 = Control_d
+ alt keycode 32 = Meta_d
+
+# f F f F
+ keycode 33 = +f
+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 +odiaeresis +Odiaeresis
+control keycode 39 = Control_backslash
+ alt keycode 39 = Meta_backslash
+
+# æ Æ ä Ä
+ keycode 40 = +ae +AE +adiaeresis +Adiaeresis
+control keycode 40 = Escape
+ alt keycode 40 = Meta_bracketleft
+
+# | § | §
+ keycode 41 = bar 0xa7 bar 0xa7
+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
+
+# z Z ¼ ¬
+ keycode 44 = +z +Z +0xbc +0xac
+
+# x X
+ keycode 45 = +x
+control keycode 45 = Control_x
+ alt keycode 45 = Meta_x
+
+# c C è È
+ keycode 46 = +c +C +0xe8 +0xc8
+control keycode 46 = Control_c
+ alt keycode 46 = Meta_c
+
+ keycode 47 = +v
+ keycode 48 = +b
+
+# n N ¿ ¯
+ keycode 49 = +n +N +0xbf +0xaf
+control keycode 49 = Control_n
+ alt keycode 49 = Meta_n
+
+ keycode 50 = +m
+control keycode 50 = Control_m
+ alt keycode 50 = Meta_m
+
+# , ;
+ keycode 51 = comma semicolon comma semicolon
+ alt keycode 51 = Meta_comma
+
+# . :
+ keycode 52 = period colon period colon
+ alt keycode 52 = Meta_period
+
+# - _
+ keycode 53 = minus underscore hyphen
+control keycode 53 = Control_underscore
+ alt keycode 53 = Meta_minus
+
+ keycode 54 = Shift
+ keycode 55 = KP_Multiply
+ keycode 56 = Alt
+
+ keycode 57 = space space nobreakspace nobreakspace
+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_Comma
+control altgr keycode 83 = Boot
+control alt keycode 83 = Boot
+
+ keycode 84 = Last_Console
+ keycode 85 =
+
+ keycode 86 = less greater guillemotleft guillemotright
+ 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 = Control
+ keycode 98 = KP_Divide
+
+ keycode 99 = VoidSymbol
+control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
+
+ keycode 100 = AltGr
+ keycode 101 = Break
+ keycode 102 = Find
+
+ keycode 103 = Up
+control keycode 103 = Scroll_Backward
+
+ keycode 104 = Prior Scroll_Backward
+ keycode 105 = Left
+alt keycode 105 = Decr_Console
+ keycode 106 = Right
+alt keycode 106 = Incr_Console
+ keycode 107 = Select
+
+ keycode 108 = Down
+control keycode 108 = Scroll_Forward
+
+ keycode 109 = Next Scroll_Forward
+ keycode 110 = Insert
+
+ keycode 111 = Delete # "Remove" originally, weird...
+control alt keycode 111 = Boot
+control altgr keycode 111 = Boot
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 99 = VoidSymbol
+ 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
+ shift keycode 104 = Scroll_Backward
keycode 105 = Left
alt keycode 105 = Decr_Console
alt altgr keycode 105 = Decr_Console
keycode 107 = Select
keycode 108 = Down
keycode 109 = Next
-shift keycode 109 = Scroll_Forward
+ shift keycode 109 = Scroll_Forward
keycode 110 = Insert
keycode 111 = Remove
-control alt keycode 111 = Boot
+ control alt keycode 111 = Boot
keycode 112 = Macro
keycode 113 = F13
keycode 114 = F14
keycode 86 = less greater bar
alt keycode 86 = Meta_less
keycode 97 = Control
-keycode 99 = Control_backslash
-control keycode 99 = Control_backslash
-alt keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
alt altgr keycode 105 = Decr_Console
alt altgr keycode 106 = Incr_Console
--- /dev/null
+! Serbian Cyrillic keyboard.map. You have to use some of ISO-8859-05 console
+! fonts (type 'setfont iso05.f16'...). I used ru.map to make this one. Read
+! the comment for the Russian Cyrillic keyboard.map. Serbian Latin
+! keyboard.map is named sr.map (I think it should be named sr-la.map.).
+!
+! In Serbian: Ovo je zahvalna tastatura, a moracu da napravim slicnu za
+! ISO-8859-2 (nasu latinicu). Pomocu desnog kontrol tastera menjate ASCII,
+! odnosno ISO-8859-5 cirilicu. Naravno, morate koristiti odgovarajuci font
+! (kao sto sam naveo gore na engleskom -- kucajte: 'setfont iso05.f16' za
+! dobijanje fonta). Uostalom, sveo sto pocinje sa 'iso05' odgovara. Vodite
+! racuna o sledecem: (1) Ne moze se koristiti nasa cirilica i nasa latinica
+! zajedno. Zato moze engleski alfabet i nasa cirilica, kao i sve ostale
+! slovenske cirilice. (2) Ima malih izmena u odnosu na Mikrosoftovu
+! cirilicnu tastaturu na koju ste navikli: a) taster za 'zh/zx' i taster za
+! minus i donju crtu su zamenjeni; na ANSI tastaturama to znaci da na mestu
+! gde su znakovi '/' i '?' se nalazi 'zh/zx', a na mestu gde je '\' i '|'
+! stoji '-' i '_'; b) po preporuci Mitra Pesikana i Miljka Kovacevica (vidi
+! knjigu Mitra Pesikana Nasa azbuka i njene norme) taster za 'dj/dy' se
+! nalazi na mestu gde se obicno nalazi makedonsko 'dz', odnosno na ANSI
+! tastaturi pise 'z'; to mi je omogucilo da taster koji obicno sluzi za
+! 'dj/dy' iskoristim za otvorenu i zatvorenu srednju zagradu. Nisam
+! iskoristio dodatni taster koji ide uz nase tastature, ali ima vremena...
+! Ako bas ne znate engleski, da navedem jos da funkciju 'siftovanja', tj.
+! trenutnog prebacivanja (znaci, ono sto radi taster 'shift' kad su u
+! pitanju mala i velika slova) sa jednog pisma na drugo radi AltGr taster,
+! tj. desni Alt taster. Napomena: Moguce je da ova tastatura ima nekih
+! gresaka, posto sam je 'na slepo' pravio.
+!
+! 27. 1. 2000.
+!
+! Milos Rancic (millosh@isgf.grf.bg.ac.yu).
+!
+! > 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 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 ampersand
+ control keycode 7 = Control_asciicircum
+ alt keycode 7 = Meta_six
+ keycode 8 = seven ampersand seven slash
+ control keycode 8 = Control_underscore
+ alt keycode 8 = Meta_seven
+ keycode 9 = eight asterisk eight parenleft
+ control keycode 9 = Delete
+ alt keycode 9 = Meta_eight
+ keycode 10 = nine parenleft nine parenright
+ alt keycode 10 = Meta_nine
+ keycode 11 = zero parenright zero equal
+ alt keycode 11 = Meta_zero
+ keycode 12 = minus underscore apostrophe question
+ control keycode 12 = Control_underscore
+ alt keycode 12 = Meta_minus
+ keycode 13 = equal plus plus asterisk
+ 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 +249 +169
+ control keycode 16 = Control_q
+altgr control keycode 16 = Control_q
+ keycode 17 = +w +W +250 +170
+ control keycode 17 = Control_w
+altgr control keycode 17 = Control_w
+ keycode 18 = +e +E +213 +181
+ control keycode 18 = Control_e
+altgr control keycode 18 = Control_e
+ keycode 19 = +r +R +224 +192
+ control keycode 19 = Control_r
+altgr control keycode 19 = Control_r
+ keycode 20 = +t +T +226 +194
+ control keycode 20 = Control_t
+altgr control keycode 20 = Control_t
+ keycode 21 = +y +Y +215 +183
+ 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 +216 +184
+ control keycode 23 = Tab
+altgr control keycode 23 = Tab
+ keycode 24 = +o +O +222 +190
+ control keycode 24 = Control_o
+altgr control keycode 24 = Control_o
+ keycode 25 = +p +P +223 +191
+ control keycode 25 = Control_p
+altgr control keycode 25 = Control_p
+ keycode 26 = bracketleft braceleft +232 +200
+ 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 +208 +176
+ control keycode 30 = Control_a
+altgr control keycode 30 = Control_a
+ keycode 31 = +s +S +225 +193
+ control keycode 31 = Control_s
+altgr control keycode 31 = Control_s
+ keycode 32 = +d +D +212 +180
+ control keycode 32 = Control_d
+altgr control keycode 32 = Control_d
+ keycode 33 = +f +F +228 +196
+ control keycode 33 = Control_f
+altgr control keycode 33 = Control_f
+ keycode 34 = +g +G +211 +179
+ control keycode 34 = Control_g
+altgr control keycode 34 = Control_g
+ keycode 35 = +h +H +229 +197
+ control keycode 35 = BackSpace
+altgr control keycode 35 = BackSpace
+ keycode 36 = +j +J +248 +168
+ control keycode 36 = Linefeed
+altgr control keycode 36 = Linefeed
+ keycode 37 = +k +K +218 +186
+ control keycode 37 = Control_k
+altgr control keycode 37 = Control_k
+ keycode 38 = +l +L +219 +187
+ control keycode 38 = Control_l
+altgr control keycode 38 = Control_l
+ keycode 39 = semicolon colon +231 +199
+ alt keycode 39 = Meta_semicolon
+ keycode 40 = apostrophe quotedbl +251 +171
+ control keycode 40 = Control_g
+altgr control keycode 40 = Control_g
+ alt keycode 40 = Meta_apostrophe
+ keycode 41 = grave asciitilde grave asciitilde
+ control keycode 41 = nul
+ alt keycode 41 = Meta_grave
+ keycode 42 = Shift
+ keycode 43 = backslash bar minus underscore
+ control keycode 43 = Control_backslash
+ alt keycode 43 = Meta_backslash
+ keycode 44 = +z +Z +242 +162
+ control keycode 44 = Control_z
+altgr control keycode 44 = Control_z
+ keycode 45 = +x +X +255 +175
+ control keycode 45 = Control_x
+altgr control keycode 45 = Control_x
+ keycode 46 = +c +C +230 +198
+ control keycode 46 = Control_c
+altgr control keycode 46 = Control_c
+ keycode 47 = +v +V +210 +178
+ control keycode 47 = Control_v
+altgr control keycode 47 = Control_v
+ keycode 48 = +b +B +209 +177
+ control keycode 48 = Control_b
+altgr control keycode 48 = Control_b
+ keycode 49 = +n +N +221 +189
+ control keycode 49 = Control_n
+altgr control keycode 49 = Control_n
+ keycode 50 = +m +M +220 +188
+ control keycode 50 = Control_m
+altgr control keycode 50 = Control_m
+ keycode 51 = comma less comma semicolon
+ alt keycode 51 = Meta_comma
+ keycode 52 = period greater period colon
+ alt keycode 52 = Meta_period
+ keycode 53 = slash question +214 +182
+ 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 = VoidSymbol
+ 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 =
ctrll keycode 97 = CtrlL_Lock
ctrll ctrlr keycode 97 = CtrlL_Lock
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = Alt
ctrll keycode 97 = CtrlL_Lock
ctrll ctrlr keycode 97 = CtrlL_Lock
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = CtrlR_Lock
keycode 96 = AltGr
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = Alt
ctrll keycode 97 = CtrlL_Lock
ctrll ctrlr keycode 97 = CtrlL_Lock
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = CtrlR_Lock
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
control keycode 57 = nul
alt keycode 57 = Meta_space
keycode 58 = Caps_Lock
+# Otto Wyss reports that his USB keyboard has keycode 84 where
+# a serial keyboard has keycode 43:
+#
+# keycode 84 = dollar sterling
+# control keycode 84 = Control_backslash
+# alt keycode 84 = Meta_backslash
keycode 97 = Control
control keycode 57 = nul
alt keycode 57 = Meta_space
keycode 58 = Caps_Lock
+# Otto Wyss reports that his USB keyboard has keycode 84 where
+# a serial keyboard has keycode 43:
+#
+# keycode 84 = dollar sterling braceright
+# control keycode 84 = Control_backslash
+# alt keycode 84 = Meta_backslash
keycode 86 = less greater backslash
alt keycode 86 = Meta_less
keycode 97 = Control
control keycode 57 = nul
alt keycode 57 = Meta_space
keycode 58 = Caps_Lock
+# Otto Wyss reports that his USB keyboard has keycode 84 where
+# a serial keyboard has keycode 43:
+#
+# keycode 84 = dollar
+# altgr keycode 84 = braceright
+# control keycode 84 = Control_backslash
+# alt keycode 84 = Meta_backslash
keycode 86 = less greater backslash
alt keycode 86 = Meta_less
keycode 97 = Control
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 99 = VoidSymbol
+ control keycode 99 = Control_backslash
+ alt keycode 99 = Control_backslash
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
keycode 96 = KP_Enter
keycode 97 = Control
keycode 98 = KP_Divide
-keycode 99 = Control_backslash
+keycode 99 = VoidSymbol
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 100 = AltGr
(On MCA bit 4 (r): 1: watchdog timeout occurred.)
<p>
<h3>Using 0x92 may be necessary</h3>
-Sometimes (especially on embedded systems) no keyboard controller
-is present, and it may be necessary to use 0x92.
+Sometimes (especially on embedded systems, maybe also on some
+"legacy-free" systems) no keyboard controller is present,
+and it may be necessary to use 0x92.
Often however, the chip will catch accesses to ports 0x64 and 0x60
and simulate the expected behaviour, also when no keyboard controller
is present. Sometimes, this snooping behaviour must be enabled first.
<h3>Using 0x92 may be dangerous</h3>
Gianluca Anzolin <g.anzolin@inwind.it> reports:
-I have a TRIDENT 9660 video card integrated on the mainboard.
-Linux boots well, but after LILO has loaded the kernel, the screen
-becomes black and remains black ever after. Removing
+I have an Olivetti M4 (P166) with TRIDENT 9660 video card integrated
+on the mainboard. Linux boots well, but after LILO has loaded the kernel,
+the screen becomes black and remains black ever after. Removing
<pre>
inb $0x92, %al #
orb $02, %al # "fast A20" version
</pre>
from <tt>setup.S</tt> solved this. Apparently on his machine
writing to some of these bits is dangerous and does something
-to the on-board video card (disable it?).
+to the on-board video card (disable it? lspci shows it only when
+0x92 is not touched).
+Similar things are reported by others:
+<blockquote>
+<i>I am trying to install Linux on an old Olivetti pc M4 Modulo P75 but
+I am quickly stopped. I always got the same display problem very soon
+during the installation.The display is not updated anymore.
+The embedded display adapter is a "Trident 9xxx PCI".</i>
+</blockquote>
+and
+<blockquote>
+<i>I have a strange problem with an old Olivetti M4 (pentium 75)
+machine. I buy for a very cheap price 5 of these, but when I
+boot the machine the screen goes blank. The (embedded on MoBo)
+video chip is a Trident TGUI9780.</i>
+</blockquote>
<p>
Petr Vandrovec <vandrove@vc.cvut.cz> suggests to do the write
only when it is really necessary:
</pre>
before the <tt>outb</tt>.
+<h3>Using only 0x92 may be dangerous</h3>
+Kai Germaschewski reports that he gets a spontaneous kernel reboot
+(on a Sony PCG-Z600NE) after suspend/resume when A20 was enabled
+using 0x92 but not via the keyboard controller. Apparently state
+set via keyboard controller is correctly saved and restored, but
+state set via 0x92 is not.
+
+<h3>Port 0x92 may have to be enabled</h3>
+Various SMSC super I/O chips will emulate the keyboard controller,
+but emulate port 0x92 only when that has been enabled.
+
+<h3>CMOS indicating the presence of a Fast A20 Gate</h3>
+Depending on the BIOS, the possibility of using a fast A20 switch
+may be visible in the CMOS. For example, some AMI BIOSes have
+in CMOS location 0x2d a byte with contents
+<pre>
+ System Operational Flags
+ Bit 7 = 1: Weitek math coprocessor present
+ Bit 6 = 1: Floppy drive seek at boot disabled
+ Bit 5 = 1: System boot sequence A:,C: (otherwise C:,A:)
+ Bit 4 = 1: System boot CPU speed high
+ Bit 3 = 1: External cache enabled
+ Bit 2 = 1: Internal cache enabled
+ Bit 1 = 1: Fast gate A20 operation enabled
+ Bit 0 = 1: Turbo switch function enabled
+</pre>
+Of course, this does not help at all.
+
<h3>FreeBSD</h3>
FreeBSD does
<pre>
void
gateA20(void)
{
+#ifdef PC98
+ outb(0xf2, 0x00);
+ outb(0xf6, 0x02);
+#else
#ifdef IBM_L40
outb(0x92, 0x2);
#else IBM_L40
outb(K_RDWR, KB_A20);
while (inb(K_STATUS) & K_IBUF_FUL);
#endif IBM_L40
+#endif
}
</pre>
that is, uses 0x92 only for a IBM_L40 (whatever that may be).
+The FreeBSD handbook describes PC98 as
+"an alternative development branch of PC hardware, popular in Japan"
+and "the NEC PC98 platform".
<p>
<h3>Minix and HIMEM.ASM</h3>
<p>
The AMD Elan SC400 docs
(<a href="http://www.amd.com/products/epd/processors/4.32bitcont/13.lan4xxfam/22.lansc400/a21032/21032.pdf">21032.pdf</a>) say:
-<i>
-Register EEh can be used to cause the same type of masking of the CPU
+<blockquote>
+<i>Register EEh can be used to cause the same type of masking of the CPU
A20 signal that was historically performed by an external SCP (System
Control Processor) in a PC/AT Compatible system, but much faster. This
control defaults to not forcing the propagation of A20:
the output of the OR gate driving the Enhanced Am486 microprocessor
A20M pin. Therefore, A20 will propagate if ANY of the independent sources
are forcing A20 to propagate.</i>
-<p>
+</blockquote>
<h2>Other ports</h2>
It is rumoured that systems exist that use bit 2 of ioport 0x65
<p>
<a href="http://qdn.qnx.com/support/docs/neutrino_qrp/building/startup.html">
Neutrino</a> describes the following function <tt>x86_enable_a20()</tt>:
-<i>
-Enable address line A20, which is often disabled on many PCs on reset.
+<blockquote>
+<i>Enable address line A20, which is often disabled on many PCs on reset.
It first checks if address line A20 is enabled and if so returns 0.
Otherwise, it sets bit 0x02 in port 0x92, which is used by many systems
as a fast A20 enable. It again checks to see if A20 is enabled and if so
if A20 is enabled.
In the rare case where setting bit 0x02 in port 0x92 may affect
other hardware, you can skip this by setting <tt>only_keyboard</tt> to 1.
-In this case, it will attempt to use only the keyboard microcontroller.
-</i>
-<p>
-hpa comments: <i>As far as I know the only machines which have the cache
+In this case, it will attempt to use only the keyboard microcontroller.</i>
+</blockquote>
+hpa comments:
+<blockquote>
+<i>As far as I know the only machines which have the cache
problem are i386 boxen, but the i386 doesn't have WBINVD. The i486
has a pin on the CPU for A20, which takes effect inside the L1 cache,
and so it shouldn't have any A20 cache issues.</i>
+</blockquote>
+<p>
+Jens Maurer
+<a href="http://www.cck.uni-kl.de/misc/tecra710/linux-problem">reported</a>
+in 1996 on boot problems with a bzImage kernel:
+<blockquote>
+<i>On the Toshiba laptop, the first two bytes at 0x100000 are incorrect and
+identical to those from address 0x000000 (which was an alias for
+0x100000 before the A20 gate enable). At a second read from 0x100000
+immediately afterwards, the correct memory content is returned.
+Asus P55TP5XE boards (Triton I chipset) show quite the same
+problem, but there, only the first byte is incorrect and booting
+bzImage kernels works fine.
+To me, this looks like some buffer or cache coherency problem
+although I think that caches are organized in at least 16 byte cache lines.
+...
+This exact same problem reportedly also exists on Fujitsu 555T
+(report from Andrea Caltroni) laptop and Compudyne Pentium 60
+(report from David Kerr) desktop computers.</i>
+</blockquote>
+He gives a patch, and adds
+"<i>Unfortunately, Philip Hands reports that the above patch makes some people
+with other non-laptop computers unable to boot.</i>"
+<p>
+Using zImage instead of bzImage avoids the problem (since zImage
+is not loaded high).
+Debian has distributed special Tecra boot floppies for a while.
+Later it was found out that these laptops just have an incredibly
+slow keyboard controller and that all is fine with a larger timeout.
+
+<h2>BIOS</h2>
+If it is difficult, maybe impossible, to write a routine that
+will enable A20 on all PCs, one might ask the BIOS to do so.
+Many recent BIOS versions implement INT15 AX=240x functions,
+as follows:
+<pre>
+INT 15 AX=2400 disable A20
+INT 15 AX=2401 enable A20
+INT 15 AX=2402 query status A20
+INT 15 AX=2403 query A20 support (kbd or port 92)
+
+Return:
+ If successful: CF clear, AH = 00h
+ On error: CF set, AH = status
+ Status: 01h keyboard controller is in secure mode
+ 86h function not supported
+ For AX=2402 the status (0: disabled, 1: enabled) is returned in AL
+ For AX=2403 the status (bit 0: kbd, bit 1: port 92) is returned in BX
+</pre>
</body>
</html>
- 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
+ but not read out from the kernel; thus, showconsolefont changes the
status, but cannot restore it
console!programs related to
-->
<P>The following packages contain keyboard or console related programs.
-<P><CODE>kbd-1.04.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>kbdrate</CODE>, <CODE>loadunimap</CODE>, <CODE>chvt</CODE>, <CODE>resizecons</CODE>,
-<CODE>deallocvt</CODE>, <CODE>getkeycodes</CODE>, <CODE>setkeycodes</CODE>.
+<P><CODE>kbd-1.06.tar.gz</CODE> contains <CODE>loadkeys</CODE>, <CODE>dumpkeys</CODE>, <CODE>showkey</CODE>,
+<CODE>setmetamode</CODE>, <CODE>setleds</CODE>, <CODE>setfont</CODE>, <CODE>showconsolefont</CODE>,
+<CODE>mapscrn</CODE>, <CODE>kbd_mode</CODE>, <CODE>kbdrate</CODE>, <CODE>loadunimap</CODE>, <CODE>chvt</CODE>,
+<CODE>resizecons</CODE>, <CODE>deallocvt</CODE>, <CODE>getkeycodes</CODE>, <CODE>setkeycodes</CODE>.
It also contains <CODE>openvt</CODE>, formerly called <CODE>open</CODE>.
<P>There exists a clone of the kbd package, namely <CODE>console-tools</CODE>,
that contains more or less the same stuff. The latest version,
<CODE>console-tools-0.3.3</CODE> is roughly up-to-date with <CODE>kbd-0.99</CODE>.
<P><CODE>SVGATextMode-1.10</CODE> contains <CODE>SVGATextMode</CODE>, a program that
obsoletes <CODE>resizecons</CODE>.
-<P><CODE>util-linux-2.10</CODE> contains <CODE>setterm</CODE>, <CODE>kbdrate</CODE>.
+<P><CODE>util-linux-2.11</CODE> contains <CODE>setterm</CODE>.
<P><CODE>sh-utils-1.12</CODE> contains <CODE>stty</CODE>.
<P>See also <CODE>dynamic-vc-1.2.tar.gz</CODE> and <CODE>consd-1.3.tgz</CODE> for
programs that exploit the `Keyboard Signal' key. Very primitive
Their contents can be examined using the program <CODE>infocmp</CODE>,
see infocmp(1).
<P>The Linux console sequences are documented in console_codes(4).
-<P>
-<P>
+<P>The package <CODE>funkey</CODE> by Rick van Rein provides support
+for all these new keys modern keyboards have. See
+<A HREF="http://rick.vanrein.org/linux/funkey">rick.vanrein.org/linux/funkey</A>.
<P>
<HR>
<A HREF="kbd.FAQ-2.html">Next</A>
and let the Menu key create a fresh virtual console (in case you have
something like <CODE>spawn_console</CODE> running).
<P>
+<H2><A NAME="ss14.1">14.1 Funkeys</A>
+</H2>
+
+<P>Many modern keyboards have buttons or keys with labels like
+"Vol Up", "Eject" etc. that suggest actions rather than strings.
+Of course one can bind shell commands to them, but then they'll
+work only when you are at a shell prompt.
+Rick van Rein wrote a package funkey consisting of a kernel patch
+and a daemon. The kernel patch creates a new character device,
+and adds a new key type to indicate which keystrokes should be
+sent to this new character device. A daemon can now listen to
+the character device, somewhat like <CODE>gpm</CODE> listens to the
+mouse device, and perform the actions indicated in its config file.
+See
+<A HREF="http://rick.vanrein.org/linux/funkey">rick.vanrein.org/linux/funkey</A>.
+<P>
<HR>
<A HREF="kbd.FAQ-15.html">Next</A>
<A HREF="kbd.FAQ-13.html">Previous</A>
into <CODE>~/.inputrc</CODE>.
<P>
-<H3>`Getty used to do the right thing with DEL and BS but is broken now?'</H3>
+<H2><A NAME="ss5.1.1">5.1.1 `Getty used to do the right thing with DEL and BS but is broken now?'</A>
+</H2>
<P>
<!--
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>
+<H2><A NAME="ss5.1.2">5.1.2 `Login behaves differently at the first and second login attempts?'</A>
+</H2>
<P>
<!--
keymaps) and this may not yet be available in single user boot before
<CODE>/usr</CODE> has been mounted.
<P>
-<H3>`How do I get a dvorak keyboard?'</H3>
+<H2><A NAME="ss5.2.1">5.2.1 `How do I get a dvorak keyboard?'</A>
+</H2>
<P>
<!--
in <CODE>XF86Config</CODE>.
<P>
-<H3>`Why doesn't the Backspace key generate BackSpace by default?'</H3>
+<H2><A NAME="ss5.2.2">5.2.2 `Why doesn't the Backspace key generate BackSpace by default?'</A>
+</H2>
<P>
<!--
in <CODE>.xinitrc</CODE>, and you are settled.
<P>For a much more extensive discussion of these things, and
alternative solutions, see
-<A HREF="http://www.ibbnet.nl/~anne/keyboard.html">Anne Baretta's page</A>.
+<A HREF="http://www.ibb.net/~anne/keyboard.html">Anne Baretta's page</A>.
<P>
<HR>
<A HREF="kbd.FAQ-6.html">Next</A>
will disable it (if the kernel was compiled with CONFIG_MAGIC_SYSRQ).
<P>
+<H2><A NAME="ss8.7">8.7 Problems</A>
+</H2>
+
+<P>A good keyboard accurately reports multiple key presses.
+Especially for people using a keyboard as Braille input device,
+where they have to be able to press up to six keys simultaneously,
+this is important. Many modern keyboards fail here due to sloppy
+design and testing - they misreport or fail in other ways when
+four or more keys are pressed simultaneously, sometimes already
+when two non-modifier keys are pressed simultaneously.
+This affects Linux users a bit: the SysRq key is not a modifier key,
+and people report problems using Alt-SysRq-<I>X</I> for various
+letters or digits <I>X</I>.
+<P>Long ago a similar problem (`ghosting') was caused by the design
+of the scan matrix: when three keys were pressed a fourth was
+also seen. That problem was solved by the use of diodes.
+Today it is the interface logic that is deficient.
+<P>
<HR>
<A HREF="kbd.FAQ-9.html">Next</A>
<A HREF="kbd.FAQ-7.html">Previous</A>
<HR>
<H1>The Linux keyboard and console HOWTO</H1>
-<H2>Andries Brouwer, <CODE>aeb@cwi.nl</CODE></H2>v2.11, 2001-02-02
+<H2>Andries Brouwer, <CODE>aeb@cwi.nl</CODE></H2>v2.13, 2002-10-12
<P><HR>
<EM>This note contains some information about the Linux keyboard
and console, and the use of non-ASCII characters.
<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>
+<UL>
+<LI><A HREF="kbd.FAQ-5.html#ss5.1.1">5.1.1 `Getty used to do the right thing with DEL and BS but is broken now?'</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.1.2">5.1.2 `Login behaves differently at the first and second login attempts?'</A>
+</UL>
+<P>
<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>
+<UL>
+<LI><A HREF="kbd.FAQ-5.html#ss5.2.1">5.2.1 `How do I get a dvorak keyboard?'</A>
+<LI><A HREF="kbd.FAQ-5.html#ss5.2.2">5.2.2 `Why doesn't the Backspace key generate BackSpace by default?'</A>
+</UL>
+<P>
<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-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>
+<LI><A HREF="kbd.FAQ-8.html#ss8.7">8.7 Problems</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="toc14">14.</A> <A HREF="kbd.FAQ-14.html">Unusual keys and keyboards</A></H2>
+<UL>
+<LI><A HREF="kbd.FAQ-14.html#ss14.1">14.1 Funkeys</A>
+</UL>
<P>
<H2><A NAME="toc15">15.</A> <A HREF="kbd.FAQ-15.html">Examples of use of loadkeys and xmodmap</A></H2>
<title>The Linux keyboard and console HOWTO
<author>Andries Brouwer, <tt/aeb@cwi.nl/
-<date>v2.11, 2001-02-02
+<date>v2.13, 2002-10-12
<abstract>This note contains some information about the Linux keyboard
and console, and the use of non-ASCII characters.
The following packages contain keyboard or console related programs.
<p>
-<tt/kbd-1.04.tar.gz/ contains <tt/loadkeys/, <tt/dumpkeys/, <tt/showkey/,
-<tt/setmetamode/, <tt/setleds/, <tt/setfont/, <tt/showfont/, <tt/mapscrn/,
-<tt/kbd_mode/, <tt/kbdrate/, <tt/loadunimap/, <tt/chvt/, <tt/resizecons/,
-<tt/deallocvt/, <tt/getkeycodes/, <tt/setkeycodes/.
+<tt/kbd-1.06.tar.gz/ contains <tt/loadkeys/, <tt/dumpkeys/, <tt/showkey/,
+<tt/setmetamode/, <tt/setleds/, <tt/setfont/, <tt/showconsolefont/,
+<tt/mapscrn/, <tt/kbd_mode/, <tt/kbdrate/, <tt/loadunimap/, <tt/chvt/,
+<tt/resizecons/, <tt/deallocvt/, <tt/getkeycodes/, <tt/setkeycodes/.
It also contains <tt/openvt/, formerly called <tt/open/.
<p>
There exists a clone of the kbd package, namely <tt/console-tools/,
<tt/SVGATextMode-1.10/ contains <tt/SVGATextMode/, a program that
obsoletes <tt/resizecons/.
<p>
-<tt/util-linux-2.10/ contains <tt/setterm/, <tt/kbdrate/.
+<tt/util-linux-2.11/ contains <tt/setterm/.
<p>
<tt/sh-utils-1.12/ contains <tt/stty/.
<p>
The Linux console sequences are documented in console_codes(4).
-
+The package <tt>funkey</tt> by Rick van Rein provides support
+for all these new keys modern keyboards have. See
+<htmlurl url="http://rick.vanrein.org/linux/funkey"
+name="rick.vanrein.org/linux/funkey">.
<sect>Keyboard generalities<p>
<nidx>keyboard!theory of operation</nidx>
For a much more extensive discussion of these things, and
alternative solutions, see
-<htmlurl url="http://www.ibbnet.nl/~anne/keyboard.html"
+<htmlurl url="http://www.ibb.net/~anne/keyboard.html"
name="Anne Baretta's page">.
<sect>The console character sets<p>
</verb></tscreen>
will disable it (if the kernel was compiled with CONFIG_MAGIC_SYSRQ).
+<sect1>Problems<p>
+A good keyboard accurately reports multiple key presses.
+Especially for people using a keyboard as Braille input device,
+where they have to be able to press up to six keys simultaneously,
+this is important. Many modern keyboards fail here due to sloppy
+design and testing - they misreport or fail in other ways when
+four or more keys are pressed simultaneously, sometimes already
+when two non-modifier keys are pressed simultaneously.
+This affects Linux users a bit: the SysRq key is not a modifier key,
+and people report problems using Alt-SysRq-<it>X</it> for various
+letters or digits <it>X</it>.
+<p>
+Long ago a similar problem (`ghosting') was caused by the design
+of the scan matrix: when three keys were pressed a fourth was
+also seen. That problem was solved by the use of diodes.
+Today it is the interface logic that is deficient.
+
<sect>How to get out of raw mode<p>
<nidx>raw mode, exiting</nidx>
and let the Menu key create a fresh virtual console (in case you have
something like <tt/spawn_console/ running).
+<sect1>Funkeys<p>
+Many modern keyboards have buttons or keys with labels like
+"Vol Up", "Eject" etc. that suggest actions rather than strings.
+Of course one can bind shell commands to them, but then they'll
+work only when you are at a shell prompt.
+Rick van Rein wrote a package funkey consisting of a kernel patch
+and a daemon. The kernel patch creates a new character device,
+and adds a new key type to indicate which keystrokes should be
+sent to this new character device. A daemon can now listen to
+the character device, somewhat like <tt>gpm</tt> listens to the
+mouse device, and perform the actions indicated in its config file.
+See <htmlurl url="http://rick.vanrein.org/linux/funkey"
+name="rick.vanrein.org/linux/funkey">.
+
<sect>Examples of use of loadkeys and xmodmap<p>
<nidx>loadkeys!example using</nidx>
<nidx>xmodmap!example using</nidx>
clean:
rm -f $(GEN1) $(GEN8)
+
+# Note: man?misc contains the man pages for non-installed
+# programs from ../src. Most of these are tiny test programs,
+# not very useful for anybody.
+# But if you decide to install some of those, then here are the man pages.
--- /dev/null
+.TH FGCONSOLE 1 "14 Feburary 2002" "" "Linux User's Manual"
+
+.SH NAME
+fgconsole \- print the number of the active VT.
+
+.SH SYNOPSIS
+.B fgconsole
+
+.SH DESCRIPTION
+If the active Virtual Terminal is
+.IR /dev/ttyN ,
+then prints
+.I N
+on standard output.
+.SH NOTES
+Under
+.IR devfs ,
+the consoles are in
+.IR /dev/vc/N .
+.IR devfsd
+may maintain symlinks for compatibility.
+.SH "SEE ALSO"
+.BR chvt (1).
+.\" .SH "AUTHORS"
+.\" Andries Brouwer
+.\" .br
+.\" Manpage by Alastair McKinstry <mckinstry@computer.org>
+
--- /dev/null
+.TH CODEPAGE 1 "2002-02-19" "Console Tools" "Debian Linux"
+
+.SH NAME
+codepage \- extract a codepage from an MSDOS codepage file
+
+.SH SYNOPSIS
+.B codepage
+[
+.I \-c
+] | [
+.I \-l
+] |
+.I \-L
+] | [
+.I \-a
+|
+.I nnn
+]
+.I <file.cpi>
+
+.SH DESCRIPTION
+The
+.B codepage
+command extracts codepages from an MSDOS codepage file.
+
+.SH OPTIONS
+.TP
+.I \-c
+Input file is a single codepage
+
+.TP
+.I \-L
+Print header info (you don't want to see this).
+
+.TP
+.I \-l
+List all codepages contained in the file.
+
+.TP
+.I \-a
+Extract all codepages from the file
+
+.TP
+.I nnn
+(3 digits): extract codepage
+.I nnn
+from the file.
+
+.SH EXAMPLE
+To create a file 850.cp, with codepage 850 from a file
+ega.cpi, execute:
+.LP
+.RS
+ codepage ega.cpi 850
+.RE
+
+.\" .SH AUTHORS
+.\" Ahmed M. Naas <ahmed@oea.xs4all.nl>
+.\" .br
+.\" Andries Brouwer <aeb@cwi.nl>
+.\" .br
+.\" Manpage by Alastair McKinstry <mckinstry@computer.org>
+
--- /dev/null
+.TH SCREENDUMP 1 "2002-02-24" "" "Linux Console"
+
+.SH NAME
+screendump \- dump the contents of a virtual console to stdout
+
+.SH SYNOPSIS
+.B screendump
+[
+.I N
+]
+
+.SH DESCRIPTION
+The
+.B screendump
+command dumps the contents of virtual console
+.B N
+, (or the current console if N is omitted)
+to standard out.
+
+Just saying
+.RS
+cat /dev/vcsN
+.RE
+has a similar effect.
+
+.SH NOTES
+For security reasons,
+.B screendump
+uses linux devices "virtual console screen" and
+"virtual console screen with attributes" to give access for screendump.
+.P
+Ensure these files exist, using
+.LP
+.RS
+cd /dev
+for i in 0 1 2 3 ...; do
+.br
+ mknod vcs$i c 7 $i
+.br
+ mknod vcsa$i c 7 `expr 128 + $i`
+.br
+done
+.RE
+
+(filling in the ellipses) and give the device files appropriate
+permissions, or run
+.B screendump
+as root.
+
+.SH SEE ALSO
+setterm(1)
+
+.\" .SH AUTHORS
+.\" Andries Brouwer <aeb@cwi.nl>
+.\" .br
+.\" Manpage by Alastair McKinstry <mckinstry@computer.org>
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
+key. The actions available include outputting 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"
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.
+can be given in decimal, octal, hexadecimal, unicode or symbolic notation.
The numeric notations use the same format as with
.IR keynumber .
+Unicode notation is "U+" followed by four hexadecimal digits.
The symbolic notation resembles that used by
.BR xmodmap (1).
Notable differences are the number symbols. The numeric
.SH "CONSOLE MAPS"
Several mappings are involved in the path from user program
output to console display. If the console is in utf8 mode (see
-.BR start_unicode (1))
+.BR unicode_start (1))
then the kernel expects that user program output is coded as UTF-8 (see
.BR utf-8 (7)),
and converts that to Unicode (ucs2).
perhaps with suitable extension (like .psf).
.SH "SEE ALSO"
.BR psfaddtable (1),
-.BR start_unicode (1),
+.BR unicode_start (1),
.BR loadunimap (8),
.BR utf-8 (7),
.BR mapscrn (8)
--- /dev/null
+.TH SHOWFONT 1 "2002-02-22" "" "Linux Console"
+
+.SH NAME
+showconsolefont \- Show the current EGA/VGA console screen font
+
+.SH SYNOPSIS
+.B showconsolefont
+.RI "[-V]"
+.RI "[-v]"
+
+.SH DESCRIPTION
+The
+.B showconsolefont
+command outputs the current console font to stdout.
+The option
+.RI \-v
+prints additional information, while the option
+.RI \-V
+prints the program version number.
+
+.SH "SEE ALSO"
+.BR setfont (8).
+
+.\" .SH AUTHORS
+.\" Andries Brouwer
+.\" .br
+.\" Manpage by Alastair McKinstry <mckinstry@computer.org>
--- /dev/null
+.TH CLRUNIMAP 8 "2002-10-12" "kbd" "Linux"
+
+.SH NAME
+clrunimap \- Clear the current console unicode map
+
+.SH SYNOPSIS
+.B clrunimap
+
+.SH DESCRIPTION
+
+The command
+.B clrunimap
+clears the unicode map (also called "Screen Font Map") for the current console.
+
+.SH NOTES
+If you are not the maintainer of the kbd package, it is very unlikely
+that you want to use this command. On many kernels the result will be
+that your screen is black. On some kernels a reboot will be necessary.
+.br
+Use
+.B "setfont -u"
+to load a Unicode map for a console.
+.SH SEE ALSO
+.BR setfont (8).
--- /dev/null
+.TH GETUNIMAP 8 "2002-02-20" "Console Tools" "Linux"
+
+.SH NAME
+getunimap \- dump the unicode map for the current console to stdout
+
+.SH SYNOPSIS
+.B getunimap [
+.I \-s
+]
+
+.SH DESCRIPTION
+The
+.B getunimap
+program is old and obsolete. It is now part of
+.B setfont (1).
+.LP
+The
+.B getunimap
+program outputs the unicode map (also called a "Screen Font Map")
+for the current console to standard out.
+The output will be of the form
+.LP
+.RS
+ 0xAA U+1234 # comment
+.RE
+.LP
+where 0xAA is the font character code and U+1234 is a unicode character,
+that if displayed, will be displayed using glyph 0xAA in the font.
+Many unicode characters may be mapped to the same glyph.
+.br
+the Hash symbol
+.B #
+is used as a comment delimiter; characters after a hash sign (to the end of
+the line) are comments.
+.P
+The
+.B \-s
+option will sort and merge elements, sorting on font character.
+Hence, it will produce output of the form:
+.LP
+.RS
+ 0x22 U+1234 U+5678 U+3456
+.br
+ 0x23 U+0023
+.RE
+.LP
+ etc., listing the multiple unicode characters that map to a font glyph.
+.P
+The output of
+.B getunimap
+is of the form accepted by
+.B setfont
+and
+.B psfaddtable
+.SH SEE ALSO
+.BR psfaddtable (1),
+.BR setfont (1).
--- /dev/null
+.\" @(#)mk_modmap.8 2002-02-22 mckinstry@computer.org
+.TH MK_MODMAP 8 "2002-02-22"
+
+.SH NAME
+mk_modmap \- translate a Linux keytable file into an xmodmap file
+
+.SH SYNOPSIS
+.B mk_modmap
+[
+.B -v
+]
+keymap_file
+
+.SH DESCRIPTION
+The
+.B mk_modmap
+command tries to translate a Linux console keytable file into
+a file that can be parsed by xmodmap, and used within X.
+It outputs the results to standard out.
+.P
+If the
+.B -v
+flag is used, verbose output is given.
+.P
+It requires the X header files to be installed.
+(In Debian, these are in the "xlibs-dev" package).
+.SH NOTES
+Since XFree version 2.1, X initialises its keymap using the Linux
+keymap, so xmodmap will often be superflous.
+
+.SH SEE ALSO
+.BR dumpkeys (1),
+.BR keymaps (5),
+.BR xmodmap(1)
+
+
+.\" .SH AUTHORS
+.\" Kjetil T. Homme <kjetilho@ifi.uio.no>
+.\" .br
+.\" Pablo Saratxaga <pablo@mandrakesoft.com>
+.\" .br
+.\" Manpage by Alastair McKinstry, <mckinstry@computer.org>
\ No newline at end of file
--- /dev/null
+.\" @(#)setvesablank.8
+.TH SETVESABLANK 8 "14 Feb 2002"
+.SH NAME
+setvesablank \- Turn VESA screen blanking on or off
+.SH SYNOPSIS
+.I setvesablank
+[ [
+.I -b --blanking
+]
+.I on | ON | off | OFF
+] [
+.I -h --help
+]
+[
+.I -v --verbose
+]
+.LP
+.SH DESCRIPTION
+.IX "setvesablank command" "" "\fLsetvesablank\fR command"
+.LP
+The program
+.B setvesablank
+sets VESA screen blanking on or off.
+.\" .SH AUTHOR
+.\" Andries Brouwer <aeb@cwi.nl>.
+.\" .br
+.\" Man page by Alastair McKinstry <mckinstry@computer.org>
}
/* get the current tty */
- sprintf(filename,"/dev/tty%d", curvt);
+ /* try /dev/ttyN, then /dev/vc/N */
+ sprintf(filename, VTNAME, curvt);
if (stat(filename,&buf)) {
- perror(filename);
- exit(1);
+ int errsv = errno;
+ sprintf(filename, VTNAME2, curvt);
+ if (stat(filename,&buf)) {
+ /* give error message for first attempt */
+ sprintf(filename, VTNAME, curvt);
+ errno = errsv;
+ perror(filename);
+ exit(1);
+ }
}
console_dev=buf.st_dev;
console_ino=buf.st_ino;
*/
#ifdef __linux__
#define VTNAME "/dev/tty%d"
+#define VTNAME2 "/dev/vc/%d"
#endif
#ifdef ESIX_5_3_2_D
FOREIGN=
SHELL = /bin/sh
-prefix = $(DESTDIR)/usr
-exec_prefix = ${prefix}
+prefix = ${DESTDIR}
datadir = $(prefix)/share
localedir = $(datadir)/locale
gnulocaledir = $(prefix)/share/locale
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
# Enter here all .po files
-POFILES = nl.po ru.po
+POFILES = es.po nl.po ru.po
# the same but with .gmo
-GMOFILES = nl.gmo ru.gmo
+GMOFILES = es.gmo nl.gmo ru.gmo
CATALOGS = $(GMOFILES)
CATOBJEXT = .gmo
src/setleds.c
src/setmetamode.c
src/setvesablank.c
-src/showfont.c
+src/showconsolefont.c
src/showkey.c
src/spawn_console.c
src/spawn_login.c
{"%s: Bad end of range (0x%x)\n", 74},
{"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n", 75},
{"\
-%s: Unicode range U+%x-U+%x not of the same length as font position range \
-0x%x-0x%x\n", 76},
+%s: Unicode range U+%x-U+%x not of the same length as font position range 0x%\
+x-0x%x\n", 76},
{"%s: trailing junk (%s) ignored\n", 77},
{"Loading unicode map from file %s\n", 78},
{"%s: %s: Warning: line too long\n", 79},
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", 173},
- {"Error reading current led setting. Maybe stdin is not a VT?\n", 174},
+ {"on ", 174},
+ {"off", 175},
+ {"Error reading current led setting. Maybe stdin is not a VT?\n", 176},
{"\
-Error reading current flags setting. Maybe you are not on the console?\n", 175},
- {"Error reading current led setting from /dev/kbd.\n", 176},
- {"KIOCGLED unavailable?\n", 177},
- {"KIOCSLED unavailable?\n", 178},
- {"Error opening /dev/kbd.\n", 179},
- {"Error resetting ledmode\n", 180},
- {"Current default flags: ", 181},
- {"Current flags: ", 182},
- {"Current leds: ", 183},
+Error reading current flags setting. Maybe you are not on the console?\n", 177},
+ {"Error reading current led setting from /dev/kbd.\n", 178},
+ {"KIOCGLED unavailable?\n", 179},
+ {"KIOCSLED unavailable?\n", 180},
+ {"Error opening /dev/kbd.\n", 181},
+ {"Error resetting ledmode\n", 182},
+ {"Current default flags: ", 183},
+ {"Current flags: ", 184},
+ {"Current leds: ", 185},
{"\
unrecognized argument: _%s_\n\
-\n", 184},
- {"Old default flags: ", 185},
- {"New default flags: ", 186},
- {"Old flags: ", 187},
- {"New flags: ", 188},
- {"Old leds: ", 189},
- {"New leds: ", 190},
+\n", 186},
+ {"Old default flags: ", 187},
+ {"New default flags: ", 188},
+ {"Old flags: ", 189},
+ {"New flags: ", 190},
+ {"Old leds: ", 191},
+ {"New leds: ", 192},
{"\
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", 191},
- {"Meta key sets high order bit\n", 192},
- {"Meta key gives Esc prefix\n", 193},
- {"Strange mode for Meta key?\n", 194},
- {"Error reading current setting. Maybe stdin is not a VT?\n", 195},
- {"old state: ", 196},
- {"new state: ", 197},
- {"usage: %s\n", 198},
- {"failed to restore original translation table\n", 199},
- {"failed to restore original unimap\n", 200},
- {"cannot change translation table\n", 201},
- {"%s: out of memory?\n", 202},
+The setting before and after the change are reported.\n", 193},
+ {"Meta key sets high order bit\n", 194},
+ {"Meta key gives Esc prefix\n", 195},
+ {"Strange mode for Meta key?\n", 196},
+ {"Error reading current setting. Maybe stdin is not a VT?\n", 197},
+ {"old state: ", 198},
+ {"new state: ", 199},
+ {"usage: %s\n", 200},
+ {"failed to restore original translation table\n", 201},
+ {"failed to restore original unimap\n", 202},
+ {"cannot change translation table\n", 203},
+ {"%s: out of memory?\n", 204},
{"\
-usage: showfont [-v|-V]\n\
-(probably after loading a font with `setfont font')\n", 203},
- {"?UNKNOWN?", 204},
- {"kb mode was %s\n", 205},
+usage: showconsolefont [-v|-V]\n\
+(probably after loading a font with `setfont font')\n", 205},
+ {"?UNKNOWN?", 206},
+ {"kb mode was %s\n", 207},
{"\
[ if you are trying this under X, it might not work\n\
-since the X server is also reading /dev/console ]\n", 206},
- {"caught signal %d, cleaning up...\n", 207},
+since the X server is also reading /dev/console ]\n", 208},
+ {"caught signal %d, cleaning up...\n", 209},
{"\
showkey version %s\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", 208},
+\t-k --keycodes\tdisplay only the interpreted keycodes (default)\n", 210},
{"\
\n\
Press any keys - Ctrl-D will terminate this program\n\
-\n", 209},
- {"press any key (program terminates 10s after last keypress)...\n", 210},
- {"keycode %3d %s\n", 211},
- {"release", 212},
- {"press", 213},
- {"%s from %s\n", 214},
+\n", 211},
+ {"press any key (program terminates 10s after last keypress)...\n", 212},
+ {"keycode %3d %s\n", 213},
+ {"release", 214},
+ {"press", 215},
+ {"%s from %s\n", 216},
};
-int _msg_tbl_length = 214;
+int _msg_tbl_length = 216;
--- /dev/null
+# kbd-es.po, mensajes en español para kbd.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Juan Rafael Fernández García <jrfern@bigfoot.com>, 2002.
+#
+# Permission is granted to freely copy and distribute
+msgid ""
+msgstr ""
+"Project-Id-Version: kbd 1.06\n"
+"POT-Creation-Date: 2001-06-19 08:44+0200\n"
+"PO-Revision-Date: 2002-01-29 20:32GMT+2\n"
+"Last-Translator: Juan Rafael Fernández García <jrfern@bigfoot.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.5\n"
+
+#: openvt/openvt.c:67
+#, c-format
+msgid "openvt: %s: illegal vt number\n"
+msgstr "openvt: %s: número de term.virt. ilegal\n"
+
+#: openvt/openvt.c:91
+msgid "openvt: only root can use the -u flag.\n"
+msgstr "openvt: sólo root puede usar la bandera -u.\n"
+
+#: openvt/openvt.c:105 src/getfd.c:63
+msgid "Couldnt get a file descriptor referring to the console\n"
+msgstr "No se pudo conseguir un descriptor de fichero que refiera a la consola\n"
+
+#: openvt/openvt.c:117
+msgid "openvt: cannot find a free vt\n"
+msgstr "openvt: no se encuentra un term.virt. libre\n"
+
+#: openvt/openvt.c:122
+#, c-format
+msgid "openvt: cannot check whether vt %d is free\n"
+msgstr "openvt: no se puede comprobar si el term.virt. %d está disponible\n"
+
+#: openvt/openvt.c:123 openvt/openvt.c:128
+msgid " use `openvt -f' to force.\n"
+msgstr " use `openvt -f' para forzar la opción.\n"
+
+#: openvt/openvt.c:127
+#, c-format
+msgid "openvt: vt %d is in use; command aborted\n"
+msgstr "openvt: la tv %d está siendo utilizada; orden abortada\n"
+
+#: openvt/openvt.c:155
+#, c-format
+msgid "openvt: Unable to open %s: %s\n"
+msgstr "openvt: No se pudo abrir %s: %s\n"
+
+#: openvt/openvt.c:167
+#, c-format
+msgid "openvt: Cannot open %s read/write (%s)\n"
+msgstr "openvt: No se puede abrir %s para lectura/escritura (%s)\n"
+
+#: openvt/openvt.c:205
+#, c-format
+msgid "openvt: using VT %s\n"
+msgstr "openvt: usando TV %s\n"
+
+#: openvt/openvt.c:217
+#, c-format
+msgid "openvt: Unable to set new session (%s)\n"
+msgstr "openvt: No se puede establecer nueva sesión (%s)\n"
+
+#: openvt/openvt.c:225
+#, c-format
+msgid "\nopenvt: could not open %s R/W (%s)\n"
+msgstr "\nopenvt: no se pudo abrir %s para lectura/escritura (%s)\n"
+
+#: openvt/openvt.c:281
+#, c-format
+msgid "openvt: could not deallocate console %d\n"
+msgstr "openvt: no se pudo liberar la consola %d\n"
+
+#: src/chvt.c:28
+msgid "usage: chvt N\n"
+msgstr "uso: chvt N\n"
+
+#: src/deallocvt.c:33
+#, c-format
+msgid "%s: unknown option\n"
+msgstr "%s: opción desconocida\n"
+
+#: src/deallocvt.c:45
+#, c-format
+msgid "%s: deallocating all unused consoles failed\n"
+msgstr "%s: fallo en el proceso de liberación de todas las consolas no usadas\n"
+
+#: src/deallocvt.c:53
+#, c-format
+msgid "%s: 0: illegal VT number\n"
+msgstr "%s: 0: número ilegal de TV\n"
+
+#: src/deallocvt.c:56
+#, c-format
+msgid "%s: VT 1 is the console and cannot be deallocated\n"
+msgstr "%s: TV 1 es la consola y no puede liberarse\n"
+
+#: src/deallocvt.c:61
+#, c-format
+msgid "%s: could not deallocate console %d\n"
+msgstr "%s: no se pudo liberar la consola %d\n"
+
+#: src/dumpkeys.c:63
+#, c-format
+msgid "KDGKBENT error at index 0 in table %d: "
+msgstr "error KDGKBENT en el índice 0 en la tabla %d:"
+
+#: src/dumpkeys.c:76
+#, c-format
+msgid "%s: cannot find any keymaps?\n"
+msgstr "%s: ¿no se encuentran mapas de teclado?\n"
+
+#: src/dumpkeys.c:81
+#, c-format
+msgid "%s: plain map not allocated? very strange ...\n"
+msgstr "%s: ¿no se ha asignado el mapa básico? qué extraño ...\n"
+
+#: src/dumpkeys.c:113
+#, c-format
+msgid "KDGKBENT error at index %d in table %d: "
+msgstr "error KDGKBENT en el índice %d en la tabla %d:"
+
+#: src/dumpkeys.c:241
+#, c-format
+msgid "keycode range supported by kernel: 1 - %d\n"
+msgstr "el núcleo acepta el rango de códigos de teclado: 1 - %d\n"
+
+#: src/dumpkeys.c:243
+#, c-format
+msgid "max number of actions bindable to a key: %d\n"
+msgstr "máximo número de acciones asociables a una tecla: %d\n"
+
+#: src/dumpkeys.c:246
+#, c-format
+msgid "number of keymaps in actual use: %d\n"
+msgstr "número de mapas de teclado realmente en uso: %d\n"
+
+#: src/dumpkeys.c:249
+#, c-format
+msgid "of which %d dynamically allocated\n"
+msgstr "de los cuales %d han sido asignados dinámicamente\n"
+
+#: src/dumpkeys.c:250
+msgid "ranges of action codes supported by kernel:\n"
+msgstr "rangos de códigos de acción admitidos por el núcleo:\n"
+
+#: src/dumpkeys.c:255
+#, c-format
+msgid "number of function keys supported by kernel: %d\n"
+msgstr "número de teclas de función admitidas por el núcleo: %d\n"
+
+#: src/dumpkeys.c:258
+#, c-format
+msgid "max nr of compose definitions: %d\n"
+msgstr "nº máximo de definiciones de composición: %d\n"
+
+#: src/dumpkeys.c:260
+#, c-format
+msgid "nr of compose definitions in actual use: %d\n"
+msgstr "nº de definiciones de composición en uso real: %d\n"
+
+#: src/dumpkeys.c:284
+#, c-format
+msgid ""
+"Symbols recognized by %s:\n"
+"(numeric value, symbol)\n"
+"\n"
+msgstr ""
+"Símbolos reconocidos por %s:\n"
+"(valor numérico, símbolo)\n"
+"\n"
+
+#: src/dumpkeys.c:297
+msgid "\nThe following synonyms are recognized:\n\n"
+msgstr "\nSe reconocen los siguientes sinónimos:\n\n"
+
+#: src/dumpkeys.c:299
+#, c-format
+msgid "%-15s for %s\n"
+msgstr "%-15s para %s\n"
+
+#: src/dumpkeys.c:301
+msgid "\nRecognized modifier names and their column numbers:\n"
+msgstr "\nNombres de modificador reconocidos y sus números de columna:\n"
+
+#: src/dumpkeys.c:364
+#, c-format
+msgid "# not alt_is_meta: on keymap %d key %d is bound to"
+msgstr "# no alt_is_meta: en el mapa de teclado %d la tecla %d está ligada a"
+
+#: src/dumpkeys.c:439
+msgid "impossible: not meta?\n"
+msgstr "imposible: ¿no meta?\n"
+
+#: src/dumpkeys.c:496
+#, c-format
+msgid "KDGKBSENT failed at index %d: "
+msgstr "falló KDGKBSENT en el índice %d:"
+
+#: src/dumpkeys.c:516
+#, c-format
+msgid "dumpkeys version %s"
+msgstr "versión %s de dumpkeys"
+
+#: src/dumpkeys.c:517
+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="
+msgstr ""
+"\n"
+"uso: dumpkeys [opciones...]\n"
+"\n"
+"las opciones válidas son:\n"
+"\n"
+"\t-h --help\t mostrar este texto de ayuda\n"
+"\t-i --short-info\t mostrar información sobre el controlador de teclado\n"
+"\t-l --long-info\t mostrar la información anterior y los símbolos que loadkeys conoce\n"
+"\t-n --numeric\t mostrar la tabla de teclas en notación hexadecimal\n"
+"\t-f --full-table\t no usar notaciones abreviadas, una fila por código de tecla\n"
+"\t-1 --separate-lines una línea por par (modificador, código de tecla)\n"
+"\t --funcs-only\t mostrar sólo la cadenas de las teclas de función\n"
+"\t --keys-only\t mostrar sólo las asociaciones de teclas\n"
+"\t --compose-only mostrar sólo las combinaciones con la tecla Componer\n"
+"\t-c --charset="
+
+#: src/dumpkeys.c:534
+msgid ""
+"\t\t\t interpret character action codes to be from the\n"
+"\t\t\t specified character set\n"
+msgstr ""
+"\t\t\t interpretar que los códigos de acción de carácter\n"
+"\t\t\t proceden del conjunto de caracteres especificado\n"
+
+#: src/findfile.c:43
+#, c-format
+msgid "error executing %s\n"
+msgstr "error al ejecutar %s\n"
+
+#: src/getkeycodes.c:18
+msgid "usage: getkeycodes\n"
+msgstr "uso: getkeycodes\n"
+
+#: src/getkeycodes.c:39
+msgid "Plain scancodes xx (hex) versus keycodes (dec)\n"
+msgstr "Códigos de rastreo simples xx (hex) frente a códigos de tecla (dec)\n"
+
+#: src/getkeycodes.c:40
+msgid "0 is an error; for 1-88 (0x01-0x58) scancode equals keycode\n"
+msgstr "0 es un error; para 1-88 (0x01-0x58) los códigos de rastreo son iguales que los de tecla\n"
+
+#: src/getkeycodes.c:44
+msgid "\n\nEscaped scancodes e0 xx (hex)\n"
+msgstr "\n\nCódigos de rastreo con escape e0 xx (hex)\n"
+
+#: src/getkeycodes.c:64
+#, c-format
+msgid "failed to get keycode for scancode 0x%x\n"
+msgstr "fallo al averiguar el código de tecla para el código de rastreo 0x%x\n"
+
+#: src/getunimap.c:49
+#, c-format
+msgid ""
+"Usage:\n"
+"\t%s [-s]\n"
+msgstr ""
+"Uso:\n"
+"\t%s [-s]\n"
+
+#: src/kbd_mode.c:18
+msgid "usage: kbd_mode [-a|-u|-k|-s]\n"
+msgstr "uso: kbd_mode [-a|-u|-k|-s]\n"
+
+#: src/kbd_mode.c:41
+msgid "kbd_mode: error reading keyboard mode\n"
+msgstr "kbd_mode: error leyendo el modo del teclado\n"
+
+#: src/kbd_mode.c:46
+msgid "The keyboard is in raw (scancode) mode\n"
+msgstr "El teclado está en modo crudo (de código de rastreo)\n"
+
+#: src/kbd_mode.c:49
+msgid "The keyboard is in mediumraw (keycode) mode\n"
+msgstr "El teclado está en modo medio crudo (de código de tecla)\n"
+
+#: src/kbd_mode.c:52
+msgid "The keyboard is in the default (ASCII) mode\n"
+msgstr "El teclado está en el modo por defecto (ASCII)\n"
+
+#: src/kbd_mode.c:55
+msgid "The keyboard is in Unicode (UTF-8) mode\n"
+msgstr "El teclado está en modo Unicode (UTF-8)\n"
+
+#: src/kbd_mode.c:58
+msgid "The keyboard is in some unknown mode\n"
+msgstr "El teclado está en algún modo desconocido\n"
+
+#: src/kbd_mode.c:76
+#, c-format
+msgid "%s: error setting keyboard mode\n"
+msgstr "%s: error al establecer el modo de teclado\n"
+
+#: src/kbdrate.c:139 src/kbdrate.c:278
+#, c-format
+msgid "Typematic Rate set to %.1f cps (delay = %d ms)\n"
+msgstr "Cadencia de repetición automática de tecla fijada a %.1f cps (retraso = %d ms)\n"
+
+#: src/kbdrate.c:223
+msgid "Usage: kbdrate [-V] [-s] [-r rate] [-d delay]\n"
+msgstr "Uso: kbdrate [-V] [-s] [-r rate] [-d delay]\n"
+
+#: src/kbdrate.c:253
+msgid "Cannot open /dev/port"
+msgstr "No se puede abrir /dev/port"
+
+#: src/kdfontop.c:193
+msgid "bug: getfont called with count<256\n"
+msgstr "bicho: se ha llamado a getfont con contador<256\n"
+
+#: src/kdfontop.c:252 src/xmalloc.c:14
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoria agotada\n"
+
+#: src/ksyms.c:1670
+#, c-format
+msgid "unknown charset %s - ignoring charset request\n"
+msgstr "conjunto de caracteres %s desconocido - no se atiende a la petición\n"
+
+#: src/ksyms.c:1742
+#, c-format
+msgid "assuming iso-8859-1 %s\n"
+msgstr "conjeturando iso-8859-1 %s\n"
+
+#: src/ksyms.c:1749
+#, c-format
+msgid "assuming iso-8859-15 %s\n"
+msgstr "conjeturando iso-8859-15 %s\n"
+
+#: src/ksyms.c:1756
+#, c-format
+msgid "assuming iso-8859-2 %s\n"
+msgstr "conjeturando iso-8859-2 %s\n"
+
+#: src/ksyms.c:1763
+#, c-format
+msgid "assuming iso-8859-3 %s\n"
+msgstr "conjeturando iso-8859-3 %s\n"
+
+#: src/ksyms.c:1770
+#, c-format
+msgid "assuming iso-8859-4 %s\n"
+msgstr "conjeturando iso-8859-4 %s\n"
+
+#: src/ksyms.c:1775
+#, c-format
+msgid "unknown keysym '%s'\n"
+msgstr "keysym '%s' desconocida\n"
+
+#: src/ksyms.c:1810
+#, c-format
+msgid "plus before %s ignored\n"
+msgstr "signo más antes de %s no se tiene en cuenta\n"
+
+#: src/loadunimap.c:62
+#, c-format
+msgid "usage: %s [-o map.orig] [map-file]\n"
+msgstr "uso: %s [-o mapa.original] [fichero-mapa]\n"
+
+#: src/loadunimap.c:152 src/loadunimap.c:163
+#, c-format
+msgid "Bad input line: %s\n"
+msgstr "Línea de entrada incorrecta: %s\n"
+
+#: src/loadunimap.c:172
+#, c-format
+msgid "%s: Glyph number (0x%x) larger than font length\n"
+msgstr "%s: el número de glifo (0x%x) es mayor que la longitud de la fuente\n"
+
+#: src/loadunimap.c:178
+#, c-format
+msgid "%s: Bad end of range (0x%x)\n"
+msgstr "%s: fin de rango (0x%x) incorrecto\n"
+
+#: src/loadunimap.c:208 src/psfxtable.c:175
+#, c-format
+msgid "%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n"
+msgstr "%s: rango Unicode correspondiente al rango de posición de fuente 0x%x-0x%x incorrecto\n"
+
+#: src/loadunimap.c:215 src/psfxtable.c:182
+#, 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: el rango Unicode U+%x-U+%x no es de la misma longitud que el rango de posición en las fuentes 0x%x-0x%x\n"
+
+#: src/loadunimap.c:234 src/psfxtable.c:203
+#, c-format
+msgid "%s: trailing junk (%s) ignored\n"
+msgstr "%s: se descarta la basura del final (%s)\n"
+
+#: src/loadunimap.c:251
+#, c-format
+msgid "Loading unicode map from file %s\n"
+msgstr "Cargando el mapa unicode del archivo %s\n"
+
+#: src/loadunimap.c:257
+#, c-format
+msgid "%s: %s: Warning: line too long\n"
+msgstr "%s: %s: Adventencia: la línea es demasiado larga\n"
+
+#: src/loadunimap.c:267
+#, c-format
+msgid ""
+"%s: not loading empty unimap\n"
+"(if you insist: use option -f to override)\n"
+msgstr ""
+"%s: no se carga mapa unicode vacío\n"
+"(para forzar a cargarlo, use la opción -f)\n"
+
+#: src/loadunimap.c:288
+msgid "entry"
+msgstr "entrada"
+
+#: src/loadunimap.c:288
+msgid "entries"
+msgstr "entradas"
+
+#: src/loadunimap.c:314
+#, c-format
+msgid "Saved unicode map on `%s'\n"
+msgstr "Se ha salvado el mapa unicode en `%s'\n"
+
+#: src/loadunimap.c:334
+msgid "Appended Unicode map\n"
+msgstr "Se ha añadido un mapa Unicode\n"
+
+#: src/mapscrn.c:65
+#, c-format
+msgid "usage: %s [-v] [-o map.orig] map-file\n"
+msgstr "uso: %s [-v] [-o map.orig] fichero-mapa\n"
+
+#: src/mapscrn.c:130
+#, c-format
+msgid "mapscrn: cannot open map file _%s_\n"
+msgstr "mapscrn: no puede abrir el fichero-mapa _%s_\n"
+
+#: src/mapscrn.c:136
+msgid "Cannot stat map file"
+msgstr "No se puede hacer stat() sobre el fichero-mapa"
+
+#: src/mapscrn.c:141
+#, c-format
+msgid "Loading binary direct-to-font screen map from file %s\n"
+msgstr "Cargando mapa de pantalla binario directo-a-fuente desde el fichero %s\n"
+
+#: src/mapscrn.c:146 src/mapscrn.c:157
+#, c-format
+msgid "Error reading map from file `%s'\n"
+msgstr "Error de lectura del mapa contenido en el fichero `%s'\n"
+
+#: src/mapscrn.c:152
+#, c-format
+msgid "Loading binary unicode screen map from file %s\n"
+msgstr "Cargando el mapa de pantalla binario unicode desde el fichero %s\n"
+
+#: src/mapscrn.c:164
+#, c-format
+msgid "Loading symbolic screen map from file %s\n"
+msgstr "Cargando el mapa de pantalla simbólico desde el fichero %s\n"
+
+#: src/mapscrn.c:168
+#, c-format
+msgid "Error parsing symbolic map from `%s', line %d\n"
+msgstr "Error al analizar el mapa simbólico contenido en `%s', línea %d\n"
+
+#: src/mapscrn.c:272 src/mapscrn.c:277
+msgid "Error writing map to file\n"
+msgstr "Error al escribir el mapa en el fichero\n"
+
+#: src/mapscrn.c:281
+msgid "Cannot read console map\n"
+msgstr "No se puede leer el mapa de consola\n"
+
+#: src/mapscrn.c:287
+#, c-format
+msgid "Saved screen map in `%s'\n"
+msgstr "Salvado el mapa de pantalla en `%s'\n"
+
+#: src/psffontop.c:66
+#, c-format
+msgid "%s: short ucs2 unicode table\n"
+msgstr "%s: tabla ucs2 unicode abreviada\n"
+
+#: src/psffontop.c:87
+#, c-format
+msgid "%s: short utf8 unicode table\n"
+msgstr "%s: tabla utf8 unicode abreviada\n"
+
+#: src/psffontop.c:90
+#, c-format
+msgid "%s: bad utf8\n"
+msgstr "%s: utf8 incorrecto\n"
+
+#: src/psffontop.c:93
+#, c-format
+msgid "%s: unknown utf8 error\n"
+msgstr "%s: error utf8 desconocido\n"
+
+#: src/psffontop.c:124
+#, c-format
+msgid "%s: short unicode table\n"
+msgstr "%s: tabla unicode abreviada\n"
+
+#: src/psffontop.c:204
+#, c-format
+msgid "%s: Error reading input font"
+msgstr "%s: Error de lectura de la fuente de entrada"
+
+#: src/psffontop.c:218
+#, c-format
+msgid "%s: Bad call of readpsffont\n"
+msgstr "%s: Llamada a readpsffont incorrecta\n"
+
+#: src/psffontop.c:233
+#, c-format
+msgid "%s: Unsupported psf file mode (%d)\n"
+msgstr "%s: modalidad (%d) de fichero psf no admitida\n"
+
+#: src/psffontop.c:251
+#, c-format
+msgid "%s: Unsupported psf version (%d)\n"
+msgstr "%s: Versión (%d) de psf no admitida\n"
+
+#: src/psffontop.c:267
+#, c-format
+msgid "%s: zero input font length?\n"
+msgstr "%s: ¿la longitud de la fuente de entrada es cero?\n"
+
+#: src/psffontop.c:272
+#, c-format
+msgid "%s: zero input character size?\n"
+msgstr "%s: ¿el tamaño del carácter de entrada es cero?\n"
+
+#: src/psffontop.c:278
+#, c-format
+msgid "%s: Input file: bad input length (%d)\n"
+msgstr "%s: Fichero de entrada: longitud de entrada (%d) incorrecta\n"
+
+#: src/psffontop.c:310
+#, c-format
+msgid "%s: Input file: trailing garbage\n"
+msgstr "%s: Fichero de entrada: basura al final\n"
+
+#: src/psffontop.c:348
+#, c-format
+msgid "appendunicode: illegal unicode %u\n"
+msgstr "appendunicode: unicode %u es ilegal\n"
+
+#: src/psffontop.c:434
+msgid "Cannot write font file header"
+msgstr "No se puede escribir la cabecera del fichero de fuentes"
+
+#: src/psfxtable.c:109
+#, c-format
+msgid "%s: Warning: line too long\n"
+msgstr "%s: Advertencia: línea demasiado larga\n"
+
+#: src/psfxtable.c:123 src/psfxtable.c:133
+#, c-format
+msgid "%s: Bad input line: %s\n"
+msgstr "%s: Línea de entrada incorrecta: %s\n"
+
+#: src/psfxtable.c:142
+#, c-format
+msgid "%s: Glyph number (0x%lx) past end of font\n"
+msgstr "%s: El número de glifo (0x%lx) es mayor que el final de la fuente\n"
+
+#: src/psfxtable.c:147
+#, c-format
+msgid "%s: Bad end of range (0x%lx)\n"
+msgstr "%s: Fin de rango (0x%lx) incorrecto)\n"
+
+#: src/psfxtable.c:166
+#, c-format
+msgid "%s: Corresponding to a range of font positions, there should be a Unicode range\n"
+msgstr ""
+
+#: src/psfxtable.c:255
+#, c-format
+msgid ""
+"Usage:\n"
+"\t%s infont intable outfont\n"
+msgstr ""
+
+#: src/psfxtable.c:264
+#, c-format
+msgid ""
+"Usage:\n"
+"\t%s infont [outtable]\n"
+msgstr ""
+
+#: src/psfxtable.c:273
+#, c-format
+msgid ""
+"Usage:\n"
+"\t%s infont outfont\n"
+msgstr ""
+
+#: src/psfxtable.c:298
+#, c-format
+msgid ""
+"Usage:\n"
+"\t%s [-i infont] [-o outfont] [-it intable] [-ot outtable] [-nt]\n"
+msgstr ""
+
+#: src/psfxtable.c:358
+#, c-format
+msgid "%s: Bad magic number on %s\n"
+msgstr ""
+
+#: src/psfxtable.c:377
+#, c-format
+msgid "%s: psf file with unknown magic\n"
+msgstr ""
+
+#: src/psfxtable.c:393
+#, c-format
+msgid "%s: input font does not have an index\n"
+msgstr ""
+
+#: src/resizecons.c:153
+#, c-format
+msgid "resizecons: cannot find videomode file %s\n"
+msgstr ""
+
+#: src/resizecons.c:172
+msgid "Invalid number of lines\n"
+msgstr ""
+
+#: src/resizecons.c:238
+#, c-format
+msgid "Old mode: %dx%d New mode: %dx%d\n"
+msgstr ""
+
+#: src/resizecons.c:240
+#, c-format
+msgid "Old #scanlines: %d New #scanlines: %d Character height: %d\n"
+msgstr ""
+
+#: src/resizecons.c:251
+#, c-format
+msgid "resizecons: the command `%s' failed\n"
+msgstr ""
+
+#: src/resizecons.c:319
+#, c-format
+msgid "resizecons: don't forget to change TERM (maybe to con%dx%d or linux-%dx%d)\n"
+msgstr ""
+
+#: src/resizecons.c:332
+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 ""
+
+#: src/resizecons.c:370
+msgid "resizecons: cannot get I/O permissions.\n"
+msgstr ""
+
+#: src/screendump.c:48
+msgid "usage: screendump [n]\n"
+msgstr ""
+
+#: src/screendump.c:68
+#, c-format
+msgid "Error reading %s\n"
+msgstr ""
+
+#: src/screendump.c:109
+#, c-format
+msgid "couldn't read %s, and cannot ioctl dump\n"
+msgstr ""
+
+#. we tried this just to be sure, but TIOCLINUX
+#. function 0 has been disabled since 1.1.92
+#. Do not mention `ioctl dump' in error msg
+#: src/screendump.c:115
+#, c-format
+msgid "couldn't read %s\n"
+msgstr ""
+
+#: src/screendump.c:124
+#, c-format
+msgid "Strange ... screen is both %dx%d and %dx%d ??\n"
+msgstr ""
+
+#: src/screendump.c:142
+msgid "Error writing screendump\n"
+msgstr ""
+
+#: src/setfont.c:73
+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"
+" -O <filename>\tWrite current font and unicode map 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|O|om|ou|m|u] option is given,\n"
+"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\n"
+"will be loaded and, in the case of consolemaps, activated.\n"
+" -h<N> (no space) Override font height.\n"
+" -m <fn> Load console screen map.\n"
+" -u <fn> Load font unicode map.\n"
+" -m none\tSuppress loading and activation of a screen map.\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 ""
+
+#: src/setfont.c:169
+msgid "setfont: too many input files\n"
+msgstr ""
+
+#: src/setfont.c:177
+msgid "setfont: cannot both restore from character ROM and from file. Font unchanged.\n"
+msgstr ""
+
+#: src/setfont.c:236
+#, c-format
+msgid "Bad character height %d\n"
+msgstr ""
+
+#: src/setfont.c:240
+#, c-format
+msgid "Bad character width %d\n"
+msgstr ""
+
+#: src/setfont.c:265
+#, c-format
+msgid "%s: font position 32 is nonblank\n"
+msgstr ""
+
+#: src/setfont.c:273
+#, c-format
+msgid "%s: wiped it\n"
+msgstr ""
+
+#: src/setfont.c:277
+#, c-format
+msgid "%s: background will look funny\n"
+msgstr ""
+
+#: src/setfont.c:287
+#, c-format
+msgid "Loading %d-char %dx%d font from file %s\n"
+msgstr ""
+
+#: src/setfont.c:290
+#, c-format
+msgid "Loading %d-char %dx%d font\n"
+msgstr ""
+
+#: src/setfont.c:293
+#, c-format
+msgid "Loading %d-char %dx%d (%d) font from file %s\n"
+msgstr ""
+
+#: src/setfont.c:296
+#, c-format
+msgid "Loading %d-char %dx%d (%d) font\n"
+msgstr ""
+
+#: src/setfont.c:336
+#, c-format
+msgid "%s: bug in do_loadtable\n"
+msgstr ""
+
+#: src/setfont.c:342
+msgid "Loading Unicode mapping table...\n"
+msgstr ""
+
+#: src/setfont.c:378 src/setfont.c:462
+#, c-format
+msgid "Cannot open font file %s\n"
+msgstr ""
+
+#: src/setfont.c:389
+#, c-format
+msgid "When loading several fonts, all must be psf fonts - %s isn't\n"
+msgstr ""
+
+#: src/setfont.c:397
+#, c-format
+msgid "Read %d-char %dx%d font from file %s\n"
+msgstr ""
+
+#: src/setfont.c:403
+msgid "When loading several fonts, all must have the same height\n"
+msgstr ""
+
+#: src/setfont.c:410
+msgid "When loading several fonts, all must have the same width\n"
+msgstr ""
+
+#: src/setfont.c:449
+msgid "Cannot find default font\n"
+msgstr ""
+
+#: src/setfont.c:456
+#, c-format
+msgid "Cannot find %s font\n"
+msgstr ""
+
+#: src/setfont.c:468
+#, c-format
+msgid "Reading font file %s\n"
+msgstr ""
+
+#: src/setfont.c:506
+msgid "No final newline in combine file\n"
+msgstr ""
+
+#: src/setfont.c:512
+msgid "Too many files to combine\n"
+msgstr ""
+
+#. restorefont -w writes a SVGA font to file
+#. restorefont -r restores it
+#. These fonts have size 32768, for two 512-char fonts.
+#. In fact, when BROKEN_GRAPHICS_PROGRAMS is defined,
+#. and it always is, there is no default font that is saved,
+#. so probably the second half is always garbage.
+#: src/setfont.c:536
+msgid "Hmm - a font from restorefont? Using the first half.\n"
+msgstr ""
+
+#: src/setfont.c:553
+msgid "Bad input file size\n"
+msgstr ""
+
+#: src/setfont.c:574
+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 ""
+
+#: src/setfont.c:588
+#, c-format
+msgid "You asked for font size %d, but only 8, 14, 16 are possible here.\n"
+msgstr ""
+
+#: src/setfont.c:633
+msgid "Found nothing to save\n"
+msgstr ""
+
+#: src/setfont.c:637
+msgid "Cannot write font file"
+msgstr ""
+
+#: src/setfont.c:642
+#, c-format
+msgid "Saved %d-char %dx%d font file on %s\n"
+msgstr ""
+
+#: 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 ""
+
+#: src/setkeycodes.c:43
+msgid "even number of arguments expected"
+msgstr ""
+
+#: src/setkeycodes.c:50
+msgid "error reading scancode"
+msgstr ""
+
+#: src/setkeycodes.c:56
+msgid "code outside bounds"
+msgstr ""
+
+#: src/setkeycodes.c:59
+#, c-format
+msgid "failed to set scancode %x to keycode %d\n"
+msgstr ""
+
+#: src/setleds.c:25
+#, c-format
+msgid ""
+"Usage:\n"
+"\tsetleds [-v] [-L] [-D] [-F] [[+|-][ num | caps | scroll %s]]\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 ""
+
+#: src/setleds.c:47
+msgid "on "
+msgstr ""
+
+#: src/setleds.c:47
+msgid "off"
+msgstr ""
+
+#: src/setleds.c:90
+msgid "Error reading current led setting. Maybe stdin is not a VT?\n"
+msgstr ""
+
+#: src/setleds.c:109
+msgid "Error reading current flags setting. Maybe you are not on the console?\n"
+msgstr ""
+
+#: src/setleds.c:123 src/setleds.c:138
+msgid "Error reading current led setting from /dev/kbd.\n"
+msgstr ""
+
+#: src/setleds.c:127
+msgid "KIOCGLED unavailable?\n"
+msgstr ""
+
+#: src/setleds.c:142
+msgid "KIOCSLED unavailable?\n"
+msgstr ""
+
+#: src/setleds.c:169
+msgid "Error opening /dev/kbd.\n"
+msgstr ""
+
+#: src/setleds.c:201
+msgid "Error resetting ledmode\n"
+msgstr ""
+
+#: src/setleds.c:210
+msgid "Current default flags: "
+msgstr ""
+
+#: src/setleds.c:214
+msgid "Current flags: "
+msgstr ""
+
+#: src/setleds.c:218
+msgid "Current leds: "
+msgstr ""
+
+#: src/setleds.c:254 src/setmetamode.c:94
+#, c-format
+msgid "unrecognized argument: _%s_\n\n"
+msgstr ""
+
+#: src/setleds.c:263
+msgid "Old default flags: "
+msgstr ""
+
+#: src/setleds.c:265
+msgid "New default flags: "
+msgstr ""
+
+#: src/setleds.c:272
+msgid "Old flags: "
+msgstr ""
+
+#: src/setleds.c:274
+msgid "New flags: "
+msgstr ""
+
+#: src/setleds.c:288 src/setleds.c:297
+msgid "Old leds: "
+msgstr ""
+
+#: src/setleds.c:290 src/setleds.c:299
+msgid "New leds: "
+msgstr ""
+
+#: src/setmetamode.c:20
+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 ""
+
+#: src/setmetamode.c:36
+msgid "Meta key sets high order bit\n"
+msgstr ""
+
+#: src/setmetamode.c:39
+msgid "Meta key gives Esc prefix\n"
+msgstr ""
+
+#: src/setmetamode.c:42
+msgid "Strange mode for Meta key?\n"
+msgstr ""
+
+#: src/setmetamode.c:78
+msgid "Error reading current setting. Maybe stdin is not a VT?\n"
+msgstr ""
+
+#: src/setmetamode.c:98
+msgid "old state: "
+msgstr ""
+
+#: src/setmetamode.c:104
+msgid "new state: "
+msgstr ""
+
+#: src/setvesablank.c:21
+#, c-format
+msgid "usage: %s\n"
+msgstr ""
+
+#: src/showconsolefont.c:30
+msgid "failed to restore original translation table\n"
+msgstr ""
+
+#: src/showconsolefont.c:35
+msgid "failed to restore original unimap\n"
+msgstr ""
+
+#: src/showconsolefont.c:53
+msgid "cannot change translation table\n"
+msgstr ""
+
+#: src/showconsolefont.c:60
+#, c-format
+msgid "%s: out of memory?\n"
+msgstr ""
+
+#: src/showconsolefont.c:101
+msgid ""
+"usage: showconsolefont [-v|-V]\n"
+"(probably after loading a font with `setfont font')\n"
+msgstr ""
+
+#: src/showkey.c:42
+msgid "?UNKNOWN?"
+msgstr ""
+
+#: src/showkey.c:44
+#, c-format
+msgid "kb mode was %s\n"
+msgstr ""
+
+#: 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 ""
+
+#: src/showkey.c:65
+#, c-format
+msgid "caught signal %d, cleaning up...\n"
+msgstr ""
+
+#: src/showkey.c:79
+#, 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 ""
+
+#: src/showkey.c:157
+msgid "\nPress any keys - Ctrl-D will terminate this program\n\n"
+msgstr ""
+
+#: src/showkey.c:226
+msgid "press any key (program terminates 10s after last keypress)...\n"
+msgstr ""
+
+#: src/showkey.c:234
+#, c-format
+msgid "keycode %3d %s\n"
+msgstr ""
+
+#: src/showkey.c:236
+msgid "release"
+msgstr ""
+
+#: src/showkey.c:237
+msgid "press"
+msgstr ""
+
+#: src/version.h:17
+#, c-format
+msgid "%s from %s\n"
+msgstr ""
--- /dev/null
+From pinard@IRO.UMontreal.CA Tue Nov 6 11:43:10 2001
+Received: from mercure.IRO.UMontreal.CA (mercure.IRO.UMontreal.CA [132.204.24.67]) by hera.cwi.nl with ESMTP
+ id LAA17460 for <Andries.Brouwer@cwi.nl>; Tue, 6 Nov 2001 11:43:09 +0100 (MET)
+Received: from trex.iro.umontreal.ca (trex.iro.umontreal.ca [132.204.26.206])
+ by mercure.IRO.UMontreal.CA (8.11.4/8.11.1) with ESMTP id fA6Ah7F13588
+ for <Andries.Brouwer@cwi.nl>; Tue, 6 Nov 2001 05:43:07 -0500
+Received: (from pinard@localhost)
+ by trex.iro.umontreal.ca (8.11.4/8.11.1) id fA6Ah7w21029;
+ Tue, 6 Nov 2001 05:43:07 -0500
+Date: Tue, 6 Nov 2001 05:43:07 -0500
+Message-Id: <200111061043.fA6Ah7w21029@trex.iro.umontreal.ca>
+From: Translation Project Robot <translation@IRO.UMontreal.CA>
+To: Andries.Brouwer@cwi.nl
+Subject: Contents of file `kbd-1.06.sv.po'
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="=-=-="
+Status: R
+
+--=-=-=
+Content-Type: application/octet-stream
+Content-Disposition: attachment; filename=kbd-1.06.sv.po
+Content-Transfer-Encoding: base64
+
+IyBTd2VkaXNoIG1lc3NhZ2UgZmlsZSBmb3Iga2JkCiMgQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUg
+U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIE1hcnRpbiBTavZncmVuIDxtZDltc0BtZHN0dWQu
+Y2hhbG1lcnMuc2U+LCAyMDAxLgojCiMgJElkOiBzdi5wbyx2IDEuMTUgMjAwMS8xMS8wNiAxMDoz
+NDozMyBtYXJ0aW4gRXhwICQKIwptc2dpZCAiIgptc2dzdHIgIiIKIlByb2plY3QtSWQtVmVyc2lv
+bjoga2JkIDEuMDZcbiIKIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDAxLTA5LTMwIDExOjI5KzAyMDBc
+biIKIlBPLVJldmlzaW9uLURhdGU6IDIwMDEtMTEtMDYgMTE6MzMrMDEwMFxuIgoiTGFzdC1UcmFu
+c2xhdG9yOiBNYXJ0aW4gU2r2Z3JlbiA8bWQ5bXNAbWRzdHVkLmNoYWxtZXJzLnNlPlxuIgoiTGFu
+Z3VhZ2UtVGVhbTogU3dlZGlzaCA8c3ZAbGkub3JnPlxuIgoiTUlNRS1WZXJzaW9uOiAxLjBcbiIK
+IkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCiJDb250ZW50
+LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCgojOiBvcGVudnQvb3BlbnZ0LmM6NjcKIywgYy1m
+b3JtYXQKbXNnaWQgIm9wZW52dDogJXM6IGlsbGVnYWwgdnQgbnVtYmVyXG4iCm1zZ3N0ciAib3Bl
+bnZ0OiAlczogb2dpbHRpZ3QgdnQtbnVtbWVyXG4iCgojOiBvcGVudnQvb3BlbnZ0LmM6OTEKbXNn
+aWQgIm9wZW52dDogb25seSByb290IGNhbiB1c2UgdGhlIC11IGZsYWcuXG4iCm1zZ3N0ciAib3Bl
+bnZ0OiBlbmRhc3Qgcm9vdCBrYW4gYW525G5kYSBmbGFnZ2FuIC11LlxuIgoKIzogb3BlbnZ0L29w
+ZW52dC5jOjEwNSBzcmMvZ2V0ZmQuYzo2Mwptc2dpZCAiQ291bGRudCBnZXQgYSBmaWxlIGRlc2Ny
+aXB0b3IgcmVmZXJyaW5nIHRvIHRoZSBjb25zb2xlXG4iCm1zZ3N0ciAiS3VuZGUgaW50ZSBm5SBl
+biBmaWxpZGVudGlmaWVyYXJlIGb2ciBrb25zb2xsZW5cbiIKCiM6IG9wZW52dC9vcGVudnQuYzox
+MTcKbXNnaWQgIm9wZW52dDogY2Fubm90IGZpbmQgYSBmcmVlIHZ0XG4iCm1zZ3N0ciAib3BlbnZ0
+OiBrYW4gaW50ZSBoaXR0YSBlbiBsZWRpZyB2dFxuIgoKIzogb3BlbnZ0L29wZW52dC5jOjEyMgoj
+LCBjLWZvcm1hdAptc2dpZCAib3BlbnZ0OiBjYW5ub3QgY2hlY2sgd2hldGhlciB2dCAlZCBpcyBm
+cmVlXG4iCm1zZ3N0ciAib3BlbnZ0OiBrYW4gaW50ZSB1bmRlcnP2a2EgaHVydXZpZGEgdnQgJWQg
+5HIgbGVkaWdcbiIKCiM6IG9wZW52dC9vcGVudnQuYzoxMjMgb3BlbnZ0L29wZW52dC5jOjEyOApt
+c2dpZCAiICAgICAgICB1c2UgYG9wZW52dCAtZicgdG8gZm9yY2UuXG4iCm1zZ3N0ciAiICAgICAg
+ICBhbnbkbmQgXCJvcGVudnQgLWZcIiBm9nIgYXR0IHR2aW5nYS5cbiIKCiM6IG9wZW52dC9vcGVu
+dnQuYzoxMjcKIywgYy1mb3JtYXQKbXNnaWQgIm9wZW52dDogdnQgJWQgaXMgaW4gdXNlOyBjb21t
+YW5kIGFib3J0ZWRcbiIKbXNnc3RyICJvcGVudnQ6IHZ0ICVkIGFuduRuZHMsIGtvbW1hbmRvdCBh
+dmJydXRldFxuIgoKIzogb3BlbnZ0L29wZW52dC5jOjE1NQojLCBjLWZvcm1hdAptc2dpZCAib3Bl
+bnZ0OiBVbmFibGUgdG8gb3BlbiAlczogJXNcbiIKbXNnc3RyICJvcGVudnQ6IEthbiBpbnRlIPZw
+cG5hICVzOiAlc1xuIgoKIzogb3BlbnZ0L29wZW52dC5jOjE2NwojLCBjLWZvcm1hdAptc2dpZCAi
+b3BlbnZ0OiBDYW5ub3Qgb3BlbiAlcyByZWFkL3dyaXRlICglcylcbiIKbXNnc3RyICJvcGVudnQ6
+IEthbiBpbnRlIPZwcG5hICVzIGb2ciBs5HNuaW5nL3Nrcml2bmluZyAoJXMpXG4iCgojOiBvcGVu
+dnQvb3BlbnZ0LmM6MjA1CiMsIGMtZm9ybWF0Cm1zZ2lkICJvcGVudnQ6IHVzaW5nIFZUICVzXG4i
+Cm1zZ3N0ciAib3BlbnZ0OiBhbnbkbmRlciBWVCAlc1xuIgoKIzogb3BlbnZ0L29wZW52dC5jOjIx
+NwojLCBjLWZvcm1hdAptc2dpZCAib3BlbnZ0OiBVbmFibGUgdG8gc2V0IG5ldyBzZXNzaW9uICgl
+cylcbiIKbXNnc3RyICJvcGVudnQ6IEthbiBpbnRlIHPkdHRhIG55IHNlc3Npb24gKCVzKVxuIgoK
+Izogb3BlbnZ0L29wZW52dC5jOjIyNQojLCBjLWZvcm1hdAptc2dpZCAiXG5vcGVudnQ6IGNvdWxk
+IG5vdCBvcGVuICVzIFIvVyAoJXMpXG4iCm1zZ3N0ciAiXG5vcGVudnQ6IGt1bmRlIGludGUg9nBw
+bmEgJXMgZvZyIGzkc25pbmcvc2tyaXZuaW5nICglcylcbiIKCiM6IG9wZW52dC9vcGVudnQuYzoy
+ODEKIywgYy1mb3JtYXQKbXNnaWQgIm9wZW52dDogY291bGQgbm90IGRlYWxsb2NhdGUgY29uc29s
+ZSAlZFxuIgptc2dzdHIgIm9wZW52dDoga3VuZGUgaW50ZSBkZWFsbG9rZXJhIGtvbnNvbGwgJWRc
+biIKCiM6IHNyYy9jaHZ0LmM6MjgKbXNnaWQgInVzYWdlOiBjaHZ0IE5cbiIKbXNnc3RyICJhbnbk
+bmRuaW5nOiBjaHZ0IE5cbiIKCiM6IHNyYy9kZWFsbG9jdnQuYzozMwojLCBjLWZvcm1hdAptc2dp
+ZCAiJXM6IHVua25vd24gb3B0aW9uXG4iCm1zZ3N0ciAiJXM6IG9r5G5kIGZsYWdnYVxuIgoKIzog
+c3JjL2RlYWxsb2N2dC5jOjQ1CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogZGVhbGxvY2F0aW5nIGFs
+bCB1bnVzZWQgY29uc29sZXMgZmFpbGVkXG4iCm1zZ3N0ciAiJXM6IGRlYWxsb2tlcmluZyBhdiBh
+bGxhIG9hbnbkbmRhIGtvbnNvbGxlciBtaXNzbHlja2FkZXNcbiIKCiM6IHNyYy9kZWFsbG9jdnQu
+Yzo1MwojLCBjLWZvcm1hdAptc2dpZCAiJXM6IDA6IGlsbGVnYWwgVlQgbnVtYmVyXG4iCm1zZ3N0
+ciAiJXM6IDA6IG9naWx0aWd0IFZULW51bW1lclxuIgoKIzogc3JjL2RlYWxsb2N2dC5jOjU2CiMs
+IGMtZm9ybWF0Cm1zZ2lkICIlczogVlQgMSBpcyB0aGUgY29uc29sZSBhbmQgY2Fubm90IGJlIGRl
+YWxsb2NhdGVkXG4iCm1zZ3N0ciAiJXM6IFZUIDEg5HIga29uc29sbGVuIG9jaCBrYW4gaW50ZSBk
+ZWFsbG9rZXJhc1xuIgoKIzogc3JjL2RlYWxsb2N2dC5jOjYxCiMsIGMtZm9ybWF0Cm1zZ2lkICIl
+czogY291bGQgbm90IGRlYWxsb2NhdGUgY29uc29sZSAlZFxuIgptc2dzdHIgIiVzOiBrdW5kZSBp
+bnRlIGRlYWxsb2tlcmEga29uc29sbCAlZFxuIgoKIzogc3JjL2R1bXBrZXlzLmM6NjMKIywgYy1m
+b3JtYXQKbXNnaWQgIktER0tCRU5UIGVycm9yIGF0IGluZGV4IDAgaW4gdGFibGUgJWQ6ICIKbXNn
+c3RyICJLREdLQkVOVC1mZWwgdmlkIGluZGV4IDAgaSB0YWJlbGwgJWQ6ICIKCiM6IHNyYy9kdW1w
+a2V5cy5jOjc2CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogY2Fubm90IGZpbmQgYW55IGtleW1hcHM/
+XG4iCm1zZ3N0ciAiJXM6IGthbiBpbnRlIGhpdHRhIG7lZ3JhIHRhbmdlbnR0YWJlbGxlcj9cbiIK
+CiM6IHNyYy9kdW1wa2V5cy5jOjgxCiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogcGxhaW4gbWFwIG5v
+dCBhbGxvY2F0ZWQ/IHZlcnkgc3RyYW5nZSAuLi5cbiIKbXNnc3RyICIlczogZW5rZWwgdGFiZWxs
+IGludGUgYWxsb2tlcmFkPyBteWNrZXQgbXlzdGlza3QgLi4uXG4iCgojOiBzcmMvZHVtcGtleXMu
+YzoxMTMKIywgYy1mb3JtYXQKbXNnaWQgIktER0tCRU5UIGVycm9yIGF0IGluZGV4ICVkIGluIHRh
+YmxlICVkOiAiCm1zZ3N0ciAiS0RHS0JFTlQtZmVsIHZpZCBpbmRleCAlZCBpIHRhYmVsbCAlZDog
+IgoKIzogc3JjL2R1bXBrZXlzLmM6MjQxCiMsIGMtZm9ybWF0Cm1zZ2lkICJrZXljb2RlIHJhbmdl
+IHN1cHBvcnRlZCBieSBrZXJuZWw6ICAgICAgICAgICAxIC0gJWRcbiIKbXNnc3RyICJ0YW5nZW50
+a29kc2ludGVydmFsbCBzb20gc3T2ZHMgYXYga+RybmFuOiAgICAgICAgMSAtICVkXG4iCgojOiBz
+cmMvZHVtcGtleXMuYzoyNDMKIywgYy1mb3JtYXQKbXNnaWQgIm1heCBudW1iZXIgb2YgYWN0aW9u
+cyBiaW5kYWJsZSB0byBhIGtleTogICAgICAgICAlZFxuIgptc2dzdHIgInN09nJzdGEgYW50YWwg
+aGFuZGxpbmdhciBiaW5kYmFyYSB0aWxsIGVuIHRhbmdlbnQ6ICAgJWRcbiIKCiM6IHNyYy9kdW1w
+a2V5cy5jOjI0NgojLCBjLWZvcm1hdAptc2dpZCAibnVtYmVyIG9mIGtleW1hcHMgaW4gYWN0dWFs
+IHVzZTogICAgICAgICAgICAgICAgICVkXG4iCm1zZ3N0ciAiYW50YWwgdGFuZ2VudHRhYmVsbGVy
+IHNvbSBmYWt0aXNrdCBhbnbkbmRzOiAgICAgICAgICAlZFxuIgoKIzogc3JjL2R1bXBrZXlzLmM6
+MjQ5CiMsIGMtZm9ybWF0Cm1zZ2lkICJvZiB3aGljaCAlZCBkeW5hbWljYWxseSBhbGxvY2F0ZWRc
+biIKbXNnc3RyICJ2YXJhdiAlZCDkciBkeW5hbWlza3QgYWxsb2tlcmFkZVxuIgoKIzogc3JjL2R1
+bXBrZXlzLmM6MjUwCm1zZ2lkICJyYW5nZXMgb2YgYWN0aW9uIGNvZGVzIHN1cHBvcnRlZCBieSBr
+ZXJuZWw6XG4iCm1zZ3N0ciAiaW50ZXJ2YWxsIGF2IGhhbmRsaW5nc2tvZGVyIHNvbSBzdPZkcyBh
+diBr5HJuYW46XG4iCgojOiBzcmMvZHVtcGtleXMuYzoyNTUKIywgYy1mb3JtYXQKbXNnaWQgIm51
+bWJlciBvZiBmdW5jdGlvbiBrZXlzIHN1cHBvcnRlZCBieSBrZXJuZWw6ICVkXG4iCm1zZ3N0ciAi
+YW50YWwgZnVua3Rpb25zdGFuZ2VudGVyIHNvbSBzdPZkcyBhdiBr5HJuYW46ICVkXG4iCgojOiBz
+cmMvZHVtcGtleXMuYzoyNTgKIywgYy1mb3JtYXQKbXNnaWQgIm1heCBuciBvZiBjb21wb3NlIGRl
+ZmluaXRpb25zOiAlZFxuIgptc2dzdHIgInN09nJzdGEgYW50YWwga29tcG9zaXRpb25zZGVmaW5p
+dGlvbmVyOiAlZFxuIgoKIzogc3JjL2R1bXBrZXlzLmM6MjYwCiMsIGMtZm9ybWF0Cm1zZ2lkICJu
+ciBvZiBjb21wb3NlIGRlZmluaXRpb25zIGluIGFjdHVhbCB1c2U6ICVkXG4iCm1zZ3N0ciAiYW50
+YWwga29tcG9zaXRpb25zZGVmaW5pdGlvbmVyIHNvbSBmYWt0aXNrdCBhbnbkbmRzOiAlZFxuIgoK
+Izogc3JjL2R1bXBrZXlzLmM6Mjg0CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJTeW1ib2xzIHJlY29n
+bml6ZWQgYnkgJXM6XG4iCiIobnVtZXJpYyB2YWx1ZSwgc3ltYm9sKVxuIgoiXG4iCm1zZ3N0ciAi
+IgoiU3ltYm9sZXIgc29tIGvkbm5zIGlnZW4gYXYgJXM6XG4iCiIobnVtZXJpc2t0IHbkcmRlLCBz
+eW1ib2wpXG4iCiJcbiIKCiM6IHNyYy9kdW1wa2V5cy5jOjI5Nwptc2dpZCAiXG5UaGUgZm9sbG93
+aW5nIHN5bm9ueW1zIGFyZSByZWNvZ25pemVkOlxuXG4iCm1zZ3N0ciAiXG5G9mxqYW5kZSBzeW5v
+bnltZXIga+RubnMgaWdlbjpcblxuIgoKIzogc3JjL2R1bXBrZXlzLmM6Mjk5CiMsIGMtZm9ybWF0
+Cm1zZ2lkICIlLTE1cyBmb3IgJXNcbiIKbXNnc3RyICIlLTE1cyBm9nIgJXNcbiIKCiM6IHNyYy9k
+dW1wa2V5cy5jOjMwMQptc2dpZCAiXG5SZWNvZ25pemVkIG1vZGlmaWVyIG5hbWVzIGFuZCB0aGVp
+ciBjb2x1bW4gbnVtYmVyczpcbiIKbXNnc3RyICJcbklnZW5r5G5kYSBtb2RpZmllcmFybmFtbiBv
+Y2ggZGVyYXMga29sdW1ubnVtbWVyOlxuIgoKIzogc3JjL2R1bXBrZXlzLmM6MzY0CiMsIGMtZm9y
+bWF0Cm1zZ2lkICIjIG5vdCBhbHRfaXNfbWV0YTogb24ga2V5bWFwICVkIGtleSAlZCBpcyBib3Vu
+ZCB0byIKbXNnc3RyICIjIGludGUgYWx0X2lzX21ldGE6IGkgdGFuZ2VudHRhYmVsbCAlZCDkciB0
+YW5nZW50ICVkIGJ1bmRlbiB0aWxsIgoKIzogc3JjL2R1bXBrZXlzLmM6NDM5Cm1zZ2lkICJpbXBv
+c3NpYmxlOiBub3QgbWV0YT9cbiIKbXNnc3RyICJvbfZqbGlndDogaW50ZSBtZXRhP1xuIgoKIzog
+c3JjL2R1bXBrZXlzLmM6NDk2CiMsIGMtZm9ybWF0Cm1zZ2lkICJLREdLQlNFTlQgZmFpbGVkIGF0
+IGluZGV4ICVkOiAiCm1zZ3N0ciAiS0RHS0JTRU5UIG1pc3NseWNrYWRlcyB2aWQgaW5kZXggJWQ6
+ICIKCiM6IHNyYy9kdW1wa2V5cy5jOjUxNgojLCBjLWZvcm1hdAptc2dpZCAiZHVtcGtleXMgdmVy
+c2lvbiAlcyIKbXNnc3RyICJkdW1wa2V5cyB2ZXJzaW9uICVzIgoKIzogc3JjL2R1bXBrZXlzLmM6
+NTE3Cm1zZ2lkICIiCiJcbiIKInVzYWdlOiBkdW1wa2V5cyBbb3B0aW9ucy4uLl1cbiIKIlxuIgoi
+dmFsaWQgb3B0aW9ucyBhcmU6XG4iCiJcbiIKIlx0LWggLS1oZWxwXHQgICAgZGlzcGxheSB0aGlz
+IGhlbHAgdGV4dFxuIgoiXHQtaSAtLXNob3J0LWluZm9cdCAgICBkaXNwbGF5IGluZm9ybWF0aW9u
+IGFib3V0IGtleWJvYXJkIGRyaXZlclxuIgoiXHQtbCAtLWxvbmctaW5mb1x0ICAgIGRpc3BsYXkg
+YWJvdmUgYW5kIHN5bWJvbHMga25vd24gdG8gbG9hZGtleXNcbiIKIlx0LW4gLS1udW1lcmljXHQg
+ICAgZGlzcGxheSBrZXl0YWJsZSBpbiBoZXhhZGVjaW1hbCBub3RhdGlvblxuIgoiXHQtZiAtLWZ1
+bGwtdGFibGVcdCAgICBkb24ndCB1c2Ugc2hvcnQtaGFuZCBub3RhdGlvbnMsIG9uZSByb3cgcGVy
+IGtleWNvZGVcbiIKIlx0LTEgLS1zZXBhcmF0ZS1saW5lcyBvbmUgbGluZSBwZXIgKG1vZGlmaWVy
+LGtleWNvZGUpIHBhaXJcbiIKIlx0ICAgLS1mdW5jcy1vbmx5XHQgICAgZGlzcGxheSBvbmx5IHRo
+ZSBmdW5jdGlvbiBrZXkgc3RyaW5nc1xuIgoiXHQgICAtLWtleXMtb25seVx0ICAgIGRpc3BsYXkg
+b25seSBrZXkgYmluZGluZ3NcbiIKIlx0ICAgLS1jb21wb3NlLW9ubHkgICBkaXNwbGF5IG9ubHkg
+Y29tcG9zZSBrZXkgY29tYmluYXRpb25zXG4iCiJcdC1jIC0tY2hhcnNldD0iCm1zZ3N0ciAiIgoi
+XG4iCiJhbnbkbmRuaW5nOiBkdW1wa2V5cyBbZmxhZ2dvci4uLl1cbiIKIlxuIgoiZ2lsdGlnYSBm
+bGFnZ29yIORyOlxuIgoiXG4iCiJcdC1oIC0taGVscFx0ICAgIHZpc2EgZGVuIGjkciBoauRscHRl
+eHRlblxuIgoiXHQtaSAtLXNob3J0LWluZm9cdCAgICB2aXNhIGluZm9ybWF0aW9uIG9tIHRhbmdl
+bnRib3Jkc2RyaXZ1dGluXG4iCiJcdC1sIC0tbG9uZy1pbmZvXHQgICAgdmlzYSBvdmFuc3TlZW5k
+ZSBvY2ggc3ltYm9sZXIga+RuZGEgZvZyIGxvYWRrZXlzXG4iCiJcdC1uIC0tbnVtZXJpY1x0ICAg
+IHZpc2EgdGFuZ2VudHRhYmVsbCBpIGhleGFkZWNpbWFsIG5vdGF0aW9uXG4iCiJcdC1mIC0tZnVs
+bC10YWJsZVx0ICAgIGFuduRuZCBpbnRlIGtvcnQgbm90YXRpb24sIGVuIHJhZCBwZXIgdGFuZ2Vu
+dGtvZFxuIgoiXHQtMSAtLXNlcGFyYXRlLWxpbmVzIGVuIHJhZCBwZXIgKG1vZGlmaWVyYXJlLHRh
+bmdlbnRrb2QpLXBhclxuIgoiXHQgICAtLWZ1bmNzLW9ubHlcdCAgICB2aXNhIGJhcmEgc3Ry5G5n
+YXIgZvZyIGZ1bmt0aW9uc3RhbmdlbnRlclxuIgoiXHQgICAtLWtleXMtb25seVx0ICAgIHZpc2Eg
+YmFyYSB0YW5nZW50YmluZG5pbmdhclxuIgoiXHQgICAtLWNvbXBvc2Wtb25seSAgIHZpc2EgYmFy
+YSBcImNvbXBvc2VcIi10YW5nZW50a29tYmluYXRpb25lclxuIgoiXHQtYyAtLWNoYXJzZXQ9IgoK
+Izogc3JjL2R1bXBrZXlzLmM6NTM0Cm1zZ2lkICIiCiJcdFx0XHQgICAgaW50ZXJwcmV0IGNoYXJh
+Y3RlciBhY3Rpb24gY29kZXMgdG8gYmUgZnJvbSB0aGVcbiIKIlx0XHRcdCAgICBzcGVjaWZpZWQg
+Y2hhcmFjdGVyIHNldFxuIgptc2dzdHIgIiIKIlx0XHRcdCAgICB0b2xrYSB0ZWNrZW5oYW5kbGlu
+Z3Nrb2RlciBzb20gb20gZGUg5HIgZnLlbiBkZW5cbiIKIlx0XHRcdCAgICBhbmdpdm5hIHRlY2tl
+bnVwcHPkdHRuaW5nZW5cbiIKCiM6IHNyYy9maW5kZmlsZS5jOjQzCiMsIGMtZm9ybWF0Cm1zZ2lk
+ICJlcnJvciBleGVjdXRpbmcgICVzXG4iCm1zZ3N0ciAiZmVsIHZpZCBleGVrdmVyaW5nIGF2ICVz
+XG4iCgojOiBzcmMvZ2V0a2V5Y29kZXMuYzoxOAptc2dpZCAidXNhZ2U6IGdldGtleWNvZGVzXG4i
+Cm1zZ3N0ciAiYW525G5kbmluZzogZ2V0a2V5Y29kZXNcbiIKCiM6IHNyYy9nZXRrZXljb2Rlcy5j
+OjM5Cm1zZ2lkICJQbGFpbiBzY2FuY29kZXMgeHggKGhleCkgdmVyc3VzIGtleWNvZGVzIChkZWMp
+XG4iCm1zZ3N0ciAiRW5rbGEgYXZs5HNuaW5nc2tvZGVyIHh4IChoZXgpIG1vdCB0YW5nZW50a29k
+ZXIgKGRlYylcbiIKCiM6IHNyYy9nZXRrZXljb2Rlcy5jOjQwCm1zZ2lkICIwIGlzIGFuIGVycm9y
+OyBmb3IgMS04OCAoMHgwMS0weDU4KSBzY2FuY29kZSBlcXVhbHMga2V5Y29kZVxuIgptc2dzdHIg
+IjAg5HIgZXR0IGZlbCwgZvZyIDEtODggKDB4MDEtMHg1OCkg5HIgYXZs5HNuaW5nc2tvZGVuIGxp
+a2EgbWVkIHRhbmdlbnRrb2RlblxuIgoKIzogc3JjL2dldGtleWNvZGVzLmM6NDQKbXNnaWQgIlxu
+XG5Fc2NhcGVkIHNjYW5jb2RlcyBlMCB4eCAoaGV4KVxuIgptc2dzdHIgIlxuXG5VdHZpZGdhZGUg
+YXZs5HNuaW5nc2tvZGVyIGUwIHh4IChoZXgpXG4iCgojOiBzcmMvZ2V0a2V5Y29kZXMuYzo2NAoj
+LCBjLWZvcm1hdAptc2dpZCAiZmFpbGVkIHRvIGdldCBrZXljb2RlIGZvciBzY2FuY29kZSAweCV4
+XG4iCm1zZ3N0ciAibWlzc2x5Y2thZGVzIG1lZCBhdHQgaORtdGEgdGFuZ2VudGtvZGVuIGb2ciBh
+dmzkc25pbmdza29kIDB4JXhcbiIKCiM6IHNyYy9nZXR1bmltYXAuYzo0OQojLCBjLWZvcm1hdApt
+c2dpZCAiIgoiVXNhZ2U6XG4iCiJcdCVzIFstc11cbiIKbXNnc3RyICIiCiJBbnbkbmRuaW5nOlxu
+IgoiXHQlcyBbLXNdXG4iCgojOiBzcmMva2JkX21vZGUuYzoxOAptc2dpZCAidXNhZ2U6IGtiZF9t
+b2RlIFstYXwtdXwta3wtc11cbiIKbXNnc3RyICJhbnbkbmRuaW5nOiBrYmRfbW9kZSBbLWF8LXV8
+LWt8LXNdXG4iCgojOiBzcmMva2JkX21vZGUuYzo0MQptc2dpZCAia2JkX21vZGU6IGVycm9yIHJl
+YWRpbmcga2V5Ym9hcmQgbW9kZVxuIgptc2dzdHIgImtiZF9tb2RlOiBmZWwgdmlkIGzkc25pbmcg
+YXYgdGFuZ2VudGJvcmRzbORnZVxuIgoKIzogc3JjL2tiZF9tb2RlLmM6NDYKbXNnaWQgIlRoZSBr
+ZXlib2FyZCBpcyBpbiByYXcgKHNjYW5jb2RlKSBtb2RlXG4iCm1zZ3N0ciAiVGFuZ2VudGJvcmRl
+dCDkciBpIHLldHQgKGF2bORzbmluZ3Nrb2RzLSls5GdlXG4iCgojOiBzcmMva2JkX21vZGUuYzo0
+OQptc2dpZCAiVGhlIGtleWJvYXJkIGlzIGluIG1lZGl1bXJhdyAoa2V5Y29kZSkgbW9kZVxuIgpt
+c2dzdHIgIlRhbmdlbnRib3JkZXQg5HIgaSBoYWx2cuV0dCAodGFuZ2VudGtvZHMtKWzkZ2VcbiIK
+CiM6IHNyYy9rYmRfbW9kZS5jOjUyCm1zZ2lkICJUaGUga2V5Ym9hcmQgaXMgaW4gdGhlIGRlZmF1
+bHQgKEFTQ0lJKSBtb2RlXG4iCm1zZ3N0ciAiVGFuZ2VudGJvcmRldCDkciBpIHN0YW5kYXJkbORn
+ZSAoQVNDSUkpXG4iCgojOiBzcmMva2JkX21vZGUuYzo1NQptc2dpZCAiVGhlIGtleWJvYXJkIGlz
+IGluIFVuaWNvZGUgKFVURi04KSBtb2RlXG4iCm1zZ3N0ciAiVGFuZ2VudGJvcmRldCDkciBpIFVu
+aWNvZGVs5GdlIChVVEYtOClcbiIKCiM6IHNyYy9rYmRfbW9kZS5jOjU4Cm1zZ2lkICJUaGUga2V5
+Ym9hcmQgaXMgaW4gc29tZSB1bmtub3duIG1vZGVcbiIKbXNnc3RyICJUYW5nZW50Ym9yZGV0IORy
+IGkgbuVnb3Qgb2vkbnQgbORnZVxuIgoKIzogc3JjL2tiZF9tb2RlLmM6NzYKIywgYy1mb3JtYXQK
+bXNnaWQgIiVzOiBlcnJvciBzZXR0aW5nIGtleWJvYXJkIG1vZGVcbiIKbXNnc3RyICIlczogZmVs
+IG7kciB0YW5nZW50Ym9yZHNs5GdlIHNhdHRlc1xuIgoKIzogc3JjL2tiZHJhdGUuYzoxMzkgc3Jj
+L2tiZHJhdGUuYzoyNzgKIywgYy1mb3JtYXQKbXNnaWQgIlR5cGVtYXRpYyBSYXRlIHNldCB0byAl
+LjFmIGNwcyAoZGVsYXkgPSAlZCBtcylcbiIKbXNnc3RyICJVcHByZXBuaW5nc2hhc3RpZ2hldCBz
+YXR0IHRpbGwgJS4xZiB0L3MgKGb2cmRy9mpuaW5nID0gJWQgbXMpXG4iCgojOiBzcmMva2JkcmF0
+ZS5jOjIyMwptc2dpZCAiVXNhZ2U6IGtiZHJhdGUgWy1WXSBbLXNdIFstciByYXRlXSBbLWQgZGVs
+YXldXG4iCm1zZ3N0ciAiQW525G5kbmluZzoga2JkcmF0ZSBbLVZdIFstc10gWy1yIGZyZWt2ZW5z
+XSBbLWQgZvZyZHL2am5pbmddXG4iCgojOiBzcmMva2JkcmF0ZS5jOjI1Mwptc2dpZCAiQ2Fubm90
+IG9wZW4gL2Rldi9wb3J0Igptc2dzdHIgIkthbiBpbnRlIPZwcG5hIC9kZXYvcG9ydCIKCiM6IHNy
+Yy9rZGZvbnRvcC5jOjE5Mwptc2dpZCAiYnVnOiBnZXRmb250IGNhbGxlZCB3aXRoIGNvdW50PDI1
+NlxuIgptc2dzdHIgImZlbDogZ2V0Zm9udCBhbnJvcGFkIG1lZCBjb3VudDwyNTZcbiIKCiM6IHNy
+Yy9rZGZvbnRvcC5jOjI1MiBzcmMveG1hbGxvYy5jOjE0CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczog
+b3V0IG9mIG1lbW9yeVxuIgptc2dzdHIgIiVzOiBtaW5uZXQgc2x1dFxuIgoKIzogc3JjL2tzeW1z
+LmM6MTY3MAojLCBjLWZvcm1hdAptc2dpZCAidW5rbm93biBjaGFyc2V0ICVzIC0gaWdub3Jpbmcg
+Y2hhcnNldCByZXF1ZXN0XG4iCm1zZ3N0ciAib2vkbmQgdGVja2VudXBwc+R0dG5pbmcgJXMgLSBp
+Z25vcmVyYXIgYmVn5HJhbiBvbSB0ZWNrZW51cHBz5HR0bmluZ1xuIgoKIzogc3JjL2tzeW1zLmM6
+MTc0MgojLCBjLWZvcm1hdAptc2dpZCAiYXNzdW1pbmcgaXNvLTg4NTktMSAlc1xuIgptc2dzdHIg
+ImFudGFyIGlzby04ODU5LTEgJXNcbiIKCiM6IHNyYy9rc3ltcy5jOjE3NDkKIywgYy1mb3JtYXQK
+bXNnaWQgImFzc3VtaW5nIGlzby04ODU5LTE1ICVzXG4iCm1zZ3N0ciAiYW50YXIgaXNvLTg4NTkt
+MTUgJXNcbiIKCiM6IHNyYy9rc3ltcy5jOjE3NTYKIywgYy1mb3JtYXQKbXNnaWQgImFzc3VtaW5n
+IGlzby04ODU5LTIgJXNcbiIKbXNnc3RyICJhbnRhciBpc28tODg1OS0yICVzXG4iCgojOiBzcmMv
+a3N5bXMuYzoxNzYzCiMsIGMtZm9ybWF0Cm1zZ2lkICJhc3N1bWluZyBpc28tODg1OS0zICVzXG4i
+Cm1zZ3N0ciAiYW50YXIgaXNvLTg4NTktMyAlc1xuIgoKIzogc3JjL2tzeW1zLmM6MTc3MAojLCBj
+LWZvcm1hdAptc2dpZCAiYXNzdW1pbmcgaXNvLTg4NTktNCAlc1xuIgptc2dzdHIgImFudGFyIGlz
+by04ODU5LTQgJXNcbiIKCiM6IHNyYy9rc3ltcy5jOjE3NzUKIywgYy1mb3JtYXQKbXNnaWQgInVu
+a25vd24ga2V5c3ltICclcydcbiIKbXNnc3RyICJva+RuZCB0ZWNrZW5zeW1ib2wgXCIlc1wiXG4i
+CgojOiBzcmMva3N5bXMuYzoxODEwCiMsIGMtZm9ybWF0Cm1zZ2lkICJwbHVzIGJlZm9yZSAlcyBp
+Z25vcmVkXG4iCm1zZ3N0ciAicGx1cyBm9nJlICVzIGlnbm9yZXJhdFxuIgoKIzogc3JjL2xvYWR1
+bmltYXAuYzo2MgojLCBjLWZvcm1hdAptc2dpZCAidXNhZ2U6ICVzIFstbyBtYXAub3JpZ10gW21h
+cC1maWxlXVxuIgptc2dzdHIgImFuduRuZG5pbmc6ICVzIFstbyBvcmlnaW5hbHRhYmVsbF0gW3Rh
+YmVsbGZpbF1cbiIKCiM6IHNyYy9sb2FkdW5pbWFwLmM6MTUyIHNyYy9sb2FkdW5pbWFwLmM6MTYz
+CiMsIGMtZm9ybWF0Cm1zZ2lkICJCYWQgaW5wdXQgbGluZTogJXNcbiIKbXNnc3RyICJGZWxha3Rp
+ZyBpbmRhdGFyYWQ6ICVzXG4iCgojOiBzcmMvbG9hZHVuaW1hcC5jOjE3MgojLCBjLWZvcm1hdApt
+c2dpZCAiJXM6IEdseXBoIG51bWJlciAoMHgleCkgbGFyZ2VyIHRoYW4gZm9udCBsZW5ndGhcbiIK
+bXNnc3RyICIlczogVGVja2VubnVtbWVyICgweCV4KSBzdPZycmUg5G4gdHlwc25pdHRzbORuZ2Rc
+biIKCiM6IHNyYy9sb2FkdW5pbWFwLmM6MTc4CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogQmFkIGVu
+ZCBvZiByYW5nZSAoMHgleClcbiIKbXNnc3RyICIlczogRmVsYWt0aWd0IHNsdXQgcOUgaW50ZXJ2
+YWxsICgweCV4KVxuIgoKIzogc3JjL2xvYWR1bmltYXAuYzoyMDggc3JjL3BzZnh0YWJsZS5jOjE3
+NQojLCBjLWZvcm1hdAptc2dpZCAiJXM6IEJhZCBVbmljb2RlIHJhbmdlIGNvcnJlc3BvbmRpbmcg
+dG8gZm9udCBwb3NpdGlvbiByYW5nZSAweCV4LTB4JXhcbiIKbXNnc3RyICIlczogRmVsYWt0aWd0
+IFVuaWNvZGVpbnRlcnZhbGwgc29tIG1vdHN2YXJhciB0eXBzbml0dHNwb3NpdGlvbnNpbnRlcnZh
+bGwgMHgleC0weCV4XG4iCgojOiBzcmMvbG9hZHVuaW1hcC5jOjIxNSBzcmMvcHNmeHRhYmxlLmM6
+MTgyCiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogVW5pY29kZSByYW5nZSBVKyV4LVUrJXggbm90IG9m
+IHRoZSBzYW1lIGxlbmd0aCBhcyBmb250IHBvc2l0aW9uIHJhbmdlIDB4JXgtMHgleFxuIgptc2dz
+dHIgIiVzOiBVbmljb2RlaW50ZXJ2YWxsIFUrJXgtVSsleCDkciBpbnRlIGF2IHNhbW1hIGzkbmdk
+IHNvbSB0eXBzbml0dHNwb3NpdGlvbnNpbnRlcnZhbGwgMHgleC0weCV4XG4iCgojOiBzcmMvbG9h
+ZHVuaW1hcC5jOjIzNCBzcmMvcHNmeHRhYmxlLmM6MjAzCiMsIGMtZm9ybWF0Cm1zZ2lkICIlczog
+dHJhaWxpbmcganVuayAoJXMpIGlnbm9yZWRcbiIKbXNnc3RyICIlczogZWZ0ZXJm9mxqYW5kZSBz
+a3LkcCAoJXMpIGlnbm9yZXJhdFxuIgoKIzogc3JjL2xvYWR1bmltYXAuYzoyNTEKIywgYy1mb3Jt
+YXQKbXNnaWQgIkxvYWRpbmcgdW5pY29kZSBtYXAgZnJvbSBmaWxlICVzXG4iCm1zZ3N0ciAiTORz
+ZXIgaW4gdW5pY29kZXRhYmVsbCBmcuVuIGZpbCAlc1xuIgoKIzogc3JjL2xvYWR1bmltYXAuYzoy
+NTcKIywgYy1mb3JtYXQKbXNnaWQgIiVzOiAlczogV2FybmluZzogbGluZSB0b28gbG9uZ1xuIgpt
+c2dzdHIgIiVzOiAlczogVmFybmluZzogcmFkZW4g5HIgZvZyIGzlbmdcbiIKCiM6IHNyYy9sb2Fk
+dW5pbWFwLmM6MjY3CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiIlczogbm90IGxvYWRpbmcgZW1wdHkg
+dW5pbWFwXG4iCiIoaWYgeW91IGluc2lzdDogdXNlIG9wdGlvbiAtZiB0byBvdmVycmlkZSlcbiIK
+bXNnc3RyICIiCiIlczogbORzZXIgaW50ZSBpbiB0b20gdW5pdGFiZWxsXG4iCiIob20gZHUgaW5z
+aXN0ZXJhcjogYW525G5kIGZsYWdnYW4gLWYgZvZyIGF0dCDlc2lkb3PkdHRhKVxuIgoKIzogc3Jj
+L2xvYWR1bmltYXAuYzoyODgKbXNnaWQgImVudHJ5Igptc2dzdHIgInBvc3QiCgojOiBzcmMvbG9h
+ZHVuaW1hcC5jOjI4OAptc2dpZCAiZW50cmllcyIKbXNnc3RyICJwb3N0ZXIiCgojOiBzcmMvbG9h
+ZHVuaW1hcC5jOjMxNAojLCBjLWZvcm1hdAptc2dpZCAiU2F2ZWQgdW5pY29kZSBtYXAgb24gYCVz
+J1xuIgptc2dzdHIgIlNwYXJhZGUgdW5pY29kZXRhYmVsbCB0aWxsIFwiJXNcIlxuIgoKIzogc3Jj
+L2xvYWR1bmltYXAuYzozMzQKbXNnaWQgIkFwcGVuZGVkIFVuaWNvZGUgbWFwXG4iCm1zZ3N0ciAi
+TGFkZSB0aWxsIFVuaWNvZGV0YWJlbGxcbiIKCiM6IHNyYy9tYXBzY3JuLmM6NjUKIywgYy1mb3Jt
+YXQKbXNnaWQgInVzYWdlOiAlcyBbLXZdIFstbyBtYXAub3JpZ10gbWFwLWZpbGVcbiIKbXNnc3Ry
+ICJhbnbkbmRuaW5nOiAlcyBbLXZdIFstbyBvcmlnaW5hbHRhYmVsbF0gdGFiZWxsZmlsXG4iCgoj
+OiBzcmMvbWFwc2Nybi5jOjEzMAojLCBjLWZvcm1hdAptc2dpZCAibWFwc2NybjogY2Fubm90IG9w
+ZW4gbWFwIGZpbGUgXyVzX1xuIgptc2dzdHIgIm1hcHNjcm46IGthbiBpbnRlIPZwcG5hIHRhYmVs
+bGZpbCBfJXNfXG4iCgojOiBzcmMvbWFwc2Nybi5jOjEzNgptc2dpZCAiQ2Fubm90IHN0YXQgbWFw
+IGZpbGUiCm1zZ3N0ciAiS2FuIGludGUgdGEgc3RhdHVzIHDlIHRhYmVsbGZpbCIKCiM6IHNyYy9t
+YXBzY3JuLmM6MTQxCiMsIGMtZm9ybWF0Cm1zZ2lkICJMb2FkaW5nIGJpbmFyeSBkaXJlY3QtdG8t
+Zm9udCBzY3JlZW4gbWFwIGZyb20gZmlsZSAlc1xuIgptc2dzdHIgIkzkc2VyIGluIGJpbuRyIGRp
+cmVrdC10aWxsLXR5cHNuaXR0LXNr5HJtdGFiZWxsIGZy5W4gZmlsICVzXG4iCgojOiBzcmMvbWFw
+c2Nybi5jOjE0NiBzcmMvbWFwc2Nybi5jOjE1NwojLCBjLWZvcm1hdAptc2dpZCAiRXJyb3IgcmVh
+ZGluZyBtYXAgZnJvbSBmaWxlIGAlcydcbiIKbXNnc3RyICJGZWwgdmlkIGzkc25pbmcgYXYgdGFi
+ZWxsIGZy5W4gZmlsIFwiJXNcIlxuIgoKIzogc3JjL21hcHNjcm4uYzoxNTIKIywgYy1mb3JtYXQK
+bXNnaWQgIkxvYWRpbmcgYmluYXJ5IHVuaWNvZGUgc2NyZWVuIG1hcCBmcm9tIGZpbGUgJXNcbiIK
+bXNnc3RyICJM5HNlciBpbiBiaW7kciB1bmljb2RlLXNr5HJtZmlsIGZy5W4gZmlsICVzXG4iCgoj
+OiBzcmMvbWFwc2Nybi5jOjE2NAojLCBjLWZvcm1hdAptc2dpZCAiTG9hZGluZyBzeW1ib2xpYyBz
+Y3JlZW4gbWFwIGZyb20gZmlsZSAlc1xuIgptc2dzdHIgIkzkc2VyIGluIHN5bWJvbGlzayBza+Ry
+bXRhYmVsbCBmcuVuIGZpbCAlc1xuIgoKIzogc3JjL21hcHNjcm4uYzoxNjgKIywgYy1mb3JtYXQK
+bXNnaWQgIkVycm9yIHBhcnNpbmcgc3ltYm9saWMgbWFwIGZyb20gYCVzJywgbGluZSAlZFxuIgpt
+c2dzdHIgIkZlbCB2aWQgdG9sa25pbmcgYXYgc3ltYm9saXNrIHRhYmVsbCBmcuVuIFwiJXNcIiwg
+cmFkICVkXG4iCgojOiBzcmMvbWFwc2Nybi5jOjI3MiBzcmMvbWFwc2Nybi5jOjI3Nwptc2dpZCAi
+RXJyb3Igd3JpdGluZyBtYXAgdG8gZmlsZVxuIgptc2dzdHIgIkZlbCB2aWQgc2tyaXZuaW5nIGF2
+IHRhYmVsbCB0aWxsIGZpbFxuIgoKIzogc3JjL21hcHNjcm4uYzoyODEKbXNnaWQgIkNhbm5vdCBy
+ZWFkIGNvbnNvbGUgbWFwXG4iCm1zZ3N0ciAiS2FuIGludGUgbORzYSBrb25zb2xsdGFiZWxsXG4i
+CgojOiBzcmMvbWFwc2Nybi5jOjI4NwojLCBjLWZvcm1hdAptc2dpZCAiU2F2ZWQgc2NyZWVuIG1h
+cCBpbiBgJXMnXG4iCm1zZ3N0ciAiU3BhcmFkZSBza+RybXRhYmVsbCBpIFwiJXNcIlxuIgoKIzog
+c3JjL3BzZmZvbnRvcC5jOjY2CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogc2hvcnQgdWNzMiB1bmlj
+b2RlIHRhYmxlXG4iCm1zZ3N0ciAiJXM6IGtvcnQgdWNzMi11bmljb2RldGFiZWxsXG4iCgojOiBz
+cmMvcHNmZm9udG9wLmM6ODcKIywgYy1mb3JtYXQKbXNnaWQgIiVzOiBzaG9ydCB1dGY4IHVuaWNv
+ZGUgdGFibGVcbiIKbXNnc3RyICIlczoga29ydCB1dGY4LXVuaWNvZGV0YWJlbGxcbiIKCiM6IHNy
+Yy9wc2Zmb250b3AuYzo5MAojLCBjLWZvcm1hdAptc2dpZCAiJXM6IGJhZCB1dGY4XG4iCm1zZ3N0
+ciAiJXM6IGZlbGFrdGlnIHV0ZjhcbiIKCiM6IHNyYy9wc2Zmb250b3AuYzo5MwojLCBjLWZvcm1h
+dAptc2dpZCAiJXM6IHVua25vd24gdXRmOCBlcnJvclxuIgptc2dzdHIgIiVzOiBva+RudCB1dGY4
+LWZlbFxuIgoKIzogc3JjL3BzZmZvbnRvcC5jOjEyNAojLCBjLWZvcm1hdAptc2dpZCAiJXM6IHNo
+b3J0IHVuaWNvZGUgdGFibGVcbiIKbXNnc3RyICIlczoga29ydCB1bmljb2RldGFiZWxsXG4iCgoj
+OiBzcmMvcHNmZm9udG9wLmM6MjA0CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogRXJyb3IgcmVhZGlu
+ZyBpbnB1dCBmb250Igptc2dzdHIgIiVzOiBGZWwgdmlkIGzkc25pbmcgYXYgaW5kYXRhdHlwc25p
+dHQiCgojOiBzcmMvcHNmZm9udG9wLmM6MjE4CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogQmFkIGNh
+bGwgb2YgcmVhZHBzZmZvbnRcbiIKbXNnc3RyICIlczogRmVsYWt0aWd0IGFucm9wIGF2IHJlYWRw
+c2Zmb250XG4iCgojOiBzcmMvcHNmZm9udG9wLmM6MjMzCiMsIGMtZm9ybWF0Cm1zZ2lkICIlczog
+VW5zdXBwb3J0ZWQgcHNmIGZpbGUgbW9kZSAoJWQpXG4iCm1zZ3N0ciAiJXM6IHBzZi1maWxs5Gdl
+ICglZCkgc3T2ZHMgaW50ZVxuIgoKIzogc3JjL3BzZmZvbnRvcC5jOjI1MQojLCBjLWZvcm1hdApt
+c2dpZCAiJXM6IFVuc3VwcG9ydGVkIHBzZiB2ZXJzaW9uICglZClcbiIKbXNnc3RyICIlczogcHNm
+LXZlcnNpb24gKCVkKSBzdPZkcyBpbnRlXG4iCgojOiBzcmMvcHNmZm9udG9wLmM6MjY3CiMsIGMt
+Zm9ybWF0Cm1zZ2lkICIlczogemVybyBpbnB1dCBmb250IGxlbmd0aD9cbiIKbXNnc3RyICIlczog
+bORuZ2QgYXYgaW5kYXRhdHlwc25pdHQg5HIgbm9sbD9cbiIKCiM6IHNyYy9wc2Zmb250b3AuYzoy
+NzIKIywgYy1mb3JtYXQKbXNnaWQgIiVzOiB6ZXJvIGlucHV0IGNoYXJhY3RlciBzaXplP1xuIgpt
+c2dzdHIgIiVzOiBzdG9ybGVrIGF2IGluZGF0YXRlY2tlbiDkciBub2xsP1xuIgoKIzogc3JjL3Bz
+ZmZvbnRvcC5jOjI3OAojLCBjLWZvcm1hdAptc2dpZCAiJXM6IElucHV0IGZpbGU6IGJhZCBpbnB1
+dCBsZW5ndGggKCVkKVxuIgptc2dzdHIgIiVzOiBJbmRhdGFmaWw6IG9naWx0aWcgaW5kYXRhbORu
+Z2QgKCVkKVxuIgoKIzogc3JjL3BzZmZvbnRvcC5jOjMxMAojLCBjLWZvcm1hdAptc2dpZCAiJXM6
+IElucHV0IGZpbGU6IHRyYWlsaW5nIGdhcmJhZ2VcbiIKbXNnc3RyICIlczogSW5kYXRhZmlsOiBl
+ZnRlcmb2bGphbmRlIHNrcuRwXG4iCgojOiBzcmMvcHNmZm9udG9wLmM6MzQ4CiMsIGMtZm9ybWF0
+Cm1zZ2lkICJhcHBlbmR1bmljb2RlOiBpbGxlZ2FsIHVuaWNvZGUgJXVcbiIKbXNnc3RyICJhcHBl
+bmR1bmljb2RlOiBvZ2lsdGlnIHVuaWNvZGUgJXVcbiIKCiM6IHNyYy9wc2Zmb250b3AuYzo0MzQK
+bXNnaWQgIkNhbm5vdCB3cml0ZSBmb250IGZpbGUgaGVhZGVyIgptc2dzdHIgIkthbiBpbnRlIHNr
+cml2YSB0eXBzbml0dHNmaWxzaHV2dWQiCgojOiBzcmMvcHNmeHRhYmxlLmM6MTA5CiMsIGMtZm9y
+bWF0Cm1zZ2lkICIlczogV2FybmluZzogbGluZSB0b28gbG9uZ1xuIgptc2dzdHIgIiVzOiBWYXJu
+aW5nOiByYWRlbiDkciBm9nIgbOVuZ1xuIgoKIzogc3JjL3BzZnh0YWJsZS5jOjEyMyBzcmMvcHNm
+eHRhYmxlLmM6MTMzCiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogQmFkIGlucHV0IGxpbmU6ICVzXG4i
+Cm1zZ3N0ciAiJXM6IEZlbGFrdGlnIGluZGF0YXJhZDogJXNcbiIKCiM6IHNyYy9wc2Z4dGFibGUu
+YzoxNDIKIywgYy1mb3JtYXQKbXNnaWQgIiVzOiBHbHlwaCBudW1iZXIgKDB4JWx4KSBwYXN0IGVu
+ZCBvZiBmb250XG4iCm1zZ3N0ciAiJXM6IEdseWZudW1tZXIgKDB4JWx4KSBib3J0b20gc2x1dGV0
+IGF2IHR5cHNuaXR0ZXRcbiIKCiM6IHNyYy9wc2Z4dGFibGUuYzoxNDcKIywgYy1mb3JtYXQKbXNn
+aWQgIiVzOiBCYWQgZW5kIG9mIHJhbmdlICgweCVseClcbiIKbXNnc3RyICIlczogRmVsYWt0aWd0
+IHNsdXQgYXYgaW50ZXJ2YWxsICgweCVseClcbiIKCiM6IHNyYy9wc2Z4dGFibGUuYzoxNjYKIywg
+Yy1mb3JtYXQKbXNnaWQgIiVzOiBDb3JyZXNwb25kaW5nIHRvIGEgcmFuZ2Ugb2YgZm9udCBwb3Np
+dGlvbnMsIHRoZXJlIHNob3VsZCBiZSBhIFVuaWNvZGUgcmFuZ2VcbiIKbXNnc3RyICIlczogVGls
+bCBldHQgbW90c3ZhcmFuZGUgaW50ZXJ2YWxsIGF2IHR5cHNuaXR0c3Bvc2l0aW9uZXIgYm9yZGUg
+ZGV0IGZpbm5hcyBldHQgVW5pY29kZWludGVydmFsbFxuIgoKIzogc3JjL3BzZnh0YWJsZS5jOjI1
+NQojLCBjLWZvcm1hdAptc2dpZCAiIgoiVXNhZ2U6XG4iCiJcdCVzIGluZm9udCBpbnRhYmxlIG91
+dGZvbnRcbiIKbXNnc3RyICIiCiJBbnbkbmRuaW5nOlxuIgoiXHQlcyBpbnR5cHNuaXR0IGludGFi
+ZWxsIHV0dHlwc25pdHRcbiIKCiM6IHNyYy9wc2Z4dGFibGUuYzoyNjQKIywgYy1mb3JtYXQKbXNn
+aWQgIiIKIlVzYWdlOlxuIgoiXHQlcyBpbmZvbnQgW291dHRhYmxlXVxuIgptc2dzdHIgIiIKIkFu
+duRuZG5pbmc6XG4iCiJcdCVzIGludHlwc25pdHQgW3V0dGFiZWxsXVxuIgoKIzogc3JjL3BzZnh0
+YWJsZS5jOjI3MwojLCBjLWZvcm1hdAptc2dpZCAiIgoiVXNhZ2U6XG4iCiJcdCVzIGluZm9udCBv
+dXRmb250XG4iCm1zZ3N0ciAiIgoiQW525G5kbmluZzpcbiIKIlx0JXMgaW50eXBzbml0dCB1dHR5
+cHNuaXR0XG4iCgojOiBzcmMvcHNmeHRhYmxlLmM6Mjk4CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJV
+c2FnZTpcbiIKIlx0JXMgWy1pIGluZm9udF0gWy1vIG91dGZvbnRdIFstaXQgaW50YWJsZV0gWy1v
+dCBvdXR0YWJsZV0gWy1udF1cbiIKbXNnc3RyICIiCiJBbnbkbmRuaW5nOlxuIgoiXHQlcyBbLWkg
+aW50eXBzbml0dF0gWy1vIHV0dHlwc25pdHRdIFstaXQgaW50YWJlbGxdIFstb3QgdXR0YWJlbGxd
+IFstbnRdXG4iCgojOiBzcmMvcHNmeHRhYmxlLmM6MzU4CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczog
+QmFkIG1hZ2ljIG51bWJlciBvbiAlc1xuIgptc2dzdHIgIiVzOiBGZWxha3RpZ3QgbWFnaXNrdCBu
+dW1tZXIgcOUgJXNcbiIKCiM6IHNyYy9wc2Z4dGFibGUuYzozNzcKIywgYy1mb3JtYXQKbXNnaWQg
+IiVzOiBwc2YgZmlsZSB3aXRoIHVua25vd24gbWFnaWNcbiIKbXNnc3RyICIlczogcHNmLWZpbCBt
+ZWQgb2vkbmQgbWFnaVxuIgoKIzogc3JjL3BzZnh0YWJsZS5jOjM5MwojLCBjLWZvcm1hdAptc2dp
+ZCAiJXM6IGlucHV0IGZvbnQgZG9lcyBub3QgaGF2ZSBhbiBpbmRleFxuIgptc2dzdHIgIiVzOiBp
+bmRhdGF0eXBzbml0dGV0IGhhciBpbnRlIG7lZ290IGluZGV4XG4iCgojOiBzcmMvcmVzaXplY29u
+cy5jOjE1MwojLCBjLWZvcm1hdAptc2dpZCAicmVzaXplY29uczogY2Fubm90IGZpbmQgdmlkZW9t
+b2RlIGZpbGUgJXNcbiIKbXNnc3RyICJyZXNpemVjb25zOiBrYW4gaW50ZSBoaXR0YSB2aWRlb2zk
+Z2VzZmlsICVzXG4iCgojOiBzcmMvcmVzaXplY29ucy5jOjE3Mgptc2dpZCAiSW52YWxpZCBudW1i
+ZXIgb2YgbGluZXNcbiIKbXNnc3RyICJPZ2lsdGlndCBhbnRhbCByYWRlclxuIgoKIzogc3JjL3Jl
+c2l6ZWNvbnMuYzoyMzgKIywgYy1mb3JtYXQKbXNnaWQgIk9sZCBtb2RlOiAlZHglZCAgTmV3IG1v
+ZGU6ICVkeCVkXG4iCm1zZ3N0ciAiR2FtbWFsdCBs5GdlOiAlZNclZCAgTnl0dCBs5GdlOiAlZNcl
+ZFxuIgoKIzogc3JjL3Jlc2l6ZWNvbnMuYzoyNDAKIywgYy1mb3JtYXQKbXNnaWQgIk9sZCAjc2Nh
+bmxpbmVzOiAlZCAgTmV3ICNzY2FubGluZXM6ICVkICBDaGFyYWN0ZXIgaGVpZ2h0OiAlZFxuIgpt
+c2dzdHIgIkdhbW1hbHQgYW50YWwgc2thbm5saW5qZXI6ICVkICBOeXR0IGFudGFsIHNrYW5ubGlu
+amVyOiAlZCAgVGVja2VuaPZqZDogJWRcbiIKCiM6IHNyYy9yZXNpemVjb25zLmM6MjUxCiMsIGMt
+Zm9ybWF0Cm1zZ2lkICJyZXNpemVjb25zOiB0aGUgY29tbWFuZCBgJXMnIGZhaWxlZFxuIgptc2dz
+dHIgInJlc2l6ZWNvbnM6IGtvbW1hbmRvdCBcIiVzXCIgbWlzc2x5Y2thZGVzXG4iCgojOiBzcmMv
+cmVzaXplY29ucy5jOjMxOQojLCBjLWZvcm1hdAptc2dpZCAicmVzaXplY29uczogZG9uJ3QgZm9y
+Z2V0IHRvIGNoYW5nZSBURVJNIChtYXliZSB0byBjb24lZHglZCBvciBsaW51eC0lZHglZClcbiIK
+bXNnc3RyICJyZXNpemVjb25zOiBnbPZtIGludGUg5G5kcmEgVEVSTSAoa2Fuc2tlIHRpbGwgY29u
+JWR4JWQgZWxsZXIgbGludXgtJWR4JWQpXG4iCgojOiBzcmMvcmVzaXplY29ucy5jOjMzMgptc2dp
+ZCAiIgoicmVzaXplY29uczpcbiIKImNhbGwgaXM6ICByZXNpemVjb25zIENPTFN4Uk9XUyAgb3I6
+ICByZXNpemVjb25zIENPTFMgUk9XU1xuIgoib3I6IHJlc2l6ZWNvbnMgLWxpbmVzIFJPV1MsIHdp
+dGggUk9XUyBvbmUgb2YgMjUsIDI4LCAzMCwgMzQsIDM2LCA0MCwgNDQsIDUwLCA2MFxuIgptc2dz
+dHIgIiIKInJlc2l6ZWNvbnM6XG4iCiJhbnJvcDogcmVzaXplY29ucyBLT0xVTU5FUnhSQURFUiAg
+ZWxsZXI6IHJlc2l6ZWNvbnMgS09MVU1ORVIgUkFERVJcbiIKImVsbGVyOiByZXNpemVjb25zIC1s
+aW5lcyBSQURFUiwgZORyIFJBREVSIORyIGVuIGF2IDI1LCAyOCwgMzAsIDM0LCAzNiwgNDAsIDQ0
+LCA1MCwgNjBcbiIKCiM6IHNyYy9yZXNpemVjb25zLmM6MzcwCm1zZ2lkICJyZXNpemVjb25zOiBj
+YW5ub3QgZ2V0IEkvTyBwZXJtaXNzaW9ucy5cbiIKbXNnc3RyICJyZXNpemVjb25zOiBrYW4gaW50
+ZSBm5SBJL08tcuR0dGlnaGV0ZXIuXG4iCgojOiBzcmMvc2NyZWVuZHVtcC5jOjQ4Cm1zZ2lkICJ1
+c2FnZTogc2NyZWVuZHVtcCBbbl1cbiIKbXNnc3RyICJhbnbkbmRuaW5nOiBzY3JlZW5kdW1wIFtu
+XVxuIgoKIzogc3JjL3NjcmVlbmR1bXAuYzo2OAojLCBjLWZvcm1hdAptc2dpZCAiRXJyb3IgcmVh
+ZGluZyAlc1xuIgptc2dzdHIgIkZlbCB2aWQgbORzbmluZyBhdiAlc1xuIgoKIzogc3JjL3NjcmVl
+bmR1bXAuYzoxMDkKIywgYy1mb3JtYXQKbXNnaWQgImNvdWxkbid0IHJlYWQgJXMsIGFuZCBjYW5u
+b3QgaW9jdGwgZHVtcFxuIgptc2dzdHIgImt1bmRlIGludGUgbORzYSAlcywgb2NoIGthbiBpbnRl
+IGv2cmEgXCJpb2N0bCBkdW1wXCJcbiIKCiMuIHdlIHRyaWVkIHRoaXMganVzdCB0byBiZSBzdXJl
+LCBidXQgVElPQ0xJTlVYCiMuIGZ1bmN0aW9uIDAgaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgMS4x
+LjkyCiMuIERvIG5vdCBtZW50aW9uIGBpb2N0bCBkdW1wJyBpbiBlcnJvciBtc2cKIzogc3JjL3Nj
+cmVlbmR1bXAuYzoxMTUKIywgYy1mb3JtYXQKbXNnaWQgImNvdWxkbid0IHJlYWQgJXNcbiIKbXNn
+c3RyICJrdW5kZSBpbnRlIGzkc2EgJXNcbiIKCiM6IHNyYy9zY3JlZW5kdW1wLmM6MTI0CiMsIGMt
+Zm9ybWF0Cm1zZ2lkICJTdHJhbmdlIC4uLiBzY3JlZW4gaXMgYm90aCAlZHglZCBhbmQgJWR4JWQg
+Pz9cbiIKbXNnc3RyICJLb25zdGlndCAuLi4gc2vkcm1lbiDkciBi5WRlICVk1yVkIG9jaCAlZNcl
+ZD8/XG4iCgojOiBzcmMvc2NyZWVuZHVtcC5jOjE0Mgptc2dpZCAiRXJyb3Igd3JpdGluZyBzY3Jl
+ZW5kdW1wXG4iCm1zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgc2vkcm1kdW1wXG4iCgojOiBz
+cmMvc2V0Zm9udC5jOjczCm1zZ2lkICIiCiJVc2FnZTogc2V0Zm9udCBbd3JpdGUtb3B0aW9uc10g
+Wy08Tj5dIFtuZXdmb250Li5dIFstbSBjb25zb2xlbWFwXSBbLXUgdW5pY29kZW1hcF1cbiIKIiAg
+d3JpdGUtb3B0aW9ucyAodGFrZSBwbGFjZSBiZWZvcmUgZmlsZSBsb2FkaW5nKTpcbiIKIiAgICAt
+byAgPGZpbGVuYW1lPlx0V3JpdGUgY3VycmVudCBmb250IHRvIDxmaWxlbmFtZT5cbiIKIiAgICAt
+TyAgPGZpbGVuYW1lPlx0V3JpdGUgY3VycmVudCBmb250IGFuZCB1bmljb2RlIG1hcCB0byA8Zmls
+ZW5hbWU+XG4iCiIgICAgLW9tIDxmaWxlbmFtZT5cdFdyaXRlIGN1cnJlbnQgY29uc29sZW1hcCB0
+byA8ZmlsZW5hbWU+XG4iCiIgICAgLW91IDxmaWxlbmFtZT5cdFdyaXRlIGN1cnJlbnQgdW5pY29k
+ZW1hcCB0byA8ZmlsZW5hbWU+XG4iCiJJZiBubyBuZXdmb250IGFuZCBubyAtW298T3xvbXxvdXxt
+fHVdIG9wdGlvbiBpcyBnaXZlbixcbiIKImEgZGVmYXVsdCBmb250IGlzIGxvYWRlZDpcbiIKIiAg
+ICBzZXRmb250ICAgICAgICAgICAgIExvYWQgZm9udCBcImRlZmF1bHRbLmd6XVwiXG4iCiIgICAg
+c2V0Zm9udCAtPE4+ICAgICAgICBMb2FkIGZvbnQgXCJkZWZhdWx0OHg8Tj5bLmd6XVwiXG4iCiJU
+aGUgLTxOPiBvcHRpb24gc2VsZWN0cyBhIGZvbnQgZnJvbSBhIGNvZGVwYWdlIHRoYXQgY29udGFp
+bnMgdGhyZWUgZm9udHM6XG4iCiIgICAgc2V0Zm9udCAtezh8MTR8MTZ9IGNvZGVwYWdlLmNwWy5n
+el0gICBMb2FkIDh4PE4+IGZvbnQgZnJvbSBjb2RlcGFnZS5jcFxuIgoiRXhwbGljaXRseSAod2l0
+aCAtbSBvciAtdSkgb3IgaW1wbGljaXRseSAoaW4gdGhlIGZvbnRmaWxlKSBnaXZlbiBtYXBwaW5n
+c1xuIgoid2lsbCBiZSBsb2FkZWQgYW5kLCBpbiB0aGUgY2FzZSBvZiBjb25zb2xlbWFwcywgYWN0
+aXZhdGVkLlxuIgoiICAgIC1oPE4+ICAgICAgKG5vIHNwYWNlKSBPdmVycmlkZSBmb250IGhlaWdo
+dC5cbiIKIiAgICAtbSA8Zm4+ICAgIExvYWQgY29uc29sZSBzY3JlZW4gbWFwLlxuIgoiICAgIC11
+IDxmbj4gICAgTG9hZCBmb250IHVuaWNvZGUgbWFwLlxuIgoiICAgIC1tIG5vbmVcdFN1cHByZXNz
+IGxvYWRpbmcgYW5kIGFjdGl2YXRpb24gb2YgYSBzY3JlZW4gbWFwLlxuIgoiICAgIC11IG5vbmVc
+dFN1cHByZXNzIGxvYWRpbmcgb2YgYSB1bmljb2RlIG1hcC5cbiIKIiAgICAtdlx0XHRCZSB2ZXJi
+b3NlLlxuIgoiICAgIC1WXHRcdFByaW50IHZlcnNpb24gYW5kIGV4aXQuXG4iCiJGaWxlcyBhcmUg
+bG9hZGVkIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIC91c3IvbGliL2tiZC8qLy5cbiIK
+bXNnc3RyICIiCiJBbnbkbmRuaW5nOiBzZXRmb250IFtza3JpdmZsYWdnb3JdIFstPE4+XSBbbnl0
+dHlwc25pdHQuLl0gWy1tIGtvbnNvbGx0YWJlbGxdIFstdSB1bmljb2RldGFiZWxsXVxuIgoiICBz
+a3JpdmZsYWdnb3IgKGjkbmRlciBm9nJlIGZpbGVyIGzkc2VzKTpcbiIKIiAgICAtbyAgPGZpbG5h
+bW4+XHRTa3JpdiBudXZhcmFuZGUgdHlwc25pdHQgdGlsbCA8ZmlsbmFtbj5cbiIKIiAgICAtTyAg
+PGZpbG5hbW4+XHRTa3JpdiBudXZhcmFuZGUgdHlwc25pdHQgb2NoIHVuaWNvZGV0YWJlbGwgdGls
+bCA8ZmlsbmFtbj5cbiIKIiAgICAtb20gPGZpbG5hbW4+XHRTa3JpdiBudXZhcmFuZGUga29uc29s
+bHRhYmVsbCB0aWxsIDxmaWxuYW1uPlxuIgoiICAgIC1vdSA8ZmlsbmFtbj5cdFNrcml2IG51dmFy
+YW5kZSB1bmljb2RldGFiZWxsIHRpbGwgPGZpbG5hbW4+XG4iCiJPbSBpbmdldCBcIm55dHR5cHNu
+aXR0XCIgb2NoIGluZ2VuIC1bb3xPfG9tfG91fG18dV0tZmxhZ2dhIORyIGdpdmVuLFxuIgoibORz
+ZXMgZXR0IHN0YW5kYXJkdHlwc25pdHQgaW46XG4iCiIgICAgc2V0Zm9udCAgICAgICAgICAgICBM
+5HMgaW4gdHlwc25pdHQgXCJkZWZhdWx0Wy5nel1cIlxuIgoiICAgIHNldGZvbnQgLTxOPiAgICAg
+ICAgTORzIGluIHR5cHNuaXR0IFwiZGVmYXVsdDh4PE4+Wy5nel1cIlxuIgoiLTxOPi1mbGFnZ2Fu
+IHbkbGplciBldHQgdHlwc25pdHQgZnLlbiBlbiB0ZWNrZW50YWJlbGwgc29tIGlubmVo5WxsZXIg
+dHJlIHR5cHNuaXR0OlxuIgoiICAgIHNldGZvbnQgLXs4fDE0fDE2fSBjb2RlcGFnZS5jcFsuZ3pd
+ICAgTORzIGluIDjXPE4+LXR5cHNuaXR0IGZy5W4gY29kZXBhZ2UuY3BcbiIKIkV4cGxpY2l0ICht
+ZWQgLW0gZWxsZXIgLXUpIGVsbGVyIGltcGxpY2l0IChpIHR5cHNuaXR0c2ZpbGVuKSBnaXZuYSB0
+YWJlbGxlclxuIgoia29tbWVyIGzkc2FzIGluIG9jaCwgb20gZGV0IGfkbGxlciBrb25zb2xsdGFi
+ZWxsZXIsIGFrdGl2ZXJhcy5cbiIKIiAgICAtaDxOPiAgICAgIChpbmdldCBibGFua3RlY2tlbikg
+5XNpZG9z5HR0IHR5cHNuaXR0c2j2amQuXG4iCiIgICAgLW0gPGZuPiAgICBM5HMgaW4ga29uc29s
+bHNr5HJtc3RhYmVsbC5cbiIKIiAgICAtdSA8Zm4+ICAgIEzkcyBpbiB1bmljb2RldHlwc25pdHRz
+dGFiZWxsLlxuIgoiICAgIC1tIG5vbmVcdEzldCBibGkgYXR0IGzkc2EgaW4gb2NoIGFrdGl2ZXJh
+IHNr5HJtdGFiZWxsLlxuIgoiICAgIC11IG5vbmVcdEzldCBibGkgYXR0IGzkc2EgaW4gdW5pY29k
+ZXRhYmVsbC5cbiIKIiAgICAtdlx0XHRWYXIgcHJhdHNhbS5cbiIKIiAgICAtVlx0XHRTa3JpdiB1
+dCB2ZXJzaW9uIG9jaCBhdnNsdXRhLlxuIgoiRmlsZXIgbORzZXMgaW4gZnLlbiBkZW4gYWt0dWVs
+bGEga2F0YWxvZ2VuIGVsbGVyIC91c3IvbGliL2tiZC8qLy5cbiIKCiM6IHNyYy9zZXRmb250LmM6
+MTY5Cm1zZ2lkICJzZXRmb250OiB0b28gbWFueSBpbnB1dCBmaWxlc1xuIgptc2dzdHIgInNldGZv
+bnQ6IGb2ciBt5W5nYSBpbmRhdGFmaWxlclxuIgoKIzogc3JjL3NldGZvbnQuYzoxNzcKbXNnaWQg
+InNldGZvbnQ6IGNhbm5vdCBib3RoIHJlc3RvcmUgZnJvbSBjaGFyYWN0ZXIgUk9NIGFuZCBmcm9t
+IGZpbGUuIEZvbnQgdW5jaGFuZ2VkLlxuIgptc2dzdHIgInNldGZvbnQ6IGthbiBpbnRlIGLlZGUg
+5XRlcnN05GxsYSBmcuVuIHRlY2tlbi1ST00gb2NoIGZy5W4gZmlsLiBGb250ZW4gb2b2cuRuZHJh
+ZC5cbiIKCiM6IHNyYy9zZXRmb250LmM6MjM2CiMsIGMtZm9ybWF0Cm1zZ2lkICJCYWQgY2hhcmFj
+dGVyIGhlaWdodCAlZFxuIgptc2dzdHIgIkZlbGFrdGlnIHRlY2tlbmj2amQgJWRcbiIKCiM6IHNy
+Yy9zZXRmb250LmM6MjQwCiMsIGMtZm9ybWF0Cm1zZ2lkICJCYWQgY2hhcmFjdGVyIHdpZHRoICVk
+XG4iCm1zZ3N0ciAiRmVsYWt0aWcgdGVja2VuYnJlZGQgJWRcbiIKCiM6IHNyYy9zZXRmb250LmM6
+MjY1CiMsIGMtZm9ybWF0Cm1zZ2lkICIlczogZm9udCBwb3NpdGlvbiAzMiBpcyBub25ibGFua1xu
+Igptc2dzdHIgIiVzOiBUeXBzbml0dHNwb3NpdGlvbiAzMiDkciBpY2tlLWJsYW5rXG4iCgojOiBz
+cmMvc2V0Zm9udC5jOjI3MwojLCBjLWZvcm1hdAptc2dpZCAiJXM6IHdpcGVkIGl0XG4iCm1zZ3N0
+ciAiJXM6IHJlbnNhZGUgZGV0XG4iCgojOiBzcmMvc2V0Zm9udC5jOjI3NwojLCBjLWZvcm1hdApt
+c2dpZCAiJXM6IGJhY2tncm91bmQgd2lsbCBsb29rIGZ1bm55XG4iCm1zZ3N0ciAiJXM6IGJha2dy
+dW5kZW4ga29tbWVyIHNlIGtvbnN0aWcgdXRcbiIKCiM6IHNyYy9zZXRmb250LmM6Mjg3CiMsIGMt
+Zm9ybWF0Cm1zZ2lkICJMb2FkaW5nICVkLWNoYXIgJWR4JWQgZm9udCBmcm9tIGZpbGUgJXNcbiIK
+bXNnc3RyICJM5HNlciBpbiAlZC10ZWNrZW5zICVk1yVkLXR5cHNuaXR0IGZy5W4gZmlsZW4gJXNc
+biIKCiM6IHNyYy9zZXRmb250LmM6MjkwCiMsIGMtZm9ybWF0Cm1zZ2lkICJMb2FkaW5nICVkLWNo
+YXIgJWR4JWQgZm9udFxuIgptc2dzdHIgIkzkc2VyIGluICVkLXRlY2tlbnMgJWTXJWQtdHlwc25p
+dHRcbiIKCiM6IHNyYy9zZXRmb250LmM6MjkzCiMsIGMtZm9ybWF0Cm1zZ2lkICJMb2FkaW5nICVk
+LWNoYXIgJWR4JWQgKCVkKSBmb250IGZyb20gZmlsZSAlc1xuIgptc2dzdHIgIkzkc2VyIGluICVk
+LXRlY2tlbnMgJWTXJWQtdHlwc25pdHQgKCVkKSBmcuVuIGZpbGVuICVzXG4iCgojOiBzcmMvc2V0
+Zm9udC5jOjI5NgojLCBjLWZvcm1hdAptc2dpZCAiTG9hZGluZyAlZC1jaGFyICVkeCVkICglZCkg
+Zm9udFxuIgptc2dzdHIgIkzkc2VyIGluICVkLXRlY2tlbnMgJWTXJWQtdHlwc25pdHQgKCVkKVxu
+IgoKIzogc3JjL3NldGZvbnQuYzozMzYKIywgYy1mb3JtYXQKbXNnaWQgIiVzOiBidWcgaW4gZG9f
+bG9hZHRhYmxlXG4iCm1zZ3N0ciAiJXM6IGZlbCBpIGRvX2xvYWR0YWJsZVxuIgoKIzogc3JjL3Nl
+dGZvbnQuYzozNDIKbXNnaWQgIkxvYWRpbmcgVW5pY29kZSBtYXBwaW5nIHRhYmxlLi4uXG4iCm1z
+Z3N0ciAiTORzZXIgaW4gVW5pY29kZS1rb252ZXJ0ZXJpbmdzc3RhYmVsbC4uLlxuIgoKIzogc3Jj
+L3NldGZvbnQuYzozNzggc3JjL3NldGZvbnQuYzo0NjIKIywgYy1mb3JtYXQKbXNnaWQgIkNhbm5v
+dCBvcGVuIGZvbnQgZmlsZSAlc1xuIgptc2dzdHIgIkthbiBpbnRlIPZwcG5hIHR5cHNuaXR0c2Zp
+bGVuICVzXG4iCgojOiBzcmMvc2V0Zm9udC5jOjM4OQojLCBjLWZvcm1hdAptc2dpZCAiV2hlbiBs
+b2FkaW5nIHNldmVyYWwgZm9udHMsIGFsbCBtdXN0IGJlIHBzZiBmb250cyAtICVzIGlzbid0XG4i
+Cm1zZ3N0ciAiTuRyIGZsZXJhIHR5cHNuaXR0IGzkc2VzIGluIG3lc3RlIGFsbGEgdmFyYSBwc2Yt
+dHlwc25pdHQgLSAlcyDkciBpbnRlIGRldFxuIgoKIzogc3JjL3NldGZvbnQuYzozOTcKIywgYy1m
+b3JtYXQKbXNnaWQgIlJlYWQgJWQtY2hhciAlZHglZCBmb250IGZyb20gZmlsZSAlc1xuIgptc2dz
+dHIgIkzkc3RlICVkLXRlY2tlbnMgJWTXJWQtdHlwc25pdHQgZnLlbiBmaWxlbiAlc1xuIgoKIzog
+c3JjL3NldGZvbnQuYzo0MDMKbXNnaWQgIldoZW4gbG9hZGluZyBzZXZlcmFsIGZvbnRzLCBhbGwg
+bXVzdCBoYXZlIHRoZSBzYW1lIGhlaWdodFxuIgptc2dzdHIgIk7kciBmbGVyYSB0eXBzbml0dCBs
+5HNlcyBpbiBt5XN0ZSBhbGxhIGhhIHNhbW1hIGj2amRcbiIKCiM6IHNyYy9zZXRmb250LmM6NDEw
+Cm1zZ2lkICJXaGVuIGxvYWRpbmcgc2V2ZXJhbCBmb250cywgYWxsIG11c3QgaGF2ZSB0aGUgc2Ft
+ZSB3aWR0aFxuIgptc2dzdHIgIk7kciBmbGVyYSB0eXBzbml0dCBs5HNlcyBpbiBt5XN0ZSBhbGxh
+IGhhIHNhbW1hIGJyZWRkXG4iCgojOiBzcmMvc2V0Zm9udC5jOjQ0OQptc2dpZCAiQ2Fubm90IGZp
+bmQgZGVmYXVsdCBmb250XG4iCm1zZ3N0ciAiSGl0dGFyIGludGUgc3RhbmRhcmR0eXBzbml0dGV0
+XG4iCgojOiBzcmMvc2V0Zm9udC5jOjQ1NgojLCBjLWZvcm1hdAptc2dpZCAiQ2Fubm90IGZpbmQg
+JXMgZm9udFxuIgptc2dzdHIgIkhpdHRhciBpbnRlIHR5cHNuaXR0ZXQgJXNcbiIKCiM6IHNyYy9z
+ZXRmb250LmM6NDY4CiMsIGMtZm9ybWF0Cm1zZ2lkICJSZWFkaW5nIGZvbnQgZmlsZSAlc1xuIgpt
+c2dzdHIgIkzkc2VyIHR5cHNuaXR0c2ZpbGVuICVzXG4iCgojOiBzcmMvc2V0Zm9udC5jOjUwNgpt
+c2dpZCAiTm8gZmluYWwgbmV3bGluZSBpbiBjb21iaW5lIGZpbGVcbiIKbXNnc3RyICJJbmdldCBz
+bHV0Z2lsdGlndCBueXJhZHN0ZWNrZW4gaSBrb21iaW5hdGlvbnNmaWxlblxuIgoKIzogc3JjL3Nl
+dGZvbnQuYzo1MTIKbXNnaWQgIlRvbyBtYW55IGZpbGVzIHRvIGNvbWJpbmVcbiIKbXNnc3RyICJG
+9nIgbeVuZ2EgZmlsZXIgYXR0IGtvbWJpbmVyYVxuIgoKIy4gcmVzdG9yZWZvbnQgLXcgd3JpdGVz
+IGEgU1ZHQSBmb250IHRvIGZpbGUKIy4gcmVzdG9yZWZvbnQgLXIgcmVzdG9yZXMgaXQKIy4gVGhl
+c2UgZm9udHMgaGF2ZSBzaXplIDMyNzY4LCBmb3IgdHdvIDUxMi1jaGFyIGZvbnRzLgojLiBJbiBm
+YWN0LCB3aGVuIEJST0tFTl9HUkFQSElDU19QUk9HUkFNUyBpcyBkZWZpbmVkLAojLiBhbmQgaXQg
+YWx3YXlzIGlzLCB0aGVyZSBpcyBubyBkZWZhdWx0IGZvbnQgdGhhdCBpcyBzYXZlZCwKIy4gc28g
+cHJvYmFibHkgdGhlIHNlY29uZCBoYWxmIGlzIGFsd2F5cyBnYXJiYWdlLgojOiBzcmMvc2V0Zm9u
+dC5jOjUzNgptc2dpZCAiSG1tIC0gYSBmb250IGZyb20gcmVzdG9yZWZvbnQ/IFVzaW5nIHRoZSBm
+aXJzdCBoYWxmLlxuIgptc2dzdHIgIkhtbSAtIGV0dCB0eXBzbml0dCBmcuVuIHJlc3RvcmVmb250
+PyBBbnbkbmRlciBm9nJzdGEgaGFsdmFuLlxuIgoKIzogc3JjL3NldGZvbnQuYzo1NTMKbXNnaWQg
+IkJhZCBpbnB1dCBmaWxlIHNpemVcbiIKbXNnc3RyICJGZWxha3RpZyBzdG9ybGVrIHDlIGluZGF0
+YWZpbGVuXG4iCgojOiBzcmMvc2V0Zm9udC5jOjU3NAptc2dpZCAiIgoiVGhpcyBmaWxlIGNvbnRh
+aW5zIDMgZm9udHM6IDh4OCwgOHgxNCBhbmQgOHgxNi4gUGxlYXNlIGluZGljYXRlXG4iCiJ1c2lu
+ZyBhbiBvcHRpb24gLTggb3IgLTE0IG9yIC0xNiB3aGljaCBvbmUgeW91IHdhbnQgbG9hZGVkLlxu
+Igptc2dzdHIgIiIKIkRlbiBo5HIgZmlsZW4gaW5uZWjlbGxlciAzIHR5cHNuaXR0OiA41zgsIDjX
+MTQgb2NoIDjXMTYuIFbkbGogdmlsa2V0XG4iCiJkdSB2aWxsIGzkc2EgaW4gbWVkIG7lZ29uIGF2
+IGZsYWdnb3JuYSAtOCwgLTE0IG9jaCAtMTYuXG4iCgojOiBzcmMvc2V0Zm9udC5jOjU4OAojLCBj
+LWZvcm1hdAptc2dpZCAiWW91IGFza2VkIGZvciBmb250IHNpemUgJWQsIGJ1dCBvbmx5IDgsIDE0
+LCAxNiBhcmUgcG9zc2libGUgaGVyZS5cbiIKbXNnc3RyICJEdSBiYWQgb20gdHlwc25pdHRzc3Rv
+cmxla2VuICVkLCBtZW4gYmFyYSA4LCAxNCBvY2ggMTYg5HIgbfZqbGlnYSBo5HIuXG4iCgojOiBz
+cmMvc2V0Zm9udC5jOjYzMwptc2dpZCAiRm91bmQgbm90aGluZyB0byBzYXZlXG4iCm1zZ3N0ciAi
+SGl0dGFkZSBpbmdldCBhdHQgc3BhcmFcbiIKCiM6IHNyYy9zZXRmb250LmM6NjM3Cm1zZ2lkICJD
+YW5ub3Qgd3JpdGUgZm9udCBmaWxlIgptc2dzdHIgIkthbiBpbnRlIHNrcml2YSB0aWxsIHR5cHNu
+aXR0c2ZpbGVuIgoKIzogc3JjL3NldGZvbnQuYzo2NDIKIywgYy1mb3JtYXQKbXNnaWQgIlNhdmVk
+ICVkLWNoYXIgJWR4JWQgZm9udCBmaWxlIG9uICVzXG4iCm1zZ3N0ciAiU3BhcmFkZSAlZC10ZWNr
+ZW5zICVk1yVkLXR5cHNuaXR0c2ZpbCB0aWxsICVzXG4iCgojOiBzcmMvc2V0a2V5Y29kZXMuYzoy
+MQptc2dpZCAiIgoidXNhZ2U6IHNldGtleWNvZGUgc2NhbmNvZGUga2V5Y29kZSAuLi5cbiIKIiAo
+d2hlcmUgc2NhbmNvZGUgaXMgZWl0aGVyIHh4IG9yIGUweHgsIGdpdmVuIGluIGhleGFkZWNpbWFs
+LFxuIgoiICBhbmQga2V5Y29kZSBpcyBnaXZlbiBpbiBkZWNpbWFsKVxuIgptc2dzdHIgIiIKImFu
+duRuZG5pbmc6IHNldGtleWNvZGUgYXZs5HNuaW5nc2tvZCB0YW5nZW50a29kIC4uLlxuIgoiIChk
+5HIgYXZs5HNuaW5nc2tvZCDkciBhbnRpbmdlbiB4eCBlbGxlciBlMHh4IGFuZ2l2ZXQgaGV4YWRl
+Y2ltYWx0LFxuIgoiICBvY2ggdGFuZ2VudGtvZCDkciBhbmdpdmV0IGRlY2ltYWx0KVxuIgoKIzog
+c3JjL3NldGtleWNvZGVzLmM6NDMKbXNnaWQgImV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cyBleHBl
+Y3RlZCIKbXNnc3RyICJq5G1udCBhbnRhbCBhcmd1bWVudCBm9nJ25G50YWRlcyIKCiM6IHNyYy9z
+ZXRrZXljb2Rlcy5jOjUwCm1zZ2lkICJlcnJvciByZWFkaW5nIHNjYW5jb2RlIgptc2dzdHIgImZl
+bCB2aWQgbORzbmluZyBhdiBhdmzkc25pbmdza29kIgoKIzogc3JjL3NldGtleWNvZGVzLmM6NTYK
+bXNnaWQgImNvZGUgb3V0c2lkZSBib3VuZHMiCm1zZ3N0ciAia29kIHV0YW5m9nIgZ3LkbnNlcm5h
+IgoKIzogc3JjL3NldGtleWNvZGVzLmM6NTkKIywgYy1mb3JtYXQKbXNnaWQgImZhaWxlZCB0byBz
+ZXQgc2NhbmNvZGUgJXggdG8ga2V5Y29kZSAlZFxuIgptc2dzdHIgImt1bmRlIGludGUgc+R0dGEg
+YXZs5HNuaW5nc2tvZGVuICV4IHRpbGwgdGFuZ2VudGtvZGVuICVkXG4iCgojOiBzcmMvc2V0bGVk
+cy5jOjI1CiMsIGMtZm9ybWF0Cm1zZ2lkICIiCiJVc2FnZTpcbiIKIlx0c2V0bGVkcyBbLXZdIFst
+TF0gWy1EXSBbLUZdIFtbK3wtXVsgbnVtIHwgY2FwcyB8IHNjcm9sbCAlc11dXG4iCiJUaHVzLFxu
+IgoiXHRzZXRsZWRzICtjYXBzIC1udW1cbiIKIndpbGwgc2V0IENhcHNMb2NrLCBjbGVhciBOdW1M
+b2NrIGFuZCBsZWF2ZSBTY3JvbGxMb2NrIHVuY2hhbmdlZC5cbiIKIlRoZSBzZXR0aW5ncyBiZWZv
+cmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgKGlmIGFueSkgYXJlIHJlcG9ydGVkXG4iCiJ3aGVuIHRo
+ZSAtdiBvcHRpb24gaXMgZ2l2ZW4gb3Igd2hlbiBubyBjaGFuZ2UgaXMgcmVxdWVzdGVkLlxuIgoi
+Tm9ybWFsbHksIHNldGxlZHMgaW5mbHVlbmNlcyB0aGUgdnQgZmxhZyBzZXR0aW5nc1xuIgoiKGFu
+ZCB0aGVzZSBhcmUgdXN1YWxseSByZWZsZWN0ZWQgaW4gdGhlIGxlZHMpLlxuIgoiV2l0aCAtTCwg
+c2V0bGVkcyBvbmx5IHNldHMgdGhlIGxlZHMsIGFuZCBsZWF2ZXMgdGhlIGZsYWdzIGFsb25lLlxu
+IgoiV2l0aCAtRCwgc2V0bGVkcyBzZXRzIGJvdGggdGhlIGZsYWdzIGFuZCB0aGUgZGVmYXVsdCBm
+bGFncywgc29cbiIKInRoYXQgYSBzdWJzZXF1ZW50IHJlc2V0IHdpbGwgbm90IGNoYW5nZSB0aGUg
+ZmxhZ3MuXG4iCm1zZ3N0ciAiIgoiQW525G5kbmluZzpcbiIKIlx0c2V0bGVkcyBbLXZdIFstTF0g
+Wy1EXSBbLUZdIFtbK3wtXVsgbnVtIHwgY2FwcyB8IHNjcm9sbCAlc11dXG4iCiJEdnMsXG4iCiJc
+dHNldGxlZHMgK2NhcHMgLW51bVxuIgoia29tbWVyIHPkdHRhIGNhcHNsb2NrLCBzdORuZ2EgYXYg
+bnVtbG9jayBvY2ggbORtbmEgc2Nyb2xsb2NrIG9m9nLkbmRyYWQuXG4iCiJJbnN05GxsbmluZ2Fy
+bmEgZvZyZSBvY2ggZWZ0ZXIg5G5kcmluZyAob20gbuVnb24pIHJhcHBvcnRlcmFzIG7kclxuIgoi
+LXYtZmxhZ2dhbiDkciBnaXZlbiBlbGxlciBu5HIgaW5nYSDkbmRyaW5nYXIgYmVn5HJzLlxuIgoi
+Tm9ybWFsdCBw5XZlcmthciBzZXRsZWRzIHZ0LWZsYWdnaW5zdORsbG5pbmdhcm5hXG4iCiIob2No
+IGRldHRhIHZpc2FzIG5vcm1hbHQgbWVkIGRpb2Rlcm5hKS5cbiIKIk1lZCAtTCBz5HR0ZXIgc2V0
+bGVkcyBkaW9kZXJuYSBvY2ggcOV2ZXJrYXIgaW50ZSBmbGFnZ29ybmEuXG4iCiJNZWQgLUQgc+R0
+dGVyIGLlZGUgZmxhZ2dvcm5hIG9jaCBzdGFuZGFyZGZsYWdnb3JuYSBz5SBhdHQgc2VuYXJlXG4i
+CiJub2xsc3TkbGxuaW5nYXIgaW50ZSBrb21tZXIg5G5kcmEgZmxhZ2dvcm5hLlxuIgoKIzogc3Jj
+L3NldGxlZHMuYzo0Nwptc2dpZCAib24gIgptc2dzdHIgInDlIgoKIzogc3JjL3NldGxlZHMuYzo0
+Nwptc2dpZCAib2ZmIgptc2dzdHIgImF2IgoKIzogc3JjL3NldGxlZHMuYzo5MAptc2dpZCAiRXJy
+b3IgcmVhZGluZyBjdXJyZW50IGxlZCBzZXR0aW5nLiBNYXliZSBzdGRpbiBpcyBub3QgYSBWVD9c
+biIKbXNnc3RyICJGZWwgdmlkIGzkc25pbmcgYXYgbnV2YXJhbmRlIGluc3TkbGxuaW5nLiBTdGFu
+ZGFyZCBpbiBrYW5za2UgaW50ZSDkciBlbiBWVD9cbiIKCiM6IHNyYy9zZXRsZWRzLmM6MTA5Cm1z
+Z2lkICJFcnJvciByZWFkaW5nIGN1cnJlbnQgZmxhZ3Mgc2V0dGluZy4gTWF5YmUgeW91IGFyZSBu
+b3Qgb24gdGhlIGNvbnNvbGU/XG4iCm1zZ3N0ciAiRmVsIHZpZCBs5HNuaW5nIGF2IG51dmFyYW5k
+ZSBmbGFnZ2luc3TkbGxuaW5nLiBEdSBrYW5za2UgaW50ZSDkciBw5SBrb25zb2xsZW4/XG4iCgoj
+OiBzcmMvc2V0bGVkcy5jOjEyMyBzcmMvc2V0bGVkcy5jOjEzOAptc2dpZCAiRXJyb3IgcmVhZGlu
+ZyBjdXJyZW50IGxlZCBzZXR0aW5nIGZyb20gL2Rldi9rYmQuXG4iCm1zZ3N0ciAiRmVsIHZpZCBs
+5HNuaW5nIGF2IG51dmFyYW5kZSBkaW9kaW5zdORsbG5pbmcgZnLlbiAvZGV2L2tiZC5cbiIKCiM6
+IHNyYy9zZXRsZWRzLmM6MTI3Cm1zZ2lkICJLSU9DR0xFRCB1bmF2YWlsYWJsZT9cbiIKbXNnc3Ry
+ICJLSU9DR0xFRCBpbnRlIHRpbGxn5G5nbGlnP1xuIgoKIzogc3JjL3NldGxlZHMuYzoxNDIKbXNn
+aWQgIktJT0NTTEVEIHVuYXZhaWxhYmxlP1xuIgptc2dzdHIgIktJT0NTTEVEIGludGUgdGlsbGfk
+bmdsaWc/XG4iCgojOiBzcmMvc2V0bGVkcy5jOjE2OQptc2dpZCAiRXJyb3Igb3BlbmluZyAvZGV2
+L2tiZC5cbiIKbXNnc3RyICJGZWwgdmlkIPZwcG5hbmRlIGF2IC9kZXYva2JkLlxuIgoKIzogc3Jj
+L3NldGxlZHMuYzoyMDEKbXNnaWQgIkVycm9yIHJlc2V0dGluZyBsZWRtb2RlXG4iCm1zZ3N0ciAi
+RmVsIHZpZCBub2xsc3TkbGxuaW5nIGF2IGRpb2Rs5GdlXG4iCgojOiBzcmMvc2V0bGVkcy5jOjIx
+MAptc2dpZCAiQ3VycmVudCBkZWZhdWx0IGZsYWdzOiAgIgptc2dzdHIgIk51dmFyYW5kZSBzdGFu
+ZGFyZGZsYWdnb3I6ICAiCgojOiBzcmMvc2V0bGVkcy5jOjIxNAptc2dpZCAiQ3VycmVudCBmbGFn
+czogICAgICAgICAgIgptc2dzdHIgIk51dmFyYW5kZSBmbGFnZ29yOiAgICAgICAgICAiCgojOiBz
+cmMvc2V0bGVkcy5jOjIxOAptc2dpZCAiQ3VycmVudCBsZWRzOiAgICAgICAgICAgIgptc2dzdHIg
+Ik51dmFyYW5kZSBkaW9kZXI6ICAgICAgICAgICAiCgojOiBzcmMvc2V0bGVkcy5jOjI1NCBzcmMv
+c2V0bWV0YW1vZGUuYzo5NAojLCBjLWZvcm1hdAptc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50
+OiBfJXNfXG5cbiIKbXNnc3RyICJva+RudCBhcmd1bWVudDogXyVzX1xuXG4iCgojOiBzcmMvc2V0
+bGVkcy5jOjI2Mwptc2dpZCAiT2xkIGRlZmF1bHQgZmxhZ3M6ICAgICIKbXNnc3RyICJHYW1sYSBz
+dGFuZGFyZGZsYWdnb3I6ICAgICIKCiM6IHNyYy9zZXRsZWRzLmM6MjY1Cm1zZ2lkICJOZXcgZGVm
+YXVsdCBmbGFnczogICAgIgptc2dzdHIgIk55YSBzdGFuZGFyZGZsYWdnb3I6ICAgICAgIgoKIzog
+c3JjL3NldGxlZHMuYzoyNzIKbXNnaWQgIk9sZCBmbGFnczogICAgICAgICAgICAiCm1zZ3N0ciAi
+R2FtbGEgZmxhZ2dvcjogICAgICAgICAgICAiCgojOiBzcmMvc2V0bGVkcy5jOjI3NAptc2dpZCAi
+TmV3IGZsYWdzOiAgICAgICAgICAgICIKbXNnc3RyICJOeWEgZmxhZ2dvcjogICAgICAgICAgICAg
+ICIKCiM6IHNyYy9zZXRsZWRzLmM6Mjg4IHNyYy9zZXRsZWRzLmM6Mjk3Cm1zZ2lkICJPbGQgbGVk
+czogICAgICAgICAgICAgIgptc2dzdHIgIkdhbWxhIGRpb2RlcjogICAgICAgICAgICAgIgoKIzog
+c3JjL3NldGxlZHMuYzoyOTAgc3JjL3NldGxlZHMuYzoyOTkKbXNnaWQgIk5ldyBsZWRzOiAgICAg
+ICAgICAgICAiCm1zZ3N0ciAiTnlhIGRpb2RlcjogICAgICAgICAgICAgICAiCgojOiBzcmMvc2V0
+bWV0YW1vZGUuYzoyMAptc2dpZCAiIgoiVXNhZ2U6XG4iCiJcdHNldG1ldGFtb2RlIFsgbWV0YWJp
+dCB8IG1ldGEgfCBiaXQgfCBlc2NwcmVmaXggfCBlc2MgfCBwcmVmaXggXVxuIgoiRWFjaCB2dCBo
+YXMgaGlzIG93biBjb3B5IG9mIHRoaXMgYml0LiBVc2VcbiIKIlx0c2V0bWV0YW1vZGUgW2FyZ10g
+PCAvZGV2L3R0eW5cbiIKInRvIGNoYW5nZSB0aGUgc2V0dGluZ3Mgb2YgYW5vdGhlciB2dC5cbiIK
+IlRoZSBzZXR0aW5nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZSBhcmUgcmVwb3J0ZWQuXG4i
+Cm1zZ3N0ciAiIgoiQW525G5kbmluZzpcbiIKIlx0c2V0bWV0YW1vZGUgWyBtZXRhYml0IHwgbWV0
+YSB8IGJpdCB8IGVzY3ByZWZpeCB8IGVzYyB8IHByZWZpeCBdXG4iCiJWYXJqZSB2dCBoYXIgc2lu
+IGVnZW4ga29waWEgYXYgZGVuIGjkciBiaXRlbi4gQW525G5kXG4iCiJcdHNldG1ldGFtb2RlIFth
+cmddIDwgL2Rldi90dHluXG4iCiJm9nIgYXR0IORuZHJhIGluc3TkbGxuaW5nZW4gZvZyIGVuIGFu
+bmFuIHZ0LlxuIgoiSW5zdORsbG5pbmdlbiBm9nJlIG9jaCBlZnRlciBm9nLkbmRyaW5nZW4gcmFw
+cG9ydGVyYXMuXG4iCgojOiBzcmMvc2V0bWV0YW1vZGUuYzozNgptc2dpZCAiTWV0YSBrZXkgc2V0
+cyBoaWdoIG9yZGVyIGJpdFxuIgptc2dzdHIgIk1ldGF0YW5nZW50ZW4gc+R0dGVyIGj2Z3N0YSBi
+aXRlblxuIgoKIzogc3JjL3NldG1ldGFtb2RlLmM6MzkKbXNnaWQgIk1ldGEga2V5IGdpdmVzIEVz
+YyBwcmVmaXhcbiIKbXNnc3RyICJNZXRhdGFuZ2VudGVuIGdlciBlc2MtcHJlZml4XG4iCgojOiBz
+cmMvc2V0bWV0YW1vZGUuYzo0Mgptc2dpZCAiU3RyYW5nZSBtb2RlIGZvciBNZXRhIGtleT9cbiIK
+bXNnc3RyICJLb25zdGlndCBs5GdlIGb2ciBNZXRhdGFuZ2VudGVuP1xuIgoKIzogc3JjL3NldG1l
+dGFtb2RlLmM6NzgKbXNnaWQgIkVycm9yIHJlYWRpbmcgY3VycmVudCBzZXR0aW5nLiBNYXliZSBz
+dGRpbiBpcyBub3QgYSBWVD9cbiIKbXNnc3RyICJGZWwgdmlkIGzkc25pbmcgYXYgbnV2YXJhbmRl
+IGluc3TkbGxuaW5nLiBTdGFuZGFyZCBpbiBrYW5za2UgaW50ZSDkciBlbiBWVD9cbiIKCiM6IHNy
+Yy9zZXRtZXRhbW9kZS5jOjk4Cm1zZ2lkICJvbGQgc3RhdGU6ICAgICIKbXNnc3RyICJnYW1tYWx0
+IHRpbGxzdOVuZDogICAgIgoKIzogc3JjL3NldG1ldGFtb2RlLmM6MTA0Cm1zZ2lkICJuZXcgc3Rh
+dGU6ICAgICIKbXNnc3RyICJueXR0IHRpbGxzdOVuZDogICAgICAgIgoKIzogc3JjL3NldHZlc2Fi
+bGFuay5jOjIxCiMsIGMtZm9ybWF0Cm1zZ2lkICJ1c2FnZTogJXNcbiIKbXNnc3RyICJhbnbkbmRu
+aW5nOiAlc1xuIgoKIzogc3JjL3Nob3dmb250LmM6MzAKbXNnaWQgImZhaWxlZCB0byByZXN0b3Jl
+IG9yaWdpbmFsIHRyYW5zbGF0aW9uIHRhYmxlXG4iCm1zZ3N0ciAibWlzc2x5Y2thZGVzIG1lZCBh
+dHQg5XRlcnN05GxsYSBvcmlnaW5hbPZ2ZXJz5HR0bmluZ3N0YWJlbGxlblxuIgoKIzogc3JjL3No
+b3dmb250LmM6MzUKbXNnaWQgImZhaWxlZCB0byByZXN0b3JlIG9yaWdpbmFsIHVuaW1hcFxuIgpt
+c2dzdHIgIm1pc3NseWNrYWRlcyBtZWQgYXR0IOV0ZXJzdORsbGEgb3JpZ2luYWx1bml0YWJlbGxc
+biIKCiM6IHNyYy9zaG93Zm9udC5jOjUzCm1zZ2lkICJjYW5ub3QgY2hhbmdlIHRyYW5zbGF0aW9u
+IHRhYmxlXG4iCm1zZ3N0ciAia2FuIGludGUg5G5kcmEg9nZlcnPkdHRuaW5nc3RhYmVsbGVuXG4i
+CgojOiBzcmMvc2hvd2ZvbnQuYzo2MAojLCBjLWZvcm1hdAptc2dpZCAiJXM6IG91dCBvZiBtZW1v
+cnk/XG4iCm1zZ3N0ciAiJXM6IHNsdXQgcOUgbWlubmU/XG4iCgojOiBzcmMvc2hvd2ZvbnQuYzox
+MDEKbXNnaWQgIiIKInVzYWdlOiBzaG93Zm9udCBbLXZ8LVZdXG4iCiIocHJvYmFibHkgYWZ0ZXIg
+bG9hZGluZyBhIGZvbnQgd2l0aCBgc2V0Zm9udCBmb250JylcbiIKbXNnc3RyICIiCiJhbnbkbmRu
+aW5nOiBzaG93Zm9udCBbLXZ8LVZdXG4iCiIoZvZybW9kbGlnZW4gZWZ0ZXIgYXR0IGhhIGzkc3Qg
+aW4gZXR0IHR5cHNuaXR0IG1lZCBcInNldGZvbnQgdHlwc25pdHRcIilcbiIKCiM6IHNyYy9zaG93
+a2V5LmM6NDIKbXNnaWQgIj9VTktOT1dOPyIKbXNnc3RyICI/T0vETlQ/IgoKIzogc3JjL3Nob3dr
+ZXkuYzo0NAojLCBjLWZvcm1hdAptc2dpZCAia2IgbW9kZSB3YXMgJXNcbiIKbXNnc3RyICJ0Z2It
+bORnZSB2YXIgJXNcbiIKCiM6IHNyYy9zaG93a2V5LmM6NDYKbXNnaWQgIiIKIlsgaWYgeW91IGFy
+ZSB0cnlpbmcgdGhpcyB1bmRlciBYLCBpdCBtaWdodCBub3Qgd29ya1xuIgoic2luY2UgdGhlIFgg
+c2VydmVyIGlzIGFsc28gcmVhZGluZyAvZGV2L2NvbnNvbGUgXVxuIgptc2dzdHIgIiIKIlsgb20g
+ZHUgZ/ZyIGRldCBo5HIgaSBYIGthbnNrZSBkZXQgaW50ZSBmdW5nZXJhclxuIgoiZWZ0ZXJzb20g
+WC1zZXJ2ZXJuIG9ja3PlIGzkc2VyIC9kZXYvY29uc29sZSBdXG4iCgojOiBzcmMvc2hvd2tleS5j
+OjY1CiMsIGMtZm9ybWF0Cm1zZ2lkICJjYXVnaHQgc2lnbmFsICVkLCBjbGVhbmluZyB1cC4uLlxu
+Igptc2dzdHIgImZpY2sgc2lnbmFsZW4gJWQsIHN05GRhciB1cHAuLi5cbiIKCiM6IHNyYy9zaG93
+a2V5LmM6NzkKIywgYy1mb3JtYXQKbXNnaWQgIiIKInNob3drZXkgdmVyc2lvbiAlc1xuIgoiXG4i
+CiJ1c2FnZTogc2hvd2tleSBbb3B0aW9ucy4uLl1cbiIKIlxuIgoidmFsaWQgb3B0aW9ucyBhcmU6
+XG4iCiJcbiIKIlx0LWggLS1oZWxwXHRkaXNwbGF5IHRoaXMgaGVscCB0ZXh0XG4iCiJcdC1hIC0t
+YXNjaWlcdGRpc3BsYXkgdGhlIGRlY2ltYWwvb2N0YWwvaGV4IHZhbHVlcyBvZiB0aGUga2V5c1xu
+IgoiXHQtcyAtLXNjYW5jb2Rlc1x0ZGlzcGxheSBvbmx5IHRoZSByYXcgc2Nhbi1jb2Rlc1xuIgoi
+XHQtayAtLWtleWNvZGVzXHRkaXNwbGF5IG9ubHkgdGhlIGludGVycHJldGVkIGtleWNvZGVzIChk
+ZWZhdWx0KVxuIgptc2dzdHIgIiIKInNob3drZXkgdmVyc2lvbiAlc1xuIgoiXG4iCiJhbnbkbmRu
+aW5nOiBzaG93a2V5IFtmbGFnZ29yLi4uXVxuIgoiXG4iCiJ0aWxs5XRuYSBmbGFnZ29yIORyOlxu
+IgoiXG4iCiJcdC1oIC0taGVscFx0dmlzYSBkZW4gaORyIGhq5GxwdGV4dGVuXG4iCiJcdC1hIC0t
+YXNjaWlcdHZpc2EgZGVjaW1hbGEvb2t0YWxhL2hleGFkZWNpbWFsYSB25HJkZW4gZvZyIHRlY2tu
+ZW5cbiIKIlx0LXMgLS1zY2FuY29kZXNcdHZpc2EgYmFyYSBkZSBy5WEgYXZs5HNuaW5nc2tvZGVy
+bmFcbiIKIlx0LWsgLS1rZXljb2Rlc1x0dmlzYSBiYXJhIGRlIHRvbGthZGUgdGFuZ2VudGtvZGVy
+bmEgKHN0YW5kYXJkdmFsKVxuIgoKIzogc3JjL3Nob3drZXkuYzoxNTcKbXNnaWQgIlxuUHJlc3Mg
+YW55IGtleXMgLSBDdHJsLUQgd2lsbCB0ZXJtaW5hdGUgdGhpcyBwcm9ncmFtXG5cbiIKbXNnc3Ry
+ICJcblRyeWNrIG7lZ29uIHRhbmdlbnQgLSBDdHJsLUQga29tbWVyIGF0dCBhdnNsdXRhIHByb2dy
+YW1tZXRcblxuIgoKIzogc3JjL3Nob3drZXkuYzoyMjYKbXNnaWQgInByZXNzIGFueSBrZXkgKHBy
+b2dyYW0gdGVybWluYXRlcyAxMHMgYWZ0ZXIgbGFzdCBrZXlwcmVzcykuLi5cbiIKbXNnc3RyICJ0
+cnljayBu5WdvbiB0YW5nZW50IChwcm9ncmFtbWV0IGF2c2x1dGFzIDEwIHMgZWZ0ZXIgc2lzdGEg
+dGFuZ2VudHRyeWNrbmluZykuLi5cbiIKCiM6IHNyYy9zaG93a2V5LmM6MjM0CiMsIGMtZm9ybWF0
+Cm1zZ2lkICJrZXljb2RlICUzZCAlc1xuIgptc2dzdHIgInRhbmdlbnRrb2QgJTNkICVzXG4iCgoj
+OiBzcmMvc2hvd2tleS5jOjIzNgptc2dpZCAicmVsZWFzZSIKbXNnc3RyICJzbORwcCIKCiM6IHNy
+Yy9zaG93a2V5LmM6MjM3Cm1zZ2lkICJwcmVzcyIKbXNnc3RyICJ0cnljayIKCiM6IHNyYy92ZXJz
+aW9uLmg6MTcKIywgYy1mb3JtYXQKbXNnaWQgIiVzIGZyb20gJXNcbiIKbXNnc3RyICIlcyBmcuVu
+ICVzXG4iCg==
+--=-=-=
+
+ The Translation Project robot, in the
+ name of your kind translation coordinator.
+ mailto:translation@iro.umontreal.ca
+
+--=-=-=--
+
msgid "usage: %s\n"
msgstr "aanroep: %s\n"
-#: src/showfont.c:18
+#: src/showconsolefont.c:18
msgid "failed to restore original translation table\n"
msgstr "kon de oorspronkelijke omnummertabel niet herstellen\n"
-#: src/showfont.c:34
+#: src/showconsolefont.c:34
msgid ""
-"usage: showfont\n"
+"usage: showconsolefont\n"
"(probably after loading a font with `setfont font')\n"
msgstr ""
-"aanroep: showfont\n"
+"aanroep: showconsolefont\n"
"(gewoonlijk na het laden van een font met `setfont font')\n"
-#: src/showfont.c:60
+#: src/showconsolefont.c:60
msgid "cannot change translation table\n"
msgstr "kan de omnummertabel niet aanpassen\n"
-#: src/showfont.c:86
+#: src/showconsolefont.c:86
msgid "cannot change translation table??\n"
msgstr "kan de omnummertabel niet aanpassen??\n"
msgid "usage: %s\n"
msgstr "ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: %s\n"
-#: src/showfont.c:18
+#: src/showconsolefont.c:18
msgid "failed to restore original translation table\n"
msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÏÓÓÔÁÎÏ×ÉÔØ ÉÓÈÏÄÎÕÀ ÔÁÂÌÉÃÕ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÊ\n"
-#: src/showfont.c:34
+#: src/showconsolefont.c:34
msgid ""
-"usage: showfont\n"
+"usage: showconsolefont\n"
"(probably after loading a font with `setfont font')\n"
msgstr ""
-"ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: showfont\n"
+"ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁË: showconsolefont\n"
"(ÓËÏÒÅÅ ×ÓÅÇÏ, ÐÏÓÌÅ ÚÁÇÒÕÚËÉ ÛÒÉÆÔÁ ÐÏÓÒÅÄÓÔ×ÏÍ `setfont font')\n"
-#: src/showfont.c:60
+#: src/showconsolefont.c:60
msgid "cannot change translation table\n"
msgstr "ÎÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÁÂÌÉÃÕ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÊ\n"
-#: src/showfont.c:86
+#: src/showconsolefont.c:86
msgid "cannot change translation table??\n"
msgstr "ÎÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÁÂÌÉÃÕ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÊ (?)\n"
+++ /dev/null
-From: Bruno Haible <haible@ilog.fr>
-Date: Mon, 4 Oct 1999 16:03:41 +0200 (MET DST)
-
-[patch on kbd-0.99]
-
-The precise changes are as follows:
-
-* ksyms.h:
- - New structure `sym', includes a Unicode value.
- - Use "const char *" instead of "char *", this helps me ensure that I don't
- accidentally clobber a string literal.
- - Declare a new function `unicodetoksym', which is used to make pretty
- output for dumpkeys when in Unicode mode (i.e. convert back "U+0401" to
- "cyrillic_capital_letter_io").
-* ksyms.c:
- - Add Unicode codes to all syms.
-* cyrillic.syms.h, ethiopic.syms.h: Likewise.
-* ksyms.c:
- - I'm really not confident that it's safe to erase the upper half of
- latin1_syms in set_charset(). It might cause obscure bugs. Therefore I
- split latin1_syms into `iso646_syms' whose upper half can be freely
- modified, and `latin1_syms' proper which contains only the Latin1 syms.
- I.e. treat Latin1 like Latin2, Latin3 etc.
- { Hmm. It was correct. Now all character sets except latin1 are broken. }
- - Added a few comments in front of the spec_syms, pad_syms, etc. tables.
- Without these comments, it was really hard to understand the "big picture"
- of the keyboard driver. Especially since "sticky_syms" corresponds to
- KT_SLOCK, and KT_LATIN actually means KT_8BIT - how would you guess?
- - In koi8_r_syms, added the range 128..159 which was previously unmapped.
- - Added function unicodetoksym, for dumpkeys.
- - ksymtocode: Add support for the `prefer_unicode' flag set by the -u
- option. Treat Latin1 like Latin2, Latin3 etc.
- - Added function unicodetocode which converts a Unicode value to a
- 16-bit code for the keyboard driver. Set unicode_used = 1 only if
- Unicode is really needed.
- - Added function add_capslock which outputs a warning if it has to
- ignore the "+" flag (because of the current limitation in the kernel:
- only KT_LATIN codes are capable of CapsLock treatment).
-* loadkeys.y:
- - The unicode_used variable has been transferred to ksyms.c, because it's
- now used there. Otherwise `dumpkeys' wouldn't link.
- - Use the capslock function. `unicode_used' is now set if it really used,
- it depends on both the keymap entry _and_ the value of the -u option.
- - Implement option --unicode.
-* analyze.l:
- - Use unicodetocode here, so the upper level (loadkeys.y) can operate on
- KTYP/KVAL composed code.
-* dumpkeys.c:
- - printksym bug fix: KT_LETTER was assumed to be the largest KT_* value. It
- is not.
- - printksym uses unicodetoksym in order to print the ksym string. This
- generates more maintainable keymaps. ("cedilla" tells the user a lot
- more than "U+00b8".)
-
# Maybe we want to use a qwertz keyboard before /usr is mounted
ifndef LOADKEYS_BINDIR
-LOADKEYS_BINDIR = $(DESTDIR)/bin
+ifeq ($(DESTDIR), /usr)
+ LOADKEYS_BINDIR = /bin
+else
+ LOADKEYS_BINDIR = $(DESTDIR)/bin
+endif
endif
-PROGS = dumpkeys loadkeys showkey setfont showfont \
+PROGS = dumpkeys loadkeys showkey setfont showconsolefont \
setleds setmetamode kbd_mode chvt deallocvt \
psfxtable kbdrate fgconsole
# Not installed by default
MISC = screendump setlogcons setvesablank spawn_console spawn_login \
- getunimap clrunimap outpsfheader
+ getunimap clrunimap outpsfheader setpalette
# Installed by default
SHCMDS = unicode_start unicode_stop
catwithfont.o chvt.o clrunimap.o deallocvt.o dumpkeys.o fgconsole.o: getfd.h
getfd.o getkeycodes.o getunimap.o kbd_mode.o loadkeys.o loadunimap.o: getfd.h
mapscrn.o resizecons.o setfont.o setkeycodes.o setlogcons.o: getfd.h
-setvesablank.o showfont.o showkey.o: getfd.h
+setpalette.o setvesablank.o showconsolefont.o showkey.o: getfd.h
-kdfontop.o setfont.o showfont.o: kdfontop.h
+kdfontop.o setfont.o showconsolefont.o: kdfontop.h
clrunimap.o kdmapop.o loadunimap.o mapscrn.o: kdmapop.h
findfile.o getfd.o getkeycodes.o getunimap.o kbd_mode.o kbdrate.o: nls.h
kdfontop.o ksyms.o loadkeys.o loadunimap.o mapscrn.o psffontop.o: nls.h
psfxtable.o resizecons.o screendump.o setfont.o setkeycodes.o setleds.o: nls.h
-setmetamode.o setvesablank.o showfont.o showkey.o xmalloc.o: nls.h
+setmetamode.o setvesablank.o showconsolefont.o showkey.o xmalloc.o: nls.h
loadkeys.o loadunimap.o mapscrn.o resizecons.o setfont.o: paths.h
chvt.o deallocvt.o dumpkeys.o getkeycodes.o getunimap.o kbd_mode.o: version.h
kbdrate.o loadkeys.o loadunimap.o mapscrn.o psfxtable.o resizecons.o: version.h
screendump.o setfont.o setkeycodes.o setleds.o setmetamode.o: version.h
-showfont.o showkey.o totextmode.o: version.h
+showconsolefont.o showkey.o totextmode.o: version.h
findfile.o kdfontop.o loadunimap.o psffontop.o psfxtable.o: xmalloc.h
setfont.o xmalloc.o: xmalloc.h
dumpkeys loadkeys: ksyms.o xmalloc.o
-getunimap screendump showfont: xmalloc.o
+getunimap screendump showconsolefont: xmalloc.o
psfxtable: psffontop.o xmalloc.o utf8.o
chvt clrunimap deallocvt dumpkeys fgconsole getkeycodes getunimap: getfd.o
kbd_mode loadkeys loadunimap mapscrn resizecons setkeycodes setfont: getfd.o
-showfont setlogcons setvesablank showkey: getfd.o
+setpalette showconsolefont setlogcons setvesablank showkey: getfd.o
setfont: mapscrn.o loadunimap.o kdmapop.o kdfontop.o psffontop.o utf8.o
loadunimap: utf8.o
-getunimap mapscrn clrunimap loadunimap showfont: kdmapop.o
+getunimap mapscrn clrunimap loadunimap showconsolefont: kdmapop.o
-catwithfont showfont: kdfontop.o
+catwithfont showconsolefont: kdfontop.o
+++ /dev/null
-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.
}
} else for (i = 1; i < argc; i++) {
num = atoi(argv[i]);
- if (num == 0)
+ if (num == 0) {
fprintf(stderr,
_("%s: 0: illegal VT number\n"), progname);
- else if (num == 1)
+ exit(1);
+ } 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)) {
+ exit(1);
+ } 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);
* fgconsole.c - aeb - 960123 - Print foreground console
*/
#include <stdio.h>
+#include <stdlib.h>
#include <sys/ioctl.h>
#include <linux/vt.h>
#include "getfd.h"
struct dirent *de;
char *ff, *fdir, *p, *q, **sp;
struct decompressor *dc;
+ int secondpass = 0;
ispipe = 0;
} else
fdir = 0; /* just to please gcc */
+ /* Scan the directory twice: first for files, then
+ for subdirectories, so that we do never search
+ a subdirectory when the directory itself already
+ contains the file we are looking for. */
+ StartScan:
d = opendir(dir);
if (d == NULL)
return NULL;
okdir = (ff && strcmp(de->d_name, fdir) == 0);
- if (recdepth || okdir) {
+ if ((secondpass && recdepth) || okdir) {
struct stat statbuf;
char *a;
free(a);
}
+ if (secondpass)
+ continue;
+
/* Should we be in a subdirectory? */
if (ff)
continue;
}
}
}
+ closedir(d);
+ if (recdepth > 0 && !secondpass) {
+ secondpass = 1;
+ goto StartScan;
+ }
return NULL;
}
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
if (fd >= 0)
return fd;
+ fd = open_a_console("/dev/vc/0");
+ if (fd >= 0)
+ return fd;
+
fd = open_a_console("/dev/console");
if (fd >= 0)
return fd;
(Roman.Hodek@informatik.uni-erlangen.de):
Reading/writing the Intel I/O ports via /dev/port is not the
- English way... Such hardware dependant stuff can never work on
+ English way... Such hardware dependent stuff can never work on
other architectures.
Linux/68k has an new ioctl for setting the keyboard repeat rate
#include <sys/file.h>
#include <sys/ioctl.h>
-#include "../defines.h"
-#ifdef HAVE_kd_h
-#include <linux/kd.h>
-#endif
#ifdef __sparc__
#include <asm/param.h>
#include <asm/kbio.h>
#endif
+#ifndef KDKBDREP
+/* usually defined in <linux/kd.h> */
+#define KDKBDREP 0x4B52 /* set keyboard delay/repeat rate;
+ * actually used values are returned */
+struct kbd_repeat {
+ int delay; /* in msec; <= 0: don't change */
+ int period; /* in msec; <= 0: don't change */
+};
+#endif
+
#include "nls.h"
#include "version.h"
static int
KDKBDREP_ioctl_ok(double rate, int delay, int silent) {
-#ifdef KDKBDREP
/* This ioctl is defined in <linux/kd.h> but is not
implemented anywhere - must be in some m68k patches. */
struct kbd_repeat kbdrep_s;
/* don't change, just test */
- kbdrep_s.rate = -1;
+ kbdrep_s.period = -1;
kbdrep_s.delay = -1;
if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
if (errno == EINVAL)
exit( 1 );
}
+#if 0
+ printf("old delay %d, period %d\n",
+ kbdrep_s.delay, kbdrep_s.period);
+#endif
+
/* do the change */
- if (rate == 0) /* switch repeat off */
- kbdrep_s.rate = 0;
+ if (rate == 0) /* switch repeat off */
+ kbdrep_s.period = 0;
else
- kbdrep_s.rate = 1000.0 / rate; /* convert cps to msec */
- if (kbdrep_s.rate < 1)
- kbdrep_s.rate = 1;
+ kbdrep_s.period = 1000.0 / rate; /* convert cps to msec */
+ if (kbdrep_s.period < 1)
+ kbdrep_s.period = 1;
kbdrep_s.delay = delay;
if (kbdrep_s.delay < 1)
kbdrep_s.delay = 1;
- if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
- perror( "ioctl(KDKBDREP)" );
- exit( 1 );
+ if (ioctl(0, KDKBDREP, &kbdrep_s)) {
+ perror("ioctl(KDKBDREP)");
+ exit(1);
}
/* report */
- if (kbdrep_s.rate == 0)
+ if (kbdrep_s.period == 0)
rate = 0;
else
- rate = 1000.0 / (double) kbdrep_s.rate;
+ rate = 1000.0 / (double) kbdrep_s.period;
if (!silent)
printf( _("Typematic Rate set to %.1f cps (delay = %d ms)\n"),
rate, kbdrep_s.delay );
return 1; /* success! */
-
-#else /* no KDKBDREP */
- return 0;
-#endif /* KDKBDREP */
}
static int
exit( 1 );
}
- kbdrate_s.rate = (int) (rate + 0.5); /* round up */
+ kbdrate_s.period = (int) (rate + 0.5); /* round up */
kbdrate_s.delay = delay * HZ / 1000; /* convert ms to Hz */
- if (kbdrate_s.rate > 50)
- kbdrate_s.rate = 50;
+ if (kbdrate_s.period > 50)
+ kbdrate_s.period = 50;
if (ioctl( fd, KIOCSRATE, &kbdrate_s )) {
perror( "ioctl(KIOCSRATE)" );
if (!silent)
printf( "Typematic Rate set to %d cps (delay = %d ms)\n",
- kbdrate_s.rate, kbdrate_s.delay * 1000 / HZ );
+ kbdrate_s.period, kbdrate_s.delay * 1000 / HZ );
return 1;
#else /* no KIOCSRATE */
#include "koi8.syms.h"
#include "cp1250.syms.h"
#include "ethiopic.syms.h"
+#include "sami.syms.h"
static sym iso_8859_15_syms[] = {
/* latin-1 with 8 changes */
{ "iso-8859-7", iso_8859_7_syms, 160 },
{ "iso-8859-8", iso_8859_8_syms, 160 },
{ "iso-8859-9", iso_8859_9_syms, 208 },
+ { "iso-8859-10", latin6_syms, 160 },
{ "iso-8859-15", iso_8859_15_syms, 160 },
{ "mazovia", mazovia_syms, 128 },
{ "cp-1250", cp1250_syms, 128 },
{ "koi8-r", koi8_syms, 128 },
{ "koi8-u", koi8_syms, 128 },
{ "iso-10646-18", iso_10646_18_syms, 159 }, /* ethiopic */
+ { "iso-ir-197", iso_ir_197_syms, 160 }, /* sami */
+ { "iso-ir-209", iso_ir_209_syms, 160 }, /* sami */
};
/* Functions for both dumpkeys and loadkeys. */
/*
* 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
+ * For history, see older versions.
*/
%token EOL NUMBER LITERAL CHARSET KEYMAPS KEYCODE EQUALS
#define U(x) ((x) ^ 0xf000)
#undef ECHO
-#include "analyze.c"
static void addmap(int map, int explicit);
static void addkey(int index, int table, int keycode);
int mod;
extern int unicode_used;
int private_error_ct = 0;
+
+extern int rvalct;
+extern struct kbsentry kbs_buf;
+extern void lkfatal(const char *s);
+extern void lkfatal1(const char *s, const char *s2);
+
+#include "ksyms.h"
%}
%%
;
%%
+#include "analyze.c"
+
void
usage(void) {
fprintf(stderr, _("loadkeys version %s\n"
char *t, *te, *t1, *t2;
int len;
+ if (!fn)
+ return NULL;
+
t = xstrdup(fn);
te = rindex(t, '/');
if (te) {
/* If filename is a symlink, also look near its target. */
if (!f) {
- char buf[1024];
+ char buf[1024], path[1024], *p;
int n;
n = readlink(filename, buf, sizeof(buf));
if (n > 0 && n < sizeof(buf)) {
buf[n] = 0;
- f = find_incl_file_near_fn(s, buf);
+ if (buf[0] == '/')
+ f = find_incl_file_near_fn(s, buf);
+ else if (strlen(filename) + n < sizeof(path)) {
+ strcpy(path, filename);
+ path[sizeof(path)-1] = 0;
+ p = rindex(path, '/');
+ if (p)
+ p[1] = 0;
+ strcat(path, buf);
+ f = find_incl_file_near_fn(s, path);
+ }
}
}
line_nr = 1;
if (optd) {
- /* first read default map */
+ /* first read default map - search starts in . */
optd = 0;
if((f = findfile(DEFMAP, dirpath, suffixes)) == NULL) {
fprintf(stderr, _("Cannot find %s\n"), DEFMAP);
while (p < fp)
*q++ = *p++;
fp -= sh;
+
+ for (i = kbs.kb_func + 1; i < MAX_NR_FUNC; i++)
+ if (func_table[i])
+ func_table[i] -= sh;
}
+
p = func_buf; /* find place for new def */
for (i = 0; i < kbs.kb_func; i++)
if (func_table[i]) {
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);
+ fprintf(stderr,
+ _("%s: addfunc: func_buf overflow\n"), progname);
exit(1);
}
q = fp;
while (q > p)
*--r = *--q;
strcpy(p, kbs.kb_string);
- for (i++; i < MAX_NR_FUNC; i++)
+ for (i = kbs.kb_func + 1; i < MAX_NR_FUNC; i++)
if (func_table[i])
func_table[i] += sh;
}
*/
#include <stdio.h>
+#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <fcntl.h>
for (i=0; i<16; i++)
if (vtstat.v_state & (1<<i)) {
sprintf(tty, "/dev/tty%d", i);
- if ((fd = open(tty, O_RDONLY)) > 0) {
+ fd = open(tty, O_RDONLY);
+ if (fd < 0 && errno == ENOENT) {
+ sprintf(tty, "/dev/vc/%d", i);
+ fd = open(tty, O_RDONLY);
+ }
+ if (fd >= 0) {
if(ioctl(fd, TIOCSWINSZ, &winsize))
perror("TIOCSWINSZ");
close(fd);
--- /dev/null
+/* This file was contributed by Regnor Jernsletten, Jan 2002 */
+
+/*
+ * Northern Sámi symbols.
+ *
+ * { "iso-ir-197", iso_ir_197_syms, nn },
+ */
+
+static sym iso_ir_197_syms[] = {
+ { 0x00a0, "nobreakspace" },
+ { 0x010c, "Ccaron" },
+ { 0x010d, "ccaron" },
+ { 0x0110, "Dstroke" },
+ { 0x0111, "dstroke" },
+ { 0x01e4, "Gstroke" },
+ { 0x01e5, "gstroke" },
+ { 0x00a7, "section" },
+ { 0x01e6, "Gcaron" },
+ { 0x00a9, "copyright" },
+ { 0x01e7, "gcaron" },
+ { 0x00ab, "guillemotleft" },
+ { 0x01e8, "Kcaron" },
+ { 0x00ad, "hyphen" },
+ { 0x01e9, "kcaron" },
+ { 0x014a, "ENG" },
+ { 0x00b0, "degree" },
+ { 0x014b, "eng" },
+ { 0x0160, "Scaron" },
+ { 0x0161, "scaron" },
+ { 0x00b4, "acute" },
+ { 0x0166, "Tstroke" },
+ { 0x00b6, "paragraph" },
+ { 0x00b7, "periodcentered" },
+ { 0x0167, "tstroke" },
+ { 0x017d, "Zcaron" },
+ { 0x017e, "zcaron" },
+ { 0x00bb, "guillemotright" },
+ { 0x01b7, "EZH" },
+ { 0x0292, "ezh" },
+ { 0x01ee, "EZHcaron" },
+ { 0x01ef, "ezhcaron" },
+ { 0x00c0, "Agrave" },
+ { 0x00c1, "Aacute" },
+ { 0x00c2, "Acircumflex" },
+ { 0x00c3, "Atilde" },
+ { 0x00c4, "Adiaeresis" },
+ { 0x00c5, "Aring" },
+ { 0x00c6, "AE" },
+ { 0x00c7, "Ccedilla" },
+ { 0x00c8, "Egrave" },
+ { 0x00c9, "Eacute" },
+ { 0x00ca, "Ecircumflex" },
+ { 0x00cb, "Ediaeresis" },
+ { 0x00cc, "Igrave" },
+ { 0x00cd, "Iacute" },
+ { 0x00ce, "Icircumflex" },
+ { 0x00cf, "Idiaeresis" },
+ { 0x00d0, "ETH" },
+ { 0x00d1, "Ntilde" },
+ { 0x00d2, "Ograve" },
+ { 0x00d3, "Oacute" },
+ { 0x00d4, "Ocircumflex" },
+ { 0x00d5, "Otilde" },
+ { 0x00d6, "Odiaeresis" },
+ { 0x00d7, "multiplication" },
+ { 0x00d8, "Ostroke" },
+ { 0x00d9, "Ugrave" },
+ { 0x00da, "Uacute" },
+ { 0x00db, "Ucircumflex" },
+ { 0x00dc, "Udiaeresis" },
+ { 0x00dd, "Yacute" },
+ { 0x00de, "THORN" },
+ { 0x00df, "ssharp" },
+ { 0x00e0, "agrave" },
+ { 0x00e1, "aacute" },
+ { 0x00e2, "acircumflex" },
+ { 0x00e3, "atilde" },
+ { 0x00e4, "adiaeresis" },
+ { 0x00e5, "aring" },
+ { 0x00e6, "ae" },
+ { 0x00e7, "ccedilla" },
+ { 0x00e8, "egrave" },
+ { 0x00e9, "eacute" },
+ { 0x00ea, "ecircumflex" },
+ { 0x00eb, "ediaeresis" },
+ { 0x00ec, "igrave" },
+ { 0x00ed, "iacute" },
+ { 0x00ee, "icircumflex" },
+ { 0x00ef, "idiaeresis" },
+ { 0x00f0, "eth" },
+ { 0x00f1, "ntilde" },
+ { 0x00f2, "ograve" },
+ { 0x00f3, "oacute" },
+ { 0x00f4, "ocircumflex" },
+ { 0x00f5, "otilde" },
+ { 0x00f6, "odiaeresis" },
+ { 0x00f7, "division" },
+ { 0x00f8, "ostroke" },
+ { 0x00f9, "ugrave" },
+ { 0x00fa, "uacute" },
+ { 0x00fb, "ucircumflex" },
+ { 0x00fc, "udiaeresis" },
+ { 0x00fd, "yacute" },
+ { 0x00fe, "thorn" },
+ { 0x00ff, "ydiaeresis" },
+};
+
+/*
+ * ISO-IR-209 covers the Romani language as written in Finland.
+ * Identical to previous one with two exceptions:
+ *
+ * ISO-IR-197
+ * 0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ * 0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ * ISO-IR-209
+ * 0xAB 0x021E # LATIN CAPITAL LETTER H WITH CARON
+ * 0xBB 0x021F # LATIN SMALL LETTER H WITH CARON
+ */
+
+static sym iso_ir_209_syms[] = {
+ { 0x00a0, "nobreakspace" },
+ { 0x010c, "Ccaron" },
+ { 0x010d, "ccaron" },
+ { 0x0110, "Dstroke" },
+ { 0x0111, "dstroke" },
+ { 0x01e4, "Gstroke" },
+ { 0x01e5, "gstroke" },
+ { 0x00a7, "section" },
+ { 0x01e6, "Gcaron" },
+ { 0x00a9, "copyright" },
+ { 0x01e7, "gcaron" },
+ { 0x021e, "Hcaron" },
+ { 0x01e8, "Kcaron" },
+ { 0x00ad, "hyphen" },
+ { 0x01e9, "kcaron" },
+ { 0x014a, "ENG" },
+ { 0x00b0, "degree" },
+ { 0x014b, "eng" },
+ { 0x0160, "Scaron" },
+ { 0x0161, "scaron" },
+ { 0x00b4, "acute" },
+ { 0x0166, "Tstroke" },
+ { 0x00b6, "paragraph" },
+ { 0x00b7, "periodcentered" },
+ { 0x0167, "tstroke" },
+ { 0x017d, "Zcaron" },
+ { 0x017e, "zcaron" },
+ { 0x021f, "hcaron" },
+ { 0x01b7, "EZH" },
+ { 0x0292, "ezh" },
+ { 0x01ee, "EZHcaron" },
+ { 0x01ef, "ezhcaron" },
+ { 0x00c0, "Agrave" },
+ { 0x00c1, "Aacute" },
+ { 0x00c2, "Acircumflex" },
+ { 0x00c3, "Atilde" },
+ { 0x00c4, "Adiaeresis" },
+ { 0x00c5, "Aring" },
+ { 0x00c6, "AE" },
+ { 0x00c7, "Ccedilla" },
+ { 0x00c8, "Egrave" },
+ { 0x00c9, "Eacute" },
+ { 0x00ca, "Ecircumflex" },
+ { 0x00cb, "Ediaeresis" },
+ { 0x00cc, "Igrave" },
+ { 0x00cd, "Iacute" },
+ { 0x00ce, "Icircumflex" },
+ { 0x00cf, "Idiaeresis" },
+ { 0x00d0, "ETH" },
+ { 0x00d1, "Ntilde" },
+ { 0x00d2, "Ograve" },
+ { 0x00d3, "Oacute" },
+ { 0x00d4, "Ocircumflex" },
+ { 0x00d5, "Otilde" },
+ { 0x00d6, "Odiaeresis" },
+ { 0x00d7, "multiplication" },
+ { 0x00d8, "Ostroke" },
+ { 0x00d9, "Ugrave" },
+ { 0x00da, "Uacute" },
+ { 0x00db, "Ucircumflex" },
+ { 0x00dc, "Udiaeresis" },
+ { 0x00dd, "Yacute" },
+ { 0x00de, "THORN" },
+ { 0x00df, "ssharp" },
+ { 0x00e0, "agrave" },
+ { 0x00e1, "aacute" },
+ { 0x00e2, "acircumflex" },
+ { 0x00e3, "atilde" },
+ { 0x00e4, "adiaeresis" },
+ { 0x00e5, "aring" },
+ { 0x00e6, "ae" },
+ { 0x00e7, "ccedilla" },
+ { 0x00e8, "egrave" },
+ { 0x00e9, "eacute" },
+ { 0x00ea, "ecircumflex" },
+ { 0x00eb, "ediaeresis" },
+ { 0x00ec, "igrave" },
+ { 0x00ed, "iacute" },
+ { 0x00ee, "icircumflex" },
+ { 0x00ef, "idiaeresis" },
+ { 0x00f0, "eth" },
+ { 0x00f1, "ntilde" },
+ { 0x00f2, "ograve" },
+ { 0x00f3, "oacute" },
+ { 0x00f4, "ocircumflex" },
+ { 0x00f5, "otilde" },
+ { 0x00f6, "odiaeresis" },
+ { 0x00f7, "division" },
+ { 0x00f8, "ostroke" },
+ { 0x00f9, "ugrave" },
+ { 0x00fa, "uacute" },
+ { 0x00fb, "ucircumflex" },
+ { 0x00fc, "udiaeresis" },
+ { 0x00fd, "yacute" },
+ { 0x00fe, "thorn" },
+ { 0x00ff, "ydiaeresis" },
+};
+
+static sym latin6_syms[] = {
+ { 0x00a0, "nobreakspace" },
+ { 0x0104, "Aogonek" },
+ { 0x0112, "Emacron" },
+ { 0x0122, "Gcedilla" },
+ { 0x012a, "Imacron" },
+ { 0x0128, "Itilde" },
+ { 0x0136, "Kcedilla" },
+ { 0x00a7, "section" },
+ { 0x013b, "Lcedilla" },
+ { 0x0110, "Dstroke" },
+ { 0x0160, "Scaron" },
+ { 0x0166, "Tstroke" },
+ { 0x017d, "Zcaron" },
+ { 0x00ad, "hyphen" },
+ { 0x016a, "Umacron" },
+ { 0x014a, "ENG" },
+ { 0x00b0, "degree" },
+ { 0x0105, "aogonek" },
+ { 0x0113, "emacron" },
+ { 0x0123, "gcedilla" },
+ { 0x012b, "imacron" },
+ { 0x0129, "itilde" },
+ { 0x0137, "kcedilla" },
+ { 0x00b7, "periodcentered" },
+ { 0x013c, "lcedilla" },
+ { 0x0111, "dstroke" },
+ { 0x0161, "scaron" },
+ { 0x0167, "tstroke" },
+ { 0x017e, "zcaron" },
+ { 0x2014, "emdash" },
+ { 0x016b, "umacron" },
+ { 0x014b, "eng" },
+ { 0x0100, "Amacron" },
+ { 0x00c1, "Aacute" },
+ { 0x00c2, "Acircumflex" },
+ { 0x00c3, "Atilde" },
+ { 0x00c4, "Adiaeresis" },
+ { 0x00c5, "Aring" },
+ { 0x00c6, "AE" },
+ { 0x012e, "Iogonek" },
+ { 0x010c, "Ccaron" },
+ { 0x00c9, "Eacute" },
+ { 0x0118, "Eogonek" },
+ { 0x00cb, "Ediaeresis" },
+ { 0x0116, "Eabovedot" },
+ { 0x00cd, "Iacute" },
+ { 0x00ce, "Icircumflex" },
+ { 0x00cf, "Idiaeresis" },
+ { 0x00d0, "ETH" },
+ { 0x0145, "Ncedilla" },
+ { 0x014c, "Omacron" },
+ { 0x00d3, "Oacute" },
+ { 0x00d4, "Ocircumflex" },
+ { 0x00d5, "Otilde" },
+ { 0x00d6, "Odiaeresis" },
+ { 0x0168, "Utilde" },
+ { 0x00d8, "Ostroke" },
+ { 0x0172, "Uogonek" },
+ { 0x00da, "Uacute" },
+ { 0x00db, "Ucircumflex" },
+ { 0x00dc, "Udiaeresis" },
+ { 0x00dd, "Yacute" },
+ { 0x00de, "THORN" },
+ { 0x00df, "ssharp" },
+ { 0x0101, "amacron" },
+ { 0x00e1, "aacute" },
+ { 0x00e2, "acircumflex" },
+ { 0x00e3, "atilde" },
+ { 0x00e4, "adiaeresis" },
+ { 0x00e5, "aring" },
+ { 0x00e6, "ae" },
+ { 0x012f, "iogonek" },
+ { 0x010d, "ccaron" },
+ { 0x00e9, "eacute" },
+ { 0x0119, "eogonek" },
+ { 0x00eb, "ediaeresis" },
+ { 0x0117, "eabovedot" },
+ { 0x00ed, "iacute" },
+ { 0x00ee, "icircumflex" },
+ { 0x00ef, "idiaeresis" },
+ { 0x00f0, "eth" },
+ { 0x0146, "ncedilla" },
+ { 0x014d, "omacron" },
+ { 0x00f3, "oacute" },
+ { 0x00f4, "ocircumflex" },
+ { 0x00f5, "otilde" },
+ { 0x00f6, "odiaeresis" },
+ { 0x0169, "utilde" },
+ { 0x00f8, "ostroke" },
+ { 0x0173, "uogonek" },
+ { 0x00fa, "uacute" },
+ { 0x00fb, "ucircumflex" },
+ { 0x00fc, "udiaeresis" },
+ { 0x00fd, "yacute" },
+ { 0x00fe, "thorn" },
+ { 0x0138, "kra" },
+};
sprintf(infile, "/dev/vcsa%d", cons);
fd = open(infile, O_RDONLY);
- if (fd < 0 && cons == 0 && errno == ENOENT)
- fd = open("/dev/vcsa", O_RDONLY);
+ if (fd < 0 && cons == 0 && errno == ENOENT) {
+ sprintf(infile, "/dev/vcsa");
+ fd = open(infile, O_RDONLY);
+ }
+ if (fd < 0 && errno == ENOENT) {
+ sprintf(infile, "/dev/vcs/a%d", cons);
+ fd = open(infile, O_RDONLY);
+ }
+ if (fd < 0 && cons == 0 && errno == ENOENT) {
+ sprintf(infile, "/dev/vcs/a");
+ fd = open(infile, O_RDONLY);
+ }
if (fd < 0 || read(fd, header, 4) != 4)
goto try_ioctl;
rows = header[0];
try_ioctl:
{
struct winsize win;
- char consnam[20];
+ char consnam[20], devfsconsnam[20];
unsigned char *screenbuf;
sprintf(consnam, "/dev/tty%d", cons);
- if((fd = open(consnam, O_RDONLY)) < 0) {
+ fd = open(consnam, O_RDONLY);
+ if (fd < 0 && errno == ENOENT) {
+ sprintf(devfsconsnam, "/dev/vc/%d", cons);
+ fd = open(devfsconsnam, O_RDONLY);
+ if (fd < 0)
+ errno = ENOENT;
+ }
+ if (fd < 0) {
perror(consnam);
fd = 0;
}
- if (ioctl(fd,TIOCGWINSZ,&win)) {
+ if (ioctl(fd, TIOCGWINSZ, &win)) {
perror("TIOCGWINSZ");
exit(1);
}
sunsetleds(char *leds) {
#ifdef KIOCSLED
if (ioctl(sunkbdfd, KIOCSLED, leds)) {
- perror("KIOCGSLED");
+ perror("KIOCSLED");
fprintf(stderr,
_("Error reading current led setting from /dev/kbd.\n"));
exit(1);
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <linux/kd.h>
+#include "getfd.h"
+
+int
+main(int argc, char **argv){
+ int fd, indx, red, green, blue;
+ unsigned char cmap[48];
+
+ fd = getfd();
+ if (ioctl(fd, GIO_CMAP, cmap))
+ perror("GIO_CMAP");
+ if (argc != 5) {
+ fprintf(stderr, "call: setpalette index red green blue\n");
+ exit(1);
+ }
+ indx = atoi(argv[1]);
+ red = atoi(argv[2]);
+ green = atoi(argv[3]);
+ blue = atoi(argv[4]);
+ if (indx < 0 || red < 0 || green < 0 || blue < 0 ||
+ indx > 15 || red > 255 || green > 255 || blue > 255) {
+ fprintf(stderr, "indx must be in 0..15, colors in 0..255\n");
+ exit(1);
+ }
+ cmap[3*indx] = red;
+ cmap[3*indx+1] = green;
+ cmap[3*indx+2] = blue;
+ if (ioctl(fd, PIO_CMAP, cmap))
+ perror("PIO_CMAP");
+ return 0;
+}
* usage: setvesablank ON|on|off
*/
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <sys/ioctl.h>
#include "getfd.h"
#include "nls.h"
int
main(int argc, char *argv[]) {
- int fd;
- struct { char ten, onoff; } arg;
+ int fd;
+ struct { char ten, onoff; } arg;
- setlocale(LC_ALL, "");
- bindtextdomain(PACKAGE, LOCALEDIR);
- textdomain(PACKAGE);
+ 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);
- }
- return 0;
+ 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);
+ }
+ return 0;
}
/* showfont.c - aeb, 940207 - updated 2001-02-06 */
+/* renamed to showconsolefont.c to avoid clash with the X showfont */
#include <stdio.h>
#include <errno.h>
static void
usage(void) {
fprintf(stderr,
- _("usage: showfont [-v|-V]\n"
+ _("usage: showconsolefont [-v|-V]\n"
"(probably after loading a font with `setfont font')\n"));
exit(1);
}
* 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
+ * start getty, not openvt, or anybody will have a root shell
* with a single keystroke.
*/
#include <signal.h>
+#include <errno.h>
#include <linux/kd.h>
void
int fd;
fd = open("/dev/tty0", 0);
+ if (fd < 0 && errno == ENOENT)
+ fd = open("/dev/vc/0", 0);
if (fd < 0)
fd = 0;
signal(SIGHUP, sighup);
*
*/
#include <signal.h>
+#include <errno.h>
#include <linux/kd.h>
void
int fd;
fd = open("/dev/tty0", 0);
+ if (fd < 0 && errno == ENOENT)
+ fd = open("/dev/vc/0", 0);
if (fd < 0)
fd = 0;
signal(SIGHUP, sighup);
#include <string.h>
+#include <stdlib.h>
-#define VERSION "1.06"
+#define VERSION "1.08"
char *progname;