blob: a2d13924c93398bcc7a534856fcb9c95772dff71 [file] [log] [blame] [edit]
//========================================================================
//
// Win32Console.h
//
// This file is licensed under the GPLv2 or later
//
// Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2019 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2019 Oliver Sander <oliver.sander@tu-dresden.de>
//
// 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 <cstdio>
# 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