diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..a8eacdb --- /dev/null +++ b/.clang-format @@ -0,0 +1,4 @@ +--- +BasedOnStyle: Google +IndentWidth: 4 +--- diff --git a/aimeio/aimeio.c b/aimeio/aimeio.c index 17de30e..8192bae 100644 --- a/aimeio/aimeio.c +++ b/aimeio/aimeio.c @@ -12,6 +12,7 @@ #include "util/crc.h" #include "util/dprintf.h" +#include "util/env.h" struct aime_io_config { wchar_t aime_path[MAX_PATH]; @@ -222,7 +223,7 @@ uint16_t aime_io_get_api_version(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; } diff --git a/carolhook/dllmain.c b/carolhook/dllmain.c index cc422b9..762b33d 100644 --- a/carolhook/dllmain.c +++ b/carolhook/dllmain.c @@ -53,6 +53,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE carol_hook_mod; static process_entry_t carol_startup; @@ -100,7 +101,7 @@ static DWORD CALLBACK carol_pre_startup(void) /* 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 */ @@ -164,7 +165,7 @@ static DWORD CALLBACK carol_pre_startup(void) } /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End carol_pre_startup ---\n"); diff --git a/carolio/carolio.c b/carolio/carolio.c index 5368da6..7582489 100644 --- a/carolio/carolio.c +++ b/carolio/carolio.c @@ -8,6 +8,7 @@ #include "carolio/carolio.h" #include "carolio/config.h" #include "util/dprintf.h" +#include "util/env.h" 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) { - carol_io_config_load(&carol_io_cfg, L".\\segatools.ini"); + carol_io_config_load(&carol_io_cfg, get_config_path()); return S_OK; } @@ -178,4 +179,4 @@ static unsigned int __stdcall carol_io_touch_thread_proc(void *ctx) } return 0; -} \ No newline at end of file +} diff --git a/chunihook/dllmain.c b/chunihook/dllmain.c index 81c8910..d421e23 100644 --- a/chunihook/dllmain.c +++ b/chunihook/dllmain.c @@ -36,6 +36,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE chuni_hook_mod; static process_entry_t chuni_startup; @@ -71,7 +72,7 @@ static DWORD CALLBACK chuni_pre_startup(void) /* 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 */ @@ -129,7 +130,7 @@ static DWORD CALLBACK chuni_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End chuni_pre_startup ---\n"); diff --git a/chuniio/chuniio.c b/chuniio/chuniio.c index 27fe7b0..5d87215 100644 --- a/chuniio/chuniio.c +++ b/chuniio/chuniio.c @@ -10,6 +10,7 @@ #include "chuniio/ledoutput.h" #include "util/dprintf.h" +#include "util/env.h" 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) { - chuni_io_config_load(&chuni_io_cfg, L".\\segatools.ini"); + chuni_io_config_load(&chuni_io_cfg, get_config_path()); led_init_mutex = CreateMutex( NULL, // default security attributes diff --git a/chusanhook/dllmain.c b/chusanhook/dllmain.c index 85c6228..9a2f5da 100644 --- a/chusanhook/dllmain.c +++ b/chusanhook/dllmain.c @@ -49,6 +49,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE chusan_hook_mod; static process_entry_t chusan_startup; @@ -84,7 +85,7 @@ static DWORD CALLBACK chusan_pre_startup(void) /* 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 */ @@ -173,7 +174,7 @@ static DWORD CALLBACK chusan_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End chusan_pre_startup ---\n"); diff --git a/cmhook/dllmain.c b/cmhook/dllmain.c index 7020f75..03ace58 100644 --- a/cmhook/dllmain.c +++ b/cmhook/dllmain.c @@ -35,6 +35,7 @@ #include "unityhook/hook.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE cm_hook_mod; static process_entry_t cm_startup; @@ -48,7 +49,7 @@ static DWORD CALLBACK cm_pre_startup(void) /* 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 */ @@ -105,7 +106,7 @@ static DWORD CALLBACK cm_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End cm_pre_startup ---\n"); diff --git a/cmio/cmio.c b/cmio/cmio.c index c2dbfa5..e1cacde 100644 --- a/cmio/cmio.c +++ b/cmio/cmio.c @@ -6,6 +6,7 @@ #include "cmio/cmio.h" #include "cmio/config.h" +#include "util/env.h" static uint8_t cm_opbtn; 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) { - cm_io_config_load(&cm_io_cfg, L".\\segatools.ini"); + cm_io_config_load(&cm_io_cfg, get_config_path()); return S_OK; } diff --git a/cxbhook/dllmain.c b/cxbhook/dllmain.c index 18aaa7f..d644b5e 100644 --- a/cxbhook/dllmain.c +++ b/cxbhook/dllmain.c @@ -23,6 +23,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE cxb_hook_mod; static process_entry_t cxb_startup; @@ -58,7 +59,7 @@ static DWORD CALLBACK cxb_pre_startup(void) /* 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 */ @@ -110,7 +111,7 @@ static DWORD CALLBACK cxb_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End cxb_pre_startup ---\n"); diff --git a/cxbio/cxbio.c b/cxbio/cxbio.c index d021d3c..fce594d 100644 --- a/cxbio/cxbio.c +++ b/cxbio/cxbio.c @@ -8,6 +8,7 @@ #include "cxbio/config.h" #include "util/dprintf.h" +#include "util/env.h" static bool cxb_io_coin; static int cxb_io_coins; @@ -21,7 +22,7 @@ uint16_t cxb_io_get_api_version(void) HRESULT cxb_io_revio_init(void) { 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; } @@ -75,4 +76,4 @@ HRESULT cxb_io_led_init(void) } void cxb_io_led_update(int id, int color) -{} \ No newline at end of file +{} diff --git a/divahook/dllmain.c b/divahook/dllmain.c index 337eff5..eb6e16f 100644 --- a/divahook/dllmain.c +++ b/divahook/dllmain.c @@ -33,6 +33,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE diva_hook_mod; static process_entry_t diva_startup; @@ -58,7 +59,7 @@ static DWORD CALLBACK diva_pre_startup(void) /* 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 */ @@ -105,7 +106,7 @@ static DWORD CALLBACK diva_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End diva_pre_startup ---\n"); diff --git a/divaio/divaio.c b/divaio/divaio.c index 9976cb7..0001f2e 100644 --- a/divaio/divaio.c +++ b/divaio/divaio.c @@ -7,6 +7,7 @@ #include "divaio/divaio.h" #include "divaio/config.h" +#include "util/env.h" 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) { - diva_io_config_load(&diva_io_cfg, L".\\segatools.ini"); + diva_io_config_load(&diva_io_cfg, get_config_path()); return S_OK; } diff --git a/doc/config/common.md b/doc/config/common.md index 3c86751..0033b5e 100644 --- a/doc/config/common.md +++ b/doc/config/common.md @@ -6,6 +6,17 @@ all games. Keyboard binding settings use [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]` Controls the card reader driver. diff --git a/fgohook/dllmain.c b/fgohook/dllmain.c index 9bc3694..e82423f 100644 --- a/fgohook/dllmain.c +++ b/fgohook/dllmain.c @@ -44,6 +44,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE fgo_hook_mod; static process_entry_t fgo_startup; @@ -69,7 +70,7 @@ static DWORD CALLBACK fgo_pre_startup(void) /* 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 */ @@ -147,7 +148,7 @@ static DWORD CALLBACK fgo_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End fgo_pre_startup ---\n"); diff --git a/fgoio/fgoio.c b/fgoio/fgoio.c index 61f7d77..4a362a0 100644 --- a/fgoio/fgoio.c +++ b/fgoio/fgoio.c @@ -8,6 +8,7 @@ #include "fgoio/fgoio.h" #include "fgoio/config.h" #include "util/dprintf.h" +#include "util/env.h" static uint8_t fgo_opbtn; static uint8_t fgo_gamebtn; @@ -23,7 +24,7 @@ uint16_t fgo_io_get_api_version(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; } diff --git a/idachook/dllmain.c b/idachook/dllmain.c index 2e82882..0e955e8 100644 --- a/idachook/dllmain.c +++ b/idachook/dllmain.c @@ -36,6 +36,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE idac_hook_mod; static process_entry_t idac_startup; @@ -49,7 +50,7 @@ static DWORD CALLBACK idac_pre_startup(void) /* 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 */ @@ -109,7 +110,7 @@ static DWORD CALLBACK idac_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End idac_pre_startup ---\n"); diff --git a/idacio/dllmain.c b/idacio/dllmain.c index f295f90..6a5dba8 100644 --- a/idacio/dllmain.c +++ b/idacio/dllmain.c @@ -12,6 +12,7 @@ #include "util/dprintf.h" #include "util/str.h" +#include "util/env.h" static struct idac_io_config idac_io_cfg; static const struct idac_io_backend *idac_io_backend; @@ -38,7 +39,7 @@ HRESULT idac_io_init(void) 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")) { hr = idac_di_init(&idac_io_cfg.di, inst, &idac_io_backend); diff --git a/idzhook/dllmain.c b/idzhook/dllmain.c index e9d807a..edf6cbb 100644 --- a/idzhook/dllmain.c +++ b/idzhook/dllmain.c @@ -40,6 +40,7 @@ #include "util/dprintf.h" #include "util/lib.h" +#include "util/env.h" static HMODULE idz_hook_mod; static process_entry_t idz_startup; @@ -55,7 +56,7 @@ static DWORD CALLBACK idz_pre_startup(void) /* 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); @@ -136,7 +137,7 @@ static DWORD CALLBACK idz_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End idz_pre_startup ---\n"); diff --git a/idzio/dllmain.c b/idzio/dllmain.c index 5c8592d..39d08fc 100644 --- a/idzio/dllmain.c +++ b/idzio/dllmain.c @@ -12,6 +12,7 @@ #include "util/dprintf.h" #include "util/str.h" +#include "util/env.h" static struct idz_io_config idz_io_cfg; static const struct idz_io_backend *idz_io_backend; @@ -39,7 +40,7 @@ HRESULT idz_io_jvs_init(void) 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")) { hr = idz_di_init(&idz_io_cfg.di, inst, &idz_io_backend); diff --git a/kemonohook/dllmain.c b/kemonohook/dllmain.c index 5eac13d..0fedd5e 100644 --- a/kemonohook/dllmain.c +++ b/kemonohook/dllmain.c @@ -22,6 +22,7 @@ #include "unityhook/hook.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE kemono_hook_mod; static process_entry_t kemono_startup; @@ -35,7 +36,7 @@ static DWORD CALLBACK kemono_pre_startup(void) { /* Load config */ 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 */ @@ -107,7 +108,7 @@ static DWORD CALLBACK kemono_pre_startup(void) { /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End kemono_pre_startup ---\n"); diff --git a/kemonoio/kemonoio.c b/kemonoio/kemonoio.c index 5b24c28..932abb1 100644 --- a/kemonoio/kemonoio.c +++ b/kemonoio/kemonoio.c @@ -7,6 +7,7 @@ #include "kemonoio/kemonoio.h" #include "kemonoio/config.h" +#include "util/env.h" static uint8_t kemono_opbtn; static uint16_t kemono_pbtn; @@ -19,7 +20,7 @@ uint16_t kemono_io_get_api_version(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; @@ -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){ -} \ No newline at end of file +} diff --git a/mai2hook/dllmain.c b/mai2hook/dllmain.c index ac14649..0d8b20a 100644 --- a/mai2hook/dllmain.c +++ b/mai2hook/dllmain.c @@ -39,6 +39,7 @@ #include "unityhook/hook.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE mai2_hook_mod; static process_entry_t mai2_startup; @@ -54,7 +55,7 @@ static DWORD CALLBACK mai2_pre_startup(void) /* 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 */ @@ -106,7 +107,7 @@ static DWORD CALLBACK mai2_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End mai2_pre_startup ---\n"); diff --git a/mai2io/mai2io.c b/mai2io/mai2io.c index 40d6bfb..ffdbfcf 100644 --- a/mai2io/mai2io.c +++ b/mai2io/mai2io.c @@ -5,6 +5,7 @@ #include "mai2io/mai2io.h" #include "mai2io/config.h" +#include "util/env.h" static uint8_t mai2_opbtn; static uint16_t mai2_player1_btn; @@ -19,7 +20,7 @@ uint16_t mai2_io_get_api_version(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; } @@ -140,4 +141,4 @@ void mai2_io_get_gamebtns(uint16_t *player1, uint16_t *player2) if (player2 != NULL ){ *player2 = mai2_player2_btn; } -} \ No newline at end of file +} diff --git a/mercuryhook/dllmain.c b/mercuryhook/dllmain.c index ea30458..43984f9 100644 --- a/mercuryhook/dllmain.c +++ b/mercuryhook/dllmain.c @@ -34,6 +34,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE mercury_hook_mod; static process_entry_t mercury_startup; @@ -49,7 +50,7 @@ static DWORD CALLBACK mercury_pre_startup(void) /* 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 */ @@ -102,7 +103,7 @@ static DWORD CALLBACK mercury_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End mercury_pre_startup ---\n"); diff --git a/mercuryio/mercuryio.c b/mercuryio/mercuryio.c index 6d38ff1..438c9e6 100644 --- a/mercuryio/mercuryio.c +++ b/mercuryio/mercuryio.c @@ -7,6 +7,7 @@ #include "mercuryio/mercuryio.h" #include "mercuryio/config.h" #include "mercuryhook/elisabeth.h" +#include "util/env.h" 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) { - mercury_io_config_load(&mercury_io_cfg, L".\\segatools.ini"); + mercury_io_config_load(&mercury_io_cfg, get_config_path()); return S_OK; } diff --git a/minihook/dllmain.c b/minihook/dllmain.c index bdc45b8..c72609f 100644 --- a/minihook/dllmain.c +++ b/minihook/dllmain.c @@ -14,6 +14,7 @@ #include "platform/nusec.h" #include "util/dprintf.h" +#include "util/env.h" static process_entry_t app_startup; @@ -26,10 +27,10 @@ static DWORD CALLBACK app_pre_startup(void) dprintf("--- Begin %s ---\n", __func__); - clock_config_load(&clock_cfg, L".\\segatools.ini"); - ds_config_load(&ds_cfg, L".\\segatools.ini"); - nusec_config_load(&nusec_cfg, L".\\segatools.ini"); - spike_hook_init(L".\\segatools.ini"); + clock_config_load(&clock_cfg, get_config_path()); + ds_config_load(&ds_cfg, get_config_path()); + nusec_config_load(&nusec_cfg, get_config_path()); + spike_hook_init(get_config_path()); hr = clock_hook_init(&clock_cfg); diff --git a/msvc-build.bat b/msvc-build.bat index d485839..ae060f0 100644 --- a/msvc-build.bat +++ b/msvc-build.bat @@ -31,7 +31,7 @@ if /I "%1"=="build" ( set VSVARSALL=!VSVARSALL! set MESON=!MESON! - call :build + call :build %2 echo. echo Build done! @@ -42,9 +42,12 @@ if /I "%1"=="zip" ( exit /b ) -echo %~nx0 [action] +echo %~nx0 [action] [switch] echo build: Build the for both x86 and x64 +echo /PROJECTONLY: Only create projects +echo. echo zip: Make zip file +echo. exit /b rem This should works for Visual Studio 2017+ @@ -85,6 +88,7 @@ rem This should works for Visual Studio 2017+ ) :detect-meson ( + set MESON="" for /f "tokens=* usebackq" %%i in (`where meson`) do set MESON="%%i" if not exist %MESON% ( exit /b 1 @@ -98,28 +102,32 @@ rem This should works for Visual Studio 2017+ call %VSVARSALL% x64 if exist %BUILD_DIR_64% ( - %MESON% setup %BUILD_DIR_64% --backend vs --buildtype release --reconfigure + %MESON% setup %BUILD_DIR_64% --buildtype release --reconfigure ) else ( %MESON% setup %BUILD_DIR_64% --backend vs --buildtype release ) - pushd %BUILD_DIR_64% - msbuild /m /p:Configuration=release /p:Platform=x64 segatools.sln - popd + if /I not "%1"=="/PROJECTONLY" ( + pushd %BUILD_DIR_64% + msbuild /m /p:Configuration=release /p:Platform=x64 segatools.sln + popd + ) ) :build_x86 ( call %VSVARSALL% x86 if exist %BUILD_DIR_32% ( - %MESON% setup %BUILD_DIR_32% --backend vs --buildtype release --reconfigure + %MESON% setup %BUILD_DIR_32% --buildtype release --reconfigure ) else ( %MESON% setup %BUILD_DIR_32% --backend vs --buildtype release ) - pushd %BUILD_DIR_32% - msbuild /m /p:Configuration=release /p:Platform=Win32 segatools.sln - popd + if /I not "%1"=="/PROJECTONLY" ( + pushd %BUILD_DIR_32% + msbuild /m /p:Configuration=release /p:Platform=Win32 segatools.sln + popd + ) ) :end ( diff --git a/mu3hook/dllmain.c b/mu3hook/dllmain.c index e991b40..e4336e9 100644 --- a/mu3hook/dllmain.c +++ b/mu3hook/dllmain.c @@ -38,6 +38,7 @@ #include "unityhook/hook.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE mu3_hook_mod; static process_entry_t mu3_startup; @@ -51,7 +52,7 @@ static DWORD CALLBACK mu3_pre_startup(void) /* 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 */ @@ -114,7 +115,7 @@ static DWORD CALLBACK mu3_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End mu3_pre_startup ---\n"); diff --git a/mu3io/mu3io.c b/mu3io/mu3io.c index 2658612..aaa5687 100644 --- a/mu3io/mu3io.c +++ b/mu3io/mu3io.c @@ -9,6 +9,7 @@ #include "mu3io/ledoutput.h" #include "util/dprintf.h" +#include "util/env.h" static uint8_t mu3_opbtn; static uint8_t mu3_left_btn; @@ -28,7 +29,7 @@ uint16_t mu3_io_get_api_version(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: Mouse lever emulation : %i\n", mu3_io_cfg.use_mouse); diff --git a/swdchook/dllmain.c b/swdchook/dllmain.c index bd6a1b3..d83798c 100644 --- a/swdchook/dllmain.c +++ b/swdchook/dllmain.c @@ -36,6 +36,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE swdc_hook_mod; static process_entry_t swdc_startup; @@ -49,7 +50,7 @@ static DWORD CALLBACK swdc_pre_startup(void) /* 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 */ @@ -112,7 +113,7 @@ static DWORD CALLBACK swdc_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End swdc_pre_startup ---\n"); diff --git a/swdcio/dllmain.c b/swdcio/dllmain.c index c2c5078..8057e23 100644 --- a/swdcio/dllmain.c +++ b/swdcio/dllmain.c @@ -12,6 +12,7 @@ #include "util/dprintf.h" #include "util/str.h" +#include "util/env.h" static struct swdc_io_config swdc_io_cfg; static const struct swdc_io_backend *swdc_io_backend; @@ -38,7 +39,7 @@ HRESULT swdc_io_init(void) 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")) { hr = swdc_di_init(&swdc_io_cfg.di, inst, &swdc_io_backend); diff --git a/tokyohook/dllmain.c b/tokyohook/dllmain.c index e39fcff..19a1517 100644 --- a/tokyohook/dllmain.c +++ b/tokyohook/dllmain.c @@ -26,6 +26,7 @@ #include "platform/platform.h" #include "util/dprintf.h" +#include "util/env.h" static HMODULE tokyo_hook_mod; static process_entry_t tokyo_startup; @@ -39,7 +40,7 @@ static DWORD CALLBACK tokyo_pre_startup(void) /* 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 */ @@ -80,7 +81,7 @@ static DWORD CALLBACK tokyo_pre_startup(void) /* Initialize debug helpers */ - spike_hook_init(L".\\segatools.ini"); + spike_hook_init(get_config_path()); dprintf("--- End tokyo_pre_startup ---\n"); diff --git a/tokyoio/dllmain.c b/tokyoio/dllmain.c index 76c81ac..18d0039 100644 --- a/tokyoio/dllmain.c +++ b/tokyoio/dllmain.c @@ -12,6 +12,7 @@ #include "util/dprintf.h" #include "util/str.h" +#include "util/env.h" static struct tokyo_io_config tokyo_io_cfg; static const struct tokyo_io_backend *tokyo_io_backend; @@ -38,7 +39,7 @@ HRESULT tokyo_io_init(void) 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")) { hr = tokyo_kb_init(&tokyo_io_cfg.kb, &tokyo_io_backend); diff --git a/util/env.c b/util/env.c new file mode 100644 index 0000000..ae25a3f --- /dev/null +++ b/util/env.c @@ -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; +} diff --git a/util/env.h b/util/env.h new file mode 100644 index 0000000..c62194a --- /dev/null +++ b/util/env.h @@ -0,0 +1,4 @@ +#pragma once +#include + +const wchar_t* get_config_path(); diff --git a/util/meson.build b/util/meson.build index 2c29609..4acae1a 100644 --- a/util/meson.build +++ b/util/meson.build @@ -24,5 +24,7 @@ util_lib = static_library( 'lib.h', 'str.c', 'str.h', + 'env.c', + 'env.h', ], )