/****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2010,2011 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 *
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_color.c,v 1.97 2009/11/07 20:36:44 tom Exp $")
+MODULE_ID("$Id: lib_color.c,v 1.104 2011/10/22 15:53:42 tom Exp $")
#ifdef USE_TERM_DRIVER
#define CanChange InfoOf(SP_PARM).canchange
default_bg(NCURSES_SP_ARG),
NCURSES_SP_NAME(_nc_outch));
}
+#if !NCURSES_EXT_COLORS
+ /*
+ * Without ext-colors, we cannot represent more than 256 color pairs.
+ */
+ if (maxpairs > 256)
+ maxpairs = 256;
+#endif
if (maxpairs > 0 && maxcolors > 0) {
SP_PARM->_pair_limit = maxpairs;
/* This function was originally written by Daniel Weaver <danw@znyx.com> */
static void
-rgb2hls(short r, short g, short b, short *h, short *l, short *s)
+rgb2hls(int r, int g, int b, short *h, short *l, short *s)
/* convert RGB to HLS system */
{
- short min, max, t;
+ int min, max, t;
if ((min = g < r ? g : r) > b)
min = b;
max = b;
/* calculate lightness */
- *l = (min + max) / 20;
+ *l = (short) ((min + max) / 20);
if (min == max) { /* black, white and all shades of gray */
*h = 0;
/* calculate saturation */
if (*l < 50)
- *s = ((max - min) * 100) / (max + min);
+ *s = (short) (((max - min) * 100) / (max + min));
else
- *s = ((max - min) * 100) / (2000 - max - min);
+ *s = (short) (((max - min) * 100) / (2000 - max - min));
/* calculate hue */
if (r == max)
- t = 120 + ((g - b) * 60) / (max - min);
+ t = (short) (120 + ((g - b) * 60) / (max - min));
else if (g == max)
- t = 240 + ((b - r) * 60) / (max - min);
+ t = (short) (240 + ((b - r) * 60) / (max - min));
else
- t = 360 + ((r - g) * 60) / (max - min);
+ t = (short) (360 + ((r - g) * 60) / (max - min));
- *h = t % 360;
+ *h = (short) (t % 360);
}
/*
previous = SP_PARM->_color_pairs[pair];
#if NCURSES_EXT_FUNCS
- if (SP_PARM->_default_color) {
+ if (SP_PARM->_default_color || SP_PARM->_assumed_color) {
bool isDefault = FALSE;
bool wasDefault = FALSE;
int default_pairs = SP_PARM->_default_pairs;
{
if ((f < 0) || !OkColorHi(f)
|| (b < 0) || !OkColorHi(b)
- || (pair < 1))
+ || (pair < 1)) {
returnCode(ERR);
+ }
}
/*
NCURSES_EXPORT(bool)
NCURSES_SP_NAME(can_change_color) (NCURSES_SP_DCL)
{
+ int result = FALSE;
+
T((T_CALLED("can_change_color(%p)"), (void *) SP_PARM));
- returnCode((CanChange != 0) ? TRUE : FALSE);
+
+ if (HasTerminal(SP_PARM) && (CanChange != 0)) {
+ result = TRUE;
+ }
+
+ returnCode(result);
}
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(bool)
NCURSES_SP_NAME(has_colors) (NCURSES_SP_DCL0)
{
- int code;
+ int code = FALSE;
(void) SP_PARM;
T((T_CALLED("has_colors()")));
+ if (HasTerminal(SP_PARM)) {
#ifdef USE_TERM_DRIVER
- code = HasColor;
+ code = HasColor;
#else
- code = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
- && (((set_foreground != NULL)
- && (set_background != NULL))
- || ((set_a_foreground != NULL)
- && (set_a_background != NULL))
- || set_color_pair)) ? TRUE : FALSE);
+ code = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
+ && (((set_foreground != NULL)
+ && (set_background != NULL))
+ || ((set_a_foreground != NULL)
+ && (set_a_background != NULL))
+ || set_color_pair)) ? TRUE : FALSE);
#endif
+ }
returnCode(code);
}
NCURSES_EXPORT(void)
NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_DCLx
- short old_pair,
- short pair,
- bool reverse,
+ int old_pair,
+ int pair,
+ int reverse,
NCURSES_SP_OUTC outc)
{
#ifdef USE_TERM_DRIVER
#if NCURSES_EXT_FUNCS
if (isDefaultColor(fg))
- fg = default_fg(NCURSES_SP_ARG);
+ fg = (short) default_fg(NCURSES_SP_ARG);
if (isDefaultColor(bg))
- bg = default_bg(NCURSES_SP_ARG);
+ bg = (short) default_bg(NCURSES_SP_ARG);
#endif
if (reverse) {
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(void)
-_nc_do_color(short old_pair, short pair, bool reverse, NCURSES_OUTC outc)
+_nc_do_color(int old_pair, int pair, int reverse, NCURSES_OUTC outc)
{
SetSafeOutcWrapper(outc);
NCURSES_SP_NAME(_nc_do_color) (CURRENT_SCREEN,