diff -u --recursive --new-file kbd-0.93/keytables/mk_modmap kbd-0.93-mine/keytables/mk_modmap
--- kbd-0.93/keytables/mk_modmap        Thu Dec  7 22:45:11 1995
+++ kbd-0.93-mine/keytables/mk_modmap   Thu May  1 14:01:58 1997
@@ -7,7 +7,13 @@
 #
 # Kjetil T. Homme, University of Oslo 1993
 # <kjetilho@ifi.uio.no>
-
+#
+# Added support for BackSpace, dead keys, Cyrillic, Greek and hebrew keysysms
+# Pablo Saratxaga <srtxg@chanae.stben.be> - May 1997
+#
+# Added support for keys founbd in Microsoft keyboards, Compose keysym
+# (translates to Multi_key in X11) and for numeric hexadecimal values.
+# Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org> - Jun 1997
 
 case $1 in
 	-v*)	verbose=1; shift ;;
@@ -52,6 +58,7 @@
 			}
 		}
 		valid["X386Sys_Req"] = 1;
+		valid["BackSpace"] = 1;
 
 		shifts["Control"] = shifts["Shift"] = 1;
 
@@ -73,6 +80,9 @@
 		trans_keys[109] = 105; # Next
 		trans_keys[110] = 106; # Insert
 		trans_keys[111] = 107; # Delete
+		trans_keys[125] = 115; # left windows key (MS keyboards)
+		trans_keys[126] = 116; # right windows key (MS keyboards)
+		trans_keys[127] = 117; # menu key (MS keyboards)
 
 		trans_names["Alt"]	= "Alt_L Meta_L";
 		trans_names["AltGr"]	= "Mode_switch";
@@ -87,12 +97,245 @@
 		trans_names["nine"]	= "9";
 		trans_names["zero"]	= "0";
 		trans_names["KP_Comma"]	= "KP_Decimal";
-		trans_names["dead_tilde"]	= "asciitilde";
-		trans_names["dead_circumflex"]	= "asciicircum";
-		trans_names["dead_acute"]	= "acute";
-		trans_names["dead_grave"]	= "grave";
-		trans_names["dead_diaeresis"]	= "diaeresis";
-		trans_names["Last_Console"]	= "X386Sys_Req";
+		trans_names["dead_tilde"]	= "dead_tilde";
+		trans_names["dead_circumflex"]	= "dead_circumflex";
+		trans_names["dead_acute"]	= "dead_acute";
+		trans_names["dead_grave"]	= "dead_grave";
+		trans_names["dead_diaeresis"]	= "dead_diaeresis";
+		trans_names["dead_cedilla"]	= "dead_cedilla";
+		trans_names["dead_ogonek"]	= "dead_ogonek";
+		trans_names["dead_caron"]	= "dead_caron";
+		trans_names["dead_breve"]	= "dead_breve";
+		trans_names["dead_doubleacute"]	= "dead_doubleacute";
+		trans_names["Compose"]		= "Multi_key";
+#		trans_names["Last_Console"]	= "X386Sys_Req";
+# Greek
+		trans_names["Alphaaccent"]	= "Greek_ALPHAaccent";
+		trans_names["Epsilonaccent"]	= "Greek_EPSILONaccent";
+		trans_names["Etaaccent"]	= "Greek_ETAaccent";
+		trans_names["Iotaaccent"]	= "Greek_IOTAaccent";
+		trans_names["Iotadiaeresis"]	= "Greek_IOTAdiaeresis";
+		trans_names["Omicronaccent"]	= "Greek_OMICRONaccent";
+		trans_names["Upsilonaccent"]	= "Greek_UPSILONaccent";
+		trans_names["Upsilondieresis"]	= "Greek_UPSILONdieresis";
+		trans_names["Omegaaccent"]	= "Greek_OMEGAaccent";
+		trans_names["Alpha"]	= "Greek_ALPHA";
+		trans_names["Beta"]	= "Greek_BETA";
+		trans_names["Gamma"]	= "Greek_GAMMA";
+		trans_names["Delta"]	= "Greek_DELTA";
+		trans_names["Epsilon"]	= "Greek_EPSILON";
+		trans_names["Zeta"]	= "Greek_ZETA";
+		trans_names["Eta"]	= "Greek_ETA";
+		trans_names["Theta"]	= "Greek_THETA";
+		trans_names["Iota"]	= "Greek_IOTA";
+		trans_names["Kappa"]	= "Greek_KAPPA";
+		trans_names["Lamda"]	= "Greek_LAMDA";
+		trans_names["Lambda"]	= "Greek_LAMBDA";
+		trans_names["Mu"]	= "Greek_MU";
+		trans_names["Nu"]	= "Greek_NU";
+		trans_names["Xi"]	= "Greek_XI";
+		trans_names["Ksi"]	= "Greek_XI";
+		trans_names["Omicron"]	= "Greek_OMICRON";
+		trans_names["Pi"]	= "Greek_PI";
+		trans_names["Rho"]	= "Greek_RHO";
+		trans_names["Sigma"]	= "Greek_SIGMA";
+		trans_names["Tau"]	= "Greek_TAU";
+		trans_names["Upsilon"]	= "Greek_UPSILON";
+		trans_names["Phi"]	= "Greek_PHI";
+		trans_names["Chi"]	= "Greek_CHI";
+		trans_names["Khi"]	= "Greek_CHI";
+		trans_names["Psi"]	= "Greek_PSI";
+		trans_names["Omega"]	= "Greek_OMEGA";
+		trans_names["accent"]	= "Greek_accentdieresis";
+		trans_names["horizbar"]	= "Greek_horizbar";
+		trans_names["alphaaccent"]	= "Greek_alphaaccent";
+		trans_names["epsilonaccent"]	= "Greek_epsilonaccent";
+		trans_names["etaaccent"]	= "Greek_etaaccent";
+		trans_names["iotaaccent"]	= "Greek_iotaaccent";
+		trans_names["iotadieresis"]	= "Greek_iotadieresis";
+		trans_names["iotaaccentdieresis"]	= "Greek_iotaaccentdieresis";
+		trans_names["omicronaccent"]	= "Greek_omicronaccent";
+		trans_names["upsilonaccent"]	= "Greek_upsilonaccent";
+		trans_names["upsilondieresis"]	= "Greek_upsilondieresis";
+		trans_names["upsilonaccentdieresis"]	= "Greek_upsilonaccentdieresis";
+		trans_names["omegaaccent"]	= "Greek_omegaaccent";
+		trans_names["alpha"]	= "Greek_alpha";
+		trans_names["beta"]	= "Greek_beta";
+		trans_names["gamma"]	= "Greek_gamma";
+		trans_names["delta"]	= "Greek_delta";
+		trans_names["epsilon"]	= "Greek_epsilon";
+		trans_names["zeta"]	= "Greek_zeta";
+		trans_names["eta"]	= "Greek_eta";
+		trans_names["theta"]	= "Greek_theta";
+		trans_names["iota"]	= "Greek_iota";
+		trans_names["kappa"]	= "Greek_kappa";
+		trans_names["lamda"]	= "Greek_lamda";
+		trans_names["lambda"]	= "Greek_lambda";
+		trans_names["mu"]	= "Greek_mu";
+		trans_names["nu"]	= "Greek_nu";
+		trans_names["xi"]	= "Greek_xi";
+		trans_names["ksi"]	= "Greek_xi";
+		trans_names["omicron"]	= "Greek_omicron";
+		trans_names["pi"]	= "Greek_pi";
+		trans_names["rho"]	= "Greek_rho";
+		trans_names["sigma"]	= "Greek_sigma";
+		trans_names["terminalsigma"]	= "Greek_finalsmallsigma";
+		trans_names["tau"]	= "Greek_tau";
+		trans_names["upsilon"]	= "Greek_upsilon";
+		trans_names["phi"]	= "Greek_phi";
+		trans_names["chi"]	= "Greek_chi";
+		trans_names["khi"]	= "Greek_chi";
+		trans_names["psi"]	= "Greek_psi";
+		trans_names["omega"]	= "Greek_omega";
+		trans_names["switch"]	= "Greek_switch";
+# Cyrillic
+		trans_names["cyrillic_capital_letter_io"]	= "Cyrillic_IO";
+		trans_names["cyrillic_capital_letter_je"]	= "Cyrillic_JE";
+		trans_names["cyrillic_capital_letter_lje"]	= "Cyrillic_LJE";
+		trans_names["cyrillic_capital_letter_nje"]	= "Cyrillic_NJE";
+		trans_names["cyrillic_capital_letter_dzhe"]	= "Cyrillic_DZHE";
+		trans_names["cyrillic_capital_letter_yu"]	= "Cyrillic_YU";
+		trans_names["cyrillic_capital_letter_iu"]	= "Cyrillic_YU";
+		trans_names["cyrillic_capital_letter_a"]	= "Cyrillic_A";
+		trans_names["cyrillic_capital_letter_be"]	= "Cyrillic_BE";
+		trans_names["cyrillic_capital_letter_tse"]	= "Cyrillic_TSE";
+		trans_names["cyrillic_capital_letter_de"]	= "Cyrillic_DE";
+		trans_names["cyrillic_capital_letter_ie"]	= "Cyrillic_IE";
+		trans_names["cyrillic_capital_letter_ef"]	= "Cyrillic_EF";
+		trans_names["cyrillic_capital_letter_ghe"]	= "Cyrillic_GHE";
+		trans_names["cyrillic_capital_letter_ge"]	= "Cyrillic_GHE";
+		trans_names["cyrillic_capital_letter_ha"]	= "Cyrillic_HA";
+		trans_names["cyrillic_capital_letter_kha"]	= "Cyrillic_HA";
+		trans_names["cyrillic_capital_letter_i"]	= "Cyrillic_I";
+		trans_names["cyrillic_capital_letter_ii"]	= "Cyrillic_I";
+		trans_names["cyrillic_capital_letter_short_i"]	= "Cyrillic_SHORTI";
+		trans_names["cyrillic_capital_letter_short_ii"]	= "Cyrillic_SHORTI";
+		trans_names["cyrillic_capital_letter_ka"]	= "Cyrillic_KA";
+		trans_names["cyrillic_capital_letter_el"]	= "Cyrillic_EL";
+		trans_names["cyrillic_capital_letter_em"]	= "Cyrillic_EM";
+		trans_names["cyrillic_capital_letter_en"]	= "Cyrillic_EN";
+		trans_names["cyrillic_capital_letter_o"]	= "Cyrillic_O";
+		trans_names["cyrillic_capital_letter_pe"]	= "Cyrillic_PE";
+		trans_names["cyrillic_capital_letter_ya"]	= "Cyrillic_YA";
+		trans_names["cyrillic_capital_letter_ia"]	= "Cyrillic_YA";
+		trans_names["cyrillic_capital_letter_er"]	= "Cyrillic_ER";
+		trans_names["cyrillic_capital_letter_es"]	= "Cyrillic_ES";
+		trans_names["cyrillic_capital_letter_te"]	= "Cyrillic_TE";
+		trans_names["cyrillic_capital_letter_u"]	= "Cyrillic_U";
+		trans_names["cyrillic_capital_letter_zhe"]	= "Cyrillic_ZHE";
+		trans_names["cyrillic_capital_letter_ve"]	= "Cyrillic_VE";
+		trans_names["cyrillic_capital_soft_sign"]	= "Cyrillic_SOFTSIGN";
+		trans_names["cyrillic_capital_letter_yeru"]	= "Cyrillic_YERU";
+		trans_names["cyrillic_capital_letter_yeri"]	= "Cyrillic_YERU";
+		trans_names["cyrillic_capital_letter_ze"]	= "Cyrillic_ZE";
+		trans_names["cyrillic_capital_letter_sha"]	= "Cyrillic_SHA";
+		trans_names["cyrillic_capital_letter_e"]	= "Cyrillic_E";
+		trans_names["cyrillic_capital_letter_reversed_e"]	= "Cyrillic_E";
+		trans_names["cyrillic_capital_letter_shcha"]	= "Cyrillic_SHCHA";
+		trans_names["cyrillic_capital_letter_che"]	= "Cyrillic_CHE";
+		trans_names["cyrillic_capital_hard_sign"]	= "Cyrillic_HARDSIGN";
+		trans_names["cyrillic_small_letter_io"]	= "Cyrillic_io";
+		trans_names["cyrillic_small_letter_je"]	= "Cyrillic_je";
+		trans_names["cyrillic_small_letter_lje"]	= "Cyrillic_lje";
+		trans_names["cyrillic_small_letter_nje"]	= "Cyrillic_nje";
+		trans_names["cyrillic_small_letter_dzhe"]	= "Cyrillic_dzhe";
+		trans_names["cyrillic_small_letter_yu"]	= "Cyrillic_yu";
+		trans_names["cyrillic_small_letter_iu"]	= "Cyrillic_yu";
+		trans_names["cyrillic_small_letter_a"]	= "Cyrillic_a";
+		trans_names["cyrillic_small_letter_be"]	= "Cyrillic_be";
+		trans_names["cyrillic_small_letter_tse"]	= "Cyrillic_tse";
+		trans_names["cyrillic_small_letter_de"]	= "Cyrillic_de";
+		trans_names["cyrillic_small_letter_ie"]	= "Cyrillic_ie";
+		trans_names["cyrillic_small_letter_ef"]	= "Cyrillic_ef";
+		trans_names["cyrillic_small_letter_ghe"]	= "Cyrillic_ghe";
+		trans_names["cyrillic_small_letter_ge"]	= "Cyrillic_ghe";
+		trans_names["cyrillic_small_letter_ha"]	= "Cyrillic_ha";
+		trans_names["cyrillic_small_letter_kha"]	= "Cyrillic_ha";
+		trans_names["cyrillic_small_letter_i"]	= "Cyrillic_i";
+		trans_names["cyrillic_small_letter_ii"]	= "Cyrillic_i";
+		trans_names["cyrillic_small_letter_short_i"]	= "Cyrillic_shorti";
+		trans_names["cyrillic_small_letter_short_ii"]	= "Cyrillic_shorti";
+		trans_names["cyrillic_small_letter_ka"]	= "Cyrillic_ka";
+		trans_names["cyrillic_small_letter_el"]	= "Cyrillic_el";
+		trans_names["cyrillic_small_letter_em"]	= "Cyrillic_em";
+		trans_names["cyrillic_small_letter_en"]	= "Cyrillic_en";
+		trans_names["cyrillic_small_letter_o"]	= "Cyrillic_o";
+		trans_names["cyrillic_small_letter_pe"]	= "Cyrillic_pe";
+		trans_names["cyrillic_small_letter_ya"]	= "Cyrillic_ya";
+		trans_names["cyrillic_small_letter_ia"]	= "Cyrillic_ya";
+		trans_names["cyrillic_small_letter_er"]	= "Cyrillic_er";
+		trans_names["cyrillic_small_letter_es"]	= "Cyrillic_es";
+		trans_names["cyrillic_small_letter_te"]	= "Cyrillic_te";
+		trans_names["cyrillic_small_letter_u"]	= "Cyrillic_u";
+		trans_names["cyrillic_small_letter_zhe"]	= "Cyrillic_zhe";
+		trans_names["cyrillic_small_letter_ve"]	= "Cyrillic_ve";
+		trans_names["cyrillic_small_soft_sign"]	= "Cyrillic_softsign";
+		trans_names["cyrillic_small_letter_yeru"]	= "Cyrillic_yeru";
+		trans_names["cyrillic_small_letter_yeri"]	= "Cyrillic_yeru";
+		trans_names["cyrillic_small_letter_ze"]	= "Cyrillic_ze";
+		trans_names["cyrillic_small_letter_sha"]	= "Cyrillic_sha";
+		trans_names["cyrillic_small_letter_e"]	= "Cyrillic_e";
+		trans_names["cyrillic_small_letter_reversed_e"]	= "Cyrillic_e";
+		trans_names["cyrillic_small_letter_shcha"]	= "Cyrillic_shcha";
+		trans_names["cyrillic_small_letter_che"]	= "Cyrillic_che";
+		trans_names["cyrillic_small_hard_sign"]	= "Cyrillic_hardsign";
+		trans_names["serbocroatian_cyrillic_capital_letter_dje"]	= "Serbian_DJE";
+		trans_names["serbocroatian_cyrillic_capital_letter_je"]	= "Serbian_JE";
+		trans_names["serbocroatian_cyrillic_capital_letter_lje"]	= "Serbian_LJE";
+		trans_names["serbocroatian_cyrillic_capital_letter_nje"]	= "Serbian_NJE";
+		trans_names["serbocroatian_cyrillic_capital_letter_tshe"]	= "Serbian_TSHE";
+		trans_names["serbocroatian_cyrillic_capital_letter_dze"]	= "Serbian_DZE";
+		trans_names["serbocroatian_cyrillic_small_letter_dje"]	= "Serbian_dje";
+		trans_names["serbocroatian_cyrillic_small_letter_je"]	= "Serbian_je";
+		trans_names["serbocroatian_cyrillic_small_letter_lje"]	= "Serbian_lje";
+		trans_names["serbocroatian_cyrillic_small_letter_nje"]	= "Serbian_nje";
+		trans_names["serbocroatian_cyrillic_small_letter_tshe"]	= "Serbian_tshe";
+		trans_names["serbocroatian_cyrillic_small_letter_dze"]	= "Serbian_dze";
+		trans_names["macedonian_cyrillic_capital_letter_gje"]	= "Macedonia_GJE";
+		trans_names["macedonian_cyrillic_capital_letter_dze"]	= "Macedonia_DSE";
+		trans_names["macedonian_cyrillic_capital_letter_kje"]	= "Macedonia_KJE";
+		trans_names["macedonian_cyrillic_small_letter_gje"]	= "Macedonia_gje";
+		trans_names["macedonian_cyrillic_small_letter_dze"]	= "Macedonia_dse";
+		trans_names["macedonian_cyrillic_small_letter_kje"]	= "Macedonia_kje";
+		trans_names["ukrainian_cyrillic_capital_letter_ie"]	= "Ukrainian_JE";
+		trans_names["ukrainian_cyrillic_capital_letter_i"]	= "Ukrainian_I";
+		trans_names["ukrainian_cyrillic_capital_letter_yi"]	= "Ukrainian_YI";
+		trans_names["ukrainian_cyrillic_small_letter_ie"]	= "Ukrainian_ie";
+		trans_names["ukrainian_cyrillic_small_letter_i"]	= "Ukrainian_i";
+		trans_names["ukrainian_cyrillic_small_letter_yi"]	= "Ukrainian_yi";
+		trans_names["bielorussian_cyrillic_capital_letter_short_u"]	= "Byelorussian_SHORTU";
+		trans_names["bielorussian_cyrillic_capital_letter_i"]	= "Ukrainian_I";
+		trans_names["bielorussian_cyrillic_small_letter_short_u"]	= "Byelorussian_shortu";
+		trans_names["bielorussian_cyrillic_small_letter_i"]	= "Ukrainian_i";
+# Hebrew
+		trans_names["doubleunderscore"]	= "hebrew_doublelowline";
+		trans_names["alef"]	= "hebrew_aleph";
+		trans_names["bet"]	= "hebrew_bet";
+		trans_names["gimel"]	= "hebrew_gimel";
+		trans_names["dalet"]	= "hebrew_dalet";
+		trans_names["he"]	= "hebrew_he";
+		trans_names["vav"]	= "hebrew_waw";
+		trans_names["zayin"]	= "hebrew_zain";
+		trans_names["het"]	= "hebrew_chet";
+		trans_names["tet"]	= "hebrew_tet";
+		trans_names["yod"]	= "hebrew_yod";
+		trans_names["finalkaf"]	= "hebrew_finalkaph";
+		trans_names["kaf"]	= "hebrew_kaph";
+		trans_names["lamed"]	= "hebrew_lamed";
+		trans_names["finalmem"]	= "hebrew_finalmem";
+		trans_names["mem"]	= "hebrew_mem";
+		trans_names["finalnun"]	= "hebrew_finalnun";
+		trans_names["nun"]	= "hebrew_nun";
+		trans_names["samekh"]	= "hebrew_samech";
+		trans_names["ayin"]	= "hebrew_ayin";
+		trans_names["finalpe"]	= "hebrew_finalpe";
+		trans_names["pe"]	= "hebrew_pe";
+		trans_names["finaltsadi"]	= "hebrew_finalzade";
+		trans_names["tsadi"]	= "hebrew_zade";
+		trans_names["qof"]	= "hebrew_qoph";
+		trans_names["resh"]	= "hebrew_resh";
+		trans_names["shin"]	= "hebrew_shin";
+		trans_names["tav"]	= "hebrew_taw";
 	}
 	$1 == "keycode" {
 		output = "";
@@ -108,6 +351,8 @@
 
 			if (n in valid || n in valid || $i in trans_names)
 				output = output " " n;
+			else if (n ~ /0x[0-9a-fA-F]*/)
+				output = output " " n;
 			else
 				msg("Skipped " $i);
 		}
@@ -117,7 +362,7 @@
 		else
 			keycode += 8;
 
-		if (keycode >= 115)
+		if (keycode > 117) 
 			msg("Skipped keycode " keycode-8 ": " output);
 	 	else if (output)
 			printf("keycode %3d =%s\n", keycode, output);
diff -u --recursive --new-file kbd-0.93/src/dumpkeys.c kbd-0.93-mine/src/dumpkeys.c
--- kbd-0.93/src/dumpkeys.c	Wed Mar 26 19:36:04 1997
+++ kbd-0.93-mine/src/dumpkeys.c	Wed Apr 30 10:02:59 1997
@@ -404,7 +404,8 @@
 	-f --full-table	don't use short-hand notations
 	   --funcs-only	display only the function key strings
 	   --keys-only	display only key bindings
-%s	-c --charset=iso-8859-{1,2,3,4,5,7,8}
+%s	-c --charset=iso-8859-{1,2,3,4,5,7,8,9,10}
+	             koi8-{r,u}		
 			interpret character action codes to be from the
 			specified character set
 ",
@@ -474,11 +475,8 @@
 				break;
 #endif
 			case 'c':
-				if (strlen(optarg) != 10 || /* iso-8859-x */
-					strncmp(optarg, "iso-8859-", 9) ||
-					!index("1234578", optarg[9]))
+				if ((set_charset(optarg)) != 0)
 					usage();
-				charset = optarg[9] - '0';
 				printf("charset \"%s\"\n", optarg);
 				set_charset(optarg);
 				break;
diff -u --recursive --new-file kbd-0.93/src/ksyms.c kbd-0.93-mine/src/ksyms.c
--- kbd-0.93/src/ksyms.c	Wed Mar 26 23:12:33 1997
+++ kbd-0.93-mine/src/ksyms.c	Wed Apr 30 11:12:50 1997
@@ -1,5 +1,6 @@
 #include "ksyms.h"
 #include <stdio.h>
+#include <string.h>
 
 static char *latin1_syms[] = {
 	"nul",
@@ -332,7 +333,7 @@
     "macedonian_cyrillic_capital_letter_gje",
     "ukrainian_cyrillic_capital_letter_ie",
     "macedonian_cyrillic_capital_letter_dze",
-    "cyrillic_capital_letter_i",
+    "ukrainian_cyrillic_capital_letter_i",
     "ukrainian_cyrillic_capital_letter_yi",
     "cyrillic_capital_letter_je", 			/* 0250 */
     "cyrillic_capital_letter_lje",
@@ -412,7 +413,7 @@
     "macedonian_cyrillic_small_letter_gje",
     "ukrainian_cyrillic_small_letter_ie",
     "macedonian_cyrillic_small_letter_dze",
-    "cyrillic_small_letter_i",
+    "ukrainian_cyrillic_small_letter_i",
     "ukrainian_cyrillic_small_letter_yi",
     "cyrillic_small_letter_je",				/* 0370 */
     "cyrillic_small_letter_lje",
@@ -454,6 +455,105 @@
     "resh", "shin", "tav", "", "", "", "", ""
 };
 
+char *koi8_r_syms[] = { /* 160-255 */
+    "",                                        /* 0240 */
+    "",
+    "",
+    "cyrillic_small_letter_io",
+    "",
+    "",
+    "",
+    "",
+    "",                        /* 0250 */
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",                        /* 0260 */
+    "",
+    "",
+    "cyrillic_capital_letter_io",
+    "",
+    "",
+    "",
+    "",
+    "",                        /* 0270 */
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "copyright",
+    "cyrillic_small_letter_yu",                        /* 0300 */
+    "cyrillic_small_letter_a",
+    "cyrillic_small_letter_be",
+    "cyrillic_small_letter_tse",
+    "cyrillic_small_letter_de",
+    "cyrillic_small_letter_ie",
+    "cyrillic_small_letter_ef",
+    "cyrillic_small_letter_ghe",
+    "cyrillic_small_letter_ha",                        /* 0310 */
+    "cyrillic_small_letter_i",
+    "cyrillic_small_letter_short_i",
+    "cyrillic_small_letter_ka",
+    "cyrillic_small_letter_el",
+    "cyrillic_small_letter_em",
+    "cyrillic_small_letter_en",
+    "cyrillic_small_letter_o",
+    "cyrillic_small_letter_pe",                                /* 0320 */
+    "cyrillic_small_letter_ya",
+    "cyrillic_small_letter_er",
+    "cyrillic_small_letter_es",
+    "cyrillic_small_letter_te",
+    "cyrillic_small_letter_u",
+    "cyrillic_small_letter_zhe",
+    "cyrillic_small_letter_ve",
+    "cyrillic_small_soft_sign",                                /* 0330 */
+    "cyrillic_small_letter_yeru",
+    "cyrillic_small_letter_ze",
+    "cyrillic_small_letter_sha",
+    "cyrillic_small_letter_e",
+    "cyrillic_small_letter_shcha",
+    "cyrillic_small_letter_che",
+    "cyrillic_small_hard_sign",
+    "cyrillic_capital_letter_yu",                      /* 0340 */
+    "cyrillic_capital_letter_a",
+    "cyrillic_capital_letter_be",
+    "cyrillic_capital_letter_tse",
+    "cyrillic_capital_letter_de",
+    "cyrillic_capital_letter_ie",
+    "cyrillic_capital_letter_ef",
+    "cyrillic_capital_letter_ghe",
+    "cyrillic_capital_letter_ha",                      /* 0350 */
+    "cyrillic_capital_letter_i",
+    "cyrillic_capital_letter_short_i",
+    "cyrillic_capital_letter_ka",
+    "cyrillic_capital_letter_el",
+    "cyrillic_capital_letter_em",
+    "cyrillic_capital_letter_en",
+    "cyrillic_capital_letter_o",
+    "cyrillic_capital_letter_pe",                      /* 0360 */
+    "cyrillic_capital_letter_ya",
+    "cyrillic_capital_letter_er",
+    "cyrillic_capital_letter_es",
+    "cyrillic_capital_letter_te",
+    "cyrillic_capital_letter_u",
+    "cyrillic_capital_letter_zhe",
+    "cyrillic_capital_letter_ve",
+    "cyrillic_capital_soft_sign",                      /* 0370 */
+    "cyrillic_capital_letter_yeru",
+    "cyrillic_capital_letter_ze",
+    "cyrillic_capital_letter_sha",
+    "cyrillic_capital_letter_e",
+    "cyrillic_capital_letter_shcha",
+    "cyrillic_capital_letter_che",
+    "cyrillic_capital_hard_sign"
+};
+
 static char *fn_syms[] = {
 	"F1",
 	"F2",
@@ -1096,6 +1196,32 @@
 /* diacriticals */
 	{ "tilde",		"asciitilde" },
 	{ "circumflex",		"asciicircum" },
+/* as dead_ogonek, dead_caron, dead_breve and dead_doubleacute doesn't exist
+ * (yet), I put also compose lines for use with respectively dead_cedilla,
+ * dead_circumflex, dead_tilde and dead_tilde */
+	{ "dead_ogonek",        "dead_cedilla" },
+	{ "dead_caron",         "dead_circumflex" },
+	{ "dead_breve",         "dead_tilde" },
+	{ "dead_doubleacute",   "dead_tilde" },
+/* cyrillic */
+	{ "bielorussian_cyrillic_capital_letter_i", "ukrainian_cyrillic_capital_letter_i" },
+	{ "cyrillic_capital_letter_kha", "cyrillic_capital_letter_ha" },
+	{ "cyrillic_capital_letter_ge", "cyrillic_capital_letter_ghe" },
+	{ "cyrillic_capital_letter_ia", "cyrillic_capital_letter_ya" },
+	{ "cyrillic_capital_letter_iu", "cyrillic_capital_letter_yu" },
+	{ "cyrillic_capital_letter_yeri", "cyrillic_capital_letter_yeru" },
+	{ "cyrillic_capital_letter_reversed_e", "cyrillic_capital_letter_e" },
+	{ "cyrillic_capital_letter_ii", "cyrillic_capital_letter_i" },
+	{ "cyrillic_capital_letter_short_ii", "cyrillic_capital_letter_short_i" },
+	{ "bielorussian_cyrillic_small_letter_i", "ukrainian_cyrillic_small_letter_i" },
+	{ "cyrillic_small_letter_kha", "cyrillic_small_letter_ha" },
+	{ "cyrillic_small_letter_ge", "cyrillic_small_letter_ghe" },
+	{ "cyrillic_small_letter_ia", "cyrillic_small_letter_ya" },
+	{ "cyrillic_small_letter_iu", "cyrillic_small_letter_yu" },
+	{ "cyrillic_small_letter_yeri", "cyrillic_small_letter_yeru" },
+	{ "cyrillic_small_letter_reversed_e", "cyrillic_small_letter_e" },
+	{ "cyrillic_small_letter_ii", "cyrillic_small_letter_i" },
+	{ "cyrillic_small_letter_short_ii", "cyrillic_small_letter_short_i" }
 };
 
 const int syms_size = sizeof(syms) / sizeof(syms_entry);
@@ -1113,27 +1239,35 @@
     { "iso-8859-4", latin4_syms, 160 },
     { "iso-8859-5", iso_8859_5_syms, 160 },
     { "iso-8859-7", iso_8859_7_syms, 160 },
-    { "iso-8859-8", iso_8859_8_syms, 160 }
+    { "iso-8859-8", iso_8859_8_syms, 160 },
+    { "koi8-r",     koi8_r_syms, 160 },
+    { "koi8-u",     koi8_r_syms, 160 }
+/* I don't know the differences between koi8-r and koi8-u,
+   so I use the same syms table - Pablo Saratxaga */
 };
 
-void
+int
 set_charset(char *charset) {
 	char **p;
 	int i;
 
 	for (i = 0; i < sizeof(charsets)/sizeof(charsets[0]); i++) {
-	    if (!strcmp(charsets[i].charset, charset)) {
+	    if (!strcasecmp(charsets[i].charset, charset)) {
 		p = charsets[i].charnames;
 		if (p)
 		  for (i = charsets[i].start; i < 256; i++,p++) {
 		    if(*p && **p)
 		      syms[0].table[i] = *p;
 		}
-		return;
+		return 0;
 	    }
 	}
-	if (!strcmp(charset, "unicode"))
+	if (!strcasecmp(charset, "unicode"))
+	{
 	  fprintf (stderr, "unknown charset %s - ignoring charset request\n",
 		   charset);
+	  return 1;
+	}
+	return 0;
 }
 
diff -u --recursive --new-file kbd-0.93/src/ksyms.h kbd-0.93-mine/src/ksyms.h
--- kbd-0.93/src/ksyms.h	Thu Dec  7 22:45:12 1995
+++ kbd-0.93-mine/src/ksyms.h	Wed Apr 30 10:20:26 1997
@@ -15,10 +15,11 @@
 extern const int syn_size;
 
 extern int syms_iso8859(int i);
-extern void set_charset(char *name);
+extern int set_charset(char *name);
 
 /* this is a temporary ugly kludge */
 
 extern char *latin2_syms[];
 extern char *latin3_syms[];
 extern char *latin4_syms[];
+extern char *koi8_r_syms[];
diff -u --recursive --new-file kbd-0.93/src/loadkeys.y kbd-0.93-mine/src/loadkeys.y
--- kbd-0.93/src/loadkeys.y	Wed Mar 26 22:17:39 1997
+++ kbd-0.93-mine/src/loadkeys.y	Wed Apr 30 10:21:40 1997
@@ -97,7 +97,7 @@
 static void do_constant(void);
 static void loadkeys(void);
 static void mktable(void);
-extern void set_charset(char *charset);
+extern int set_charset(char *charset);
 extern int getfd(void);
 int key_buf[MAX_NR_KEYMAPS];
 int mod;
