diff --git a/cc-tweaked/host.ts b/cc-tweaked/host.ts new file mode 100755 index 0000000..4f146ca --- /dev/null +++ b/cc-tweaked/host.ts @@ -0,0 +1,38 @@ +#!/bin/env -S deno run --allow-read --allow-net + +async function main() { + const [program_path] = Deno.args; + if (program_path === undefined) fail_with("Usage: host.ts "); + const port = 1728; + const server = Deno.listen({ port }); + console.log("listening on port", port); + for await (const connection of server) handle(connection, program_path); +} + +async function handle(connection: Deno.TcpConn, program_path: string) { + console.log("serving"); + const file = await try_else( + () => Deno.open(program_path, { read: true }), + () => fail_with("Program at", program_path, "does not exists"), + ); + await try_(() => file.readable.pipeTo(connection.writable)); +} + +function fail_with(...message: string[]) { + console.error(...message); + return Deno.exit(1); +} + +async function try_else(operation: () => T | Promise, on_error: (error: unknown) => T | Promise) { + try { + return await operation(); + } catch (error) { + return await on_error(error); + } +} + +async function try_(operation: () => T | Promise) { + return await try_else(operation, () => null); +} + +if (import.meta.main) await main(); diff --git a/cc-tweaked/scripts/cat.lua b/cc-tweaked/scripts/cat.lua new file mode 100644 index 0000000..d92e5af --- /dev/null +++ b/cc-tweaked/scripts/cat.lua @@ -0,0 +1,8 @@ +local arg1, arg2, arg3 = ... + +local function main() + print("arg1", arg1, "arg2", arg2, "arg3", arg3) + local file = fs.open() +end + +main()