From adf039057d3babe267a5d6020f3bbfcea6e9f87a Mon Sep 17 00:00:00 2001 From: aaron Date: Mon, 20 Sep 2021 00:38:44 +0200 Subject: [PATCH] add machine stub and data structures, still got lifetime errors --- Cargo.toml | 6 +++++- src/lib.rs | 1 + src/machine.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/lib.rs create mode 100644 src/machine.rs diff --git a/Cargo.toml b/Cargo.toml index 3b2779c..f151696 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,12 @@ [package] name = "rbfckr" version = "0.1.0" +authors = ["id101010 "] edition = "2018" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[[bin]] +doc = false +name = "rbfckr" +path = "src/main.rs" [dependencies] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..c685ad7 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod machine; diff --git a/src/machine.rs b/src/machine.rs new file mode 100644 index 0000000..9d1dd8e --- /dev/null +++ b/src/machine.rs @@ -0,0 +1,55 @@ +use std::io::{BufReader, BufWriter, Read, Write}; + +#[derive(Debug)] +pub enum InstructionType { + Plus, + Minus, + Left, + Right, + PutChar, + GetChar, + JumpIfZero, + JumpIfNotZero, +} + +#[derive(Debug)] +pub struct Instruction { + pub ins_type: InstructionType, + pub argument: usize, +} + +pub struct Machine { + ip: usize, + mp: usize, + code: Vec, + memory: [u32; 50000], + input: &mut BufReader>, + output: &mut BufWriter>, + buf: [u8; 1], +} + +impl Machine { + pub fn new(code: Vec, input: &mut BufReader>, output: &mut BufWriter>) -> Self { + Machine { + ip: 0, + mp: 0, + code, + memory: [0, 50000], + input, + output, + buf: [0;1], + } + } + + pub fn execute(&mut self){ + return; + } + + pub fn read_char(&mut self){ + return; + } + + pub fn put_char(&mut self){ + return; + } +} diff --git a/src/main.rs b/src/main.rs index 8a26e70..2c384b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,8 @@ use std::env; use std::fs; use std::io::{stdin, stdout, BufReader, Read}; +use rbfckr::machine::Machine; + fn main() { let file_name = match env::args().nth(1){ None => {