delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2000/10/17/14:29:34

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin AT sources DOT redhat DOT com
Message-ID: <F10D23B02E54D011A0AB0020AF9CEFE988F963@lynx.ceddec.com>
From: "Town, Brad" <btown AT ceddec DOT com>
To: "'cygwin AT sources DOT redhat DOT com'" <cygwin AT sources DOT redhat DOT com>
Subject: Improvements to console routines
Date: Tue, 17 Oct 2000 14:29:10 -0400
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2650.21)

------_=_NextPart_000_01C03868.248F76F0
Content-Type: text/plain;
	charset="iso-8859-1"

I've made a few improvements to the console routines.

. Added an alternative font (^[[11m) for displaying graphics characters
. Corrected bold, underline, reverse, and invisible attributes for use with
colors

I also hand-tweaked a terminfo file and a termcap file to use the changes.
Programs tested include the ncurses test programs, tack, mc, and frotz.
(The attached patches and term* files expand upon the patches I submitted
back in May.)

Details:
The alternative font is actually just a flag to disable the call to
CharToOemBuff in fhandler_console::write_normal.  For example, the character
0xDB (U with circumflex) is a U in the normal font and a solid block in the
alternative font.  This allows programs to map characters like the
registered-trademark symbol to an 'r', while allowing other programs to use
the graphics characters for drawing lines.

Character attributes are maintained individually in
fhandler_console::char_command.

Brad Town


------_=_NextPart_000_01C03868.248F76F0
Content-Type: application/octet-stream;
	name="fhandler.h.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="fhandler.h.diff"

--- fhandler.h	Tue Oct 17 11:32:01 2000=0A=
+++ fhandler.h.mine	Tue Oct 17 09:38:09 2000=0A=
@@ -570,6 +570,7 @@=0A=
   int state_;=0A=
   int args_[MAXARGS];=0A=
   int nargs_;=0A=
+  int altfont_;=0A=
 =0A=
   DWORD default_color;=0A=
 =0A=

------_=_NextPart_000_01C03868.248F76F0
Content-Type: application/octet-stream;
	name="fhandler_console.cc.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="fhandler_console.cc.diff"

--- fhandler_console.cc	Tue Oct 17 11:31:17 2000=0A=
+++ fhandler_console.cc.mine	Tue Oct 17 10:49:13 2000=0A=
@@ -370,7 +370,7 @@=0A=
   set_r_no_interrupt (1);	// Handled explicitly in read code=0A=
 =0A=
   h =3D CreateFileA ("CONOUT$", GENERIC_READ|GENERIC_WRITE,=0A=
-		   FILE_SHARE_WRITE | FILE_SHARE_WRITE, &sec_none,=0A=
+		   FILE_SHARE_READ | FILE_SHARE_WRITE, &sec_none,=0A=
 		   OPEN_EXISTING, 0, 0);=0A=
 =0A=
   if (h =3D=3D INVALID_HANDLE_VALUE)=0A=
@@ -630,6 +630,7 @@=0A=
 {=0A=
   set_cb (sizeof *this);=0A=
   state_ =3D normal;=0A=
+  altfont_ =3D 0;=0A=
   set_need_fork_fixup ();=0A=
 }=0A=
 =0A=
@@ -775,13 +776,16 @@=0A=
 void=0A=
 fhandler_console::char_command (char c)=0A=
 {=0A=
-  // Keep the background intensity with the colr since there doesn't =
seem=0A=
-  // to be a way to set this with termcap/terminfo.=0A=
   static int fg =3D default_color & (FOREGROUND_BLUE | =
FOREGROUND_GREEN |=0A=
 				   FOREGROUND_RED),=0A=
 	     bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN |=0A=
-				   BACKGROUND_RED | BACKGROUND_INTENSITY),=0A=
-			 bold =3D default_color & FOREGROUND_INTENSITY;=0A=
+				   BACKGROUND_RED);=0A=
+=0A=
+  static bool bold =3D (default_color & FOREGROUND_INTENSITY) ? true : =
false;=0A=
+  static bool underline =3D (default_color & BACKGROUND_INTENSITY) ? =
true : false;=0A=
+  static bool reverse =3D false;=0A=
+  static bool invis =3D false;=0A=
+=0A=
   int x, y;=0A=
   char buf[40];=0A=
 =0A=
@@ -793,60 +797,46 @@=0A=
        for (i =3D 0; i <=3D nargs_; i++)=0A=
 	 switch (args_[i])=0A=
 	   {=0A=
-	     case 0:    /* normal color */=0A=
+	     case 0:    /* default rendition */=0A=
 	       fg =3D default_color & (FOREGROUND_BLUE | FOREGROUND_GREEN =
|=0A=
 				     FOREGROUND_RED);=0A=
 	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D default_color & FOREGROUND_INTENSITY;=0A=
+				     BACKGROUND_RED);=0A=
+	       underline =3D (default_color & BACKGROUND_INTENSITY) ? true : =
false;=0A=
+	       reverse =3D false;=0A=
+	       bold =3D (default_color & FOREGROUND_INTENSITY) ? true : =
false;=0A=
+	       invis =3D false;=0A=
+	       altfont_ =3D 0;=0A=
 	       break;=0A=
 	     case 1:    /* bold */=0A=
-	       fg =3D default_color & (FOREGROUND_BLUE | FOREGROUND_GREEN =
|=0A=
-				     FOREGROUND_RED);=0A=
-	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D FOREGROUND_INTENSITY;=0A=
+	       bold =3D true;=0A=
 	       break;=0A=
-	     case 4:    /* underline - simulate with cyan */=0A=
-	       fg =3D FOREGROUND_BLUE | FOREGROUND_GREEN;=0A=
-	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D default_color & FOREGROUND_INTENSITY;=0A=
-	       break;=0A=
-	     case 5:    /* blink mode */=0A=
-	       fg =3D default_color & (FOREGROUND_BLUE | FOREGROUND_GREEN =
|=0A=
-				     FOREGROUND_RED);=0A=
-	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D default_color & FOREGROUND_INTENSITY;=0A=
+	     case 4:    /* underline */=0A=
+	       underline =3D true;=0A=
 	       break;=0A=
 	     case 7:    /* reverse */=0A=
-	       fg =3D (default_color & BACKGROUND_BLUE) ? FOREGROUND_BLUE : =
0;=0A=
-	       fg |=3D (default_color & BACKGROUND_GREEN) ? FOREGROUND_GREEN =
: 0;=0A=
-	       fg |=3D (default_color & BACKGROUND_RED) ? FOREGROUND_RED : =
0;=0A=
-	       fg |=3D (default_color & BACKGROUND_INTENSITY) ?=0A=
-					     FOREGROUND_INTENSITY : 0;=0A=
-	       bg =3D (default_color & FOREGROUND_BLUE) ? BACKGROUND_BLUE : =
0;=0A=
-	       bg |=3D (default_color & FOREGROUND_GREEN) ? BACKGROUND_GREEN =
: 0;=0A=
-	       bg |=3D (default_color & FOREGROUND_RED) ? BACKGROUND_RED : =
0;=0A=
-	       bg |=3D (default_color & FOREGROUND_INTENSITY) ?=0A=
-					     BACKGROUND_INTENSITY : 0;=0A=
+	       reverse =3D true;=0A=
 	       break;=0A=
 	     case 8:    /* invisible */=0A=
-	       fg =3D (default_color & BACKGROUND_BLUE) ? FOREGROUND_BLUE : =
0;=0A=
-	       fg |=3D (default_color & BACKGROUND_GREEN) ? FOREGROUND_GREEN =
: 0;=0A=
-	       fg |=3D (default_color & BACKGROUND_RED) ? FOREGROUND_RED : =
0;=0A=
-	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D (default_color & BACKGROUND_INTENSITY) ?=0A=
-						   FOREGROUND_INTENSITY : 0;=0A=
+	       invis =3D true;=0A=
 	       break;=0A=
-	     case 9:    /* dim */=0A=
-	       fg =3D default_color & (FOREGROUND_BLUE | FOREGROUND_GREEN =
|=0A=
-				     FOREGROUND_RED);=0A=
-	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D (fg =3D=3D 0) ? FOREGROUND_INTENSITY : 0;=0A=
+	     case 10:   /* primary (default) font */=0A=
+	       altfont_ =3D 0;=0A=
+	       break;=0A=
+	     case 11:   /* first alternative font */=0A=
+	       altfont_ =3D 1;=0A=
+	       break;=0A=
+	     case 22:   /* non-bold */=0A=
+	       bold =3D false;=0A=
+	       break;=0A=
+	     case 24:   /* non-underline */=0A=
+	       underline =3D false;=0A=
+	       break;=0A=
+	     case 27:   /* non-reverse */=0A=
+	       reverse =3D false;=0A=
+	       break;=0A=
+	     case 28:   /* non-invisible */=0A=
+	       invis =3D false;=0A=
 	       break;=0A=
 	     case 30:		/* BLACK foreground */=0A=
 	       fg =3D 0;=0A=
@@ -872,6 +862,10 @@=0A=
 	     case 37:		/* WHITE foreg */=0A=
 	       fg =3D FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;=0A=
 	       break;=0A=
+	     case 39:		/* Default foreg */=0A=
+	       fg =3D default_color & (FOREGROUND_BLUE | FOREGROUND_GREEN =
|=0A=
+				     FOREGROUND_RED);=0A=
+	       break;=0A=
 	     case 40:		/* BLACK background */=0A=
 	       bg =3D 0;=0A=
 	       break;=0A=
@@ -896,15 +890,39 @@=0A=
 	     case 47:    /* WHITE background */=0A=
 	       bg =3D BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED;=0A=
 	       break;=0A=
-	     default:=0A=
-	       fg =3D default_color & (FOREGROUND_BLUE | FOREGROUND_GREEN =
|=0A=
-				     FOREGROUND_RED);=0A=
+	     case 49:    /* Default background */=0A=
 	       bg =3D default_color & (BACKGROUND_BLUE | BACKGROUND_GREEN =
|=0A=
-				     BACKGROUND_RED | BACKGROUND_INTENSITY);=0A=
-	       bold =3D default_color & FOREGROUND_INTENSITY;=0A=
+				     BACKGROUND_RED);=0A=
+	       break;=0A=
+	     default:=0A=
 	       break;=0A=
 	   }=0A=
-	 SetConsoleTextAttribute (get_output_handle (), fg | bg | bold);=0A=
+=0A=
+      {=0A=
+	WORD fg2 =3D fg;=0A=
+	WORD bg2 =3D bg;=0A=
+=0A=
+	if (reverse) {=0A=
+	  fg2 =3D ((bg & BACKGROUND_RED) ? FOREGROUND_RED : 0) |=0A=
+		((bg & BACKGROUND_GREEN) ? FOREGROUND_GREEN : 0) |=0A=
+		((bg & BACKGROUND_BLUE) ? FOREGROUND_BLUE : 0);=0A=
+	  bg2 =3D ((fg & FOREGROUND_RED) ? BACKGROUND_RED : 0) |=0A=
+		((fg & FOREGROUND_GREEN) ? BACKGROUND_GREEN : 0) |=0A=
+		((fg & FOREGROUND_BLUE) ? BACKGROUND_BLUE : 0);=0A=
+	}=0A=
+=0A=
+	if (bold) fg2 |=3D FOREGROUND_INTENSITY;=0A=
+	if (underline) bg2 |=3D BACKGROUND_INTENSITY;=0A=
+	if (invis) {=0A=
+	  fg2 =3D ((bg2 & BACKGROUND_RED) ? FOREGROUND_RED : 0) |=0A=
+		((bg2 & BACKGROUND_GREEN) ? FOREGROUND_GREEN : 0) |=0A=
+		((bg2 & BACKGROUND_BLUE) ? FOREGROUND_BLUE : 0) |=0A=
+		((bg2 & BACKGROUND_INTENSITY) ? FOREGROUND_INTENSITY : 0);=0A=
+	}=0A=
+=0A=
+	SetConsoleTextAttribute (get_output_handle (), fg2 | bg2);=0A=
+      }=0A=
+=0A=
       break;=0A=
     case 'h':=0A=
     case 'l':=0A=
@@ -1079,7 +1097,10 @@=0A=
       size_t len =3D found - src;=0A=
       do {=0A=
 	size_t l2 =3D min (sizeof (buf), len);=0A=
-	CharToOemBuff ((LPCSTR)src, buf, l2);=0A=
+	if (altfont_ =3D=3D 0)=0A=
+	  CharToOemBuff ((LPCSTR)src, buf, l2);=0A=
+	else=0A=
+	  strncpy(buf, (const char *)src, l2);=0A=
 	if (! WriteFile (get_output_handle (), buf, l2, &done, 0))=0A=
 	{=0A=
 	  debug_printf ("write failed, handle %p", get_output_handle ());=0A=

------_=_NextPart_000_01C03868.248F76F0
Content-Type: application/octet-stream;
	name="termcap"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="termcap"

cygwin|ansi emulation for cygwin32:\=0A=
	:am:ms:xn:xo:\=0A=
	:Co#8:it#8:pa#64:\=0A=
	=
:&7=3D^Z:@7=3D\E[4~:AB=3D\E[4%dm:AF=3D\E[3%dm:AL=3D\E[%dL:DC=3D\E[%dP:\=0A=
	:DL=3D\E[%dM:F1=3D\E[23~:F2=3D\E[24~:F3=3D\E[25~:F4=3D\E[26~:\=0A=
	:F5=3D\E[28~:F6=3D\E[29~:F7=3D\E[31~:F8=3D\E[32~:F9=3D\E[33~:\=0A=
	=
:FA=3D\E[34~:IC=3D\E[%d@:K1=3D\E[1~:K2=3D\E[G:K3=3D\E[5~:K4=3D\E[4~:\=0A=
	:K5=3D\E[6~:\=0A=
	=
:ac=3D+\020\054\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332=
m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\3=
30}\234~\376:\=0A=
        :as=3D\E[11m:ae=3D\E[10m:\=0A=
	=
:bl=3D^G:cb=3D\E[1K:cd=3D\E[J:ce=3D\E[K:cl=3D\E[2J:cm=3D\E[%i%d;%dH:\=0A=
	:cr=3D^M:do=3D\E[B:ei=3D:ho=3D\E[H:im=3D:k1=3D\E[[A:\=0A=
	=
:k2=3D\E[[B:k3=3D\E[[C:k4=3D\E[[D:k5=3D\E[[E:k6=3D\E[17~:k7=3D\E[18~:\=0A=
	=
:k8=3D\E[19~:k9=3D\E[20~:k;=3D\E[21~:kD=3D\E[3~:kI=3D\E[2~:kN=3D\E[6~:\=0A=
	=
:kP=3D\E[5~:kb=3D^H:kd=3D\E[B:kh=3D\E[1~:kl=3D\E[D:kr=3D\E[C:ku=3D\E[A:\=
=0A=
	:le=3D^H:md=3D\E[1m:me=3D\E[m:mk=3D\E[8m:mr=3D\E[7m:nd=3D\E[C:\=0A=
	:op=3D\E[39;49m:r1=3D\Ec:rc=3D\E8:sc=3D\E7:se=3D\E[22;27m:sf=3D^J:\=0A=
	=
:so=3D\E[1;7m:sr=3D\EM:st=3D\EH:ta=3D^I:u6=3D\E[%i%d;%dR:u7=3D\E[6n:\=0A=
	:u8=3D\E[?6c:u9=3D\E[c:ue=3D\E[24m:up=3D\E[A:us=3D\E[4m:=0A=

------_=_NextPart_000_01C03868.248F76F0
Content-Type: application/octet-stream;
	name="terminfo"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="terminfo"

cygwin|ansi emulation for cygwin32,=0A=
	am, msgr, xenl, xon,=0A=
	colors#8, it#8, pairs#64,=0A=
        =
acsc=3D+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m=
\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\33=
0}\234~\376,=0A=
        smacs=3D\E[11m, rmacs=3D\E[10m,=0A=
	bel=3D^G, bold=3D\E[1m, clear=3D\E[2J, cr=3D^M,=0A=
	cub1=3D^H, cud1=3D\E[B, cuf1=3D\E[C,=0A=
	cup=3D\E[%i%p1%d;%p2%dH, cuu1=3D\E[A, dch=3D\E[%dP, dl=3D\E[%dM,=0A=
	ed=3D\E[J, el=3D\E[K, el1=3D\E[1K, home=3D\E[H, ht=3D^I, hts=3D\EH,=0A=
	ich=3D\E[%d@, il=3D\E[%dL, ind=3D^J, invis=3D\E[8m,=0A=
	ka1=3D\E[1~, ka3=3D\E[5~, kb2=3D\E[G, kbs=3D^H, kc1=3D\E[4~, =
kc3=3D\E[6~,=0A=
	kcub1=3D\E[D, kcud1=3D\E[B, kcuf1=3D\E[C, kcuu1=3D\E[A,=0A=
	kdch1=3D\E[3~, kend=3D\E[4~, kf1=3D\E[[A, kf10=3D\E[21~,=0A=
	kf11=3D\E[23~, kf12=3D\E[24~, kf13=3D\E[25~, kf14=3D\E[26~,=0A=
	kf15=3D\E[28~, kf16=3D\E[29~, kf17=3D\E[31~, kf18=3D\E[32~,=0A=
	kf19=3D\E[33~, kf2=3D\E[[B, kf20=3D\E[34~, kf3=3D\E[[C, =
kf4=3D\E[[D,=0A=
	kf5=3D\E[[E, kf6=3D\E[17~, kf7=3D\E[18~, kf8=3D\E[19~, =
kf9=3D\E[20~,=0A=
	khome=3D\E[1~, kich1=3D\E[2~, knp=3D\E[6~, kpp=3D\E[5~, kspd=3D^Z,=0A=
	op=3D\E[39;49m, rc=3D\E8, rev=3D\E[7m, ri=3D\EM, rmso=3D\E[22;27m,=0A=
	rmul=3D\E[24m, rs1=3D\Ec, sc=3D\E7, setab=3D\E[4%dm,=0A=
	setaf=3D\E[3%dm,=0A=
	=
sgr=3D\E[0%?%p1%t;1;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p7%t;8%;%?%p9=
%t;11%;m,=0A=
	sgr0=3D\E[m, smso=3D\E[1;7m, smul=3D\E[4m, u6=3D\E[%i%d;%dR,=0A=
	u7=3D\E[6n, u8=3D\E[?6c, u9=3D\E[c,=0A=


------_=_NextPart_000_01C03868.248F76F0
Content-Type: text/plain; charset=us-ascii

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com
------_=_NextPart_000_01C03868.248F76F0--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019