From 14f7f641f3d1ab15850b2adb15afdd20859cee8b Mon Sep 17 00:00:00 2001 From: Themaister Date: Sat, 23 Jun 2012 15:31:22 +0200 Subject: [PATCH 01/44] Refactor directory listing to greatly optimize sorting. --- driver.c | 33 +++++----- file.h | 31 +++++++--- file_path.c | 174 +++++++++++++++++++++++++--------------------------- general.h | 3 +- retroarch.c | 24 +++++--- 5 files changed, 140 insertions(+), 125 deletions(-) diff --git a/driver.c b/driver.c index 388c36b5f6..9e68309839 100644 --- a/driver.c +++ b/driver.c @@ -484,28 +484,31 @@ static void deinit_filter(void) #endif #ifdef HAVE_XML +static void deinit_shader_dir(void) +{ + // It handles NULL, no worries :D + dir_list_free(g_extern.shader_dir.list); + g_extern.shader_dir.list = NULL; + g_extern.shader_dir.ptr = 0; +} + static void init_shader_dir(void) { if (!*g_settings.video.shader_dir) return; - g_extern.shader_dir.elems = dir_list_new(g_settings.video.shader_dir, "shader", false); - g_extern.shader_dir.size = dir_list_size(g_extern.shader_dir.elems); - g_extern.shader_dir.ptr = 0; + g_extern.shader_dir.list = dir_list_new(g_settings.video.shader_dir, "shader", false); + if (g_extern.shader_dir.list->size == 0) + { + deinit_shader_dir(); + return; + } - dir_list_sort(g_extern.shader_dir.elems, false); + g_extern.shader_dir.ptr = 0; + dir_list_sort(g_extern.shader_dir.list, false); - for (unsigned i = 0; i < g_extern.shader_dir.size; i++) - RARCH_LOG("Found shader \"%s\"\n", g_extern.shader_dir.elems[i]); -} - -static void deinit_shader_dir(void) -{ - // It handles NULL, no worries :D - dir_list_free(g_extern.shader_dir.elems); - g_extern.shader_dir.elems = NULL; - g_extern.shader_dir.size = 0; - g_extern.shader_dir.ptr = 0; + for (unsigned i = 0; i < g_extern.shader_dir.list->size; i++) + RARCH_LOG("Found shader \"%s\"\n", g_extern.shader_dir.list->elems[i].data); } #endif diff --git a/file.h b/file.h index b4f4179bb0..467f5b75a8 100644 --- a/file.h +++ b/file.h @@ -36,13 +36,30 @@ void save_ram_file(const char *path, int type); bool init_rom_file(enum rarch_game_type type); -// Returns a NULL-terminated list of files in a directory with full paths. -// If ext is NULL, any file will be picked. -// If non-NULL, only files with extension ext are added. -char **dir_list_new(const char *dir, const char *ext, bool include_dirs); -size_t dir_list_size(char * const *dir_list); -void dir_list_sort(char **dir_list, bool dir_first); -void dir_list_free(char **dir_list); +// Yep, this is C alright ;) +union string_list_elem_attr +{ + bool b; + int i; + void *p; +}; + +struct string_list_elem +{ + char *data; + union string_list_elem_attr attr; +}; + +struct string_list +{ + struct string_list_elem *elems; + size_t size; + size_t cap; +}; + +struct string_list *dir_list_new(const char *dir, const char *ext, bool include_dirs); +void dir_list_sort(struct string_list *list, bool dir_first); +void dir_list_free(struct string_list *list); bool path_is_directory(const char *path); bool path_file_exists(const char *path); diff --git a/file_path.c b/file_path.c index 860f3cf69e..c19ee2050b 100644 --- a/file_path.c +++ b/file_path.c @@ -43,111 +43,105 @@ #include #endif -// Yep, this is C alright ;) -struct string_list +static void string_list_free(struct string_list *list) { - char **data; - size_t size; - size_t cap; -}; + if (!list) + return; + + for (size_t i = 0; i < list->size; i++) + free(list->elems[i].data); + free(list->elems); + free(list); +} static bool string_list_capacity(struct string_list *list, size_t cap) { rarch_assert(cap > list->size); - char **new_data = (char**)realloc(list->data, cap * sizeof(char*)); + struct string_list_elem *new_data = (struct string_list_elem*)realloc(list->elems, cap * sizeof(*new_data)); if (!new_data) return false; - list->data = new_data; - list->cap = cap; + list->elems = new_data; + list->cap = cap; return true; } -static bool string_list_init(struct string_list *list) +static struct string_list *string_list_new(void) { - memset(list, 0, sizeof(*list)); - return string_list_capacity(list, 32); + struct string_list *list = (struct string_list*)calloc(1, sizeof(*list)); + if (!list) + return NULL; + + if (!string_list_capacity(list, 32)) + { + string_list_free(list); + return NULL; + } + + return list; } -static bool string_list_append(struct string_list *list, const char *elem) +static bool string_list_append(struct string_list *list, const char *elem, union string_list_elem_attr attr) { - if (list->size + 1 >= list->cap && !string_list_capacity(list, list->cap * 2)) + if (list->size >= list->cap && + !string_list_capacity(list, list->cap * 2)) return false; - if (!(list->data[list->size] = strdup(elem))) + char *dup = strdup(elem); + if (!dup) return false; + list->elems[list->size].data = dup; + list->elems[list->size].attr = attr; + list->size++; return true; } -static char **string_list_finalize(struct string_list *list) -{ - rarch_assert(list->cap > list->size); - - list->data[list->size] = NULL; - return list->data; -} - -static void string_list_cleanup(struct string_list *list) -{ - for (size_t i = 0; i < list->size; i++) - free(list->data[i]); - free(list->data); - memset(list, 0, sizeof(*list)); -} - -static void string_list_free(char **list) -{ - if (!list) - return; - - char **orig = list; - while (*list) - free(*list++); - free(orig); -} - -static char **string_split(const char *str, const char *delim) +static struct string_list *string_split(const char *str, const char *delim) { char *copy = NULL; const char *tmp = NULL; - struct string_list list; - - if (!string_list_init(&list)) + struct string_list *list = string_list_new(); + if (!list) goto error; copy = strdup(str); if (!copy) - return NULL; + goto error; tmp = strtok(copy, delim); while (tmp) { - if (!string_list_append(&list, tmp)) + union string_list_elem_attr attr; + memset(&attr, 0, sizeof(attr)); + + if (!string_list_append(list, tmp, attr)) goto error; tmp = strtok(NULL, delim); } free(copy); - return string_list_finalize(&list); + return list; error: - string_list_cleanup(&list); + string_list_free(list); free(copy); return NULL; } -static bool string_list_find_elem(char * const *list, const char *elem) +static bool string_list_find_elem(const struct string_list *list, const char *elem) { if (!list) return false; - for (; *list; list++) - if (strcmp(*list, elem) == 0) + for (size_t i = 0; i < list->size; i++) + { + if (strcmp(list->elems[i].data, elem) == 0) return true; + } return false; } @@ -161,50 +155,42 @@ static const char *path_get_extension(const char *path) return ""; } -size_t dir_list_size(char * const *dir_list) +static int qstrcmp_plain(const void *a_, const void *b_) { - if (!dir_list) - return 0; + const struct string_list_elem *a = (const struct string_list_elem*)a_; + const struct string_list_elem *b = (const struct string_list_elem*)b_; - size_t size = 0; - while (*dir_list++) - size++; - - return size; -} - -static int qstrcmp_plain(const void *a, const void *b) -{ - return strcasecmp(*(const char * const*)a, *(const char * const*)b); + return strcasecmp(a->data, b->data); } static int qstrcmp_dir(const void *a_, const void *b_) { - const char *a = *(const char * const*)a_; - const char *b = *(const char * const*)b_; + const struct string_list_elem *a = (const struct string_list_elem*)a_; + const struct string_list_elem *b = (const struct string_list_elem*)b_; // Sort directories before files. - int a_dir = path_is_directory(a); - int b_dir = path_is_directory(b); + int a_dir = a->attr.b; + int b_dir = b->attr.b; if (a_dir != b_dir) return b_dir - a_dir; - - return strcasecmp(a, b); + else + return strcasecmp(a->data, b->data); } -void dir_list_sort(char **dir_list, bool dir_first) +void dir_list_sort(struct string_list *list, bool dir_first) { - if (!dir_list) + if (!list) return; - qsort(dir_list, dir_list_size(dir_list), sizeof(char*), dir_first ? qstrcmp_dir : qstrcmp_plain); + qsort(list->elems, list->size, sizeof(struct string_list_elem), + dir_first ? qstrcmp_dir : qstrcmp_plain); } #ifdef _WIN32 // Because the API is just fucked up ... -char **dir_list_new(const char *dir, const char *ext, bool include_dirs) +struct string_list *dir_list_new(const char *dir, const char *ext, bool include_dirs) { - struct string_list list; - if (!string_list_init(&list)) + struct string_list *list = string_list_new(); + if (!list) return NULL; HANDLE hFind = INVALID_HANDLE_VALUE; @@ -213,7 +199,7 @@ char **dir_list_new(const char *dir, const char *ext, bool include_dirs) char path_buf[PATH_MAX]; snprintf(path_buf, sizeof(path_buf), "%s\\*", dir); - char **ext_list = NULL; + struct string_list *ext_list = NULL; if (ext) ext_list = string_split(ext, "|"); @@ -236,35 +222,38 @@ char **dir_list_new(const char *dir, const char *ext, bool include_dirs) char file_path[PATH_MAX]; snprintf(file_path, sizeof(file_path), "%s\\%s", dir, name); - if (!string_list_append(&list, file_path)) + union string_list_elem_attr attr; + attr.b = is_dir; + + if (!string_list_append(list, file_path, attr)) goto error; } while (FindNextFile(hFind, &ffd) != 0); FindClose(hFind); string_list_free(ext_list); - return string_list_finalize(&list); + return list; error: RARCH_ERR("Failed to open directory: \"%s\"\n", dir); if (hFind != INVALID_HANDLE_VALUE) FindClose(hFind); - string_list_cleanup(&list); + string_list_free(list); string_list_free(ext_list); return NULL; } #else -char **dir_list_new(const char *dir, const char *ext, bool include_dirs) +struct string_list *dir_list_new(const char *dir, const char *ext, bool include_dirs) { - struct string_list list; - if (!string_list_init(&list)) + struct string_list *list = string_list_new(); + if (!list) return NULL; DIR *directory = NULL; const struct dirent *entry = NULL; - char **ext_list = NULL; + struct string_list *ext_list = NULL; if (ext) ext_list = string_split(ext, "|"); @@ -287,14 +276,17 @@ char **dir_list_new(const char *dir, const char *ext, bool include_dirs) char file_path[PATH_MAX]; snprintf(file_path, sizeof(file_path), "%s/%s", dir, name); - if (!string_list_append(&list, file_path)) + union string_list_elem_attr attr; + attr.b = is_dir; + + if (!string_list_append(list, file_path, attr)) goto error; } closedir(directory); string_list_free(ext_list); - return string_list_finalize(&list); + return list; error: RARCH_ERR("Failed to open directory: \"%s\"\n", dir); @@ -302,15 +294,15 @@ error: if (directory) closedir(directory); - string_list_cleanup(&list); + string_list_free(list); string_list_free(ext_list); return NULL; } #endif -void dir_list_free(char **dir_list) +void dir_list_free(struct string_list *list) { - string_list_free(dir_list); + string_list_free(list); } bool path_is_directory(const char *path) diff --git a/general.h b/general.h index 8a4f022c4e..fb40bc17ff 100644 --- a/general.h +++ b/general.h @@ -449,8 +449,7 @@ struct global struct { - char **elems; - size_t size; + struct string_list *list; size_t ptr; } shader_dir; diff --git a/retroarch.c b/retroarch.c index 36f8b6478b..e54ac4c89a 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1513,6 +1513,9 @@ static void set_savestate_auto_index(void) if (!g_settings.savestate_auto_index) return; + // Find the file in the same directory as g_extern.savestate_name with the largest numeral suffix. + // E.g. /foo/path/game.state, will try to find /foo/path/game.state%d, where %d is the largest number available. + char state_path[PATH_MAX]; strlcpy(state_path, g_extern.savestate_name, sizeof(state_path)); @@ -1527,22 +1530,23 @@ static void set_savestate_auto_index(void) *split = '\0'; base = split + 1; } + else + dir = "."; unsigned max_index = 0; - char **dir_list = dir_list_new(dir, NULL, false); + struct string_list *dir_list = dir_list_new(dir, NULL, false); if (!dir_list) return; - unsigned index = 0; - const char *dir_elem; - while ((dir_elem = dir_list[index++])) + for (size_t i = 0; i < dir_list->size; i++) { - if (!strstr(dir_elem, base)) + const char *dir_elem = dir_list->elems[i].data; + if (strstr(dir_elem, base) != dir_elem) continue; const char *end = dir_elem + strlen(dir_elem); - while ((end != dir_elem) && isdigit(end[-1])) end--; + while ((end > dir_elem) && isdigit(end[-1])) end--; unsigned index = strtoul(end, NULL, 0); if (index > max_index) @@ -2128,7 +2132,7 @@ static void check_shader_dir(void) static bool old_pressed_next = false; static bool old_pressed_prev = false; - if (!g_extern.shader_dir.elems || !driver.video->xml_shader) + if (!g_extern.shader_dir.list || !driver.video->xml_shader) return; bool should_apply = false; @@ -2137,20 +2141,20 @@ static void check_shader_dir(void) if (pressed_next && !old_pressed_next) { should_apply = true; - g_extern.shader_dir.ptr = (g_extern.shader_dir.ptr + 1) % g_extern.shader_dir.size; + g_extern.shader_dir.ptr = (g_extern.shader_dir.ptr + 1) % g_extern.shader_dir.list->size; } else if (pressed_prev && !old_pressed_prev) { should_apply = true; if (g_extern.shader_dir.ptr == 0) - g_extern.shader_dir.ptr = g_extern.shader_dir.size - 1; + g_extern.shader_dir.ptr = g_extern.shader_dir.list->size - 1; else g_extern.shader_dir.ptr--; } if (should_apply) { - const char *shader = g_extern.shader_dir.elems[g_extern.shader_dir.ptr]; + const char *shader = g_extern.shader_dir.list->elems[g_extern.shader_dir.ptr].data; strlcpy(g_settings.video.bsnes_shader_path, shader, sizeof(g_settings.video.bsnes_shader_path)); g_settings.video.shader_type = RARCH_SHADER_BSNES; From 83c60aa94eb920b87f231a03dec4c7176d36125b Mon Sep 17 00:00:00 2001 From: Themaister Date: Sat, 23 Jun 2012 16:10:56 +0200 Subject: [PATCH 02/44] Add some some FIXMEs for broken code. --- console/libretro_mgmt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/console/libretro_mgmt.c b/console/libretro_mgmt.c index f023339ebf..9414610eb7 100644 --- a/console/libretro_mgmt.c +++ b/console/libretro_mgmt.c @@ -79,6 +79,7 @@ const char *rarch_manage_libretro_set_first_file(const char *libretro_path, cons //We need to set libretro to the first entry in the cores //directory so that it will be saved to the config file + // FIXME: Use struct string_list* char ** dir_list = dir_list_new(libretro_path, exe_ext, false); const char * retstr = NULL; @@ -112,14 +113,18 @@ const char *rarch_manage_libretro_set_first_file(const char *libretro_path, cons } } + // FIXME: Broken, returns a pointer to data on the stack. retstr = fname_tmp; #else + // FIXME: Broken, returns a pointer to dynamically allocated data + // which is freed before returning. retstr = first_exe; #endif RARCH_LOG("Set first entry in libretro core dir to libretro path: [%s].\n", retstr); goto end; } + // TODO: Should not use two layers of goto labels. error: RARCH_ERR("Failed to set first entry to libretro path.\n"); end: From 9f60e48a98d277aa8526e62a74edf692dfab6e1d Mon Sep 17 00:00:00 2001 From: Themaister Date: Sat, 23 Jun 2012 18:01:01 +0200 Subject: [PATCH 03/44] Redefine behavior of NULL in video_frame(). --- gfx/ext_gfx.c | 3 +++ gfx/gl.c | 8 +++++--- gfx/sdl_gfx.c | 3 +++ gfx/xvideo.c | 3 +++ retroarch.c | 16 ++++++---------- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/gfx/ext_gfx.c b/gfx/ext_gfx.c index be8736044e..5535cf4238 100644 --- a/gfx/ext_gfx.c +++ b/gfx/ext_gfx.c @@ -177,6 +177,9 @@ static void video_ext_set_nonblock_state(void *data, bool state) static bool video_ext_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { + if (!frame) + return true; + ext_t *ext = (ext_t*)data; return ext->driver->frame(ext->handle, frame, width, height, pitch, msg); } diff --git a/gfx/gl.c b/gfx/gl.c index a1e76f41d2..3b2b7a4fda 100644 --- a/gfx/gl.c +++ b/gfx/gl.c @@ -897,9 +897,11 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei gl_update_resize(gl); } - gl_update_input_size(gl, width, height, pitch); - - gl_copy_frame(gl, frame, width, height, pitch); + if (frame) // Can be NULL for frame dupe / NULL render. + { + gl_update_input_size(gl, width, height, pitch); + gl_copy_frame(gl, frame, width, height, pitch); + } struct gl_tex_info tex_info = {0}; tex_info.tex = gl->texture[gl->tex_index]; diff --git a/gfx/sdl_gfx.c b/gfx/sdl_gfx.c index 64dddcc882..56d07e3846 100644 --- a/gfx/sdl_gfx.c +++ b/gfx/sdl_gfx.c @@ -470,6 +470,9 @@ static void check_window(sdl_video_t *vid) static bool sdl_gfx_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { + if (!frame) + return true; + sdl_video_t *vid = (sdl_video_t*)data; if (SDL_MUSTLOCK(vid->buffer)) diff --git a/gfx/xvideo.c b/gfx/xvideo.c index 362a6df4a9..2abc230caf 100644 --- a/gfx/xvideo.c +++ b/gfx/xvideo.c @@ -700,6 +700,9 @@ static void xv_render_msg(xv_t *xv, const char *msg, unsigned width, unsigned he static bool xv_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { + if (!frame) + return true; + xv_t *xv = (xv_t*)data; if (!check_resize(xv, width, height)) diff --git a/retroarch.c b/retroarch.c index e54ac4c89a..7bab2ddaa0 100644 --- a/retroarch.c +++ b/retroarch.c @@ -198,27 +198,23 @@ static void video_frame(const void *data, unsigned width, unsigned height, size_ // Slightly messy code, // but we really need to do processing before blocking on VSync for best possible scheduling. - bool is_dupe = !data; #ifdef HAVE_FFMPEG - - if (g_extern.recording && (!g_extern.filter.active || !g_settings.video.post_filter_record || is_dupe)) + if (g_extern.recording && (!g_extern.filter.active || !g_settings.video.post_filter_record || !data)) { struct ffemu_video_data ffemu_data = {0}; ffemu_data.data = data; ffemu_data.pitch = pitch; ffemu_data.width = width; ffemu_data.height = height; - ffemu_data.is_dupe = is_dupe; + ffemu_data.is_dupe = !data; ffemu_push_video(g_extern.rec, &ffemu_data); } #endif - if (is_dupe) - return; const char *msg = msg_queue_pull(g_extern.msg_queue); #ifdef HAVE_DYLIB - if (g_extern.filter.active) + if (g_extern.filter.active && data) { unsigned owidth = width; unsigned oheight = height; @@ -248,10 +244,10 @@ static void video_frame(const void *data, unsigned width, unsigned height, size_ g_extern.video_active = false; #endif - g_extern.frame_cache.data = data; - g_extern.frame_cache.width = width; + g_extern.frame_cache.data = data; + g_extern.frame_cache.width = width; g_extern.frame_cache.height = height; - g_extern.frame_cache.pitch = pitch; + g_extern.frame_cache.pitch = pitch; } #ifdef HAVE_GRIFFIN From 5b5ba8ac58f663e055ba15dc0bec5e40a8be6f31 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 23 Jun 2012 18:01:21 +0200 Subject: [PATCH 04/44] (PS3) Works with new dir_list code --- console/console_ext.c | 3 ++- console/fileio/file_browser.c | 29 ++++++++++++++++------------- console/fileio/file_browser.h | 4 ++-- console/libretro_mgmt.c | 25 ++++++++----------------- console/libretro_mgmt.h | 2 +- ps3/frontend/menu.c | 14 +++++++------- 6 files changed, 36 insertions(+), 41 deletions(-) diff --git a/console/console_ext.c b/console/console_ext.c index c0359f63c2..0139ad77cd 100644 --- a/console/console_ext.c +++ b/console/console_ext.c @@ -803,7 +803,8 @@ void rarch_config_load(const char * conf_name, const char * libretro_dir_path, c if(!strcmp(g_settings.libretro, "")) { - const char *first_file = rarch_manage_libretro_set_first_file(libretro_dir_path, exe_ext); + char first_file[PATH_MAX]; + rarch_manage_libretro_set_first_file(first_file, sizeof(first_file), libretro_dir_path, exe_ext); if(first_file != NULL) strlcpy(g_settings.libretro, first_file, sizeof(g_settings.libretro)); } diff --git a/console/fileio/file_browser.c b/console/fileio/file_browser.c index 62cc457b3d..cf04ccac28 100644 --- a/console/fileio/file_browser.c +++ b/console/fileio/file_browser.c @@ -22,11 +22,10 @@ const char * path, const char * extensions) strlcpy(filebrowser->dir[filebrowser->directory_stack_size], path, sizeof(filebrowser->dir[filebrowser->directory_stack_size])); - filebrowser->current_dir.elems = dir_list_new(path, extensions, true); - filebrowser->current_dir.size = dir_list_size(filebrowser->current_dir.elems); + filebrowser->current_dir.list = dir_list_new(path, extensions, true); filebrowser->current_dir.ptr = 0; - dir_list_sort(filebrowser->current_dir.elems, true); + dir_list_sort(filebrowser->current_dir.list, true); } static void filebrowser_new(filebrowser_t * filebrowser, const char * start_dir, @@ -49,10 +48,9 @@ void filebrowser_set_current_path(filebrowser_t *filebrowser, const char *path) void filebrowser_free(filebrowser_t * filebrowser) { - dir_list_free(filebrowser->current_dir.elems); + dir_list_free(filebrowser->current_dir.list); - filebrowser->current_dir.elems = NULL; - filebrowser->current_dir.size = 0; + filebrowser->current_dir.list = NULL; filebrowser->current_dir.ptr = 0; } @@ -82,7 +80,12 @@ const char * filebrowser_get_current_dir (filebrowser_t *filebrowser) const char * filebrowser_get_current_path (filebrowser_t *filebrowser) { - return filebrowser->current_dir.elems[filebrowser->current_dir.ptr]; + return filebrowser->current_dir.list->elems[filebrowser->current_dir.ptr].data; +} + +bool filebrowser_get_current_path_isdir (filebrowser_t *filebrowser) +{ + return filebrowser->current_dir.list->elems[filebrowser->current_dir.ptr].attr.b; } size_t filebrowser_get_current_index (filebrowser_t *filebrowser) @@ -98,15 +101,15 @@ void filebrowser_set_current_at (filebrowser_t *filebrowser, size_t pos) static void filebrowser_set_current_increment (filebrowser_t *filebrowser, bool allow_wraparound) { filebrowser->current_dir.ptr++; - if (filebrowser->current_dir.ptr >= filebrowser->current_dir.size && allow_wraparound) + if (filebrowser->current_dir.ptr >= filebrowser->current_dir.list->size && allow_wraparound) filebrowser->current_dir.ptr = 0; } static void filebrowser_set_current_decrement (filebrowser_t *filebrowser, bool allow_wraparound) { filebrowser->current_dir.ptr--; - if (filebrowser->current_dir.ptr >= filebrowser->current_dir.size && allow_wraparound) - filebrowser->current_dir.ptr = filebrowser->current_dir.size - 1; + if (filebrowser->current_dir.ptr >= filebrowser->current_dir.list->size && allow_wraparound) + filebrowser->current_dir.ptr = filebrowser->current_dir.list->size - 1; } void filebrowser_iterate(filebrowser_t *filebrowser, filebrowser_action_t action) @@ -129,7 +132,7 @@ void filebrowser_iterate(filebrowser_t *filebrowser, filebrowser_action_t action break; case FILEBROWSER_ACTION_RIGHT: filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + 5, - filebrowser->current_dir.size-1)); + filebrowser->current_dir.list->size-1)); break; case FILEBROWSER_ACTION_SCROLL_UP: if (filebrowser->current_dir.ptr <= entries_to_scroll) @@ -145,11 +148,11 @@ void filebrowser_iterate(filebrowser_t *filebrowser, filebrowser_action_t action break; case FILEBROWSER_ACTION_SCROLL_DOWN: filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + - entries_to_scroll, filebrowser->current_dir.size-1)); + entries_to_scroll, filebrowser->current_dir.list->size-1)); break; case FILEBROWSER_ACTION_SCROLL_DOWN_SMOOTH: filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + 50, - filebrowser->current_dir.size-1)); + filebrowser->current_dir.list->size-1)); if(!filebrowser->current_dir.ptr) filebrowser->current_dir.ptr = 0; break; case FILEBROWSER_ACTION_OK: diff --git a/console/fileio/file_browser.h b/console/fileio/file_browser.h index 370c089101..0fee782d13 100644 --- a/console/fileio/file_browser.h +++ b/console/fileio/file_browser.h @@ -28,8 +28,7 @@ typedef struct uint32_t directory_stack_size; char dir[MAX_DIR_STACK][512]; struct { - char **elems; - size_t size; + struct string_list *list; size_t ptr; } current_dir; char root_dir[PATH_MAX]; @@ -54,6 +53,7 @@ typedef enum const char * filebrowser_get_current_dir (filebrowser_t *filebrowser); const char * filebrowser_get_current_path (filebrowser_t *filebrowser); +bool filebrowser_get_current_path_isdir (filebrowser_t *filebrowser); size_t filebrowser_get_current_index (filebrowser_t *filebrowser); void filebrowser_set_root(filebrowser_t *filebrowser, const char *root_dir); void filebrowser_free(filebrowser_t *filebrowser); diff --git a/console/libretro_mgmt.c b/console/libretro_mgmt.c index 9414610eb7..8c3bcb48e0 100644 --- a/console/libretro_mgmt.c +++ b/console/libretro_mgmt.c @@ -74,24 +74,23 @@ done: return retstr; } -const char *rarch_manage_libretro_set_first_file(const char *libretro_path, const char * exe_ext) +void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext) { //We need to set libretro to the first entry in the cores //directory so that it will be saved to the config file - // FIXME: Use struct string_list* - char ** dir_list = dir_list_new(libretro_path, exe_ext, false); + struct string_list *dir_list = dir_list_new(libretro_path, exe_ext, false); - const char * retstr = NULL; const char * first_exe; if (!dir_list) { RARCH_ERR("Couldn't read directory.\n"); - goto error; + RARCH_ERR("Failed to set first entry to libretro path.\n"); + goto end; } - first_exe = dir_list[0]; + first_exe = dir_list->elems[0].data; if(first_exe) { @@ -113,21 +112,13 @@ const char *rarch_manage_libretro_set_first_file(const char *libretro_path, cons } } - // FIXME: Broken, returns a pointer to data on the stack. - retstr = fname_tmp; + strlcpy(first_file, fname_tmp, size_of_first_file); #else - // FIXME: Broken, returns a pointer to dynamically allocated data - // which is freed before returning. - retstr = first_exe; + strlcpy(first_file, first_exe, size_of_first_file); #endif - RARCH_LOG("Set first entry in libretro core dir to libretro path: [%s].\n", retstr); - goto end; + RARCH_LOG("Set first entry in libretro core dir to libretro path: [%s].\n", first_file); } - // TODO: Should not use two layers of goto labels. -error: - RARCH_ERR("Failed to set first entry to libretro path.\n"); end: dir_list_free(dir_list); - return retstr; } diff --git a/console/libretro_mgmt.h b/console/libretro_mgmt.h index b32db42850..f0c968d755 100644 --- a/console/libretro_mgmt.h +++ b/console/libretro_mgmt.h @@ -28,6 +28,6 @@ enum }; const char *rarch_manage_libretro_install(const char *full_path, const char *path, const char *exe_ext); -const char *rarch_manage_libretro_set_first_file(const char *libretro_path, const char * exe_ext); +void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext); #endif diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index 41f063dcfe..f54bff2a15 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -302,7 +302,7 @@ static void browser_update(filebrowser_t * b, const char *extensions) static void browser_render(filebrowser_t * b) { gl_t *gl = driver.video_data; - uint32_t file_count = b->current_dir.size; + uint32_t file_count = b->current_dir.list->size; int current_index, page_number, page_base, i; float currentX, currentY, ySpacing; @@ -317,7 +317,7 @@ static void browser_render(filebrowser_t * b) for ( i = page_base; i < file_count && i < page_base + NUM_ENTRY_PER_PAGE; ++i) { char fname_tmp[256]; - fill_pathname_base(fname_tmp, b->current_dir.elems[i], sizeof(fname_tmp)); + fill_pathname_base(fname_tmp, b->current_dir.list->elems[i].data, sizeof(fname_tmp)); currentY = currentY + ySpacing; cellDbgFontPuts(currentX, currentY, FONT_SIZE, i == current_index ? RED : WHITE, fname_tmp); gl_render_msg_post(gl); @@ -859,7 +859,7 @@ static void select_file(uint32_t menu_id) if (CTRL_CROSS(button_was_pressed)) { - if(path_is_directory(filebrowser_get_current_path(&tmpBrowser))) + if(filebrowser_get_current_path_isdir(&tmpBrowser)) { /*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */ @@ -952,7 +952,7 @@ static void select_directory(uint32_t menu_id) if (CTRL_SQUARE(button_was_pressed)) { - if(path_is_directory(filebrowser_get_current_path(&tmpBrowser))) + if(filebrowser_get_current_path_isdir(&tmpBrowser)) { snprintf(path, sizeof(path), filebrowser_get_current_path(&tmpBrowser)); switch(menu_id) @@ -995,7 +995,7 @@ static void select_directory(uint32_t menu_id) } else if (CTRL_CROSS(button_was_pressed)) { - if(path_is_directory(filebrowser_get_current_path(&tmpBrowser))) + if(filebrowser_get_current_path_isdir(&tmpBrowser)) { /* if 'filename' is in fact '..' - then pop back directory instead of * adding '..' to filename path */ @@ -1886,7 +1886,7 @@ static void menu_romselect_iterate(filebrowser_t *filebrowser, menu_romselect_ac switch(action) { case MENU_ROMSELECT_ACTION_OK: - if(path_is_directory(filebrowser_get_current_path(filebrowser))) + if(filebrowser_get_current_path_isdir(filebrowser)) { /*if 'filename' is in fact '..' - then pop back directory instead of adding '..' to filename path */ if(browser.current_dir.ptr == 0) @@ -1942,7 +1942,7 @@ static void select_rom(void) menu_romselect_iterate(&browser, action); } - if (path_is_directory(filebrowser_get_current_path(&browser))) + if (filebrowser_get_current_path_isdir(&browser)) { if(!strcmp(filebrowser_get_current_path(&browser),"app_home") || !strcmp(filebrowser_get_current_path(&browser),"host_root")) cellDbgFontPrintf(0.09f, 0.83f, 0.91f, RED, "WARNING - This path only works on DEX PS3 systems. Do not attempt to open\n this directory on CEX PS3 systems, or you might have to restart."); From 322473f348c0c99e0495e8d1df8117cd893bf29f Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 23 Jun 2012 19:17:41 +0200 Subject: [PATCH 05/44] (Salamander) Fixes for new dir_list_new code --- console/salamander/main.c | 98 ++++++++++++++++++++++----------------- file_path.c | 1 + 2 files changed, 57 insertions(+), 42 deletions(-) diff --git a/console/salamander/main.c b/console/salamander/main.c index 9b26aaaaac..f1d4a060c5 100644 --- a/console/salamander/main.c +++ b/console/salamander/main.c @@ -81,59 +81,73 @@ char LIBRETRO_DIR_PATH[PATH_MAX]; char SYS_CONFIG_FILE[PATH_MAX]; char libretro_path[PATH_MAX]; +static void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext) +{ + //We need to set libretro to the first entry in the cores + //directory so that it will be saved to the config file + + struct string_list *dir_list = dir_list_new(libretro_path, exe_ext, false); + + const char * first_exe; + + if (!dir_list) + { + RARCH_ERR("Couldn't read directory.\n"); + RARCH_ERR("Failed to set first entry to libretro path.\n"); + goto end; + } + + first_exe = dir_list->elems[0].data; + + if(first_exe) + { +#ifdef _XBOX + char fname_tmp[PATH_MAX]; + fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); + + if(strcmp(fname_tmp, "RetroArch-Salamander.xex") == 0) + { + RARCH_WARN("First entry is RetroArch Salamander itself, increment entry by one and check if it exists.\n"); + first_exe = dir_list[1]; + fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); + + if(!first_exe) + { + RARCH_ERR("Unlikely error happened - no second entry - no choice but to set it to RetroArch Salamander\n"); + first_exe = dir_list[0]; + fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); + } + } + + strlcpy(first_file, fname_tmp, size_of_first_file); +#else + strlcpy(first_file, first_exe, size_of_first_file); +#endif + RARCH_LOG("Set first entry in libretro core dir to libretro path: [%s].\n", first_file); + } + +end: + dir_list_free(dir_list); +} + static void find_and_set_first_file(void) { //Last fallback - we'll need to start the first executable file // we can find in the RetroArch cores directory + char first_file[PATH_MAX]; + rarch_manage_libretro_set_first_file(first_file, sizeof(first_file), #if defined(_XBOX) - char ** dir_list = dir_list_new("game:\\", "xex", false); + "game:\\", "xex" #elif defined(__CELLOS_LV2__) - char ** dir_list = dir_list_new(LIBRETRO_DIR_PATH, "SELF", false); + LIBRETRO_DIR_PATH, "SELF" #endif +); - if (!dir_list) - { - RARCH_ERR("Failed last fallback - RetroArch Salamander will exit.\n"); - return; - } - - char * first_executable = dir_list[0]; - - if(first_executable) - { -#ifdef _XBOX - //Check if it's RetroArch Salamander itself - if so, first_executable needs to - //be overridden - char fname_tmp[PATH_MAX]; - - fill_pathname_base(fname_tmp, first_executable, sizeof(fname_tmp)); - - if(strcmp(fname_tmp, "RetroArch-Salamander.xex") == 0) - { - RARCH_WARN("First entry is RetroArch Salamander itself, increment entry by one and check if it exists.\n"); - first_executable = dir_list[1]; - fill_pathname_base(fname_tmp, first_executable, sizeof(fname_tmp)); - - if(!first_executable) - { - RARCH_WARN("There is no second entry - no choice but to boot RetroArch Salamander\n"); - first_executable = dir_list[0]; - fill_pathname_base(fname_tmp, first_executable, sizeof(fname_tmp)); - } - } - - snprintf(first_executable, sizeof(first_executable), "game:\\%s", fname_tmp); -#endif - RARCH_LOG("Start first entry in libretro cores dir: [%s].\n", first_executable); - strlcpy(libretro_path, first_executable, sizeof(libretro_path)); - } + if(first_file) + strlcpy(libretro_path, first_file, sizeof(libretro_path)); else - { RARCH_ERR("Failed last fallback - RetroArch Salamander will exit.\n"); - } - - dir_list_free(dir_list); } static void init_settings(void) diff --git a/file_path.c b/file_path.c index c19ee2050b..451f906712 100644 --- a/file_path.c +++ b/file_path.c @@ -23,6 +23,7 @@ #include "compat/posix_string.h" #ifdef __CELLOS_LV2__ +#include //stat() is defined here #define S_ISDIR(x) (x & CELL_FS_S_IFDIR) #endif From c38df90f20ae2ddc2c8ce172feb29a92ad18fd11 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 23 Jun 2012 19:58:30 +0200 Subject: [PATCH 06/44] (360) Works wit new dir_list code + fixes Gambatte (dupe frames) --- 360/frontend/menu.cpp | 18 +++++++++--------- 360/xdk360_video.cpp | 3 +++ console/libretro_mgmt.c | 4 ++-- console/salamander/main.c | 6 +++--- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/360/frontend/menu.cpp b/360/frontend/menu.cpp index 03f52a6490..dfcb0312a2 100644 --- a/360/frontend/menu.cpp +++ b/360/frontend/menu.cpp @@ -70,11 +70,11 @@ static void filebrowser_fetch_directory_entries(const char *path, filebrowser_t rompath_title->SetText(strw_buffer); romlist->DeleteItems(0, romlist->GetItemCount()); - romlist->InsertItems(0, browser->current_dir.size); - for(unsigned i = 0; i < browser->current_dir.size; i++) + romlist->InsertItems(0, browser->current_dir.list->size); + for(unsigned i = 0; i < browser->current_dir.list->size; i++) { char fname_tmp[256]; - fill_pathname_base(fname_tmp, browser->current_dir.elems[i], sizeof(fname_tmp)); + fill_pathname_base(fname_tmp, browser->current_dir.list->elems[i].data, sizeof(fname_tmp)); rarch_convert_char_to_wchar(strw_buffer, fname_tmp, sizeof(strw_buffer)); romlist->SetText(i, strw_buffer); } @@ -530,7 +530,7 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle if(hObjPressed == m_romlist) { int index = m_romlist.GetCurSel(); - if(path_file_exists(browser.current_dir.elems[index])) + if(path_file_exists(browser.current_dir.list->elems[index].data)) { struct retro_system_info info; retro_get_system_info(&info); @@ -550,7 +550,7 @@ HRESULT CRetroArchFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle rarch_settings_change(S_START_RARCH); } } - else if(path_is_directory(browser.current_dir.elems[index])) + else if(browser.current_dir.list->elems[index].attr.b) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); @@ -583,7 +583,7 @@ HRESULT CRetroArchShaderBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHand if(hObjPressed == m_shaderlist) { int index = m_shaderlist.GetCurSel(); - if(path_file_exists(tmp_browser.current_dir.elems[index])) + if(path_file_exists(tmp_browser.current_dir.list->elems[index].data)) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); @@ -604,7 +604,7 @@ HRESULT CRetroArchShaderBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHand if (g_console.info_msg_enable) rarch_settings_msg(S_MSG_SHADER_LOADING_SUCCEEDED, S_DELAY_180); } - else if(path_is_directory(tmp_browser.current_dir.elems[index])) + else if(tmp_browser.current_dir.list->elems[index].attr.b) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_shaderlist.GetText(index)); snprintf(path, sizeof(path), "%s\\%s", filebrowser_get_current_dir(&tmp_browser), strbuffer); @@ -624,13 +624,13 @@ HRESULT CRetroArchCoreBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandle if(hObjPressed == m_romlist) { int index = m_romlist.GetCurSel(); - if(path_file_exists(tmp_browser.current_dir.elems[index])) + if(path_file_exists(tmp_browser.current_dir.list->elems[index].data)) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); snprintf(g_console.launch_app_on_exit, sizeof(g_console.launch_app_on_exit), "%s\\%s", filebrowser_get_current_dir(&tmp_browser), strbuffer); rarch_settings_change(S_RETURN_TO_LAUNCHER); } - else if(path_is_directory(tmp_browser.current_dir.elems[index])) + else if(tmp_browser.current_dir.list->elems[index].attr.b) { const char * strbuffer = rarch_convert_wchar_to_const_char((const wchar_t *)m_romlist.GetText(index)); snprintf(path, sizeof(path), "%s%s\\", filebrowser_get_current_dir(&tmp_browser), strbuffer); diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp index b13a42d827..ff5021258e 100644 --- a/360/xdk360_video.cpp +++ b/360/xdk360_video.cpp @@ -550,6 +550,9 @@ static void *xdk360_init(const video_info_t *video, const input_driver_t **input static bool xdk360_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { + if (!frame) + return true; + xdk360_video_t *d3d9 = (xdk360_video_t*)data; D3DSurface* pRenderTarget0; bool menu_enabled = g_console.menu_enable; diff --git a/console/libretro_mgmt.c b/console/libretro_mgmt.c index 8c3bcb48e0..0250af2218 100644 --- a/console/libretro_mgmt.c +++ b/console/libretro_mgmt.c @@ -101,13 +101,13 @@ void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first if(strcmp(fname_tmp, "RetroArch-Salamander.xex") == 0) { RARCH_WARN("First entry is RetroArch Salamander itself, increment entry by one and check if it exists.\n"); - first_exe = dir_list[1]; + first_exe = dir_list->elems[1].data; fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); if(!first_exe) { RARCH_ERR("Unlikely error happened - no second entry - no choice but to set it to RetroArch Salamander\n"); - first_exe = dir_list[0]; + first_exe = dir_list->elems[0].data; fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); } } diff --git a/console/salamander/main.c b/console/salamander/main.c index f1d4a060c5..1a334a3b03 100644 --- a/console/salamander/main.c +++ b/console/salamander/main.c @@ -108,13 +108,13 @@ static void rarch_manage_libretro_set_first_file(char *first_file, size_t size_o if(strcmp(fname_tmp, "RetroArch-Salamander.xex") == 0) { RARCH_WARN("First entry is RetroArch Salamander itself, increment entry by one and check if it exists.\n"); - first_exe = dir_list[1]; + first_exe = dir_list->elems[1].data; fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); if(!first_exe) { - RARCH_ERR("Unlikely error happened - no second entry - no choice but to set it to RetroArch Salamander\n"); - first_exe = dir_list[0]; + RARCH_ERR("Unlikely error happened - no second entry - no choice but to set it to RetroArch Salamander\n"); + first_exe = dir_list->elems[0].data; fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp)); } } From c58d18b1c182136b3e255cf4eadecf81a90bf01d Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 23 Jun 2012 21:06:38 +0200 Subject: [PATCH 07/44] (360/Wii) Move to frontend directories --- 360/{frontend => frontend-xdk}/main.c | 0 360/{frontend => frontend-xdk}/menu.cpp | 0 360/{frontend => frontend-xdk}/menu.h | 0 360/xdk360_input.c | 2 +- console/griffin/griffin.c | 6 +++--- wii/{ => frontend}/main.c | 9 ++++----- 6 files changed, 8 insertions(+), 9 deletions(-) rename 360/{frontend => frontend-xdk}/main.c (100%) rename 360/{frontend => frontend-xdk}/menu.cpp (100%) rename 360/{frontend => frontend-xdk}/menu.h (100%) rename wii/{ => frontend}/main.c (97%) diff --git a/360/frontend/main.c b/360/frontend-xdk/main.c similarity index 100% rename from 360/frontend/main.c rename to 360/frontend-xdk/main.c diff --git a/360/frontend/menu.cpp b/360/frontend-xdk/menu.cpp similarity index 100% rename from 360/frontend/menu.cpp rename to 360/frontend-xdk/menu.cpp diff --git a/360/frontend/menu.h b/360/frontend-xdk/menu.h similarity index 100% rename from 360/frontend/menu.h rename to 360/frontend-xdk/menu.h diff --git a/360/xdk360_input.c b/360/xdk360_input.c index 55913d3179..4ee54e7658 100644 --- a/360/xdk360_input.c +++ b/360/xdk360_input.c @@ -22,7 +22,7 @@ #include "../libretro.h" #include "../console/console_ext.h" #include "xdk360_input.h" -#include "frontend/menu.h" +#include "frontend-xdk/menu.h" static uint64_t state[4]; static unsigned pads_connected; diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index d57de2a3ff..3b6c85d048 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -203,9 +203,9 @@ REWIND MAIN ============================================================ */ #if defined(_XBOX) -#include "../../360/frontend/main.c" +#include "../../360/frontend-xdk/main.c" #elif defined(GEKKO) -#include "../../wii/main.c" +#include "../../wii/frontend/main.c" #endif /*============================================================ @@ -231,7 +231,7 @@ NETPLAY MENU ============================================================ */ #if defined(_XBOX) -#include "../../360/frontend/menu.cpp" +#include "../../360/frontend-xdk/menu.cpp" #elif defined(GEKKO) #include "../rgui/rgui.c" #include "../rgui/list.c" diff --git a/wii/main.c b/wii/frontend/main.c similarity index 97% rename from wii/main.c rename to wii/frontend/main.c index e12dca3ba9..f8828a91eb 100644 --- a/wii/main.c +++ b/wii/frontend/main.c @@ -16,11 +16,10 @@ #undef main #include -#include "../console/rgui/rgui.h" -#include "../driver.h" -#include "../general.h" -#include "../libretro.h" -#include "driver.h" +#include "../../console/rgui/rgui.h" +#include "../../driver.h" +#include "../../general.h" +#include "../../libretro.h" #include #include From 3cec90b1edaf62086e55891228384472a8e4d1dc Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 23 Jun 2012 21:39:24 +0200 Subject: [PATCH 08/44] Relocate MSVC solutions / vcxprojs into single directory --- .../RetroArch-360-Salamander}/RetroArch-Salamander.vcxproj | 0 .../RetroArch-Salamander.vcxproj.filters | 0 {msvc-360 => msvc}/RetroArch-360.sln | 2 +- {msvc-360 => msvc}/RetroArch-360/RetroArch-360.vcxproj | 0 {msvc-360 => msvc}/RetroArch-360/RetroArch-360.vcxproj.filters | 0 {msvc-ps3/RetroArch-PS3 => msvc}/RetroArch-PS3.sln | 2 +- {msvc-ps3 => msvc}/RetroArch-PS3/RetroArch-PS3.vcxproj | 0 {msvc-ps3 => msvc}/RetroArch-PS3/RetroArch-PS3.vcxproj.filters | 0 8 files changed, 2 insertions(+), 2 deletions(-) rename {msvc-360/RetroArch-Salamander => msvc/RetroArch-360-Salamander}/RetroArch-Salamander.vcxproj (100%) rename {msvc-360/RetroArch-Salamander => msvc/RetroArch-360-Salamander}/RetroArch-Salamander.vcxproj.filters (100%) rename {msvc-360 => msvc}/RetroArch-360.sln (97%) rename {msvc-360 => msvc}/RetroArch-360/RetroArch-360.vcxproj (100%) rename {msvc-360 => msvc}/RetroArch-360/RetroArch-360.vcxproj.filters (100%) rename {msvc-ps3/RetroArch-PS3 => msvc}/RetroArch-PS3.sln (90%) rename {msvc-ps3 => msvc}/RetroArch-PS3/RetroArch-PS3.vcxproj (100%) rename {msvc-ps3 => msvc}/RetroArch-PS3/RetroArch-PS3.vcxproj.filters (100%) diff --git a/msvc-360/RetroArch-Salamander/RetroArch-Salamander.vcxproj b/msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj similarity index 100% rename from msvc-360/RetroArch-Salamander/RetroArch-Salamander.vcxproj rename to msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj diff --git a/msvc-360/RetroArch-Salamander/RetroArch-Salamander.vcxproj.filters b/msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj.filters similarity index 100% rename from msvc-360/RetroArch-Salamander/RetroArch-Salamander.vcxproj.filters rename to msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj.filters diff --git a/msvc-360/RetroArch-360.sln b/msvc/RetroArch-360.sln similarity index 97% rename from msvc-360/RetroArch-360.sln rename to msvc/RetroArch-360.sln index 6ec44d2496..5cd3902b49 100644 --- a/msvc-360/RetroArch-360.sln +++ b/msvc/RetroArch-360.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RetroArch-360", "RetroArch-360\RetroArch-360.vcxproj", "{9CE8EEF7-CC1C-4A04-BB5C-62411CB5BADE}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RetroArch-Salamander", "RetroArch-Salamander\RetroArch-Salamander.vcxproj", "{29D5B973-F267-4039-84E7-8D34E9D00800}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RetroArch-Salamander", "RetroArch-360-Salamander\RetroArch-Salamander.vcxproj", "{29D5B973-F267-4039-84E7-8D34E9D00800}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/msvc-360/RetroArch-360/RetroArch-360.vcxproj b/msvc/RetroArch-360/RetroArch-360.vcxproj similarity index 100% rename from msvc-360/RetroArch-360/RetroArch-360.vcxproj rename to msvc/RetroArch-360/RetroArch-360.vcxproj diff --git a/msvc-360/RetroArch-360/RetroArch-360.vcxproj.filters b/msvc/RetroArch-360/RetroArch-360.vcxproj.filters similarity index 100% rename from msvc-360/RetroArch-360/RetroArch-360.vcxproj.filters rename to msvc/RetroArch-360/RetroArch-360.vcxproj.filters diff --git a/msvc-ps3/RetroArch-PS3/RetroArch-PS3.sln b/msvc/RetroArch-PS3.sln similarity index 90% rename from msvc-ps3/RetroArch-PS3/RetroArch-PS3.sln rename to msvc/RetroArch-PS3.sln index 9444cb20f9..618b3e4c85 100644 --- a/msvc-ps3/RetroArch-PS3/RetroArch-PS3.sln +++ b/msvc/RetroArch-PS3.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RetroArch-PS3", "RetroArch-PS3.vcxproj", "{EAC43BA5-5C6A-4FE4-8E50-CD9B5BD3E0F9}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RetroArch-PS3", "RetroArch-PS3/RetroArch-PS3.vcxproj", "{EAC43BA5-5C6A-4FE4-8E50-CD9B5BD3E0F9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/msvc-ps3/RetroArch-PS3/RetroArch-PS3.vcxproj b/msvc/RetroArch-PS3/RetroArch-PS3.vcxproj similarity index 100% rename from msvc-ps3/RetroArch-PS3/RetroArch-PS3.vcxproj rename to msvc/RetroArch-PS3/RetroArch-PS3.vcxproj diff --git a/msvc-ps3/RetroArch-PS3/RetroArch-PS3.vcxproj.filters b/msvc/RetroArch-PS3/RetroArch-PS3.vcxproj.filters similarity index 100% rename from msvc-ps3/RetroArch-PS3/RetroArch-PS3.vcxproj.filters rename to msvc/RetroArch-PS3/RetroArch-PS3.vcxproj.filters From 9e76591e111e4f0c18cab9d025bf0d6a8df1f931 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 23 Jun 2012 22:13:50 +0200 Subject: [PATCH 09/44] Portable convert_char_to_wchar function --- console/console_ext.c | 7 +------ msvc/RetroArch-360/RetroArch-360.vcxproj.filters | 6 +++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/console/console_ext.c b/console/console_ext.c index 0139ad77cd..e9d87c5f66 100644 --- a/console/console_ext.c +++ b/console/console_ext.c @@ -756,15 +756,10 @@ void rarch_console_rsound_stop(void) STRING HANDLING ============================================================ */ -#ifdef _XBOX void rarch_convert_char_to_wchar(wchar_t *buf, const char * str, size_t size) { - unsigned long dwNum = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); - size /= sizeof(wchar_t); - rarch_assert(size >= dwNum); - MultiByteToWideChar(CP_ACP, 0, str, -1, buf, dwNum); + mbstowcs(buf, str, size / sizeof(wchar_t)); } -#endif const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr) { diff --git a/msvc/RetroArch-360/RetroArch-360.vcxproj.filters b/msvc/RetroArch-360/RetroArch-360.vcxproj.filters index 204ae163b3..db3b1b3563 100644 --- a/msvc/RetroArch-360/RetroArch-360.vcxproj.filters +++ b/msvc/RetroArch-360/RetroArch-360.vcxproj.filters @@ -30,9 +30,6 @@ {cf25b88e-c7b2-4823-876a-ed0dd8020821} - - {c868cc96-a0ac-4672-a4ca-dd7c28277972} - {d50021e0-79f4-42c0-b190-1c31fa4fe2b2} @@ -42,6 +39,9 @@ {3a05047b-b9ec-4821-bb28-d1b0e9e3e8bb} + + {c868cc96-a0ac-4672-a4ca-dd7c28277972} + From 0f7c24fd495bf482e651a8447659d33e8058c718 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 23 Jun 2012 22:09:53 +0200 Subject: [PATCH 10/44] (360/PS3) Get rid of XBOX ifdef for rarch_convert_char_to_wchar --- console/console_ext.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/console/console_ext.h b/console/console_ext.h index fd28ef2f94..1c05b34e3f 100644 --- a/console/console_ext.h +++ b/console/console_ext.h @@ -218,10 +218,7 @@ bool rarch_console_rsound_start(const char *ip); void rarch_console_rsound_stop(void); #endif -#ifdef _XBOX void rarch_convert_char_to_wchar(wchar_t *buf, const char * str, size_t size); -#endif - const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr); void rarch_config_create_default(const char * conf_name); From 347e03b767b58583c87a916c94008823a4d26ee7 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 23 Jun 2012 22:36:35 +0200 Subject: [PATCH 11/44] (PS3) Small cleanups --- console/console_ext.h | 7 +++++++ console/salamander/main.c | 2 +- ps3/frontend/main.c | 2 +- ps3/frontend/shared.h | 8 -------- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/console/console_ext.h b/console/console_ext.h index 1c05b34e3f..8f78e5a069 100644 --- a/console/console_ext.h +++ b/console/console_ext.h @@ -221,6 +221,13 @@ void rarch_console_rsound_stop(void); void rarch_convert_char_to_wchar(wchar_t *buf, const char * str, size_t size); const char * rarch_convert_wchar_to_const_char(const wchar_t * wstr); +enum +{ + CONFIG_FILE, + SHADER_PRESET_FILE, + INPUT_PRESET_FILE +}; + void rarch_config_create_default(const char * conf_name); void rarch_config_load(const char * conf_name, const char * libretro_dir_path, const char * exe_ext, bool find_libretro_path); void rarch_config_save(const char * conf_name); diff --git a/console/salamander/main.c b/console/salamander/main.c index 1a334a3b03..ab7e5ba721 100644 --- a/console/salamander/main.c +++ b/console/salamander/main.c @@ -70,7 +70,6 @@ #if defined(__CELLOS_LV2__) static uint8_t np_pool[NP_POOL_SIZE]; -char contentInfoPath[PATH_MAX]; char usrDirPath[PATH_MAX]; SYS_PROCESS_PARAM(1001, 0x100000) #elif defined(_XBOX) @@ -252,6 +251,7 @@ static void get_environment_settings (void) unsigned int get_attributes; CellGameContentSize size; char dirName[CELL_GAME_DIRNAME_SIZE]; + char contentInfoPath[PATH_MAX]; memset(&size, 0x00, sizeof(CellGameContentSize)); diff --git a/ps3/frontend/main.c b/ps3/frontend/main.c index 8a54c0a1a9..b4ca3992fa 100644 --- a/ps3/frontend/main.c +++ b/ps3/frontend/main.c @@ -60,7 +60,6 @@ #define NP_POOL_SIZE (128*1024) static uint8_t np_pool[NP_POOL_SIZE]; -char contentInfoPath[PATH_MAX]; char usrDirPath[PATH_MAX]; char DEFAULT_PRESET_FILE[PATH_MAX]; char DEFAULT_BORDER_FILE[PATH_MAX]; @@ -174,6 +173,7 @@ static void get_environment_settings(int argc, char *argv[]) unsigned int get_attributes; CellGameContentSize size; char dirName[CELL_GAME_DIRNAME_SIZE]; + char contentInfoPath[PATH_MAX]; CellSysCacheParam param; memset(¶m, 0x00, sizeof(CellSysCacheParam)); strlcpy(param.cacheId,CACHE_ID, sizeof(CellSysCacheParam)); diff --git a/ps3/frontend/shared.h b/ps3/frontend/shared.h index 7f6bb507ca..e1e3415f22 100644 --- a/ps3/frontend/shared.h +++ b/ps3/frontend/shared.h @@ -17,14 +17,6 @@ #ifndef _PS3_SHARED_H #define _PS3_SHARED_H -enum -{ - CONFIG_FILE, - SHADER_PRESET_FILE, - INPUT_PRESET_FILE -}; - -extern char contentInfoPath[PATH_MAX]; extern char usrDirPath[PATH_MAX]; extern char DEFAULT_PRESET_FILE[PATH_MAX]; extern char DEFAULT_BORDER_FILE[PATH_MAX]; From d6fedb0522a75dfdf265efaa271501e0632e4fea Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 23 Jun 2012 22:55:46 +0200 Subject: [PATCH 12/44] (360) Create rarch_settings_create_menu_item_label_w --- 360/frontend-xdk/menu.cpp | 38 +++++++++++++++++++------------------- console/console_settings.c | 21 ++++++++------------- console/console_settings.h | 5 +---- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/360/frontend-xdk/menu.cpp b/360/frontend-xdk/menu.cpp index dfcb0312a2..7a561c830e 100644 --- a/360/frontend-xdk/menu.cpp +++ b/360/frontend-xdk/menu.cpp @@ -235,12 +235,12 @@ HRESULT CRetroArchSettings::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER, g_settings.video.smooth ? L"Hardware filtering shader #1: Linear interpolation" : L"Hardware filtering shader #1: Point filtering"); m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER_2, g_settings.video.second_pass_smooth ? L"Hardware filtering shader #2: Linear interpolation" : L"Hardware filtering shader #2: Point filtering"); m_settingslist.SetText(SETTING_SCALE_ENABLED, g_console.fbo_enabled ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SHADER, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SHADER, sizeof(strw_buffer)); m_settingslist.SetText(SETTING_SHADER, strw_buffer); m_settingslist.SetText(SETTING_COLOR_FORMAT, g_console.color_format ? L"Color format: 32bit ARGB" : L"Color format: 16bit RGBA"); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SHADER_2, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SHADER_2, sizeof(strw_buffer)); m_settingslist.SetText(SETTING_SHADER_2, strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SCALE_FACTOR, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SCALE_FACTOR, sizeof(strw_buffer)); m_settingslist.SetText(SETTING_SCALE_FACTOR, strw_buffer); return 0; @@ -265,7 +265,7 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro { rarch_settings_change(S_SCALE_FACTOR_DECREMENT); //xdk360_gfx_init_fbo(vid); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SCALE_FACTOR, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SCALE_FACTOR, sizeof(strw_buffer)); m_settingslist.SetText(SETTING_SCALE_FACTOR, strw_buffer); } } @@ -283,7 +283,7 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro { rarch_settings_change(S_SCALE_FACTOR_INCREMENT); //xdk360_gfx_init_fbo(vid); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SCALE_FACTOR, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SCALE_FACTOR, sizeof(strw_buffer)); m_settingslist.SetText(SETTING_SCALE_FACTOR, strw_buffer); } } @@ -316,16 +316,16 @@ HRESULT CRetroArchQuickMenu::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) GetChildById(L"XuiQuickMenuList", &m_quickmenulist); GetChildById(L"XuiBackButton", &m_back); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_KEEP_ASPECT_RATIO, strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_LOAD_STATE_SLOT, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_LOAD_STATE_SLOT, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_LOAD_STATE, strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SAVE_STATE_SLOT, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SAVE_STATE_SLOT, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_SAVE_STATE, strw_buffer); return 0; @@ -347,9 +347,9 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr case MENU_ITEM_LOAD_STATE: case MENU_ITEM_SAVE_STATE: rarch_state_slot_decrease(); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_LOAD_STATE_SLOT, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_LOAD_STATE_SLOT, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_LOAD_STATE, strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SAVE_STATE_SLOT, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SAVE_STATE_SLOT, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_SAVE_STATE, strw_buffer); break; case MENU_ITEM_KEEP_ASPECT_RATIO: @@ -358,7 +358,7 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr break; case MENU_ITEM_ORIENTATION: rarch_settings_change(S_ROTATION_DECREMENT); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, strw_buffer); video_xdk360.set_rotation(driver.video_data, g_console.screen_orientation); break; @@ -372,9 +372,9 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr case MENU_ITEM_LOAD_STATE: case MENU_ITEM_SAVE_STATE: rarch_state_slot_increase(); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_LOAD_STATE_SLOT, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_LOAD_STATE_SLOT, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_LOAD_STATE, strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_SAVE_STATE_SLOT, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SAVE_STATE_SLOT, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_SAVE_STATE, strw_buffer); break; case MENU_ITEM_KEEP_ASPECT_RATIO: @@ -383,7 +383,7 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr break; case MENU_ITEM_ORIENTATION: rarch_settings_change(S_ROTATION_INCREMENT); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, strw_buffer); video_xdk360.set_rotation(driver.video_data, g_console.screen_orientation); break; @@ -399,7 +399,7 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr if(aspectratio_changed) { gfx_ctx_set_aspect_ratio(d3d9, g_console.aspect_ratio_index); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_KEEP_ASPECT_RATIO, strw_buffer); } @@ -448,7 +448,7 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled rarch_settings_default(S_DEF_ASPECT_RATIO); gfx_ctx_set_aspect_ratio(d3d9, g_console.aspect_ratio_index); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_KEEP_ASPECT_RATIO, strw_buffer); } break; @@ -458,7 +458,7 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled break; case MENU_ITEM_ORIENTATION: rarch_settings_default(S_DEF_ROTATION); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ROTATION, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_ORIENTATION, strw_buffer); video_xdk360.set_rotation(driver.video_data, g_console.screen_orientation); break; @@ -517,7 +517,7 @@ HRESULT CRetroArchMain::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) rarch_convert_char_to_wchar(strw_buffer, core_text, sizeof(strw_buffer)); m_core.SetText(strw_buffer); - rarch_settings_create_menu_item_label(strw_buffer, S_LBL_RARCH_VERSION, sizeof(strw_buffer)); + rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_RARCH_VERSION, sizeof(strw_buffer)); m_title.SetText(strw_buffer); return 0; diff --git a/console/console_settings.c b/console/console_settings.c index ebd666c8ad..114198acd4 100644 --- a/console/console_settings.c +++ b/console/console_settings.c @@ -220,18 +220,17 @@ void rarch_settings_msg(unsigned setting, unsigned delay) msg_queue_push(g_extern.msg_queue, str, 1, delay); } -#ifdef _XBOX -void rarch_settings_create_menu_item_label(wchar_t * strwbuf, unsigned setting, size_t size) -#else -void rarch_settings_create_menu_item_label(char * str, unsigned setting, size_t size) -#endif +void rarch_settings_create_menu_item_label_w(wchar_t *strwbuf, unsigned setting, size_t size) { -#ifdef _XBOX char str[PATH_MAX]; - size_t SIZEOF_STR = sizeof(str); -#else + + rarch_settings_create_menu_item_label(str, setting, sizeof(str)); + rarch_convert_char_to_wchar(strwbuf, str, size); +} + +void rarch_settings_create_menu_item_label(char * str, unsigned setting, size_t size) +{ size_t SIZEOF_STR = size; -#endif switch (setting) { @@ -260,8 +259,4 @@ void rarch_settings_create_menu_item_label(char * str, unsigned setting, size_t snprintf(str, SIZEOF_STR, "Save State #%d", g_extern.state_slot); break; } - -#ifdef _XBOX - rarch_convert_char_to_wchar(strwbuf, str, size); -#endif } diff --git a/console/console_settings.h b/console/console_settings.h index bebc2df457..558ff347cd 100644 --- a/console/console_settings.h +++ b/console/console_settings.h @@ -95,10 +95,7 @@ void rarch_settings_change(unsigned setting); void rarch_settings_default(unsigned setting); void rarch_settings_msg(unsigned setting, unsigned delay); -#ifdef _XBOX -void rarch_settings_create_menu_item_label(wchar_t * strwbuf, unsigned setting, size_t size); -#else void rarch_settings_create_menu_item_label(char * str, unsigned setting, size_t size); -#endif +void rarch_settings_create_menu_item_label_w(wchar_t *strwbuf, unsigned setting, size_t size); #endif From a19e359362fae8aee1abd9232a56e82aa9f52a35 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 23 Jun 2012 23:39:13 +0200 Subject: [PATCH 13/44] (360) Some refactoring in fonts.cpp --- 360/fonts.cpp | 51 ++++++++++++++++++--------------------------------- 1 file changed, 18 insertions(+), 33 deletions(-) diff --git a/360/fonts.cpp b/360/fonts.cpp index 61fb1b3441..706afd36bd 100644 --- a/360/fonts.cpp +++ b/360/fonts.cpp @@ -160,8 +160,8 @@ static void xdk360_video_font_draw_text(xdk360_video_font_t * font, if( letter == L'\n' ) { font->m_fCursorX = fOriginX; - font->m_fCursorY += font->m_fFontYAdvance * font->m_fYScaleFactor; - continue; + font->m_fCursorY += font->m_fFontYAdvance * font->m_fYScaleFactor; + continue; } // Translate unprintable characters @@ -322,11 +322,6 @@ static void xdk360_video_font_get_text_width(xdk360_video_font_t * font, const w if (letter == L'\n') break; - // Handle carriage return characters by ignoring them. This helps when - // displaying text from a file. - if( letter == L'\r' ) - continue; - // Translate unprintable characters const GLYPH_ATTR* pGlyph; @@ -588,7 +583,7 @@ static void xdk360_video_font_deinit(xdk360_video_font_t * font) m_xprResource.Destroy(); } -void xdk360_console_deinit() +void xdk360_console_deinit(void) { // Delete the memory we've allocated if(video_console.m_Lines) @@ -679,13 +674,7 @@ void xdk360_console_format(LPCSTR strFormat, ... ) for( unsigned long i = 0; i < uStringLength; i++ ) { wchar_t wch; - int ret = MultiByteToWideChar( - CP_ACP, // ANSI code page - 0, // No flags - &strMessage[i], // Character to convert - 1, // Convert one byte - &wch, // Target wide character buffer - 1 ); // One wide character + rarch_convert_char_to_wchar(&wch, &strMessage[i], sizeof(wch)); xdk360_console_add( wch ); } @@ -706,24 +695,20 @@ void xdk360_video_font_begin (xdk360_video_font_t * font) // Save state if( font->m_bSaveState ) { - // Note, we are not saving the texture, vertex, or pixel shader, - // since it's not worth the performance. We're more interested - // in saving state that would cause hard to find problems. - pD3dDevice->GetRenderState( D3DRS_ALPHABLENDENABLE, - &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHABLENDENABLE ] ); - pD3dDevice->GetRenderState( D3DRS_SRCBLEND, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_SRCBLEND ] ); - pD3dDevice->GetRenderState( D3DRS_DESTBLEND, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_DESTBLEND ] ); - pD3dDevice->GetRenderState( D3DRS_BLENDOP, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_BLENDOP ] ); - pD3dDevice->GetRenderState( D3DRS_ALPHATESTENABLE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHATESTENABLE ] ); - pD3dDevice->GetRenderState( D3DRS_ALPHAREF, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHAREF ] ); - pD3dDevice->GetRenderState( D3DRS_ALPHAFUNC, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHAFUNC ] ); - pD3dDevice->GetRenderState( D3DRS_FILLMODE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_FILLMODE ] ); - pD3dDevice->GetRenderState( D3DRS_CULLMODE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_CULLMODE ] ); - pD3dDevice->GetRenderState( D3DRS_VIEWPORTENABLE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_VIEWPORTENABLE ] ); - font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_MINFILTER ] = D3DDevice_GetSamplerState_MinFilter( pD3dDevice, 0 ); - font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_MAGFILTER ] = D3DDevice_GetSamplerState_MagFilter( pD3dDevice, 0 ); - font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_ADDRESSU ] = D3DDevice_GetSamplerState_AddressU( pD3dDevice, 0); - font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_ADDRESSV ] = D3DDevice_GetSamplerState_AddressV( pD3dDevice, 0); + pD3dDevice->GetRenderState( D3DRS_ALPHABLENDENABLE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHABLENDENABLE ] ); + pD3dDevice->GetRenderState( D3DRS_SRCBLEND, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_SRCBLEND ] ); + pD3dDevice->GetRenderState( D3DRS_DESTBLEND, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_DESTBLEND ] ); + pD3dDevice->GetRenderState( D3DRS_BLENDOP, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_BLENDOP ] ); + pD3dDevice->GetRenderState( D3DRS_ALPHATESTENABLE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHATESTENABLE ] ); + pD3dDevice->GetRenderState( D3DRS_ALPHAREF, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHAREF ] ); + pD3dDevice->GetRenderState( D3DRS_ALPHAFUNC, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_ALPHAFUNC ] ); + pD3dDevice->GetRenderState( D3DRS_FILLMODE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_FILLMODE ] ); + pD3dDevice->GetRenderState( D3DRS_CULLMODE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_CULLMODE ] ); + pD3dDevice->GetRenderState( D3DRS_VIEWPORTENABLE, &font->m_dwSavedState[ SAVEDSTATE_D3DRS_VIEWPORTENABLE ] ); + font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_MINFILTER ] = D3DDevice_GetSamplerState_MinFilter( pD3dDevice, 0 ); + font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_MAGFILTER ] = D3DDevice_GetSamplerState_MagFilter( pD3dDevice, 0 ); + font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_ADDRESSU ] = D3DDevice_GetSamplerState_AddressU( pD3dDevice, 0); + font->m_dwSavedState[ SAVEDSTATE_D3DSAMP_ADDRESSV ] = D3DDevice_GetSamplerState_AddressV( pD3dDevice, 0); } // Set the texture scaling factor as a vertex shader constant From 35f1cfa7b9ea0990e1650a15f1d808dff8e2ea9c Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 23 Jun 2012 23:47:16 +0200 Subject: [PATCH 14/44] (360) Simplified xd360_console_format --- 360/fonts.cpp | 19 +++---------------- 360/fonts.h | 2 +- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/360/fonts.cpp b/360/fonts.cpp index 706afd36bd..b1bb3587d4 100644 --- a/360/fonts.cpp +++ b/360/fonts.cpp @@ -651,7 +651,7 @@ static void xdk360_console_add( wchar_t wch ) video_console.m_cCurLineLength++; } -void xdk360_console_format(LPCSTR strFormat, ... ) +void xdk360_console_format(const char * strFormat) { video_console.m_nCurLine = 0; video_console.m_cCurLineLength = 0; @@ -660,27 +660,14 @@ void xdk360_console_format(LPCSTR strFormat, ... ) video_console.m_cScreenHeightVirtual * ( video_console.m_cScreenWidth + 1 ) * sizeof( wchar_t ) ); - va_list pArgList; - va_start( pArgList, strFormat ); - - // Count the required length of the string - unsigned long dwStrLen = _vscprintf( strFormat, pArgList ) + 1; - // +1 = null terminator - char * strMessage = ( char * )malloc( dwStrLen ); - vsprintf_s( strMessage, dwStrLen, strFormat, pArgList ); - // Output the string to the console - unsigned long uStringLength = strlen( strMessage ); + unsigned long uStringLength = strlen( strFormat ); for( unsigned long i = 0; i < uStringLength; i++ ) { wchar_t wch; - rarch_convert_char_to_wchar(&wch, &strMessage[i], sizeof(wch)); + rarch_convert_char_to_wchar(&wch, &strFormat[i], sizeof(wch)); xdk360_console_add( wch ); } - - free(strMessage); - - va_end( pArgList ); } void xdk360_video_font_begin (xdk360_video_font_t * font) diff --git a/360/fonts.h b/360/fonts.h index 54ebecaaea..a50df0547d 100644 --- a/360/fonts.h +++ b/360/fonts.h @@ -102,7 +102,7 @@ typedef struct HRESULT xdk360_console_init ( LPCSTR strFontFileName, D3DCOLOR colBackColor, D3DCOLOR colTextColor); void xdk360_console_deinit (void); -void xdk360_console_format (LPCSTR strFormat, ... ); +void xdk360_console_format (const char *strFormat); void xdk360_console_draw (void); void xdk360_video_font_begin (xdk360_video_font_t * font); From e5b3a61f9ff2fa180742382d78f99388649f8556 Mon Sep 17 00:00:00 2001 From: Themaister Date: Sun, 24 Jun 2012 02:11:22 +0200 Subject: [PATCH 15/44] Replace use of unsafe strtok() with strtok_r. Implement compatibility for strtok_r() on Win32. --- audio/jack.c | 5 +++-- cheats.c | 6 ++++-- compat/compat.c | 32 ++++++++++++++++++++++++++++++++ compat/posix_string.h | 5 +++++ conf/config_file.c | 6 ++++-- dynamic.c | 8 ++++++-- file_path.c | 6 ++++-- gfx/py_state/py_state.c | 5 +++-- gfx/shader_cg.c | 10 ++++++---- network_cmd.c | 12 +++++++----- 10 files changed, 74 insertions(+), 21 deletions(-) diff --git a/audio/jack.c b/audio/jack.c index 893a0cb42c..348b448f2f 100644 --- a/audio/jack.c +++ b/audio/jack.c @@ -85,10 +85,11 @@ static int parse_ports(char **dest_ports, const char **jports) { int parsed = 0; - const char *con = strtok(g_settings.audio.device, ","); + char *save; + const char *con = strtok_r(g_settings.audio.device, ",", &save); if (con) dest_ports[parsed++] = strdup(con); - con = strtok(NULL, ","); + con = strtok_r(NULL, ",", &save); if (con) dest_ports[parsed++] = strdup(con); diff --git a/cheats.c b/cheats.c index 16bb79f04e..1e918e39b0 100644 --- a/cheats.c +++ b/cheats.c @@ -18,6 +18,7 @@ #include "dynamic.h" #include "general.h" #include "compat/strl.h" +#include "compat/posix_string.h" #ifdef HAVE_CONFIG_H #include "config.h" @@ -165,14 +166,15 @@ static void cheat_manager_load_config(cheat_manager_t *handle, const char *path, return; } - const char *num = strtok(str, ";"); + char *save; + const char *num = strtok_r(str, ";", &save); while (num) { unsigned index = strtoul(num, NULL, 0); if (index < handle->size) handle->cheats[index].state = true; - num = strtok(NULL, ";"); + num = strtok_r(NULL, ";", &save); } free(str); diff --git a/compat/compat.c b/compat/compat.c index 5f3920e597..0562416864 100644 --- a/compat/compat.c +++ b/compat/compat.c @@ -239,6 +239,7 @@ size_t strlcat(char *dest, const char *source, size_t size) #undef strcasecmp #undef strdup #undef isblank +#undef strtok_r #include #include #include @@ -278,5 +279,36 @@ int isblank_rarch__(int c) return (c == ' ') || (c == '\t'); } +char *strtok_r_rarch__(char *str, const char *delim, char **saveptr) +{ + if (!saveptr || !delim) + return NULL; + + if (str) + *saveptr = str; + + char *first = NULL; + + do + { + first = *saveptr; + while (*first && strchr(delim, *first)) + *first++ = '\0'; + + if (*first == '\0') + return NULL; + + char *ptr = first + 1; + + while (*ptr && !strchr(delim, *ptr)) + ptr++; + + *saveptr = ptr + (*ptr ? 1 : 0); + *ptr = '\0'; + } while (strlen(first) == 0); + + return first; +} + #endif diff --git a/compat/posix_string.h b/compat/posix_string.h index ebf854d326..23f5026aef 100644 --- a/compat/posix_string.h +++ b/compat/posix_string.h @@ -23,12 +23,17 @@ extern "C" { #endif #undef strcasecmp +#undef strdup +#undef isblank +#undef strtok_r #define strcasecmp(a, b) strcasecmp_rarch__(a, b) #define strdup(orig) strdup_rarch__(orig) #define isblank(c) isblank_rarch__(c) +#define strtok_r(str, delim, saveptr) strtok_r_rarch__(str, delim, saveptr) int strcasecmp(const char *a, const char *b); char *strdup(const char *orig); int isblank(int c); +char *strtok_r(char *str, const char *delim, char **saveptr); #ifdef __cplusplus } diff --git a/conf/config_file.c b/conf/config_file.c index a981f4d398..90eb1d2c0d 100644 --- a/conf/config_file.c +++ b/conf/config_file.c @@ -110,11 +110,13 @@ static char *extract_value(char *line, bool is_value) while (isspace(*line)) line++; + char *save; + // We have a full string. Read until next ". if (*line == '"') { line++; - char *tok = strtok(line, "\""); + char *tok = strtok_r(line, "\"", &save); if (!tok) return NULL; return strdup(tok); @@ -123,7 +125,7 @@ static char *extract_value(char *line, bool is_value) return NULL; else // We don't have that... Read till next space. { - char *tok = strtok(line, " \n\t\f\r\v"); + char *tok = strtok_r(line, " \n\t\f\r\v", &save); if (tok) return strdup(tok); else diff --git a/dynamic.c b/dynamic.c index c0d857b48a..cd48846e72 100644 --- a/dynamic.c +++ b/dynamic.c @@ -16,6 +16,7 @@ #include "dynamic.h" #include "general.h" #include "compat/strl.h" +#include "compat/posix_string.h" #include #ifdef RARCH_CONSOLE @@ -367,8 +368,11 @@ static void set_environment(void) // Assume SNES as defaults. static void set_environment_defaults(void) { + char *save; + // Split up environment variables beforehand. - if (g_extern.system.environment_split && strtok(g_extern.system.environment_split, ";")) - while (strtok(NULL, ";")); + if (g_extern.system.environment_split && + strtok_r(g_extern.system.environment_split, ";", &save)) + while (strtok_r(NULL, ";", &save)); } diff --git a/file_path.c b/file_path.c index 451f906712..2752f3c84f 100644 --- a/file_path.c +++ b/file_path.c @@ -104,6 +104,7 @@ static struct string_list *string_split(const char *str, const char *delim) { char *copy = NULL; const char *tmp = NULL; + struct string_list *list = string_list_new(); if (!list) goto error; @@ -112,7 +113,8 @@ static struct string_list *string_split(const char *str, const char *delim) if (!copy) goto error; - tmp = strtok(copy, delim); + char *save; + tmp = strtok_r(copy, delim, &save); while (tmp) { union string_list_elem_attr attr; @@ -121,7 +123,7 @@ static struct string_list *string_split(const char *str, const char *delim) if (!string_list_append(list, tmp, attr)) goto error; - tmp = strtok(NULL, delim); + tmp = strtok_r(NULL, delim, &save); } free(copy); diff --git a/gfx/py_state/py_state.c b/gfx/py_state/py_state.c index b76e3a7199..15f982d519 100644 --- a/gfx/py_state/py_state.c +++ b/gfx/py_state/py_state.c @@ -208,7 +208,8 @@ static char *align_program(const char *program) if (!new_prog) return NULL; - char *line = dupe_newline(strtok(prog, "\n")); + char *save; + char *line = dupe_newline(strtok_r(prog, "\n", &save)); if (!line) { free(prog); @@ -227,7 +228,7 @@ static char *align_program(const char *program) strlcat(new_prog, line + skip_len, prog_size); free(line); - line = dupe_newline(strtok(NULL, "\n")); + line = dupe_newline(strtok_r(NULL, "\n", &save)); } free(prog); diff --git a/gfx/shader_cg.c b/gfx/shader_cg.c index 73a2a82a03..e41bf117a9 100644 --- a/gfx/shader_cg.c +++ b/gfx/shader_cg.c @@ -500,7 +500,8 @@ static bool load_textures(const char *dir_path, config_file_t *conf) if (!config_get_string(conf, "textures", &textures)) // No textures here ... return true; - const char *id = strtok(textures, ";");; + char *save; + const char *id = strtok_r(textures, ";", &save); while (id && lut_textures_num < MAX_TEXTURES) { char path[PATH_MAX]; @@ -546,7 +547,7 @@ static bool load_textures(const char *dir_path, config_file_t *conf) load_texture_data(&lut_textures[lut_textures_num], &img, smooth); lut_textures_num++; - id = strtok(NULL, ";"); + id = strtok_r(NULL, ";", &save); } end: @@ -573,7 +574,8 @@ static bool load_imports(const char *dir_path, config_file_t *conf) char *script_class = NULL; #endif - const char *id = strtok(imports, ";"); + char *save; + const char *id = strtok_r(imports, ";", &save); while (id && info_cnt < MAX_VARIABLES) { char semantic_buf[64]; @@ -692,7 +694,7 @@ static bool load_imports(const char *dir_path, config_file_t *conf) info_cnt++; free(semantic); - id = strtok(NULL, ";"); + id = strtok_r(NULL, ";", &save); } tracker_info.wram = (uint8_t*)pretro_get_memory_data(RETRO_MEMORY_SYSTEM_RAM); diff --git a/network_cmd.c b/network_cmd.c index 91ef85aabf..0ea6955f07 100644 --- a/network_cmd.c +++ b/network_cmd.c @@ -153,11 +153,12 @@ static void parse_sub_msg(network_cmd_t *handle, const char *tok) static void parse_msg(network_cmd_t *handle, char *buf) { - const char *tok = strtok(buf, "\n"); + char *save; + const char *tok = strtok_r(buf, "\n", &save); while (tok) { parse_sub_msg(handle, tok); - tok = strtok(NULL, "\n"); + tok = strtok_r(NULL, "\n", &save); } } @@ -283,11 +284,12 @@ bool network_cmd_send(const char *cmd_) const char *port_ = NULL; uint16_t port = DEFAULT_NETWORK_CMD_PORT; - cmd = strtok(command, ":"); + char *save; + cmd = strtok_r(command, ":", &save); if (cmd) - host = strtok(NULL, ":"); + host = strtok_r(NULL, ":", &save); if (host) - port_ = strtok(NULL, ":"); + port_ = strtok_r(NULL, ":", &save); if (!host) { From 9c0cab70d6807a92ce2374beab1fbd49551d3b4a Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 08:57:48 +0200 Subject: [PATCH 16/44] (360) Small cleanups --- 360/xdk360_video_resources.h | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/360/xdk360_video_resources.h b/360/xdk360_video_resources.h index bd75bb7140..c882fa369d 100644 --- a/360/xdk360_video_resources.h +++ b/360/xdk360_video_resources.h @@ -79,16 +79,6 @@ class PackedResource return ( D3DTexture* )GetResource( dwOffset ); } - D3DArrayTexture* GetArrayTexture( unsigned long dwOffset ) const - { - return ( D3DArrayTexture* )GetResource( dwOffset ); - } - - D3DVertexBuffer* GetVertexBuffer( unsigned long dwOffset ) const - { - return ( D3DVertexBuffer* )GetResource( dwOffset ); - } - void * GetData( const char * strName ) const; D3DResource* GetResource( const char * strName ) const @@ -101,16 +91,6 @@ class PackedResource return ( D3DTexture* )GetResource( strName ); } - D3DArrayTexture* GetArrayTexture( const char * strName ) const - { - return ( D3DArrayTexture* )GetResource( strName ); - } - - D3DVertexBuffer* GetVertexBuffer( const char * strName ) const - { - return ( D3DVertexBuffer* )GetResource( strName ); - } - PackedResource(); ~PackedResource(); }; From ca52859b7a82814ffbcacd268895f325b5b3832c Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 09:39:12 +0200 Subject: [PATCH 17/44] (360) Cleanup reinterpret_cast party --- 360/fonts.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/360/fonts.cpp b/360/fonts.cpp index b1bb3587d4..11e62f31d9 100644 --- a/360/fonts.cpp +++ b/360/fonts.cpp @@ -217,20 +217,20 @@ static void xdk360_video_font_draw_text(xdk360_video_font_t * font, pVertex[0] = X1; pVertex[1] = Y1; - reinterpret_cast(pVertex)[2] = (tu1<<16)|tv1; // Merged using big endian rules - reinterpret_cast(pVertex)[3] = dwChannelSelector; + ((volatile unsigned long *)pVertex)[2] = (tu1<<16)|tv1; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[3] = dwChannelSelector; pVertex[4] = X2; pVertex[5] = Y2; - reinterpret_cast(pVertex)[6] = (tu2<<16)|tv1; // Merged using big endian rules - reinterpret_cast(pVertex)[7] = dwChannelSelector; + ((volatile unsigned long *)pVertex)[6] = (tu2<<16)|tv1; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[7] = dwChannelSelector; pVertex[8] = X3; pVertex[9] = Y3; - reinterpret_cast(pVertex)[10] = (tu2<<16)|tv2; // Merged using big endian rules - reinterpret_cast(pVertex)[11] = dwChannelSelector; + ((volatile unsigned long *)pVertex)[10] = (tu2<<16)|tv2; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[11] = dwChannelSelector; pVertex[12] = X4; pVertex[13] = Y4; - reinterpret_cast(pVertex)[14] = (tu1<<16)|tv2; // Merged using big endian rules - reinterpret_cast(pVertex)[15] = dwChannelSelector; + ((volatile unsigned long *)pVertex)[14] = (tu1<<16)|tv2; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[15] = dwChannelSelector; pVertex+=16; dwNumChars--; @@ -448,26 +448,26 @@ static HRESULT xdk360_video_font_init(xdk360_video_font_t * font, const char * s font->m_pFontTexture = pFontTexture; // Check version of file (to make sure it matches up with the FontMaker tool) - const unsigned char * pData = static_cast(pFontData); - unsigned long dwFileVersion = reinterpret_cast(pData)->m_dwFileVersion; + const unsigned char * pData = (const unsigned char*)pFontData; + unsigned long dwFileVersion = ((const FontFileHeaderImage_t *)pData)->m_dwFileVersion; if( dwFileVersion == FONTFILEVERSION ) { - font->m_fFontHeight = reinterpret_cast(pData)->m_fFontHeight; - font->m_fFontTopPadding = reinterpret_cast(pData)->m_fFontTopPadding; - font->m_fFontBottomPadding = reinterpret_cast(pData)->m_fFontBottomPadding; - font->m_fFontYAdvance = reinterpret_cast(pData)->m_fFontYAdvance; + font->m_fFontHeight = ((const FontFileHeaderImage_t *)pData)->m_fFontHeight; + font->m_fFontTopPadding = ((const FontFileHeaderImage_t *)pData)->m_fFontTopPadding; + font->m_fFontBottomPadding = ((const FontFileHeaderImage_t *)pData)->m_fFontBottomPadding; + font->m_fFontYAdvance = ((const FontFileHeaderImage_t *)pData)->m_fFontYAdvance; // Point to the translator string which immediately follows the 4 floats - font->m_cMaxGlyph = reinterpret_cast(pData)->m_cMaxGlyph; + font->m_cMaxGlyph = ((const FontFileHeaderImage_t *)pData)->m_cMaxGlyph; - font->m_TranslatorTable = const_cast(reinterpret_cast(pData))->m_TranslatorTable; + font->m_TranslatorTable = const_cast((const FontFileHeaderImage_t *)pData)->m_TranslatorTable; pData += CALCFONTFILEHEADERSIZE( font->m_cMaxGlyph + 1 ); // Read the glyph attributes from the file - font->m_dwNumGlyphs = reinterpret_cast(pData)->m_dwNumGlyphs; - font->m_Glyphs = reinterpret_cast(pData)->m_Glyphs; // Pointer + font->m_dwNumGlyphs = ((const FontFileStrikesImage_t *)pData)->m_dwNumGlyphs; + font->m_Glyphs = ((const FontFileStrikesImage_t *)pData)->m_Glyphs; // Pointer } else { From 1c495f1f94757598613a61fa5d176139adfb9a47 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 11:20:52 +0200 Subject: [PATCH 18/44] (360) Refactor font code --- 360/fonts.cpp | 232 ++--------------------------------- 360/fonts.h | 15 +-- 360/xdk360_video.cpp | 203 +++++++++++++++++++++++++++++- 360/xdk360_video_resources.h | 5 - 4 files changed, 213 insertions(+), 242 deletions(-) diff --git a/360/fonts.cpp b/360/fonts.cpp index 11e62f31d9..6da4713d7d 100644 --- a/360/fonts.cpp +++ b/360/fonts.cpp @@ -20,8 +20,8 @@ #include "fonts.h" #include "../general.h" -static video_console_t video_console; -static xdk360_video_font_t m_Font; +video_console_t video_console; +xdk360_video_font_t m_Font; static PackedResource m_xprResource; @@ -86,218 +86,6 @@ typedef struct { // All elements are defaulted to NULL static Font_Locals_t s_FontLocals; // Global static instance -static void xdk360_video_font_draw_text(xdk360_video_font_t * font, - float fOriginX, float fOriginY, unsigned long dwColor, - const wchar_t * strText, float fMaxPixelWidth ) -{ - if( strText == NULL || strText[0] == L'\0') - return; - - xdk360_video_t *vid = (xdk360_video_t*)driver.video_data; - D3DDevice *pd3dDevice = vid->d3d_render_device; - - // Set the color as a vertex shader constant - float vColor[4]; - vColor[0] = ( ( dwColor & 0x00ff0000 ) >> 16L ) / 255.0F; - vColor[1] = ( ( dwColor & 0x0000ff00 ) >> 8L ) / 255.0F; - vColor[2] = ( ( dwColor & 0x000000ff ) >> 0L ) / 255.0F; - vColor[3] = ( ( dwColor & 0xff000000 ) >> 24L ) / 255.0F; - - // Set up stuff to prepare for drawing text - xdk360_video_font_begin(font); - - // Perform the actual storing of the color constant here to prevent - // a load-hit-store by inserting work between the store and the use of - // the vColor array. - pd3dDevice->SetVertexShaderConstantF( 1, vColor, 1 ); - - // Set the starting screen position - if((fOriginX < 0.0f)) - fOriginX += font->m_rcWindow.x2; - if( fOriginY < 0.0f ) - fOriginY += font->m_rcWindow.y2; - - font->m_fCursorX = floorf( fOriginX ); - font->m_fCursorY = floorf( fOriginY ); - - // Adjust for padding - fOriginY -= font->m_fFontTopPadding; - - // Add window offsets - float Winx = 0.0f; - float Winy = 0.0f; - fOriginX += Winx; - fOriginY += Winy; - font->m_fCursorX += Winx; - font->m_fCursorY += Winy; - - // Begin drawing the vertices - - // Declared as volatile to force writing in ascending - // address order. It prevents out of sequence writing in write combined - // memory. - - volatile float * pVertex; - - unsigned long dwNumChars = wcslen(strText); - HRESULT hr = pd3dDevice->BeginVertices( D3DPT_QUADLIST, 4 * dwNumChars, sizeof( XMFLOAT4 ) , - ( VOID** )&pVertex ); - - // The ring buffer may run out of space when tiling, doing z-prepasses, - // or using BeginCommandBuffer. If so, make the buffer larger. - if( hr < 0 ) - RARCH_ERR( "Ring buffer out of memory.\n" ); - - // Draw four vertices for each glyph - while( *strText ) - { - wchar_t letter; - - // Get the current letter in the string - letter = *strText++; - - // Handle the newline character - if( letter == L'\n' ) - { - font->m_fCursorX = fOriginX; - font->m_fCursorY += font->m_fFontYAdvance * font->m_fYScaleFactor; - continue; - } - - // Translate unprintable characters - const GLYPH_ATTR * pGlyph = &font->m_Glyphs[ ( letter <= font->m_cMaxGlyph ) - ? font->m_TranslatorTable[letter] : 0 ]; - - float fOffset = font->m_fXScaleFactor * (float)pGlyph->wOffset; - float fAdvance = font->m_fXScaleFactor * (float)pGlyph->wAdvance; - float fWidth = font->m_fXScaleFactor * (float)pGlyph->wWidth; - float fHeight = font->m_fYScaleFactor * font->m_fFontHeight; - - // Setup the screen coordinates - font->m_fCursorX += fOffset; - float X4 = font->m_fCursorX; - float X1 = X4; - float X3 = X4 + fWidth; - float X2 = X1 + fWidth; - float Y1 = font->m_fCursorY; - float Y3 = Y1 + fHeight; - float Y2 = Y1; - float Y4 = Y3; - - font->m_fCursorX += fAdvance; - - // Select the RGBA channel that the compressed glyph is stored in - // Takes a 4 bit per pixel ARGB value and expand it to an 8 bit per pixel ARGB value - - unsigned long dwChannelSelector = pGlyph->wMask; // Convert to 32 bit - // Perform the conversion without branching - - // Splat the 4 bit per pixels from 0x1234 to 0x01020304 - dwChannelSelector = ((dwChannelSelector&0xF000)<<(24-12))|((dwChannelSelector&0xF00)<<(16-8))| - ((dwChannelSelector&0xF0)<<(8-4))|(dwChannelSelector&0xF); - - // Perform a vectorized multiply to make 0x01020304 into 0x11223344 - dwChannelSelector *= 0x11; - - // Add the vertices to draw this glyph - - unsigned long tu1 = pGlyph->tu1; // Convert shorts to 32 bit longs for in register merging - unsigned long tv1 = pGlyph->tv1; - unsigned long tu2 = pGlyph->tu2; - unsigned long tv2 = pGlyph->tv2; - - // NOTE: The vertexs are 2 floats for the screen coordinates, - // followed by two USHORTS for the u/vs of the character, - // terminated with the ARGB 32 bit color. - // This makes for 16 bytes per vertex data (Easier to read) - // Second NOTE: The uvs are merged and written using a DWORD due - // to the write combining hardware being only able to handle 32, - // 64 and 128 writes. Never store to write combined memory with - // 8 or 16 bit instructions. You've been warned. - - pVertex[0] = X1; - pVertex[1] = Y1; - ((volatile unsigned long *)pVertex)[2] = (tu1<<16)|tv1; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[3] = dwChannelSelector; - pVertex[4] = X2; - pVertex[5] = Y2; - ((volatile unsigned long *)pVertex)[6] = (tu2<<16)|tv1; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[7] = dwChannelSelector; - pVertex[8] = X3; - pVertex[9] = Y3; - ((volatile unsigned long *)pVertex)[10] = (tu2<<16)|tv2; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[11] = dwChannelSelector; - pVertex[12] = X4; - pVertex[13] = Y4; - ((volatile unsigned long *)pVertex)[14] = (tu1<<16)|tv2; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[15] = dwChannelSelector; - pVertex+=16; - - dwNumChars--; - } - - // Since we allocated vertex data space based on the string length, we now need to - // add some dummy verts for any skipped characters (like newlines, etc.) - while( dwNumChars ) - { - pVertex[0] = 0; - pVertex[1] = 0; - pVertex[2] = 0; - pVertex[3] = 0; - pVertex[4] = 0; - pVertex[5] = 0; - pVertex[6] = 0; - pVertex[7] = 0; - pVertex[8] = 0; - pVertex[9] = 0; - pVertex[10] = 0; - pVertex[11] = 0; - pVertex[12] = 0; - pVertex[13] = 0; - pVertex[14] = 0; - pVertex[15] = 0; - pVertex+=16; - dwNumChars--; - } - - // Stop drawing vertices - D3DDevice_EndVertices(pd3dDevice); - - // Undo window offsets - font->m_fCursorX -= Winx; - font->m_fCursorY -= Winy; - - // Call End() to complete the begin/end pair for drawing text - xdk360_video_font_end(font); -} - -void xdk360_console_draw(void) -{ - xdk360_video_t *vid = (xdk360_video_t*)driver.video_data; - D3DDevice *m_pd3dDevice = vid->d3d_render_device; - - // The top line - unsigned int nTextLine = ( video_console.m_nCurLine - - video_console.m_cScreenHeight + video_console.m_cScreenHeightVirtual - - video_console.m_nScrollOffset + 1 ) - % video_console.m_cScreenHeightVirtual; - - xdk360_video_font_begin(&m_Font); - - for( unsigned int nScreenLine = 0; nScreenLine < video_console.m_cScreenHeight; nScreenLine++ ) - { - xdk360_video_font_draw_text(&m_Font, (float)( video_console.m_cxSafeAreaOffset ), - (float)( video_console.m_cySafeAreaOffset + - video_console.m_fLineHeight * nScreenLine ), - video_console.m_colTextColor, - video_console.m_Lines[nTextLine], 0.0f ); - - nTextLine = ( nTextLine + 1 ) % video_console.m_cScreenHeightVirtual; - } - - xdk360_video_font_end(&m_Font); -} - static void xdk360_video_font_get_text_width(xdk360_video_font_t * font, const wchar_t * strText, float * pWidth, float * pHeight) { // Set default text extent in output parameters @@ -499,13 +287,11 @@ static HRESULT xdk360_video_font_init(xdk360_video_font_t * font, const char * s return 0; } -HRESULT xdk360_console_init( LPCSTR strFontFileName, unsigned long colBackColor, - unsigned long colTextColor) +HRESULT d3d9_init_font(const char *font_path) { xdk360_video_t *vid = (xdk360_video_t*)driver.video_data; D3DDevice *m_pd3dDevice = vid->d3d_render_device; - video_console.first_message = true; video_console.m_Buffer = NULL; video_console.m_Lines = NULL; video_console.m_nScrollOffset = 0; @@ -521,17 +307,13 @@ HRESULT xdk360_console_init( LPCSTR strFontFileName, unsigned long colBackColor, video_console.m_cySafeAreaOffset = ( vid->d3dpp.BackBufferHeight - video_console.m_cySafeArea ) / 2; // Create the font - HRESULT hr = xdk360_video_font_init(&m_Font, strFontFileName ); + HRESULT hr = xdk360_video_font_init(&m_Font, font_path); if (hr < 0) { RARCH_ERR( "Could not create font.\n" ); return -1; } - // Save the colors - video_console.m_colBackColor = colBackColor; - video_console.m_colTextColor = colTextColor; - // Calculate the number of lines on the screen float fCharWidth, fCharHeight; xdk360_video_font_get_text_width(&m_Font, L"i", &fCharWidth, &fCharHeight); @@ -583,7 +365,7 @@ static void xdk360_video_font_deinit(xdk360_video_font_t * font) m_xprResource.Destroy(); } -void xdk360_console_deinit(void) +void d3d9_deinit_font(void) { // Delete the memory we've allocated if(video_console.m_Lines) @@ -670,7 +452,7 @@ void xdk360_console_format(const char * strFormat) } } -void xdk360_video_font_begin (xdk360_video_font_t * font) +void d3d9_render_msg_pre(xdk360_video_font_t * font) { // Set state on the first call if( font->m_dwNestedBeginCount == 0 ) @@ -740,7 +522,7 @@ void xdk360_video_font_begin (xdk360_video_font_t * font) font->m_dwNestedBeginCount++; } -void xdk360_video_font_end(xdk360_video_font_t * font) +void d3d9_render_msg_post(xdk360_video_font_t * font) { if( --font->m_dwNestedBeginCount > 0 ) return; diff --git a/360/fonts.h b/360/fonts.h index a50df0547d..3c974f02df 100644 --- a/360/fonts.h +++ b/360/fonts.h @@ -32,15 +32,12 @@ typedef struct { float m_fLineHeight; // height of a single line in pixels unsigned int m_nScrollOffset; // offset to display text (in lines) - unsigned int first_message; unsigned int m_cxSafeArea; unsigned int m_cySafeArea; unsigned int m_cxSafeAreaOffset; unsigned int m_cySafeAreaOffset; unsigned int m_nCurLine; // index of current line being written to unsigned int m_cCurLineLength; // length of the current line - unsigned long m_colBackColor; - unsigned long m_colTextColor; unsigned int m_cScreenHeight; // height in lines of screen area unsigned int m_cScreenHeightVirtual; // height in lines of text storage buffer unsigned int m_cScreenWidth; // width in characters @@ -100,12 +97,12 @@ typedef struct const GLYPH_ATTR* m_Glyphs; // Array of glyphs } xdk360_video_font_t; -HRESULT xdk360_console_init ( LPCSTR strFontFileName, D3DCOLOR colBackColor, D3DCOLOR colTextColor); -void xdk360_console_deinit (void); -void xdk360_console_format (const char *strFormat); -void xdk360_console_draw (void); +HRESULT d3d9_init_font(const char *font_path); +void d3d9_deinit_font(void); +void xdk360_console_format(const char *strFormat); +void xdk360_console_draw(void); -void xdk360_video_font_begin (xdk360_video_font_t * font); -void xdk360_video_font_end (xdk360_video_font_t * font); +void d3d9_render_msg_pre(xdk360_video_font_t * font); +void d3d9_render_msg_post(xdk360_video_font_t * font); #endif diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp index ff5021258e..5da5486629 100644 --- a/360/xdk360_video.cpp +++ b/360/xdk360_video.cpp @@ -547,6 +547,204 @@ static void *xdk360_init(const video_info_t *video, const input_driver_t **input return d3d9; } +extern video_console_t video_console; +extern xdk360_video_font_t m_Font; + +static void xdk360_video_font_draw_text(xdk360_video_font_t * font, + float fOriginX, float fOriginY, const wchar_t * strText, float fMaxPixelWidth ) +{ + if( strText == NULL || strText[0] == L'\0') + return; + + xdk360_video_t *vid = (xdk360_video_t*)driver.video_data; + D3DDevice *pd3dDevice = vid->d3d_render_device; + + // Set the color as a vertex shader constant + float vColor[4]; + vColor[0] = ( ( 0xffffffff & 0x00ff0000 ) >> 16L ) / 255.0F; + vColor[1] = ( ( 0xffffffff & 0x0000ff00 ) >> 8L ) / 255.0F; + vColor[2] = ( ( 0xffffffff & 0x000000ff ) >> 0L ) / 255.0F; + vColor[3] = ( ( 0xffffffff & 0xff000000 ) >> 24L ) / 255.0F; + + d3d9_render_msg_pre(font); + + // Perform the actual storing of the color constant here to prevent + // a load-hit-store by inserting work between the store and the use of + // the vColor array. + pd3dDevice->SetVertexShaderConstantF( 1, vColor, 1 ); + + // Set the starting screen position + if((fOriginX < 0.0f)) + fOriginX += font->m_rcWindow.x2; + if( fOriginY < 0.0f ) + fOriginY += font->m_rcWindow.y2; + + font->m_fCursorX = floorf( fOriginX ); + font->m_fCursorY = floorf( fOriginY ); + + // Adjust for padding + fOriginY -= font->m_fFontTopPadding; + + // Add window offsets + float Winx = 0.0f; + float Winy = 0.0f; + fOriginX += Winx; + fOriginY += Winy; + font->m_fCursorX += Winx; + font->m_fCursorY += Winy; + + // Begin drawing the vertices + + // Declared as volatile to force writing in ascending + // address order. It prevents out of sequence writing in write combined + // memory. + + volatile float * pVertex; + + unsigned long dwNumChars = wcslen(strText); + HRESULT hr = pd3dDevice->BeginVertices( D3DPT_QUADLIST, 4 * dwNumChars, sizeof( XMFLOAT4 ) , + ( VOID** )&pVertex ); + + // The ring buffer may run out of space when tiling, doing z-prepasses, + // or using BeginCommandBuffer. If so, make the buffer larger. + if( hr < 0 ) + RARCH_ERR( "Ring buffer out of memory.\n" ); + + // Draw four vertices for each glyph + while( *strText ) + { + wchar_t letter; + + // Get the current letter in the string + letter = *strText++; + + // Handle the newline character + if( letter == L'\n' ) + { + font->m_fCursorX = fOriginX; + font->m_fCursorY += font->m_fFontYAdvance * font->m_fYScaleFactor; + continue; + } + + // Translate unprintable characters + const GLYPH_ATTR * pGlyph = &font->m_Glyphs[ ( letter <= font->m_cMaxGlyph ) + ? font->m_TranslatorTable[letter] : 0 ]; + + float fOffset = font->m_fXScaleFactor * (float)pGlyph->wOffset; + float fAdvance = font->m_fXScaleFactor * (float)pGlyph->wAdvance; + float fWidth = font->m_fXScaleFactor * (float)pGlyph->wWidth; + float fHeight = font->m_fYScaleFactor * font->m_fFontHeight; + + // Setup the screen coordinates + font->m_fCursorX += fOffset; + float X4 = font->m_fCursorX; + float X1 = X4; + float X3 = X4 + fWidth; + float X2 = X1 + fWidth; + float Y1 = font->m_fCursorY; + float Y3 = Y1 + fHeight; + float Y2 = Y1; + float Y4 = Y3; + + font->m_fCursorX += fAdvance; + + // Add the vertices to draw this glyph + + unsigned long tu1 = pGlyph->tu1; // Convert shorts to 32 bit longs for in register merging + unsigned long tv1 = pGlyph->tv1; + unsigned long tu2 = pGlyph->tu2; + unsigned long tv2 = pGlyph->tv2; + + // NOTE: The vertexs are 2 floats for the screen coordinates, + // followed by two USHORTS for the u/vs of the character, + // terminated with the ARGB 32 bit color. + // This makes for 16 bytes per vertex data (Easier to read) + // Second NOTE: The uvs are merged and written using a DWORD due + // to the write combining hardware being only able to handle 32, + // 64 and 128 writes. Never store to write combined memory with + // 8 or 16 bit instructions. You've been warned. + + pVertex[0] = X1; + pVertex[1] = Y1; + ((volatile unsigned long *)pVertex)[2] = (tu1<<16)|tv1; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[3] = 0; + pVertex[4] = X2; + pVertex[5] = Y2; + ((volatile unsigned long *)pVertex)[6] = (tu2<<16)|tv1; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[7] = 0; + pVertex[8] = X3; + pVertex[9] = Y3; + ((volatile unsigned long *)pVertex)[10] = (tu2<<16)|tv2; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[11] = 0; + pVertex[12] = X4; + pVertex[13] = Y4; + ((volatile unsigned long *)pVertex)[14] = (tu1<<16)|tv2; // Merged using big endian rules + ((volatile unsigned long *)pVertex)[15] = 0; + pVertex+=16; + + dwNumChars--; + } + + // Since we allocated vertex data space based on the string length, we now need to + // add some dummy verts for any skipped characters (like newlines, etc.) + while( dwNumChars ) + { + pVertex[0] = 0; + pVertex[1] = 0; + pVertex[2] = 0; + pVertex[3] = 0; + pVertex[4] = 0; + pVertex[5] = 0; + pVertex[6] = 0; + pVertex[7] = 0; + pVertex[8] = 0; + pVertex[9] = 0; + pVertex[10] = 0; + pVertex[11] = 0; + pVertex[12] = 0; + pVertex[13] = 0; + pVertex[14] = 0; + pVertex[15] = 0; + pVertex+=16; + dwNumChars--; + } + + // Stop drawing vertices + D3DDevice_EndVertices(pd3dDevice); + + // Undo window offsets + font->m_fCursorX -= Winx; + font->m_fCursorY -= Winy; + + d3d9_render_msg_post(font); +} + +void xdk360_console_draw(void) +{ + xdk360_video_t *vid = (xdk360_video_t*)driver.video_data; + D3DDevice *m_pd3dDevice = vid->d3d_render_device; + + // The top line + unsigned int nTextLine = ( video_console.m_nCurLine - + video_console.m_cScreenHeight + video_console.m_cScreenHeightVirtual - + video_console.m_nScrollOffset + 1 ) + % video_console.m_cScreenHeightVirtual; + + d3d9_render_msg_pre(&m_Font); + + for( unsigned int nScreenLine = 0; nScreenLine < video_console.m_cScreenHeight; nScreenLine++ ) + { + xdk360_video_font_draw_text(&m_Font, (float)( video_console.m_cxSafeAreaOffset ), + (float)( video_console.m_cySafeAreaOffset + + video_console.m_fLineHeight * nScreenLine ), + video_console.m_Lines[nTextLine], 0.0f ); + + nTextLine = ( nTextLine + 1 ) % video_console.m_cScreenHeightVirtual; + } + + d3d9_render_msg_post(&m_Font); +} + static bool xdk360_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { @@ -728,8 +926,7 @@ static void xdk360_start(void) gfx_ctx_set_swap_interval(d3d9->vsync ? 1 : 0, false); /* XBox 360 specific font code */ - HRESULT hr = xdk360_console_init("game:\\media\\Arial_12.xpr", - 0xff000000, 0xffffffff ); + HRESULT hr = d3d9_init_font("game:\\media\\Arial_12.xpr"); if(hr < 0) { @@ -745,7 +942,7 @@ static void xdk360_stop(void) { void *data = driver.video_data; driver.video_data = NULL; - xdk360_console_deinit(); + d3d9_deinit_font(); xdk360_free(data); } diff --git a/360/xdk360_video_resources.h b/360/xdk360_video_resources.h index c882fa369d..d8de8b76d3 100644 --- a/360/xdk360_video_resources.h +++ b/360/xdk360_video_resources.h @@ -59,11 +59,6 @@ class PackedResource HRESULT Create( const char * strFilename ); void Destroy(); - D3DResource* RegisterResource( D3DResource* pResource ) const - { - return pResource; - } - void * GetData( unsigned long dwOffset ) const { return &m_pSysMemData[dwOffset]; From 7b84d5c3d7dc572ee43bf1d67d7bc12e3b84c977 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 11:33:25 +0200 Subject: [PATCH 19/44] (360) Move font files --- 360/xdk360_video.cpp | 29 ++++++--------------- 360/xdk360_video.h | 2 +- console/griffin/griffin.c | 2 +- 360/fonts.cpp => gfx/fonts/xdk360_fonts.cpp | 5 ++-- 360/fonts.h => gfx/fonts/xdk360_fonts.h | 0 5 files changed, 12 insertions(+), 26 deletions(-) rename 360/fonts.cpp => gfx/fonts/xdk360_fonts.cpp (99%) rename 360/fonts.h => gfx/fonts/xdk360_fonts.h (100%) diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp index 5da5486629..9012714432 100644 --- a/360/xdk360_video.cpp +++ b/360/xdk360_video.cpp @@ -667,19 +667,19 @@ static void xdk360_video_font_draw_text(xdk360_video_font_t * font, pVertex[0] = X1; pVertex[1] = Y1; ((volatile unsigned long *)pVertex)[2] = (tu1<<16)|tv1; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[3] = 0; + pVertex[3] = 0; pVertex[4] = X2; pVertex[5] = Y2; ((volatile unsigned long *)pVertex)[6] = (tu2<<16)|tv1; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[7] = 0; + pVertex[7] = 0; pVertex[8] = X3; pVertex[9] = Y3; ((volatile unsigned long *)pVertex)[10] = (tu2<<16)|tv2; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[11] = 0; + pVertex[11] = 0; pVertex[12] = X4; pVertex[13] = Y4; ((volatile unsigned long *)pVertex)[14] = (tu1<<16)|tv2; // Merged using big endian rules - ((volatile unsigned long *)pVertex)[15] = 0; + pVertex[15] = 0; pVertex+=16; dwNumChars--; @@ -689,23 +689,10 @@ static void xdk360_video_font_draw_text(xdk360_video_font_t * font, // add some dummy verts for any skipped characters (like newlines, etc.) while( dwNumChars ) { - pVertex[0] = 0; - pVertex[1] = 0; - pVertex[2] = 0; - pVertex[3] = 0; - pVertex[4] = 0; - pVertex[5] = 0; - pVertex[6] = 0; - pVertex[7] = 0; - pVertex[8] = 0; - pVertex[9] = 0; - pVertex[10] = 0; - pVertex[11] = 0; - pVertex[12] = 0; - pVertex[13] = 0; - pVertex[14] = 0; - pVertex[15] = 0; - pVertex+=16; + for(int i = 0; i < 16; i++) + pVertex[i] = 0; + + pVertex += 16; dwNumChars--; } diff --git a/360/xdk360_video.h b/360/xdk360_video.h index 508e3ab832..504a459b1e 100644 --- a/360/xdk360_video.h +++ b/360/xdk360_video.h @@ -18,7 +18,7 @@ #define _XDK360_VIDEO_H #include -#include "fonts.h" +#include "../gfx/fonts/xdk360_fonts.h" #define DFONT_MAX 4096 #define PRIM_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1) diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index 3b6c85d048..389e82ed97 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -101,7 +101,7 @@ FONTS #if defined(__CELLOS_LV2__) #include "../../gfx/fonts/ps3_libdbgfont.c" #elif defined(_XBOX) -#include "../../360/fonts.cpp" +#include "../../gfx/fonts/xdk360_fonts.cpp" #elif defined(GEKKO) #include "../../gfx/fonts/fonts.c" #endif diff --git a/360/fonts.cpp b/gfx/fonts/xdk360_fonts.cpp similarity index 99% rename from 360/fonts.cpp rename to gfx/fonts/xdk360_fonts.cpp index 6da4713d7d..636243a427 100644 --- a/360/fonts.cpp +++ b/gfx/fonts/xdk360_fonts.cpp @@ -16,9 +16,8 @@ #define NONET #include -#include "xdk360_video.h" -#include "fonts.h" -#include "../general.h" +#include "xdk360_fonts.h" +#include "../../general.h" video_console_t video_console; xdk360_video_font_t m_Font; diff --git a/360/fonts.h b/gfx/fonts/xdk360_fonts.h similarity index 100% rename from 360/fonts.h rename to gfx/fonts/xdk360_fonts.h From 33340aa8707d64b17b46cc0782c1227ca90ac04b Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 11:41:12 +0200 Subject: [PATCH 20/44] (360) font code cleanup --- gfx/fonts/xdk360_fonts.cpp | 55 +++++++++++++++----------------------- 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/gfx/fonts/xdk360_fonts.cpp b/gfx/fonts/xdk360_fonts.cpp index 636243a427..b8711c99fc 100644 --- a/gfx/fonts/xdk360_fonts.cpp +++ b/gfx/fonts/xdk360_fonts.cpp @@ -37,9 +37,6 @@ typedef struct { wchar_t m_TranslatorTable[1]; // ASCII to Glyph lookup table, NOTE: It's m_cMaxGlyph+1 in size. } FontFileHeaderImage_t; -// Font strike array. Immediately follows the FontFileHeaderImage_t -// structure image - typedef struct { unsigned long m_dwNumGlyphs; // Size of font strike array (First entry is the unknown glyph) GLYPH_ATTR m_Glyphs[1]; // Array of font strike uv's etc... NOTE: It's m_dwNumGlyphs in size @@ -77,17 +74,15 @@ static const char g_strFontShader[] = "}\n"; typedef struct { - D3DVertexDeclaration* m_pFontVertexDecl; // Shared vertex buffer - D3DVertexShader* m_pFontVertexShader; // Created vertex shader - D3DPixelShader* m_pFontPixelShader; // Created pixel shader + D3DVertexDeclaration* m_pFontVertexDecl; + D3DVertexShader* m_pFontVertexShader; + D3DPixelShader* m_pFontPixelShader; } Font_Locals_t; -// All elements are defaulted to NULL -static Font_Locals_t s_FontLocals; // Global static instance +static Font_Locals_t s_FontLocals; static void xdk360_video_font_get_text_width(xdk360_video_font_t * font, const wchar_t * strText, float * pWidth, float * pHeight) { - // Set default text extent in output parameters int iWidth = 0; float fHeight = 0.0f; @@ -340,32 +335,10 @@ HRESULT d3d9_init_font(const char *font_path) return hr; } -static void xdk360_video_font_deinit(xdk360_video_font_t * font) -{ - font->m_pFontTexture = NULL; - font->m_dwNumGlyphs = 0L; - font->m_Glyphs = NULL; - font->m_cMaxGlyph = 0; - font->m_TranslatorTable = NULL; - font->m_dwNestedBeginCount = 0L; - - // Safely release shaders - // NOTE: They are released in reverse order of creation - // to make sure any interdependencies are dealt with - - if( ( s_FontLocals.m_pFontPixelShader != NULL ) && ( s_FontLocals.m_pFontPixelShader->Release() == 0 ) ) - s_FontLocals.m_pFontPixelShader = NULL; - if( ( s_FontLocals.m_pFontVertexShader != NULL ) && ( s_FontLocals.m_pFontVertexShader->Release() == 0 ) ) - s_FontLocals.m_pFontVertexShader = NULL; - if( ( s_FontLocals.m_pFontVertexDecl != NULL ) && ( s_FontLocals.m_pFontVertexDecl->Release() == 0 ) ) - s_FontLocals.m_pFontVertexDecl = NULL; - - if( m_xprResource.m_bInitialized) - m_xprResource.Destroy(); -} - void d3d9_deinit_font(void) { + xdk360_video_font_t *font = &m_Font; + // Delete the memory we've allocated if(video_console.m_Lines) { @@ -380,7 +353,21 @@ void d3d9_deinit_font(void) } // Destroy the font - xdk360_video_font_deinit(&m_Font); + font->m_pFontTexture = NULL; + font->m_dwNumGlyphs = 0L; + font->m_Glyphs = NULL; + font->m_cMaxGlyph = 0; + font->m_TranslatorTable = NULL; + font->m_dwNestedBeginCount = 0L; + + if( ( s_FontLocals.m_pFontPixelShader != NULL ) && ( s_FontLocals.m_pFontPixelShader->Release() == 0 ) ) + s_FontLocals.m_pFontPixelShader = NULL; + if( ( s_FontLocals.m_pFontVertexShader != NULL ) && ( s_FontLocals.m_pFontVertexShader->Release() == 0 ) ) + s_FontLocals.m_pFontVertexShader = NULL; + if( ( s_FontLocals.m_pFontVertexDecl != NULL ) && ( s_FontLocals.m_pFontVertexDecl->Release() == 0 ) ) + s_FontLocals.m_pFontVertexDecl = NULL; + if( m_xprResource.m_bInitialized) + m_xprResource.Destroy(); } static void xdk360_console_add( wchar_t wch ) From 82b18e7cadef17f6d5db499fd52c15423a879acb Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 12:03:46 +0200 Subject: [PATCH 21/44] (360) cleanup font code (again) --- 360/xdk360_video.cpp | 3 +- gfx/fonts/xdk360_fonts.cpp | 94 ++++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 52 deletions(-) diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp index 9012714432..dda3d63efa 100644 --- a/360/xdk360_video.cpp +++ b/360/xdk360_video.cpp @@ -722,8 +722,7 @@ void xdk360_console_draw(void) for( unsigned int nScreenLine = 0; nScreenLine < video_console.m_cScreenHeight; nScreenLine++ ) { xdk360_video_font_draw_text(&m_Font, (float)( video_console.m_cxSafeAreaOffset ), - (float)( video_console.m_cySafeAreaOffset + - video_console.m_fLineHeight * nScreenLine ), + (float)( video_console.m_cySafeAreaOffset + video_console.m_fLineHeight * nScreenLine ), video_console.m_Lines[nTextLine], 0.0f ); nTextLine = ( nTextLine + 1 ) % video_console.m_cScreenHeightVirtual; diff --git a/gfx/fonts/xdk360_fonts.cpp b/gfx/fonts/xdk360_fonts.cpp index b8711c99fc..e5651f6a5f 100644 --- a/gfx/fonts/xdk360_fonts.cpp +++ b/gfx/fonts/xdk360_fonts.cpp @@ -370,55 +370,6 @@ void d3d9_deinit_font(void) m_xprResource.Destroy(); } -static void xdk360_console_add( wchar_t wch ) -{ - // If this is a newline, just increment lines and move on - if( wch == L'\n' ) - { - video_console.m_nCurLine = ( video_console.m_nCurLine + 1 ) - % video_console.m_cScreenHeightVirtual; - video_console.m_cCurLineLength = 0; - memset(video_console.m_Lines[video_console.m_nCurLine], 0, - ( video_console.m_cScreenWidth + 1 ) * sizeof( wchar_t ) ); - return; - } - - int bIncrementLine = FALSE; // Whether to wrap to the next line - - if( video_console.m_cCurLineLength == video_console.m_cScreenWidth ) - bIncrementLine = TRUE; - else - { - // Try to append the character to the line - video_console.m_Lines[ video_console.m_nCurLine ][ video_console.m_cCurLineLength ] = wch; - - float fTextWidth, fTextHeight; - - xdk360_video_font_get_text_width(&m_Font, video_console.m_Lines[ video_console.m_nCurLine ], &fTextWidth, - &fTextHeight); - - if( fTextHeight > video_console.m_cxSafeArea ) - { - // The line is too long, we need to wrap the character to the next line - video_console.m_Lines[video_console.m_nCurLine][ video_console.m_cCurLineLength ] = L'\0'; - bIncrementLine = TRUE; - } - } - - // If we need to skip to the next line, do so - if( bIncrementLine ) - { - video_console.m_nCurLine = ( video_console.m_nCurLine + 1 ) - % video_console.m_cScreenHeightVirtual; - video_console.m_cCurLineLength = 0; - memset( video_console.m_Lines[video_console.m_nCurLine], - 0, ( video_console.m_cScreenWidth + 1 ) * sizeof( wchar_t ) ); - video_console.m_Lines[video_console.m_nCurLine ][0] = wch; - } - - video_console.m_cCurLineLength++; -} - void xdk360_console_format(const char * strFormat) { video_console.m_nCurLine = 0; @@ -434,7 +385,50 @@ void xdk360_console_format(const char * strFormat) { wchar_t wch; rarch_convert_char_to_wchar(&wch, &strFormat[i], sizeof(wch)); - xdk360_console_add( wch ); + + // If this is a newline, just increment lines and move on + if( wch == L'\n' ) + { + video_console.m_nCurLine = ( video_console.m_nCurLine + 1 ) + % video_console.m_cScreenHeightVirtual; + video_console.m_cCurLineLength = 0; + memset(video_console.m_Lines[video_console.m_nCurLine], 0, + ( video_console.m_cScreenWidth + 1 ) * sizeof( wchar_t ) ); + continue; + } + + int bIncrementLine = FALSE; // Whether to wrap to the next line + + if( video_console.m_cCurLineLength == video_console.m_cScreenWidth ) + bIncrementLine = TRUE; + else + { + float fTextWidth, fTextHeight; + // Try to append the character to the line + video_console.m_Lines[ video_console.m_nCurLine ][ video_console.m_cCurLineLength ] = wch; + xdk360_video_font_get_text_width(&m_Font, video_console.m_Lines[ video_console.m_nCurLine ], &fTextWidth, + &fTextHeight); + + if( fTextHeight > video_console.m_cxSafeArea ) + { + // The line is too long, we need to wrap the character to the next line + video_console.m_Lines[video_console.m_nCurLine][ video_console.m_cCurLineLength ] = L'\0'; + bIncrementLine = TRUE; + } + } + + // If we need to skip to the next line, do so + if( bIncrementLine ) + { + video_console.m_nCurLine = ( video_console.m_nCurLine + 1 ) + % video_console.m_cScreenHeightVirtual; + video_console.m_cCurLineLength = 0; + memset( video_console.m_Lines[video_console.m_nCurLine], 0, + ( video_console.m_cScreenWidth + 1 ) * sizeof( wchar_t ) ); + video_console.m_Lines[video_console.m_nCurLine ][0] = wch; + } + + video_console.m_cCurLineLength++; } } From a62893610eea17054ec278ea8fa7c5c73ddd6022 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sun, 24 Jun 2012 13:11:10 +0200 Subject: [PATCH 22/44] (PS3) don't use Griffin override for audio_flush anymore, but do keep optimizations when we aren't using DSP audio plugins --- console/griffin/rarch_func_hooks.h | 58 ------------------------------ retroarch.c | 19 +++++----- 2 files changed, 9 insertions(+), 68 deletions(-) delete mode 100644 console/griffin/rarch_func_hooks.h diff --git a/console/griffin/rarch_func_hooks.h b/console/griffin/rarch_func_hooks.h deleted file mode 100644 index dbae9dc3cd..0000000000 --- a/console/griffin/rarch_func_hooks.h +++ /dev/null @@ -1,58 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2012 - Hans-Kristian Arntzen - * Copyright (C) 2011-2012 - 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 . - */ - -#ifndef _RARCH_FUNC_HOOKS_H -#define _RARCH_FUNC_HOOKS_H - -/*============================================================ - PLAYSTATION3 -============================================================ */ - -#ifdef __CELLOS_LV2__ - -#define HAVE_GRIFFIN_OVERRIDE_AUDIO_FLUSH_FUNC 1 - -static bool audio_flush(const int16_t *data, size_t samples) -{ - const float *output_data = NULL; - unsigned output_frames = 0; - - audio_convert_s16_to_float(g_extern.audio_data.data, data, samples); - - struct resampler_data src_data = {0}; - src_data.data_in = g_extern.audio_data.data; - src_data.data_out = g_extern.audio_data.outsamples; - src_data.input_frames = (samples / 2); - - src_data.ratio = g_extern.audio_data.src_ratio; - if (g_extern.is_slowmotion) - src_data.ratio *= g_settings.slowmotion_ratio; - - resampler_process(g_extern.audio_data.source, &src_data); - - output_data = g_extern.audio_data.outsamples; - output_frames = src_data.output_frames; - - if (audio_write_func(output_data, output_frames * sizeof(float) * 2) < 0) - return false; - - return true; -} - -#endif - - -#endif diff --git a/retroarch.c b/retroarch.c index 7bab2ddaa0..47e92276b2 100644 --- a/retroarch.c +++ b/retroarch.c @@ -250,10 +250,6 @@ static void video_frame(const void *data, unsigned width, unsigned height, size_ g_extern.frame_cache.pitch = pitch; } -#ifdef HAVE_GRIFFIN -#include "console/griffin/rarch_func_hooks.h" -#endif - void rarch_render_cached_frame(void) { #ifdef HAVE_FFMPEG @@ -275,7 +271,6 @@ void rarch_render_cached_frame(void) #endif } -#ifndef HAVE_GRIFFIN_OVERRIDE_AUDIO_FLUSH_FUNC static bool audio_flush(const int16_t *data, size_t samples) { #ifdef HAVE_FFMPEG @@ -298,24 +293,29 @@ static bool audio_flush(const int16_t *data, size_t samples) audio_convert_s16_to_float(g_extern.audio_data.data, data, samples); +#ifdef HAVE_DYLIB rarch_dsp_output_t dsp_output = {0}; dsp_output.should_resample = RARCH_TRUE; -#ifdef HAVE_DYLIB rarch_dsp_input_t dsp_input = {0}; dsp_input.samples = g_extern.audio_data.data; dsp_input.frames = samples / 2; if (g_extern.audio_data.dsp_plugin) g_extern.audio_data.dsp_plugin->process(g_extern.audio_data.dsp_handle, &dsp_output, &dsp_input); -#endif if (dsp_output.should_resample) { +#endif struct resampler_data src_data = {0}; +#ifdef HAVE_DYLIB src_data.data_in = dsp_output.samples ? dsp_output.samples : g_extern.audio_data.data; - src_data.data_out = g_extern.audio_data.outsamples; src_data.input_frames = dsp_output.samples ? dsp_output.frames : (samples / 2); +#else + src_data.data_in = g_extern.audio_data.data; + src_data.input_frames = (samples / 2); +#endif + src_data.data_out = g_extern.audio_data.outsamples; if (g_extern.audio_data.rate_control) readjust_audio_input_rate(); @@ -328,8 +328,8 @@ static bool audio_flush(const int16_t *data, size_t samples) output_data = g_extern.audio_data.outsamples; output_frames = src_data.output_frames; - } #ifdef HAVE_DYLIB + } else { output_data = dsp_output.samples; @@ -370,7 +370,6 @@ static bool audio_flush(const int16_t *data, size_t samples) return true; } -#endif static void audio_sample_rewind(int16_t left, int16_t right) { From 3e4f09d66dff32d3b6c9eaa969ccc9582f6d3522 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sun, 24 Jun 2012 13:20:55 +0200 Subject: [PATCH 23/44] (Wii) Move RGUI code over to wii/frontend --- {console/rgui => wii/frontend}/list.c | 0 {console/rgui => wii/frontend}/list.h | 0 wii/frontend/main.c | 2 +- {console/rgui => wii/frontend}/rgui.c | 0 {console/rgui => wii/frontend}/rgui.h | 0 5 files changed, 1 insertion(+), 1 deletion(-) rename {console/rgui => wii/frontend}/list.c (100%) rename {console/rgui => wii/frontend}/list.h (100%) rename {console/rgui => wii/frontend}/rgui.c (100%) rename {console/rgui => wii/frontend}/rgui.h (100%) diff --git a/console/rgui/list.c b/wii/frontend/list.c similarity index 100% rename from console/rgui/list.c rename to wii/frontend/list.c diff --git a/console/rgui/list.h b/wii/frontend/list.h similarity index 100% rename from console/rgui/list.h rename to wii/frontend/list.h diff --git a/wii/frontend/main.c b/wii/frontend/main.c index f8828a91eb..83ed113f03 100644 --- a/wii/frontend/main.c +++ b/wii/frontend/main.c @@ -16,7 +16,7 @@ #undef main #include -#include "../../console/rgui/rgui.h" +#include "rgui.h" #include "../../driver.h" #include "../../general.h" #include "../../libretro.h" diff --git a/console/rgui/rgui.c b/wii/frontend/rgui.c similarity index 100% rename from console/rgui/rgui.c rename to wii/frontend/rgui.c diff --git a/console/rgui/rgui.h b/wii/frontend/rgui.h similarity index 100% rename from console/rgui/rgui.h rename to wii/frontend/rgui.h From 08e50935caf0d5b86d206d95d4e81bdb7e191983 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sun, 24 Jun 2012 13:23:57 +0200 Subject: [PATCH 24/44] (PS3) Remove some frontend/shared.h includes --- ps3/ps3_audio.c | 1 - ps3/ps3_input.c | 1 - 2 files changed, 2 deletions(-) diff --git a/ps3/ps3_audio.c b/ps3/ps3_audio.c index fd4c08030a..4784d877e8 100644 --- a/ps3/ps3_audio.c +++ b/ps3/ps3_audio.c @@ -16,7 +16,6 @@ #include "../driver.h" #include "../general.h" -#include "frontend/shared.h" #include #include #include diff --git a/ps3/ps3_input.c b/ps3/ps3_input.c index 64c1de5aa4..43634454b2 100644 --- a/ps3/ps3_input.c +++ b/ps3/ps3_input.c @@ -33,7 +33,6 @@ #include "../console/console_ext.h" #include "../libretro.h" #include "../general.h" -#include "frontend/shared.h" /*============================================================ PS3 MOUSE From 15032d065f227ff09e953e3454f9e0c977216de3 Mon Sep 17 00:00:00 2001 From: Squarepusher Date: Sun, 24 Jun 2012 14:38:06 +0300 Subject: [PATCH 25/44] Update master --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9149ed35f1..72932cf07e 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,9 @@ RetroArch PS3 needs to be compiled in the following order: make -f Makefile.ps3 -Finally, you can add one of the following parameters to the above line in order to make a PKG file: +PlayStation3 - Creating a PKG installable file
+ +You can add 'pkg' as a parameter in order to make a PKG file - for example: make -f Makefile.ps3 pkg From 3cd656313b7dc2d2eb475f5f177c7a454bd44871 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sun, 24 Jun 2012 17:55:31 +0200 Subject: [PATCH 26/44] (PS3) Filebrowser - directories are colored green --- console/fileio/file_browser.c | 4 ---- ps3/frontend/menu.c | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/console/fileio/file_browser.c b/console/fileio/file_browser.c index cf04ccac28..def92827b3 100644 --- a/console/fileio/file_browser.c +++ b/console/fileio/file_browser.c @@ -42,10 +42,6 @@ void filebrowser_set_root(filebrowser_t *filebrowser, const char *root_dir) strlcpy(filebrowser->root_dir, root_dir, sizeof(filebrowser->root_dir)); } -void filebrowser_set_current_path(filebrowser_t *filebrowser, const char *path) -{ -} - void filebrowser_free(filebrowser_t * filebrowser) { dir_list_free(filebrowser->current_dir.list); diff --git a/ps3/frontend/menu.c b/ps3/frontend/menu.c index f54bff2a15..13f6cfad81 100644 --- a/ps3/frontend/menu.c +++ b/ps3/frontend/menu.c @@ -319,7 +319,7 @@ static void browser_render(filebrowser_t * b) char fname_tmp[256]; fill_pathname_base(fname_tmp, b->current_dir.list->elems[i].data, sizeof(fname_tmp)); currentY = currentY + ySpacing; - cellDbgFontPuts(currentX, currentY, FONT_SIZE, i == current_index ? RED : WHITE, fname_tmp); + cellDbgFontPuts(currentX, currentY, FONT_SIZE, i == current_index ? RED : b->current_dir.list->elems[i].attr.b ? GREEN : WHITE, fname_tmp); gl_render_msg_post(gl); } gl_render_msg_post(gl); From abca1fca6080810e2ebc916261a0e4d6f121e159 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 21:09:52 +0200 Subject: [PATCH 27/44] (Xbox 1) Add initial Xbox 1 solution + cover stdint.h missing in pre-MSVC 2010 --- driver.h | 2 +- file.h | 2 +- libretro.h | 2 +- movie.h | 2 +- msvc/RetroArch-Xbox1.sln | 30 +++ msvc/RetroArch-Xbox1/RetroArch-Xbox1.vcproj | 238 ++++++++++++++++++ ps3/frontend/main.c | 4 +- rarch_stdint.h | 265 ++++++++++++++++++++ record/ffemu.h | 2 +- 9 files changed, 540 insertions(+), 7 deletions(-) create mode 100644 msvc/RetroArch-Xbox1.sln create mode 100644 msvc/RetroArch-Xbox1/RetroArch-Xbox1.vcproj create mode 100644 rarch_stdint.h diff --git a/driver.h b/driver.h index 5908e71fbf..19a8a08ad9 100644 --- a/driver.h +++ b/driver.h @@ -20,7 +20,7 @@ #include #include "boolean.h" #include -#include +#include "rarch_stdint.h" #include "msvc/msvc_compat.h" #include "input/keysym.h" diff --git a/file.h b/file.h index 467f5b75a8..a8a7bb937c 100644 --- a/file.h +++ b/file.h @@ -19,7 +19,7 @@ #include "boolean.h" #include -#include +#include "rarch_stdint.h" #include #include #include "general.h" diff --git a/libretro.h b/libretro.h index 8aa579e863..17c2fcc849 100755 --- a/libretro.h +++ b/libretro.h @@ -1,7 +1,7 @@ #ifndef LIBRETRO_H__ #define LIBRETRO_H__ -#include +#include "rarch_stdint.h" #include #ifdef __cplusplus diff --git a/movie.h b/movie.h index c8665ba85d..22d7d25370 100644 --- a/movie.h +++ b/movie.h @@ -16,7 +16,7 @@ #ifndef __RARCH_MOVIE_H #define __RARCH_MOVIE_H -#include +#include "rarch_stdint.h" #include #include "boolean.h" diff --git a/msvc/RetroArch-Xbox1.sln b/msvc/RetroArch-Xbox1.sln new file mode 100644 index 0000000000..311366cab1 --- /dev/null +++ b/msvc/RetroArch-Xbox1.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RetroArch-Xbox1", "RetroArch-Xbox1/RetroArch-Xbox1.vcproj", "{D45CEB37-21F1-486B-92F0-569B10953978}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Profile = Profile + Profile_FastCap = Profile_FastCap + Release = Release + Release_LTCG = Release_LTCG + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D45CEB37-21F1-486B-92F0-569B10953978}.Debug.ActiveCfg = Debug|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Debug.Build.0 = Debug|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Profile.ActiveCfg = Profile|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Profile.Build.0 = Profile|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Profile_FastCap.ActiveCfg = Profile_FastCap|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Profile_FastCap.Build.0 = Profile_FastCap|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Release.ActiveCfg = Release|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Release.Build.0 = Release|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Release_LTCG.ActiveCfg = Release_LTCG|Win32 + {D45CEB37-21F1-486B-92F0-569B10953978}.Release_LTCG.Build.0 = Release_LTCG|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/msvc/RetroArch-Xbox1/RetroArch-Xbox1.vcproj b/msvc/RetroArch-Xbox1/RetroArch-Xbox1.vcproj new file mode 100644 index 0000000000..1521d6e3da --- /dev/null +++ b/msvc/RetroArch-Xbox1/RetroArch-Xbox1.vcproj @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ps3/frontend/main.c b/ps3/frontend/main.c index b4ca3992fa..38c6f4b785 100644 --- a/ps3/frontend/main.c +++ b/ps3/frontend/main.c @@ -14,8 +14,8 @@ * If not, see . */ -#include -#include +#include "../../rarch_stdint.h" +#include "../../boolean.h" #include #include diff --git a/rarch_stdint.h b/rarch_stdint.h new file mode 100644 index 0000000000..595d94990e --- /dev/null +++ b/rarch_stdint.h @@ -0,0 +1,265 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2012 - Hans-Kristian Arntzen + * Copyright (C) 2011-2012 - 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 . + */ + +// ISO C9x compliant stdint.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006-2008 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// +#ifndef __RARCH_STDINT_H +#define __RARCH_STDINT_H + +#if _MSC_VER && (_MSC_VER < 1600) +//pre-MSVC 2010 needs an implementation of stdint.h + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include + +// For Visual Studio 6 in C++ mode and for many Visual Studio versions when +// compiling for ARM we should wrap include with 'extern "C++" {}' +// or compiler give many errors like this: +// error C2733: second C linkage of overloaded function 'wmemchr' not allowed +#ifdef __cplusplus +extern "C" { +#endif +# include +#ifdef __cplusplus +} +#endif + +// Define _W64 macros to mark types changing their size, like intptr_t. +#ifndef _W64 +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif + + +// 7.18.1 Integer types + +// 7.18.1.1 Exact-width integer types + +// Visual Studio 6 and Embedded Visual C++ 4 doesn't +// realize that, e.g. char has the same size as __int8 +// so we give up on __intX for them. +#if (_MSC_VER < 1300) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; +#else + typedef signed __int8 int8_t; + typedef signed __int16 int16_t; + typedef signed __int32 int32_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; +#endif +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; + + +// 7.18.1.2 Minimum-width integer types +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +// 7.18.1.3 Fastest minimum-width integer types +typedef int8_t int_fast8_t; +typedef int16_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef int64_t int_fast64_t; +typedef uint8_t uint_fast8_t; +typedef uint16_t uint_fast16_t; +typedef uint32_t uint_fast32_t; +typedef uint64_t uint_fast64_t; + +// 7.18.1.4 Integer types capable of holding object pointers +#ifdef _WIN64 // [ + typedef signed __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +#else // _WIN64 ][ + typedef _W64 signed int intptr_t; + typedef _W64 unsigned int uintptr_t; +#endif // _WIN64 ] + +// 7.18.1.5 Greatest-width integer types +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +// 7.18.2 Limits of specified-width integer types + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 + +// 7.18.2.1 Limits of exact-width integer types +#define INT8_MIN ((int8_t)_I8_MIN) +#define INT8_MAX _I8_MAX +#define INT16_MIN ((int16_t)_I16_MIN) +#define INT16_MAX _I16_MAX +#define INT32_MIN ((int32_t)_I32_MIN) +#define INT32_MAX _I32_MAX +#define INT64_MIN ((int64_t)_I64_MIN) +#define INT64_MAX _I64_MAX +#define UINT8_MAX _UI8_MAX +#define UINT16_MAX _UI16_MAX +#define UINT32_MAX _UI32_MAX +#define UINT64_MAX _UI64_MAX + +// 7.18.2.2 Limits of minimum-width integer types +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MIN INT64_MIN +#define INT_LEAST64_MAX INT64_MAX +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +// 7.18.2.3 Limits of fastest minimum-width integer types +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MIN INT64_MIN +#define INT_FAST64_MAX INT64_MAX +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +// 7.18.2.4 Limits of integer types capable of holding object pointers +#ifdef _WIN64 // [ +# define INTPTR_MIN INT64_MIN +# define INTPTR_MAX INT64_MAX +# define UINTPTR_MAX UINT64_MAX +#else // _WIN64 ][ +# define INTPTR_MIN INT32_MIN +# define INTPTR_MAX INT32_MAX +# define UINTPTR_MAX UINT32_MAX +#endif // _WIN64 ] + +// 7.18.2.5 Limits of greatest-width integer types +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +// 7.18.3 Limits of other integer types + +#ifdef _WIN64 // [ +# define PTRDIFF_MIN _I64_MIN +# define PTRDIFF_MAX _I64_MAX +#else // _WIN64 ][ +# define PTRDIFF_MIN _I32_MIN +# define PTRDIFF_MAX _I32_MAX +#endif // _WIN64 ] + +#define SIG_ATOMIC_MIN INT_MIN +#define SIG_ATOMIC_MAX INT_MAX + +#ifndef SIZE_MAX // [ +# ifdef _WIN64 // [ +# define SIZE_MAX _UI64_MAX +# else // _WIN64 ][ +# define SIZE_MAX _UI32_MAX +# endif // _WIN64 ] +#endif // SIZE_MAX ] + +// WCHAR_MIN and WCHAR_MAX are also defined in +#ifndef WCHAR_MIN // [ +# define WCHAR_MIN 0 +#endif // WCHAR_MIN ] +#ifndef WCHAR_MAX // [ +# define WCHAR_MAX _UI16_MAX +#endif // WCHAR_MAX ] + +#define WINT_MIN 0 +#define WINT_MAX _UI16_MAX + +#endif // __STDC_LIMIT_MACROS ] + + +// 7.18.4 Limits of other integer types + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 + +// 7.18.4.1 Macros for minimum-width integer constants + +#define INT8_C(val) val##i8 +#define INT16_C(val) val##i16 +#define INT32_C(val) val##i32 +#define INT64_C(val) val##i64 + +#define UINT8_C(val) val##ui8 +#define UINT16_C(val) val##ui16 +#define UINT32_C(val) val##ui32 +#define UINT64_C(val) val##ui64 + +// 7.18.4.2 Macros for greatest-width integer constants +#define INTMAX_C INT64_C +#define UINTMAX_C UINT64_C + +#endif // __STDC_CONSTANT_MACROS ] + +#else +//sanity for everything else +#include +#endif + +#endif diff --git a/record/ffemu.h b/record/ffemu.h index b9956b7a1b..549ed55268 100644 --- a/record/ffemu.h +++ b/record/ffemu.h @@ -16,7 +16,7 @@ #ifndef __FFEMU_H #define __FFEMU_H -#include +#include "../rarch_stdint.h" #include #ifdef __cplusplus From f201819ce052efb53c83b8d561437f5d49adfa97 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 21:13:56 +0200 Subject: [PATCH 28/44] (360) Introduce new 360 define - _XBOX360 - for differentating between Xbox 1 and 360 --- .../RetroArch-Salamander.vcxproj | 14 +++++++------- msvc/RetroArch-360/RetroArch-360.vcxproj | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj b/msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj index ca9107eccf..f47c32f31d 100644 --- a/msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj +++ b/msvc/RetroArch-360-Salamander/RetroArch-Salamander.vcxproj @@ -113,7 +113,7 @@ true false MultiThreadedDebug - _DEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1 + _DEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1;_XBOX360 Callcap
@@ -136,7 +136,7 @@ AnalyzeOnly false MultiThreadedDebug - _DEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1 + _DEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1;_XBOX360 Callcap @@ -160,7 +160,7 @@ Size false MultiThreaded - NDEBUG;_XBOX;PROFILE;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1 + NDEBUG;_XBOX;PROFILE;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1;_XBOX360 Callcap @@ -189,7 +189,7 @@ Size false MultiThreaded - NDEBUG;_XBOX;PROFILE;FASTCAP;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1 + NDEBUG;_XBOX;PROFILE;FASTCAP;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1;_XBOX360 true @@ -215,7 +215,7 @@ false false MultiThreaded - NDEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1 + NDEBUG;_XBOX;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1;_XBOX360 true @@ -241,7 +241,7 @@ false false MultiThreaded - NDEBUG;_XBOX;LTCG;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1 + NDEBUG;_XBOX;LTCG;%(PreprocessorDefinitions);HAVE_CONFIGFILE;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE=1;_XBOX360 true @@ -278,4 +278,4 @@ - + \ No newline at end of file diff --git a/msvc/RetroArch-360/RetroArch-360.vcxproj b/msvc/RetroArch-360/RetroArch-360.vcxproj index 2cdba5f743..d1ef4fad06 100644 --- a/msvc/RetroArch-360/RetroArch-360.vcxproj +++ b/msvc/RetroArch-360/RetroArch-360.vcxproj @@ -113,7 +113,7 @@ true false MultiThreadedDebug - _DEBUG;_XBOX;PACKAGE_VERSION="0.9.6";%(PreprocessorDefinitions);HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;RARCH_CONSOLE;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9 + _DEBUG;_XBOX;PACKAGE_VERSION="0.9.6";%(PreprocessorDefinitions);HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;RARCH_CONSOLE;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360 Callcap @@ -151,7 +151,7 @@ AnalyzeOnly false MultiThreadedDebug - _DEBUG;_XBOX;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;RARCH_CONSOLE;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9 + _DEBUG;_XBOX;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;RARCH_CONSOLE;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360 Callcap @@ -190,7 +190,7 @@ Size false MultiThreaded - NDEBUG;_XBOX;PROFILE;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9 + NDEBUG;_XBOX;PROFILE;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;RARCH_CONSOLE;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360 Callcap @@ -234,7 +234,7 @@ Size false MultiThreaded - NDEBUG;_XBOX;PROFILE;FASTCAP;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9 + NDEBUG;_XBOX;PROFILE;FASTCAP;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";HAVE_DEFAULT_RETROPAD_INPUT;_CRT_SECURE_NO_WARNINGS;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360 true @@ -275,7 +275,7 @@ false false MultiThreaded - NDEBUG;_XBOX;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;main=rarch_main;RARCH_CONSOLE=1;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9 + NDEBUG;_XBOX;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;main=rarch_main;RARCH_CONSOLE=1;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360 true @@ -316,7 +316,7 @@ false false MultiThreaded - NDEBUG;_XBOX;LTCG;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;RARCH_CONSOLE;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9 + NDEBUG;_XBOX;LTCG;%(PreprocessorDefinitions);PACKAGE_VERSION="0.9.6";_CRT_SECURE_NO_WARNINGS;HAVE_DEFAULT_RETROPAD_INPUT;RARCH_CONSOLE;main=rarch_main;HAVE_CONFIGFILE;HAVE_FILEBROWSER;HAVE_NETPLAY;HAVE_SOCKET_LEGACY;HAVE_ZLIB;HAVE_RARCH_MAIN_WRAP;HAVE_RARCH_EXEC;HAVE_LIBRETRO_MANAGEMENT;D3DCOMPILE_USEVOIDS;HAVE_GRIFFIN;HAVE_HLSL;HAVE_VID_CONTEXT;HAVE_D3D9;_XBOX360 true @@ -714,4 +714,4 @@ - + \ No newline at end of file From d5bb5fd7af5eda40d08a354a625bd1ec3a49be7e Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sun, 24 Jun 2012 21:25:11 +0200 Subject: [PATCH 29/44] (Xbox 1)) Changes --- audio/utils.h | 2 +- console/console_ext.c | 4 +- console/griffin/griffin.c | 12 +++--- fifo_buffer.c | 2 +- file.c | 5 ++- general.h | 6 +-- gfx/state_tracker.h | 2 +- hash.h | 2 +- msvc/RetroArch-Xbox1/RetroArch-Xbox1.vcproj | 42 +++++++++++++++++---- patch.h | 2 +- 10 files changed, 54 insertions(+), 25 deletions(-) diff --git a/audio/utils.h b/audio/utils.h index 228bb95302..d8ac6c6038 100644 --- a/audio/utils.h +++ b/audio/utils.h @@ -16,7 +16,7 @@ #ifndef AUDIO_UTILS_H #define AUDIO_UTILS_H -#include +#include "../rarch_stdint.h" #include #if __SSE2__ diff --git a/console/console_ext.c b/console/console_ext.c index e9d87c5f66..0881e39260 100644 --- a/console/console_ext.c +++ b/console/console_ext.c @@ -285,7 +285,7 @@ static const struct platform_bind platform_keys[] = { { CTRL_UP_MASK | CTRL_RSTICK_UP_MASK, "RStick D-Pad Up" }, { CTRL_DOWN_MASK | CTRL_RSTICK_DOWN_MASK, "RStick D-Pad Down" }, }; -#elif defined(_XBOX) +#elif defined(_XBOX360) static const struct platform_bind platform_keys[] = { { XINPUT_GAMEPAD_B, "B button" }, { XINPUT_GAMEPAD_A, "A button" }, @@ -471,7 +471,7 @@ void rarch_input_set_controls_default (void) rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_R3] = platform_keys[PS3_DEVICE_ID_JOYPAD_R3].joykey; rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L2] = platform_keys[PS3_DEVICE_ID_JOYPAD_L2].joykey; rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_L3] = platform_keys[PS3_DEVICE_ID_JOYPAD_L3].joykey; -#elif defined(_XBOX) +#elif defined(_XBOX360) rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_B] = platform_keys[XDK360_DEVICE_ID_JOYPAD_A].joykey; rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_Y] = platform_keys[XDK360_DEVICE_ID_JOYPAD_X].joykey; rarch_default_keybind_lut[RETRO_DEVICE_ID_JOYPAD_SELECT] = platform_keys[XDK360_DEVICE_ID_JOYPAD_BACK].joykey; diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index 389e82ed97..fc31a280fb 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -86,7 +86,7 @@ VIDEO DRIVER #ifdef HAVE_OPENGL #include "../../gfx/gl.c" -#elif defined(_XBOX) +#elif defined(_XBOX360) #include "../../360/xdk360_video.cpp" #elif defined(GEKKO) #include "../../wii/video.c" @@ -100,7 +100,7 @@ FONTS #if defined(__CELLOS_LV2__) #include "../../gfx/fonts/ps3_libdbgfont.c" -#elif defined(_XBOX) +#elif defined(_XBOX360) #include "../../gfx/fonts/xdk360_fonts.cpp" #elif defined(GEKKO) #include "../../gfx/fonts/fonts.c" @@ -111,7 +111,7 @@ INPUT ============================================================ */ #if defined(__CELLOS_LV2__) #include "../../ps3/ps3_input.c" -#elif defined(_XBOX) +#elif defined(_XBOX360) #include "../../360/xdk360_input.c" #elif defined(GEKKO) #include "../../wii/input.c" @@ -157,7 +157,7 @@ AUDIO ============================================================ */ #if defined(__CELLOS_LV2__) #include "../../ps3/ps3_audio.c" -#elif defined(_XBOX) +#elif defined(_XBOX360) #include "../../360/xdk360_audio.cpp" #elif defined(GEKKO) #include "../../wii/audio.c" @@ -202,7 +202,7 @@ REWIND /*============================================================ MAIN ============================================================ */ -#if defined(_XBOX) +#if defined(_XBOX360) #include "../../360/frontend-xdk/main.c" #elif defined(GEKKO) #include "../../wii/frontend/main.c" @@ -230,7 +230,7 @@ NETPLAY /*============================================================ MENU ============================================================ */ -#if defined(_XBOX) +#if defined(_XBOX360) #include "../../360/frontend-xdk/menu.cpp" #elif defined(GEKKO) #include "../rgui/rgui.c" diff --git a/fifo_buffer.c b/fifo_buffer.c index a4f452762a..046e6ced17 100644 --- a/fifo_buffer.c +++ b/fifo_buffer.c @@ -14,7 +14,7 @@ */ #include "fifo_buffer.h" -#include +#include "rarch_stdint.h" struct fifo_buffer { diff --git a/file.c b/file.c index 4c0700b19e..a40d276a79 100644 --- a/file.c +++ b/file.c @@ -26,12 +26,15 @@ #include "compat/strl.h" #include "hash.h" +#ifdef _XBOX360 +#include +#endif + #if defined(_WIN32) && !defined(_XBOX) #include #include #include #elif defined(_XBOX) -#include #define setmode _setmode #define INVALID_FILE_ATTRIBUTES -1 #endif diff --git a/general.h b/general.h index fb40bc17ff..0a1375971e 100644 --- a/general.h +++ b/general.h @@ -42,7 +42,7 @@ #include