2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
5 * Copyright (C) 2012 - 2016 - Scilab Enterprises
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.
16 #ifndef __CONFIGVARIABLE_HXX__
17 #define __CONFIGVARIABLE_HXX__
19 //disable warnings about exports STL items
21 #pragma warning (disable : 4251)
31 #include "visitor.hxx"
35 #include "dynamiclibrary.h"
36 #include "dynlib_ast.h"
39 // Minimal values for iConsoleLines & iConsoleWidth
40 #define ICONSOLELINES_MIN 0
41 #define ICONSOLEWIDTH_MIN 10
50 class EXTERN_AST ConfigVariable
54 static std::list<std::wstring> m_ModuleList;
57 static void setModuleList(std::list<std::wstring>& _module_list);
58 static std::list<std::wstring> getModuleList();
63 static std::wstring m_SCIPath;
66 static void setSCIPath(const std::wstring& _SCIPath);
67 static std::wstring& getSCIPath();
71 static std::wstring m_SCIHOME;
74 static void setSCIHOME(const std::wstring& _m_SCIHOME);
75 static std::wstring& getSCIHOME();
79 static std::wstring m_TMPDIR;
82 static void setTMPDIR(const std::wstring& _TMPDIR);
83 static std::wstring& getTMPDIR();
87 static bool m_bForceQuit;
90 static void setForceQuit(bool _bForceQuit);
91 static bool getForceQuit(void);
95 static int m_iExitStatus;
98 static void setExitStatus(int _iExitStatus);
99 static int getExitStatus(void);
101 // Digit precision, ex format function
103 static int m_iFormatSize;
106 static void setFormatSize(int _iFormatSize);
107 static int getFormatSize(void);
109 // printf format ( 0 -> "e", 1 -> "v")
111 static int m_iFormatMode;
114 static void setFormatMode(int _iFormatMode);
115 static int getFormatMode(void);
118 // Screen console width
120 static int m_iConsoleWidth;
123 static void setConsoleWidth(int _iConsoleWidth);
124 static int getConsoleWidth(void);
126 // Screen console lines
128 static int m_iConsoleLines;
131 static void setConsoleLines(int _iConsoleLines);
132 static int getConsoleLines(void);
136 static int m_iScilabMode;
139 static void setScilabMode(int _iScilabMode);
140 static int getScilabMode(void);
144 static bool m_bWarningMode;
147 static void setWarningMode(bool _bWarningMode);
148 static bool getWarningMode(void);
152 static bool m_bWarningStop;
155 static void setWarningStop(bool _bWarningStop);
156 static bool getWarningStop(void);
160 static bool m_bOldEmptyBehaviour;
163 static void setOldEmptyBehaviour(bool _bOldEmptyBehaviour);
164 static bool getOldEmptyBehaviour(void);
168 static std::wstring m_HOME;
171 static void setHOME(const std::wstring& _m_HOME);
172 static std::wstring& getHOME();
174 //Clear last error information
176 static void setLastErrorClear(void);
178 //Clear last error information
180 static bool m_bLastErrorCall;
182 static void setLastErrorCall(void);
183 static void clearLastError(void);
187 static std::wstring m_wstError;
190 static void setLastErrorMessage(const std::wstring& _wstError);
191 static std::wstring& getLastErrorMessage();
196 static bool m_bError;
199 static void setLastErrorNumber(int _iError);
200 static int getLastErrorNumber();
201 static void setError();
202 static bool isError();
203 static void resetError();
207 static int m_iErrorLine;
210 static void setLastErrorLine(int _iLine);
211 static int getLastErrorLine();
213 //Last Error Function
215 static std::wstring m_wstErrorFunction;
217 static void setLastErrorFunction(const std::wstring& _wstFunction);
218 static std::wstring& getLastErrorFunction();
220 //verbose ";" after instruction
221 //set before function call to know status of e.isVerbose in functions
223 static bool m_bVerbose;
226 static void setVerbose(bool _bVerbose);
227 static bool getVerbose(void);
230 //silent error ( try catch, errcatch, ... )
232 static bool m_iSilentError;
234 static void setSilentError(bool _iSilentError);
235 static bool isSilentError(void);
251 static int m_iUserMode;
252 static int m_iPromptMode;
253 static bool m_printInput;
254 static bool m_printOutput;
255 static bool m_printCompact;
256 static bool m_printInteractive;
259 static void setUserMode(int _iPromptMode);
260 static int getUserMode(void);
262 static void setPromptMode(int _iPromptMode);
263 static int getPromptMode(void);
265 static void setPrintInput(bool val);
266 static bool isPrintInput(void);
267 static bool togglePrintInput(void);
269 static void setPrintOutput(bool val);
270 static bool isPrintOutput(void);
271 static bool togglePrintOutput(void);
273 static void setPrintInteractive(bool val);
274 static bool isPrintInteractive(void);
275 static bool togglePrintInteractive(void);
277 static void setPrintCompact(bool val);
278 static bool isPrintCompact(void);
279 static bool togglePrintCompact(void);
284 static int m_iPauseLevel;
285 static std::list<int> m_listScope;
288 static void IncreasePauseLevel();
289 static void DecreasePauseLevel();
290 static int getPauseLevel();
291 static int getActivePauseLevel();
296 wchar_t* pwstLibraryName; /** name of dynamic library **/
297 DynLibHandle hLib; /** handle of the library **/
300 typedef void(*dynlib_ptr)();
304 wchar_t* pwstEntryPointName; /** name of interface **/
305 int iLibIndex; /** name of interface **/
306 dynlib_ptr functionPtr; /** entrypoint for the interface **/
307 bool bOK; /** flag set to TRUE if entrypoint can be used **/
311 static std::list<EntryPointStr*> m_EntryPointList;
312 static std::vector<DynamicLibraryStr*> m_DynLibList;
315 /* tools fucntions */
316 static void setLibraryName(DynamicLibraryStr* _pDynamicLibrary, wchar_t* _pwstLibraryName);
317 static void setEntryPointName(EntryPointStr* _pEntryPoint, wchar_t* _pwstEntryPointName);
320 static DynamicLibraryStr* getNewDynamicLibraryStr();
321 static EntryPointStr* getNewEntryPointStr();
323 /* Dynamic libraries functions */
324 static std::vector<DynamicLibraryStr*>* getDynamicLibraryList();
325 static int addDynamicLibrary(DynamicLibraryStr* _pDynamicLibrary);
326 static void removeDynamicLibrary(int _iDynamicLibraryIndex);
327 static DynamicLibraryStr* getDynamicLibrary(int _iDynamicLibraryIndex);
328 static bool isDynamicLibrary(int _iDynamicLibraryIndex);
330 /* Entry point functions */
331 static std::list<EntryPointStr*>* getEntryPointList();
332 static void addEntryPoint(EntryPointStr* _pEP);
333 static void removeEntryPoint(int _iEntryPointIndex);
334 static EntryPointStr* getEntryPoint(wchar_t* _pwstEntryPointName, int _iDynamicLibraryIndex = -1);
335 static int getEntryPointPosition(wchar_t* _pwstEntryPointName, int _iDynamicLibraryIndex = -1);
336 static dynlib_ptr getEntryPointFromPosition(int position);
337 static std::vector<std::wstring> getEntryPointNameList();
341 static std::map<std::wstring, DynLibHandle> m_DynModules;
343 static void addDynModule(const std::wstring& _name, DynLibHandle _lib);
344 static void removeDynModule(const std::wstring& _name);
345 static DynLibHandle getDynModule(const std::wstring& _name);
346 static int getDynModuleCount();
347 static DynLibHandle* getAllDynModule();
348 static void cleanDynModule();
350 // Command Line Arguments
352 static std::vector<std::wstring> m_Args;
353 static bool m_bTimed;
354 static bool m_bSerialize;
356 static void setCommandLineArgs(int _iArgs, char** _pstArgs);
357 static wchar_t** getCommandLineArgs(int* _piCount);
358 static bool getTimed();
359 static void setTimed(bool _bTimed);
360 static bool getSerialize();
361 static void setSerialize(bool _bSerialize);
365 static types::Callable* m_schurFunction;
368 static void setSchurFunction(types::Callable* _schurFunction);
369 static types::Callable* getSchurFunction();
371 //grand (module randlib)
373 static int m_currentBaseGen;
374 static int m_currentClcg4;
377 static void setCurrentBaseGen(int _currentBaseGen);
378 static int getCurrentBaseGen();
380 static void setCurrentClcg4(int _currentClcg4);
381 static int getCurrentClcg4();
383 //Start and end finish flag
385 static bool m_bStartProcessing;
386 static bool m_bEndProcessing;
389 static void setStartProcessing(bool _bStartProcessing);
390 static bool getStartProcessing();
391 static void setEndProcessing(bool _bEndFinished);
392 static bool getEndProcessing();
399 static void setIeee(int _iIeee);
400 static int getIeee();
404 static int m_iSimpMode;
407 static void setSimpMode(int _iSimpMode);
408 static int getSimpMode();
412 static int m_iFuncprot;
415 static void setFuncprot(int _iFuncprot);
416 static int getFuncprot();
420 // On macro call, some information are pushed to the call stack
426 types::Callable* call;
427 const std::wstring* m_file_name;
430 // On error, every information is copied back as values from the Callable to avoid being freed on call stack return
431 struct WhereErrorEntry
436 std::wstring m_function_name;
437 std::wstring m_file_name;
440 static void where_begin(int _iLineNum, int _iLineLocation, types::Callable* _pCall);
441 static void where_end();
442 static const std::vector<WhereEntry>& getWhere();
443 static void fillWhereError(int _iErrorLine);
444 static void resetWhereError();
446 static void macroFirstLine_begin(int _iLine);
447 static void macroFirstLine_end();
448 static int getMacroFirstLines();
449 static void setFileNameToLastWhere(const std::wstring* _fileName);
450 static void whereErrorToString(std::wostringstream &ostr);
452 static std::vector<WhereEntry> m_Where;
453 static std::vector<WhereErrorEntry> m_WhereError;
454 static std::vector<int> m_FirstMacroLine;
455 //module called with variable by reference
457 static std::list<std::wstring> m_ReferenceModules;
459 static bool checkReferenceModule(const std::wstring& _module);
460 static void addReferenceModule(const std::wstring& _module);
461 static void removeReferenceModule(const std::wstring& _module);
462 static std::list<std::wstring> getReferenceModules();
467 static int m_analyzerOptions;
469 static void setAnalyzerOptions(int _val);
470 static int getAnalyzerOptions(void);
474 static bool m_dividebyzero;
476 static void setDivideByZero(bool _dividebyzero);
477 static bool isDivideByZero(void);
481 static std::string mexFunctionName;
483 static void setMexFunctionName(const std::string& name);
484 static std::string& getMexFunctionName();
486 // executed file with exec
488 static int m_iFileID;
490 static void setExecutedFileID(int _iFileID);
491 static int getExecutedFileID();
493 // string read from console by scilabRead
495 static std::atomic<char*> m_pcConsoleReadStr;
497 static void setConsoleReadStr(char* _pcConsoleReadStr);
498 static char* getConsoleReadStr();
500 // tell if the command return by scilabRead is a scilab command or not
502 static std::atomic<int> m_isScilabCommand;
504 static void setScilabCommand(int _isciCmd);
505 static int isScilabCommand();
507 //debugger information
508 static bool m_bEnabledebug;
509 static std::unique_ptr<ast::ConstVisitor> m_defaultvisitor;
511 static bool getEnableDebug();
512 static void setEnableDebug(bool _enable);
514 static void setDefaultVisitor(ast::ConstVisitor* _default);
515 static ast::ConstVisitor* getDefaultVisitor();
517 //manage CTRL C in console
519 static bool executionbreak;
521 static bool isExecutionBreak();
522 static void setExecutionBreak();
523 static void resetExecutionBreak();
525 static int recursionLimit;
526 static int recursionLevel;
528 // manage recursion stack
530 static int getRecursionLimit();
531 static int setRecursionLimit(int val);
533 static int getRecursionLevel();
534 static void resetRecursionLevel();
535 static bool increaseRecursion();
536 static void decreaseRecursion();
540 static bool getWebMode();
541 static void setWebMode(bool);
545 #endif /* !__CONFIGVARIABLE_HXX__ */