0031189: Draw Harness, ViewerTest - send messages to Message::DefaultMessenger()
authorkgv <kgv@opencascade.com>
Sun, 24 Nov 2019 12:02:39 +0000 (15:02 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 30 Apr 2020 16:42:44 +0000 (19:42 +0300)
Added short-cuts methods in Message_Messenger for sending message with specified gravity,
and stream buffer class for using stream-like interface for that.
Similar short-cuts to DefaultMessenger() are added in Message package.

ViewerTest has been updated to send messages to Message::DefaultMessenger()
instead of direct output to std::cout/std::cerr.

Off-topic: spelling error (duplicate "and") is corrected in two places

Added test bugs fclasses bug31189

13 files changed:
src/Message/Message.hxx
src/Message/Message_Messenger.hxx
src/OSD/OSD_Parallel.cxx
src/QABugs/QABugs_11.cxx
src/ViewerTest/ViewerTest.cxx
src/ViewerTest/ViewerTest_CmdParser.cxx
src/ViewerTest/ViewerTest_ObjectCommands.cxx
src/ViewerTest/ViewerTest_OpenGlCommands.cxx
src/ViewerTest/ViewerTest_RelationCommands.cxx
src/ViewerTest/ViewerTest_ViewerCommands.cxx
src/gce/gce_MakeCone.hxx
tests/bugs/fclasses/bug31189 [new file with mode: 0644]
tests/bugs/vis/bug26035_2

index 4be7113..19ec2d8 100644 (file)
 #ifndef _Message_HeaderFile
 #define _Message_HeaderFile
 
-#include <Standard.hxx>
-#include <Standard_DefineAlloc.hxx>
-#include <Standard_Handle.hxx>
-
-#include <Standard_Integer.hxx>
-#include <Standard_Real.hxx>
-class Message_Messenger;
-class TCollection_AsciiString;
-class Message_Msg;
-class Message_MsgFile;
-class Message_Messenger;
-class Message_Algorithm;
-class Message_Printer;
-class Message_PrinterOStream;
-class Message_ProgressIndicator;
-class Message_ProgressScale;
-class Message_ProgressSentry;
-
+#include <Message_Messenger.hxx>
 
 //! Defines
 //! - tools to work with messages
 //! - basic tools intended for progress indication
-class Message 
+class Message
 {
 public:
 
   DEFINE_STANDARD_ALLOC
 
-  
   //! Defines default messenger for OCCT applications.
   //! This is global static instance of the messenger.
   //! By default, it contains single printer directed to std::cout.
   //! It can be customized according to the application needs.
+  //!
+  //! The following syntax can be used to print messages:
+  //! @begincode
+  //!   Message::DefaultMessenger()->Send ("My Warning", Message_Warning);
+  //!   Message::SendWarning ("My Warning"); // short-cut for Message_Warning
+  //!   Message::SendWarning() << "My Warning with " << theCounter << " arguments";
+  //!   Message::SendFail ("My Failure"); // short-cut for Message_Fail
+  //! @endcode
   Standard_EXPORT static const Handle(Message_Messenger)& DefaultMessenger();
-  
+
+public:
+  //!@name Short-cuts to DefaultMessenger
+
+  static Message_Messenger::StreamBuffer Send(Message_Gravity theGravity)
+  {
+    return DefaultMessenger()->Send (theGravity);
+  }
+
+  static void Send(const TCollection_AsciiString& theMessage, Message_Gravity theGravity)
+  {
+    DefaultMessenger()->Send (theMessage, theGravity);
+  }
+
+  static Message_Messenger::StreamBuffer SendFail()    { return DefaultMessenger()->SendFail ();    }
+  static Message_Messenger::StreamBuffer SendAlarm()   { return DefaultMessenger()->SendAlarm ();   }
+  static Message_Messenger::StreamBuffer SendWarning() { return DefaultMessenger()->SendWarning (); }
+  static Message_Messenger::StreamBuffer SendInfo()    { return DefaultMessenger()->SendInfo ();    }
+  static Message_Messenger::StreamBuffer SendTrace()   { return DefaultMessenger()->SendTrace ();   }
+
+  static void SendFail    (const TCollection_AsciiString& theMessage) { return DefaultMessenger()->SendFail    (theMessage); }
+  static void SendAlarm   (const TCollection_AsciiString& theMessage) { return DefaultMessenger()->SendAlarm   (theMessage); }
+  static void SendWarning (const TCollection_AsciiString& theMessage) { return DefaultMessenger()->SendWarning (theMessage); }
+  static void SendInfo    (const TCollection_AsciiString& theMessage) { return DefaultMessenger()->SendInfo    (theMessage); }
+  static void SendTrace   (const TCollection_AsciiString& theMessage) { return DefaultMessenger()->SendTrace   (theMessage); }
+
+public:
+
   //! Returns the string filled with values of hours, minutes and seconds.
   //! Example:
   //! 1. (5, 12, 26.3345) returns "05h:12m:26.33s",
@@ -59,36 +76,6 @@ public:
   //! 3. (0,  0,  4.5   ) returns "4.50s"
   Standard_EXPORT static TCollection_AsciiString FillTime (const Standard_Integer Hour, const Standard_Integer Minute, const Standard_Real Second);
 
-
-
-
-protected:
-
-
-
-
-
-private:
-
-
-
-
-friend class Message_Msg;
-friend class Message_MsgFile;
-friend class Message_Messenger;
-friend class Message_Algorithm;
-friend class Message_Printer;
-friend class Message_PrinterOStream;
-friend class Message_ProgressIndicator;
-friend class Message_ProgressScale;
-friend class Message_ProgressSentry;
-
 };
 
-
-
-
-
-
-
 #endif // _Message_HeaderFile
index 675fba3..2213edb 100644 (file)
 
 #include <Message_Gravity.hxx>
 #include <Message_SequenceOfPrinters.hxx>
-#include <Standard_Transient.hxx>
-#include <Standard_Boolean.hxx>
-#include <Standard_Integer.hxx>
-#include <Standard_Type.hxx>
-#include <Standard_CString.hxx>
+
 #include <TCollection_HAsciiString.hxx>
 #include <TCollection_HExtendedString.hxx>
 
@@ -44,14 +40,96 @@ DEFINE_STANDARD_HANDLE(Message_Messenger, Standard_Transient)
 //! customized by the application, and dispatches every received
 //! message to all the printers.
 //!
-//! For convenience, a number of operators << are defined with left
-//! argument being Handle(Message_Messenger); thus it can be used
-//! with syntax similar to C++ streams.
-//! Note that all these operators use trace level Warning.
+//! For convenience, a set of methods Send...() returning a string
+//! stream buffer is defined for use of stream-like syntax with operator << 
+//!
+//! Example:
+//! ~~~~~
+//! Messenger->SendFail() << " Unknown fail at line " << aLineNo << " in file " << aFile;
+//! ~~~~~
+//!
+//! The message is sent to messenger on destruction of the stream buffer,
+//! call to Flush(), or passing manipulator std::ends, std::endl, or std::flush.
+//! Empty messages are not sent except if manipulator is used.
 class Message_Messenger : public Standard_Transient
 {
   DEFINE_STANDARD_RTTIEXT(Message_Messenger, Standard_Transient)
 public:
+  //! Auxiliary class wrapping std::stringstream thus allowing constructing
+  //! message via stream interface, and putting result into its creator
+  //! Message_Messenger within destructor.
+  //!
+  //! It is intended to be used either as temporary object or as local
+  //! variable, note that content will be lost if it is copied.
+  class StreamBuffer
+  {
+  public:
+
+    //! Destructor flushing constructed message.
+    ~StreamBuffer() { Flush(); }
+
+    //! Flush collected string to messenger
+    void Flush(Standard_Boolean doForce = Standard_False)
+    {
+      myStream.flush();
+      if (doForce || myStream.rdbuf()->in_avail() > 0)
+      {
+        myMessenger->Send (myStream.str().c_str(), myGravity);
+        myStream.str(std::string()); // empty the buffer for possible reuse
+      }
+    }
+
+    //! Formal copy constructor.
+    //!
+    //! Since buffer is intended for use as temporary object or local
+    //! variable, copy (or move) is needed only formally to be able to
+    //! return the new instance from relevant creation method.
+    //! In practice it should never be called because modern compilers
+    //! create such instances in place.
+    //! However note that if this constructor is called, the buffer
+    //! content (string) will not be copied  (move is not supported for
+    //! std::stringstream class on old compilers such as gcc 4.4, msvc 9).
+    StreamBuffer (const StreamBuffer& theOther)
+    : myMessenger(theOther.myMessenger), myGravity(theOther.myGravity)
+    {
+    }
+
+    //! Wrapper for operator << of the stream
+    template <typename T>
+    StreamBuffer& operator << (const T& theArg)
+    {
+      myStream << theArg;
+      return *this;
+    }
+
+    //! Operator << for manipulators of ostream (ends, endl, flush),
+    //! flushes the buffer (sends the message)
+    StreamBuffer& operator << (std::ostream& (*)(std::ostream&))
+    {
+      Flush(Standard_True);
+      return *this;
+    }
+
+    //! Access to the stream object
+    Standard_SStream& Stream () { return myStream; }
+
+  private:
+    friend class Message_Messenger;
+
+    //! Main constructor creating temporary buffer.
+    //! Accessible only to Messenger class.
+    StreamBuffer (Message_Messenger* theMessenger, Message_Gravity theGravity)
+    : myMessenger (theMessenger),
+      myGravity (theGravity)
+    {}
+
+  private:
+    Message_Messenger* myMessenger; // don't make a Handle since this object should be created on stack
+    Message_Gravity    myGravity;
+    Standard_SStream   myStream;
+  };
+
+public:
 
   //! Empty constructor; initializes by single printer directed to std::cout.
   //! Note: the default messenger is not empty but directed to cout
@@ -90,13 +168,52 @@ public:
   //! The parameter putEndl specifies whether the new line should
   //! be started after this message (default) or not (may have
   //! sense in some conditions).
-  Standard_EXPORT void Send (const Standard_CString theString, const Message_Gravity theGravity = Message_Warning, const Standard_Boolean putEndl = Standard_True) const;
+  Standard_EXPORT void Send (const Standard_CString theString,
+                             const Message_Gravity theGravity = Message_Warning,
+                             const Standard_Boolean putEndl = Standard_True) const;
   
   //! See above
-  Standard_EXPORT void Send (const TCollection_AsciiString& theString, const Message_Gravity theGravity = Message_Warning, const Standard_Boolean putEndl = Standard_True) const;
+  Standard_EXPORT void Send (const TCollection_AsciiString& theString,
+                             const Message_Gravity theGravity = Message_Warning,
+                             const Standard_Boolean putEndl = Standard_True) const;
   
   //! See above
-  Standard_EXPORT void Send (const TCollection_ExtendedString& theString, const Message_Gravity theGravity = Message_Warning, const Standard_Boolean putEndl = Standard_True) const;
+  Standard_EXPORT void Send (const TCollection_ExtendedString& theString,
+                             const Message_Gravity theGravity = Message_Warning,
+                             const Standard_Boolean putEndl = Standard_True) const;
+
+  //! Create string buffer for message of specified type
+  StreamBuffer Send (Message_Gravity theGravity) { return StreamBuffer (this, theGravity); }
+
+  //! Create string buffer for sending Fail message
+  StreamBuffer SendFail () { return Send (Message_Fail); }
+
+  //! Create string buffer for sending Alarm message
+  StreamBuffer SendAlarm () { return Send (Message_Alarm); }
+
+  //! Create string buffer for sending Warning message
+  StreamBuffer SendWarning () { return Send (Message_Warning); }
+
+  //! Create string buffer for sending Info message
+  StreamBuffer SendInfo () { return Send (Message_Info); }
+
+  //! Create string buffer for sending Trace message
+  StreamBuffer SendTrace () { return Send (Message_Trace); }
+
+  //! Short-cut to Send (theMessage, Message_Fail)
+  void SendFail (const TCollection_AsciiString& theMessage) { Send (theMessage, Message_Fail); }
+
+  //! Short-cut to Send (theMessage, Message_Alarm)
+  void SendAlarm (const TCollection_AsciiString& theMessage) { Send (theMessage, Message_Alarm); }
+
+  //! Short-cut to Send (theMessage, Message_Warning)
+  void SendWarning (const TCollection_AsciiString& theMessage) { Send (theMessage, Message_Warning); }
+
+  //! Short-cut to Send (theMessage, Message_Info)
+  void SendInfo (const TCollection_AsciiString& theMessage) { Send (theMessage, Message_Info); }
+
+  //! Short-cut to Send (theMessage, Message_Trace)
+  void SendTrace (const TCollection_AsciiString& theMessage) { Send (theMessage, Message_Trace); }
 
 private:
 
index d112341..30fc2ad 100644 (file)
@@ -140,7 +140,7 @@ namespace {
         return aCpuMask;
       }
 
-      // if we're not at the end of the item, expect a dash and and integer; extract end value.
+      // if we're not at the end of the item, expect a dash and integer; extract end value.
       int anIndexUpper = anIndexLower;
       if (aCharIter < aChunkEnd && *aCharIter == '-')
       {
index dff3a55..7c0be73 100644 (file)
@@ -91,6 +91,8 @@
 #include <BRepFeat_SplitShape.hxx>
 #include <BRepAlgoAPI_Section.hxx>
 #include <TColStd_PackedMapOfInteger.hxx>
+#include <Message.hxx>
+#include <Draw_Printer.hxx>
 
 #if ! defined(_WIN32)
 extern ViewerTest_DoubleMapOfInteractiveAndName& GetMapOfAIS();
@@ -4770,6 +4772,43 @@ Standard_Integer OCC28478 (Draw_Interpretor& di, Standard_Integer argc, const ch
   return 0;
 }
 
+Standard_Integer OCC31189 (Draw_Interpretor& theDI, Standard_Integer /*argc*/, const char ** /*argv*/)
+{
+  // redirect output of default messenger to DRAW (temporarily)
+  const Handle(Message_Messenger)& aMsgMgr = Message::DefaultMessenger();
+  Message_SequenceOfPrinters aPrinters;
+  aPrinters.Append (aMsgMgr->ChangePrinters());
+  aMsgMgr->AddPrinter (new Draw_Printer (theDI));
+
+  // scope block to test output of message on destruction of a stream buffer
+  {
+    Message_Messenger::StreamBuffer aSender = Message::SendInfo();
+       
+    // check that messages output to sender and directly to messenger do not intermix
+    aSender << "Sender message 1: start ...";
+    aMsgMgr->Send ("Direct message 1");
+    aSender << "... end" << std::endl; // endl should send the message
+
+       // check that empty stream buffer does not produce output on destruction
+       Message::SendInfo();
+
+    // additional message to check that they go in expected order
+    aMsgMgr->Send ("Direct message 2");
+
+       // check that empty stream buffer does produce empty line if std::endl is passed
+       Message::SendInfo() << std::endl;
+
+    // last message should be sent on destruction of a sender
+       aSender << "Sender message 2";
+  }
+
+  // restore initial output queue
+  aMsgMgr->RemovePrinters (STANDARD_TYPE(Draw_Printer));
+  aMsgMgr->ChangePrinters().Append (aPrinters);
+
+  return 0;
+}
+
 void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -4781,14 +4820,6 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   theCommands.Add("OCC136", "OCC136", __FILE__, OCC136, group);
   theCommands.Add("BUC60610","BUC60610 iges_input [name]",__FILE__,BUC60610,group);
 
-//====================================================
-//
-// Following commands are inserted from 
-// /dn03/KAS/dev/QAopt/src/QADraw/QADraw_TOPOLOGY.cxx
-// ( 75455 Apr 16 18:59)
-//
-//====================================================
-
   theCommands.Add("OCC105","OCC105 shape",__FILE__,OCC105,group); 
   theCommands.Add("OCC9"," result path cur1 cur2 radius [tolerance]:\t test GeomFill_Pipe", __FILE__, pipe_OCC9,group);
 
@@ -4873,5 +4904,6 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   theCommands.Add("CR23403", "CR23403 string", __FILE__, CR23403, group);
   theCommands.Add("OCC23429", "OCC23429 res shape tool [appr]", __FILE__, OCC23429, group);
   theCommands.Add("OCC28478", "OCC28478 [nb_outer=3 [nb_inner=2] [-inf]: test progress indicator on nested cycles", __FILE__, OCC28478, group);
+  theCommands.Add("OCC31189", "OCC31189: check stream buffer interface of Message_Messenger", __FILE__, OCC31189, group);
   return;
 }
index 029a5c4..a3ae0d7 100644 (file)
@@ -52,6 +52,7 @@
 #include <Graphic3d_GraphicDriver.hxx>
 #include <Graphic3d_MediaTextureSet.hxx>
 #include <Image_AlienPixMap.hxx>
+#include <Message.hxx>
 #include <OSD_File.hxx>
 #include <Prs3d_Drawer.hxx>
 #include <Prs3d_ShadingAspect.hxx>
@@ -758,7 +759,7 @@ Standard_Boolean ViewerTest::Display (const TCollection_AsciiString&       theNa
   Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
   if (aCtx.IsNull())
   {
-    std::cout << "Error: AIS context is not available.\n";
+    Message::SendFail ("Error: AIS context is not available.");
     return Standard_False;
   }
 
@@ -766,8 +767,8 @@ Standard_Boolean ViewerTest::Display (const TCollection_AsciiString&       theNa
   {
     if (!theReplaceIfExists)
     {
-      std::cout << "Error: other interactive object has been already registered with name: " << theName << ".\n"
-                << "Please use another name.\n";
+      Message::SendFail() << "Error: other interactive object has been already registered with name: " << theName << ".\n"
+                          << "Please use another name.";
       return Standard_False;
     }
 
@@ -881,7 +882,7 @@ static Standard_Boolean getCtxAndView (Handle(AIS_InteractiveContext)& theCtx,
   if (theCtx.IsNull()
    || theView.IsNull())
   {
-    std::cout << "Error: cannot find an active view!\n";
+    Message::SendFail ("Error: cannot find an active view!");
     return Standard_False;
   }
   return Standard_True;
@@ -907,7 +908,7 @@ void ViewerTest::Clear()
       continue;
     }
 
-    std::cout << "Remove " << anObjIter.Key2() << std::endl;
+    Message::SendInfo() << "Remove " << anObjIter.Key2();
     TheAISContext()->Remove (anObj, Standard_False);
     aListRemoved.Append (anObj);
   }
@@ -1011,7 +1012,7 @@ static int visos (Draw_Interpretor& di, Standard_Integer argc, const char** argv
     GetMapOfAIS().Find2(name, aShape);
     if (aShape.IsNull())
     {
-      std::cout << "Syntax error: object '" << name << "' is not found\n";
+      Message::SendFail() << "Syntax error: object '" << name << "' is not found";
       return 1;
     }
 
@@ -1045,7 +1046,7 @@ static Standard_Integer VDispSensi (Draw_Interpretor& ,
 {
   if (theArgNb > 1)
   {
-    std::cout << "Error: wrong syntax!\n";
+    Message::SendFail ("Error: wrong syntax!");
     return 1;
   }
 
@@ -1067,7 +1068,7 @@ static Standard_Integer VClearSensi (Draw_Interpretor& ,
 {
   if (theArgNb > 1)
   {
-    std::cout << "Error: wrong syntax!\n";
+    Message::SendFail ("Error: wrong syntax!");
     return 1;
   }
 
@@ -1106,7 +1107,7 @@ static int VDir (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -1156,7 +1157,7 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
 {
   if (theArgNb < 2)
   {
-    std::cout << "Error: wrong number of arguments! Image file name should be specified at least.\n";
+    Message::SendFail ("Error: wrong number of arguments! Image file name should be specified at least.");
     return 1;
   }
 
@@ -1174,7 +1175,7 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -1198,7 +1199,7 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Error: unknown buffer '" << aBufArg << "'\n";
+        Message::SendFail() << "Error: unknown buffer '" << aBufArg << "'";
         return 1;
       }
     }
@@ -1206,7 +1207,7 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -1244,7 +1245,7 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Error: unknown stereo format '" << aStereoArg << "'\n";
+        Message::SendFail() << "Error: unknown stereo format '" << aStereoArg << "'";
         return 1;
       }
     }
@@ -1274,12 +1275,12 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
     {
       if (aParams.Width != 0)
       {
-        std::cout << "Error: wrong syntax at " << theArgVec[anArgIter] << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << theArgVec[anArgIter];
         return 1;
       }
       else if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: integer value is expected right after 'width'\n";
+        Message::SendFail() << "Error: integer value is expected right after 'width'";
         return 1;
       }
       aParams.Width = Draw::Atoi (theArgVec[anArgIter]);
@@ -1290,12 +1291,12 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
     {
       if (aParams.Height != 0)
       {
-        std::cout << "Error: wrong syntax at " << theArgVec[anArgIter] << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << theArgVec[anArgIter];
         return 1;
       }
       else if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: integer value is expected right after 'height'\n";
+        Message::SendFail() << "Error: integer value is expected right after 'height'";
         return 1;
       }
       aParams.Height = Draw::Atoi (theArgVec[anArgIter]);
@@ -1305,28 +1306,28 @@ static Standard_Integer VDump (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: integer value is expected right after 'tileSize'\n";
+        Message::SendFail() << "Error: integer value is expected right after 'tileSize'";
         return 1;
       }
       aParams.TileSize = Draw::Atoi (theArgVec[anArgIter]);
     }
     else
     {
-      std::cout << "Error: unknown argument '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Error: unknown argument '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
   if ((aParams.Width <= 0 && aParams.Height >  0)
    || (aParams.Width >  0 && aParams.Height <= 0))
   {
-    std::cout << "Error: dimensions " << aParams.Width << "x" << aParams.Height << " are incorrect\n";
+    Message::SendFail() << "Error: dimensions " << aParams.Width << "x" << aParams.Height << " are incorrect";
     return 1;
   }
 
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "Error: cannot find an active view!\n";
+    Message::SendFail() << "Error: cannot find an active view!";
     return 1;
   }
 
@@ -1473,7 +1474,7 @@ static int VDispMode (Draw_Interpretor& , Standard_Integer argc, const char** ar
   if (argc < 1
    || argc > 3)
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail() << "Syntax error: wrong number of arguments";
     return 1;
   }
 
@@ -1706,7 +1707,7 @@ private:
         {
           if (!GetMapOfAIS().IsBound2 (mySeqIter.Value()))
           {
-            std::cout << "Error: object " << mySeqIter.Value() << " is not displayed!\n";
+            Message::SendFail() << "Error: object " << mySeqIter.Value() << " is not displayed!";
             return;
           }
           myCurrentName = mySeqIter.Value();
@@ -1988,52 +1989,52 @@ struct ViewerTest_AspectsChangeSet
     Standard_Boolean isOk = Standard_True;
     if (Visibility != 0 && Visibility != 1)
     {
-      std::cout << "Error: the visibility should be equal to 0 or 1 (0 - invisible; 1 - visible) (specified " << Visibility << ")\n";
+      Message::SendFail() << "Error: the visibility should be equal to 0 or 1 (0 - invisible; 1 - visible) (specified " << Visibility << ")";
       isOk = Standard_False;
     }
     if (LineWidth <= 0.0
      || LineWidth >  10.0)
     {
-      std::cout << "Error: the width should be within [1; 10] range (specified " << LineWidth << ")\n";
+      Message::SendFail() << "Error: the width should be within [1; 10] range (specified " << LineWidth << ")";
       isOk = Standard_False;
     }
     if (Transparency < 0.0
      || Transparency > 1.0)
     {
-      std::cout << "Error: the transparency should be within [0; 1] range (specified " << Transparency << ")\n";
+      Message::SendFail() << "Error: the transparency should be within [0; 1] range (specified " << Transparency << ")";
       isOk = Standard_False;
     }
     if (ToSetAlphaMode == 1
      && (AlphaCutoff <= 0.0f || AlphaCutoff >= 1.0f))
     {
-      std::cout << "Error: alpha cutoff value should be within (0; 1) range (specified " << AlphaCutoff << ")\n";
+      Message::SendFail() << "Error: alpha cutoff value should be within (0; 1) range (specified " << AlphaCutoff << ")";
       isOk = Standard_False;
     }
     if (FreeBoundaryWidth <= 0.0
      || FreeBoundaryWidth >  10.0)
     {
-      std::cout << "Error: the free boundary width should be within [1; 10] range (specified " << FreeBoundaryWidth << ")\n";
+      Message::SendFail() << "Error: the free boundary width should be within [1; 10] range (specified " << FreeBoundaryWidth << ")";
       isOk = Standard_False;
     }
     if (MaxParamValue < 0.0)
     {
-      std::cout << "Error: the max parameter value should be greater than zero (specified " << MaxParamValue << ")\n";
+      Message::SendFail() << "Error: the max parameter value should be greater than zero (specified " << MaxParamValue << ")";
       isOk = Standard_False;
     }
     if (Sensitivity <= 0 && ToSetSensitivity)
     {
-      std::cout << "Error: sensitivity parameter value should be positive (specified " << Sensitivity << ")\n";
+      Message::SendFail() << "Error: sensitivity parameter value should be positive (specified " << Sensitivity << ")";
       isOk = Standard_False;
     }
     if (ToSetHatch == 1 && StdHatchStyle < 0 && PathToHatchPattern == "")
     {
-      std::cout << "Error: hatch style must be specified\n";
+      Message::SendFail ("Error: hatch style must be specified");
       isOk = Standard_False;
     }
     if (ToSetShadingModel == 1
     && (ShadingModel < Graphic3d_TOSM_DEFAULT || ShadingModel > Graphic3d_TOSM_PBR_FACET))
     {
-      std::cout << "Error: unknown shading model " << ShadingModelName << ".\n";
+      Message::SendFail() << "Error: unknown shading model " << ShadingModelName << ".";
       isOk = Standard_False;
     }
     return isOk;
@@ -2228,7 +2229,7 @@ struct ViewerTest_AspectsChangeSet
             }
             else
             {
-              std::cout << "Error: cannot load the following image: " << PathToHatchPattern << "\n";
+              Message::SendFail() << "Error: cannot load the following image: " << PathToHatchPattern;
             }
           }
           else if (StdHatchStyle != -1)
@@ -2336,7 +2337,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
   ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
   if (aCtx.IsNull())
   {
-    std::cerr << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -2368,7 +2369,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
 
   if (!aNames.IsEmpty() && isDefaults)
   {
-    std::cout << "Error: wrong syntax. If -defaults is used there should not be any objects' names!\n";
+    Message::SendFail ("Error: wrong syntax. If -defaults is used there should not be any objects' names!");
     return 1;
   }
 
@@ -2386,7 +2387,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     if (aNames.IsEmpty()
     || !aNames.Last().IsRealValue())
     {
-      std::cout << "Error: not enough arguments!\n";
+      Message::SendFail ("Error: not enough arguments!");
       return 1;
     }
     aChangeSet->ToSetLineWidth = 1;
@@ -2401,7 +2402,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
   {
     if (aNames.IsEmpty())
     {
-      std::cout << "Error: not enough arguments!\n";
+      Message::SendFail ("Error: not enough arguments!");
       return 1;
     }
     aChangeSet->ToSetColor = 1;
@@ -2436,7 +2437,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     }
     if (!isOk)
     {
-      std::cout << "Error: not enough arguments!\n";
+      Message::SendFail ("Error: not enough arguments!");
       return 1;
     }
   }
@@ -2449,7 +2450,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     if (aNames.IsEmpty()
     || !aNames.Last().IsRealValue())
     {
-      std::cout << "Error: not enough arguments!\n";
+      Message::SendFail ("Error: not enough arguments!");
       return 1;
     }
     aChangeSet->ToSetTransparency = 1;
@@ -2464,7 +2465,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
   {
     if (aNames.IsEmpty())
     {
-      std::cout << "Error: not enough arguments!\n";
+      Message::SendFail ("Error: not enough arguments!");
       return 1;
     }
     aChangeSet->ToSetMaterial = 1;
@@ -2472,7 +2473,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     aNames.Remove (aNames.Length());
     if (!Graphic3d_MaterialAspect::MaterialFromName (aChangeSet->MatName.ToCString(), aChangeSet->Material))
     {
-      std::cout << "Syntax error: unknown material '" << aChangeSet->MatName << "'.\n";
+      Message::SendFail() << "Syntax error: unknown material '" << aChangeSet->MatName << "'.";
       return 1;
     }
   }
@@ -2485,13 +2486,13 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     if (aNames.IsEmpty()
     || !aNames.Last().IsRealValue())
     {
-      std::cout << "Error: not enough arguments!\n";
+      Message::SendFail ("Error: not enough arguments!");
       return 1;
     }
     aChangeSet->ToSetInterior = 1;
     if (!parseInteriorStyle (aNames.Last(), aChangeSet->InteriorStyle))
     {
-      std::cout << "Error: wrong syntax at " << aNames.Last() << "\n";
+      Message::SendFail() << "Error: wrong syntax at " << aNames.Last();
       return 1;
     }
     aNames.Remove (aNames.Length());
@@ -2554,7 +2555,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
   }
   else if (anArgIter >= theArgNb)
   {
-    std::cout << "Error: not enough arguments!\n";
+    Message::SendFail ("Error: not enough arguments!");
     return 1;
   }
 
@@ -2582,7 +2583,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
 
@@ -2633,7 +2634,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetTransparency = 1;
@@ -2650,7 +2651,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetAlphaMode = 1;
@@ -2677,7 +2678,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
         }
         else
         {
-          std::cout << "Error: wrong syntax at " << aParam << "\n";
+          Message::SendFail() << "Error: wrong syntax at " << aParam;
           return 1;
         }
       }
@@ -2699,7 +2700,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
 
@@ -2711,7 +2712,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetTransparency = 1;
@@ -2719,7 +2720,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
       if (aChangeSet->Transparency < 0.0
        || aChangeSet->Transparency > 1.0)
       {
-        std::cout << "Error: the transparency should be within [0; 1] range (specified " << aChangeSet->Transparency << ")\n";
+        Message::SendFail() << "Error: the transparency should be within [0; 1] range (specified " << aChangeSet->Transparency << ")";
         return 1;
       }
       aChangeSet->Transparency = 1.0 - aChangeSet->Transparency;
@@ -2755,7 +2756,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
                                                            aColor);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
@@ -2804,14 +2805,14 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       Aspect_TypeOfLine aLineType = Aspect_TOL_EMPTY;
       uint16_t aLinePattern = 0xFFFF;
       if (!ViewerTest::ParseLineType (theArgVec[anArgIter], aLineType, aLinePattern))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
 
@@ -2863,12 +2864,12 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       if (!ViewerTest::ParseMarkerType (theArgVec[anArgIter], aChangeSet->TypeOfMarker, aChangeSet->MarkerImage))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
 
@@ -2886,7 +2887,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetMarkerSize = 1;
@@ -2910,14 +2911,14 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetMaterial = 1;
       aChangeSet->MatName = theArgVec[anArgIter];
       if (!Graphic3d_MaterialAspect::MaterialFromName (aChangeSet->MatName.ToCString(), aChangeSet->Material))
       {
-        std::cout << "Syntax error: unknown material '" << aChangeSet->MatName << "'.\n";
+        Message::SendFail() << "Syntax error: unknown material '" << aChangeSet->MatName << "'.";
         return 1;
       }
     }
@@ -2932,13 +2933,13 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (isDefaults)
       {
-        std::cout << "Error: wrong syntax. -subshapes can not be used together with -defaults call!\n";
+        Message::SendFail() << "Error: wrong syntax. -subshapes can not be used together with -defaults call!";
         return 1;
       }
 
       if (aNames.IsEmpty())
       {
-        std::cout << "Error: main objects should specified explicitly when -subshapes is used!\n";
+        Message::SendFail() << "Error: main objects should specified explicitly when -subshapes is used!";
         return 1;
       }
 
@@ -2957,7 +2958,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
         TopoDS_Shape aSubShape = DBRep::Get (aSubShapeName);
         if (aSubShape.IsNull())
         {
-          std::cerr << "Error: shape " << aSubShapeName << " doesn't found!\n";
+          Message::SendFail() << "Error: shape " << aSubShapeName << " doesn't found!";
           return 1;
         }
         aChangeSet->SubShapes.Append (aSubShape);
@@ -2965,7 +2966,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
 
       if (aChangeSet->SubShapes.IsEmpty())
       {
-        std::cerr << "Error: empty list is specified after -subshapes!\n";
+        Message::SendFail() << "Error: empty list is specified after -subshapes!";
         return 1;
       }
     }
@@ -2977,7 +2978,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
       bool toEnable = true;
       if (!ViewerTest::ParseOnOff (anArgIter + 1 < theArgNb ? theArgVec[anArgIter + 1] : "", toEnable))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       ++anArgIter;
@@ -2990,7 +2991,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetFreeBoundaryWidth = 1;
@@ -3012,7 +3013,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
                                                            aChangeSet->FreeBoundaryColor);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
@@ -3032,7 +3033,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
       bool toEnable = true;
       if (!ViewerTest::ParseOnOff (anArgIter + 1 < theArgNb ? theArgVec[anArgIter + 1] : "", toEnable))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       ++anArgIter;
@@ -3057,7 +3058,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
       bool toEnable = true;
       if (!ViewerTest::ParseOnOff (anArgIter + 1 < theArgNb ? theArgVec[anArgIter + 1] : "", toEnable))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       ++anArgIter;
@@ -3102,7 +3103,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -3115,7 +3116,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetMaxParamValue = 1;
@@ -3126,19 +3127,19 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (isDefaults)
       {
-        std::cout << "Error: wrong syntax. -setSensitivity can not be used together with -defaults call!\n";
+        Message::SendFail() << "Error: wrong syntax. -setSensitivity can not be used together with -defaults call!";
         return 1;
       }
 
       if (aNames.IsEmpty())
       {
-        std::cout << "Error: object and selection mode should specified explicitly when -setSensitivity is used!\n";
+        Message::SendFail() << "Error: object and selection mode should specified explicitly when -setSensitivity is used!";
         return 1;
       }
 
       if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetSensitivity = 1;
@@ -3150,13 +3151,13 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (isDefaults)
       {
-        std::cout << "Error: wrong syntax. -setHatch can not be used together with -defaults call!\n";
+        Message::SendFail() << "Error: wrong syntax. -setHatch can not be used together with -defaults call!";
         return 1;
       }
 
       if (aNames.IsEmpty())
       {
-        std::cout << "Error: object should be specified explicitly when -setHatch is used!\n";
+        Message::SendFail() << "Error: object should be specified explicitly when -setHatch is used!";
         return 1;
       }
 
@@ -3168,7 +3169,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
         if (anIntStyle < 0
          || anIntStyle >= Aspect_HS_NB)
         {
-          std::cout << "Error: hatch style is out of range [0, " << (Aspect_HS_NB - 1) << "]!\n";
+          Message::SendFail() << "Error: hatch style is out of range [0, " << (Aspect_HS_NB - 1) << "]!";
           return 1;
         }
         aChangeSet->StdHatchStyle = anIntStyle;
@@ -3185,14 +3186,14 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetShadingModel = 1;
       aChangeSet->ShadingModelName  = theArgVec[anArgIter];
       if (!ViewerTest::ParseShadingModel (theArgVec[anArgIter], aChangeSet->ShadingModel))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
     }
@@ -3208,13 +3209,13 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aChangeSet->ToSetInterior = 1;
       if (!parseInteriorStyle (theArgVec[anArgIter], aChangeSet->InteriorStyle))
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
     }
@@ -3276,7 +3277,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
                                                            aChangeSet->EdgeColor);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
@@ -3353,14 +3354,14 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aDumpDepth = Draw::Atoi (theArgVec[anArgIter]);
     }
     else
     {
-      std::cout << "Error: wrong syntax at " << anArg << "\n";
+      Message::SendFail() << "Error: wrong syntax at " << anArg;
       return 1;
     }
   }
@@ -3449,7 +3450,7 @@ static Standard_Integer VAspects (Draw_Interpretor& theDI,
       Handle(AIS_Shape) aShapePrs = Handle(AIS_Shape)::DownCast (aPrs);
       if (aShapePrs.IsNull())
       {
-        std::cout << "Error: an object " << aName << " is not an AIS_Shape presentation!\n";
+        Message::SendFail() << "Error: an object " << aName << " is not an AIS_Shape presentation!";
         return 1;
       }
       aColoredPrs = Handle(AIS_ColoredShape)::DownCast (aShapePrs);
@@ -3610,7 +3611,7 @@ static int VDonly2 (Draw_Interpretor& ,
   ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
   if (aCtx.IsNull())
   {
-    std::cerr << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -3685,7 +3686,7 @@ int VRemove (Draw_Interpretor& theDI,
   ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
   if (aCtx.IsNull())
   {
-    std::cerr << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -3728,7 +3729,7 @@ int VRemove (Draw_Interpretor& theDI,
   if (toRemoveAll
    && anArgIter < theArgNb)
   {
-    std::cerr << "Error: wrong syntax!\n";
+    Message::SendFail ("Error: wrong syntax!");
     return 1;
   }
 
@@ -3770,7 +3771,7 @@ int VRemove (Draw_Interpretor& theDI,
       {
         if (toFailOnError)
         {
-          std::cout << "Syntax error: '" << aName << "' was not bound to some object.\n";
+          Message::SendFail() << "Syntax error: '" << aName << "' was not bound to some object.";
           return 1;
         }
       }
@@ -3778,8 +3779,8 @@ int VRemove (Draw_Interpretor& theDI,
       {
         if (toFailOnError)
         {
-          std::cout << "Syntax error: '" << aName << "' was not displayed in current context.\n"
-                    << "Please activate view with this object displayed and try again.\n";
+          Message::SendFail() << "Syntax error: '" << aName << "' was not displayed in current context.\n"
+                              << "Please activate view with this object displayed and try again.";
           return 1;
         }
       }
@@ -3836,7 +3837,7 @@ int VErase (Draw_Interpretor& theDI,
   ViewerTest_AutoUpdater anUpdateTool (aCtx, aView);
   if (aCtx.IsNull())
   {
-    std::cerr << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -3872,7 +3873,7 @@ int VErase (Draw_Interpretor& theDI,
 
   if (!aNamesOfEraseIO.IsEmpty() && toEraseAll)
   {
-    std::cerr << "Error: wrong syntax, " << theArgVec[0] << " too much arguments.\n";
+    Message::SendFail() << "Error: wrong syntax, " << theArgVec[0] << " too much arguments.";
     return 1;
   }
 
@@ -3903,7 +3904,7 @@ int VErase (Draw_Interpretor& theDI,
         {
           if (toFailOnError)
           {
-            std::cout << "Syntax error: '" << aName << "' is not found\n";
+            Message::SendFail() << "Syntax error: '" << aName << "' is not found";
             return 1;
           }
         }
@@ -3987,7 +3988,7 @@ static int VDisplayAll (Draw_Interpretor& ,
   ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
   if (aCtx.IsNull())
   {
-    std::cerr << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -4007,7 +4008,7 @@ static int VDisplayAll (Draw_Interpretor& ,
   }
   if (anArgIter < theArgNb)
   {
-    std::cout << theArgVec[0] << "Error: wrong syntax\n";
+    Message::SendFail() << theArgVec[0] << "Error: wrong syntax";
     return 1;
   }
 
@@ -4114,7 +4115,7 @@ int VBounding (Draw_Interpretor& theDI,
   ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
   if (aCtx.IsNull())
   {
-    std::cout << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -4144,7 +4145,7 @@ int VBounding (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Error: wrong syntax at " << anArg;
         return 1;
       }
       aMode = Draw::Atoi (theArgVec[anArgIter]);
@@ -4172,14 +4173,14 @@ int VBounding (Draw_Interpretor& theDI,
       Handle(AIS_InteractiveObject) anIO;
       if (!GetMapOfAIS().Find2 (aName, anIO))
       {
-        std::cout << "Error: presentation " << aName << " does not exist\n";
+        Message::SendFail() << "Error: presentation " << aName << " does not exist";
         return 1;
       }
 
       aHighlightedMode = checkMode (aCtx, anIO, aMode);
       if (aHighlightedMode == -1)
       {
-        std::cout << "Error: object " << aName << " has no presentation with mode " << aMode << std::endl;
+        Message::SendFail() << "Error: object " << aName << " has no presentation with mode " << aMode;
         return 1;
       }
       bndPresentation (theDI, aCtx->MainPrsMgr(), anIO, aHighlightedMode, aName, anAction, aStyle);
@@ -4225,7 +4226,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
   const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
   if (aCtx.IsNull())
   {
-    std::cout << "Error: no active view!\n";
+    Message::SendFail() << "Error: no active view!";
     return 1;
   }
 
@@ -4274,7 +4275,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
       }
       if (aTexturedIO.IsNull())
       {
-        std::cout << "Syntax error: shape " << aName << " does not exists in the viewer.\n";
+        Message::SendFail() << "Syntax error: shape " << aName << " does not exists in the viewer.";
         return 1;
       }
 
@@ -4315,7 +4316,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
           }
         }
       }
-      std::cout << "Syntax error: unexpected argument '" << aName << "'\n";
+      Message::SendFail() << "Syntax error: unexpected argument '" << aName << "'";
       return 1;
     }
     else if (!aTexturedShape.IsNull()
@@ -4350,7 +4351,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
           }
         }
       }
-      std::cout << "Syntax error: unexpected argument '" << aName << "'\n";
+      Message::SendFail() << "Syntax error: unexpected argument '" << aName << "'";
       return 1;
     }
     else if (!aTexturedShape.IsNull()
@@ -4385,7 +4386,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
           }
         }
       }
-      std::cout << "Syntax error: unexpected argument '" << aName << "'\n";
+      Message::SendFail() << "Syntax error: unexpected argument '" << aName << "'";
       return 1;
     }
     else if (aNameCase == "-modulate")
@@ -4420,7 +4421,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
       }
       else
       {
-        std::cout << "Syntax error: unexpected argument '" << aValue << "'\n";
+        Message::SendFail() << "Syntax error: unexpected argument '" << aValue << "'";
         return 1;
       }
     }
@@ -4453,7 +4454,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
       }
       else
       {
-        std::cout << "Syntax error: unexpected argument '" << aValue << "'\n";
+        Message::SendFail() << "Syntax error: unexpected argument '" << aValue << "'";
         return 1;
       }
     }
@@ -4535,14 +4536,14 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
         if (anArgIter + 1 >= theArgsNb
          || aNameCase.Length() < 5)
         {
-          std::cout << "Syntax error: invalid argument '" << theArgVec[anArgIter] << "'\n";
+          Message::SendFail() << "Syntax error: invalid argument '" << theArgVec[anArgIter] << "'";
           return 1;
         }
 
         TCollection_AsciiString aTexIndexStr = aNameCase.SubString (5, aNameCase.Length());
         if (!aTexIndexStr.IsIntegerValue())
         {
-          std::cout << "Syntax error: invalid argument '" << theArgVec[anArgIter] << "'\n";
+          Message::SendFail() << "Syntax error: invalid argument '" << theArgVec[anArgIter] << "'";
           return 1;
         }
 
@@ -4553,7 +4554,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
       if (aTexIndex >= Graphic3d_TextureUnit_NB
        || aTexIndex >= aCtx->CurrentViewer()->Driver()->InquireLimit (Graphic3d_TypeOfLimit_MaxCombinedTextureUnits))
       {
-        std::cout << "Error: too many textures specified\n";
+        Message::SendFail ("Error: too many textures specified");
         return 1;
       }
 
@@ -4563,7 +4564,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
         const Standard_Integer aValue = aTexName.IntegerValue();
         if (aValue < 0 || aValue >= Graphic3d_Texture2D::NumberOfTextures())
         {
-          std::cout << "Syntax error: texture with ID " << aValue << " is undefined!\n";
+          Message::SendFail() << "Syntax error: texture with ID " << aValue << " is undefined!";
           return 1;
         }
         aTextureVecNew.SetValue (aTexIndex, new Graphic3d_Texture2Dmanual (Graphic3d_NameOfTexture2D (aValue)));
@@ -4587,7 +4588,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
       {
         if (!OSD_File (aTexName).Exists())
         {
-          std::cout << "Syntax error: non-existing image file has been specified '" << aTexName << "'.\n";
+          Message::SendFail() << "Syntax error: non-existing image file has been specified '" << aTexName << "'.";
           return 1;
         }
         aTextureVecNew.SetValue (aTexIndex, new Graphic3d_Texture2Dmanual (aTexName));
@@ -4604,7 +4605,7 @@ Standard_Integer VTexture (Draw_Interpretor& theDi, Standard_Integer theArgsNb,
     }
     else
     {
-      std::cout << "Syntax error: invalid argument '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error: invalid argument '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -4898,7 +4899,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
 {
   if (theArgNb < 2)
   {
-    std::cerr << theArgVec[0] << "Error: wrong number of arguments.\n";
+    Message::SendFail ("Syntax error: wrong number of arguments.");
     return 1;
   }
   if (theArgNb == 2
@@ -4980,7 +4981,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at " << aName << ".\n";
+        Message::SendFail() << "Error: wrong syntax at " << aName << ".";
         return 1;
       }
 
@@ -4992,7 +4993,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at " << aName << ".\n";
+        Message::SendFail() << "Error: wrong syntax at " << aName << ".";
         return 1;
       }
 
@@ -5038,7 +5039,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
       if (++anArgIter >= theArgNb
        || !aTrsfPers.IsNull())
       {
-        std::cerr << "Error: wrong syntax at " << aName << ".\n";
+        Message::SendFail() << "Error: wrong syntax at " << aName << ".";
         return 1;
       }
 
@@ -5048,7 +5049,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
       aPersFlags.LowerCase();
       if (!parseTrsfPersFlag (aPersFlags, aTrsfPersFlags))
       {
-        std::cerr << "Error: wrong transform persistence flags " << theArgVec [anArgIter] << ".\n";
+        Message::SendFail() << "Error: wrong transform persistence flags " << theArgVec [anArgIter] << ".";
         return 1;
       }
 
@@ -5067,7 +5068,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
       if (anArgIter + 2 >= theArgNb
        || aTrsfPers.IsNull())
       {
-        std::cerr << "Error: wrong syntax at " << aName << ".\n";
+        Message::SendFail() << "Error: wrong syntax at " << aName << ".";
         return 1;
       }
 
@@ -5077,7 +5078,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
       if (!aX.IsRealValue()
        || !aY.IsRealValue())
       {
-        std::cerr << "Error: wrong syntax at " << aName << ".\n";
+        Message::SendFail() << "Error: wrong syntax at " << aName << ".";
         return 1;
       }
       if (anArgIter + 1 < theArgNb)
@@ -5108,7 +5109,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
       || !ViewerTest::ParseZLayer (theArgVec[anArgIter], aZLayer)
       ||  aZLayer == Graphic3d_ZLayerId_UNKNOWN)
       {
-        std::cerr << "Error: wrong syntax at " << aName << ".\n";
+        Message::SendFail() << "Error: wrong syntax at " << aName << ".";
         return 1;
       }
     }
@@ -5134,7 +5135,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
 
   if (aNamesOfDisplayIO.IsEmpty())
   {
-    std::cerr << theArgVec[0] << "Error: wrong number of arguments.\n";
+    Message::SendFail ("Syntax error: wrong number of arguments.");
     return 1;
   }
 
@@ -5170,7 +5171,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
           }
           if (!aShape->AcceptDisplayMode (anObjDispMode))
           {
-            std::cout << "Syntax error: " << aShape->DynamicType()->Name() << " rejects " << anObjDispMode << " display mode\n";
+            Message::SendFail() << "Syntax error: " << aShape->DynamicType()->Name() << " rejects " << anObjDispMode << " display mode";
             return 1;
           }
           else
@@ -5183,7 +5184,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
           if (anObjHighMode != -1
           && !aShape->AcceptDisplayMode (anObjHighMode))
           {
-            std::cout << "Syntax error: " << aShape->DynamicType()->Name() << " rejects " << anObjHighMode << " display mode\n";
+            Message::SendFail() << "Syntax error: " << aShape->DynamicType()->Name() << " rejects " << anObjHighMode << " display mode";
             return 1;
           }
           aShape->SetHilightMode (anObjHighMode);
@@ -5213,7 +5214,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cerr << "Error: object with name '" << aName << "' does not exist!\n";
+        Message::SendFail() << "Error: object with name '" << aName << "' does not exist!";
       }
       continue;
     }
@@ -5305,7 +5306,7 @@ static Standard_Integer VNbDisplayed (Draw_Interpretor& theDi,
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cout << theArgVec[0] << "AIS context is not available.\n";
+    Message::SendFail ("Syntax error: AIS context is not available.");
     return 1;
   }
 
@@ -5332,13 +5333,13 @@ static int VUpdate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgsNb, con
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cout << theArgVec[0] << "AIS context is not available.\n";
+    Message::SendFail ("Syntax error: AIS context is not available.");
     return 1;
   }
 
   if (theArgsNb < 2)
   {
-    std::cout << theArgVec[0] << ": insufficient arguments. Type help for more information.\n";
+    Message::SendFail ("Syntax error: insufficient arguments. Type help for more information.");
     return 1;
   }
 
@@ -5351,7 +5352,7 @@ static int VUpdate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgsNb, con
     GetMapOfAIS().Find2 (aName, anAISObj);
     if (anAISObj.IsNull())
     {
-      std::cout << theArgVec[0] << ": no AIS interactive object named \"" << aName << "\".\n";
+      Message::SendFail() << theArgVec[0] << ": no AIS interactive object named \"" << aName << "\".";
       return 1;
     }
 
@@ -5542,7 +5543,7 @@ static Standard_Integer VState (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aCtx = TheAISContext();
   if (aCtx.IsNull())
   {
-    std::cerr << "Error: No opened viewer!\n";
+    Message::SendFail ("Error: No opened viewer!");
     return 1;
   }
 
@@ -5726,7 +5727,7 @@ Standard_Boolean ViewerTest::PickShapes (const TopAbs_ShapeEnum theShapeType,
   const Standard_Integer aNbToReach = theResArray->Length();
   if (aNbToReach > 1)
   {
-    std::cout << " WARNING : Pick with Shift+ MB1 for Selection of more than 1 object\n";
+    Message::SendWarning ("WARNING : Pick with Shift+ MB1 for Selection of more than 1 object");
   }
 
   // step 1: prepare the data
@@ -5769,7 +5770,7 @@ Standard_Boolean ViewerTest::PickShapes (const TopAbs_ShapeEnum theShapeType,
     {
       ++aNbPickFail;
     }
-    std::cout << "NbPicked =  " << aNbPickGood << " |  Nb Pick Fail :" << aNbPickFail << "\n";
+    Message::SendInfo() << "NbPicked =  " << aNbPickGood << " |  Nb Pick Fail :" << aNbPickFail;
   }
 
   // step3 get result.
@@ -5831,7 +5832,7 @@ static int VPickShape( Draw_Interpretor& di, Standard_Integer argc, const char**
     else if (aShapeArg == "solid")  aShapeType = TopAbs_SOLID;
     else
     {
-      std::cout << "Syntax error at '" << argv[1] << "'\n";
+      Message::SendFail() << "Syntax error at '" << argv[1] << "'";
       return 1;
     }
   }
@@ -5908,7 +5909,7 @@ static int VSelFilter(Draw_Interpretor& , Standard_Integer theArgc,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: AIS context is not available.\n";
+    Message::SendFail ("Error: AIS context is not available.");
     return 1;
   }
 
@@ -5927,7 +5928,7 @@ static int VSelFilter(Draw_Interpretor& , Standard_Integer theArgc,
       TopAbs_ShapeEnum aShapeType = TopAbs_COMPOUND;
       if (!TopAbs::ShapeTypeFromString (aVal.ToCString(), aShapeType))
       {
-        std::cout << "Syntax error: wrong command attribute value '" << aVal << "'\n";
+        Message::SendFail() << "Syntax error: wrong command attribute value '" << aVal << "'";
         return 1;
       }
 
@@ -5944,7 +5945,7 @@ static int VSelFilter(Draw_Interpretor& , Standard_Integer theArgc,
     }
     else
     {
-      std::cout << "Syntax error: unknown argument '" << theArgv[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << theArgv[anArgIter] << "'";
       return 1;
     }
   }
@@ -6204,7 +6205,7 @@ static int VBsdf (Draw_Interpretor& theDI,
   if (aView.IsNull()
    || aViewer.IsNull())
   {
-    std::cerr << "No active viewer!\n";
+    Message::SendFail ("Error: No active viewer!");
     return 1;
   }
 
@@ -6256,7 +6257,7 @@ static int VBsdf (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveObject) anIObj;
   if (!GetMapOfAIS().Find2 (aName, anIObj))
   {
-    std::cerr << "Use 'vdisplay' before\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -6490,7 +6491,7 @@ static Standard_Integer VLoadSelection (Draw_Interpretor& /*theDi*/,
 {
   if (theArgNb < 2)
   {
-    std::cerr << theArgVec[0] << "Error: wrong number of arguments.\n";
+    Message::SendFail ("Syntax error: wrong number of arguments.");
     return 1;
   }
 
@@ -6517,7 +6518,7 @@ static Standard_Integer VLoadSelection (Draw_Interpretor& /*theDi*/,
     }
     if (aShape.IsNull())
     {
-      std::cout << "Syntax error: presentation '" << aName << "' not found\n";
+      Message::SendFail() << "Syntax error: presentation '" << aName << "' not found";
       return 1;
     }
 
index bbffa5d..67935fb 100644 (file)
@@ -16,6 +16,7 @@
 #include <ViewerTest_CmdParser.hxx>
 
 #include <Draw.hxx>
+#include <Message.hxx>
 #include <ViewerTest.hxx>
 
 #include <algorithm>
@@ -157,7 +158,7 @@ void ViewerTest_CmdParser::Parse (const Standard_Integer theArgsNb, const char*
       }
       else
       {
-        std::cerr << "Error: unknown argument '" << anOptionName << "'\n";
+        Message::SendFail() << "Error: unknown argument '" << anOptionName << "'";
         return;
       }
     }
@@ -261,9 +262,9 @@ bool ViewerTest_CmdParser::HasOption (const ViewerTest_CommandOptionKey theOptio
   const bool             aResult           = (anOptionArguments.size() >= theMandatoryArgsNb);
   if (isFatal && !aResult)
   {
-    std::cerr << "Error: wrong syntax at option '" << myOptionStorage[theOptionKey].Name << "'\n"
-              << "At least " << theMandatoryArgsNb << "expected, but only " << anOptionArguments.size()
-              << "provided.\n";
+    Message::SendFail() << "Error: wrong syntax at option '" << myOptionStorage[theOptionKey].Name << "'\n"
+                        << "At least " << theMandatoryArgsNb << "expected, but only " << anOptionArguments.size()
+                        << "provided.";
   }
   return aResult;
 }
index e4f4fd0..40bd123 100644 (file)
@@ -28,7 +28,7 @@
 #include <Font_BRepFont.hxx>
 #include <Font_BRepTextBuilder.hxx>
 #include <Font_FontMgr.hxx>
-
+#include <Message.hxx>
 #include <NCollection_List.hxx>
 
 #include <OSD_Chronometer.hxx>
@@ -307,7 +307,7 @@ namespace
     if ((aMapOfArgs.IsBound ("xaxis") && !aMapOfArgs.IsBound ("zaxis"))
     || (!aMapOfArgs.IsBound ("xaxis") &&  aMapOfArgs.IsBound ("zaxis")))
     {
-      std::cout << "Syntax error: -xaxis and -zaxis parameters are to set together.\n";
+      Message::SendFail ("Syntax error: -xaxis and -zaxis parameters are to set together");
       return Standard_False;
     }
 
@@ -332,7 +332,7 @@ namespace
 
       if (!aZDir.IsNormal (aXDir, M_PI / 180.0))
       {
-        std::cout << "Syntax error - parameters 'xaxis' and 'zaxis' are not applied as VectorX is not normal to VectorZ\n";
+        Message::SendFail ("Syntax error - parameters 'xaxis' and 'zaxis' are not applied as VectorX is not normal to VectorZ");
         return Standard_False;
       }
 
@@ -358,7 +358,7 @@ namespace
       }
       else if (aValues->Size() != 0)
       {
-        std::cout << "Syntax error: -hidelabels expects parameter 'on' or 'off' after.\n";
+        Message::SendFail ("Syntax error: -hidelabels expects parameter 'on' or 'off' after");
         return Standard_False;
       }
 
@@ -378,7 +378,7 @@ namespace
       }
       else if (aValues->Size() != 0)
       {
-        std::cout << "Syntax error: -hidearrows expects parameter 'on' or 'off' after.\n";
+        Message::SendFail ("Syntax error: -hidearrows expects parameter 'on' or 'off' after");
         return Standard_False;
       }
 
@@ -394,7 +394,7 @@ namespace
       NCollection_List<Prs3d_DatumParts> aParts;
       if (aValues->Size() < 2)
       {
-        std::cout << "Syntax error: -color wrong parameters.\n";
+        Message::SendFail ("Syntax error: -color wrong parameters");
         return Standard_False;
       }
 
@@ -403,7 +403,7 @@ namespace
       Quantity_Color aColor;
       if (!convertToColor (aValues, aColor))
       {
-        std::cout << "Syntax error: -color wrong parameters.\n";
+        Message::SendFail ("Syntax error: -color wrong parameters");
         return Standard_False;
       }
 
@@ -426,7 +426,7 @@ namespace
       Quantity_Color aColor;
       if (!convertToColor (aValues, aColor))
       {
-        std::cout << "Syntax error: -textcolor wrong parameters.\n";
+        Message::SendFail ("Syntax error: -textcolor wrong parameters");
         return Standard_False;
       }
       theTrihedron->SetTextColor (aColor);
@@ -437,7 +437,7 @@ namespace
       Quantity_Color aColor;
       if (!convertToColor (aValues, aColor))
       {
-        std::cout << "Syntax error: -arrowcolor wrong parameters.\n";
+        Message::SendFail ("Syntax error: -arrowcolor wrong parameters");
         return Standard_False;
       }
       theTrihedron->SetArrowColor (aColor);
@@ -448,7 +448,7 @@ namespace
       NCollection_List<Prs3d_DatumAttribute> anAttributes;
       if (aValues->Size() != 2)
       {
-        std::cout << "Syntax error: -attribute wrong parameters.\n";
+        Message::SendFail ("Syntax error: -attribute wrong parameters");
         return Standard_False;
       }
 
@@ -467,7 +467,7 @@ namespace
       if (aValues->Size() < 2
       || !convertToDatumPart (aValues->Value (1), aDatumPart))
       {
-        std::cout << "Syntax error: -priority wrong parameters.\n";
+        Message::SendFail ("Syntax error: -priority wrong parameters");
         return Standard_False;
       }
       theTrihedron->SetSelectionPriority (aDatumPart, aValues->Value (2).IntegerValue());
@@ -486,7 +486,7 @@ namespace
       }
       else
       {
-        std::cout << "Syntax error: -labels wrong parameters.\n";
+        Message::SendFail ("Syntax error: -labels wrong parameters");
         return Standard_False;
       }
     }
@@ -497,7 +497,7 @@ namespace
       if (aValues->Size() < 1
       || !convertToDatumAxes (aValues->Value (1), aDatumAxes))
       {
-        std::cout << "Syntax error: -drawaxes wrong parameters.\n";
+        Message::SendFail ("Syntax error: -drawaxes wrong parameters");
         return Standard_False;
       }
       if (!theTrihedron->Attributes()->HasOwnDatumAspect())
@@ -581,7 +581,7 @@ static int VTrihedron2D (Draw_Interpretor& /*theDI*/,
 {
   if (theArgsNum != 2)
   {
-    std::cerr << theArgVec[0]<< " error.\n";
+    Message::SendFail() << "Syntax error: wrong number of arguments.";
     return 1;
   }
 
@@ -590,7 +590,7 @@ static int VTrihedron2D (Draw_Interpretor& /*theDI*/,
 
   if (aShapes.Extent() != 1)
   {
-    std::cerr << "Error: wrong number of selected shapes.\n";
+    Message::SendFail ("Error: wrong number of selected shapes.");
     return 1;
   }
 
@@ -639,7 +639,7 @@ static int VTrihedron (Draw_Interpretor& ,
 {
   if (theArgsNb < 2)
   {
-    std::cout << "Syntax error: the wrong number of input parameters.\n";
+    Message::SendFail ("Syntax error: the wrong number of input parameters");
     return 1;
   }
 
@@ -657,7 +657,7 @@ static int VTrihedron (Draw_Interpretor& ,
     aTrihedron = Handle(AIS_Trihedron)::DownCast (anObject);
     if (aTrihedron.IsNull())
     {
-      std::cout << "Syntax error: no trihedron with this name.\n";
+      Message::SendFail ("Syntax error: no trihedron with this name");
       return 1;
     }
   }
@@ -853,7 +853,7 @@ static int VPlaneTrihedron (Draw_Interpretor& di, Standard_Integer argc, const c
 
   if (TheAISContext()->NbSelected() != 1)
   {
-    std::cerr << "Error: Wrong number of selected shapes.\n";
+    Message::SendFail ("Error: Wrong number of selected shapes.");
     return 1;
   }
 
@@ -862,7 +862,7 @@ static int VPlaneTrihedron (Draw_Interpretor& di, Standard_Integer argc, const c
   Handle(AIS_Plane) aPlane = Handle(AIS_Plane)::DownCast (aTest);
   if (aPlane.IsNull())
   {
-    std::cerr << "Error: Selected shape is not a plane.\n";
+    Message::SendFail ("Error: Selected shape is not a plane.");
     return 1;
   }
 
@@ -932,7 +932,7 @@ static int VAxisBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
     if ( !strcasecmp(argv[0], "vaxis")) {
       if (aShapes.Extent() != 2 && aShapes.Extent() != 1)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes.");
         return 1;
       }
 
@@ -941,14 +941,14 @@ static int VAxisBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
       {
         if (aShapes.Extent() != 2)
         {
-          std::cerr << "Error: Wron number of selected shapes.\n";
+          Message::SendFail ("Error: Wrong number of selected shapes.");
           return 1;
         }
 
         const TopoDS_Shape& aShapeB = aShapes.Last();
         if (aShapeB.ShapeType() != TopAbs_VERTEX)
         {
-          std::cerr << "Syntax error: You should select two vertices or one edge.\n";
+          Message::SendFail ("Syntax error: You should select two vertices or one edge.");
           return 1;
         }
 
@@ -985,7 +985,7 @@ static int VAxisBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes.");
         return 1;
       }
 
@@ -994,7 +994,7 @@ static int VAxisBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
       if (!(aShapeA.ShapeType() == TopAbs_EDGE
          && aShapeB.ShapeType() == TopAbs_VERTEX))
       {
-        std::cerr << "Syntax error: You should select face and then vertex.\n";
+        Message::SendFail ("Syntax error: You should select face and then vertex.");
         return 1;
       }
 
@@ -1018,7 +1018,7 @@ static int VAxisBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes.");
         return 1;
       }
 
@@ -1027,7 +1027,7 @@ static int VAxisBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
       if (!(aShapeA.ShapeType() == TopAbs_EDGE
          && aShapeB.ShapeType() == TopAbs_VERTEX))
       {
-        std::cerr << "Syntax error: You should select face and then vertex.\n";
+        Message::SendFail ("Syntax error: You should select face and then vertex.");
         return 1;
       }
 
@@ -1103,8 +1103,8 @@ static int VPointBuilder(Draw_Interpretor& di, Standard_Integer argc, const char
 
     if (aShapes.Extent() != 1)
     {
-      std::cerr << "Error: Wrong number of selected shapes.\n";
-      std::cerr << "\tYou should select one edge or vertex.\n";
+      Message::SendFail() << "Error: Wrong number of selected shapes.\n"
+                          << "\tYou should select one edge or vertex.";
       return 1;
     }
 
@@ -1168,7 +1168,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
   // Verification
   if (argc<2 || argc>6 )
   {
-    std::cout<<" Syntax error\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
   if (argc == 6 || argc==5 || argc==4)
@@ -1184,7 +1184,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
     Handle(AIS_InteractiveObject) aShapeA;
     if (!GetMapOfAIS().Find2 (argv[2], aShapeA))
     {
-      std::cout<<"vplane: error 1st name doesn't exist in the GetMapOfAIS()\n";
+      Message::SendFail ("Syntax error: 1st name is not displayed");
       return 1;
     }
 
@@ -1197,28 +1197,28 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
         Handle(AIS_InteractiveObject) aShapeB;
         if (argc<5 || !GetMapOfAIS().Find2 (argv[3], aShapeB))
         {
-          std::cout<<"vplane: error 2nd name doesn't exist in the GetMapOfAIS()\n";
+          Message::SendFail ("Syntax error: 2nd name is not displayed");
           return 1;
         }
         // If B is not an AIS_Point
         if (aShapeB.IsNull() ||
           (!(aShapeB->Type()==AIS_KOI_Datum && aShapeB->Signature()==1)))
         {
-          std::cout<<"vplane: error 2nd object is expected to be an AIS_Point.\n";
+          Message::SendFail ("Syntax error: 2nd object is expected to be an AIS_Point");
           return 1;
         }
         // The third object is an AIS_Point
         Handle(AIS_InteractiveObject) aShapeC;
         if (!GetMapOfAIS().Find2(argv[4], aShapeC)) 
         {
-          std::cout<<"vplane: error 3d name doesn't exist in the GetMapOfAIS().\n";
+          Message::SendFail ("Syntax error: 3d name is not displayed");
           return 1; 
         }
         // If C is not an AIS_Point
         if (aShapeC.IsNull() ||
           (!(aShapeC->Type()==AIS_KOI_Datum && aShapeC->Signature()==1)))
         {
-          std::cout<<"vplane: error 3d object is expected to be an AIS_Point.\n";
+          Message::SendFail ("Syntax error: 3d object is expected to be an AIS_Point");
           return 1;
         }
 
@@ -1243,21 +1243,24 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
            Abs(aCartPointB->Z()-aCartPointA->Z())<=Precision::Confusion())
         {
           // B=A
-          std::cout<<"vplane error: same points\n";return 1;
+          Message::SendFail ("Error: same points");
+          return 1;
         }
         if(Abs(aCartPointC->X()-aCartPointA->X())<=Precision::Confusion() &&
            Abs(aCartPointC->Y()-aCartPointA->Y())<=Precision::Confusion() &&
            Abs(aCartPointC->Z()-aCartPointA->Z())<=Precision::Confusion())
         {
           // C=A
-          std::cout<<"vplane error: same points\n";return 1;
+          Message::SendFail ("Error: same points");
+          return 1;
         }
         if(Abs(aCartPointC->X()-aCartPointB->X())<=Precision::Confusion() &&
            Abs(aCartPointC->Y()-aCartPointB->Y())<=Precision::Confusion() &&
            Abs(aCartPointC->Z()-aCartPointB->Z())<=Precision::Confusion())
         {
           // C=B
-          std::cout<<"vplane error: same points\n";return 1;
+          Message::SendFail ("Error: same points");
+          return 1;
         }
 
         gp_Pnt A = aCartPointA->Pnt();
@@ -1274,11 +1277,10 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
           Standard_Integer aType = Draw::Atoi (argv[5]);
           if (aType != 0 && aType != 1)
           {
-            std::cout << "vplane error: wrong type of sensitivity!\n"
-                      << "Should be one of the following values:\n"
-                      << "0 - Interior\n"
-                      << "1 - Boundary"
-                      << std::endl;
+            Message::SendFail("Syntax error: wrong type of sensitivity.\n"
+                              "Should be one of the following values:\n"
+                              "0 - Interior\n"
+                              "1 - Boundary");
             return 1;
           }
           else
@@ -1296,14 +1298,14 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       Handle(AIS_InteractiveObject) aShapeB;
       if (argc!=4 || !GetMapOfAIS().Find2 (argv[3], aShapeB))
       {
-        std::cout<<"vplane: error 2d name doesn't exist in the GetMapOfAIS()\n";
+        Message::SendFail ("Syntax error: 2d name is not displayed");
         return 1;
       }
       // If B is not an AIS_Point
       if (aShapeB.IsNull() ||
         (!(aShapeB->Type()==AIS_KOI_Datum && aShapeB->Signature()==1)))
       {
-        std::cout<<"vplane: error 2d object is expected to be an AIS_Point\n";
+        Message::SendFail ("Syntax error: 2d object is expected to be an AIS_Point");
         return 1;
       }
 
@@ -1330,11 +1332,10 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
         Standard_Integer aType = Draw::Atoi (argv[4]);
         if (aType != 0 && aType != 1)
         {
-          std::cout << "vplane error: wrong type of sensitivity!\n"
-                    << "Should be one of the following values:\n"
-                    << "0 - Interior\n"
-                    << "1 - Boundary"
-                    << std::endl;
+          Message::SendFail ("Syntax error: wrong type of sensitivity!\n"
+                             "Should be one of the following values:\n"
+                             "0 - Interior\n"
+                             "1 - Boundary");
           return 1;
         }
         else
@@ -1353,14 +1354,14 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       Handle(AIS_InteractiveObject) aShapeB;
       if (argc!=4 || !GetMapOfAIS().Find2 (argv[3], aShapeB))
       {
-        std::cout<<"vplane: error 2d name doesn't exist in the GetMapOfAIS()\n";
+        Message::SendFail ("Syntax error: 2d name is not displayed");
         return 1;
       }
       // B should be an AIS_Point
       if (aShapeB.IsNull() ||
          (!(aShapeB->Type()==AIS_KOI_Datum && aShapeB->Signature()==1)))
       {
-        std::cout<<"vplane: error 2d object is expected to be an AIS_Point\n";
+        Message::SendFail ("Syntax error: 2d object is expected to be an AIS_Point");
         return 1;
       }
 
@@ -1383,11 +1384,10 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
         Standard_Integer aType = Draw::Atoi (argv[4]);
         if (aType != 0 && aType != 1)
         {
-          std::cout << "vplane error: wrong type of sensitivity!\n"
-                    << "Should be one of the following values:\n"
-                    << "0 - Interior\n"
-                    << "1 - Boundary"
-                    << std::endl;
+          Message::SendFail ("Syntax error: wrong type of sensitivity!\n"
+                             "Should be one of the following values:\n"
+                             "0 - Interior\n"
+                             "1 - Boundary");
           return 1;
         }
         else
@@ -1400,7 +1400,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
     // Error
     else
     {
-      std::cout<<"vplane: error 1st object is not an AIS\n";
+      Message::SendFail ("Syntax error: 1st object is not an AIS");
       return 1;
     }
   }
@@ -1416,8 +1416,8 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
     {
       if (aShapes.Extent() < 1 || aShapes.Extent() > 3)
       {
-        std::cerr << "Error: Wront number of selected shapes.\n";
-        std::cerr << "\tYou should one of variant: face, edge and vertex or three vertices.\n";
+        Message::SendFail() << "Error: Wront number of selected shapes.\n"
+                            << "\tYou should one of variant: face, edge and vertex or three vertices.";
         return 1;
       }
 
@@ -1429,7 +1429,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
           const TopoDS_Shape& aShapeB = aShapes.Last();
           if (aShapeB.ShapeType() != TopAbs_EDGE)
           {
-            std::cerr << "Syntax error: Together with vertex should be edge.\n";
+            Message::SendFail ("Syntax error: Together with vertex should be edge.");
             return 1;
           }
 
@@ -1441,7 +1441,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
           if (OrthoProj.SquareDistance(1)<Precision::Approximation())
           {
             // The vertex is on the edge
-            std::cout<<" vplane: error point is on the edge\n";
+            Message::SendFail ("Error: point is on the edge");
             return 1;
           }
           else
@@ -1471,7 +1471,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
           if (!(aShapeB.ShapeType() == TopAbs_VERTEX
              && aShapeC.ShapeType() == TopAbs_VERTEX))
           {
-            std::cerr << "Syntax error: You should one of variant: face, edge and vertex or three vertices.\n";
+            Message::SendFail ("Syntax error: You should one of variant: face, edge and vertex or three vertices.");
             return 1;
           }
 
@@ -1486,7 +1486,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
         }
         else
         {
-          std::cerr << "Syntax error: You should one of variant: face, edge and vertex or three vertices.\n";
+          Message::SendFail ("Syntax error: You should one of variant: face, edge and vertex or three vertices.");
           return 1;
         }
       }
@@ -1494,14 +1494,14 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       {
         if (aShapes.Extent() != 2)
         {
-          std::cerr << "Error: wrong number of selected shapes.\n";
+          Message::SendFail ("Error: wrong number of selected shapes.");
           return 1;
         }
 
         const TopoDS_Shape& aShapeB = aShapes.Last();
         if (aShapeB.ShapeType() != TopAbs_VERTEX)
         {
-          std::cerr << "Syntax error: Together with edge should be vertex.\n";
+          Message::SendFail ("Syntax error: Together with edge should be vertex.");
           return 1;
         }
 
@@ -1513,7 +1513,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
         if (OrthoProj.SquareDistance(1)<Precision::Approximation())
         {
           // The vertex is on the edge
-          std::cout<<" vplane: error point is on the edge\n";
+          Message::SendFail ("Error point is on the edge");
           return 1;
         }
 
@@ -1542,13 +1542,13 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
         }
         else
         {
-          std::cout<<" vplane: error\n";
+          Message::SendFail ("Error: surface is not Plane");
           return 1;
         }
       }
       else
       {
-        std::cerr << "Syntax error: You should one of variant: face, edge and vertex or three vertices.\n";
+        Message::SendFail ("Syntax error: You should one of variant: face, edge and vertex or three vertices");
         return 1;
       }
     }
@@ -1560,7 +1560,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes.");
         return 1;
       }
 
@@ -1574,7 +1574,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       if (!(aShapeA->ShapeType() == TopAbs_VERTEX
          && aShapeB->ShapeType() == TopAbs_FACE))
       {
-        std::cerr << "Syntax error: you should select face and vertex.\n";
+        Message::SendFail ("Syntax error: you should select face and vertex.");
         return 1;
       }
 
@@ -1594,7 +1594,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       }
       else
       {
-        std::cerr << "Error: Builded surface is not a plane.\n";
+        Message::SendFail ("Error: Builded surface is not a plane.");
         return 1;
       }
     }
@@ -1606,7 +1606,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: wrong number of selected shapes.\n";
+        Message::SendFail ("Error: wrong number of selected shapes.");
         return 1;
       }
 
@@ -1621,7 +1621,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       if (!(aShapeA->ShapeType() == TopAbs_EDGE
          && aShapeB->ShapeType() == TopAbs_FACE))
       {
-        std::cerr << "Error: you should select edge and face.\n";
+        Message::SendFail ("Error: you should select edge and face.");
         return 1;
       }
 
@@ -1646,7 +1646,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
           >Precision::Confusion())
       {
         // the edge is not parallel to the face
-        std::cout<<" vplaneortho error: the edge is not parallel to the face\n";
+        Message::SendFail ("Error: the edge is not parallel to the face");
         return 1;
       }
       // the edge is OK
@@ -1666,7 +1666,7 @@ static Standard_Integer VPlaneBuilder (Draw_Interpretor& /*di*/,
       }
       else
       {
-        std::cout<<" vplaneortho: error\n";
+        Message::SendFail ("Error: surface is not Plane");
         return 1;
       }
     }
@@ -1683,15 +1683,13 @@ static int VChangePlane (Draw_Interpretor& /*theDi*/, Standard_Integer theArgsNb
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cout << theArgVec[0] << "AIS context is not available.\n";
+    Message::SendFail ("Error: no active viewer.");
     return 1;
   }
 
   if (theArgsNb < 3 || theArgsNb > 11)
   {
-    std::cerr << theArgVec[0] 
-              << ": incorrect number of command arguments.\n"
-              << "Type help for more information.\n";
+    Message::SendFail ("Syntax error: wrong number of arguments.");
     return 1;
   }
 
@@ -1703,9 +1701,7 @@ static int VChangePlane (Draw_Interpretor& /*theDi*/, Standard_Integer theArgsNb
 
   if ( aPlane.IsNull() )
   {
-    std::cout << theArgVec[0] 
-              << ": there is no interactive plane with the given name."
-              << "Type help for more information.\n";
+    Message::SendFail() << "Syntax error: there is no interactive plane with the given name '" << aName << "'.";
     return 1;
   }
 
@@ -1875,7 +1871,7 @@ static int VLineBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
     ViewerTest::GetSelectedShapes (aShapes);
     if (aShapes.Extent() != 2)
     {
-      std::cerr << "Error: wrong number of selected shapes.\n";
+      Message::SendFail ("Error: wrong number of selected shapes.");
       return 1;
     }
 
@@ -1885,7 +1881,7 @@ static int VLineBuilder(Draw_Interpretor& di, Standard_Integer argc, const char*
     if (!(aShapeA.ShapeType() == TopAbs_VERTEX
        && aShapeB.ShapeType() == TopAbs_VERTEX))
     {
-      std::cerr << "Error: you should select two different vertex.\n";
+      Message::SendFail ("Error: you should select two different vertex.");
       return 1;
     }
 
@@ -2050,8 +2046,8 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
   // Verification of the arguments
   if (argc>6 || argc<2) 
   { 
-    std::cout << "vcircle error: expect 4 arguments.\n"; 
-    return 1; // TCL_ERROR 
+    Message::SendFail ("Syntax error: wrong number of arguments");
+    return 1;
   }
 
   // There are all arguments
@@ -2072,8 +2068,8 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
     {
       if (theShapeB->Type()!=AIS_KOI_Datum || theShapeB->Signature()!=1 ) 
       {
-        std::cout << "vcircle error: 2d argument is unexpected to be a point.\n";
-        return 1; // TCL_ERROR 
+        Message::SendFail ("Error: 2d argument is unexpected to be a point");
+        return 1;
       }
       // The third object must be a point
       Handle(AIS_InteractiveObject) theShapeC;
@@ -2081,8 +2077,8 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
       if (theShapeC.IsNull() ||
         theShapeC->Type()!=AIS_KOI_Datum || theShapeC->Signature()!=1 ) 
       {
-        std::cout << "vcircle error: 3d argument is unexpected to be a point.\n";
-        return 1; // TCL_ERROR 
+        Message::SendFail ("Error: 3d argument is unexpected to be a point");
+        return 1;
       }
         // tag
         // Verify that the three points are different
@@ -2107,24 +2103,24 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
             Abs(myCartPointA->Y()-myCartPointB->Y()) <= Precision::Confusion() && 
             Abs(myCartPointA->Z()-myCartPointB->Z()) <= Precision::Confusion() ) 
         {
-          std::cout << "vcircle error: Same points.\n"; 
-          return 1; // TCL_ERROR 
+          Message::SendFail ("Error: Same points");
+          return 1;
         }
         // Test A=C
         if (Abs(myCartPointA->X()-myCartPointC->X()) <= Precision::Confusion() &&
             Abs(myCartPointA->Y()-myCartPointC->Y()) <= Precision::Confusion() && 
             Abs(myCartPointA->Z()-myCartPointC->Z()) <= Precision::Confusion() ) 
         {
-          std::cout << "vcircle error: Same points.\n"; 
-          return 1; // TCL_ERROR 
+          Message::SendFail ("Error: Same points");
+          return 1;
         }
         // Test B=C
         if (Abs(myCartPointB->X()-myCartPointC->X()) <= Precision::Confusion() && 
             Abs(myCartPointB->Y()-myCartPointC->Y()) <= Precision::Confusion() && 
             Abs(myCartPointB->Z()-myCartPointC->Z()) <= Precision::Confusion() ) 
         {
-          std::cout << "vcircle error: Same points.\n"; 
-          return 1;// TCL_ERROR 
+          Message::SendFail ("Error: Same points");
+          return 1;
         }
         // Construction of the circle
         GC_MakeCircle Cir = GC_MakeCircle (myCartPointA->Pnt(), 
@@ -2136,10 +2132,10 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
         }
         catch (StdFail_NotDone const&)
         {
-          std::cout << "vcircle error: can't create circle\n";
-          return -1; // TCL_ERROR
+          Message::SendFail ("Error: can't create circle");
+          return -1;
         }
-        
+
         DisplayCircle(theGeomCircle, aName, isFilled);
     }
 
@@ -2151,14 +2147,14 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
       if (theShapeB->Type() != AIS_KOI_Datum || 
         theShapeB->Signature() != 1 ) 
       {
-        std::cout << "vcircle error: 2d element is a unexpected to be a point.\n"; 
-        return 1; // TCL_ERROR 
+        Message::SendFail ("Error: 2d element is a unexpected to be a point");
+        return 1;
       }
       // Check that the radius is >= 0
       if (Draw::Atof(argv[4]) <= 0 ) 
       {
-        std::cout << "vcircle error: the radius must be >=0.\n"; 
-        return 1; // TCL_ERROR 
+        Message::SendFail ("Syntax error: the radius must be >=0");
+        return 1;
       }
 
       // Recover the normal to the plane
@@ -2183,8 +2179,8 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
       }
       catch (StdFail_NotDone const&)
       {
-        std::cout << "vcircle error: can't create circle\n";
-        return -1; // TCL_ERROR
+        Message::SendFail ("Error: can't create circle");
+        return -1;
       }
 
       DisplayCircle(theGeomCircle, aName, isFilled);
@@ -2194,8 +2190,8 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
     // Error
     else
     {
-      std::cout << "vcircle error: 1st argument is a unexpected type.\n"; 
-      return 1; // TCL_ERROR 
+      Message::SendFail ("Error: 1st argument has an unexpected type");
+      return 1;
     }
 
   }
@@ -2210,7 +2206,7 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
     ViewerTest::GetSelectedShapes (aShapes);
     if (aShapes.Extent() != 3 && aShapes.Extent() != 2)
     {
-      std::cerr << "Error: Wrong number of selected shapes.\n";
+      Message::SendFail ("Error: Wrong number of selected shapes.");
       return 1;
     }
 
@@ -2219,7 +2215,7 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
     {
       if (aShapes.Extent() != 3)
       {
-        std::cerr << "Error: wrong number of selected shapes.\n";
+        Message::SendFail ("Error: wrong number of selected shapes.");
         return 1;
       }
 
@@ -2249,8 +2245,8 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
       }
       catch (StdFail_NotDone const&)
       {
-        std::cout << "vcircle error: can't create circle\n";
-        return -1; // TCL_ERROR
+        Message::SendFail ("Error: can't create circle");
+        return -1;
       }
 
       DisplayCircle(theGeomCircle, aName, isFilled);
@@ -2294,15 +2290,15 @@ static int VCircleBuilder(Draw_Interpretor& /*di*/, Standard_Integer argc, const
       }
       catch (StdFail_NotDone const&)
       {
-        std::cout << "vcircle error: can't create circle\n";
-        return -1; // TCL_ERROR
+        Message::SendFail ("Error: can't create circle");
+        return -1;
       }
 
       DisplayCircle(theGeomCircle, aName, isFilled);
     }
     else
     {
-      std::cerr << "Error: You should select face and vertex or three vertices.\n";
+      Message::SendFail ("Error: You should select face and vertex or three vertices.");
       return 1;
     }
   }
@@ -2321,13 +2317,13 @@ static int VDrawText (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (theArgsNb < 3)
   {
-    std::cout << "Error: wrong number of arguments! See usage:\n";
+    Message::SendFail ("Syntax error: wrong number of arguments. See usage:");
     theDI.PrintHelp (theArgVec[0]);
     return 1;
   }
   else if (aContext.IsNull())
   {
-    std::cout << "Error: no active view!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -2374,7 +2370,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (anArgIt + 3 >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2391,7 +2387,7 @@ static int VDrawText (Draw_Interpretor& theDI,
                                                            aColor);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << aParam << "'\n";
+        Message::SendFail() << "Syntax error at '" << aParam << "'";
         return 1;
       }
       anArgIt += aNbParsed;
@@ -2401,7 +2397,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'";
         return 1;
       }
 
@@ -2421,7 +2417,7 @@ static int VDrawText (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Error: wrong syntax at '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error at '" << aParam << "'";
         return 1;
       }
     }
@@ -2429,7 +2425,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2453,7 +2449,7 @@ static int VDrawText (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Error: wrong syntax at '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error at '" << aParam << "'";
         return 1;
       }
     }
@@ -2461,7 +2457,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2471,7 +2467,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2481,7 +2477,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2491,7 +2487,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2500,7 +2496,7 @@ static int VDrawText (Draw_Interpretor& theDI,
       Font_FontAspect aFontAspect = Font_FA_Undefined;
       if (!parseFontStyle (anOption, aFontAspect))
       {
-        std::cout << "Error: unknown font aspect '" << anOption << "'.\n";
+        Message::SendFail() << "Syntax error: unknown font aspect '" << anOption << "'";
         return 1;
       }
       aTextPrs->SetFontAspect (aFontAspect);
@@ -2509,7 +2505,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2519,7 +2515,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (anArgIt + 6 >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -2553,7 +2549,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (++anArgIt >= theArgsNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Syntax error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
       TCollection_AsciiString aType (theArgVec[anArgIt]);
@@ -2572,7 +2568,7 @@ static int VDrawText (Draw_Interpretor& theDI,
         aDisplayType = Aspect_TODT_SHADOW;
       else
       {
-        std::cout << "Error: wrong display type '" << aType << "'.\n";
+        Message::SendFail() << "Syntax error: wrong display type '" << aType << "'";
         return 1;
       }
     }
@@ -2585,7 +2581,7 @@ static int VDrawText (Draw_Interpretor& theDI,
                                                            aColor);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << aParam << "'\n";
+        Message::SendFail() << "Syntax error at '" << aParam << "'";
         return 1;
       }
       anArgIt += aNbParsed;
@@ -2600,7 +2596,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     {
       if (anArgIt + 2 >= theArgsNb)
       {
-        std::cerr << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'.";
         return 1;
       }
 
@@ -2610,7 +2606,7 @@ static int VDrawText (Draw_Interpretor& theDI,
       if (!aX.IsIntegerValue()
        || !aY.IsIntegerValue())
       {
-        std::cerr << "Error: wrong syntax at '" << aParam << "'.\n";
+        Message::SendFail() << "Error: wrong syntax at '" << aParam << "'.";
         return 1;
       }
       if (anArgIt + 1 < theArgsNb)
@@ -2627,7 +2623,7 @@ static int VDrawText (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: unknown argument '" << aParam << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << aParam << "'";
       return 1;
     }
   }
@@ -2935,13 +2931,13 @@ static int VDrawSphere (Draw_Interpretor& /*di*/, Standard_Integer argc, const c
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cout << "Call vinit before!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   else if (argc < 3)
   {
-    std::cout << "Use: " << argv[0]
-              << " shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToShowEdges=0]\n";
+    Message::SendFail() << "Syntax error: wrong number of arguments.\n"
+                        << "Use: " << argv[0] << " shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToShowEdges=0]";
     return 1;
   }
 
@@ -3084,7 +3080,7 @@ static int VComputeHLR (Draw_Interpretor& ,
       }
       else
       {
-        std::cout << "Syntax error: unknown algo type '" << anArgNext << "'\n";
+        Message::SendFail() << "Syntax error: unknown algo type '" << anArgNext << "'";
         return 1;
       }
     }
@@ -3126,7 +3122,7 @@ static int VComputeHLR (Draw_Interpretor& ,
         BRepTools::Read (aSh, theArgVec[anArgIter], aBrepBuilder);
         if (aSh.IsNull())
         {
-          std::cout << "Syntax error: no shape with name " << theArgVec[anArgIter] << " found\n";
+          Message::SendFail() << "Syntax error: no shape with name " << theArgVec[anArgIter] << " found";
           return 1;
         }
       }
@@ -3150,7 +3146,7 @@ static int VComputeHLR (Draw_Interpretor& ,
     }
     else
     {
-      std::cout << "Syntax error: unknown argument '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -3158,7 +3154,7 @@ static int VComputeHLR (Draw_Interpretor& ,
   if (aHlrName.IsEmpty() || aSh.IsNull()
    || (ViewerTest::GetAISContext().IsNull() && hasViewDirArg))
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -3441,7 +3437,7 @@ Standard_Boolean MyPArrayObject::Init (Graphic3d_TypeOfPrimitiveArray thePrimTyp
     || !myPArray->Attributes()->IsMutable()
     || (!myPArray->Indices().IsNull() && !myPArray->Indices()->IsMutable()))
     {
-      std::cout << "Syntax error: array cannot be patched\n";
+      Message::SendFail ("Syntax error: array cannot be patched");
       return Standard_False;
     }
 
@@ -3543,7 +3539,7 @@ Standard_Boolean MyPArrayObject::Init (Graphic3d_TypeOfPrimitiveArray thePrimTyp
     // unknown command
     else
     {
-      std::cout << "Syntax error: unknown argument '" << theDesc->Value(anArgIndex) << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << theDesc->Value(anArgIndex) << "'";
       return Standard_False;
     }
   }
@@ -3679,12 +3675,12 @@ static int VDrawPArray (Draw_Interpretor& di, Standard_Integer argc, const char*
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cout << "Error: no active Viewer\n";
+    Message::SendFail ("Error: no active Viewer");
     return 1;
   }
   else if (argc < 3)
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -3701,12 +3697,12 @@ static int VDrawPArray (Draw_Interpretor& di, Standard_Integer argc, const char*
     Handle(Graphic3d_ArrayOfPrimitives) aTris = StdPrs_ShadedShape::FillTriangles (aShape);
     if (aShape.IsNull())
     {
-      std::cout << "Syntax error: shape '" << aShapeName << "' is not found\n";
+      Message::SendFail() << "Syntax error: shape '" << aShapeName << "' is not found";
       return 1;
     }
     else if (aTris.IsNull())
     {
-      std::cout << "Syntax error: shape '" << aShapeName << "' is not triangulated\n";
+      Message::SendFail() << "Syntax error: shape '" << aShapeName << "' is not triangulated";
       return 1;
     }
 
@@ -3730,7 +3726,7 @@ static int VDrawPArray (Draw_Interpretor& di, Standard_Integer argc, const char*
     }
     if (aPObject.IsNull())
     {
-      std::cout << "Syntax error: object '" << aName << "' cannot be found\n";
+      Message::SendFail() << "Syntax error: object '" << aName << "' cannot be found";
       return 1;
     }
   }
@@ -3776,7 +3772,7 @@ static int VDrawPArray (Draw_Interpretor& di, Standard_Integer argc, const char*
   }
   if (aPrimType == Graphic3d_TOPA_UNDEFINED)
   {
-    std::cout << "Syntax error: unexpected type of primitives array\n";
+    Message::SendFail ("Syntax error: unexpected type of primitives array");
     return 1;
   }
 
@@ -3876,7 +3872,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
   ViewerTest_AutoUpdater anUpdateTool (aContext, ViewerTest::CurrentView());
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -3898,7 +3894,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       GetMapOfAIS().Find2 (aName, anObj);
       if (anObj.IsNull())
       {
-        std::cout << "Error: object '" << aName << "' is not displayed!\n";
+        Message::SendFail() << "Error: object '" << aName << "' is not displayed";
         return 1;
       }
     }
@@ -3912,7 +3908,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -3921,7 +3917,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       GetMapOfAIS().Find2 (aName2, anObj2);
       if (anObj2.IsNull())
       {
-        std::cout << "Error: object '" << aName2 << "' is not displayed!\n";
+        Message::SendFail() << "Error: object '" << aName2 << "' is not displayed";
         return 1;
       }
 
@@ -3933,7 +3929,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       toPrintInfo = Standard_False;
       if (anArgIter + 7 >= theArgNb)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -3958,7 +3954,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       anArgIter += aNbParsed;
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -4022,7 +4018,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       {
         if (anArg == "-setscale")
         {
-          std::cout << "Syntax error at '" << anArg << "'\n";
+          Message::SendFail() << "Syntax error at '" << anArg << "'";
           return 1;
         }
 
@@ -4066,7 +4062,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       toPrintInfo = Standard_False;
       if (anArgIter + 6 >= theArgNb)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -4117,7 +4113,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
         }
         else if (anArg == "-setrotation")
         {
-          std::cout << "Syntax error at '" << anArg << "'\n";
+          Message::SendFail() << "Syntax error at '" << anArg << "'";
           return 1;
         }
       }
@@ -4142,7 +4138,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       }
       else if (anArg == "-setlocation")
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -4158,7 +4154,7 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
       Standard_Integer aNbParsed = parseTranslationVec (theArgNb - anArgIter, theArgVec + anArgIter, aLocVec);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
       anArgIter = anArgIter + aNbParsed - 1;
@@ -4170,14 +4166,14 @@ static Standard_Integer VSetLocation (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: unknown argument '" << anArg << "'\n";
+      Message::SendFail() << "Error: unknown argument '" << anArg << "'";
       return 1;
     }
   }
 
   if (anObj.IsNull())
   {
-    std::cout << "Syntax error - wrong number of arguments\n";
+    Message::SendFail ("Syntax error - wrong number of arguments");
     return 1;
   }
   else if (!toPrintInfo)
@@ -4239,12 +4235,12 @@ static Standard_Integer VConnect (Draw_Interpretor& /*di*/,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   if (argc < 6)
   {
-    std::cout << "Syntax error: expect at least 5 arguments\n";
+    Message::SendFail ("Syntax error: expect at least 5 arguments");
     return 1;
   }
 
@@ -4269,7 +4265,7 @@ static Standard_Integer VConnect (Draw_Interpretor& /*di*/,
     Handle(AIS_InteractiveObject) anObject;
     if (aName.IsEqual (anOriginObjectName))
     {
-      std::cout << "Syntax error: equal names for connected objects\n";
+      Message::SendFail ("Syntax error: equal names for connected objects");
       continue;
     }
 
@@ -4279,7 +4275,7 @@ static Standard_Integer VConnect (Draw_Interpretor& /*di*/,
       TopoDS_Shape aTDShape = DBRep::Get (anOriginObjectName);
       if (aTDShape.IsNull())
       {
-        std::cout << "Syntax error: object " << anOriginObjectName << " doesn't exist\n";
+        Message::SendFail() << "Syntax error: object " << anOriginObjectName << " doesn't exist";
         return 1;
       }
       Handle(AIS_Shape) aShapePrs = new AIS_Shape (aTDShape);
@@ -4300,7 +4296,7 @@ static Standard_Integer VConnect (Draw_Interpretor& /*di*/,
   }
   if (aMultiConObject.IsNull())
   {
-    std::cout << "Syntax error: can't connect input objects\n";
+    Message::SendFail ("Syntax error: can't connect input objects");
     return 1;
   }
 
@@ -4330,12 +4326,12 @@ static Standard_Integer VConnectTo (Draw_Interpretor& /*di*/,
   ViewerTest_AutoUpdater anUpdateTool (aContext, ViewerTest::CurrentView());
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   if (argc != 6 && argc != 7)
   {
-    std::cout << "Syntax error: expect at least 5 arguments\n";
+    Message::SendFail ("Syntax error: expect at least 5 arguments");
     return 1;
   }
 
@@ -4346,7 +4342,7 @@ static Standard_Integer VConnectTo (Draw_Interpretor& /*di*/,
   TCollection_AsciiString anOriginObjectName(argv[5]);
   if (aName.IsEqual (anOriginObjectName))
   {
-    std::cout << "Syntax error: equal names for connected objects\n";
+    Message::SendFail ("Syntax error: equal names for connected objects");
     return 1;
   }
   anOriginObject = findConnectedObject (anOriginObjectName);
@@ -4355,7 +4351,7 @@ static Standard_Integer VConnectTo (Draw_Interpretor& /*di*/,
     TopoDS_Shape aTDShape = DBRep::Get (anOriginObjectName);
     if (aTDShape.IsNull())
     {
-      std::cout << "Syntax error: object " << anOriginObjectName << " doesn't exist\n";
+      Message::SendFail() << "Syntax error: object " << anOriginObjectName << " doesn't exist";
       return 1;
     }
 
@@ -4395,7 +4391,7 @@ static Standard_Integer VConnectTo (Draw_Interpretor& /*di*/,
 
     if (!anUpdateTool.parseRedrawMode (anArg))
     {
-      std::cout << "Syntax error: unknown argument '" << anArg << "'.\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << anArg << "'";
       return 1;
     }
   }
@@ -4415,13 +4411,13 @@ static Standard_Integer VDisconnect (Draw_Interpretor& di,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << argv[0] << "ERROR : use 'vinit' command before \n";
+    Message::SendFail( "Error: no active viewer");
     return 1;
   }
   
   if (argc != 3)
   {
-    std::cout << "ERROR : Usage : " << argv[0] << " name object\n";
+    Message::SendFail() << "Syntax error: wrong number of arguments.\nUsage: " << argv[0] << " name object";
     return 1;
   }
 
@@ -4434,7 +4430,7 @@ static Standard_Integer VDisconnect (Draw_Interpretor& di,
   Handle(AIS_MultipleConnectedInteractive) anAssembly;
   if (!aMap.IsBound2 (aName) )
   {
-    std::cout << "Use 'vdisplay' before\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4464,7 +4460,7 @@ static Standard_Integer VDisconnect (Draw_Interpretor& di,
     }
     else
     {
-      std::cout << "Use 'vdisplay' before\n";
+      Message::SendFail ("Error: no active viewer");
       return 1;
     }    
   }
@@ -4485,13 +4481,13 @@ static Standard_Integer VAddConnected (Draw_Interpretor& ,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   if (argc != 6)
   {
-    std::cout << "Syntax error: expect 5 arguments\n";
+    Message::SendFail ("Syntax error: expect 5 arguments");
     return 1;
   }
 
@@ -4510,7 +4506,7 @@ static Standard_Integer VAddConnected (Draw_Interpretor& ,
     anAssembly = Handle(AIS_MultipleConnectedInteractive)::DownCast (aPrs);
     if (anAssembly.IsNull())
     {
-      std::cout << "Syntax error: '" << aName << "' is not an assembly\n";
+      Message::SendFail() << "Syntax error: '" << aName << "' is not an assembly";
       return 1;
     }
   }
@@ -4518,7 +4514,7 @@ static Standard_Integer VAddConnected (Draw_Interpretor& ,
   Handle(AIS_InteractiveObject) anIObj = findConnectedObject (anObjectName);
   if (anIObj.IsNull())
   {
-    std::cout << "Syntax error: '" << anObjectName << "' is not displayed\n";
+    Message::SendFail() << "Syntax error: '" << anObjectName << "' is not displayed";
     return 1;
   }
 
@@ -4543,13 +4539,13 @@ static Standard_Integer VListConnected (Draw_Interpretor& /*di*/,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << argv[0] << "ERROR : use 'vinit' command before \n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   
   if (argc != 2)
   {
-    std::cout << "ERROR : Usage : " << argv[0] << " name\n";
+    Message::SendFail() << "Syntax error: wrong number of arguments.\nUsage: " << argv[0] << " name";
     return 1;
   }
 
@@ -4560,14 +4556,14 @@ static Standard_Integer VListConnected (Draw_Interpretor& /*di*/,
   Handle(AIS_MultipleConnectedInteractive) anAssembly;
   if (!aMap.IsBound2 (aName) )
   {
-    std::cout << "Use 'vdisplay' before\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   anAssembly = Handle(AIS_MultipleConnectedInteractive)::DownCast (aMap.Find2 (aName));
   if (anAssembly.IsNull())
   {
-    std::cout << "Not an assembly\n";
+    Message::SendFail ("Syntax error: Not an assembly");
     return 1;
   }
 
@@ -4609,7 +4605,7 @@ static Standard_Integer VChild (Draw_Interpretor& ,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4667,7 +4663,7 @@ static Standard_Integer VChild (Draw_Interpretor& ,
     Handle(AIS_InteractiveObject) aChild;
     if (!GetMapOfAIS().Find2 (theArgVec[anArgIter], aChild))
     {
-      std::cout << "Syntax error: object '" << theArgVec[anArgIter] << "' is not found\n";
+      Message::SendFail() << "Syntax error: object '" << theArgVec[anArgIter] << "' is not found";
       return 1;
     }
 
@@ -4677,7 +4673,7 @@ static Standard_Integer VChild (Draw_Interpretor& ,
     }
     else if (toAdd == -1)
     {
-      std::cout << "Syntax error: no action specified\n";
+      Message::SendFail ("Syntax error: no action specified");
       return 1;
     }
     else
@@ -4701,7 +4697,7 @@ static Standard_Integer VChild (Draw_Interpretor& ,
   }
   if (!hasActions)
   {
-    std::cout << "Syntax error: not enough arguments\n";
+    Message::SendFail ("Syntax error: not enough arguments");
     return 1;
   }
   return 0;
@@ -4718,13 +4714,13 @@ static Standard_Integer VParent(Draw_Interpretor&,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   if (theNbArgs < 2 )
   {
-    std::cout << theArgVec[0] << " error: expect at least 2 arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -4732,7 +4728,7 @@ static Standard_Integer VParent(Draw_Interpretor&,
   Handle(AIS_InteractiveObject) aParent;
   if (!GetMapOfAIS().Find2(theArgVec[1], aParent))
   {
-    std::cout << "Syntax error: object '" << theArgVec[1] << "' is not found\n";
+    Message::SendFail() << "Syntax error: object '" << theArgVec[1] << "' is not found";
     return 1;
   }
 
@@ -4759,7 +4755,7 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
   Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
   if (anAISContext.IsNull())
   {
-    std::cout << "Error: no active Viewer\n";
+    Message::SendFail ("Error: no active Viewer");
     return 1;
   }
 
@@ -4798,7 +4794,7 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
   if (anObjNames.Size() < 2
   || !ViewerTest::ParseOnOff (anObjNames.Last().ToCString(), toTurnOn))
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
   anObjNames.Remove (anObjNames.Upper());
@@ -4816,7 +4812,7 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
     }
     else
     {
-      std::cout << "Syntax error: unknown selection mode '" << aSelModeString  << "'\n";
+      Message::SendFail() << "Syntax error: unknown selection mode '" << aSelModeString  << "'";
       return 1;
     }
   }
@@ -4829,7 +4825,7 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
     GetMapOfAIS().Find2 (aNameIO, anIO);
     if (anIO.IsNull())
     {
-      std::cout << "Syntax error: undefined presentable object " << aNameIO << "\n";
+      Message::SendFail() << "Syntax error: undefined presentable object " << aNameIO;
       return 1;
     }
     aTargetIOs.Append (anIO);
@@ -4861,7 +4857,7 @@ static Standard_Integer VSelectionNext(Draw_Interpretor& /*theDI*/,
 
   if (anAISContext.IsNull())
   {
-    std::cerr << "Call vinit before!" << std::endl;
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4883,7 +4879,7 @@ static Standard_Integer VSelectionPrevious(Draw_Interpretor& /*theDI*/,
 
   if (anAISContext.IsNull())
   {
-    std::cerr << "Call vinit before!" << std::endl;
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4913,7 +4909,7 @@ static Standard_Integer VTriangle (Draw_Interpretor& /*di*/,
 
   if (argc != (2 + aPrims->VertexNumberAllocated()))
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -4931,7 +4927,7 @@ static Standard_Integer VTriangle (Draw_Interpretor& /*di*/,
       if (aShape.IsNull()
        || aShape.ShapeType() != TopAbs_VERTEX)
       {
-        std::cout << "Syntax error: argument " << aName << " must be a point\n";
+        Message::SendFail() << "Syntax error: argument " << aName << " must be a point";
         return 1;
       }
       aPnts[aPntIter] = BRep_Tool::Pnt (TopoDS::Vertex (aShape));
@@ -4941,7 +4937,7 @@ static Standard_Integer VTriangle (Draw_Interpretor& /*di*/,
     {
       if (aPnts[aPnt2Iter].IsEqual (aPnts[aPntIter], Precision::Confusion()))
       {
-        std::cout << "Syntax error: points should not be equal\n";
+        Message::SendFail ("Syntax error: points should not be equal");
         return 1;
       }
     }
@@ -4971,7 +4967,7 @@ static Standard_Integer VObjZLayer (Draw_Interpretor& di,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    di << argv[0] << "Call 'vinit' before!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4997,7 +4993,7 @@ static Standard_Integer VObjZLayer (Draw_Interpretor& di,
   GetMapOfAIS().Find2 (aName, anInterObj);
   if (anInterObj.IsNull())
   {
-    std::cout << "Syntax error: object '" << aName << "' is not displayed\n";
+    Message::SendFail() << "Syntax error: object '" << aName << "' is not displayed";
     return 1;
   }
 
@@ -5026,14 +5022,15 @@ static Standard_Integer VPolygonOffset(Draw_Interpretor& /*di*/,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << argv[0] << " Call 'vinit' before!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   if (argc > 2 && argc != 5)
   {
-    std::cout << "Usage : " << argv[0] << " [object [mode factor units]] - sets/gets polygon offset parameters for an object,"
-      "without arguments prints the default values" << std::endl;
+    Message::SendFail() << "Syntax error: wrong number of arguments.\n"
+                           "Usage: " << argv[0] << " [object [mode factor units]] - sets/gets polygon offset parameters for an object,"
+                           "without arguments prints the default values";
     return 1;
   }
 
@@ -5045,7 +5042,7 @@ static Standard_Integer VPolygonOffset(Draw_Interpretor& /*di*/,
     if (!GetMapOfAIS().Find2 (aName, anInterObj)
       || anInterObj.IsNull())
     {
-      std::cout << "Syntax error: object '" << aName << "' is not displayed\n";
+      Message::SendFail() << "Syntax error: object '" << aName << "' is not displayed";
       return 1;
     }
   }
@@ -5195,14 +5192,13 @@ static Standard_Integer VMarkersTest (Draw_Interpretor&,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cerr << "Call 'vinit' before!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   if (theArgNb < 5)
   {
-    std::cerr << "Usage :\n " << theArgVec[0]
-              << "name X Y Z [PointsOnSide=10] [MarkerType=0] [Scale=1.0] [FileName=ImageFile]\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -5239,7 +5235,7 @@ static Standard_Integer VMarkersTest (Draw_Interpretor&,
     }
     else
     {
-      std::cerr << "Wrong argument: " << anArg << "\n";
+      Message::SendFail() << "Syntax error: wrong argument '" << anArg << "'";
       return 1;
     }
   }
@@ -5253,7 +5249,7 @@ static Standard_Integer VMarkersTest (Draw_Interpretor&,
     anImage = new Image_AlienPixMap();
     if (!anImage->Load (aFileName))
     {
-      std::cerr << "Could not load image from file '" << aFileName << "'!\n";
+      Message::SendFail() << "Error: could not load image from file '" << aFileName << "'!";
       return 1;
     }
     if (anImage->Format() == Image_Format_Gray)
@@ -5288,7 +5284,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
   // Check arguments
   if (theArgNb < 3)
   {
-    std::cerr << "Error: " << theArgVec[0] << " - invalid syntax\n";
+    Message::SendFail() << "Error: " << theArgVec[0] << " - invalid syntax";
     return 1;
   }
 
@@ -5319,7 +5315,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (anArgIt + 3 >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5331,7 +5327,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIt >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5351,7 +5347,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
       }
       else
       {
-        std::cout << "Error: wrong syntax at '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong syntax at '" << aParam << "'";
         return 1;
       }
     }
@@ -5359,7 +5355,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIt >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5383,7 +5379,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
       }
       else
       {
-        std::cout << "Error: wrong syntax at '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong syntax at '" << aParam << "'";
         return 1;
       }
     }
@@ -5391,7 +5387,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIt >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5401,7 +5397,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIt >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5409,7 +5405,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
       anOption.LowerCase();
       if (!parseFontStyle (anOption, aFontAspect))
       {
-        std::cout << "Error: unknown font aspect '" << anOption << "'.\n";
+        Message::SendFail() << "Error: unknown font aspect '" << anOption << "'";
         return 1;
       }
     }
@@ -5417,7 +5413,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIt >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5433,7 +5429,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIt >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5443,7 +5439,7 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     {
       if (anArgIt + 6 >= theArgNb)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam.ToCString() << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -5459,14 +5455,14 @@ static int TextToBRep (Draw_Interpretor& /*theDI*/,
     }
     else
     {
-      std::cerr << "Warning! Unknown argument '" << aParam << "'\n";
+      Message::SendFail() << "Warning! Unknown argument '" << aParam << "'";
     }
   }
 
   aFont.SetCompositeCurveMode (anIsCompositeCurve);
   if (!aFont.FindAndInit (aFontName.ToCString(), aFontAspect, aTextHeight, aStrictLevel))
   {
-    std::cout << "Error: unable to load Font\n";
+    Message::SendFail ("Error: unable to load Font");
     return 1;
   }
 
@@ -5592,7 +5588,7 @@ static int VFont (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Error: font '" << aFontName << "' is not found!\n";
+        Message::SendFail() << "Error: font '" << aFontName << "' is not found";
       }
     }
     else if (anArgIter + 1 < theArgNb
@@ -5635,7 +5631,7 @@ static int VFont (Draw_Interpretor& theDI,
       Handle(Font_SystemFont) aFont = aMgr->CheckFont (aFontPath);
       if (aFont.IsNull())
       {
-        std::cerr << "Error: font '" << aFontPath << "' is not found!\n";
+        Message::SendFail() << "Error: font '" << aFontPath << "' is not found!";
         continue;
       }
 
@@ -5696,7 +5692,7 @@ static int VFont (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cerr << "Warning! Unknown argument '" << anArg << "'\n";
+      Message::SendFail() << "Warning! Unknown argument '" << anArg << "'";
     }
   }
 
@@ -5752,7 +5748,7 @@ static int VVertexMode (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no view available, call 'vinit' before!" << std::endl;
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -5770,8 +5766,8 @@ static int VVertexMode (Draw_Interpretor& theDI,
   {
     if (theArgNum == 2)
     {
-      std::cout << "Error: '-set' option not followed by the mode and optional object name(s)" << std::endl;
-      std::cout << "Type 'help vvertexmode' for usage hints" << std::endl;
+      Message::SendFail ("Error: '-set' option not followed by the mode and optional object name(s)\n"
+                         "Type 'help vvertexmode' for usage hints");
       return 1;
     }
 
@@ -5823,7 +5819,7 @@ static int VVertexMode (Draw_Interpretor& theDI,
   if (theArgNum > 2
   || !GetMapOfAIS().Find2 (aParam, anObject))
   {
-    std::cout << "Error: invalid number of arguments" << std::endl;
+    Message::SendFail ("Syntax error: invalid number of arguments");
     return 1;
   }
 
@@ -5844,7 +5840,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
   if (anAISContext.IsNull())
   {
-    std::cerr << "Error: no active view!\n";
+    Message::SendFail ("Error: no active view!");
     return 1;
   }
 
@@ -5874,7 +5870,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
     case 2  : aCmd = CloudForShape; break;
     case 7  : aCmd = CloudSphere; break;
     default :
-      std::cout << "Error: wrong number of arguments! See usage:\n";
+      Message::SendFail ("Syntax error: wrong number of arguments! See usage:");
       theDI.PrintHelp (theArgs[0]);
       return 1;
   }
@@ -5894,7 +5890,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
     {
       if (isSetArgNorm && hasNormals)
       {
-        std::cout << "Error: wrong syntax - normals can not be enabled with colors at the same time\n";
+        Message::SendFail ("Syntax error: normals can not be enabled with colors at the same time");
         return 1;
       }
       toRandColors = Standard_True;
@@ -5905,7 +5901,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
     {
       if (toRandColors)
       {
-        std::cout << "Error: wrong syntax - normals can not be enabled with colors at the same time\n";
+        Message::SendFail ("Syntax error: normals can not be enabled with colors at the same time");
         return 1;
       }
       isSetArgNorm = Standard_True;
@@ -5948,7 +5944,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
 
     if (aShape.IsNull())
     {
-      std::cout << "Error: no shape with name '" << aShapeName << "' found\n";
+      Message::SendFail() << "Error: no shape with name '" << aShapeName << "' found";
       return 1;
     }
 
@@ -5966,7 +5962,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
     }
     if (aNbPoints < 3)
     {
-      std::cout << "Error: shape should be triangulated!\n";
+      Message::SendFail ("Error: shape should be triangulated");
       return 1;
     }
 
@@ -6036,7 +6032,7 @@ static Standard_Integer VPointCloud (Draw_Interpretor& theDI,
     aDistribution.LowerCase();
     if ( aDistribution != "surface" && aDistribution != "volume" )
     {
-      std::cout << "Error: wrong arguments! See usage:\n";
+      Message::SendFail ("Syntax error: wrong arguments. See usage:");
       theDI.PrintHelp (theArgs[0]);
       return 1;
     }
@@ -6097,7 +6093,7 @@ static int VPriority (Draw_Interpretor& theDI,
   ViewerTest_AutoUpdater anUpdateTool (aContext, ViewerTest::CurrentView());
   if (aContext.IsNull())
   {
-    std::cout << "Error: no view available, call 'vinit' before!" << std::endl;
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -6110,8 +6106,8 @@ static int VPriority (Draw_Interpretor& theDI,
     --aNbArgs;
     if (aPriority < 0 || aPriority > 10)
     {
-      std::cout << "Error: the specified display priority value '" << aLastArg
-                << "' is outside the valid range [0..10]" << std::endl;
+      Message::SendFail() << "Syntax error: the specified display priority value '" << aLastArg
+                          << "' is outside the valid range [0..10]";
       return 1;
     }
   }
@@ -6122,7 +6118,7 @@ static int VPriority (Draw_Interpretor& theDI,
 
   if (aNbArgs < 2)
   {
-    std::cout << "Error: wrong number of arguments! See usage:\n";
+    Message::SendFail ("Syntax error: wrong number of arguments! See usage:");
     theDI.PrintHelp (theArgs[0]);
     return 1;
   }
@@ -6139,7 +6135,7 @@ static int VPriority (Draw_Interpretor& theDI,
     GetMapOfAIS().Find2 (aName, anIObj);
     if (anIObj.IsNull())
     {
-      std::cout << "Error: the object '" << theArgs[1] << "' is not displayed" << std::endl;
+      Message::SendFail() << "Error: the object '" << theArgs[1] << "' is not displayed";
       return 1;
     }
 
@@ -6238,12 +6234,12 @@ static int VNormals (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no view available, call 'vinit' before!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   else if (theArgNum < 2)
   {
-    std::cout << "Error: wrong number of arguments! See usage:\n";
+    Message::SendFail ("Syntax error: wrong number of arguments. See usage:");
     theDI.PrintHelp (theArgs[0]);
     return 1;
   }
@@ -6254,7 +6250,7 @@ static int VNormals (Draw_Interpretor& theDI,
   Standard_Boolean isOn = Standard_True;
   if (aShape.IsNull())
   {
-    std::cout << "Error: shape with name '" << aShapeName << "' is not found\n";
+    Message::SendFail() << "Error: shape with name '" << aShapeName << "' is not found";
     return 1;
   }
 
@@ -6290,7 +6286,7 @@ static int VNormals (Draw_Interpretor& theDI,
       aLength = anArgIter < theArgNum ? Draw::Atof (theArgs[anArgIter]) : 0.0;
       if (Abs (aLength) <= gp::Resolution())
       {
-        std::cout << "Syntax error: length should not be zero\n";
+        Message::SendFail ("Syntax error: length should not be zero");
         return 1;
       }
     }
@@ -6311,7 +6307,7 @@ static int VNormals (Draw_Interpretor& theDI,
       aNbAlongU = anArgIter < theArgNum ? Draw::Atoi (theArgs[anArgIter]) : 0;
       if (aNbAlongU < 1)
       {
-        std::cout << "Syntax error: NbAlongU should be >=1\n";
+        Message::SendFail ("Syntax error: NbAlongU should be >=1");
         return 1;
       }
     }
@@ -6322,7 +6318,7 @@ static int VNormals (Draw_Interpretor& theDI,
       aNbAlongV = anArgIter < theArgNum ? Draw::Atoi (theArgs[anArgIter]) : 0;
       if (aNbAlongV < 1)
       {
-        std::cout << "Syntax error: NbAlongV should be >=1\n";
+        Message::SendFail ("Syntax error: NbAlongV should be >=1");
         return 1;
       }
     }
@@ -6334,13 +6330,13 @@ static int VNormals (Draw_Interpretor& theDI,
       aNbAlongV = aNbAlongU;
       if (aNbAlongU < 1)
       {
-        std::cout << "Syntax error: NbAlong should be >=1\n";
+        Message::SendFail ("Syntax error: NbAlong should be >=1");
         return 1;
       }
     }
     else
     {
-      std::cout << "Syntax error: unknwon argument '" << aParam << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << aParam << "'";
       return 1;
     }
   }
index 33e4f0c..cf0ff62 100644 (file)
@@ -186,27 +186,27 @@ void VUserDrawObj::Render(const Handle(OpenGl_Workspace)& theWorkspace) const
 
 } // end of anonymous namespace
 
-static Standard_Integer VUserDraw (Draw_Interpretor& di,
+static Standard_Integer VUserDraw (Draw_Interpretor& ,
                                     Standard_Integer argc,
                                     const char ** argv)
 {
   Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
   if (aContext.IsNull())
   {
-    di << argv[0] << "Call 'vinit' before!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   Handle(OpenGl_GraphicDriver) aDriver = Handle(OpenGl_GraphicDriver)::DownCast (aContext->CurrentViewer()->Driver());
   if (aDriver.IsNull())
   {
-    std::cerr << "Graphic driver not available.\n";
+    Message::SendFail ("Error: Graphic driver not available.");
     return 1;
   }
 
   if (argc > 2)
   {
-    di << argv[0] << "Wrong number of arguments, only the object name expected\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -233,7 +233,7 @@ static int VFeedback (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -244,9 +244,9 @@ static int VFeedback (Draw_Interpretor& theDI,
     if (aBytes / sizeof(GLfloat) != (size_t )aBufferSize)
     {
       // finito la commedia
-      std::cerr << "Can not allocate buffer - requested size ("
-                << (double(aBufferSize / (1024 * 1024)) * double(sizeof(GLfloat)))
-                << " MiB) is out of address space\n";
+      Message::SendFail() << "Can not allocate buffer - requested size ("
+                          << (double(aBufferSize / (1024 * 1024)) * double(sizeof(GLfloat)))
+                          << " MiB) is out of address space";
       return 1;
     }
 
@@ -254,9 +254,9 @@ static int VFeedback (Draw_Interpretor& theDI,
     if (aBuffer == NULL)
     {
       // finito la commedia
-      std::cerr << "Can not allocate buffer with size ("
-                << (double(aBufferSize / (1024 * 1024)) * double(sizeof(GLfloat)))
-                << " MiB)\n";
+      Message::SendFail() << "Can not allocate buffer with size ("
+                          << (double(aBufferSize / (1024 * 1024)) * double(sizeof(GLfloat)))
+                          << " MiB)";
       return 1;
     }
 
@@ -390,21 +390,20 @@ static int VImmediateFront (Draw_Interpretor& /*theDI*/,
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   Handle(Graphic3d_GraphicDriver) aDriver = aContextAIS->CurrentViewer()->Driver();
-
   if (aDriver.IsNull())
   {
-    std::cerr << "Graphic driver not available.\n";
+    Message::SendFail ("Error: graphic driver not available.");
     return 1;
   }
 
   if (theArgNb < 2)
   {
-    std::cerr << "Wrong number of arguments.\n";
+    Message::SendFail ("Syntax error: wrong number of arguments.");
     return 1;
   }
 
@@ -440,7 +439,7 @@ static int VGlInfo (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("No active viewer");
     return 1;
   }
 
@@ -517,7 +516,7 @@ static int VGlInfo (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cerr << "Unknown key '" << aName.ToCString() << "'\n";
+      Message::SendFail() << "Syntax error: unknown key '" << aName.ToCString() << "'";
       return 1;
     }
 
@@ -590,12 +589,12 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
   if (aCtx.IsNull())
   {
-    std::cout << "Error: no active view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   else if (theArgNb < 2)
   {
-    std::cout << "Syntax error: lack of arguments\n";
+    Message::SendFail ("Syntax error: lack of arguments");
     return 1;
   }
 
@@ -631,7 +630,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       }
       if (aGlCtx.IsNull())
       {
-        std::cout << "Error: no OpenGl_Context\n";
+        Message::SendFail ("Error: no OpenGl_Context");
         return 1;
       }
 
@@ -651,7 +650,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
         Handle(OpenGl_ShaderProgram) aResProg;
         if (!aGlCtx->GetResource (aShaderName, aResProg))
         {
-          std::cout << "Syntax error: shader resource '" << aShaderName << "' is not found\n";
+          Message::SendFail() << "Syntax error: shader resource '" << aShaderName << "' is not found";
           return 1;
         }
         if (aResProg->UpdateDebugDump (aGlCtx, "", false, anArg == "-dump"))
@@ -661,7 +660,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       }
       if (anArgIter + 1 < theArgNb)
       {
-        std::cout << "Syntax error: wrong number of arguments\n";
+        Message::SendFail ("Syntax error: wrong number of arguments");
         return 1;
       }
       return 0;
@@ -681,8 +680,8 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       const TCollection_AsciiString& aShadersRoot = Graphic3d_ShaderProgram::ShadersFolder();
       if (aShadersRoot.IsEmpty())
       {
-        std::cout << "Error: both environment variables CSF_ShadersDirectory and CASROOT are undefined!\n"
-                     "At least one should be defined to load Phong program.\n";
+        Message::SendFail("Error: both environment variables CSF_ShadersDirectory and CASROOT are undefined!\n"
+                          "At least one should be defined to load Phong program.");
         return 1;
       }
 
@@ -691,13 +690,13 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       if (!aSrcVert.IsEmpty()
        && !OSD_File (aSrcVert).Exists())
       {
-        std::cout << "Error: PhongShading.vs is not found\n";
+        Message::SendFail ("Error: PhongShading.vs is not found");
         return 1;
       }
       if (!aSrcFrag.IsEmpty()
        && !OSD_File (aSrcFrag).Exists())
       {
-        std::cout << "Error: PhongShading.fs is not found\n";
+        Message::SendFail ("Error: PhongShading.fs is not found");
         return 1;
       }
 
@@ -745,7 +744,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cerr << "Syntax error at '" << aPrimTypeStr << "'\n";
+        Message::SendFail() << "Syntax error at '" << aPrimTypeStr << "'";
         return 1;
       }
     }
@@ -770,7 +769,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       Handle(AIS_InteractiveObject) anIO = GetMapOfAIS().Find2 (theArgVec[anArgIter]);
       if (anIO.IsNull())
       {
-        std::cerr << "Syntax error: " << theArgVec[anArgIter] << " is not an AIS object\n";
+        Message::SendFail() << "Syntax error: " << theArgVec[anArgIter] << " is not an AIS object";
         return 1;
       }
       aPrsList.Append (anIO);
@@ -813,7 +812,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
       }
       if (aShaderType == Graphic3d_TypeOfShaderObject(-1))
       {
-        std::cerr << "Error: non-existing or invalid shader source\n";
+        Message::SendFail() << "Error: non-existing or invalid shader source";
         return 1;
       }
 
@@ -821,7 +820,7 @@ static Standard_Integer VShaderProg (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cerr << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -946,7 +945,7 @@ static Standard_Integer VListMaterials (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error: unknown argument '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -1000,7 +999,7 @@ static Standard_Integer VListMaterials (Draw_Interpretor& theDI,
     OSD_OpenStream (aMatFile,  aMatFilePath.ToCString(),  std::ios::out | std::ios::binary);
     if (!aMatFile.is_open())
     {
-      std::cout << "Error: unable creating material file\n";
+      Message::SendFail ("Error: unable creating material file");
       return 0;
     }
     if (!aDumpFile.EndsWith (".mtl"))
@@ -1008,7 +1007,7 @@ static Standard_Integer VListMaterials (Draw_Interpretor& theDI,
       OSD_OpenStream (anObjFile, anObjFilePath.ToCString(), std::ios::out | std::ios::binary);
       if (!anObjFile.is_open())
       {
-        std::cout << "Error: unable creating OBJ file\n";
+        Message::SendFail ("Error: unable creating OBJ file");
         return 0;
       }
 
@@ -1023,7 +1022,7 @@ static Standard_Integer VListMaterials (Draw_Interpretor& theDI,
     OSD_OpenStream (anHtmlFile, aDumpFile.ToCString(), std::ios::out | std::ios::binary);
     if (!anHtmlFile.is_open())
     {
-      std::cout << "Error: unable creating HTML file\n";
+      Message::SendFail ("Error: unable creating HTML file");
       return 0;
     }
     anHtmlFile << "<html>\n"
@@ -1082,7 +1081,7 @@ static Standard_Integer VListMaterials (Draw_Interpretor& theDI,
   }
   else if (!aDumpFile.IsEmpty())
   {
-    std::cout << "Syntax error: unknown output file format\n";
+    Message::SendFail ("Syntax error: unknown output file format");
     return 1;
   }
 
@@ -1224,7 +1223,7 @@ static Standard_Integer VListColors (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error: unknown argument '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -1255,7 +1254,7 @@ static Standard_Integer VListColors (Draw_Interpretor& theDI,
   }
   else if (!aDumpFile.IsEmpty())
   {
-    std::cout << "Syntax error: unknown output file format\n";
+    Message::SendFail ("Syntax error: unknown output file format");
     return 1;
   }
 
@@ -1285,7 +1284,7 @@ static Standard_Integer VListColors (Draw_Interpretor& theDI,
     OSD_OpenStream (anHtmlFile, aDumpFile.ToCString(), std::ios::out | std::ios::binary);
     if (!anHtmlFile.is_open())
     {
-      std::cout << "Error: unable creating HTML file\n";
+      Message::SendFail ("Error: unable creating HTML file");
       return 0;
     }
     anHtmlFile << "<html>\n"
@@ -1392,7 +1391,7 @@ static Standard_Integer VGenEnvLUT (Draw_Interpretor&,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cerr << "Syntax error: size of PBR environment look up table is undefined" << "\n";
+        Message::SendFail ("Syntax error: size of PBR environment look up table is undefined");
         return 1;
       }
 
@@ -1400,7 +1399,7 @@ static Standard_Integer VGenEnvLUT (Draw_Interpretor&,
 
       if (aTableSize < 16)
       {
-        std::cerr << "Error: size of PBR environment look up table must be greater or equal 16\n";
+        Message::SendFail ("Error: size of PBR environment look up table must be greater or equal 16");
         return 1;
       }
     }
@@ -1409,7 +1408,7 @@ static Standard_Integer VGenEnvLUT (Draw_Interpretor&,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cerr << "Syntax error: number of samples to generate PBR environment look up table is undefined" << "\n";
+        Message::SendFail ("Syntax error: number of samples to generate PBR environment look up table is undefined");
         return 1;
       }
 
@@ -1417,13 +1416,13 @@ static Standard_Integer VGenEnvLUT (Draw_Interpretor&,
 
       if (aNbSamples < 1)
       {
-        std::cerr << "Syntax error: number of samples to generate PBR environment look up table must be greater than 1\n" << "\n";
+        Message::SendFail ("Syntax error: number of samples to generate PBR environment look up table must be greater than 1");
         return 1;
       }
     }
     else
     {
-      std::cerr << "Syntax error: unknown argument " << anArg << ";\n";
+      Message::SendFail() << "Syntax error: unknown argument " << anArg;
       return 1;
     }
   }
@@ -1444,7 +1443,7 @@ static Standard_Integer VGenEnvLUT (Draw_Interpretor&,
 
   if (!aFile.good())
   {
-    std::cerr << "Error: unable to write to " << aFilePath << "\n";
+    Message::SendFail() << "Error: unable to write to " << aFilePath;
     return 1;
   }
 
index 9fe3682..44b8c8c 100644 (file)
@@ -69,6 +69,7 @@
 #include <gp_Pln.hxx>
 #include <IntAna_IntConicQuad.hxx>
 #include <IntAna_Quadric.hxx>
+#include <Message.hxx>
 #include <Precision.hxx>
 #include <StdSelect.hxx>
 #include <TCollection_AsciiString.hxx>
@@ -251,7 +252,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
     {
       if (!theShapeList)
       {
-        std::cerr << "Error: unknown parameter '" << aParam << "'\n";
+        Message::SendFail() << "Error: unknown parameter '" << aParam << "'";
         return 1;
       }
 
@@ -269,7 +270,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
     // Before all non-boolean flags parsing check if a flag have at least one value.
     if (anIt + 1 >= theArgNum)
     {
-      std::cerr << "Error: "<< aParam <<" flag should have value.\n";
+      Message::SendFail() << "Error: "<< aParam <<" flag should have value.";
       return 1;
     }
 
@@ -279,7 +280,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
     {
       if (!theShapeList)
       {
-        std::cerr << "Error: unknown parameter '" << aParam << "'\n";
+        Message::SendFail() << "Error: unknown parameter '" << aParam << "'";
         return 1;
       }
 
@@ -297,7 +298,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
         else if (!GetMapOfAIS().Find2 (anArgString, anAISObject)
                || anAISObject.IsNull())
         {
-          std::cerr << "Error: shape with name '" << aStr << "' is not found.\n";
+          Message::SendFail() << "Error: shape with name '" << aStr << "' is not found.";
           return 1;
         }
         theShapeList->Append (anAISObject);
@@ -338,7 +339,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
     {
       if (anIt + 1 >= theArgNum)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
 
@@ -361,7 +362,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
         else if (aParamValue == "vcenter") { theAspect->SetTextVerticalPosition   (Prs3d_DTVP_Center);}
         else
         {
-          std::cerr << "Error: invalid label position: '" << aParamValue << "'.\n";
+          Message::SendFail() << "Error: invalid label position: '" << aParamValue << "'.";
           return 1;
         }
       }
@@ -381,7 +382,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
       TCollection_AsciiString aValue (theArgVec[++anIt]);
       if (!aValue.IsRealValue())
       {
-        std::cerr << "Error: arrow lenght should be float degree value.\n";
+        Message::SendFail() << "Error: arrow lenght should be float degree value.";
         return 1;
       }
       theAspect->ArrowAspect()->SetLength (Draw::Atof (aValue.ToCString()));
@@ -391,7 +392,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
       TCollection_AsciiString aValue (theArgVec[++anIt]);
       if (!aValue.IsRealValue())
       {
-        std::cerr << "Error: arrow angle should be float degree value.\n";
+        Message::SendFail ("Error: arrow angle should be float degree value.");
         return 1;
       }
       theAspect->ArrowAspect()->SetAngle (Draw::Atof (aValue.ToCString()));
@@ -405,7 +406,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
       TCollection_AsciiString aLocalParam(theArgVec[++anIt]);
       if (!aLocalParam.IsRealValue())
       {
-        std::cerr << "Error: extension size for dimension should be real value.\n";
+        Message::SendFail ("Error: extension size for dimension should be real value.");
         return 1;
       }
       theAspect->SetExtensionSize (Draw::Atof (aLocalParam.ToCString()));
@@ -431,7 +432,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
       }
       else
       {
-        std::cerr << "Error: wrong plane '" << aValue << "'.\n";
+        Message::SendFail() << "Error: wrong plane '" << aValue << "'";
         return 1;
       }
     }
@@ -440,7 +441,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
       TCollection_AsciiString aLocalParam(theArgVec[++anIt]);
       if (!aLocalParam.IsRealValue())
       {
-        std::cerr << "Error: flyout for dimension should be real value.\n";
+        Message::SendFail ("Error: flyout for dimension should be real value.");
         return 1;
       }
 
@@ -451,7 +452,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
       TCollection_AsciiString aLocalParam(theArgVec[++anIt]);
       if (!aLocalParam.IsRealValue())
       {
-        std::cerr << "Error: dimension value for dimension should be real value.\n";
+        Message::SendFail ("Error: dimension value for dimension should be real value");
         return 1;
       }
 
@@ -477,7 +478,7 @@ static int ParseDimensionParams (Standard_Integer  theArgNum,
     }
     else
     {
-      std::cerr << "Error: unknown parameter '" << aParam << "'.\n";
+      Message::SendFail() << "Error: unknown parameter '" << aParam << "'";
       return 1;
     }
   }
@@ -546,14 +547,14 @@ static int ParseAngleDimensionParams (Standard_Integer  theArgNum,
 
     if (aParam.Search ("-") == -1)
     {
-      std::cerr << "Error: wrong parameter '" << aParam << "'.\n";
+      Message::SendFail() << "Error: wrong parameter '" << aParam << "'.";
       return 1;
     }
 
     // Before all non-boolean flags parsing check if a flag have at least one value.
     if (anIt + 1 >= theArgNum)
     {
-      std::cerr << "Error: "<< aParam <<" flag should have value.\n";
+      Message::SendFail() << "Error: "<< aParam <<" flag should have value.";
       return 1;
     }
 
@@ -571,7 +572,7 @@ static int ParseAngleDimensionParams (Standard_Integer  theArgNum,
     }
     else
     {
-      std::cerr << "Error: unknown parameter '" << aParam << "'.\n";
+      Message::SendFail() << "Error: unknown parameter '" << aParam << "'.";
       return 1;
     }
   }
@@ -607,7 +608,7 @@ static void SetAngleDimensionParams (const Handle(PrsDim_Dimension)& theDim,
     }
     else
     {
-      std::cerr << "Error: wrong angle type.\n";
+      Message::SendFail() << "Error: wrong angle type.";
     }
     anAngleDim->SetType(anAngleType);
   }
@@ -634,7 +635,7 @@ static void SetAngleDimensionParams (const Handle(PrsDim_Dimension)& theDim,
     }
     else
     {
-      std::cerr << "Error: wrong showarrow type.\n";
+      Message::SendFail() << "Error: wrong showarrow type.";
     }
     anAngleDim->SetArrowsVisibility(anArrowType);
   }
@@ -651,7 +652,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
 {
   if (theArgsNb < 2)
   {
-    std::cerr << "Error: wrong number of arguments.\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -687,7 +688,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
   }
   else
   {
-    std::cerr << "Error: wrong type of dimension.\n";
+    Message::SendFail ("Error: wrong type of dimension");
     return 1;
   }
 
@@ -710,12 +711,12 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
         if (aShapes.First()->Type() == AIS_KOI_Shape
           && (Handle(AIS_Shape)::DownCast(aShapes.First()))->Shape().ShapeType() != TopAbs_EDGE)
         {
-          std::cerr << theArgs[0] << ": wrong shape type.\n";
+          Message::SendFail ("Error: wrong shape type");
           return 1;
         }
         if (!isPlaneCustom)
         {
-          std::cerr << theArgs[0] << ": can not build dimension without working plane.\n";
+          Message::SendFail ("Error: can not build dimension without working plane");
           return 1;
         }
 
@@ -753,7 +754,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
 
         if (aShape1.IsNull() || aShape2.IsNull())
         {
-          std::cerr << theArgs[0] << ": wrong shape type.\n";
+          Message::SendFail ("Error: wrong shape type.");
           return 1;
         }
 
@@ -774,7 +775,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
         {
           if (!isPlaneCustom)
           {
-            std::cerr << theArgs[0] << ": can not build dimension without working plane.\n";
+            Message::SendFail ("Error: can not build dimension without working plane.");
             return 1;
           }
           // Vertex-Vertex case
@@ -792,7 +793,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
       }
       else
       {
-        std::cerr << theArgs[0] << ": wrong number of shapes to build dimension.\n";
+        Message::SendFail ("Error: wrong number of shapes to build dimension");
         return 1;
       }
 
@@ -816,7 +817,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
           aDim = new PrsDim_AngleDimension (TopoDS::Edge(aShape1->Shape()),TopoDS::Edge(aShape2->Shape()));
         else
         {
-          std::cerr << theArgs[0] << ": wrong shapes for angle dimension.\n";
+          Message::SendFail ("Error: wrong shapes for angle dimension");
           return 1;
         }
       }
@@ -841,7 +842,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
       }
       else
       {
-        std::cerr << theArgs[0] << ": wrong number of shapes to build dimension.\n";
+        Message::SendFail ("Error: wrong number of shapes to build dimension");
         return 1;
       }
 
@@ -863,7 +864,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
       }
       if (aShapes.Extent() != 1)
       {
-        std::cout << "Syntax error: wrong number of shapes to build dimension.\n";
+        Message::SendFail ("Syntax error: wrong number of shapes to build dimension");
         return 1;
       }
 
@@ -890,7 +891,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
       }
       else
       {
-        std::cout << "Error: shape for radius has wrong type.\n";
+        Message::SendFail ("Error: shape for radius has wrong type");
         return 1;
       }
       break;
@@ -910,7 +911,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
           Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (aShapes.First());
           if (aShape.IsNull())
           {
-            std::cerr << "Error: shape for radius is of wrong type.\n";
+            Message::SendFail ("Error: shape for radius is of wrong type");
             return 1;
           }
           aDim = new PrsDim_DiameterDimension (aShape->Shape());
@@ -918,7 +919,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
       }
       else
       {
-        std::cerr << theArgs[0] << ": wrong number of shapes to build dimension.\n";
+        Message::SendFail ("Error: wrong number of shapes to build dimension");
         return 1;
       }
 
@@ -926,7 +927,7 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
     }
     default:
     {
-      std::cerr << theArgs[0] << ": wrong type of dimension. Type help for more information.\n";
+      Message::SendFail ("Error: wrong type of dimension. Type help for more information");
       return 1;
     }
   }
@@ -934,8 +935,8 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
   // Check dimension geometry
   if (!aDim->IsValid())
   {
-    std::cerr << theArgs[0] << ":dimension geometry is invalid, " << aDimType.ToCString()
-      << " dimension can't be built on input shapes.\n";
+    Message::SendFail() << "Error: dimension geometry is invalid, " << aDimType
+                        << " dimension can't be built on input shapes.";
     return 1;
   }
 
@@ -975,7 +976,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
 {
   if (theArgsNb < 2)
   {
-    std::cerr << "Error: wrong number of arguments.\n";
+    Message::SendFail ("Error: wrong number of arguments");
     return 1;
   }
 
@@ -1035,7 +1036,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1045,7 +1046,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
       if (!(aShape1.ShapeType() == TopAbs_EDGE
          && aShape2.ShapeType() == TopAbs_EDGE))
       {
-        std::cerr << "Syntax error: selected shapes are not edges.\n";
+        Message::SendFail ("Syntax error: selected shapes are not edges");
         return 1;
       }
 
@@ -1064,7 +1065,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 4)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1080,7 +1081,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
       if (!IsParallel (aSelectedShapes[0], aSelectedShapes[1])
        || !IsParallel (aSelectedShapes[2], aSelectedShapes[3]))
       {
-        std::cerr << "Syntax error: non parallel edges.\n";
+        Message::SendFail ("Syntax error: non parallel edges");
         return 1;
       }
 
@@ -1134,7 +1135,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2 && aShapes.Extent() != 1)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1143,7 +1144,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
       if (!(aShape1.ShapeType() == TopAbs_EDGE
          && aShape2.ShapeType() == TopAbs_EDGE))
       {
-        std::cerr << "Syntax error: selected shapes are not edges.\n";
+        Message::SendFail ("Syntax error: selected shapes are not edges");
         return 1;
       }
 
@@ -1162,14 +1163,14 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 1)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
       const TopoDS_Shape& aShape = aShapes.First();
       if (aShape.ShapeType() != TopAbs_EDGE)
       {
-        std::cerr << "Syntax error: selected shapes are not edges.\n";
+        Message::SendFail ("Syntax error: selected shapes are not edges");
         return 1;
       }
 
@@ -1188,7 +1189,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1258,7 +1259,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1267,7 +1268,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
       if (!(aShape1.ShapeType() == TopAbs_FACE
          && aShape2.ShapeType() == TopAbs_FACE))
       {
-        std::cerr << "Syntax error: selected shapes are not faces.\n";
+        Message::SendFail ("Syntax error: selected shapes are not faces");
         return 1;
       }
 
@@ -1277,7 +1278,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
       BRepExtrema_ExtFF aDelta (aFace1, aFace2);
       if (!aDelta.IsParallel())
       {
-        std::cerr << "Syntax error: the faces are not parallel.\n";
+        Message::SendFail ("Syntax error: the faces are not parallel");
         return 1;
       }
 
@@ -1290,7 +1291,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: wrong number of selected shapes.\n";
+        Message::SendFail ("Error: wrong number of selected shapes");
         return 1;
       }
 
@@ -1304,7 +1305,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
 
         if (!aDeltaEdge.IsParallel())
         {
-          std::cerr << "Error: the edges are not parallel.\n";
+          Message::SendFail ("Error: the edges are not parallel");
           return 1;
         }
 
@@ -1327,7 +1328,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
         BRepExtrema_ExtFF aDeltaFace (aFaceA, aFaceB);
         if (!aDeltaFace.IsParallel())
         {
-          std::cerr << "Error: the faces are not parallel.\n";
+          Message::SendFail ("Error: the faces are not parallel");
           return 1;
         }
 
@@ -1353,7 +1354,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1405,7 +1406,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 2)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1456,7 +1457,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     {
       if (aShapes.Extent() != 3)
       {
-        std::cerr << "Error: Wrong number of selected shapes.\n";
+        Message::SendFail ("Error: Wrong number of selected shapes");
         return 1;
       }
 
@@ -1480,12 +1481,12 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
 
         if (!aDeltaEdgeAB.IsParallel())
         {
-          std::cerr << "Syntax error: the edges are not parallel.\n";
+          Message::SendFail ("Syntax error: the edges are not parallel");
           return 1;
         }
         if (!aDeltaEdgeAC.IsParallel())
         {
-          std::cerr << "Syntax error: the edges are not parallel.\n";
+          Message::SendFail ("Syntax error: the edges are not parallel");
           return 1;
         }
 
@@ -1521,7 +1522,7 @@ static int VRelationBuilder (Draw_Interpretor& /*theDi*/,
     }
     case PrsDim_KOR_NONE:
     {
-      std::cerr << "Error: Unknown type of relation!\n";
+      Message::SendFail ("Error: Unknown type of relation!");
       return 1;
     }
   }
@@ -1582,7 +1583,7 @@ static int VDimParam (Draw_Interpretor& theDi, Standard_Integer theArgNum, const
 
   if (!aDim->IsValid())
   {
-    std::cerr << "Error: Dimension geometry or plane is not valid.\n";
+    Message::SendFail ("Error: Dimension geometry or plane is not valid");
     return 1;
   }
 
@@ -1603,7 +1604,7 @@ static int VLengthParam (Draw_Interpretor&, Standard_Integer theArgNum, const ch
 {
   if (theArgNum < 3)
   {
-    std::cout << theArgVec[0] << " error: the wrong number of input parameters.\n";
+    Message::SendFail ("Syntax error: the wrong number of input parameters");
     return 1;
   }
 
@@ -1611,14 +1612,14 @@ static int VLengthParam (Draw_Interpretor&, Standard_Integer theArgNum, const ch
   Handle(AIS_InteractiveObject) anObject;
   if (!GetMapOfAIS().Find2 (aName, anObject))
   {
-    std::cout << theArgVec[0] << "error: no object with this name.\n";
+    Message::SendFail() << "Syntax error: no object with name '" << aName << "'";
     return 1;
   }
 
   Handle(PrsDim_LengthDimension) aLengthDim = Handle(PrsDim_LengthDimension)::DownCast (anObject);
   if (aLengthDim.IsNull())
   {
-    std::cout << theArgVec[0] << "error: no length dimension with this name.\n";
+    Message::SendFail() << "Syntax error: no length dimension with name '" << aName << "'";
     return 1;
   }
 
@@ -1633,7 +1634,7 @@ static int VLengthParam (Draw_Interpretor&, Standard_Integer theArgNum, const ch
   {
     if (anArgumentIt + 1 >= theArgNum)
     {
-      std::cout << "Error: "<< aParam <<" direction should have value.\n";
+      Message::SendFail() << "Error: "<< aParam <<" direction should have value";
       return 1;
     }
     anArgumentIt++;
@@ -1652,7 +1653,7 @@ static int VLengthParam (Draw_Interpretor&, Standard_Integer theArgNum, const ch
     {
       if (anArgumentIt + 2 >= theArgNum)
       {
-        std::cout << "Error: wrong number of values for parameter '" << aParam << "'.\n";
+        Message::SendFail() << "Error: wrong number of values for parameter '" << aParam << "'";
         return 1;
       }
       // access coordinate arguments
@@ -1669,7 +1670,7 @@ static int VLengthParam (Draw_Interpretor&, Standard_Integer theArgNum, const ch
       // non-numeric argument too early
       if (aCoords.IsEmpty() || aCoords.Size() != 3)
       {
-        std::cout << "Error: wrong number of direction arguments.\n";
+        Message::SendFail ("Error: wrong number of direction arguments");
         return 1;
       }
       aDirection = gp_Dir (aCoords.Value (1), aCoords.Value (2), aCoords.Value (3));
@@ -1679,7 +1680,7 @@ static int VLengthParam (Draw_Interpretor&, Standard_Integer theArgNum, const ch
   aLengthDim->SetDirection (aDirection, isCustomDirection);
   if (!aLengthDim->IsValid())
   {
-    std::cout << "Error: Dimension geometry or plane is not valid.\n";
+    Message::SendFail ("Error: Dimension geometry or plane is not valid");
     return 1;
   }
 
@@ -1734,7 +1735,7 @@ static int VAngleParam (Draw_Interpretor& theDi, Standard_Integer theArgNum, con
 
   if (!aDim->IsValid())
   {
-    std::cerr << "Error: Dimension geometry or plane is not valid.\n";
+    Message::SendFail ("Error: Dimension geometry or plane is not valid");
     return 1;
   }
 
index 3ac0733..a27a153 100644 (file)
@@ -2151,7 +2151,7 @@ static int VInit (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const cha
       }
       else
       {
-        std::cout << "Syntax error: unknown argument " << anArg << ".\n";
+        Message::SendFail() << "Syntax error: unknown argument " << anArg;
         return 1;
       }
     }
@@ -2161,7 +2161,7 @@ static int VInit (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const cha
     }
     else
     {
-      std::cout << "Syntax error: unknown argument " << anArg << ".\n";
+      Message::SendFail() << "Syntax error: unknown argument " << anArg;
       return 1;
     }
   }
@@ -2170,7 +2170,7 @@ static int VInit (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const cha
   if (!aDisplayName.IsEmpty())
   {
     aDisplayName.Clear();
-    std::cout << "Warning: display parameter will be ignored.\n";
+    Message::SendWarning() << "Warning: display parameter will be ignored.\n";
   }
 #endif
 
@@ -2228,7 +2228,7 @@ static int VHLR (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
   const Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
   if (aView.IsNull())
   {
-    std::cerr << "Error: No opened viewer!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -2278,7 +2278,7 @@ static int VHLR (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
     }
     else
     {
-      std::cout << "Syntax error at '" << argv[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error at '" << argv[anArgIter] << "'";
       return 1;
     }
   }
@@ -2346,7 +2346,7 @@ static int VHLRType (Draw_Interpretor& , Standard_Integer argc, const char** arg
   const Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
   if (aView.IsNull())
   {
-    std::cerr << "Error: No opened viewer!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -2382,14 +2382,14 @@ static int VHLRType (Draw_Interpretor& , Standard_Integer argc, const char** arg
       TCollection_AsciiString aName (argv[anArgIter]);
       if (!aMap.IsBound2 (aName))
       {
-        std::cout << "Syntax error: Wrong shape name '" << aName << "'.\n";
+        Message::SendFail() << "Syntax error: Wrong shape name '" << aName << "'";
         return 1;
       }
 
       Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (aMap.Find2 (aName));
       if (aShape.IsNull())
       {
-        std::cout << "Syntax error: '" << aName << "' is not a shape presentation.\n";
+        Message::SendFail() << "Syntax error: '" << aName << "' is not a shape presentation";
         return 1;
       }
       aListOfShapes.Append (aShape);
@@ -2398,7 +2398,7 @@ static int VHLRType (Draw_Interpretor& , Standard_Integer argc, const char** arg
   }
   if (aTypeOfHLR == Prs3d_TOH_NotSet)
   {
-    std::cout << "Syntax error: wrong number of arguments!\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -2510,7 +2510,7 @@ void ViewerTest::RemoveView (const TCollection_AsciiString& theViewName, const S
 {
   if (!ViewerTest_myViews.IsBound1(theViewName))
   {
-    std::cout << "Wrong view name\n";
+    Message::SendFail() << "Wrong view name";
     return;
   }
 
@@ -2591,7 +2591,7 @@ void ViewerTest::RemoveView (const TCollection_AsciiString& theViewName, const S
       ViewerTest_myContexts.UnBind2(aCurrentContext);
     }
   }
-  std::cout << "3D View - " << theViewName << " was deleted.\n";
+  Message::SendInfo() << "3D View - " << theViewName << " was deleted.\n";
   if (ViewerTest_EventManager::ToExitOnCloseView())
   {
     Draw_Interprete ("exit");
@@ -2631,7 +2631,7 @@ static int VClose (Draw_Interpretor& /*theDi*/,
       ViewerTest_Names aViewName (theArgVec[1]);
       if (!ViewerTest_myViews.IsBound1 (aViewName.GetViewName()))
       {
-        std::cerr << "The view with name '" << theArgVec[1] << "' does not exist\n";
+        Message::SendFail() << "Error: the view with name '" << theArgVec[1] << "' does not exist";
         return 1;
       }
       aViewList.Append (aViewName.GetViewName());
@@ -2642,7 +2642,7 @@ static int VClose (Draw_Interpretor& /*theDi*/,
     // close active view
     if (ViewerTest::CurrentView().IsNull())
     {
-      std::cerr << "No active view!\n";
+      Message::SendFail ("Error: no active view");
       return 1;
     }
     aViewList.Append (ViewerTest_myViews.Find2 (ViewerTest::CurrentView()));
@@ -2701,7 +2701,7 @@ static int VActivate (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const
     }
     else
     {
-      std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -2712,7 +2712,7 @@ static int VActivate (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const
   }
   else if (aNameString.IsEmpty())
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -2828,7 +2828,7 @@ static int VViewProj (Draw_Interpretor& ,
   const Handle(V3d_View)& aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "Error: no active view\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -3052,7 +3052,7 @@ static int VViewProj (Draw_Interpretor& ,
         gp_Dir aRight, anUp;
         if (aFrameDef.Value (2) == aFrameDef.Value (4))
         {
-          std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+          Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
           return 1;
         }
 
@@ -3070,7 +3070,7 @@ static int VViewProj (Draw_Interpretor& ,
         }
         else
         {
-          std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+          Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
           return 1;
         }
 
@@ -3088,7 +3088,7 @@ static int VViewProj (Draw_Interpretor& ,
         }
         else
         {
-          std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+          Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
           return 1;
         }
 
@@ -3105,7 +3105,7 @@ static int VViewProj (Draw_Interpretor& ,
       }
       else
       {
-        std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+        Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
         return 1;
       }
     }
@@ -3114,7 +3114,7 @@ static int VViewProj (Draw_Interpretor& ,
   if (!isGeneralCmd
     && theNbArgs != 1)
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
   return 0;
@@ -3653,7 +3653,7 @@ static void VProcessEvents (ClientData theDispX, int)
   }
   if (aDispConn.IsNull())
   {
-    std::cerr << "Error: ViewerTest is unable processing messages for unknown X Display\n";
+    Message::SendFail ("Error: ViewerTest is unable processing messages for unknown X Display");
     return;
   }
 
@@ -3749,7 +3749,7 @@ static int VFit (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, const c
   const Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "Error: no active viewer!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -3770,7 +3770,7 @@ static int VFit (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, const c
     }
     else
     {
-      std::cout << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
     }
   }
 
@@ -3791,7 +3791,7 @@ static int VFitArea (Draw_Interpretor& theDI, Standard_Integer  theArgNb, const
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << theArgVec[0] << "Error: No active view.\n";
+    Message::SendFail ("Error: No active viewer");
     return 1;
   }
 
@@ -3817,7 +3817,7 @@ static int VFitArea (Draw_Interpretor& theDI, Standard_Integer  theArgNb, const
   }
   else
   {
-    std::cerr << theArgVec[0] << "Error: Invalid number of arguments.\n";
+    Message::SendFail ("Syntax error: Invalid number of arguments");
     theDI.PrintHelp(theArgVec[0]);
     return 1;
   }
@@ -3835,7 +3835,7 @@ static int VFitArea (Draw_Interpretor& theDI, Standard_Integer  theArgNb, const
 
   if (aDiagonal < Precision::Confusion())
   {
-    std::cerr << theArgVec[0] << "Error: view area is too small.\n";
+    Message::SendFail ("Error: view area is too small");
     return 1;
   }
 
@@ -3854,7 +3854,7 @@ static int VZFit (Draw_Interpretor& /*theDi*/, Standard_Integer theArgsNb, const
 
   if (aCurrentView.IsNull())
   {
-    std::cout << theArgVec[0] << ": Call vinit before this command, please.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -3887,7 +3887,7 @@ static int VRepaint (Draw_Interpretor& , Standard_Integer theArgNb, const char**
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "Error: no active viewer!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -3930,7 +3930,7 @@ static int VRepaint (Draw_Interpretor& , Standard_Integer theArgNb, const char**
     }
     else
     {
-      std::cout << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -3976,7 +3976,7 @@ static int VPick (Draw_Interpretor& ,
 
   if (theNbArgs < 4)
   {
-    std::cout << "Syntax error: Invalid number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -4048,7 +4048,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "Error: no active viewer!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4088,7 +4088,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4128,7 +4128,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
       }
       else
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "' - unknown position '" << aPosName << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "' - unknown position '" << aPosName << "'";
         return 1;
       }
     }
@@ -4136,7 +4136,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4154,14 +4154,14 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
       }
       else
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "' - unknown type '" << aTypeName << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "' - unknown type '" << aTypeName << "'";
       }
     }
     else if (aFlag == "-scale")
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4172,7 +4172,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4183,7 +4183,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4193,7 +4193,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4207,7 +4207,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
                                                            aLabelsColor);
       if (aNbParsed == 0)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
@@ -4219,7 +4219,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
                                                            anArrowColorX);
       if (aNbParsed == 0)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
@@ -4231,7 +4231,7 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
                                                            anArrowColorY);
       if (aNbParsed == 0)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
@@ -4243,14 +4243,14 @@ static int VZBuffTrihedron (Draw_Interpretor& /*theDI*/,
                                                            anArrowColorZ);
       if (aNbParsed == 0)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
       anArgIter += aNbParsed;
     }
     else
     {
-      std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+      Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
       return 1;
     }
   }
@@ -4272,7 +4272,7 @@ static int VRotate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, cons
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "No active view!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -4288,7 +4288,7 @@ static int VRotate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, cons
       hasFlags = Standard_True;
       if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4301,7 +4301,7 @@ static int VRotate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, cons
       hasFlags = Standard_True;
       if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4312,7 +4312,7 @@ static int VRotate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, cons
     else if (theArgNb != 4
           && theArgNb != 7)
     {
-      std::cout << "Error: wrong syntax at '" << anArg << "'\n";
+      Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
       return 1;
     }
   }
@@ -4343,7 +4343,7 @@ static int VRotate (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, cons
     return 0;
   }
 
-  std::cout << "Error: Invalid number of arguments\n";
+  Message::SendFail ("Error: Invalid number of arguments");
   return 1;
 }
 
@@ -4399,13 +4399,13 @@ static int VPlace (Draw_Interpretor& /*theDi*/, Standard_Integer theArgNb, const
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << theArgs[0] << "Error: no active view." << std::endl;
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   if (theArgNb != 3)
   {
-    std::cerr << theArgs[0] << "Error: invalid number of arguments." << std::endl;
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -4422,12 +4422,12 @@ static int VColorScale (Draw_Interpretor& theDI,
   Handle(V3d_View)               aView    = ViewerTest::CurrentView();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active view!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   if (theArgNb <= 1)
   {
-    std::cout << "Error: wrong syntax at command '" << theArgVec[0] << "'!\n";
+    Message::SendFail() << "Error: wrong syntax at command '" << theArgVec[0] << "'";
     return 1;
   }
 
@@ -4438,7 +4438,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     aColorScale = Handle(AIS_ColorScale)::DownCast (GetMapOfAIS().Find2 (theArgVec[1]));
     if (aColorScale.IsNull())
     {
-      std::cout << "Error: object '" << theArgVec[1] << "'is already defined and is not a color scale!\n";
+      Message::SendFail() << "Error: object '" << theArgVec[1] << "'is already defined and is not a color scale";
       return 1;
     }
   }
@@ -4447,7 +4447,7 @@ static int VColorScale (Draw_Interpretor& theDI,
   {
     if (aColorScale.IsNull())
     {
-      std::cout << "Syntax error: colorscale with a given name does not exist.\n";
+      Message::SendFail() << "Syntax error: colorscale with a given name does not exist";
       return 1;
     }
 
@@ -4498,7 +4498,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 3 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Error: wrong syntax at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4508,12 +4508,12 @@ static int VColorScale (Draw_Interpretor& theDI,
       if (!aRangeMin.IsRealValue()
        || !aRangeMax.IsRealValue())
       {
-        std::cout << "Error: the range values should be real!\n";
+        Message::SendFail ("Syntax error: the range values should be real");
         return 1;
       }
       else if (!aNbIntervals.IsIntegerValue())
       {
-        std::cout << "Error: the number of intervals should be integer!\n";
+        Message::SendFail ("Syntax error: the number of intervals should be integer");
         return 1;
       }
 
@@ -4524,13 +4524,13 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
       TCollection_AsciiString aFontArg(theArgVec[anArgIter + 1]);
       if (!aFontArg.IsIntegerValue())
       {
-        std::cout << "Error: HeightFont value should be integer!\n";
+        Message::SendFail ("Syntax error: HeightFont value should be integer");
         return 1;
       }
 
@@ -4541,7 +4541,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4566,7 +4566,7 @@ static int VColorScale (Draw_Interpretor& theDI,
       }
       else
       {
-        std::cout << "Error: unknown position '" << aTextPosArg << "'!\n";
+        Message::SendFail() << "Syntax error: unknown position '" << aTextPosArg << "'";
         return 1;
       }
       aColorScale->SetLabelPosition (aLabPosition);
@@ -4576,14 +4576,14 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Synta error at argument '" << anArg << "'";
         return 1;
       }
 
       Standard_Boolean IsLog;
       if (!ViewerTest::ParseOnOff(theArgVec[++anArgIter], IsLog))
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
       aColorScale->SetLogarithmic (IsLog);
@@ -4593,7 +4593,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4615,7 +4615,7 @@ static int VColorScale (Draw_Interpretor& theDI,
       if (aNbParsed1 == 0
        || aNbParsed2 == 0)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
 
@@ -4649,7 +4649,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4658,7 +4658,7 @@ static int VColorScale (Draw_Interpretor& theDI,
       if (!anX.IsIntegerValue()
        || !anY.IsIntegerValue())
       {
-        std::cout << "Error: coordinates should be integer values!\n";
+        Message::SendFail ("Syntax error: coordinates should be integer values");
         return 1;
       }
 
@@ -4670,14 +4670,14 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
       const TCollection_AsciiString aBreadth (theArgVec[++anArgIter]);
       if (!aBreadth.IsIntegerValue())
       {
-        std::cout << "Error: a width should be an integer value!\n";
+        Message::SendFail ("Syntax error: a width should be an integer value");
         return 1;
       }
       aColorScale->SetBreadth (aBreadth.IntegerValue());
@@ -4687,14 +4687,14 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
       const TCollection_AsciiString aHeight (theArgVec[++anArgIter]);
       if (!aHeight.IsIntegerValue())
       {
-        std::cout << "Error: a width should be an integer value!\n";
+        Message::SendFail ("Syntax error: a width should be an integer value");
         return 1;
       }
       aColorScale->SetHeight (aHeight.IntegerValue());
@@ -4703,25 +4703,25 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (aColorScale->GetColorType() != Aspect_TOCSD_USER)
       {
-        std::cout << "Error: wrong color type! Call -colors before to set user-specified colors!\n";
+        Message::SendFail ("Syntax error: wrong color type. Call -colors before to set user-specified colors");
         return 1;
       }
       else if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
       const TCollection_AsciiString anInd (theArgVec[++anArgIter]);
       if (!anInd.IsIntegerValue())
       {
-        std::cout << "Error: Index value should be integer!\n";
+        Message::SendFail ("Syntax error: Index value should be integer");
         return 1;
       }
       const Standard_Integer anIndex = anInd.IntegerValue();
       if (anIndex <= 0 || anIndex > aColorScale->GetNumberOfIntervals())
       {
-        std::cout << "Error: Index value should be within range 1.." << aColorScale->GetNumberOfIntervals() <<"!\n";
+        Message::SendFail() << "Syntax error: Index value should be within range 1.." << aColorScale->GetNumberOfIntervals();
         return 1;
       }
 
@@ -4731,7 +4731,7 @@ static int VColorScale (Draw_Interpretor& theDI,
                                                            aColor);
       if (aNbParsed == 0)
       {
-        std::cerr << "Error: wrong syntax at '" << anArg << "'\n";
+        Message::SendFail() << "Error: wrong syntax at '" << anArg << "'";
         return 1;
       }
       aColorScale->SetIntervalColor (aColor, anIndex);
@@ -4742,19 +4742,19 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (aColorScale->GetColorType() != Aspect_TOCSD_USER)
       {
-        std::cout << "Error: wrong label type! Call -labels before to set user-specified labels!\n";
+        Message::SendFail ("Syntax error: wrong label type. Call -labels before to set user-specified labels");
         return 1;
       }
       else if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
       Standard_Integer anIndex = Draw::Atoi (theArgVec[anArgIter + 1]);
       if (anIndex <= 0 || anIndex > aColorScale->GetNumberOfIntervals() + 1)
       {
-        std::cout << "Error: Index value should be within range 1.." << aColorScale->GetNumberOfIntervals() + 1 <<"!\n";
+        Message::SendFail() << "Syntax error: Index value should be within range 1.." << (aColorScale->GetNumberOfIntervals() + 1);
         return 1;
       }
 
@@ -4790,7 +4790,7 @@ static int VColorScale (Draw_Interpretor& theDI,
         }
         if (aLabAtBorder == -1)
         {
-          std::cout << "Syntax error at argument '" << anArg << "'!\n";
+          Message::SendFail() << "Syntax error at argument '" << anArg << "'";
           return 1;
         }
         toEnable = (aLabAtBorder == 1);
@@ -4823,8 +4823,8 @@ static int VColorScale (Draw_Interpretor& theDI,
       }
       if (aSeq.Length() != aColorScale->GetNumberOfIntervals())
       {
-        std::cout << "Error: not enough arguments! You should provide color names or RGB color values for every interval of the "
-                  << aColorScale->GetNumberOfIntervals() << " intervals\n";
+        Message::SendFail() << "Error: not enough arguments! You should provide color names or RGB color values for every interval of the "
+                            << aColorScale->GetNumberOfIntervals() << " intervals";
         return 1;
       }
 
@@ -4844,7 +4844,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Syntax error at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4858,7 +4858,7 @@ static int VColorScale (Draw_Interpretor& theDI,
       }
       if (anArgIter + aNbLabels >= theArgNb)
       {
-        std::cout << "Error: not enough arguments! " << aNbLabels << " text labels are expected.\n";
+        Message::SendFail() << "Syntax error: not enough arguments. " << aNbLabels << " text labels are expected";
         return 1;
       }
 
@@ -4874,7 +4874,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4931,7 +4931,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 >= theArgNb)
       {
-        std::cout << "Error: wrong syntax at argument '" << anArg << "'!\n";
+        Message::SendFail() << "Syntax error at argument '" << anArg << "'";
         return 1;
       }
 
@@ -4939,7 +4939,7 @@ static int VColorScale (Draw_Interpretor& theDI,
 
       if (!anArg1.IsRealValue())
       {
-        std::cout << "Error: the value should be real!\n";
+        Message::SendFail ("Syntax error: the value should be real");
         return 1;
       }
 
@@ -4950,7 +4950,7 @@ static int VColorScale (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: wrong syntax at " << anArg << " - unknown argument!\n";
+      Message::SendFail() << "Syntax error at " << anArg << " - unknown argument";
       return 1;
     }
   }
@@ -4992,9 +4992,9 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
 {
   if (theArgNum < 2)
   {
-    std::cout << theArgs[0] << " error: wrong number of parameters. Type 'help"
-              << theArgs[0] <<"' for more information.\n";
-    return 1;  //TCL_ERROR
+    Message::SendFail() << "Syntax error: wrong number of parameters. Type 'help"
+                        << theArgs[0] <<"' for more information";
+    return 1;
   }
 
   NCollection_DataMap<TCollection_AsciiString, Handle(TColStd_HSequenceOfAsciiString)> aMapOfArgs;
@@ -5087,15 +5087,15 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
     aLowerKey  = "-";
     aLowerKey += aKey;
     aLowerKey.LowerCase();
-    std::cout << theArgs[0] << ": " << aLowerKey << " is unknown option, or the arguments are unacceptable.\n";
-    std::cout << "Type help for more information.\n";
+    Message::SendFail() << "Syntax error: " << aLowerKey << " is unknown option, or the arguments are unacceptable.\n"
+                        << "Type help for more information";
     return 1;
   }
 
   Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
   if (anAISContext.IsNull())
   {
-    std::cout << theArgs[0] << ":  please use 'vinit' command to initialize view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -5152,7 +5152,7 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
   {
     if (!GetColor (aValues->Value(1), aColor))
     {
-      std::cout << theArgs[0] << "error: -xnamecolor wrong color name.\n";
+      Message::SendFail ("Syntax error: -xnamecolor wrong color name");
       return 1;
     }
     aTrihedronData.ChangeXAxisAspect().SetNameColor (aColor);
@@ -5161,7 +5161,7 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
   {
     if (!GetColor (aValues->Value(1), aColor))
     {
-      std::cout << theArgs[0] << "error: -ynamecolor wrong color name.\n";
+      Message::SendFail ("Syntax error: -ynamecolor wrong color name");
       return 1;
     }
     aTrihedronData.ChangeYAxisAspect().SetNameColor (aColor);
@@ -5170,7 +5170,7 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
   {
     if (!GetColor (aValues->Value(1), aColor))
     {
-      std::cout << theArgs[0] << "error: -znamecolor wrong color name.\n";
+      Message::SendFail ("Syntax error: -znamecolor wrong color name");
       return 1;
     }
     aTrihedronData.ChangeZAxisAspect().SetNameColor (aColor);
@@ -5179,7 +5179,7 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
   {
     if (!GetColor (aValues->Value(1), aColor))
     {
-      std::cout << theArgs[0] << "error: -xcolor wrong color name.\n";
+      Message::SendFail ("Syntax error: -xcolor wrong color name");
       return 1;
     }
     aTrihedronData.ChangeXAxisAspect().SetColor (aColor);
@@ -5188,7 +5188,7 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
   {
     if (!GetColor (aValues->Value(1), aColor))
     {
-      std::cout << theArgs[0] << "error: -ycolor wrong color name.\n";
+      Message::SendFail ("Syntax error: -ycolor wrong color name");
       return 1;
     }
     aTrihedronData.ChangeYAxisAspect().SetColor (aColor);
@@ -5197,7 +5197,7 @@ static int VGraduatedTrihedron (Draw_Interpretor& /*theDi*/, Standard_Integer th
   {
     if (!GetColor (aValues->Value(1), aColor))
     {
-      std::cout << theArgs[0] << "error: -zcolor wrong color name.\n";
+      Message::SendFail ("Syntax error: -zcolor wrong color name");
       return 1;
     }
     aTrihedronData.ChangeZAxisAspect().SetColor (aColor);
@@ -5319,7 +5319,7 @@ static int VTile (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "Error: no active viewer.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -5342,7 +5342,7 @@ static int VTile (Draw_Interpretor& theDI,
     {
       if (anArgIter + 3 < theArgNb)
       {
-        std::cerr << "Syntax error at '" << theArgVec[anArgIter] << "'.\n";
+        Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
         return 1;
       }
       aTile.IsTopDown = (anArg == "-upperleft") == Standard_True;
@@ -5355,7 +5355,7 @@ static int VTile (Draw_Interpretor& theDI,
     {
       if (anArgIter + 3 < theArgNb)
       {
-        std::cerr << "Syntax error at '" << theArgVec[anArgIter] << "'.\n";
+        Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
         return 1;
       }
       aTile.TotalSize.x() = Draw::Atoi (theArgVec[anArgIter + 1]);
@@ -5363,7 +5363,7 @@ static int VTile (Draw_Interpretor& theDI,
       if (aTile.TotalSize.x() < 1
        || aTile.TotalSize.y() < 1)
       {
-        std::cerr << "Error: total size is incorrect.\n";
+        Message::SendFail ("Error: total size is incorrect");
         return 1;
       }
     }
@@ -5371,7 +5371,7 @@ static int VTile (Draw_Interpretor& theDI,
     {
       if (anArgIter + 3 < theArgNb)
       {
-        std::cerr << "Syntax error at '" << theArgVec[anArgIter] << "'.\n";
+        Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
         return 1;
       }
 
@@ -5380,7 +5380,7 @@ static int VTile (Draw_Interpretor& theDI,
       if (aTile.TileSize.x() < 1
        || aTile.TileSize.y() < 1)
       {
-        std::cerr << "Error: tile size is incorrect.\n";
+        Message::SendFail ("Error: tile size is incorrect");
         return 1;
       }
     }
@@ -5395,13 +5395,13 @@ static int VTile (Draw_Interpretor& theDI,
   if (aTile.TileSize.x() < 1
    || aTile.TileSize.y() < 1)
   {
-    std::cerr << "Error: tile size is undefined.\n";
+    Message::SendFail ("Error: tile size is undefined");
     return 1;
   }
   else if (aTile.TotalSize.x() < 1
         || aTile.TotalSize.y() < 1)
   {
-    std::cerr << "Error: total size is undefined.\n";
+    Message::SendFail ("Error: total size is undefined");
     return 1;
   }
 
@@ -5460,7 +5460,7 @@ static int VZLayer (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cout << "No active viewer!\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -5518,7 +5518,7 @@ static int VZLayer (Draw_Interpretor& theDI,
       aLayerId = Graphic3d_ZLayerId_UNKNOWN;
       if (!aViewer->AddZLayer (aLayerId))
       {
-        std::cout << "Error: can not add a new z layer!\n";
+        Message::SendFail ("Error: can not add a new z layer");
         return 0;
       }
 
@@ -5532,7 +5532,7 @@ static int VZLayer (Draw_Interpretor& theDI,
       aLayerId = Graphic3d_ZLayerId_UNKNOWN;
       if (!aViewer->InsertLayerBefore (aLayerId, Graphic3d_ZLayerSettings(), anOtherLayerId))
       {
-        std::cout << "Error: can not add a new z layer!\n";
+        Message::SendFail ("Error: can not add a new z layer");
         return 0;
       }
 
@@ -5546,7 +5546,7 @@ static int VZLayer (Draw_Interpretor& theDI,
       aLayerId = Graphic3d_ZLayerId_UNKNOWN;
       if (!aViewer->InsertLayerAfter (aLayerId, Graphic3d_ZLayerSettings(), anOtherLayerId))
       {
-        std::cout << "Error: can not add a new z layer!\n";
+        Message::SendFail ("Error: can not add a new z layer");
         return 0;
       }
 
@@ -5560,7 +5560,7 @@ static int VZLayer (Draw_Interpretor& theDI,
       {
         if (++anArgIter >= theArgNb)
         {
-          std::cout << "Syntax error: id of z layer to remove is missing\n";
+          Message::SendFail ("Syntax error: id of z layer to remove is missing");
           return 1;
         }
 
@@ -5574,7 +5574,7 @@ static int VZLayer (Draw_Interpretor& theDI,
        || aLayerId == Graphic3d_ZLayerId_TopOSD
        || aLayerId == Graphic3d_ZLayerId_BotOSD)
       {
-        std::cout << "Syntax error: standard Z layer can not be removed\n";
+        Message::SendFail ("Syntax error: standard Z layer can not be removed");
         return 1;
       }
 
@@ -5593,7 +5593,7 @@ static int VZLayer (Draw_Interpretor& theDI,
 
       if (!aViewer->RemoveZLayer (aLayerId))
       {
-        std::cout << "Z layer can not be removed!\n";
+        Message::SendFail ("Z layer can not be removed");
       }
       else
       {
@@ -5616,13 +5616,13 @@ static int VZLayer (Draw_Interpretor& theDI,
     {
       if (aLayerId == Graphic3d_ZLayerId_UNKNOWN)
       {
-        std::cout << "Syntax error: id of Z layer is missing\n";
+        Message::SendFail ("Syntax error: id of Z layer is missing");
         return 1;
       }
 
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error: name is missing\n";
+        Message::SendFail ("Syntax error: name is missing");
         return 1;
       }
 
@@ -5634,13 +5634,13 @@ static int VZLayer (Draw_Interpretor& theDI,
     {
       if (aLayerId == Graphic3d_ZLayerId_UNKNOWN)
       {
-        std::cout << "Syntax error: id of Z layer is missing\n";
+        Message::SendFail ("Syntax error: id of Z layer is missing");
         return 1;
       }
 
       if (anArgIter + 2 >= theArgNb)
       {
-        std::cout << "Syntax error: origin coordinates are missing\n";
+        Message::SendFail ("Syntax error: origin coordinates are missing");
         return 1;
       }
 
@@ -5695,7 +5695,7 @@ static int VZLayer (Draw_Interpretor& theDI,
       {
         if (++anArgIter >= theArgNb)
         {
-          std::cout << "Syntax error: id of Z layer is missing\n";
+          Message::SendFail ("Syntax error: id of Z layer is missing");
           return 1;
         }
 
@@ -5714,7 +5714,7 @@ static int VZLayer (Draw_Interpretor& theDI,
                                      || anArg == "enable";
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error: option name is missing\n";
+        Message::SendFail ("Syntax error: option name is missing");
         return 1;
       }
 
@@ -5724,7 +5724,7 @@ static int VZLayer (Draw_Interpretor& theDI,
       {
         if (++anArgIter >= theArgNb)
         {
-          std::cout << "Syntax error: id of Z layer is missing\n";
+          Message::SendFail ("Syntax error: id of Z layer is missing");
           return 1;
         }
 
@@ -5756,7 +5756,7 @@ static int VZLayer (Draw_Interpretor& theDI,
         {
           if (anArgIter + 2 >= theArgNb)
           {
-            std::cout << "Syntax error: factor and units values for depth offset are missing\n";
+            Message::SendFail ("Syntax error: factor and units values for depth offset are missing");
             return 1;
           }
 
@@ -5802,7 +5802,7 @@ static int VZLayer (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error: unknown option " << theArgVec[anArgIter] << "\n";
+      Message::SendFail() << "Syntax error: unknown option " << theArgVec[anArgIter];
       return 1;
     }
   }
@@ -5921,7 +5921,7 @@ static int VLayerLine(Draw_Interpretor& di, Standard_Integer argc, const char**
   if (argc > 6
   && !ViewerTest::ParseLineType (argv[6], aLineType))
   {
-    std::cout << "Syntax error: unknown line type '" << argv[6] << "'\n";
+    Message::SendFail() << "Syntax error: unknown line type '" << argv[6] << "'";
     return 1;
   }
 
@@ -5964,7 +5964,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
   Handle(V3d_Viewer) aViewer = ViewerTest::GetViewerFromContext();
   if (aView.IsNull() || aViewer.IsNull())
   {
-    std::cerr << "Error: no active view\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -6001,7 +6001,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
       }
       else
       {
-        std::cout << "Syntax error at '" << anArgNext << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArgNext << "'";
         return 1;
       }
     }
@@ -6024,7 +6024,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
       }
       else
       {
-        std::cout << "Syntax error at '" << anArgNext << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArgNext << "'";
         return 1;
       }
     }
@@ -6046,7 +6046,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
       if (aNewStepXY.x() <= 0.0
        || aNewStepXY.y() <= 0.0)
       {
-        std::cout << "Syntax error: wrong step '" << theArgVec[anArgIter + 1] << " " << theArgVec[anArgIter + 2] << "'\n";
+        Message::SendFail() << "Syntax error: wrong step '" << theArgVec[anArgIter + 1] << " " << theArgVec[anArgIter + 2] << "'";
         return 1;
       }
       anArgIter += 2;
@@ -6074,7 +6074,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
       aNewSizeXY.SetValues (Draw::Atof (theArgVec[anArgIter]), 0.0);
       if (aNewStepXY.x() <= 0.0)
       {
-        std::cout << "Syntax error: wrong size '" << theArgVec[anArgIter] << "'\n";
+        Message::SendFail() << "Syntax error: wrong size '" << theArgVec[anArgIter] << "'";
         return 1;
       }
     }
@@ -6087,7 +6087,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
       if (aNewStepXY.x() <= 0.0
        || aNewStepXY.y() <= 0.0)
       {
-        std::cout << "Syntax error: wrong size '" << theArgVec[anArgIter + 1] << " " << theArgVec[anArgIter + 2] << "'\n";
+        Message::SendFail() << "Syntax error: wrong size '" << theArgVec[anArgIter + 1] << " " << theArgVec[anArgIter + 2] << "'";
         return 1;
       }
       anArgIter += 2;
@@ -6124,7 +6124,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
     }
     else
     {
-      std::cout << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -6180,7 +6180,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
       aDivisionNumber = (int )aNewStepXY[1];
       if (aDivisionNumber < 1)
       {
-        std::cout << "Syntax error: invalid division number '" << aNewStepXY[1] << "'\n";
+        Message::SendFail() << "Syntax error: invalid division number '" << aNewStepXY[1] << "'";
         return 1;
       }
     }
@@ -6199,7 +6199,7 @@ static int VGrid (Draw_Interpretor& /*theDI*/,
         aRadius = aNewSizeXY.x();
         if (aNewSizeXY.y() != 0.0)
         {
-          std::cout << "Syntax error: circular size should be specified as radius\n";
+          Message::SendFail ("Syntax error: circular size should be specified as radius");
           return 1;
         }
       }
@@ -6225,7 +6225,7 @@ static int VPriviledgedPlane (Draw_Interpretor& theDI,
 {
   if (theArgNb != 1 && theArgNb != 7 && theArgNb != 10)
   {
-    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    Message::SendFail ("Error: wrong number of arguments! See usage:");
     theDI.PrintHelp (theArgVec[0]);
     return 1;
   }
@@ -6234,7 +6234,7 @@ static int VPriviledgedPlane (Draw_Interpretor& theDI,
   Handle(V3d_Viewer) aViewer = ViewerTest::GetViewerFromContext();
   if (aViewer.IsNull())
   {
-    std::cerr << "Error: no active viewer. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -6292,7 +6292,7 @@ static int VConvert (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "Error: no active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -6314,7 +6314,7 @@ static int VConvert (Draw_Interpretor& theDI,
   // non-numeric argument too early
   if (aCoord.IsEmpty())
   {
-    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    Message::SendFail ("Error: wrong number of arguments! See usage:");
     theDI.PrintHelp (theArgVec[0]);
     return 1;
   }
@@ -6330,7 +6330,7 @@ static int VConvert (Draw_Interpretor& theDI,
     else if (anArg == "ray")    aMode = Ray;
     else
     {
-      std::cerr << "Error: wrong argument " << anArg << "! See usage:\n";
+      Message::SendFail() << "Error: wrong argument " << anArg << "! See usage:";
       theDI.PrintHelp (theArgVec[0]);
       return 1;
     }
@@ -6341,7 +6341,7 @@ static int VConvert (Draw_Interpretor& theDI,
       (aCoord.Length() == 2 && theArgNb > 4) ||
       (aCoord.Length() == 3 && theArgNb > 5))
   {
-    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    Message::SendFail ("Error: wrong number of arguments! See usage:");
     theDI.PrintHelp (theArgVec[0]);
     return 1;
   }
@@ -6357,7 +6357,7 @@ static int VConvert (Draw_Interpretor& theDI,
       case View   : theDI << "View Vv: "   << aView->Convert ((Standard_Integer)aCoord (1)); return 0;
       case Window : theDI << "Window Vp: " << aView->Convert (aCoord (1)); return 0;
       default:
-        std::cerr << "Error: wrong arguments! See usage:\n";
+        Message::SendFail ("Error: wrong arguments! See usage:");
         theDI.PrintHelp (theArgVec[0]);
         return 1;
     }
@@ -6398,7 +6398,7 @@ static int VConvert (Draw_Interpretor& theDI,
         return 0;
 
       default:
-        std::cerr << "Error: wrong arguments! See usage:\n";
+        Message::SendFail ("Error: wrong arguments! See usage:");
         theDI.PrintHelp (theArgVec[0]);
         return 1;
     }
@@ -6420,7 +6420,7 @@ static int VConvert (Draw_Interpretor& theDI,
         return 0;
 
       default:
-        std::cerr << "Error: wrong arguments! See usage:\n";
+        Message::SendFail ("Error: wrong arguments! See usage:");
         theDI.PrintHelp (theArgVec[0]);
         return 1;
     }
@@ -6442,7 +6442,7 @@ static int VFps (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -6466,13 +6466,13 @@ static int VFps (Draw_Interpretor& theDI,
       aFramesNb = anArg.IntegerValue();
       if (aFramesNb <= 0)
       {
-        std::cerr << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
     }
     else
     {
-      std::cerr << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -6726,7 +6726,7 @@ static int VGlDebug (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: wrong syntax at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -6756,7 +6756,7 @@ static int VVbo (Draw_Interpretor& theDI,
   {
     if (!toSet)
     {
-      std::cerr << "No active view!\n";
+      Message::SendFail ("Error: no active viewer");
     }
     return 1;
   }
@@ -6993,7 +6993,7 @@ static int VCaps (Draw_Interpretor& theDI,
       if (aVer[0] < -1
        || aVer[1] < -1)
       {
-        std::cout << "Syntax error at '" << anArgCase << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArgCase << "'";
         return 1;
       }
       aCaps->contextMajorVersionUpper = aVer[0];
@@ -7001,7 +7001,7 @@ static int VCaps (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: unknown argument '" << anArg << "'\n";
+      Message::SendFail() << "Error: unknown argument '" << anArg << "'";
       return 1;
     }
   }
@@ -7025,14 +7025,14 @@ static int VMemGpu (Draw_Interpretor& theDI,
   Handle(AIS_InteractiveContext) aContextAIS = ViewerTest::GetAISContext();
   if (aContextAIS.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
   Handle(Graphic3d_GraphicDriver) aDriver = aContextAIS->CurrentViewer()->Driver();
   if (aDriver.IsNull())
   {
-    std::cerr << "Graphic driver not available.\n";
+    Message::SendFail ("Error: graphic driver not available");
     return 1;
   }
 
@@ -7040,7 +7040,7 @@ static int VMemGpu (Draw_Interpretor& theDI,
   TCollection_AsciiString anInfo;
   if (!aDriver->MemoryInfo (aFreeBytes, anInfo))
   {
-    std::cerr << "Information not available.\n";
+    Message::SendFail ("Error: information not available");
     return 1;
   }
 
@@ -7068,12 +7068,13 @@ static int VReadPixel (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   else if (theArgNb < 3)
   {
-    std::cerr << "Usage : " << theArgVec[0] << " xPixel yPixel [{rgb|rgba|depth|hls|rgbf|rgbaf}=rgba] [name]\n";
+    Message::SendFail() << "Syntax error: wrong number of arguments.\n"
+                        << "Usage: " << theArgVec[0] << " xPixel yPixel [{rgb|rgba|depth|hls|rgbf|rgbaf}=rgba] [name]";
     return 1;
   }
 
@@ -7086,7 +7087,7 @@ static int VReadPixel (Draw_Interpretor& theDI,
   const Standard_Integer anY = Draw::Atoi (theArgVec[2]);
   if (anX < 0 || anX >= aWidth || anY < 0 || anY > aHeight)
   {
-    std::cerr << "Pixel coordinates (" << anX << "; " << anY << ") are out of view (" << aWidth << " x " << aHeight << ")\n";
+    Message::SendFail() << "Error: pixel coordinates (" << anX << "; " << anY << ") are out of view (" << aWidth << " x " << aHeight << ")";
     return 1;
   }
 
@@ -7150,7 +7151,7 @@ static int VReadPixel (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error at '" << aParam << "'\n";
+      Message::SendFail() << "Syntax error at '" << aParam << "'";
       return 1;
     }
   }
@@ -7158,12 +7159,12 @@ static int VReadPixel (Draw_Interpretor& theDI,
   Image_PixMap anImage;
   if (!anImage.InitTrash (aFormat, aWidth, aHeight))
   {
-    std::cerr << "Image allocation failed\n";
+    Message::SendFail ("Error: image allocation failed");
     return 1;
   }
   else if (!aView->ToPixMap (anImage, aWidth, aHeight, aBufferType))
   {
-    std::cerr << "Image dump failed\n";
+    Message::SendFail ("Error: image dump failed");
     return 1;
   }
 
@@ -7351,7 +7352,7 @@ static int VDiffImage (Draw_Interpretor& theDI, Standard_Integer theArgNb, const
 {
   if (theArgNb < 3)
   {
-    std::cout << "Syntax error: not enough arguments.\n";
+    Message::SendFail ("Syntax error: not enough arguments");
     return 1;
   }
 
@@ -7377,7 +7378,7 @@ static int VDiffImage (Draw_Interpretor& theDI, Standard_Integer theArgNb, const
       aTolColor = Atof (theArgVec[++anArgIter]);
       if (aTolColor < 0.0 || aTolColor > 1.0)
       {
-        std::cout << "Syntax error at '" << anArg << " " << theArgVec[anArgIter] << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << " " << theArgVec[anArgIter] << "'";
         return 1;
       }
     }
@@ -7439,7 +7440,7 @@ static int VDiffImage (Draw_Interpretor& theDI, Standard_Integer theArgNb, const
       aTolColor = anArg.RealValue();
       if (aTolColor < 0.0 || aTolColor > 1.0)
       {
-        std::cout << "Syntax error at '" << anArg << " " << theArgVec[anArgIter] << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << " " << theArgVec[anArgIter] << "'";
         return 1;
       }
     }
@@ -7461,7 +7462,7 @@ static int VDiffImage (Draw_Interpretor& theDI, Standard_Integer theArgNb, const
     }
     else
     {
-      std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -7470,12 +7471,12 @@ static int VDiffImage (Draw_Interpretor& theDI, Standard_Integer theArgNb, const
   Handle(Image_AlienPixMap) anImgNew = new Image_AlienPixMap();
   if (!anImgRef->Load (anImgPathRef))
   {
-    std::cout << "Error: image file '" << anImgPathRef << "' cannot be read\n";
+    Message::SendFail() << "Error: image file '" << anImgPathRef << "' cannot be read";
     return 1;
   }
   if (!anImgNew->Load (anImgPathNew))
   {
-    std::cout << "Error: image file '" << anImgPathNew << "' cannot be read\n";
+    Message::SendFail() << "Error: image file '" << anImgPathNew << "' cannot be read";
     return 1;
   }
 
@@ -7498,14 +7499,14 @@ static int VDiffImage (Draw_Interpretor& theDI, Standard_Integer theArgNb, const
     aDiff = new Image_AlienPixMap();
     if (!aDiff->InitTrash (Image_Format_Gray, anImgRef->SizeX(), anImgRef->SizeY()))
     {
-      std::cout << "Error: cannot allocate memory for diff image " << anImgRef->SizeX() << "x" << anImgRef->SizeY() << "\n";
+      Message::SendFail() << "Error: cannot allocate memory for diff image " << anImgRef->SizeX() << "x" << anImgRef->SizeY();
       return 1;
     }
     aComparer.SaveDiffImage (*aDiff);
     if (!aDiffImagePath.IsEmpty()
      && !aDiff->Save (aDiffImagePath))
     {
-      std::cout << "Error: diff image file '" << aDiffImagePath << "' cannot be written\n";
+      Message::SendFail() << "Error: diff image file '" << aDiffImagePath << "' cannot be written";
       return 1;
     }
   }
@@ -7598,7 +7599,7 @@ static Standard_Integer VSelect (Draw_Interpretor& ,
   const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
   if (aCtx.IsNull())
   {
-    std::cout << "Error: no active View\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -7631,7 +7632,7 @@ static Standard_Integer VSelect (Draw_Interpretor& ,
     }
     else
     {
-      std::cout << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -7688,7 +7689,7 @@ static Standard_Integer VMoveTo (Draw_Interpretor& theDI,
   const Handle(V3d_View)&               aView    = ViewerTest::CurrentView();
   if (aContext.IsNull())
   {
-    std::cout << "Error: no active View\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -7702,7 +7703,7 @@ static Standard_Integer VMoveTo (Draw_Interpretor& theDI,
     {
       if (anArgIter + 1 < theNbArgs)
       {
-        std::cout << "Syntax error at '" << theArgVec[anArgIter + 1] << "'\n";
+        Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter + 1] << "'";
         return 1;
       }
 
@@ -7730,7 +7731,7 @@ static Standard_Integer VMoveTo (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";
+      Message::SendFail() << "Syntax error at '" << theArgVec[anArgIter] << "'";
       return 1;
     }
   }
@@ -7738,7 +7739,7 @@ static Standard_Integer VMoveTo (Draw_Interpretor& theDI,
   if (aMousePos.x() == IntegerLast()
    || aMousePos.y() == IntegerLast())
   {
-    std::cout << "Syntax error: wrong number of arguments\n";
+    Message::SendFail ("Syntax error: wrong number of arguments");
     return 1;
   }
 
@@ -7936,7 +7937,7 @@ static int VViewParams (Draw_Interpretor& theDi, Standard_Integer theArgsNb, con
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << theArgVec[0] << ": please initialize or activate view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -8101,7 +8102,7 @@ static int VViewParams (Draw_Interpretor& theDi, Standard_Integer theArgsNb, con
     }
     else
     {
-      std::cout << "Syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -8149,7 +8150,7 @@ static Standard_Integer V2DMode (Draw_Interpretor&, Standard_Integer theArgsNb,
   Handle(ViewerTest_V3dView) aV3dView = Handle(ViewerTest_V3dView)::DownCast (ViewerTest::CurrentView());
   if (aV3dView.IsNull())
   {
-    std::cout << "Error: no active view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
   for (Standard_Integer anArgIt = 1; anArgIt < theArgsNb; ++anArgIt)
@@ -8164,7 +8165,7 @@ static Standard_Integer V2DMode (Draw_Interpretor&, Standard_Integer theArgsNb,
       TCollection_AsciiString aViewName = aViewNames.GetViewName();
       if (!ViewerTest_myViews.IsBound1 (aViewName))
       {
-        std::cout << "Syntax error: unknown view '" << theArgVec[anArgIt - 1] << "'.\n";
+        Message::SendFail() << "Syntax error: unknown view '" << theArgVec[anArgIt - 1] << "'";
         return 1;
       }
       aV3dView = Handle(ViewerTest_V3dView)::DownCast (ViewerTest_myViews.Find1 (aViewName));
@@ -8183,7 +8184,7 @@ static Standard_Integer V2DMode (Draw_Interpretor&, Standard_Integer theArgsNb,
     }
     else
     {
-      std::cout << "Syntax error: unknown argument " << anArg << ".\n";
+      Message::SendFail() << "Syntax error: unknown argument " << anArg;
       return 1;
     }
   }
@@ -8212,7 +8213,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
   }
   if (aCtx.IsNull())
   {
-    std::cout << "Error: no active view\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -8220,7 +8221,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
   TCollection_AsciiString aNameArg (theArgVec[anArgIter++]);
   if (aNameArg.IsEmpty())
   {
-    std::cout << "Syntax error: animation name is not defined.\n";
+    Message::SendFail ("Syntax error: animation name is not defined");
     return 1;
   }
 
@@ -8234,7 +8235,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
   }
   else if (aNameArg.Value (1) == '-')
   {
-    std::cout << "Syntax error: invalid animation name '" << aNameArg  << "'.\n";
+    Message::SendFail() << "Syntax error: invalid animation name '" << aNameArg  << "'";
     return 1;
   }
 
@@ -8255,7 +8256,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (aSplitPos == aNameArg.Length())
       {
-        std::cout << "Syntax error: animation name is not defined.\n";
+        Message::SendFail ("Syntax error: animation name is not defined");
         return 1;
       }
 
@@ -8381,7 +8382,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg << "";
         return 1;
       }
       aPlaySpeed = Draw::Atof (theArgVec[anArgIter]);
@@ -8404,7 +8405,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8433,7 +8434,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8452,7 +8453,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
         aRecParams.FpsDen = aDenStr.IntegerValue();
         if (aRecParams.FpsDen < 1)
         {
-          std::cout << "Syntax error at " << anArg << ".\n";
+          Message::SendFail() << "Syntax error at " << anArg;
           return 1;
         }
       }
@@ -8461,7 +8462,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       aRecParams.Format = theArgVec[anArgIter];
@@ -8472,7 +8473,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       aRecParams.PixelFormat = theArgVec[anArgIter];
@@ -8483,7 +8484,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       aRecParams.VideoCodec = theArgVec[anArgIter];
@@ -8495,7 +8496,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
       const TCollection_AsciiString aParamName = anArg.SubString (2, anArg.Length());
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8508,7 +8509,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8521,7 +8522,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8533,7 +8534,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8548,7 +8549,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8564,7 +8565,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     {
       if (++anArgIter >= theArgNb)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
 
@@ -8573,7 +8574,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
       Handle(AIS_InteractiveObject) anObject;
       if (!aMapOfAIS.Find2 (anObjName, anObject))
       {
-        std::cout << "Syntax error: wrong object name at " << anArg << "\n";
+        Message::SendFail() << "Syntax error: wrong object name at " << anArg;
         return 1;
       }
 
@@ -8595,7 +8596,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
           if (aTrsfArgIter + 4 >= theArgNb
           || !parseQuaternion (theArgVec + aTrsfArgIter + 1, aRotQuats[anIndex]))
           {
-            std::cout << "Syntax error at " << aTrsfArg << ".\n";
+            Message::SendFail() << "Syntax error at " << aTrsfArg;
             return 1;
           }
           aTrsfArgIter += 4;
@@ -8607,7 +8608,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
           if (aTrsfArgIter + 3 >= theArgNb
           || !parseXYZ (theArgVec + aTrsfArgIter + 1, aLocPnts[anIndex]))
           {
-            std::cout << "Syntax error at " << aTrsfArg << ".\n";
+            Message::SendFail() << "Syntax error at " << aTrsfArg;
             return 1;
           }
           aTrsfArgIter += 3;
@@ -8617,14 +8618,14 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
           isTrsfSet = Standard_True;
           if (++aTrsfArgIter >= theArgNb)
           {
-            std::cout << "Syntax error at " << aTrsfArg << ".\n";
+            Message::SendFail() << "Syntax error at " << aTrsfArg;
             return 1;
           }
 
           const TCollection_AsciiString aScaleStr (theArgVec[aTrsfArgIter]);
           if (!aScaleStr.IsRealValue())
           {
-            std::cout << "Syntax error at " << aTrsfArg << ".\n";
+            Message::SendFail() << "Syntax error at " << aTrsfArg;
             return 1;
           }
           aScales[anIndex] = aScaleStr.RealValue();
@@ -8637,7 +8638,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
       }
       if (!isTrsfSet)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       else if (aTrsfArgIter >= theArgNb)
@@ -8683,14 +8684,14 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
           isTrsfSet = Standard_True;
           if (++aViewArgIter >= theArgNb)
           {
-            std::cout << "Syntax error at " << anArg << ".\n";
+            Message::SendFail() << "Syntax error at " << anArg;
             return 1;
           }
 
           const TCollection_AsciiString aScaleStr (theArgVec[aViewArgIter]);
           if (!aScaleStr.IsRealValue())
           {
-            std::cout << "Syntax error at " << aViewArg << ".\n";
+            Message::SendFail() << "Syntax error at " << aViewArg;
             return 1;
           }
           Standard_Real aScale = aScaleStr.RealValue();
@@ -8707,7 +8708,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
           if (aViewArgIter + 3 >= theArgNb
           || !parseXYZ (theArgVec + aViewArgIter + 1, anXYZ))
           {
-            std::cout << "Syntax error at " << aViewArg << ".\n";
+            Message::SendFail() << "Syntax error at " << aViewArg;
             return 1;
           }
           aViewArgIter += 3;
@@ -8734,7 +8735,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
       }
       if (!isTrsfSet)
       {
-        std::cout << "Syntax error at " << anArg << ".\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       else if (aViewArgIter >= theArgNb)
@@ -8747,7 +8748,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Syntax error at " << anArg << ".\n";
+      Message::SendFail() << "Syntax error at " << anArg;
       return 1;
     }
   }
@@ -8836,7 +8837,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
       aRecorder = new Image_VideoRecorder();
       if (!aRecorder->Open (aRecFile.ToCString(), aRecParams))
       {
-        std::cout << "Error: failed to open video file for recording\n";
+        Message::SendFail ("Error: failed to open video file for recording");
         return 0;
       }
 
@@ -8868,7 +8869,7 @@ static Standard_Integer VAnimation (Draw_Interpretor& theDI,
         aDumpParams.ToAdjustAspect = Standard_True;
         if (!aView->ToPixMap (aRecorder->ChangeFrame(), aDumpParams))
         {
-          std::cout << "Error: view dump is failed!\n";
+          Message::SendFail ("Error: view dump is failed");
           return 0;
         }
         aFlipper.FlipY (aRecorder->ChangeFrame());
@@ -9160,7 +9161,7 @@ static int VTextureEnv (Draw_Interpretor& /*theDI*/, Standard_Integer theArgNb,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cerr << "No active view. Please call vinit.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -9204,9 +9205,9 @@ static int VTextureEnv (Draw_Interpretor& /*theDI*/, Standard_Integer theArgNb,
 
   if (!isOk)
   {
-    std::cerr << "Usage :" << std::endl;
-    std::cerr << theArgVec[0] << " off" << std::endl;
-    std::cerr << theArgVec[0] << " on {index_of_std_texture(0..7)|texture_file_name} [{clamp|repeat} {decal|modulate} {nearest|bilinear|trilinear} scale_s scale_t translation_s translation_t rotation_degrees]" << std::endl;
+    Message::SendFail() << "Usage:\n"
+                        << theArgVec[0] << " off\n"
+                        << theArgVec[0] << " on {index_of_std_texture(0..7)|texture_file_name} [{clamp|repeat} {decal|modulate} {nearest|bilinear|trilinear} scale_s scale_t translation_s translation_t rotation_degrees]";
     return 1;
   }
 
@@ -9256,7 +9257,7 @@ namespace
     Handle(Graphic3d_ClipPlane) aClipPlane;
     if (!theRegPlanes.Find (theName, aClipPlane))
     {
-      std::cout << "Warning: no such plane.\n";
+      Message::SendWarning ("Warning: no such plane");
       return;
     }
 
@@ -9302,7 +9303,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
   const Handle(V3d_View)& anActiveView = ViewerTest::CurrentView();
   if (anActiveView.IsNull())
   {
-    std::cout << "Error: no active view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -9325,7 +9326,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
   {
     if (theArgsNb < 3)
     {
-      std::cout << "Syntax error: plane name is required.\n";
+      Message::SendFail ("Syntax error: plane name is required");
       return 1;
     }
 
@@ -9354,19 +9355,19 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (!aRegPlanes.IsBound (aPlane))
       {
-        std::cout << "Error: no such plane.\n";
+        Message::SendFail ("Error: no such plane");
         return 1;
       }
       else if (theArgsNb < 4)
       {
-        std::cout << "Syntax error: enter name for new plane.\n";
+        Message::SendFail ("Syntax error: enter name for new plane");
         return 1;
       }
 
       TCollection_AsciiString aClone (theArgVec[3]);
       if (aRegPlanes.IsBound (aClone))
       {
-        std::cout << "Error: plane name is in use.\n";
+        Message::SendFail ("Error: plane name is in use");
         return 1;
       }
 
@@ -9408,7 +9409,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
   {
     if (theArgsNb < 5)
     {
-      std::cout << "Syntax error: need more arguments.\n";
+      Message::SendFail ("Syntax error: need more arguments");
       return 1;
     }
 
@@ -9435,7 +9436,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     // old syntax support
     if (theArgsNb < 3)
     {
-      std::cout << "Syntax error: need more arguments.\n";
+      Message::SendFail ("Syntax error: need more arguments");
       return 1;
     }
 
@@ -9443,7 +9444,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     aPlaneName = theArgVec[2];
     if (!aRegPlanes.Find (aPlaneName, aClipPlane))
     {
-      std::cout << "Error: no such plane '" << aPlaneName << "'.\n";
+      Message::SendFail() << "Error: no such plane '" << aPlaneName << "'";
       return 1;
     }
   }
@@ -9463,7 +9464,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
 
   if (theArgsNb - anArgIter < 1)
   {
-    std::cout << "Syntax error: need more arguments.\n";
+    Message::SendFail ("Syntax error: need more arguments");
     return 1;
   }
 
@@ -9484,7 +9485,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 5)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9496,7 +9497,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
         if (!aSubStr.IsIntegerValue()
           || aSubStr.IntegerValue() <= 0)
         {
-          std::cout << "Syntax error: unknown argument '" << aChangeArg << "'.\n";
+          Message::SendFail() << "Syntax error: unknown argument '" << aChangeArg << "'";
           return 1;
         }
         aSubIndex = aSubStr.IntegerValue();
@@ -9561,7 +9562,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9582,7 +9583,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9599,7 +9600,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9614,7 +9615,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9633,7 +9634,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
                                                            aColor);
       if (aNbParsed == 0)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
       aClipPlane->SetCappingColor (aColor);
@@ -9647,7 +9648,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
       Graphic3d_NameOfMaterial aMatName;
       if (!Graphic3d_MaterialAspect::MaterialFromName (aChangeArgs[1], aMatName))
       {
-        std::cout << "Syntax error: unknown material '" << aChangeArgs[1] << "'.\n";
+        Message::SendFail() << "Syntax error: unknown material '" << aChangeArgs[1] << "'";
         return 1;
       }
       aClipPlane->SetCappingMaterial (aMatName);
@@ -9687,7 +9688,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
         }
         else
         {
-          std::cout << "Syntax error at '" << aValStr << "'\n";
+          Message::SendFail() << "Syntax error at '" << aValStr << "'";
           return 1;
         }
         anAspect->SetAlphaMode (aMode);
@@ -9700,7 +9701,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9723,13 +9724,13 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aClipPlane->CappingTexture().IsNull())
       {
-        std::cout << "Error: no texture is set.\n";
+        Message::SendFail ("Error: no texture is set");
         return 1;
       }
 
       if (aNbChangeArgs < 3)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9743,13 +9744,13 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aClipPlane->CappingTexture().IsNull())
       {
-        std::cout << "Error: no texture is set.\n";
+        Message::SendFail ("Error: no texture is set");
         return 1;
       }
 
       if (aNbChangeArgs < 3)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9764,13 +9765,13 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aClipPlane->CappingTexture().IsNull())
       {
-        std::cout << "Error: no texture is set.\n";
+        Message::SendFail ("Error: no texture is set");
         return 1;
       }
 
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9783,7 +9784,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     {
       if (aNbChangeArgs < 2)
       {
-        std::cout << "Syntax error: need more arguments.\n";
+        Message::SendFail ("Syntax error: need more arguments");
         return 1;
       }
 
@@ -9857,7 +9858,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
         }
         else
         {
-          std::cout << "Error: object/view '" << anEntityName << "' is not found!\n";
+          Message::SendFail() << "Error: object/view '" << anEntityName << "' is not found";
           return 1;
         }
       }
@@ -9881,7 +9882,7 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
     }
     else
     {
-      std::cout << "Syntax error: unknown argument '" << aChangeArg << "'.\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << aChangeArg << "'";
       return 1;
     }
   }
@@ -9900,7 +9901,7 @@ static int VZRange (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const c
 
   if (aCurrentView.IsNull())
   {
-    std::cout << theArgVec[0] << ": Call vinit before this command, please.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -9920,14 +9921,13 @@ static int VZRange (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const c
 
     if (aNewZNear >= aNewZFar)
     {
-      std::cout << theArgVec[0] << ": invalid arguments: znear should be less than zfar.\n";
+      Message::SendFail ("Syntax error: invalid arguments: znear should be less than zfar");
       return 1;
     }
 
     if (!aCamera->IsOrthographic() && (aNewZNear <= 0.0 || aNewZFar <= 0.0))
     {
-      std::cout << theArgVec[0] << ": invalid arguments: ";
-      std::cout << "znear, zfar should be positive for perspective camera.\n";
+      Message::SendFail ("Syntax error: invalid arguments: znear, zfar should be positive for perspective camera");
       return 1;
     }
 
@@ -9935,7 +9935,7 @@ static int VZRange (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const c
   }
   else
   {
-    std::cout << theArgVec[0] << ": wrong command arguments. Type help for more information.\n";
+    Message::SendFail ("Syntax error: wrong command arguments");
     return 1;
   }
 
@@ -9954,7 +9954,7 @@ static int VAutoZFit (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const
 
   if (aCurrentView.IsNull())
   {
-    std::cout << theArgVec[0] << ": Call vinit before this command, please.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -9962,7 +9962,7 @@ static int VAutoZFit (Draw_Interpretor& theDi, Standard_Integer theArgsNb, const
 
   if (theArgsNb > 3)
   {
-    std::cout << theArgVec[0] << ": wrong command arguments. Type help for more information.\n";
+    Message::SendFail ("Syntax error: wrong command arguments");
     return 1;
   }
 
@@ -10013,7 +10013,7 @@ static int VCamera (Draw_Interpretor& theDI,
   Handle(V3d_View) aView = ViewerTest::CurrentView();
   if (aView.IsNull())
   {
-    std::cout << "Error: no active view.\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -10126,7 +10126,7 @@ static int VCamera (Draw_Interpretor& theDI,
       }
       else if (*anArgValue != '-')
       {
-        std::cout << "Error: unknown IOD type '" << anArgValue << "'\n";
+        Message::SendFail() << "Error: unknown IOD type '" << anArgValue << "'";
         return 1;
       }
       switch (aCamera->GetIODType())
@@ -10168,7 +10168,7 @@ static int VCamera (Draw_Interpretor& theDI,
       }
       else if (*anArgValue != '-')
       {
-        std::cout << "Error: unknown ZFocus type '" << anArgValue << "'\n";
+        Message::SendFail() << "Error: unknown ZFocus type '" << anArgValue << "'";
         return 1;
       }
       switch (aCamera->ZFocusType())
@@ -10197,7 +10197,7 @@ static int VCamera (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: unknown argument '" << anArg << "'\n";
+      Message::SendFail() << "Error: unknown argument '" << anArg << "'";
       return 1;
     }
   }
@@ -10218,7 +10218,7 @@ static int VCamera (Draw_Interpretor& theDI,
       aCameraFrustum = Handle(AIS_CameraFrustum)::DownCast (GetMapOfAIS().Find2 (theArgVec[1]));
       if (aCameraFrustum.IsNull())
       {
-        std::cout << "Error: object '" << aPrsName << "'is already defined and is not a camera frustum!\n";
+        Message::SendFail() << "Error: object '" << aPrsName << "'is already defined and is not a camera frustum";
         return 1;
       }
     }
@@ -10343,7 +10343,7 @@ static int VStereo (Draw_Interpretor& theDI,
   {
     if (aView.IsNull())
     {
-      std::cout << "Error: no active viewer!\n";
+      Message::SendFail ("Error: no active viewer");
       return 0;
     }
 
@@ -10404,7 +10404,7 @@ static int VStereo (Draw_Interpretor& theDI,
     {
       if (++anArgIter < theArgNb)
       {
-        std::cout << "Error: wrong number of arguments!\n";
+        Message::SendFail ("Error: wrong number of arguments");
         return 1;
       }
 
@@ -10421,7 +10421,7 @@ static int VStereo (Draw_Interpretor& theDI,
     {
       if (++anArgIter < theArgNb)
       {
-        std::cout << "Error: wrong number of arguments!\n";
+        Message::SendFail ("Error: wrong number of arguments");
         return 1;
       }
 
@@ -10461,7 +10461,7 @@ static int VStereo (Draw_Interpretor& theDI,
       if (++anArgIter >= theArgNb
       || !parseStereoMode (theArgVec[anArgIter], aMode))
       {
-        std::cout << "Error: syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -10477,7 +10477,7 @@ static int VStereo (Draw_Interpretor& theDI,
       if (++anArgIter >= theArgNb
       || !parseAnaglyphFilter (theArgVec[anArgIter], aFilter))
       {
-        std::cout << "Error: syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
 
@@ -10493,7 +10493,7 @@ static int VStereo (Draw_Interpretor& theDI,
     }
     else
     {
-      std::cout << "Error: syntax error at '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error at '" << anArg << "'";
       return 1;
     }
   }
@@ -10517,7 +10517,7 @@ static int VDefaults (Draw_Interpretor& theDi,
   const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
   if (aCtx.IsNull())
   {
-    std::cout << "Error: no active viewer\n";
+    Message::SendFail ("Error: no active viewer");
     return 1;
   }
 
@@ -10550,7 +10550,7 @@ static int VDefaults (Draw_Interpretor& theDi,
     {
       if (++anArgIter >= theArgsNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       aDefParams->SetTypeOfDeflection         (Aspect_TOD_ABSOLUTE);
@@ -10564,7 +10564,7 @@ static int VDefaults (Draw_Interpretor& theDi,
     {
       if (++anArgIter >= theArgsNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       aDefParams->SetTypeOfDeflection     (Aspect_TOD_RELATIVE);
@@ -10576,7 +10576,7 @@ static int VDefaults (Draw_Interpretor& theDi,
     {
       if (++anArgIter >= theArgsNb)
       {
-        std::cout << "Error: wrong syntax at " << anArg << "\n";
+        Message::SendFail() << "Syntax error at " << anArg;
         return 1;
       }
       aDefParams->SetDeviationAngle (M_PI * Draw::Atof (theArgVec[anArgIter]) / 180.0);
@@ -10590,14 +10590,14 @@ static int VDefaults (Draw_Interpretor& theDi,
       if (anArgIter >= theArgsNb
       || !ViewerTest::ParseOnOff (theArgVec[anArgIter], toTurnOn))
       {
-        std::cout << "Syntax error at '" << anArg << "'\n";
+        Message::SendFail() << "Syntax error at '" << anArg << "'";
         return 1;
       }
       aDefParams->SetAutoTriangulation (toTurnOn);
     }
     else
     {
-      std::cout << "Syntax error: unknown argument '" << anArg << "'\n";
+      Message::SendFail() << "Syntax error: unknown argument '" << anArg << "'";
       return 1;
     }
   }
@@ -10669,7 +10669,7 @@ static int VLight (Draw_Interpretor& theDi,
   if (aView.IsNull()
    || aViewer.IsNull())
   {
-    std::cerr << "No active viewer!\n";
+    Message::SendFail ("Error: