Refactoring of ScilabException in AST, exec, execstr.
[scilab.git] / scilab / modules / system_env / src / cpp / configvariable.cpp
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 #include <list>
13 #include "configvariable.hxx"
14
15 /*
16 ** Module List
17 ** \{
18 */
19 std::list<std::wstring> ConfigVariable::m_ModuleList;
20
21 void ConfigVariable::setModuleList(std::list<std::wstring>& _pModule_list)
22 {
23     m_ModuleList.clear();
24
25     std::list<std::wstring>::iterator it;
26     for(it = _pModule_list.begin() ; it != _pModule_list.end() ; it++)
27     {
28         m_ModuleList.push_back(*it);
29     }
30 }
31
32 std::list<std::wstring> ConfigVariable::getModuleList()
33 {
34     std::list<std::wstring> moduleList;
35     std::list<std::wstring>::iterator it;
36     for(it = m_ModuleList.begin() ; it != m_ModuleList.end() ; it++)
37     {
38         moduleList.push_back(*it);
39     }
40     return moduleList;
41 }
42 /*
43 ** \}
44 */
45
46 /*
47 ** SCI
48 ** \{
49 */
50 std::wstring ConfigVariable::m_SCIPath;
51
52 void ConfigVariable::setSCIPath(std::wstring& _SCIPath)
53 {
54     m_SCIPath = _SCIPath;
55 }
56
57 std::wstring ConfigVariable::getSCIPath()
58 {
59     return m_SCIPath;
60 }
61
62 /*
63 ** \}
64 */
65
66 /*
67 ** SCIHOME
68 ** \{
69 */
70
71 std::wstring ConfigVariable::m_SCIHOME;
72
73 void ConfigVariable::setSCIHOME(std::wstring& _SCIHOME)
74 {
75     m_SCIHOME = _SCIHOME;
76 }
77
78 std::wstring ConfigVariable::getSCIHOME()
79 {
80     return m_SCIHOME;
81 }
82 /*
83 ** \}
84 */
85
86 /*
87 ** TMPDIR
88 ** \{
89 */
90
91 std::wstring ConfigVariable::m_TMPDIR;
92
93 void ConfigVariable::setTMPDIR(std::wstring& _TMPDIR)
94 {
95     m_TMPDIR = _TMPDIR;
96 }
97
98 std::wstring ConfigVariable::getTMPDIR()
99 {
100     return m_TMPDIR;
101 }
102 /*
103 ** \}
104 */
105
106 /*
107 ** Force Quit
108 ** \{
109 */
110 bool ConfigVariable::m_bForceQuit = false;
111
112 void ConfigVariable::setForceQuit(bool _bForceQuit)
113 {
114     m_bForceQuit = _bForceQuit;
115 }
116
117 bool ConfigVariable::getForceQuit(void)
118 {
119     return m_bForceQuit;
120 }
121 /*
122 ** \}
123 */
124
125 /*
126 ** Exit Status
127 ** \{
128 */
129 int ConfigVariable::m_iExitStatus = 0;
130
131 void ConfigVariable::setExitStatus(int _iExitStatus)
132 {
133     m_iExitStatus = _iExitStatus;
134 }
135
136 int ConfigVariable::getExitStatus(void)
137 {
138     return m_iExitStatus;
139 }
140 /*
141 ** \}
142 */
143
144 /*
145 ** Digit precision, ex format function
146 ** \{
147 */
148
149 int ConfigVariable::m_iFormat = 0;
150
151 void ConfigVariable::setFormat(int _iFormat)
152 {
153     m_iFormat = _iFormat;
154 }
155
156 int ConfigVariable::getFormat(void)
157 {
158     return m_iFormat;
159 }
160
161 /*
162 ** \}
163 */
164
165 /*
166 ** Screen console width
167 ** \{
168 */
169
170 int ConfigVariable::m_iConsoleWidth = 0;
171
172 void ConfigVariable::setConsoleWidth(int _iConsoleWidth)
173 {
174     m_iConsoleWidth = _iConsoleWidth;
175 }
176
177 int ConfigVariable::getConsoleWidth(void)
178 {
179     return m_iConsoleWidth;
180 }
181 /*
182 ** \}
183 */
184
185 /*
186 ** Scilab mode
187 ** \{
188 */
189
190 int ConfigVariable::m_iScilabMode = 0;
191
192 void ConfigVariable::setScilabMode(int _iScilabMode)
193 {
194     m_iScilabMode = _iScilabMode;
195 }
196
197 int ConfigVariable::getScilabMode(void)
198 {
199     return m_iScilabMode;
200 }
201 /*
202 ** \}
203 */
204
205 /*
206 ** Warning Mode
207 ** \{
208 */
209 bool ConfigVariable::m_bWarningMode = true;
210
211 void ConfigVariable::setWarningMode(bool _bWarningMode)
212 {
213     m_bWarningMode = _bWarningMode;
214 }
215
216 bool ConfigVariable::getWarningMode(void)
217 {
218     return m_bWarningMode;
219 }
220 /*
221 ** \}
222 */
223
224 /*
225 ** HOME
226 ** \{
227 */
228
229 std::wstring ConfigVariable::m_HOME;
230
231 void ConfigVariable::setHOME(std::wstring& _HOME)
232 {
233     m_HOME = _HOME;
234 }
235
236 std::wstring ConfigVariable::getHOME()
237 {
238     return m_HOME;
239 }
240 /*
241 ** \}
242 */
243
244 /*
245 ** Clear last error information
246 ** \{
247 */
248 bool ConfigVariable::m_bLastErrorCall = false;
249
250 void ConfigVariable::setLastErrorCall(void)
251 {
252     m_bLastErrorCall = true;
253 }
254
255 void ConfigVariable::clearLastError(void)
256 {
257     if(m_bLastErrorCall == false)
258     {
259         m_wstError          = L"";
260         m_iError            = 0;
261         m_iErrorLine        = 0;
262         m_wstErrorFunction  = L"";
263     }
264     m_bLastErrorCall = false;
265 }
266 /*
267 ** \}
268 */
269
270 /*
271 ** Last Error Message
272 ** \{
273 */
274
275 std::wstring ConfigVariable::m_wstError;
276
277 void ConfigVariable::setLastErrorMessage(std::wstring _wstError)
278 {
279     m_wstError = _wstError;
280 }
281
282 std::wstring ConfigVariable::getLastErrorMessage()
283 {
284     return m_wstError;
285 }
286 /*
287 ** \}
288 */
289
290 /*
291 ** Last Error ID
292 ** \{
293 */
294 int ConfigVariable::m_iError = 0;
295
296 void ConfigVariable::setLastErrorNumber(int _iError)
297 {
298     m_iError = _iError;
299 }
300
301 int ConfigVariable::getLastErrorNumber(void)
302 {
303     return m_iError;
304 }
305 /*
306 ** \}
307 */
308
309 /*
310 ** Last Error Line
311 ** \{
312 */
313 int ConfigVariable::m_iErrorLine = 0;
314
315 void ConfigVariable::setLastErrorLine(int _iErrorLine)
316 {
317     m_iErrorLine = _iErrorLine;
318 }
319
320 int ConfigVariable::getLastErrorLine(void)
321 {
322     return m_iErrorLine;
323 }
324 /*
325 ** \}
326 */
327
328 /*
329 ** Last Error Function
330 ** \{
331 */
332
333 std::wstring ConfigVariable::m_wstErrorFunction;
334
335 void ConfigVariable::setLastErrorFunction(std::wstring _wstErrorFunction)
336 {
337     m_wstErrorFunction = _wstErrorFunction;
338 }
339
340 std::wstring ConfigVariable::getLastErrorFunction()
341 {
342     return m_wstErrorFunction;
343 }
344
345 /*
346 ** \}
347 */
348
349 /*
350 ** Prompt Mode
351 ** \{
352 */
353
354 int ConfigVariable::m_iPromptMode = 0;
355 int ConfigVariable::m_iSilentError = 0;
356
357 void ConfigVariable::setPromptMode(int _iPromptMode)
358 {
359     m_iPromptMode = _iPromptMode;
360 }
361
362 int ConfigVariable::getPromptMode(void)
363 {
364     return m_iPromptMode;
365 }
366
367 void ConfigVariable::setSilentError(int _iSilentError)
368 {
369     m_iSilentError = _iSilentError;
370 }
371
372 int ConfigVariable::getSilentError(void)
373 {
374     return m_iSilentError;
375 }
376
377 /*
378 ** ThreadList
379 ** \{
380 */
381
382 std::list<types::ThreadId *> ConfigVariable::m_threadList;
383
384 types::ThreadId* ConfigVariable::getLastPausedThread()
385 {
386     std::list<types::ThreadId *>::reverse_iterator it;
387     for(it = m_threadList.rbegin() ; it != m_threadList.rend() ; it++)
388     {
389         if((*it)->getStatus() == types::ThreadId::Paused)
390         {
391             return *it;
392         }
393     }
394     return NULL;
395 }
396
397 types::ThreadId* ConfigVariable::getLastRunningThread()
398 {
399     std::list<types::ThreadId *>::reverse_iterator it;
400     for(it = m_threadList.rbegin() ; it != m_threadList.rend() ; it++)
401     {
402         if((*it)->getStatus() == types::ThreadId::Running)
403         {
404             return *it;
405         }
406     }
407     return NULL;
408 }
409
410 types::ThreadId* ConfigVariable::getLastThread()
411 {
412     return m_threadList.back();
413 }
414
415 types::Cell* ConfigVariable::getAllThreads(void)
416 {
417     int iSize = (int) ConfigVariable::m_threadList.size();
418
419     if (iSize == 0)
420     {
421         return new types::Cell();
422     }
423
424     int i = 0;
425     types::Cell *pcResult = new types::Cell(iSize, 1);
426     std::list<types::ThreadId *>::iterator it;
427
428     for (it = ConfigVariable::m_threadList.begin() ; it != ConfigVariable::m_threadList.end() ; ++it, ++i)
429     {
430         pcResult->set(i, *it);
431     }
432
433     return pcResult;
434 }
435
436
437 void ConfigVariable::addThread(types::ThreadId* _thread)
438 {
439     _thread->IncreaseRef();
440     m_threadList.push_back(_thread);
441 }
442
443
444 types::ThreadId* ConfigVariable::getThread(__threadKey _key)
445 {
446     std::list<types::ThreadId *>::iterator it;
447
448     for (it = ConfigVariable::m_threadList.begin() ; it != ConfigVariable::m_threadList.end() ; ++it)
449     {
450         if((*it)->getKey() == _key)
451         {
452             return *it;
453         }
454     }
455     return NULL;
456 }
457
458
459 void ConfigVariable::deleteThread(__threadKey _key)
460 {
461     //for(int i = 0 ; i < m_threadList.size() ; i++)
462     //{
463     //    types::ThreadId* pThread = m_threadList[i];
464     //    if(pThread->getKey() == _key)
465     //    {
466     //        pThread->DecreaseRef();
467     //        if(pThread->isDeletable())
468     //        {
469     //            delete pThread;
470     //            m_threadList.erase(.begin() + i - 1);
471     //        }
472     //    }
473     //}
474     std::list<types::ThreadId *>::iterator it;
475     for (it = ConfigVariable::m_threadList.begin() ; it != ConfigVariable::m_threadList.end() ; ++it)
476     {
477         if((*it)->getKey() == _key)
478         {
479             (*it)->DecreaseRef();
480             if((*it)->isDeletable())
481             {
482                 delete (*it);
483                 m_threadList.erase(it);
484                 return;
485             }
486         }
487     }
488 }
489
490 /*
491 ** \}
492 */
493
494 /*
495 ** Prompt Mode
496 ** \{
497 */
498
499 int ConfigVariable::m_iPauseLevel = 0;
500
501 void ConfigVariable::IncreasePauseLevel()
502 {
503     m_iPauseLevel++;
504 }
505
506 void ConfigVariable::DecreasePauseLevel()
507 {
508     m_iPauseLevel--;
509 }
510
511 int ConfigVariable::getPauseLevel()
512 {
513     return m_iPauseLevel;
514 }
515
516 /*
517 ** \}
518 */