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