diff --git a/source/runtime.cpp b/source/runtime.cpp index 9beb574..f9d701f 100644 --- a/source/runtime.cpp +++ b/source/runtime.cpp @@ -1,55 +1,60 @@ export module runtime; -import app; - import coral; import coral.files; import coral.io; -import coral.math; -import coral.stack; + +import oar.files; + +import turtle; +import turtle.io; extern "C" int main(int argc, char const * const * argv) { - return app::client::run("Ona Runtime", [](app::client & client) -> int { - constexpr coral::path config_path{"config.kym"}; - bool is_config_loaded{false}; + turtle::event_loop::run("Ona Runtime", [](turtle::event_loop & event_loop) -> void { + constexpr coral::slice archive_path {"index.oar"}; + bool is_archive_loaded {false}; - client.resources().read_file(config_path, [&](coral::reader & file) { - coral::allocator * const allocator{&client.thread_safe_allocator()}; + oar::archive_file::read(turtle::file_sandbox::base(), archive_path, [&](oar::archive_file & archive_file) -> void { + is_archive_loaded = true; - coral::small_stack script_source{allocator}; - { - coral::u8 stream_buffer[1024]{0}; - coral::stack_writer script_writer{&script_source}; + constexpr coral::slice config_path {"config.kym"}; + bool is_config_loaded {false}; - if (!coral::stream(script_writer, file, stream_buffer).is_ok()) return; + archive_file.read_file(config_path, [&](coral::file_reader & config_reader) { + archive_file.query_file(config_path).and_then([&](coral::file_system::file_info file_info) { + turtle::system_allocator allocator {turtle::system_allocator::thread_safety::none}; + coral::ring_buffer config_source; + + if (config_source.allocate(allocator, file_info.size) != coral::ring_buffer::allocate_result::ok) + return; + + coral::u8 stream_buffer[1024] {0}; + + if (coral::stream(config_source, config_reader, stream_buffer).is_error()) return; + + is_config_loaded = true; + }); + }); + + if (!is_config_loaded) { + static_cast(coral::println(turtle::error_log(), "failed to read", config_path)); + + return; } - client.log(app::log_level::notice, script_source.as_slice().as_chars()); + // event_loop.display(1280, 800); - is_config_loaded = true; + while (event_loop.poll()) { + + } }); - if (!is_config_loaded) { - coral::small_stack error_message{&client.thread_safe_allocator()}; - { - coral::stack_writer error_writer{&error_message}; + if (!is_archive_loaded) { + static_cast(coral::println(turtle::error_log(), "failed to open", archive_path)); - if (!error_writer.write(coral::slice{"failed to load "}.as_bytes()).is_ok()) - return coral::u8_max; - - if (!error_writer.write(config_path.as_slice().as_bytes()).is_ok()) - return coral::u8_max; - } - - return coral::u8_max; + return; } - - client.display(1280, 800); - - while (client.poll()) { - - } - - return 0; }); + + return 0; }