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 }