LTCD_060719.ISO
This commit is contained in:
commit
f86e69648b
156 files changed
+49537
No files matched your search
@@ -0,0 +1,189 @@
|
||||
I8 mxx=grwidth>>1,
|
||||
myy=grheight>>1,
|
||||
mzz=0;
|
||||
BoolU4 mouse_buttons[5];
|
||||
U8 last_mouse_jiffy=0;
|
||||
|
||||
BoolU4 mouse_installed=FALSE;
|
||||
BoolU4 mouse_has_wheel=FALSE;
|
||||
BoolU4 mouse_has_ext_buttons=FALSE;
|
||||
BoolU4 mouse_evt=FALSE;
|
||||
BoolU4 mouse_irqs_working=FALSE;
|
||||
U8 mouse_evt_time;
|
||||
|
||||
|
||||
void MouseGetDeviceType()
|
||||
{
|
||||
U1 b;
|
||||
KbdMouseCmdAck(0xF2);
|
||||
b=KbdCmdRead;
|
||||
if (b==3)
|
||||
mouse_has_wheel=TRUE;
|
||||
else if (b==4)
|
||||
mouse_has_ext_buttons=TRUE;
|
||||
}
|
||||
|
||||
void MouseReset()
|
||||
{
|
||||
KbdCmdFlush;
|
||||
KbdCmdSend(KEYB_CTRL,0xA8); //Enable Mouse
|
||||
KbdCmdFlush;
|
||||
KbdCmdSend(KEYB_CTRL,0xA9); //check for mouse
|
||||
KbdCmdFlush;
|
||||
|
||||
KbdMouseCmdAck(0xFF); //Reset
|
||||
KbdCmdRead;
|
||||
KbdCmdRead;
|
||||
KbdMouseCmdAck(0xFF); //Reset
|
||||
KbdCmdRead;
|
||||
KbdCmdRead;
|
||||
KbdMouseCmdAck(0xF3);
|
||||
KbdMouseCmdAck(200);
|
||||
KbdMouseCmdAck(0xF3); // enable Mouse
|
||||
KbdMouseCmdAck(100); // Set Rate
|
||||
KbdMouseCmdAck(0xF3);
|
||||
KbdMouseCmdAck(80); //Resolution
|
||||
MouseGetDeviceType; // enable Mouse
|
||||
|
||||
KbdMouseCmdAck(0xF3);
|
||||
KbdMouseCmdAck(10);
|
||||
MouseGetDeviceType; // enable Mouse
|
||||
|
||||
KbdMouseCmdAck(0xE8); //Resolution
|
||||
KbdMouseCmdAck(0x03);
|
||||
KbdMouseCmdAck(0xE6);
|
||||
|
||||
KbdMouseCmdAck(0xF3); // Set Rate
|
||||
//if your mouse doesn't work, try this
|
||||
// KbdMouseCmdAck(40);
|
||||
KbdMouseCmdAck(100);
|
||||
|
||||
KbdMouseCmdAck(0xF4); // enable Mouse
|
||||
}
|
||||
|
||||
|
||||
void MouseHandler()
|
||||
{
|
||||
I8 i,j,dx,dy,dz,
|
||||
old_mxx=mxx,old_myy=myy,old_mzz=mzz;
|
||||
BoolU4 evt=FALSE,old_buttons[5];
|
||||
U1 mouse_buf[4];
|
||||
U8 evt_time=BootTime;
|
||||
|
||||
try {
|
||||
for (i=0;i<5;i++)
|
||||
old_buttons[i]=mouse_buttons[i];
|
||||
for (i=0;i<3;i++) {
|
||||
j=KbdCmdRead;
|
||||
if (j<0)
|
||||
throw;
|
||||
else
|
||||
mouse_buf[i]=j;
|
||||
}
|
||||
if (mouse_has_wheel || mouse_has_ext_buttons) {
|
||||
j=KbdCmdRead;
|
||||
if (j<0)
|
||||
throw;
|
||||
else
|
||||
mouse_buf[3]=j;
|
||||
} else
|
||||
mouse_buf[3]=0;
|
||||
Sti;
|
||||
mouse_buttons[0] = mouse_buf[0] & 1;
|
||||
mouse_buttons[1] = (mouse_buf[0] & 2) >> 1;
|
||||
mouse_buttons[2] = (mouse_buf[0] & 4) >> 2;
|
||||
mouse_buttons[3] = (mouse_buf[3] & 0x10) >> 4;
|
||||
mouse_buttons[4] = (mouse_buf[3] & 0x20) >> 5;
|
||||
if (mouse_buf[0] & 0x10)
|
||||
dx=mouse_buf[1]-256;
|
||||
else
|
||||
dx=mouse_buf[1];
|
||||
if (mouse_buf[0] & 0x20)
|
||||
dy=256-mouse_buf[2];
|
||||
else
|
||||
dy=-mouse_buf[2];
|
||||
if (mouse_buf[3] & 0x08)
|
||||
dz=(mouse_buf[3]&7)-8;
|
||||
else
|
||||
dz=mouse_buf[3]&7;
|
||||
|
||||
mxx+=dx;
|
||||
myy+=dy;
|
||||
mzz+=dz;
|
||||
|
||||
if (mxx < 0) mxx=0;
|
||||
if (mxx>=grwidth) mxx=grwidth-1;
|
||||
if (myy < 0) myy=0;
|
||||
if (myy>=grheight) myy=grheight-1;
|
||||
} catch {
|
||||
Fs->catch_except=TRUE;
|
||||
KbdCmdFlush;
|
||||
}
|
||||
for (i=0;i<5;i++)
|
||||
if (old_buttons[i]!=mouse_buttons[i])
|
||||
evt=TRUE;
|
||||
if (old_mxx!=mxx || old_myy!=myy || old_mzz!=mzz)
|
||||
evt=TRUE;
|
||||
if (evt) {
|
||||
mouse_evt_time=evt_time;
|
||||
last_mouse_jiffy=jiffies;
|
||||
mouse_evt=TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void MouseIrqHandler()
|
||||
{
|
||||
mouse_irqs_working=TRUE;
|
||||
MouseHandler;
|
||||
}
|
||||
|
||||
|
||||
void PollMouse()
|
||||
{ //I can't get IRQ's working on some computers
|
||||
U8 old_flags=GetFlags;
|
||||
if (mouse_irqs_working) return;
|
||||
|
||||
// Cli;
|
||||
if (!Bt(&sys_irq_flags,1)) {//not in keybd IRQ
|
||||
if (InP(KEYB_CTRL) & 1) {
|
||||
KbdCmdSend(KEYB_CTRL,0x60);
|
||||
KbdCmdSend(KEYB_PORT,0x51); //disable kbd
|
||||
|
||||
MouseHandler;
|
||||
|
||||
KbdCmdSend(KEYB_CTRL,0x60);
|
||||
KbdCmdSend(KEYB_PORT,0x41); //enable kbd
|
||||
}
|
||||
}
|
||||
SetFlags(old_flags);
|
||||
}
|
||||
|
||||
|
||||
BoolU4 InstallMouseDriver()
|
||||
{
|
||||
BoolU4 result;
|
||||
I8 i;
|
||||
// U8 old_flags=GetFlags;
|
||||
// Cli;
|
||||
ext[EXT_IRQ0C]=NULL;
|
||||
mouse_evt=FALSE;
|
||||
for(i=0;i<5;i++)
|
||||
mouse_buttons[i]=0;
|
||||
mouse_has_wheel=FALSE;
|
||||
mouse_has_ext_buttons=FALSE;
|
||||
try {
|
||||
MouseReset;
|
||||
result=TRUE;
|
||||
mouse_evt=TRUE;
|
||||
ext[EXT_IRQ0C]=&MouseIrqHandler;
|
||||
} catch {
|
||||
Fs->catch_except=TRUE;
|
||||
result=FALSE;
|
||||
}
|
||||
mouse_installed=result;
|
||||
// SetFlags(old_flags);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Spawn(&InstallMouseDriver);
|
||||
Reference in new issue
Block a user