]> Dogcows Code - chaz/yoink/blobdiff - src/moof/log.cc
testing improved runloop scheduling
[chaz/yoink] / src / moof / log.cc
index 017ce36b2209fe087a79ea43010d9fc2f47f3986..e59740dd2a00e487f2ace56cc84839d1e395db98 100644 (file)
 
 #include <fstream>
 
+#if !defined(__WIN32)
+#include <termios.h>
+#else
+inline int isatty(int dummy) { return 0; }
+#endif
+
+
 #include "log.hh"
 #include "script.hh"
 
@@ -32,19 +39,57 @@ enum log::level log::level()
 }
 
 
-std::ostream& log(std::clog);
+log::log(enum level level) :
+       level_(level)
+{
+       if (isatty(1) == 0)
+               switch (level)
+               {
+                       case log::error:        prefix_ = "  error: ";  break;
+                       case log::warning:      prefix_ = "warning: ";  break;
+                       case log::info:         prefix_ = "   info: ";  break;
+                       case log::debug:        prefix_ = "  debug: ";  break;
+                       case log::none:         break;
+               }
+       else
+               switch (level)
+               {
+                       case log::error:        prefix_ = "\033[30;101m  error: ";      break;
+                       case log::warning:      prefix_ = "\033[30;103mwarning: ";      break;
+                       case log::info:         prefix_ = "   info: ";                          break;
+                       case log::debug:        prefix_ = "\033[2m  debug: ";           break;
+                       case log::none:         break;
+               }
+}
+
+std::ostream& operator << (class log& log, log::endl_ endl)
+{
+       if (log::global_level_ < log.level_) return null_log;
+       if (isatty(1) == 0) return moof::log << std::endl;
+       else return moof::log << "\033[0m" << std::endl;
+}
+
+std::ostream& operator << (std::ostream& stream, log::endl_ endl)
+{
+       if (isatty(1) == 0) return stream << std::endl;
+       else return stream << "\033[0m" << std::endl;
+}
+
+
+std::ostream& log(std::cout);
 
 static std::ofstream null_log_;
 std::ostream& null_log(null_log_);
 
-class log log_error(  log::error,   "  error: ");
-class log log_warning(log::warning, "warning: ");
-class log log_info(   log::info,    "   info: ");
+class log log_error(log::error);
+class log log_warning(log::warning);
+class log log_info(log::info);
+class log log_debug(log::debug);
 
 
 static int log_script(script& script, enum log::level level)
 {
-       static class log* logs[] = {0, &log_error, &log_warning, &log_info};
+       static class log* logs[] = {0, &log_error, &log_warning, &log_info, &log_debug};
 
        script::slot param = script[1];
 
@@ -67,6 +112,8 @@ void log::import(script& script)
                                                  boost::bind(log_script, _1, log::info));
        script.import_function("print",
                                                  boost::bind(log_script, _1, log::info));
+       script.import_function("LogDebug",
+                                                 boost::bind(log_script, _1, log::debug));
 }
 
 
This page took 0.017 seconds and 4 git commands to generate.