This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch] bug # 514 deja vu (cygwin console color handling)


I noticed that the reverse color bug
 http://sourceware.org/bugzilla/show_bug.cgi?id=514
shows up again in recent cygwin1.dll updates. My previous patch 
is still in the source but additional code apparently has the same 
effect of rendering output unreadable; the effect is the following:
* foreground is set bright
* screen mode is set to reverse
* cygwin wrongly assumes that the reverse foreground colour (which 
  actually used to be the non-bright background color) should be 
  set to bright, which is obviously a wrong idea and often results 
  in a contrast that renders the output almost unreadable

The attached shell script test514 demonstrates the bug.
The attached patch is an attempt to fix the bug again.
Unfortunately, I could not compile it due to the following mysterious 
make error:

make[4]: Entering directory `/usr/src/cygwin-1.5.22-patch/i686-pc-cygwin/newlib'
rm -f libm.a
ln libm/libm.a libm.a >/dev/null 2>/dev/null || cp libm/libm.a libm.a
rm -rf libc.a libg.a tmp
mkdir tmp
cd tmp; \
         ar x ../libm.a lib_a-s_isinf.o lib_a-sf_isinf.o lib_a-s_isnan.o lib_a-sf_isnan.o lib_a-s_isinfd.o lib_a-sf_isinff.o lib_a-s_isnand.o lib_a-sf_isnanf.o lib_a-s_nan.o lib_a-sf_nan.o lib_a-s_ldexp.o lib_a-sf_ldexp.o lib_a-s_frexp.o lib_a-sf_frexp.o lib_a-s_modf.o lib_a-sf_modf.o lib_a-s_scalbn.o lib_a-sf_scalbn.o lib_a-s_finite.o lib_a-sf_finite.o lib_a-s_copysign.o lib_a-sf_copysign.o lib_a-s_infconst.o ; \
         ar x ../libc/libc.a ; \
         ar rc ../libc.a *.o
/bin/sh: line 3: /bin/ar: Argument list too long
make[4]: *** [libc.a] Error 126


I would appreciate if someone (who can successfully compile cygwin1.dll) 
could check the patch, please, and the result.

Thanks a lot.
Thomas


2006-11-22  Thomas Wolff  <towo@computer.org>

* fhandler_console.cc (set_color): Avoid (again) inappropriate intensity 
     interchanging that used to render reverse output unreadable 
     when (non-reversed) text is bright.
     See http://sourceware.org/bugzilla/show_bug.cgi?id=514


--- cygwin-1.5.22-1/winsup/cygwin/fhandler_console.cc	2006-07-03 17:29:10.001000000 +0200
+++ cygwin-1.5.22-patch/winsup/cygwin/fhandler_console.cc	2006-11-22 17:37:15.518677900 +0100
@@ -948,6 +948,8 @@ dev_console::set_color (HANDLE h)
 	       (save_fg & FOREGROUND_BLUE  ? BACKGROUND_BLUE  : 0) |
 	       (save_fg & FOREGROUND_INTENSITY ? BACKGROUND_INTENSITY : 0);
     }
+
+  /* apply attributes */
   if (underline)
     win_fg = underline_color;
   /* emulate blink with bright background */
@@ -956,7 +958,12 @@ dev_console::set_color (HANDLE h)
   if (intensity == INTENSITY_INVISIBLE)
     win_fg = win_bg;
   else if (intensity == INTENSITY_BOLD)
-    win_fg |= FOREGROUND_INTENSITY;
+    /* apply foreground intensity only in non-reverse mode! */
+    if (reverse) 
+      win_bg |= BACKGROUND_INTENSITY;
+    else
+      win_fg |= FOREGROUND_INTENSITY;
+
   current_win32_attr = win_fg | win_bg;
   if (h)
     SetConsoleTextAttribute (h, current_win32_attr);

Attachment: test514
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]