/* 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
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,
regs.x.bx = mouse_button_translate[b];
int86 (0x33, ®s, ®s);
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);
}