Command history: Save in file before each execution to avoid to lose it in case of...
[scilab.git] / scilab / modules / history_manager / src / cpp / HistoryManager.hxx
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2007-2008 - INRIA - Allan CORNET
4 * Copyright (C) 2011 - DIGITEO - Allan CORNET
5 *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14 *
15 */
16
17 /*------------------------------------------------------------------------*/
18 #ifndef __HISTORYMANAGER_CPP_H__
19 #define __HISTORYMANAGER_CPP_H__
20 /*------------------------------------------------------------------------*/
21 #ifdef __cplusplus
22 /*------------------------------------------------------------------------*/
23 extern "C"
24 {
25 #include "dynlib_history_manager.h"
26 #include <time.h>
27 };
28 /*------------------------------------------------------------------------*/
29 #include <list>
30 #include "HistoryFile.hxx"
31 #include "HistorySearch.hxx"
32
33 #ifdef _MSC_VER
34 //disable warnings about exports STL items
35 #pragma warning (disable : 4251)
36 #endif
37
38 /*------------------------------------------------------------------------*/
39 class HISTORY_MANAGER_IMPEXP HistoryManager
40 {
41 public:
42
43     static HistoryManager* getInstance(void);
44     static void killInstance(void);
45
46     static BOOL historyIsEnabled(void);
47
48     /*
49     * add a line to History manager
50     * @param a line to add
51     * line isn't added if it is the same as previous (FALSE)
52     * @return TRUE or FALSE
53     */
54     BOOL appendLine(char *_pstLine);
55
56     /**
57     * append lines to History manager
58     * @param array of string
59     * @param size of the array of string
60     * @return TRUE or FALSE
61     */
62     BOOL appendLines(char **_pstLines, int _iLines);
63
64     /**
65     * Display history
66     */
67     void displayHistory(void);
68
69     /**
70     * get filename of history
71     * @return a filename
72     */
73     char* getFilename(void);
74
75     /**
76     * set filename of history
77     * @param filename of history
78     * @return TRUE or FALSE
79     */
80     BOOL setFilename(char* _pstFilename);
81
82     /**
83     * set default filename of history
84     * @return TRUE or FALSE
85     */
86     BOOL setDefaultFilename(void);
87
88     /**
89     * save history in a file
90     * @param a filename if NULL saves in default filename
91     * default filename --> SCIHOME/history.scilab
92     * @return TRUE or FALSE
93     */
94     BOOL writeToFile(char* _pstFilename);
95
96     /**
97     * save history
98     * default filename --> SCIHOME/history.scilab
99     * @return TRUE or FALSE
100     */
101     BOOL writeToFile();
102
103     /**
104     * load history from a file
105     * @param a filename if NULL load from default filename
106     * default filename --> SCIHOME/<scilab version>history.scilab
107     * @return TRUE or FALSE
108     */
109     BOOL loadFromFile(char* _pstFilename);
110
111     /**
112     * reset history manager
113     */
114     BOOL reset(void);
115
116     /**
117     * Get all lines in history
118     * @param output size of the array of string
119     * @return an array of strings
120     */
121     char** getAllLines(int* _iLines);
122
123     /**
124     * returns the first line in history
125     * @return a string
126     */
127     char* getFirstLine(void);
128
129     /**
130     * returns the last line in history
131     * @return a string
132     */
133     char* getLastLine(void);
134
135     /**
136     * get number of lines of history
137     * @return a number >= 0
138     */
139     int getNumberOfLines(void);
140
141     /**
142     * Get the Nth Line in history
143     * @param N
144     * @return the Nth Line
145     */
146     char* getNthLine(int _iLine);
147
148     /**
149     * delete the Nth Line in history
150     * @param N
151     * @return TRUE or FALSE
152     */
153     BOOL deleteNthLine(int _iLine);
154
155     /**
156     * Allow to save consecutive duplicate lines
157     * @param doit : TRUE (to allow) or FALSE
158     */
159     void setSaveConsecutiveDuplicateLines(BOOL _bAllow);
160
161     /**
162     * get state about to save consecutive duplicate lines
163     * @return TRUE or FALSE
164     */
165     BOOL getSaveConsecutiveDuplicateLines(void);
166
167     /**
168     * set after how many lines history is saved
169     * @param num : number of lines
170     */
171     void setAfterHowManyLinesHistoryIsSaved(int _iNum);
172
173     /**
174     * get after how many lines history is saved
175     * @return a int : number of lines
176     */
177     int getAfterHowManyLinesHistoryIsSaved(void);
178
179     /**
180     * set new token to search in history
181     * @param token (a string)
182     * @return TRUE or FALSE
183     */
184     BOOL setToken(const char* _pstToken);
185
186     /**
187     * get token searched in history
188     * @return token (a string)
189     */
190     char* getToken(void);
191
192     /**
193     * resettoken searched in history
194     * @return TRUE or FALSE
195     */
196     BOOL resetToken(void);
197
198     /**
199     * Get the previous line in search
200     * @return a line
201     */
202     char* getPreviousLine(void);
203
204     /**
205     * Get the next line in Scilab history
206     * @return a line or NULL
207     * after an appendLine iterator go to end
208     */
209     char* getNextLine(void);
210
211     /**
212     * get info about history file was truncated
213     * @return TRUE or FALSE
214     */
215     BOOL isTruncated(void);
216
217     /**
218     *
219     */
220     BOOL setNumberOfLinesMax(int _iMaxLines);
221
222     /**
223     *
224     */
225     int getNumberOfLinesMax(void);
226
227     /**
228     * search if line is a beginning of a session
229     * @return TRUE or FALSE
230     */
231     BOOL isBeginningSessionLine(char* _pstLine);
232
233 protected:
234
235 private:
236
237     /**
238     * Constructor
239     */
240     HistoryManager();
241
242     /**
243     * Destructor
244     */
245     ~HistoryManager();
246
247     static HistoryManager* m_pHM;
248     HistoryFile m_HF;
249     HistorySearch m_HS;
250
251     std::list<std::string> m_Commands;
252
253     BOOL m_bAllowConsecutiveCommand;
254     int m_iSaveLimit;
255     int m_iSavedLines;
256
257     /**
258     * add as first line  beginning session info
259     */
260     void fixHistorySession(void);
261
262     BOOL m_bTruncated;
263
264 };
265 /*------------------------------------------------------------------------*/
266 #endif /* __cplusplus */
267 /*------------------------------------------------------------------------*/
268 #endif /* __HISTORYMANAGER_CPP_H__ */