//========================================================================
//
// 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 <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

#endif
