| /* 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 */ |