add changeable config path

pull/53/head
GEEKi 2024-12-16 11:09:38 +08:00
parent 6d8ffb46ef
commit 11556a1332
37 changed files with 134 additions and 63 deletions

4
.clang-format 100644
View File

@ -0,0 +1,4 @@
---
BasedOnStyle: Google
IndentWidth: 4
---

View File

@ -12,6 +12,7 @@
#include "util/crc.h" #include "util/crc.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
struct aime_io_config { struct aime_io_config {
wchar_t aime_path[MAX_PATH]; wchar_t aime_path[MAX_PATH];
@ -222,7 +223,7 @@ uint16_t aime_io_get_api_version(void)
HRESULT aime_io_init(void) HRESULT aime_io_init(void)
{ {
aime_io_config_read(&aime_io_cfg, L".\\segatools.ini"); aime_io_config_read(&aime_io_cfg, get_config_path());
return S_OK; return S_OK;
} }

View File

@ -53,6 +53,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE carol_hook_mod; static HMODULE carol_hook_mod;
static process_entry_t carol_startup; static process_entry_t carol_startup;
@ -100,7 +101,7 @@ static DWORD CALLBACK carol_pre_startup(void)
/* Config load */ /* Config load */
carol_hook_config_load(&carol_hook_cfg, L".\\segatools.ini"); carol_hook_config_load(&carol_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -164,7 +165,7 @@ static DWORD CALLBACK carol_pre_startup(void)
} }
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End carol_pre_startup ---\n"); dprintf("--- End carol_pre_startup ---\n");

View File

@ -8,6 +8,7 @@
#include "carolio/carolio.h" #include "carolio/carolio.h"
#include "carolio/config.h" #include "carolio/config.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static unsigned int __stdcall carol_io_touch_thread_proc(void *ctx); static unsigned int __stdcall carol_io_touch_thread_proc(void *ctx);
@ -25,7 +26,7 @@ uint16_t carol_io_get_api_version(void)
HRESULT carol_io_jvs_init(void) HRESULT carol_io_jvs_init(void)
{ {
carol_io_config_load(&carol_io_cfg, L".\\segatools.ini"); carol_io_config_load(&carol_io_cfg, get_config_path());
return S_OK; return S_OK;
} }
@ -178,4 +179,4 @@ static unsigned int __stdcall carol_io_touch_thread_proc(void *ctx)
} }
return 0; return 0;
} }

View File

@ -36,6 +36,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE chuni_hook_mod; static HMODULE chuni_hook_mod;
static process_entry_t chuni_startup; static process_entry_t chuni_startup;
@ -71,7 +72,7 @@ static DWORD CALLBACK chuni_pre_startup(void)
/* Config load */ /* Config load */
chuni_hook_config_load(&chuni_hook_cfg, L".\\segatools.ini"); chuni_hook_config_load(&chuni_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -129,7 +130,7 @@ static DWORD CALLBACK chuni_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End chuni_pre_startup ---\n"); dprintf("--- End chuni_pre_startup ---\n");

View File

@ -10,6 +10,7 @@
#include "chuniio/ledoutput.h" #include "chuniio/ledoutput.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static unsigned int __stdcall chuni_io_slider_thread_proc(void *ctx); static unsigned int __stdcall chuni_io_slider_thread_proc(void *ctx);
@ -27,7 +28,7 @@ uint16_t chuni_io_get_api_version(void)
HRESULT chuni_io_jvs_init(void) HRESULT chuni_io_jvs_init(void)
{ {
chuni_io_config_load(&chuni_io_cfg, L".\\segatools.ini"); chuni_io_config_load(&chuni_io_cfg, get_config_path());
led_init_mutex = CreateMutex( led_init_mutex = CreateMutex(
NULL, // default security attributes NULL, // default security attributes

View File

@ -49,6 +49,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE chusan_hook_mod; static HMODULE chusan_hook_mod;
static process_entry_t chusan_startup; static process_entry_t chusan_startup;
@ -84,7 +85,7 @@ static DWORD CALLBACK chusan_pre_startup(void)
/* Config load */ /* Config load */
chusan_hook_config_load(&chusan_hook_cfg, L".\\segatools.ini"); chusan_hook_config_load(&chusan_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -173,7 +174,7 @@ static DWORD CALLBACK chusan_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End chusan_pre_startup ---\n"); dprintf("--- End chusan_pre_startup ---\n");

View File

@ -35,6 +35,7 @@
#include "unityhook/hook.h" #include "unityhook/hook.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE cm_hook_mod; static HMODULE cm_hook_mod;
static process_entry_t cm_startup; static process_entry_t cm_startup;
@ -48,7 +49,7 @@ static DWORD CALLBACK cm_pre_startup(void)
/* Load config */ /* Load config */
cm_hook_config_load(&cm_hook_cfg, L".\\segatools.ini"); cm_hook_config_load(&cm_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -105,7 +106,7 @@ static DWORD CALLBACK cm_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End cm_pre_startup ---\n"); dprintf("--- End cm_pre_startup ---\n");

View File

@ -6,6 +6,7 @@
#include "cmio/cmio.h" #include "cmio/cmio.h"
#include "cmio/config.h" #include "cmio/config.h"
#include "util/env.h"
static uint8_t cm_opbtn; static uint8_t cm_opbtn;
static struct cm_io_config cm_io_cfg; static struct cm_io_config cm_io_cfg;
@ -18,7 +19,7 @@ uint16_t cm_io_get_api_version(void)
HRESULT cm_io_init(void) HRESULT cm_io_init(void)
{ {
cm_io_config_load(&cm_io_cfg, L".\\segatools.ini"); cm_io_config_load(&cm_io_cfg, get_config_path());
return S_OK; return S_OK;
} }

View File

@ -23,6 +23,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE cxb_hook_mod; static HMODULE cxb_hook_mod;
static process_entry_t cxb_startup; static process_entry_t cxb_startup;
@ -58,7 +59,7 @@ static DWORD CALLBACK cxb_pre_startup(void)
/* Config load */ /* Config load */
cxb_hook_config_load(&cxb_hook_cfg, L".\\segatools.ini"); cxb_hook_config_load(&cxb_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -110,7 +111,7 @@ static DWORD CALLBACK cxb_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End cxb_pre_startup ---\n"); dprintf("--- End cxb_pre_startup ---\n");

View File

@ -8,6 +8,7 @@
#include "cxbio/config.h" #include "cxbio/config.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static bool cxb_io_coin; static bool cxb_io_coin;
static int cxb_io_coins; static int cxb_io_coins;
@ -21,7 +22,7 @@ uint16_t cxb_io_get_api_version(void)
HRESULT cxb_io_revio_init(void) HRESULT cxb_io_revio_init(void)
{ {
dprintf("CXB IO: REVIO init\n"); dprintf("CXB IO: REVIO init\n");
cxb_io_config_load(&cxb_io_cfg, L".\\segatools.ini"); cxb_io_config_load(&cxb_io_cfg, get_config_path());
return S_OK; return S_OK;
} }
@ -75,4 +76,4 @@ HRESULT cxb_io_led_init(void)
} }
void cxb_io_led_update(int id, int color) void cxb_io_led_update(int id, int color)
{} {}

View File

@ -33,6 +33,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE diva_hook_mod; static HMODULE diva_hook_mod;
static process_entry_t diva_startup; static process_entry_t diva_startup;
@ -58,7 +59,7 @@ static DWORD CALLBACK diva_pre_startup(void)
/* Config load */ /* Config load */
diva_hook_config_load(&diva_hook_cfg, L".\\segatools.ini"); diva_hook_config_load(&diva_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -105,7 +106,7 @@ static DWORD CALLBACK diva_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End diva_pre_startup ---\n"); dprintf("--- End diva_pre_startup ---\n");

View File

@ -7,6 +7,7 @@
#include "divaio/divaio.h" #include "divaio/divaio.h"
#include "divaio/config.h" #include "divaio/config.h"
#include "util/env.h"
static unsigned int __stdcall diva_io_slider_thread_proc(void *ctx); static unsigned int __stdcall diva_io_slider_thread_proc(void *ctx);
@ -23,7 +24,7 @@ uint16_t diva_io_get_api_version(void)
HRESULT diva_io_jvs_init(void) HRESULT diva_io_jvs_init(void)
{ {
diva_io_config_load(&diva_io_cfg, L".\\segatools.ini"); diva_io_config_load(&diva_io_cfg, get_config_path());
return S_OK; return S_OK;
} }

View File

@ -6,6 +6,17 @@ all games.
Keyboard binding settings use Keyboard binding settings use
[Virtual-Key Codes](https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes). [Virtual-Key Codes](https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes).
## Config Path
The default file path for config file is `./segatools.ini`.
You can modify environment variable `SEGATOOLS_CONFIG_PATH` to another path.
For example, You can have a another start.bat with following code in it,
Then you can copy `segatools.ini` to `another_config.ini` but with different dns host in it
```bat
set SEGATOOLS_CONFIG_PATH=.\another_config.ini
```
## `[aimeio]` ## `[aimeio]`
Controls the card reader driver. Controls the card reader driver.

View File

@ -44,6 +44,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE fgo_hook_mod; static HMODULE fgo_hook_mod;
static process_entry_t fgo_startup; static process_entry_t fgo_startup;
@ -69,7 +70,7 @@ static DWORD CALLBACK fgo_pre_startup(void)
/* Load config */ /* Load config */
fgo_hook_config_load(&fgo_hook_cfg, L".\\segatools.ini"); fgo_hook_config_load(&fgo_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -147,7 +148,7 @@ static DWORD CALLBACK fgo_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End fgo_pre_startup ---\n"); dprintf("--- End fgo_pre_startup ---\n");

View File

@ -8,6 +8,7 @@
#include "fgoio/fgoio.h" #include "fgoio/fgoio.h"
#include "fgoio/config.h" #include "fgoio/config.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static uint8_t fgo_opbtn; static uint8_t fgo_opbtn;
static uint8_t fgo_gamebtn; static uint8_t fgo_gamebtn;
@ -23,7 +24,7 @@ uint16_t fgo_io_get_api_version(void)
HRESULT fgo_io_init(void) HRESULT fgo_io_init(void)
{ {
fgo_io_config_load(&fgo_io_cfg, L".\\segatools.ini"); fgo_io_config_load(&fgo_io_cfg, get_config_path());
return S_OK; return S_OK;
} }

View File

@ -36,6 +36,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE idac_hook_mod; static HMODULE idac_hook_mod;
static process_entry_t idac_startup; static process_entry_t idac_startup;
@ -49,7 +50,7 @@ static DWORD CALLBACK idac_pre_startup(void)
/* Config load */ /* Config load */
idac_hook_config_load(&idac_hook_cfg, L".\\segatools.ini"); idac_hook_config_load(&idac_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -109,7 +110,7 @@ static DWORD CALLBACK idac_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End idac_pre_startup ---\n"); dprintf("--- End idac_pre_startup ---\n");

View File

@ -12,6 +12,7 @@
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/str.h" #include "util/str.h"
#include "util/env.h"
static struct idac_io_config idac_io_cfg; static struct idac_io_config idac_io_cfg;
static const struct idac_io_backend *idac_io_backend; static const struct idac_io_backend *idac_io_backend;
@ -38,7 +39,7 @@ HRESULT idac_io_init(void)
return hr; return hr;
} }
idac_io_config_load(&idac_io_cfg, L".\\segatools.ini"); idac_io_config_load(&idac_io_cfg, get_config_path());
if (wstr_ieq(idac_io_cfg.mode, L"dinput")) { if (wstr_ieq(idac_io_cfg.mode, L"dinput")) {
hr = idac_di_init(&idac_io_cfg.di, inst, &idac_io_backend); hr = idac_di_init(&idac_io_cfg.di, inst, &idac_io_backend);

View File

@ -40,6 +40,7 @@
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/lib.h" #include "util/lib.h"
#include "util/env.h"
static HMODULE idz_hook_mod; static HMODULE idz_hook_mod;
static process_entry_t idz_startup; static process_entry_t idz_startup;
@ -55,7 +56,7 @@ static DWORD CALLBACK idz_pre_startup(void)
/* Config load */ /* Config load */
idz_hook_config_load(&idz_hook_cfg, L".\\segatools.ini"); idz_hook_config_load(&idz_hook_cfg, get_config_path());
module_path = module_file_name(NULL); module_path = module_file_name(NULL);
@ -136,7 +137,7 @@ static DWORD CALLBACK idz_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End idz_pre_startup ---\n"); dprintf("--- End idz_pre_startup ---\n");

View File

@ -12,6 +12,7 @@
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/str.h" #include "util/str.h"
#include "util/env.h"
static struct idz_io_config idz_io_cfg; static struct idz_io_config idz_io_cfg;
static const struct idz_io_backend *idz_io_backend; static const struct idz_io_backend *idz_io_backend;
@ -39,7 +40,7 @@ HRESULT idz_io_jvs_init(void)
return hr; return hr;
} }
idz_io_config_load(&idz_io_cfg, L".\\segatools.ini"); idz_io_config_load(&idz_io_cfg, get_config_path());
if (wstr_ieq(idz_io_cfg.mode, L"dinput")) { if (wstr_ieq(idz_io_cfg.mode, L"dinput")) {
hr = idz_di_init(&idz_io_cfg.di, inst, &idz_io_backend); hr = idz_di_init(&idz_io_cfg.di, inst, &idz_io_backend);

View File

@ -22,6 +22,7 @@
#include "unityhook/hook.h" #include "unityhook/hook.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE kemono_hook_mod; static HMODULE kemono_hook_mod;
static process_entry_t kemono_startup; static process_entry_t kemono_startup;
@ -35,7 +36,7 @@ static DWORD CALLBACK kemono_pre_startup(void) {
/* Load config */ /* Load config */
kemono_hook_cfg.aime.dll.path64 = true; kemono_hook_cfg.aime.dll.path64 = true;
kemono_hook_config_load(&kemono_hook_cfg, L".\\segatools.ini"); kemono_hook_config_load(&kemono_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -107,7 +108,7 @@ static DWORD CALLBACK kemono_pre_startup(void) {
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End kemono_pre_startup ---\n"); dprintf("--- End kemono_pre_startup ---\n");

View File

@ -7,6 +7,7 @@
#include "kemonoio/kemonoio.h" #include "kemonoio/kemonoio.h"
#include "kemonoio/config.h" #include "kemonoio/config.h"
#include "util/env.h"
static uint8_t kemono_opbtn; static uint8_t kemono_opbtn;
static uint16_t kemono_pbtn; static uint16_t kemono_pbtn;
@ -19,7 +20,7 @@ uint16_t kemono_io_get_api_version(void) {
} }
HRESULT kemono_io_init(void) { HRESULT kemono_io_init(void) {
kemono_io_config_load(&kemono_io_cfg, L".\\segatools.ini"); kemono_io_config_load(&kemono_io_cfg, get_config_path());
kemono_io_coins = 0; kemono_io_coins = 0;
@ -106,4 +107,4 @@ void kemono_io_led_set_colors(uint8_t board, uint8_t *rgb) {
void kemono_io_jvs_write_gpio(uint32_t state){ void kemono_io_jvs_write_gpio(uint32_t state){
} }

View File

@ -39,6 +39,7 @@
#include "unityhook/hook.h" #include "unityhook/hook.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE mai2_hook_mod; static HMODULE mai2_hook_mod;
static process_entry_t mai2_startup; static process_entry_t mai2_startup;
@ -54,7 +55,7 @@ static DWORD CALLBACK mai2_pre_startup(void)
/* Load config */ /* Load config */
mai2_hook_config_load(&mai2_hook_cfg, L".\\segatools.ini"); mai2_hook_config_load(&mai2_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -106,7 +107,7 @@ static DWORD CALLBACK mai2_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End mai2_pre_startup ---\n"); dprintf("--- End mai2_pre_startup ---\n");

View File

@ -5,6 +5,7 @@
#include "mai2io/mai2io.h" #include "mai2io/mai2io.h"
#include "mai2io/config.h" #include "mai2io/config.h"
#include "util/env.h"
static uint8_t mai2_opbtn; static uint8_t mai2_opbtn;
static uint16_t mai2_player1_btn; static uint16_t mai2_player1_btn;
@ -19,7 +20,7 @@ uint16_t mai2_io_get_api_version(void)
HRESULT mai2_io_init(void) HRESULT mai2_io_init(void)
{ {
mai2_io_config_load(&mai2_io_cfg, L".\\segatools.ini"); mai2_io_config_load(&mai2_io_cfg, get_config_path());
return S_OK; return S_OK;
} }
@ -140,4 +141,4 @@ void mai2_io_get_gamebtns(uint16_t *player1, uint16_t *player2)
if (player2 != NULL ){ if (player2 != NULL ){
*player2 = mai2_player2_btn; *player2 = mai2_player2_btn;
} }
} }

View File

@ -34,6 +34,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE mercury_hook_mod; static HMODULE mercury_hook_mod;
static process_entry_t mercury_startup; static process_entry_t mercury_startup;
@ -49,7 +50,7 @@ static DWORD CALLBACK mercury_pre_startup(void)
/* Load config */ /* Load config */
mercury_hook_config_load(&mercury_hook_cfg, L".\\segatools.ini"); mercury_hook_config_load(&mercury_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -102,7 +103,7 @@ static DWORD CALLBACK mercury_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End mercury_pre_startup ---\n"); dprintf("--- End mercury_pre_startup ---\n");

View File

@ -7,6 +7,7 @@
#include "mercuryio/mercuryio.h" #include "mercuryio/mercuryio.h"
#include "mercuryio/config.h" #include "mercuryio/config.h"
#include "mercuryhook/elisabeth.h" #include "mercuryhook/elisabeth.h"
#include "util/env.h"
static unsigned int __stdcall mercury_io_touch_thread_proc(void *ctx); static unsigned int __stdcall mercury_io_touch_thread_proc(void *ctx);
@ -23,7 +24,7 @@ uint16_t mercury_io_get_api_version(void)
HRESULT mercury_io_init(void) HRESULT mercury_io_init(void)
{ {
mercury_io_config_load(&mercury_io_cfg, L".\\segatools.ini"); mercury_io_config_load(&mercury_io_cfg, get_config_path());
return S_OK; return S_OK;
} }

View File

@ -14,6 +14,7 @@
#include "platform/nusec.h" #include "platform/nusec.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static process_entry_t app_startup; static process_entry_t app_startup;
@ -26,10 +27,10 @@ static DWORD CALLBACK app_pre_startup(void)
dprintf("--- Begin %s ---\n", __func__); dprintf("--- Begin %s ---\n", __func__);
clock_config_load(&clock_cfg, L".\\segatools.ini"); clock_config_load(&clock_cfg, get_config_path());
ds_config_load(&ds_cfg, L".\\segatools.ini"); ds_config_load(&ds_cfg, get_config_path());
nusec_config_load(&nusec_cfg, L".\\segatools.ini"); nusec_config_load(&nusec_cfg, get_config_path());
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
hr = clock_hook_init(&clock_cfg); hr = clock_hook_init(&clock_cfg);

View File

@ -31,7 +31,7 @@ if /I "%1"=="build" (
set VSVARSALL=!VSVARSALL! set VSVARSALL=!VSVARSALL!
set MESON=!MESON! set MESON=!MESON!
call :build call :build %2
echo. echo.
echo Build done! echo Build done!
@ -42,9 +42,12 @@ if /I "%1"=="zip" (
exit /b exit /b
) )
echo %~nx0 [action] echo %~nx0 [action] [switch]
echo build: Build the for both x86 and x64 echo build: Build the for both x86 and x64
echo /PROJECTONLY: Only create projects
echo.
echo zip: Make zip file echo zip: Make zip file
echo.
exit /b exit /b
rem This should works for Visual Studio 2017+ rem This should works for Visual Studio 2017+
@ -85,6 +88,7 @@ rem This should works for Visual Studio 2017+
) )
:detect-meson ( :detect-meson (
set MESON=""
for /f "tokens=* usebackq" %%i in (`where meson`) do set MESON="%%i" for /f "tokens=* usebackq" %%i in (`where meson`) do set MESON="%%i"
if not exist %MESON% ( if not exist %MESON% (
exit /b 1 exit /b 1
@ -98,28 +102,32 @@ rem This should works for Visual Studio 2017+
call %VSVARSALL% x64 call %VSVARSALL% x64
if exist %BUILD_DIR_64% ( if exist %BUILD_DIR_64% (
%MESON% setup %BUILD_DIR_64% --backend vs --buildtype release --reconfigure %MESON% setup %BUILD_DIR_64% --buildtype release --reconfigure
) else ( ) else (
%MESON% setup %BUILD_DIR_64% --backend vs --buildtype release %MESON% setup %BUILD_DIR_64% --backend vs --buildtype release
) )
pushd %BUILD_DIR_64% if /I not "%1"=="/PROJECTONLY" (
msbuild /m /p:Configuration=release /p:Platform=x64 segatools.sln pushd %BUILD_DIR_64%
popd msbuild /m /p:Configuration=release /p:Platform=x64 segatools.sln
popd
)
) )
:build_x86 ( :build_x86 (
call %VSVARSALL% x86 call %VSVARSALL% x86
if exist %BUILD_DIR_32% ( if exist %BUILD_DIR_32% (
%MESON% setup %BUILD_DIR_32% --backend vs --buildtype release --reconfigure %MESON% setup %BUILD_DIR_32% --buildtype release --reconfigure
) else ( ) else (
%MESON% setup %BUILD_DIR_32% --backend vs --buildtype release %MESON% setup %BUILD_DIR_32% --backend vs --buildtype release
) )
pushd %BUILD_DIR_32% if /I not "%1"=="/PROJECTONLY" (
msbuild /m /p:Configuration=release /p:Platform=Win32 segatools.sln pushd %BUILD_DIR_32%
popd msbuild /m /p:Configuration=release /p:Platform=Win32 segatools.sln
popd
)
) )
:end ( :end (

View File

@ -38,6 +38,7 @@
#include "unityhook/hook.h" #include "unityhook/hook.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE mu3_hook_mod; static HMODULE mu3_hook_mod;
static process_entry_t mu3_startup; static process_entry_t mu3_startup;
@ -51,7 +52,7 @@ static DWORD CALLBACK mu3_pre_startup(void)
/* Load config */ /* Load config */
mu3_hook_config_load(&mu3_hook_cfg, L".\\segatools.ini"); mu3_hook_config_load(&mu3_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -114,7 +115,7 @@ static DWORD CALLBACK mu3_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End mu3_pre_startup ---\n"); dprintf("--- End mu3_pre_startup ---\n");

View File

@ -9,6 +9,7 @@
#include "mu3io/ledoutput.h" #include "mu3io/ledoutput.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static uint8_t mu3_opbtn; static uint8_t mu3_opbtn;
static uint8_t mu3_left_btn; static uint8_t mu3_left_btn;
@ -28,7 +29,7 @@ uint16_t mu3_io_get_api_version(void)
HRESULT mu3_io_init(void) HRESULT mu3_io_init(void)
{ {
mu3_io_config_load(&mu3_io_cfg, L".\\segatools.ini"); mu3_io_config_load(&mu3_io_cfg, get_config_path());
dprintf("XInput: --- Begin configuration ---\n"); dprintf("XInput: --- Begin configuration ---\n");
dprintf("XInput: Mouse lever emulation : %i\n", mu3_io_cfg.use_mouse); dprintf("XInput: Mouse lever emulation : %i\n", mu3_io_cfg.use_mouse);

View File

@ -36,6 +36,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE swdc_hook_mod; static HMODULE swdc_hook_mod;
static process_entry_t swdc_startup; static process_entry_t swdc_startup;
@ -49,7 +50,7 @@ static DWORD CALLBACK swdc_pre_startup(void)
/* Config load */ /* Config load */
swdc_hook_config_load(&swdc_hook_cfg, L".\\segatools.ini"); swdc_hook_config_load(&swdc_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -112,7 +113,7 @@ static DWORD CALLBACK swdc_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End swdc_pre_startup ---\n"); dprintf("--- End swdc_pre_startup ---\n");

View File

@ -12,6 +12,7 @@
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/str.h" #include "util/str.h"
#include "util/env.h"
static struct swdc_io_config swdc_io_cfg; static struct swdc_io_config swdc_io_cfg;
static const struct swdc_io_backend *swdc_io_backend; static const struct swdc_io_backend *swdc_io_backend;
@ -38,7 +39,7 @@ HRESULT swdc_io_init(void)
return hr; return hr;
} }
swdc_io_config_load(&swdc_io_cfg, L".\\segatools.ini"); swdc_io_config_load(&swdc_io_cfg, get_config_path());
if (wstr_ieq(swdc_io_cfg.mode, L"dinput")) { if (wstr_ieq(swdc_io_cfg.mode, L"dinput")) {
hr = swdc_di_init(&swdc_io_cfg.di, inst, &swdc_io_backend); hr = swdc_di_init(&swdc_io_cfg.di, inst, &swdc_io_backend);

View File

@ -26,6 +26,7 @@
#include "platform/platform.h" #include "platform/platform.h"
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/env.h"
static HMODULE tokyo_hook_mod; static HMODULE tokyo_hook_mod;
static process_entry_t tokyo_startup; static process_entry_t tokyo_startup;
@ -39,7 +40,7 @@ static DWORD CALLBACK tokyo_pre_startup(void)
/* Load config */ /* Load config */
tokyo_hook_config_load(&tokyo_hook_cfg, L".\\segatools.ini"); tokyo_hook_config_load(&tokyo_hook_cfg, get_config_path());
/* Hook Win32 APIs */ /* Hook Win32 APIs */
@ -80,7 +81,7 @@ static DWORD CALLBACK tokyo_pre_startup(void)
/* Initialize debug helpers */ /* Initialize debug helpers */
spike_hook_init(L".\\segatools.ini"); spike_hook_init(get_config_path());
dprintf("--- End tokyo_pre_startup ---\n"); dprintf("--- End tokyo_pre_startup ---\n");

View File

@ -12,6 +12,7 @@
#include "util/dprintf.h" #include "util/dprintf.h"
#include "util/str.h" #include "util/str.h"
#include "util/env.h"
static struct tokyo_io_config tokyo_io_cfg; static struct tokyo_io_config tokyo_io_cfg;
static const struct tokyo_io_backend *tokyo_io_backend; static const struct tokyo_io_backend *tokyo_io_backend;
@ -38,7 +39,7 @@ HRESULT tokyo_io_init(void)
return hr; return hr;
} }
tokyo_io_config_load(&tokyo_io_cfg, L".\\segatools.ini"); tokyo_io_config_load(&tokyo_io_cfg, get_config_path());
if (wstr_ieq(tokyo_io_cfg.mode, L"keyboard")) { if (wstr_ieq(tokyo_io_cfg.mode, L"keyboard")) {
hr = tokyo_kb_init(&tokyo_io_cfg.kb, &tokyo_io_backend); hr = tokyo_kb_init(&tokyo_io_cfg.kb, &tokyo_io_backend);

11
util/env.c 100644
View File

@ -0,0 +1,11 @@
#include "env.h"
const wchar_t* get_config_path() {
static wchar_t path[MAX_PATH];
if (!GetEnvironmentVariableW(L"SEGATOOLS_CONFIG_PATH", path, MAX_PATH))
{
return L".\\segatools.ini";
}
return path;
}

4
util/env.h 100644
View File

@ -0,0 +1,4 @@
#pragma once
#include <windows.h>
const wchar_t* get_config_path();

View File

@ -24,5 +24,7 @@ util_lib = static_library(
'lib.h', 'lib.h',
'str.c', 'str.c',
'str.h', 'str.h',
'env.c',
'env.h',
], ],
) )