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