From f15f767d73c3fc267a353ea5cefb196a03dc8608 Mon Sep 17 00:00:00 2001 From: Inori Date: Sun, 25 Aug 2019 12:27:41 -0400 Subject: [PATCH] Add fake-api GetPrivateProfileString --- binding/miniffi-binding.cpp | 15 +++++++----- src/fake-api.cpp | 46 +++++++++++++++++++++++++++++++++---- src/fake-api.h | 16 ++++++++++++- 3 files changed, 66 insertions(+), 11 deletions(-) diff --git a/binding/miniffi-binding.cpp b/binding/miniffi-binding.cpp index 7c468320..37d2120d 100644 --- a/binding/miniffi-binding.cpp +++ b/binding/miniffi-binding.cpp @@ -69,6 +69,9 @@ MiniFFI_GetFunctionHandle(void *libhandle, const char *func) CAPTURE(ShowWindow); CAPTURE(SetWindowLong); CAPTURE(GetSystemMetrics); + CAPTURE(SetCapture); + CAPTURE(ReleaseCapture); + CAPTURE(GetPrivateProfileString); #endif #endif if (!libhandle) return 0; @@ -99,7 +102,7 @@ RB_METHOD(MiniFFI_initialize) rb_raise(rb_eRuntimeError, SDL_GetError()); - rb_iv_set(self, "_func", OFFT2NUM((unsigned long)hfunc)); + rb_iv_set(self, "_func", ULONG2NUM((unsigned long)hfunc)); rb_iv_set(self, "_funcname", func); rb_iv_set(self, "_libname", libname); @@ -210,7 +213,7 @@ RB_METHOD(MiniFFI_call) VALUE func = rb_iv_get(self, "_func"); VALUE own_imports = rb_iv_get(self, "_imports"); VALUE own_exports = rb_iv_get(self, "_exports"); - MINIFFI_FUNC ApiFunction = (MINIFFI_FUNC)NUM2OFFT(func); + MINIFFI_FUNC ApiFunction = (MINIFFI_FUNC)NUM2ULONG(func); VALUE args; int items = rb_scan_args(argc, argv, "0*", &args); int nimport = RARRAY_LEN(own_imports); @@ -231,7 +234,7 @@ RB_METHOD(MiniFFI_call) } else if (FIXNUM_P(str)) { - lParam = NUM2OFFT(str); + lParam = NUM2ULONG(str); } else { @@ -246,7 +249,7 @@ RB_METHOD(MiniFFI_call) break; case _T_NUMBER: case _T_INTEGER: default: - lParam = NUM2OFFT(rb_ary_entry(args, i)); + lParam = NUM2ULONG(rb_ary_entry(args, i)); break; } params[i] = lParam; @@ -260,7 +263,7 @@ RB_METHOD(MiniFFI_call) switch (FIX2INT(own_exports)) { case _T_NUMBER: case _T_INTEGER: - return OFFT2NUM(ret); + return ULONG2NUM(ret); case _T_POINTER: return rb_str_new2((char*)ret); @@ -269,7 +272,7 @@ RB_METHOD(MiniFFI_call) return rb_bool_new(ret); case _T_VOID: default: - return OFFT2NUM(0); + return ULONG2NUM(0); } } diff --git a/src/fake-api.cpp b/src/fake-api.cpp index 2d6dd54a..d00e10f6 100644 --- a/src/fake-api.cpp +++ b/src/fake-api.cpp @@ -5,10 +5,13 @@ #include #else #include +#include +#include "iniconfig.h" #endif #include "sharedstate.h" #include "eventthread.h" +#include "filesystem.h" #include "input.h" #include "fake-api.h" @@ -296,7 +299,7 @@ MKXP_SetWindowPos(HWND hWnd, #ifdef __WIN32__ SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags); #else - SDL_SetWindowSize(shState->sdlWindow(), cx, cy); + //SDL_SetWindowSize(shState->sdlWindow(), cx, cy); #endif SDL_SetWindowPosition(shState->sdlWindow(), X, Y); return true; @@ -509,12 +512,12 @@ NOP_VAL(DUMMY_VAL); PREFABI int MKXP_GetSystemMetrics(int nIndex) { - SDL_DisplayMode dm; + SDL_DisplayMode dm = {0}; int rc = SDL_GetDesktopDisplayMode( SDL_GetWindowDisplayIndex(shState->sdlWindow()), &dm - ); - if (rc) + ); + if (!rc) { switch (nIndex) { case 0: @@ -534,5 +537,40 @@ MKXP_GetSystemMetrics(int nIndex) return -1; } +PREFABI HWND +MKXP_SetCapture(HWND hWnd) +NOP_VAL((HWND)DUMMY_VAL); + +PREFABI BOOL +MKXP_ReleaseCapture(void) +NOP_VAL(true); + +PREFABI DWORD +MKXP_GetPrivateProfileString(LPCTSTR lpAppName, + LPCTSTR lpKeyName, + LPCTSTR lpDefault, + LPTSTR lpReturnedString, + DWORD nSize, + LPCTSTR lpFileName) +{ + char *lpFileName_normal = shState->fileSystem().normalize(lpFileName, true, false); + SDLRWStream iniFile(lpFileName_normal, "r"); + delete lpFileName_normal; + if (iniFile) + { + INIConfiguration ic; + if (ic.load(iniFile.stream())) + { + std::string result = ic.getStringProperty(lpAppName, lpKeyName); + if (!result.empty()) + { + strncpy(lpReturnedString, result.c_str(), nSize); + return result.length(); + } + } + } + strncpy(lpReturnedString, lpDefault, nSize); + return strlen(lpDefault); +} #endif diff --git a/src/fake-api.h b/src/fake-api.h index 554d2279..84ee0827 100644 --- a/src/fake-api.h +++ b/src/fake-api.h @@ -15,7 +15,7 @@ #ifndef __WIN32__ typedef unsigned int DWORD, UINT, *LPDWORD; -typedef char BYTE, *LPCSTR, *PBYTE; +typedef char BYTE, *LPCSTR, *LPCTSTR, *LPTSTR, *PBYTE; typedef short SHORT; typedef int LONG; typedef bool BOOL; @@ -131,4 +131,18 @@ MKXP_SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong); PREFABI int MKXP_GetSystemMetrics(int nIndex); +PREFABI HWND +MKXP_SetCapture(HWND hWnd); + +PREFABI BOOL +MKXP_ReleaseCapture(void); + +PREFABI DWORD +MKXP_GetPrivateProfileString(LPCTSTR lpAppName, + LPCTSTR lpKeyName, + LPCTSTR lpDefault, + LPTSTR lpReturnedString, + DWORD nSize, + LPCTSTR lpFileName); + #endif