mirror of
https://github.com/love2d/love.git
synced 2026-08-21 05:00:08 +02:00
LOVE arguments now work with Unicode in Windows.
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
@@ -61,7 +61,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="lua.lib d/SDLmain.lib d/SDL.lib opengl32.lib glu32.lib DevIL.lib freetype.lib physfs.lib ws2_32.lib openal32.lib libmodplug.lib libmpg123.lib libogg.lib libvorbis.lib libvorbisfile.lib libFLAC_static_d.lib libFLAC++_static_d.lib"
|
||||
AdditionalDependencies="lua.lib SDLmain.lib SDL.lib opengl32.lib glu32.lib DevIL.lib freetype.lib physfs.lib ws2_32.lib openal32.lib libmodplug.lib libmpg123.lib libogg.lib libvorbis.lib libvorbisfile.lib libFLAC_static_d.lib libFLAC++_static_d.lib"
|
||||
AdditionalLibraryDirectories="lib;Debug"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
|
||||
@@ -62,4 +62,8 @@
|
||||
# define LOVE_EXPORT
|
||||
#endif
|
||||
|
||||
#if defined(LOVE_WINDOWS)
|
||||
# define LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
#endif
|
||||
|
||||
#endif // LOVE_CONFIG_H
|
||||
|
||||
+59
-5
@@ -24,6 +24,10 @@
|
||||
#include <common/runtime.h>
|
||||
#include <common/MemoryData.h>
|
||||
|
||||
#ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
#include <windows.h>
|
||||
#endif // #ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
|
||||
#ifdef LOVE_BUILD_EXE
|
||||
|
||||
// SDL
|
||||
@@ -120,10 +124,56 @@ extern "C" LOVE_EXPORT int luaopen_love(lua_State * L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
|
||||
void get_utf8_arguments(int & argc, char **& argv)
|
||||
{
|
||||
LPWSTR cmd = GetCommandLineW();
|
||||
|
||||
if(!cmd)
|
||||
return;
|
||||
|
||||
LPWSTR * argv_w = CommandLineToArgvW(cmd, &argc);
|
||||
|
||||
argv = new char*[argc];
|
||||
|
||||
for(int i = 0; i<argc; ++i)
|
||||
{
|
||||
// Size of wide char buffer (plus one for trailing '\0').
|
||||
size_t wide_len = wcslen(argv_w[i])+1;
|
||||
|
||||
// Get size in UTF-8.
|
||||
int utf8_size = WideCharToMultiByte(CP_UTF8, 0, argv_w[i], wide_len, argv[i], 0, 0, 0);
|
||||
|
||||
argv[i] = new char[utf8_size];
|
||||
|
||||
// Convert to UTF-8.
|
||||
int ok = WideCharToMultiByte(CP_UTF8, 0, argv_w[i], wide_len, argv[i], utf8_size, 0, 0);
|
||||
|
||||
int len = strlen(argv[i]);
|
||||
|
||||
if(!ok)
|
||||
printf("Warning: could not convert to UTF8.\n");
|
||||
}
|
||||
|
||||
LocalFree(argv_w);
|
||||
}
|
||||
|
||||
#endif // LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
|
||||
#ifdef LOVE_BUILD_EXE
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
|
||||
#ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
int hack_argc = 0;
|
||||
char ** hack_argv = 0;
|
||||
get_utf8_arguments(hack_argc, hack_argv);
|
||||
argc = hack_argc;
|
||||
argv = hack_argv;
|
||||
#endif // LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
|
||||
// Oh, you just want the version? Okay!
|
||||
if(argc > 1 && strcmp(argv[1],"--version") == 0) {
|
||||
printf("This is LOVE %s (%s), the unquestionably awesome 2D game engine.\n", love::VERSION_STR, love::VERSION_CODENAME);
|
||||
@@ -166,11 +216,15 @@ int main(int argc, char ** argv)
|
||||
|
||||
lua_close(L);
|
||||
|
||||
#if defined(LOVE_DEBUG) && defined(LOVE_WINDOWS)
|
||||
printf("(press key)\n");
|
||||
getchar();
|
||||
#endif
|
||||
printf("Done. This was: %s (%s)\n", love::VERSION_STR, love::VERSION_CODENAME);
|
||||
#ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
if(hack_argv)
|
||||
{
|
||||
for(int i = 0; i<hack_argc; ++i)
|
||||
delete [] hack_argv[i];
|
||||
delete [] hack_argv;
|
||||
}
|
||||
#endif // LOVE_LEGENDARY_UTF8_ARGV_HACK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user