diff options
Diffstat (limited to 'contrib/ncurses/test/dup_field.c')
-rw-r--r-- | contrib/ncurses/test/dup_field.c | 394 |
1 files changed, 0 insertions, 394 deletions
diff --git a/contrib/ncurses/test/dup_field.c b/contrib/ncurses/test/dup_field.c deleted file mode 100644 index 5ca67f0b0f5a..000000000000 --- a/contrib/ncurses/test/dup_field.c +++ /dev/null @@ -1,394 +0,0 @@ -/**************************************************************************** - * Copyright 2020 Thomas E. Dickey * - * * - * 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. * - ****************************************************************************/ -/* - * $Id: dup_field.c,v 1.1 2020/03/21 19:28:36 tom Exp $ - * - * Demonstrate move_field(). - */ - -#include <test.priv.h> - -#if USE_LIBFORM - -#include <edit_field.h> -#include <popup_msg.h> - -#define MY_DEMO EDIT_FIELD('f') - -static char empty[] = ""; -static FIELD *all_fields[100]; - -/* *INDENT-OFF* */ -static struct { - int code; - int result; - const char *help; -} commands[] = { - { CTRL('A'), REQ_BEG_FIELD, "go to beginning of field" }, - { CTRL('D'), REQ_DOWN_FIELD, "move downward to field" }, - { CTRL('E'), REQ_END_FIELD, "go to end of field" }, - { CTRL('G'), MY_DEMO, "move current field with cursor keys" }, - { CTRL('H'), REQ_DEL_PREV, "delete previous character" }, - { CTRL('I'), REQ_NEXT_FIELD, "go to next field" }, - { CTRL('K'), REQ_CLR_EOF, "clear to end of field" }, - { CTRL('N'), REQ_NEXT_FIELD, "go to next field" }, - { CTRL('P'), REQ_PREV_FIELD, "go to previous field" }, - { CTRL('Q'), MY_QUIT, "exit form" }, - { CTRL('U'), REQ_UP_FIELD, "move upward to field" }, - { CTRL('W'), REQ_NEXT_WORD, "go to next word" }, - { CTRL('X'), REQ_CLR_FIELD, "clear field" }, - { CTRL('['), MY_QUIT, "exit form" }, - { KEY_F(1), MY_HELP, "show this screen", }, - { KEY_BACKSPACE, REQ_DEL_PREV, "delete previous character" }, - { KEY_BTAB, REQ_PREV_FIELD, "go to previous field" }, - { KEY_DOWN, REQ_DOWN_CHAR, "move down 1 character" }, - { KEY_END, REQ_LAST_FIELD, "go to last field" }, - { KEY_HOME, REQ_FIRST_FIELD, "go to first field" }, - { KEY_LEFT, REQ_LEFT_CHAR, "move left 1 character" }, - { KEY_NEXT, REQ_NEXT_FIELD, "go to next field" }, - { KEY_PREVIOUS, REQ_PREV_FIELD, "go to previous field" }, - { KEY_RIGHT, REQ_RIGHT_CHAR, "move right 1 character" }, - { KEY_UP, REQ_UP_CHAR, "move up 1 character" } -}; -/* *INDENT-ON* */ - -static void -my_help_edit_field(void) -{ - int used = 0; - unsigned n; - char **msgs = typeCalloc(char *, 3 + SIZEOF(commands)); - - msgs[used++] = strdup("Defined form edit/traversal keys:"); - for (n = 0; n < SIZEOF(commands); ++n) { - char *msg; - const char *name; - const char *code = keyname(commands[n].code); - size_t need = 5; -#ifdef NCURSES_VERSION - if ((name = form_request_name(commands[n].result)) == 0) -#endif - name = commands[n].help; - need = 5 + strlen(code) + strlen(name); - msg = typeMalloc(char, need); - _nc_SPRINTF(msg, _nc_SLIMIT(need) "%s -- %s", code, name); - msgs[used++] = msg; - } - msgs[used++] = - strdup("Arrow keys move within a field as you would expect."); - msgs[used] = 0; - popup_msg2(stdscr, msgs); - for (n = 0; msgs[n] != 0; ++n) { - free(msgs[n]); - } - free(msgs); -} - -static void -do_demo(FORM *form) -{ -} - -static FIELD * -make_label(const char *label, int frow, int fcol) -{ - FIELD *f = new_field(1, (int) strlen(label), frow, fcol, 0, 0); - - if (f) { - set_field_buffer(f, 0, label); - set_field_opts(f, (int) ((unsigned) field_opts(f) & ~O_ACTIVE)); - } - return (f); -} - -static FIELD * -make_field(int frow, int fcol, int rows, int cols) -{ - FIELD *f = new_field(rows, cols, frow, fcol, 0, 1); - - if (f) { - set_field_back(f, A_UNDERLINE); - init_edit_field(f, empty); - } - return (f); -} - -static void -erase_form(FORM *f) -{ - WINDOW *w = form_win(f); - WINDOW *s = form_sub(f); - - unpost_form(f); - werase(w); - wrefresh(w); - delwin(s); - delwin(w); -} - -static int -my_form_driver(FORM *form, int c) -{ - switch (c) { - case MY_QUIT: - if (form_driver(form, REQ_VALIDATION) == E_OK) - return (TRUE); - break; - case MY_HELP: - my_help_edit_field(); - break; - case MY_DEMO: - do_demo(form); - break; - default: - beep(); - break; - } - return (FALSE); -} - -static FieldAttrs * -my_field_attrs(FIELD *f) -{ - return (FieldAttrs *) field_userptr(f); -} - -static int -buffer_length(FIELD *f) -{ - return my_field_attrs(f)->row_lengths[0]; -} - -static void -set_buffer_length(FIELD *f, int length) -{ - my_field_attrs(f)->row_lengths[0] = length; -} - -static int -offset_in_field(FORM *form) -{ - FIELD *field = current_field(form); - int currow, curcol; - - form_getyx(form, currow, curcol); - return curcol + currow * (int) field->dcols; -} - -static void -inactive_field(FIELD *f) -{ - set_field_back(f, my_field_attrs(f)->background); -} - -static int -my_edit_field(FORM *form, int *result) -{ - int ch = wgetch(form_win(form)); - int status; - FIELD *before; - unsigned n; - int length; - int before_row; - int before_col; - int before_off = offset_in_field(form); - - form_getyx(form, before_row, before_col); - before = current_field(form); - set_field_back(before, A_NORMAL); - if (ch <= KEY_MAX) { - set_field_back(before, A_REVERSE); - } else if (ch <= MAX_FORM_COMMAND) { - inactive_field(before); - } - - *result = ch; - for (n = 0; n < SIZEOF(commands); ++n) { - if (commands[n].code == ch) { - *result = commands[n].result; - break; - } - } - - status = form_driver(form, *result); - - if (status == E_OK) { - bool modified = TRUE; - - length = buffer_length(before); - if (length < before_off) - length = before_off; - switch (*result) { - case REQ_CLR_EOF: - length = before_off; - break; - case REQ_CLR_EOL: - if ((int) (before_row + 1) == (int) (before->rows)) - length = before_off; - break; - case REQ_CLR_FIELD: - length = 0; - break; - case REQ_DEL_CHAR: - if (length > before_off) - --length; - break; - case REQ_DEL_PREV: - if (length > 0) { - if (before_col > 0) { - --length; - } else if (before_row > 0) { - length -= (int) before->cols + before_col; - } - } - break; - case REQ_NEW_LINE: - length += (int) before->cols; - break; - - default: - modified = (ch < MIN_FORM_COMMAND - && isprint(ch)); - break; - } - - /* - * If we do not force a re-validation, then field_buffer 0 will - * be lagging by one character. - */ - if (modified && form_driver(form, REQ_VALIDATION) == E_OK && *result - < MIN_FORM_COMMAND) - ++length; - - set_buffer_length(before, length); - } - - if (current_field(form) != before) - inactive_field(before); - return status; -} - -static void -demo_forms(void) -{ - FORM *form; - int c; - unsigned n = 0; - const char *fname; - - /* describe the form */ - all_fields[n++] = make_label("Sample Form", 0, 15); - - fname = "Last Name"; - all_fields[n++] = make_label(fname, 2, 0); - all_fields[n++] = make_field(3, 0, 1, 18); - set_field_type(all_fields[n - 1], TYPE_ALPHA, 1); - - fname = "First Name"; - all_fields[n++] = make_label(fname, 2, 20); - all_fields[n++] = make_field(3, 20, 1, 12); - set_field_type(all_fields[n - 1], TYPE_ALPHA, 1); - - fname = "Middle Name"; - all_fields[n++] = make_label(fname, 2, 34); - all_fields[n++] = make_field(3, 34, 1, 12); - set_field_type(all_fields[n - 1], TYPE_ALPHA, 1); - - fname = "Comments"; - all_fields[n++] = make_label(fname, 5, 0); - all_fields[n++] = make_field(6, 0, 4, 46); - init_edit_field(all_fields[n - 1], empty); - - all_fields[n] = (FIELD *) 0; - - if ((form = new_form(all_fields)) != 0) { - int finished = 0; - - post_form(form); - - while (!finished) { - switch (my_edit_field(form, &c)) { - case E_OK: - break; - case E_UNKNOWN_COMMAND: - finished = my_form_driver(form, c); - break; - default: - beep(); - break; - } - } - - erase_form(form); - - free_form(form); - } - for (c = 0; all_fields[c] != 0; c++) { - free_edit_field(all_fields[c]); - free_field(all_fields[c]); - } - noraw(); - nl(); -} - -int -main(void) -{ - setlocale(LC_ALL, ""); - - initscr(); - cbreak(); - noecho(); - raw(); - nonl(); /* lets us read ^M's */ - intrflush(stdscr, FALSE); - keypad(stdscr, TRUE); - - if (has_colors()) { - start_color(); - init_pair(1, COLOR_WHITE, COLOR_BLUE); - init_pair(2, COLOR_GREEN, COLOR_BLACK); - init_pair(3, COLOR_CYAN, COLOR_BLACK); - bkgd((chtype) COLOR_PAIR(1)); - refresh(); - } - - demo_forms(); - - endwin(); - ExitProgram(EXIT_SUCCESS); -} - -#else -int -main(void) -{ - printf("This program requires the curses form library\n"); - ExitProgram(EXIT_FAILURE); -} -#endif |