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