aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authornotaz2011-12-11 02:32:08 +0200
committernotaz2011-12-11 02:32:35 +0200
commit4b98cfee8661d2d35be2303251eb4eb6402798c4 (patch)
tree9983c766b989b5bcb3e1ae8eee9790a19dc6487d /frontend
parent7d993ee2dec1905c689ec0787f6543247fae665c (diff)
downloadpcsx_rearmed-4b98cfee8661d2d35be2303251eb4eb6402798c4.tar.gz
pcsx_rearmed-4b98cfee8661d2d35be2303251eb4eb6402798c4.tar.bz2
pcsx_rearmed-4b98cfee8661d2d35be2303251eb4eb6402798c4.zip
frontend: menu: show savestate date
Diffstat (limited to 'frontend')
-rw-r--r--frontend/common/menu.c37
-rw-r--r--frontend/menu.c31
2 files changed, 55 insertions, 13 deletions
diff --git a/frontend/common/menu.c b/frontend/common/menu.c
index d76eda4..9a6a47c 100644
--- a/frontend/common/menu.c
+++ b/frontend/common/menu.c
@@ -12,6 +12,7 @@
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <time.h>
#include "menu.h"
#include "fonts.h"
@@ -965,7 +966,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 +977,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 +989,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 +1010,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 +1035,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 +1064,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");
diff --git a/frontend/menu.c b/frontend/menu.c
index 5fe86ad..3142506 100644
--- a/frontend/menu.c
+++ b/frontend/menu.c
@@ -13,6 +13,9 @@
#include <errno.h>
#include <dlfcn.h>
#include <zlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
#include "main.h"
#include "menu.h"
@@ -34,6 +37,8 @@
#include "../plugins/dfinput/main.h"
#include "revision.h"
+#define REARMED_BIRTHDAY_TIME 1293306830 /* 25 Dec 2010 */
+
#define array_size(x) (sizeof(x) / sizeof(x[0]))
typedef enum
@@ -124,10 +129,30 @@ void emu_make_path(char *buff, const char *end, int size)
printf("Warning: path truncated: %s\n", buff);
}
-static int emu_check_save_file(int slot)
+static int emu_check_save_file(int slot, int *time)
{
- int ret = emu_check_state(slot);
- return ret == 0 ? 1 : 0;
+ char fname[MAXPATHLEN];
+ struct stat status;
+ int ret;
+
+ ret = emu_check_state(slot);
+ if (ret != 0 || time == NULL)
+ return ret == 0 ? 1 : 0;
+
+ ret = get_state_filename(fname, sizeof(fname), slot);
+ if (ret != 0)
+ return 1;
+
+ ret = stat(fname, &status);
+ if (ret != 0)
+ return 1;
+
+ if (status.st_mtime < REARMED_BIRTHDAY_TIME)
+ return 1; // probably bad rtc like on some Caanoos
+
+ *time = status.st_mtime;
+
+ return 1;
}
static int emu_save_load_game(int load, int unused)