add function diary
[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 #include "promptmode.h"
16
17 extern "C"
18 {
19 #include "charEncoding.h"
20 #include "MALLOC.h"
21 #include "diary.h"
22 #include "prompt.h"
23 }
24
25 static YASP_OUTPUT _writer;
26 static YASP_INPUT _reader;
27
28 void setYaspOutputMethod(YASP_OUTPUT writer)
29 {
30     _writer = writer;
31 }
32
33 void setYaspInputMethod(YASP_INPUT reader)
34 {
35     _reader = reader;
36 }
37
38 char *YaspRead()
39 {
40     char* pstTemp = (*_reader)();
41
42     //add prompt to diary
43     static char pstPrompt[PROMPT_SIZE_MAX];
44     GetCurrentPrompt(pstPrompt);
45     wchar_t* pwstPrompt = to_wide_string(pstPrompt);
46     diaryWrite(pwstPrompt, TRUE);
47     FREE(pwstPrompt);
48
49     //add input to diary
50     wchar_t* pwstIn = to_wide_string(pstTemp);
51     diaryWriteln(pwstIn, TRUE);
52     FREE(pwstIn);
53
54     return pstTemp;
55 }
56
57 void YaspWrite(const char* text)
58 {
59     int iMode =  getPromptMode();
60     if(iMode != PROMPTMODE_SILENT)
61     {
62         wchar_t* pwstTemp = to_wide_string(text);
63         diaryWrite(pwstTemp, TRUE);
64         FREE(pwstTemp);
65         (*_writer)(const_cast<char*>(text));
66     }
67 }
68
69 void YaspWriteW(const wchar_t* text)
70 {
71     char* pstTemp = wide_string_to_UTF8(text);
72     YaspWrite(pstTemp);
73     FREE(pstTemp);
74 }