chiark / gitweb /
Merge branch 'cvsimport'
[sympathy.git] / src / slide.c
1 /* 
2  * slide.c:
3  *
4  * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
5  * All rights reserved.
6  *
7  */
8
9 static char rcsid[] = "$Id: slide.c,v 1.8 2008/03/07 14:13:40 james Exp $";
10
11 /* 
12  * $Log: slide.c,v $
13  * Revision 1.8  2008/03/07 14:13:40  james
14  * *** empty log message ***
15  *
16  * Revision 1.7  2008/03/07 13:16:02  james
17  * *** empty log message ***
18  *
19  * Revision 1.6  2008/03/07 12:37:04  james
20  * *** empty log message ***
21  *
22  * Revision 1.5  2008/03/03 06:04:42  james
23  * *** empty log message ***
24  *
25  * Revision 1.4  2008/03/02 10:37:56  james
26  * *** empty log message ***
27  *
28  * Revision 1.3  2008/02/14 02:46:44  james
29  * *** empty log message ***
30  *
31  * Revision 1.2  2008/02/14 00:57:58  james
32  * *** empty log message ***
33  *
34  * Revision 1.1  2008/02/13 16:57:29  james
35  * *** empty log message ***
36  *
37  * Revision 1.3  2008/02/13 09:12:21  james
38  * *** empty log message ***
39  *
40  * Revision 1.2  2008/02/12 22:36:46  james
41  * *** empty log message ***
42  *
43  * Revision 1.1  2008/02/08 15:06:42  james
44  * *** empty log message ***
45  *
46  */
47
48 #include "project.h"
49
50 void
51 slide_free (Slide * s)
52 {
53   free (s->slide);
54   free (s);
55 }
56
57 void
58 slide_consume (Slide * s, int n)
59 {
60   s->nbytes -= n;
61
62   if (s->nbytes < 0)
63     crash_out ("slide_consume called with -ve number of bytes");
64
65   memmove (s->slide, s->slide + n, s->nbytes);
66
67   if ((s->size > s->target_size) && (s->nbytes <= s->target_size)) {
68     s->size = s->target_size;
69     s->slide = realloc (s->slide, s->size);
70   }
71
72 }
73
74 void
75 slide_added (Slide * s, int n)
76 {
77   s->nbytes += n;
78 }
79
80 Slide *
81 slide_new (int n)
82 {
83   Slide *ret = (Slide *) xmalloc (sizeof (Slide));
84
85   ret->slide = (uint8_t *) xmalloc (n);
86   ret->size = n;
87   ret->target_size = n;
88   ret->nbytes = 0;
89
90   return ret;
91 }
92
93
94 void
95 slide_expand (Slide * s, int n)
96 {
97   n += s->nbytes;
98
99   if (n <= s->size)
100     return;
101
102   while (n > s->size)
103     s->size <<= 1;
104
105   s->slide = xrealloc (s->slide, s->size);
106
107 }