Meta: Add files to repository

This commit is contained in:
Alec Murphy 2025-03-25 07:32:23 -04:00
parent 80a0428b66
commit 39198164cd
1029 changed files with 78311 additions and 0 deletions

111
System/Drivers/Mouse.HC Normal file
View file

@ -0,0 +1,111 @@
// FIXME: This should be an Input driver which contains both Keyboard/Mouse
// classes.
extern U0 @vmsvga_mouse_pointer_set(U32* pointer, I64 width, I64 height);
#define MI_QEMU 0x01
#define MI_VBOX 0x02
#define MS_UPDATE_INTERVAL 10
#define MS_UP 0
#define MS_DOWN 1
class @mouse
{
I64 x;
I64 y;
I64 z;
I64 delta_z;
I64 wheel_sensitivity;
U32* pointer;
I64 integration_type;
Bool left;
Bool right;
Bool natural_scroll;
I64 (*X)();
I64 (*Y)();
U0 (*PointerSet)(U32* pointer, I64 width, I64 height);
U0 (*Init)();
U0 (*Update)();
U0 (*Task)();
};
class @keyboard
{
I64 active_key;
I64 active_key_tS;
I64 last_key_tS;
U0 (*Update)();
};
@mouse Mouse;
@keyboard Keyboard;
U0 @keyboard_update()
{
I64 sc;
if (FifoI64Rem(kbd.scan_code_fifo, &sc)) {
if (!(sc & SCF_KEY_UP)) {
Keyboard.active_key = sc(U8);
Keyboard.active_key_tS = cnts.jiffies;
return;
}
}
Keyboard.active_key = 0;
}
Keyboard.Update = &@keyboard_update;
I64 @mouse_x() { return Mouse.x; }
I64 @mouse_y() { return Mouse.y; }
U0 @mouse_integration_type_set(I64 type) { Mouse.integration_type = type; }
U0 @mouse_pointer_set(U32* pointer, I64 width, I64 height)
{
if (Mouse.pointer != pointer) {
Mouse.pointer = pointer;
if (Mouse.integration_type == MI_VBOX) {
@vmsvga_mouse_pointer_set(pointer, width, height);
}
}
}
U0 @mouse_init()
{
Mouse.x = Display.Width() / 2;
Mouse.y = Display.Height() / 2;
Mouse.z = ms.pos.z;
Mouse.wheel_sensitivity = 2;
Mouse.pointer = NULL;
Mouse.left = OFF;
Mouse.right = OFF;
}
U0 @mouse_task()
{
while (1) {
WinMsUpdate;
KbdMsHndlr(0, 0);
Keyboard.Update();
if (Mouse.Update)
Mouse.Update();
if (!Mouse.Update) {
// Mouse.x = ms.pos.x;
// Mouse.y = ms.pos.y;
Mouse.left = ms.lb > 0;
Mouse.right = ms.rb > 0;
}
Mouse.z = ms.pos.z;
Sleep(MS_UPDATE_INTERVAL);
}
}
Mouse.X = &@mouse_x;
Mouse.Y = &@mouse_y;
Mouse.PointerSet = &@mouse_pointer_set;
Mouse.Init = &@mouse_init;
Mouse.Update = NULL;
Mouse.Task = &@mouse_task;
"mouse ";