//======================================================================== // // Win32Console.h // // This file is licensed under the GPLv2 or later // // Copyright (C) 2017 Adrian Johnson // Copyright (C) 2019 Albert Astals Cid // Copyright (C) 2019 Oliver Sander // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git // //======================================================================== #ifndef WIN32CONSOLE_H #define WIN32CONSOLE_H // UTF-8 Support for win32 console // // Converts argc/argv to UTF-8. Supports UTF-8 stdout/stderr to win32 console. // On other platforms this class is a no-op. #ifdef _WIN32 // Ensure stdio.h is included before redefining stdio functions. We need to provide // our own declarations for the redefined functions because win32 stdio.h functions // have DLL export decorations. #include #ifndef WIN32_CONSOLE_IMPL // don't redefine in Win32Console.cc so we can call original functions #define printf(...) win32_fprintf(stdout, __VA_ARGS__) #define fprintf(stream, ...) win32_fprintf(stream, __VA_ARGS__) #define puts(s) win32_fprintf(stdout, "%s\n", s) #define fputs(s, stream) win32_fprintf(stream, "%s", s) #define putc(c) win32_fprintf(stdout, "%c", c) #define putchar(c) win32_fprintf(stdout, "%c", c) #define fputc(c, stream) win32_fprintf(stream, "%c", c) #define fwrite(ptr, size, nmemb, stream) win32_fwrite(ptr, size, nmemb, stream) #endif extern "C" { int win32_fprintf(FILE *stream, ...); size_t win32_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); } class Win32Console { public: Win32Console(int *argc, char **argv[]); ~Win32Console(); private: int numArgs; char **argList; char **privateArgList; }; #else // On other platforms this class is a no-op. class Win32Console { public: Win32Console(int *argc, char ***argv) {} }; #endif // _WIN32 #endif