Mercurial > emacs
changeset 22481:c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
(dos_yield_time_slice): New function.
(sys_select): Use it instead of __dpmi_yield.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sun, 14 Jun 1998 16:19:33 +0000 |
parents | a85ad07a6e4b |
children | eb09852bfc05 |
files | src/msdos.c |
diffstat | 1 files changed, 27 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/msdos.c Sun Jun 14 15:34:02 1998 +0000 +++ b/src/msdos.c Sun Jun 14 16:19:33 1998 +0000 @@ -1272,11 +1272,13 @@ int always; { int i; - union REGS regs; - - /* See if Keyb.Com is installed (for international keyboard support). */ + _go32_dpmi_registers regs; + + /* See if Keyb.Com is installed (for international keyboard support). + Note: calling Int 2Fh via int86 wedges the DOS box on some versions + of Windows 9X! So don't do that! */ regs.x.ax = 0xad80; - int86 (0x2f, ®s, ®s); + _go32_dpmi_simulate_int (0x2f, ®s); if (regs.h.al == 0xff) international_keyboard = 1; @@ -3421,6 +3423,25 @@ && (long)(time).tv_usec <= 0)) #endif +/* This yields the rest of the current time slice to the task manager. + It should be called by any code which knows that it has nothing + useful to do except idle. + + I don't use __dpmi_yield here, since versions of library before 2.02 + called Int 2Fh/AX=1680h there in a way that would wedge the DOS box + on some versions of Windows 9X. */ + +void +dos_yield_time_slice (void) +{ + _go32_dpmi_registers r; + + r.x.ax = 0x1680; + r.x.ss = r.x.sp = r.x.flags = 0; + _go32_dpmi_simulate_int (0x2f, &r); + if (r.h.al == 0x80) + errno = ENOSYS; +} /* Only event queue is checked. */ /* We don't have to call timer_check here @@ -3454,9 +3475,7 @@ { while (!detect_input_pending ()) { -#if __DJGPP__ >= 2 - __dpmi_yield (); -#endif + dos_yield_time_slice (); } } else @@ -3482,9 +3501,7 @@ if (EMACS_TIME_ZERO_OR_NEG_P (*timeout)) return 0; cllast = clnow; -#if __DJGPP__ >= 2 - __dpmi_yield (); -#endif + dos_yield_time_slice (); } }