summaryrefslogtreecommitdiff
path: root/src/msdos.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-07-09 05:13:38 +0000
committerRichard M. Stallman <rms@gnu.org>1994-07-09 05:13:38 +0000
commit11395e81110338eb7f37a043d5b0bf1cbfac9cf2 (patch)
tree1f4096adacc2e6e1ec3d1d86e2ea45c0134f1d49 /src/msdos.c
parent57c6b7248ee19a6d2650c9d74a415dc53dd67e8e (diff)
downloademacs-11395e81110338eb7f37a043d5b0bf1cbfac9cf2.tar.gz
(install_ctrl_break_check): Doc fix.
(do_visible_bell): Clean-up using Gnu assembly extension.
Diffstat (limited to 'src/msdos.c')
-rw-r--r--src/msdos.c56
1 files changed, 21 insertions, 35 deletions
diff --git a/src/msdos.c b/src/msdos.c
index 0b738c4a050..3ef68d0ccc9 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -779,52 +779,38 @@ init_environment (argc, argv, skip_args)
/* Flash the screen as a substitute for BEEPs. */
-static unsigned char _xorattr;
-
static void
do_visible_bell (xorattr)
unsigned char xorattr;
{
- _xorattr = xorattr;
asm volatile
- (" pushl %eax
- pushl %ebx
- pushl %ecx
- pushl %edx
- movl $1,%edx
+ (" movb $1,%%dl
visible_bell_0:
- call _ScreenRows
- pushl %eax
- call _ScreenCols
- pushl %eax
- movl _ScreenPrimary,%eax
+ movl _ScreenPrimary,%%eax
call dosmemsetup
- movl %eax,%ebx
- popl %ecx
- popl %eax
- imull %eax,%ecx
- movb (__xorattr),%al
- incl %ebx
+ movl %%eax,%%ebx
+ movl %1,%%ecx
+ movb %0,%%al
+ incl %%ebx
visible_bell_1:
- xorb %al,%gs:(%ebx)
- addl $2,%ebx
- decl %ecx
+ xorb %%al,%%gs:(%%ebx)
+ addl $2,%%ebx
+ decl %%ecx
jne visible_bell_1
- decl %edx
+ decb %%dl
jne visible_bell_3
visible_bell_2:
- movzwl %ax,%eax
- movzwl %ax,%eax
- movzwl %ax,%eax
- movzwl %ax,%eax
- decw %cx
+ movzwl %%ax,%%eax
+ movzwl %%ax,%%eax
+ movzwl %%ax,%%eax
+ movzwl %%ax,%%eax
+ decw %%cx
jne visible_bell_2
jmp visible_bell_0
-visible_bell_3:
- popl %edx
- popl %ecx
- popl %ebx
- popl %eax");
+visible_bell_3:"
+ : /* no output */
+ : "m" (xorattr), "g" (ScreenCols () * ScreenRows ())
+ : "%eax", "%ebx", /* "%gs",*/ "%ecx", "%edx");
}
/* At screen position (X,Y), output C characters from string S with
@@ -1044,7 +1030,7 @@ install_ctrl_break_check ()
if (!ctrlbreakinstalled)
{
/* Don't press Ctrl-Break if you don't have either DPMI or Emacs
- was compiler with Djgpp 1.11 maintenance level 2 or later! */
+ was compiler with Djgpp 1.11 maintenance level 5 or later! */
ctrlbreakinstalled = 1;
ctrl_break_vector.pm_offset = (int) ctrl_break_func;
_go32_dpmi_allocate_real_mode_callback_iret (&ctrl_break_vector,
@@ -1122,7 +1108,7 @@ mouse_pressed (b, xp, yp)
regs.x.bx = mouse_button_translate[b];
int86 (0x33, &regs, &regs);
if (regs.x.bx)
- *xp = regs.x.cx / 8, *yp = regs.x.dx /8;
+ *xp = regs.x.cx / 8, *yp = regs.x.dx / 8;
return (regs.x.bx != 0);
}