Xcos: add dummy gateways in NWNI mode
[scilab.git] / scilab / modules / functions_manager / src / cpp / dynamic_modules.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2011 - DIGITEO - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #include "dynamic_modules.hxx"
17 #include "context.hxx"
18 #include "configvariable.hxx"
19
20
21 extern "C"
22 {
23 #include "loadOnUseClassPath.h"
24 #include "Scierror.h"
25
26     //XML API
27 #include <libxml/xpath.h>
28 #include <libxml/xmlreader.h>
29 #include "sci_malloc.h"
30 #include "configvariable_interface.h"
31 }
32
33 vectGateway loadGatewaysName(const std::wstring& _wstModuleName)
34 {
35     vectGateway vect;
36     std::wstring wstPath = ConfigVariable::getSCIPath();
37     std::wstring wstModuleName = wstPath + L"/modules/" + _wstModuleName + L"/sci_gateway/" + _wstModuleName + L"_gateway.xml";
38
39     char* pstModuleName = wide_string_to_UTF8(wstModuleName.c_str());
40
41     /* Don't care about line return / empty line */
42     xmlKeepBlanksDefault(0);
43     // parse file
44     xmlDocPtr doc;
45     xmlXPathContextPtr xpathCtxt = NULL;
46     xmlXPathObjectPtr xpathObj = NULL;
47
48     doc = xmlParseFile(pstModuleName);
49     if (doc == NULL)
50     {
51         std::cout << "Error: Could not parse file " << pstModuleName << std::endl;
52         FREE(pstModuleName);
53         return vect;
54     }
55     FREE(pstModuleName);
56
57     xpathCtxt = xmlXPathNewContext(doc);
58     xpathObj = xmlXPathEval((const xmlChar*)"//module/gateway", xpathCtxt);
59     if (xpathObj && xpathObj->nodesetval->nodeMax)
60     {
61         /* the Xpath has been understood and there are node */
62         for (int        i = 0 ; i < xpathObj->nodesetval->nodeNr ; i++)
63         {
64             GatewayStr str;
65
66             xmlAttrPtr attrib = xpathObj->nodesetval->nodeTab[i]->properties;
67             /* Get the properties of <module>  */
68             while (attrib != NULL)
69             {
70                 /* loop until when have read all the attributes */
71                 if (xmlStrEqual(attrib->name, (const xmlChar*)"name"))
72                 {
73                     wchar_t * ws = to_wide_string((const char*)attrib->children->content);
74                     str.wstName = ws;
75                     FREE(ws);
76                 }
77                 else if (xmlStrEqual(attrib->name, (const xmlChar*)"function"))
78                 {
79                     wchar_t * ws = to_wide_string((const char*)attrib->children->content);
80                     str.wstFunction = ws;
81                     FREE(ws);
82                 }
83                 else if (xmlStrEqual(attrib->name, (const xmlChar*)"type"))
84                 {
85                     str.iType = (types::Function::FunctionType)atoi((const char*)attrib->children->content);
86                 }
87                 attrib = attrib->next;
88             }
89             vect.push_back(str);
90         }
91     }
92
93     if (xpathObj)
94     {
95         xmlXPathFreeObject(xpathObj);
96     }
97
98     if (xpathCtxt)
99     {
100         xmlXPathFreeContext(xpathCtxt);
101     }
102
103     xmlFreeDoc(doc);
104
105     return vect;
106 }
107
108 //Scinotes module
109
110 bool ScinotesModule::loadedDep = false;
111 int ScinotesModule::LoadDeps(const std::wstring& _functionName)
112 {
113     if (loadedDep == false)
114     {
115         loadOnUseClassPath("SciNotes");
116         loadedDep = true;
117     }
118
119     return 1;
120 }
121
122 int ScinotesModule::Load()
123 {
124     std::wstring wstModuleName = L"scinotes";
125 #ifdef _MSC_VER
126     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
127 #else
128     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
129 #endif
130     vectGateway vect = loadGatewaysName(wstModuleName);
131
132     for (int i = 0 ; i < (int)vect.size() ; i++)
133     {
134         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &ScinotesModule::LoadDeps, wstModuleName));
135     }
136
137     FREE(pwstLibName);
138     return 1;
139 }
140
141 //Functions module
142 int FunctionsModule::Load()
143 {
144     std::wstring wstPath = L"functions";
145 #ifdef _MSC_VER
146     std::wstring wstModuleName = L"functions_gw";
147     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
148 #else
149     std::wstring wstModuleName = L"functions";
150     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
151 #endif
152     vectGateway vect = loadGatewaysName(wstPath);
153
154     for (int i = 0 ; i < (int)vect.size() ; i++)
155     {
156         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
157     }
158
159     FREE(pwstLibName);
160     return 1;
161 }
162
163 int StatisticsModule::Load()
164 {
165     std::wstring wstPath = L"statistics";
166 #ifdef _MSC_VER
167     std::wstring wstModuleName = L"statistics_gw";
168     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
169 #else
170     std::wstring wstModuleName = L"statistics";
171     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
172 #endif
173     vectGateway vect = loadGatewaysName(wstPath);
174
175     for (int i = 0 ; i < (int)vect.size() ; i++)
176     {
177         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
178     }
179
180     FREE(pwstLibName);
181     return 1;
182 }
183
184 int SignalProcessingModule::Load()
185 {
186     std::wstring wstPath = L"signal_processing";
187 #ifdef _MSC_VER
188     std::wstring wstModuleName = L"signal_processing_gw";
189     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
190 #else
191     std::wstring wstModuleName = L"signal_processing";
192     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
193 #endif
194     vectGateway vect = loadGatewaysName(wstPath);
195
196     for (int i = 0 ; i < (int)vect.size() ; i++)
197     {
198         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
199     }
200
201     FREE(pwstLibName);
202     return 1;
203 }
204
205 int HelptoolsModule::LoadDeps(const std::wstring& _functionName)
206 {
207     if (loadedDep == false)
208     {
209         loadOnUseClassPath("documentationGeneration");
210         loadedDep = true;
211     }
212
213     return 1;
214 }
215
216 bool HelptoolsModule::loadedDep = false;
217 int HelptoolsModule::Load()
218 {
219     std::wstring wstModuleName = L"helptools";
220 #ifdef _MSC_VER
221     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
222 #else
223     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
224 #endif
225
226     vectGateway vect = loadGatewaysName(wstModuleName);
227
228     for (int i = 0 ; i < (int)vect.size() ; i++)
229     {
230         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &HelptoolsModule::LoadDeps, wstModuleName));
231     }
232
233     FREE(pwstLibName);
234     return 1;
235 }
236
237 int MatioModule::Load()
238 {
239     std::wstring wstPath = L"matio";
240 #ifdef _MSC_VER
241     std::wstring wstModuleName = L"matio_gw";
242     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
243 #else
244     std::wstring wstModuleName = L"matio";
245     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
246 #endif
247     vectGateway vect = loadGatewaysName(wstPath);
248
249     for (int i = 0 ; i < (int)vect.size() ; i++)
250     {
251         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
252     }
253
254     FREE(pwstLibName);
255     return 1;
256 }
257
258 int Hdf5Module::Load()
259 {
260     std::wstring wstModuleName = L"hdf5";
261 #ifdef _MSC_VER
262     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
263 #else
264     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
265 #endif
266     vectGateway vect = loadGatewaysName(wstModuleName);
267
268     for (int i = 0 ; i < (int)vect.size() ; i++)
269     {
270         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
271     }
272
273     FREE(pwstLibName);
274     return 1;
275 }
276
277 int ActionBindingModule::Load()
278 {
279     std::wstring wstPath = L"action_binding";
280 #ifdef _MSC_VER
281     std::wstring wstModuleName = L"action_binding_gw";
282     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
283 #else
284     std::wstring wstModuleName = L"action_binding";
285     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
286 #endif
287     vectGateway vect = loadGatewaysName(wstPath);
288
289     for (int i = 0 ; i < (int)vect.size() ; i++)
290     {
291         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
292     }
293
294     FREE(pwstLibName);
295     return 1;
296 }
297
298 int SpreadsheetModule::Load()
299 {
300     std::wstring wstModuleName = L"spreadsheet";
301 #ifdef _MSC_VER
302     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
303 #else
304     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
305 #endif
306     vectGateway vect = loadGatewaysName(wstModuleName);
307
308     for (int i = 0 ; i < (int)vect.size() ; i++)
309     {
310         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
311     }
312
313     FREE(pwstLibName);
314     return 1;
315 }
316
317 int InterpolationModule::Load()
318 {
319     std::wstring wstPath = L"interpolation";
320 #ifdef _MSC_VER
321     std::wstring wstModuleName = L"interpolation";
322     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
323 #else
324     std::wstring wstModuleName = L"interpolation";
325     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
326 #endif
327     vectGateway vect = loadGatewaysName(wstPath);
328
329     for (int i = 0 ; i < (int)vect.size() ; i++)
330     {
331         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
332     }
333
334     FREE(pwstLibName);
335     return 1;
336 }
337
338 int SoundModule::Load()
339 {
340     std::wstring wstPath = L"sound";
341 #ifdef _MSC_VER
342     std::wstring wstModuleName = L"sound";
343     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
344 #else
345     std::wstring wstModuleName = L"sound";
346     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
347 #endif
348     vectGateway vect = loadGatewaysName(wstPath);
349
350     for (int i = 0 ; i < (int)vect.size() ; i++)
351     {
352         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
353     }
354
355     FREE(pwstLibName);
356     return 1;
357 }
358
359 int RandlibModule::Load()
360 {
361     std::wstring wstModuleName = L"randlib";
362 #ifdef _MSC_VER
363     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
364 #else
365     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
366 #endif
367     vectGateway vect = loadGatewaysName(wstModuleName);
368
369     for (int i = 0 ; i < (int)vect.size() ; i++)
370     {
371         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
372     }
373
374     FREE(pwstLibName);
375     return 1;
376 }
377
378 int UmfpackModule::Load()
379 {
380     std::wstring wstModuleName = L"umfpack";
381 #ifdef _MSC_VER
382     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
383 #else
384     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
385 #endif
386     vectGateway vect = loadGatewaysName(wstModuleName);
387
388     for (int i = 0 ; i < (int)vect.size() ; i++)
389     {
390         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
391     }
392
393     FREE(pwstLibName);
394     return 1;
395 }
396
397 int OptimizationModule::Load()
398 {
399     std::wstring wstModuleName = L"optimization";
400 #ifdef _MSC_VER
401     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
402 #else
403     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
404 #endif
405     vectGateway vect = loadGatewaysName(wstModuleName);
406
407     for (int i = 0 ; i < (int)vect.size() ; i++)
408     {
409         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
410     }
411
412     FREE(pwstLibName);
413     return 1;
414 }
415
416 int SpecialFunctionsModule::Load()
417 {
418     std::wstring wstModuleName = L"special_functions";
419 #ifdef _MSC_VER
420     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
421 #else
422     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
423 #endif
424     vectGateway vect = loadGatewaysName(wstModuleName);
425
426     for (int i = 0 ; i < (int)vect.size() ; i++)
427     {
428         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
429     }
430
431     FREE(pwstLibName);
432     return 1;
433 }
434
435 int GraphicExportModule::Load()
436 {
437     std::wstring wstModuleName = L"graphic_export";
438 #ifdef _MSC_VER
439     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
440 #else
441     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
442 #endif
443     vectGateway vect = loadGatewaysName(wstModuleName);
444
445     for (int i = 0 ; i < (int)vect.size() ; i++)
446     {
447         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
448     }
449
450     FREE(pwstLibName);
451     return 1;
452 }
453
454 int ArnoldiModule::Load()
455 {
456     std::wstring wstModuleName = L"arnoldi";
457 #ifdef _MSC_VER
458     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
459 #else
460     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
461 #endif
462     vectGateway vect = loadGatewaysName(wstModuleName);
463
464     for (int i = 0 ; i < (int)vect.size() ; i++)
465     {
466         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
467     }
468
469     FREE(pwstLibName);
470     return 1;
471 }
472
473 int CallScilabModule::Load()
474 {
475     std::wstring wstModuleName = L"call_scilab";
476 #ifdef _MSC_VER
477     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
478 #else
479     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
480 #endif
481     vectGateway vect = loadGatewaysName(wstModuleName);
482
483     for (int i = 0 ; i < (int)vect.size() ; i++)
484     {
485         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
486     }
487
488     FREE(pwstLibName);
489     return 1;
490 }
491
492 int CompletionModule::Load()
493 {
494     std::wstring wstModuleName = L"completion";
495 #ifdef _MSC_VER
496     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
497 #else
498     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
499 #endif
500     vectGateway vect = loadGatewaysName(wstModuleName);
501
502     for (int i = 0 ; i < (int)vect.size() ; i++)
503     {
504         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
505     }
506
507     FREE(pwstLibName);
508     return 1;
509 }
510
511 int XmlModule::Load()
512 {
513     std::wstring wstModuleName = L"xml";
514 #ifdef _MSC_VER
515     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
516 #else
517     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
518 #endif
519     vectGateway vect = loadGatewaysName(wstModuleName);
520
521     for (int i = 0 ; i < (int)vect.size() ; i++)
522     {
523         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
524     }
525
526     FREE(pwstLibName);
527     return 1;
528 }
529
530 int ScicosModule::Load()
531 {
532     std::wstring wstModuleName = L"scicos";
533     const wchar_t* wstLibName = wstModuleName.c_str();
534     if (getScilabMode() == SCILAB_NWNI)
535     {
536         wstLibName = L"scicos-cli";
537     }
538 #ifdef _MSC_VER
539     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_1);
540 #else
541     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_3);
542 #endif
543     vectGateway vect = loadGatewaysName(wstModuleName);
544
545     for (int i = 0 ; i < (int)vect.size() ; i++)
546     {
547         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
548     }
549
550     FREE(pwstLibName);
551     return 1;
552 }
553
554 static types::Function::ReturnValue sci_dummy_xcos_in_NWNI(types::typed_list &/*in*/, int /*_iRetCount*/, types::typed_list &/*out*/)
555 {
556     Scierror(999, _("Scilab '%s' module disabled in -nogui or -nwni mode.\n"), "xcos");
557     return types::Function::Error;
558 };
559
560 bool XcosModule::loadedDep = false;
561 int XcosModule::LoadDeps(const std::wstring& _functionName)
562 {
563     if (loadedDep == false && _functionName != L"closeXcos")
564     {
565         loadOnUseClassPath("Xcos");
566         loadedDep = true;
567     }
568
569     return 1;
570 };
571
572 int XcosModule::Load()
573 {
574     const std::wstring wstModuleName = L"xcos";
575     const wchar_t*  wstLibName = wstModuleName.c_str();
576 #ifdef _MSC_VER
577     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_2);
578 #else
579     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_3);
580 #endif
581     vectGateway vect = loadGatewaysName(wstModuleName);
582
583
584     if (getScilabMode() != SCILAB_NWNI)
585     {
586         for (int i = 0 ; i < (int)vect.size() ; i++)
587         {
588             symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &XcosModule::LoadDeps, wstModuleName));
589         }
590     }
591     else
592     {
593         for (int i = 0 ; i < (int)vect.size() ; i++)
594         {
595             symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, &sci_dummy_xcos_in_NWNI, wstModuleName));
596         }
597
598     }
599
600     FREE(pwstLibName);
601     return 1;
602 }
603
604 int MPIModule::Load()
605 {
606     std::wstring wstModuleName = L"mpi";
607 #ifdef _MSC_VER
608     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
609 #else
610     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
611 #endif
612     vectGateway vect = loadGatewaysName(wstModuleName);
613
614     for (int i = 0 ; i < (int)vect.size() ; i++)
615     {
616         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
617     }
618
619     FREE(pwstLibName);
620     return 1;
621 }
622
623 int ExternalObjectsModule::Load()
624 {
625     std::wstring wstModuleName = L"external_objects";
626 #ifdef _MSC_VER
627     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
628 #else
629     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
630 #endif
631     vectGateway vect = loadGatewaysName(wstModuleName);
632
633     for (int i = 0 ; i < (int)vect.size() ; i++)
634     {
635         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
636     }
637
638     FREE(pwstLibName);
639     return 1;
640 }
641
642 int ExternalObjectsJavaModule::Load()
643 {
644     std::wstring wstModuleName = L"external_objects_java";
645 #ifdef _MSC_VER
646     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
647 #else
648     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
649 #endif
650     vectGateway vect = loadGatewaysName(wstModuleName);
651
652     for (int i = 0 ; i < (int)vect.size() ; i++)
653     {
654         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
655     }
656
657     FREE(pwstLibName);
658     return 1;
659 }
660
661 int SlintModule::Load()
662 {
663     std::wstring wstModuleName = L"slint";
664 #ifdef _MSC_VER
665     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
666 #else
667     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
668 #endif
669     vectGateway vect = loadGatewaysName(wstModuleName);
670
671     for (int i = 0 ; i < (int)vect.size() ; i++)
672     {
673         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
674     }
675
676     FREE(pwstLibName);
677     return 1;
678 }