source: titan/titan/epgrecord.h @ 26727

Last change on this file since 26727 was 23267, checked in by nit, 11 years ago

[titan] cleanup

File size: 2.6 KB
Line 
1#ifndef EPGRECORD_H
2#define EPGRECORD_H
3
4void debugepgrecord(struct epgrecord* first)
5{
6        struct epgrecord* node = first;
7
8        while(node != NULL)
9        {
10                printf("%ld - %ld\n", node->begin, node->end);
11                node = node->next;
12        }
13}
14
15struct epgrecord* addepgrecord(time_t epgbegin, time_t epgend, time_t begin, time_t end, struct epgrecord** first, struct epgrecord* last)
16{
17        struct epgrecord *newnode = NULL, *prev = NULL, *node = *first;
18
19        newnode = (struct epgrecord*)malloc(sizeof(struct epgrecord)); 
20        if(newnode == NULL)
21        {
22                err("no memory");
23                return NULL;
24        }
25
26        memset(newnode, 0, sizeof(struct epgrecord));
27
28        newnode->begin = begin;
29        newnode->end = end;
30
31        if(begin < epgbegin) begin = epgbegin;
32        if(end > epgend) end = epgend;
33        float p1 = (epgend - epgbegin) / 100;
34        newnode->posx = (begin - epgbegin) / p1;
35        newnode->size = (end - epgbegin) / p1;
36
37        if(last == NULL)
38        {
39                while(node != NULL && newnode->begin > node->begin)
40                {
41                        prev = node;
42                        node = node->next;
43                }
44        }
45        else
46        {
47                prev = last;
48                node = last->next;
49        }
50
51        if(prev == NULL)
52                *first = newnode;
53        else
54        {
55                prev->next = newnode;
56                newnode->prev = prev;
57        }
58        newnode->next = node;
59        if(node != NULL) node->prev = newnode;
60
61        return newnode;
62}
63
64void delepgrecord(struct epgrecord* epgrecordnode, struct epgrecord** first)
65{
66        struct epgrecord *node = *first, *prev = *first;
67
68        while(node != NULL)
69        {
70                if(node == epgrecordnode)
71                {
72                        if(node == *first)
73                        {
74                                *first = node->next;
75                                if(*first != NULL)
76                                        (*first)->prev = NULL;
77                        }
78                        else
79                        {
80                                prev->next = node->next;
81                                if(node->next != NULL)
82                                        node->next->prev = prev;
83                        }
84
85                        free(node);
86                        node = NULL;
87                        break;
88                }
89
90                prev = node;
91                node = node->next;
92        }
93}
94
95void freeepgrecord(struct epgrecord** first)
96{
97        struct epgrecord *node = *first, *prev = *first;
98
99        while(node != NULL)
100        {
101                prev = node;
102                node = node->next;
103                if(prev != NULL)
104                        delepgrecord(prev, first);
105        }
106}
107
108struct epgrecord* getepgrecord(struct channel* chnode, struct epg* epgnode)
109{
110        struct rectimer* rectimernode = rectimer;
111        struct epgrecord* first = NULL;
112       
113        if(epgnode == NULL) return NULL;
114
115        while(rectimernode != NULL)
116        {
117
118                if(rectimernode->begin >= epgnode->endtime || rectimernode->end <= epgnode->starttime || rectimernode->status == 2 || rectimernode->status == 3 || rectimernode->justplay != 0)
119                {
120                        rectimernode = rectimernode->next;
121                        continue;
122                }
123                if(chnode == getchannel(rectimernode->serviceid, rectimernode->transponderid))
124                        addepgrecord(epgnode->starttime, epgnode->endtime, rectimernode->begin, rectimernode->end, &first, NULL);
125
126                rectimernode = rectimernode->next;
127        }
128
129        return first;
130}
131
132#endif
Note: See TracBrowser for help on using the repository browser.