* Bug #12333 fixed - Cleaned command history is restored after reopening Scilab.
[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 * 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
11 *
12 */
13
14 /*------------------------------------------------------------------------*/
15 #ifndef __HISTORYMANAGER_CPP_H__
16 #define __HISTORYMANAGER_CPP_H__
17 /*------------------------------------------------------------------------*/
18 #ifdef __cplusplus
19 /*------------------------------------------------------------------------*/
20 extern "C"
21 {
22 #include <time.h>
23 };
24 /*------------------------------------------------------------------------*/
25 #include <list>
26 #include "CommandLine.hxx"
27 #include "HistoryFile.hxx"
28 #include "HistorySearch.hxx"
29 using namespace std;
30 /*------------------------------------------------------------------------*/
31 class HistoryManager
32 {
33 public:
34     /**
35     * Constructor
36     */
37     HistoryManager();
38
39     /**
40     * Destructor
41     */
42     ~HistoryManager();
43
44     /*
45     * add a line to History manager
46     * @param a line to add
47     * line isn't added if it is the same as previous (FALSE)
48     * @return TRUE or FALSE
49     */
50     BOOL appendLine(char *cline);
51
52     /**
53     * append lines to History manager
54     * @param array of string
55     * @param size of the array of string
56     * @return TRUE or FALSE
57     */
58     BOOL appendLines(char **lines, int nbrlines);
59
60     /**
61     * Display history
62     */
63     void displayHistory(void);
64
65     /**
66     * get filename of history
67     * @return a filename
68     */
69     char *getFilename(void);
70
71     /**
72     * set filename of history
73     * @param filename of history
74     * @return TRUE or FALSE
75     */
76     void setFilename(char *filename);
77
78     /**
79     * set default filename of history
80     * @return TRUE or FALSE
81     */
82     BOOL setDefaultFilename(void);
83
84     /**
85     * save history in a file
86     * @param a filename if NULL saves in default filename
87     * @return TRUE or FALSE
88     */
89     BOOL writeToFile(char *filename);
90
91     /**
92     * load history from a file
93     * @param a filename if NULL load from default filename
94     * @return TRUE or FALSE
95     */
96     BOOL loadFromFile(char *filename);
97
98     /**
99     * reset history manager
100     */
101     void reset(void);
102
103     /**
104     * Get all lines in history
105     * @param output size of the array of string
106     * @return an array of strings
107     */
108     char **getAllLines(int *numberoflines);
109
110     /**
111     * returns the first line in history
112     * @return a string
113     */
114     char *getFirstLine(void);
115
116     /**
117     * returns the last line in history
118     * @return a string
119     */
120     char *getLastLine(void);
121
122     /**
123     * get number of lines of history
124     * @return a number >= 0
125     */
126     int getNumberOfLines(void);
127
128     /**
129     * Get the Nth Line in history
130     * @param N
131     * @return the Nth Line
132     */
133     char *getNthLine(int N);
134
135     /**
136     * delete the Nth Line in history
137     * @param N
138     * @return TRUE or FALSE
139     */
140     BOOL deleteNthLine(int N);
141
142     /**
143     * Allow to save consecutive duplicate lines
144     * @param doit : TRUE (to allow) or FALSE
145     */
146     void setSaveConsecutiveDuplicateLines(BOOL doit);
147
148     /**
149     * get state about to save consecutive duplicate lines
150     * @return TRUE or FALSE
151     */
152     BOOL getSaveConsecutiveDuplicateLines(void);
153
154     /**
155     * set after how many lines history is saved
156     * @param num : number of lines
157     */
158     void setAfterHowManyLinesHistoryIsSaved(int num);
159
160     /**
161     * get after how many lines history is saved
162     * @return a int : number of lines
163     */
164     int getAfterHowManyLinesHistoryIsSaved(void);
165
166     /**
167     * set new token to search in history
168     * @param token (a string)
169     * @return TRUE or FALSE
170     */
171     BOOL setToken(char *token);
172
173     /**
174     * get token searched in history
175     * @return token (a string)
176     */
177     char *getToken(void);
178
179     /**
180     * resettoken searched in history
181     * @return TRUE or FALSE
182     */
183     BOOL resetToken(void);
184
185     /**
186     * Get the previous line in search
187     * @return a line
188     */
189     char *getPreviousLine(void);
190
191     /**
192     * Get the next line in Scilab history
193     * @return a line or NULL
194     * after an appendLine iterator go to end
195     */
196     char *getNextLine(void);
197
198     /**
199     * get info about history file was truncated
200     * @return TRUE or FALSE
201     */
202     BOOL isTruncated(void);
203
204     /**
205     *
206     */
207     BOOL setNumberOfLinesMax(int nbLinesMax);
208
209     /**
210     *
211     */
212     int getNumberOfLinesMax(void);
213
214 protected:
215
216 private:
217     HistoryFile my_file;
218     HistorySearch my_search;
219
220     list<CommandLine> CommandsList;
221
222     BOOL saveconsecutiveduplicatelines;
223     int afterhowmanylineshistoryissaved;
224     int numberoflinesbeforehistoryissaved;
225
226     /**
227     * indicates if command line is a beginning of a session
228     * @return TRUE or FALSE
229     */
230     BOOL isBeginningSessionLine(CommandLine& line);
231
232     /**
233     * indicates if a string has the pattern "beginning of a session"
234     * @return TRUE or FALSE
235     */
236     BOOL isBeginningSessionLine(const char *line);
237
238     /**
239     * add as first line  beginning session info
240     */
241     void fixHistorySession(void);
242
243     BOOL bTruncated;
244
245 };
246 /*------------------------------------------------------------------------*/
247 #endif /* __cplusplus */
248 /*------------------------------------------------------------------------*/
249 #endif /* __HISTORYMANAGER_CPP_H__ */