danicoin/src/Common/ConsoleTools.cpp
2016-01-18 15:33:29 +00:00

92 lines
2 KiB
C++

// Copyright (c) 2011-2016 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 <stdio.h>
#ifdef _WIN32
#include <Windows.h>
#include <io.h>
#else
#include <iostream>
#include <unistd.h>
#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<size_t>(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<size_t>(color)];
#endif
}
}}