LuK1337 | 52a81d5 | 2025-07-08 18:07:20 -0400 | [diff] [blame] | 1 | /* generated by MKkeyname.awk */ |
| 2 | |
| 3 | #include <curses.priv.h> |
| 4 | #include <tic.h> |
| 5 | |
| 6 | struct kn { short offset; int code; }; |
| 7 | static const struct kn _nc_key_names[] = { |
| 8 | { 0, KEY_A1 }, |
| 9 | { 7, KEY_A3 }, |
| 10 | { 14, KEY_B2 }, |
| 11 | { 21, KEY_BACKSPACE }, |
| 12 | { 35, KEY_BEG }, |
| 13 | { 43, KEY_BREAK }, |
| 14 | { 53, KEY_BTAB }, |
| 15 | { 62, KEY_C1 }, |
| 16 | { 69, KEY_C3 }, |
| 17 | { 76, KEY_CANCEL }, |
| 18 | { 87, KEY_CATAB }, |
| 19 | { 97, KEY_CLEAR }, |
| 20 | { 107, KEY_CLOSE }, |
| 21 | { 117, KEY_COMMAND }, |
| 22 | { 129, KEY_COPY }, |
| 23 | { 138, KEY_CREATE }, |
| 24 | { 149, KEY_CTAB }, |
| 25 | { 158, KEY_DC }, |
| 26 | { 165, KEY_DL }, |
| 27 | { 172, KEY_DOWN }, |
| 28 | { 181, KEY_EIC }, |
| 29 | { 189, KEY_END }, |
| 30 | { 197, KEY_ENTER }, |
| 31 | { 207, KEY_EOL }, |
| 32 | { 215, KEY_EOS }, |
| 33 | { 223, KEY_EXIT }, |
| 34 | { 232, KEY_F(0) }, |
| 35 | { 241, KEY_F(1) }, |
| 36 | { 250, KEY_F(10) }, |
| 37 | { 260, KEY_F(11) }, |
| 38 | { 270, KEY_F(12) }, |
| 39 | { 280, KEY_F(13) }, |
| 40 | { 290, KEY_F(14) }, |
| 41 | { 300, KEY_F(15) }, |
| 42 | { 310, KEY_F(16) }, |
| 43 | { 320, KEY_F(17) }, |
| 44 | { 330, KEY_F(18) }, |
| 45 | { 340, KEY_F(19) }, |
| 46 | { 350, KEY_F(2) }, |
| 47 | { 359, KEY_F(20) }, |
| 48 | { 369, KEY_F(21) }, |
| 49 | { 379, KEY_F(22) }, |
| 50 | { 389, KEY_F(23) }, |
| 51 | { 399, KEY_F(24) }, |
| 52 | { 409, KEY_F(25) }, |
| 53 | { 419, KEY_F(26) }, |
| 54 | { 429, KEY_F(27) }, |
| 55 | { 439, KEY_F(28) }, |
| 56 | { 449, KEY_F(29) }, |
| 57 | { 459, KEY_F(3) }, |
| 58 | { 468, KEY_F(30) }, |
| 59 | { 478, KEY_F(31) }, |
| 60 | { 488, KEY_F(32) }, |
| 61 | { 498, KEY_F(33) }, |
| 62 | { 508, KEY_F(34) }, |
| 63 | { 518, KEY_F(35) }, |
| 64 | { 528, KEY_F(36) }, |
| 65 | { 538, KEY_F(37) }, |
| 66 | { 548, KEY_F(38) }, |
| 67 | { 558, KEY_F(39) }, |
| 68 | { 568, KEY_F(4) }, |
| 69 | { 577, KEY_F(40) }, |
| 70 | { 587, KEY_F(41) }, |
| 71 | { 597, KEY_F(42) }, |
| 72 | { 607, KEY_F(43) }, |
| 73 | { 617, KEY_F(44) }, |
| 74 | { 627, KEY_F(45) }, |
| 75 | { 637, KEY_F(46) }, |
| 76 | { 647, KEY_F(47) }, |
| 77 | { 657, KEY_F(48) }, |
| 78 | { 667, KEY_F(49) }, |
| 79 | { 677, KEY_F(5) }, |
| 80 | { 686, KEY_F(50) }, |
| 81 | { 696, KEY_F(51) }, |
| 82 | { 706, KEY_F(52) }, |
| 83 | { 716, KEY_F(53) }, |
| 84 | { 726, KEY_F(54) }, |
| 85 | { 736, KEY_F(55) }, |
| 86 | { 746, KEY_F(56) }, |
| 87 | { 756, KEY_F(57) }, |
| 88 | { 766, KEY_F(58) }, |
| 89 | { 776, KEY_F(59) }, |
| 90 | { 786, KEY_F(6) }, |
| 91 | { 795, KEY_F(60) }, |
| 92 | { 805, KEY_F(61) }, |
| 93 | { 815, KEY_F(62) }, |
| 94 | { 825, KEY_F(63) }, |
| 95 | { 835, KEY_F(7) }, |
| 96 | { 844, KEY_F(8) }, |
| 97 | { 853, KEY_F(9) }, |
| 98 | { 862, KEY_FIND }, |
| 99 | { 871, KEY_HELP }, |
| 100 | { 880, KEY_HOME }, |
| 101 | { 889, KEY_IC }, |
| 102 | { 896, KEY_IL }, |
| 103 | { 903, KEY_LEFT }, |
| 104 | { 912, KEY_LL }, |
| 105 | { 919, KEY_MARK }, |
| 106 | { 928, KEY_MESSAGE }, |
| 107 | { 940, KEY_MOUSE }, |
| 108 | { 950, KEY_MOVE }, |
| 109 | { 959, KEY_NEXT }, |
| 110 | { 968, KEY_NPAGE }, |
| 111 | { 978, KEY_OPEN }, |
| 112 | { 987, KEY_OPTIONS }, |
| 113 | { 999, KEY_PPAGE }, |
| 114 | { 1009, KEY_PREVIOUS }, |
| 115 | { 1022, KEY_PRINT }, |
| 116 | { 1032, KEY_REDO }, |
| 117 | { 1041, KEY_REFERENCE }, |
| 118 | { 1055, KEY_REFRESH }, |
| 119 | { 1067, KEY_REPLACE }, |
| 120 | { 1079, KEY_RESET }, |
| 121 | { 1089, KEY_RESIZE }, |
| 122 | { 1100, KEY_RESTART }, |
| 123 | { 1112, KEY_RESUME }, |
| 124 | { 1123, KEY_RIGHT }, |
| 125 | { 1133, KEY_SAVE }, |
| 126 | { 1142, KEY_SBEG }, |
| 127 | { 1151, KEY_SCANCEL }, |
| 128 | { 1163, KEY_SCOMMAND }, |
| 129 | { 1176, KEY_SCOPY }, |
| 130 | { 1186, KEY_SCREATE }, |
| 131 | { 1198, KEY_SDC }, |
| 132 | { 1206, KEY_SDL }, |
| 133 | { 1214, KEY_SELECT }, |
| 134 | { 1225, KEY_SEND }, |
| 135 | { 1234, KEY_SEOL }, |
| 136 | { 1243, KEY_SEXIT }, |
| 137 | { 1253, KEY_SF }, |
| 138 | { 1260, KEY_SFIND }, |
| 139 | { 1270, KEY_SHELP }, |
| 140 | { 1280, KEY_SHOME }, |
| 141 | { 1290, KEY_SIC }, |
| 142 | { 1298, KEY_SLEFT }, |
| 143 | { 1308, KEY_SMESSAGE }, |
| 144 | { 1321, KEY_SMOVE }, |
| 145 | { 1331, KEY_SNEXT }, |
| 146 | { 1341, KEY_SOPTIONS }, |
| 147 | { 1354, KEY_SPREVIOUS }, |
| 148 | { 1368, KEY_SPRINT }, |
| 149 | { 1379, KEY_SR }, |
| 150 | { 1386, KEY_SREDO }, |
| 151 | { 1396, KEY_SREPLACE }, |
| 152 | { 1409, KEY_SRESET }, |
| 153 | { 1420, KEY_SRIGHT }, |
| 154 | { 1431, KEY_SRSUME }, |
| 155 | { 1442, KEY_SSAVE }, |
| 156 | { 1452, KEY_SSUSPEND }, |
| 157 | { 1465, KEY_STAB }, |
| 158 | { 1474, KEY_SUNDO }, |
| 159 | { 1484, KEY_SUSPEND }, |
| 160 | { 1496, KEY_UNDO }, |
| 161 | { 1505, KEY_UP }, |
| 162 | { -1, 0 }}; |
| 163 | |
| 164 | static const char key_names[] = |
| 165 | "KEY_A1\0" |
| 166 | "KEY_A3\0" |
| 167 | "KEY_B2\0" |
| 168 | "KEY_BACKSPACE\0" |
| 169 | "KEY_BEG\0" |
| 170 | "KEY_BREAK\0" |
| 171 | "KEY_BTAB\0" |
| 172 | "KEY_C1\0" |
| 173 | "KEY_C3\0" |
| 174 | "KEY_CANCEL\0" |
| 175 | "KEY_CATAB\0" |
| 176 | "KEY_CLEAR\0" |
| 177 | "KEY_CLOSE\0" |
| 178 | "KEY_COMMAND\0" |
| 179 | "KEY_COPY\0" |
| 180 | "KEY_CREATE\0" |
| 181 | "KEY_CTAB\0" |
| 182 | "KEY_DC\0" |
| 183 | "KEY_DL\0" |
| 184 | "KEY_DOWN\0" |
| 185 | "KEY_EIC\0" |
| 186 | "KEY_END\0" |
| 187 | "KEY_ENTER\0" |
| 188 | "KEY_EOL\0" |
| 189 | "KEY_EOS\0" |
| 190 | "KEY_EXIT\0" |
| 191 | "KEY_F(0)\0" |
| 192 | "KEY_F(1)\0" |
| 193 | "KEY_F(10)\0" |
| 194 | "KEY_F(11)\0" |
| 195 | "KEY_F(12)\0" |
| 196 | "KEY_F(13)\0" |
| 197 | "KEY_F(14)\0" |
| 198 | "KEY_F(15)\0" |
| 199 | "KEY_F(16)\0" |
| 200 | "KEY_F(17)\0" |
| 201 | "KEY_F(18)\0" |
| 202 | "KEY_F(19)\0" |
| 203 | "KEY_F(2)\0" |
| 204 | "KEY_F(20)\0" |
| 205 | "KEY_F(21)\0" |
| 206 | "KEY_F(22)\0" |
| 207 | "KEY_F(23)\0" |
| 208 | "KEY_F(24)\0" |
| 209 | "KEY_F(25)\0" |
| 210 | "KEY_F(26)\0" |
| 211 | "KEY_F(27)\0" |
| 212 | "KEY_F(28)\0" |
| 213 | "KEY_F(29)\0" |
| 214 | "KEY_F(3)\0" |
| 215 | "KEY_F(30)\0" |
| 216 | "KEY_F(31)\0" |
| 217 | "KEY_F(32)\0" |
| 218 | "KEY_F(33)\0" |
| 219 | "KEY_F(34)\0" |
| 220 | "KEY_F(35)\0" |
| 221 | "KEY_F(36)\0" |
| 222 | "KEY_F(37)\0" |
| 223 | "KEY_F(38)\0" |
| 224 | "KEY_F(39)\0" |
| 225 | "KEY_F(4)\0" |
| 226 | "KEY_F(40)\0" |
| 227 | "KEY_F(41)\0" |
| 228 | "KEY_F(42)\0" |
| 229 | "KEY_F(43)\0" |
| 230 | "KEY_F(44)\0" |
| 231 | "KEY_F(45)\0" |
| 232 | "KEY_F(46)\0" |
| 233 | "KEY_F(47)\0" |
| 234 | "KEY_F(48)\0" |
| 235 | "KEY_F(49)\0" |
| 236 | "KEY_F(5)\0" |
| 237 | "KEY_F(50)\0" |
| 238 | "KEY_F(51)\0" |
| 239 | "KEY_F(52)\0" |
| 240 | "KEY_F(53)\0" |
| 241 | "KEY_F(54)\0" |
| 242 | "KEY_F(55)\0" |
| 243 | "KEY_F(56)\0" |
| 244 | "KEY_F(57)\0" |
| 245 | "KEY_F(58)\0" |
| 246 | "KEY_F(59)\0" |
| 247 | "KEY_F(6)\0" |
| 248 | "KEY_F(60)\0" |
| 249 | "KEY_F(61)\0" |
| 250 | "KEY_F(62)\0" |
| 251 | "KEY_F(63)\0" |
| 252 | "KEY_F(7)\0" |
| 253 | "KEY_F(8)\0" |
| 254 | "KEY_F(9)\0" |
| 255 | "KEY_FIND\0" |
| 256 | "KEY_HELP\0" |
| 257 | "KEY_HOME\0" |
| 258 | "KEY_IC\0" |
| 259 | "KEY_IL\0" |
| 260 | "KEY_LEFT\0" |
| 261 | "KEY_LL\0" |
| 262 | "KEY_MARK\0" |
| 263 | "KEY_MESSAGE\0" |
| 264 | "KEY_MOUSE\0" |
| 265 | "KEY_MOVE\0" |
| 266 | "KEY_NEXT\0" |
| 267 | "KEY_NPAGE\0" |
| 268 | "KEY_OPEN\0" |
| 269 | "KEY_OPTIONS\0" |
| 270 | "KEY_PPAGE\0" |
| 271 | "KEY_PREVIOUS\0" |
| 272 | "KEY_PRINT\0" |
| 273 | "KEY_REDO\0" |
| 274 | "KEY_REFERENCE\0" |
| 275 | "KEY_REFRESH\0" |
| 276 | "KEY_REPLACE\0" |
| 277 | "KEY_RESET\0" |
| 278 | "KEY_RESIZE\0" |
| 279 | "KEY_RESTART\0" |
| 280 | "KEY_RESUME\0" |
| 281 | "KEY_RIGHT\0" |
| 282 | "KEY_SAVE\0" |
| 283 | "KEY_SBEG\0" |
| 284 | "KEY_SCANCEL\0" |
| 285 | "KEY_SCOMMAND\0" |
| 286 | "KEY_SCOPY\0" |
| 287 | "KEY_SCREATE\0" |
| 288 | "KEY_SDC\0" |
| 289 | "KEY_SDL\0" |
| 290 | "KEY_SELECT\0" |
| 291 | "KEY_SEND\0" |
| 292 | "KEY_SEOL\0" |
| 293 | "KEY_SEXIT\0" |
| 294 | "KEY_SF\0" |
| 295 | "KEY_SFIND\0" |
| 296 | "KEY_SHELP\0" |
| 297 | "KEY_SHOME\0" |
| 298 | "KEY_SIC\0" |
| 299 | "KEY_SLEFT\0" |
| 300 | "KEY_SMESSAGE\0" |
| 301 | "KEY_SMOVE\0" |
| 302 | "KEY_SNEXT\0" |
| 303 | "KEY_SOPTIONS\0" |
| 304 | "KEY_SPREVIOUS\0" |
| 305 | "KEY_SPRINT\0" |
| 306 | "KEY_SR\0" |
| 307 | "KEY_SREDO\0" |
| 308 | "KEY_SREPLACE\0" |
| 309 | "KEY_SRESET\0" |
| 310 | "KEY_SRIGHT\0" |
| 311 | "KEY_SRSUME\0" |
| 312 | "KEY_SSAVE\0" |
| 313 | "KEY_SSUSPEND\0" |
| 314 | "KEY_STAB\0" |
| 315 | "KEY_SUNDO\0" |
| 316 | "KEY_SUSPEND\0" |
| 317 | "KEY_UNDO\0" |
| 318 | "KEY_UP\0"; |
| 319 | |
| 320 | #define SIZEOF_TABLE 256 |
| 321 | #define MyTable _nc_globals.keyname_table |
| 322 | #define MyInit _nc_globals.init_keyname |
| 323 | |
| 324 | NCURSES_EXPORT(NCURSES_CONST char *) |
| 325 | safe_keyname (SCREEN *sp, int c) |
| 326 | { |
| 327 | char name[20]; |
| 328 | NCURSES_CONST char *result = 0; |
| 329 | |
| 330 | if (c == -1) { |
| 331 | result = "-1"; |
| 332 | } else { |
| 333 | int i; |
| 334 | for (i = 0; _nc_key_names[i].offset != -1; i++) { |
| 335 | if (_nc_key_names[i].code == c) { |
| 336 | result = (NCURSES_CONST char *)key_names + _nc_key_names[i].offset; |
| 337 | break; |
| 338 | } |
| 339 | } |
| 340 | |
| 341 | if (result == 0 && (c >= 0 && c < SIZEOF_TABLE)) { |
| 342 | if (MyTable == 0) |
| 343 | MyTable = typeCalloc(char *, SIZEOF_TABLE); |
| 344 | |
| 345 | if (MyTable != 0) { |
| 346 | int m_prefix = (sp == 0 || sp->_use_meta); |
| 347 | |
| 348 | /* if sense of meta() changed, discard cached data */ |
| 349 | if (MyInit != (m_prefix + 1)) { |
| 350 | MyInit = m_prefix + 1; |
| 351 | for (i = 0; i < SIZEOF_TABLE; ++i) { |
| 352 | if (MyTable[i]) { |
| 353 | FreeAndNull(MyTable[i]); |
| 354 | } |
| 355 | } |
| 356 | } |
| 357 | |
| 358 | /* create and cache result as needed */ |
| 359 | if (MyTable[c] == 0) { |
| 360 | int cc = c; |
| 361 | char *p = name; |
| 362 | #define P_LIMIT (sizeof(name) - (size_t) (p - name)) |
| 363 | if (cc >= 128 && m_prefix) { |
| 364 | _nc_STRCPY(p, "M-", P_LIMIT); |
| 365 | p += 2; |
| 366 | cc -= 128; |
| 367 | } |
| 368 | if (cc < 32) |
| 369 | _nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) "^%c", cc + '@'); |
| 370 | else if (cc == 127) |
| 371 | _nc_STRCPY(p, "^?", P_LIMIT); |
| 372 | else |
| 373 | _nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) "%c", cc); |
| 374 | MyTable[c] = strdup(name); |
| 375 | } |
| 376 | result = MyTable[c]; |
| 377 | } |
| 378 | #if NCURSES_EXT_FUNCS && NCURSES_XNAMES |
| 379 | } else if (result == 0 && HasTerminal(sp)) { |
| 380 | int j, k; |
| 381 | char * bound; |
| 382 | TERMTYPE2 *tp = &TerminalType(TerminalOf(sp)); |
| 383 | unsigned save_trace = _nc_tracing; |
| 384 | |
| 385 | _nc_tracing = 0; /* prevent recursion via keybound() */ |
| 386 | for (j = 0; (bound = NCURSES_SP_NAME(keybound)(NCURSES_SP_ARGx c, j)) != 0; ++j) { |
| 387 | for(k = STRCOUNT; k < (int) NUM_STRINGS(tp); k++) { |
| 388 | if (tp->Strings[k] != 0 && !strcmp(bound, tp->Strings[k])) { |
| 389 | result = ExtStrname(tp, k, strnames); |
| 390 | break; |
| 391 | } |
| 392 | } |
| 393 | free(bound); |
| 394 | if (result != 0) |
| 395 | break; |
| 396 | } |
| 397 | _nc_tracing = save_trace; |
| 398 | #endif |
| 399 | } |
| 400 | } |
| 401 | return result; |
| 402 | } |
| 403 | |
| 404 | NCURSES_EXPORT(NCURSES_CONST char *) |
| 405 | keyname (int c) |
| 406 | { |
| 407 | return safe_keyname (CURRENT_SCREEN, c); |
| 408 | } |
| 409 | |
| 410 | #if NO_LEAKS |
| 411 | void _nc_keyname_leaks(void) |
| 412 | { |
| 413 | if (MyTable != 0) { |
| 414 | int j; |
| 415 | for (j = 0; j < SIZEOF_TABLE; ++j) { |
| 416 | FreeIfNeeded(MyTable[j]); |
| 417 | } |
| 418 | FreeAndNull(MyTable); |
| 419 | } |
| 420 | } |
| 421 | #endif /* NO_LEAKS */ |