comparison menu.c @ 1485:369da70ee2c2 nuklear_ui

Filter file list in Nuklear UI
author Michael Pavone <pavone@retrodev.com>
date Sun, 26 Nov 2017 18:33:36 -0800
parents d82af64c94d2
children b96f9fae757f
comparison
equal deleted inserted replaced
1484:d82af64c94d2 1485:369da70ee2c2
8 #include "backend.h" 8 #include "backend.h"
9 #include "util.h" 9 #include "util.h"
10 #include "gst.h" 10 #include "gst.h"
11 #include "paths.h" 11 #include "paths.h"
12 #include "saves.h" 12 #include "saves.h"
13 #include "config.h"
13 14
14 static menu_context *get_menu(genesis_context *gen) 15 static menu_context *get_menu(genesis_context *gen)
15 { 16 {
16 menu_context *menu = gen->extra; 17 menu_context *menu = gen->extra;
17 if (!menu) { 18 if (!menu) {
164 if (menu->curpath[1] == ':' && !menu->curpath[2]) { 165 if (menu->curpath[1] == ':' && !menu->curpath[2]) {
165 //Add fake .. entry to allow navigation to virtual "drives" directory 166 //Add fake .. entry to allow navigation to virtual "drives" directory
166 dst = copy_dir_entry_to_guest(dst, m68k, "..", 1); 167 dst = copy_dir_entry_to_guest(dst, m68k, "..", 1);
167 } 168 }
168 #endif 169 #endif
169 char *ext_filter = strdup(tern_find_path_default(config, "ui\0extensions\0", (tern_val){.ptrval = "bin gen md smd sms gg"}, TVAL_PTR).ptrval); 170 uint32_t num_exts;
170 uint32_t num_exts = 0, ext_storage = 5; 171 char **ext_list = get_extension_list(config, &num_exts);
171 char **ext_list = malloc(sizeof(char *) * ext_storage);
172 char *cur_filter = ext_filter;
173 while (*cur_filter)
174 {
175 if (num_exts == ext_storage) {
176 ext_storage *= 2;
177 ext_list = realloc(ext_list, sizeof(char *) * ext_storage);
178 }
179 ext_list[num_exts++] = cur_filter;
180 cur_filter = split_keyval(cur_filter);
181 }
182 for (size_t i = 0; dst && i < num_entries; i++) 172 for (size_t i = 0; dst && i < num_entries; i++)
183 { 173 {
184 if (num_exts && !entries[i].is_dir) { 174 if (num_exts && !entries[i].is_dir) {
185 char *ext = path_extension(entries[i].name); 175 if (!path_matches_extensions(entries[i].name, ext_list, num_exts)) {
186 if (!ext) {
187 continue; 176 continue;
188 } 177 }
189 uint32_t extidx;
190 for (extidx = 0; extidx < num_exts; extidx++)
191 {
192 if (!strcasecmp(ext, ext_list[extidx])) {
193 break;
194 }
195 }
196 if (extidx == num_exts) {
197 continue;
198 }
199 } 178 }
200 dst = copy_dir_entry_to_guest(dst, m68k, entries[i].name, entries[i].is_dir); 179 dst = copy_dir_entry_to_guest(dst, m68k, entries[i].name, entries[i].is_dir);
201 } 180 }
202 free(ext_filter);
203 free(ext_list); 181 free(ext_list);
204 //terminate list 182 //terminate list
205 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen); 183 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen);
206 if (dest) { 184 if (dest) {
207 *dest = dest[1] = 0; 185 *dest = dest[1] = 0;