diff --git a/pkg/ludus.js b/pkg/ludus.js index 57249f8..957068d 100644 --- a/pkg/ludus.js +++ b/pkg/ludus.js @@ -1,6 +1,7 @@ if (window) window.ludus = {run, kill, flush_stdout, stdout, p5, svg, flush_commands, commands, result, input, is_running} -const worker = new Worker("./worker.js", {type: "module"}) +const worker_url = new URL("worker.js", import.meta.url) +const worker = new Worker(worker_url, {type: "module"}) let outbox = [] let ludus_console = "" diff --git a/sandbox.ld b/sandbox.ld index 08f6528..10abefa 100644 --- a/sandbox.ld +++ b/sandbox.ld @@ -1 +1,34 @@ -:foobar +fn inputter () -> { + if do input > unbox > empty? + then { + yield! () + inputter () + } + else receive { + (:get, pid) -> send (pid, (:reply, unbox (input))) + (:flush, pid) -> { + send (pid, (:reply, unbox (input))) + store! (input, "") + } + (:clear) -> store! (input, "") + } + +} + +fn clear_input () -> store! (input, "") + +fn read_input () -> { + let reader = spawn! (inputter) + send (reader, (:get, self ())) + receive { + (:reply, msg) -> msg + } +} + +fn flush_input () -> { + let reader = spawn! (inputter) + send (reader, (:flush, self ())) + receive { + (:reply, msg) -> msg + } +}