X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fsavescreen.c;h=01bfe06b687752012c833a521b5ce24dba723f4b;hp=44d7d1ca1a6b4223b0f1b8faeb8c3ef27210f070;hb=ed3eb506e9a8e6ea871a2eb5818e19ba36f3f277;hpb=aefc1659d732acf7e62c0c78a443d6d8352a3c6e diff --git a/test/savescreen.c b/test/savescreen.c index 44d7d1ca..01bfe06b 100644 --- a/test/savescreen.c +++ b/test/savescreen.c @@ -26,7 +26,7 @@ * authorization. * ****************************************************************************/ /* - * $Id: savescreen.c,v 1.21 2015/03/07 21:55:35 tom Exp $ + * $Id: savescreen.c,v 1.27 2015/03/28 23:21:28 tom Exp $ * * Demonstrate save/restore functions from the curses library. * Thomas Dickey - 2007/7/14 @@ -51,6 +51,7 @@ #endif static bool use_init = FALSE; +static bool keep_dumps = FALSE; static int fexists(const char *name) @@ -71,8 +72,10 @@ cleanup(char *files[]) { int n; - for (n = 0; files[n] != 0; ++n) { - unlink(files[n]); + if (!keep_dumps) { + for (n = 0; files[n] != 0; ++n) { + unlink(files[n]); + } } } @@ -208,8 +211,10 @@ usage(void) "Usage: savescreen [-r] files", "", "Options:", - " -i use scr_init/scr_restore rather than scr_set", - " -r replay the screen-dump files" + " -f file fill/initialize screen using text from this file", + " -i use scr_init/scr_restore rather than scr_set", + " -k keep the restored dump-files rather than removing them", + " -r replay the screen-dump files" }; unsigned n; for (n = 0; n < SIZEOF(msg); ++n) { @@ -227,12 +232,25 @@ main(int argc, char *argv[]) bool replaying = FALSE; bool done = FALSE; char **files; + char *fill_by = 0; +#if USE_WIDEC_SUPPORT + cchar_t mycc; + int myxx; +#endif + + setlocale(LC_ALL, ""); - while ((ch = getopt(argc, argv, "ir")) != -1) { + while ((ch = getopt(argc, argv, "f:ikr")) != -1) { switch (ch) { + case 'f': + fill_by = optarg; + break; case 'i': use_init = TRUE; break; + case 'k': + keep_dumps = TRUE; + break; case 'r': replaying = TRUE; break; @@ -268,7 +286,32 @@ main(int argc, char *argv[]) */ for (pair = 0; pair < COLOR_PAIRS; ++pair) { color = (short) (pair % (COLORS - 1)); - init_pair(pair, COLOR_WHITE - color, color); + init_pair(pair, (short) (COLOR_WHITE - color), color); + } + } + + if (fill_by != 0) { + FILE *fp = fopen(fill_by, "r"); + if (fp != 0) { + bool filled = FALSE; + move(1, 0); + while ((ch = fgetc(fp)) != EOF) { + if (addch(UChar(ch)) == ERR) { + filled = TRUE; + break; + } + } + fclose(fp); + if (!filled) { + while (addch(' ') != ERR) { + ; + } + } + move(0, 0); + } else { + endwin(); + fprintf(stderr, "Cannot open \"%s\"\n", fill_by); + ExitProgram(EXIT_FAILURE); } } @@ -376,7 +419,17 @@ main(int argc, char *argv[]) for (cx = 0; cx < COLS; ++cx) { wmove(curscr, cy, cx); wmove(stdscr, cy, cx); +#if USE_WIDEC_SUPPORT + if (win_wch(curscr, &mycc) != ERR) { + myxx = wcwidth(mycc.chars[0]); + if (myxx > 0) { + wadd_wchnstr(stdscr, &mycc, 1); + cx += (myxx - 1); + } + } +#else waddch(stdscr, winch(curscr)); +#endif } } }