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