I'm attempting to use PDcurses as a curses implementation for a win32
build of GDB (to enable using the TUI). I was able to get GDB to link
against PDcurses just fine, but I discovered a problem where the
CTRL+C handler was unable to interrupt the running process when GDB
was in TUI mode (i.e. you couldn't interrupt the running inferior

I traced it down to PDcurses explicitly removing the special behavior
of CTRL+C in PDC_mouse_set():

/* If turning on mouse input: Set ENABLE_MOUSE_INPUT, and clear
       all other flags, including the extended flags;
       If turning off the mouse: Set QuickEdit Mode to the status it
       had on startup, and clear all other flags */

    SetConsoleMode(pdc_con_in, SP->_trap_mbe ?
                   (ENABLE_MOUSE_INPUT|0x0080) : (pdc_quick_edit|0x0080));

GDB relies on the special behavior of CTRL+C to interrupt its running
inferior, and thus masking it off prevents it from working. I was able
to fix this problem with a small change:

 SetConsoleMode(pdc_con_in, SP->_trap_mbe ?
: (pdc_quick_edit|0x0080|ENABLE_PROCESSED_INPUT));

I think a better solution might be to capture the original state of
the ENABLE_PROCESSED_INPUT flag when PDC_src_open() is called so that
PDC_mouse_set() can not clobber it (similar to how quick_edit is
captured). Does any one have any thoughts or comments about this?


Reply via email to