diff options
Diffstat (limited to 'examples/message_passing/src/main.zig')
-rw-r--r-- | examples/message_passing/src/main.zig | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/message_passing/src/main.zig b/examples/message_passing/src/main.zig new file mode 100644 index 0000000..e637f1a --- /dev/null +++ b/examples/message_passing/src/main.zig @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org> +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +const srvre_sys = @import("srvre_sys"); +const os = srvre_sys.os; + +usingnamespace srvre_sys; + +const program2 = @embedFile("program2"); +var program2_aligned: [program2.len]u8 = undefined; + +pub fn main() void { + _ = os.consoleWrite("Hello from program 1\r\n") catch unreachable; + + os.join(0) catch unreachable; + + @memcpy(program2_aligned[0..], program2); + _ = os.launch(@alignCast(program2_aligned[0..])) catch unreachable; + + var sender: u16 = undefined; + var buffer: [256]u8 = undefined; + while (true) { + const n = os.receive(0, &sender, &buffer) catch continue; + const message = buffer[0..n]; + + _ = os.consoleWrite("Program 1 received message from PID ") catch unreachable; + _ = os.consoleWrite(&[_]u8{'0' + @as(u8, @intCast(sender))}) catch unreachable; + _ = os.consoleWrite(": ") catch unreachable; + _ = os.consoleWrite(message) catch unreachable; + _ = os.consoleWrite("\r\n") catch unreachable; + } +} |