X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=ncurses%2Fbase%2Flib_color.c;h=f0d2006b71ab9ce2a79849fc029a92a10ad4ac46;hb=44a4147009bf2978d342175fb52b7f0999e11b5f;hp=25e3d0742b7429fdd1b9b2d9ca6a156661900e78;hpb=f5da57ad7eb397b1001e2fca9cb0e278a6564716;p=ncurses.git diff --git a/ncurses/base/lib_color.c b/ncurses/base/lib_color.c index 25e3d074..f0d2006b 100644 --- a/ncurses/base/lib_color.c +++ b/ncurses/base/lib_color.c @@ -1,5 +1,5 @@ /**************************************************************************** - * 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 * @@ -45,7 +45,7 @@ #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.103 2011/07/23 22:00:34 tom Exp $") #ifdef USE_TERM_DRIVER #define CanChange InfoOf(SP_PARM).canchange @@ -331,6 +331,13 @@ NCURSES_SP_NAME(start_color) (NCURSES_SP_DCL0) 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; @@ -394,7 +401,7 @@ rgb2hls(short r, short g, short b, short *h, short *l, short *s) 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; @@ -404,17 +411,17 @@ rgb2hls(short r, short g, short b, short *h, short *l, short *s) /* 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; } @@ -439,7 +446,7 @@ NCURSES_SP_NAME(init_pair) (NCURSES_SP_DCLx short pair, short f, short b) 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; @@ -498,8 +505,9 @@ NCURSES_SP_NAME(init_pair) (NCURSES_SP_DCLx short pair, short f, short b) { if ((f < 0) || !OkColorHi(f) || (b < 0) || !OkColorHi(b) - || (pair < 1)) + || (pair < 1)) { returnCode(ERR); + } } /* @@ -628,8 +636,15 @@ init_color(short color, short r, short g, short b) 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 @@ -643,20 +658,22 @@ can_change_color(void) 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); } @@ -822,9 +839,9 @@ NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_DCLx #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) {