/****************************************************************************
+ * 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 *
* 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
*
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");
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;
}
}
- putp(tparm(xtermcap, 0));
+ putp(tgoto(xtermcap, 0, 0));
fflush(stdout);
tcsetattr(0, TCSANOW, &old);
return 0;
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);
}
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;
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);
}
logoffset = getcury(stdscr);
while (1) {
- c = getch();
+ int c = getch();
switch (c) {
case KEY_MOUSE:
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 |