Input work

This commit is contained in:
Able 2024-09-17 19:26:37 -05:00
parent f5f68bc2df
commit 0bc757164f
8 changed files with 70 additions and 14 deletions

View file

@ -1,6 +1,8 @@
stn := @use("rel:../../stn/src/lib.hb"); stn := @use("rel:../../stn/src/lib.hb");
.{string, memory, buffer} := stn .{string, memory, buffer} := stn
input := @use("rel:../../intouch/src/lib.hb")
WindowID := struct { WindowID := struct {
host_id: int, host_id: int,
window_id: int, window_id: int,
@ -14,11 +16,10 @@ create_window := fn(channel: int): void {
windowing_system_buffer := buffer.search("XHorizon\0") windowing_system_buffer := buffer.search("XHorizon\0")
if windowing_system_buffer == 0 { if windowing_system_buffer == 0 {
return
} else { } else {
msg := "\{01}\0" msg := "\{01}\0"
msg_length := 2 msg_length := 2
@eca(void, 3, windowing_system_buffer, msg, msg_length) return @eca(3, windowing_system_buffer, msg, msg_length)
} }
return
} }

View file

@ -0,0 +1,20 @@
# intouch
This library is exclusively focused on allowing your to get input regardless of which devices you have.
Partially modeled after SDL.
Current goals include
- Interfaces
- PS/2
- Device Types
- Keyboard
- Mouse
Longer Term goals
- Interfaces
- USB
- USB-HID
- Device Types
- Gamepads/controllers
- Drawing Tablets
- Microphones

View file

@ -0,0 +1,2 @@
0x0D -> press Tab
0xF0 0x0D -> release Tab

View file

@ -0,0 +1,8 @@
KeyCode := u32
// https://www.libsdl.org/release/SDL-1.2.15/include/SDL_keysym.h
Backspace := KeyCode.(8)
Tab := KeyCode.(9)
Clear := KeyCode.(12)
Return := KeyCode.(13)
Pause := KeyCode.(19)

View file

@ -0,0 +1,22 @@
keycodes := @use("rel:keycodes.hb");
.{KeyCode} := keycodes
MouseEvent := struct {
x_change: u8,
y_change: u8,
left: u8,
middle: u8,
right: u8,
}
KeyEvent := struct {
// 0 if down
// 1 if up
up: u8,
// 0 if not just triggered
// 1 if just triggered
just_triggered: u8,
key: KeyCode,
}
GamepadEvent := struct {}

View file

@ -1,22 +1,22 @@
string := @use("rel:string.hb") string := @use("rel:string.hb")
receive_message := fn(buffer_id: int, memory_map_location: ^u8, length: int): ^u8 { receive_message := fn(buffer_id: int, memory_map_location: ^u8, length: int): ^u8 {
return @eca(^u8, 4, buffer_id, memory_map_location, length) return @eca(4, buffer_id, memory_map_location, length)
} }
send_message := fn(msg: ^u8, buffer_id: int, length: int): void { send_message := fn(msg: ^u8, buffer_id: int, length: int): void {
return @eca(void, 3, buffer_id, msg, length) return @eca(3, buffer_id, msg, length)
} }
create := fn(msg: ^u8): int { create := fn(msg: ^u8): int {
msg_length := @inline(string.length, msg); msg_length := @inline(string.length, msg);
*msg = 0 *msg = 0
return @eca(int, 3, 0, msg, msg_length) return @eca(3, 0, msg, msg_length)
} }
search := fn(msg: ^u8): int { search := fn(msg: ^u8): int {
msg_length := @inline(string.length, msg); msg_length := @inline(string.length, msg);
*msg = 3 *msg = 3
return @eca(int, 3, 0, msg, msg_length) return @eca(3, 0, msg, msg_length)
} }

View file

@ -2,7 +2,7 @@ request_page := fn(page_count: u8): ^u8 {
msg := "\{00}\{01}xxxxxxxx\0" msg := "\{00}\{01}xxxxxxxx\0"
msg_page_count := msg + 1; msg_page_count := msg + 1;
*msg_page_count = page_count *msg_page_count = page_count
return @eca(^u8, 3, 2, msg, 12) return @eca(3, 2, msg, 12)
} }
release_page := fn(ptr: ^u8, page_count: u8): void { release_page := fn(ptr: ^u8, page_count: u8): void {
@ -14,7 +14,7 @@ release_page := fn(ptr: ^u8, page_count: u8): void {
msg_ptr := @as(^^u8, @bitcast(msg + 2)); msg_ptr := @as(^^u8, @bitcast(msg + 2));
*msg_ptr = ptr *msg_ptr = ptr
return @eca(void, 3, 2, msg, 12) return @eca(3, 2, msg, 12)
} }
OutbMsg := struct {a: u8, b: u8, addr: u16, value: u8} OutbMsg := struct {a: u8, b: u8, addr: u16, value: u8}
@ -27,7 +27,7 @@ outb := fn(addr: u16, value: u8): void {
} }
inb := fn(addr: u16): u8 { inb := fn(addr: u16): u8 {
return @eca(u8, 3, 3, &InbMsg.(0, 0, addr), @sizeof(InbMsg)) return @eca(3, 3, &InbMsg.(0, 0, addr), @sizeof(InbMsg))
} }
outl := fn(addr: u16, value: u32): void { outl := fn(addr: u16, value: u32): void {

View file

@ -32,11 +32,11 @@ resolution = "1024x768x24"
# [boot.limine.ableos.modules.serial_driver_test] # [boot.limine.ableos.modules.serial_driver_test]
# path = "boot:///serial_driver_test.hbf" # path = "boot:///serial_driver_test.hbf"
# [boot.limine.ableos.modules.horizon] [boot.limine.ableos.modules.horizon]
# path = "boot:///horizon.hbf" path = "boot:///horizon.hbf"
# [boot.limine.ableos.modules.horizon_testing_program] [boot.limine.ableos.modules.horizon_testing_program]
# path = "boot:///horizon_testing_program.hbf" path = "boot:///horizon_testing_program.hbf"
# [boot.limine.ableos.modules.dt_buffer_test] # [boot.limine.ableos.modules.dt_buffer_test]
# path = "boot:///dt_buffer_test.hbf" # path = "boot:///dt_buffer_test.hbf"
@ -44,6 +44,9 @@ resolution = "1024x768x24"
[boot.limine.ableos.modules.svga_driver] [boot.limine.ableos.modules.svga_driver]
path = "boot:///svga_driver.hbf" path = "boot:///svga_driver.hbf"
[boot.limine.ableos.modules.ps2_driver]
path = "boot:///ps2_driver.hbf"
# [boot.limine.ableos.modules.filesystem_fat32] # [boot.limine.ableos.modules.filesystem_fat32]
# path = "boot:///filesystem_fat32.hbf" # path = "boot:///filesystem_fat32.hbf"
# [boot.limine.ableos.modules.pumpkin_print] # [boot.limine.ableos.modules.pumpkin_print]