1 /****************************************************************************
2 * Copyright (c) 2017-2018,2019 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.14 2019/08/24 23:09:18 tom Exp $
32 #include <test.priv.h>
34 #if USE_EXTENDED_COLOR
36 #define SHOW(n) ((n) == ERR ? "ERR" : "OK")
39 static bool opt_s = FALSE;
40 #define if_opt_s(a,b) (opt_s ? (a) : (b))
42 #define if_opt_s(a,b) (b)
46 failed(const char *name)
48 printw("...%s failed", name);
51 ExitProgram(EXIT_FAILURE);
55 do_pair_content(SCREEN *sp, int pair)
60 i = if_opt_s(extended_pair_content_sp(sp, pair, &f, &b),
61 extended_pair_content(0, &f, &b));
63 failed("pair_content");
64 printw("pair %d contains (%d,%d)\n", pair, f, b);
69 do_init_pair(SCREEN *sp, int pair, int fg, int bg)
74 i = if_opt_s(init_extended_pair_sp(sp, pair, fg, bg),
75 init_extended_pair(pair, fg, bg));
81 do_init_color(SCREEN *sp, int color, int adjust)
87 i = if_opt_s(extended_color_content_sp(sp, color, &r, &g, &b),
88 extended_color_content(color, &r, &g, &b));
90 failed("color_content");
92 r = (adjust + 1000 + r) % 1000;
93 g = (adjust + 1000 + g) % 1000;
94 b = (adjust + 1000 + b) % 1000;
96 i = if_opt_s(init_extended_color_sp(sp, color, r, g, b),
97 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)
119 i = if_opt_s(extended_color_content_sp(sp, color, &r, &g, &b),
120 extended_color_content(color, &r, &g, &b));
123 printw("%-8s %3d/%3d/%3d", name, r, g, b);
125 printw("%-8s %s", name, SHOW(i));
134 show_1_rgb(sp, "RED", COLOR_RED, y + 1, x);
135 show_1_rgb(sp, "GREEN", COLOR_GREEN, y + 2, x);
136 show_1_rgb(sp, "BLUE", COLOR_BLUE, y + 3, x);
143 static const char *tbl[] =
145 "Usage: extended_color",
152 for (n = 0; n < SIZEOF(tbl); ++n) {
153 fprintf(stderr, "%s\n", tbl[n]);
155 ExitProgram(EXIT_FAILURE);
159 main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
164 while ((i = getopt(argc, argv, "s")) != -1) {
178 sp = newterm(NULL, stdout, stdin);
184 fprintf(stderr, "This demo requires a color terminal\n");
185 ExitProgram(EXIT_FAILURE);
190 do_pair_content(sp, 0);
192 printw("Initializing pair 1 to red/black\n");
193 do_init_pair(sp, 1, COLOR_RED, COLOR_BLACK);
194 do_color_set("RED/BLACK", 1);
196 printw("Initializing pair 2 to white/blue\n");
197 do_init_pair(sp, 2, COLOR_WHITE, COLOR_BLUE);
198 do_color_set("WHITE/BLUE", 2);
200 printw("Initializing pair 3 to green/black\n");
201 do_init_pair(sp, 3, COLOR_GREEN, COLOR_BLACK);
202 do_color_set("GREEN/BLACK", 3);
204 printw("Resetting colors to pair 0\n");
205 do_color_set("Default Colors", 0);
207 printw("Resetting colors to pair 1\n");
208 do_color_set("RED/BLACK", 1);
210 printw("Drawing soft-key tabs with pair 2\n");
211 slk_attrset(A_BOLD); /* reverse-video is hard to see */
212 (void) if_opt_s(extended_slk_color_sp(sp, 2),
213 extended_slk_color(2));
214 for (i = 1; i <= 8; ++i) {
216 _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "(SLK-%d)", i);
222 i = if_opt_s(can_change_color_sp(sp),
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);