Windows: redirect stdout to the parent command prompt when love.exe --version is run.

This commit is contained in:
Alex Szpakowski
2018-01-06 00:59:09 -04:00
parent 3857d09132
commit f66753fec2
3 changed files with 38 additions and 14 deletions
+4
View File
@@ -151,6 +151,10 @@ static DoneAction runlove(int argc, char **argv, int &retval)
// Oh, you just want the version? Okay!
if (argc > 1 && strcmp(argv[1], "--version") == 0)
{
#ifdef LOVE_LEGENDARY_CONSOLE_IO_HACK
const char *err = nullptr;
love_openConsole(err);
#endif
printf("LOVE %s (%s)\n", love_version(), love_codename());
retval = 0;
return DONE_QUIT;
+30 -14
View File
@@ -455,15 +455,13 @@ static bool IsWindowsVistaOrGreater()
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, mask) != FALSE;
}
int w__openConsole(lua_State *L)
bool love_openConsole(const char *&err)
{
static bool is_open = false;
err = nullptr;
if (is_open)
{
love::luax_pushboolean(L, is_open);
return 1;
}
return true;
is_open = true;
@@ -476,8 +474,8 @@ int w__openConsole(lua_State *L)
if (!AllocConsole())
{
is_open = false;
love::luax_pushboolean(L, is_open);
return 1;
err = "Could not create console.";
return is_open;
}
SetConsoleTitle(TEXT("LOVE Console"));
@@ -495,20 +493,38 @@ int w__openConsole(lua_State *L)
// Redirect stdout.
fp = freopen("CONOUT$", "w", stdout);
if (L && fp == NULL)
return luaL_error(L, "Console redirection of stdout failed.");
if (fp == NULL)
{
err = "Console redirection of stdout failed.";
return is_open;
}
// Redirect stdin.
fp = freopen("CONIN$", "r", stdin);
if (L && fp == NULL)
return luaL_error(L, "Console redirection of stdin failed.");
if (fp == NULL)
{
err = "Console redirection of stdin failed.";
return is_open;
}
// Redirect stderr.
fp = freopen("CONOUT$", "w", stderr);
if (L && fp == NULL)
return luaL_error(L, "Console redirection of stderr failed.");
if (fp == NULL)
{
err = "Console redirection of stderr failed.";
return is_open;
}
love::luax_pushboolean(L, is_open);
return is_open;
}
int w__openConsole(lua_State *L)
{
const char *err = nullptr;
bool isopen = love_openConsole(err);
if (err != nullptr)
return luaL_error(L, err);
love::luax_pushboolean(L, isopen);
return 1;
}
+4
View File
@@ -38,6 +38,10 @@ LOVE_EXPORT int luaopen_love(lua_State *L);
LOVE_EXPORT int luaopen_love_nogame(lua_State *L);
LOVE_EXPORT int luaopen_love_boot(lua_State *L);
#ifdef LOVE_LEGENDARY_CONSOLE_IO_HACK
LOVE_EXPORT bool love_openConsole(const char *&err);
#endif
#ifdef __cplusplus
}
#endif