1 /****************************************************************************
2 * Copyright (c) 2017 Free Software Foundation, Inc. *
4 * Permission is hereby granted, free of charge, to any person obtaining a *
5 * copy of this software and associated documentation files (the *
6 * "Software"), to deal in the Software without restriction, including *
7 * without limitation the rights to use, copy, modify, merge, publish, *
8 * distribute, distribute with modifications, sublicense, and/or sell *
9 * copies of the Software, and to permit persons to whom the Software is *
10 * furnished to do so, subject to the following conditions: *
12 * The above copyright notice and this permission notice shall be included *
13 * in all copies or substantial portions of the Software. *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
18 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
21 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
23 * Except as contained in this notice, the name(s) of the above copyright *
24 * holders shall not be used in advertising or otherwise to promote the *
25 * sale, use or other dealings in this Software without prior written *
27 ****************************************************************************/
29 * $Id: extended_color.c,v 1.9 2017/04/02 14:30:26 tom Exp $
32 #include <test.priv.h>
34 #if HAVE_INIT_EXTENDED_COLOR
36 #define SHOW(n) ((n) == ERR ? "ERR" : "OK")
38 static bool opt_s = FALSE;
41 failed(const char *name)
43 printw("...%s failed", name);
46 ExitProgram(EXIT_FAILURE);
50 do_pair_content(SCREEN *sp, int pair)
55 i = extended_pair_content_sp(sp, pair, &f, &b);
57 i = extended_pair_content(0, &f, &b);
60 failed("pair_content");
61 printw("pair %d contains (%d,%d)\n", pair, f, b);
66 do_init_pair(SCREEN *sp, int pair, int fg, int bg)
70 i = init_extended_pair_sp(sp, pair, fg, bg);
72 i = init_extended_pair(pair, fg, bg);
79 do_init_color(SCREEN *sp, int color, int adjust)
84 i = extended_color_content_sp(sp, color, &r, &g, &b);
86 i = extended_color_content(color, &r, &g, &b);
89 r = (adjust + 1000 + r) % 1000;
90 g = (adjust + 1000 + g) % 1000;
91 b = (adjust + 1000 + b) % 1000;
94 i = init_extended_color_sp(sp, color, r, g, b);
96 i = init_extended_color(color, r, g, b);
103 do_color_set(const char *expected, int pair)
105 int i = color_set((short) pair, (void *) &pair);
106 printw("%s (%s)\n", expected, SHOW(i));
113 show_1_rgb(SCREEN *sp, const char *name, int color, int y, int x)
118 i = extended_color_content_sp(sp, color, &r, &g, &b);
120 i = extended_color_content(color, &r, &g, &b);
124 printw("%-8s %3d/%3d/%3d", name, r, g, b);
126 printw("%-8s %s", name, SHOW(i));
135 show_1_rgb(sp, "RED", COLOR_RED, y + 1, x);
136 show_1_rgb(sp, "GREEN", COLOR_GREEN, y + 2, x);
137 show_1_rgb(sp, "BLUE", COLOR_BLUE, y + 3, x);
144 static const char *tbl[] =
146 "Usage: extended_color",
153 for (n = 0; n < SIZEOF(tbl); ++n) {
154 fprintf(stderr, "%s\n", tbl[n]);
156 ExitProgram(EXIT_FAILURE);
160 main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
165 while ((i = getopt(argc, argv, "s")) != -1) {
177 sp = newterm(NULL, stdout, stdin);
183 fprintf(stderr, "This demo requires a color terminal\n");
184 ExitProgram(EXIT_FAILURE);
189 do_pair_content(sp, 0);
191 printw("Initializing pair 1 to red/black\n");
192 do_init_pair(sp, 1, COLOR_RED, COLOR_BLACK);
193 do_color_set("RED/BLACK", 1);
195 printw("Initializing pair 2 to white/blue\n");
196 do_init_pair(sp, 2, COLOR_WHITE, COLOR_BLUE);
197 do_color_set("WHITE/BLUE", 2);
199 printw("Initializing pair 3 to green/black\n");
200 do_init_pair(sp, 3, COLOR_GREEN, COLOR_BLACK);
201 do_color_set("GREEN/BLACK", 3);
203 printw("Resetting colors to pair 0\n");
204 do_color_set("Default Colors", 0);
206 printw("Resetting colors to pair 1\n");
207 do_color_set("RED/BLACK", 1);
209 printw("Drawing soft-key tabs with pair 2\n");
210 slk_attrset(A_BOLD); /* reverse-video is hard to see */
212 extended_slk_color_sp(sp, 2);
214 extended_slk_color(2);
216 for (i = 1; i <= 8; ++i) {
218 sprintf(temp, "(SLK-%d)", i);
224 if (opt_s ? can_change_color_sp(sp) : can_change_color()) {
225 do_color_set("Default Colors", 0);
226 printw("Press any key to stop...\n");
227 nodelay(stdscr, TRUE);
228 while (getch() == ERR) {
230 do_init_color(sp, COLOR_RED, 1);
231 do_init_color(sp, COLOR_BLUE, -1);
235 nodelay(stdscr, FALSE);
241 ExitProgram(EXIT_SUCCESS);
248 printf("This program requires the ncurses extended color/pair functions\n");
249 ExitProgram(EXIT_FAILURE);