platform time functions

This commit is contained in:
Michał Janiszewski 2015-09-29 23:35:15 +02:00
parent 6318d468b5
commit 89846a088a
4 changed files with 73 additions and 20 deletions

View File

@ -33,6 +33,7 @@
#include "../config.h"
#include "platform.h"
#include <dirent.h>
#include <time.h>
// The name of the mutex used to prevent multiple instances of the game from running
#define SINGLE_INSTANCE_MUTEX_NAME "RollerCoaster Tycoon 2_GSKMUTEX"
@ -57,6 +58,31 @@ int main(int argc, const char **argv)
return gExitCode;
}
void platform_get_date(rct2_date *out_date)
{
assert(out_date != NULL);
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = gmtime(&rawtime);
out_date->day = timeinfo->tm_mday;
out_date->month = timeinfo->tm_mon;
out_date->year = timeinfo->tm_year;
out_date->day_of_week = timeinfo->tm_wday;
}
void platform_get_time(rct2_time *out_time)
{
assert(out_time != NULL);
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = gmtime(&rawtime);
out_time->second = timeinfo->tm_sec;
out_time->minute = timeinfo->tm_min;
out_time->hour = timeinfo->tm_hour;
}
char platform_get_path_separator()
{
return '/';

View File

@ -45,6 +45,19 @@ typedef struct {
uint64 last_modified;
} file_info;
typedef struct {
sint16 day;
sint16 month;
sint16 year;
sint16 day_of_week;
} rct2_date;
typedef struct {
sint16 hour;
sint16 minute;
sint16 second;
} rct2_time;
typedef struct {
int x, y;
unsigned char left, middle, right, any;
@ -91,6 +104,8 @@ void platform_process_messages();
int platform_scancode_to_rct_keycode(int sdl_key);
void platform_start_text_input(utf8 *buffer, int max_length);
void platform_stop_text_input();
void platform_get_date(rct2_date *out_date);
void platform_get_time(rct2_time *out_time);
// Platform specific definitions
char platform_get_path_separator();

View File

@ -85,6 +85,28 @@ __declspec(dllexport) int StartOpenRCT(HINSTANCE hInstance, HINSTANCE hPrevInsta
return gExitCode;
}
void platform_get_date(rct2_date *out_date)
{
assert(out_date != NULL);
SYSTEMTIME systime;
GetSystemTime(&systime);
out_date->day = systime.wDay;
out_date->month = systime.wMonth;
out_date->year = systime.wYear;
out_date->day_of_week = systime.wDayOfWeek;
}
void platform_get_time(rct2_time *out_time)
{
assert(out_time != NULL);
SYSTEMTIME systime;
GetLocalTime(&systime);
out_time->hour = systime.wHour;
out_time->minute = systime.wMinute;
out_time->second = systime.wSecond;
}
char platform_get_path_separator()
{
return '\\';

View File

@ -530,17 +530,12 @@ void get_system_info()
*/
void get_system_time()
{
#ifdef _WIN32
SYSTEMTIME systime;
GetSystemTime(&systime);
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_DAY, sint16) = systime.wDay;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_MONTH, sint16) = systime.wMonth;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_YEAR, sint16) = systime.wYear;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_DAYOFWEEK, sint16) = systime.wDayOfWeek;
#else
STUB();
#endif // _WIN32
rct2_date date;
platform_get_date(&date);
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_DAY, sint16) = date.day;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_MONTH, sint16) = date.month;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_YEAR, sint16) = date.year;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_DAYOFWEEK, sint16) = date.day_of_week;
}
/**
@ -549,15 +544,10 @@ void get_system_time()
*/
void get_local_time()
{
#ifdef _WIN32
SYSTEMTIME systime;
GetLocalTime(&systime);
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_HOUR, sint16) = systime.wHour;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_MINUTE, sint16) = systime.wMinute;
#else
STUB();
#endif // _WIN32
rct2_time t;
platform_get_time(&t);
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_HOUR, sint16) = t.hour;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_MINUTE, sint16) = t.minute;
}
/**