basic-lang 0.7.1

The BASIC programming language as it was in the 8-bit era.
Documentation
use basic::mach::{Event, Runtime};

pub fn exec(runtime: &mut Runtime) -> String {
    exec_n(runtime, 5000)
}

pub fn exec_n(runtime: &mut Runtime, cycles: usize) -> String {
    let mut s = String::new();
    let mut prev_running = false;
    loop {
        let event = runtime.execute(cycles);
        match &event {
            Event::Stopped | Event::Load(_) | Event::Run(_) | Event::Save(_) | Event::Inkey => {
                break;
            }
            Event::Errors(errors) => {
                for error in errors.iter() {
                    s.push_str(&format!("{}\n", error));
                }
            }
            Event::Running => {
                if prev_running {
                    s.push_str(&format!("\n{} Execution cycles exceeded.\n", cycles));
                    break;
                }
            }
            Event::Print(ps) => {
                s.push_str(&ps);
            }
            Event::Input(ps, _) => {
                s.push_str(&ps);
                break;
            }
            Event::List((ls, _columns)) => {
                s.push_str(&format!("{}\n", ls));
            }
            Event::Cls => {
                s.push('\n');
            }
        }
        match event {
            Event::Running => prev_running = true,
            _ => prev_running = false,
        }
    }
    s.trim_end_matches("READY.\n").to_string()
}