1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-06 11:55:48 +00:00

(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.
This commit is contained in:
Richard M. Stallman 1997-01-06 21:23:25 +00:00
parent ac707ebc83
commit b36701cc09

View File

@ -62,6 +62,10 @@ Boston, MA 02111-1307, USA. */
#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 @@ ScreenVisualBell (void)
#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, &regs, &regs);
}
/* 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, &regs, &regs);
}
}
/* Set the screen dimensions so that it can show no less than
ROWS x COLS frame. */
@ -869,6 +895,10 @@ IT_reset_terminal_modes (void)
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 @@ run_msdos_command (argv, dir, tempin, tempout, temperr)
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);