ncurses 6.0
[ncurses.git] / test / testcurs.c
index 8310f3f855915b4ef73d3d3d74801fc5f7ffb3c5..7a44a2c642cdb80e4229322411449b63f863a6ff 100644 (file)
@@ -6,7 +6,7 @@
  *  wrs(5/28/93) -- modified to be consistent (perform identically) with either
  *                  PDCurses or under Unix System V, R4
  *
- * $Id: testcurs.c,v 1.46 2012/11/24 19:38:20 tom Exp $
+ * $Id: testcurs.c,v 1.50 2015/07/05 00:11:10 tom Exp $
  */
 
 #include <test.priv.h>
@@ -286,7 +286,7 @@ inputTest(WINDOW *win)
 #ifdef A_COLOR
     if (has_colors()) {
        init_pair(2, COLOR_WHITE, COLOR_RED);
-       wbkgd(subWin, COLOR_PAIR(2) | A_BOLD);
+       wbkgd(subWin, (chtype) COLOR_PAIR(2) | A_BOLD);
     } else
        wbkgd(subWin, A_BOLD);
 #else
@@ -341,6 +341,9 @@ inputTest(WINDOW *win)
     typeahead(-1);
 #endif
 
+#ifdef NCURSES_MOUSE_VERSION
+    mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0);
+#endif
 #if defined(PDCURSES)
     mouse_set(ALL_MOUSE_EVENTS);
 #endif
@@ -355,8 +358,38 @@ inputTest(WINDOW *win)
            wprintw(win, "Key Pressed: %c", c);
        else
            wprintw(win, "Key Pressed: %s", unctrl(UChar(c)));
-#if defined(PDCURSES)
+#ifdef KEY_MOUSE
        if (c == KEY_MOUSE) {
+#if defined(NCURSES_MOUSE_VERSION)
+#define ButtonChanged(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, 037))
+#define ButtonPressed(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED))
+#define ButtonDouble(n)  ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED))
+#define ButtonTriple(n)  ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED))
+#define ButtonRelease(n) ((event.bstate) & NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED))
+           MEVENT event;
+           int button = 0;
+
+           getmouse(&event);
+           if (ButtonChanged(1))
+               button = 1;
+           else if (ButtonChanged(2))
+               button = 2;
+           else if (ButtonChanged(3))
+               button = 3;
+           else
+               button = 0;
+           wmove(win, 4, 18);
+           wprintw(win, "Button %d: ", button);
+           if (ButtonPressed(button))
+               wprintw(win, "pressed: ");
+           else if (ButtonDouble(button))
+               wprintw(win, "double: ");
+           else if (ButtonTriple(button))
+               wprintw(win, "triple: ");
+           else
+               wprintw(win, "released: ");
+           wprintw(win, " Position: Y: %d X: %d", event.y, event.x);
+#elif defined(PDCURSES)
            int button = 0;
            request_mouse_pos();
            if (BUTTON_CHANGED(1))
@@ -378,8 +411,9 @@ inputTest(WINDOW *win)
            else
                wprintw(win, "released: ");
            wprintw(win, " Position: Y: %d X: %d", MOUSE_Y_POS, MOUSE_X_POS);
+#endif /* NCURSES_VERSION vs PDCURSES */
        }
-#endif
+#endif /* KEY_MOUSE */
        wrefresh(win);
        if (c == ' ')
            break;
@@ -403,7 +437,7 @@ inputTest(WINDOW *win)
            "%d %[][a-zA-Z]s",
            "%d %[^0-9]"
        };
-       const char *format = fmt[(unsigned) repeat % SIZEOF(fmt)];
+       char *format = strdup(fmt[(unsigned) repeat % SIZEOF(fmt)]);
 
        wclear(win);
        MvWAddStr(win, 3, 2, "The window should have moved");
@@ -419,12 +453,13 @@ inputTest(WINDOW *win)
        noraw();
        num = 0;
        *buffer = 0;
-       answered = mvwscanw(win, 7, 6, strdup(format), &num, buffer);
+       answered = mvwscanw(win, 7, 6, format, &num, buffer);
        MvWPrintw(win, 8, 6,
                  "String: %s Number: %d (%d values read)",
                  buffer, num, answered);
        Continue(win);
        ++repeat;
+       free(format);
     } while (answered > 0);
 }