X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fsavescreen.c;h=4c767a5251104fb232e4906e4bb19f32b713451e;hp=722e4bb584ced4009ebdab983112e96da51a303b;hb=91d451ffc473b358d8d74506d2da8871e44fbd7b;hpb=e33150410925e7858dacebb585a9bd90db683d86 diff --git a/test/savescreen.c b/test/savescreen.c index 722e4bb5..4c767a52 100644 --- a/test/savescreen.c +++ b/test/savescreen.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2007-2017,2018 Free Software Foundation, Inc. * + * Copyright 2018-2020,2021 Thomas E. Dickey * + * Copyright 2006-2017,2018 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,31 +27,22 @@ * authorization. * ****************************************************************************/ /* - * $Id: savescreen.c,v 1.51 2018/01/14 17:39:47 tom Exp $ + * $Id: savescreen.c,v 1.58 2021/03/27 23:41:21 tom Exp $ * * Demonstrate save/restore functions from the curses library. * Thomas Dickey - 2007/7/14 */ +#define NEED_TIME_H #include #include +#include #if HAVE_SCR_DUMP #include #include -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - #if defined(__hpux) #define MyMarker 'X' #else @@ -68,10 +60,12 @@ static wchar_t BaseChar(cchar_t data) { wchar_t my_wchar[CCHARW_MAX]; + wchar_t result = 0; attr_t my_attr; short my_pair; - getcchar(&data, my_wchar, &my_attr, &my_pair, NULL); - return my_wchar[0]; + if (getcchar(&data, my_wchar, &my_attr, &my_pair, NULL) == OK) + result = my_wchar[0]; + return result; } #endif @@ -92,9 +86,9 @@ setup_next(void) static void cleanup(char *files[]) { - int n; - if (!keep_dumps) { + int n; + for (n = 0; files[n] != 0; ++n) { unlink(files[n]); } @@ -175,7 +169,6 @@ dump_screen(char **files, int color, int which, int last, bool use_colors) { #if USE_WIDEC_SUPPORT cchar_t mycc; - int myxx; #endif char *filename = files[which]; bool dumped = FALSE; @@ -204,7 +197,7 @@ dump_screen(char **files, int color, int which, int last, bool use_colors) wmove(stdscr, cy, cx); #if USE_WIDEC_SUPPORT if (win_wch(curscr, &mycc) != ERR) { - myxx = wcwidth(BaseChar(mycc)); + int myxx = wcwidth(BaseChar(mycc)); if (myxx > 0) { wadd_wchnstr(stdscr, &mycc, 1); cx += (myxx - 1); @@ -291,14 +284,9 @@ main(int argc, char *argv[]) char **files; char *fill_by = 0; #if USE_WIDEC_SUPPORT - int r, g, b; - int cube = 0; - int cube0 = 16; - int cube1; cchar_t mycc; static const wchar_t mywc[2] = {L'#', 0}; - bool using_rgb = FALSE; #endif setlocale(LC_ALL, ""); @@ -338,6 +326,9 @@ main(int argc, char *argv[]) curs_set(0); if (has_colors() && (start_color() == OK) && COLORS >= MAX_ANSI) { +#if USE_WIDEC_SUPPORT + bool using_rgb = FALSE; +#endif static const struct { int fg, bg; } table[MAX_ANSI] = { @@ -374,42 +365,45 @@ main(int argc, char *argv[]) init_pair((short) (n + MAX_ANSI), (short) n, (short) n); } #if HAVE_TIGETSTR && USE_WIDEC_SUPPORT - else if (tigetflag("RGB") > 0) { - int rows = LINES - 1; - int cols = COLS - 1; - /* FIXME: test all 3 types of capability */ - int b_max = 255; - int r_max = 255; - int g_max = 255; - int b_delta = (b_max / rows); - int r_delta = (r_max / cols); - int g_delta = (g_max / cols); - int row = 0; - - b = 0; - using_rgb = TRUE; - while (row++ < rows) { - int col = 0; - r = 0; - g = g_max; - while (col++ < cols) { - int color = (((r * (g_max + 1)) + g) * (b_max + 1) - + b + MAX_ANSI); -#if HAVE_INIT_EXTENDED_COLOR - init_extended_pair(pair, color, color); + else { + int r_max, g_max, b_max; + + if (parse_rgb(&r_max, &g_max, &b_max) > 0) { + int rows = LINES - 1; + int cols = COLS - 1; + int b_delta = (b_max / rows); + int r_delta = (r_max / cols); + int g_delta = (g_max / cols); + int row = 0; + int b = 0; + + using_rgb = TRUE; + while (row++ < rows) { + int col = 0; + int r = 0; + int g = g_max; + while (col++ < cols) { + int color = (((r * (g_max + 1)) + g) * (b_max + 1) + + b + MAX_ANSI); +#if USE_EXTENDED_COLOR + init_extended_pair(pair, color, color); #else - init_pair(pair, color, color); + init_pair(pair, color, color); #endif - pair++; - r += r_delta; - g -= g_delta; + pair++; + r += r_delta; + g -= g_delta; + } + b += b_delta; } - b += b_delta; } } #endif } if ((fill_by == 0) && !replaying) { +#if USE_WIDEC_SUPPORT + int cube = 0; +#endif /* * Originally (before wide-characters) ncurses supported 16 colors. */ @@ -434,8 +428,9 @@ main(int argc, char *argv[]) cube = 6; } if (cube != 0) { - cube0 = 16; - cube1 = cube0 + (cube * cube * cube); + int r, g, b; + int cube0 = 16; + int cube1 = cube0 + (cube * cube * cube); addch('\n'); printw("Color cube, %dx%dx%d:\n", cube, cube, cube); @@ -466,7 +461,6 @@ main(int argc, char *argv[]) int cols = COLS - 1; int row = 0; - b = 0; pair = MAX_ANSI; while (row++ < rows) { int col = 0; @@ -502,7 +496,7 @@ main(int argc, char *argv[]) } move(0, 0); } else { - exit_curses(); + stop_curses(); fprintf(stderr, "Cannot open \"%s\"\n", fill_by); ExitProgram(EXIT_FAILURE); } @@ -514,14 +508,14 @@ main(int argc, char *argv[]) * Use the last file as the initial/current screen. */ if (last < 0) { - exit_curses(); + stop_curses(); printf("No screen-dumps given\n"); ExitProgram(EXIT_FAILURE); } which = last; if (load_screen(files[which]) == ERR) { - exit_curses(); + stop_curses(); printf("Cannot load screen-dump %s\n", files[which]); ExitProgram(EXIT_FAILURE); }