2023-02-18 03:34:40 +00:00
|
|
|
export module runtime;
|
|
|
|
|
2023-02-19 16:50:29 +00:00
|
|
|
import coral;
|
|
|
|
import coral.files;
|
2023-02-22 15:35:33 +00:00
|
|
|
import coral.io;
|
2023-03-03 00:00:13 +00:00
|
|
|
|
|
|
|
import oar.files;
|
|
|
|
|
|
|
|
import turtle;
|
|
|
|
import turtle.io;
|
2023-02-18 03:34:40 +00:00
|
|
|
|
|
|
|
extern "C" int main(int argc, char const * const * argv) {
|
2023-03-03 00:00:13 +00:00
|
|
|
turtle::event_loop::run("Ona Runtime", [](turtle::event_loop & event_loop) -> void {
|
|
|
|
constexpr coral::slice archive_path {"index.oar"};
|
|
|
|
bool is_archive_loaded {false};
|
2023-02-18 03:34:40 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
oar::archive_file::read(turtle::file_sandbox::base(), archive_path, [&](oar::archive_file & archive_file) -> void {
|
|
|
|
is_archive_loaded = true;
|
2023-02-19 17:43:37 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
constexpr coral::slice config_path {"config.kym"};
|
|
|
|
bool is_config_loaded {false};
|
2023-02-20 01:28:58 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
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;
|
2023-02-18 03:34:40 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
if (config_source.allocate(allocator, file_info.size) != coral::ring_buffer::allocate_result::ok)
|
|
|
|
return;
|
2023-02-18 03:34:40 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
coral::u8 stream_buffer[1024] {0};
|
|
|
|
|
|
|
|
if (coral::stream(config_source, config_reader, stream_buffer).is_error()) return;
|
2023-02-19 17:16:43 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
is_config_loaded = true;
|
|
|
|
});
|
|
|
|
});
|
2023-02-19 17:43:37 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
if (!is_config_loaded) {
|
|
|
|
static_cast<void>(coral::println(turtle::error_log(), "failed to read", config_path));
|
2023-02-19 17:43:37 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
return;
|
2023-02-19 17:43:37 +00:00
|
|
|
}
|
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
// event_loop.display(1280, 800);
|
|
|
|
|
|
|
|
while (event_loop.poll()) {
|
2023-02-18 03:34:40 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
}
|
|
|
|
});
|
2023-02-23 14:02:17 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
if (!is_archive_loaded) {
|
|
|
|
static_cast<void>(coral::println(turtle::error_log(), "failed to open", archive_path));
|
2023-02-18 03:34:40 +00:00
|
|
|
|
2023-03-03 00:00:13 +00:00
|
|
|
return;
|
2023-02-18 03:34:40 +00:00
|
|
|
}
|
|
|
|
});
|
2023-03-03 00:00:13 +00:00
|
|
|
|
|
|
|
return 0;
|
2023-02-18 03:34:40 +00:00
|
|
|
}
|