From 5049f1d8098d108a5fe960fe492d5ed3dc7f5352 Mon Sep 17 00:00:00 2001 From: b1ek Date: Wed, 23 Aug 2023 00:46:30 +1000 Subject: [PATCH] add eval_file --- examples/eval_file.rs | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 examples/eval_file.rs diff --git a/examples/eval_file.rs b/examples/eval_file.rs new file mode 100644 index 0000000..4ac8208 --- /dev/null +++ b/examples/eval_file.rs @@ -0,0 +1,60 @@ +use std::{process::exit, env, fs}; + +use brainrust::*; + +fn dump_mem(memory: &[u8]) -> String { + + + let mut out: String = "Memory dump:\n{ ".into(); + + let mut i = 0; + + for byte in memory.iter() { + if *byte == 0 && i > 50 { break } + out += format!("{}, ", byte).as_str(); + i += 1; + } + // remove the last ", " + out.pop(); + out.pop(); + + out += " }"; + + out +} + +fn main() { + + // read file + + let file = env::args().collect::>(); + let file = file.get(1); + if file.is_none() { + eprintln!("Please specify file as 1st argument"); + exit(-1); + } + let file = file.unwrap(); + + let file = fs::read_to_string(file).unwrap(); + + // done reading file; actual shit here + + let mut memory: [u8; 30000] = core::array::from_fn(|_| 0); + let mut pointer = 0 as usize; + + let eval_res = eval_mem(&file.as_str(), &mut memory, &mut pointer); + + // print error if there is any + + if eval_res.is_err() { + let err = eval_res.unwrap_err(); + eprintln!("Program failed: {}", err.error); + println!("{}", dump_mem(&memory)); + println!("Pointer is {}", pointer); + exit(-1); + } + + // dump memory (for dev purposes) + + // println!("{}", dump_mem(&memory)); +} \ No newline at end of file