Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!news.tains.tohoku.ac.jp!news.iwate-pu.ac.jp!g236y004
From: <kabe@sra-tohoku.co.jp>
Newsgroups: fj.os.bsd.netbsd
Subject: wscons UNDERLINE->cyan patch
Date: Fri, 4 Jul 2003 15:58:17 JST
Organization: carbon, oxygen, hydrogen
Lines: 76
Message-ID: <1279004200315.470756@sra-tohoku.co.jp.msgid>
NNTP-Posting-Host: imux3188.comm.soft.iwate-pu.ac.jp
X-Newsreader: mnews [version 1.22PL5] 2002-11-27(Wed)
Xref: ccsf.homeunix.org fj.os.bsd.netbsd:64

Archive-Name: wscons-cyan_.patch

$B$+$Y!#(B

NetBSD$B$N(B wscons VGA$B%3%s%=!<%k$O!"%"%s%@!<%i%$%sB0@-$r(B
$B%*%l%s%8CO$KGr$GI=<($7$^$9$,!"(B

$B$$$^$$$A2<IJ$G5$$K$/$o$J$$$N$H(B
$B8E$$(BLCD$B$G$O8+?I$$$H$$$&$N$b$"$C$F!"(B
$BC1$J$k?e?'$K$J$k$h$&$$$8$/$C$F$_$^$7$?!#(B

$B!t$5$/$5$/$H(B config $B$GBX$($i$l$k$h$&$K$O$J$C$F$$$J$$(B

$B:GE,$J?';H$$$r;n$7$?$$J}$O!"%+!<%M%k$$$8$i$s$G$b(B
terminfo $B=q$1$P;w$?$h$&$J$3$H$O$G$-$k$N$G!"$=$l$G$h$5$2$J(B
$B?';H$$$rC5$9$N$b$"$j$+$H!#(B
$B!t(Btermcap$B$@$1$@$H%j%b!<%H%m%0%$%s@h$G$OL58z$K$J$C$F$7$^$$$^$9$,(B
-- 
kabe

* Use CYAN for UNDERLINE, instead of white-on-brown.

--- usr/src/sys/dev/wscons/wsemul_vt100_subr.c.dist	Tue Nov 13 15:17:47 2001
+++ usr/src/sys/dev/wscons/wsemul_vt100_subr.c	Thu Jul  3 01:44:44 2003
@@ -638,28 +638,38 @@
 	if (error)
 		return (error);
 
-	if ((flags & WSATTR_HILIT) &&
-	    !(edp->scrcapabilities & WSSCREEN_HILIT)) {
-		flags &= ~WSATTR_HILIT;
-		if (edp->scrcapabilities & WSSCREEN_WSCOLORS) {
-			fgcol = WSCOL_RED;
-			flags |= WSATTR_WSCOLORS;
+	/* if we can't underline but can color,
+	 * use cyan; but if it's colored already,
+	 * just hilite */
+	if ((flags & WSATTR_UNDERLINE) &&
+	    !(edp->scrcapabilities & WSSCREEN_UNDERLINE)) {
+		flags &= ~WSATTR_UNDERLINE;
+		if (edp->scrcapabilities & WSSCREEN_WSCOLORS) { 
+			if (!(flags & WSATTR_WSCOLORS)) {
+				/* override to cyan */
+				fgcol = WSCOL_CYAN;
+				flags |= WSATTR_WSCOLORS;
+			} else {
+				/* already colored; just hilite */
+				flags |= WSATTR_HILIT;
+			}
 		} else {
 #ifdef VT100_DEBUG
-			printf("bold ignored (impossible)\n");
+			printf("underline ignored (impossible)\n");
 #endif
 		}
 	}
-	if ((flags & WSATTR_UNDERLINE) &&
-	    !(edp->scrcapabilities & WSSCREEN_UNDERLINE)) {
-		flags &= ~WSATTR_UNDERLINE;
+	/* put HILIT process after UNDERLINE, as
+	 * UNDERLINE may use HILIT */
+	if ((flags & WSATTR_HILIT) &&
+	    !(edp->scrcapabilities & WSSCREEN_HILIT)) {
+		flags &= ~WSATTR_HILIT;
 		if (edp->scrcapabilities & WSSCREEN_WSCOLORS) {
-			bgcol = WSCOL_BROWN;
-			flags &= ~WSATTR_UNDERLINE;
+			fgcol = WSCOL_RED;
 			flags |= WSATTR_WSCOLORS;
 		} else {
 #ifdef VT100_DEBUG
-			printf("underline ignored (impossible)\n");
+			printf("bold ignored (impossible)\n");
 #endif
 		}
 	}
