Hi all, Since the introduction of the 'ncurses' driver for the wineconsole program, the only program using the console is completely broken (IDA). Well, it actually starts faster than with the USER back-end but after that it's mostly unusable. I looked at the wineconsole code and it does not seem that there is a configure option or any other mean to have wineconsole act as before (ie to use the slow but working USER driver). So : 1) I did not look long enough 2) I should stop bitching and fix the ncurses driver What irks me is that the debugger is still working as before (ie not very stable, but at least not buggy in an xterm :-) ). Lionel -- Lionel Ulmer - http://www.bbrox.org/
I looked at the wineconsole code and it does not seem that there is a configure option or any other mean to have wineconsole act as before (ie to use the slow but working USER driver). that's a feature (see previous discussion on wineconsole implementation) we could add an option for that, but it's better to fix actually the curses implementation *first*
does this attached patch solves some issues ? (it won't solve all of the issues for ida) A+ -- Eric Pouech Index: curses.c =================================================================== RCS file: /home/cvs/cvsroot/wine/wine/programs/wineconsole/curses.c,v retrieving revision 1.1 diff -u -r1.1 curses.c --- curses.c 13 Dec 2002 23:37:06 -0000 1.1 +++ curses.c 19 Dec 2002 18:29:25 -0000 @@ -136,22 +136,28 @@ { int x, y; CHAR_INFO* cell; - WORD color; + DWORD attr; for (y = tp; y <= bm; y++) { cell = &data->cells[y * data->curcfg.sb_width]; for (x = 0; x < data->curcfg.sb_width; x++) { - color = 0; - if (cell[x].Attributes & FOREGROUND_RED) color |= COLOR_RED; - if (cell[x].Attributes & FOREGROUND_BLUE) color |= COLOR_BLUE; - if (cell[x].Attributes & FOREGROUND_GREEN) color |= COLOR_GREEN; - if (cell[x].Attributes & BACKGROUND_RED) color |= COLOR_RED << 3; - if (cell[x].Attributes & BACKGROUND_BLUE) color |= COLOR_BLUE << 3; - if (cell[x].Attributes & BACKGROUND_GREEN) color |= COLOR_GREEN << 3; + if (cell[x].Char.UnicodeChar >= 0x20 && cell[x].Char.UnicodeChar <= 0xFF) + attr = LOBYTE(cell[x].Char.UnicodeChar); + else + attr = ' '; + + if (cell[x].Attributes & FOREGROUND_RED) attr |= COLOR_PAIR(COLOR_RED); + if (cell[x].Attributes & FOREGROUND_BLUE) attr |= COLOR_PAIR(COLOR_BLUE); + if (cell[x].Attributes & FOREGROUND_GREEN) attr |= COLOR_PAIR(COLOR_GREEN); + if (cell[x].Attributes & BACKGROUND_RED) attr |= COLOR_PAIR(COLOR_RED << 3); + if (cell[x].Attributes & BACKGROUND_BLUE) attr |= COLOR_PAIR(COLOR_BLUE << 3); + if (cell[x].Attributes & BACKGROUND_GREEN) attr |= COLOR_PAIR(COLOR_GREEN << 3); - PRIVATE(data)->line[x] = (unsigned char)cell[x].Char.UnicodeChar | COLOR_PAIR(color); + if (cell[x].Attributes & FOREGROUND_INTENSITY) attr |= A_BOLD; + + PRIVATE(data)->line[x] = attr; } mvwaddchnstr(PRIVATE(data)->pad, y, 0, PRIVATE(data)->line, data->curcfg.sb_width); } @@ -282,10 +288,9 @@ static COORD pos /* = {0, 0} */; MEVENT mevt; - BOOL ret = 0; if (getmouse(&mevt) == ERR) - return FALSE; + return FALSE; WINE_TRACE("[%u]: (%d, %d) %08lx\n", mevt.id, mevt.x, mevt.y, (unsigned long)mevt.bstate); @@ -296,7 +301,6 @@ #define BTN3_BIT FROM_LEFT_2ND_BUTTON_PRESSED #define BTN4_BIT 0 /* not done yet */ - /* FIXME: to be checked */ if (mevt.bstate & BUTTON1_PRESSED) bstate |= BTN1_BIT; if (mevt.bstate & BUTTON1_RELEASED) bstate &= ~BTN1_BIT; if (mevt.bstate & BUTTON2_PRESSED) bstate |= BTN2_BIT; @@ -304,28 +308,12 @@ if (mevt.bstate & BUTTON3_PRESSED) bstate |= BTN3_BIT; if (mevt.bstate & BUTTON3_RELEASED) bstate &= ~BTN3_BIT; - /* for the clicked & double click events, since we'll generate automatically - * the release event, we don't have to store the state - */ - if ((mevt.bstate & (BUTTON1_CLICKED|BUTTON1_DOUBLE_CLICKED)) && !(bstate & BTN1_BIT)) - { - ret = BTN1_BIT; - } - if ((mevt.bstate & (BUTTON2_CLICKED|BUTTON2_DOUBLE_CLICKED)) && !(bstate & BTN2_BIT)) - { - ret = BTN2_BIT; - } - if ((mevt.bstate & (BUTTON3_CLICKED|BUTTON3_DOUBLE_CLICKED)) && !(bstate & BTN3_BIT)) - { - ret = BTN3_BIT; - } - ir->EventType = MOUSE_EVENT; ir->Event.MouseEvent.dwMousePosition.X = mevt.x; ir->Event.MouseEvent.dwMousePosition.Y = mevt.y; - ir->Event.MouseEvent.dwButtonState = (bstate | ret); - + ir->Event.MouseEvent.dwButtonState = bstate; + /* partial conversion */ ir->Event.MouseEvent.dwControlKeyState = 0; if (mevt.bstate & BUTTON_SHIFT) ir->Event.MouseEvent.dwControlKeyState |= SHIFT_PRESSED; @@ -338,19 +326,23 @@ */ ir->Event.MouseEvent.dwEventFlags = 0; +#if 0 + /* won't work, we need to still generate the first click event */ if ((mevt.bstate & BUTTON1_DOUBLE_CLICKED) && ((bstate|ret) & BTN1_BIT)) ir->Event.MouseEvent.dwEventFlags |= DOUBLE_CLICK; if ((mevt.bstate & BUTTON2_DOUBLE_CLICKED) && ((bstate|ret) & BTN2_BIT)) ir->Event.MouseEvent.dwEventFlags |= DOUBLE_CLICK; if ((mevt.bstate & BUTTON3_DOUBLE_CLICKED) && ((bstate|ret) & BTN3_BIT)) ir->Event.MouseEvent.dwEventFlags |= DOUBLE_CLICK; - if (mevt.x != pos.X || mevt.y != pos.Y) +#endif + if (!(mevt.bstate & (BUTTON1_PRESSED|BUTTON1_RELEASED|BUTTON2_PRESSED|BUTTON2_RELEASED|BUTTON3_PRESSED|BUTTON3_RELEASED)) && + (mevt.x != pos.X || mevt.y != pos.Y)) { ir->Event.MouseEvent.dwEventFlags |= MOUSE_MOVED; } pos.X = mevt.x; pos.Y = mevt.y; - - return ret; + + return FALSE; } /****************************************************************** @@ -659,7 +651,8 @@ nodelay(stdscr, TRUE); keypad(stdscr, TRUE); mousemask(0xffffffff, &PRIVATE(data)->initial_mouse_mask); - + /* no click generation... (--hmmm man page says -1 to disable) */ + mouseinterval(0); return TRUE; }
that's a feature (see previous discussion on wineconsole implementation) we could add an option for that, but it's better to fix actually the curses implementation *first*
Yeah, this is what I though too :-)
does this attached patch solves some issues ? (it won't solve all of the issues for ida)
It works a LOT better (and it's a lot faster than the USER based one too). It's still a bit flaky (ie no 'Alt-XX' shortcuts or some GUI stuff like sliders and stuff are not displayed) but IDA is now mostly usable. Lionel -- Lionel Ulmer - http://www.bbrox.org/
participants (2)
-
Eric Pouech -
Lionel Ulmer