]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_color.c
ncurses 6.2 - patch 20210508
[ncurses.git] / ncurses / base / lib_color.c
index 907e9743fcdac924ce62502e3b0890853930472b..e4276784f8fed6d5ffd25510c19ae4fd9cfd7f1c 100644 (file)
@@ -49,7 +49,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_color.c,v 1.146 2021/02/14 00:17:09 tom Exp $")
+MODULE_ID("$Id: lib_color.c,v 1.147 2021/05/08 15:11:48 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define CanChange      InfoOf(SP_PARM).canchange
 
 #ifdef USE_TERM_DRIVER
 #define CanChange      InfoOf(SP_PARM).canchange
@@ -266,7 +266,7 @@ init_direct_colors(NCURSES_SP_DCL0)
            ;
        }
 
            ;
        }
 
-       if ((n = tigetflag(name)) > 0) {
+       if (tigetflag(name) > 0) {
            n = (width + 2) / 3;
            result->bits.red = UChar(n);
            result->bits.green = UChar(n);
            n = (width + 2) / 3;
            result->bits.red = UChar(n);
            result->bits.green = UChar(n);
@@ -840,52 +840,57 @@ _nc_color_content(SCREEN *sp, int color, int *r, int *g, int *b)
        (void *) g,
        (void *) b));
 
        (void *) g,
        (void *) b));
 
-    if (sp == 0)
-       returnCode(result);
-
-    maxcolors = MaxColors;
+    if (sp != 0) {
+       maxcolors = MaxColors;
 
 
-    if (color < 0 || !OkColorHi(color) || !sp->_coloron) {
-       result = ERR;
-    } else {
-       int c_r, c_g, c_b;
+       if (color >= 0 && OkColorHi(color) && sp->_coloron) {
+           int c_r, c_g, c_b;
 
 
-       if (sp->_direct_color.value) {
-           rgb_bits_t *work = &(sp->_direct_color);
+           if (sp->_direct_color.value) {
+               rgb_bits_t *work = &(sp->_direct_color);
 
 #define max_direct_color(name) ((1 << work->bits.name) - 1)
 #define value_direct_color(max) (1000 * ((color >> bitoff) & max)) / max
 
 
 #define max_direct_color(name) ((1 << work->bits.name) - 1)
 #define value_direct_color(max) (1000 * ((color >> bitoff) & max)) / max
 
-           int max_r = max_direct_color(red);
-           int max_g = max_direct_color(green);
-           int max_b = max_direct_color(blue);
+               int max_r = max_direct_color(red);
+               int max_g = max_direct_color(green);
+               int max_b = max_direct_color(blue);
 
 
-           int bitoff = 0;
+               int bitoff = 0;
 
 
-           c_b = value_direct_color(max_b);
-           bitoff += work->bits.blue;
+               c_b = value_direct_color(max_b);
+               bitoff += work->bits.blue;
 
 
-           c_g = value_direct_color(max_g);
-           bitoff += work->bits.green;
+               c_g = value_direct_color(max_g);
+               bitoff += work->bits.green;
 
 
-           c_r = value_direct_color(max_r);
+               c_r = value_direct_color(max_r);
 
 
-       } else {
-           c_r = sp->_color_table[color].red;
-           c_g = sp->_color_table[color].green;
-           c_b = sp->_color_table[color].blue;
-       }
+           } else {
+               c_r = sp->_color_table[color].red;
+               c_g = sp->_color_table[color].green;
+               c_b = sp->_color_table[color].blue;
+           }
+
+           if (r)
+               *r = c_r;
+           if (g)
+               *g = c_g;
+           if (b)
+               *b = c_b;
 
 
+           TR(TRACE_ATTRS, ("...color_content(%d,%d,%d,%d)",
+                            color, c_r, c_g, c_b));
+           result = OK;
+       }
+    }
+    if (result != OK) {
        if (r)
        if (r)
-           *r = c_r;
+           *r = 0;
        if (g)
        if (g)
-           *g = c_g;
+           *g = 0;
        if (b)
        if (b)
-           *b = c_b;
-
-       TR(TRACE_ATTRS, ("...color_content(%d,%d,%d,%d)",
-                        color, c_r, c_g, c_b));
-       result = OK;
+           *b = 0;
     }
     returnCode(result);
 }
     }
     returnCode(result);
 }