mirror of
https://github.com/moparisthebest/curl
synced 2025-01-10 13:38:04 -05:00
curl: enabled Windows VT Support and UTF-8 output
Enabled Console VT support (if running OS supports VT) in tool_main.c. Fixes #3008 Closes #3011
This commit is contained in:
parent
454fa3fd7b
commit
becfe1233f
@ -236,6 +236,56 @@ static void main_free(struct GlobalConfig *config)
|
||||
config->last = NULL;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
/* TerminalSettings for Windows */
|
||||
struct TerminalSettings {
|
||||
HANDLE hStdOut;
|
||||
DWORD dwOutputMode;
|
||||
UINT nCodepage;
|
||||
}TerminalSettings;
|
||||
#endif
|
||||
|
||||
static void configure_terminal(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
/*
|
||||
* If we're running Windows, enable VT output & set codepage to UTF-8.
|
||||
* Note: VT mode flag can be set on any version of Windows, but VT
|
||||
* processing only performed on Win10 >= Creators Update)
|
||||
*/
|
||||
|
||||
/* Define the VT flags in case we're building with an older SDK */
|
||||
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
|
||||
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
|
||||
#endif
|
||||
|
||||
/* Cache current codepage (will restore on exit) & set codepage to UTF-8 */
|
||||
memset(&TerminalSettings, 0, sizeof(TerminalSettings));
|
||||
TerminalSettings.nCodepage = GetConsoleOutputCP();
|
||||
SetConsoleOutputCP(65001);
|
||||
|
||||
/* Enable VT output */
|
||||
TerminalSettings.hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
if((TerminalSettings.hStdOut != INVALID_HANDLE_VALUE)
|
||||
&& (GetConsoleMode(TerminalSettings.hStdOut,
|
||||
&TerminalSettings.dwOutputMode))) {
|
||||
SetConsoleMode(TerminalSettings.hStdOut,
|
||||
TerminalSettings.dwOutputMode
|
||||
| ENABLE_VIRTUAL_TERMINAL_PROCESSING);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void restore_terminal(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
/* Restore Console output mode and codepage to whatever they were
|
||||
* when Curl started */
|
||||
SetConsoleMode(TerminalSettings.hStdOut, TerminalSettings.dwOutputMode);
|
||||
SetConsoleOutputCP(TerminalSettings.nCodepage);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
** curl tool main function.
|
||||
*/
|
||||
@ -245,6 +295,9 @@ int main(int argc, char *argv[])
|
||||
struct GlobalConfig global;
|
||||
memset(&global, 0, sizeof(global));
|
||||
|
||||
/* Perform any platform-specific terminal configuration */
|
||||
configure_terminal();
|
||||
|
||||
main_checkfds();
|
||||
|
||||
#if defined(HAVE_SIGNAL) && defined(SIGPIPE)
|
||||
@ -270,6 +323,9 @@ int main(int argc, char *argv[])
|
||||
main_free(&global);
|
||||
}
|
||||
|
||||
/* Return the terminal to its original state */
|
||||
restore_terminal();
|
||||
|
||||
#ifdef __NOVELL_LIBC__
|
||||
if(getenv("_IN_NETWARE_BASH_") == NULL)
|
||||
tool_pressanykey();
|
||||
|
12
winbuild/makedebug.cmd
Normal file
12
winbuild/makedebug.cmd
Normal file
@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
where.exe nmake.exe >nul 2>&1
|
||||
|
||||
IF %ERRORLEVEL == 1 (
|
||||
ECHO Error: Can't find `nmake.exe` - be sure to run this script from within a Developer Command-Prompt
|
||||
ECHO.
|
||||
) ELSE (
|
||||
nmake /f Makefile.vc mode=static DEBUG=yes GEN_PDB=yes
|
||||
IF %ERRORLEVEL% NEQ 0 (ECHO "Error: Build Failed")
|
||||
)
|
||||
|
2
winbuild/rundebug.cmd
Normal file
2
winbuild/rundebug.cmd
Normal file
@ -0,0 +1,2 @@
|
||||
@echo off
|
||||
start cmd /k ..\builds\libcurl-vc-x86-debug-static-ipv6-sspi-winssl\bin\curl.exe https://wttr.in/seattle
|
Loading…
Reference in New Issue
Block a user