X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_color.c;h=3339d56fc295b3796eaa7f9e98790dd58c70ac16;hp=3364c3f5be45055e79cd53634519c96d8460b491;hb=a1e63be290fce9e589bc57c9f753be09e8ac0cc7;hpb=950eed9ace2ceff30b88c20de1ef8a0ba05ac567 diff --git a/ncurses/base/lib_color.c b/ncurses/base/lib_color.c index 3364c3f5..3339d56f 100644 --- a/ncurses/base/lib_color.c +++ b/ncurses/base/lib_color.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * + * Copyright (c) 1998-2012,2013 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.99 2011/04/23 18:22:22 tom Exp $") +MODULE_ID("$Id: lib_color.c,v 1.107 2013/01/12 17:25:36 tom Exp $") #ifdef USE_TERM_DRIVER #define CanChange InfoOf(SP_PARM).canchange @@ -264,8 +264,7 @@ reset_color_pair(NCURSES_SP_DCL0) (void) SP_PARM; if (orig_pair != 0) { - TPUTS_TRACE("orig_pair"); - putp(orig_pair); + (void) NCURSES_PUTP2("orig_pair", orig_pair); result = TRUE; } return result; @@ -292,8 +291,7 @@ NCURSES_SP_NAME(_nc_reset_colors) (NCURSES_SP_DCL0) result = CallDriver(SP_PARM, rescolors); #else if (orig_colors != 0) { - TPUTS_TRACE("orig_colors"); - putp(orig_colors); + NCURSES_PUTP2("orig_colors", orig_colors); result = TRUE; } #endif @@ -331,6 +329,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; @@ -383,10 +388,10 @@ start_color(void) /* This function was originally written by Daniel Weaver */ 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; @@ -416,7 +421,7 @@ rgb2hls(short r, short g, short b, short *h, short *l, short *s) else t = (short) (360 + ((r - g) * 60) / (max - min)); - *h = t % 360; + *h = (short) (t % 360); } /* @@ -546,11 +551,11 @@ NCURSES_SP_NAME(init_pair) (NCURSES_SP_DCLx short pair, short f, short b) tp[f].red, tp[f].green, tp[f].blue, tp[b].red, tp[b].green, tp[b].blue)); - TPUTS_TRACE("initialize_pair"); - putp(TPARM_7(initialize_pair, - pair, - tp[f].red, tp[f].green, tp[f].blue, - tp[b].red, tp[b].green, tp[b].blue)); + NCURSES_PUTP2("initialize_pair", + TPARM_7(initialize_pair, + pair, + tp[f].red, tp[f].green, tp[f].blue, + tp[b].red, tp[b].green, tp[b].blue)); } #endif @@ -608,8 +613,8 @@ NCURSES_SP_NAME(init_color) (NCURSES_SP_DCLx #ifdef USE_TERM_DRIVER CallDriver_4(SP_PARM, initcolor, color, r, g, b); #else - TPUTS_TRACE("initialize_color"); - putp(TPARM_4(initialize_color, color, r, g, b)); + NCURSES_PUTP2("initialize_color", + TPARM_4(initialize_color, color, r, g, b)); #endif SP_PARM->_color_defs = max(color + 1, SP_PARM->_color_defs); @@ -629,8 +634,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 @@ -644,20 +656,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); } @@ -732,8 +746,8 @@ NCURSES_SP_NAME(pair_content) (NCURSES_SP_DCLx if (!ValidPair(pair)) { result = ERR; } else { - NCURSES_COLOR_T fg = FORE_OF(SP_PARM->_color_pairs[pair]); - NCURSES_COLOR_T bg = BACK_OF(SP_PARM->_color_pairs[pair]); + NCURSES_COLOR_T fg = (NCURSES_COLOR_T) FORE_OF(SP_PARM->_color_pairs[pair]); + NCURSES_COLOR_T bg = (NCURSES_COLOR_T) BACK_OF(SP_PARM->_color_pairs[pair]); #if NCURSES_EXT_FUNCS if (fg == COLOR_DEFAULT) @@ -766,9 +780,9 @@ pair_content(short pair, short *f, short *b) 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 @@ -788,13 +802,14 @@ NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_DCLx 1, outc); return; } else if (SP_PARM != 0) { - pair_content((short) pair, &fg, &bg); + if (pair_content((short) pair, &fg, &bg) == ERR) + return; } } if (old_pair >= 0 && SP_PARM != 0 - && pair_content(old_pair, &old_fg, &old_bg) != ERR) { + && pair_content((short) old_pair, &old_fg, &old_bg) != ERR) { if ((isDefaultColor(fg) && !isDefaultColor(old_fg)) || (isDefaultColor(bg) && !isDefaultColor(old_bg))) { #if NCURSES_EXT_FUNCS @@ -848,7 +863,7 @@ NCURSES_SP_NAME(_nc_do_color) (NCURSES_SP_DCLx #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,