blob: 8c416908c55ecc437f2c1d7db209e0c577e096f2 [file] [log] [blame]
LuK133752a81d52025-07-08 18:07:20 -04001/* generated by MKkeyname.awk */
2
3#include <curses.priv.h>
4#include <tic.h>
5
6struct kn { short offset; int code; };
7static 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
164static 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
324NCURSES_EXPORT(NCURSES_CONST char *)
325safe_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
404NCURSES_EXPORT(NCURSES_CONST char *)
405keyname (int c)
406{
407 return safe_keyname (CURRENT_SCREEN, c);
408}
409
410#if NO_LEAKS
411void _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 */