diff options
author | Pierre-Alexandre Meyer <pierre@mouraf.org> | 2009-08-30 23:47:46 -0700 |
---|---|---|
committer | Pierre-Alexandre Meyer <pierre@mouraf.org> | 2009-09-01 11:45:11 -0700 |
commit | be67a5d4fa9705b36fe36bebed708a0a2e95946b (patch) | |
tree | a7dfe5e3e1f93ce2bb39e1218ce059cb259d458c /com32/cmenu | |
parent | 1a5c2f5761210a05602c7c7e799ccb0f059b42ff (diff) | |
download | syslinux.git-be67a5d4fa9705b36fe36bebed708a0a2e95946b.tar.gz syslinux.git-be67a5d4fa9705b36fe36bebed708a0a2e95946b.tar.xz syslinux.git-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.c | 11 |
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'; |