/****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
Thomas E. Dickey (beginning revision 1.27 in 1996).
-$Id: ncurses.c,v 1.350 2009/11/07 22:11:27 tom Exp $
+$Id: ncurses.c,v 1.355 2010/01/09 16:52:17 tom Exp $
***************************************************************************/
{
static char buf[80 + (5 * 10) + (32 * 15)];
- (void) sprintf(buf, "id %2d at (%2d, %2d, %2d) state %4lx = {",
+ (void) sprintf(buf, "id %2d at (%2d, %2d, %d) state %4lx = {",
ep->id, ep->x, ep->y, ep->z, (unsigned long) ep->bstate);
#define SHOW(m, s) if ((ep->bstate & m)==m) {strcat(buf,s); strcat(buf, ", ");}
(void) strcat(buf, "}");
return (buf);
}
+
+static void
+show_mouse(WINDOW *win)
+{
+ int y, x;
+ MEVENT event;
+ bool outside;
+ bool show_loc;
+
+ getmouse(&event);
+ outside = !wenclose(win, event.y, event.x);
+
+ if (outside) {
+ (void) wstandout(win);
+ waddstr(win, "KEY_MOUSE");
+ (void) wstandend(win);
+ } else {
+ waddstr(win, "KEY_MOUSE");
+ }
+ wprintw(win, ", %s", mouse_decode(&event));
+
+ if (outside)
+ win = stdscr;
+
+ show_loc = wmouse_trafo(win, &event.y, &event.x, FALSE);
+
+ if (show_loc) {
+ getyx(win, y, x);
+ wmove(win, event.y, event.x);
+ waddch(win, '*');
+ wmove(win, y, x);
+ }
+
+ if (outside)
+ wnoutrefresh(win);
+}
#endif /* NCURSES_MOUSE_VERSION */
/****************************************************************************
wprintw(win, "Key pressed: %04o ", c);
#ifdef NCURSES_MOUSE_VERSION
if (c == KEY_MOUSE) {
- int y, x;
- MEVENT event;
-
- getmouse(&event);
- wprintw(win, "KEY_MOUSE, %s", mouse_decode(&event));
- getyx(win, y, x);
- move(event.y, event.x);
- addch('*');
- wmove(win, y, x);
+ show_mouse(win);
} else
#endif /* NCURSES_MOUSE_VERSION */
if (c >= KEY_MIN) {
int incount = 0;
GetchFlags flags;
bool blocking = (delay < 0);
- int y, x, code;
+ int code;
char *temp;
init_getch(win, flags);
wprintw(win, "Key pressed: %04o ", (int) c);
#ifdef NCURSES_MOUSE_VERSION
if (c == KEY_MOUSE) {
- MEVENT event;
-
- getmouse(&event);
- wprintw(win, "KEY_MOUSE, %s", mouse_decode(&event));
- getyx(win, y, x);
- move(event.y, event.x);
- addch('*');
- wmove(win, y, x);
+ show_mouse(win);
} else
#endif /* NCURSES_MOUSE_VERSION */
if (code == KEY_CODE_YES) {
(void) fflush(stdout); /* necessary under SVr4 curses */
/*
- * This used to be an 'fgets()' call. However (on Linux, at least)
- * mixing stream I/O and 'read()' (used in the library) causes the
+ * This used to be an 'fgets()' call (until 1996/10). However with
+ * some runtime libraries, mixing stream I/O and 'read()' causes the
* input stream to be flushed when switching between the two.
*/
command = 0;