Module Name:    src
Committed By:   mlelstv
Date:           Sun May 16 08:46:38 UTC 2021

Modified Files:
        src/sys/dev/wscons: wsdisplay_vcons.c

Log Message:
Try to guess attributes better.


To generate a diff of this commit:
cvs rdiff -u -r1.52 -r1.53 src/sys/dev/wscons/wsdisplay_vcons.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/wscons/wsdisplay_vcons.c
diff -u src/sys/dev/wscons/wsdisplay_vcons.c:1.52 src/sys/dev/wscons/wsdisplay_vcons.c:1.53
--- src/sys/dev/wscons/wsdisplay_vcons.c:1.52	Sun May 16 08:44:26 2021
+++ src/sys/dev/wscons/wsdisplay_vcons.c	Sun May 16 08:46:38 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: wsdisplay_vcons.c,v 1.52 2021/05/16 08:44:26 mlelstv Exp $ */
+/*	$NetBSD: wsdisplay_vcons.c,v 1.53 2021/05/16 08:46:38 mlelstv Exp $ */
 
 /*-
  * Copyright (c) 2005, 2006 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wsdisplay_vcons.c,v 1.52 2021/05/16 08:44:26 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wsdisplay_vcons.c,v 1.53 2021/05/16 08:46:38 mlelstv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1404,6 +1404,7 @@ vcons_getwschar(struct vcons_screen *scr
 	int offset;
 	long attr;
 	struct rasops_info *ri;
+	int fg, bg, ul;
 
 	KASSERT(scr != NULL && wsc != NULL);
 
@@ -1433,18 +1434,38 @@ vcons_getwschar(struct vcons_screen *scr
 	wsc->letter = scr->scr_chars[offset];
 	attr = scr->scr_attrs[offset];
 
+#ifdef VCONS_DEBUG
+	printf("vcons_getwschar: %d, %d, %x, %lx\n", wsc->row,
+	    wsc->col, wsc->letter, attr);
+#endif
+
 	/* 
 	 * this is ugly. We need to break up an attribute into colours and
 	 * flags but there's no rasops method to do that so we must rely on
 	 * the 'canonical' encoding.
 	 */
-#ifdef VCONS_DEBUG
-	printf("vcons_getwschar: %d, %d, %x, %lx\n", wsc->row,
-	    wsc->col, wsc->letter, attr);
-#endif
-	wsc->foreground = (attr >> 24) & 0xff;
-	wsc->background = (attr >> 16) & 0xff;
-	wsc->flags      = attr & 0xff;
+
+	/* only fetches underline attribute */
+	/* rasops_unpack_attr(attr, &fg, &bg, &ul); */
+	fg = (attr >> 24) & 0xf;
+	bg = (attr >> 16) & 0xf;
+	ul = (attr & 1);
+
+	wsc->foreground = fg;
+	wsc->background = bg;
+
+	/* clear trashed bits and restore underline flag */
+	attr &= ~(WSATTR_HILIT | WSATTR_BLINK | WSATTR_UNDERLINE);
+	if (ul)
+		attr |= WSATTR_UNDERLINE;
+
+	/* restore highlight boost */
+	if (attr & WSATTR_HILIT)
+		if (wsc->foreground >= 8)
+			wsc->foreground -= 8;
+
+	/* we always use colors, even when not stored */
+	attr |= WSATTR_WSCOLORS;
 	return 0;
 }
 

Reply via email to