mpi module 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 void ScinotesModule::LoadDeps(std::wstring _functionName)
109 {
110     if (loadedDep == false)
111     {
112         loadOnUseClassPath("SciNotes");
113         loadedDep = true;
114     }
115 }
116
117 int ScinotesModule::Load()
118 {
119     wstring wstModuleName = L"scinotes";
120 #ifdef _MSC_VER
121     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
122 #else
123     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
124 #endif
125     vectGateway vect = loadGatewaysName(wstModuleName);
126
127     for (int i = 0 ; i < (int)vect.size() ; i++)
128     {
129         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &ScinotesModule::LoadDeps, wstModuleName));
130     }
131
132     FREE(pwstLibName);
133     return 1;
134 }
135
136 //Functions module
137 int FunctionsModule::Load()
138 {
139     wstring wstPath = L"functions";
140 #ifdef _MSC_VER
141     wstring wstModuleName = L"functions_gw";
142     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
143 #else
144     wstring wstModuleName = L"functions";
145     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
146 #endif
147     vectGateway vect = loadGatewaysName(wstPath);
148
149     for (int i = 0 ; i < (int)vect.size() ; i++)
150     {
151         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
152     }
153
154     FREE(pwstLibName);
155     return 1;
156 }
157
158 int StatisticsModule::Load()
159 {
160     wstring wstPath = L"statistics";
161 #ifdef _MSC_VER
162     wstring wstModuleName = L"statistics_gw";
163     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
164 #else
165     wstring wstModuleName = L"statistics";
166     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
167 #endif
168     vectGateway vect = loadGatewaysName(wstPath);
169
170     for (int i = 0 ; i < (int)vect.size() ; i++)
171     {
172         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
173     }
174
175     FREE(pwstLibName);
176     return 1;
177 }
178
179 int SignalProcessingModule::Load()
180 {
181     wstring wstPath = L"signal_processing";
182 #ifdef _MSC_VER
183     wstring wstModuleName = L"signal_processing_gw";
184     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
185 #else
186     wstring wstModuleName = L"signal_processing";
187     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
188 #endif
189     vectGateway vect = loadGatewaysName(wstPath);
190
191     for (int i = 0 ; i < (int)vect.size() ; i++)
192     {
193         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
194     }
195
196     FREE(pwstLibName);
197     return 1;
198 }
199
200 void HelptoolsModule::LoadDeps(std::wstring _functionName)
201 {
202     if (loadedDep == false)
203     {
204         loadOnUseClassPath("documentationGeneration");
205         loadedDep = true;
206     }
207 }
208
209 bool HelptoolsModule::loadedDep = false;
210 int HelptoolsModule::Load()
211 {
212     wstring wstModuleName = L"helptools";
213 #ifdef _MSC_VER
214     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
215 #else
216     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
217 #endif
218
219     vectGateway vect = loadGatewaysName(wstModuleName);
220
221     for (int i = 0 ; i < (int)vect.size() ; i++)
222     {
223         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &HelptoolsModule::LoadDeps, wstModuleName));
224     }
225
226     FREE(pwstLibName);
227     return 1;
228 }
229
230 int MatioModule::Load()
231 {
232     wstring wstPath = L"matio";
233 #ifdef _MSC_VER
234     wstring wstModuleName = L"matio_gw";
235     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
236 #else
237     wstring wstModuleName = L"matio";
238     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
239 #endif
240     vectGateway vect = loadGatewaysName(wstPath);
241
242     for (int i = 0 ; i < (int)vect.size() ; i++)
243     {
244         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
245     }
246
247     FREE(pwstLibName);
248     return 1;
249 }
250
251 int Hdf5Module::Load()
252 {
253     wstring wstModuleName = L"hdf5";
254 #ifdef _MSC_VER
255     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
256 #else
257     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
258 #endif
259     vectGateway vect = loadGatewaysName(wstModuleName);
260
261     for (int i = 0 ; i < (int)vect.size() ; i++)
262     {
263         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
264     }
265
266     FREE(pwstLibName);
267     return 1;
268 }
269
270 int ActionBindingModule::Load()
271 {
272     wstring wstPath = L"action_binding";
273 #ifdef _MSC_VER
274     wstring wstModuleName = L"action_binding_gw";
275     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
276 #else
277     wstring wstModuleName = L"action_binding";
278     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
279 #endif
280     vectGateway vect = loadGatewaysName(wstPath);
281
282     for (int i = 0 ; i < (int)vect.size() ; i++)
283     {
284         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
285     }
286
287     FREE(pwstLibName);
288     return 1;
289 }
290
291 int SpreadsheetModule::Load()
292 {
293     wstring wstModuleName = L"spreadsheet";
294 #ifdef _MSC_VER
295     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
296 #else
297     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
298 #endif
299     vectGateway vect = loadGatewaysName(wstModuleName);
300
301     for (int i = 0 ; i < (int)vect.size() ; i++)
302     {
303         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
304     }
305
306     FREE(pwstLibName);
307     return 1;
308 }
309
310 int InterpolationModule::Load()
311 {
312     wstring wstPath = L"interpolation";
313 #ifdef _MSC_VER
314     wstring wstModuleName = L"interpolation";
315     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
316 #else
317     wstring wstModuleName = L"interpolation";
318     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
319 #endif
320     vectGateway vect = loadGatewaysName(wstPath);
321
322     for (int i = 0 ; i < (int)vect.size() ; i++)
323     {
324         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
325     }
326
327     FREE(pwstLibName);
328     return 1;
329 }
330
331 int SoundModule::Load()
332 {
333     wstring wstPath = L"sound";
334 #ifdef _MSC_VER
335     wstring wstModuleName = L"sound";
336     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
337 #else
338     wstring wstModuleName = L"sound";
339     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
340 #endif
341     vectGateway vect = loadGatewaysName(wstPath);
342
343     for (int i = 0 ; i < (int)vect.size() ; i++)
344     {
345         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
346     }
347
348     FREE(pwstLibName);
349     return 1;
350 }
351
352 int RandlibModule::Load()
353 {
354     wstring wstModuleName = L"randlib";
355 #ifdef _MSC_VER
356     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
357 #else
358     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
359 #endif
360     vectGateway vect = loadGatewaysName(wstModuleName);
361
362     for (int i = 0 ; i < (int)vect.size() ; i++)
363     {
364         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
365     }
366
367     FREE(pwstLibName);
368     return 1;
369 }
370
371 int UmfpackModule::Load()
372 {
373     wstring wstModuleName = L"umfpack";
374 #ifdef _MSC_VER
375     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
376 #else
377     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
378 #endif
379     vectGateway vect = loadGatewaysName(wstModuleName);
380
381     for (int i = 0 ; i < (int)vect.size() ; i++)
382     {
383         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
384     }
385
386     FREE(pwstLibName);
387     return 1;
388 }
389
390 int OptimizationModule::Load()
391 {
392     wstring wstModuleName = L"optimization";
393 #ifdef _MSC_VER
394     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
395 #else
396     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
397 #endif
398     vectGateway vect = loadGatewaysName(wstModuleName);
399
400     for (int i = 0 ; i < (int)vect.size() ; i++)
401     {
402         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
403     }
404
405     FREE(pwstLibName);
406     return 1;
407 }
408
409 int SpecialFunctionsModule::Load()
410 {
411     wstring wstModuleName = L"special_functions";
412 #ifdef _MSC_VER
413     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
414 #else
415     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
416 #endif
417     vectGateway vect = loadGatewaysName(wstModuleName);
418
419     for (int i = 0 ; i < (int)vect.size() ; i++)
420     {
421         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
422     }
423
424     FREE(pwstLibName);
425     return 1;
426 }
427
428 int GraphicExportModule::Load()
429 {
430     wstring wstModuleName = L"graphic_export";
431 #ifdef _MSC_VER
432     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
433 #else
434     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
435 #endif
436     vectGateway vect = loadGatewaysName(wstModuleName);
437
438     for (int i = 0 ; i < (int)vect.size() ; i++)
439     {
440         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
441     }
442
443     FREE(pwstLibName);
444     return 1;
445 }
446
447 int ArnoldiModule::Load()
448 {
449     wstring wstModuleName = L"arnoldi";
450 #ifdef _MSC_VER
451     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
452 #else
453     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
454 #endif
455     vectGateway vect = loadGatewaysName(wstModuleName);
456
457     for (int i = 0 ; i < (int)vect.size() ; i++)
458     {
459         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
460     }
461
462     FREE(pwstLibName);
463     return 1;
464 }
465
466 int CallScilabModule::Load()
467 {
468     wstring wstModuleName = L"call_scilab";
469 #ifdef _MSC_VER
470     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
471 #else
472     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
473 #endif
474     vectGateway vect = loadGatewaysName(wstModuleName);
475
476     for (int i = 0 ; i < (int)vect.size() ; i++)
477     {
478         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
479     }
480
481     FREE(pwstLibName);
482     return 1;
483 }
484
485 int CompletionModule::Load()
486 {
487     wstring wstModuleName = L"completion";
488 #ifdef _MSC_VER
489     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
490 #else
491     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
492 #endif
493     vectGateway vect = loadGatewaysName(wstModuleName);
494
495     for (int i = 0 ; i < (int)vect.size() ; i++)
496     {
497         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
498     }
499
500     FREE(pwstLibName);
501     return 1;
502 }
503
504 int XmlModule::Load()
505 {
506     wstring wstModuleName = L"xml";
507 #ifdef _MSC_VER
508     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
509 #else
510     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
511 #endif
512     vectGateway vect = loadGatewaysName(wstModuleName);
513
514     for (int i = 0 ; i < (int)vect.size() ; i++)
515     {
516         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
517     }
518
519     FREE(pwstLibName);
520     return 1;
521 }
522
523 int ScicosModule::Load()
524 {
525     wstring wstModuleName = L"scicos";
526     const wchar_t* wstLibName = wstModuleName.c_str();
527     if (getScilabMode() == SCILAB_NWNI)
528     {
529         wstLibName = L"scicos-cli";
530     }
531 #ifdef _MSC_VER
532     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_1);
533 #else
534     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstLibName, DYNLIB_NAME_FORMAT_3);
535 #endif
536     vectGateway vect = loadGatewaysName(wstModuleName);
537
538     for (int i = 0 ; i < (int)vect.size() ; i++)
539     {
540         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, NULL, wstModuleName));
541     }
542
543     FREE(pwstLibName);
544     return 1;
545 }
546
547 bool XcosModule::loadedDep = false;
548 void XcosModule::LoadDeps(std::wstring _functionName)
549 {
550     if (loadedDep == false && _functionName != L"closeXcos")
551     {
552         loadOnUseClassPath("Xcos");
553         loadedDep = true;
554     }
555 };
556
557 int XcosModule::Load()
558 {
559     wstring wstModuleName = L"xcos";
560 #ifdef _MSC_VER
561     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_2);
562 #else
563     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
564 #endif
565     vectGateway vect = loadGatewaysName(wstModuleName);
566
567     for (int i = 0 ; i < (int)vect.size() ; i++)
568     {
569         symbol::Context::getInstance()->addFunction(types::Function::createFunction(vect[i].wstFunction, vect[i].wstName, pwstLibName, vect[i].iType, &XcosModule::LoadDeps, wstModuleName));
570     }
571
572     FREE(pwstLibName);
573     return 1;
574 }
575
576 int MPIModule::Load()
577 {
578     wstring wstModuleName = L"mpi";
579 #ifdef _MSC_VER
580     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_1);
581 #else
582     wchar_t* pwstLibName = buildModuleDynLibraryNameW(wstModuleName.c_str(), DYNLIB_NAME_FORMAT_3);
583 #endif
584     vectGateway vect = loadGatewaysName(wstModuleName);
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, NULL, wstModuleName));
589     }
590
591     FREE(pwstLibName);
592     return 1;
593 }