// Copyright (c) 2011-2015 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "ConsoleTools.h" #include #ifdef _WIN32 #include #include #else #include #include #endif namespace Common { namespace Console { bool isConsoleTty() { #if defined(WIN32) static bool istty = 0 != _isatty(_fileno(stdout)); #else static bool istty = 0 != isatty(fileno(stdout)); #endif return istty; } void setTextColor(Color color) { if (!isConsoleTty()) { return; } if (color > Color::BrightMagenta) { color = Color::Default; } #ifdef _WIN32 static WORD winColors[] = { // default FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, // main FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_RED | FOREGROUND_GREEN, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, FOREGROUND_GREEN | FOREGROUND_BLUE, FOREGROUND_RED | FOREGROUND_BLUE, // bright FOREGROUND_BLUE | FOREGROUND_INTENSITY, FOREGROUND_GREEN | FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY }; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), winColors[static_cast(color)]); #else static const char* ansiColors[] = { // default "\033[0m", // main "\033[0;34m", "\033[0;32m", "\033[0;31m", "\033[0;33m", "\033[0;37m", "\033[0;36m", "\033[0;35m", // bright "\033[1;34m", "\033[1;32m", "\033[1;31m", "\033[1;33m", "\033[1;37m", "\033[1;36m", "\033[1;35m" }; std::cout << ansiColors[static_cast(color)]; #endif } }}