mem leak fixed about the default visitor
[scilab.git] / scilab / modules / ast / includes / system_env / configvariable.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2008-2008 - 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 #ifndef __CONFIGVARIABLE_HXX__
14 #define __CONFIGVARIABLE_HXX__
15
16 //disable warnings about exports STL items
17 #ifdef _MSC_VER
18 #pragma warning (disable : 4251)
19 #endif
20
21 #include <vector>
22 #include <list>
23 #include <map>
24 #include <string>
25 #include <memory>
26
27 #include "visitor.hxx"
28
29 extern "C"
30 {
31 #include "Thread_Wrapper.h"
32 #include "dynamiclibrary.h"
33 #include "dynlib_ast.h"
34 }
35
36 // Minimal values for iConsoleLines & iConsoleWidth
37 #define ICONSOLELINES_MIN 0
38 #define ICONSOLEWIDTH_MIN 10
39
40 namespace types
41 {
42 class Cell;
43 class ThreadId;
44 class Callable;
45 }
46
47 class EXTERN_AST ConfigVariable
48 {
49     //module list
50 private :
51     static std::list<std::wstring> m_ModuleList;
52
53 public :
54     static void setModuleList(std::list<std::wstring>& _module_list);
55     static std::list<std::wstring> getModuleList();
56
57
58     //SCI
59 private :
60     static std::wstring m_SCIPath;
61
62 public :
63     static void setSCIPath(const std::wstring& _SCIPath);
64     static std::wstring& getSCIPath();
65
66     //SCIHOME
67 private :
68     static std::wstring m_SCIHOME;
69
70 public :
71     static void setSCIHOME(const std::wstring& _m_SCIHOME);
72     static std::wstring& getSCIHOME();
73
74     //TMPDIR
75 private :
76     static std::wstring m_TMPDIR;
77
78 public :
79     static void setTMPDIR(const std::wstring& _TMPDIR);
80     static std::wstring& getTMPDIR();
81
82     // Force Quit
83 private :
84     static bool m_bForceQuit;
85
86 public :
87     static void setForceQuit(bool _bForceQuit);
88     static bool getForceQuit(void);
89
90     // Exit Status
91 private :
92     static int m_iExitStatus;
93
94 public :
95     static void setExitStatus(int _iExitStatus);
96     static int getExitStatus(void);
97
98     // Digit precision, ex format function
99 private :
100     static int m_iFormatSize;
101
102 public :
103     static void setFormatSize(int _iFormatSize);
104     static int getFormatSize(void);
105
106     // printf format ( 0 -> "e", 1 -> "v")
107 private :
108     static int m_iFormatMode;
109
110 public :
111     static void setFormatMode(int _iFormatMode);
112     static int getFormatMode(void);
113
114
115     // Screen console width
116 private :
117     static int m_iConsoleWidth;
118
119 public :
120     static void setConsoleWidth(int _iConsoleWidth);
121     static int getConsoleWidth(void);
122
123     // Screen console lines
124 private :
125     static int m_iConsoleLines;
126
127 public :
128     static void setConsoleLines(int _iConsoleLines);
129     static int getConsoleLines(void);
130
131     // Scilab mode
132 private :
133     static int m_iScilabMode;
134
135 public :
136     static void setScilabMode(int _iScilabMode);
137     static int getScilabMode(void);
138
139     //Warning mode
140 private :
141     static bool m_bWarningMode;
142
143 public :
144     static void setWarningMode(bool _bWarningMode);
145     static bool getWarningMode(void);
146
147     //HOME
148 private :
149     static std::wstring m_HOME;
150
151 public :
152     static void setHOME(const std::wstring& _m_HOME);
153     static std::wstring& getHOME();
154
155     //Clear last error information
156 public :
157     static void setLastErrorClear(void);
158
159     //Clear last error information
160 private :
161     static bool m_bLastErrorCall;
162 public :
163     static void setLastErrorCall(void);
164     static void clearLastError(void);
165
166     //Last Error Message
167 private :
168     static std::wstring m_wstError;
169
170 public :
171     static void setLastErrorMessage(const std::wstring& _wstError);
172     static std::wstring& getLastErrorMessage();
173
174     //Last Error ID
175 private :
176     static int m_iError;
177     static bool m_bError;
178
179 public :
180     static void setLastErrorNumber(int _iError);
181     static int getLastErrorNumber();
182     static void setError();
183     static bool isError();
184     static void resetError();
185
186     //Last Error Line
187 private :
188     static int m_iErrorLine;
189
190 public :
191     static void setLastErrorLine(int _iLine);
192     static int getLastErrorLine();
193
194     //Last Error Function
195 private :
196     static std::wstring m_wstErrorFunction;
197
198 public :
199     static void setLastErrorFunction(const std::wstring& _wstFunction);
200     static std::wstring& getLastErrorFunction();
201
202     //Prompt Mode and Silent error
203 public :
204     /*
205     Prompt mode
206     normal = 0,
207     silent = -1,
208     prompt = 2,
209     exec = 1,
210     exec3 = 3,
211     step = 4,
212     step7 = 7
213     */
214
215     /*
216        show = 0
217        silent = 1
218     */
219 private :
220     static int m_iPromptMode;
221     static int m_iSilentError;
222
223     //set before function call to know status of e.isVerbose in functions
224     static bool m_bVerbose;
225
226 public :
227     static void setPromptMode(int _iPromptMode);
228     static int getPromptMode(void);
229     static bool isPromptShow(void);
230     static bool isEmptyLineShow(void);
231
232     static void setSilentError(int _iSilentError);
233     static int getSilentError(void);
234     static void setVerbose(bool _bVerbose);
235     static bool getVerbose(void);
236
237     //Thread List
238
239 private :
240     static std::list<types::ThreadId*> m_threadList;
241 public :
242
243     static types::ThreadId* getThread(__threadKey _key);
244     static types::ThreadId* getLastRunningThread();
245     static types::ThreadId* getLastPausedThread();
246     static types::ThreadId* getLastThread();
247
248     static types::Cell* getAllThreads(void);
249     static void addThread(types::ThreadId* _thread);
250     static void deleteThread(__threadKey _key);
251
252     // Pause level
253 private :
254     static int m_iPauseLevel;
255     static std::list<int> m_listScope;
256
257 public :
258     static void IncreasePauseLevel();
259     static void DecreasePauseLevel();
260     static int getPauseLevel();
261     static int getActivePauseLevel();
262     // Dynamic Libraries
263
264     typedef struct
265     {
266         wchar_t* pwstLibraryName;      /** name of dynamic library **/
267         DynLibHandle hLib;              /** handle of the library **/
268     } DynamicLibraryStr;
269
270     typedef void(*dynlib_ptr)();
271
272     typedef struct
273     {
274         wchar_t* pwstEntryPointName;    /** name of interface **/
275         int iLibIndex;                  /** name of interface **/
276         dynlib_ptr functionPtr;         /** entrypoint for the interface **/
277         bool bOK;                       /** flag set to TRUE if entrypoint can be used **/
278     } EntryPointStr;
279
280 private :
281     static std::list<EntryPointStr*> m_EntryPointList;
282     static std::vector<DynamicLibraryStr*> m_DynLibList;
283 public :
284
285     /* tools fucntions */
286     static void setLibraryName(DynamicLibraryStr* _pDynamicLibrary, wchar_t* _pwstLibraryName);
287     static void setEntryPointName(EntryPointStr* _pEntryPoint, wchar_t* _pwstEntryPointName);
288
289     /* "Constructors" */
290     static DynamicLibraryStr* getNewDynamicLibraryStr();
291     static EntryPointStr* getNewEntryPointStr();
292
293     /* Dynamic libraries functions */
294     static std::vector<DynamicLibraryStr*>* getDynamicLibraryList();
295     static int addDynamicLibrary(DynamicLibraryStr* _pDynamicLibrary);
296     static void removeDynamicLibrary(int _iDynamicLibraryIndex);
297     static DynamicLibraryStr* getDynamicLibrary(int _iDynamicLibraryIndex);
298     static bool isDynamicLibrary(int _iDynamicLibraryIndex);
299
300     /* Entry point functions */
301     static std::list<EntryPointStr*>* getEntryPointList();
302     static void addEntryPoint(EntryPointStr* _pEP);
303     static void removeEntryPoint(int _iEntryPointIndex);
304     static EntryPointStr* getEntryPoint(wchar_t* _pwstEntryPointName, int _iDynamicLibraryIndex = -1);
305     static int getEntryPointPosition(wchar_t* _pwstEntryPointName, int _iDynamicLibraryIndex = -1);
306     static dynlib_ptr getEntryPointFromPosition(int position);
307     static std::vector<std::wstring> getEntryPointNameList();
308
309     //dynamic modules
310 private :
311     static std::map<std::wstring, DynLibHandle> m_DynModules;
312 public :
313     static void addDynModule(const std::wstring& _name, DynLibHandle _lib);
314     static void removeDynModule(const std::wstring& _name);
315     static DynLibHandle getDynModule(const std::wstring& _name);
316     static int getDynModuleCount();
317     static DynLibHandle* getAllDynModule();
318     static void cleanDynModule();
319
320     // Command Line Arguments
321 private :
322     static std::vector<std::wstring> m_Args;
323     static bool m_bTimed;
324     static bool m_bSerialize;
325 public :
326     static void setCommandLineArgs(int _iArgs, char** _pstArgs);
327     static wchar_t** getCommandLineArgs(int* _piCount);
328     static bool getTimed();
329     static void setTimed(bool _bTimed);
330     static bool getSerialize();
331     static void setSerialize(bool _bSerialize);
332
333     //schur function
334 private :
335     static types::Callable* m_schurFunction;
336
337 public :
338     static void setSchurFunction(types::Callable* _schurFunction);
339     static types::Callable* getSchurFunction();
340
341     //grand (module randlib)
342 private :
343     static int m_currentBaseGen;
344     static int m_currentClcg4;
345
346 public :
347     static void setCurrentBaseGen(int _currentBaseGen);
348     static int getCurrentBaseGen();
349
350     static void setCurrentClcg4(int _currentClcg4);
351     static int getCurrentClcg4();
352
353     //Start and end finish flag
354 private :
355     static bool m_bStartProcessing;
356     static bool m_bEndProcessing;
357
358 public :
359     static void setStartProcessing(bool _bStartProcessing);
360     static bool getStartProcessing();
361     static void setEndProcessing(bool _bEndFinished);
362     static bool getEndProcessing();
363
364     // ieee
365 private :
366     static int m_iIeee;
367
368 public :
369     static void setIeee(int _iIeee);
370     static int getIeee();
371
372     // simp mode
373 private :
374     static int m_iSimpMode;
375
376 public :
377     static void setSimpMode(int _iSimpMode);
378     static int getSimpMode();
379
380     // funcprot mode
381 private :
382     static int m_iFuncprot;
383
384 public :
385     static void setFuncprot(int _iFuncprot);
386     static int getFuncprot();
387
388     // where
389 public :
390     struct WhereEntry
391     {
392         int m_line;
393         int m_absolute_line;
394         int m_macro_first_line;
395         std::wstring m_name;
396         std::wstring m_file_name;
397         WhereEntry(int line, int absolute_line, const std::wstring& name, int first_line, const std::wstring& file_name) :
398             m_line(line), m_absolute_line(absolute_line), m_macro_first_line(first_line), m_name(name), m_file_name(file_name) {}
399     };
400     typedef std::vector<WhereEntry> WhereVector;
401
402     static void where_begin(int _iLineNum, int _iLineLocation, types::Callable* _pCall);
403     static void where_end();
404     static const WhereVector& getWhere();
405     static void fillWhereError(int _iErrorLine);
406     static void resetWhereError();
407
408     static void macroFirstLine_begin(int _iLine);
409     static void macroFirstLine_end();
410     static int getMacroFirstLines();
411     static void setFileNameToLastWhere(const std::wstring& _fileName);
412     static void whereErrorToString(std::wostringstream &ostr);
413 private :
414     static WhereVector m_Where;
415     static WhereVector m_WhereError;
416     static std::vector<int> m_FirstMacroLine;
417     //module called with variable by reference
418 private :
419     static std::list<std::wstring> m_ReferenceModules;
420 public :
421     static bool checkReferenceModule(const std::wstring& _module);
422     static void addReferenceModule(const std::wstring& _module);
423     static void removeReferenceModule(const std::wstring& _module);
424     static std::list<std::wstring> getReferenceModules();
425
426     //analyzer options
427
428 private :
429     static int m_analyzerOptions;
430 public :
431     static void setAnalyzerOptions(int _val);
432     static int getAnalyzerOptions(void);
433
434     //divide by zero
435 private:
436     static bool m_dividebyzero;
437 public:
438     static void setDivideByZero(bool _dividebyzero);
439     static bool isDivideByZero(void);
440
441     //mex info
442 private:
443     static std::string mexFunctionName;
444 public:
445     static void setMexFunctionName(const std::string& name);
446     static std::string& getMexFunctionName();
447
448     // executed file with exec
449 private:
450     static int m_iFileID;
451 public:
452     static void setExecutedFileID(int _iFileID);
453     static int getExecutedFileID();
454
455     // string read from console by scilabRead
456 private:
457     static char* m_pcConsoleReadStr;
458 public:
459     static void setConsoleReadStr(char* _pcConsoleReadStr);
460     static char* getConsoleReadStr();
461
462     // tell if the command return by scilabRead is a scilab command or not
463 private:
464     static int m_isScilabCommand;
465 public:
466     static void setScilabCommand(int _isciCmd);
467     static int isScilabCommand();
468
469
470     //debugger information
471     static bool m_bEnabledebug;
472     static std::unique_ptr<ast::ConstVisitor> m_defaultvisitor;
473
474     static bool getEnableDebug();
475     static void setEnableDebug(bool _enable);
476
477     static void setDefaultVisitor(ast::ConstVisitor* _default);
478     static ast::ConstVisitor* getDefaultVisitor();
479
480     //manage CTRL C in console
481 private :
482     static bool executionbreak;
483 public :
484     static bool isExecutionBreak();
485     static void setExecutionBreak();
486     static void resetExecutionBreak();
487 private:
488     static int recursionLimit;
489     static int recursionLevel;
490
491     // manage recursion stack
492 public :
493     static int getRecursionLimit();
494     static int setRecursionLimit(int val);
495
496     static int getRecursionLevel();
497     static void resetRecursionLevel();
498     static bool increaseRecursion();
499     static void decreaseRecursion();
500 };
501
502 #endif /* !__CONFIGVARIABLE_HXX__ */