Mercurial > emacs
changeset 16837:7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
(maybe_enable_blinking): New function, restores the original state
of the blink bit.
(IT_reset_terminal_modes): Restore the original state of the blink
bit when suspending/exiting.
(run_msdos_command): Make sure bright background colors are again
enabled after subsidiary program returns.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 06 Jan 1997 21:23:25 +0000 |
parents | ba46af9fd00d |
children | 9bcab3c812bb |
files | src/msdos.c |
diffstat | 1 files changed, 35 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/msdos.c Mon Jan 06 06:51:29 1997 +0000 +++ b/src/msdos.c Mon Jan 06 21:23:25 1997 +0000 @@ -62,6 +62,10 @@ #define _USE_LFN 0 #endif +#ifndef _dos_ds +#define _dos_ds _go32_info_block.selector_for_linear_memory +#endif + #if __DJGPP__ > 1 #include <signal.h> @@ -370,17 +374,39 @@ #ifndef HAVE_X_WINDOWS +static int blink_bit = -1; /* the state of the blink bit at startup */ + /* Enable bright background colors. */ static void bright_bg (void) { union REGS regs; + /* Remember the original state of the blink/bright-background bit. + It is stored at 0040:0065h in the BIOS data area. */ + if (blink_bit == -1) + blink_bit = (_farpeekb (_dos_ds, 0x465) & 0x20) == 0x20; + regs.h.bl = 0; regs.x.ax = 0x1003; int86 (0x10, ®s, ®s); } +/* Disable bright background colors (and enable blinking) if we found + the video system in that state at startup. */ +static void +maybe_enable_blinking (void) +{ + if (blink_bit == 1) + { + union REGS regs; + + regs.h.bl = 1; + regs.x.ax = 0x1003; + int86 (0x10, ®s, ®s); + } +} + /* Set the screen dimensions so that it can show no less than ROWS x COLS frame. */ @@ -869,6 +895,10 @@ return; mouse_off (); + + /* Leave the video system in the same state as we found it, + as far as the blink/bright-background bit is concerned. */ + maybe_enable_blinking (); /* We have a situation here. We cannot just do ScreenUpdate(startup_screen_buffer) because @@ -3010,6 +3040,11 @@ mouse_init (); mouse_moveto (x, y); } + + /* Some programs might change the meaning of the highest bit of the + text attribute byte, so we get blinking characters instead of the + bright background colors. Restore that. */ + bright_bg (); done: chdir (oldwd);