Xcos: add dummy gateways in NWNI mode 21/18721/2
Clément DAVID [Mon, 28 Nov 2016 16:24:03 +0000 (17:24 +0100)]
Change-Id: I53159e63f43e613124bbf803209ba24f306a4d00

scilab/modules/functions_manager/src/cpp/dynamic_modules.cpp

index ea5b2f1..6a48d43 100644 (file)
 #include "context.hxx"
 #include "configvariable.hxx"
 
+
 extern "C"
 {
 #include "loadOnUseClassPath.h"
+#include "Scierror.h"
+
     //XML API
 #include <libxml/xpath.h>
 #include <libxml/xmlreader.h>
@@ -548,6 +551,12 @@ int ScicosModule::Load()
     return 1;
 }
 
+static types::Function::ReturnValue sci_dummy_xcos_in_NWNI(types::typed_list &/*in*/, int /*_iRetCount*/, types::typed_list &/*out*/)
+{
+    Scierror(999, _("Scilab '%s' module disabled in -nogui or -nwni mode.\n"), "xcos");
+    return types::Function::Error;
+};
+
 bool XcosModule::loadedDep = false;
 int XcosModule::LoadDeps(const std::wstring& _functionName)
 {
@@ -562,17 +571,30 @@ int XcosModule::LoadDeps(const std::wstring& _functionName)
 
 int XcosModule::Load()
 {
-    std::wstring wstModuleName = L"xcos";
+    const std::wstring wstModuleName = L"xcos";
+    const wchar_t*  wstLibName = wstModuleName.c_str();
 #ifdef _MSC_VER
-    wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
+    wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_2);
 #else
-    wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
+    wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_3);
 #endif
     vectGateway vect = loadGatewaysName(wstModuleName);
 
-    for (int i = 0 ; i < (int)vect.size() ; i++)
+
+    if (getScilabMode() != SCILAB_NWNI)
+    {
+        for (int i = 0 ; i < (int)vect.size() ; i++)
+        {
+            symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &XcosModule::LoadDeps, wstModuleName));
+        }
+    }
+    else
     {
-        symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &XcosModule::LoadDeps, wstModuleName));
+        for (int i = 0 ; i < (int)vect.size() ; i++)
+        {
+            symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, &sci_dummy_xcos_in_NWNI, wstModuleName));
+        }
+
     }
 
     FREE(pwstLibName);