Merge branch 'master' into sound

This commit is contained in:
2022-03-05 23:10:14 +01:00
9 changed files with 77 additions and 60 deletions

2
Cargo.lock generated
View File

@@ -499,7 +499,7 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
[[package]] [[package]]
name = "curlywas" name = "curlywas"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/exoticorn/curlywas.git?rev=89638565#896385654ab2c089200920b6dea4abec641c88d6" source = "git+https://github.com/exoticorn/curlywas.git?rev=557c3a84#557c3a842675a1ebd77e84021f9f5236d4fa5648"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"ariadne", "ariadne",

View File

@@ -16,7 +16,7 @@ anyhow = "1"
minifb = { version = "0.20", default-features = false, features = ["x11"] } minifb = { version = "0.20", default-features = false, features = ["x11"] }
notify = "4" notify = "4"
pico-args = "0.4" pico-args = "0.4"
curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "89638565" } curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "557c3a84" }
wat = "1" wat = "1"
uw8-tool = { path = "uw8-tool" } uw8-tool = { path = "uw8-tool" }
same-file = "1" same-file = "1"

2
platform/Cargo.lock generated
View File

@@ -146,7 +146,7 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]] [[package]]
name = "curlywas" name = "curlywas"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/exoticorn/curlywas.git?rev=89638565#896385654ab2c089200920b6dea4abec641c88d6" source = "git+https://github.com/exoticorn/curlywas.git?rev=557c3a84#557c3a842675a1ebd77e84021f9f5236d4fa5648"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"ariadne", "ariadne",

View File

@@ -6,7 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="89638565" } curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="557c3a84" }
uw8-tool = { path="../uw8-tool" } uw8-tool = { path="../uw8-tool" }
anyhow = "1" anyhow = "1"
lodepng = "3.4" lodepng = "3.4"

View File

@@ -11,16 +11,16 @@ fn main() -> Result<()> {
convert_font()?; convert_font()?;
println!("Compiling loader module"); println!("Compiling loader module");
let loader = curlywas::compile_file("src/loader.cwa", curlywas::Options::default())?; let loader = curlywas::compile_file("src/loader.cwa", curlywas::Options::default()).0?;
File::create("bin/loader.wasm")?.write_all(&loader.wasm)?; File::create("bin/loader.wasm")?.write_all(&loader)?;
println!("Loader (including base module): {} bytes", loader.wasm.len()); println!("Loader (including base module): {} bytes", loader.len());
println!("Compiling platform module"); println!("Compiling platform module");
let platform = curlywas::compile_file("src/platform.cwa", curlywas::Options::default())?; let platform = curlywas::compile_file("src/platform.cwa", curlywas::Options::default()).0?;
println!("Compressing platform module"); println!("Compressing platform module");
let platform = uw8_tool::pack( let platform = uw8_tool::pack(
&platform.wasm, &platform,
&uw8_tool::PackConfig::default().with_compression_level(4), &uw8_tool::PackConfig::default().with_compression_level(4),
)?; )?;
File::create("bin/platform.uw8")?.write_all(&platform)?; File::create("bin/platform.uw8")?.write_all(&platform)?;

View File

@@ -101,21 +101,18 @@ fn run(mut args: Arguments) -> Result<()> {
while runtime.is_open() { while runtime.is_open() {
if first_run || watcher.poll_changed_file()?.is_some() { if first_run || watcher.poll_changed_file()?.is_some() {
match start_cart(&filename, &mut *runtime, &config) { let (result, dependencies) = start_cart(&filename, &mut *runtime, &config);
Ok(dependencies) => {
if watch_mode { if watch_mode {
for dep in dependencies { for dep in dependencies {
watcher.add_file(dep)?; watcher.add_file(dep)?;
} }
} }
} if let Err(err) = result {
Err(err) => {
eprintln!("Load error: {}", err); eprintln!("Load error: {}", err);
if !watch_mode { if !watch_mode {
exit(1); exit(1);
} }
} }
}
first_run = false; first_run = false;
} }
@@ -136,24 +133,23 @@ struct Config {
output_path: Option<PathBuf>, output_path: Option<PathBuf>,
} }
fn load_cart(filename: &Path, config: &Config) -> Result<(Vec<u8>, Vec<PathBuf>)> { fn load_cart(filename: &Path, config: &Config) -> (Result<Vec<u8>>, Vec<PathBuf>) {
let mut dependencies = Vec::new(); let mut dependencies = Vec::new();
fn inner(filename: &Path, config: &Config, dependencies: &mut Vec<PathBuf>) -> Result<Vec<u8>> {
let mut cart = match SourceType::of_file(filename)? { let mut cart = match SourceType::of_file(filename)? {
SourceType::Binary => { SourceType::Binary => {
let mut cart = vec![]; let mut cart = vec![];
File::open(filename)?.read_to_end(&mut cart)?; File::open(filename)?.read_to_end(&mut cart)?;
dependencies.push(filename.to_path_buf());
cart cart
} }
SourceType::Wat => { SourceType::Wat => {
let cart = wat::parse_file(filename)?; let cart = wat::parse_file(filename)?;
dependencies.push(filename.to_path_buf());
cart cart
} }
SourceType::CurlyWas => { SourceType::CurlyWas => {
let module = curlywas::compile_file(filename, curlywas::Options::default())?; let (module, deps) = curlywas::compile_file(filename, curlywas::Options::default());
dependencies = module.dependencies; *dependencies = deps;
module.wasm module?
} }
}; };
@@ -166,7 +162,16 @@ fn load_cart(filename: &Path, config: &Config) -> Result<(Vec<u8>, Vec<PathBuf>)
File::create(path)?.write_all(&cart)?; File::create(path)?.write_all(&cart)?;
} }
Ok((cart, dependencies)) Ok(cart)
}
let result = inner(filename, config, &mut dependencies);
if dependencies.is_empty() {
dependencies.push(filename.to_path_buf());
}
(result, dependencies)
} }
enum SourceType { enum SourceType {
@@ -205,14 +210,22 @@ impl SourceType {
} }
#[cfg(any(feature = "native", feature = "browser"))] #[cfg(any(feature = "native", feature = "browser"))]
fn start_cart(filename: &Path, runtime: &mut dyn Runtime, config: &Config) -> Result<Vec<PathBuf>> { fn start_cart(
let cart = load_cart(filename, config)?; filename: &Path,
runtime: &mut dyn Runtime,
config: &Config,
) -> (Result<()>, Vec<PathBuf>) {
let (cart, dependencies) = load_cart(filename, config);
let cart = match cart {
Ok(cart) => cart,
Err(err) => return (Err(err), dependencies),
};
if let Err(err) = runtime.load(&cart.0) { if let Err(err) = runtime.load(&cart) {
eprintln!("Load error: {}", err); eprintln!("Load error: {}", err);
Err(err) (Err(err), dependencies)
} else { } else {
Ok(cart.1) (Ok(()), dependencies)
} }
} }
@@ -231,13 +244,14 @@ fn pack(mut args: Arguments) -> Result<()> {
let out_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?; let out_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?;
let (cart, _) = load_cart( let cart = load_cart(
&in_file, &in_file,
&Config { &Config {
pack: Some(pack_config), pack: Some(pack_config),
output_path: None, output_path: None,
}, },
)?; )
.0?;
File::create(out_file)?.write_all(&cart)?; File::create(out_file)?.write_all(&cart)?;
@@ -260,8 +274,8 @@ fn compile(mut args: Arguments) -> Result<()> {
let in_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?; let in_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?;
let out_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?; let out_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?;
let module = curlywas::compile_file(in_file, options)?; let module = curlywas::compile_file(in_file, options).0?;
File::create(out_file)?.write_all(&module.wasm)?; File::create(out_file)?.write_all(&module)?;
Ok(()) Ok(())
} }

View File

@@ -79,7 +79,9 @@ if(location.hash.length != 0) {
url += 'cart.uw8'; url += 'cart.uw8';
} }
try { try {
await uw8.runModuleFromURL(url, true); if(!await uw8.runModuleFromURL(url, true)) {
setupLoad();
}
} catch(e) { } catch(e) {
setupLoad(); setupLoad();
} }

View File

@@ -326,10 +326,11 @@ export default function MicroW8(screen, config = {}) {
async function runModuleFromURL(url, keepUrl) { async function runModuleFromURL(url, keepUrl) {
let response = await fetch(url); let response = await fetch(url);
let type = response.headers.get('Content-Type'); let type = response.headers.get('Content-Type');
if(type && type.includes('html')) { if((type && type.includes('html')) || response.status != 200) {
throw false; return false;
} }
runModule(await response.arrayBuffer(), keepUrl || devkitMode); runModule(await response.arrayBuffer(), keepUrl || devkitMode);
return true;
} }
return { return {