source: history.c @ ba4fde8

owl
Last change on this file since ba4fde8 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
RevLine 
[dab82f29]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
[fa00c5c]21 * developers of the branched BarnOwl project, Copyright (c)
22 * 2006-2009 The BarnOwl Developers. All rights reserved.
[dab82f29]23 */
24
[7d4fbcd]25#include "owl.h"
26
[1aee7d9]27static const char fileIdent[] = "$Id$";
28
[70b53ec]29void owl_history_init(owl_history *h)
30{
[7d4fbcd]31  owl_list_create(&(h->hist));
[10b866d]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? */
[12c35df]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;
[7d4fbcd]41}
42
[70b53ec]43char *owl_history_get_prev(owl_history *h)
44{
[10b866d]45
46  if (!h) return NULL;
[7d4fbcd]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++;
[10b866d]56
[7d4fbcd]57  return(owl_list_get_element(&(h->hist), h->cur));
58}
59
[70b53ec]60char *owl_history_get_next(owl_history *h)
61{
[10b866d]62  if (!h) return NULL;
[7d4fbcd]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
[70b53ec]72void owl_history_store(owl_history *h, char *line)
73{
[52f3507]74  int size;
[7d4fbcd]75
[10b866d]76  if (!h) return;
[12c35df]77  size=owl_list_get_size(&(h->hist));
78
[7d4fbcd]79  /* if partial is set, remove the first entry first */
80  if (h->partial) {
81    owl_list_remove_element(&(h->hist), 0);
82  }
[10b866d]83
[5a9f6fe]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
[7d4fbcd]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
[70b53ec]99void owl_history_set_partial(owl_history *h)
100{
[10b866d]101  if (!h) return;
[7d4fbcd]102  h->partial=1;
103}
104
[70b53ec]105void owl_history_reset(owl_history *h)
106{
[10b866d]107  if (!h) return;
[7d4fbcd]108  h->cur=0;
109  h->touched=0;
110  h->partial=0;
111}
112
[70b53ec]113int owl_history_is_touched(owl_history *h)
114{
[10b866d]115  if (!h) return(0);
[7d4fbcd]116  if (h->touched) return(1);
117  return(0);
118}
Note: See TracBrowser for help on using the repository browser.