forked from AbleOS/ableos
58 lines
1.2 KiB
Plaintext
58 lines
1.2 KiB
Plaintext
.{math: .{Vec2}, buffer, memory} := @use("../../stn/src/lib.hb");
|
|
.{Surface} := @use("../../render/src/lib.hb")
|
|
|
|
$BUFFER := "sunset\0"
|
|
|
|
client := @use("./client.hb")
|
|
server := @use("./server.hb")
|
|
message := @use("./message.hb")
|
|
|
|
receive_message := fn($Expr: type, buffer_id: uint): ?Expr {
|
|
recv := @as(?Expr, null)
|
|
@inline(buffer.recv, ?Expr, buffer_id, &recv)
|
|
return recv
|
|
}
|
|
|
|
send_message := fn($Expr: type, msg: Expr, buffer_id: uint): void {
|
|
@inline(buffer.write, ?Expr, buffer_id, &@as(?Expr, msg))
|
|
}
|
|
|
|
await_buffer := fn(name: ^u8): uint {
|
|
id := 0
|
|
loop if id != 0 return id else id = buffer.search(BUFFER)
|
|
}
|
|
|
|
await_message := fn($Expr: type, buffer_id: uint): Expr {
|
|
response := @as(?Expr, null)
|
|
loop {
|
|
@inline(buffer.recv, ?Expr, buffer_id, &response)
|
|
if response != null {
|
|
i := 0
|
|
return @as(Expr, response)
|
|
}
|
|
}
|
|
}
|
|
|
|
// ! we need a better message format but this will do for now.
|
|
// enums would be nice
|
|
MessageHeader := packed struct {
|
|
kind: uint,
|
|
data: uint,
|
|
}
|
|
|
|
WindowProps := struct {
|
|
position: Vec2(uint),
|
|
dimensions: Vec2(uint),
|
|
// ! replace with owned string type later
|
|
title: ^u8,
|
|
}
|
|
|
|
WindowData := struct {
|
|
props: WindowProps,
|
|
buffer_id: uint,
|
|
}
|
|
|
|
Window := struct {
|
|
data: WindowData,
|
|
surface: Surface,
|
|
} |