1 /*--------------------------------------------------------------------------*/
3 * ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) DIGITEO - 2009 - Allan CORNET
6 * This file must be used under the terms of the CeCILL.
7 * This source file is licensed as described in the file COPYING, which
8 * you should have received as part of this distribution. The terms
9 * are also available at
10 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
13 /*--------------------------------------------------------------------------*/
17 #include "getFullFilename.hxx"
18 #include "getDiaryDate.hxx"
21 #include "charEncoding.h"
24 /*--------------------------------------------------------------------------*/
25 Diary::Diary(std::wstring _wfilename,int _mode,int ID)
27 std::ios::openmode wofstream_mode = std::ios::trunc | std::ios::binary;
31 PrefixTimeFormat = PREFIX_TIME_FORMAT_UNIX_EPOCH;
32 IoModeFilter = DIARY_FILTER_INPUT_AND_OUTPUT; // default command & input
33 PrefixIoModeFilter = PREFIX_FILTER_NONE; // no prefix
37 wofstream_mode = std::ios::trunc | std::ios::binary ;
41 wofstream_mode = std::ios::app | std::ios::binary ;
45 std::wofstream fileDiary(getFullFilename(_wfilename).c_str(),wofstream_mode);
47 std::wstring wstrfile = getFullFilename(_wfilename);
48 wchar_t *wcfile = (wchar_t*)wstrfile.c_str();
49 char *filename = wide_string_to_UTF8(wcfile);
51 std::ofstream fileDiary(filename, wofstream_mode);
53 if (filename) {FREE(filename); filename = NULL;}
58 wfilename = std::wstring(L"");
64 wfilename = getFullFilename(_wfilename);
65 fileAttribMode = wofstream_mode;
70 /*--------------------------------------------------------------------------*/
73 wfilename = std::wstring(L"");
77 /*--------------------------------------------------------------------------*/
78 std::wstring Diary::getFilename(void)
82 /*--------------------------------------------------------------------------*/
83 void Diary::write(std::wstring _wstr, bool bInput)
87 std::ios::openmode wofstream_mode = std::ios::app | std::ios::binary;
89 std::wofstream fileDiary(wfilename.c_str(), wofstream_mode );
91 wchar_t *wcfile = (wchar_t*)wfilename.c_str();
92 char *filename = wide_string_to_UTF8(wcfile);
93 std::ofstream fileDiary(filename, wofstream_mode);
94 if (filename) {FREE(filename); filename = NULL;}
102 /* carriage return for Windows */
103 _wstr = replace(_wstr, std::wstring(L"\n"), std::wstring(L"\r\n"));
104 _wstr = replace(_wstr, std::wstring(L"\r\r"), std::wstring(L"\r"));
106 line = wide_string_to_UTF8((wchar_t*)_wstr.c_str());
110 if ( (IoModeFilter == DIARY_FILTER_INPUT_AND_OUTPUT) || (IoModeFilter == DIARY_FILTER_ONLY_INPUT) )
112 if ( (PrefixIoModeFilter == PREFIX_FILTER_INPUT_AND_OUTPUT) || (PrefixIoModeFilter == PREFIX_FILTER_ONLY_INPUT) )
114 char *timeInfo = wide_string_to_UTF8((wchar_t*)getDiaryDate(PrefixTimeFormat).c_str());
117 fileDiary << timeInfo << " ";
118 FREE(timeInfo); timeInfo = NULL;
121 if (line) fileDiary << line;
126 if ( (IoModeFilter == DIARY_FILTER_INPUT_AND_OUTPUT) || (IoModeFilter == DIARY_FILTER_ONLY_OUTPUT) )
128 if ( (PrefixIoModeFilter == PREFIX_FILTER_INPUT_AND_OUTPUT) || (PrefixIoModeFilter == PREFIX_FILTER_ONLY_OUTPUT) )
130 char *timeInfo = wide_string_to_UTF8((wchar_t*)getDiaryDate(PrefixTimeFormat).c_str());
133 fileDiary << timeInfo << " ";
134 FREE(timeInfo); timeInfo = NULL;
137 if (line) fileDiary << line;
141 if (line) {FREE(line); line = NULL;}
146 /*--------------------------------------------------------------------------*/
147 void Diary::writeln(std::wstring _wstr, bool bInput)
149 #define ENDLINE L"\n"
150 write(_wstr.append(ENDLINE),bInput);
152 /*--------------------------------------------------------------------------*/
153 int Diary::getID(void)
155 return ID_foutstream;
157 /*--------------------------------------------------------------------------*/
158 void Diary::setID(int _ID)
162 /*--------------------------------------------------------------------------*/
163 bool Diary::setSuspendWrite(bool bWith)
165 bool previous = suspendwrite;
166 suspendwrite = bWith;
169 /*--------------------------------------------------------------------------*/
170 bool Diary::getSuspendWrite(void)
174 /*--------------------------------------------------------------------------*/
175 std::wstring Diary::replace(std::wstring text, std::wstring s, std::wstring replacement)
177 std::wstring::size_type pos = 0;
179 while (pos != std::wstring::npos)
181 pos = text.find(s, pos);
182 if (pos == std::wstring::npos)
183 // no more 's' in '*this'
186 text.replace(pos, s.length(), replacement);
187 pos += replacement.length();
191 /*--------------------------------------------------------------------------*/
192 diary_filter Diary::getIOMode(void)
196 /*--------------------------------------------------------------------------*/
197 void Diary::setIOMode(diary_filter _mode)
199 IoModeFilter = _mode;
201 /*--------------------------------------------------------------------------*/
202 void Diary::setPrefixMode(diary_prefix_time_format iPrefixTimeFormat)
204 PrefixTimeFormat = iPrefixTimeFormat;
206 /*--------------------------------------------------------------------------*/
207 void Diary::setPrefixIoModeFilter(diary_prefix_time_filter mode)
209 PrefixIoModeFilter = mode;
211 /*--------------------------------------------------------------------------*/
212 diary_prefix_time_format Diary::getPrefixMode(void)
214 return PrefixTimeFormat;
216 /*--------------------------------------------------------------------------*/
217 diary_prefix_time_filter Diary::getPrefixIoModeFilter(void)
219 return PrefixIoModeFilter;
221 /*--------------------------------------------------------------------------*/
222 bool compareDiary(Diary first,Diary second)
224 if (first.getID() < second.getID()) return true;
227 /*--------------------------------------------------------------------------*/