root/lib/tty/keyxdef.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. load_qnx_key_defines
  2. load_xtra_key_defines

   1 /* {{{ Copyright */
   2 
   3 /*
   4    Additional keyboard support routines.
   5 
   6    Copyright (C) 1998-2024
   7    Free Software Foundation, Inc.
   8 
   9    Written by:
  10    Gyorgy Tamasi, 1998
  11 
  12    This file is part of the Midnight Commander.
  13 
  14    The Midnight Commander is free software: you can redistribute it
  15    and/or modify it under the terms of the GNU General Public License as
  16    published by the Free Software Foundation, either version 3 of the License,
  17    or (at your option) any later version.
  18 
  19    The Midnight Commander is distributed in the hope that it will be useful,
  20    but WITHOUT ANY WARRANTY; without even the implied warranty of
  21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22    GNU General Public License for more details.
  23 
  24    You should have received a copy of the GNU General Public License
  25    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  26  */
  27 
  28 /* }}} */
  29 
  30 /** \file keyxdef.c
  31  *  \brief Source: additional keyboard support routines
  32  *
  33  * PURPOSE:
  34  *   We would like to support the direct ALT-?/META-? and some other 'extra'
  35  *   keyboard functionality provided by some terminals under some OSes (and
  36  *   not supported by the 'learn keys...' facility of 'mc'.
  37  *   (First target platform: QNX.)
  38  *
  39  * REMARK:
  40  *
  41  *   Implementation strategy: we don't want to rely on a specific terminal
  42  *   information database management API (termcap,terminfo,SLang,...), so we
  43  *   try to define a superset of the possible key identifiers here.
  44  *
  45  */
  46 
  47 #include <config.h>
  48 
  49 #include "lib/global.h"
  50 
  51 #include "tty.h"
  52 #include "mouse.h"              /* required before key.h */
  53 #include "key.h"
  54 
  55 #if defined (__QNX__) && !defined (__QNXNTO__)
  56 #define HAVE_QNX_KEYS
  57 #endif
  58 
  59 #ifdef HAVE_QNX_KEYS
  60 
  61 /* select implementation: use QNX/term interface */
  62 #define __USE_QNX_TI
  63 
  64 /* implementation specific _TE() definition */
  65 #ifdef __USE_QNX_TI
  66 
  67 /* include QNX/term.h (not NCURSES/term.h!) */
  68 #if __WATCOMC__ > 1000
  69 #include <sys/term.h>
  70 #else
  71 #include <term.h>
  72 #endif
  73 #include <stdlib.h>             /* getenv() */
  74 
  75 /* fieldname -> index conversion */
  76 #define __QTISX(_qtisn) \
  77         (((int)(&((struct _strs*)0)->_qtisn))/sizeof(charoffset))
  78 
  79 /* define the OS/implementation-specific __TK() format */
  80 #define __TK(_tis,_tcs,_tisx,_qtisn)  __QTISX(_qtisn)
  81 
  82 #endif /* __USE_QNX_TI */
  83 
  84 #endif /* HAVE_QNX_KEYS */
  85 
  86 
  87 /* {{{ */
  88 
  89 /* general key definitions:
  90  * 
  91  * format:
  92  * 
  93  *   terminfo name,
  94  *   termcap name,
  95  *   index in the terminfo string table (ncurses),
  96  *   field name in the QNX terminfo strings struct
  97  */
  98 
  99 /*** global variables ****************************************************************************/
 100 
 101 /*** file scope macro definitions ****************************************************************/
 102 
 103 
 104 #define Key_backspace   __TK("kbs",   "kb",  55, _ky_backspace )
 105 #define Key_catab       __TK("ktbc",  "ka",  56, _ky_catab )
 106 #define Key_clear       __TK("kclr",  "kC",  57, _ky_clear )
 107 #define Key_ctab        __TK("kctab", "kt",  58, _ky_ctab )
 108 #define Key_dc          __TK("kdch1", "kD",  59, _ky_dc )
 109 #define Key_dl          __TK("kdl1",  "kL",  60, _ky_dl )
 110 #define Key_down        __TK("kcud1", "kd",  61, _ky_down )
 111 #define Key_eic         __TK("krmir", "kM",  62, _ky_eic )
 112 #define Key_eol         __TK("kel",   "kE",  63, _ky_eol )
 113 #define Key_eos         __TK("ked",   "kS",  64, _ky_eos )
 114 #define Key_f0          __TK("kf0",   "k0",  65, _ky_f0 )
 115 #define Key_f1          __TK("kf1",   "k1",  66, _ky_f1 )
 116 #define Key_f10         __TK("kf10",  "k;",  67, _ky_f10 )
 117 #define Key_f2          __TK("kf2",   "k2",  68, _ky_f2 )
 118 #define Key_f3          __TK("kf3",   "k3",  69, _ky_f3 )
 119 #define Key_f4          __TK("kf4",   "k4",  70, _ky_f4 )
 120 #define Key_f5          __TK("kf5",   "k5",  71, _ky_f5 )
 121 #define Key_f6          __TK("kf6",   "k6",  72, _ky_f6 )
 122 #define Key_f7          __TK("kf7",   "k7",  73, _ky_f7 )
 123 #define Key_f8          __TK("kf8",   "k8",  74, _ky_f8 )
 124 #define Key_f9          __TK("kf9",   "k9",  75, _ky_f9 )
 125 #define Key_home        __TK("khome", "kh",  76, _ky_home )
 126 #define Key_ic          __TK("kich1", "kI",  77, _ky_ic )
 127 #define Key_il          __TK("kil1",  "kA",  78, _ky_il )
 128 #define Key_left        __TK("kcub1", "kl",  79, _ky_left )
 129 #define Key_ll          __TK("kll",   "kH",  80, _ky_ll )
 130 #define Key_npage       __TK("knp",   "kN",  81, _ky_npage )
 131 #define Key_ppage       __TK("kpp",   "kP",  82, _ky_ppage )
 132 #define Key_right       __TK("kcuf1", "kr",  83, _ky_right )
 133 #define Key_sf          __TK("kind",  "kF",  84, _ky_sf )
 134 #define Key_sr          __TK("kri",   "kR",  85, _ky_sr )
 135 #define Key_stab        __TK("khts",  "kT",  86, _ky_stab )
 136 #define Key_up          __TK("kcuu1", "ku",  87, _ky_up )
 137 #define Key_a1          __TK("ka1",   "K1", 139, _ky_a1 )
 138 #define Key_a3          __TK("ka3",   "K3", 140, _ky_a3 )
 139 #define Key_b2          __TK("kb2",   "K2", 141, _ky_b2 )
 140 #define Key_c1          __TK("kc1",   "K4", 142, _ky_c1 )
 141 #define Key_c3          __TK("kc3",   "K5", 143, _ky_c3 )
 142 #define Key_btab        __TK("kcbt",  "kB", 148, _ky_btab )
 143 #define Key_beg         __TK("kbeg",  "@1", 158, _ky_beg )
 144 #define Key_cancel      __TK("kcan",  "@2", 159, _ky_cancel )
 145 #define Key_close       __TK("kclo",  "@3", 160, _ky_close )
 146 #define Key_command     __TK("kcmd",  "@4", 161, _ky_command )
 147 #define Key_copy        __TK("kcpy",  "@5", 162, _ky_copy )
 148 #define Key_create      __TK("kcrt",  "@6", 163, _ky_create )
 149 #define Key_end         __TK("kend",  "@7", 164, _ky_end )
 150 #define Key_enter       __TK("kent",  "@8", 165, _ky_enter )
 151 #define Key_exit        __TK("kext",  "@9", 166, _ky_exit )
 152 #define Key_find        __TK("kfnd",  "@0", 167, _ky_find )
 153 #define Key_help        __TK("khlp",  "%1", 168, _ky_help )
 154 #define Key_mark        __TK("kmrk",  "%2", 169, _ky_mark )
 155 #define Key_message     __TK("kmsg",  "%3", 170, _ky_message )
 156 #define Key_move        __TK("kmov",  "%4", 171, _ky_move )
 157 #define Key_next        __TK("knxt",  "%5", 172, _ky_next )
 158 #define Key_open        __TK("kopn",  "%6", 173, _ky_open )
 159 #define Key_options     __TK("kopt",  "%7", 174, _ky_options )
 160 #define Key_previous    __TK("kprv",  "%8", 175, _ky_previous )
 161 #define Key_print       __TK("kprt",  "%9", 176, _ky_print )
 162 #define Key_redo        __TK("krdo",  "%0", 177, _ky_redo )
 163 #define Key_reference   __TK("kref",  "&1", 178, _ky_reference )
 164 #define Key_refresh     __TK("krfr",  "&2", 179, _ky_refresh )
 165 #define Key_replace     __TK("krpl",  "&3", 180, _ky_replace )
 166 #define Key_restart     __TK("krst",  "&4", 181, _ky_restart )
 167 #define Key_resume      __TK("kres",  "&5", 182, _ky_resume )
 168 #define Key_save        __TK("ksav",  "&6", 183, _ky_save )
 169 #define Key_suspend     __TK("kspd",  "&7", 184, _ky_suspend )
 170 #define Key_undo        __TK("kund",  "&8", 185, _ky_undo )
 171 #define Key_sbeg        __TK("kBEG",  "&9", 186, _ky_sbeg )
 172 #define Key_scancel     __TK("kCAN",  "&0", 187, _ky_scancel )
 173 #define Key_scommand    __TK("kCMD",  "*1", 188, _ky_scommand )
 174 #define Key_scopy       __TK("kCPY",  "*2", 189, _ky_scopy )
 175 #define Key_screate     __TK("kCRT",  "*3", 190, _ky_screate )
 176 #define Key_sdc         __TK("kDC",   "*4", 191, _ky_sdc )
 177 #define Key_sdl         __TK("kDL",   "*5", 192, _ky_sdl )
 178 #define Key_select      __TK("kslt",  "*6", 193, _ky_select )
 179 #define Key_send        __TK("kEND",  "*7", 194, _ky_send )
 180 #define Key_seol        __TK("kEOL",  "*8", 195, _ky_seol )
 181 #define Key_sexit       __TK("kEXT",  "*9", 196, _ky_sexit )
 182 #define Key_sfind       __TK("kFND",  "*0", 197, _ky_sfind )
 183 #define Key_shelp       __TK("kHLP",  "#1", 198, _ky_shelp )
 184 #define Key_shome       __TK("kHOM",  "#2", 199, _ky_shome )
 185 #define Key_sic         __TK("kIC",   "#3", 200, _ky_sic )
 186 #define Key_sleft       __TK("kLFT",  "#4", 201, _ky_sleft )
 187 #define Key_smessage    __TK("kMSG",  "%a", 202, _ky_smessage )
 188 #define Key_smove       __TK("kMOV",  "%b", 203, _ky_smove )
 189 #define Key_snext       __TK("kNXT",  "%c", 204, _ky_snext )
 190 #define Key_soptions    __TK("kOPT",  "%d", 205, _ky_soptions )
 191 #define Key_sprevious   __TK("kPRV",  "%e", 206, _ky_sprevious )
 192 #define Key_sprint      __TK("kPRT",  "%f", 207, _ky_sprint )
 193 #define Key_sredo       __TK("kRDO",  "%g", 208, _ky_sredo )
 194 #define Key_sreplace    __TK("kRPL",  "%h", 209, _ky_sreplace )
 195 #define Key_sright      __TK("kRIT",  "%i", 210, _ky_sright )
 196 #define Key_srsume      __TK("kRES",  "%j", 211, _ky_srsume )
 197 #define Key_ssave       __TK("kSAV",  "!1", 212, _ky_ssave )
 198 #define Key_ssuspend    __TK("kSPD",  "!2", 213, _ky_ssuspend )
 199 #define Key_sundo       __TK("kUND",  "!3", 214, _ky_sundo )
 200 #define Key_f11         __TK("kf11",  "F1", 216, _ky_f11 )
 201 #define Key_f12         __TK("kf12",  "F2", 217, _ky_f12 )
 202 #define Key_f13         __TK("kf13",  "F3", 218, _ky_f13 )
 203 #define Key_f14         __TK("kf14",  "F4", 219, _ky_f14 )
 204 #define Key_f15         __TK("kf15",  "F5", 220, _ky_f15 )
 205 #define Key_f16         __TK("kf16",  "F6", 221, _ky_f16 )
 206 #define Key_f17         __TK("kf17",  "F7", 222, _ky_f17 )
 207 #define Key_f18         __TK("kf18",  "F8", 223, _ky_f18 )
 208 #define Key_f19         __TK("kf19",  "F9", 224, _ky_f19 )
 209 #define Key_f20         __TK("kf20",  "FA", 225, _ky_f20 )
 210 #define Key_f21         __TK("kf21",  "FB", 226, _ky_f21 )
 211 #define Key_f22         __TK("kf22",  "FC", 227, _ky_f22 )
 212 #define Key_f23         __TK("kf23",  "FD", 228, _ky_f23 )
 213 #define Key_f24         __TK("kf24",  "FE", 229, _ky_f24 )
 214 #define Key_f25         __TK("kf25",  "FF", 230, _ky_f25 )
 215 #define Key_f26         __TK("kf26",  "FG", 231, _ky_f26 )
 216 #define Key_f27         __TK("kf27",  "FH", 232, _ky_f27 )
 217 #define Key_f28         __TK("kf28",  "FI", 233, _ky_f28 )
 218 #define Key_f29         __TK("kf29",  "FJ", 234, _ky_f29 )
 219 #define Key_f30         __TK("kf30",  "FK", 235, _ky_f30 )
 220 #define Key_f31         __TK("kf31",  "FL", 236, _ky_f31 )
 221 #define Key_f32         __TK("kf32",  "FM", 237, _ky_f32 )
 222 #define Key_f33         __TK("kf33",  "FN", 238, _ky_f33 )
 223 #define Key_f34         __TK("kf34",  "FO", 239, _ky_f34 )
 224 #define Key_f35         __TK("kf35",  "FP", 240, _ky_f35 )
 225 #define Key_f36         __TK("kf36",  "FQ", 241, _ky_f36 )
 226 #define Key_f37         __TK("kf37",  "FR", 242, _ky_f37 )
 227 #define Key_f38         __TK("kf38",  "FS", 243, _ky_f38 )
 228 #define Key_f39         __TK("kf39",  "FT", 244, _ky_f39 )
 229 #define Key_f40         __TK("kf40",  "FU", 245, _ky_f40 )
 230 #define Key_f41         __TK("kf41",  "FV", 246, _ky_f41 )
 231 #define Key_f42         __TK("kf42",  "FW", 247, _ky_f42 )
 232 #define Key_f43         __TK("kf43",  "FX", 248, _ky_f43 )
 233 #define Key_f44         __TK("kf44",  "FY", 249, _ky_f44 )
 234 #define Key_f45         __TK("kf45",  "FZ", 250, _ky_f45 )
 235 #define Key_f46         __TK("kf46",  "Fa", 251, _ky_f46 )
 236 #define Key_f47         __TK("kf47",  "Fb", 252, _ky_f47 )
 237 #define Key_f48         __TK("kf48",  "Fc", 253, _ky_f48 )
 238 #define Key_f49         __TK("kf49",  "Fd", 254, _ky_f49 )
 239 #define Key_f50         __TK("kf50",  "Fe", 255, _ky_f50 )
 240 #define Key_f51         __TK("kf51",  "Ff", 256, _ky_f51 )
 241 #define Key_f52         __TK("kf52",  "Fg", 257, _ky_f52 )
 242 #define Key_f53         __TK("kf53",  "Fh", 258, _ky_f53 )
 243 #define Key_f54         __TK("kf54",  "Fi", 259, _ky_f54 )
 244 #define Key_f55         __TK("kf55",  "Fj", 260, _ky_f55 )
 245 #define Key_f56         __TK("kf56",  "Fk", 261, _ky_f56 )
 246 #define Key_f57         __TK("kf57",  "Fl", 262, _ky_f57 )
 247 #define Key_f58         __TK("kf58",  "Fm", 263, _ky_f58 )
 248 #define Key_f59         __TK("kf59",  "Fn", 264, _ky_f59 )
 249 #define Key_f60         __TK("kf60",  "Fo", 265, _ky_f60 )
 250 #define Key_f61         __TK("kf61",  "Fp", 266, _ky_f61 )
 251 #define Key_f62         __TK("kf62",  "Fq", 267, _ky_f62 )
 252 #define Key_f63         __TK("kf63",  "Fr", 268, _ky_f63 )
 253 
 254 /* }}} */
 255 
 256 #ifdef HAVE_QNX_KEYS
 257 
 258 /* don't force pre-defining of base keys under QNX */
 259 #define FORCE_BASE_KEY_DEFS 0
 260 
 261 /* OS specific key aliases */
 262 #define Key_alt_a       Key_clear
 263 #define Key_alt_b       Key_stab
 264 #define Key_alt_c       Key_close
 265 #define Key_alt_d       Key_catab
 266 #define Key_alt_e       Key_message
 267 #define Key_alt_f       Key_find
 268 #define Key_alt_g       Key_refresh
 269 #define Key_alt_h       Key_help
 270 #define Key_alt_i       Key_move
 271 #define Key_alt_j       Key_restart
 272 #define Key_alt_k       Key_options
 273 #define Key_alt_l       Key_reference
 274 #define Key_alt_m       Key_mark
 275 #define Key_alt_n       Key_sbeg
 276 #define Key_alt_o       Key_open
 277 #define Key_alt_p       Key_resume
 278 #define Key_alt_q       Key_save
 279 #define Key_alt_r       Key_replace
 280 #define Key_alt_s       Key_scopy
 281 #define Key_alt_t       Key_screate
 282 #define Key_alt_u       Key_undo
 283 #define Key_alt_v       Key_sdl
 284 #define Key_alt_w       Key_sexit
 285 #define Key_alt_x       Key_sfind
 286 #define Key_alt_y       Key_shelp
 287 #define Key_alt_z       Key_soptions
 288 
 289 #define Key_ctl_enter   Key_enter
 290 #define Key_ctl_tab     Key_ctab
 291 
 292 #define Key_alt_tab     Key_ctl_tab     /* map ALT-TAB to CTRL-TAB */
 293 #define Key_alt_enter   Key_ctl_enter   /* map ALT-ENTER to CTRL-ENTER */
 294 
 295 #ifdef __USE_QNX_TI
 296 /* define current xtra_key_define_t (enable OS/implementation) */
 297 #define xtra_key_define_t qnx_key_define_t
 298 #endif /* __USE_QNX_TI */
 299 #endif /* HAVE_QNX_KEYS */
 300 
 301 
 302 #ifdef xtra_key_define_t
 303 #ifndef FORCE_BASE_KEY_DEFS
 304 #define FORCE_BASE_KEY_DEFS 0
 305 #endif
 306 #endif /* xtra_key_define_t */
 307 
 308 #ifdef HAVE_QNX_KEYS
 309 #ifdef __USE_QNX_TI
 310 #define __CT               (__cur_term)
 311 #define __QTISOFFS(_qtisx) (((charoffset*)(&__CT->_strs))[_qtisx])
 312 #define __QTISSTR(_qtisx)  (&__CT->_strtab[0]+__QTISOFFS(_qtisx))
 313 #endif /* __USE_QNX_TI */
 314 #endif /* HAVE_QNX_KEYS */
 315 
 316 /*** file scope type declarations ****************************************************************/
 317 
 318 #ifdef HAVE_QNX_KEYS
 319 #ifdef __USE_QNX_TI
 320 /* OS/implementation specific key-define struct */
 321 typedef const struct qnx_key_define_s
 322 {
 323     int mc_code;
 324     int str_idx;
 325 } qnx_key_define_t;
 326 #endif /* __USE_QNX_TI */
 327 #endif /* HAVE_QNX_KEYS */
 328 
 329 /*** file scope variables ************************************************************************/
 330 
 331 
 332 #ifdef xtra_key_define_t
 333 
 334 /* general key define table */
 335 xtra_key_define_t xtra_key_defines[] = {
 336 #if FORCE_BASE_KEY_DEFS
 337     {KEY_BACKSPACE, Key_backspace},
 338     {KEY_LEFT, Key_left},
 339     {KEY_RIGHT, Key_right},
 340     {KEY_UP, Key_up},
 341     {KEY_DOWN, Key_down},
 342     {KEY_NPAGE, Key_npage},
 343     {KEY_PPAGE, Key_ppage},
 344     {KEY_HOME, Key_home},
 345     {KEY_END, Key_end},
 346     {KEY_DC, Key_dc},
 347     {KEY_IC, Key_ic},
 348     {KEY_F (1), Key_f1},
 349     {KEY_F (2), Key_f2},
 350     {KEY_F (3), Key_f3},
 351     {KEY_F (4), Key_f4},
 352     {KEY_F (5), Key_f5},
 353     {KEY_F (6), Key_f6},
 354     {KEY_F (7), Key_f7},
 355     {KEY_F (8), Key_f8},
 356     {KEY_F (9), Key_f9},
 357     {KEY_F (10), Key_f10},
 358     {KEY_F (11), Key_f11},
 359     {KEY_F (12), Key_f12},
 360     {KEY_F (13), Key_f13},
 361     {KEY_F (14), Key_f14},
 362     {KEY_F (15), Key_f15},
 363     {KEY_F (16), Key_f16},
 364     {KEY_F (17), Key_f17},
 365     {KEY_F (18), Key_f18},
 366     {KEY_F (19), Key_f19},
 367     {KEY_F (20), Key_f20},
 368 #endif
 369     {ALT ('a'), Key_alt_a},
 370     {ALT ('b'), Key_alt_b},
 371     {ALT ('c'), Key_alt_c},
 372     {ALT ('d'), Key_alt_d},
 373     {ALT ('e'), Key_alt_e},
 374     {ALT ('f'), Key_alt_f},
 375     {ALT ('g'), Key_alt_g},
 376     {ALT ('h'), Key_alt_h},
 377     {ALT ('i'), Key_alt_i},
 378     {ALT ('j'), Key_alt_j},
 379     {ALT ('k'), Key_alt_k},
 380     {ALT ('l'), Key_alt_l},
 381     {ALT ('m'), Key_alt_m},
 382     {ALT ('n'), Key_alt_n},
 383     {ALT ('o'), Key_alt_o},
 384     {ALT ('p'), Key_alt_p},
 385     {ALT ('q'), Key_alt_q},
 386     {ALT ('r'), Key_alt_r},
 387     {ALT ('s'), Key_alt_s},
 388     {ALT ('t'), Key_alt_t},
 389     {ALT ('u'), Key_alt_u},
 390     {ALT ('v'), Key_alt_v},
 391     {ALT ('w'), Key_alt_w},
 392     {ALT ('x'), Key_alt_x},
 393     {ALT ('y'), Key_alt_y},
 394     {ALT ('z'), Key_alt_z},
 395 
 396     {ALT ('\n'), Key_alt_enter},
 397     {ALT ('\t'), Key_alt_tab}
 398 };
 399 
 400 #endif /* xtra_key_define_t */
 401 
 402 /*** file scope functions ************************************************************************/
 403 /* --------------------------------------------------------------------------------------------- */
 404 
 405 /* --------------------------------------------------------------------------------------------- */
 406 /*** public functions ****************************************************************************/
 407 /* --------------------------------------------------------------------------------------------- */
 408 
 409 #ifdef HAVE_QNX_KEYS
 410 #ifdef __USE_QNX_TI
 411 void
 412 load_qnx_key_defines (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 413 {
 414     static int _qnx_keys_defined = 0;
 415 
 416     if (!_qnx_keys_defined)
 417     {
 418         int idx;
 419         int term_setup_ok;
 420 
 421         __setupterm (NULL, fileno (stdout), &term_setup_ok);
 422         if (term_setup_ok != 1)
 423             return;
 424 
 425         for (idx = 0; idx < sizeof (xtra_key_defines) / sizeof (xtra_key_defines[0]); idx++)
 426         {
 427             int str_idx = xtra_key_defines[idx].str_idx;
 428 
 429             if (__QTISOFFS (str_idx))
 430             {
 431                 if (*__QTISSTR (str_idx))
 432                 {
 433                     define_sequence (xtra_key_defines[idx].mc_code,
 434                                      __QTISSTR (str_idx), MCKEY_NOACTION);
 435                 }
 436             }
 437         }
 438         _qnx_keys_defined = 1;
 439     }
 440 }
 441 #endif /* __USE_QNX_TI */
 442 #endif /* HAVE_QNX_KEYS */
 443 
 444 /* --------------------------------------------------------------------------------------------- */
 445 /* called from key.c/init_key() */
 446 
 447 void
 448 load_xtra_key_defines (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 449 {
 450 #ifdef HAVE_QNX_KEYS
 451     load_qnx_key_defines ();
 452 #endif
 453 }
 454 
 455 /* --------------------------------------------------------------------------------------------- */

/* [previous][next][first][last][top][bottom][index][help]  */