added: TTY bindings to wasi platform
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 18 Oct 2023 14:16:57 +0000 (09:16 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 18 Oct 2023 14:16:57 +0000 (09:16 -0500)
core/runtime/platform/wasi/platform.onyx
core/runtime/platform/wasi/wasix_misc.onyx

index 3b8ac9a95ef1826d27061738318f52b3539c7def..86bad6dc2b24a79c9fd4d5d1998f40407a82bb52 100644 (file)
@@ -39,6 +39,7 @@ Supports_Env_Vars :: true
 #if #defined(runtime.vars.WASIX) {
     Supports_Networking :: true
     Supports_Futexes :: true
+    Supports_TTY :: true
 
     #load "./wasix_defs"
     #load "./wasix_net"
@@ -47,10 +48,9 @@ Supports_Env_Vars :: true
 } else {
     Supports_Networking :: false
     Supports_Futexes :: false
+    Supports_TTY :: false
 }
 
-Supports_TTY :: false
-
 __output_string :: (s: str) -> u32 {
     STDOUT_FILENO :: 1
 
index e0d2d72f200421eb5d51fc1a6b02b2d1d2a88759..43e835b8f3690d701d35b7127d2c5bc5d5034a82 100644 (file)
@@ -1,6 +1,7 @@
 package runtime.platform
 
 use wasi
+use core.os
 
 __futex_wait :: (addr: rawptr, expected: i32, timeout: i32) -> i32 {
     tm: wasi.OptionTimestamp;
@@ -24,4 +25,34 @@ __futex_wake :: (addr: rawptr, maximum: i32) -> i32 {
     }
 
     return 1 if out else 0;
+}
+
+__tty_get :: (tty: &os.TTY_State) {
+    state: wasi.TTY;
+    if wasi.tty_get(&state) != .Success do return;
+
+    tty.rows = state.rows;
+    tty.cols = state.cols;
+    tty.stdin_is_tty = state.stdin_tty;
+    tty.stdout_is_tty = state.stdout_tty;
+    tty.stderr_is_tty = state.stderr_tty;
+    tty.echo = state.echo;
+    tty.input_buffered = state.line_buffered;
+    tty.input_linefeeds = state.line_feeds;
+}
+
+__tty_set :: (tty: &os.TTY_State) -> bool {
+    state := wasi.TTY.{
+        rows = tty.rows,
+        cols = tty.cols,
+        stdin_tty = tty.stdin_is_tty,
+        stdout_tty = tty.stdout_is_tty,
+        stderr_tty = tty.stderr_is_tty,
+        echo = tty.echo,
+        line_buffered = tty.input_buffered,
+        line_feeds = tty.input_linefeeds
+    };
+
+    wasi.tty_set(&state);
+    return true;
 }
\ No newline at end of file