diff --git a/source/app.d b/source/app.d index 69ac313..e4b90e4 100644 --- a/source/app.d +++ b/source/app.d @@ -214,7 +214,9 @@ struct Chip8Status { Assembly ass_; // loaded program + const(char)*[string] string_cache; const (char)* loaded_program; + string loaded_program_str; // mem editor // MemoryEditor mem_editor_; @@ -265,8 +267,7 @@ struct Chip8Status { import std.file : read; - loaded_program = "chip8_picture.ch8"; - auto buf = read("programs/chip8_picture.ch8"); + auto buf = read(loaded_program_str); emu_.load(0x200, buf); // do ze load yes, will copy all the data in ass_.setRange(cast(ushort)0x200, cast(ushort)(0x200 + cast(ushort)buf.length)); ass_.reset(); @@ -311,8 +312,21 @@ struct Chip8Status { resetShortcut(); } - if (igMenuItem("Load", "CTRL+L")) { - loadShortcut(); + if (igBeginMenu("Load")) { + import std.file; + auto dir_iterator = dirEntries("", "*.ch8", SpanMode.breadth); + foreach (DirEntry e; dir_iterator) { + import std.string : toStringz; + const (char)* c_str; + if (!(e.name in string_cache)) c_str = toStringz(e.name); + else c_str = string_cache[e.name]; + if (igMenuItem(c_str)) { + loaded_program_str = e.name; + loaded_program = c_str; + loadShortcut(); + } + } + igEndMenu(); } if (igMenuItem("Debug", "CTRL+D")) {