/****************************************************************************
- * Copyright (c) 1999 Free Software Foundation, Inc. *
+ * Copyright (c) 1999-2005,2006 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#include <curses.priv.h>
-#include <term.h> /* keypad_xmit, keypad_local, meta_on, meta_off */
- /* cursor_visible,cursor_normal,cursor_invisible */
-#include <tic.h> /* struct tinfo_fkeys */
+#include <term.h>
+/* keypad_xmit, keypad_local, meta_on, meta_off */
+/* cursor_visible,cursor_normal,cursor_invisible */
-MODULE_ID("$Id: init_keytry.c,v 1.2 1999/09/11 17:32:57 Jeffrey.Honig Exp $")
+#include <tic.h> /* struct tinfo_fkeys */
+
+#include <term_entry.h>
+
+MODULE_ID("$Id: init_keytry.c,v 1.8 2006/01/21 23:43:28 tom Exp $")
/*
** _nc_init_keytry()
**
*/
-#ifdef BROKEN_LINKER
+#if BROKEN_LINKER
#undef _nc_tinfo_fkeys
#endif
/* LINT_PREPRO
#endif*/
-#ifdef BROKEN_LINKER
-struct tinfo_fkeys *_nc_tinfo_fkeysf(void)
+#if BROKEN_LINKER
+struct tinfo_fkeys *
+_nc_tinfo_fkeysf(void)
{
- return _nc_tinfo_fkeys;
+ return _nc_tinfo_fkeys;
}
#endif
-void _nc_init_keytry(void)
+NCURSES_EXPORT(void)
+_nc_init_keytry(void)
{
- size_t n;
+ size_t n;
- /* The SP->_keytry value is initialized in newterm(), where the SP
- * structure is created, because we can not tell where keypad() or
- * mouse_activate() (which will call keyok()) are first called.
- */
+ /* The SP->_keytry value is initialized in newterm(), where the SP
+ * structure is created, because we can not tell where keypad() or
+ * mouse_activate() (which will call keyok()) are first called.
+ */
- for (n = 0; _nc_tinfo_fkeys[n].code; n++)
- if (_nc_tinfo_fkeys[n].offset < STRCOUNT)
+ if (SP != 0) {
+ for (n = 0; _nc_tinfo_fkeys[n].code; n++) {
+ if (_nc_tinfo_fkeys[n].offset < STRCOUNT) {
_nc_add_to_try(&(SP->_keytry),
- CUR Strings[_nc_tinfo_fkeys[n].offset],
- _nc_tinfo_fkeys[n].code);
+ CUR Strings[_nc_tinfo_fkeys[n].offset],
+ _nc_tinfo_fkeys[n].code);
+ }
+ }
+#if NCURSES_XNAMES
+ /*
+ * Add any of the extended strings to the tries if their name begins
+ * with 'k', i.e., they follow the convention of other terminfo key
+ * names.
+ */
+ {
+ TERMTYPE *tp = &(SP->_term->type);
+ for (n = STRCOUNT; n < NUM_STRINGS(tp); ++n) {
+ const char *name = ExtStrname(tp, n, strnames);
+ char *value = tp->Strings[n];
+ if (name != 0
+ && *name == 'k'
+ && value != 0
+ && key_defined(value) == 0) {
+ _nc_add_to_try(&(SP->_keytry),
+ value,
+ n - STRCOUNT + KEY_MAX);
+ }
+ }
+ }
+#endif
#ifdef TRACE
_nc_trace_tries(SP->_keytry);
#endif
+ }
}