source: titan/titan/pic.h @ 15272

Last change on this file since 15272 was 15169, checked in by nit, 10 years ago

[titan] add mipsel port

File size: 2.7 KB
Line 
1#ifndef PIC_H
2#define PIC_H
3
4void debugpic()
5{
6        struct pic* node = pic;
7
8        while(node != NULL)
9        {
10                printf("%s\n", node->name);
11                node = node->next;
12        }
13}
14
15struct pic* addpic(char *name, unsigned char* picbuf, int memfd, unsigned long width, unsigned long height, unsigned long rowbytes, int channels, int del, struct pic* last)
16{
17        debug(1000, "in");
18        struct pic *newnode = NULL, *prev = NULL, *node = pic;
19
20        newnode = (struct pic*)malloc(sizeof(struct pic));     
21        if(newnode == NULL)
22        {
23                err("no memory");
24                return NULL;
25        }
26
27        memset(newnode, 0, sizeof(struct pic));
28
29        newnode->name = ostrcat(name, "", 0, 0);
30        newnode->picbuf = picbuf;
31        newnode->memfd = memfd;
32        newnode->width = width;
33        newnode->height = height;
34        newnode->rowbytes = rowbytes;
35        newnode->channels = channels;
36        newnode->del = del;
37
38        if(last == NULL)
39        {
40                while(node != NULL && strcoll(newnode->name, node->name) > 0)
41                {
42                        prev = node;
43                        node = node->next;
44                }
45        }
46        else
47        {
48                prev = last;
49                node = last->next;
50        }
51
52        if(prev == NULL)
53                pic = newnode;
54        else
55                prev->next = newnode;
56
57        newnode->next = node;
58
59        debug(1000, "out");
60        return newnode;
61}
62
63void freepiccontent(struct pic* node)
64{
65        free(node->name);
66        node->name = NULL;
67
68        if(node->memfd >= 0)
69        {
70                freebpamem(node->memfd, node->picbuf, node->width * node->height * node->channels);
71                node->memfd = -1;
72        }
73        else
74                free(node->picbuf);
75
76        node->picbuf = NULL;
77}
78
79void delpic(char* name)
80{
81        debug(1000, "in");
82        struct pic *node = pic, *prev = pic;
83        char* tmpstr = NULL;
84
85        tmpstr = changepicpath(name);
86
87        while(node != NULL)
88        {
89                if(ostrcmp(node->name, tmpstr) == 0)
90                {
91                        if(node == pic)
92                                pic = node->next;
93                        else
94                                prev->next = node->next;
95
96                        freepiccontent(node);
97
98                        free(node);
99                        node = NULL;
100                        break;
101                }
102
103                prev = node;
104                node = node->next;
105        }
106        free(tmpstr);
107        debug(1000, "out");
108}
109
110void delmarkedpic(int del)
111{
112        debug(1000, "in");
113        struct pic *node = pic, *prev = pic;
114
115        while(node != NULL)
116        {
117                if(node->del == del)
118                {
119                        if(node == pic)
120                                pic = node->next;
121                        else
122                                prev->next = node->next;
123
124                        freepiccontent(node);
125
126                        free(node);
127                        node = NULL;
128                        break;
129                }
130
131                prev = node;
132                node = node->next;
133        }
134        debug(1000, "out");
135}
136
137struct pic* getpic(char* name)
138{
139        debug(1000, "in");
140        struct pic *node = pic;
141        char* tmpstr = NULL;
142
143        tmpstr = changepicpath(name);
144
145        while(node != NULL)
146        {
147                if(ostrcmp(node->name, tmpstr) == 0)
148                {
149                        debug(1000, "out");
150                        free(tmpstr);
151                        return node;
152                }
153
154                node = node->next;
155        }
156        debug(100, "pic not found (name=%s)", name);
157        free(tmpstr);
158        return NULL;
159}
160
161void freepic()
162{
163        debug(1000, "in");
164        struct pic *node = pic, *prev = pic;
165
166        while(node != NULL)
167        {
168                prev = node;
169                node = node->next;
170                if(prev != NULL)
171                        delpic(prev->name);
172        }
173        debug(1000, "out");
174}
175
176#endif
Note: See TracBrowser for help on using the repository browser.