| // Copyright (c) 2015-2016 The Khronos Group Inc. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "source/print.h" |
| |
| #if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \ |
| defined(SPIRV_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) || \ |
| defined(SPIRV_OPENBSD) || defined(SPIRV_EMSCRIPTEN) || \ |
| defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU) || defined(SPIRV_QNX) |
| namespace spvtools { |
| |
| clr::reset::operator const char*() { return "\x1b[0m"; } |
| |
| clr::grey::operator const char*() { return "\x1b[1;30m"; } |
| |
| clr::red::operator const char*() { return "\x1b[31m"; } |
| |
| clr::green::operator const char*() { return "\x1b[32m"; } |
| |
| clr::yellow::operator const char*() { return "\x1b[33m"; } |
| |
| clr::blue::operator const char*() { return "\x1b[34m"; } |
| |
| } // namespace spvtools |
| #elif defined(SPIRV_WINDOWS) |
| #include <windows.h> |
| |
| namespace spvtools { |
| |
| static void SetConsoleForegroundColorPrimary(HANDLE hConsole, WORD color) { |
| // Get screen buffer information from console handle |
| CONSOLE_SCREEN_BUFFER_INFO bufInfo; |
| GetConsoleScreenBufferInfo(hConsole, &bufInfo); |
| |
| // Get background color |
| color = WORD(color | (bufInfo.wAttributes & 0xfff0)); |
| |
| // Set foreground color |
| SetConsoleTextAttribute(hConsole, color); |
| } |
| |
| static void SetConsoleForegroundColor(WORD color) { |
| SetConsoleForegroundColorPrimary(GetStdHandle(STD_OUTPUT_HANDLE), color); |
| SetConsoleForegroundColorPrimary(GetStdHandle(STD_ERROR_HANDLE), color); |
| } |
| |
| clr::reset::operator const char*() { |
| if (isPrint) { |
| SetConsoleForegroundColor(0xf); |
| return ""; |
| } |
| return "\x1b[0m"; |
| } |
| |
| clr::grey::operator const char*() { |
| if (isPrint) { |
| SetConsoleForegroundColor(FOREGROUND_INTENSITY); |
| return ""; |
| } |
| return "\x1b[1;30m"; |
| } |
| |
| clr::red::operator const char*() { |
| if (isPrint) { |
| SetConsoleForegroundColor(FOREGROUND_RED); |
| return ""; |
| } |
| return "\x1b[31m"; |
| } |
| |
| clr::green::operator const char*() { |
| if (isPrint) { |
| SetConsoleForegroundColor(FOREGROUND_GREEN); |
| return ""; |
| } |
| return "\x1b[32m"; |
| } |
| |
| clr::yellow::operator const char*() { |
| if (isPrint) { |
| SetConsoleForegroundColor(FOREGROUND_RED | FOREGROUND_GREEN); |
| return ""; |
| } |
| return "\x1b[33m"; |
| } |
| |
| clr::blue::operator const char*() { |
| // Blue all by itself is hard to see against a black background (the |
| // default on command shell), or a medium blue background (the default |
| // on PowerShell). So increase its intensity. |
| |
| if (isPrint) { |
| SetConsoleForegroundColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY); |
| return ""; |
| } |
| return "\x1b[94m"; |
| } |
| |
| } // namespace spvtools |
| #else |
| namespace spvtools { |
| |
| clr::reset::operator const char*() { return ""; } |
| |
| clr::grey::operator const char*() { return ""; } |
| |
| clr::red::operator const char*() { return ""; } |
| |
| clr::green::operator const char*() { return ""; } |
| |
| clr::yellow::operator const char*() { return ""; } |
| |
| clr::blue::operator const char*() { return ""; } |
| |
| } // namespace spvtools |
| #endif |