aboutsummaryrefslogtreecommitdiffstats
path: root/com32/cmenu
diff options
context:
space:
mode:
authorPierre-Alexandre Meyer <pierre@mouraf.org>2009-08-30 23:47:46 -0700
committerPierre-Alexandre Meyer <pierre@mouraf.org>2009-09-01 11:45:11 -0700
commitbe67a5d4fa9705b36fe36bebed708a0a2e95946b (patch)
treea7dfe5e3e1f93ce2bb39e1218ce059cb259d458c /com32/cmenu
parent1a5c2f5761210a05602c7c7e799ccb0f059b42ff (diff)
downloadsyslinux-be67a5d4fa9705b36fe36bebed708a0a2e95946b.tar.gz
syslinux-be67a5d4fa9705b36fe36bebed708a0a2e95946b.tar.xz
syslinux-be67a5d4fa9705b36fe36bebed708a0a2e95946b.zip
cmenu: reset attributes instead of using ANSI sequence 22
hpa advised not to use ANSI sequence 22, as it may not work everywhere. Instead, let's reset attributes and set last_attr to unknown. The next background/foreground tests are then guaranteed to fire. We take a small hit in terms of performance though. Misc.: change initialization of last_attr to 0x300 (unknown) to trigger properly the tests the first time. Signed-off-by: Pierre-Alexandre Meyer <pierre@mouraf.org>
Diffstat (limited to 'com32/cmenu')
-rw-r--r--com32/cmenu/libmenu/com32io.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/com32/cmenu/libmenu/com32io.c b/com32/cmenu/libmenu/com32io.c
index ca207eed..3c4f9219 100644
--- a/com32/cmenu/libmenu/com32io.c
+++ b/com32/cmenu/libmenu/com32io.c
@@ -29,7 +29,7 @@ com32sys_t inreg, outreg; // Global register sets for use
static void cprint_vga2ansi(const char chr, const char attr)
{
static const char ansi_char[8] = "04261537";
- static uint8_t last_attr = 0x07;
+ static uint8_t last_attr = 0x300;
char buf[16], *p;
if (attr != last_attr) {
@@ -37,13 +37,12 @@ static void cprint_vga2ansi(const char chr, const char attr)
*p++ = '\033';
*p++ = '[';
- /* Beware! Do not use '1': this will reset all attributes off,
- * including the background color - as a result, the background
- * would be black after the highlight area <X> */
if (last_attr & ~attr & 0x88) {
- *p++ = '2';
- *p++ = '2';
+ *p++ = '0';
*p++ = ';';
+ /* Reset last_attr to unknown to handle
+ * background/foreground attributes correctly */
+ last_attr = 0x300;
}
if (attr & 0x08) {
*p++ = '1';