1//========================================================================
2//
3// Win32Console.h
4//
5// This file is licensed under the GPLv2 or later
6//
7// Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com>
8// Copyright (C) 2019 Albert Astals Cid <aacid@kde.org>
9// Copyright (C) 2019 Oliver Sander <oliver.sander@tu-dresden.de>
10//
11// To see a description of the changes please see the Changelog file that
12// came with your tarball or type make ChangeLog if you are building from git
13//
14//========================================================================
15
16#ifndef WIN32CONSOLE_H
17#define WIN32CONSOLE_H
18
19// UTF-8 Support for win32 console
20//
21// Converts argc/argv to UTF-8. Supports UTF-8 stdout/stderr to win32 console.
22// On other platforms this class is a no-op.
23
24#ifdef _WIN32
25
26// Ensure stdio.h is included before redefining stdio functions. We need to provide
27// our own declarations for the redefined functions because win32 stdio.h functions
28// have DLL export decorations.
29# include <cstdio>
30
31# ifndef WIN32_CONSOLE_IMPL // don't redefine in Win32Console.cc so we can call original functions
32# define printf(...) win32_fprintf(stdout, __VA_ARGS__)
33# define fprintf(stream, ...) win32_fprintf(stream, __VA_ARGS__)
34# define puts(s) win32_fprintf(stdout, "%s\n", s)
35# define fputs(s, stream) win32_fprintf(stream, "%s", s)
36# define putc(c) win32_fprintf(stdout, "%c", c)
37# define putchar(c) win32_fprintf(stdout, "%c", c)
38# define fputc(c, stream) win32_fprintf(stream, "%c", c)
39# define fwrite(ptr, size, nmemb, stream) win32_fwrite(ptr, size, nmemb, stream)
40# endif
41
42extern "C" {
43int win32_fprintf(FILE *stream, ...);
44size_t win32_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
45}
46
47class Win32Console
48{
49public:
50 Win32Console(int *argc, char **argv[]);
51 ~Win32Console();
52
53private:
54 int numArgs;
55 char **argList;
56 char **privateArgList;
57};
58
59#else
60
61// On other platforms this class is a no-op.
62
63class Win32Console
64{
65public:
66 Win32Console(int *argc, char ***argv) { }
67};
68
69#endif // _WIN32
70
71#endif
72

source code of poppler/utils/Win32Console.h