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.10 2017/04/15 21:40:50 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 failed("color_content");
91 r = (adjust + 1000 + r) % 1000;
92 g = (adjust + 1000 + g) % 1000;
93 b = (adjust + 1000 + b) % 1000;
96 i = init_extended_color_sp(sp, color, r, g, b);
98 i = init_extended_color(color, r, g, b);
101 failed("init_color");
105 do_color_set(const char *expected, int pair)
107 int i = color_set((short) pair, (void *) &pair);
108 printw("%s (%s)\n", expected, SHOW(i));
115 show_1_rgb(SCREEN *sp, const char *name, int color, int y, int x)
120 i = extended_color_content_sp(sp, color, &r, &g, &b);
122 i = extended_color_content(color, &r, &g, &b);
126 printw("%-8s %3d/%3d/%3d", name, r, g, b);
128 printw("%-8s %s", name, SHOW(i));
137 show_1_rgb(sp, "RED", COLOR_RED, y + 1, x);
138 show_1_rgb(sp, "GREEN", COLOR_GREEN, y + 2, x);
139 show_1_rgb(sp, "BLUE", COLOR_BLUE, y + 3, x);
146 static const char *tbl[] =
148 "Usage: extended_color",
155 for (n = 0; n < SIZEOF(tbl); ++n) {
156 fprintf(stderr, "%s\n", tbl[n]);
158 ExitProgram(EXIT_FAILURE);
162 main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
167 while ((i = getopt(argc, argv, "s")) != -1) {
179 sp = newterm(NULL, stdout, stdin);
185 fprintf(stderr, "This demo requires a color terminal\n");
186 ExitProgram(EXIT_FAILURE);
191 do_pair_content(sp, 0);
193 printw("Initializing pair 1 to red/black\n");
194 do_init_pair(sp, 1, COLOR_RED, COLOR_BLACK);
195 do_color_set("RED/BLACK", 1);
197 printw("Initializing pair 2 to white/blue\n");
198 do_init_pair(sp, 2, COLOR_WHITE, COLOR_BLUE);
199 do_color_set("WHITE/BLUE", 2);
201 printw("Initializing pair 3 to green/black\n");
202 do_init_pair(sp, 3, COLOR_GREEN, COLOR_BLACK);
203 do_color_set("GREEN/BLACK", 3);
205 printw("Resetting colors to pair 0\n");
206 do_color_set("Default Colors", 0);
208 printw("Resetting colors to pair 1\n");
209 do_color_set("RED/BLACK", 1);
211 printw("Drawing soft-key tabs with pair 2\n");
212 slk_attrset(A_BOLD); /* reverse-video is hard to see */
214 extended_slk_color_sp(sp, 2);
216 extended_slk_color(2);
218 for (i = 1; i <= 8; ++i) {
220 sprintf(temp, "(SLK-%d)", i);
226 if (opt_s ? can_change_color_sp(sp) : can_change_color()) {
227 do_color_set("Default Colors", 0);
228 printw("Press any key to stop...\n");
229 nodelay(stdscr, TRUE);
230 while (getch() == ERR) {
232 do_init_color(sp, COLOR_RED, 1);
233 do_init_color(sp, COLOR_BLUE, -1);
237 nodelay(stdscr, FALSE);
243 ExitProgram(EXIT_SUCCESS);
250 printf("This program requires the ncurses extended color/pair functions\n");
251 ExitProgram(EXIT_FAILURE);