[PATCH 2/4] [Kernel32]: added support for extended capacities in terminfo for xterm-like terminals
Eric Pouech
eric.pouech at orange.fr
Sat Jan 29 13:02:21 CST 2011
A+
---
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;
}
More information about the wine-patches
mailing list