mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 19:26:43 +01:00
add support to directly run cwa files
This commit is contained in:
40
src/main.rs
40
src/main.rs
@@ -1,14 +1,17 @@
|
||||
use std::path::PathBuf;
|
||||
use std::fs::File;
|
||||
use std::sync::mpsc;
|
||||
use std::time::Duration;
|
||||
use std::{
|
||||
path::{Path, PathBuf},
|
||||
process::exit,
|
||||
};
|
||||
use std::io::prelude::*;
|
||||
|
||||
use anyhow::{bail, Result};
|
||||
use microw8::MicroW8;
|
||||
use uw8::MicroW8;
|
||||
use notify::{DebouncedEvent, Watcher};
|
||||
use pico_args::Arguments;
|
||||
|
||||
mod microw8;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let mut args = Arguments::from_env();
|
||||
|
||||
@@ -25,18 +28,18 @@ fn main() -> Result<()> {
|
||||
watcher.watch(&filename, notify::RecursiveMode::NonRecursive)?;
|
||||
}
|
||||
|
||||
if let Err(err) = uw8.load_from_file(&filename) {
|
||||
if !watch_mode {
|
||||
return Err(err);
|
||||
}
|
||||
if let Err(err) = load_cart(&filename, &mut uw8) {
|
||||
eprintln!("Load error: {}", err);
|
||||
if !watch_mode {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
while uw8.is_open() {
|
||||
match rx.try_recv() {
|
||||
Ok(DebouncedEvent::Create(_) | DebouncedEvent::Write(_)) => {
|
||||
if let Err(err) = uw8.load_from_file(&filename) {
|
||||
eprintln!("Load error: {}", err)
|
||||
if let Err(err) = load_cart(&filename, &mut uw8) {
|
||||
eprintln!("Load error: {}", err);
|
||||
}
|
||||
}
|
||||
Err(mpsc::TryRecvError::Disconnected) => bail!("File watcher disconnected"),
|
||||
@@ -48,3 +51,20 @@ fn main() -> Result<()> {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn load_cart(filename: &Path, uw8: &mut MicroW8) -> Result<()> {
|
||||
let mut cart = vec![];
|
||||
File::open(filename)?.read_to_end(&mut cart)?;
|
||||
|
||||
if cart[0] >= 10 {
|
||||
let src = String::from_utf8(cart)?;
|
||||
cart = curlywas::compile_str(&src)?;
|
||||
}
|
||||
|
||||
if let Err(err) = uw8.load_from_memory(&cart) {
|
||||
eprintln!("Load error: {}", err);
|
||||
Err(err)
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user