mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-09-03 04:33:02 +02:00
Add fake-api GetPrivateProfileString
This commit is contained in:
parent
eadb093b12
commit
f15f767d73
3 changed files with 66 additions and 11 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue