|         | 
     1 /* Public Domain Curses */ | 
|         | 
     2  | 
|         | 
     3 #include <curspriv.h> | 
|         | 
     4  | 
|         | 
     5 RCSID("$Id: keyname.c,v 1.8 2008/07/13 16:08:18 wmcbrine Exp $") | 
|         | 
     6  | 
|         | 
     7 /*man-start************************************************************** | 
|         | 
     8  | 
|         | 
     9   Name:                                                         keyname | 
|         | 
    10  | 
|         | 
    11   Synopsis: | 
|         | 
    12         char *keyname(int key); | 
|         | 
    13  | 
|         | 
    14         char *key_name(wchar_t c); | 
|         | 
    15  | 
|         | 
    16         bool has_key(int key); | 
|         | 
    17  | 
|         | 
    18   Description: | 
|         | 
    19         keyname() returns a string corresponding to the argument key.  | 
|         | 
    20         key may be any key returned by wgetch(). | 
|         | 
    21  | 
|         | 
    22         key_name() is the wide-character version. It takes a wchar_t  | 
|         | 
    23         parameter, but still returns a char *. | 
|         | 
    24  | 
|         | 
    25         has_key() returns TRUE for recognized keys, FALSE otherwise.  | 
|         | 
    26         This function is an ncurses extension. | 
|         | 
    27  | 
|         | 
    28   Portability                                X/Open    BSD    SYS V | 
|         | 
    29         keyname                                 Y       -      3.0 | 
|         | 
    30         key_name                                Y | 
|         | 
    31         has_key                                 -       -       - | 
|         | 
    32  | 
|         | 
    33 **man-end****************************************************************/ | 
|         | 
    34  | 
|         | 
    35 char *keyname(int key) | 
|         | 
    36 { | 
|         | 
    37     /* Key names must be in exactly the same order as in curses.h */ | 
|         | 
    38  | 
|         | 
    39     static char *key_name[] = | 
|         | 
    40     { | 
|         | 
    41         "KEY_BREAK", "KEY_DOWN", "KEY_UP", "KEY_LEFT", "KEY_RIGHT", | 
|         | 
    42         "KEY_HOME", "KEY_BACKSPACE", "KEY_F0", "KEY_F(1)", "KEY_F(2)", | 
|         | 
    43         "KEY_F(3)", "KEY_F(4)", "KEY_F(5)", "KEY_F(6)", "KEY_F(7)", | 
|         | 
    44         "KEY_F(8)", "KEY_F(9)", "KEY_F(10)", "KEY_F(11)", "KEY_F(12)", | 
|         | 
    45         "KEY_F(13)", "KEY_F(14)", "KEY_F(15)", "KEY_F(16)", "KEY_F(17)", | 
|         | 
    46         "KEY_F(18)", "KEY_F(19)", "KEY_F(20)", "KEY_F(21)", "KEY_F(22)", | 
|         | 
    47         "KEY_F(23)", "KEY_F(24)", "KEY_F(25)", "KEY_F(26)", "KEY_F(27)", | 
|         | 
    48         "KEY_F(28)", "KEY_F(29)", "KEY_F(30)", "KEY_F(31)", "KEY_F(32)", | 
|         | 
    49         "KEY_F(33)", "KEY_F(34)", "KEY_F(35)", "KEY_F(36)", "KEY_F(37)", | 
|         | 
    50         "KEY_F(38)", "KEY_F(39)", "KEY_F(40)", "KEY_F(41)", "KEY_F(42)", | 
|         | 
    51         "KEY_F(43)", "KEY_F(44)", "KEY_F(45)", "KEY_F(46)", "KEY_F(47)", | 
|         | 
    52         "KEY_F(48)", "KEY_F(49)", "KEY_F(50)", "KEY_F(51)", "KEY_F(52)", | 
|         | 
    53         "KEY_F(53)", "KEY_F(54)", "KEY_F(55)", "KEY_F(56)", "KEY_F(57)", | 
|         | 
    54         "KEY_F(58)", "KEY_F(59)", "KEY_F(60)", "KEY_F(61)", "KEY_F(62)", | 
|         | 
    55         "KEY_F(63)", "KEY_DL", "KEY_IL", "KEY_DC", "KEY_IC", "KEY_EIC", | 
|         | 
    56         "KEY_CLEAR", "KEY_EOS", "KEY_EOL", "KEY_SF", "KEY_SR", | 
|         | 
    57         "KEY_NPAGE", "KEY_PPAGE", "KEY_STAB", "KEY_CTAB", "KEY_CATAB", | 
|         | 
    58         "KEY_ENTER", "KEY_SRESET", "KEY_RESET", "KEY_PRINT", "KEY_LL", | 
|         | 
    59         "KEY_ABORT", "KEY_SHELP", "KEY_LHELP", "KEY_BTAB", "KEY_BEG", | 
|         | 
    60         "KEY_CANCEL", "KEY_CLOSE", "KEY_COMMAND", "KEY_COPY", | 
|         | 
    61         "KEY_CREATE", "KEY_END", "KEY_EXIT", "KEY_FIND", "KEY_HELP", | 
|         | 
    62         "KEY_MARK", "KEY_MESSAGE", "KEY_MOVE", "KEY_NEXT", "KEY_OPEN", | 
|         | 
    63         "KEY_OPTIONS", "KEY_PREVIOUS", "KEY_REDO", "KEY_REFERENCE", | 
|         | 
    64         "KEY_REFRESH", "KEY_REPLACE", "KEY_RESTART", "KEY_RESUME", | 
|         | 
    65         "KEY_SAVE", "KEY_SBEG", "KEY_SCANCEL", "KEY_SCOMMAND", | 
|         | 
    66         "KEY_SCOPY", "KEY_SCREATE", "KEY_SDC", "KEY_SDL", "KEY_SELECT", | 
|         | 
    67         "KEY_SEND", "KEY_SEOL", "KEY_SEXIT", "KEY_SFIND", "KEY_SHOME", | 
|         | 
    68         "KEY_SIC", "UNKNOWN KEY", "KEY_SLEFT", "KEY_SMESSAGE", | 
|         | 
    69         "KEY_SMOVE", "KEY_SNEXT", "KEY_SOPTIONS", "KEY_SPREVIOUS", | 
|         | 
    70         "KEY_SPRINT", "KEY_SREDO", "KEY_SREPLACE", "KEY_SRIGHT", | 
|         | 
    71         "KEY_SRSUME", "KEY_SSAVE", "KEY_SSUSPEND", "KEY_SUNDO", | 
|         | 
    72         "KEY_SUSPEND", "KEY_UNDO", "ALT_0", "ALT_1", "ALT_2", "ALT_3", | 
|         | 
    73         "ALT_4", "ALT_5", "ALT_6", "ALT_7", "ALT_8", "ALT_9", "ALT_A", | 
|         | 
    74         "ALT_B", "ALT_C", "ALT_D", "ALT_E", "ALT_F", "ALT_G", "ALT_H", | 
|         | 
    75         "ALT_I", "ALT_J", "ALT_K", "ALT_L", "ALT_M", "ALT_N", "ALT_O", | 
|         | 
    76         "ALT_P", "ALT_Q", "ALT_R", "ALT_S", "ALT_T", "ALT_U", "ALT_V", | 
|         | 
    77         "ALT_W", "ALT_X", "ALT_Y", "ALT_Z", "CTL_LEFT", "CTL_RIGHT", | 
|         | 
    78         "CTL_PGUP", "CTL_PGDN", "CTL_HOME", "CTL_END", "KEY_A1", | 
|         | 
    79         "KEY_A2", "KEY_A3", "KEY_B1", "KEY_B2", "KEY_B3", "KEY_C1", | 
|         | 
    80         "KEY_C2", "KEY_C3", "PADSLASH", "PADENTER", "CTL_PADENTER", | 
|         | 
    81         "ALT_PADENTER", "PADSTOP", "PADSTAR", "PADMINUS", "PADPLUS", | 
|         | 
    82         "CTL_PADSTOP", "CTL_PADCENTER", "CTL_PADPLUS", "CTL_PADMINUS", | 
|         | 
    83         "CTL_PADSLASH", "CTL_PADSTAR", "ALT_PADPLUS", "ALT_PADMINUS", | 
|         | 
    84         "ALT_PADSLASH", "ALT_PADSTAR", "ALT_PADSTOP", "CTL_INS", | 
|         | 
    85         "ALT_DEL", "ALT_INS", "CTL_UP", "CTL_DOWN", "CTL_TAB", | 
|         | 
    86         "ALT_TAB", "ALT_MINUS", "ALT_EQUAL", "ALT_HOME", "ALT_PGUP", | 
|         | 
    87         "ALT_PGDN", "ALT_END", "ALT_UP", "ALT_DOWN", "ALT_RIGHT", | 
|         | 
    88         "ALT_LEFT", "ALT_ENTER", "ALT_ESC", "ALT_BQUOTE", | 
|         | 
    89         "ALT_LBRACKET", "ALT_RBRACKET", "ALT_SEMICOLON", "ALT_FQUOTE", | 
|         | 
    90         "ALT_COMMA", "ALT_STOP", "ALT_FSLASH", "ALT_BKSP", "CTL_BKSP", | 
|         | 
    91         "PAD0", "CTL_PAD0", "CTL_PAD1", "CTL_PAD2", "CTL_PAD3", | 
|         | 
    92         "CTL_PAD4", "CTL_PAD5", "CTL_PAD6", "CTL_PAD7","CTL_PAD8", | 
|         | 
    93         "CTL_PAD9", "ALT_PAD0", "ALT_PAD1", "ALT_PAD2", "ALT_PAD3", | 
|         | 
    94         "ALT_PAD4", "ALT_PAD5", "ALT_PAD6", "ALT_PAD7", "ALT_PAD8", | 
|         | 
    95         "ALT_PAD9", "CTL_DEL", "ALT_BSLASH", "CTL_ENTER", | 
|         | 
    96         "SHF_PADENTER", "SHF_PADSLASH", "SHF_PADSTAR", "SHF_PADPLUS", | 
|         | 
    97         "SHF_PADMINUS", "SHF_UP", "SHF_DOWN", "SHF_IC", "SHF_DC", | 
|         | 
    98         "KEY_MOUSE", "KEY_SHIFT_L", "KEY_SHIFT_R", "KEY_CONTROL_L", | 
|         | 
    99         "KEY_CONTROL_R", "KEY_ALT_L", "KEY_ALT_R", "KEY_RESIZE", | 
|         | 
   100         "KEY_SUP", "KEY_SDOWN" | 
|         | 
   101     }; | 
|         | 
   102  | 
|         | 
   103     PDC_LOG(("keyname() - called: key %d\n", key)); | 
|         | 
   104  | 
|         | 
   105     if ((key >= 0) && (key < 0x80)) | 
|         | 
   106         return unctrl((chtype)key); | 
|         | 
   107  | 
|         | 
   108     return has_key(key) ? key_name[key - KEY_MIN] : "UNKNOWN KEY"; | 
|         | 
   109 } | 
|         | 
   110  | 
|         | 
   111 bool has_key(int key) | 
|         | 
   112 { | 
|         | 
   113     PDC_LOG(("has_key() - called: key %d\n", key)); | 
|         | 
   114  | 
|         | 
   115     return (key >= KEY_MIN && key <= KEY_MAX); | 
|         | 
   116 } | 
|         | 
   117  | 
|         | 
   118 #ifdef PDC_WIDE | 
|         | 
   119 char *key_name(wchar_t c) | 
|         | 
   120 { | 
|         | 
   121     PDC_LOG(("key_name() - called\n")); | 
|         | 
   122  | 
|         | 
   123     return keyname((int)c); | 
|         | 
   124 } | 
|         | 
   125 #endif |