aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2012-06-18 16:46:56 -0700
committerJohannes Schickel2012-06-18 16:46:56 -0700
commit88512351d0e265bec0f85c09a7cc9bb388fef4f4 (patch)
tree2d2142b294dd492d297097b1a43c1e68d5fdaa1e
parente8546a46a01ee74f7d9833196246b27fbc5bc473 (diff)
parent954d56a30fcde8b72c30d8fdfa7ad68945d3ac96 (diff)
downloadscummvm-rg350-88512351d0e265bec0f85c09a7cc9bb388fef4f4.tar.gz
scummvm-rg350-88512351d0e265bec0f85c09a7cc9bb388fef4f4.tar.bz2
scummvm-rg350-88512351d0e265bec0f85c09a7cc9bb388fef4f4.zip
Merge pull request #249 from digitall/PS2DayOfWeek
PS2: Implement algorithm for day of week for use in tm_wday.
-rw-r--r--backends/platform/ps2/ps2time.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/backends/platform/ps2/ps2time.cpp b/backends/platform/ps2/ps2time.cpp
index decfc552ec..124c154d06 100644
--- a/backends/platform/ps2/ps2time.cpp
+++ b/backends/platform/ps2/ps2time.cpp
@@ -105,8 +105,14 @@ void OSystem_PS2::readRtcTime(void) {
g_day, g_month, g_year + 2000);
}
-void OSystem_PS2::getTimeAndDate(TimeDate &t) const {
+// Tomohiko Sakamoto's 1993 algorithm for any Gregorian date
+static int dayOfWeek(int y, int m, int d) {
+ static const int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
+ y -= m < 3;
+ return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
+}
+void OSystem_PS2::getTimeAndDate(TimeDate &t) const {
uint32 currentSecs = g_timeSecs + (msecCount - g_lastTimeCheck) / 1000;
if (currentSecs >= SECONDS_PER_DAY) {
buildNewDate(+1);
@@ -120,9 +126,5 @@ void OSystem_PS2::getTimeAndDate(TimeDate &t) const {
t.tm_year = g_year + 100;
t.tm_mday = g_day;
t.tm_mon = g_month - 1;
-#ifdef RELEASE_BUILD
- #error getTimeAndDate() is not setting the day of the week
-#else
- t.tm_wday = 0; // FIXME
-#endif
+ t.tm_wday = dayOfWeek(t.tm_year, t.tm_mon, t.tm_mday);
}