]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/test_mouse.c
ncurses 6.4 - patch 20240210
[ncurses.git] / test / test_mouse.c
index 8cb12d9fc6e17b25612ae2c912d5a7f24886e827..126d2d6de3f324e940096cf7008e2fd3a671af31 100644 (file)
@@ -1,6 +1,6 @@
 /****************************************************************************
+ * Copyright 2022-2023,2024 Thomas E. Dickey                                *
  * Copyright 2022 Leonid S. Usov <leonid.s.usov at gmail.com>               *
- * Copyright 2022 Thomas E. Dickey                                          *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -22,7 +22,7 @@
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  ****************************************************************************/
 /*
- * $Id: test_mouse.c,v 1.18 2022/05/15 00:20:27 tom Exp $
+ * $Id: test_mouse.c,v 1.29 2024/02/10 14:39:40 tom Exp $
  *
  * Author: Leonid S Usov
  *
@@ -43,7 +43,18 @@ raw_loop(void)
     char *xtermcap;
 
     tcgetattr(0, &old);
+#if HAVE_CFMAKERAW
     cfmakeraw(&tty);
+#else
+    tty = old;
+    tty.c_iflag &= (unsigned) (~(IGNBRK | BRKINT | PARMRK | ISTRIP
+                                | INLCR | IGNCR | ICRNL | IXON));
+    tty.c_oflag &= (unsigned) (~OPOST);
+    tty.c_lflag &= (unsigned) (~(ECHO | ECHONL | ICANON | ISIG | IEXTEN));
+    tty.c_cflag &= (unsigned) (~(CSIZE | PARENB));
+    tty.c_cflag |= CS8;
+    tcsetattr(0, TCSANOW, &tty);
+#endif
 
     setupterm(NULL, 0, 0);
     xtermcap = tigetstr("XM");
@@ -52,12 +63,12 @@ raw_loop(void)
        return 1;
     }
 
-    putp(tparm(xtermcap, 1));
+    putp(tgoto(xtermcap, 1, 1));
     fflush(stdout);
 
     tcsetattr(0, TCSANOW, &tty);
 
-    while (true) {
+    while (1) {
        int c = getc(stdin);
        const char *pretty;
 
@@ -74,7 +85,7 @@ raw_loop(void)
        }
     }
 
-    putp(tparm(xtermcap, 0));
+    putp(tgoto(xtermcap, 0, 0));
     fflush(stdout);
     tcsetattr(0, TCSANOW, &old);
     return 0;
@@ -86,11 +97,13 @@ static void
 logw(const char *fmt, ...)
 {
     int row = getcury(stdscr);
-
     va_list args;
+
     va_start(args, fmt);
     wmove(stdscr, row++, 0);
     vw_printw(stdscr, fmt, args);
+    va_end(args);
+
     clrtoeol();
 
     row %= (getmaxy(stdscr) - logoffset);
@@ -104,45 +117,47 @@ logw(const char *fmt, ...)
 }
 
 static void
-usage(void)
+usage(int ok)
 {
     static const char *msg[] =
     {
-       "Usage: test_mouse [options]",
-       "",
-       "Test mouse events.  These examples for $TERM demonstrate xterm"
-       "features:",
-       "    xterm",
-       "    xterm-1002",
-       "    xterm-1003",
-       "",
-       "Options:",
-       " -r       show raw input stream, injecting a new line before every ESC",
-       " -i n     set mouse interval to n; default is 0 (no double-clicks)",
-       " -h       show this message",
-       " -T term  use terminal description other than $TERM"
+       "Usage: test_mouse [options]"
+       ,""
+       ,"Test mouse events.  These examples for $TERM demonstrate xterm"
+       ,"features:"
+       ,"    xterm"
+       ,"    xterm-1002"
+       ,"    xterm-1003"
+       ,""
+       ,USAGE_COMMON
+       ,"Options:"
+       ," -r       show raw input stream, injecting a new line before every ESC"
+       ," -i n     set mouse interval to n; default is 0 (no double-clicks)"
+       ," -T term  use terminal description other than $TERM"
     };
     unsigned n;
     for (n = 0; n < sizeof(msg) / sizeof(char *); ++n) {
        fprintf(stderr, "%s\n", msg[n]);
     }
+    ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE);
 }
+/* *INDENT-OFF* */
+VERSION_COMMON()
+/* *INDENT-ON* */
 
 int
 main(int argc, char *argv[])
 {
     bool rawmode = FALSE;
     int interval = 0;
-    int c;
+    int ch;
     MEVENT event;
+    size_t my_len;
     char *my_environ = NULL;
     const char *term_format = "TERM=%s";
 
-    while ((c = getopt(argc, argv, "hi:rT:")) != -1) {
-       switch (c) {
-       case 'h':
-           usage();
-           ExitProgram(EXIT_SUCCESS);
+    while ((ch = getopt(argc, argv, OPTS_COMMON "i:rT:")) != -1) {
+       switch (ch) {
        case 'i':
            interval = atoi(optarg);
            break;
@@ -150,17 +165,23 @@ main(int argc, char *argv[])
            rawmode = TRUE;
            break;
        case 'T':
-           my_environ = malloc(strlen(term_format) + strlen(optarg));
-           sprintf(my_environ, term_format, optarg);
-           putenv(my_environ);
+           my_len = strlen(term_format) + strlen(optarg) + 1;
+           my_environ = malloc(my_len);
+           if (my_environ != NULL) {
+               _nc_SPRINTF(my_environ, _nc_SLIMIT(my_len) term_format, optarg);
+               putenv(my_environ);
+           }
            break;
+       case OPTS_VERSION:
+           show_version(argv);
+           ExitProgram(EXIT_SUCCESS);
        default:
-           usage();
-           ExitProgram(EXIT_FAILURE);
+           usage(ch == OPTS_USAGE);
+           /* NOTREACHED */
        }
     }
     if (optind < argc) {
-       usage();
+       usage(FALSE);
        ExitProgram(EXIT_FAILURE);
     }
 
@@ -186,7 +207,7 @@ main(int argc, char *argv[])
     logoffset = getcury(stdscr);
 
     while (1) {
-       c = getch();
+       int c = getch();
 
        switch (c) {
        case KEY_MOUSE:
@@ -194,9 +215,9 @@ main(int argc, char *argv[])
                unsigned btn;
                mmask_t events;
 #if NCURSES_MOUSE_VERSION > 1
-               const int max_btn = 5;
+               const unsigned max_btn = 5;
 #else
-               const int max_btn = 4;
+               const unsigned max_btn = 4;
 #endif
                const mmask_t btn_mask = (NCURSES_BUTTON_RELEASED |
                                          NCURSES_BUTTON_PRESSED |