define_key(const char *str, int keycode) { int code = ERR; T((T_CALLED("define_key(%s,%d)"), _nc_visbuf(str), keycode)); if (SP == 0) { code = ERR; } else if (keycode > 0) { if (str != 0) { define_key(str, 0); } else if (has_key(keycode)) { while (_nc_remove_key(&(SP->_keytry), (unsigned) keycode)) code = OK; } if (str != 0) { if (key_defined(str) == 0) { (void) _nc_add_to_try(&(SP->_keytry), str, (unsigned) keycode); code = OK; } else { code = ERR; } } } else { while (_nc_remove_string(&(SP->_keytry), str)) code = OK; } returnCode(code); }
NCURSES_SP_NAME(define_key) (NCURSES_SP_DCLx const char *str, int keycode) { int code = ERR; T((T_CALLED("define_key(%p, %s,%d)"), (void *) SP_PARM, _nc_visbuf(str), keycode)); if (SP_PARM == 0 || !HasTInfoTerminal(SP_PARM)) { code = ERR; } else if (keycode > 0) { unsigned ukey = (unsigned) keycode; #ifdef USE_TERM_DRIVER #define CallHasKey(keycode) CallDriver_1(SP_PARM, td_kyExist, keycode) #else #define CallHasKey(keycode) NCURSES_SP_NAME(has_key)(NCURSES_SP_ARGx keycode) #endif if (str != 0) { NCURSES_SP_NAME(define_key) (NCURSES_SP_ARGx str, 0); } else if (CallHasKey(keycode)) { while (_nc_remove_key(&(SP_PARM->_keytry), ukey)) code = OK; } if (str != 0) { if (NCURSES_SP_NAME(key_defined) (NCURSES_SP_ARGx str) == 0) { if (_nc_add_to_try(&(SP_PARM->_keytry), str, ukey) == OK) { code = OK; } else { code = ERR; } } else { code = ERR; } } } else { while (_nc_remove_string(&(SP_PARM->_keytry), str)) code = OK; } returnCode(code); }