Add fake-api GetPrivateProfileString

This commit is contained in:
Inori 2019-08-25 12:27:41 -04:00 committed by Inori
parent eadb093b12
commit f15f767d73
3 changed files with 66 additions and 11 deletions

View file

@ -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);
}
}

View file

@ -5,10 +5,13 @@
#include <SDL_syswm.h>
#else
#include <map>
#include <cstring>
#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

View file

@ -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