X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Finch_wide.c;h=3d31f1787fa2e84b645698b8c01b5e8f1c2da678;hp=60fec7096c3d96e64b625ceef885c047848e80d8;hb=bcdff1f4b369c01b695ca2b73e9aaac54f9c4526;hpb=614ef82f41eda084798068d715ef91b072014ca9;ds=sidebyside diff --git a/test/inch_wide.c b/test/inch_wide.c index 60fec709..3d31f178 100644 --- a/test/inch_wide.c +++ b/test/inch_wide.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2007 Free Software Foundation, Inc. * + * Copyright (c) 2007,2010 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 * @@ -26,7 +26,7 @@ * authorization. * ****************************************************************************/ /* - * $Id: inch_wide.c,v 1.3 2007/02/11 00:32:58 tom Exp $ + * $Id: inch_wide.c,v 1.7 2010/05/01 19:13:46 tom Exp $ */ /* int in_wch(cchar_t *wcval); @@ -47,68 +47,67 @@ #if USE_WIDEC_SUPPORT +#define BASE_Y 7 #define MAX_COLS 1024 static bool Quit(int ch) { - return (ch == ERR || ch == QUIT || ch == ESCAPE); + return (ch == ERR || ch == 'q' || ch == QUIT || ch == ESCAPE); } -int -main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) +static int +test_inchs(int level, char **argv, WINDOW *chrwin, WINDOW *strwin) { - WINDOW *txtbox; - WINDOW *txtwin; - WINDOW *chrbox; - WINDOW *chrwin; - WINDOW *strwin; + WINDOW *txtbox = 0; + WINDOW *txtwin = 0; FILE *fp; int j; int txt_x = 0, txt_y = 0; + int base_y; int limit; cchar_t ch; cchar_t text[MAX_COLS]; - setlocale(LC_ALL, ""); - - if (argc != 2) { - fprintf(stderr, "usage: %s file\n", argv[0]); - return EXIT_FAILURE; + if (argv[level] == 0) { + beep(); + return FALSE; } - initscr(); + if (level > 1) { + txtbox = newwin(LINES - BASE_Y, COLS - level, BASE_Y, level); + box(txtbox, 0, 0); + wnoutrefresh(txtbox); - chrbox = newwin(7, COLS, 0, 0); - box(chrbox, 0, 0); - wnoutrefresh(chrbox); - - chrwin = derwin(chrbox, 1, COLS - 2, 1, 1); - strwin = derwin(chrbox, 4, COLS - 2, 2, 1); - - txtbox = newwin(LINES - 7, COLS, 7, 0); - box(txtbox, 0, 0); - wnoutrefresh(txtbox); - - txtwin = derwin(txtbox, - getmaxy(txtbox) - 2, - getmaxx(txtbox) - 2, - 1, 1); + txtwin = derwin(txtbox, + getmaxy(txtbox) - 2, + getmaxx(txtbox) - 2, + 1, 1); + base_y = 0; + } else { + txtwin = stdscr; + base_y = BASE_Y; + } keypad(txtwin, TRUE); /* enable keyboard mapping */ (void) cbreak(); /* take input chars one at a time, no wait for \n */ (void) noecho(); /* don't echo input */ - if ((fp = fopen(argv[1], "r")) != 0) { + txt_y = base_y; + txt_x = 0; + wmove(txtwin, txt_y, txt_x); + + if ((fp = fopen(argv[level], "r")) != 0) { while ((j = fgetc(fp)) != EOF) { - if (waddch(txtwin, j) != OK) { + if (waddch(txtwin, UChar(j)) != OK) { break; } } + fclose(fp); } else { wprintw(txtwin, "Cannot open:\n%s", argv[1]); } - fclose(fp); + while (!Quit(j = mvwgetch(txtwin, txt_y, txt_x))) { switch (j) { case KEY_DOWN: @@ -120,7 +119,7 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) break; case KEY_UP: case 'k': - if (txt_y > 0) + if (txt_y > base_y) txt_y--; else beep(); @@ -139,56 +138,136 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED) else beep(); break; + case 'w': + test_inchs(level + 1, argv, chrwin, strwin); + if (txtbox != 0) { + touchwin(txtbox); + wnoutrefresh(txtbox); + } else { + touchwin(txtwin); + wnoutrefresh(txtwin); + } + break; + default: + beep(); + break; } - wmove(txtwin, txt_y, txt_x); - - mvwprintw(chrwin, 0, 0, "char:"); + MvWPrintw(chrwin, 0, 0, "char:"); wclrtoeol(chrwin); - if (win_wch(txtwin, &ch) != ERR) { - if (wadd_wch(chrwin, &ch) != ERR) { - for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { - if (mvwin_wch(txtwin, txt_y, j, &ch) != ERR) { - if (wadd_wch(chrwin, &ch) == ERR) { + + if (txtwin != stdscr) { + wmove(txtwin, txt_y, txt_x); + if (win_wch(txtwin, &ch) != ERR) { + if (wadd_wch(chrwin, &ch) != ERR) { + for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { + if (mvwin_wch(txtwin, txt_y, j, &ch) != ERR) { + if (wadd_wch(chrwin, &ch) == ERR) { + break; + } + } else { + break; + } + } + } + } + } else { + move(txt_y, txt_x); + if (in_wch(&ch) != ERR) { + if (wadd_wch(chrwin, &ch) != ERR) { + for (j = txt_x + 1; j < getmaxx(txtwin); ++j) { + if (mvin_wch(txt_y, j, &ch) != ERR) { + if (wadd_wch(chrwin, &ch) == ERR) { + break; + } + } else { break; } - } else { - break; } } } } wnoutrefresh(chrwin); - mvwprintw(strwin, 0, 0, "text:"); + MvWPrintw(strwin, 0, 0, "text:"); wclrtobot(strwin); limit = getmaxx(strwin) - 5; - wmove(txtwin, txt_y, txt_x); - if (win_wchstr(txtwin, text) != ERR) { - mvwadd_wchstr(strwin, 0, 5, text); - } + if (txtwin != stdscr) { + wmove(txtwin, txt_y, txt_x); + if (win_wchstr(txtwin, text) != ERR) { + (void) mvwadd_wchstr(strwin, 0, 5, text); + } - wmove(txtwin, txt_y, txt_x); - if (win_wchnstr(txtwin, text, limit) != ERR) { - mvwadd_wchstr(strwin, 1, 5, text); - } + wmove(txtwin, txt_y, txt_x); + if (win_wchnstr(txtwin, text, limit) != ERR) { + (void) mvwadd_wchstr(strwin, 1, 5, text); + } - if (mvwin_wchstr(txtwin, txt_y, txt_x, text) != ERR) { - mvwadd_wchstr(strwin, 2, 5, text); - } + if (mvwin_wchstr(txtwin, txt_y, txt_x, text) != ERR) { + (void) mvwadd_wchstr(strwin, 2, 5, text); + } + + if (mvwin_wchnstr(txtwin, txt_y, txt_x, text, limit) != ERR) { + (void) mvwadd_wchstr(strwin, 3, 5, text); + } + } else { + move(txt_y, txt_x); + if (in_wchstr(text) != ERR) { + (void) mvwadd_wchstr(strwin, 0, 5, text); + } + + move(txt_y, txt_x); + if (in_wchnstr(text, limit) != ERR) { + (void) mvwadd_wchstr(strwin, 1, 5, text); + } + + if (mvin_wchstr(txt_y, txt_x, text) != ERR) { + (void) mvwadd_wchstr(strwin, 2, 5, text); + } - if (mvwin_wchnstr(txtwin, txt_y, txt_x, text, limit) != ERR) { - mvwadd_wchstr(strwin, 3, 5, text); + if (mvin_wchnstr(txt_y, txt_x, text, limit) != ERR) { + (void) mvwadd_wchstr(strwin, 3, 5, text); + } } wnoutrefresh(strwin); + } + if (level > 1) { + delwin(txtwin); + delwin(txtbox); + } + return TRUE; +} - /* FIXME: want stdscr tests also, but must be separate program */ +int +main(int argc, char *argv[]) +{ + WINDOW *chrbox; + WINDOW *chrwin; + WINDOW *strwin; + + setlocale(LC_ALL, ""); + + if (argc < 2) { + fprintf(stderr, "usage: %s file\n", argv[0]); + return EXIT_FAILURE; } + + initscr(); + + chrbox = derwin(stdscr, BASE_Y, COLS, 0, 0); + box(chrbox, 0, 0); + wnoutrefresh(chrbox); + + chrwin = derwin(chrbox, 1, COLS - 2, 1, 1); + strwin = derwin(chrbox, 4, COLS - 2, 2, 1); + + test_inchs(1, argv, chrwin, strwin); + endwin(); - return EXIT_SUCCESS; + ExitProgram(EXIT_SUCCESS); } #else int