/* generated by MKkeyname.awk */

#include <curses.priv.h>
#include <tic.h>

const struct kn _nc_key_names[] = {
	{ "KEY_A1", KEY_A1 },
	{ "KEY_A3", KEY_A3 },
	{ "KEY_B2", KEY_B2 },
	{ "KEY_BACKSPACE", KEY_BACKSPACE },
	{ "KEY_BEG", KEY_BEG },
	{ "KEY_BREAK", KEY_BREAK },
	{ "KEY_BTAB", KEY_BTAB },
	{ "KEY_C1", KEY_C1 },
	{ "KEY_C3", KEY_C3 },
	{ "KEY_CANCEL", KEY_CANCEL },
	{ "KEY_CATAB", KEY_CATAB },
	{ "KEY_CLEAR", KEY_CLEAR },
	{ "KEY_CLOSE", KEY_CLOSE },
	{ "KEY_COMMAND", KEY_COMMAND },
	{ "KEY_COPY", KEY_COPY },
	{ "KEY_CREATE", KEY_CREATE },
	{ "KEY_CTAB", KEY_CTAB },
	{ "KEY_DC", KEY_DC },
	{ "KEY_DL", KEY_DL },
	{ "KEY_DOWN", KEY_DOWN },
	{ "KEY_EIC", KEY_EIC },
	{ "KEY_END", KEY_END },
	{ "KEY_ENTER", KEY_ENTER },
	{ "KEY_EOL", KEY_EOL },
	{ "KEY_EOS", KEY_EOS },
	{ "KEY_EXIT", KEY_EXIT },
	{ "KEY_F(0)", KEY_F(0) },
	{ "KEY_F(1)", KEY_F(1) },
	{ "KEY_F(10)", KEY_F(10) },
	{ "KEY_F(11)", KEY_F(11) },
	{ "KEY_F(12)", KEY_F(12) },
	{ "KEY_F(13)", KEY_F(13) },
	{ "KEY_F(14)", KEY_F(14) },
	{ "KEY_F(15)", KEY_F(15) },
	{ "KEY_F(16)", KEY_F(16) },
	{ "KEY_F(17)", KEY_F(17) },
	{ "KEY_F(18)", KEY_F(18) },
	{ "KEY_F(19)", KEY_F(19) },
	{ "KEY_F(2)", KEY_F(2) },
	{ "KEY_F(20)", KEY_F(20) },
	{ "KEY_F(21)", KEY_F(21) },
	{ "KEY_F(22)", KEY_F(22) },
	{ "KEY_F(23)", KEY_F(23) },
	{ "KEY_F(24)", KEY_F(24) },
	{ "KEY_F(25)", KEY_F(25) },
	{ "KEY_F(26)", KEY_F(26) },
	{ "KEY_F(27)", KEY_F(27) },
	{ "KEY_F(28)", KEY_F(28) },
	{ "KEY_F(29)", KEY_F(29) },
	{ "KEY_F(3)", KEY_F(3) },
	{ "KEY_F(30)", KEY_F(30) },
	{ "KEY_F(31)", KEY_F(31) },
	{ "KEY_F(32)", KEY_F(32) },
	{ "KEY_F(33)", KEY_F(33) },
	{ "KEY_F(34)", KEY_F(34) },
	{ "KEY_F(35)", KEY_F(35) },
	{ "KEY_F(36)", KEY_F(36) },
	{ "KEY_F(37)", KEY_F(37) },
	{ "KEY_F(38)", KEY_F(38) },
	{ "KEY_F(39)", KEY_F(39) },
	{ "KEY_F(4)", KEY_F(4) },
	{ "KEY_F(40)", KEY_F(40) },
	{ "KEY_F(41)", KEY_F(41) },
	{ "KEY_F(42)", KEY_F(42) },
	{ "KEY_F(43)", KEY_F(43) },
	{ "KEY_F(44)", KEY_F(44) },
	{ "KEY_F(45)", KEY_F(45) },
	{ "KEY_F(46)", KEY_F(46) },
	{ "KEY_F(47)", KEY_F(47) },
	{ "KEY_F(48)", KEY_F(48) },
	{ "KEY_F(49)", KEY_F(49) },
	{ "KEY_F(5)", KEY_F(5) },
	{ "KEY_F(50)", KEY_F(50) },
	{ "KEY_F(51)", KEY_F(51) },
	{ "KEY_F(52)", KEY_F(52) },
	{ "KEY_F(53)", KEY_F(53) },
	{ "KEY_F(54)", KEY_F(54) },
	{ "KEY_F(55)", KEY_F(55) },
	{ "KEY_F(56)", KEY_F(56) },
	{ "KEY_F(57)", KEY_F(57) },
	{ "KEY_F(58)", KEY_F(58) },
	{ "KEY_F(59)", KEY_F(59) },
	{ "KEY_F(6)", KEY_F(6) },
	{ "KEY_F(60)", KEY_F(60) },
	{ "KEY_F(61)", KEY_F(61) },
	{ "KEY_F(62)", KEY_F(62) },
	{ "KEY_F(63)", KEY_F(63) },
	{ "KEY_F(7)", KEY_F(7) },
	{ "KEY_F(8)", KEY_F(8) },
	{ "KEY_F(9)", KEY_F(9) },
	{ "KEY_FIND", KEY_FIND },
	{ "KEY_HELP", KEY_HELP },
	{ "KEY_HOME", KEY_HOME },
	{ "KEY_IC", KEY_IC },
	{ "KEY_IL", KEY_IL },
	{ "KEY_LEFT", KEY_LEFT },
	{ "KEY_LL", KEY_LL },
	{ "KEY_MARK", KEY_MARK },
	{ "KEY_MESSAGE", KEY_MESSAGE },
	{ "KEY_MOUSE", KEY_MOUSE },
	{ "KEY_MOVE", KEY_MOVE },
	{ "KEY_NEXT", KEY_NEXT },
	{ "KEY_NPAGE", KEY_NPAGE },
	{ "KEY_OPEN", KEY_OPEN },
	{ "KEY_OPTIONS", KEY_OPTIONS },
	{ "KEY_PPAGE", KEY_PPAGE },
	{ "KEY_PREVIOUS", KEY_PREVIOUS },
	{ "KEY_PRINT", KEY_PRINT },
	{ "KEY_REDO", KEY_REDO },
	{ "KEY_REFERENCE", KEY_REFERENCE },
	{ "KEY_REFRESH", KEY_REFRESH },
	{ "KEY_REPLACE", KEY_REPLACE },
	{ "KEY_RESET", KEY_RESET },
	{ "KEY_RESIZE", KEY_RESIZE },
	{ "KEY_RESTART", KEY_RESTART },
	{ "KEY_RESUME", KEY_RESUME },
	{ "KEY_RIGHT", KEY_RIGHT },
	{ "KEY_SAVE", KEY_SAVE },
	{ "KEY_SBEG", KEY_SBEG },
	{ "KEY_SCANCEL", KEY_SCANCEL },
	{ "KEY_SCOMMAND", KEY_SCOMMAND },
	{ "KEY_SCOPY", KEY_SCOPY },
	{ "KEY_SCREATE", KEY_SCREATE },
	{ "KEY_SDC", KEY_SDC },
	{ "KEY_SDL", KEY_SDL },
	{ "KEY_SELECT", KEY_SELECT },
	{ "KEY_SEND", KEY_SEND },
	{ "KEY_SEOL", KEY_SEOL },
	{ "KEY_SEXIT", KEY_SEXIT },
	{ "KEY_SF", KEY_SF },
	{ "KEY_SFIND", KEY_SFIND },
	{ "KEY_SHELP", KEY_SHELP },
	{ "KEY_SHOME", KEY_SHOME },
	{ "KEY_SIC", KEY_SIC },
	{ "KEY_SLEFT", KEY_SLEFT },
	{ "KEY_SMESSAGE", KEY_SMESSAGE },
	{ "KEY_SMOVE", KEY_SMOVE },
	{ "KEY_SNEXT", KEY_SNEXT },
	{ "KEY_SOPTIONS", KEY_SOPTIONS },
	{ "KEY_SPREVIOUS", KEY_SPREVIOUS },
	{ "KEY_SPRINT", KEY_SPRINT },
	{ "KEY_SR", KEY_SR },
	{ "KEY_SREDO", KEY_SREDO },
	{ "KEY_SREPLACE", KEY_SREPLACE },
	{ "KEY_SRESET", KEY_SRESET },
	{ "KEY_SRIGHT", KEY_SRIGHT },
	{ "KEY_SRSUME", KEY_SRSUME },
	{ "KEY_SSAVE", KEY_SSAVE },
	{ "KEY_SSUSPEND", KEY_SSUSPEND },
	{ "KEY_STAB", KEY_STAB },
	{ "KEY_SUNDO", KEY_SUNDO },
	{ "KEY_SUSPEND", KEY_SUSPEND },
	{ "KEY_UNDO", KEY_UNDO },
	{ "KEY_UP", KEY_UP },
	{ 0, 0 }};

NCURSES_EXPORT(NCURSES_CONST char *) keyname (int c)
{
static char **table;
int i;
char name[20];
char *p;

	if (c == -1) return "-1";

	for (i = 0; _nc_key_names[i].name != 0; i++)
		if (_nc_key_names[i].code == c)
			return (NCURSES_CONST char *)_nc_key_names[i].name;
	if (c < 0 || c >= 256) return 0;

	if (table == 0)
		table = typeCalloc(char *, 256);
	if (table == 0)
		return keyname(256);

	if (table[c] == 0) {
		p = name;
		if (c >= 128) {
			strcpy(p, "M-");
			p += 2;
			c -= 128;
		}
		if (c < 32)
			sprintf(p, "^%c", c + '@');
		else if (c == 127)
			strcpy(p, "^?");
		else
			sprintf(p, "%c", c);
		table[c] = strdup(name);
	}
	return (NCURSES_CONST char *)table[c];
}

#if USE_WIDEC_SUPPORT
NCURSES_EXPORT(NCURSES_CONST char *) key_name (wchar_t c)
{
	NCURSES_CONST char *result = keyname((int)c);
	if (!strncmp(result, "M-", 2)) result = 0;
	return result;
}
#endif
