Refactoring of ScilabException in AST, exec, execstr.
[scilab.git] / scilab / modules / output_stream / src / cpp / yaspio.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
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
14 #include "yaspio.hxx"
15
16 extern "C"
17 {
18 #include "promptmode.h"
19 #include <stdio.h>
20 #include "charEncoding.h"
21 #include "MALLOC.h"
22 #include "diary.h"
23 #include "prompt.h"
24 }
25
26 static YASP_OUTPUT _writer;
27 static YASP_INPUT _reader;
28
29 void setYaspOutputMethod(YASP_OUTPUT writer)
30 {
31     _writer = writer;
32 }
33
34 void setYaspInputMethod(YASP_INPUT reader)
35 {
36     _reader = reader;
37 }
38
39 static void YaspPrint(const char* _pstText)
40 {
41     wchar_t* pwstTemp = to_wide_string(_pstText);
42     diaryWrite(pwstTemp, FALSE);
43     FREE(pwstTemp);
44     (*_writer)(const_cast<char*>(_pstText));
45 }
46
47 char *YaspRead()
48 {
49     //call reader
50     char* pstTemp = (*_reader)();
51
52     //add prompt to diary
53     static char pstPrompt[PROMPT_SIZE_MAX];
54     GetCurrentPrompt(pstPrompt);
55     wchar_t* pwstPrompt = to_wide_string(pstPrompt);
56     diaryWrite(pwstPrompt, TRUE);
57     FREE(pwstPrompt);
58
59     //add input to diary
60     wchar_t* pwstIn = to_wide_string(pstTemp);
61     diaryWriteln(pwstIn, TRUE);
62     FREE(pwstIn);
63
64     return pstTemp;
65 }
66
67 void YaspWrite(const char* _pstText)
68 {
69     if(getPromptMode() != PROMPTMODE_SILENT)
70     {
71         YaspPrint(const_cast<char*>(_pstText));
72     }
73 }
74
75 void YaspWriteW(const wchar_t* _pwsText)
76 {
77     if(getPromptMode() != PROMPTMODE_SILENT)
78     {
79         char* pstTemp = wide_string_to_UTF8(_pwsText);
80         YaspWrite(pstTemp);
81         FREE(pstTemp);
82     }
83 }
84
85 void YaspError(const char* _pstText)
86 {
87     if(getSilentError() == VERBOSE_ERROR)
88     {
89         YaspPrint(const_cast<char*>(_pstText));
90     }
91 }
92
93 void YaspErrorW(const wchar_t* _pwsText)
94 {
95     if(getSilentError() == VERBOSE_ERROR)
96     {
97         char* pstTemp = wide_string_to_UTF8(_pwsText);
98         YaspPrint(pstTemp);
99         FREE(pstTemp);
100     }
101 }