Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Message-ID: From: "Town, Brad" To: "'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) Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C03868.248F76F0" ------_=_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--