From af10f3f5bcaba111607e7400831e9ad8edc33c2f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 7 Oct 2013 08:56:16 +0000 Subject: [PATCH] Split up file_list into separate compilable file --- Makefile | 2 +- Makefile.emscripten | 2 +- Makefile.win | 2 +- frontend/menu/file_browser.c | 20 +++- frontend/menu/file_browser.h | 1 + frontend/menu/file_list.c | 120 ++++++++++++++++++++++ frontend/menu/menu_common.c | 106 ------------------- griffin/griffin.c | 5 + msvc/msvc-2010/RetroArch-msvc2010.vcxproj | 1 + 9 files changed, 149 insertions(+), 110 deletions(-) create mode 100644 frontend/menu/file_list.c diff --git a/Makefile b/Makefile index 08fd696eee..c770769d30 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,7 @@ ifneq ($(findstring Linux,$(OS)),) endif ifeq ($(HAVE_RGUI), 1) - OBJ += frontend/menu/menu_common.o frontend/menu/menu_settings.o frontend/menu/menu_context.o frontend/menu/rgui.o frontend/menu/history.o + OBJ += frontend/menu/menu_common.o frontend/menu/menu_settings.o frontend/menu/menu_context.o frontend/menu/file_list.o frontend/menu/rgui.o frontend/menu/history.o endif ifeq ($(HAVE_THREADS), 1) diff --git a/Makefile.emscripten b/Makefile.emscripten index 4e2b0b786c..e2341949fd 100644 --- a/Makefile.emscripten +++ b/Makefile.emscripten @@ -66,7 +66,7 @@ endif ifeq ($(HAVE_RGUI), 1) DEFINES += -DHAVE_RGUI - OBJ += frontend/menu/menu_common.o frontend/menu/menu_settings.o frontend/menu/menu_context.o frontend/menu/rgui.o frontend/menu/history.o + OBJ += frontend/menu/menu_common.o frontend/menu/menu_settings.o frontend/menu/menu_context.o frontend/menu/file_list.o frontend/menu/rgui.o frontend/menu/history.o endif ifeq ($(HAVE_SDL), 1) diff --git a/Makefile.win b/Makefile.win index 41cf028f4f..3bb63ff8e2 100644 --- a/Makefile.win +++ b/Makefile.win @@ -102,7 +102,7 @@ JLIBS = ifeq ($(HAVE_RGUI), 1) DEFINES += -DHAVE_RGUI - OBJ += frontend/menu/menu_common.o frontend/menu/menu_settings.o frontend/menu/menu_context.o frontend/menu/rgui.o frontend/menu/history.o + OBJ += frontend/menu/menu_common.o frontend/menu/menu_settings.o frontend/menu/menu_context.o frontend/menu/file_list.o frontend/menu/rgui.o frontend/menu/history.o endif ifeq ($(HAVE_SDL), 1) diff --git a/frontend/menu/file_browser.c b/frontend/menu/file_browser.c index 076edd74b8..c477fa3774 100644 --- a/frontend/menu/file_browser.c +++ b/frontend/menu/file_browser.c @@ -1,3 +1,21 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2013 - Hans-Kristian Arntzen + * Copyright (C) 2011-2013 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include "file_browser.h" + static bool directory_parse(void *data, const char *path) { filebrowser_t *filebrowser = (filebrowser_t*)data; @@ -23,7 +41,7 @@ static bool directory_parse(void *data, const char *path) } -static void filebrowser_free(void *data) +void filebrowser_free(void *data) { filebrowser_t *filebrowser = (filebrowser_t*)data; diff --git a/frontend/menu/file_browser.h b/frontend/menu/file_browser.h index 35f286625c..e59f3785b7 100644 --- a/frontend/menu/file_browser.h +++ b/frontend/menu/file_browser.h @@ -54,5 +54,6 @@ typedef enum void filebrowser_update(void *data, uint64_t input, const char *extensions); void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir); bool filebrowser_iterate(void *data, unsigned action); +void filebrowser_free(void *data); #endif /* FILEBROWSER_H_ */ diff --git a/frontend/menu/file_list.c b/frontend/menu/file_list.c new file mode 100644 index 0000000000..8692b5345a --- /dev/null +++ b/frontend/menu/file_list.c @@ -0,0 +1,120 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2013 - Hans-Kristian Arntzen + * Copyright (C) 2011-2013 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include "file_list.h" + +struct rgui_file +{ + char *path; + char *alt; + unsigned type; + size_t directory_ptr; +}; + +void rgui_list_push(void *userdata, + const char *path, unsigned type, size_t directory_ptr) +{ + rgui_list_t *list = (rgui_list_t*)userdata; + + if (!list) + return; + + if (list->size >= list->capacity) + { + list->capacity++; + list->capacity *= 2; + list->list = (struct rgui_file*)realloc(list->list, list->capacity * sizeof(struct rgui_file)); + } + + list->list[list->size].path = strdup(path); + list->list[list->size].alt = NULL; + list->list[list->size].type = type; + list->list[list->size].directory_ptr = directory_ptr; + list->size++; +} + +void rgui_list_pop(rgui_list_t *list, size_t *directory_ptr) +{ + if (!(list->size == 0)) + free(list->list[--list->size].path); + + if (directory_ptr) + *directory_ptr = list->list[list->size].directory_ptr; +} + +void rgui_list_free(rgui_list_t *list) +{ + for (size_t i = 0; i < list->size; i++) + free(list->list[i].path); + free(list->list); + free(list); +} + +void rgui_list_clear(rgui_list_t *list) +{ + for (size_t i = 0; i < list->size; i++) + { + free(list->list[i].path); + free(list->list[i].alt); + } + list->size = 0; +} + +void rgui_list_set_alt_at_offset(rgui_list_t *list, size_t index, + const char *alt) +{ + free(list->list[index].alt); + list->list[index].alt = strdup(alt); +} + +void rgui_list_get_alt_at_offset(const rgui_list_t *list, size_t index, + const char **alt) +{ + if (alt) + *alt = list->list[index].alt ? list->list[index].alt : list->list[index].path; +} + +static int rgui_list_alt_cmp(const void *a_, const void *b_) +{ + const struct rgui_file *a = (const struct rgui_file*)a_; + const struct rgui_file *b = (const struct rgui_file*)b_; + const char *cmp_a = a->alt ? a->alt : a->path; + const char *cmp_b = b->alt ? b->alt : b->path; + return strcasecmp(cmp_a, cmp_b); +} + +void rgui_list_sort_on_alt(rgui_list_t *list) +{ + qsort(list->list, list->size, sizeof(list->list[0]), rgui_list_alt_cmp); +} + +void rgui_list_get_at_offset(const rgui_list_t *list, size_t index, + const char **path, unsigned *file_type) +{ + if (path) + *path = list->list[index].path; + if (file_type) + *file_type = list->list[index].type; +} + +void rgui_list_get_last(const rgui_list_t *list, + const char **path, unsigned *file_type) +{ + if (list->size) + rgui_list_get_at_offset(list, list->size - 1, path, file_type); +} diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index a5b608900b..82f773ea29 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -182,111 +182,6 @@ void shader_manager_get_str(struct gfx_shader *shader, } #endif -#ifdef HAVE_FILEBROWSER -#include "file_browser.c" -#endif - -struct rgui_file -{ - char *path; - char *alt; - unsigned type; - size_t directory_ptr; -}; - -void rgui_list_push(void *userdata, - const char *path, unsigned type, size_t directory_ptr) -{ - rgui_list_t *list = (rgui_list_t*)userdata; - - if (!list) - return; - - if (list->size >= list->capacity) - { - list->capacity++; - list->capacity *= 2; - list->list = (struct rgui_file*)realloc(list->list, list->capacity * sizeof(struct rgui_file)); - } - - list->list[list->size].path = strdup(path); - list->list[list->size].alt = NULL; - list->list[list->size].type = type; - list->list[list->size].directory_ptr = directory_ptr; - list->size++; -} - -void rgui_list_pop(rgui_list_t *list, size_t *directory_ptr) -{ - if (!(list->size == 0)) - free(list->list[--list->size].path); - - if (directory_ptr) - *directory_ptr = list->list[list->size].directory_ptr; -} - -void rgui_list_free(rgui_list_t *list) -{ - for (size_t i = 0; i < list->size; i++) - free(list->list[i].path); - free(list->list); - free(list); -} - -void rgui_list_clear(rgui_list_t *list) -{ - for (size_t i = 0; i < list->size; i++) - { - free(list->list[i].path); - free(list->list[i].alt); - } - list->size = 0; -} - -void rgui_list_set_alt_at_offset(rgui_list_t *list, size_t index, - const char *alt) -{ - free(list->list[index].alt); - list->list[index].alt = strdup(alt); -} - -void rgui_list_get_alt_at_offset(const rgui_list_t *list, size_t index, - const char **alt) -{ - if (alt) - *alt = list->list[index].alt ? list->list[index].alt : list->list[index].path; -} - -static int rgui_list_alt_cmp(const void *a_, const void *b_) -{ - const struct rgui_file *a = (const struct rgui_file*)a_; - const struct rgui_file *b = (const struct rgui_file*)b_; - const char *cmp_a = a->alt ? a->alt : a->path; - const char *cmp_b = b->alt ? b->alt : b->path; - return strcasecmp(cmp_a, cmp_b); -} - -void rgui_list_sort_on_alt(rgui_list_t *list) -{ - qsort(list->list, list->size, sizeof(list->list[0]), rgui_list_alt_cmp); -} - -void rgui_list_get_at_offset(const rgui_list_t *list, size_t index, - const char **path, unsigned *file_type) -{ - if (path) - *path = list->list[index].path; - if (file_type) - *file_type = list->list[index].type; -} - -void rgui_list_get_last(const rgui_list_t *list, - const char **path, unsigned *file_type) -{ - if (list->size) - rgui_list_get_at_offset(list, list->size - 1, path, file_type); -} - void menu_rom_history_push(const char *path, const char *core_path, const char *core_name) @@ -990,4 +885,3 @@ void menu_resolve_supported_cores(rgui_handle_t *rgui) rgui_list_sort_on_alt(rgui->selection_buf); } - diff --git a/griffin/griffin.c b/griffin/griffin.c index 9b3d9d3c79..c9e6e72852 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -530,6 +530,11 @@ MENU #include "../frontend/menu/menu_settings.c" #include "../frontend/menu/history.c" +#ifdef HAVE_FILEBROWSER +#include "../frontend/menu/file_browser.c" +#endif +#include "../frontend/menu/file_list.c" + #if defined(HAVE_RMENU_GUI) #include "../frontend/menu/rmenu.c" #elif defined(HAVE_RGUI) diff --git a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj index 53269c5014..486a794ca3 100644 --- a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj +++ b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj @@ -188,6 +188,7 @@ +