X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=test%2Ftestscanw.c;h=251c464d763ce372f4433aaf61adc5e70ce93513;hb=HEAD;hp=8420ea0fc55a1f925c40f160779290a3449c2bab;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1;p=ncurses.git diff --git a/test/testscanw.c b/test/testscanw.c index 8420ea0f..415250c6 100644 --- a/test/testscanw.c +++ b/test/testscanw.c @@ -1,38 +1,104 @@ +/**************************************************************************** + * Copyright 2019-2020,2022 Thomas E. Dickey * + * Copyright 1998-2002,2006 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. * + ****************************************************************************/ /* gleaned from a web-search, shows a bug combining scanw and implicit scroll. * Date: 1997/03/17 * From: bayern@morpheus.cis.yale.edu * - * $Id: testscanw.c,v 1.5 1997/09/20 14:16:20 tom Exp $ + * $Id: testscanw.c,v 1.15 2022/12/11 00:10:29 tom Exp $ */ #include -#include -int main(int argc, char *argv[]) +static void +usage(int ok) { - long badanswer = 1; - long *response = &badanswer; + static const char *msg[] = + { + "Usage: testscanw [options] tokens" + ,"" + ,"Tokens are integers (starting line-number) or k+, k- to turn keypad on/off." + ,"" + ,USAGE_COMMON + }; + size_t n; - initscr(); - scrollok(stdscr, TRUE); - idlok(stdscr, TRUE); - echo(); + 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, char *argv[]) +{ + long badanswer = 1; + long *response = &badanswer; + 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 */ + } + } + + setlocale(LC_ALL, ""); + + initscr(); + scrollok(stdscr, TRUE); + idlok(stdscr, TRUE); + echo(); #if 0 - trace(TRACE_UPDATE|TRACE_CALLS); + curses_trace(TRACE_UPDATE | TRACE_CALLS); #endif - while (argc > 1) { - if (isdigit(*argv[1])) - move(atoi(argv[1]), 0); - else if (!strcmp(argv[1], "-k")) - keypad(stdscr, TRUE); - argc--, argv++; - } + while (optind < argc) { + char *token = argv[optind++]; + if (isdigit(UChar(*token))) + move(atoi(token), 0); + else if (!strcmp(token, "k+")) + keypad(stdscr, TRUE); + else if (!strcmp(token, "k-")) + keypad(stdscr, FALSE); + } - while (badanswer) { - printw("Enter a number (0 to quit):\n"); - printw("--> "); - scanw("%20ld", response); /* yes, it's a pointer */ - } - endwin(); - return EXIT_SUCCESS; + while (badanswer) { + printw("Enter a number (0 to quit):\n"); + printw("--> "); + scanw("%20ld", response); /* yes, it's a pointer */ + } + endwin(); + ExitProgram(EXIT_SUCCESS); }