mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-25 23:10:32 +00:00
Reformatted all Kernel SerialDev files.
All Kernel files are now reformatted. Also reverted Caps Lock functionality. Might alter behaviour on symbols in the future.
This commit is contained in:
parent
7e0ce60071
commit
027648943f
6 changed files with 782 additions and 622 deletions
|
@ -28,7 +28,6 @@ Changes include:
|
|||
- HolyC -> CosmiC
|
||||
- System-wide renaming for clarity
|
||||
- Removed shift-space mechanism
|
||||
- Caps Lock is reassigned as Backspace
|
||||
- Reformatted code for readability
|
||||
- Added comments and documentation
|
||||
|
||||
|
|
Binary file not shown.
|
@ -146,4 +146,10 @@ StartOS.CC
|
|||
MemPhysical.CC
|
||||
PageTables.CC
|
||||
|
||||
SerialDev/
|
||||
Keyboard.CC
|
||||
MakeSerialDev.CC
|
||||
Message.CC
|
||||
Mouse.CC
|
||||
|
||||
$FG,7$-Tom$FG,0$
|
||||
|
|
|
@ -3,18 +3,18 @@ NORMAL_KEY_SCAN_DECODE_TABLE::
|
|||
DU8 0, CH_ESC, "1234567890-=", CH_BACKSPACE, '\t';
|
||||
DU8 "qwertyuiop[]", '\n', 0, "as";
|
||||
DU8 "dfghjkl;'\`", 0, "\\zxcv";
|
||||
DU8 "bnm,./",0,'*',0,CH_SPACE,CH_BACKSPACE,0,0,0,0,0;
|
||||
DU8 "bnm,./", 0, '*', 0, CH_SPACE, 0, 0, 0, 0, 0, 0;
|
||||
DU8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0;
|
||||
SHIFT_KEY_SCAN_DECODE_TABLE::
|
||||
DU8 0, CH_SHIFT_ESC, "!@#$$%^&*()_+", CH_BACKSPACE, '\t';
|
||||
DU8 "QWERTYUIOP{}", '\n', 0, "AS";
|
||||
DU8 "DFGHJKL:\"~", 0, "|ZXCV";
|
||||
DU8 "BNM<>?",0,'*',0,CH_SPACE,CH_BACKSPACE,0,0,0,0,0;
|
||||
DU8 "BNM<>?", 0, '*', 0, CH_SPACE, 0, 0, 0, 0, 0, 0;
|
||||
DU8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0;
|
||||
CTRL_KEY_SCAN_DECODE_TABLE::
|
||||
DU8 0, CH_ESC, "1234567890-=", CH_BACKSPACE, '\t';
|
||||
DU8 CH_CTRLQ,CH_CTRLW,CH_CTRLE,CH_CTRLR,CH_CTRLT,CH_CTRLY,CH_CTRLU,
|
||||
CH_CTRLI,CH_CTRLO,CH_CTRLP,"[]",'\n',0,CH_CTRLA,CH_CTRLS;
|
||||
DU8 CH_CTRLQ, CH_CTRLW, CH_CTRLE, CH_CTRLR, CH_CTRLT, CH_CTRLY, CH_CTRLU, CH_CTRLI, CH_CTRLO,
|
||||
CH_CTRLP, "[]", '\n', 0, CH_CTRLA, CH_CTRLS;
|
||||
DU8 CH_CTRLD, CH_CTRLF, CH_CTRLG, CH_CTRLH, CH_CTRLJ, CH_CTRLK, CH_CTRLL,
|
||||
";'\`", 0, "\\", CH_CTRLZ, CH_CTRLX, CH_CTRLC, CH_CTRLV;
|
||||
DU8 CH_CTRLB, CH_CTRLN, CH_CTRLM, ",./", 0, '*', 0, CH_SPACE, 0, 0, 0, 0, 0, 0;
|
||||
|
@ -24,8 +24,11 @@ CTRL_KEY_SCAN_DECODE_TABLE::
|
|||
U0 KbdCmdSend(I64 port, U8 val)
|
||||
{
|
||||
F64 timeout = tS + 0.125;
|
||||
while (tS<timeout) {
|
||||
if (!(InU8(KBD_CTRL)&2)) {
|
||||
|
||||
while (tS < timeout)
|
||||
{
|
||||
if (!(InU8(KBD_CTRL) & 2))
|
||||
{
|
||||
OutU8(port, val);
|
||||
return;
|
||||
}
|
||||
|
@ -36,6 +39,7 @@ U0 KbdCmdSend(I64 port, U8 val)
|
|||
I64 KbdCmdRead()
|
||||
{
|
||||
F64 timeout = tS + 0.125;
|
||||
|
||||
while (tS < timeout)
|
||||
if (InU8(KBD_CTRL) & 1)
|
||||
return InU8(KBD_PORT);
|
||||
|
@ -45,6 +49,7 @@ I64 KbdCmdRead()
|
|||
U0 KbdCmdFlush()
|
||||
{
|
||||
F64 timeout = tS + 0.03;
|
||||
|
||||
while (tS < timeout)
|
||||
InU8(KBD_PORT);
|
||||
}
|
||||
|
@ -52,32 +57,43 @@ U0 KbdCmdFlush()
|
|||
U0 KbdLEDsSet(I64 sc)
|
||||
{
|
||||
U8 v = 0;
|
||||
|
||||
BEqual(&v, 0, Bt(&sc, SCf_SCROLL));
|
||||
BEqual(&v, 1, Bt(&sc, SCf_NUM));
|
||||
BEqual(&v, 2, Bt(&sc, SCf_CAPS));
|
||||
try {
|
||||
try
|
||||
{
|
||||
KbdCmdSend(KBD_PORT, 0xED);
|
||||
KbdCmdSend(KBD_PORT, v);
|
||||
} catch
|
||||
}
|
||||
catch
|
||||
Fs->catch_except = TRUE;
|
||||
}
|
||||
|
||||
U0 KbdMouseCmdAck(...)
|
||||
{
|
||||
I64 i, ack, timeout;
|
||||
for (i=0;i<argc;i++) {
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
timeout = 5;
|
||||
do {
|
||||
do
|
||||
{
|
||||
ack = 0;
|
||||
try {
|
||||
try
|
||||
{
|
||||
KbdCmdSend(KBD_CTRL, 0xD4);
|
||||
KbdCmdSend(KBD_PORT, argv[i]);
|
||||
ack = KbdCmdRead;
|
||||
} catch {
|
||||
}
|
||||
catch
|
||||
{
|
||||
KbdCmdFlush;
|
||||
Fs->catch_except = TRUE;
|
||||
}
|
||||
} while (ack!=0xFA && --timeout);
|
||||
}
|
||||
while (ack != 0xFA && --timeout);
|
||||
|
||||
if (!timeout)
|
||||
throw;
|
||||
}
|
||||
|
@ -85,13 +101,16 @@ U0 KbdMouseCmdAck(...)
|
|||
|
||||
U0 KbdTypeMatic(U8 delay)
|
||||
{//Set speed of repeated keys.
|
||||
try {
|
||||
try
|
||||
{
|
||||
KbdCmdSend(KBD_CTRL, 0xA7); //Disable Mouse
|
||||
KbdCmdSend(KBD_CTRL, 0xAE); //Enable Keyboard
|
||||
KbdCmdSend(KBD_PORT, 0xF3);
|
||||
KbdCmdSend(KBD_PORT, delay);//Typematic rate
|
||||
KbdCmdSend(KBD_CTRL, 0xA8); //Enable Mouse
|
||||
} catch {
|
||||
}
|
||||
catch
|
||||
{
|
||||
KbdCmdFlush;
|
||||
Fs->catch_except = TRUE;
|
||||
}
|
||||
|
@ -101,14 +120,19 @@ I64 Char2ScanCode(I64 ch,I64 sc_flags=0)
|
|||
{//ASCII val to scan code (Slow).
|
||||
I64 i;
|
||||
U8 *table;
|
||||
if (sc_flags) {
|
||||
|
||||
if (sc_flags)
|
||||
{
|
||||
table = NORMAL_KEY_SCAN_DECODE_TABLE;
|
||||
if (sc_flags & SCF_CTRL || ch < 26)
|
||||
table = CTRL_KEY_SCAN_DECODE_TABLE;
|
||||
else if (sc_flags & SCF_SHIFT || 'A'<=ch<='Z') {
|
||||
else if (sc_flags & SCF_SHIFT || 'A' <= ch <= 'Z')
|
||||
{
|
||||
if (!(sc_flags & SCF_CAPS))
|
||||
table = SHIFT_KEY_SCAN_DECODE_TABLE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sc_flags & SCF_CAPS)
|
||||
table = SHIFT_KEY_SCAN_DECODE_TABLE;
|
||||
}
|
||||
|
@ -116,7 +140,9 @@ I64 Char2ScanCode(I64 ch,I64 sc_flags=0)
|
|||
if (table[i] == ch)
|
||||
return i | sc_flags;
|
||||
return sc_flags;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
table = NORMAL_KEY_SCAN_DECODE_TABLE;
|
||||
for (i = 0; i < 0x50; i++)
|
||||
if (table[i] == ch)
|
||||
|
@ -136,14 +162,18 @@ I64 Char2ScanCode(I64 ch,I64 sc_flags=0)
|
|||
U8 ScanCode2Char(I64 sc)
|
||||
{//Scan code to ASCII val.
|
||||
U8 *table = NORMAL_KEY_SCAN_DECODE_TABLE;
|
||||
|
||||
if (sc & SCF_E0_PREFIX)
|
||||
return 0;
|
||||
if (sc & SCF_CTRL)
|
||||
table = CTRL_KEY_SCAN_DECODE_TABLE;
|
||||
else if (sc&SCF_SHIFT) {
|
||||
else if (sc & SCF_SHIFT)
|
||||
{
|
||||
if (!(sc & SCF_CAPS))
|
||||
table = SHIFT_KEY_SCAN_DECODE_TABLE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sc & SCF_CAPS)
|
||||
table = SHIFT_KEY_SCAN_DECODE_TABLE;
|
||||
}
|
||||
|
@ -154,7 +184,8 @@ U8 ScanCode2Char(I64 sc)
|
|||
return table[sc];
|
||||
}
|
||||
|
||||
U8 scan_code_map[0x100]={
|
||||
U8 scan_code_map[0x100] =
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
@ -168,15 +199,14 @@ U8 scan_code_map[0x100]={
|
|||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, SC_ENTER, SC_CTRL, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0x35, 0, 0, SC_ALT, 0, 0, 0, 0, 0, 0, 0,
|
||||
0,0,0,0,0,0,0,SC_HOME,
|
||||
SC_CURSOR_UP,SC_PAGE_UP,0,SC_CURSOR_LEFT,0,SC_CURSOR_RIGHT,0,SC_END,
|
||||
SC_CURSOR_DOWN,SC_PAGE_DOWN,SC_INS,SC_DELETE,0,0,0,0,
|
||||
0,0,0,0,SC_GUI,0,0,0,
|
||||
0, 0, 0, 0, 0, 0, 0, SC_HOME, SC_CURSOR_UP, SC_PAGE_UP, 0, SC_CURSOR_LEFT, 0, SC_CURSOR_RIGHT, 0, SC_END,
|
||||
SC_CURSOR_DOWN, SC_PAGE_DOWN, SC_INS, SC_DELETE, 0, 0, 0, 0, 0, 0, 0, 0, SC_GUI, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
U8 num_lock_map[0x100]={
|
||||
U8 num_lock_map[0x100] =
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
@ -190,10 +220,8 @@ U8 num_lock_map[0x100]={
|
|||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, SC_ENTER, SC_CTRL, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0x35, 0, 0, SC_ALT, 0, 0, 0, 0, 0, 0, 0,
|
||||
0,0,0,0,0,0,0,SC_HOME,
|
||||
SC_CURSOR_UP,SC_PAGE_UP,0,SC_CURSOR_LEFT,0,SC_CURSOR_RIGHT,0,SC_END,
|
||||
SC_CURSOR_DOWN,SC_PAGE_DOWN,SC_INS,SC_DELETE,0,0,0,0,
|
||||
0,0,0,0,SC_GUI,0,0,0,
|
||||
0, 0, 0, 0, 0, 0, 0, SC_HOME, SC_CURSOR_UP, SC_PAGE_UP, 0, SC_CURSOR_LEFT, 0, SC_CURSOR_RIGHT, 0, SC_END,
|
||||
SC_CURSOR_DOWN, SC_PAGE_DOWN, SC_INS, SC_DELETE, 0, 0, 0, 0, 0, 0, 0, 0, SC_GUI, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
@ -202,8 +230,11 @@ U8 *Char2KeyName(I64 ch,Bool include_ctrl=TRUE)
|
|||
{//ASCII val to key name.
|
||||
I64 i;
|
||||
U8 buf[STR_LEN];
|
||||
if (ch<=CH_SPACE) {
|
||||
switch [ch] {
|
||||
|
||||
if (ch <= CH_SPACE)
|
||||
{
|
||||
switch [ch]
|
||||
{
|
||||
case '\n':
|
||||
StrCopy(buf, "ENTER");
|
||||
break;
|
||||
|
@ -234,10 +265,13 @@ U8 *Char2KeyName(I64 ch,Bool include_ctrl=TRUE)
|
|||
buf[i + 1] = 0;
|
||||
break;
|
||||
}
|
||||
} else if (Bt(char_bmp_printable,ch)) {
|
||||
}
|
||||
else if (Bt(char_bmp_printable, ch))
|
||||
{
|
||||
*buf = ch;
|
||||
buf[1] = 0;
|
||||
} else
|
||||
}
|
||||
else
|
||||
*buf = 0;
|
||||
return StrNew(buf);
|
||||
}
|
||||
|
@ -246,6 +280,7 @@ U8 *ScanCode2KeyName(I64 sc)
|
|||
{//Scan code to key name.
|
||||
I64 ch;
|
||||
U8 buf[STR_LEN], *st;
|
||||
|
||||
*buf = 0;
|
||||
if (sc & SCF_CTRL)
|
||||
CatPrint(buf, "CTRL ");
|
||||
|
@ -255,12 +290,16 @@ U8 *ScanCode2KeyName(I64 sc)
|
|||
CatPrint(buf, "SHIFT ");
|
||||
if (sc & SCF_NO_SHIFT)
|
||||
CatPrint(buf, " ");
|
||||
if (ch=ScanCode2Char(sc&255)) {
|
||||
if (ch = ScanCode2Char(sc & 255))
|
||||
{
|
||||
st = Char2KeyName(ch, FALSE);
|
||||
StrCopy(buf + StrLen(buf), st);
|
||||
Free(st);
|
||||
} else {
|
||||
switch (sc&255) {
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (sc & 255)
|
||||
{
|
||||
case SC_BACKSPACE: CatPrint(buf, "BACK"); break;
|
||||
case SC_CAPS: CatPrint(buf, "CAPS"); break;
|
||||
case SC_NUM: CatPrint(buf, "NUM"); break;
|
||||
|
@ -299,7 +338,9 @@ U0 KbdBuildSC(U8 raw_byte,Bool in_irq,U8 *_last_raw_byte,I64 *_last_sc)
|
|||
{
|
||||
I64 ch, sc_flags, sc, sc2, sc_raw, new_key_f;
|
||||
Bool set_LEDs = FALSE;
|
||||
if (raw_byte==0xE0) {
|
||||
|
||||
if (raw_byte == 0xE0)
|
||||
{
|
||||
*_last_sc &= ~0x1FF;
|
||||
*_last_raw_byte = raw_byte;
|
||||
return;
|
||||
|
@ -312,36 +353,44 @@ U0 KbdBuildSC(U8 raw_byte,Bool in_irq,U8 *_last_raw_byte,I64 *_last_sc)
|
|||
sc_flags = _last_sc->u32[0] & ~0x1FF;
|
||||
sc_raw = sc;
|
||||
|
||||
if (sc_flags & SCF_NUM) {
|
||||
if (sc_flags & SCF_NUM)
|
||||
{
|
||||
if (sc2 = num_lock_map[sc.u8[0]])
|
||||
sc.u8[0] = sc2;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sc2 = scan_code_map[sc.u8[0]])
|
||||
sc.u8[0] = sc2;
|
||||
}
|
||||
|
||||
new_key_f = SCF_NEW_KEY;
|
||||
if (sc & SCF_KEY_UP)
|
||||
switch (sc&~SCF_KEY_UP) {
|
||||
switch (sc & ~SCF_KEY_UP)
|
||||
{
|
||||
case SC_SHIFT: sc_flags &= ~SCF_SHIFT; break;
|
||||
case SC_CTRL: sc_flags &= ~SCF_CTRL; break;
|
||||
case SC_ALT: sc_flags &= ~SCF_ALT; break;
|
||||
case SC_DELETE: sc_flags &= ~SCF_DELETE; break;
|
||||
case SC_INS: sc_flags &= ~SCF_INS; break;
|
||||
// case SC_CAPS: sc_flags^=SCF_CAPS; set_LEDs=TRUE; break;
|
||||
case SC_CAPS: sc_flags ^= SCF_CAPS; set_LEDs=TRUE; break;
|
||||
case SC_NUM: sc_flags ^= SCF_NUM; set_LEDs=TRUE; break;
|
||||
case SC_SCROLL: sc_flags ^= SCF_SCROLL; set_LEDs=TRUE; break;
|
||||
}
|
||||
else
|
||||
switch (sc) {
|
||||
switch (sc)
|
||||
{
|
||||
case SC_SHIFT:
|
||||
if (Bts(&sc_flags,SCf_SHIFT)) new_key_f=0;
|
||||
if (Bts(&sc_flags, SCf_SHIFT))
|
||||
new_key_f = 0;
|
||||
break;
|
||||
case SC_CTRL:
|
||||
if (Bts(&sc_flags,SCf_CTRL)) new_key_f=0;
|
||||
if (Bts(&sc_flags, SCf_CTRL))
|
||||
new_key_f = 0;
|
||||
break;
|
||||
case SC_ALT:
|
||||
if (Bts(&sc_flags,SCf_ALT)) new_key_f=0;
|
||||
if (Bts(&sc_flags, SCf_ALT))
|
||||
new_key_f = 0;
|
||||
break;
|
||||
case SC_DELETE:
|
||||
sc_flags |= SCF_DELETE;
|
||||
|
@ -353,25 +402,29 @@ U0 KbdBuildSC(U8 raw_byte,Bool in_irq,U8 *_last_raw_byte,I64 *_last_sc)
|
|||
|
||||
sc_flags |= new_key_f;
|
||||
sc = sc_flags | sc | (sc_flags | sc_raw) << 32;
|
||||
if (sc_flags & SCF_CTRL && sc_flags & SCF_ALT) {
|
||||
if (!(sc&SCF_KEY_UP)) {
|
||||
if (sc_flags & SCF_CTRL && sc_flags & SCF_ALT)
|
||||
{
|
||||
if (!(sc & SCF_KEY_UP))
|
||||
{
|
||||
if (sc & 255 == SC_DELETE && !(sc_flags & SCF_SHIFT))
|
||||
CtrlAltDel(sc);
|
||||
else {
|
||||
else
|
||||
{
|
||||
if (sc & 255 == SC_ESC)
|
||||
ch = 't';
|
||||
else if (sc & 255 == SC_TAB)
|
||||
ch = 'n';
|
||||
else
|
||||
ch = ScanCode2Char(sc & 255);
|
||||
if ('a'<=ch<='z') {
|
||||
if ('a' <= ch <= 'z')
|
||||
{
|
||||
sc &= ~(SCF_NEW_KEY | SCF_NEW_KEY << 32);
|
||||
ch -= 'a';
|
||||
kbd.last_down_scan_code = sc;
|
||||
if (keydev.fp_ctrl_alt_cbs[ch] &&
|
||||
Bt(&keydev.ctrl_alt_in_irq_flags, ch) == in_irq &&
|
||||
(!(sc_flags & SCF_SHIFT)&&keydev.ctrl_alt_no_shift_descs[ch]) ||
|
||||
sc_flags & SCF_SHIFT && keydev.ctrl_alt_shift_descs[ch])
|
||||
(!(sc_flags & SCF_SHIFT) &&
|
||||
keydev.ctrl_alt_no_shift_descs[ch]) || sc_flags & SCF_SHIFT && keydev.ctrl_alt_shift_descs[ch])
|
||||
(*keydev.fp_ctrl_alt_cbs[ch])(sc);
|
||||
}
|
||||
}
|
||||
|
@ -387,18 +440,23 @@ U0 KbdPacketRead()
|
|||
static U8 last_raw_byte = 0;
|
||||
static I64 last_sc = 0;
|
||||
U8 raw_byte;
|
||||
|
||||
if (TSCGet>kbd.timestamp + counts.time_stamp_freq >> 3)
|
||||
FifoU8Flush(kbd.fifo);
|
||||
kbd.timestamp = TSCGet;
|
||||
raw_byte = InU8(KBD_PORT);
|
||||
KbdBuildSC(raw_byte, TRUE, &last_raw_byte, &last_sc);
|
||||
if (!FifoU8Count(kbd.fifo)) {
|
||||
if (!FifoU8Count(kbd.fifo))
|
||||
{
|
||||
FifoU8Insert(kbd.fifo, raw_byte);
|
||||
if (raw_byte!=0xE0) {
|
||||
if (raw_byte != 0xE0)
|
||||
{
|
||||
while (FifoU8Remove(kbd.fifo, &raw_byte))
|
||||
FifoU8Insert(kbd.fifo2, raw_byte);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
FifoU8Insert(kbd.fifo, raw_byte);
|
||||
while (FifoU8Remove(kbd.fifo, &raw_byte))
|
||||
FifoU8Insert(kbd.fifo2, raw_byte);
|
||||
|
@ -410,7 +468,8 @@ interrupt U0 IRQKbd()
|
|||
CLD
|
||||
OutU8(PIC_1, PIC_EOI);
|
||||
kbd.irqs_working = TRUE;
|
||||
if (mouse_hard.install_in_progress) {
|
||||
if (mouse_hard.install_in_progress)
|
||||
{
|
||||
kbd.reset = TRUE;
|
||||
return;
|
||||
}
|
||||
|
@ -420,14 +479,17 @@ interrupt U0 IRQKbd()
|
|||
|
||||
U0 KbdInit()
|
||||
{
|
||||
try {
|
||||
try
|
||||
{
|
||||
KbdCmdFlush;
|
||||
KbdCmdSend(KBD_CTRL, 0xA7); //Disable Mouse
|
||||
KbdCmdSend(KBD_CTRL, 0xAE); //Enable Keyboard
|
||||
KbdCmdSend(KBD_PORT, 0xF0);
|
||||
KbdCmdSend(KBD_PORT, 0x02);
|
||||
KbdLEDsSet(kbd.scan_code);
|
||||
} catch {
|
||||
}
|
||||
catch
|
||||
{
|
||||
KbdCmdFlush;
|
||||
Fs->catch_except = TRUE;
|
||||
}
|
||||
|
@ -439,22 +501,28 @@ U0 KbdHandler()
|
|||
{
|
||||
static U8 last_raw_byte = 0;
|
||||
U8 raw_byte;
|
||||
|
||||
FifoU8Remove(kbd.fifo2, &raw_byte);
|
||||
KbdBuildSC(raw_byte, FALSE, &last_raw_byte, &kbd.scan_code);
|
||||
if (raw_byte==0xE0) {
|
||||
if (raw_byte == 0xE0)
|
||||
{
|
||||
FifoU8Remove(kbd.fifo2, &raw_byte);
|
||||
KbdBuildSC(raw_byte, FALSE, &last_raw_byte, &kbd.scan_code);
|
||||
}
|
||||
if (Btr(&kbd.scan_code,SCf_NEW_KEY)) {
|
||||
if (Btr(&kbd.scan_code, SCf_NEW_KEY))
|
||||
{
|
||||
kbd.new_key_timestamp = kbd.timestamp;
|
||||
Btr(&kbd.scan_code, 32 + SCf_NEW_KEY);
|
||||
FifoI64Ins(kbd.scan_code_fifo, kbd.scan_code);
|
||||
kbd.count++;
|
||||
if (!(kbd.scan_code&SCF_KEY_UP)) {
|
||||
if (!(kbd.scan_code & SCF_KEY_UP))
|
||||
{
|
||||
kbd.last_down_scan_code = kbd.scan_code;
|
||||
Bts(kbd.down_bitmap, kbd.scan_code.u8[0]);
|
||||
Bts(kbd.down_bitmap2, kbd.scan_code.u8[4]);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
Btr(kbd.down_bitmap, kbd.scan_code.u8[0]);
|
||||
Btr(kbd.down_bitmap2, kbd.scan_code.u8[4]);
|
||||
}
|
||||
|
@ -465,13 +533,18 @@ I64 KbdMessagesQueue()
|
|||
{
|
||||
I64 arg1, arg2, message_code = MESSAGE_NULL;
|
||||
CTask *task_focus;
|
||||
if (task_focus=sys_focus_task) {
|
||||
while (FifoI64Remove(kbd.scan_code_fifo,&arg2)) {
|
||||
if (task_focus = sys_focus_task)
|
||||
{
|
||||
while (FifoI64Remove(kbd.scan_code_fifo, &arg2))
|
||||
{
|
||||
arg1 = ScanCode2Char(arg2);
|
||||
if (arg2 & SCF_KEY_UP) {
|
||||
if (arg2 & SCF_KEY_UP)
|
||||
{
|
||||
TaskMessage(task_focus, 0, MESSAGE_KEY_UP, arg1, arg2, 0);
|
||||
message_code = MESSAGE_KEY_UP;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
TaskMessage(task_focus, 0, MESSAGE_KEY_DOWN, arg1, arg2, 0);
|
||||
message_code = MESSAGE_KEY_DOWN;
|
||||
}
|
||||
|
|
|
@ -3,19 +3,23 @@ U0 InputFilterTask()
|
|||
CJob *tmpc, *tmpc1;
|
||||
Bool old_filter;
|
||||
I64 old_flags = RFlagsGet;
|
||||
|
||||
Fs->win_inhibit = WIG_USER_TASK_DEFAULT;
|
||||
LBts(&Fs->task_flags, TASKf_INPUT_FILTER_TASK);
|
||||
old_filter = LBts(&Fs->last_input_filter_task->task_flags, TASKf_FILTER_INPUT);
|
||||
LBEqual(&Fs->task_flags, TASKf_FILTER_INPUT, old_filter);
|
||||
while (TRUE) {
|
||||
while (TRUE)
|
||||
{
|
||||
CLI
|
||||
JobsHandler(old_flags);
|
||||
tmpc1 = &Fs->server_ctrl.next_waiting;
|
||||
tmpc = tmpc1->next;
|
||||
if (tmpc == tmpc1)
|
||||
break;
|
||||
else {
|
||||
if (tmpc->job_code==JOBT_TEXT_INPUT) {
|
||||
else
|
||||
{
|
||||
if (tmpc->job_code == JOBT_TEXT_INPUT)
|
||||
{
|
||||
QueueRemove(tmpc);
|
||||
RFlagsSet(old_flags);
|
||||
try
|
||||
|
@ -23,7 +27,8 @@ U0 InputFilterTask()
|
|||
catch
|
||||
Fs->catch_except = TRUE;
|
||||
JobDel(tmpc);
|
||||
} else
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -43,18 +48,23 @@ Note: This delivers messages from parent down to pop-up.
|
|||
*/
|
||||
I64 res, old_flags;
|
||||
CJob *tmpc, *tmpc1;
|
||||
if (!task) task=Fs;
|
||||
|
||||
if (!task)
|
||||
task = Fs;
|
||||
old_flags = RFlagsGet;
|
||||
tmpc1 =&task->server_ctrl.next_waiting;
|
||||
while (TRUE) {
|
||||
while (TRUE)
|
||||
{
|
||||
CLI
|
||||
if (task == Fs)
|
||||
JobsHandler(old_flags);
|
||||
tmpc = tmpc1->next;
|
||||
if (tmpc == tmpc1)
|
||||
break;
|
||||
else {
|
||||
if (tmpc->job_code==JOBT_MESSAGE) {
|
||||
else
|
||||
{
|
||||
if (tmpc->job_code == JOBT_MESSAGE)
|
||||
{
|
||||
QueueRemove(tmpc);
|
||||
RFlagsSet(old_flags);
|
||||
res = tmpc->message_code;
|
||||
|
@ -63,8 +73,8 @@ Note: This delivers messages from parent down to pop-up.
|
|||
if (_arg2)
|
||||
*_arg2 = tmpc->aux2;
|
||||
JobDel(tmpc);
|
||||
if ((res!=MESSAGE_KEY_DOWN || !(tmpc->aux2&SCF_KEY_DESC) ||
|
||||
!Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) && Bt(&mask,res))
|
||||
if ((res != MESSAGE_KEY_DOWN || !(tmpc->aux2 & SCF_KEY_DESC) || !Bt(&task->win_inhibit, WIf_SELF_KEY_DESC)) &&
|
||||
Bt(&mask, res))
|
||||
goto sm_done;
|
||||
}
|
||||
}
|
||||
|
@ -75,20 +85,24 @@ Note: This delivers messages from parent down to pop-up.
|
|||
*_arg1 = 0;
|
||||
if (_arg2)
|
||||
*_arg2 = 0;
|
||||
if (task->parent_task&&task->parent_task->popup_task==task) {
|
||||
if (task->parent_task && task->parent_task->popup_task == task)
|
||||
{
|
||||
RFlagsSet(old_flags);
|
||||
return MessageScan(_arg1, _arg2, mask, task->parent_task);
|
||||
}
|
||||
sm_done:
|
||||
RFlagsSet(old_flags);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 FlushMessages(CTask *task=NULL)
|
||||
{//Throw away all messages. Return count.
|
||||
I64 res = 0, arg1, arg2;
|
||||
|
||||
while (MessageScan(&arg1, &arg2, ~1, task))
|
||||
res++;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -97,13 +111,17 @@ I64 MessageGet(I64 *_arg1=NULL,I64 *_arg2=NULL,I64 mask=~1,CTask *task=NULL)
|
|||
//Throw-out all messages not in mask.
|
||||
//Returns $LK,"message_code",A="MN:MESSAGE_CMD"$. See $LK,"::/Demo/MessageLoop.CC"$.
|
||||
I64 res;
|
||||
if (!task) task=Fs;
|
||||
|
||||
if (!task)
|
||||
task = Fs;
|
||||
LBtr(&task->task_flags, TASKf_IDLE);
|
||||
while (!(res=MessageScan(_arg1,_arg2,mask,task))) {
|
||||
while (!(res = MessageScan(_arg1, _arg2, mask, task)))
|
||||
{
|
||||
LBts(&task->task_flags, TASKf_IDLE);
|
||||
Yield;
|
||||
}
|
||||
LBtr(&task->task_flags, TASKf_IDLE);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -112,11 +130,13 @@ I64 CharScan()
|
|||
//Waits for $LK,"MESSAGE_KEY_UP",A="MN:MESSAGE_KEY_UP"$ of non-zero $LK,"ASCII",A="MN:CH_CTRLA"$ key and returns $LK,"ASCII",A="MN:CH_CTRLA"$ if key.
|
||||
//$LK,"MessageScan",A="MN:MessageScan"$() throws away other message types.
|
||||
I64 arg1a, arg2a, arg1b, arg2b;
|
||||
|
||||
if (!MessageScan(&arg1a, &arg2a, 1 << MESSAGE_KEY_DOWN) || !arg1a)
|
||||
return 0;
|
||||
else
|
||||
do MessageGet(&arg1b, &arg2b, 1 << MESSAGE_KEY_UP);
|
||||
while (!arg1b); //Be careful of $LK,"SC_SHIFT",A="MN:SC_SHIFT"$ and $LK,"SC_CTRL",A="MN:SC_CTRL"$, etc.
|
||||
|
||||
return arg1a;
|
||||
}
|
||||
|
||||
|
@ -126,15 +146,23 @@ Bool KeyScan(I64 *_ch=NULL,I64 *_scan_code=NULL,Bool echo=FALSE)
|
|||
//Removes key message and returns TRUE.
|
||||
//$LK,"MessageScan",A="MN:MessageScan"$() throws away other message types.
|
||||
I64 ch = 0, sc = 0;
|
||||
if (MessageScan(&ch,&sc,1<<MESSAGE_KEY_DOWN)) {
|
||||
if (_ch) *_ch=ch;
|
||||
if (_scan_code) *_scan_code=sc;
|
||||
|
||||
if (MessageScan(&ch, &sc, 1 << MESSAGE_KEY_DOWN))
|
||||
{
|
||||
if (_ch)
|
||||
*_ch = ch;
|
||||
if (_scan_code)
|
||||
*_scan_code = sc;
|
||||
if (echo)
|
||||
PutKey(ch, sc);
|
||||
return TRUE;
|
||||
} else {
|
||||
if (_ch) *_ch=0;
|
||||
if (_scan_code) *_scan_code=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_ch)
|
||||
*_ch = 0;
|
||||
if (_scan_code)
|
||||
*_scan_code = 0;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -145,18 +173,25 @@ I64 KeyGet(I64 *_scan_code=NULL,Bool echo=FALSE,Bool raw_cursor=FALSE)
|
|||
//$LK,"KeyScan",A="MN:KeyScan"$() throws away other message types.
|
||||
I64 ch, sc;
|
||||
Bool cursor_on = FALSE;
|
||||
while (!KeyScan(&ch,&sc,FALSE)) {
|
||||
if (IsRaw && raw_cursor) {
|
||||
if (!cursor_on && ToI64(TSCGet*5/counts.time_stamp_freq)&1) {
|
||||
|
||||
while (!KeyScan(&ch, &sc, FALSE))
|
||||
{
|
||||
if (IsRaw && raw_cursor)
|
||||
{
|
||||
if (!cursor_on && ToI64(TSCGet * 5 / counts.time_stamp_freq) & 1)
|
||||
{
|
||||
'Û';
|
||||
cursor_on = TRUE;
|
||||
} else if (cursor_on && !(ToI64(TSCGet*5/counts.time_stamp_freq)&1)) {
|
||||
}
|
||||
else if (cursor_on && !(ToI64(TSCGet * 5 / counts.time_stamp_freq) & 1))
|
||||
{
|
||||
'' CH_BACKSPACE;
|
||||
cursor_on = FALSE;
|
||||
}
|
||||
}
|
||||
LBts(&Fs->task_flags, TASKf_IDLE);
|
||||
if (IsDebugMode) {
|
||||
if (IsDebugMode)
|
||||
{
|
||||
//We don't want interrupt-driven keyboard when in debugger
|
||||
//because that could have side-effects or crash, so we poll
|
||||
//keyboard when in debugger with interrupts off.
|
||||
|
@ -165,7 +200,9 @@ I64 KeyGet(I64 *_scan_code=NULL,Bool echo=FALSE,Bool raw_cursor=FALSE)
|
|||
KbdMouseHandler(TRUE, FALSE);
|
||||
KbdMessagesQueue;
|
||||
POPFD
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
LBts(&Fs->task_flags, TASKf_AWAITING_MESSAGE);
|
||||
Yield;
|
||||
}
|
||||
|
@ -175,7 +212,8 @@ I64 KeyGet(I64 *_scan_code=NULL,Bool echo=FALSE,Bool raw_cursor=FALSE)
|
|||
'' CH_BACKSPACE;
|
||||
if (echo)
|
||||
PutKey(ch, sc);
|
||||
if (_scan_code) *_scan_code=sc;
|
||||
if (_scan_code)
|
||||
*_scan_code = sc;
|
||||
return ch;
|
||||
}
|
||||
|
||||
|
@ -183,20 +221,24 @@ I64 CharGet(I64 *_scan_code=NULL,Bool echo=TRUE,Bool raw_cursor=FALSE)
|
|||
{//Waits for non-zero $LK,"ASCII",A="MN:CH_CTRLA"$ key.
|
||||
//Sets $LK,"scan_code",A="FI:::/Doc/CharOverview.DD"$.
|
||||
I64 ch1;
|
||||
|
||||
do ch1 = KeyGet(_scan_code, FALSE, raw_cursor);
|
||||
while (!ch1);
|
||||
if (echo)
|
||||
"$$PT$$%c$$FG$$", ch1;
|
||||
|
||||
return ch1;
|
||||
}
|
||||
|
||||
U8 *StrGet(U8 *message=NULL, U8 *default=NULL, I64 flags=NONE)
|
||||
{//Returns a $LK,"MAlloc",A="MN:MAlloc"$()ed prompted string. See $LK,"Flags",A="MN:SGF_SHIFT_ESC_EXIT"$.
|
||||
U8 *st;
|
||||
|
||||
if (message)
|
||||
"" message, default;
|
||||
st = (*fp_getstr2)(flags);
|
||||
if (!*st) {
|
||||
if (!*st)
|
||||
{
|
||||
Free(st);
|
||||
if (default)
|
||||
return StrNew(default);
|
||||
|
@ -210,29 +252,44 @@ I64 StrNGet(U8 *buf,I64 size,Bool allow_ext=TRUE)
|
|||
{//Prompt into fixed length string. Size must include terminator.
|
||||
U8 *st;
|
||||
I64 ch, i=0;
|
||||
if (!size || !buf) return 0;
|
||||
if (allow_ext) {
|
||||
|
||||
if (!size || !buf)
|
||||
return 0;
|
||||
if (allow_ext)
|
||||
{
|
||||
st = StrGet;
|
||||
if (StrLen(st)>size-1) {
|
||||
if (StrLen(st) > size - 1)
|
||||
{
|
||||
MemCopy(buf, st, size - 1);
|
||||
buf[size - 1] = 0;
|
||||
} else
|
||||
}
|
||||
else
|
||||
StrCopy(buf, st);
|
||||
i = StrLen(buf);
|
||||
Free(st);
|
||||
} else {
|
||||
while (TRUE) {
|
||||
}
|
||||
else
|
||||
{
|
||||
while (TRUE)
|
||||
{
|
||||
ch = CharGet(, FALSE, IsDebugMode);
|
||||
if (ch=='\n') {
|
||||
if (ch == '\n')
|
||||
{
|
||||
'' ch;
|
||||
break;
|
||||
} else if (ch==CH_BACKSPACE) {
|
||||
if (i>0) {
|
||||
}
|
||||
else if (ch == CH_BACKSPACE)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
i--;
|
||||
'' ch;
|
||||
}
|
||||
} else {
|
||||
if (i<size-1) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i < size - 1)
|
||||
{
|
||||
buf[i++] = ch;
|
||||
'' ch;
|
||||
}
|
||||
|
|
|
@ -11,11 +11,14 @@ U0 MouseUpdate(I64 x,I64 y,I64 z,Bool l,Bool r)
|
|||
mouse.presnap.x = ToI64(mouse.scale.x * x) + mouse.offset.x;
|
||||
mouse.presnap.y = ToI64(mouse.scale.y * y) + mouse.offset.y;
|
||||
mouse.presnap.z = ToI64(mouse.scale.z * z) + mouse.offset.z;
|
||||
if (mouse_grid.snap) {
|
||||
if (mouse_grid.snap)
|
||||
{
|
||||
mouse.pos.x = Trunc(mouse.presnap.x / mouse_grid.x) * mouse_grid.x + mouse_grid.x_offset;
|
||||
mouse.pos.y = Trunc(mouse.presnap.y / mouse_grid.y) * mouse_grid.y + mouse_grid.y_offset;
|
||||
mouse.pos.z = Trunc(mouse.presnap.z / mouse_grid.z) * mouse_grid.z + mouse_grid.z_offset;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
mouse.pos.x = mouse.presnap.x;
|
||||
mouse.pos.y = mouse.presnap.y;
|
||||
mouse.pos.z = mouse.presnap.z;
|
||||
|
@ -24,12 +27,14 @@ U0 MouseUpdate(I64 x,I64 y,I64 z,Bool l,Bool r)
|
|||
mouse.pos.x = ClampI64(mouse.pos.x, 0, sys_vbe_mode.width - 1);
|
||||
mouse.pos.y = ClampI64(mouse.pos.y, 0, sys_vbe_mode.height - 1);
|
||||
mouse.pos_text.x = mouse.pos.x / FONT_WIDTH;
|
||||
if (mouse.pos_text.x>=text.cols) {
|
||||
if (mouse.pos_text.x >= text.cols)
|
||||
{
|
||||
mouse.pos_text.x = text.cols - 1;
|
||||
mouse.pos.x = text.cols * FONT_WIDTH - 1;
|
||||
}
|
||||
mouse.pos_text.y = mouse.pos.y / FONT_HEIGHT;
|
||||
if (mouse.pos_text.y>=text.rows) {
|
||||
if (mouse.pos_text.y >= text.rows)
|
||||
{
|
||||
mouse.pos_text.y = text.rows - 1;
|
||||
mouse.pos.y = text.rows * FONT_HEIGHT - 1;
|
||||
}
|
||||
|
@ -78,6 +83,7 @@ U0 MouseInit()
|
|||
U0 MouseHardPacketRead()
|
||||
{
|
||||
U8 j;
|
||||
|
||||
if (TSCGet > mouse_hard.timestamp + counts.time_stamp_freq >> 3)
|
||||
FifoU8Flush(mouse_hard.fifo);
|
||||
mouse_hard.timestamp = TSCGet;
|
||||
|
@ -93,7 +99,8 @@ interrupt U0 IRQMouseHard()
|
|||
OutU8(PIC_2, PIC_EOI);
|
||||
OutU8(PIC_1, PIC_EOI);
|
||||
mouse_hard.irqs_working = TRUE;
|
||||
if (mouse_hard.install_in_progress || !mouse_hard.installed) {
|
||||
if (mouse_hard.install_in_progress || !mouse_hard.installed)
|
||||
{
|
||||
kbd.reset = TRUE;
|
||||
return;
|
||||
}
|
||||
|
@ -103,6 +110,7 @@ interrupt U0 IRQMouseHard()
|
|||
U0 MouseHardGetType()
|
||||
{
|
||||
I64 b;
|
||||
|
||||
KbdMouseCmdAck(0xF2);
|
||||
b = KbdCmdRead;
|
||||
if (b == 3)
|
||||
|
@ -120,13 +128,15 @@ Bool MouseHardReset()
|
|||
mouse_hard.has_wheel = FALSE;
|
||||
mouse_hard.has_ext_bttns = FALSE;
|
||||
|
||||
if (*0x40E(U16 *)==0x9FC0) {
|
||||
if (*0x40E(U16 *) == 0x9FC0)
|
||||
{
|
||||
_b = 0x9FC00+0x30;
|
||||
*_b = 1; //This enables my mouse. It might be for one machine.
|
||||
//USB DMA packets, set-up by BIOS to make legacy PS/2?
|
||||
}
|
||||
|
||||
try {
|
||||
try
|
||||
{
|
||||
KbdCmdFlush;
|
||||
KbdCmdSend(KBD_CTRL, 0xAD); //Disable Kbd
|
||||
KbdCmdSend(KBD_CTRL, 0xA8); //Enable Mouse
|
||||
|
@ -135,10 +145,12 @@ Bool MouseHardReset()
|
|||
|
||||
timeout = tS + 10.0;
|
||||
do
|
||||
try {
|
||||
try
|
||||
{
|
||||
KbdCmdRead;
|
||||
timeout = 0; //force exit
|
||||
} catch
|
||||
}
|
||||
catch
|
||||
Fs->catch_except = TRUE;
|
||||
while (tS < timeout);
|
||||
|
||||
|
@ -160,7 +172,8 @@ Bool MouseHardReset()
|
|||
KbdCmdSend(KBD_CTRL, 0x60);
|
||||
KbdCmdSend(KBD_PORT, (b | 2) & ~0x20);
|
||||
|
||||
} catch
|
||||
}
|
||||
catch
|
||||
Fs->catch_except = TRUE;
|
||||
|
||||
//This is been added to override failure
|
||||
|
@ -180,14 +193,15 @@ Bool MouseHardReset()
|
|||
KbdCmdSend(KBD_CTRL, 0xA7); //Disable Mouse
|
||||
catch
|
||||
Fs->catch_except = TRUE;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 MouseHardSpeedSet()
|
||||
{
|
||||
I64 dd, tmp;
|
||||
if ((dd=SqrI64(mouse_hard_last.pos.x-mouse_hard.pos.x)
|
||||
+SqrI64(mouse_hard_last.pos.y-mouse_hard.pos.y)) &&
|
||||
|
||||
if ((dd = SqrI64(mouse_hard_last.pos.x - mouse_hard.pos.x) + SqrI64(mouse_hard_last.pos.y - mouse_hard.pos.y)) &&
|
||||
(tmp = mouse_hard.timestamp - mouse_hard_last.timestamp))
|
||||
mouse_hard.speed = Sqrt(dd) * counts.time_stamp_freq / tmp;
|
||||
mouse_hard_last.timestamp = mouse_hard.timestamp;
|
||||
|
@ -196,6 +210,7 @@ U0 MouseHardSpeedSet()
|
|||
U0 MouseHardSetPre()
|
||||
{
|
||||
I64 old_timestamp = mouse_hard_last.timestamp;
|
||||
|
||||
MemCopy(&mouse_hard_last, &mouse_hard, sizeof(CMouseHardStateGlobals));
|
||||
mouse_hard_last.timestamp = old_timestamp;
|
||||
}
|
||||
|
@ -203,6 +218,7 @@ U0 MouseHardSetPre()
|
|||
U0 MouseHardSetPost()
|
||||
{
|
||||
I64 i;
|
||||
|
||||
mouse_hard.pos.x = mouse_hard.prescale.x * mouse_hard.scale.x * mouse_grid.x_speed;
|
||||
mouse_hard.pos.y = mouse_hard.prescale.y * mouse_hard.scale.y * mouse_grid.y_speed;
|
||||
mouse_hard.pos.z = mouse_hard.prescale.z * mouse_hard.scale.z * mouse_grid.z_speed;
|
||||
|
@ -221,12 +237,15 @@ U0 MouseHardSetPost()
|
|||
mouse.offset.y += sys_vbe_mode.height - 1 - i;
|
||||
|
||||
if (mouse_hard.pos.x != mouse_hard_last.pos.x || mouse_hard.pos.y != mouse_hard_last.pos.y ||
|
||||
mouse_hard.pos.z!=mouse_hard_last.pos.z) {
|
||||
mouse_hard.pos.z != mouse_hard_last.pos.z)
|
||||
{
|
||||
mouse_hard.event = TRUE;
|
||||
MouseHardSpeedSet;
|
||||
} else
|
||||
}
|
||||
else
|
||||
for (i = 0; i < 5; i++)
|
||||
if (mouse_hard.bttns[i]!=mouse_hard_last.bttns[i]) {
|
||||
if (mouse_hard.bttns[i] != mouse_hard_last.bttns[i])
|
||||
{
|
||||
mouse_hard.event = TRUE;
|
||||
break;
|
||||
}
|
||||
|
@ -294,6 +313,7 @@ U0 KbdMouseReset()
|
|||
Bool MouseHardEnable(Bool val=TRUE)
|
||||
{
|
||||
Bool old_val = mouse_hard.enabled;
|
||||
|
||||
if (val)
|
||||
{
|
||||
KbdCmdSend(KBD_CTRL, KBDC_ENABLE_MS);
|
||||
|
@ -311,6 +331,7 @@ Bool MouseHardDriverInstall(I64 dummy=0) //can be spawned
|
|||
{
|
||||
no_warn dummy;
|
||||
I64 i;
|
||||
|
||||
mouse_hard.install_in_progress = TRUE;
|
||||
OutU8(PIC_2_DATA, InU8(PIC_2_DATA) | 0x10);
|
||||
mouse_hard.installed = mouse_hard.irqs_working = FALSE;
|
||||
|
@ -328,14 +349,17 @@ Bool MouseHardDriverInstall(I64 dummy=0) //can be spawned
|
|||
|
||||
U0 KbdMouseHandler(Bool poll_kbd, Bool poll_mouse)
|
||||
{
|
||||
if (mouse_hard.install_in_progress) {
|
||||
if (mouse_hard.install_in_progress)
|
||||
{
|
||||
Yield;
|
||||
return;
|
||||
}
|
||||
if (kbd.reset)
|
||||
KbdMouseReset;
|
||||
else {
|
||||
if (poll_mouse && mouse_hard.installed && !mouse_hard.irqs_working) {
|
||||
else
|
||||
{
|
||||
if (poll_mouse && mouse_hard.installed && !mouse_hard.irqs_working)
|
||||
{
|
||||
PUSHFD
|
||||
CLI
|
||||
while (InU8(KBD_CTRL) & 1)
|
||||
|
@ -349,7 +373,8 @@ U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse)
|
|||
|
||||
if (kbd.reset)
|
||||
KbdMouseReset;
|
||||
else {
|
||||
else
|
||||
{
|
||||
while (FifoU8Count(kbd.fifo2))
|
||||
KbdHandler;
|
||||
while (FifoU8Count(mouse_hard.fifo2))
|
||||
|
|
Loading…
Reference in a new issue