xref: /freebsd/contrib/bsddialog/lib/theme.c (revision 61ba55bcf70f2340f9c943c9571113b3fd8eda69)
1c76f0793SBaptiste Daroussin /*-
2c76f0793SBaptiste Daroussin  * SPDX-License-Identifier: BSD-2-Clause
3c76f0793SBaptiste Daroussin  *
4*61ba55bcSBaptiste Daroussin  * Copyright (c) 2021-2023 Alfonso Sabato Siciliano
5c76f0793SBaptiste Daroussin  *
6c76f0793SBaptiste Daroussin  * Redistribution and use in source and binary forms, with or without
7c76f0793SBaptiste Daroussin  * modification, are permitted provided that the following conditions
8c76f0793SBaptiste Daroussin  * are met:
9c76f0793SBaptiste Daroussin  * 1. Redistributions of source code must retain the above copyright
10c76f0793SBaptiste Daroussin  *    notice, this list of conditions and the following disclaimer.
11c76f0793SBaptiste Daroussin  * 2. Redistributions in binary form must reproduce the above copyright
12c76f0793SBaptiste Daroussin  *    notice, this list of conditions and the following disclaimer in the
13c76f0793SBaptiste Daroussin  *    documentation and/or other materials provided with the distribution.
14c76f0793SBaptiste Daroussin  *
15c76f0793SBaptiste Daroussin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16c76f0793SBaptiste Daroussin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17c76f0793SBaptiste Daroussin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18c76f0793SBaptiste Daroussin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19c76f0793SBaptiste Daroussin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20c76f0793SBaptiste Daroussin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21c76f0793SBaptiste Daroussin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22c76f0793SBaptiste Daroussin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23c76f0793SBaptiste Daroussin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24c76f0793SBaptiste Daroussin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25c76f0793SBaptiste Daroussin  * SUCH DAMAGE.
26c76f0793SBaptiste Daroussin  */
27c76f0793SBaptiste Daroussin 
28263660c0SAlfonso Siciliano #include <curses.h>
29c76f0793SBaptiste Daroussin 
30c76f0793SBaptiste Daroussin #include "bsddialog.h"
31c76f0793SBaptiste Daroussin #include "bsddialog_theme.h"
32263660c0SAlfonso Siciliano #include "lib_util.h"
33c76f0793SBaptiste Daroussin 
34c76f0793SBaptiste Daroussin #define GET_COLOR(bg, fg) (COLOR_PAIR(bg * 8 + fg +1))
35*61ba55bcSBaptiste Daroussin #define WHITE GET_COLOR(COLOR_WHITE, COLOR_BLACK)
36*61ba55bcSBaptiste Daroussin #define BLACK GET_COLOR(COLOR_WHITE, COLOR_BLACK) | A_REVERSE
37*61ba55bcSBaptiste Daroussin #define NFLAGS 6
38c76f0793SBaptiste Daroussin 
39c76f0793SBaptiste Daroussin struct bsddialog_theme t;
40b319d934SAlfonso S. Siciliano bool hastermcolors;
41c76f0793SBaptiste Daroussin 
42*61ba55bcSBaptiste Daroussin struct flag_converter {
43*61ba55bcSBaptiste Daroussin 	unsigned int public;
44*61ba55bcSBaptiste Daroussin 	unsigned int private;
45*61ba55bcSBaptiste Daroussin };
468c4f4028SBaptiste Daroussin 
47*61ba55bcSBaptiste Daroussin static struct flag_converter flagconv[NFLAGS] = {
48*61ba55bcSBaptiste Daroussin 	{BSDDIALOG_BLINK,      A_BLINK},
49*61ba55bcSBaptiste Daroussin 	{BSDDIALOG_BOLD,       A_BOLD},
50*61ba55bcSBaptiste Daroussin 	{BSDDIALOG_HALFBRIGHT, A_DIM},
51*61ba55bcSBaptiste Daroussin 	{BSDDIALOG_HIGHLIGHT,  A_STANDOUT},
52*61ba55bcSBaptiste Daroussin 	{BSDDIALOG_REVERSE,    A_REVERSE},
53*61ba55bcSBaptiste Daroussin 	{BSDDIALOG_UNDERLINE,  A_UNDERLINE}
54c76f0793SBaptiste Daroussin };
55c76f0793SBaptiste Daroussin 
56c76f0793SBaptiste Daroussin static struct bsddialog_theme blackwhite = {
57*61ba55bcSBaptiste Daroussin 	.screen.color = WHITE,
588c4f4028SBaptiste Daroussin 
59f499134dSBaptiste Daroussin 	.shadow.color = GET_COLOR(COLOR_BLACK, COLOR_BLACK),
60b319d934SAlfonso S. Siciliano 	.shadow.y     = 1,
61b319d934SAlfonso S. Siciliano 	.shadow.x     = 2,
62c76f0793SBaptiste Daroussin 
638c4f4028SBaptiste Daroussin 	.dialog.delimtitle       = true,
64*61ba55bcSBaptiste Daroussin 	.dialog.titlecolor       = WHITE,
65*61ba55bcSBaptiste Daroussin 	.dialog.lineraisecolor   = WHITE,
66*61ba55bcSBaptiste Daroussin 	.dialog.linelowercolor   = WHITE,
67*61ba55bcSBaptiste Daroussin 	.dialog.color            = WHITE,
68*61ba55bcSBaptiste Daroussin 	.dialog.bottomtitlecolor = WHITE,
69*61ba55bcSBaptiste Daroussin 	.dialog.arrowcolor       = WHITE,
70c76f0793SBaptiste Daroussin 
71*61ba55bcSBaptiste Daroussin 	.menu.f_prefixcolor   = WHITE,
72*61ba55bcSBaptiste Daroussin 	.menu.prefixcolor     = WHITE,
73*61ba55bcSBaptiste Daroussin 	.menu.f_selectorcolor = BLACK,
74*61ba55bcSBaptiste Daroussin 	.menu.selectorcolor   = WHITE,
75*61ba55bcSBaptiste Daroussin 	.menu.f_desccolor     = BLACK,
76*61ba55bcSBaptiste Daroussin 	.menu.desccolor       = WHITE,
77*61ba55bcSBaptiste Daroussin 	.menu.f_namecolor     = BLACK,
78*61ba55bcSBaptiste Daroussin 	.menu.namecolor       = WHITE,
79*61ba55bcSBaptiste Daroussin 	.menu.f_shortcutcolor = BLACK | A_UNDERLINE,
80*61ba55bcSBaptiste Daroussin 	.menu.shortcutcolor   = WHITE | A_UNDERLINE,
81*61ba55bcSBaptiste Daroussin 	.menu.bottomdesccolor = WHITE,
82*61ba55bcSBaptiste Daroussin 	.menu.sepnamecolor    = WHITE,
83*61ba55bcSBaptiste Daroussin 	.menu.sepdesccolor    = WHITE,
84c76f0793SBaptiste Daroussin 
85*61ba55bcSBaptiste Daroussin 	.form.f_fieldcolor    = BLACK,
86*61ba55bcSBaptiste Daroussin 	.form.fieldcolor      = WHITE,
87*61ba55bcSBaptiste Daroussin 	.form.readonlycolor   = WHITE,
88*61ba55bcSBaptiste Daroussin 	.form.bottomdesccolor = WHITE,
89c76f0793SBaptiste Daroussin 
90*61ba55bcSBaptiste Daroussin 	.bar.f_color = BLACK,
91*61ba55bcSBaptiste Daroussin 	.bar.color   = WHITE,
92c76f0793SBaptiste Daroussin 
93b319d934SAlfonso S. Siciliano 	.button.minmargin       = 1,
94b319d934SAlfonso S. Siciliano 	.button.maxmargin       = 5,
95bce40c02SAlfonso S. Siciliano 	.button.leftdelim       = '[',
96bce40c02SAlfonso S. Siciliano 	.button.rightdelim      = ']',
97*61ba55bcSBaptiste Daroussin 	.button.f_delimcolor    = WHITE,
98*61ba55bcSBaptiste Daroussin 	.button.delimcolor      = WHITE,
99*61ba55bcSBaptiste Daroussin 	.button.f_color         = BLACK,
100*61ba55bcSBaptiste Daroussin 	.button.color           = WHITE,
101*61ba55bcSBaptiste Daroussin 	.button.f_shortcutcolor = BLACK | A_UNDERLINE | A_BOLD,
102*61ba55bcSBaptiste Daroussin 	.button.shortcutcolor   = WHITE | A_UNDERLINE | A_BOLD
103c76f0793SBaptiste Daroussin };
104c76f0793SBaptiste Daroussin 
105*61ba55bcSBaptiste Daroussin static struct bsddialog_theme flat = {
106263660c0SAlfonso Siciliano 	.screen.color = GET_COLOR(COLOR_CYAN, COLOR_BLUE) | A_BOLD,
1078c4f4028SBaptiste Daroussin 
108f499134dSBaptiste Daroussin 	.shadow.color = GET_COLOR(COLOR_BLACK, COLOR_BLACK),
109b319d934SAlfonso S. Siciliano 	.shadow.y     = 1,
110b319d934SAlfonso S. Siciliano 	.shadow.x     = 2,
111c76f0793SBaptiste Daroussin 
112*61ba55bcSBaptiste Daroussin 	.dialog.delimtitle       = true,
1138c4f4028SBaptiste Daroussin 	.dialog.titlecolor       = GET_COLOR(COLOR_BLUE,  COLOR_WHITE) | A_BOLD,
114*61ba55bcSBaptiste Daroussin 	.dialog.lineraisecolor   = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
115*61ba55bcSBaptiste Daroussin 	.dialog.linelowercolor   = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
1168c4f4028SBaptiste Daroussin 	.dialog.color            = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
1178c4f4028SBaptiste Daroussin 	.dialog.bottomtitlecolor = GET_COLOR(COLOR_BLACK, COLOR_WHITE) | A_BOLD,
118b319d934SAlfonso S. Siciliano 	.dialog.arrowcolor       = GET_COLOR(COLOR_BLUE,  COLOR_WHITE),
119c76f0793SBaptiste Daroussin 
120*61ba55bcSBaptiste Daroussin 	.menu.f_prefixcolor   = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
121*61ba55bcSBaptiste Daroussin 	.menu.prefixcolor     = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
122bce40c02SAlfonso S. Siciliano 	.menu.f_selectorcolor = GET_COLOR(COLOR_WHITE, COLOR_BLUE),
123b319d934SAlfonso S. Siciliano 	.menu.selectorcolor   = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
124263660c0SAlfonso Siciliano 	.menu.f_desccolor     = GET_COLOR(COLOR_WHITE, COLOR_BLUE),
125263660c0SAlfonso Siciliano 	.menu.desccolor       = GET_COLOR(COLOR_BLACK, COLOR_WHITE),
126bce40c02SAlfonso S. Siciliano 	.menu.f_namecolor     = GET_COLOR(COLOR_WHITE, COLOR_BLUE),
127263660c0SAlfonso Siciliano 	.menu.namecolor       = GET_COLOR(COLOR_BLUE,  COLOR_WHITE),
128263660c0SAlfonso Siciliano 	.menu.f_shortcutcolor = GET_COLOR(COLOR_RED,   COLOR_BLUE),
129263660c0SAlfonso Siciliano 	.menu.shortcutcolor   = GET_COLOR(COLOR_RED,   COLOR_WHITE),
130b319d934SAlfonso S. Siciliano 	.menu.bottomdesccolor = GET_COLOR(COLOR_WHITE, COLOR_BLUE),
131*61ba55bcSBaptiste Daroussin 	.menu.sepnamecolor    = GET_COLOR(COLOR_RED,   COLOR_WHITE),
132*61ba55bcSBaptiste Daroussin 	.menu.sepdesccolor    = GET_COLOR(COLOR_RED,   COLOR_WHITE),
133c76f0793SBaptiste Daroussin 
134f499134dSBaptiste Daroussin 	.form.f_fieldcolor    = GET_COLOR(COLOR_WHITE, COLOR_BLUE) | A_BOLD,
135f499134dSBaptiste Daroussin 	.form.fieldcolor      = GET_COLOR(COLOR_WHITE, COLOR_CYAN) | A_BOLD,
136f499134dSBaptiste Daroussin 	.form.readonlycolor   = GET_COLOR(COLOR_CYAN,  COLOR_WHITE)| A_BOLD,
137b319d934SAlfonso S. Siciliano 	.form.bottomdesccolor = GET_COLOR(COLOR_WHITE, COLOR_BLUE),
138c76f0793SBaptiste Daroussin 
139f499134dSBaptiste Daroussin 	.bar.f_color = GET_COLOR(COLOR_WHITE, COLOR_BLUE)  | A_BOLD,
140f499134dSBaptiste Daroussin 	.bar.color   = GET_COLOR(COLOR_BLUE,  COLOR_WHITE) | A_BOLD,
141c76f0793SBaptiste Daroussin 
142b319d934SAlfonso S. Siciliano 	.button.minmargin       = 1,
143b319d934SAlfonso S. Siciliano 	.button.maxmargin       = 5,
144*61ba55bcSBaptiste Daroussin 	.button.leftdelim       = '[',
145*61ba55bcSBaptiste Daroussin 	.button.rightdelim      = ']',
146f499134dSBaptiste Daroussin 	.button.f_delimcolor    = GET_COLOR(COLOR_WHITE,  COLOR_BLUE)  | A_BOLD,
147f499134dSBaptiste Daroussin 	.button.delimcolor      = GET_COLOR(COLOR_BLACK,  COLOR_WHITE),
148f499134dSBaptiste Daroussin 	.button.f_color         = GET_COLOR(COLOR_YELLOW, COLOR_BLUE)  | A_BOLD,
149f499134dSBaptiste Daroussin 	.button.color           = GET_COLOR(COLOR_BLACK,  COLOR_WHITE),
150f499134dSBaptiste Daroussin 	.button.f_shortcutcolor = GET_COLOR(COLOR_WHITE,  COLOR_BLUE)  | A_BOLD,
151f499134dSBaptiste Daroussin 	.button.shortcutcolor   = GET_COLOR(COLOR_RED,    COLOR_WHITE) | A_BOLD
152c76f0793SBaptiste Daroussin };
153c76f0793SBaptiste Daroussin 
1548c4f4028SBaptiste Daroussin static void
set_theme(struct bsddialog_theme * dst,struct bsddialog_theme * src)1558c4f4028SBaptiste Daroussin set_theme(struct bsddialog_theme *dst, struct bsddialog_theme *src)
156c76f0793SBaptiste Daroussin {
157263660c0SAlfonso Siciliano 	dst->screen.color = src->screen.color;
158263660c0SAlfonso Siciliano 
1598c4f4028SBaptiste Daroussin 	dst->shadow.color = src->shadow.color;
160b319d934SAlfonso S. Siciliano 	dst->shadow.y     = src->shadow.y;
161b319d934SAlfonso S. Siciliano 	dst->shadow.x     = src->shadow.x;
162c76f0793SBaptiste Daroussin 
1638c4f4028SBaptiste Daroussin 	dst->dialog.delimtitle       = src->dialog.delimtitle;
1648c4f4028SBaptiste Daroussin 	dst->dialog.titlecolor       = src->dialog.titlecolor;
1658c4f4028SBaptiste Daroussin 	dst->dialog.lineraisecolor   = src->dialog.lineraisecolor;
1668c4f4028SBaptiste Daroussin 	dst->dialog.linelowercolor   = src->dialog.linelowercolor;
1678c4f4028SBaptiste Daroussin 	dst->dialog.color            = src->dialog.color;
1688c4f4028SBaptiste Daroussin 	dst->dialog.bottomtitlecolor = src->dialog.bottomtitlecolor;
169bce40c02SAlfonso S. Siciliano 	dst->dialog.arrowcolor       = src->dialog.arrowcolor;
170c76f0793SBaptiste Daroussin 
171*61ba55bcSBaptiste Daroussin 	dst->menu.f_prefixcolor   = src->menu.f_prefixcolor;
172*61ba55bcSBaptiste Daroussin 	dst->menu.prefixcolor     = src->menu.prefixcolor;
173bce40c02SAlfonso S. Siciliano 	dst->menu.f_selectorcolor = src->menu.f_selectorcolor;
1748c4f4028SBaptiste Daroussin 	dst->menu.selectorcolor   = src->menu.selectorcolor;
1758c4f4028SBaptiste Daroussin 	dst->menu.f_desccolor     = src->menu.f_desccolor;
1768c4f4028SBaptiste Daroussin 	dst->menu.desccolor       = src->menu.desccolor;
1778c4f4028SBaptiste Daroussin 	dst->menu.f_namecolor     = src->menu.f_namecolor;
1788c4f4028SBaptiste Daroussin 	dst->menu.namecolor       = src->menu.namecolor;
1798c4f4028SBaptiste Daroussin 	dst->menu.f_shortcutcolor = src->menu.f_shortcutcolor;
1808c4f4028SBaptiste Daroussin 	dst->menu.shortcutcolor   = src->menu.shortcutcolor;
181b319d934SAlfonso S. Siciliano 	dst->menu.bottomdesccolor = src->menu.bottomdesccolor;
182*61ba55bcSBaptiste Daroussin 	dst->menu.sepnamecolor    = src->menu.sepnamecolor;
183*61ba55bcSBaptiste Daroussin 	dst->menu.sepdesccolor    = src->menu.sepdesccolor;
184c76f0793SBaptiste Daroussin 
1858c4f4028SBaptiste Daroussin 	dst->form.f_fieldcolor    = src->form.f_fieldcolor;
1868c4f4028SBaptiste Daroussin 	dst->form.fieldcolor      = src->form.fieldcolor;
1878c4f4028SBaptiste Daroussin 	dst->form.readonlycolor   = src->form.readonlycolor;
188b319d934SAlfonso S. Siciliano 	dst->form.bottomdesccolor = src->form.bottomdesccolor;
189c76f0793SBaptiste Daroussin 
1908c4f4028SBaptiste Daroussin 	dst->bar.f_color = src->bar.f_color;
1918c4f4028SBaptiste Daroussin 	dst->bar.color   = src->bar.color;
192c76f0793SBaptiste Daroussin 
193b319d934SAlfonso S. Siciliano 	dst->button.minmargin       = src->button.minmargin;
194b319d934SAlfonso S. Siciliano 	dst->button.maxmargin       = src->button.maxmargin;
195bce40c02SAlfonso S. Siciliano 	dst->button.leftdelim       = src->button.leftdelim;
196bce40c02SAlfonso S. Siciliano 	dst->button.rightdelim      = src->button.rightdelim;
1978c4f4028SBaptiste Daroussin 	dst->button.f_delimcolor    = src->button.f_delimcolor;
1988c4f4028SBaptiste Daroussin 	dst->button.delimcolor      = src->button.delimcolor;
1998c4f4028SBaptiste Daroussin 	dst->button.f_color         = src->button.f_color;
2008c4f4028SBaptiste Daroussin 	dst->button.color           = src->button.color;
2018c4f4028SBaptiste Daroussin 	dst->button.f_shortcutcolor = src->button.f_shortcutcolor;
2028c4f4028SBaptiste Daroussin 	dst->button.shortcutcolor   = src->button.shortcutcolor;
203c76f0793SBaptiste Daroussin 
204263660c0SAlfonso Siciliano 	bkgd(dst->screen.color);
205c76f0793SBaptiste Daroussin }
206c76f0793SBaptiste Daroussin 
2078c4f4028SBaptiste Daroussin /* API */
bsddialog_get_theme(struct bsddialog_theme * theme)2088c4f4028SBaptiste Daroussin int bsddialog_get_theme(struct bsddialog_theme *theme)
2098c4f4028SBaptiste Daroussin {
210*61ba55bcSBaptiste Daroussin 	CHECK_PTR(theme);
2118c4f4028SBaptiste Daroussin 	set_theme(theme, &t);
2128c4f4028SBaptiste Daroussin 
213b319d934SAlfonso S. Siciliano 	return (BSDDIALOG_OK);
2148c4f4028SBaptiste Daroussin }
2158c4f4028SBaptiste Daroussin 
bsddialog_set_theme(struct bsddialog_theme * theme)2168c4f4028SBaptiste Daroussin int bsddialog_set_theme(struct bsddialog_theme *theme)
2178c4f4028SBaptiste Daroussin {
218*61ba55bcSBaptiste Daroussin 	CHECK_PTR(theme);
2198c4f4028SBaptiste Daroussin 	set_theme(&t, theme);
220*61ba55bcSBaptiste Daroussin 	refresh();
2218c4f4028SBaptiste Daroussin 
222b319d934SAlfonso S. Siciliano 	return (BSDDIALOG_OK);
2238c4f4028SBaptiste Daroussin }
2248c4f4028SBaptiste Daroussin 
bsddialog_set_default_theme(enum bsddialog_default_theme newtheme)225c76f0793SBaptiste Daroussin int bsddialog_set_default_theme(enum bsddialog_default_theme newtheme)
226c76f0793SBaptiste Daroussin {
227*61ba55bcSBaptiste Daroussin 	if (newtheme == BSDDIALOG_THEME_3D) {
228*61ba55bcSBaptiste Daroussin 		set_theme(&t, &flat);
229*61ba55bcSBaptiste Daroussin 		t.dialog.lineraisecolor   =
230*61ba55bcSBaptiste Daroussin 		    GET_COLOR(COLOR_WHITE, COLOR_WHITE) | A_BOLD;
231*61ba55bcSBaptiste Daroussin 		t.dialog.delimtitle       = false;
232*61ba55bcSBaptiste Daroussin 		t.dialog.bottomtitlecolor = t.dialog.bottomtitlecolor | A_BOLD;
233*61ba55bcSBaptiste Daroussin 	} else if (newtheme == BSDDIALOG_THEME_BLACKWHITE) {
234*61ba55bcSBaptiste Daroussin 		set_theme(&t, &blackwhite);
235*61ba55bcSBaptiste Daroussin 	} else if (newtheme == BSDDIALOG_THEME_FLAT) {
236*61ba55bcSBaptiste Daroussin 		set_theme(&t, &flat);
237*61ba55bcSBaptiste Daroussin 	} else {
238*61ba55bcSBaptiste Daroussin 		RETURN_FMTERROR("Unknown default theme (%d), "
239*61ba55bcSBaptiste Daroussin 		    "to use enum bsddialog_default_theme",
240*61ba55bcSBaptiste Daroussin 		    newtheme);
2418c4f4028SBaptiste Daroussin 	}
242*61ba55bcSBaptiste Daroussin 	refresh();
243c76f0793SBaptiste Daroussin 
244b319d934SAlfonso S. Siciliano 	return (BSDDIALOG_OK);
245c76f0793SBaptiste Daroussin }
246c76f0793SBaptiste Daroussin 
247c76f0793SBaptiste Daroussin int
bsddialog_color(enum bsddialog_color foreground,enum bsddialog_color background,unsigned int flags)248d93b4d32SBaptiste Daroussin bsddialog_color(enum bsddialog_color foreground,
249d93b4d32SBaptiste Daroussin     enum bsddialog_color background, unsigned int flags)
250c76f0793SBaptiste Daroussin {
251*61ba55bcSBaptiste Daroussin 	unsigned int i, f;
252c76f0793SBaptiste Daroussin 
253*61ba55bcSBaptiste Daroussin 	f = 0;
254*61ba55bcSBaptiste Daroussin 	for (i=0; i < NFLAGS; i++)
255*61ba55bcSBaptiste Daroussin 		if (flags & flagconv[i].public)
256*61ba55bcSBaptiste Daroussin 			f |= flagconv[i].private;
257c76f0793SBaptiste Daroussin 
258*61ba55bcSBaptiste Daroussin 	return (GET_COLOR(foreground, background) | f);
259c76f0793SBaptiste Daroussin }
260b319d934SAlfonso S. Siciliano 
261b319d934SAlfonso S. Siciliano int
bsddialog_color_attrs(int color,enum bsddialog_color * foreground,enum bsddialog_color * background,unsigned int * flags)262b319d934SAlfonso S. Siciliano bsddialog_color_attrs(int color, enum bsddialog_color *foreground,
263b319d934SAlfonso S. Siciliano     enum bsddialog_color *background, unsigned int *flags)
264b319d934SAlfonso S. Siciliano {
265*61ba55bcSBaptiste Daroussin 	short fg, bg;
266*61ba55bcSBaptiste Daroussin 	unsigned int i, f;
267b319d934SAlfonso S. Siciliano 
268*61ba55bcSBaptiste Daroussin 	if (flags != NULL) {
269*61ba55bcSBaptiste Daroussin 		f = 0;
270*61ba55bcSBaptiste Daroussin 		for (i=0; i < NFLAGS; i++)
271*61ba55bcSBaptiste Daroussin 			if (color & flagconv[i].private)
272*61ba55bcSBaptiste Daroussin 				f |= flagconv[i].public;
273*61ba55bcSBaptiste Daroussin 		*flags = f;
274*61ba55bcSBaptiste Daroussin 	}
275*61ba55bcSBaptiste Daroussin 	if (pair_content(PAIR_NUMBER(color), &fg, &bg) != OK)
276b319d934SAlfonso S. Siciliano 		RETURN_ERROR("Cannot get color attributes");
277b319d934SAlfonso S. Siciliano 	if (foreground != NULL)
278*61ba55bcSBaptiste Daroussin 		*foreground = fg;
279b319d934SAlfonso S. Siciliano 	if (background != NULL)
280*61ba55bcSBaptiste Daroussin 		*background = bg;
281b319d934SAlfonso S. Siciliano 
282b319d934SAlfonso S. Siciliano 	return (BSDDIALOG_OK);
283b319d934SAlfonso S. Siciliano }
284b319d934SAlfonso S. Siciliano 
bsddialog_hascolors(void)285b319d934SAlfonso S. Siciliano bool bsddialog_hascolors(void)
286b319d934SAlfonso S. Siciliano {
287*61ba55bcSBaptiste Daroussin 	return (hastermcolors);
288b319d934SAlfonso S. Siciliano }
289