From cca8800dfb30dc9d772c3bfd8167b40ab3197616 Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 22 Jul 2012 14:32:38 +0000 Subject: [PATCH] menu: show savestate date git-svn-id: file:///home/notaz/opt/svn/PicoDrive@951 be3aeb3a-fb24-0410-a615-afba39da0efa --- platform/common/emu.c | 6 +++--- platform/common/emu.h | 2 +- platform/common/menu.c | 41 +++++++++++++++++++++++++++++++---------- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/platform/common/emu.c b/platform/common/emu.c index 235861b0..cab0925e 100644 --- a/platform/common/emu.c +++ b/platform/common/emu.c @@ -1012,7 +1012,7 @@ char *emu_get_save_fname(int load, int is_sram, int slot) return NULL; } -int emu_check_save_file(int slot) +int emu_check_save_file(int slot, int *time) { return emu_get_save_fname(1, 0, slot) ? 1 : 0; } @@ -1239,7 +1239,7 @@ static void run_events_ui(unsigned int which) if (which & (PEV_STATE_LOAD|PEV_STATE_SAVE)) { int do_it = 1; - if ( emu_check_save_file(state_slot) && + if ( emu_check_save_file(state_slot, NULL) && (((which & PEV_STATE_LOAD) && (currentConfig.confirm_save & EOPT_CONFIRM_LOAD)) || ((which & PEV_STATE_SAVE) && (currentConfig.confirm_save & EOPT_CONFIRM_SAVE))) ) { @@ -1292,7 +1292,7 @@ static void run_events_ui(unsigned int which) } emu_status_msg("SAVE SLOT %i [%s]", state_slot, - emu_check_save_file(state_slot) ? "USED" : "FREE"); + emu_check_save_file(state_slot, NULL) ? "USED" : "FREE"); } if (which & PEV_MENU) engineState = PGS_Menu; diff --git a/platform/common/emu.h b/platform/common/emu.h index cfa3527a..75a5abe3 100644 --- a/platform/common/emu.h +++ b/platform/common/emu.h @@ -133,7 +133,7 @@ int emu_read_config(const char *rom_fname, int no_defaults); int emu_write_config(int game); char *emu_get_save_fname(int load, int is_sram, int slot); -int emu_check_save_file(int slot); +int emu_check_save_file(int slot, int *time); void emu_text_out8 (int x, int y, const char *text); void emu_text_out16(int x, int y, const char *text); diff --git a/platform/common/menu.c b/platform/common/menu.c index d76eda43..97e365d7 100644 --- a/platform/common/menu.c +++ b/platform/common/menu.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include // savestate date #include "menu.h" #include "fonts.h" @@ -309,6 +311,9 @@ void menu_init(void) } fclose(f); } + + // use user's locale for savestate date display + setlocale(LC_TIME, ""); } static void menu_draw_begin(int need_bg) @@ -965,7 +970,10 @@ rescan: // ------------ savestate loader ------------ +#define STATE_SLOT_COUNT 10 + static int state_slot_flags = 0; +static int state_slot_times[STATE_SLOT_COUNT]; static void state_check_slots(void) { @@ -973,8 +981,9 @@ static void state_check_slots(void) state_slot_flags = 0; - for (slot = 0; slot < 10; slot++) { - if (emu_check_save_file(slot)) + for (slot = 0; slot < STATE_SLOT_COUNT; slot++) { + state_slot_times[slot] = 0; + if (emu_check_save_file(slot, &state_slot_times[slot])) state_slot_flags |= 1 << slot; } } @@ -984,12 +993,13 @@ static void draw_savestate_bg(int slot); static void draw_savestate_menu(int menu_sel, int is_loading) { int i, x, y, w, h; + char time_buf[32]; if (state_slot_flags & (1 << menu_sel)) draw_savestate_bg(menu_sel); w = (13 + 2) * me_mfont_w; - h = (1+2+10+1) * me_mfont_h; + h = (1+2+STATE_SLOT_COUNT+1) * me_mfont_h; x = g_menuscreen_w / 2 - w / 2; if (x < 0) x = 0; y = g_menuscreen_h / 2 - h / 2; @@ -1004,12 +1014,23 @@ static void draw_savestate_menu(int menu_sel, int is_loading) text_out16(x, y, is_loading ? "Load state" : "Save state"); y += 3 * me_mfont_h; - menu_draw_selection(x - me_mfont_w * 2, y + menu_sel * me_mfont_h, (13 + 2) * me_mfont_w + 4); + menu_draw_selection(x - me_mfont_w * 2, y + menu_sel * me_mfont_h, (23 + 2) * me_mfont_w + 4); - /* draw all 10 slots */ - for (i = 0; i < 10; i++, y += me_mfont_h) + /* draw all slots */ + for (i = 0; i < STATE_SLOT_COUNT; i++, y += me_mfont_h) { - text_out16(x, y, "SLOT %i (%s)", i, (state_slot_flags & (1 << i)) ? "USED" : "free"); + if (!(state_slot_flags & (1 << i))) + strcpy(time_buf, "free"); + else { + strcpy(time_buf, "USED"); + if (state_slot_times[i] != 0) { + time_t time = state_slot_times[i]; + struct tm *t = localtime(&time); + strftime(time_buf, sizeof(time_buf), "%x %R", t); + } + } + + text_out16(x, y, "SLOT %i (%s)", i, time_buf); } text_out16(x, y, "back"); @@ -1018,8 +1039,8 @@ static void draw_savestate_menu(int menu_sel, int is_loading) static int menu_loop_savestate(int is_loading) { - static int menu_sel = 10; - int menu_sel_max = 10; + static int menu_sel = STATE_SLOT_COUNT; + int menu_sel_max = STATE_SLOT_COUNT; unsigned long inp = 0; int ret = 0; @@ -1047,7 +1068,7 @@ static int menu_loop_savestate(int is_loading) } while (!(state_slot_flags & (1 << menu_sel)) && menu_sel != menu_sel_max && is_loading); } if (inp & PBTN_MOK) { // save/load - if (menu_sel < 10) { + if (menu_sel < STATE_SLOT_COUNT) { state_slot = menu_sel; if (emu_save_load_game(is_loading, 0)) { me_update_msg(is_loading ? "Load failed" : "Save failed"); -- 2.39.5