blob: 463810005db3ba88773742e8bb62ee5315dbcdd0 [file] [log] [blame]
//========================================================================
//
// Win32Console.h
//
// This file is licensed under the GPLv2 or later
//
// Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com>
//
// 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
//
//========================================================================
// 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 <stdio.h>
#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