diff --git a/ncurses/lib_keyname.c b/ncurses/lib_keyname.c
new file mode 100644
index 0000000..8c41690
--- /dev/null
+++ b/ncurses/lib_keyname.c
@@ -0,0 +1,421 @@
+/* generated by MKkeyname.awk */
+
+#include <curses.priv.h>
+#include <tic.h>
+
+struct kn { short offset; int code; };
+static const struct kn _nc_key_names[] = {
+	{ 0, KEY_A1 },
+	{ 7, KEY_A3 },
+	{ 14, KEY_B2 },
+	{ 21, KEY_BACKSPACE },
+	{ 35, KEY_BEG },
+	{ 43, KEY_BREAK },
+	{ 53, KEY_BTAB },
+	{ 62, KEY_C1 },
+	{ 69, KEY_C3 },
+	{ 76, KEY_CANCEL },
+	{ 87, KEY_CATAB },
+	{ 97, KEY_CLEAR },
+	{ 107, KEY_CLOSE },
+	{ 117, KEY_COMMAND },
+	{ 129, KEY_COPY },
+	{ 138, KEY_CREATE },
+	{ 149, KEY_CTAB },
+	{ 158, KEY_DC },
+	{ 165, KEY_DL },
+	{ 172, KEY_DOWN },
+	{ 181, KEY_EIC },
+	{ 189, KEY_END },
+	{ 197, KEY_ENTER },
+	{ 207, KEY_EOL },
+	{ 215, KEY_EOS },
+	{ 223, KEY_EXIT },
+	{ 232, KEY_F(0) },
+	{ 241, KEY_F(1) },
+	{ 250, KEY_F(10) },
+	{ 260, KEY_F(11) },
+	{ 270, KEY_F(12) },
+	{ 280, KEY_F(13) },
+	{ 290, KEY_F(14) },
+	{ 300, KEY_F(15) },
+	{ 310, KEY_F(16) },
+	{ 320, KEY_F(17) },
+	{ 330, KEY_F(18) },
+	{ 340, KEY_F(19) },
+	{ 350, KEY_F(2) },
+	{ 359, KEY_F(20) },
+	{ 369, KEY_F(21) },
+	{ 379, KEY_F(22) },
+	{ 389, KEY_F(23) },
+	{ 399, KEY_F(24) },
+	{ 409, KEY_F(25) },
+	{ 419, KEY_F(26) },
+	{ 429, KEY_F(27) },
+	{ 439, KEY_F(28) },
+	{ 449, KEY_F(29) },
+	{ 459, KEY_F(3) },
+	{ 468, KEY_F(30) },
+	{ 478, KEY_F(31) },
+	{ 488, KEY_F(32) },
+	{ 498, KEY_F(33) },
+	{ 508, KEY_F(34) },
+	{ 518, KEY_F(35) },
+	{ 528, KEY_F(36) },
+	{ 538, KEY_F(37) },
+	{ 548, KEY_F(38) },
+	{ 558, KEY_F(39) },
+	{ 568, KEY_F(4) },
+	{ 577, KEY_F(40) },
+	{ 587, KEY_F(41) },
+	{ 597, KEY_F(42) },
+	{ 607, KEY_F(43) },
+	{ 617, KEY_F(44) },
+	{ 627, KEY_F(45) },
+	{ 637, KEY_F(46) },
+	{ 647, KEY_F(47) },
+	{ 657, KEY_F(48) },
+	{ 667, KEY_F(49) },
+	{ 677, KEY_F(5) },
+	{ 686, KEY_F(50) },
+	{ 696, KEY_F(51) },
+	{ 706, KEY_F(52) },
+	{ 716, KEY_F(53) },
+	{ 726, KEY_F(54) },
+	{ 736, KEY_F(55) },
+	{ 746, KEY_F(56) },
+	{ 756, KEY_F(57) },
+	{ 766, KEY_F(58) },
+	{ 776, KEY_F(59) },
+	{ 786, KEY_F(6) },
+	{ 795, KEY_F(60) },
+	{ 805, KEY_F(61) },
+	{ 815, KEY_F(62) },
+	{ 825, KEY_F(63) },
+	{ 835, KEY_F(7) },
+	{ 844, KEY_F(8) },
+	{ 853, KEY_F(9) },
+	{ 862, KEY_FIND },
+	{ 871, KEY_HELP },
+	{ 880, KEY_HOME },
+	{ 889, KEY_IC },
+	{ 896, KEY_IL },
+	{ 903, KEY_LEFT },
+	{ 912, KEY_LL },
+	{ 919, KEY_MARK },
+	{ 928, KEY_MESSAGE },
+	{ 940, KEY_MOUSE },
+	{ 950, KEY_MOVE },
+	{ 959, KEY_NEXT },
+	{ 968, KEY_NPAGE },
+	{ 978, KEY_OPEN },
+	{ 987, KEY_OPTIONS },
+	{ 999, KEY_PPAGE },
+	{ 1009, KEY_PREVIOUS },
+	{ 1022, KEY_PRINT },
+	{ 1032, KEY_REDO },
+	{ 1041, KEY_REFERENCE },
+	{ 1055, KEY_REFRESH },
+	{ 1067, KEY_REPLACE },
+	{ 1079, KEY_RESET },
+	{ 1089, KEY_RESIZE },
+	{ 1100, KEY_RESTART },
+	{ 1112, KEY_RESUME },
+	{ 1123, KEY_RIGHT },
+	{ 1133, KEY_SAVE },
+	{ 1142, KEY_SBEG },
+	{ 1151, KEY_SCANCEL },
+	{ 1163, KEY_SCOMMAND },
+	{ 1176, KEY_SCOPY },
+	{ 1186, KEY_SCREATE },
+	{ 1198, KEY_SDC },
+	{ 1206, KEY_SDL },
+	{ 1214, KEY_SELECT },
+	{ 1225, KEY_SEND },
+	{ 1234, KEY_SEOL },
+	{ 1243, KEY_SEXIT },
+	{ 1253, KEY_SF },
+	{ 1260, KEY_SFIND },
+	{ 1270, KEY_SHELP },
+	{ 1280, KEY_SHOME },
+	{ 1290, KEY_SIC },
+	{ 1298, KEY_SLEFT },
+	{ 1308, KEY_SMESSAGE },
+	{ 1321, KEY_SMOVE },
+	{ 1331, KEY_SNEXT },
+	{ 1341, KEY_SOPTIONS },
+	{ 1354, KEY_SPREVIOUS },
+	{ 1368, KEY_SPRINT },
+	{ 1379, KEY_SR },
+	{ 1386, KEY_SREDO },
+	{ 1396, KEY_SREPLACE },
+	{ 1409, KEY_SRESET },
+	{ 1420, KEY_SRIGHT },
+	{ 1431, KEY_SRSUME },
+	{ 1442, KEY_SSAVE },
+	{ 1452, KEY_SSUSPEND },
+	{ 1465, KEY_STAB },
+	{ 1474, KEY_SUNDO },
+	{ 1484, KEY_SUSPEND },
+	{ 1496, KEY_UNDO },
+	{ 1505, KEY_UP },
+	{ -1, 0 }};
+
+static const char key_names[] = 
+	"KEY_A1\0"
+	"KEY_A3\0"
+	"KEY_B2\0"
+	"KEY_BACKSPACE\0"
+	"KEY_BEG\0"
+	"KEY_BREAK\0"
+	"KEY_BTAB\0"
+	"KEY_C1\0"
+	"KEY_C3\0"
+	"KEY_CANCEL\0"
+	"KEY_CATAB\0"
+	"KEY_CLEAR\0"
+	"KEY_CLOSE\0"
+	"KEY_COMMAND\0"
+	"KEY_COPY\0"
+	"KEY_CREATE\0"
+	"KEY_CTAB\0"
+	"KEY_DC\0"
+	"KEY_DL\0"
+	"KEY_DOWN\0"
+	"KEY_EIC\0"
+	"KEY_END\0"
+	"KEY_ENTER\0"
+	"KEY_EOL\0"
+	"KEY_EOS\0"
+	"KEY_EXIT\0"
+	"KEY_F(0)\0"
+	"KEY_F(1)\0"
+	"KEY_F(10)\0"
+	"KEY_F(11)\0"
+	"KEY_F(12)\0"
+	"KEY_F(13)\0"
+	"KEY_F(14)\0"
+	"KEY_F(15)\0"
+	"KEY_F(16)\0"
+	"KEY_F(17)\0"
+	"KEY_F(18)\0"
+	"KEY_F(19)\0"
+	"KEY_F(2)\0"
+	"KEY_F(20)\0"
+	"KEY_F(21)\0"
+	"KEY_F(22)\0"
+	"KEY_F(23)\0"
+	"KEY_F(24)\0"
+	"KEY_F(25)\0"
+	"KEY_F(26)\0"
+	"KEY_F(27)\0"
+	"KEY_F(28)\0"
+	"KEY_F(29)\0"
+	"KEY_F(3)\0"
+	"KEY_F(30)\0"
+	"KEY_F(31)\0"
+	"KEY_F(32)\0"
+	"KEY_F(33)\0"
+	"KEY_F(34)\0"
+	"KEY_F(35)\0"
+	"KEY_F(36)\0"
+	"KEY_F(37)\0"
+	"KEY_F(38)\0"
+	"KEY_F(39)\0"
+	"KEY_F(4)\0"
+	"KEY_F(40)\0"
+	"KEY_F(41)\0"
+	"KEY_F(42)\0"
+	"KEY_F(43)\0"
+	"KEY_F(44)\0"
+	"KEY_F(45)\0"
+	"KEY_F(46)\0"
+	"KEY_F(47)\0"
+	"KEY_F(48)\0"
+	"KEY_F(49)\0"
+	"KEY_F(5)\0"
+	"KEY_F(50)\0"
+	"KEY_F(51)\0"
+	"KEY_F(52)\0"
+	"KEY_F(53)\0"
+	"KEY_F(54)\0"
+	"KEY_F(55)\0"
+	"KEY_F(56)\0"
+	"KEY_F(57)\0"
+	"KEY_F(58)\0"
+	"KEY_F(59)\0"
+	"KEY_F(6)\0"
+	"KEY_F(60)\0"
+	"KEY_F(61)\0"
+	"KEY_F(62)\0"
+	"KEY_F(63)\0"
+	"KEY_F(7)\0"
+	"KEY_F(8)\0"
+	"KEY_F(9)\0"
+	"KEY_FIND\0"
+	"KEY_HELP\0"
+	"KEY_HOME\0"
+	"KEY_IC\0"
+	"KEY_IL\0"
+	"KEY_LEFT\0"
+	"KEY_LL\0"
+	"KEY_MARK\0"
+	"KEY_MESSAGE\0"
+	"KEY_MOUSE\0"
+	"KEY_MOVE\0"
+	"KEY_NEXT\0"
+	"KEY_NPAGE\0"
+	"KEY_OPEN\0"
+	"KEY_OPTIONS\0"
+	"KEY_PPAGE\0"
+	"KEY_PREVIOUS\0"
+	"KEY_PRINT\0"
+	"KEY_REDO\0"
+	"KEY_REFERENCE\0"
+	"KEY_REFRESH\0"
+	"KEY_REPLACE\0"
+	"KEY_RESET\0"
+	"KEY_RESIZE\0"
+	"KEY_RESTART\0"
+	"KEY_RESUME\0"
+	"KEY_RIGHT\0"
+	"KEY_SAVE\0"
+	"KEY_SBEG\0"
+	"KEY_SCANCEL\0"
+	"KEY_SCOMMAND\0"
+	"KEY_SCOPY\0"
+	"KEY_SCREATE\0"
+	"KEY_SDC\0"
+	"KEY_SDL\0"
+	"KEY_SELECT\0"
+	"KEY_SEND\0"
+	"KEY_SEOL\0"
+	"KEY_SEXIT\0"
+	"KEY_SF\0"
+	"KEY_SFIND\0"
+	"KEY_SHELP\0"
+	"KEY_SHOME\0"
+	"KEY_SIC\0"
+	"KEY_SLEFT\0"
+	"KEY_SMESSAGE\0"
+	"KEY_SMOVE\0"
+	"KEY_SNEXT\0"
+	"KEY_SOPTIONS\0"
+	"KEY_SPREVIOUS\0"
+	"KEY_SPRINT\0"
+	"KEY_SR\0"
+	"KEY_SREDO\0"
+	"KEY_SREPLACE\0"
+	"KEY_SRESET\0"
+	"KEY_SRIGHT\0"
+	"KEY_SRSUME\0"
+	"KEY_SSAVE\0"
+	"KEY_SSUSPEND\0"
+	"KEY_STAB\0"
+	"KEY_SUNDO\0"
+	"KEY_SUSPEND\0"
+	"KEY_UNDO\0"
+	"KEY_UP\0";
+
+#define SIZEOF_TABLE 256
+#define MyTable _nc_globals.keyname_table
+#define MyInit  _nc_globals.init_keyname
+
+NCURSES_EXPORT(NCURSES_CONST char *)
+safe_keyname (SCREEN *sp, int c)
+{
+	char name[20];
+	NCURSES_CONST char *result = 0;
+
+	if (c == -1) {
+		result = "-1";
+	} else {
+		int i;
+		for (i = 0; _nc_key_names[i].offset != -1; i++) {
+			if (_nc_key_names[i].code == c) {
+				result = (NCURSES_CONST char *)key_names + _nc_key_names[i].offset;
+				break;
+			}
+		}
+
+		if (result == 0 && (c >= 0 && c < SIZEOF_TABLE)) {
+			if (MyTable == 0)
+				MyTable = typeCalloc(char *, SIZEOF_TABLE);
+
+			if (MyTable != 0) {
+				int m_prefix = (sp == 0 || sp->_use_meta);
+
+				/* if sense of meta() changed, discard cached data */
+				if (MyInit != (m_prefix + 1)) {
+					MyInit = m_prefix + 1;
+					for (i = 0; i < SIZEOF_TABLE; ++i) {
+						if (MyTable[i]) {
+							FreeAndNull(MyTable[i]);
+						}
+					}
+				}
+
+				/* create and cache result as needed */
+				if (MyTable[c] == 0) {
+					int cc = c;
+					char *p = name;
+#define P_LIMIT (sizeof(name) - (size_t) (p - name))
+					if (cc >= 128 && m_prefix) {
+						_nc_STRCPY(p, "M-", P_LIMIT);
+						p += 2;
+						cc -= 128;
+					}
+					if (cc < 32)
+						_nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) "^%c", cc + '@');
+					else if (cc == 127)
+						_nc_STRCPY(p, "^?", P_LIMIT);
+					else
+						_nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) "%c", cc);
+					MyTable[c] = strdup(name);
+				}
+				result = MyTable[c];
+			}
+#if NCURSES_EXT_FUNCS && NCURSES_XNAMES
+		} else if (result == 0 && HasTerminal(sp)) {
+			int j, k;
+			char * bound;
+			TERMTYPE2 *tp = &TerminalType(TerminalOf(sp));
+			unsigned save_trace = _nc_tracing;
+
+			_nc_tracing = 0;	/* prevent recursion via keybound() */
+			for (j = 0; (bound = NCURSES_SP_NAME(keybound)(NCURSES_SP_ARGx c, j)) != 0; ++j) {
+				for(k = STRCOUNT; k < (int) NUM_STRINGS(tp);  k++) {
+					if (tp->Strings[k] != 0 && !strcmp(bound, tp->Strings[k])) {
+						result = ExtStrname(tp, k, strnames);
+						break;
+					}
+				}
+				free(bound);
+				if (result != 0)
+					break;
+			}
+			_nc_tracing = save_trace;
+#endif
+		}
+	}
+	return result;
+}
+
+NCURSES_EXPORT(NCURSES_CONST char *)
+keyname (int c)
+{
+	return safe_keyname (CURRENT_SCREEN, c);
+}
+
+#if NO_LEAKS
+void _nc_keyname_leaks(void)
+{
+	if (MyTable != 0) {
+		int j;
+		for (j = 0; j < SIZEOF_TABLE; ++j) {
+			FreeIfNeeded(MyTable[j]);
+		}
+		FreeAndNull(MyTable);
+	}
+}
+#endif /* NO_LEAKS */
