blob: ea7b9a1830b4b06ff78aaddb061dcb42da551d75 [file] [log] [blame]
Adam Sawickif1a793c2018-03-13 15:42:22 +01001#include "Common.h"
2
3#ifdef _WIN32
4
Adam Sawickib8333fb2018-03-13 16:15:53 +01005void ReadFile(std::vector<char>& out, const char* fileName)
6{
7 std::ifstream file(fileName, std::ios::ate | std::ios::binary);
8 assert(file.is_open());
9 size_t fileSize = (size_t)file.tellg();
10 if(fileSize > 0)
11 {
12 out.resize(fileSize);
13 file.seekg(0);
14 file.read(out.data(), fileSize);
15 }
16 else
17 out.clear();
18}
19
20void SetConsoleColor(CONSOLE_COLOR color)
21{
22 WORD attr = 0;
23 switch(color)
24 {
25 case CONSOLE_COLOR::INFO:
26 attr = FOREGROUND_INTENSITY;;
27 break;
28 case CONSOLE_COLOR::NORMAL:
29 attr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
30 break;
31 case CONSOLE_COLOR::WARNING:
32 attr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
33 break;
34 case CONSOLE_COLOR::ERROR_:
35 attr = FOREGROUND_RED | FOREGROUND_INTENSITY;
36 break;
37 default:
38 assert(0);
39 }
40
41 HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
42 SetConsoleTextAttribute(out, attr);
43}
44
45void PrintMessage(CONSOLE_COLOR color, const char* msg)
46{
47 if(color != CONSOLE_COLOR::NORMAL)
48 SetConsoleColor(color);
49
50 printf("%s\n", msg);
51
52 if (color != CONSOLE_COLOR::NORMAL)
53 SetConsoleColor(CONSOLE_COLOR::NORMAL);
54}
55
56void PrintMessage(CONSOLE_COLOR color, const wchar_t* msg)
57{
58 if(color != CONSOLE_COLOR::NORMAL)
59 SetConsoleColor(color);
60
61 wprintf(L"%s\n", msg);
62
63 if (color != CONSOLE_COLOR::NORMAL)
64 SetConsoleColor(CONSOLE_COLOR::NORMAL);
65}
66
67static const size_t CONSOLE_SMALL_BUF_SIZE = 256;
68
69void PrintMessageV(CONSOLE_COLOR color, const char* format, va_list argList)
70{
71 size_t dstLen = (size_t)::_vscprintf(format, argList);
72 if(dstLen)
73 {
74 bool useSmallBuf = dstLen < CONSOLE_SMALL_BUF_SIZE;
75 char smallBuf[CONSOLE_SMALL_BUF_SIZE];
76 std::vector<char> bigBuf(useSmallBuf ? 0 : dstLen + 1);
77 char* bufPtr = useSmallBuf ? smallBuf : bigBuf.data();
78 ::vsprintf_s(bufPtr, dstLen + 1, format, argList);
79 PrintMessage(color, bufPtr);
80 }
81}
82
83void PrintMessageV(CONSOLE_COLOR color, const wchar_t* format, va_list argList)
84{
85 size_t dstLen = (size_t)::_vcwprintf(format, argList);
86 if(dstLen)
87 {
88 bool useSmallBuf = dstLen < CONSOLE_SMALL_BUF_SIZE;
89 wchar_t smallBuf[CONSOLE_SMALL_BUF_SIZE];
90 std::vector<wchar_t> bigBuf(useSmallBuf ? 0 : dstLen + 1);
91 wchar_t* bufPtr = useSmallBuf ? smallBuf : bigBuf.data();
92 ::vswprintf_s(bufPtr, dstLen + 1, format, argList);
93 PrintMessage(color, bufPtr);
94 }
95}
96
97void PrintMessageF(CONSOLE_COLOR color, const char* format, ...)
98{
99 va_list argList;
100 va_start(argList, format);
101 PrintMessageV(color, format, argList);
102 va_end(argList);
103}
104
105void PrintMessageF(CONSOLE_COLOR color, const wchar_t* format, ...)
106{
107 va_list argList;
108 va_start(argList, format);
109 PrintMessageV(color, format, argList);
110 va_end(argList);
111}
112
113void PrintWarningF(const char* format, ...)
114{
115 va_list argList;
116 va_start(argList, format);
117 PrintMessageV(CONSOLE_COLOR::WARNING, format, argList);
118 va_end(argList);
119}
120
121void PrintWarningF(const wchar_t* format, ...)
122{
123 va_list argList;
124 va_start(argList, format);
125 PrintMessageV(CONSOLE_COLOR::WARNING, format, argList);
126 va_end(argList);
127}
128
129void PrintErrorF(const char* format, ...)
130{
131 va_list argList;
132 va_start(argList, format);
133 PrintMessageV(CONSOLE_COLOR::WARNING, format, argList);
134 va_end(argList);
135}
136
137void PrintErrorF(const wchar_t* format, ...)
138{
139 va_list argList;
140 va_start(argList, format);
141 PrintMessageV(CONSOLE_COLOR::WARNING, format, argList);
142 va_end(argList);
143}
144
145void SaveFile(const wchar_t* filePath, const void* data, size_t dataSize)
146{
147 FILE* f = nullptr;
148 _wfopen_s(&f, filePath, L"wb");
149 if(f)
150 {
151 fwrite(data, 1, dataSize, f);
152 fclose(f);
153 }
154 else
155 assert(0);
156}
157
Adam Sawickif1a793c2018-03-13 15:42:22 +0100158#endif // #ifdef _WIN32