X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fwin32con%2Fwin_driver.c;h=c214639cd4df29e8025646f9af44a276a54ee39b;hp=2b159b18316de98df9c7415c3c05b39d6413a65e;hb=d1a026123ac051716cdc16278345c1fb5c843b79;hpb=10539f5afe94d8ff488516ca7f9861af7c800bfb diff --git a/ncurses/win32con/win_driver.c b/ncurses/win32con/win_driver.c index 2b159b18..c214639c 100644 --- a/ncurses/win32con/win_driver.c +++ b/ncurses/win32con/win_driver.c @@ -37,8 +37,9 @@ */ #include +#define CUR my_term.type. -MODULE_ID("$Id: win_driver.c,v 1.8 2010/04/10 19:42:47 tom Exp $") +MODULE_ID("$Id: win_driver.c,v 1.10 2010/12/25 19:28:21 tom Exp $") #define WINMAGIC NCDRV_MAGIC(NCDRV_WINCONSOLE) @@ -262,14 +263,41 @@ drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, { bool code = FALSE; - T((T_CALLED("drv_CanHandle(%p)"), TCB)); + T((T_CALLED("win32con::drv_CanHandle(%p)"), TCB)); assert(TCB != 0); assert(tname != 0); TCB->magic = WINMAGIC; - if (*tname == 0 || *tname == 0 || strcmp(tname, "unknown") == 0) { + if (*tname == 0 || *tname == 0) { code = TRUE; + } else { + TERMINAL my_term; + int status; + + code = FALSE; +#if (USE_DATABASE || USE_TERMCAP) + status = _nc_setup_tinfo(tname, &my_term.type); +#else + status = TGETENT_NO; +#endif + if (status != TGETENT_YES) { + const TERMTYPE *fallback = _nc_fallback(tname); + + if (fallback) { + my_term.type = *fallback; + status = TGETENT_YES; + } else if (!strcmp(tname, "unknown")) { + code = TRUE; + } + } + if (status == TGETENT_YES) { + if (generic_type || hard_copy) + code = TRUE; + } + } + + if (code) { if ((TCB->term.type.Booleans) == 0) { _nc_init_entry(&(TCB->term.type)); } @@ -556,7 +584,7 @@ MapKey(TERMINAL_CONTROL_BLOCK * TCB, WORD vKey) static void drv_release(TERMINAL_CONTROL_BLOCK * TCB) { - T((T_CALLED("drv_release(%p)"), TCB)); + T((T_CALLED("win32con::drv_release(%p)"), TCB)); AssertTCB(); if (TCB->prop) @@ -570,7 +598,7 @@ drv_init(TERMINAL_CONTROL_BLOCK * TCB) { DWORD num_buttons; - T((T_CALLED("drv_init(%p)"), TCB)); + T((T_CALLED("win32con::drv_init(%p)"), TCB)); AssertTCB(); @@ -901,7 +929,7 @@ drv_twait(TERMINAL_CONTROL_BLOCK * TCB, EVENTLIST_2nd(_nc_eventlist * evl)) { SCREEN *sp; - INPUT_RECORD inp; + INPUT_RECORD inp_rec; BOOL b; DWORD nRead = 0, rc = -1; int code = 0; @@ -910,7 +938,7 @@ drv_twait(TERMINAL_CONTROL_BLOCK * TCB, int diff; bool isImmed = (milliseconds == 0); -#define CONSUME() ReadConsoleInput(TCB->inp,&inp,1,&nRead) +#define CONSUME() ReadConsoleInput(TCB->inp,&inp_rec,1,&nRead) AssertTCB(); SetSP(); @@ -921,7 +949,7 @@ drv_twait(TERMINAL_CONTROL_BLOCK * TCB, if (milliseconds < 0) milliseconds = INFINITY; - memset(&inp, 0, sizeof(inp)); + memset(&inp_rec, 0, sizeof(inp_rec)); while (true) { GetSystemTimeAsFileTime(&fstart); @@ -937,15 +965,15 @@ drv_twait(TERMINAL_CONTROL_BLOCK * TCB, if (mode) { b = GetNumberOfConsoleInputEvents(TCB->inp, &nRead); if (b && nRead > 0) { - b = PeekConsoleInput(TCB->inp, &inp, 1, &nRead); + b = PeekConsoleInput(TCB->inp, &inp_rec, 1, &nRead); if (b && nRead > 0) { - switch (inp.EventType) { + switch (inp_rec.EventType) { case KEY_EVENT: if (mode & TW_INPUT) { - WORD vk = inp.Event.KeyEvent.wVirtualKeyCode; - char ch = inp.Event.KeyEvent.uChar.AsciiChar; + WORD vk = inp_rec.Event.KeyEvent.wVirtualKeyCode; + char ch = inp_rec.Event.KeyEvent.uChar.AsciiChar; - if (inp.Event.KeyEvent.bKeyDown) { + if (inp_rec.Event.KeyEvent.bKeyDown) { if (0 == ch) { int nKey = MapKey(TCB, vk); if ((nKey < 0) || FALSE == sp->_keypad_on) { @@ -962,7 +990,7 @@ drv_twait(TERMINAL_CONTROL_BLOCK * TCB, continue; case MOUSE_EVENT: if (decode_mouse(TCB, - (inp.Event.MouseEvent.dwButtonState + (inp_rec.Event.MouseEvent.dwButtonState & BUTTON_MASK)) == 0) { CONSUME(); } else if (mode & TW_MOUSE) { @@ -1048,7 +1076,7 @@ drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf) { SCREEN *sp; int n = 1; - INPUT_RECORD inp; + INPUT_RECORD inp_rec; BOOL b; DWORD nRead; WORD vk; @@ -1058,17 +1086,17 @@ drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf) assert(buf); SetSP(); - memset(&inp, 0, sizeof(inp)); + memset(&inp_rec, 0, sizeof(inp_rec)); - T((T_CALLED("drv_read(%p)"), TCB)); - while ((b = ReadConsoleInput(TCB->inp, &inp, 1, &nRead))) { + T((T_CALLED("win32con::drv_read(%p)"), TCB)); + while ((b = ReadConsoleInput(TCB->inp, &inp_rec, 1, &nRead))) { if (b && nRead > 0) { - if (inp.EventType == KEY_EVENT) { - if (!inp.Event.KeyEvent.bKeyDown) + if (inp_rec.EventType == KEY_EVENT) { + if (!inp_rec.Event.KeyEvent.bKeyDown) continue; - *buf = (int) inp.Event.KeyEvent.uChar.AsciiChar; - vk = inp.Event.KeyEvent.wVirtualKeyCode; - sc = inp.Event.KeyEvent.wVirtualScanCode; + *buf = (int) inp_rec.Event.KeyEvent.uChar.AsciiChar; + vk = inp_rec.Event.KeyEvent.wVirtualKeyCode; + sc = inp_rec.Event.KeyEvent.wVirtualScanCode; if (*buf == 0) { if (sp->_keypad_on) { *buf = MapKey(TCB, vk); @@ -1081,8 +1109,8 @@ drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf) } else { /* *buf != 0 */ break; } - } else if (inp.EventType == MOUSE_EVENT) { - if (handle_mouse(TCB, inp.Event.MouseEvent)) { + } else if (inp_rec.EventType == MOUSE_EVENT) { + if (handle_mouse(TCB, inp_rec.Event.MouseEvent)) { *buf = KEY_MOUSE; break; }