Fixed jump. Added MultiMouse button support [pagefault]. Improved mouse handling. Fixed issue in ManyMouse library when no mice are detected (Windows crash fix).
This commit is contained in:
@@ -54,11 +54,15 @@ int ManyMouse_Init(void)
|
|||||||
for (i = 0; mice_drivers[i]; i++)
|
for (i = 0; mice_drivers[i]; i++)
|
||||||
{
|
{
|
||||||
int mice = mice_drivers[i]->init();
|
int mice = mice_drivers[i]->init();
|
||||||
if (mice >= 0)
|
if (mice > 0)
|
||||||
{
|
{
|
||||||
driver = mice_drivers[i];
|
driver = mice_drivers[i];
|
||||||
return(mice);
|
return(mice);
|
||||||
} /* if */
|
} /* if */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
} /* for */
|
} /* for */
|
||||||
|
|
||||||
return(-1);
|
return(-1);
|
||||||
|
|||||||
@@ -447,10 +447,13 @@ void DisplayBatteryStatus()
|
|||||||
#ifndef __MSDOS__
|
#ifndef __MSDOS__
|
||||||
|
|
||||||
int MouseCount = 0;
|
int MouseCount = 0;
|
||||||
int Mouse1MoveX = 0;
|
|
||||||
int Mouse2MoveX = 0;
|
unsigned short MouseMoveX[2];
|
||||||
int Mouse1MoveY = 0;
|
unsigned short MouseMoveY[2];
|
||||||
int Mouse2MoveY = 0;
|
unsigned short MouseButton[2];
|
||||||
|
|
||||||
|
bool MouseWaiting[2];
|
||||||
|
ManyMouseEvent MouseEvent[2];
|
||||||
|
|
||||||
void MultiMouseShutdown()
|
void MultiMouseShutdown()
|
||||||
{
|
{
|
||||||
@@ -464,6 +467,10 @@ void MultiMouseInit()
|
|||||||
printf("ManyMouse: %d mice detected.\n", MouseCount);
|
printf("ManyMouse: %d mice detected.\n", MouseCount);
|
||||||
if (MouseCount > 1)
|
if (MouseCount > 1)
|
||||||
{
|
{
|
||||||
|
MouseMoveX[0] = MouseMoveX[1] = 0;
|
||||||
|
MouseMoveY[0] = MouseMoveY[1] = 0;
|
||||||
|
MouseButton[0] = MouseButton[1] = 0;
|
||||||
|
MouseWaiting[0] = MouseWaiting[1] = false;
|
||||||
atexit(MultiMouseShutdown);
|
atexit(MultiMouseShutdown);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -472,42 +479,36 @@ void MultiMouseInit()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mouse1Waiting = false, Mouse2Waiting = false;
|
#define BIT(x) (1 << (x))
|
||||||
ManyMouseEvent Mouse1Event,Mouse2Event;
|
#define MOUSE_BUTTON_HANDLE(mouse, bit, value) \
|
||||||
|
if (value) { mouse |= BIT(bit); } \
|
||||||
|
else { mouse &= ~BIT(bit); }
|
||||||
|
|
||||||
|
unsigned char mouse;
|
||||||
void MultiMouseProcess(unsigned int mouse)
|
void MultiMouseProcess()
|
||||||
{
|
{
|
||||||
ManyMouseEvent event;
|
ManyMouseEvent event;
|
||||||
event.device = ~0;
|
event.device = ~0;
|
||||||
|
|
||||||
Mouse1MoveX = Mouse1MoveY = Mouse2MoveX = Mouse2MoveY = 0;
|
MouseMoveX[mouse] = 0;
|
||||||
|
MouseMoveY[mouse] = 0;
|
||||||
|
//MouseButton[mouse] = 0;
|
||||||
|
|
||||||
if (mouse == 1)
|
if (MouseWaiting[mouse])
|
||||||
{
|
{
|
||||||
if (Mouse1Waiting)
|
if (MouseEvent[mouse].type == MANYMOUSE_EVENT_RELMOTION)
|
||||||
{
|
{
|
||||||
if (Mouse1Event.type == MANYMOUSE_EVENT_RELMOTION)
|
if (MouseEvent[mouse].item == 0) { MouseMoveX[mouse] = MouseEvent[mouse].value; }
|
||||||
{
|
else { MouseMoveY[mouse] = MouseEvent[mouse].value; }
|
||||||
if (Mouse1Event.item == 0) { Mouse1MoveX = Mouse1Event.value; } else { Mouse1MoveY = Mouse1Event.value; }
|
|
||||||
}
|
}
|
||||||
Mouse1Waiting = false;
|
else if (MouseEvent[mouse].type == MANYMOUSE_EVENT_BUTTON)
|
||||||
|
{
|
||||||
|
if (MouseEvent[mouse].item == 0) { MOUSE_BUTTON_HANDLE(MouseButton[mouse], 0, MouseEvent[mouse].value); }
|
||||||
|
else if (MouseEvent[mouse].item == 1) { MOUSE_BUTTON_HANDLE(MouseButton[mouse], 1, MouseEvent[mouse].value); }
|
||||||
|
}
|
||||||
|
MouseWaiting[mouse] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (mouse == 2)
|
|
||||||
{
|
|
||||||
if (Mouse2Waiting)
|
|
||||||
{
|
|
||||||
if (Mouse2Event.type == MANYMOUSE_EVENT_RELMOTION)
|
|
||||||
{
|
|
||||||
if (Mouse2Event.item == 1) { Mouse2MoveX = Mouse2Event.value; } else { Mouse2MoveY = Mouse2Event.value; }
|
|
||||||
}
|
|
||||||
Mouse2Waiting = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((event.device != 0) && (event.device != 1))
|
while ((event.device != 0) && (event.device != 1))
|
||||||
{
|
{
|
||||||
@@ -516,31 +517,23 @@ void MultiMouseProcess(unsigned int mouse)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mouse == 1) && event.device == 1)
|
if (event.device == (mouse^1))
|
||||||
{
|
{
|
||||||
Mouse2Event = event;
|
MouseEvent[event.device] = event;
|
||||||
Mouse2Waiting = true;
|
MouseWaiting[event.device] = true;
|
||||||
event.device = ~0;
|
|
||||||
}
|
|
||||||
if ((mouse == 2) && event.device == 0)
|
|
||||||
{
|
|
||||||
Mouse1Event = event;
|
|
||||||
Mouse1Waiting = true;
|
|
||||||
event.device = ~0;
|
event.device = ~0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.type == MANYMOUSE_EVENT_RELMOTION)
|
if (event.type == MANYMOUSE_EVENT_RELMOTION)
|
||||||
{
|
{
|
||||||
if (event.device == 0)
|
if (event.item == 0) { MouseMoveX[mouse] = event.value; }
|
||||||
{
|
else { MouseMoveY[mouse] = event.value; }
|
||||||
if (event.item == 0) { Mouse1MoveX = event.value; } else { Mouse1MoveY = event.value; }
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (event.device == 1)
|
else if (event.type == MANYMOUSE_EVENT_BUTTON)
|
||||||
{
|
{
|
||||||
if (event.item == 0) { Mouse2MoveX = event.value; } else { Mouse2MoveY = event.value; }
|
if (event.item == 0) { MOUSE_BUTTON_HANDLE(MouseButton[mouse], 0, event.value); }
|
||||||
}
|
else if (event.item == 1) { MOUSE_BUTTON_HANDLE(MouseButton[mouse], 1, event.value); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -518,7 +518,7 @@ NEWSYM cachevideo
|
|||||||
.nospeedreset
|
.nospeedreset
|
||||||
mov eax,[KeyResetAll]
|
mov eax,[KeyResetAll]
|
||||||
test byte[pressed+eax],1
|
test byte[pressed+eax],1
|
||||||
je .nodis6
|
je near .nodis6
|
||||||
mov byte[pressed+eax],2
|
mov byte[pressed+eax],2
|
||||||
mov byte[Voice0Disable],1
|
mov byte[Voice0Disable],1
|
||||||
mov byte[Voice1Disable],1
|
mov byte[Voice1Disable],1
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ EXTSYM MovieDisplayFrame
|
|||||||
EXTSYM MouseCount,device2
|
EXTSYM MouseCount,device2
|
||||||
|
|
||||||
%ifndef __MSDOS__
|
%ifndef __MSDOS__
|
||||||
EXTSYM Mouse1MoveX,Mouse1MoveY,Mouse2MoveX,Mouse2MoveY,MultiMouseProcess
|
EXTSYM MouseMoveX,MouseMoveY,MouseButton,MultiMouseProcess,mouse
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%ifdef __MSDOS__
|
%ifdef __MSDOS__
|
||||||
@@ -153,20 +153,22 @@ NEWSYM processmouse1
|
|||||||
push edi
|
push edi
|
||||||
push edx
|
push edx
|
||||||
push ebx
|
push ebx
|
||||||
call Get_MouseData
|
|
||||||
mov [mousebuttons],bx
|
|
||||||
%ifndef __MSDOS__
|
%ifndef __MSDOS__
|
||||||
cmp byte[MouseCount],1
|
cmp byte[MouseCount],1
|
||||||
jle .nomultimouse
|
jle .nomultimouse
|
||||||
pushad
|
pushad
|
||||||
mov eax,1
|
mov byte[mouse],0
|
||||||
call MultiMouseProcess
|
call MultiMouseProcess
|
||||||
popad
|
popad
|
||||||
mov cx,[Mouse1MoveX]
|
mov bx,[MouseButton]
|
||||||
mov dx,[Mouse1MoveY]
|
mov [mousebuttons],bx
|
||||||
|
mov cx,[MouseMoveX]
|
||||||
|
mov dx,[MouseMoveY]
|
||||||
jmp .mousestuff
|
jmp .mousestuff
|
||||||
.nomultimouse
|
.nomultimouse
|
||||||
%endif
|
%endif
|
||||||
|
call Get_MouseData
|
||||||
|
mov [mousebuttons],bx
|
||||||
call Get_MousePositionDisplacement
|
call Get_MousePositionDisplacement
|
||||||
.mousestuff
|
.mousestuff
|
||||||
mov word[mousexpos],0
|
mov word[mousexpos],0
|
||||||
@@ -203,7 +205,19 @@ NEWSYM processmouse2
|
|||||||
push edi
|
push edi
|
||||||
push edx
|
push edx
|
||||||
push ebx
|
push ebx
|
||||||
|
%ifndef __MSDOS__
|
||||||
|
cmp byte[MouseCount],1
|
||||||
|
jle .nomultimouse
|
||||||
|
pushad
|
||||||
|
mov byte[mouse],1
|
||||||
|
call MultiMouseProcess
|
||||||
|
popad
|
||||||
|
mov bx,[MouseButton+2]
|
||||||
|
jmp .mousestuff
|
||||||
|
.nomultimouse
|
||||||
|
%endif
|
||||||
call Get_MouseData
|
call Get_MouseData
|
||||||
|
.mousestuff
|
||||||
mov [mousebuttons],bx
|
mov [mousebuttons],bx
|
||||||
cmp byte[device2],2
|
cmp byte[device2],2
|
||||||
jne .ss
|
jne .ss
|
||||||
@@ -226,18 +240,14 @@ NEWSYM processmouse2
|
|||||||
.ss
|
.ss
|
||||||
%ifndef __MSDOS__
|
%ifndef __MSDOS__
|
||||||
cmp byte[MouseCount],1
|
cmp byte[MouseCount],1
|
||||||
jle .nomultimouse
|
jle .nomultimouse2
|
||||||
pushad
|
mov cx,[MouseMoveX+2]
|
||||||
mov eax,2
|
mov dx,[MouseMoveY+2]
|
||||||
call MultiMouseProcess
|
jmp .mousestuff2
|
||||||
popad
|
.nomultimouse2
|
||||||
mov cx,[Mouse2MoveX]
|
|
||||||
mov dx,[Mouse2MoveY]
|
|
||||||
jmp .mousestuff
|
|
||||||
.nomultimouse
|
|
||||||
%endif
|
%endif
|
||||||
call Get_MousePositionDisplacement
|
call Get_MousePositionDisplacement
|
||||||
.mousestuff
|
.mousestuff2
|
||||||
cmp byte[device2],3
|
cmp byte[device2],3
|
||||||
je .le
|
je .le
|
||||||
cmp byte[device2],4
|
cmp byte[device2],4
|
||||||
|
|||||||
Reference in New Issue
Block a user