X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Flrtest.c;h=9c77577e65e970797160d3fd042b68f25f743515;hp=fb99641117ce5f47e3753cefffcc202fb2e65b84;hb=HEAD;hpb=0eb88fc5281804773e2a0c7a488a4452463535ce diff --git a/test/lrtest.c b/test/lrtest.c index fb996411..0e609d01 100644 --- a/test/lrtest.c +++ b/test/lrtest.c @@ -1,16 +1,44 @@ +/**************************************************************************** + * Copyright 2019-2020,2022 Thomas E. Dickey * + * Copyright 1998-2010,2017 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 * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ /* * Test lower-right-hand corner access * - * by Eric S. Raymond + * originally by Eric S. Raymond , written for animation + * and resizing -T.Dickey * * This can't be part of the ncurses test-program, because ncurses rips off the * bottom line to do labels. * - * $Id: lrtest.c,v 0.14 1999/10/23 19:44:35 tom Exp $ + * $Id: lrtest.c,v 1.29 2022/12/10 23:44:18 tom Exp $ */ #include -#include typedef struct { int y, x, mode, dir, inc; @@ -22,9 +50,9 @@ typedef struct { * really write to all positions properly. */ static void -show(MARK * m) +show(MARK *m) { - mvaddch(m->y, m->x, m->value); + MvAddCh(m->y, m->x, m->value); if (m->mode == 0) { /* along the x-direction */ m->x += m->inc; if (m->x >= COLS) { @@ -54,10 +82,28 @@ show(MARK * m) } } +static void +usage(int ok) +{ + static const char *msg[] = + { + "Usage: lrtest [options]" + ,"" + ,USAGE_COMMON + }; + size_t n; + + for (n = 0; n < SIZEOF(msg); n++) + fprintf(stderr, "%s\n", msg[n]); + + ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE); +} +/* *INDENT-OFF* */ +VERSION_COMMON() +/* *INDENT-ON* */ + int -main( - int argc GCC_UNUSED, - char *argv[]GCC_UNUSED) +main(int argc, char *argv[]) { static MARK marks[] = { @@ -69,6 +115,22 @@ main( {1, 0, 1, 1, 1, '*' | A_REVERSE}, {2, 0, 1, 1, 1, '*' | A_REVERSE} }; + int ch; + + while ((ch = getopt(argc, argv, OPTS_COMMON)) != -1) { + switch (ch) { + case OPTS_VERSION: + show_version(argv); + ExitProgram(EXIT_SUCCESS); + default: + usage(ch == OPTS_USAGE); + /* NOTREACHED */ + } + } + if (optind < argc) + usage(FALSE); + + setlocale(LC_ALL, ""); initscr(); noecho(); @@ -82,9 +144,12 @@ main( #endif move(LINES / 2 - 1, 4); if (!(has_ic() +#if HAVE_SETUPTERM /* see PutCharLR() */ - || auto_right_margin - || (enter_am_mode && exit_am_mode))) { + || auto_right_margin + || (enter_am_mode && exit_am_mode) +#endif + )) { addstr("Your terminal lacks the capabilities needed to address the\n"); move(LINES / 2, 4); addstr("lower-right-hand corner of the screen.\n"); @@ -99,34 +164,51 @@ main( } for (;;) { - int ch; + int c2; unsigned n; box(stdscr, 0, 0); - for (n = 0; n < sizeof(marks) / sizeof(marks[0]); n++) { + for (n = 0; n < SIZEOF(marks); n++) { show(&marks[n]); } - if ((ch = getch()) > 0) { - if (ch == 'q') + if ((c2 = getch()) > 0) { + if (c2 == 'q') break; - else if (ch == 's') + else if (c2 == 's') nodelay(stdscr, FALSE); - else if (ch == ' ') + else if (c2 == ' ') nodelay(stdscr, TRUE); +#ifdef TRACE + else if (c2 == 'T') + curses_trace(0); + else if (c2 == 't') + curses_trace(TRACE_CALLS | TRACE_ICALLS | TRACE_UPDATE); +#endif #ifdef KEY_RESIZE - else if (ch == KEY_RESIZE) { + else if (c2 == KEY_RESIZE) { + for (n = 0; n < SIZEOF(marks); n++) { + if (marks[n].mode == 0) { /* moving along x-direction */ + if (marks[n].y) + marks[n].y = LINES - 1; + } else { + if (marks[n].x) + marks[n].x = COLS - 1; + } + } + flash(); erase(); + wrefresh(curscr); goto restart; } #endif } napms(50); + refresh(); } - curs_set(1); - endwin(); - return 0; + stop_curses(); + ExitProgram(EXIT_SUCCESS); } /* lrtest.c ends here */