summaryrefslogtreecommitdiffstats
path: root/src/skel
diff options
context:
space:
mode:
authorerorcun <erayorcunus@gmail.com>2020-04-22 13:08:01 +0200
committerGitHub <noreply@github.com>2020-04-22 13:08:01 +0200
commit9660594634a0d9cb3a05a017f08aa88c265e7773 (patch)
tree2c35e96c1e5747d72353290ceb731d6622b12eda /src/skel
parentMerge pull request #483 from Fire-Head/master (diff)
parentCrossplatform work continues (diff)
downloadre3-9660594634a0d9cb3a05a017f08aa88c265e7773.tar
re3-9660594634a0d9cb3a05a017f08aa88c265e7773.tar.gz
re3-9660594634a0d9cb3a05a017f08aa88c265e7773.tar.bz2
re3-9660594634a0d9cb3a05a017f08aa88c265e7773.tar.lz
re3-9660594634a0d9cb3a05a017f08aa88c265e7773.tar.xz
re3-9660594634a0d9cb3a05a017f08aa88c265e7773.tar.zst
re3-9660594634a0d9cb3a05a017f08aa88c265e7773.zip
Diffstat (limited to 'src/skel')
-rw-r--r--src/skel/crossplatform.cpp81
-rw-r--r--src/skel/crossplatform.h65
-rw-r--r--src/skel/events.cpp6
-rw-r--r--src/skel/win/win.cpp4
-rw-r--r--src/skel/win/win.h11
5 files changed, 159 insertions, 8 deletions
diff --git a/src/skel/crossplatform.cpp b/src/skel/crossplatform.cpp
new file mode 100644
index 00000000..f9464bb6
--- /dev/null
+++ b/src/skel/crossplatform.cpp
@@ -0,0 +1,81 @@
+#include "common.h"
+#define USEALTERNATIVEWINFUNCS
+#include "crossplatform.h"
+
+// For internal use
+// wMilliseconds is not needed
+void tmToSystemTime(const tm *tm, SYSTEMTIME *out) {
+ out->wYear = tm->tm_year + 1900;
+ out->wMonth = tm->tm_mon + 1;
+ out->wDayOfWeek = tm->tm_wday;
+ out->wDay = tm->tm_mday;
+ out->wHour = tm->tm_hour;
+ out->wMinute = tm->tm_min;
+ out->wSecond = tm->tm_sec;
+}
+
+void GetLocalTime_CP(SYSTEMTIME *out) {
+ time_t timestamp = time(nil);
+ tm *localTm = localtime(&timestamp);
+ tmToSystemTime(localTm, out);
+}
+
+#if !defined _WIN32 || defined __MINGW32__
+HANDLE FindFirstFile(const char* pathname, WIN32_FIND_DATA* firstfile) {
+ char newpathname[32];
+ strncpy(newpathname, pathname, 32);
+ char* path = strtok(newpathname, "\\*");
+ strncpy(firstfile->folder, path, sizeof(firstfile->folder));
+
+ // Both w/ extension and w/o extension is ok
+ if (strlen(path) + 2 != strlen(pathname))
+ strncpy(firstfile->extension, strtok(NULL, "\\*"), sizeof(firstfile->extension));
+ else
+ strncpy(firstfile->extension, "", sizeof(firstfile->extension));
+
+ HANDLE d;
+ if ((d = opendir(path)) == NULL || !FindNextFile(d, firstfile))
+ return NULL;
+
+ return d;
+}
+
+bool FindNextFile(HANDLE d, WIN32_FIND_DATA* finddata) {
+ dirent *file;
+ static struct stat fileStats;
+ static char path[PATH_MAX], relativepath[NAME_MAX + sizeof(finddata->folder) + 1];
+ int extensionLen = strlen(finddata->extension);
+ while ((file = readdir(d)) != NULL) {
+
+ // We only want "DT_REG"ular Files, but reportedly some FS and OSes gives DT_UNKNOWN as type.
+ if ((file->d_type == DT_UNKNOWN || file->d_type == DT_REG) &&
+ (extensionLen == 0 || strncmp(&file->d_name[strlen(file->d_name) - extensionLen], finddata->extension, extensionLen) == 0)) {
+
+ sprintf(relativepath, "%s/%s", finddata->folder, file->d_name);
+ realpath(relativepath, path);
+ stat(path, &fileStats);
+ strncpy(finddata->cFileName, file->d_name, sizeof(finddata->cFileName));
+ finddata->ftLastWriteTime = fileStats.st_mtime;
+ return true;
+ }
+ }
+ return false;
+}
+
+void GetDateFormat(int unused1, int unused2, SYSTEMTIME* in, int unused3, char* out, int size) {
+ tm linuxTime;
+ linuxTime.tm_year = in->wYear - 1900;
+ linuxTime.tm_mon = in->wMonth - 1;
+ linuxTime.tm_wday = in->wDayOfWeek;
+ linuxTime.tm_mday = in->wDay;
+ linuxTime.tm_hour = in->wHour;
+ linuxTime.tm_min = in->wMinute;
+ linuxTime.tm_sec = in->wSecond;
+ strftime(out, size, nl_langinfo(D_FMT), &linuxTime);
+}
+
+void FileTimeToSystemTime(time_t* writeTime, SYSTEMTIME* out) {
+ tm *ptm = gmtime(writeTime);
+ tmToSystemTime(ptm, out);
+}
+#endif \ No newline at end of file
diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h
new file mode 100644
index 00000000..1b3ad7d6
--- /dev/null
+++ b/src/skel/crossplatform.h
@@ -0,0 +1,65 @@
+#include <time.h>
+
+#ifndef MAX_PATH
+ #if !defined _WIN32 || defined __MINGW32__
+ #define MAX_PATH PATH_MAX
+ #else
+ #define MAX_PATH 260
+ #endif
+#endif
+
+// Mostly wrappers around Windows functions
+
+// TODO: Remove USEALTERNATIVEWINFUNCS and don't use it anywhere when re3 becomes fully cross-platform, this is for testing
+// Codes compatible with Windows and Linux
+#if defined USEALTERNATIVEWINFUNCS || !defined _WIN32 || defined __MINGW32__
+#define DeleteFile unlink
+
+// Needed for save games
+struct SYSTEMTIME {
+ uint16 wYear;
+ uint16 wMonth;
+ uint16 wDayOfWeek;
+ uint16 wDay;
+ uint16 wHour;
+ uint16 wMinute;
+ uint16 wSecond;
+ uint16 wMilliseconds;
+};
+
+#define GetLocalTime GetLocalTime_CP
+#else
+#include <Windows.h>
+#endif
+
+void GetLocalTime_CP(SYSTEMTIME* out);
+
+
+// Only runs on GNU/POSIX/etc.
+#if !defined _WIN32 || defined __MINGW32__
+#define OutputDebugString(s) re3_debug("[DBG-2]: " s "\n")
+
+#include <iostream>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <langinfo.h>
+
+typedef DIR* HANDLE;
+#define INVALID_HANDLE_VALUE NULL
+#define FindClose closedir
+#define LOCALE_USER_DEFAULT 0
+#define DATE_SHORTDATE 0
+
+struct WIN32_FIND_DATA {
+ char extension[32]; // for searching
+ char folder[32]; // for searching
+ char cFileName[256]; // because tSkinInfo has it 256
+ time_t ftLastWriteTime;
+};
+
+HANDLE FindFirstFile(char*, WIN32_FIND_DATA*);
+bool FindNextFile(HANDLE, WIN32_FIND_DATA*);
+void FileTimeToSystemTime(time_t*, SYSTEMTIME*);
+void GetDateFormat(int, int, SYSTEMTIME*, int, char*, int);
+#endif \ No newline at end of file
diff --git a/src/skel/events.cpp b/src/skel/events.cpp
index 5d16d5b0..7116833d 100644
--- a/src/skel/events.cpp
+++ b/src/skel/events.cpp
@@ -2,18 +2,12 @@
#include "skeleton.h"
#include "events.h"
-//#include "main.h"
- #define DIRECTINPUT_VERSION 0x0800
- #include <dinput.h>
#include "common.h"
#include "Pad.h"
#include "ControllerConfig.h"
#include "Frontend.h"
#include "Camera.h"
-
-
-
/*
*****************************************************************************
*/
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index a534e903..d13d3c52 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -1986,7 +1986,7 @@ WinMain(HINSTANCE instance,
++gGameState;
else if ( CPad::GetPad(0)->GetEnterJustDown() )
++gGameState;
- else if ( CPad::GetPad(0)->GetCharJustDown(VK_SPACE) )
+ else if ( CPad::GetPad(0)->GetCharJustDown(' ') )
++gGameState;
else if ( CPad::GetPad(0)->GetAltJustDown() )
++gGameState;
@@ -2022,7 +2022,7 @@ WinMain(HINSTANCE instance,
++gGameState;
else if ( CPad::GetPad(0)->GetEnterJustDown() )
++gGameState;
- else if ( CPad::GetPad(0)->GetCharJustDown(VK_SPACE) )
+ else if ( CPad::GetPad(0)->GetCharJustDown(' ') )
++gGameState;
else if ( CPad::GetPad(0)->GetAltJustDown() )
++gGameState;
diff --git a/src/skel/win/win.h b/src/skel/win/win.h
index ca16c4a0..d6326294 100644
--- a/src/skel/win/win.h
+++ b/src/skel/win/win.h
@@ -5,6 +5,11 @@
#define RSREGSETBREAKALLOC(_name) /* No op */
#endif /* (!defined(RSREGSETBREAKALLOC)) */
+#ifndef _INC_WINDOWS
+#define _X86_
+#include <windef.h>
+#endif
+
enum eGameState
{
GS_START_UP = 0,
@@ -17,7 +22,9 @@ enum eGameState
GS_FRONTEND,
GS_INIT_PLAYING_GAME,
GS_PLAYING_GAME,
+#ifndef MASTER
GS_ANIMVIEWER,
+#endif
};
enum eWinVersion
@@ -33,6 +40,7 @@ extern DWORD _dwOperatingSystemVersion;
extern RwUInt32 gGameState;
+#ifdef __DINPUT_INCLUDED__
/* platform specfic global data */
typedef struct
{
@@ -86,6 +94,7 @@ public:
};
extern CJoySticks AllValidWinJoys;
+#endif
#ifdef __cplusplus
extern "C"
@@ -97,6 +106,7 @@ MainWndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam);
RwBool IsForegroundApp();
+#ifdef __DINPUT_INCLUDED__
HRESULT _InputInitialise();
HRESULT _InputInitialiseMouse();
HRESULT CapturePad(RwInt32 padID);
@@ -110,6 +120,7 @@ BOOL _InputTranslateKey(RsKeyCodes *rs, UINT flag, UINT key);
void _InputTranslateShiftKeyUpDown(RsKeyCodes *rs);;
BOOL _InputTranslateShiftKey(RsKeyCodes *rs, UINT key, BOOLEAN bDown);
BOOL _InputIsExtended(INT flag);
+#endif
void InitialiseLanguage();
RwBool _psSetVideoMode(RwInt32 subSystem, RwInt32 videoMode);