Module: wine Branch: master Commit: be69efa51d70a259b9d86ae617f6bb30a6a06691 URL: http://source.winehq.org/git/wine.git/?a=commit;h=be69efa51d70a259b9d86ae617...
Author: Eric Pouech eric.pouech@orange.fr Date: Sat Jan 29 20:02:21 2011 +0100
kernel32: Added support for extended capacities in terminfo for xterm-like terminals.
---
dlls/kernel32/term.c | 98 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 59 insertions(+), 39 deletions(-)
diff --git a/dlls/kernel32/term.c b/dlls/kernel32/term.c index dd3b788..c0aacd9 100644 --- a/dlls/kernel32/term.c +++ b/dlls/kernel32/term.c @@ -22,6 +22,7 @@ #include "wine/port.h"
#include <stdarg.h> +#include <stdlib.h> #ifdef HAVE_NCURSES_H # include <ncurses.h> #elif defined(HAVE_CURSES_H) @@ -220,47 +221,40 @@ struct dbkey_descr DWORD_PTR p3; };
-struct dbkey_pair +struct dbkey_init { - const char* string; - unsigned string_len; + const char* string_normal; + const char* string_xterm; struct dbkey_descr descr; };
-static struct dbkey_pair TERM_dbkey_init[] = { - {"kcud1", {dbk_complex, 0x50, 0x28, 0}}, - {"kcuu1", {dbk_complex, 0x48, 0x26, 0}}, - {"kcub1", {dbk_complex, 0x4b, 0x25, 0}}, - {"kcuf1", {dbk_complex, 0x4d, 0x27, 0}}, - {"khome", {dbk_complex, 0x47, 0x24, 0}}, - {"kbs", {dbk_simple, 0x7f, 0x00, 0}}, - {"kf1", {dbk_complex, 0x3b, 0x70, 0}}, - {"kf2", {dbk_complex, 0x3c, 0x71, 0}}, - {"kf3", {dbk_complex, 0x3d, 0x72, 0}}, - {"kf4", {dbk_complex, 0x3e, 0x73, 0}}, - {"kf5", {dbk_complex, 0x3f, 0x74, 0}}, - {"kf6", {dbk_complex, 0x40, 0x75, 0}}, - {"kf7", {dbk_complex, 0x41, 0x76, 0}}, - {"kf8", {dbk_complex, 0x42, 0x77, 0}}, - {"kf9", {dbk_complex, 0x43, 0x78, 0}}, - {"kf10", {dbk_complex, 0x44, 0x79, 0}}, - {"kf11", {dbk_complex, 0xd9, 0x7a, 0}}, - {"kf12", {dbk_complex, 0xda, 0x7b, 0}}, - {"kdch1", {dbk_complex, 0x53, 0x2e, 0}}, - {"kich1", {dbk_complex, 0x52, 0x2d, 0}}, - {"knp", {dbk_complex, 0x51, 0x22, 0}}, - {"kpp", {dbk_complex, 0x49, 0x21, 0}}, - {"kcbt", {dbk_simple, 0x09, 0x00, SHIFT_PRESSED}}, - - {"kend", {dbk_complex, 0x4f, 0x23, 0}}, - /* {"kmous", NULL, }, */ - {"kDC", {dbk_complex, 0x53, 0x2e, SHIFT_PRESSED}}, - {"kEND", {dbk_complex, 0x4f, 0x23, SHIFT_PRESSED}}, - {"kHOM", {dbk_complex, 0x47, 0x24, SHIFT_PRESSED}}, - {"kIC", {dbk_complex, 0x52, 0x2d, SHIFT_PRESSED}}, - {"kLFT", {dbk_complex, 0x4b, 0x25, SHIFT_PRESSED}}, - {"kRIT", {dbk_complex, 0x4d, 0x27, SHIFT_PRESSED}}, +static struct dbkey_init TERM_dbkey_init[] = { + {"kcud1", "kDN", {dbk_complex, 0x50, 0x28, 0}}, + {"kcuu1", "kUP", {dbk_complex, 0x48, 0x26, 0}}, + {"kcub1", "kLFT", {dbk_complex, 0x4b, 0x25, 0}}, + {"kcuf1", "kRIT", {dbk_complex, 0x4d, 0x27, 0}}, + {"khome", "kHOM", {dbk_complex, 0x47, 0x24, 0}}, + {"kbs", NULL, {dbk_simple, 0x7f, 0x00, 0}}, + {"kf1", NULL, {dbk_complex, 0x3b, 0x70, 0}}, + {"kf2", NULL, {dbk_complex, 0x3c, 0x71, 0}}, + {"kf3", NULL, {dbk_complex, 0x3d, 0x72, 0}}, + {"kf4", NULL, {dbk_complex, 0x3e, 0x73, 0}}, + {"kf5", NULL, {dbk_complex, 0x3f, 0x74, 0}}, + {"kf6", NULL, {dbk_complex, 0x40, 0x75, 0}}, + {"kf7", NULL, {dbk_complex, 0x41, 0x76, 0}}, + {"kf8", NULL, {dbk_complex, 0x42, 0x77, 0}}, + {"kf9", NULL, {dbk_complex, 0x43, 0x78, 0}}, + {"kf10", NULL, {dbk_complex, 0x44, 0x79, 0}}, + {"kf11", NULL, {dbk_complex, 0xd9, 0x7a, 0}}, + {"kf12", NULL, {dbk_complex, 0xda, 0x7b, 0}}, + {"kdch1", "kDC", {dbk_complex, 0x53, 0x2e, 0}}, + {"kich1", "kIC", {dbk_complex, 0x52, 0x2d, 0}}, + {"knp", "kNXT", {dbk_complex, 0x51, 0x22, 0}}, + {"kpp", "kPRV", {dbk_complex, 0x49, 0x21, 0}}, + {"kcbt", NULL, {dbk_simple, 0x09, 0x00, SHIFT_PRESSED}}, + {"kend", "kEND", {dbk_complex, 0x4f, 0x23, 0}},
+ /* {"kmous", NULL, }, */ /* Still some keys to manage: KEY_DL KEY_IL KEY_EIC KEY_CLEAR KEY_EOS KEY_EOL KEY_SF KEY_SR KEY_STAB KEY_CTAB @@ -279,13 +273,20 @@ static struct dbkey_pair TERM_dbkey_init[] = { */ };
+struct dbkey_pair +{ + const char* string; + unsigned string_len; + struct dbkey_descr descr; +}; + static struct dbkey_pair* TERM_dbkey; static unsigned TERM_dbkey_size; static unsigned TERM_dbkey_index;
static BOOL TERM_AddKeyDescr(const char* string, struct dbkey_descr* descr) { - if (!string) return FALSE; + if (!string || string == (const char*)-1) return TRUE; if (!TERM_dbkey) { TERM_dbkey_size = 32; @@ -310,11 +311,30 @@ static BOOL TERM_AddKeyDescr(const char* string, struct dbkey_descr* descr)
static BOOL TERM_BuildKeyDB(void) { - unsigned i; + unsigned i, len; + struct dbkey_descr descr; + char tmp[64]; + for (i = 0; i < sizeof(TERM_dbkey_init) / sizeof(TERM_dbkey_init[0]); i++) { - if (!TERM_AddKeyDescr(tigetstr(TERM_dbkey_init[i].string), &TERM_dbkey_init[i].descr)) + if (!TERM_AddKeyDescr(tigetstr(TERM_dbkey_init[i].string_normal), &TERM_dbkey_init[i].descr)) return FALSE; + if (TERM_dbkey_init[i].string_xterm) + { + descr = TERM_dbkey_init[i].descr; + strcpy(tmp, TERM_dbkey_init[i].string_xterm); + len = strlen(tmp); + tmp[len + 1] = '\0'; +#define X(v, f) do { tmp[len] = v; descr.p3 = (f); if (!TERM_AddKeyDescr(tigetstr(tmp), &descr)) return FALSE; } while (0) + X('\0', SHIFT_PRESSED); + X('3', LEFT_ALT_PRESSED); + X('4', SHIFT_PRESSED | LEFT_ALT_PRESSED); + X('5', LEFT_CTRL_PRESSED); + X('6', LEFT_CTRL_PRESSED|SHIFT_PRESSED); + X('7', LEFT_CTRL_PRESSED|LEFT_ALT_PRESSED); + X('8', LEFT_CTRL_PRESSED|LEFT_ALT_PRESSED|SHIFT_PRESSED); +#undef X + } } return TRUE; }