diff --git a/contrib/otshell_utils/windows_stream.cpp b/contrib/otshell_utils/windows_stream.cpp new file mode 100644 index 000000000..59d8b12a3 --- /dev/null +++ b/contrib/otshell_utils/windows_stream.cpp @@ -0,0 +1,64 @@ +#if defined(_WIN32) +#include "windows_stream.h" +#include + +windows_stream::windows_stream(unsigned int pLevel) + : + mLevel(pLevel) +{ +} + +std::ostream& operator << (std::ostream &stream, windows_stream const& object) +{ + HANDLE h_stdout = GetStdHandle(STD_OUTPUT_HANDLE); + + if (object.mLevel >= 100) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 90) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 80) + { + SetConsoleTextAttribute(h_stdout, BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 75) + { + SetConsoleTextAttribute(h_stdout, BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 70) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_GREEN | FOREGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 50) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 40) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 30) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_BLUE | FOREGROUND_INTENSITY); + return stream; + } + if (object.mLevel >= 20) + { + SetConsoleTextAttribute(h_stdout, FOREGROUND_BLUE); + return stream; + } + + return stream; +} + +#endif diff --git a/contrib/otshell_utils/windows_stream.h b/contrib/otshell_utils/windows_stream.h new file mode 100644 index 000000000..859e7ee50 --- /dev/null +++ b/contrib/otshell_utils/windows_stream.h @@ -0,0 +1,20 @@ +#ifndef WINDOWS_STREAM_H +#define WINDOWS_STREAM_H + +#if defined(_WIN32) + +#include +#include + +class windows_stream +{ +public: + windows_stream(unsigned int pLevel); + friend std::ostream& operator<<(std::ostream &stream, windows_stream const& object); +private: + unsigned int mLevel = 0; +}; + +#endif // _WIN32 + +#endif // WINDOWS_STREAM_H