provide 2 logging functions, 1 for errors and 1 for outputs 35/21035/3
Antoine ELIAS [Wed, 17 Jul 2019 13:21:46 +0000 (15:21 +0200)]
scilab -nwni -quit -e "1+1;1+'a';" 2> errors.log > outputs.log

Change-Id: Ie733ab6df1b808e4f15351110c25362fd3e09562

scilab/modules/output_stream/includes/scilabWrite.hxx
scilab/modules/output_stream/src/cpp/scilabWrite.cpp
scilab/modules/startup/src/cpp/scilab.cpp

index 9ba4652..e9d8c0b 100644 (file)
@@ -28,6 +28,8 @@ extern "C"
 typedef void (*SCILAB_OUTPUT_METHOD)(const char *text);
 
 OUTPUT_STREAM_IMPEXP void setScilabOutputMethod(SCILAB_OUTPUT_METHOD writer);
+OUTPUT_STREAM_IMPEXP void setScilabErrorStreamMethod(SCILAB_OUTPUT_METHOD writer);
+OUTPUT_STREAM_IMPEXP void setScilabOutputStreamMethod(SCILAB_OUTPUT_METHOD writer);
 
 OUTPUT_STREAM_IMPEXP void scilabWrite(const char* _pstText);
 
index bbbddfe..49c8691 100644 (file)
@@ -25,11 +25,23 @@ extern "C"
 #include "configvariable_interface.h"
 }
 
-static SCILAB_OUTPUT_METHOD _writer;
+static SCILAB_OUTPUT_METHOD _writer_output;
+static SCILAB_OUTPUT_METHOD _writer_error;
 
 void setScilabOutputMethod(SCILAB_OUTPUT_METHOD writer)
 {
-    _writer = writer;
+    _writer_output = writer;
+    _writer_error = writer;
+}
+
+void setScilabErrorStreamMethod(SCILAB_OUTPUT_METHOD writer)
+{
+    _writer_error = writer;
+}
+
+void setScilabOutputStreamMethod(SCILAB_OUTPUT_METHOD writer)
+{
+    _writer_output = writer;
 }
 
 static void scilabPrint(const char* _pstText)
@@ -37,7 +49,15 @@ static void scilabPrint(const char* _pstText)
     wchar_t* pwstTemp = to_wide_string(_pstText);
     diaryWrite(pwstTemp, FALSE);
     FREE(pwstTemp);
-    (*_writer)(const_cast<char*>(_pstText));
+    (*_writer_output)(const_cast<char*>(_pstText));
+}
+
+static void scilabPrintError(const char* _pstText)
+{
+    wchar_t* pwstTemp = to_wide_string(_pstText);
+    diaryWrite(pwstTemp, FALSE);
+    FREE(pwstTemp);
+    (*_writer_error)(const_cast<char*>(_pstText));
 }
 
 void scilabWrite(const char* _pstText)
@@ -74,7 +94,7 @@ void scilabError(const char* _pstText)
 {
     if (isSilentError() == 0)
     {
-        scilabPrint(const_cast<char*>(_pstText));
+        scilabPrintError(const_cast<char*>(_pstText));
     }
 }
 
@@ -83,7 +103,7 @@ void scilabErrorW(const wchar_t* _pwsText)
     if (isSilentError() == 0)
     {
         char* pstTemp = wide_string_to_UTF8(_pwsText);
-        scilabPrint(pstTemp);
+        scilabPrintError(pstTemp);
         FREE(pstTemp);
     }
 }
index c9fca1d..0eeb98b 100644 (file)
@@ -344,10 +344,14 @@ extern "C"
     extern void ConsolePrintf(const char *);
 }
 
-static void TermPrintf(const char *text)
+static void TermError(const char *text)
 {
-    //std::cout << text;
-    printf("%s", text);
+    fprintf(stderr, "%s", text);
+}
+
+static void TermOutput(const char *text)
+{
+    fprintf(stdout, "%s", text);
 }
 
 /*
@@ -423,7 +427,8 @@ int main(int argc, char *argv[])
     {
         setScilabMode(SCILAB_NW);
         setScilabInputMethod(&getCmdLine);
-        setScilabOutputMethod(&TermPrintf);
+        setScilabErrorStreamMethod(&TermError);
+        setScilabOutputStreamMethod(&TermOutput);
 #if defined(__APPLE__)
         if (pSEI->iNoJvm == 0)
         {
@@ -463,7 +468,8 @@ int main(int argc, char *argv[])
 #else
     setScilabMode(SCILAB_NWNI);
     setScilabInputMethod(&getCmdLine);
-    setScilabOutputMethod(&TermPrintf);
+    setScilabErrorStreamMethod(&TermError);
+    setScilabOutputStreamMethod(&TermOutput);
 #endif // defined(WITHOUT_GUI)
 
 #ifdef _MSC_VER