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