C-Menu 0.2.9
A User Interface Toolkit
Loading...
Searching...
No Matches
curskeys.c
Go to the documentation of this file.
1/** @file curskeys.c
2 @brief Test Curses Keys
3 @author Bill Waller
4 Copyright (c) 2025
5 MIT License
6 billxwaller@gmail.com
7 @date 2026-02-09
8 */
9
10#include <common.h>
11#include <ncursesw/ncurses.h>
12#include <unistd.h>
13
14#define KSTRLEN 100
15#define MAXLEN 256
16int popup_ckeys();
17
18/** @brief Display Curses Keys
19 Responds to curses keys and mouse events, displaying the key code and
20 description.
21 @return 0 on success, non-zero on failure
22 */
24 WINDOW *win;
25 WINDOW *box;
26 char Title[] = "TEST CURSES KEYS";
27 int lines = 10;
28 int cols = 55;
29 char kstr[KSTRLEN];
30 int c;
31 char action[MAXLEN];
32 char tmp[MAXLEN];
33 MEVENT event;
34 char *s;
35 int maxy, maxx;
36
37 getmaxyx(stdscr, maxy, maxx);
38 int begy = (maxy - lines) / 3;
39 int begx = (maxx - cols) / 2;
40
41 mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION | BUTTON_SHIFT |
42 BUTTON_CTRL | BUTTON_ALT,
43 NULL);
44 if (win_new(lines, cols, begy, begx, Title, 0)) {
45 strnz__cpy(tmp, "win_new failed: ", MAXLEN - 1);
46 strnz__cat(tmp, Title, MAXLEN - 1);
47 Perror(tmp);
48 return 0;
49 }
50 win = win_win[win_ptr];
51 box = win_box[win_ptr];
52 keypad(win, TRUE);
53 wattron(win, WA_REVERSE);
54 mvwaddstr(win, lines - 1, 0, " <ALT>END to exit ");
55 wattroff(win, WA_REVERSE);
56 wnoutrefresh(box);
57 mvwaddstr(win, 1, 4, "Press a key or activate the mouse:");
58 c = '\0';
59 halfdelay(1);
60 while (!c) {
61 kstr[0] = '\0';
62 wmove(win, 1, 39);
63 do {
64 c = wgetch(win);
65 if (sig_received != 0) {
68 if (c == 'q' || c == KEY_F(9))
69 exit(EXIT_FAILURE);
70 continue;
71 }
72 } while (c == ERR);
73 s = keybound(c, 0);
74 switch (c) {
75 case '\0':
76 break;
77 case KEY_CODE_YES:
78 strnz__cpy(kstr, "KEY_CODE_YES A wchar_t contains a key code",
79 KSTRLEN - 1);
80 break;
81 case KEY_BREAK:
82 strnz__cpy(kstr, "KEY_BREAK Break key(unreliable)", KSTRLEN - 1);
83 break;
84 case KEY_DOWN:
85 strnz__cpy(kstr, "KEY_DOWN down - arrow key", KSTRLEN - 1);
86 break;
87 case KEY_UP:
88 strnz__cpy(kstr, "KEY_UP up - arrow key", KSTRLEN - 1);
89 break;
90 case KEY_LEFT:
91 strnz__cpy(kstr, "KEY_LEFT left - arrow key", KSTRLEN - 1);
92 break;
93 case KEY_RIGHT:
94 strnz__cpy(kstr, "KEY_RIGHT right - arrow key", KSTRLEN - 1);
95 break;
96 case KEY_HOME:
97 strnz__cpy(kstr, "KEY_HOME home key", KSTRLEN - 1);
98 break;
99 case KEY_BACKSPACE:
100 strnz__cpy(kstr, "KEY_BACKSPACE backspace key", KSTRLEN - 1);
101 break;
102 case KEY_F(1):
103 strnz__cpy(kstr, "KEY_F(1) KEY_F(1)", KSTRLEN - 1);
104 break;
105 case KEY_F(2):
106 strnz__cpy(kstr, "KEY_F2 KEY_F2", KSTRLEN - 1);
107 break;
108 case KEY_F(3):
109 strnz__cpy(kstr, "KEY_F3 KEY_F3", KSTRLEN - 1);
110 break;
111 case KEY_F(4):
112 strnz__cpy(kstr, "KEY_F4 KEY_F4", KSTRLEN - 1);
113 break;
114 case KEY_F(5):
115 strnz__cpy(kstr, "KEY_F5 KEY_F5", KSTRLEN - 1);
116 break;
117 case KEY_F(6):
118 strnz__cpy(kstr, "KEY_F6 KEY_F6", KSTRLEN - 1);
119 break;
120 case KEY_F(7):
121 strnz__cpy(kstr, "KEY_F7 KEY_F7", KSTRLEN - 1);
122 break;
123 case KEY_F(8):
124 strnz__cpy(kstr, "KEY_F8 KEY_F8", KSTRLEN - 1);
125 break;
126 case KEY_F(9):
127 strnz__cpy(kstr, "KEY_F9 KEY_F9", KSTRLEN - 1);
128 break;
129 case KEY_F(10):
130 strnz__cpy(kstr, "KEY_F10 KEY_F10", KSTRLEN - 1);
131 break;
132 case KEY_F(11):
133 strnz__cpy(kstr, "KEY_F11 KEY_F11", KSTRLEN - 1);
134 break;
135 case KEY_F(12):
136 strnz__cpy(kstr, "KEY_F12 KEY_F12", KSTRLEN - 1);
137 break;
138 case KEY_DL:
139 strnz__cpy(kstr, "KEY_DL delete - line key", KSTRLEN - 1);
140 break;
141 case KEY_IL:
142 strnz__cpy(kstr, "KEY_IL insert - line key", KSTRLEN - 1);
143 break;
144 case KEY_DC:
145 strnz__cpy(kstr, "KEY_DC delete - character key", KSTRLEN - 1);
146 break;
147 case KEY_IC:
148 strnz__cpy(kstr, "KEY_IC insert - character key", KSTRLEN - 1);
149 break;
150 case KEY_EIC:
151 strnz__cpy(kstr, "KEY_EIC sent by rmir or smir in insert mode",
152 KSTRLEN - 1);
153 break;
154 case KEY_CLEAR:
155 strnz__cpy(kstr, "KEY_CLEAR clear - screen or erase key",
156 KSTRLEN - 1);
157 break;
158 case KEY_EOS:
159 strnz__cpy(kstr, "KEY_EOS clear - to - end - of - screen key",
160 KSTRLEN - 1);
161 break;
162 case KEY_EOL:
163 strnz__cpy(kstr, "KEY_EOL clear - to - end - of - line key",
164 KSTRLEN - 1);
165 break;
166 case KEY_SF:
167 strnz__cpy(kstr, "KEY_SF scroll - forward key", KSTRLEN - 1);
168 break;
169 case KEY_SR:
170 strnz__cpy(kstr, "KEY_SR scroll - backward key", KSTRLEN - 1);
171 break;
172 case KEY_NPAGE:
173 strnz__cpy(kstr, "KEY_NPAGE next - page key", KSTRLEN - 1);
174 break;
175 case KEY_PPAGE:
176 strnz__cpy(kstr, "KEY_PPAGE previous - page key", KSTRLEN - 1);
177 break;
178 case KEY_STAB:
179 strnz__cpy(kstr, "KEY_STAB set - tab key", KSTRLEN - 1);
180 break;
181 case KEY_CTAB:
182 strnz__cpy(kstr, "KEY_CTAB clear - tab key", KSTRLEN - 1);
183 break;
184 case KEY_CATAB:
185 strnz__cpy(kstr, "KEY_CATAB clear - all - tabs key", KSTRLEN - 1);
186 break;
187 case '\n':
188 strnz__cpy(kstr, "KEY_ENTER newline key", KSTRLEN - 1);
189 break;
190 case KEY_ENTER:
191 strnz__cpy(kstr, "KEY_ENTER enter / send key", KSTRLEN - 1);
192 break;
193 case KEY_SRESET:
194 strnz__cpy(kstr, "KEY_SRESET Soft(partial) reset(unreliable)",
195 KSTRLEN - 1);
196 break;
197 case KEY_RESET:
198 strnz__cpy(kstr, "KEY_RESET Reset or hard reset(unreliable)",
199 KSTRLEN - 1);
200 break;
201 case KEY_PRINT:
202 strnz__cpy(kstr, "KEY_PRINT print key", KSTRLEN - 1);
203 break;
204 case KEY_LL:
205 strnz__cpy(kstr, "KEY_LL lower - left key(home down)", KSTRLEN - 1);
206 break;
207 case KEY_A1:
208 strnz__cpy(kstr, "KEY_A1 upper left of keypad", KSTRLEN - 1);
209 break;
210 case KEY_A3:
211 strnz__cpy(kstr, "KEY_A3 upper right of keypad", KSTRLEN - 1);
212 break;
213 case KEY_B2:
214 strnz__cpy(kstr, "KEY_B2 center of keypad", KSTRLEN - 1);
215 break;
216 case KEY_C1:
217 strnz__cpy(kstr, "KEY_C1 lower left of keypad", KSTRLEN - 1);
218 break;
219 case KEY_C3:
220 strnz__cpy(kstr, "KEY_C3 lower right of keypad", KSTRLEN - 1);
221 break;
222 case KEY_BTAB:
223 strnz__cpy(kstr, "KEY_BTAB back - tab key", KSTRLEN - 1);
224 break;
225 case KEY_BEG:
226 strnz__cpy(kstr, "KEY_BEG begin key", KSTRLEN - 1);
227 break;
228 case KEY_CANCEL:
229 strnz__cpy(kstr, "KEY_CANCEL cancel key", KSTRLEN - 1);
230 break;
231 case KEY_CLOSE:
232 strnz__cpy(kstr, "KEY_CLOSE close key", KSTRLEN - 1);
233 break;
234 case KEY_COMMAND:
235 strnz__cpy(kstr, "KEY_COMMAND command key", KSTRLEN - 1);
236 break;
237 case KEY_COPY:
238 strnz__cpy(kstr, "KEY_COPY copy key", KSTRLEN - 1);
239 break;
240 case KEY_CREATE:
241 strnz__cpy(kstr, "KEY_CREATE create key", KSTRLEN - 1);
242 break;
243 case KEY_END:
244 strnz__cpy(kstr, "KEY_END end key", KSTRLEN - 1);
245 break;
246 case KEY_EXIT:
247 strnz__cpy(kstr, "KEY_EXIT exit key", KSTRLEN - 1);
248 break;
249 case KEY_FIND:
250 strnz__cpy(kstr, "KEY_FIND find key", KSTRLEN - 1);
251 break;
252 case KEY_HELP:
253 strnz__cpy(kstr, "KEY_HELP help key", KSTRLEN - 1);
254 break;
255 case KEY_MARK:
256 strnz__cpy(kstr, "KEY_MARK mark key", KSTRLEN - 1);
257 break;
258 case KEY_MESSAGE:
259 strnz__cpy(kstr, "KEY_MESSAGE message key", KSTRLEN - 1);
260 break;
261 case KEY_MOVE:
262 strnz__cpy(kstr, "KEY_MOVE move key", KSTRLEN - 1);
263 break;
264 case KEY_NEXT:
265 strnz__cpy(kstr, "KEY_NEXT next key", KSTRLEN - 1);
266 break;
267 case KEY_OPEN:
268 strnz__cpy(kstr, "KEY_OPEN open key", KSTRLEN - 1);
269 break;
270 case KEY_OPTIONS:
271 strnz__cpy(kstr, "KEY_OPTIONS options key", KSTRLEN - 1);
272 break;
273 case KEY_PREVIOUS:
274 strnz__cpy(kstr, "KEY_PREVIOUS previous key", KSTRLEN - 1);
275 break;
276 case KEY_REDO:
277 strnz__cpy(kstr, "KEY_REDO redo key", KSTRLEN - 1);
278 break;
279 case KEY_REFERENCE:
280 strnz__cpy(kstr, "KEY_REFERENCE reference key", KSTRLEN - 1);
281 break;
282 case KEY_REFRESH:
283 strnz__cpy(kstr, "KEY_REFRESH refresh key", KSTRLEN - 1);
284 break;
285 case KEY_REPLACE:
286 strnz__cpy(kstr, "KEY_REPLACE replace key", KSTRLEN - 1);
287 break;
288 case KEY_RESTART:
289 strnz__cpy(kstr, "KEY_RESTART restart key", KSTRLEN - 1);
290 break;
291 case KEY_RESUME:
292 strnz__cpy(kstr, "KEY_RESUME resume key", KSTRLEN - 1);
293 break;
294 case KEY_SAVE:
295 strnz__cpy(kstr, "KEY_SAVE save key", KSTRLEN - 1);
296 break;
297 case KEY_SBEG:
298 strnz__cpy(kstr, "KEY_SBEG shifted begin key", KSTRLEN - 1);
299 break;
300 case KEY_SCANCEL:
301 strnz__cpy(kstr, "KEY_SCANCEL shifted cancel key", KSTRLEN - 1);
302 break;
303 case KEY_SCOMMAND:
304 strnz__cpy(kstr, "KEY_SCOMMAND shifted command key", KSTRLEN - 1);
305 break;
306 case KEY_SCOPY:
307 strnz__cpy(kstr, "KEY_SCOPY shifted copy key", KSTRLEN - 1);
308 break;
309 case KEY_SCREATE:
310 strnz__cpy(kstr, "KEY_SCREATE shifted create key", KSTRLEN - 1);
311 break;
312 case KEY_SDC:
313 strnz__cpy(kstr, "KEY_SDC shifted delete - character key",
314 KSTRLEN - 1);
315 break;
316 case KEY_SDL:
317 strnz__cpy(kstr, "KEY_SDL shifted delete - line key", KSTRLEN - 1);
318 break;
319 case KEY_SELECT:
320 strnz__cpy(kstr, "KEY_SELECT select key", KSTRLEN - 1);
321 break;
322 case KEY_SEND:
323 strnz__cpy(kstr, "KEY_SEND shifted end key", KSTRLEN - 1);
324 break;
325 case KEY_SEOL:
326 strnz__cpy(kstr,
327 "KEY_SEOL shifted clear - to - end - of - line key",
328 KSTRLEN - 1);
329 break;
330 case KEY_SEXIT:
331 strnz__cpy(kstr, "KEY_SEXIT shifted exit key", KSTRLEN - 1);
332 break;
333 case KEY_SFIND:
334 strnz__cpy(kstr, "KEY_SFIND shifted find key", KSTRLEN - 1);
335 break;
336 case KEY_SHELP:
337 strnz__cpy(kstr, "KEY_SHELP shifted help key", KSTRLEN - 1);
338 break;
339 case KEY_SHOME:
340 strnz__cpy(kstr, "KEY_SHOME shifted home key", KSTRLEN - 1);
341 break;
342 case KEY_SIC:
343 strnz__cpy(kstr, "KEY_SIC shifted insert - character key",
344 KSTRLEN - 1);
345 break;
346 case KEY_SLEFT:
347 strnz__cpy(kstr, "KEY_SLEFT shifted left - arrow key", KSTRLEN - 1);
348 break;
349 case KEY_SMESSAGE:
350 strnz__cpy(kstr, "KEY_SMESSAGE shifted message key", KSTRLEN - 1);
351 break;
352 case KEY_SMOVE:
353 strnz__cpy(kstr, "KEY_SMOVE shifted move key", KSTRLEN - 1);
354 break;
355 case KEY_SNEXT:
356 strnz__cpy(kstr, "KEY_SNEXT shifted next key", KSTRLEN - 1);
357 break;
358 case KEY_SOPTIONS:
359 strnz__cpy(kstr, "KEY_SOPTIONS shifted options key", KSTRLEN - 1);
360 break;
361 case KEY_SPREVIOUS:
362 strnz__cpy(kstr, "KEY_SPREVIOUS shifted previous key", KSTRLEN - 1);
363 break;
364 case KEY_SPRINT:
365 strnz__cpy(kstr, "KEY_SPRINT shifted print key", KSTRLEN - 1);
366 break;
367 case KEY_SREDO:
368 strnz__cpy(kstr, "KEY_SREDO shifted redo key", KSTRLEN - 1);
369 break;
370 case KEY_SREPLACE:
371 strnz__cpy(kstr, "KEY_SREPLACE shifted replace key", KSTRLEN - 1);
372 break;
373 case KEY_SRIGHT:
374 strnz__cpy(kstr, "KEY_SRIGHT shifted right - arrow key",
375 KSTRLEN - 1);
376 break;
377 case KEY_SRSUME:
378 strnz__cpy(kstr, "KEY_SRSUME shifted resume key", KSTRLEN - 1);
379 break;
380 case KEY_SSAVE:
381 strnz__cpy(kstr, "KEY_SSAVE shifted save key", KSTRLEN - 1);
382 break;
383 case KEY_SSUSPEND:
384 strnz__cpy(kstr, "KEY_SSUSPEND shifted suspend key", KSTRLEN - 1);
385 break;
386 case KEY_SUNDO:
387 strnz__cpy(kstr, "KEY_SUNDO shifted undo key", KSTRLEN - 1);
388 break;
389 case KEY_SUSPEND:
390 strnz__cpy(kstr, "KEY_SUSPEND suspend key", KSTRLEN - 1);
391 break;
392 case KEY_UNDO:
393 strnz__cpy(kstr, "KEY_UNDO undo key", KSTRLEN - 1);
394 break;
395 case KEY_ALTDEL:
396 strnz__cpy(kstr, "KEY_ALTDEL alt+delete", KSTRLEN - 1);
397 break;
398 case KEY_ALTDOWN:
399 strnz__cpy(kstr, "KEY_ALTDOWN alt+down", KSTRLEN - 1);
400 break;
401 case KEY_ALTEND:
402 strnz__cpy(kstr, "KEY_ALTEND alt+end", KSTRLEN - 1);
403 break;
404 case KEY_ALTHOME:
405 strnz__cpy(kstr, "KEY_ALTHOME alt+home", KSTRLEN - 1);
406 break;
407 case KEY_ALTINS:
408 strnz__cpy(kstr, "KEY_ALTINS alt+ins", KSTRLEN - 1);
409 break;
410 case KEY_ALTLEFT:
411 strnz__cpy(kstr, "KEY_ALTLEFT alt+left", KSTRLEN - 1);
412 break;
413 case KEY_ALTPGDN:
414 strnz__cpy(kstr, "KEY_ALTPGDN alt+pgdn", KSTRLEN - 1);
415 break;
416 case KEY_ALTPGUP:
417 strnz__cpy(kstr, "KEY_ALTPGUP alt+pgup", KSTRLEN - 1);
418 break;
419 case KEY_ALTRIGHT:
420 strnz__cpy(kstr, "KEY_ALTRIGHT alt+right", KSTRLEN - 1);
421 break;
422 case KEY_ALTUP:
423 strnz__cpy(kstr, "KEY_ALTUP alt+up", KSTRLEN - 1);
424 break;
425 case KEY_ALTF(1):
426 strnz__cpy(kstr, "KEY_ALTF1 alt+F1", KSTRLEN - 1);
427 break;
428 case KEY_ALTF(2):
429 strnz__cpy(kstr, "KEY_ALTF1 alt+F2", KSTRLEN - 1);
430 break;
431 case KEY_ALTF(3):
432 strnz__cpy(kstr, "KEY_ALTF3 alt+F3", KSTRLEN - 1);
433 break;
434 case KEY_ALTF(4):
435 strnz__cpy(kstr, "KEY_ALTF4 alt+F4", KSTRLEN - 1);
436 break;
437 case KEY_ALTF(5):
438 strnz__cpy(kstr, "KEY_ALTF5 alt+F5", KSTRLEN - 1);
439 break;
440 case KEY_ALTF(6):
441 strnz__cpy(kstr, "KEY_ALTF6 alt+F6", KSTRLEN - 1);
442 break;
443 case KEY_ALTF(7):
444 strnz__cpy(kstr, "KEY_ALTF7 alt+F7", KSTRLEN - 1);
445 break;
446 case KEY_ALTF(8):
447 strnz__cpy(kstr, "KEY_ALTF8 alt+F8", KSTRLEN - 1);
448 break;
449 case KEY_ALTF(9):
450 strnz__cpy(kstr, "KEY_ALTF9 alt+F9", KSTRLEN - 1);
451 break;
452 case KEY_ALTF(10):
453 strnz__cpy(kstr, "KEY_ALTF10 alt+F10", KSTRLEN - 1);
454 break;
455 case KEY_ALTF(11):
456 strnz__cpy(kstr, "KEY_ALTF11 alt+F11", KSTRLEN - 1);
457 break;
458 case KEY_ALTF(12):
459 strnz__cpy(kstr, "KEY_ALTF12 alt+F12", KSTRLEN - 1);
460 break;
461 case KEY_MOUSE:
462 action[0] = '\0';
463 if (getmouse(&event) == OK) {
464 switch (event.bstate) {
465 case BUTTON1_PRESSED:
466 strnz__cpy(action, "Button 1 pressed", KSTRLEN - 1);
467 break;
468 case BUTTON1_RELEASED:
469 strnz__cpy(action, "Button 1 released", KSTRLEN - 1);
470 break;
471 case BUTTON1_CLICKED:
472 strnz__cpy(action, "Button 1 clicked", KSTRLEN - 1);
473 break;
474 case BUTTON1_DOUBLE_CLICKED:
475 strnz__cpy(action, "Button 1 double-clicked", KSTRLEN - 1);
476 break;
477 case BUTTON2_PRESSED:
478 strnz__cpy(action, "Button 2 pressed", KSTRLEN - 1);
479 break;
480 case BUTTON2_RELEASED:
481 strnz__cpy(action, "Button 2 released", KSTRLEN - 1);
482 break;
483 case BUTTON2_CLICKED:
484 strnz__cpy(action, "Button 2 clicked", KSTRLEN - 1);
485 break;
486 case BUTTON2_DOUBLE_CLICKED:
487 strnz__cpy(action, "Button 2 double-clicked", KSTRLEN - 1);
488 break;
489 case BUTTON3_PRESSED:
490 strnz__cpy(action, "Button 3 pressed", KSTRLEN - 1);
491 break;
492 case BUTTON3_RELEASED:
493 strnz__cpy(action, "Button 3 released", KSTRLEN - 1);
494 break;
495 case BUTTON3_CLICKED:
496 strnz__cpy(action, "Button 3 clicked", KSTRLEN - 1);
497 break;
498 case BUTTON3_DOUBLE_CLICKED:
499 strnz__cpy(action, "Button 3 double-clicked", KSTRLEN - 1);
500 break;
501 case BUTTON4_PRESSED:
502 strnz__cpy(action, "Button 4 pressed", KSTRLEN - 1);
503 break;
504 case BUTTON4_RELEASED:
505 strnz__cpy(action, "Button 4 released", KSTRLEN - 1);
506 break;
507 case BUTTON4_CLICKED:
508 strnz__cpy(action, "Button 4 clicked", KSTRLEN - 1);
509 break;
510 case BUTTON4_DOUBLE_CLICKED:
511 strnz__cpy(action, "Button 4 double-clicked", KSTRLEN - 1);
512 break;
513 case BUTTON5_PRESSED:
514 strnz__cpy(action, "Scroll Up", KSTRLEN - 1);
515 break;
516 default:
517 break;
518 }
519 mvwaddstr(win, 6, 3, " Action:");
520 mvwaddstr(win, 6, 16, action);
521 wclrtoeol(win);
522
523 strnz__cpy(tmp, " With Key:", MAXLEN - 1);
524 if (event.bstate & BUTTON_SHIFT)
525 strnz__cat(tmp, " Shift", MAXLEN - 1);
526 if (event.bstate & BUTTON_CTRL)
527 strnz__cat(tmp, " Ctrl", MAXLEN - 1);
528 if (event.bstate & BUTTON_ALT)
529 strnz__cat(tmp, " Alt", MAXLEN - 1);
530 mvwaddstr(win, 3, 4, tmp);
531 wclrtoeol(win);
532 if (wenclose(win, event.y, event.x)) {
533 sprintf(tmp, " Inside Win: y: %3d, x: %3d",
534 event.y - begy, event.x - begx);
535 } else {
536 sprintf(tmp, " Outside Win: y: %3d, x: %3d",
537 event.y - begy, event.x - begx);
538 }
539 mvwaddstr(win, 4, 4, tmp);
540 wclrtoeol(win);
541 wmove(win, 5, 0);
542 wclrtoeol(win);
543 wmove(win, 7, 0);
544 wclrtoeol(win);
545 }
546 break;
547 default:
548 break;
549 }
550 if (c != KEY_MOUSE) {
551
552 sprintf(tmp, " Octal: %3o", c);
553 mvwaddstr(win, 3, 4, tmp);
554 wclrtoeol(win);
555
556 sprintf(tmp, " Decimal: %3d", c);
557 mvwaddstr(win, 4, 4, tmp);
558 wclrtoeol(win);
559
560 sprintf(tmp, " Hex: %3x", c);
561 mvwaddstr(win, 5, 4, tmp);
562 wclrtoeol(win);
563
564 if (kstr[0]) {
565 sprintf(tmp, "Description: %s", kstr);
566 } else {
567 sprintf(tmp, " ASCII: %c", c);
568 }
569 mvwaddstr(win, 6, 3, tmp);
570 wclrtoeol(win);
571 mvwaddstr(win, 7, 2, "Key bound To: ");
572 wclrtoeol(win);
573 mvwaddstr(win, 7, 16, s ? s : "Not Bound");
574 wrefresh(win);
575 }
576 if (c == KEY_ALTEND) {
577 usleep(100000);
578 break;
579 }
580 c = '\0';
581 }
582 wclear(win);
583 wrefresh(win);
584 clear();
585 refresh();
586 win_del();
587 return 0;
588}
volatile sig_atomic_t sig_received
Definition sig.c:31
bool handle_signal(sig_atomic_t)
#define KEY_ALTEND
Definition cm.h:403
#define KEY_ALTLEFT
Definition cm.h:406
#define KEY_ALTDOWN
Definition cm.h:407
#define KEY_ALTHOME
Definition cm.h:400
#define KEY_ALTPGDN
Definition cm.h:404
#define KEY_ALTRIGHT
Definition cm.h:408
#define KEY_ALTDEL
Definition cm.h:402
#define KEY_ALTUP
Definition cm.h:405
#define KEY_ALTPGUP
Definition cm.h:401
#define KEY_ALTF(n)
Definition cm.h:346
#define KEY_ALTINS
Definition cm.h:399
#define TRUE
Definition iloan.c:19
int popup_ckeys()
Display Curses Keys Responds to curses keys and mouse events, displaying the key code and description...
Definition curskeys.c:23
#define KSTRLEN
Definition curskeys.c:14
#define MAXLEN
Definition curskeys.c:15
WINDOW * win_win[MAXWIN]
Definition dwin.c:114
char em1[MAXLEN]
Definition dwin.c:133
int win_ptr
Definition dwin.c:121
char em0[MAXLEN]
Definition dwin.c:132
WINDOW * win_box[MAXWIN]
Definition dwin.c:115
char em2[MAXLEN]
Definition dwin.c:134
int win_new(int, int, int, int, char *, int)
Create a new window with optional box and title.
Definition dwin.c:783
WINDOW * win_del()
Delete the current window and its associated box window.
Definition dwin.c:902
int Perror(char *)
Display a simple error message window or print to stderr.
Definition dwin.c:1110
int display_error(char *em0, char *em1, char *em2, char *em3)
Display an error message window or print to stderr.
Definition dwin.c:1054
size_t strnz__cpy(char *, const char *, size_t)
safer alternative to strncpy
Definition futil.c:269
size_t strnz__cat(char *, const char *, size_t)
safer alternative to strncat
Definition futil.c:298