1*03ce13f7SAndroid Build Coastguard Worker // Copyright (c) 2015-2016 The Khronos Group Inc.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker
15*03ce13f7SAndroid Build Coastguard Worker #include "source/print.h"
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Worker #if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \
18*03ce13f7SAndroid Build Coastguard Worker defined(SPIRV_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) || \
19*03ce13f7SAndroid Build Coastguard Worker defined(SPIRV_OPENBSD) || defined(SPIRV_EMSCRIPTEN) || \
20*03ce13f7SAndroid Build Coastguard Worker defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU) || defined(SPIRV_QNX)
21*03ce13f7SAndroid Build Coastguard Worker namespace spvtools {
22*03ce13f7SAndroid Build Coastguard Worker
operator const char*()23*03ce13f7SAndroid Build Coastguard Worker clr::reset::operator const char*() { return "\x1b[0m"; }
24*03ce13f7SAndroid Build Coastguard Worker
operator const char*()25*03ce13f7SAndroid Build Coastguard Worker clr::grey::operator const char*() { return "\x1b[1;30m"; }
26*03ce13f7SAndroid Build Coastguard Worker
operator const char*()27*03ce13f7SAndroid Build Coastguard Worker clr::red::operator const char*() { return "\x1b[31m"; }
28*03ce13f7SAndroid Build Coastguard Worker
operator const char*()29*03ce13f7SAndroid Build Coastguard Worker clr::green::operator const char*() { return "\x1b[32m"; }
30*03ce13f7SAndroid Build Coastguard Worker
operator const char*()31*03ce13f7SAndroid Build Coastguard Worker clr::yellow::operator const char*() { return "\x1b[33m"; }
32*03ce13f7SAndroid Build Coastguard Worker
operator const char*()33*03ce13f7SAndroid Build Coastguard Worker clr::blue::operator const char*() { return "\x1b[34m"; }
34*03ce13f7SAndroid Build Coastguard Worker
35*03ce13f7SAndroid Build Coastguard Worker } // namespace spvtools
36*03ce13f7SAndroid Build Coastguard Worker #elif defined(SPIRV_WINDOWS)
37*03ce13f7SAndroid Build Coastguard Worker #include <windows.h>
38*03ce13f7SAndroid Build Coastguard Worker
39*03ce13f7SAndroid Build Coastguard Worker namespace spvtools {
40*03ce13f7SAndroid Build Coastguard Worker
SetConsoleForegroundColorPrimary(HANDLE hConsole,WORD color)41*03ce13f7SAndroid Build Coastguard Worker static void SetConsoleForegroundColorPrimary(HANDLE hConsole, WORD color) {
42*03ce13f7SAndroid Build Coastguard Worker // Get screen buffer information from console handle
43*03ce13f7SAndroid Build Coastguard Worker CONSOLE_SCREEN_BUFFER_INFO bufInfo;
44*03ce13f7SAndroid Build Coastguard Worker GetConsoleScreenBufferInfo(hConsole, &bufInfo);
45*03ce13f7SAndroid Build Coastguard Worker
46*03ce13f7SAndroid Build Coastguard Worker // Get background color
47*03ce13f7SAndroid Build Coastguard Worker color = WORD(color | (bufInfo.wAttributes & 0xfff0));
48*03ce13f7SAndroid Build Coastguard Worker
49*03ce13f7SAndroid Build Coastguard Worker // Set foreground color
50*03ce13f7SAndroid Build Coastguard Worker SetConsoleTextAttribute(hConsole, color);
51*03ce13f7SAndroid Build Coastguard Worker }
52*03ce13f7SAndroid Build Coastguard Worker
SetConsoleForegroundColor(WORD color)53*03ce13f7SAndroid Build Coastguard Worker static void SetConsoleForegroundColor(WORD color) {
54*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColorPrimary(GetStdHandle(STD_OUTPUT_HANDLE), color);
55*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColorPrimary(GetStdHandle(STD_ERROR_HANDLE), color);
56*03ce13f7SAndroid Build Coastguard Worker }
57*03ce13f7SAndroid Build Coastguard Worker
operator const char*()58*03ce13f7SAndroid Build Coastguard Worker clr::reset::operator const char*() {
59*03ce13f7SAndroid Build Coastguard Worker if (isPrint) {
60*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColor(0xf);
61*03ce13f7SAndroid Build Coastguard Worker return "";
62*03ce13f7SAndroid Build Coastguard Worker }
63*03ce13f7SAndroid Build Coastguard Worker return "\x1b[0m";
64*03ce13f7SAndroid Build Coastguard Worker }
65*03ce13f7SAndroid Build Coastguard Worker
operator const char*()66*03ce13f7SAndroid Build Coastguard Worker clr::grey::operator const char*() {
67*03ce13f7SAndroid Build Coastguard Worker if (isPrint) {
68*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColor(FOREGROUND_INTENSITY);
69*03ce13f7SAndroid Build Coastguard Worker return "";
70*03ce13f7SAndroid Build Coastguard Worker }
71*03ce13f7SAndroid Build Coastguard Worker return "\x1b[1;30m";
72*03ce13f7SAndroid Build Coastguard Worker }
73*03ce13f7SAndroid Build Coastguard Worker
operator const char*()74*03ce13f7SAndroid Build Coastguard Worker clr::red::operator const char*() {
75*03ce13f7SAndroid Build Coastguard Worker if (isPrint) {
76*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColor(FOREGROUND_RED);
77*03ce13f7SAndroid Build Coastguard Worker return "";
78*03ce13f7SAndroid Build Coastguard Worker }
79*03ce13f7SAndroid Build Coastguard Worker return "\x1b[31m";
80*03ce13f7SAndroid Build Coastguard Worker }
81*03ce13f7SAndroid Build Coastguard Worker
operator const char*()82*03ce13f7SAndroid Build Coastguard Worker clr::green::operator const char*() {
83*03ce13f7SAndroid Build Coastguard Worker if (isPrint) {
84*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColor(FOREGROUND_GREEN);
85*03ce13f7SAndroid Build Coastguard Worker return "";
86*03ce13f7SAndroid Build Coastguard Worker }
87*03ce13f7SAndroid Build Coastguard Worker return "\x1b[32m";
88*03ce13f7SAndroid Build Coastguard Worker }
89*03ce13f7SAndroid Build Coastguard Worker
operator const char*()90*03ce13f7SAndroid Build Coastguard Worker clr::yellow::operator const char*() {
91*03ce13f7SAndroid Build Coastguard Worker if (isPrint) {
92*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColor(FOREGROUND_RED | FOREGROUND_GREEN);
93*03ce13f7SAndroid Build Coastguard Worker return "";
94*03ce13f7SAndroid Build Coastguard Worker }
95*03ce13f7SAndroid Build Coastguard Worker return "\x1b[33m";
96*03ce13f7SAndroid Build Coastguard Worker }
97*03ce13f7SAndroid Build Coastguard Worker
operator const char*()98*03ce13f7SAndroid Build Coastguard Worker clr::blue::operator const char*() {
99*03ce13f7SAndroid Build Coastguard Worker // Blue all by itself is hard to see against a black background (the
100*03ce13f7SAndroid Build Coastguard Worker // default on command shell), or a medium blue background (the default
101*03ce13f7SAndroid Build Coastguard Worker // on PowerShell). So increase its intensity.
102*03ce13f7SAndroid Build Coastguard Worker
103*03ce13f7SAndroid Build Coastguard Worker if (isPrint) {
104*03ce13f7SAndroid Build Coastguard Worker SetConsoleForegroundColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
105*03ce13f7SAndroid Build Coastguard Worker return "";
106*03ce13f7SAndroid Build Coastguard Worker }
107*03ce13f7SAndroid Build Coastguard Worker return "\x1b[94m";
108*03ce13f7SAndroid Build Coastguard Worker }
109*03ce13f7SAndroid Build Coastguard Worker
110*03ce13f7SAndroid Build Coastguard Worker } // namespace spvtools
111*03ce13f7SAndroid Build Coastguard Worker #else
112*03ce13f7SAndroid Build Coastguard Worker namespace spvtools {
113*03ce13f7SAndroid Build Coastguard Worker
operator const char*()114*03ce13f7SAndroid Build Coastguard Worker clr::reset::operator const char*() { return ""; }
115*03ce13f7SAndroid Build Coastguard Worker
operator const char*()116*03ce13f7SAndroid Build Coastguard Worker clr::grey::operator const char*() { return ""; }
117*03ce13f7SAndroid Build Coastguard Worker
operator const char*()118*03ce13f7SAndroid Build Coastguard Worker clr::red::operator const char*() { return ""; }
119*03ce13f7SAndroid Build Coastguard Worker
operator const char*()120*03ce13f7SAndroid Build Coastguard Worker clr::green::operator const char*() { return ""; }
121*03ce13f7SAndroid Build Coastguard Worker
operator const char*()122*03ce13f7SAndroid Build Coastguard Worker clr::yellow::operator const char*() { return ""; }
123*03ce13f7SAndroid Build Coastguard Worker
operator const char*()124*03ce13f7SAndroid Build Coastguard Worker clr::blue::operator const char*() { return ""; }
125*03ce13f7SAndroid Build Coastguard Worker
126*03ce13f7SAndroid Build Coastguard Worker } // namespace spvtools
127*03ce13f7SAndroid Build Coastguard Worker #endif
128