X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fsavescreen.c;h=111882d0b55888fb9f5fe6a1dee604f16fce6ea0;hp=24e8a658309ee589320b0355e7270e2af73d2d15;hb=67ab4b308e932639a3a832052228d445c41c54b4;hpb=c13e57306ae5c4431fddd0fe856c3bcae6aeeb2c diff --git a/test/savescreen.c b/test/savescreen.c old mode 100755 new mode 100644 index 24e8a658..111882d0 --- a/test/savescreen.c +++ b/test/savescreen.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2007 Free Software Foundation, Inc. * + * Copyright (c) 2007-2010,2011 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,18 +26,19 @@ * authorization. * ****************************************************************************/ /* - * $Id: savescreen.c,v 1.9 2007/07/14 23:16:55 tom Exp $ + * $Id: savescreen.c,v 1.15 2011/01/15 18:15:11 tom Exp $ * * Demonstrate save/restore functions from the curses library. * Thomas Dickey - 2007/7/14 */ -/* -scr_set - -scr_init - -*/ #include +#if HAVE_SCR_DUMP + +#include +#include + #if TIME_WITH_SYS_TIME # include # include @@ -49,6 +50,15 @@ scr_init - # endif #endif +static bool use_init = FALSE; + +static int +fexists(const char *name) +{ + struct stat sb; + return (stat(name, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFREG); +} + static void setup_next(void) { @@ -66,6 +76,20 @@ cleanup(char *files[]) } } +static int +load_screen(char *filename) +{ + int result; + + if (use_init) { + if ((result = scr_init(filename)) != ERR) + result = scr_restore(filename); + } else { + result = scr_set(filename); + } + return result; +} + /* * scr_restore() or scr_set() operates on curscr. If we read a character using * getch() that will refresh stdscr, wiping out the result. To avoid that, @@ -117,6 +141,7 @@ usage(void) "Usage: savescreen [-r] files", "", "Options:", + " -i use scr_init/scr_restore rather than scr_set", " -r replay the screen-dump files" }; unsigned n; @@ -136,8 +161,11 @@ main(int argc, char *argv[]) bool done = FALSE; char **files; - while ((ch = getopt(argc, argv, "r")) != -1) { + while ((ch = getopt(argc, argv, "ir")) != -1) { switch (ch) { + case 'i': + use_init = TRUE; + break; case 'r': replaying = TRUE; break; @@ -147,6 +175,14 @@ main(int argc, char *argv[]) } } + files = argv + optind; + last = argc - optind - 1; + + if (replaying) { + while (last >= 0 && !fexists(files[last])) + --last; + } + initscr(); cbreak(); noecho(); @@ -155,13 +191,11 @@ main(int argc, char *argv[]) if (has_colors()) { start_color(); for (ch = 0; ch < COLOR_PAIRS; ++ch) { - short pair = ch % COLOR_PAIRS; - init_pair(pair, COLOR_WHITE, ch % COLORS); + short pair = (short) (ch % COLOR_PAIRS); + init_pair(pair, COLOR_WHITE, (short) (ch % COLORS)); } } - files = argv + optind; - last = argc - optind - 1; if (replaying) { /* @@ -174,7 +208,7 @@ main(int argc, char *argv[]) } which = last; - if (scr_set(files[which]) == ERR) { + if (load_screen(files[which]) == ERR) { endwin(); printf("Cannot load screen-dump %s\n", files[which]); ExitProgram(EXIT_FAILURE); @@ -235,7 +269,7 @@ main(int argc, char *argv[]) getyx(stdscr, y, x); while (!done) { - switch (ch = get_command(which, last)) { + switch (get_command(which, last)) { case 'n': setup_next(); done = TRUE; @@ -257,8 +291,8 @@ main(int argc, char *argv[]) } ++which; if (has_colors()) { - short pair = which % COLOR_PAIRS; - bkgd(COLOR_PAIR(pair)); + short pair = (short) (which % COLOR_PAIRS); + bkgd((chtype) COLOR_PAIR(pair)); } } else { beep(); @@ -298,3 +332,11 @@ main(int argc, char *argv[]) } ExitProgram(EXIT_SUCCESS); } +#else +int +main(int argc, char *argv[]) +{ + printf("This program requires the screen-dump functions\n"); + ExitProgram(EXIT_FAILURE); +} +#endif