source: history.c @ fa00c5c

owl
Last change on this file since fa00c5c was fa00c5c, checked in by James M. Kretchmar <kretch@mit.edu>, 15 years ago
Correct license.
  • Property mode set to 100644
File size: 2.9 KB
Line 
1/* Copyright (c) 2002,2003,2004,2009 James M. Kretchmar
2 *
3 * This file is part of Owl.
4 *
5 * Owl is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * Owl is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with Owl.  If not, see <http://www.gnu.org/licenses/>.
17 *
18 * ---------------------------------------------------------------
19 *
20 * As of Owl version 2.1.12 there are patches contributed by
21 * developers of the branched BarnOwl project, Copyright (c)
22 * 2006-2009 The BarnOwl Developers. All rights reserved.
23 */
24
25#include "owl.h"
26
27static const char fileIdent[] = "$Id$";
28
29void owl_history_init(owl_history *h)
30{
31  owl_list_create(&(h->hist));
32  h->cur=0;                     /* current position in history */
33  h->touched=0;                 /* whether we've gone into history */
34  h->partial=0;                 /* is the 0th element is partially composed? */
35  h->repeats=1;                 /* by default we'll allow repeat entries */
36}
37
38void owl_history_set_norepeats(owl_history *h)
39{
40  h->repeats=0;
41}
42
43char *owl_history_get_prev(owl_history *h)
44{
45
46  if (!h) return NULL;
47  h->touched=1;
48
49  if (owl_list_get_size(&(h->hist))==0) return(NULL);
50
51  if (h->cur == owl_list_get_size(&(h->hist))-1) {
52    return(NULL);
53  }
54
55  h->cur++;
56
57  return(owl_list_get_element(&(h->hist), h->cur));
58}
59
60char *owl_history_get_next(owl_history *h)
61{
62  if (!h) return NULL;
63  if (owl_list_get_size(&(h->hist))==0) return(NULL);
64  if (h->cur==0) {
65    return(NULL);
66  }
67
68  h->cur--;
69  return(owl_list_get_element(&(h->hist), h->cur));
70}
71
72void owl_history_store(owl_history *h, char *line)
73{
74  int size;
75
76  if (!h) return;
77  size=owl_list_get_size(&(h->hist));
78
79  /* if partial is set, remove the first entry first */
80  if (h->partial) {
81    owl_list_remove_element(&(h->hist), 0);
82  }
83
84  /* if repeats are disallowed, check if the line is the same as the last */
85  if (owl_list_get_size(&(h->hist))>0) {
86    if (!strcmp(line, owl_list_get_element(&(h->hist), 0))) return;
87  }
88
89  /* if we've reached the max history size, pop off the last element */
90  if (size>OWL_HISTORYSIZE) {
91    owl_free(owl_list_get_element(&(h->hist), size-1));
92    owl_list_remove_element(&(h->hist), size-1);
93  }
94
95  /* add the new line */
96  owl_list_prepend_element(&(h->hist), owl_strdup(line));
97}
98
99void owl_history_set_partial(owl_history *h)
100{
101  if (!h) return;
102  h->partial=1;
103}
104
105void owl_history_reset(owl_history *h)
106{
107  if (!h) return;
108  h->cur=0;
109  h->touched=0;
110  h->partial=0;
111}
112
113int owl_history_is_touched(owl_history *h)
114{
115  if (!h) return(0);
116  if (h->touched) return(1);
117  return(0);
118}
Note: See TracBrowser for help on using the repository browser.