modules using java in nwni mode fixed.
[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 bool ScinotesModule::loadedDep = false;
110 int ScinotesModule::LoadDeps(const std::wstring& /*_functionName*/)
111 {
112     if (loadedDep == false)
113     {
114         loadOnUseClassPath("SciNotes");
115         loadedDep = true;
116     }
117
118     return 1;
119 }
120
121 int ScinotesModule::Load()
122 {
123     std::wstring wstModuleName = L"scinotes";
124 #ifdef _MSC_VER
125     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
126 #else
127     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
128 #endif
129     vectGateway vect = loadGatewaysName(wstModuleName);
130
131     for (int i = 0 ; i < (int)vect.size() ; i++)
132     {
133         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &ScinotesModule::LoadDeps, wstModuleName));
134     }
135
136     FREE(pwstLibName);
137     return 1;
138 }
139
140 //Functions module
141 int FunctionsModule::Load()
142 {
143     std::wstring wstPath = L"functions";
144 #ifdef _MSC_VER
145     std::wstring wstModuleName = L"functions_gw";
146     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
147 #else
148     std::wstring wstModuleName = L"functions";
149     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
150 #endif
151     vectGateway vect = loadGatewaysName(wstPath);
152
153     for (int i = 0 ; i < (int)vect.size() ; i++)
154     {
155         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
156     }
157
158     FREE(pwstLibName);
159     return 1;
160 }
161
162 int StatisticsModule::Load()
163 {
164     std::wstring wstPath = L"statistics";
165 #ifdef _MSC_VER
166     std::wstring wstModuleName = L"statistics_gw";
167     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
168 #else
169     std::wstring wstModuleName = L"statistics";
170     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
171 #endif
172     vectGateway vect = loadGatewaysName(wstPath);
173
174     for (int i = 0 ; i < (int)vect.size() ; i++)
175     {
176         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
177     }
178
179     FREE(pwstLibName);
180     return 1;
181 }
182
183 int SignalProcessingModule::Load()
184 {
185     std::wstring wstPath = L"signal_processing";
186 #ifdef _MSC_VER
187     std::wstring wstModuleName = L"signal_processing_gw";
188     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
189 #else
190     std::wstring wstModuleName = L"signal_processing";
191     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
192 #endif
193     vectGateway vect = loadGatewaysName(wstPath);
194
195     for (int i = 0 ; i < (int)vect.size() ; i++)
196     {
197         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
198     }
199
200     FREE(pwstLibName);
201     return 1;
202 }
203
204 int HelptoolsModule::LoadDeps(const std::wstring& /*_functionName*/)
205 {
206     if (loadedDep == false)
207     {
208         loadOnUseClassPath("documentationGeneration");
209         loadedDep = true;
210     }
211
212     return 1;
213 }
214
215 bool HelptoolsModule::loadedDep = false;
216 int HelptoolsModule::Load()
217 {
218     std::wstring wstModuleName = L"helptools";
219 #ifdef _MSC_VER
220     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
221 #else
222     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
223 #endif
224
225     vectGateway vect = loadGatewaysName(wstModuleName);
226
227     for (int i = 0 ; i < (int)vect.size() ; i++)
228     {
229         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &HelptoolsModule::LoadDeps, wstModuleName));
230     }
231
232     FREE(pwstLibName);
233     return 1;
234 }
235
236 int MatioModule::Load()
237 {
238     std::wstring wstPath = L"matio";
239 #ifdef _MSC_VER
240     std::wstring wstModuleName = L"matio_gw";
241     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
242 #else
243     std::wstring wstModuleName = L"matio";
244     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
245 #endif
246     vectGateway vect = loadGatewaysName(wstPath);
247
248     for (int i = 0 ; i < (int)vect.size() ; i++)
249     {
250         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
251     }
252
253     FREE(pwstLibName);
254     return 1;
255 }
256
257 int Hdf5Module::Load()
258 {
259     std::wstring wstModuleName = L"hdf5";
260 #ifdef _MSC_VER
261     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
262 #else
263     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
264 #endif
265     vectGateway vect = loadGatewaysName(wstModuleName);
266
267     for (int i = 0 ; i < (int)vect.size() ; i++)
268     {
269         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
270     }
271
272     FREE(pwstLibName);
273     return 1;
274 }
275
276 int ActionBindingModule::Load()
277 {
278     std::wstring wstPath = L"action_binding";
279 #ifdef _MSC_VER
280     std::wstring wstModuleName = L"action_binding_gw";
281     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
282 #else
283     std::wstring wstModuleName = L"action_binding";
284     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
285 #endif
286     vectGateway vect = loadGatewaysName(wstPath);
287
288     for (int i = 0 ; i < (int)vect.size() ; i++)
289     {
290         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
291     }
292
293     FREE(pwstLibName);
294     return 1;
295 }
296
297 int SpreadsheetModule::Load()
298 {
299     std::wstring wstModuleName = L"spreadsheet";
300 #ifdef _MSC_VER
301     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
302 #else
303     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
304 #endif
305     vectGateway vect = loadGatewaysName(wstModuleName);
306
307     for (int i = 0 ; i < (int)vect.size() ; i++)
308     {
309         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
310     }
311
312     FREE(pwstLibName);
313     return 1;
314 }
315
316 int InterpolationModule::Load()
317 {
318     std::wstring wstPath = L"interpolation";
319 #ifdef _MSC_VER
320     std::wstring wstModuleName = L"interpolation";
321     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
322 #else
323     std::wstring wstModuleName = L"interpolation";
324     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
325 #endif
326     vectGateway vect = loadGatewaysName(wstPath);
327
328     for (int i = 0 ; i < (int)vect.size() ; i++)
329     {
330         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
331     }
332
333     FREE(pwstLibName);
334     return 1;
335 }
336
337 int SoundModule::Load()
338 {
339     std::wstring wstPath = L"sound";
340 #ifdef _MSC_VER
341     std::wstring wstModuleName = L"sound";
342     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
343 #else
344     std::wstring wstModuleName = L"sound";
345     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
346 #endif
347     vectGateway vect = loadGatewaysName(wstPath);
348
349     for (int i = 0 ; i < (int)vect.size() ; i++)
350     {
351         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
352     }
353
354     FREE(pwstLibName);
355     return 1;
356 }
357
358 int RandlibModule::Load()
359 {
360     std::wstring wstModuleName = L"randlib";
361 #ifdef _MSC_VER
362     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
363 #else
364     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
365 #endif
366     vectGateway vect = loadGatewaysName(wstModuleName);
367
368     for (int i = 0 ; i < (int)vect.size() ; i++)
369     {
370         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
371     }
372
373     FREE(pwstLibName);
374     return 1;
375 }
376
377 int UmfpackModule::Load()
378 {
379     std::wstring wstModuleName = L"umfpack";
380 #ifdef _MSC_VER
381     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
382 #else
383     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
384 #endif
385     vectGateway vect = loadGatewaysName(wstModuleName);
386
387     for (int i = 0 ; i < (int)vect.size() ; i++)
388     {
389         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
390     }
391
392     FREE(pwstLibName);
393     return 1;
394 }
395
396 int OptimizationModule::Load()
397 {
398     std::wstring wstModuleName = L"optimization";
399 #ifdef _MSC_VER
400     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
401 #else
402     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
403 #endif
404     vectGateway vect = loadGatewaysName(wstModuleName);
405
406     for (int i = 0 ; i < (int)vect.size() ; i++)
407     {
408         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
409     }
410
411     FREE(pwstLibName);
412     return 1;
413 }
414
415 int SpecialFunctionsModule::Load()
416 {
417     std::wstring wstModuleName = L"special_functions";
418 #ifdef _MSC_VER
419     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
420 #else
421     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
422 #endif
423     vectGateway vect = loadGatewaysName(wstModuleName);
424
425     for (int i = 0 ; i < (int)vect.size() ; i++)
426     {
427         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
428     }
429
430     FREE(pwstLibName);
431     return 1;
432 }
433
434 int GraphicExportModule::Load()
435 {
436     std::wstring wstModuleName = L"graphic_export";
437 #ifdef _MSC_VER
438     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
439 #else
440     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
441 #endif
442     vectGateway vect = loadGatewaysName(wstModuleName);
443
444     for (int i = 0 ; i < (int)vect.size() ; i++)
445     {
446         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
447     }
448
449     FREE(pwstLibName);
450     return 1;
451 }
452
453 int ArnoldiModule::Load()
454 {
455     std::wstring wstModuleName = L"arnoldi";
456 #ifdef _MSC_VER
457     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
458 #else
459     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
460 #endif
461     vectGateway vect = loadGatewaysName(wstModuleName);
462
463     for (int i = 0 ; i < (int)vect.size() ; i++)
464     {
465         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
466     }
467
468     FREE(pwstLibName);
469     return 1;
470 }
471
472 int CallScilabModule::Load()
473 {
474     std::wstring wstModuleName = L"call_scilab";
475 #ifdef _MSC_VER
476     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
477 #else
478     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
479 #endif
480     vectGateway vect = loadGatewaysName(wstModuleName);
481
482     for (int i = 0 ; i < (int)vect.size() ; i++)
483     {
484         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
485     }
486
487     FREE(pwstLibName);
488     return 1;
489 }
490
491 int CompletionModule::Load()
492 {
493     std::wstring wstModuleName = L"completion";
494 #ifdef _MSC_VER
495     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
496 #else
497     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
498 #endif
499     vectGateway vect = loadGatewaysName(wstModuleName);
500
501     for (int i = 0 ; i < (int)vect.size() ; i++)
502     {
503         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
504     }
505
506     FREE(pwstLibName);
507     return 1;
508 }
509
510 int XmlModule::Load()
511 {
512     std::wstring wstModuleName = L"xml";
513 #ifdef _MSC_VER
514     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
515 #else
516     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
517 #endif
518     vectGateway vect = loadGatewaysName(wstModuleName);
519
520     for (int i = 0 ; i < (int)vect.size() ; i++)
521     {
522         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
523     }
524
525     FREE(pwstLibName);
526     return 1;
527 }
528
529 int ScicosModule::Load()
530 {
531     std::wstring wstModuleName = L"scicos";
532     const wchar_t* wstLibName = wstModuleName.c_str();
533     if (getScilabMode() == SCILAB_NWNI)
534     {
535         wstLibName = L"scicos-cli";
536     }
537 #ifdef _MSC_VER
538     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_1);
539 #else
540     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_3);
541 #endif
542     vectGateway vect = loadGatewaysName(wstModuleName);
543
544     for (int i = 0 ; i < (int)vect.size() ; i++)
545     {
546         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
547     }
548
549     FREE(pwstLibName);
550     return 1;
551 }
552
553 bool XcosModule::loadedDep = false;
554 int XcosModule::LoadDeps(const std::wstring& _functionName)
555 {
556     if (loadedDep == false && _functionName != L"closeXcos")
557     {
558         loadOnUseClassPath("Xcos");
559         loadedDep = true;
560     }
561
562     return 1;
563 };
564
565 int XcosModule::Load()
566 {
567     const std::wstring wstModuleName = L"xcos";
568     const wchar_t*  wstLibName = wstModuleName.c_str();
569 #ifdef _MSC_VER
570     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_2);
571 #else
572     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_3);
573 #endif
574     vectGateway vect = loadGatewaysName(wstModuleName);
575
576
577     for (int i = 0 ; i < (int)vect.size() ; i++)
578     {
579         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &XcosModule::LoadDeps, wstModuleName));
580     }
581
582     FREE(pwstLibName);
583     return 1;
584 }
585
586 int MPIModule::Load()
587 {
588     std::wstring wstModuleName = L"mpi";
589 #ifdef _MSC_VER
590     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
591 #else
592     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
593 #endif
594     vectGateway vect = loadGatewaysName(wstModuleName);
595
596     for (int i = 0 ; i < (int)vect.size() ; i++)
597     {
598         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
599     }
600
601     FREE(pwstLibName);
602     return 1;
603 }
604
605 int ExternalObjectsModule::Load()
606 {
607     std::wstring wstModuleName = L"external_objects";
608 #ifdef _MSC_VER
609     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
610 #else
611     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
612 #endif
613     vectGateway vect = loadGatewaysName(wstModuleName);
614
615     for (int i = 0 ; i < (int)vect.size() ; i++)
616     {
617         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
618     }
619
620     FREE(pwstLibName);
621     return 1;
622 }
623
624 int ExternalObjectsJavaModule::Load()
625 {
626     std::wstring wstModuleName = L"external_objects_java";
627 #ifdef _MSC_VER
628     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
629 #else
630     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
631 #endif
632     vectGateway vect = loadGatewaysName(wstModuleName);
633
634     for (int i = 0 ; i < (int)vect.size() ; i++)
635     {
636         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
637     }
638
639     FREE(pwstLibName);
640     return 1;
641 }
642
643 int SlintModule::Load()
644 {
645     std::wstring wstModuleName = L"slint";
646 #ifdef _MSC_VER
647     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
648 #else
649     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
650 #endif
651     vectGateway vect = loadGatewaysName(wstModuleName);
652
653     for (int i = 0 ; i < (int)vect.size() ; i++)
654     {
655         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
656     }
657
658     FREE(pwstLibName);
659     return 1;
660 }
661
662 bool GraphicsModule::loadedDep = false;
663 int GraphicsModule::LoadDeps(const std::wstring& /*_functionName*/)
664 {
665     if (loadedDep == false)
666     {
667         loadOnUseClassPath("graphics");
668         loadedDep = true;
669     }
670
671     return 1;
672 }
673
674 int GraphicsModule::Load()
675 {
676     std::wstring wstModuleName = L"graphics";
677 #ifdef _MSC_VER
678     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
679 #else
680     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
681 #endif
682
683     vectGateway vect = loadGatewaysName(wstModuleName);
684
685     for (int i = 0 ; i < (int)vect.size() ; i++)
686     {
687         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &GraphicsModule::LoadDeps, wstModuleName));
688     }
689
690     FREE(pwstLibName);
691     return 1;
692 }
693
694
695 bool GuiModule::loadedDep = false;
696 int GuiModule::LoadDeps(const std::wstring& _functionName)
697 {
698     if (loadedDep == false &&
699             (_functionName == L"uicontrol" ||
700              _functionName == L"uimenu" ||
701              _functionName == L"usecanvas" ||
702              _functionName == L"loadGui" ||
703              _functionName == L"figure"))
704     {
705         loadOnUseClassPath("graphics");
706         loadedDep = true;
707     }
708
709     return 1;
710 }
711 int GuiModule::Load()
712 {
713     std::wstring wstModuleName = L"gui";
714 #ifdef _MSC_VER
715     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
716 #else
717     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
718 #endif
719
720     vectGateway vect = loadGatewaysName(wstModuleName);
721
722     for (int i = 0 ; i < (int)vect.size() ; i++)
723     {
724         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &GuiModule::LoadDeps, wstModuleName));
725     }
726
727     FREE(pwstLibName);
728     return 1;
729 }
730
731 int JvmModule::Load()
732 {
733     std::wstring wstModuleName = L"jvm";
734 #ifdef _MSC_VER
735     wchar_t* pwstLibName = buildModuleDynLibraryNameW(L"libjvm", DYNLIB_NAME_FORMAT_1);
736 #else
737     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
738 #endif
739
740     vectGateway vect = loadGatewaysName(wstModuleName);
741
742     for (int i = 0 ; i < (int)vect.size() ; i++)
743     {
744         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
745     }
746
747     FREE(pwstLibName);
748     return 1;
749 }
750
751 int UiDataModule::Load()
752 {
753     std::wstring wstModuleName = L"ui_data";
754 #ifdef _MSC_VER
755     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
756 #else
757     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
758 #endif
759
760     vectGateway vect = loadGatewaysName(wstModuleName);
761
762     for (int i = 0 ; i < (int)vect.size() ; i++)
763     {
764         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
765     }
766
767     FREE(pwstLibName);
768     return 1;
769 }
770
771 int TclsciModule::Load()
772 {
773     std::wstring wstModuleName = L"tclsci";
774 #ifdef _MSC_VER
775     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
776 #else
777     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
778 #endif
779
780     vectGateway vect = loadGatewaysName(wstModuleName);
781
782     for (int i = 0 ; i < (int)vect.size() ; i++)
783     {
784         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
785     }
786
787     FREE(pwstLibName);
788     return 1;
789 }
790
791 int HistoryBrowserModule ::Load()
792 {
793     std::wstring wstModuleName = L"history_browser";
794 #ifdef _MSC_VER
795     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
796 #else
797     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
798 #endif
799
800     vectGateway vect = loadGatewaysName(wstModuleName);
801
802     for (int i = 0 ; i < (int)vect.size() ; i++)
803     {
804         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
805     }
806
807     FREE(pwstLibName);
808     return 1;
809 }
810