Mercurial > repos > blastem
changeset 1417:e6efe6b2aee9
Add a file extension filter to the menu
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 24 Jun 2017 23:37:47 -0700 |
parents | 11ac0b511cff |
children | 62ec8be376be |
files | default.cfg menu.c |
diffstat | 2 files changed, 33 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/default.cfg Sat Jun 24 13:55:54 2017 -0700 +++ b/default.cfg Sat Jun 24 23:37:47 2017 -0700 @@ -217,6 +217,8 @@ #path template for saving SRAM, EEPROM and savestates #accepts special variables $HOME, $EXEDIR, $USERDATA, $ROMNAME save_path $USERDATA/blastem/$ROMNAME + #space delimited list of file extensions to filter against in menu + extensions bin gen md sms gg } system {
--- a/menu.c Sat Jun 24 13:55:54 2017 -0700 +++ b/menu.c Sat Jun 24 23:37:47 2017 -0700 @@ -220,10 +220,41 @@ dst = copy_dir_entry_to_guest(dst, m68k, "..", 1); } #endif + char *ext_filter = strdup(tern_find_path_default(config, "ui\0extensions\0", (tern_val){.ptrval = "bin gen md sms gg"}, TVAL_PTR).ptrval); + uint32_t num_exts = 0, ext_storage = 5; + char **ext_list = malloc(sizeof(char *) * ext_storage); + char *cur_filter = ext_filter; + while (*cur_filter) + { + if (num_exts == ext_storage) { + ext_storage *= 2; + ext_list = realloc(ext_list, sizeof(char *) * ext_storage); + } + ext_list[num_exts++] = cur_filter; + cur_filter = split_keyval(cur_filter); + } for (size_t i = 0; dst && i < num_entries; i++) { + if (num_exts && !entries[i].is_dir) { + char *ext = path_extension(entries[i].name); + if (!ext) { + continue; + } + uint32_t extidx; + for (extidx = 0; extidx < num_exts; extidx++) + { + if (!strcmp(ext, ext_list[extidx])) { + break; + } + } + if (extidx == num_exts) { + continue; + } + } dst = copy_dir_entry_to_guest(dst, m68k, entries[i].name, entries[i].is_dir); } + free(ext_filter); + free(ext_list); //terminate list uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen); if (dest) {