From a4ed47d2e35d2e596c06ece8f2513a2716d0e19a Mon Sep 17 00:00:00 2001 From: kdx Date: Thu, 19 Jan 2023 00:23:57 +0100 Subject: need to read input --- drain.ha | 15 +++++++++++++-- main.ha | 6 +++++- test.bf | 13 +++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 test.bf diff --git a/drain.ha b/drain.ha index d270108..a76184b 100644 --- a/drain.ha +++ b/drain.ha @@ -1,9 +1,20 @@ +use errors; +use fs; use io; use os; use fmt; -fn drain_stdin() []u8 = { - const buf = match (io::drain(os::stdin)) { +fn drain(path: str) []u8 = { + const file = match (os::open(path)) { + case let file: io::file => + yield file; + case errors::noaccess => + fmt::fatalf("error opening {}: access denied", path); + case let err: fs::error => + fmt::fatalf("error opening {}: {}", path, fs::strerror(err)); + }; + defer io::close(file)!; + const buf = match (io::drain(file)) { case let buf: []u8 => yield buf; case let err: io::error => diff --git a/main.ha b/main.ha index e1c9e74..c8e5c65 100644 --- a/main.ha +++ b/main.ha @@ -1,4 +1,5 @@ use fmt; +use os; use strings; let bf: Brainfuck = Brainfuck { @@ -7,8 +8,11 @@ let bf: Brainfuck = Brainfuck { }; export fn main() void = { - const buf = drain_stdin(); + if (len(os::args) != 2) + fmt::fatal("usage: hare-brainfuck "); + const buf = drain(os::args[1]); defer free(buf); const buf = optimize(buf); + fmt::println("optimized source", strings::fromutf8(buf)!)!; exec(&bf, buf); }; diff --git a/test.bf b/test.bf new file mode 100644 index 0000000..3b759f3 --- /dev/null +++ b/test.bf @@ -0,0 +1,13 @@ +jkdwaljdwaljdaw +da +wjd +wadwaj +dwajdkwakdjwadk +jaw +dwajd +wa +j+++ +dawjdwadjwa +A-da_d-wad +AW-d_DW- +,.+,-.+..-.. -- cgit v1.2.3