lx-2.0.10: semigraphics, fixed console code-page switching

Juergen Ehling (eh@eclipse.aball.de)
Thu, 26 Sep 1996 04:58:07 +0200 (MET DST)


Couldn't do semigrafics when using 7bit codes after switching to "second
alternate code page" with ansi (at least: SCO) style control sequence
"ESC[12m". The kernel properly sets "toggle_meta" to 1, maps the 7bit code
to unicode but fails to convert that to the 8bit code for the screen;
instead delivers the original 7bit code (so we get "MM" instead of "=="
etc.)

The reason is the failing test for validity of a hash table, which isn't
used any longer but seems not definitely to be discarded, as some remains
still hang around. The following fix gave me my semigraphics and hopefully
will not be destructive in other ways, as I couldn't check for the necessity
of this test regarding the validity of the "paged" tables, now used instead
of hashing.

I experienced the problem while using iBCS on old Xenix programms, so I send
this mail to the iBCS list either.

- -
Hans-Juergen Ehling | Berner Str. 4, 12205 Berlin | NETZ ohne ZENSUR !!
| Voice +49 30 8470 98 66 | OFFENE Software !!
| E-Mail eh@eclipse.aball.de | LINUX! Stoppt M$ !!

------------------- uni_to_pc conversion patch ---------------------------
diff -u -r lx/drivers/char/consolemap.c /usr/src/linux-2.0.10/drivers/char/consolemap.c
--- lx/drivers/char/consolemap.c Sat Jun 8 15:14:39 1996
+++ /usr/src/linux-2.0.10/drivers/char/consolemap.c Thu Sep 26 03:24:05 1996
@@ -457,9 +457,14 @@
* UNI_DIRECT_MASK indicates the bit span of the region.
*/
else if ( (ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE )
- return ucs & UNI_DIRECT_MASK;
-
- if (!hashtable_contents_valid)
+ return ucs & UNI_DIRECT_MASK;
+
+ /* Currently (lx-2.0.10, 960926) hashtable_contents_ _never_ valid, so no
+ * unicode is eval'ed by uni_pagedir. Thus switching to second alternate
+ * code page (SCO, right) without effect. Is there still any function for
+ * this test? Thus cancel or replace! eh@eclipse.aball.de
+ */
+ if (0 && !hashtable_contents_valid)
return -3;

if ( (p1 = uni_pagedir[ucs >> 11]) &&
------------------- uni_to_pc conversion patch - end----------------------