Index: trunk/MagicSoft/Mars/mbase/MLog.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MLog.cc	(revision 2052)
+++ trunk/MagicSoft/Mars/mbase/MLog.cc	(revision 2054)
@@ -89,4 +89,19 @@
 // check for TObjectWarning, TObject::Info, gErrorIgnoreLevel
 
+const char MLog::kESC = '\033'; // (char)27
+const char *const MLog::kEsc       = "\033[";
+const char *const MLog::kReset     = "\033[0m";
+const char *const MLog::kRed       = "\033[31m";
+const char *const MLog::kGreen     = "\033[32m";
+#ifdef HAVE_DARKBACKGROUND
+const char *const MLog::kYellow    = "\033[33m\033[1m";
+#else
+const char *const MLog::kYellow    = "\033[33m";
+#endif
+const char *const MLog::kUnderline = "\033[4m";;
+const char *const MLog::kBlink     = "\033[5m";;
+const char *const MLog::kBright    = "\033[1m";;
+const char *const MLog::kDark      = "\033[2m";;
+
 //
 // This is the definition of the global log facility
@@ -180,4 +195,28 @@
 }
 
+void MLog::Output(ostream &out, int len)
+{
+    if (!TestBit(eNoColors))
+        switch (fOutputLevel)
+        {
+        case 0:  out << MLog::kReset;   break;  // all
+        case 1:  out << MLog::kRed;     break;  // err
+        case 2:  out << MLog::kYellow;  break;  // warn
+        case 3:  out << MLog::kGreen;   break;  // inf
+        }
+
+    // Check for EOL
+    const Bool_t endline = fBase[len-1]=='\n';
+    // output text to screen (without trailing '\0' or '\n')
+    out << TString(fBase, len-1);
+    // reset colors if working with colors
+    if (!TestBit(eNoColors))
+        out << kReset;
+    // output EOL of check found EOL
+    if (endline)
+        out << '\n';
+    out.flush();
+}
+
 // --------------------------------------------------------------------------
 //
@@ -198,8 +237,8 @@
 
     if (fDevice&eStdout)
-        cout.write(fBase, len);
+        Output(cout, len);
 
     if (fDevice&eStderr)
-        cerr.write(fBase, len);
+        Output(cerr, len);
 
     if (fDevice&eFile && fout)
@@ -289,5 +328,8 @@
 
     if (fDevice&eStdout)
+    {
+        cout << kReset;
         cout.flush();
+    }
 
     if (fDevice&eStderr)
Index: trunk/MagicSoft/Mars/mbase/MLog.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MLog.h	(revision 2052)
+++ trunk/MagicSoft/Mars/mbase/MLog.h	(revision 2054)
@@ -23,7 +23,24 @@
 {
 public:
-    typedef enum _flags { eStdout = 0x1, eStderr = 0x2, eFile = 0x4, eGui = 0x8 } Flags_t;
+    typedef enum _flags {
+        eStdout   = 0x001,
+        eStderr   = 0x002,
+        eFile     = 0x004,
+        eGui      = 0x008,
+        eNoColors = 0x400  //BIT(15)
+    } Flags_t;
 
 private:
+    static const char kESC;
+    static const char *const kEsc;
+    static const char *const kReset;
+    static const char *const kRed;
+    static const char *const kGreen;
+    static const char *const kYellow;
+    static const char *const kUnderline;
+    static const char *const kBlink;
+    static const char *const kBright;
+    static const char *const kDark;
+
     char        fBuffer;      //!
     char        fBase[bsz+1]; //! Buffer to store the data in
@@ -46,6 +63,5 @@
     TString  **fGuiLines;     //! Lines to pipe to gui
     Int_t      fNumLines;     //!
-//    Bool_t     fGuiLineFlushed;
-    TString    fGuiLine;  //!
+    TString    fGuiLine;      //!
 
 #ifdef _REENTRANT
@@ -63,4 +79,5 @@
     void ReallocateFile(const char *f);
     void CheckFlag(Flags_t chk, int flag);
+    void Output(ostream &out, int len);
 
 public:
@@ -143,4 +160,6 @@
     void SetNullOutput(Bool_t n=kTRUE) { fIsNull = n; }
 
+    void SetNoColors(Bool_t flag=kTRUE) { flag ? SetBit(eNoColors) : ResetBit(eNoColors); }
+
     ClassDef(MLog, 0) // This is what we call 'The logging system'
 };
Index: trunk/MagicSoft/Mars/mbase/MLogo.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MLogo.cc	(revision 2052)
+++ trunk/MagicSoft/Mars/mbase/MLogo.cc	(revision 2054)
@@ -32,4 +32,5 @@
 //                                                                          //
 //////////////////////////////////////////////////////////////////////////////
+#ifdef HAVE_XPM
 #include "MLogo.h"
 
@@ -123,7 +124,7 @@
                                       mag1, &logo, 0, &attr);
 #else
-#include "../marslogo_neu.xpm"
+#include "../marslogo.xpm"
     int ret = XpmCreatePixmapFromData(fDisplay, fLogoWindow,
-                                      marslogo_neu_xpm, &logo, 0, &attr);
+                                      marslogo, &logo, 0, &attr);
 #endif
     XpmFreeAttributes(&attr);
@@ -206,2 +207,3 @@
     }
 }
+#endif
Index: trunk/MagicSoft/Mars/mbase/MLogo.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MLogo.h	(revision 2052)
+++ trunk/MagicSoft/Mars/mbase/MLogo.h	(revision 2054)
@@ -1,4 +1,6 @@
 #ifndef MARS_MLogo
 #define MARS_MLogo
+
+#ifdef HAVE_XPM
 
 #ifndef __CINT__
@@ -31,5 +33,5 @@
 };
 
-#endif
-
-#endif
+#endif // __CINT__
+#endif // HAVE_XPM
+#endif // MARS_MLogo
Index: trunk/MagicSoft/Mars/mbase/Makefile
===================================================================
--- trunk/MagicSoft/Mars/mbase/Makefile	(revision 2052)
+++ trunk/MagicSoft/Mars/mbase/Makefile	(revision 2054)
@@ -50,4 +50,5 @@
            MContinue.cc \
            MPrint.cc \
+           MLogo.cc \
            MLogManip.cc
 
