X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fform_driver_w.c;h=dd7ea68cfb4fe1093422b8233aad1e0f204772c1;hp=64f9872985c5b911c56f0230c0167e136f00ca24;hb=HEAD;hpb=bd0d93918c967f71d8e287fd6714f0b88da820da diff --git a/test/form_driver_w.c b/test/form_driver_w.c index 64f98729..544060dc 100644 --- a/test/form_driver_w.c +++ b/test/form_driver_w.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2013,2014 Free Software Foundation, Inc. * + * Copyright 2020,2022 Thomas E. Dickey * + * Copyright 2013-2014,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 * @@ -31,26 +32,72 @@ ****************************************************************************/ /* - * $Id: form_driver_w.c,v 1.12 2014/06/01 20:37:19 tom Exp $ + * $Id: form_driver_w.c,v 1.17 2022/12/10 23:31:31 tom Exp $ * * Test form_driver_w (int, int, wchar_t), a wide char aware * replacement of form_driver. */ -#include - #include +#include #if USE_WIDEC_SUPPORT && USE_LIBFORM && (defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH >= 20131207) #include +static void +usage(int ok) +{ + static const char *msg[] = + { + "Usage: form_driver_w [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(void) +main(int argc, char *argv[]) { - FIELD *field[3]; + static const char *help[] = + { + "Commands:", + " ^D,^Q,ESC - quit program", + " , - move to next field", + " , - move to previous field", + 0 + }; + +#define NUM_FIELDS 3 +#define MyRow(n) (4 + (n) * 2) +#define MyCol(n) 10 + FIELD *field[NUM_FIELDS + 1]; FORM *my_form; bool done = FALSE; + int n; + 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, ""); @@ -61,32 +108,34 @@ main(void) keypad(stdscr, TRUE); /* Initialize the fields */ - field[0] = new_field(1, 10, 4, 18, 0, 0); - field[1] = new_field(1, 10, 6, 18, 0, 0); - field[2] = NULL; - - /* Set field options */ - set_field_back(field[0], A_UNDERLINE); /* Print a line for the option */ - field_opts_off(field[0], O_AUTOSKIP); /* Don't go to next field when this */ - /* Field is filled up */ - set_field_back(field[1], A_UNDERLINE); - field_opts_off(field[1], O_AUTOSKIP); + for (n = 0; n < NUM_FIELDS; ++n) { + field[n] = new_field(1, 10, MyRow(n), 18, 0, 0); + set_field_back(field[n], A_UNDERLINE); + /* Print a line for the option */ + field_opts_off(field[n], O_AUTOSKIP); + /* Don't go to next field when this is filled */ + } + field[n] = NULL; /* Create the form and post it */ my_form = new_form(field); post_form(my_form); refresh(); - mvprintw(4, 10, "Value 1:"); - mvprintw(6, 10, "Value 2:"); - refresh(); + for (n = 0; n < NUM_FIELDS; ++n) { + mvprintw(MyRow(n), MyCol(n), "Value %d:", n + 1); + } /* Loop through to get user requests */ while (!done) { - wint_t ch; - int ret = get_wch(&ch); - - mvprintw(8, 10, "Got %d (%#x), type: %s", (int) ch, (int) ch, + wint_t c2; + int ret = get_wch(&c2); + + mvprintw(MyRow(NUM_FIELDS), + MyCol(NUM_FIELDS), + "Got %d (%#x), type: %s", + (int) c2, + (int) c2, (ret == KEY_CODE_YES) ? "KEY_CODE_YES" : ((ret == OK) @@ -98,7 +147,7 @@ main(void) switch (ret) { case KEY_CODE_YES: - switch (ch) { + switch (c2) { case KEY_DOWN: /* Go to next field */ form_driver_w(my_form, KEY_CODE_YES, REQ_NEXT_FIELD); @@ -106,6 +155,7 @@ main(void) /* Leaves nicely at the last character */ form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); break; + case KEY_BTAB: case KEY_UP: /* Go to previous field */ form_driver_w(my_form, KEY_CODE_YES, REQ_PREV_FIELD); @@ -116,14 +166,21 @@ main(void) } break; case OK: - switch (ch) { + switch (c2) { case CTRL('D'): case QUIT: case ESCAPE: done = TRUE; break; + case '\t': + form_driver_w(my_form, KEY_CODE_YES, REQ_NEXT_FIELD); + form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); + break; + case HELP_KEY_1: + popup_msg(form_win(my_form), help); + break; default: - form_driver_w(my_form, OK, ch); + form_driver_w(my_form, OK, (wchar_t) c2); break; } break; @@ -133,8 +190,9 @@ main(void) /* Un post form and free the memory */ unpost_form(my_form); free_form(my_form); - free_field(field[0]); - free_field(field[1]); + for (n = 0; n < NUM_FIELDS; ++n) { + free_field(field[n]); + } endwin(); ExitProgram(EXIT_SUCCESS);