Mercurial > repos > blastem
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; |