mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
422 lines
7.9 KiB
C
422 lines
7.9 KiB
C
|
/* 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 */
|