Mercurial > repos > blastem
comparison menu.c @ 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 | 071e761bcdcf |
children | 62ec8be376be |
comparison
equal
deleted
inserted
replaced
1416:11ac0b511cff | 1417:e6efe6b2aee9 |
---|---|
218 if (menu->curpath[1] == ':' && !menu->curpath[2]) { | 218 if (menu->curpath[1] == ':' && !menu->curpath[2]) { |
219 //Add fake .. entry to allow navigation to virtual "drives" directory | 219 //Add fake .. entry to allow navigation to virtual "drives" directory |
220 dst = copy_dir_entry_to_guest(dst, m68k, "..", 1); | 220 dst = copy_dir_entry_to_guest(dst, m68k, "..", 1); |
221 } | 221 } |
222 #endif | 222 #endif |
223 char *ext_filter = strdup(tern_find_path_default(config, "ui\0extensions\0", (tern_val){.ptrval = "bin gen md sms gg"}, TVAL_PTR).ptrval); | |
224 uint32_t num_exts = 0, ext_storage = 5; | |
225 char **ext_list = malloc(sizeof(char *) * ext_storage); | |
226 char *cur_filter = ext_filter; | |
227 while (*cur_filter) | |
228 { | |
229 if (num_exts == ext_storage) { | |
230 ext_storage *= 2; | |
231 ext_list = realloc(ext_list, sizeof(char *) * ext_storage); | |
232 } | |
233 ext_list[num_exts++] = cur_filter; | |
234 cur_filter = split_keyval(cur_filter); | |
235 } | |
223 for (size_t i = 0; dst && i < num_entries; i++) | 236 for (size_t i = 0; dst && i < num_entries; i++) |
224 { | 237 { |
238 if (num_exts && !entries[i].is_dir) { | |
239 char *ext = path_extension(entries[i].name); | |
240 if (!ext) { | |
241 continue; | |
242 } | |
243 uint32_t extidx; | |
244 for (extidx = 0; extidx < num_exts; extidx++) | |
245 { | |
246 if (!strcmp(ext, ext_list[extidx])) { | |
247 break; | |
248 } | |
249 } | |
250 if (extidx == num_exts) { | |
251 continue; | |
252 } | |
253 } | |
225 dst = copy_dir_entry_to_guest(dst, m68k, entries[i].name, entries[i].is_dir); | 254 dst = copy_dir_entry_to_guest(dst, m68k, entries[i].name, entries[i].is_dir); |
226 } | 255 } |
256 free(ext_filter); | |
257 free(ext_list); | |
227 //terminate list | 258 //terminate list |
228 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen); | 259 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen); |
229 if (dest) { | 260 if (dest) { |
230 *dest = dest[1] = 0; | 261 *dest = dest[1] = 0; |
231 } | 262 } |