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