Use a stack to manage "where" location
[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(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(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(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(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(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(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
297     static std::vector<std::wstring> getEntryPointNameList();
298
299     //dynamic modules
300 private :
301     static std::map<std::wstring, DynLibHandle> m_DynModules;
302 public :
303     static void addDynModule(std::wstring _name, DynLibHandle _lib);
304     static void removeDynModule(std::wstring _name);
305     static DynLibHandle getDynModule(std::wstring _name);
306     static int getDynModuleCount();
307     static DynLibHandle* getAllDynModule();
308     static void cleanDynModule();
309
310     // Command Line Arguments
311 private :
312     static std::vector<std::wstring> m_Args;
313     static bool m_bTimed;
314     static bool m_bSerialize;
315 public :
316     static void setCommandLineArgs(int _iArgs, char** _pstArgs);
317     static wchar_t** getCommandLineArgs(int* _piCount);
318     static bool getTimed();
319     static void setTimed(bool _bTimed);
320     static bool getSerialize();
321     static void setSerialize(bool _bSerialize);
322
323     //schur function
324 private :
325     static types::Callable* m_schurFunction;
326
327 public :
328     static void setSchurFunction(types::Callable* _schurFunction);
329     static types::Callable* getSchurFunction();
330
331     //grand (module randlib)
332 private :
333     static int m_currentBaseGen;
334     static int m_currentClcg4;
335
336 public :
337     static void setCurrentBaseGen(int _currentBaseGen);
338     static int getCurrentBaseGen();
339
340     static void setCurrentClcg4(int _currentClcg4);
341     static int getCurrentClcg4();
342
343     //Start and end finish flag
344 private :
345     static bool m_bStartProcessing;
346     static bool m_bEndProcessing;
347
348 public :
349     static void setStartProcessing(bool _bStartProcessing);
350     static bool getStartProcessing();
351     static void setEndProcessing(bool _bEndFinished);
352     static bool getEndProcessing();
353
354     // ieee
355 private :
356     static int m_iIeee;
357
358 public :
359     static void setIeee(int _iIeee);
360     static int getIeee();
361
362     // simp mode
363 private :
364     static int m_iSimpMode;
365
366 public :
367     static void setSimpMode(int _iSimpMode);
368     static int getSimpMode();
369
370     // funcprot mode
371 private :
372     static int m_iFuncprot;
373
374 public :
375     static void setFuncprot(int _iFuncprot);
376     static int getFuncprot();
377
378     // where
379 public :
380     struct WhereEntry
381     {
382         int m_line;
383         int m_absolute_line;
384         std::wstring m_name;
385         WhereEntry(int line, int absolute_line, const std::wstring& name) : m_line(line), m_absolute_line(absolute_line), m_name(name) {}
386     };
387     static void where_begin(int _iLineNum, int _iLineLocation, const std::wstring& _wstName);
388     static void where_end();
389     static const std::vector<WhereEntry>& getWhere();
390
391     static void macroFirstLine_begin(int _iLine);
392     static void macroFirstLine_end();
393     static int getMacroFirstLines();
394 private :
395     static std::vector<WhereEntry> m_Where;
396     static std::vector<int> m_FirstMacroLine;
397
398     //module called with variable by reference
399 private :
400     static std::list<std::wstring> m_ReferenceModules;
401 public :
402     static bool checkReferenceModule(std::wstring _module);
403     static void addReferenceModule(std::wstring _module);
404     static void removeReferenceModule(std::wstring _module);
405     static std::list<std::wstring> getReferenceModules();
406
407     //analyzer options
408
409 private :
410     static int m_analyzerOptions;
411 public :
412     static void setAnalyzerOptions(int _val);
413     static int getAnalyzerOptions(void);
414
415     //divide by zero
416 private:
417     static bool m_dividebyzero;
418 public:
419     static void setDivideByZero(bool _dividebyzero);
420     static bool isDivideByZero(void);
421 };
422
423 #endif /* !__CONFIGVARIABLE_HXX__ */