]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_color.c
ncurses 5.9 - patch 20110723
[ncurses.git] / ncurses / base / lib_color.c
index 3364c3f5be45055e79cd53634519c96d8460b491..f0d2006b71ab9ce2a79849fc029a92a10ad4ac46 100644 (file)
@@ -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.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;
@@ -629,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
@@ -644,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);
 }