-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathColouredBuffer.cpp
More file actions
218 lines (205 loc) · 35.7 KB
/
ColouredBuffer.cpp
File metadata and controls
218 lines (205 loc) · 35.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include "ColouredBuffer.hpp"
using namespace cmdmd;
template <>
void
ColouredBuffer<char>::
StandardInstall()
{
#ifdef CONMD_WINDOWS
// Redirect `stderr` via us.
new ColouredBuffer<char>(std::cerr, true, true);
// Redirect `stdout` via us.
new ColouredBuffer<char>(std::cout, true, false);
#endif
}
template <>
void
ColouredBuffer<wchar_t>::
StandardInstall()
{
#ifdef CONMD_WINDOWS
// Redirect `stderr` via us.
new ColouredBuffer<wchar_t>(std::wcerr, true, true);
// Redirect `stdout` via us.
new ColouredBuffer<wchar_t>(std::wcout, true, false);
#endif
}
#ifdef CONMD_WINDOWS
int
ColouredBuffer<char>::
OutputC(void* data, wchar_t c, struct console_colour_stream_s* const stream)
{
ColouredBuffer<char>*
ptr = (ColouredBuffer<char>*)data;
return ptr->buffer_.sputc((char)c) != std::char_traits<char>::eof();
}
int
ColouredBuffer<char>::
OutputA(void* data, char const* c, int len, struct console_colour_stream_s* const stream)
{
ColouredBuffer<char>*
ptr = (ColouredBuffer<char>*)data;
return (int)ptr->buffer_.sputn(c, len);
}
int
ColouredBuffer<char>::
OutputW(void* data, wchar_t const* c, int len, struct console_colour_stream_s* const stream)
{
// Do nothing.
return 0;
}
void
ColouredBuffer<char>::
OutputColour(void* data, unsigned short colour, struct console_colour_stream_s* const stream)
{
ColouredBuffer<char>*
ptr = (ColouredBuffer<char>*)data;
if (ptr->coloured_)
{
SetConsoleTextAttribute(ptr->handle_, colour);
}
}
int
ColouredBuffer<wchar_t>::
OutputC(void* data, wchar_t c, struct console_colour_stream_s* const stream)
{
ColouredBuffer<wchar_t>*
ptr = (ColouredBuffer<wchar_t>*)data;
return ptr->buffer_.sputc(c) != std::char_traits<wchar_t>::eof();
}
int
ColouredBuffer<wchar_t>::
OutputA(void* data, char const* c, int len, struct console_colour_stream_s* const stream)
{
// Do nothing.
return 0;
}
int
ColouredBuffer<wchar_t>::
OutputW(void* data, wchar_t const* c, int len, struct console_colour_stream_s* const stream)
{
ColouredBuffer<wchar_t>*
ptr = (ColouredBuffer<wchar_t>*)data;
return (int)ptr->buffer_.sputn(c, len);
}
void
ColouredBuffer<wchar_t>::
OutputColour(void* data, unsigned short colour, struct console_colour_stream_s* const stream)
{
ColouredBuffer<wchar_t>*
ptr = (ColouredBuffer<wchar_t>*)data;
if (ptr->coloured_)
{
SetConsoleTextAttribute(ptr->handle_, colour);
}
}
#endif
#if defined _DEBUG
void DumpColouredBufferExamples()
{
std::cout << std::endl;
std::cout << "\x1B[0m 30 31 32 33 34 35 36 37 30;1 31;1 32;1 33;1 34;1 35;1 36;1 37;1 " << std::endl;
std::cout << std::endl;
std::cout << "\x1B[0m \x1B[30;40m #### \x1B[31;40m #### \x1B[32;40m #### \x1B[33;40m #### \x1B[34;40m #### \x1B[35;40m #### \x1B[36;40m #### \x1B[37;40m #### \x1B[30;40;1m #### \x1B[31;40;1m #### \x1B[32;40;1m #### \x1B[33;40;1m #### \x1B[34;40;1m #### \x1B[35;40;1m #### \x1B[36;40;1m #### \x1B[37;40;1m #### " << std::endl;
std::cout << "\x1B[0m 40 \x1B[30;40m #### \x1B[31;40m #### \x1B[32;40m #### \x1B[33;40m #### \x1B[34;40m #### \x1B[35;40m #### \x1B[36;40m #### \x1B[37;40m #### \x1B[30;40;1m #### \x1B[31;40;1m #### \x1B[32;40;1m #### \x1B[33;40;1m #### \x1B[34;40;1m #### \x1B[35;40;1m #### \x1B[36;40;1m #### \x1B[37;40;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;40m #### \x1B[31;40m #### \x1B[32;40m #### \x1B[33;40m #### \x1B[34;40m #### \x1B[35;40m #### \x1B[36;40m #### \x1B[37;40m #### \x1B[30;40;1m #### \x1B[31;40;1m #### \x1B[32;40;1m #### \x1B[33;40;1m #### \x1B[34;40;1m #### \x1B[35;40;1m #### \x1B[36;40;1m #### \x1B[37;40;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;41m #### \x1B[31;41m #### \x1B[32;41m #### \x1B[33;41m #### \x1B[34;41m #### \x1B[35;41m #### \x1B[36;41m #### \x1B[37;41m #### \x1B[30;41;1m #### \x1B[31;41;1m #### \x1B[32;41;1m #### \x1B[33;41;1m #### \x1B[34;41;1m #### \x1B[35;41;1m #### \x1B[36;41;1m #### \x1B[37;41;1m #### " << std::endl;
std::cout << "\x1B[0m 41 \x1B[30;41m #### \x1B[31;41m #### \x1B[32;41m #### \x1B[33;41m #### \x1B[34;41m #### \x1B[35;41m #### \x1B[36;41m #### \x1B[37;41m #### \x1B[30;41;1m #### \x1B[31;41;1m #### \x1B[32;41;1m #### \x1B[33;41;1m #### \x1B[34;41;1m #### \x1B[35;41;1m #### \x1B[36;41;1m #### \x1B[37;41;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;41m #### \x1B[31;41m #### \x1B[32;41m #### \x1B[33;41m #### \x1B[34;41m #### \x1B[35;41m #### \x1B[36;41m #### \x1B[37;41m #### \x1B[30;41;1m #### \x1B[31;41;1m #### \x1B[32;41;1m #### \x1B[33;41;1m #### \x1B[34;41;1m #### \x1B[35;41;1m #### \x1B[36;41;1m #### \x1B[37;41;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;42m #### \x1B[31;42m #### \x1B[32;42m #### \x1B[33;42m #### \x1B[34;42m #### \x1B[35;42m #### \x1B[36;42m #### \x1B[37;42m #### \x1B[30;42;1m #### \x1B[31;42;1m #### \x1B[32;42;1m #### \x1B[33;42;1m #### \x1B[34;42;1m #### \x1B[35;42;1m #### \x1B[36;42;1m #### \x1B[37;42;1m #### " << std::endl;
std::cout << "\x1B[0m 42 \x1B[30;42m #### \x1B[31;42m #### \x1B[32;42m #### \x1B[33;42m #### \x1B[34;42m #### \x1B[35;42m #### \x1B[36;42m #### \x1B[37;42m #### \x1B[30;42;1m #### \x1B[31;42;1m #### \x1B[32;42;1m #### \x1B[33;42;1m #### \x1B[34;42;1m #### \x1B[35;42;1m #### \x1B[36;42;1m #### \x1B[37;42;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;42m #### \x1B[31;42m #### \x1B[32;42m #### \x1B[33;42m #### \x1B[34;42m #### \x1B[35;42m #### \x1B[36;42m #### \x1B[37;42m #### \x1B[30;42;1m #### \x1B[31;42;1m #### \x1B[32;42;1m #### \x1B[33;42;1m #### \x1B[34;42;1m #### \x1B[35;42;1m #### \x1B[36;42;1m #### \x1B[37;42;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;43m #### \x1B[31;43m #### \x1B[32;43m #### \x1B[33;43m #### \x1B[34;43m #### \x1B[35;43m #### \x1B[36;43m #### \x1B[37;43m #### \x1B[30;43;1m #### \x1B[31;43;1m #### \x1B[32;43;1m #### \x1B[33;43;1m #### \x1B[34;43;1m #### \x1B[35;43;1m #### \x1B[36;43;1m #### \x1B[37;43;1m #### " << std::endl;
std::cout << "\x1B[0m 43 \x1B[30;43m #### \x1B[31;43m #### \x1B[32;43m #### \x1B[33;43m #### \x1B[34;43m #### \x1B[35;43m #### \x1B[36;43m #### \x1B[37;43m #### \x1B[30;43;1m #### \x1B[31;43;1m #### \x1B[32;43;1m #### \x1B[33;43;1m #### \x1B[34;43;1m #### \x1B[35;43;1m #### \x1B[36;43;1m #### \x1B[37;43;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;43m #### \x1B[31;43m #### \x1B[32;43m #### \x1B[33;43m #### \x1B[34;43m #### \x1B[35;43m #### \x1B[36;43m #### \x1B[37;43m #### \x1B[30;43;1m #### \x1B[31;43;1m #### \x1B[32;43;1m #### \x1B[33;43;1m #### \x1B[34;43;1m #### \x1B[35;43;1m #### \x1B[36;43;1m #### \x1B[37;43;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;44m #### \x1B[31;44m #### \x1B[32;44m #### \x1B[33;44m #### \x1B[34;44m #### \x1B[35;44m #### \x1B[36;44m #### \x1B[37;44m #### \x1B[30;44;1m #### \x1B[31;44;1m #### \x1B[32;44;1m #### \x1B[33;44;1m #### \x1B[34;44;1m #### \x1B[35;44;1m #### \x1B[36;44;1m #### \x1B[37;44;1m #### " << std::endl;
std::cout << "\x1B[0m 44 \x1B[30;44m #### \x1B[31;44m #### \x1B[32;44m #### \x1B[33;44m #### \x1B[34;44m #### \x1B[35;44m #### \x1B[36;44m #### \x1B[37;44m #### \x1B[30;44;1m #### \x1B[31;44;1m #### \x1B[32;44;1m #### \x1B[33;44;1m #### \x1B[34;44;1m #### \x1B[35;44;1m #### \x1B[36;44;1m #### \x1B[37;44;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;44m #### \x1B[31;44m #### \x1B[32;44m #### \x1B[33;44m #### \x1B[34;44m #### \x1B[35;44m #### \x1B[36;44m #### \x1B[37;44m #### \x1B[30;44;1m #### \x1B[31;44;1m #### \x1B[32;44;1m #### \x1B[33;44;1m #### \x1B[34;44;1m #### \x1B[35;44;1m #### \x1B[36;44;1m #### \x1B[37;44;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;45m #### \x1B[31;45m #### \x1B[32;45m #### \x1B[33;45m #### \x1B[34;45m #### \x1B[35;45m #### \x1B[36;45m #### \x1B[37;45m #### \x1B[30;45;1m #### \x1B[31;45;1m #### \x1B[32;45;1m #### \x1B[33;45;1m #### \x1B[34;45;1m #### \x1B[35;45;1m #### \x1B[36;45;1m #### \x1B[37;45;1m #### " << std::endl;
std::cout << "\x1B[0m 45 \x1B[30;45m #### \x1B[31;45m #### \x1B[32;45m #### \x1B[33;45m #### \x1B[34;45m #### \x1B[35;45m #### \x1B[36;45m #### \x1B[37;45m #### \x1B[30;45;1m #### \x1B[31;45;1m #### \x1B[32;45;1m #### \x1B[33;45;1m #### \x1B[34;45;1m #### \x1B[35;45;1m #### \x1B[36;45;1m #### \x1B[37;45;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;45m #### \x1B[31;45m #### \x1B[32;45m #### \x1B[33;45m #### \x1B[34;45m #### \x1B[35;45m #### \x1B[36;45m #### \x1B[37;45m #### \x1B[30;45;1m #### \x1B[31;45;1m #### \x1B[32;45;1m #### \x1B[33;45;1m #### \x1B[34;45;1m #### \x1B[35;45;1m #### \x1B[36;45;1m #### \x1B[37;45;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;46m #### \x1B[31;46m #### \x1B[32;46m #### \x1B[33;46m #### \x1B[34;46m #### \x1B[35;46m #### \x1B[36;46m #### \x1B[37;46m #### \x1B[30;46;1m #### \x1B[31;46;1m #### \x1B[32;46;1m #### \x1B[33;46;1m #### \x1B[34;46;1m #### \x1B[35;46;1m #### \x1B[36;46;1m #### \x1B[37;46;1m #### " << std::endl;
std::cout << "\x1B[0m 46 \x1B[30;46m #### \x1B[31;46m #### \x1B[32;46m #### \x1B[33;46m #### \x1B[34;46m #### \x1B[35;46m #### \x1B[36;46m #### \x1B[37;46m #### \x1B[30;46;1m #### \x1B[31;46;1m #### \x1B[32;46;1m #### \x1B[33;46;1m #### \x1B[34;46;1m #### \x1B[35;46;1m #### \x1B[36;46;1m #### \x1B[37;46;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;46m #### \x1B[31;46m #### \x1B[32;46m #### \x1B[33;46m #### \x1B[34;46m #### \x1B[35;46m #### \x1B[36;46m #### \x1B[37;46m #### \x1B[30;46;1m #### \x1B[31;46;1m #### \x1B[32;46;1m #### \x1B[33;46;1m #### \x1B[34;46;1m #### \x1B[35;46;1m #### \x1B[36;46;1m #### \x1B[37;46;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;47m #### \x1B[31;47m #### \x1B[32;47m #### \x1B[33;47m #### \x1B[34;47m #### \x1B[35;47m #### \x1B[36;47m #### \x1B[37;47m #### \x1B[30;47;1m #### \x1B[31;47;1m #### \x1B[32;47;1m #### \x1B[33;47;1m #### \x1B[34;47;1m #### \x1B[35;47;1m #### \x1B[36;47;1m #### \x1B[37;47;1m #### " << std::endl;
std::cout << "\x1B[0m 47 \x1B[30;47m #### \x1B[31;47m #### \x1B[32;47m #### \x1B[33;47m #### \x1B[34;47m #### \x1B[35;47m #### \x1B[36;47m #### \x1B[37;47m #### \x1B[30;47;1m #### \x1B[31;47;1m #### \x1B[32;47;1m #### \x1B[33;47;1m #### \x1B[34;47;1m #### \x1B[35;47;1m #### \x1B[36;47;1m #### \x1B[37;47;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;47m #### \x1B[31;47m #### \x1B[32;47m #### \x1B[33;47m #### \x1B[34;47m #### \x1B[35;47m #### \x1B[36;47m #### \x1B[37;47m #### \x1B[30;47;1m #### \x1B[31;47;1m #### \x1B[32;47;1m #### \x1B[33;47;1m #### \x1B[34;47;1m #### \x1B[35;47;1m #### \x1B[36;47;1m #### \x1B[37;47;1m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;40;5m #### \x1B[31;40;5m #### \x1B[32;40;5m #### \x1B[33;40;5m #### \x1B[34;40;5m #### \x1B[35;40;5m #### \x1B[36;40;5m #### \x1B[37;40;5m #### \x1B[30;40;1;5m #### \x1B[31;40;1;5m #### \x1B[32;40;1;5m #### \x1B[33;40;1;5m #### \x1B[34;40;1;5m #### \x1B[35;40;1;5m #### \x1B[36;40;1;5m #### \x1B[37;40;1;5m #### " << std::endl;
std::cout << "\x1B[0m 40;5 \x1B[30;40;5m #### \x1B[31;40;5m #### \x1B[32;40;5m #### \x1B[33;40;5m #### \x1B[34;40;5m #### \x1B[35;40;5m #### \x1B[36;40;5m #### \x1B[37;40;5m #### \x1B[30;40;1;5m #### \x1B[31;40;1;5m #### \x1B[32;40;1;5m #### \x1B[33;40;1;5m #### \x1B[34;40;1;5m #### \x1B[35;40;1;5m #### \x1B[36;40;1;5m #### \x1B[37;40;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;40;5m #### \x1B[31;40;5m #### \x1B[32;40;5m #### \x1B[33;40;5m #### \x1B[34;40;5m #### \x1B[35;40;5m #### \x1B[36;40;5m #### \x1B[37;40;5m #### \x1B[30;40;1;5m #### \x1B[31;40;1;5m #### \x1B[32;40;1;5m #### \x1B[33;40;1;5m #### \x1B[34;40;1;5m #### \x1B[35;40;1;5m #### \x1B[36;40;1;5m #### \x1B[37;40;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;41;5m #### \x1B[31;41;5m #### \x1B[32;41;5m #### \x1B[33;41;5m #### \x1B[34;41;5m #### \x1B[35;41;5m #### \x1B[36;41;5m #### \x1B[37;41;5m #### \x1B[30;41;1;5m #### \x1B[31;41;1;5m #### \x1B[32;41;1;5m #### \x1B[33;41;1;5m #### \x1B[34;41;1;5m #### \x1B[35;41;1;5m #### \x1B[36;41;1;5m #### \x1B[37;41;1;5m #### " << std::endl;
std::cout << "\x1B[0m 41;5 \x1B[30;41;5m #### \x1B[31;41;5m #### \x1B[32;41;5m #### \x1B[33;41;5m #### \x1B[34;41;5m #### \x1B[35;41;5m #### \x1B[36;41;5m #### \x1B[37;41;5m #### \x1B[30;41;1;5m #### \x1B[31;41;1;5m #### \x1B[32;41;1;5m #### \x1B[33;41;1;5m #### \x1B[34;41;1;5m #### \x1B[35;41;1;5m #### \x1B[36;41;1;5m #### \x1B[37;41;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;41;5m #### \x1B[31;41;5m #### \x1B[32;41;5m #### \x1B[33;41;5m #### \x1B[34;41;5m #### \x1B[35;41;5m #### \x1B[36;41;5m #### \x1B[37;41;5m #### \x1B[30;41;1;5m #### \x1B[31;41;1;5m #### \x1B[32;41;1;5m #### \x1B[33;41;1;5m #### \x1B[34;41;1;5m #### \x1B[35;41;1;5m #### \x1B[36;41;1;5m #### \x1B[37;41;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;42;5m #### \x1B[31;42;5m #### \x1B[32;42;5m #### \x1B[33;42;5m #### \x1B[34;42;5m #### \x1B[35;42;5m #### \x1B[36;42;5m #### \x1B[37;42;5m #### \x1B[30;42;1;5m #### \x1B[31;42;1;5m #### \x1B[32;42;1;5m #### \x1B[33;42;1;5m #### \x1B[34;42;1;5m #### \x1B[35;42;1;5m #### \x1B[36;42;1;5m #### \x1B[37;42;1;5m #### " << std::endl;
std::cout << "\x1B[0m 42;5 \x1B[30;42;5m #### \x1B[31;42;5m #### \x1B[32;42;5m #### \x1B[33;42;5m #### \x1B[34;42;5m #### \x1B[35;42;5m #### \x1B[36;42;5m #### \x1B[37;42;5m #### \x1B[30;42;1;5m #### \x1B[31;42;1;5m #### \x1B[32;42;1;5m #### \x1B[33;42;1;5m #### \x1B[34;42;1;5m #### \x1B[35;42;1;5m #### \x1B[36;42;1;5m #### \x1B[37;42;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;42;5m #### \x1B[31;42;5m #### \x1B[32;42;5m #### \x1B[33;42;5m #### \x1B[34;42;5m #### \x1B[35;42;5m #### \x1B[36;42;5m #### \x1B[37;42;5m #### \x1B[30;42;1;5m #### \x1B[31;42;1;5m #### \x1B[32;42;1;5m #### \x1B[33;42;1;5m #### \x1B[34;42;1;5m #### \x1B[35;42;1;5m #### \x1B[36;42;1;5m #### \x1B[37;42;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;43;5m #### \x1B[31;43;5m #### \x1B[32;43;5m #### \x1B[33;43;5m #### \x1B[34;43;5m #### \x1B[35;43;5m #### \x1B[36;43;5m #### \x1B[37;43;5m #### \x1B[30;43;1;5m #### \x1B[31;43;1;5m #### \x1B[32;43;1;5m #### \x1B[33;43;1;5m #### \x1B[34;43;1;5m #### \x1B[35;43;1;5m #### \x1B[36;43;1;5m #### \x1B[37;43;1;5m #### " << std::endl;
std::cout << "\x1B[0m 43;5 \x1B[30;43;5m #### \x1B[31;43;5m #### \x1B[32;43;5m #### \x1B[33;43;5m #### \x1B[34;43;5m #### \x1B[35;43;5m #### \x1B[36;43;5m #### \x1B[37;43;5m #### \x1B[30;43;1;5m #### \x1B[31;43;1;5m #### \x1B[32;43;1;5m #### \x1B[33;43;1;5m #### \x1B[34;43;1;5m #### \x1B[35;43;1;5m #### \x1B[36;43;1;5m #### \x1B[37;43;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;43;5m #### \x1B[31;43;5m #### \x1B[32;43;5m #### \x1B[33;43;5m #### \x1B[34;43;5m #### \x1B[35;43;5m #### \x1B[36;43;5m #### \x1B[37;43;5m #### \x1B[30;43;1;5m #### \x1B[31;43;1;5m #### \x1B[32;43;1;5m #### \x1B[33;43;1;5m #### \x1B[34;43;1;5m #### \x1B[35;43;1;5m #### \x1B[36;43;1;5m #### \x1B[37;43;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;44;5m #### \x1B[31;44;5m #### \x1B[32;44;5m #### \x1B[33;44;5m #### \x1B[34;44;5m #### \x1B[35;44;5m #### \x1B[36;44;5m #### \x1B[37;44;5m #### \x1B[30;44;1;5m #### \x1B[31;44;1;5m #### \x1B[32;44;1;5m #### \x1B[33;44;1;5m #### \x1B[34;44;1;5m #### \x1B[35;44;1;5m #### \x1B[36;44;1;5m #### \x1B[37;44;1;5m #### " << std::endl;
std::cout << "\x1B[0m 44;5 \x1B[30;44;5m #### \x1B[31;44;5m #### \x1B[32;44;5m #### \x1B[33;44;5m #### \x1B[34;44;5m #### \x1B[35;44;5m #### \x1B[36;44;5m #### \x1B[37;44;5m #### \x1B[30;44;1;5m #### \x1B[31;44;1;5m #### \x1B[32;44;1;5m #### \x1B[33;44;1;5m #### \x1B[34;44;1;5m #### \x1B[35;44;1;5m #### \x1B[36;44;1;5m #### \x1B[37;44;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;44;5m #### \x1B[31;44;5m #### \x1B[32;44;5m #### \x1B[33;44;5m #### \x1B[34;44;5m #### \x1B[35;44;5m #### \x1B[36;44;5m #### \x1B[37;44;5m #### \x1B[30;44;1;5m #### \x1B[31;44;1;5m #### \x1B[32;44;1;5m #### \x1B[33;44;1;5m #### \x1B[34;44;1;5m #### \x1B[35;44;1;5m #### \x1B[36;44;1;5m #### \x1B[37;44;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;45;5m #### \x1B[31;45;5m #### \x1B[32;45;5m #### \x1B[33;45;5m #### \x1B[34;45;5m #### \x1B[35;45;5m #### \x1B[36;45;5m #### \x1B[37;45;5m #### \x1B[30;45;1;5m #### \x1B[31;45;1;5m #### \x1B[32;45;1;5m #### \x1B[33;45;1;5m #### \x1B[34;45;1;5m #### \x1B[35;45;1;5m #### \x1B[36;45;1;5m #### \x1B[37;45;1;5m #### " << std::endl;
std::cout << "\x1B[0m 45;5 \x1B[30;45;5m #### \x1B[31;45;5m #### \x1B[32;45;5m #### \x1B[33;45;5m #### \x1B[34;45;5m #### \x1B[35;45;5m #### \x1B[36;45;5m #### \x1B[37;45;5m #### \x1B[30;45;1;5m #### \x1B[31;45;1;5m #### \x1B[32;45;1;5m #### \x1B[33;45;1;5m #### \x1B[34;45;1;5m #### \x1B[35;45;1;5m #### \x1B[36;45;1;5m #### \x1B[37;45;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;45;5m #### \x1B[31;45;5m #### \x1B[32;45;5m #### \x1B[33;45;5m #### \x1B[34;45;5m #### \x1B[35;45;5m #### \x1B[36;45;5m #### \x1B[37;45;5m #### \x1B[30;45;1;5m #### \x1B[31;45;1;5m #### \x1B[32;45;1;5m #### \x1B[33;45;1;5m #### \x1B[34;45;1;5m #### \x1B[35;45;1;5m #### \x1B[36;45;1;5m #### \x1B[37;45;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;46;5m #### \x1B[31;46;5m #### \x1B[32;46;5m #### \x1B[33;46;5m #### \x1B[34;46;5m #### \x1B[35;46;5m #### \x1B[36;46;5m #### \x1B[37;46;5m #### \x1B[30;46;1;5m #### \x1B[31;46;1;5m #### \x1B[32;46;1;5m #### \x1B[33;46;1;5m #### \x1B[34;46;1;5m #### \x1B[35;46;1;5m #### \x1B[36;46;1;5m #### \x1B[37;46;1;5m #### " << std::endl;
std::cout << "\x1B[0m 46;5 \x1B[30;46;5m #### \x1B[31;46;5m #### \x1B[32;46;5m #### \x1B[33;46;5m #### \x1B[34;46;5m #### \x1B[35;46;5m #### \x1B[36;46;5m #### \x1B[37;46;5m #### \x1B[30;46;1;5m #### \x1B[31;46;1;5m #### \x1B[32;46;1;5m #### \x1B[33;46;1;5m #### \x1B[34;46;1;5m #### \x1B[35;46;1;5m #### \x1B[36;46;1;5m #### \x1B[37;46;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;46;5m #### \x1B[31;46;5m #### \x1B[32;46;5m #### \x1B[33;46;5m #### \x1B[34;46;5m #### \x1B[35;46;5m #### \x1B[36;46;5m #### \x1B[37;46;5m #### \x1B[30;46;1;5m #### \x1B[31;46;1;5m #### \x1B[32;46;1;5m #### \x1B[33;46;1;5m #### \x1B[34;46;1;5m #### \x1B[35;46;1;5m #### \x1B[36;46;1;5m #### \x1B[37;46;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;47;5m #### \x1B[31;47;5m #### \x1B[32;47;5m #### \x1B[33;47;5m #### \x1B[34;47;5m #### \x1B[35;47;5m #### \x1B[36;47;5m #### \x1B[37;47;5m #### \x1B[30;47;1;5m #### \x1B[31;47;1;5m #### \x1B[32;47;1;5m #### \x1B[33;47;1;5m #### \x1B[34;47;1;5m #### \x1B[35;47;1;5m #### \x1B[36;47;1;5m #### \x1B[37;47;1;5m #### " << std::endl;
std::cout << "\x1B[0m 47;5 \x1B[30;47;5m #### \x1B[31;47;5m #### \x1B[32;47;5m #### \x1B[33;47;5m #### \x1B[34;47;5m #### \x1B[35;47;5m #### \x1B[36;47;5m #### \x1B[37;47;5m #### \x1B[30;47;1;5m #### \x1B[31;47;1;5m #### \x1B[32;47;1;5m #### \x1B[33;47;1;5m #### \x1B[34;47;1;5m #### \x1B[35;47;1;5m #### \x1B[36;47;1;5m #### \x1B[37;47;1;5m #### " << std::endl;
std::cout << "\x1B[0m \x1B[30;47;5m #### \x1B[31;47;5m #### \x1B[32;47;5m #### \x1B[33;47;5m #### \x1B[34;47;5m #### \x1B[35;47;5m #### \x1B[36;47;5m #### \x1B[37;47;5m #### \x1B[30;47;1;5m #### \x1B[31;47;1;5m #### \x1B[32;47;1;5m #### \x1B[33;47;1;5m #### \x1B[34;47;1;5m #### \x1B[35;47;1;5m #### \x1B[36;47;1;5m #### \x1B[37;47;1;5m #### " << std::endl;
std::cout << "\x1B[0m" << std::endl;
std::wcout << std::endl;
std::wcout << L"\x1B[0m 30 31 32 33 34 35 36 37 30;1 31;1 32;1 33;1 34;1 35;1 36;1 37;1 " << std::endl;
std::wcout << std::endl;
std::wcout << L"\x1B[0m \x1B[30;40m #### \x1B[31;40m #### \x1B[32;40m #### \x1B[33;40m #### \x1B[34;40m #### \x1B[35;40m #### \x1B[36;40m #### \x1B[37;40m #### \x1B[30;40;1m #### \x1B[31;40;1m #### \x1B[32;40;1m #### \x1B[33;40;1m #### \x1B[34;40;1m #### \x1B[35;40;1m #### \x1B[36;40;1m #### \x1B[37;40;1m #### " << std::endl;
std::wcout << L"\x1B[0m 40 \x1B[30;40m #### \x1B[31;40m #### \x1B[32;40m #### \x1B[33;40m #### \x1B[34;40m #### \x1B[35;40m #### \x1B[36;40m #### \x1B[37;40m #### \x1B[30;40;1m #### \x1B[31;40;1m #### \x1B[32;40;1m #### \x1B[33;40;1m #### \x1B[34;40;1m #### \x1B[35;40;1m #### \x1B[36;40;1m #### \x1B[37;40;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;40m #### \x1B[31;40m #### \x1B[32;40m #### \x1B[33;40m #### \x1B[34;40m #### \x1B[35;40m #### \x1B[36;40m #### \x1B[37;40m #### \x1B[30;40;1m #### \x1B[31;40;1m #### \x1B[32;40;1m #### \x1B[33;40;1m #### \x1B[34;40;1m #### \x1B[35;40;1m #### \x1B[36;40;1m #### \x1B[37;40;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;41m #### \x1B[31;41m #### \x1B[32;41m #### \x1B[33;41m #### \x1B[34;41m #### \x1B[35;41m #### \x1B[36;41m #### \x1B[37;41m #### \x1B[30;41;1m #### \x1B[31;41;1m #### \x1B[32;41;1m #### \x1B[33;41;1m #### \x1B[34;41;1m #### \x1B[35;41;1m #### \x1B[36;41;1m #### \x1B[37;41;1m #### " << std::endl;
std::wcout << L"\x1B[0m 41 \x1B[30;41m #### \x1B[31;41m #### \x1B[32;41m #### \x1B[33;41m #### \x1B[34;41m #### \x1B[35;41m #### \x1B[36;41m #### \x1B[37;41m #### \x1B[30;41;1m #### \x1B[31;41;1m #### \x1B[32;41;1m #### \x1B[33;41;1m #### \x1B[34;41;1m #### \x1B[35;41;1m #### \x1B[36;41;1m #### \x1B[37;41;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;41m #### \x1B[31;41m #### \x1B[32;41m #### \x1B[33;41m #### \x1B[34;41m #### \x1B[35;41m #### \x1B[36;41m #### \x1B[37;41m #### \x1B[30;41;1m #### \x1B[31;41;1m #### \x1B[32;41;1m #### \x1B[33;41;1m #### \x1B[34;41;1m #### \x1B[35;41;1m #### \x1B[36;41;1m #### \x1B[37;41;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;42m #### \x1B[31;42m #### \x1B[32;42m #### \x1B[33;42m #### \x1B[34;42m #### \x1B[35;42m #### \x1B[36;42m #### \x1B[37;42m #### \x1B[30;42;1m #### \x1B[31;42;1m #### \x1B[32;42;1m #### \x1B[33;42;1m #### \x1B[34;42;1m #### \x1B[35;42;1m #### \x1B[36;42;1m #### \x1B[37;42;1m #### " << std::endl;
std::wcout << L"\x1B[0m 42 \x1B[30;42m #### \x1B[31;42m #### \x1B[32;42m #### \x1B[33;42m #### \x1B[34;42m #### \x1B[35;42m #### \x1B[36;42m #### \x1B[37;42m #### \x1B[30;42;1m #### \x1B[31;42;1m #### \x1B[32;42;1m #### \x1B[33;42;1m #### \x1B[34;42;1m #### \x1B[35;42;1m #### \x1B[36;42;1m #### \x1B[37;42;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;42m #### \x1B[31;42m #### \x1B[32;42m #### \x1B[33;42m #### \x1B[34;42m #### \x1B[35;42m #### \x1B[36;42m #### \x1B[37;42m #### \x1B[30;42;1m #### \x1B[31;42;1m #### \x1B[32;42;1m #### \x1B[33;42;1m #### \x1B[34;42;1m #### \x1B[35;42;1m #### \x1B[36;42;1m #### \x1B[37;42;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;43m #### \x1B[31;43m #### \x1B[32;43m #### \x1B[33;43m #### \x1B[34;43m #### \x1B[35;43m #### \x1B[36;43m #### \x1B[37;43m #### \x1B[30;43;1m #### \x1B[31;43;1m #### \x1B[32;43;1m #### \x1B[33;43;1m #### \x1B[34;43;1m #### \x1B[35;43;1m #### \x1B[36;43;1m #### \x1B[37;43;1m #### " << std::endl;
std::wcout << L"\x1B[0m 43 \x1B[30;43m #### \x1B[31;43m #### \x1B[32;43m #### \x1B[33;43m #### \x1B[34;43m #### \x1B[35;43m #### \x1B[36;43m #### \x1B[37;43m #### \x1B[30;43;1m #### \x1B[31;43;1m #### \x1B[32;43;1m #### \x1B[33;43;1m #### \x1B[34;43;1m #### \x1B[35;43;1m #### \x1B[36;43;1m #### \x1B[37;43;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;43m #### \x1B[31;43m #### \x1B[32;43m #### \x1B[33;43m #### \x1B[34;43m #### \x1B[35;43m #### \x1B[36;43m #### \x1B[37;43m #### \x1B[30;43;1m #### \x1B[31;43;1m #### \x1B[32;43;1m #### \x1B[33;43;1m #### \x1B[34;43;1m #### \x1B[35;43;1m #### \x1B[36;43;1m #### \x1B[37;43;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;44m #### \x1B[31;44m #### \x1B[32;44m #### \x1B[33;44m #### \x1B[34;44m #### \x1B[35;44m #### \x1B[36;44m #### \x1B[37;44m #### \x1B[30;44;1m #### \x1B[31;44;1m #### \x1B[32;44;1m #### \x1B[33;44;1m #### \x1B[34;44;1m #### \x1B[35;44;1m #### \x1B[36;44;1m #### \x1B[37;44;1m #### " << std::endl;
std::wcout << L"\x1B[0m 44 \x1B[30;44m #### \x1B[31;44m #### \x1B[32;44m #### \x1B[33;44m #### \x1B[34;44m #### \x1B[35;44m #### \x1B[36;44m #### \x1B[37;44m #### \x1B[30;44;1m #### \x1B[31;44;1m #### \x1B[32;44;1m #### \x1B[33;44;1m #### \x1B[34;44;1m #### \x1B[35;44;1m #### \x1B[36;44;1m #### \x1B[37;44;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;44m #### \x1B[31;44m #### \x1B[32;44m #### \x1B[33;44m #### \x1B[34;44m #### \x1B[35;44m #### \x1B[36;44m #### \x1B[37;44m #### \x1B[30;44;1m #### \x1B[31;44;1m #### \x1B[32;44;1m #### \x1B[33;44;1m #### \x1B[34;44;1m #### \x1B[35;44;1m #### \x1B[36;44;1m #### \x1B[37;44;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;45m #### \x1B[31;45m #### \x1B[32;45m #### \x1B[33;45m #### \x1B[34;45m #### \x1B[35;45m #### \x1B[36;45m #### \x1B[37;45m #### \x1B[30;45;1m #### \x1B[31;45;1m #### \x1B[32;45;1m #### \x1B[33;45;1m #### \x1B[34;45;1m #### \x1B[35;45;1m #### \x1B[36;45;1m #### \x1B[37;45;1m #### " << std::endl;
std::wcout << L"\x1B[0m 45 \x1B[30;45m #### \x1B[31;45m #### \x1B[32;45m #### \x1B[33;45m #### \x1B[34;45m #### \x1B[35;45m #### \x1B[36;45m #### \x1B[37;45m #### \x1B[30;45;1m #### \x1B[31;45;1m #### \x1B[32;45;1m #### \x1B[33;45;1m #### \x1B[34;45;1m #### \x1B[35;45;1m #### \x1B[36;45;1m #### \x1B[37;45;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;45m #### \x1B[31;45m #### \x1B[32;45m #### \x1B[33;45m #### \x1B[34;45m #### \x1B[35;45m #### \x1B[36;45m #### \x1B[37;45m #### \x1B[30;45;1m #### \x1B[31;45;1m #### \x1B[32;45;1m #### \x1B[33;45;1m #### \x1B[34;45;1m #### \x1B[35;45;1m #### \x1B[36;45;1m #### \x1B[37;45;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;46m #### \x1B[31;46m #### \x1B[32;46m #### \x1B[33;46m #### \x1B[34;46m #### \x1B[35;46m #### \x1B[36;46m #### \x1B[37;46m #### \x1B[30;46;1m #### \x1B[31;46;1m #### \x1B[32;46;1m #### \x1B[33;46;1m #### \x1B[34;46;1m #### \x1B[35;46;1m #### \x1B[36;46;1m #### \x1B[37;46;1m #### " << std::endl;
std::wcout << L"\x1B[0m 46 \x1B[30;46m #### \x1B[31;46m #### \x1B[32;46m #### \x1B[33;46m #### \x1B[34;46m #### \x1B[35;46m #### \x1B[36;46m #### \x1B[37;46m #### \x1B[30;46;1m #### \x1B[31;46;1m #### \x1B[32;46;1m #### \x1B[33;46;1m #### \x1B[34;46;1m #### \x1B[35;46;1m #### \x1B[36;46;1m #### \x1B[37;46;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;46m #### \x1B[31;46m #### \x1B[32;46m #### \x1B[33;46m #### \x1B[34;46m #### \x1B[35;46m #### \x1B[36;46m #### \x1B[37;46m #### \x1B[30;46;1m #### \x1B[31;46;1m #### \x1B[32;46;1m #### \x1B[33;46;1m #### \x1B[34;46;1m #### \x1B[35;46;1m #### \x1B[36;46;1m #### \x1B[37;46;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;47m #### \x1B[31;47m #### \x1B[32;47m #### \x1B[33;47m #### \x1B[34;47m #### \x1B[35;47m #### \x1B[36;47m #### \x1B[37;47m #### \x1B[30;47;1m #### \x1B[31;47;1m #### \x1B[32;47;1m #### \x1B[33;47;1m #### \x1B[34;47;1m #### \x1B[35;47;1m #### \x1B[36;47;1m #### \x1B[37;47;1m #### " << std::endl;
std::wcout << L"\x1B[0m 47 \x1B[30;47m #### \x1B[31;47m #### \x1B[32;47m #### \x1B[33;47m #### \x1B[34;47m #### \x1B[35;47m #### \x1B[36;47m #### \x1B[37;47m #### \x1B[30;47;1m #### \x1B[31;47;1m #### \x1B[32;47;1m #### \x1B[33;47;1m #### \x1B[34;47;1m #### \x1B[35;47;1m #### \x1B[36;47;1m #### \x1B[37;47;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;47m #### \x1B[31;47m #### \x1B[32;47m #### \x1B[33;47m #### \x1B[34;47m #### \x1B[35;47m #### \x1B[36;47m #### \x1B[37;47m #### \x1B[30;47;1m #### \x1B[31;47;1m #### \x1B[32;47;1m #### \x1B[33;47;1m #### \x1B[34;47;1m #### \x1B[35;47;1m #### \x1B[36;47;1m #### \x1B[37;47;1m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;40;5m #### \x1B[31;40;5m #### \x1B[32;40;5m #### \x1B[33;40;5m #### \x1B[34;40;5m #### \x1B[35;40;5m #### \x1B[36;40;5m #### \x1B[37;40;5m #### \x1B[30;40;1;5m #### \x1B[31;40;1;5m #### \x1B[32;40;1;5m #### \x1B[33;40;1;5m #### \x1B[34;40;1;5m #### \x1B[35;40;1;5m #### \x1B[36;40;1;5m #### \x1B[37;40;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 40;5 \x1B[30;40;5m #### \x1B[31;40;5m #### \x1B[32;40;5m #### \x1B[33;40;5m #### \x1B[34;40;5m #### \x1B[35;40;5m #### \x1B[36;40;5m #### \x1B[37;40;5m #### \x1B[30;40;1;5m #### \x1B[31;40;1;5m #### \x1B[32;40;1;5m #### \x1B[33;40;1;5m #### \x1B[34;40;1;5m #### \x1B[35;40;1;5m #### \x1B[36;40;1;5m #### \x1B[37;40;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;40;5m #### \x1B[31;40;5m #### \x1B[32;40;5m #### \x1B[33;40;5m #### \x1B[34;40;5m #### \x1B[35;40;5m #### \x1B[36;40;5m #### \x1B[37;40;5m #### \x1B[30;40;1;5m #### \x1B[31;40;1;5m #### \x1B[32;40;1;5m #### \x1B[33;40;1;5m #### \x1B[34;40;1;5m #### \x1B[35;40;1;5m #### \x1B[36;40;1;5m #### \x1B[37;40;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;41;5m #### \x1B[31;41;5m #### \x1B[32;41;5m #### \x1B[33;41;5m #### \x1B[34;41;5m #### \x1B[35;41;5m #### \x1B[36;41;5m #### \x1B[37;41;5m #### \x1B[30;41;1;5m #### \x1B[31;41;1;5m #### \x1B[32;41;1;5m #### \x1B[33;41;1;5m #### \x1B[34;41;1;5m #### \x1B[35;41;1;5m #### \x1B[36;41;1;5m #### \x1B[37;41;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 41;5 \x1B[30;41;5m #### \x1B[31;41;5m #### \x1B[32;41;5m #### \x1B[33;41;5m #### \x1B[34;41;5m #### \x1B[35;41;5m #### \x1B[36;41;5m #### \x1B[37;41;5m #### \x1B[30;41;1;5m #### \x1B[31;41;1;5m #### \x1B[32;41;1;5m #### \x1B[33;41;1;5m #### \x1B[34;41;1;5m #### \x1B[35;41;1;5m #### \x1B[36;41;1;5m #### \x1B[37;41;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;41;5m #### \x1B[31;41;5m #### \x1B[32;41;5m #### \x1B[33;41;5m #### \x1B[34;41;5m #### \x1B[35;41;5m #### \x1B[36;41;5m #### \x1B[37;41;5m #### \x1B[30;41;1;5m #### \x1B[31;41;1;5m #### \x1B[32;41;1;5m #### \x1B[33;41;1;5m #### \x1B[34;41;1;5m #### \x1B[35;41;1;5m #### \x1B[36;41;1;5m #### \x1B[37;41;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;42;5m #### \x1B[31;42;5m #### \x1B[32;42;5m #### \x1B[33;42;5m #### \x1B[34;42;5m #### \x1B[35;42;5m #### \x1B[36;42;5m #### \x1B[37;42;5m #### \x1B[30;42;1;5m #### \x1B[31;42;1;5m #### \x1B[32;42;1;5m #### \x1B[33;42;1;5m #### \x1B[34;42;1;5m #### \x1B[35;42;1;5m #### \x1B[36;42;1;5m #### \x1B[37;42;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 42;5 \x1B[30;42;5m #### \x1B[31;42;5m #### \x1B[32;42;5m #### \x1B[33;42;5m #### \x1B[34;42;5m #### \x1B[35;42;5m #### \x1B[36;42;5m #### \x1B[37;42;5m #### \x1B[30;42;1;5m #### \x1B[31;42;1;5m #### \x1B[32;42;1;5m #### \x1B[33;42;1;5m #### \x1B[34;42;1;5m #### \x1B[35;42;1;5m #### \x1B[36;42;1;5m #### \x1B[37;42;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;42;5m #### \x1B[31;42;5m #### \x1B[32;42;5m #### \x1B[33;42;5m #### \x1B[34;42;5m #### \x1B[35;42;5m #### \x1B[36;42;5m #### \x1B[37;42;5m #### \x1B[30;42;1;5m #### \x1B[31;42;1;5m #### \x1B[32;42;1;5m #### \x1B[33;42;1;5m #### \x1B[34;42;1;5m #### \x1B[35;42;1;5m #### \x1B[36;42;1;5m #### \x1B[37;42;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;43;5m #### \x1B[31;43;5m #### \x1B[32;43;5m #### \x1B[33;43;5m #### \x1B[34;43;5m #### \x1B[35;43;5m #### \x1B[36;43;5m #### \x1B[37;43;5m #### \x1B[30;43;1;5m #### \x1B[31;43;1;5m #### \x1B[32;43;1;5m #### \x1B[33;43;1;5m #### \x1B[34;43;1;5m #### \x1B[35;43;1;5m #### \x1B[36;43;1;5m #### \x1B[37;43;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 43;5 \x1B[30;43;5m #### \x1B[31;43;5m #### \x1B[32;43;5m #### \x1B[33;43;5m #### \x1B[34;43;5m #### \x1B[35;43;5m #### \x1B[36;43;5m #### \x1B[37;43;5m #### \x1B[30;43;1;5m #### \x1B[31;43;1;5m #### \x1B[32;43;1;5m #### \x1B[33;43;1;5m #### \x1B[34;43;1;5m #### \x1B[35;43;1;5m #### \x1B[36;43;1;5m #### \x1B[37;43;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;43;5m #### \x1B[31;43;5m #### \x1B[32;43;5m #### \x1B[33;43;5m #### \x1B[34;43;5m #### \x1B[35;43;5m #### \x1B[36;43;5m #### \x1B[37;43;5m #### \x1B[30;43;1;5m #### \x1B[31;43;1;5m #### \x1B[32;43;1;5m #### \x1B[33;43;1;5m #### \x1B[34;43;1;5m #### \x1B[35;43;1;5m #### \x1B[36;43;1;5m #### \x1B[37;43;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;44;5m #### \x1B[31;44;5m #### \x1B[32;44;5m #### \x1B[33;44;5m #### \x1B[34;44;5m #### \x1B[35;44;5m #### \x1B[36;44;5m #### \x1B[37;44;5m #### \x1B[30;44;1;5m #### \x1B[31;44;1;5m #### \x1B[32;44;1;5m #### \x1B[33;44;1;5m #### \x1B[34;44;1;5m #### \x1B[35;44;1;5m #### \x1B[36;44;1;5m #### \x1B[37;44;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 44;5 \x1B[30;44;5m #### \x1B[31;44;5m #### \x1B[32;44;5m #### \x1B[33;44;5m #### \x1B[34;44;5m #### \x1B[35;44;5m #### \x1B[36;44;5m #### \x1B[37;44;5m #### \x1B[30;44;1;5m #### \x1B[31;44;1;5m #### \x1B[32;44;1;5m #### \x1B[33;44;1;5m #### \x1B[34;44;1;5m #### \x1B[35;44;1;5m #### \x1B[36;44;1;5m #### \x1B[37;44;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;44;5m #### \x1B[31;44;5m #### \x1B[32;44;5m #### \x1B[33;44;5m #### \x1B[34;44;5m #### \x1B[35;44;5m #### \x1B[36;44;5m #### \x1B[37;44;5m #### \x1B[30;44;1;5m #### \x1B[31;44;1;5m #### \x1B[32;44;1;5m #### \x1B[33;44;1;5m #### \x1B[34;44;1;5m #### \x1B[35;44;1;5m #### \x1B[36;44;1;5m #### \x1B[37;44;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;45;5m #### \x1B[31;45;5m #### \x1B[32;45;5m #### \x1B[33;45;5m #### \x1B[34;45;5m #### \x1B[35;45;5m #### \x1B[36;45;5m #### \x1B[37;45;5m #### \x1B[30;45;1;5m #### \x1B[31;45;1;5m #### \x1B[32;45;1;5m #### \x1B[33;45;1;5m #### \x1B[34;45;1;5m #### \x1B[35;45;1;5m #### \x1B[36;45;1;5m #### \x1B[37;45;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 45;5 \x1B[30;45;5m #### \x1B[31;45;5m #### \x1B[32;45;5m #### \x1B[33;45;5m #### \x1B[34;45;5m #### \x1B[35;45;5m #### \x1B[36;45;5m #### \x1B[37;45;5m #### \x1B[30;45;1;5m #### \x1B[31;45;1;5m #### \x1B[32;45;1;5m #### \x1B[33;45;1;5m #### \x1B[34;45;1;5m #### \x1B[35;45;1;5m #### \x1B[36;45;1;5m #### \x1B[37;45;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;45;5m #### \x1B[31;45;5m #### \x1B[32;45;5m #### \x1B[33;45;5m #### \x1B[34;45;5m #### \x1B[35;45;5m #### \x1B[36;45;5m #### \x1B[37;45;5m #### \x1B[30;45;1;5m #### \x1B[31;45;1;5m #### \x1B[32;45;1;5m #### \x1B[33;45;1;5m #### \x1B[34;45;1;5m #### \x1B[35;45;1;5m #### \x1B[36;45;1;5m #### \x1B[37;45;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;46;5m #### \x1B[31;46;5m #### \x1B[32;46;5m #### \x1B[33;46;5m #### \x1B[34;46;5m #### \x1B[35;46;5m #### \x1B[36;46;5m #### \x1B[37;46;5m #### \x1B[30;46;1;5m #### \x1B[31;46;1;5m #### \x1B[32;46;1;5m #### \x1B[33;46;1;5m #### \x1B[34;46;1;5m #### \x1B[35;46;1;5m #### \x1B[36;46;1;5m #### \x1B[37;46;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 46;5 \x1B[30;46;5m #### \x1B[31;46;5m #### \x1B[32;46;5m #### \x1B[33;46;5m #### \x1B[34;46;5m #### \x1B[35;46;5m #### \x1B[36;46;5m #### \x1B[37;46;5m #### \x1B[30;46;1;5m #### \x1B[31;46;1;5m #### \x1B[32;46;1;5m #### \x1B[33;46;1;5m #### \x1B[34;46;1;5m #### \x1B[35;46;1;5m #### \x1B[36;46;1;5m #### \x1B[37;46;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;46;5m #### \x1B[31;46;5m #### \x1B[32;46;5m #### \x1B[33;46;5m #### \x1B[34;46;5m #### \x1B[35;46;5m #### \x1B[36;46;5m #### \x1B[37;46;5m #### \x1B[30;46;1;5m #### \x1B[31;46;1;5m #### \x1B[32;46;1;5m #### \x1B[33;46;1;5m #### \x1B[34;46;1;5m #### \x1B[35;46;1;5m #### \x1B[36;46;1;5m #### \x1B[37;46;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;47;5m #### \x1B[31;47;5m #### \x1B[32;47;5m #### \x1B[33;47;5m #### \x1B[34;47;5m #### \x1B[35;47;5m #### \x1B[36;47;5m #### \x1B[37;47;5m #### \x1B[30;47;1;5m #### \x1B[31;47;1;5m #### \x1B[32;47;1;5m #### \x1B[33;47;1;5m #### \x1B[34;47;1;5m #### \x1B[35;47;1;5m #### \x1B[36;47;1;5m #### \x1B[37;47;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m 47;5 \x1B[30;47;5m #### \x1B[31;47;5m #### \x1B[32;47;5m #### \x1B[33;47;5m #### \x1B[34;47;5m #### \x1B[35;47;5m #### \x1B[36;47;5m #### \x1B[37;47;5m #### \x1B[30;47;1;5m #### \x1B[31;47;1;5m #### \x1B[32;47;1;5m #### \x1B[33;47;1;5m #### \x1B[34;47;1;5m #### \x1B[35;47;1;5m #### \x1B[36;47;1;5m #### \x1B[37;47;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m \x1B[30;47;5m #### \x1B[31;47;5m #### \x1B[32;47;5m #### \x1B[33;47;5m #### \x1B[34;47;5m #### \x1B[35;47;5m #### \x1B[36;47;5m #### \x1B[37;47;5m #### \x1B[30;47;1;5m #### \x1B[31;47;1;5m #### \x1B[32;47;1;5m #### \x1B[33;47;1;5m #### \x1B[34;47;1;5m #### \x1B[35;47;1;5m #### \x1B[36;47;1;5m #### \x1B[37;47;1;5m #### " << std::endl;
std::wcout << L"\x1B[0m" << std::endl;
}
#endif