eaaa5732606e9c90ef6fa4ca1304c2b89607c719
[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     * default filename --> SCIHOME/history.scilab
88     * @return TRUE or FALSE
89     */
90     BOOL writeToFile(char *filename);
91
92     /**
93     * load history from a file
94     * @param a filename if NULL load from default filename
95     * default filename --> SCIHOME/<scilab version>history.scilab
96     * @return TRUE or FALSE
97     */
98     BOOL loadFromFile(char *filename);
99
100     /**
101     * reset history manager
102     */
103     void reset(void);
104
105     /**
106     * Get all lines in history
107     * @param output size of the array of string
108     * @return an array of strings
109     */
110     char **getAllLines(int *numberoflines);
111
112     /**
113     * returns the first line in history
114     * @return a string
115     */
116     char *getFirstLine(void);
117
118     /**
119     * returns the last line in history
120     * @return a string
121     */
122     char *getLastLine(void);
123
124     /**
125     * get number of lines of history
126     * @return a number >= 0
127     */
128     int getNumberOfLines(void);
129
130     /**
131     * Get the Nth Line in history
132     * @param N
133     * @return the Nth Line
134     */
135     char *getNthLine(int N);
136
137     /**
138     * delete the Nth Line in history
139     * @param N
140     * @return TRUE or FALSE
141     */
142     BOOL deleteNthLine(int N);
143
144     /**
145     * Allow to save consecutive duplicate lines
146     * @param doit : TRUE (to allow) or FALSE
147     */
148     void setSaveConsecutiveDuplicateLines(BOOL doit);
149
150     /**
151     * get state about to save consecutive duplicate lines
152     * @return TRUE or FALSE
153     */
154     BOOL getSaveConsecutiveDuplicateLines(void);
155
156     /**
157     * set after how many lines history is saved
158     * @param num : number of lines
159     */
160     void setAfterHowManyLinesHistoryIsSaved(int num);
161
162     /**
163     * get after how many lines history is saved
164     * @return a int : number of lines
165     */
166     int getAfterHowManyLinesHistoryIsSaved(void);
167
168     /**
169     * set new token to search in history
170     * @param token (a string)
171     * @return TRUE or FALSE
172     */
173     BOOL setToken(char *token);
174
175     /**
176     * get token searched in history
177     * @return token (a string)
178     */
179     char *getToken(void);
180
181     /**
182     * resettoken searched in history
183     * @return TRUE or FALSE
184     */
185     BOOL resetToken(void);
186
187     /**
188     * Get the previous line in search
189     * @return a line
190     */
191     char *getPreviousLine(void);
192
193     /**
194     * Get the next line in Scilab history
195     * @return a line or NULL
196     * after an appendLine iterator go to end
197     */
198     char *getNextLine(void);
199
200     /**
201     * get info about history file was truncated
202     * @return TRUE or FALSE
203     */
204     BOOL isTruncated(void);
205
206     /**
207     *
208     */
209     BOOL setNumberOfLinesMax(int nbLinesMax);
210
211     /**
212     *
213     */
214     int getNumberOfLinesMax(void);
215
216 protected:
217
218 private:
219     HistoryFile my_file;
220     HistorySearch my_search;
221
222     list<CommandLine> CommandsList;
223
224     BOOL saveconsecutiveduplicatelines;
225     int afterhowmanylineshistoryissaved;
226     int numberoflinesbeforehistoryissaved;
227
228     /**
229     * search if line is a beginning of a session
230     * @return TRUE or FALSE
231     */
232     BOOL isBeginningSessionLine(char *line);
233
234     /**
235     * add as first line  beginning session info
236     */
237     void fixHistorySession(void);
238
239     BOOL bTruncated;
240
241 };
242 /*------------------------------------------------------------------------*/
243 #endif /* __cplusplus */
244 /*------------------------------------------------------------------------*/
245 #endif /* __HISTORYMANAGER_CPP_H__ */