]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/consolecolors.h
Fix STATUSMSG tag messages not including the status in the target.
[user/henk/code/inspircd.git] / include / consolecolors.h
index f7ca1335ed244f16514d457d4fa035971fab2996..fdc351f5a4b6e52059d5c0d1148ba6e7c6060318 100644 (file)
@@ -1,6 +1,10 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
+ *   Copyright (C) 2013, 2019 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2012 ChrisTX <xpipe@hotmail.de>
+ *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
  * License as published by the Free Software Foundation, version 2.
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONSOLECOLORS_H
-#define CONSOLECOLORS_H
+
+#pragma once
 
 #include <ostream>
+#include <stdio.h>
+
+#ifdef _WIN32
+# include <io.h>
+# define isatty(x) _isatty((x))
+# define fileno(x) _fileno((x))
+#else
+# include <unistd.h>
+#endif
+
+namespace
+{
+       inline bool CanUseColors()
+       {
+#ifdef INSPIRCD_DISABLE_COLORS
+               return false;
+#else
+               return isatty(fileno(stdout));
+#endif
+       }
+}
 
 #ifdef _WIN32
 
@@ -27,74 +52,90 @@ extern WORD g_wOriginalColors;
 extern WORD g_wBackgroundColor;
 extern HANDLE g_hStdout;
 
-inline std::ostream& con_green(std::ostream &s)
+inline std::ostream& con_green(std::ostream& stream)
 {
-    SetConsoleTextAttribute(g_hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
-    return s;
+       if (CanUseColors())
+               SetConsoleTextAttribute(g_hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
+       return stream;
 }
 
-inline std::ostream& con_red(std::ostream &s)
+inline std::ostream& con_red(std::ostream& stream)
 {
-    SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_INTENSITY|g_wBackgroundColor);
-    return s;
+       if (CanUseColors())
+               SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_INTENSITY|g_wBackgroundColor);
+       return stream;
 }
 
-inline std::ostream& con_white(std::ostream &s)
+inline std::ostream& con_white(std::ostream& stream)
 {
-    SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|g_wBackgroundColor);
-    return s;
+       if (CanUseColors())
+               SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|g_wBackgroundColor);
+       return stream;
 }
 
-inline std::ostream& con_white_bright(std::ostream &s)
+inline std::ostream& con_white_bright(std::ostream& stream)
 {
-    SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
-    return s;
+       if (CanUseColors())
+               SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
+       return stream;
 }
 
-inline std::ostream& con_bright(std::ostream &s)
+inline std::ostream& con_bright(std::ostream& stream)
 {
-    SetConsoleTextAttribute(g_hStdout, FOREGROUND_INTENSITY|g_wBackgroundColor);
-    return s;
+       if (CanUseColors())
+               SetConsoleTextAttribute(g_hStdout, FOREGROUND_INTENSITY|g_wBackgroundColor);
+       return stream;
 }
 
-inline std::ostream& con_reset(std::ostream &s)
+inline std::ostream& con_reset(std::ostream& stream)
 {
-    SetConsoleTextAttribute(g_hStdout, g_wOriginalColors);
-    return s;
+       if (CanUseColors())
+               SetConsoleTextAttribute(g_hStdout, g_wOriginalColors);
+       return stream;
 }
 
 #else
 
-inline std::ostream& con_green(std::ostream &s)
+inline std::ostream& con_green(std::ostream& stream)
 {
-    return s << "\033[1;32m";
+       if (!CanUseColors())
+               return stream;
+       return stream << "\033[1;32m";
 }
 
-inline std::ostream& con_red(std::ostream &s)
+inline std::ostream& con_red(std::ostream& stream)
 {
-    return s << "\033[1;31m";
+       if (!CanUseColors())
+               return stream;
+       return stream << "\033[1;31m";
 }
 
-inline std::ostream& con_white(std::ostream &s)
+inline std::ostream& con_white(std::ostream& stream)
 {
-    return s << "\033[0m";
+       if (!CanUseColors())
+               return stream;
+       return stream << "\033[0m";
 }
 
-inline std::ostream& con_white_bright(std::ostream &s)
+inline std::ostream& con_white_bright(std::ostream& stream)
 {
-    return s << "\033[1m";
+       if (!CanUseColors())
+               return stream;
+       return stream << "\033[1m";
 }
 
-inline std::ostream& con_bright(std::ostream &s)
+inline std::ostream& con_bright(std::ostream& stream)
 {
-    return s << "\033[1m";
+       if (!CanUseColors())
+               return stream;
+       return stream << "\033[1m";
 }
 
-inline std::ostream& con_reset(std::ostream &s)
+inline std::ostream& con_reset(std::ostream& stream)
 {
-    return s << "\033[0m";
+       if (!CanUseColors())
+               return stream;
+       return stream << "\033[0m";
 }
 
 #endif
-
-#endif