source: titan/titan/sat.h @ 15272

Last change on this file since 15272 was 14252, checked in by nit, 12 years ago

[titan] fix spinner in channel movemode if only 1 channel exists

File size: 7.8 KB
Line 
1#ifndef SAT_H
2#define SAT_H
3
4void resetsatscan()
5{
6        struct sat *node = sat;
7
8        while(node != NULL)
9        {
10                node->scan = 0;
11                node = node->next;
12        }
13}
14
15struct sat* getsatbyorbitalpos(int orbitalpos)
16{
17        debug(1000, "in");
18        struct sat *node = sat;
19
20        while(node != NULL)
21        {
22                if(node->orbitalpos == orbitalpos)
23                {
24                        debug(1000, "out");
25                        return node;
26                }
27
28                node = node->next;
29        }
30        debug(100, "sat not found (%d)", orbitalpos);
31        return NULL;
32}
33
34char* getorbitalposstring(char* feshortname)
35{
36        int i = 0, orbitalpos = 0;
37        struct sat* node = sat;
38        char* str = NULL, *tmp = NULL, *tmpstr = NULL, *tmpnr = NULL;
39
40        if(feshortname != NULL)
41        {
42                tmpstr = ostrcat(feshortname, "_sat", 0, 0);
43                for(i = 1; i <= getmaxsat(feshortname); i++)
44                {
45                        tmpnr = oitoa(i);
46                        orbitalpos = getconfigint(tmpstr, tmpnr);
47                        free(tmpnr); tmpnr = NULL;
48
49                        node = getsatbyorbitalpos(orbitalpos);
50                        if(node != NULL)
51                        {
52                                tmp = oitoa(node->orbitalpos);
53                                str = ostrcat(str, tmp, 1, 1);
54                                str = ostrcat(str, "\n", 1, 0);
55                        }
56                }
57                free(tmpstr); tmpstr = NULL;
58
59        }
60        else
61        {
62                while(node != NULL)
63                {
64                        if(node->fetype == FE_QPSK)
65                        {
66                                tmp = oitoa(node->orbitalpos);
67                                str = ostrcat(str, tmp, 1, 1);
68                                str = ostrcat(str, "\n", 1, 0);
69                        }
70                        node = node->next;
71                }
72        }
73
74        return str;
75}
76
77char* getsatstring(char* feshortname)
78{
79        int i = 0, orbitalpos = 0;
80        struct sat* node = sat;
81        char* str = NULL, *tmpstr = NULL, *tmpnr = NULL;
82
83        if(feshortname != NULL)
84        {
85                tmpstr = ostrcat(feshortname, "_sat", 0, 0);
86                for(i = 1; i <= getmaxsat(feshortname); i++)
87                {
88                        tmpnr = oitoa(i);
89                        orbitalpos = getconfigint(tmpstr, tmpnr);
90                        free(tmpnr); tmpnr = NULL;
91
92                        node = getsatbyorbitalpos(orbitalpos);
93                        if(node != NULL)
94                        {
95                                str = ostrcat(str, node->name, 1, 0);
96                                str = ostrcat(str, "\n", 1, 0);
97                        }
98                }
99                free(tmpstr); tmpstr = NULL;
100
101        }
102        else
103        {
104                while(node != NULL)
105                {
106                        if(node->fetype == FE_QPSK)
107                        {
108                                str = ostrcat(str, node->name, 1, 0);
109                                str = ostrcat(str, "\n", 1, 0);
110                        }
111                        node = node->next;
112                }
113        }
114
115        return str;
116}
117
118struct sat* getlastsat(struct sat* node)
119{
120        debug(1000, "in");
121        struct sat *prev = NULL;
122
123        while(node != NULL || sat == NULL)
124        {
125                prev = node;
126                node = node->next;
127        }
128
129        debug(1000, "out");
130        return prev;
131}
132
133int movesatdown(struct sat* node)
134{
135        struct sat* prev = NULL, *next = NULL;
136
137        if(node == NULL || sat == NULL)
138        {
139                debug(1000, "NULL detect");
140                return 1;
141        }
142       
143        //only one node
144        if(node->prev == NULL && node->next == NULL)
145                return 0;
146
147        //last node
148        if(node->next == NULL)
149        {
150                if(node->prev != NULL)
151                        node->prev->next = NULL;
152                node->prev = NULL;
153                node->next = sat;
154                sat->prev = node;
155                sat = node;
156                return 0;
157        }
158
159        //haenge node aus
160        if(node->prev != NULL)
161                node->prev->next = node->next;
162        else
163                sat = node->next;
164        node->next->prev = node->prev;
165
166        //save nodes next and prev
167        next = node->next;
168        prev = node->prev;
169
170        //haenge es eine pos nacher ein
171        node->next = next->next;
172        node->prev = next;
173       
174        if(next->next != NULL)
175                next->next->prev = node;
176        next->next = node;
177
178        status.writesat = 1;
179        return 0;
180}
181
182int movesatup(struct sat* node)
183{
184        struct sat* prev = NULL, *next = NULL, *last = NULL;
185
186        if(node == NULL)
187        {
188                debug(1000, "NULL detect");
189                return 1;
190        }
191       
192        //only one node
193        if(node->prev == NULL && node->next == NULL)
194                return 0;
195
196        //first node
197        if(node->prev == NULL)
198        {
199                last = getlastsat(sat);
200
201                if(node->next != NULL)
202                        node->next->prev = NULL;
203                sat = node->next;
204                node->next = NULL;
205                last->next = node;
206                node->prev = last;
207                return 0;
208        }
209
210        //haenge node aus
211        node->prev->next = node->next;
212        if(node->next != NULL)
213                node->next->prev = node->prev;
214
215        //save nodes next and prev
216        next = node->next;
217        prev = node->prev;
218
219        //haenge es eine pos voher ein
220        node->next = prev;
221        node->prev = prev->prev;
222       
223        if(prev->prev != NULL)
224                prev->prev->next = node;
225        else
226                sat = node;
227        prev->prev = node;
228
229        status.writesat = 1;
230        return 0;
231}
232
233struct sat* addsat(char *line, int count, struct sat* last)
234{
235        debug(1000, "in");
236        struct sat *newnode = NULL, *prev = NULL, *node = sat;
237        char *name = NULL;
238        int ret = 0;
239
240        newnode = (struct sat*)malloc(sizeof(struct sat));     
241        if(newnode == NULL)
242        {
243                err("no memory");
244                return NULL;
245        }
246
247        name = malloc(MINMALLOC);
248        if(name == NULL)
249        {
250                err("no memory");
251                free(newnode);
252                return NULL;
253        }
254
255        memset(newnode, 0, sizeof(struct sat));
256        status.writesat = 1;
257
258        ret = sscanf(line, "%[^#]#%d#%d#%d", name, &newnode->flag, &newnode->orbitalpos, &newnode->fetype);
259        if(ret != 4)
260        {
261                if(count > 0)
262                {
263                        err("satlist line %d not ok", count);
264                }
265                else
266                {
267                        err("add sat");
268                }
269                free(name);
270                free(newnode);
271                return NULL;
272        }
273
274        newnode->name = ostrcat(name, "", 1, 0);
275
276        if(last == NULL)
277        {
278                while(node != NULL && strcoll(newnode->name, node->name) > 0)
279                {
280                        prev = node;
281                        node = node->next;
282                }
283        }
284        else
285        {
286                prev = last;
287                node = last->next;
288        }
289
290        if(prev == NULL)
291                sat = newnode;
292        else
293        {
294                prev->next = newnode;
295                newnode->prev = prev;
296        }
297        newnode->next = node;
298        if(node != NULL) node->prev = newnode;
299
300        debug(1000, "out");
301        return newnode;
302}
303
304int readsat(const char* filename)
305{
306        debug(1000, "in");
307        FILE *fd = NULL;
308        char *fileline = NULL, *tmpstr = NULL, *tmpstr0 = NULL, *tmpstr1 = NULL;
309        int linecount = 0, treffer0 = 1, treffer1 = 1;
310        struct sat* last = NULL, *tmplast = NULL;
311       
312        tmpstr0 = getconfig("channellist", NULL);
313        tmpstr1 = getconfig("rchannellist", NULL);
314        if(ostrncmp("(SAT)-", tmpstr0, 6) == 0) treffer0 = 0;
315        if(ostrncmp("(SAT)-", tmpstr1, 6) == 0) treffer1 = 0;
316
317        fileline = malloc(MINMALLOC);
318        if(fileline == NULL)
319        {
320                err("no memory");
321                return 1;
322        }
323
324        fd = fopen(filename, "r");
325        if(fd == NULL)
326        {
327                perr("can't open %s", filename);
328                free(fileline);
329                return 1;
330        }
331
332        while(fgets(fileline, MINMALLOC, fd) != NULL)
333        {
334                if(fileline[0] == '#' || fileline[0] == '\n')
335                        continue;
336                if(fileline[strlen(fileline) - 1] == '\n')
337                        fileline[strlen(fileline) - 1] = '\0';
338                if(fileline[strlen(fileline) - 1] == '\r')
339                        fileline[strlen(fileline) - 1] = '\0';
340
341                linecount++;
342
343                if(last == NULL) last = tmplast;
344                last = addsat(fileline, linecount, last);
345                if(last != NULL)
346                {
347                        tmplast = last;
348                        tmpstr = ostrcat("(SAT)-", last->name, 0, 0);
349
350                        if(treffer0 == 0 && ostrcmp(tmpstr, tmpstr0) == 0)
351                                treffer0 = 1;
352                        if(treffer1 == 0 && ostrcmp(tmpstr, tmpstr1) == 0)
353                                treffer1 = 1;
354                        free(tmpstr); tmpstr = NULL;
355                }
356        }
357       
358        if(treffer0 == 0) delconfig("channellist");
359        if(treffer1 == 0) delconfig("rchannellist");
360
361        status.writesat = 0;
362        free(fileline);
363        fclose(fd);
364        return 0;
365}
366
367void delsat(char *name)
368{
369        debug(1000, "in");
370        struct sat *node = sat, *prev = sat;
371
372        while(node != NULL)
373        {
374                if(ostrcmp(node->name, name) == 0)
375                {
376                        status.writesat = 1;
377                        if(node == sat)
378                        {
379                                sat = node->next;
380                                if(sat != NULL)
381                                        sat->prev = NULL;
382                        }
383                        else
384                        {
385                                prev->next = node->next;
386                                if(node->next != NULL)
387                                        node->next->prev = prev;       
388                        }
389
390                        deltransponderbyorbitalpos(node->orbitalpos);
391
392                        free(node->name);
393                        node->name = NULL;
394
395                        free(node);
396                        node = NULL;
397                        break;
398                }
399
400                prev = node;
401                node = node->next;
402        }
403        debug(1000, "out");
404}
405
406struct sat* getsat(char *name)
407{
408        debug(1000, "in");
409        struct sat *node = sat;
410
411        while(node != NULL)
412        {
413                if(strstr(node->name, name) != NULL)
414                {
415                        debug(1000, "out");
416                        return node;
417                }
418
419                node = node->next;
420        }
421        debug(100, "sat not found (%s)", name);
422        return NULL;
423}
424
425void freesat()
426{
427        debug(1000, "in");
428        struct sat *node = sat, *prev = sat;
429
430        while(node != NULL)
431        {
432                prev = node;
433                node = node->next;
434                if(prev != NULL)
435                        delsat(prev->name);
436        }
437        debug(1000, "out");
438}
439
440int writesat(const char *filename)
441{
442        debug(1000, "in");
443        FILE *fd = NULL;
444        struct sat *node = sat;
445        int ret = 0;
446
447        fd = fopen(filename, "w");
448        if(fd == NULL)
449        {
450                perr("can't open %s", filename);
451                return 1;
452        }
453
454        while(node != NULL)
455        {
456                ret = fprintf(fd, "%s#%d#%d#%d\n", node->name, node->flag, node->orbitalpos, node->fetype);
457
458                if(ret < 0)
459                {
460                        perr("writting file %s", filename);
461                }
462                node = node->next;
463        }
464
465        fclose(fd);
466        debug(1000, "out");
467        return 0;
468}
469
470#endif
Note: See TracBrowser for help on using the repository browser.