| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| subject: | keytest.c |
/*
* keytest.c
*
* Uses Curses getch() to read keypresses from the user and report back
* what key was pressed. Compile with gcc -o keytest keytest.c -lcurses .
*
* This program written in June 2003 by Andrew Clarke
* and released to the public domain.
*/
#include
#include
#include
#include
typedef struct
{
int key;
char *desc;
}
keytable_t;
static keytable_t keytable[] =
{
{ KEY_BREAK, "KEY_BREAK - Break key" },
{ KEY_DOWN, "KEY_DOWN - Down arrow" },
{ KEY_UP, "KEY_UP - Up arrow" },
{ KEY_LEFT, "KEY_LEFT - Left arrow" },
{ KEY_RIGHT, "KEY_RIGHT - Right arrow" },
{ KEY_HOME, "KEY_HOME - Home key (upward+left arrow)" },
{ KEY_BACKSPACE, "KEY_BACKSPACE - Backspace" },
{ KEY_F(0), "KEY_F(0) - F0" },
{ KEY_F(1), "KEY_F(1) - F1" },
{ KEY_F(2), "KEY_F(2) - F2" },
{ KEY_F(3), "KEY_F(3) - F3" },
{ KEY_F(4), "KEY_F(4) - F4" },
{ KEY_F(5), "KEY_F(5) - F5" },
{ KEY_F(6), "KEY_F(6) - F6" },
{ KEY_F(7), "KEY_F(7) - F7" },
{ KEY_F(8), "KEY_F(8) - F8" },
{ KEY_F(9), "KEY_F(9) - F9" },
{ KEY_F(10), "KEY_F(10) - F10" },
{ KEY_F(11), "KEY_F(11) - F11" },
{ KEY_F(12), "KEY_F(12) - F12" },
{ KEY_F(13), "KEY_F(13) - F13" },
{ KEY_F(14), "KEY_F(14) - F14" },
{ KEY_F(15), "KEY_F(15) - F15" },
{ KEY_F(16), "KEY_F(16) - F16" },
{ KEY_F(17), "KEY_F(17) - F17" },
{ KEY_F(18), "KEY_F(18) - F18" },
{ KEY_F(19), "KEY_F(19) - F19" },
{ KEY_F(20), "KEY_F(20) - F20" },
{ KEY_F(21), "KEY_F(21) - F21" },
{ KEY_F(22), "KEY_F(22) - F22" },
{ KEY_F(23), "KEY_F(23) - F23" },
{ KEY_F(24), "KEY_F(24) - F24" },
{ KEY_F(25), "KEY_F(25) - F25" },
{ KEY_F(26), "KEY_F(26) - F26" },
{ KEY_F(27), "KEY_F(27) - F27" },
{ KEY_F(28), "KEY_F(28) - F28" },
{ KEY_F(29), "KEY_F(29) - F29" },
{ KEY_F(30), "KEY_F(30) - F30" },
{ KEY_F(31), "KEY_F(31) - F31" },
{ KEY_F(32), "KEY_F(32) - F32" },
{ KEY_F(33), "KEY_F(33) - F33" },
{ KEY_F(34), "KEY_F(34) - F34" },
{ KEY_F(35), "KEY_F(35) - F35" },
{ KEY_F(36), "KEY_F(36) - F36" },
{ KEY_F(37), "KEY_F(37) - F37" },
{ KEY_F(38), "KEY_F(38) - F38" },
{ KEY_F(39), "KEY_F(39) - F39" },
{ KEY_F(40), "KEY_F(40) - F40" },
{ KEY_F(41), "KEY_F(41) - F41" },
{ KEY_F(42), "KEY_F(42) - F42" },
{ KEY_F(43), "KEY_F(43) - F43" },
{ KEY_F(44), "KEY_F(44) - F44" },
{ KEY_F(45), "KEY_F(45) - F45" },
{ KEY_F(46), "KEY_F(46) - F46" },
{ KEY_F(47), "KEY_F(47) - F47" },
{ KEY_F(48), "KEY_F(48) - F48" },
{ KEY_F(49), "KEY_F(49) - F49" },
{ KEY_F(50), "KEY_F(50) - F50" },
{ KEY_F(51), "KEY_F(51) - F51" },
{ KEY_F(52), "KEY_F(52) - F52" },
{ KEY_F(53), "KEY_F(53) - F53" },
{ KEY_F(54), "KEY_F(54) - F54" },
{ KEY_F(55), "KEY_F(55) - F55" },
{ KEY_F(56), "KEY_F(56) - F56" },
{ KEY_F(57), "KEY_F(57) - F57" },
{ KEY_F(58), "KEY_F(58) - F58" },
{ KEY_F(59), "KEY_F(59) - F59" },
{ KEY_F(60), "KEY_F(60) - F60" },
{ KEY_F(61), "KEY_F(61) - F61" },
{ KEY_F(62), "KEY_F(62) - F62" },
{ KEY_F(63), "KEY_F(63) - F63" },
{ KEY_DL, "KEY_DL - Delete line" },
{ KEY_IL, "KEY_IL - Insert line" },
{ KEY_DC, "KEY_DC - Delete character" },
{ KEY_IC, "KEY_IC - Insert char or enter insert mode" },
{ KEY_EIC, "KEY_EIC - Exit insert char mode" },
{ KEY_CLEAR, "KEY_CLEAR - Clear screen" },
{ KEY_EOS, "KEY_EOS - Clear to end of screen" },
{ KEY_EOL, "KEY_EOL - Clear to end of line" },
{ KEY_SF, "KEY_SF - Scroll 1 line forward" },
{ KEY_SR, "KEY_SR - Scroll 1 line backward (reverse)" },
{ KEY_NPAGE, "KEY_NPAGE - Next page" },
{ KEY_PPAGE, "KEY_PPAGE - Previous page" },
{ KEY_STAB, "KEY_STAB - Set tab" },
{ KEY_CTAB, "KEY_CTAB - Clear tab" },
{ KEY_CATAB, "KEY_CATAB - Clear all tabs" },
{ KEY_ENTER, "KEY_ENTER - Enter or send" },
{ KEY_SRESET, "KEY_SRESET - Soft (partial) reset" },
{ KEY_RESET, "KEY_RESET - Reset or hard reset" },
{ KEY_PRINT, "KEY_PRINT - Print or copy" },
{ KEY_LL, "KEY_LL - Home down or bottom (lower left)." },
{ KEY_A1, "KEY_A1 - Upper left of keypad" },
{ KEY_A3, "KEY_A3 - Upper right of keypad" },
{ KEY_B2, "KEY_B2 - Center of keypad" },
{ KEY_C1, "KEY_C1 - Lower left of keypad" },
{ KEY_C3, "KEY_C3 - Lower right of keypad" },
{ KEY_BTAB, "KEY_BTAB - Back tab key" },
{ KEY_BEG, "KEY_BEG - Beg(inning) key" },
{ KEY_CANCEL, "KEY_CANCEL - Cancel key" },
{ KEY_CLOSE, "KEY_CLOSE - Close key" },
{ KEY_COMMAND, "KEY_COMMAND - Cmd (command) key" },
{ KEY_COPY, "KEY_COPY - Copy key" },
{ KEY_CREATE, "KEY_CREATE - Create key" },
{ KEY_END, "KEY_END - End key" },
{ KEY_EXIT, "KEY_EXIT - Exit key" },
{ KEY_FIND, "KEY_FIND - Find key" },
{ KEY_HELP, "KEY_HELP - Help key" },
{ KEY_MARK, "KEY_MARK - Mark key" },
{ KEY_MESSAGE, "KEY_MESSAGE - Message key" },
{ KEY_MOUSE, "KEY_MOUSE - Mouse event read" },
{ KEY_MOVE, "KEY_MOVE - Move key" },
{ KEY_NEXT, "KEY_NEXT - Next object key" },
{ KEY_OPEN, "KEY_OPEN - Open key" },
{ KEY_OPTIONS, "KEY_OPTIONS - Options key" },
{ KEY_PREVIOUS, "KEY_PREVIOUS - Previous object key" },
{ KEY_REDO, "KEY_REDO - Redo key" },
{ KEY_REFERENCE, "KEY_REFERENCE - Ref(erence) key" },
{ KEY_REFRESH, "KEY_REFRESH - Refresh key" },
{ KEY_REPLACE, "KEY_REPLACE - Replace key" },
#ifdef KEY_RESIZE
{ KEY_RESIZE, "KEY_RESIZE - Screen resized" },
#endif
{ KEY_RESTART, "KEY_RESTART - Restart key" },
{ KEY_RESUME, "KEY_RESUME - Resume key" },
{ KEY_SAVE, "KEY_SAVE - Save key" },
{ KEY_SBEG, "KEY_SBEG - Shifted beginning key" },
{ KEY_SCANCEL, "KEY_SCANCEL - Shifted cancel key" },
{ KEY_SCOMMAND, "KEY_SCOMMAND - Shifted command key" },
{ KEY_SCOPY, "KEY_SCOPY - Shifted copy key" },
{ KEY_SCREATE, "KEY_SCREATE - Shifted create key" },
{ KEY_SDC, "KEY_SDC - Shifted delete char key" },
{ KEY_SDL, "KEY_SDL - Shifted delete line key" },
{ KEY_SELECT, "KEY_SELECT - Select key" },
{ KEY_SEND, "KEY_SEND - Shifted end key" },
{ KEY_SEOL, "KEY_SEOL - Shifted clear line key" },
{ KEY_SEXIT, "KEY_SEXIT - Shifted exit key" },
{ KEY_SFIND, "KEY_SFIND - Shifted find key" },
{ KEY_SHELP, "KEY_SHELP - Shifted help key" },
{ KEY_SHOME, "KEY_SHOME - Shifted home key" },
{ KEY_SIC, "KEY_SIC - Shifted input key" },
{ KEY_SLEFT, "KEY_SLEFT - Shifted left arrow key" },
{ KEY_SMESSAGE, "KEY_SMESSAGE - Shifted message key" },
{ KEY_SMOVE, "KEY_SMOVE - Shifted move key" },
{ KEY_SNEXT, "KEY_SNEXT - Shifted next key" },
{ KEY_SOPTIONS, "KEY_SOPTIONS - Shifted options key" },
{ KEY_SPREVIOUS, "KEY_SPREVIOUS - Shifted prev key" },
{ KEY_SPRINT, "KEY_SPRINT - Shifted print key" },
{ KEY_SREDO, "KEY_SREDO - Shifted redo key" },
{ KEY_SREPLACE, "KEY_SREPLACE - Shifted replace key" },
{ KEY_SRIGHT, "KEY_SRIGHT - Shifted right arrow" },
{ KEY_SRSUME, "KEY_SRSUME - Shifted resume key" },
{ KEY_SSAVE, "KEY_SSAVE - Shifted save key" },
{ KEY_SSUSPEND, "KEY_SSUSPEND - Shifted suspend key" },
{ KEY_SUNDO, "KEY_SUNDO - Shifted undo key" },
{ KEY_SUSPEND, "KEY_SUSPEND - Suspend key" },
{ KEY_UNDO, "KEY_UNDO - Undo key" },
{ 0, NULL }
};
static char *keydesc(int ch)
{
keytable_t *k;
static char buf[10];
k = keytable;
while (k->key != 0)
{
if (k->key == ch)
{
return k->desc;
}
k++;
}
/* fell through */
sprintf(buf, "'%c'", ch);
return buf;
}
int main(void)
{
int nq;
if (initscr() == NULL)
{
fprintf(stderr, "initscr() failed\n");
return EXIT_FAILURE;
}
addstr("Press the \"q\" key three times in sequence to
end this program.");
move(2, 0);
refresh();
nq = 0;
noecho();
raw();
keypad(stdscr, TRUE);
scrollok(stdscr, TRUE);
do
{
char buf[80];
int ch;
ch = getch();
sprintf(buf, "%s == %4d (0x%04x)\n", keydesc(ch), ch, ch);
addstr(buf);
refresh();
if (tolower(ch) == 'q')
{
nq++;
}
else
{
nq = 0;
}
}
while (nq < 3);
if (endwin() != OK)
{
fprintf(stderr, "endwin() failed\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
-- mail{at}ozzmosis.com
--- timEd/FreeBSD 1.11.b1
* Origin: Blizzard of Ozz, Mt Eliza, Melbourne, Australia (3:633/267)SEEN-BY: 633/267 270 @PATH: 633/267 |
|
| SOURCE: echomail via fidonet.ozzmosis.com | |
Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.