source: titan/titan/global.h @ 39903

Last change on this file since 39903 was 39903, checked in by gost, 6 years ago

[titan] new audiofunction for future use

File size: 166.5 KB
Line 
1#ifndef GLOBAL_H
2#define GLOBAL_H
3
4//flag 0: video+gui+freez
5//flag 1: video+gui
6//flag 2: video
7//flag 3: gui
8
9void screenshoot(int flag)
10{
11        char* cmd = NULL, *file = NULL;
12        if(flag == 0 || flag == 2)
13        {
14                videofreeze(status.aktservice->videodev);
15                sleep(1);
16        }
17
18        if(flag == 0 || flag == 1)
19                cmd = ostrcat("grab -j 100 -r 960", NULL, 0, 0);
20        else if(flag == 2)
21                cmd = ostrcat("grab -v -j 100 -r 960", NULL, 0, 0);
22        else if(flag == 3)
23                cmd = ostrcat("grab -o -j 100 -r 960", NULL, 0, 0);
24
25        if(cmd != NULL)
26        {
27                unlink("/tmp/screenshot.jpg");
28                system(cmd);
29                printf("cmd1: %s\n", cmd);
30                free(cmd), cmd = NULL;
31
32                status.screenshot++;
33                if(status.screenshot < 10)
34                        file = ostrcat("screenshot00", oitoa(status.screenshot), 0, 1);
35                else if(status.screenshot < 100)
36                        file = ostrcat("screenshot0", oitoa(status.screenshot), 0, 1);
37                else
38                        file = ostrcat("screenshot", oitoa(status.screenshot), 0, 1);
39                file = ostrcat(file, ".jpg", 1, 0);
40
41                cmd = ostrcat("mv -f /tmp/screenshot.jpg /tmp/", file, 0, 0);
42                printf("cmd2: %s\n", cmd);
43                system(cmd);
44
45                free(cmd), cmd = NULL;
46                cmd = ostrcat("ln -sf /tmp/", file, 0, 0);
47                cmd = ostrcat(cmd, " /tmp/screenshot.jpg", 1, 0);
48                printf("cmd3: %s\n", cmd);
49                system(cmd);
50        }
51        if(flag == 0 || flag == 2)
52                videocontinue(status.aktservice->videodev);
53
54        free(file), file = NULL;
55        free(cmd), cmd = NULL;
56}
57
58//flag 0: playerstart
59//flag 1: playerstop
60void set_player_sound(int flag)
61{
62#ifdef SH4
63        char* vol = NULL, *cmd = NULL;
64
65        if(flag == 0)
66                vol = ostrcat(getconfig("vol_playerstart", NULL), NULL, 0, 0);
67        else if(flag == 1)
68                vol = ostrcat(getconfig("vol_playerstop", NULL), NULL, 0, 0);
69
70        cmd = ostrcat("amixer -c 1 set Analog playback '", vol, 0, 0);
71        if(status.mute == 1)
72                cmd = ostrcat(cmd, "%' mute &", 1, 0);
73        else
74                cmd = ostrcat(cmd, "%' unmute &", 1, 0);
75        system(cmd);
76        free(cmd), cmd = NULL;
77
78        cmd = ostrcat("amixer -c 1 set SPDIF playback '", vol, 0, 0);
79        if(status.mute == 1)
80                cmd = ostrcat(cmd, "%' mute &", 1, 0);
81        else
82                cmd = ostrcat(cmd, "%' unmute &", 1, 0);
83        system(cmd);
84        free(cmd), cmd = NULL;
85
86        cmd = ostrcat("amixer -c 1 set HDMI playback '", vol, 0, 0);
87        if(status.mute == 1)
88                cmd = ostrcat(cmd, "%' mute &", 1, 0);
89        else
90                cmd = ostrcat(cmd, "%' unmute &", 1, 0);
91        system(cmd);
92        free(cmd), cmd = NULL;
93        free(vol), vol = NULL;
94#endif
95}
96
97//flag 0: with wait message
98//flag 1: without wait message
99void waitmsgbar(int sec, int exit, char* text, int flag)
100{
101        if(sec < 1) return;
102        int maxsec = sec, rcret = -1;
103
104        char* tmpstr = NULL;
105        struct skin* waitmsgbar = getscreen("waitmsgbar");
106        struct skin* load = getscreen("loading");
107
108        waitmsgbar->progresssize = 0;
109        if(text == NULL)
110                tmpstr = ostrcat("0%", NULL, 0, 0);
111        else
112                tmpstr = ostrcat(text, " (0%)", 0, 0);
113        changetext(waitmsgbar, tmpstr);
114        free(tmpstr); tmpstr = NULL;
115
116        if(flag == 0) drawscreen(load, 0, 0);
117
118        while(sec > 0)
119        {
120                drawscreen(waitmsgbar, 0, 0);
121
122                if(exit == 0)
123                        sleep(1);
124                else
125                {
126                        rcret = waitrc(0, 1000, 0);
127                        if(rcret == getrcconfigint("rcexit", NULL))
128                                break;
129
130                        if(rcret != RCTIMEOUT) continue;
131                }
132
133                sec--;
134                waitmsgbar->progresssize = ((maxsec - sec) * 100) / maxsec;
135
136                if(text == NULL)
137                        tmpstr = ostrcat(oitoa(waitmsgbar->progresssize), "%", 1, 0);
138                else
139                {
140                        tmpstr = ostrcat(text, " (", 0, 0);
141                        tmpstr = ostrcat(tmpstr, oitoa(waitmsgbar->progresssize), 1, 1);
142                        tmpstr = ostrcat(tmpstr, "%)", 1, 0);
143                }
144                changetext(waitmsgbar, tmpstr);
145                free(tmpstr); tmpstr = NULL;
146        }
147
148        free(tmpstr); tmpstr = NULL;
149        if(flag == 0) clearscreen(load);
150        clearscreen(waitmsgbar);
151        drawscreen(skin, 0, 0);
152}
153
154//flag 0: get pluginpath an add text
155//flag 1: get pluginpath and change "%pluginpath%/"
156char* createpluginpath(char* text, int flag)
157{
158        char* tmpstr = NULL;
159        if(text == NULL) return NULL;
160
161        if(flag == 0)
162        {
163          tmpstr = ostrcat(getconfig("pluginpath", NULL), text, 0, 0);
164          if(file_exist(tmpstr) == 1) return tmpstr;
165
166          free(tmpstr); tmpstr = NULL;
167          tmpstr = ostrcat(getconfig("pluginpath1", NULL), text, 0, 0);
168          if(file_exist(tmpstr) == 1) return tmpstr;
169
170          free(tmpstr); tmpstr = NULL;
171          tmpstr = ostrcat(getconfig("pluginpath2", NULL), text, 0, 0);
172          if(file_exist(tmpstr) == 1) return tmpstr;
173        }
174        else
175        {
176                if(strlen(text) < 13) return NULL;
177
178                tmpstr = ostrcat(getconfig("pluginpath", NULL), &text[12], 0, 0);
179                if(file_exist(tmpstr) == 1) return tmpstr;
180
181                free(tmpstr); tmpstr = NULL;
182                tmpstr = ostrcat(getconfig("pluginpath1", NULL), &text[12], 0, 0);
183                if(file_exist(tmpstr) == 1) return tmpstr;
184
185                free(tmpstr); tmpstr = NULL;
186                tmpstr = ostrcat(getconfig("pluginpath2", NULL), &text[12], 0, 0);
187                if(file_exist(tmpstr) == 1) return tmpstr;
188        }
189
190        free(tmpstr); tmpstr = NULL;
191        return NULL;
192}
193
194int osystem(char* cmd, int timeout)
195{
196        int ret = 0;
197        char* tmpstr = NULL;
198
199        tmpstr = ostrcat(tmpstr, "timeout -t ", 1, 0);
200        tmpstr = ostrcat(tmpstr, oitoa(timeout), 1, 1);
201        tmpstr = ostrcat(tmpstr, " -s 9 ", 1, 0);
202        tmpstr = ostrcat(tmpstr, cmd, 1, 0);
203        ret = system(tmpstr);
204        free(tmpstr); tmpstr = NULL;
205
206        return ret;
207}
208
209int wlanlinkquality()
210{
211        char dev[20];
212        int tmp = 0, linkquality = 0;
213        FILE *fd = NULL;
214        char *fileline = NULL;
215
216        struct inetwork* wlandev = getinetworkfirstwlan();
217        if(wlandev == NULL) return 0;
218
219        fileline = malloc(MINMALLOC);
220        if(fileline == NULL)
221        {
222                err("no mem");
223                return 0;
224        }
225
226        fd = fopen("/proc/net/wireless", "r");
227        if(fd == NULL)
228        {
229                perr("can't open /proc/net/wireless");
230                free(fileline);
231                return 0;
232        }
233
234        while(fgets(fileline, MINMALLOC, fd) != NULL)
235        {
236                if(ostrstr(fileline, wlandev->device) != NULL)
237                        sscanf(fileline, "%[^:]: %d %d", dev, &tmp, &linkquality);
238        }
239
240        free(fileline);
241        fclose(fd);
242        return linkquality;
243}
244
245char* getispip()
246{
247        char* tmpstr = NULL;
248        char* ip = NULL;
249        tmpstr = gethttp("checkip.dyndns.org", "", 80, NULL, NULL, 10000, NULL, 0);
250
251        if(oregex(".*<body>Current IP Address: ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})</body>.*", tmpstr))
252        {
253                ip = oregex(".*<body>Current IP Address: ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})</body>.*", tmpstr);
254        }
255        free(tmpstr), tmpstr = NULL;
256        return ip;
257}
258
259//flag 0: leave standby
260//flag 1: set standby
261int setcecstandby(int flag)
262{
263        if(getconfigint("usecec", NULL) == 1 || getconfigint("cec_on", NULL) == 1)
264        {
265#ifndef MIPSEL
266                if(flag == 0)
267                        writesys("/proc/stb/cec/onetouchplay", "0", 1);
268                else
269                {
270                        char* tmpstr = readsys("/proc/stb/cec/state_cecaddress", 1);
271                        char* tmpstr1 = readsys("/proc/stb/cec/state_activesource", 1);
272
273                        if(ostrcmp(tmpstr, tmpstr1) == 0)
274                                writesys("/proc/stb/cec/systemstandby", "0", 1);
275
276                        free(tmpstr); tmpstr = NULL;
277                        free(tmpstr1); tmpstr1 = NULL;
278                }
279#else
280                if(flag == 0)
281                {
282                        if(getconfigint("workpink", NULL) == 1);
283                                setvideomode(getconfig("576p", NULL), 0);
284                        cecwakeup();
285                        if(getconfigint("workpink", NULL) == 1);
286                        {
287                                sleep(3);
288                                setvideomode(getconfig("av_videomode", NULL), 0);
289                        }
290                }
291                else
292                {
293                        cecstandby();
294                        sleep(1);
295                        cecstandby();
296                }
297#endif
298        }
299
300        return 0;
301}
302
303char* mask(char* input, int count, char* maskchar)
304{
305        char* tmpstr = NULL;
306        int i = 0;
307
308        tmpstr = ostrcat(input, NULL, 1, 0);
309
310        if(tmpstr != NULL)
311        {
312                int len = strlen(tmpstr);
313                for(i = 0; i < count - len; i++)
314                        tmpstr = ostrcat(maskchar, tmpstr, 0, 1);
315        }
316        else
317        {
318                for(i = 0; i < count; i++)
319                        tmpstr = ostrcat(maskchar, tmpstr, 0, 1);
320        }
321
322        return tmpstr;
323}
324
325int checkinternet()
326{
327        int skip = 0, i = 0;
328        char* tmp = NULL, *cmd = NULL;
329
330        cmd = ostrcat(cmd, "google.de", 1, 0);
331
332        //if(system(cmd) != 0)
333        for(i = 0; i < 3; i++)
334        {
335                free(tmp); tmp = NULL;
336                tmp = gethttp(cmd, "/", 80, NULL, NULL, 5000, NULL, 0);
337                if(tmp != NULL) break;
338        }
339        if(tmp == NULL)
340                skip = 1;
341
342        free(tmp); tmp = NULL;
343        free(cmd), cmd = NULL;
344
345        return skip;
346}
347
348int checkpng(char* filename)
349{
350        FILE* fd = NULL;
351        int ret = 0;
352        png_bytep sig = NULL;
353
354        fd = fopen(filename, "rb");
355        if(fd == NULL)
356        {
357                perr("open file %s", filename);
358                return 0;
359        }
360
361        sig = malloc(8);
362        if(sig == NULL)
363        {
364                err("no mem");
365                fclose(fd);
366                return 0;
367        }
368
369        fread(sig, 1, 8, fd);
370        ret = png_check_sig(sig, 8);
371        if(ret == 0)
372        {
373                free(sig);
374                fclose(fd);
375                return 0;
376        }
377
378        free(sig);
379        fclose(fd);
380        return 1;
381}
382
383char **str_split(char *string, char *delim)
384{
385        char **tokens = NULL;
386        char *working = NULL;
387        char *token = NULL;
388        int idx = 0;
389
390        if(string == NULL) return NULL;
391
392        tokens = malloc(sizeof(char*) * MAXTOKENS);
393        if(tokens == NULL)
394                return NULL;
395
396        working = malloc(sizeof(char) * strlen(string) + 1);
397        if(working == NULL)
398                return NULL;
399
400         /* to make sure, copy string to a safe place */
401        strcpy(working, string);
402        for(idx = 0; idx < MAXTOKENS; idx++)
403                tokens[idx] = NULL;
404
405        token = strtok(working, delim);
406        idx = 0;
407
408        /* always keep the last entry NULL termindated */
409        while(idx < (MAXTOKENS - 1) && token != NULL)
410        {
411                tokens[idx] = malloc(sizeof(char) * strlen(token) + 1);
412                if(tokens[idx] != NULL)
413                {
414                        strcpy(tokens[idx], token);
415                        idx++;
416                        token = strtok(NULL, delim);
417                }
418        }
419
420        free(working);
421        return tokens;
422}
423
424char* readfromlinetoline(char* str, int start, int end, int flag)
425{
426        if(str == NULL) return str;
427
428        char* tmpstr = NULL;
429        int count = 0;
430        int i = 0;
431        struct splitstr* ret = NULL;
432        ret = strsplit(str, "\n", &count);
433
434        for(i = 0; i < count; i++)
435        {
436                if(i >= start && i <= end)
437                {
438                        tmpstr = ostrcat(tmpstr, (&ret[i])->part, 1, 0);
439                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
440                }
441        }
442        free(ret), ret = NULL;
443
444        if(flag == 1)
445        {
446                free(str), str = NULL;
447        }
448        return tmpstr;
449}
450
451char* ltostr(char* str, long val, unsigned base)
452{
453        ldiv_t r;
454
455        if(base > 36 || str == NULL)
456                return NULL;
457
458        if(val < 0) *str++ = '-';
459        r = ldiv(labs(val), base);
460
461        if(r.quot > 0) str = ltostr(str, r.quot, base);
462
463        *str++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];
464        *str = '\0';
465        return str;
466}
467
468char* oltostr(long val, unsigned base)
469{
470        char* str = NULL;
471
472        str = calloc(1, MINMALLOC);
473        if(str == NULL)
474        {
475                err("no mem");
476                return NULL;
477        }
478
479        ltostr(str, val, base);
480
481        return ostrshrink(str);
482}
483
484char* unhexlify(char *hexstr)
485{
486        int len = 0, tmpint = 0;
487        char *p, *q, *binstr = NULL;
488
489        if(hexstr == NULL) return NULL;
490
491        len = strlen(hexstr);
492        if(len == 0 || len % 2 != 0) return NULL;
493
494        binstr = calloc(1, (len / 2) + 1);
495        if(binstr == NULL)
496        {
497                err("no mem");
498                return NULL;
499        }
500
501        for(p = hexstr, q = binstr; *p; p += 2, q++)
502        {
503                sscanf(p, "%2x", &tmpint);
504                *q = tmpint;
505        }
506
507        return binstr;
508}
509
510int getsupermagic(char* filename)
511{
512        struct statfs64 s;
513
514        if(statfs64(filename, &s) >= 0)
515                return s.f_type;
516
517        return 0;
518}
519
520int getrandom(int max)
521{
522        srand(time(NULL));
523        return (rand() % max);
524}
525
526char* delmountpart(char* filename, int free1)
527{
528        struct mntent ent;
529        FILE *fd = NULL;
530        char* ret = NULL, *buf = NULL, *treffer = NULL, *rpath = NULL;
531        int mntdirlen = 0;
532
533        if(filename == NULL) return NULL;
534
535        buf = malloc(MINMALLOC);
536        if(buf == NULL)
537        {
538                err("no mem");
539                return NULL;
540        }
541
542        rpath = realpath(filename, NULL);
543        if(rpath == NULL) return NULL;
544
545        fd = setmntent("/proc/mounts", "r");
546        if(fd != NULL)
547        {
548                while(getmntent_r(fd, &ent, buf, MINMALLOC) != 0)
549                {
550                        if(ent.mnt_dir != NULL)
551                        {
552                                mntdirlen = strlen(ent.mnt_dir);
553                                if(mntdirlen > 1 && ostrstr(rpath, ent.mnt_dir) == rpath)
554                                {
555                                        if(treffer == NULL || strlen(treffer) < mntdirlen)
556                                        {
557                                                free(treffer); treffer = NULL;
558                                                treffer = ostrcat(ent.mnt_dir, NULL, 0, 0);
559                                        }
560                                }
561                        }
562                }
563        }
564
565        if(treffer != NULL)
566                ret = string_replace(treffer, NULL, rpath, 0);
567
568        endmntent(fd);
569        if(free1 == 1) free(filename);
570        free(buf);
571        free(treffer);
572        free(rpath);
573        return ret;
574}
575
576char* addmountpart(char* filename, int free1)
577{
578        struct mntent ent;
579        FILE *fd = NULL;
580        char* ret = NULL, *buf = NULL;
581
582        if(filename == NULL) return NULL;
583
584        buf = malloc(MINMALLOC);
585        if(buf == NULL)
586        {
587                err("no mem");
588                return NULL;
589        }
590
591        fd = setmntent("/proc/mounts", "r");
592        if(fd != NULL)
593        {
594                while(getmntent_r(fd, &ent, buf, MINMALLOC))
595                {
596                        if(ent.mnt_dir != NULL && strlen(ent.mnt_dir) > 1)
597                        {
598                                ret = ostrcat(ent.mnt_dir, filename, 0, 0);
599                                if(file_exist(ret))
600                                {
601                                        if(free1 == 1) free(filename);
602                                        endmntent(fd);
603                                        free(buf);
604                                        return ret;
605                                }
606                                free(ret); ret = NULL;
607                        }
608                }
609        }
610
611        endmntent(fd);
612        free(buf);
613        return ret;
614}
615
616unsigned int gethash(char* str)
617{
618        unsigned int hash = 0;
619        int c = 0;
620
621        if(str == NULL) return 0;
622
623        while((c = *str++))
624                hash = ((hash << 5) + hash) ^ c;
625
626        return hash;
627}
628
629void freeregexstruct(struct regex* node)
630{
631        if(node == NULL) return;
632
633        free(node->match1); node->match1 = NULL;
634        free(node->match2); node->match2 = NULL;
635        free(node->match3); node->match3 = NULL;
636        free(node->match4); node->match4 = NULL;
637        free(node->match5); node->match5 = NULL;
638        free(node->match6); node->match6 = NULL;
639        free(node->match7); node->match7 = NULL;
640        free(node->match8); node->match8 = NULL;
641        free(node->match9); node->match9 = NULL;
642        free(node->match10); node->match10 = NULL;
643
644        free(node); node = NULL;
645}
646
647struct regex* regexstruct(char* regex, char* str)
648{
649        regex_t preg = {NULL};
650        regmatch_t pmatch[11] = {{0}};
651        size_t rm = 0, i = 0, len = 0;
652        char* ret = NULL;
653        struct regex* node = NULL;
654
655        if(regex == NULL || str == NULL) return NULL;
656
657        rm = regcomp(&preg, regex, REG_EXTENDED);
658        if(rm != 0) //error in regex
659        {
660                regfree(&preg);
661                return NULL;
662        }
663
664        rm = regexec(&preg, str, 11, pmatch, 0);
665        if(rm != 0) //no match
666        {
667                regfree(&preg);
668                return NULL;
669        }
670
671        node = (struct regex*)calloc(1, sizeof(struct regex));
672        if(node == NULL)
673        {
674                err("no mem");
675                regfree(&preg);
676                return NULL;
677        }
678
679        for(i = 1; !rm && i <= preg.re_nsub; i++)
680        {
681                len = pmatch[i].rm_eo - pmatch[i].rm_so;
682                if(len < 1) continue;
683
684                ret = malloc(len + 1);
685                if(ret != NULL)
686                {
687                        memcpy(ret, str + pmatch[i].rm_so, len);
688                        ret[len] = '\0';
689                }
690
691                if(i == 1) node->match1 = ret;
692                else if(i == 2) node->match2 = ret;
693                else if(i == 3) node->match3 = ret;
694                else if(i == 4) node->match4 = ret;
695                else if(i == 5) node->match5 = ret;
696                else if(i == 6) node->match6 = ret;
697                else if(i == 7) node->match7 = ret;
698                else if(i == 8) node->match8 = ret;
699                else if(i == 9) node->match9 = ret;
700                else if(i == 10) node->match10 = ret;
701
702                ret = NULL;
703        }
704
705        regfree(&preg);
706        return node;
707}
708
709char* oregex(char* regex, char* str)
710{
711        regex_t preg = {NULL};
712        regmatch_t pmatch[2] = {{0}};
713        size_t rm = 0, len = 0;
714        char* ret = NULL;
715
716        if(regex == NULL || str == NULL) return NULL;
717
718        rm = regcomp(&preg, regex, REG_EXTENDED);
719        if(rm != 0) //error in regex
720        {
721                regfree(&preg);
722                return NULL;
723        }
724
725        rm = regexec(&preg, str, 2, pmatch, 0);
726        if(rm != 0) //no match
727        {
728                regfree(&preg);
729                return NULL;
730        }
731
732        len = pmatch[1].rm_eo - pmatch[1].rm_so;
733        if(len < 1)
734        {
735                regfree(&preg);
736                return NULL;
737        }
738
739        ret = malloc(len + 1);
740        if(ret != NULL)
741        {
742                memcpy(ret, str + pmatch[1].rm_so, len);
743                ret[len] = '\0';
744        }
745
746        regfree(&preg);
747        return ret;
748}
749
750int oregexint(char* regex, char* str)
751{
752        int iret = 0;
753        char* ret = NULL;
754
755        ret = oregex(regex, str);
756        if(ret != NULL) iret = atoi(ret);
757        free(ret);
758
759        return iret;
760}
761
762struct splitstr* oregexsplit(char* regex, char *str, char *tok, int* count)
763{
764        char *tmpstr = NULL;
765        struct splitstr *array = NULL, *tmparray = NULL;
766        *count = 0;
767
768        if(str == NULL || tok == NULL)
769                return NULL;
770
771        tmpstr = strtok(str, tok);
772        while(tmpstr != NULL)
773        {
774                *count = *count + 1;
775                tmparray = array; array = (struct splitstr*)realloc(array, sizeof(struct splitstr*) * (*count));
776                if(array == NULL)
777                {
778                        err("no mem");
779                        free(tmparray);
780                        return NULL;
781                }
782
783                (&array[(*count) - 1])->part = oregex(regex, tmpstr);
784                tmpstr = strtok(NULL, tok);
785        }
786
787        return array;
788}
789
790void freeoregexsplit(struct splitstr* tmparray, int len)
791{
792        if(tmparray == NULL) return;
793        int i = 0;
794
795        for(i = 0; i < len; i++)
796        {
797                free(tmparray[i].part);
798                tmparray[i].part = NULL;
799        }
800
801        free(tmparray);
802}
803
804int getmaxsat(char* feshortname)
805{
806        char *tmpstr = NULL;
807        int maxsat = 1;
808
809        if(feshortname != NULL)
810        {
811                tmpstr = ostrcat(feshortname, "_maxsat", 0, 0);
812                maxsat = getconfigint(tmpstr, NULL);
813                free(tmpstr); tmpstr = NULL;
814        }
815        if(maxsat < 0) maxsat = 1;
816
817        return maxsat;
818}
819
820void autochangechannelname()
821{
822        uint8_t lastsecnr = 0xff;
823        int secnr = 0;
824        unsigned char* buf = NULL;
825
826        if(status.aktservice->fedev == NULL) return;
827
828        while(secnr <= lastsecnr && secnr <= 256)
829        {
830                buf = dvbgetsdt(status.aktservice->fedev, secnr, 2000000);
831                if(buf != NULL)
832                        findchannel(status.aktservice->fedev, NULL, buf, &lastsecnr, NULL, NULL, 1, 1);
833                else
834                        break;
835                free(buf); buf = NULL;
836                secnr++;
837        }
838}
839
840int isbase64(char c)
841{
842        if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '+' || c == '/' || c == '=')
843                return 1;
844        return 0;
845}
846
847char decodebase64(char c)
848{
849        if(c >= 'A' && c <= 'Z') return(c - 'A');
850        if(c >= 'a' && c <= 'z') return(c - 'a' + 26);
851        if(c >= '0' && c <= '9') return(c - '0' + 52);
852        if(c == '+') return(62);
853        return 63;
854}
855
856int b64dec(char* dest, char* src)
857{
858        if(src && *src)
859        {
860                char* p = dest;
861                int k, l = strlen(src) + 1;
862                char* buf = NULL;
863
864                buf = malloc(l);
865                if(buf == NULL) return 0;
866
867                for(k = 0, l = 0; src[k]; k++)
868                {
869                        if(isbase64(src[k]))
870                                buf[l++] = src[k];
871                }
872
873                for(k = 0; k < l; k += 4)
874                {
875                        char c1 = 'A', c2 = 'A', c3 = 'A', c4 = 'A';
876                        char b1 = 0, b2 = 0, b3 = 0, b4 = 0;
877
878                        c1 = buf[k];
879                        if(k + 1 < l)
880                                c2 = buf[k + 1];
881                        if(k + 2 < l)
882                                c3 = buf[k + 2];
883                        if(k + 3 < l)
884                                c4 = buf[k + 3];
885
886                        b1 = decodebase64(c1);
887                        b2 = decodebase64(c2);
888                        b3 = decodebase64(c3);
889                        b4 = decodebase64(c4);
890
891                        *p++ = ((b1 << 2) | (b2 >> 4));
892
893                        if(c3 != '=')
894                                *p++ = (((b2 & 0xf) << 4) | (b3 >> 2));
895                        if(c4 != '=')
896                                *p++ = (((b3 & 0x3) << 6) | b4);
897
898                        // strip last unchanged chars
899                        if(k == l-4)
900                                *p++ = '\0';
901
902                }
903
904                free(buf);
905                return(p - dest);
906        }
907        return 0;
908}
909
910void changechannellist(struct channel* chnode, char* channellist)
911{
912                char* tmpstr = NULL;
913
914                if(chnode == NULL || status.aktservice->channel == NULL) return;
915
916                if(chnode->servicetype != 99) status.servicetype = chnode->servicetype;
917                if(status.servicetype == 0)
918                {
919                        if(channellist != NULL)
920                        {
921                                tmpstr = ostrcat(channellist, NULL, 0, 0);
922                                free(status.aktservice->channellist);
923                                status.aktservice->channellist = tmpstr;
924                                addconfig("channellist", tmpstr);
925                        }
926                        tmpstr = oitoa(status.aktservice->channel->serviceid);
927                        addconfig("serviceid", tmpstr);
928                        free(tmpstr); tmpstr = NULL;
929                        tmpstr = ollutoa(status.aktservice->channel->transponderid);
930                        addconfig("transponderid", tmpstr);
931                        free(tmpstr); tmpstr = NULL;
932                }
933                else
934                {
935                        if(channellist != NULL)
936                        {
937                                tmpstr = ostrcat(channellist, NULL, 0, 0);
938                                free(status.aktservice->channellist);
939                                status.aktservice->channellist = tmpstr;
940                                addconfig("rchannellist", tmpstr);
941                        }
942                        tmpstr = oitoa(status.aktservice->channel->serviceid);
943                        addconfig("rserviceid", tmpstr);
944                        free(tmpstr); tmpstr = NULL;
945                        tmpstr = ollutoa(status.aktservice->channel->transponderid);
946                        addconfig("rtransponderid", tmpstr);
947                        free(tmpstr); tmpstr = NULL;
948                }
949}
950
951//flag 0: normal picons
952//flag 1: alternate picons
953char* createpiconpath(struct channel* chnode, int flag)
954{
955        char* tmpstr = NULL, *picon = NULL;
956
957        if(chnode != NULL)
958        {
959                picon = ostrcat("/", oitoa(chnode->serviceid), 0, 1);
960                picon = ostrcat(picon, "-", 1, 0);
961                picon = ostrcat(picon, ollutoa(chnode->transponderid), 1, 1);
962                picon = ostrcat(picon, ".png", 1, 0);
963
964                if(flag == 1)
965                        tmpstr = ostrcat("/mnt/swapextensions/usr/local/share/titan/picons/alternate", picon, 0, 0);
966                else
967                        tmpstr = ostrcat("/mnt/swapextensions/usr/local/share/titan/picons", picon, 0, 0);
968                if(isfile(tmpstr))
969                {
970                        free(picon);
971                        return tmpstr;
972                }
973
974                free(tmpstr); tmpstr = NULL;
975                if(flag == 1)
976                        tmpstr = ostrcat("/var/swap/usr/local/share/titan/picons/alternate", picon, 0, 0);
977                else
978                        tmpstr = ostrcat("/var/swap/usr/local/share/titan/picons", picon, 0, 0);
979                if(isfile(tmpstr))
980                {
981                        free(picon);
982                        return tmpstr;
983                }
984
985                free(tmpstr); tmpstr = NULL;
986                if(flag == 1)
987                        tmpstr = ostrcat("/var/usr/local/share/titan/picons/alternate", picon, 0, 0);
988                else
989                        tmpstr = ostrcat("/var/usr/local/share/titan/picons", picon, 0, 0);
990                if(isfile(tmpstr))
991                {
992                        free(picon);
993                        return tmpstr;
994                }
995        }
996
997        free(tmpstr); tmpstr = NULL;
998        tmpstr = ostrcat(tmpstr, getconfig("defskinpath", NULL), 1, 0);
999        tmpstr = ostrcat(tmpstr, "/skin/", 1, 0);
1000        tmpstr = ostrcat(tmpstr, "defpicon.png", 1, 0);
1001
1002        free(picon);
1003        return tmpstr;
1004}
1005
1006int checkskin()
1007{
1008        int ret = 0;
1009        char* defskinpath = NULL;
1010        char* defskinconfig = NULL;
1011        char* defskinfile = NULL;
1012
1013        if(file_exist(getconfig("skinpath", NULL)) == 0)
1014                ret = 1;
1015        else if(file_exist(getconfig("skinconfig", NULL)) == 0)
1016                ret = 2;
1017        else if(file_exist(getconfig("skinfile", NULL)) == 0)
1018                ret = 3;
1019
1020        if(ret != 0)
1021        {
1022                err("skin not found code=%d, change to default", ret);
1023
1024                defskinpath = getconfig("defskinpath", NULL);
1025                if(defskinpath != NULL) addconfig("skinpath", defskinpath);
1026                defskinconfig = getconfig("defskinconfig", NULL);
1027                if(defskinconfig != NULL) addconfig("skinconfig", defskinconfig);
1028                defskinfile = getconfig("defskinfile", NULL);
1029                if(defskinfile != NULL) addconfig("skinfile", defskinfile);
1030
1031                ret = 0;
1032                if(file_exist(getconfig("skinpath", NULL)) == 0)
1033                        ret = 1;
1034                else if(file_exist(getconfig("skinconfig", NULL)) == 0)
1035                        ret = 2;
1036                else if(file_exist(getconfig("skinfile", NULL)) == 0)
1037                        ret = 3;
1038        }
1039
1040        if(ret != 0)
1041        {
1042                err("default skin not found code=%d", ret);
1043        }
1044
1045        return ret;
1046}
1047
1048int getaktvideosize()
1049{
1050        //wait 3 sek after zap, befor videsize is valid
1051        //driver takes a little time
1052        if(status.videosizevalid == 1)
1053                return 0;
1054        else if(status.videosizevalid + 3 > time(NULL))
1055                return 1;
1056        else
1057        {
1058#ifndef SIMULATE
1059                if(videoreadqwidth(status.aktservice->videodev) == 0)
1060#endif
1061                {
1062                        status.videosizevalid = 1;
1063                        return 0;
1064                }
1065        }
1066
1067        return 1;
1068}
1069
1070int ostrftime(char* buf, int count, char* format, struct tm* t)
1071{
1072        int ret = -1;
1073
1074        if(buf == NULL || t == NULL) return ret;
1075
1076        if(format != NULL)
1077                ret = strftime(buf, count, format, t);
1078        else
1079                ret = strftime(buf, count, "%d-%m-%Y %H:%M", t);
1080
1081        return ret;
1082}
1083
1084//flag 0 = write all
1085//flag 1 = don't write epg
1086//flag 2 = only write epg
1087//flag 3 = only write config
1088int writeallconfig(int flag)
1089{
1090        char* tmpstr = NULL;
1091        int ret = 0;
1092
1093        if(flag == 0 || flag == 1)
1094        {
1095                if(status.writerectimer == 1)
1096                        if(writerectimer(getconfig("rectimerfile", NULL), 0) != 0)
1097                                ret = 1;
1098                if(status.writesat == 1)
1099                        if(writesat(getconfig("satfile", NULL)) != 0)
1100                                ret = 1;
1101                if(status.writeplaylist == 1)
1102                        if(writeallplaylist() != 0)
1103                                ret = 1;
1104                if(status.writemainplaylist == 1)
1105                        if(writemainplaylist(getconfig("playlistfile", NULL)) != 0)
1106                                ret = 1;
1107                if(status.writebouquet == 1)
1108                        if(writeallbouquet() != 0)
1109                                ret = 1;
1110                if(status.writemainbouquet == 1)
1111                        if(writemainbouquet(getconfig("bouquetfile", NULL)) != 0)
1112                                ret = 1;
1113                if(status.writechannel == 1)
1114                        if(writechannel(getconfig("channelfile", NULL)) != 0)
1115                                ret = 1;
1116                if(status.writetransponder == 1)
1117                        if(writetransponder(getconfig("transponderfile", NULL)) != 0)
1118                                ret = 1;
1119                if(status.writeprovider == 1)
1120                        if(writeprovider(getconfig("providerfile", NULL)) != 0)
1121                                ret = 1;
1122                if(status.writeownconfig == 1)
1123                        if(writeownconfig(getconfig("ownconfig", NULL)) != 0)
1124                                ret = 1;
1125                if(status.writeepgscanlist == 1)
1126                        if(writeepgscanlist(getconfig("epgchannelfile", NULL)) != 0)
1127                                ret = 1;
1128                if(status.writercconfig == 1)
1129                        if(writercconfig(getconfig("rcconfig", NULL)) != 0)
1130                                ret = 1;
1131                if(status.writeskinconfig == 1)
1132                        if(writeskinconfig(getconfig("skinconfig", NULL)) != 0)
1133                                ret = 1;
1134                if(status.writemostzap == 1)
1135                        if(writemostzap(getconfig("mostzapfile", NULL)) != 0)
1136                                ret = 1;
1137                if(status.writelastsubtitle == 1)
1138                        if(writelastsubtitle(getconfig("lastsubtitle", NULL)) != 0)
1139                                ret = 1;
1140                if(status.writechannelslot == 1)
1141                        if(writechannelslot(getconfig("channelslotfile", NULL)) != 0)
1142                                ret = 1;
1143        }
1144        if(flag == 0 || flag == 1 || flag == 3)
1145        {
1146                if(status.writeconfig == 1)
1147                {
1148                        addconfigint("vol", getvol());
1149                        if(writeconfig(status.configfile) != 0)
1150                                ret = 1;
1151                }
1152        }
1153        if((flag == 0 || flag == 2) && time(NULL) > 1072224000) // 01.01.2004
1154        {
1155                tmpstr = createpath(getconfig("epg_path", NULL), "epg.dat");
1156                if(writeepg(tmpstr) != 0)
1157                        ret = 1;
1158                free(tmpstr); tmpstr = NULL;
1159        }
1160
1161        sync();
1162
1163        return ret;
1164}
1165
1166void* writeallconfigthread0()
1167{
1168        writeallconfig(0);
1169        pthread_exit(NULL);
1170}
1171
1172void* writeallconfigthread1()
1173{
1174        writeallconfig(1);
1175        pthread_exit(NULL);
1176}
1177
1178void initmutex(int flag)
1179{
1180        if(flag == 1)
1181        {
1182                pthread_mutex_init(&status.drawingmutex, NULL);
1183                pthread_mutex_init(&status.rectimermutex, NULL);
1184                pthread_mutex_init(&status.servicemutex, NULL);
1185                pthread_mutex_init(&status.epgmutex, NULL);
1186                pthread_mutex_init(&status.vfdmutex, NULL);
1187                pthread_mutex_init(&status.channelmutex, NULL);
1188                pthread_mutex_init(&status.timerthreadmutex, NULL);
1189                pthread_mutex_init(&status.audiotrackmutex, NULL);
1190                pthread_mutex_init(&status.subtitlemutex, NULL);
1191                pthread_mutex_init(&status.dmxdevmutex, NULL);
1192                pthread_mutex_init(&status.rcmutex, NULL);
1193                pthread_mutex_init(&status.queuemutex, NULL);
1194                pthread_mutex_init(&status.clistmutex, NULL);
1195                pthread_mutex_init(&status.hddmutex, NULL);
1196                pthread_mutex_init(&status.linkedchannelmutex, NULL);
1197                pthread_mutex_init(&status.tsseekmutex, NULL);
1198                pthread_mutex_init(&status.accelfbmutex, NULL);
1199                pthread_mutex_init(&status.mediadbmutex, NULL);
1200                pthread_mutex_init(&status.oldentrymutex, NULL);
1201                pthread_mutex_init(&status.newslettermutex, NULL);
1202                pthread_mutex_init(&status.tithekmutex, NULL);
1203                pthread_mutex_init(&status.inetworkmutex, NULL);
1204                pthread_mutex_init(&status.textboxmutex, NULL);
1205                pthread_mutex_init(&status.setaktresmutex, NULL);
1206                pthread_mutex_init(&status.waitrcmutex, NULL);
1207                pthread_mutex_init(&status.oledmutex, NULL);
1208        }
1209        else
1210        {
1211                pthread_mutex_destroy(&status.drawingmutex);
1212                pthread_mutex_destroy(&status.rectimermutex);
1213                pthread_mutex_destroy(&status.servicemutex);
1214                pthread_mutex_destroy(&status.epgmutex);
1215                pthread_mutex_destroy(&status.vfdmutex);
1216                pthread_mutex_destroy(&status.channelmutex);
1217                pthread_mutex_destroy(&status.timerthreadmutex);
1218                pthread_mutex_destroy(&status.audiotrackmutex);
1219                pthread_mutex_destroy(&status.subtitlemutex);
1220                pthread_mutex_destroy(&status.dmxdevmutex);
1221                pthread_mutex_destroy(&status.rcmutex);
1222                pthread_mutex_destroy(&status.queuemutex);
1223                pthread_mutex_destroy(&status.clistmutex);
1224                pthread_mutex_destroy(&status.hddmutex);
1225                pthread_mutex_destroy(&status.linkedchannelmutex);
1226                pthread_mutex_destroy(&status.tsseekmutex);
1227                pthread_mutex_destroy(&status.accelfbmutex);
1228                pthread_mutex_destroy(&status.mediadbmutex);
1229                pthread_mutex_destroy(&status.oldentrymutex);
1230                pthread_mutex_destroy(&status.newslettermutex);
1231                pthread_mutex_destroy(&status.tithekmutex);
1232                pthread_mutex_destroy(&status.inetworkmutex);
1233                pthread_mutex_destroy(&status.textboxmutex);
1234                pthread_mutex_destroy(&status.setaktresmutex);
1235                pthread_mutex_destroy(&status.waitrcmutex);
1236                pthread_mutex_destroy(&status.oledmutex);
1237        }
1238}
1239
1240int hexit(char c)
1241{
1242        if(c >= '0' && c <= '9')
1243                return c - '0';
1244        if(c >= 'a' && c <= 'f')
1245                return c - 'a' + 10;
1246        if(c >= 'A' && c <= 'F')
1247                return c - 'A' + 10;
1248
1249        return 0;
1250}
1251
1252char* htmlencode(char* from)
1253{
1254        int buflen = 0;
1255        char* buf = NULL, *to = NULL;
1256
1257        buf = calloc(1, MINMALLOC);
1258        if(buf == NULL)
1259        {
1260                err("no mem");
1261                return NULL;
1262        }
1263        to = buf;
1264
1265        for(buflen = 0; *from != '\0' && buflen < MINMALLOC; ++from)
1266        {
1267                if(isalnum(*from) || strchr("/_.-~", *from) != NULL)
1268                {
1269                        *to = *from;
1270                        ++to;
1271                        ++buflen;
1272                }
1273                else
1274                {
1275                        sprintf(to, "%%%02x", (int)*from & 0xff);
1276                        to += 3;
1277                        buflen += 3;
1278                }
1279        }
1280        *to = '\0';
1281
1282        buf = ostrshrink(buf);
1283        return buf;
1284}
1285
1286void htmldecode(char* to, char* from)
1287{
1288        if(to == NULL || from == NULL) return;
1289
1290        for(; *from != '\0'; ++to, ++from)
1291        {
1292                if(from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2]))
1293                {
1294                        *to = hexit(from[1]) * 16 + hexit(from[2]);
1295                        from += 2;
1296                }
1297                else
1298                        *to = *from;
1299        }
1300        *to = '\0';
1301}
1302
1303void htmldecode2(char* to, char* from)
1304{
1305        if(to == NULL || from == NULL) return;
1306
1307        for(; *from != '\0'; ++to, ++from)
1308        {
1309                if(from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2]) && isxdigit(from[3]) && isxdigit(from[4]))
1310                {
1311                        *to = hexit(from[1]) * 16 + hexit(from[2]) * 16 + hexit(from[3]) * 16 + hexit(from[4]);
1312                        from += 4;
1313                }
1314                else if(from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2]) && isxdigit(from[3]))
1315                {
1316                        *to = hexit(from[1]) * 16 + hexit(from[2]) * 16 + hexit(from[3]);
1317                        from += 3;
1318                }
1319                else if(from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2]))
1320                {
1321                        *to = hexit(from[1]) * 16 + hexit(from[2]);
1322                        from += 2;
1323                }
1324                else
1325                        *to = *from;
1326        }
1327        *to = '\0';
1328}
1329
1330void htmldecode3(char* to, char* from)
1331{
1332        if(to == NULL || from == NULL) return;
1333
1334        for(; *from != '\0'; ++to, ++from)
1335        {
1336                if(from[0] == '\\' && from[1] == 'u' && isxdigit(from[2]) && isxdigit(from[3]) && isxdigit(from[4]) && isxdigit(from[5]) && isxdigit(from[6]) && isxdigit(from[7]))
1337                {
1338                        *to = hexit(from[2]) * 1048576 + hexit(from[3]) * 65536 + hexit(from[4]) * 4096 + hexit(from[5]) * 256 + hexit(from[6]) * 16 + hexit(from[7]);
1339                        from += 7;
1340                }
1341                if(from[0] == '\\' && from[1] == 'u' && isxdigit(from[2]) && isxdigit(from[3]) && isxdigit(from[4]) && isxdigit(from[5]))
1342                {
1343                        *to = hexit(from[2]) * 4096 + hexit(from[3]) * 256 + hexit(from[4]) * 16 + hexit(from[5]);
1344                        from += 5;
1345                }
1346                else
1347                        *to = *from;
1348        }
1349        *to = '\0';
1350}
1351
1352void setosdtransparent(int value)
1353{
1354        int ret = 255;
1355        if(value < 0) value = 0;
1356        if(value > 100) value = 100;
1357
1358        ret -= value * 2.55;
1359
1360        setfbtransparent(ret);
1361}
1362
1363struct tm* olocaltime(time_t *value)
1364{
1365        struct tm *loctime, *loctime1 = NULL;
1366
1367        loctime1 = (struct tm*)malloc(sizeof(struct tm));
1368        if(loctime1 == NULL)
1369        {
1370                err("no mem");
1371                return NULL;
1372        }
1373        loctime = localtime_r(value, loctime1);
1374
1375        return loctime;
1376}
1377
1378int setwakeuptimer(time_t waketime)
1379{
1380        char* wakeuptimerprog = NULL;
1381        struct tm *loctime = NULL;
1382        char *buf = NULL;
1383        int ret = -1;
1384
1385        wakeuptimerprog = getconfig("wakeuptimerprog", NULL);
1386
1387        if(wakeuptimerprog == NULL)
1388        {
1389                err("NULL detect");
1390                return ret;
1391        }
1392
1393        buf = malloc(MINMALLOC);
1394        if(buf == NULL)
1395        {
1396                err("no mem");
1397                return ret;
1398        }
1399
1400        loctime = olocaltime(&waketime);
1401
1402        if(loctime != NULL)
1403                ostrftime(buf, MINMALLOC, wakeuptimerprog, loctime);
1404
1405        if(buf != NULL)
1406        {
1407                debug(10, "set wake up timer (%s)", buf);
1408                ret = system(buf);
1409        }
1410
1411        free(loctime);
1412        free(buf);
1413        return ret;
1414}
1415
1416int autoresolution()
1417{
1418        char *hotpluginfo = NULL;
1419        char *value = NULL;
1420
1421        if(getconfig("av_videomode", NULL) != NULL || getconfig("av_colorformat", NULL))
1422                return 1;
1423
1424        hotpluginfo = getconfig("hotpluginfo", NULL);
1425
1426        if(hotpluginfo == NULL)
1427        {
1428                err("NULL detect");
1429                return 1;
1430        }
1431
1432        value = readsys(hotpluginfo, 1);
1433        if(value == NULL)
1434        {
1435                err("NULL detect");
1436                return 1;
1437        }
1438
1439        if(value[0] == 'y')
1440        {
1441                setvideomode("720p50", 0);
1442                changefbresolution("720p50", 0);
1443                setcolorformat("hdmi_rgb", 0);
1444        }
1445        else
1446        {
1447                setvideomode("576i50", 0);
1448                changefbresolution("576i50", 0);
1449                setcolorformat("rgb", 1);
1450        }
1451
1452        free(value);
1453        return 0;
1454}
1455
1456//TODO: can remove if new function work
1457/*
1458int writelengthfield(unsigned char *buf, unsigned int len)
1459{
1460        if(len < 127)
1461        {
1462                *buf++ = len;
1463                return 1;
1464        }
1465        else if(len < 256)
1466        {
1467                *buf++ = 0x81;
1468                *buf++ = len;
1469                return 2;
1470        }
1471        else if(len < 65535)
1472        {
1473                *buf++ = 0x82;
1474                *buf++ = len >> 8;
1475                *buf++ = len;
1476                return 3;
1477        }
1478
1479        return 0;
1480}
1481*/
1482
1483size_t writelengthfield(unsigned char * buf, unsigned int len)
1484{
1485        if(buf == NULL) return 0;
1486
1487        if(len < 128)
1488        {
1489                buf[0] = len;
1490                return 1;
1491        }
1492        else
1493        {
1494                unsigned int pos = 0;
1495                unsigned int shiftby = 8;
1496                unsigned char lenfieldsize = 1;
1497
1498                while((len >> shiftby) != 0)
1499                {
1500                        lenfieldsize++;
1501                        shiftby += 8;
1502                }
1503
1504                buf[pos++] = ((1 << 7) | lenfieldsize);
1505
1506                while(shiftby != 0)
1507                {
1508                        shiftby -= 8;
1509                        buf[pos++] = len >> shiftby;
1510                }
1511                return pos;
1512        }
1513}
1514
1515//flag 0: del non alpha/num
1516//flag 1: change all /
1517//flag 2: change all non filename conform chars
1518//flag 3: replace non alpha/num with _
1519void delspezchar(char* text, int flag)
1520{
1521        char* tmpstr = text;
1522
1523        if(text == NULL) return;
1524
1525        while(*tmpstr != '\0')
1526        {
1527                if(flag == 1 || flag == 2)
1528                {
1529                        if(tmpstr[0] == '/') tmpstr[0] = '-';
1530                        if(flag == 2)
1531                        {
1532                                if(tmpstr[0] == '§') tmpstr[0] = '-';
1533                                if(tmpstr[0] == '<') tmpstr[0] = '-';
1534                                if(tmpstr[0] == '>') tmpstr[0] = '-';
1535                                if(tmpstr[0] == ':') tmpstr[0] = '-';
1536                                if(tmpstr[0] == '"') tmpstr[0] = '-';
1537                                if(tmpstr[0] == '\\') tmpstr[0] = '-';
1538                                if(tmpstr[0] == '|') tmpstr[0] = '-';
1539                                if(tmpstr[0] == '*') tmpstr[0] = '-';
1540                                if(tmpstr[0] == '?') tmpstr[0] = '-';
1541                                if(tmpstr[0] == '[') tmpstr[0] = '-';
1542                                if(tmpstr[0] == ']') tmpstr[0] = '-';
1543                                if(tmpstr[0] == '=') tmpstr[0] = '-';
1544                                if(tmpstr[0] == '%') tmpstr[0] = '-';
1545                                if(tmpstr[0] == '$') tmpstr[0] = '-';
1546                                if(tmpstr[0] == ',') tmpstr[0] = '-';
1547                                if(tmpstr[0] == ';') tmpstr[0] = '-';
1548                                if(tmpstr[0] == '~') tmpstr[0] = '-';
1549                                if(tmpstr[0] == '&') tmpstr[0] = '-';
1550                        }
1551                }
1552                else if(flag == 3)
1553                {
1554                        if(!isalnum(tmpstr[0]) && tmpstr[0] != '-')
1555                                tmpstr[0] = '_';
1556                }
1557                else
1558                {
1559                        if(!isalnum(tmpstr[0]) && tmpstr[0] != '-' && tmpstr[0] != '.')
1560                                tmpstr[0] = ' ';
1561                }
1562                tmpstr++;
1563        }
1564}
1565
1566void m_lock(pthread_mutex_t *mutex, int flag)
1567{
1568        switch(flag)
1569        {
1570                case 0: debug(900, "drawingmutex lock"); break;
1571                case 1: debug(900, "rectimermutex lock"); break;
1572                case 2: debug(900, "servicemutex lock"); break;
1573                case 3: debug(900, "vfdmutex lock"); break;
1574                case 4: debug(900, "epgmutex lock"); break;
1575                case 5: debug(900, "channelmutex lock"); break;
1576                case 6: debug(900, "timerthreadmutex lock"); break;
1577                case 7: debug(900, "audiotrackmutex lock"); break;
1578                case 8: debug(900, "subtitlemutex lock"); break;
1579                case 9: debug(900, "dmxdevmutex lock"); break;
1580                case 10: debug(900, "rcmutex lock"); break;
1581                case 11: debug(900, "queuemutex lock"); break;
1582                case 12: debug(900, "clistmutex lock"); break;
1583                case 13: debug(900, "hddmutex lock"); break;
1584                case 14: debug(900, "linkedchannelmutex lock"); break;
1585                case 15: debug(900, "tsseekmutex lock"); break;
1586                case 16: debug(900, "accelfbmutex lock"); break;
1587                case 17: debug(900, "mediadbmutex lock"); break;
1588                case 18: debug(900, "oldentrymutex lock"); break;
1589                case 19: debug(900, "newslettermutex lock"); break;
1590                case 20: debug(900, "tithekmutex lock"); break;
1591                case 21: debug(900, "inetworkmutex lock"); break;
1592                case 22: debug(900, "textboxmutex lock"); break;
1593                case 23: debug(900, "setaktresmutex lock"); break;
1594                case 24: debug(900, "waitrcmutex lock"); break;
1595                case 25: debug(900, "oledmutex lock"); break;
1596                default: debug(900, "unknown mutex lock"); break;
1597        }
1598        pthread_mutex_lock(mutex);
1599}
1600
1601void m_unlock(pthread_mutex_t *mutex, int flag)
1602{
1603        switch(flag)
1604        {
1605                case 0: debug(900, "drawingmutex unlock"); break;
1606                case 1: debug(900, "rectimermutex unlock"); break;
1607                case 2: debug(900, "servicemutex unlock"); break;
1608                case 3: debug(900, "vfdmutex unlock"); break;
1609                case 4: debug(900, "epgmutex unlock"); break;
1610                case 5: debug(900, "channelmutex unlock"); break;
1611                case 6: debug(900, "timerthreadmutex unlock"); break;
1612                case 7: debug(900, "audiotrackmutex unlock"); break;
1613                case 8: debug(900, "subtitlemutex unlock"); break;
1614                case 9: debug(900, "dmxdevmutex unlock"); break;
1615                case 10: debug(900, "rcmutex unlock"); break;
1616                case 11: debug(900, "queuemutex unlock"); break;
1617                case 12: debug(900, "clistmutex unlock"); break;
1618                case 13: debug(900, "hddmutex unlock"); break;
1619                case 14: debug(900, "linkedchannelmutex unlock"); break;
1620                case 15: debug(900, "tsseekmutex unlock"); break;
1621                case 16: debug(900, "accelfbmutex unlock"); break;
1622                case 17: debug(900, "mediadbmutex unlock"); break;
1623                case 18: debug(900, "oldentrymutex unlock"); break;
1624                case 19: debug(900, "newslettermutex unlock"); break;
1625                case 20: debug(900, "tithekmutex unlock"); break;
1626                case 21: debug(900, "inetworkmutex unlock"); break;
1627                case 22: debug(900, "textboxmutex unlock"); break;
1628                case 23: debug(900, "setaktresmutex unlock"); break;
1629                case 24: debug(900, "waitrcmutex unlock"); break;
1630                case 25: debug(900, "oledmutex unlock"); break;
1631                default: debug(900, "unknown mutex unlock"); break;
1632        }
1633        pthread_mutex_unlock(mutex);
1634}
1635
1636void debugstack(int sig, void* address, void* address1)
1637{
1638        Dl_info info, info1;
1639        void* trace[20];
1640        size_t size;
1641        size = backtrace(trace, 20);
1642
1643        FILE* fd = NULL;
1644        void* akttrace[2];
1645        int i = 0;
1646        char **strings;
1647        char **aktstring;
1648        time_t rawtime;
1649#ifdef BETA
1650        int y = 0;
1651        Dl_info info2;
1652#endif
1653
1654        char* imgversion = NULL;
1655        struct stimerthread* tnode = NULL;
1656
1657        if(isfile(getconfig("imagenamefile", NULL))     != 0)
1658                imgversion = readsys(getconfig("imagenamefile", NULL), 1);
1659        else
1660                imgversion = ostrcat("unknown", NULL, 0, 0);
1661
1662        tnode = gettimerbythread(pthread_self());
1663        if(tnode != NULL)
1664                dladdr(tnode->func, &info);
1665
1666        dladdr(address, &info1);
1667
1668        strings = backtrace_symbols(trace, size);
1669        akttrace[0] = (void*)address1;
1670        akttrace[1] = (void*)address;
1671        aktstring = backtrace_symbols(akttrace, 2); //get fault funktion name
1672
1673        fprintf(stderr, "--------------------------------------\n");
1674        fprintf(stderr, "Box: %s\n", getboxtype());
1675        fprintf(stderr, "Image: %s\n", imgversion);
1676        fprintf(stderr, "Signal: %d (%s)\n", sig, strsignal(sig));
1677        if(info1.dli_fname != NULL)
1678                fprintf(stderr, "Error in File: %s\n", info1.dli_fname);
1679        fprintf(stderr, "MainThread: %x\n", (unsigned int)status.mainthread);
1680        if(tnode != NULL && info.dli_sname != NULL)
1681                fprintf(stderr, "Error in Thread: %x (%s)\n", (unsigned int)pthread_self(), info.dli_sname);
1682        else
1683                fprintf(stderr, "Error in Thread: %x\n", (unsigned int)pthread_self());
1684
1685        fprintf(stderr, "\nObtaining %zd stack frames:\n\n", size);
1686        for(i = 0; i < size; i++)
1687                fprintf(stderr, "%s\n", strings[i]);
1688
1689        fprintf(stderr, "\nLast functions:\n\n");
1690        fprintf(stderr, "%s\n", aktstring[0]);
1691        fprintf(stderr, "%s\n", aktstring[1]);
1692
1693#ifdef BETA
1694        for(i = 0; i < MAXSTACKTRACE; i++)
1695        {
1696                if(stacktrace[i].pos > 0)
1697                {
1698                        fprintf(stderr, "\nObtaining %d Thread Stack frames [%p]:\n\n", stacktrace[i].pos, (void*)stacktrace[i].thread);
1699                        for(y = stacktrace[i].pos - 1; y >= 0; y--)
1700                        {
1701                                dladdr(stacktrace[i].func[y], &info2);
1702        fprintf(stderr, "%s(%s) [%p]\n", info2.dli_fname, info2.dli_sname, stacktrace[i].func[y]);
1703                        }
1704                }
1705        }
1706#endif
1707
1708        fprintf(stderr, "--------------------------------------\n");
1709
1710        char* logdir = ostrcat(getconfig("tracelog", NULL), NULL, 0, 0);
1711        if(logdir != NULL)
1712        {
1713                char* tmplogdir = dirname(logdir);
1714                if(tmplogdir != NULL)
1715                {
1716                        if(!file_exist(tmplogdir))
1717                                mkdir(tmplogdir, 0777);
1718                }
1719                free(logdir); logdir = NULL;
1720        }
1721
1722        //del file if greater 100KB
1723        if(getfilesize(getconfig("tracelog", NULL)) > 102400)
1724                unlink(getconfig("tracelog", NULL));
1725
1726        fd = fopen(getconfig("tracelog", NULL), "a");
1727        if(fd != NULL)
1728        {
1729                time(&rawtime);
1730                fprintf(fd, "Date: %s", ctime(&rawtime));
1731                fprintf(fd, "Box: %s\n", getboxtype());
1732                fprintf(fd, "Image: %s\n", imgversion);
1733                fprintf(fd, "Signal: %d (%s)\n", sig, strsignal(sig));
1734                if(info1.dli_fname != NULL)
1735                        fprintf(fd, "Error in File: %s\n", info1.dli_fname);
1736                fprintf(fd, "MainThread: %x\n", (unsigned int)status.mainthread);
1737                if(tnode != NULL && info.dli_sname != NULL)
1738                        fprintf(fd, "Error in Thread: %x (%s)\n", (unsigned int)pthread_self(), info.dli_sname);
1739                else
1740                        fprintf(fd, "Error in Thread: %x\n", (unsigned int)pthread_self());
1741
1742                fprintf(fd, "\nObtaining %zd stack frames:\n\n", size);
1743                for(i = 0; i < size; i++)
1744                        fprintf(fd, "%s\n", strings[i]);
1745
1746                fprintf(fd, "\nLast functions:\n\n");
1747                fprintf(fd, "%s\n", aktstring[0]);
1748                fprintf(fd, "%s\n", aktstring[1]);
1749
1750#ifdef BETA
1751                for(i = 0; i < MAXSTACKTRACE; i++)
1752                {
1753                        if(stacktrace[i].pos > 0)
1754                        {
1755                                fprintf(fd, "\nObtaining %d Thread Stack frames [%p]:\n\n", stacktrace[i].pos, (void*)stacktrace[i].thread);
1756                                for(y = stacktrace[i].pos - 1; y >= 0; y--)
1757                                {
1758                                        dladdr(stacktrace[i].func[y], &info2);
1759                fprintf(fd, "%s(%s) [%p]\n", info2.dli_fname, info2.dli_sname, stacktrace[i].func[y]);
1760                                }
1761                        }
1762                }
1763#endif
1764
1765                fprintf(fd, "--------------------------------------\n\n");
1766                fclose(fd);
1767                sync();
1768        }
1769        else
1770                perr("open %s", getconfig("tracelog", NULL));
1771
1772        free(imgversion);
1773        free(strings);
1774        free(aktstring);
1775}
1776
1777int mountauto(const char *file, const char *dir, unsigned long int flag, const void *data)
1778{
1779        int ret = -1;
1780        char* saveptr = NULL, *filesystems = NULL, *tmpfilesystems = NULL, *token = NULL;
1781
1782        filesystems = getconfig("filesystems", NULL);
1783        tmpfilesystems = ostrcat(tmpfilesystems, filesystems, 0, 0);
1784
1785        token = strtok_r(tmpfilesystems, ";", &saveptr);
1786        while(token != NULL)
1787        {
1788                ret = mount(file, dir, token, flag, data);
1789                if(ret == 0) break;
1790                token = strtok_r(NULL, ";", &saveptr);
1791        }
1792
1793        free(tmpfilesystems);
1794        return ret;
1795}
1796
1797int setwaswakuptimer(int value)
1798{
1799        char *waswakeuptimerdev = NULL, *tmpstr = NULL;
1800        int ret = 0;
1801
1802        waswakeuptimerdev = getconfig("waswakeuptimerdev", NULL);
1803
1804        if(waswakeuptimerdev != NULL)
1805        {
1806                debug(100, "set %s to %d", waswakeuptimerdev, value);
1807                tmpstr = oitoa(value);
1808                ret = writesys(waswakeuptimerdev, tmpstr, 0);
1809                free(tmpstr); tmpstr = NULL;
1810                return ret;
1811        }
1812
1813        return 0;
1814}
1815
1816int getwaswakuptimer()
1817{
1818        int ret = 0;
1819        char *waswakeuptimerdev = NULL;
1820        char *value = NULL;
1821
1822        waswakeuptimerdev = getconfig("waswakeuptimerdev", NULL);
1823
1824        if(waswakeuptimerdev == NULL)
1825        {
1826                err("NULL detect");
1827                return 0;
1828        }
1829
1830        value = readsys(waswakeuptimerdev, 1);
1831        if(value == NULL)
1832        {
1833                err("NULL detect");
1834                return 0;
1835        }
1836
1837        // start from timer
1838        if(atoi(value) == 1) ret = 1;
1839
1840        free(value);
1841        return ret;
1842}
1843
1844int getrtctime()
1845{
1846        int ret = 0;
1847        char *rtctimedev = NULL;
1848        char *value = NULL;
1849
1850        rtctimedev = getconfig("rtctimedev", NULL);
1851
1852        if(rtctimedev == NULL)
1853        {
1854                err("NULL detect");
1855                return 0;
1856        }
1857
1858        value = readsys(rtctimedev, 1);
1859        if(value == NULL)
1860        {
1861                err("NULL detect");
1862                return 0;
1863        }
1864
1865        // start from timer
1866        if(atoi(value) == 1) ret = 1;
1867
1868        free(value);
1869        return ret;
1870}
1871
1872void checkboxstart()
1873{
1874        struct rectimer* node = rectimer;
1875        int timediff = getconfigint("rectimer_timediff", NULL);
1876        int test = 0;
1877
1878        if(node == NULL)
1879        {
1880                setcecstandby(0);
1881                return;                                                 //no record
1882        }
1883
1884        while(node != NULL)
1885        {
1886                if(node->status < 2 || node->status == 4)
1887                {
1888                        time_t akttime = time(NULL);
1889                        time_t begin = node->begin - getconfigint("wakeuptimerdevdiff", NULL);
1890
1891                        debug(400, "begin=%ld akttime1=%ld akttime2=%ld", begin, akttime - timediff, akttime + timediff);
1892
1893                        if(begin > akttime - timediff && begin < akttime + timediff)
1894                        {
1895                                debug(400, "found rectimer who has start the box");
1896                                setwaswakuptimer(1);
1897                                setcecstandby(1);
1898                                test = 1;
1899                        }
1900                }
1901                node = node->next;
1902        }
1903        if(test == 0)
1904                setcecstandby(0);
1905}
1906
1907int setwakeuptimerdev(time_t value)
1908{
1909        char* wakeuptimerdev, *tmpstr = NULL;
1910        int ret = 0;
1911        int diff = getconfigint("wakeuptimerdevdiff", NULL);
1912
1913        if(value != 0x7FFFFFFF && value - diff > time(NULL))
1914                value -= diff;
1915
1916        wakeuptimerdev = getconfig("wakeuptimerdev", NULL);
1917
1918        if(wakeuptimerdev != NULL && value >= time(NULL))
1919        {
1920                debug(10, "set %s to %ld", wakeuptimerdev, value);
1921                tmpstr = olutoa(value);
1922                ret = writesys(wakeuptimerdev, tmpstr, 0);
1923                free(tmpstr); tmpstr = NULL;
1924                return ret;
1925        }
1926
1927        return 0;
1928}
1929
1930int setrtctime(int value)
1931{
1932        char *rtctimedev = NULL, *tmpstr = NULL;
1933        int ret = 0;
1934
1935        value += 7200;
1936
1937        rtctimedev = getconfig("rtctimedev", NULL);
1938
1939        if(rtctimedev != NULL)
1940        {
1941                debug(10, "set %s to %d", rtctimedev, value);
1942                tmpstr = oitoa(value);
1943                ret = writesys(rtctimedev, tmpstr, 0);
1944                free(tmpstr); tmpstr = NULL;
1945                return ret;
1946        }
1947
1948        return 0;
1949}
1950
1951int changepolicy()
1952{
1953        char *tmppolicy = NULL, *tmpstr = NULL;
1954
1955        tmppolicy = getpolicy();
1956
1957#ifdef MIPSEL
1958/*
1959        char *aspect = NULL;
1960        aspect = getaspect();
1961
1962        if(!ostrncmp("16:9", aspect, 4))
1963        {
1964                if(ostrcmp(_("16:9_set_bestfit_to_policy_show_justscale"), _(tmppolicy)) == 0)
1965                        tmpstr = ostrcat(_("16:9_set_letterbox_to_policy_show_panscan"), NULL, 0, 0);
1966                else if(ostrcmp(_("16:9_set_letterbox_to_policy_show_panscan"), _(tmppolicy)) == 0)
1967                        tmpstr = ostrcat(_("16:9_set_panscan_to_policy_show_pillarbox"), NULL, 0, 0);
1968                else if(ostrcmp(_("16:9_set_panscan_to_policy_show_pillarbox"), _(tmppolicy)) == 0)
1969                        tmpstr = ostrcat(_("16:9_set_bestfit_to_policy_show_justscale"), NULL, 0, 0);
1970
1971        }
1972        else
1973        {
1974                if(ostrcmp(_("4:3_set_bestfit_to_policy2_show_justscale"), _(tmppolicy)) == 0)
1975                        tmpstr = ostrcat(_("4:3_set_letterbox_to_policy2_show_letterbox"), NULL, 0, 0);
1976                else if(ostrcmp(_("4:3_set_letterbox_to_policy2_show_letterbox"), _(tmppolicy)) == 0)
1977                        tmpstr = ostrcat(_("4:3_set_panscan_to_policy2_show_panscan"), NULL, 0, 0);
1978                else if(ostrcmp(_("4:3_set_panscan_to_policy2_show_panscan"), _(tmppolicy)) == 0)
1979                        tmpstr = ostrcat(_("4:3_set_bestfit_to_policy2_show_justscale"), NULL, 0, 0);
1980        }
1981        free(aspect), aspect = NULL;
1982*/
1983        if(ostrcmp(_("16:9_set_bestfit_to_policy_show_justscale"), _(tmppolicy)) == 0)
1984                tmpstr = ostrcat(_("16:9_set_letterbox_to_policy_show_panscan"), NULL, 0, 0);
1985        else if(ostrcmp(_("16:9_set_letterbox_to_policy_show_panscan"), _(tmppolicy)) == 0)
1986                tmpstr = ostrcat(_("16:9_set_panscan_to_policy_show_pillarbox"), NULL, 0, 0);
1987        else if(ostrcmp(_("16:9_set_panscan_to_policy_show_pillarbox"), _(tmppolicy)) == 0)
1988                tmpstr = ostrcat(_("4:3_set_bestfit_to_policy2_show_justscale"), NULL, 0, 0);
1989        else if(ostrcmp(_("4:3_set_bestfit_to_policy2_show_justscale"), _(tmppolicy)) == 0)
1990                tmpstr = ostrcat(_("4:3_set_letterbox_to_policy2_show_letterbox"), NULL, 0, 0);
1991        else if(ostrcmp(_("4:3_set_letterbox_to_policy2_show_letterbox"), _(tmppolicy)) == 0)
1992                tmpstr = ostrcat(_("4:3_set_panscan_to_policy2_show_panscan"), NULL, 0, 0);
1993        else if(ostrcmp(_("4:3_set_panscan_to_policy2_show_panscan"), _(tmppolicy)) == 0)
1994                tmpstr = ostrcat(_("16:9_set_bestfit_to_policy_show_justscale"), NULL, 0, 0);
1995#else
1996        if(!ostrncmp("letterbox", tmppolicy, 8))
1997                tmpstr = ostrcat(tmpstr, "panscan", 1, 0);
1998        else if(!ostrncmp("panscan", tmppolicy, 7))
1999                tmpstr = ostrcat(tmpstr, "non", 1, 0);
2000        else if(!ostrncmp("non", tmppolicy, 3))
2001                tmpstr = ostrcat(tmpstr, "bestfit", 1, 0);
2002        else if(!ostrncmp("bestfit", tmppolicy, 7))
2003                tmpstr = ostrcat(tmpstr, "letterbox", 1, 0);
2004#endif
2005
2006        setpolicy(tmpstr);
2007
2008        free(tmpstr); tmpstr = NULL;
2009        free(tmppolicy); tmppolicy = NULL;
2010        return 0;
2011}
2012
2013char* getmac(char* dev)
2014{
2015        int sock = -1, i = 0;
2016        struct ifreq buf;
2017        char* tmpstr = NULL;
2018        char tmpbuf[4] = {};
2019
2020        if(dev == NULL) return NULL;
2021
2022        sock = socket(PF_INET, SOCK_DGRAM, 0);
2023        if(sock >= 0)
2024        {
2025                memset(&buf, 0x00, sizeof(buf));
2026                strcpy(buf.ifr_name, dev);
2027                ioctl(sock, SIOCGIFHWADDR, &buf);
2028                close(sock);
2029
2030                for(i = 0; i < 6; i++)
2031                {
2032                        snprintf(tmpbuf, 4, "%.2X:", (unsigned char)buf.ifr_hwaddr.sa_data[i]);
2033                        tmpstr = ostrcat(tmpstr, tmpbuf, 1, 0);
2034                }
2035                if(tmpbuf != NULL)
2036                        tmpstr[strlen(tmpstr) - 1] = '\0';
2037        }
2038
2039        return tmpstr;
2040}
2041
2042char* getdefaultgw()
2043{
2044        char* name = NULL;
2045        unsigned long def, gw, m;
2046        int flags, ref, use, metric, mtu, win, ir;
2047        struct in_addr ip;
2048
2049        FILE *fd = fopen("/proc/net/route", "r");
2050        if(fd == NULL)
2051                return NULL;
2052
2053        if(fscanf(fd, "%*[^\n]\n") < 0)
2054        {
2055                fclose(fd);
2056                return NULL;
2057        }
2058
2059        name = malloc(64);
2060        if(name == NULL)
2061        {
2062                err("no mem");
2063                return NULL;
2064        }
2065
2066        while(1)
2067        {
2068                int r = fscanf(fd, "%63s%lx%lx%x%d%d%d%lx%d%d%d\n", name, &def, &gw, &flags, &ref, &use, &metric, &m, &mtu, &win, &ir);
2069                if(def == 0) break;
2070                if(r != 11)
2071                {
2072                        fclose(fd);
2073                        free(name);
2074                        return NULL;
2075                }
2076                if(!(flags & 0x0001)) continue; //is interface down
2077        }
2078
2079        fclose(fd);
2080        free(name);
2081
2082        ip.s_addr = gw;
2083        if(def == 0)
2084                return inet_ntoa(ip);
2085
2086        return NULL;
2087}
2088
2089char* changefilenameext(char* filename, char* ext)
2090{
2091        char* newfilename = NULL;
2092        char* zeichen = NULL;
2093
2094        if(filename == NULL) return NULL;
2095
2096        newfilename = ostrcat(filename, NULL, 0, 0);
2097
2098        zeichen = strrchr(newfilename, '.');
2099        if(zeichen != NULL)
2100        {
2101                zeichen[0] = '\0';
2102                newfilename = ostrcat(newfilename, ext, 1, 0);
2103        }
2104
2105        return newfilename;
2106}
2107
2108int cmpfilenameext(char* filename, char* ext)
2109{
2110        char* zeichen = NULL;
2111
2112        if(filename == NULL) return 1;
2113
2114        zeichen = strrchr(filename, '.');
2115        if(zeichen != NULL)
2116        {
2117                if(ostrcasecmp(zeichen, ext) == 0) return 0;
2118        }
2119
2120        return 1;
2121}
2122
2123char* getfilenameext(char* filename)
2124{
2125        char* zeichen = NULL;
2126
2127        if(filename == NULL) return NULL;
2128
2129        zeichen = strrchr(filename, '.');
2130        if(zeichen != NULL)
2131        {
2132                return ostrcat(zeichen + 1, NULL, 0, 0);
2133        }
2134
2135        return NULL;
2136}
2137
2138char* getfilenamepng(char* filename)
2139{
2140        char* tmpstr = NULL;
2141
2142        if(filename == NULL) return NULL;
2143
2144        if(!filelistflt(".avi .dat .divx .flv .mkv .m4v .mp4 .mov .mpg .mpeg .mts .m2ts .trp .ts .vdr .vob .wmv .rm", filename))
2145                tmpstr = ostrcat("movie", NULL, 0, 0);
2146        else if(!filelistflt(".mp3 .flac .ogg .wma .ra .wav", filename))
2147                tmpstr = ostrcat("musik", NULL, 0, 0);
2148        else if(!filelistflt(".jpg .png", filename))
2149                tmpstr = ostrcat("picture", NULL, 0, 0);
2150        else
2151                tmpstr = ostrcat(getfilenameext(filename), NULL, 1, 0);
2152
2153        if(tmpstr != NULL)
2154        {
2155                return tmpstr;
2156        }
2157
2158        return NULL;
2159}
2160
2161char* getcurrentdir(char* path)
2162{
2163        char* zeichen = NULL;
2164
2165        if(path == NULL) return NULL;
2166
2167        zeichen = strrchr(path, '/');
2168        if(zeichen != NULL)
2169        {
2170                return ostrcat(zeichen + 1, NULL, 0, 0);
2171        }
2172
2173        return NULL;
2174}
2175
2176char* convert_timesec(int sec)
2177{
2178        int hour = 0, min = 0, seconds = 0;
2179        char* buf = NULL;
2180
2181        buf = malloc(9);
2182        if(buf == NULL)
2183        {
2184                err("no mem");
2185                return NULL;
2186        }
2187
2188        seconds = sec % 60;
2189        min = (sec / 60) % 60;
2190        hour = sec / 3600;
2191
2192        if(seconds < 0) seconds = 0;
2193        if(min < 0) min = 0;
2194        if(hour < 0 || hour > 23)
2195        {
2196                hour = 0;
2197                min = 0;
2198                seconds = 0;
2199        }
2200
2201        snprintf(buf, 9, "%02d:%02d:%02d", hour, min, seconds);
2202
2203        return buf;
2204}
2205
2206char* convert_dtimesec(int sec)
2207{
2208        int hour = 0, min = 0, seconds = 0, days = 0;
2209        char* buf = NULL;
2210
2211        buf = malloc(12);
2212        if(buf == NULL)
2213        {
2214                err("no mem");
2215                return NULL;
2216        }
2217
2218        seconds = sec % 60;
2219        min = (sec / 60) % 60;
2220        hour = sec / 3600;
2221        if(hour > 23)
2222        {
2223                days = hour / 24;
2224                hour = hour % 24;
2225        }
2226
2227        if(seconds < 0) seconds = 0;
2228        if(min < 0) min = 0;
2229        if(hour < 0/* || hour > 23*/)
2230        {
2231                hour = 0;
2232                min = 0;
2233                seconds = 0;
2234        }
2235
2236        snprintf(buf, 12, "%02d_%02d:%02d:%02d",days, hour, min, seconds);
2237
2238        return buf;
2239}
2240
2241int checkdate()
2242{
2243        time_t dvbtime = 0;
2244
2245        if(time(NULL) < 1072224000 || status.timeupdatecount > 3600) // 01.01.2004
2246        {
2247                if(dvbgetdate(&dvbtime, 10000000) == 0) //10 sek
2248                {
2249                        setsystime(&dvbtime);
2250#ifdef MIPSEL
2251                        setrtctimemips();
2252#endif
2253                        status.timeupdatecount = 0;
2254                        return 0;
2255                }
2256                return 1;
2257        }
2258        return 0;
2259}
2260
2261void closeonexec(int fd)
2262{
2263        if(fd > -1)
2264                fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
2265}
2266
2267void startnewsletter(int flag)
2268{
2269        if(flag == 1)
2270        {
2271                if(getconfigint("newsletter", NULL) == 1 && status.newsletterthread == NULL)
2272                        status.newsletterthread = addtimer(&newsletterthreadfunc, START, 1000, 1, NULL, NULL, NULL);
2273        }
2274        else if(status.newsletterthread != NULL)
2275        {
2276                status.newsletterthread->aktion = STOP;
2277                status.newsletterthread = NULL;
2278        }
2279}
2280
2281void startthumb(int flag)
2282{
2283        if(flag == 1)
2284        {
2285                if(getconfigint("createthumb", NULL) == 1 && status.thumbthread == NULL)
2286                        status.thumbthread = addtimer(&thumbthread, START, 1000, 1, NULL, NULL, NULL);
2287        }
2288        else if(status.thumbthread != NULL)
2289        {
2290                status.thumbthread->aktion = STOP;
2291                status.thumbthread = NULL;
2292        }
2293}
2294
2295void starthttpd(int flag)
2296{
2297        if(flag == 1)
2298        {
2299                if(getconfigint("httpdstart", NULL) == 1 && status.httpthread == NULL)
2300                {
2301                        status.httpthread = addtimer(&httpdthreadfunc, START, 10000, -1, NULL, NULL, NULL);
2302                        if(status.httpthread != NULL)
2303                                status.httpthread->flag = setbit(status.httpthread->flag, 0);
2304                }
2305        }
2306        else if(status.httpthread != NULL)
2307        {
2308                status.httpthread->aktion = STOP;
2309                status.httpthread = NULL;
2310        }
2311}
2312
2313void startrguid(int flag)
2314{
2315        if(flag == 1)
2316        {
2317                if(getconfigint("rguidstart", NULL) == 1 && status.rguithread == NULL)
2318                {
2319                        status.rguithread = addtimer(&rguidthreadfunc, START, 10000, -1, NULL, NULL, NULL);
2320                        if(status.rguithread != NULL)
2321                                status.rguithread->flag = setbit(status.rguithread->flag, 0);
2322                }
2323        }
2324        else if(status.rguithread != NULL)
2325        {
2326                status.rguithread->aktion = STOP;
2327                status.rguithread = NULL;
2328        }
2329}
2330
2331int setoverclockfreq(int mode)
2332{
2333        // mode 0 = Set Standby Freq
2334        // mode 1 = Set Freq
2335
2336        if(ostrcmp(getownconfig("standby_overclock"), "0") == 0)
2337                return 1;
2338
2339        if(isfile("/proc/cpu_frequ/pll0_ndiv_mdiv") == 0)
2340                return 1;
2341
2342        char* tmpstr = NULL;
2343
2344        if(mode == 0)
2345                tmpstr = getownconfig("standby_freq");
2346        else
2347                tmpstr = getownconfig("pll0_ndiv_mdiv");
2348
2349        return writesys("/proc/cpu_frequ/pll0_ndiv_mdiv", tmpstr, 1);
2350}
2351
2352/*
2353int checkdev(char* dev)
2354{
2355        char* cmd = NULL;
2356        cmd = ostrcat(cmd, "cat ", 1, 0);
2357        cmd = ostrcat(cmd, dev, 1, 0);
2358
2359        char* tmpstr = NULL;
2360        tmpstr = string_newline(command(cmd));
2361        free(cmd), cmd = NULL;
2362
2363        if(tmpstr == NULL)
2364        {
2365                return 0;
2366        }
2367
2368        if(ostrcmp(tmpstr, "Segmentation fault") == 0)
2369        {
2370                return 0;
2371        }
2372
2373        free(tmpstr), tmpstr = NULL;
2374        return 1;
2375}
2376*/
2377
2378int setsaturation(int value)
2379{
2380        char* saturationdev;
2381
2382        saturationdev = getconfig("saturationdev", NULL);
2383
2384        if(saturationdev != NULL /*&& checkdev(saturationdev)*/)
2385        {
2386                debug(100, "set %s to %d", saturationdev, value);
2387                return writesysint(saturationdev, value, 1);
2388        }
2389
2390        return 0;
2391}
2392
2393int setbrightness(int value)
2394{
2395        char* brightnessdev;
2396
2397        brightnessdev = getconfig("brightnessdev", NULL);
2398
2399        if(brightnessdev != NULL /*&& checkdev(brightnessdev)*/)
2400        {
2401                debug(100, "set %s to %d", brightnessdev, value);
2402                return writesysint(brightnessdev, value, 1);
2403        }
2404
2405        return 0;
2406}
2407
2408int setcontrast(int value)
2409{
2410        char* contrastdev;
2411
2412        contrastdev = getconfig("contrastdev", NULL);
2413
2414        if(contrastdev != NULL /*&& checkdev(contrastdev)*/)
2415        {
2416                debug(100, "set %s to %d", contrastdev, value);
2417                return writesysint(contrastdev, value, 1);
2418        }
2419
2420        return 0;
2421}
2422
2423int settint(int value)
2424{
2425        char* tintdev;
2426
2427        tintdev = getconfig("tintdev", NULL);
2428
2429        if(tintdev != NULL /*&& checkdev(tintdev)*/)
2430        {
2431                debug(100, "set %s to %d", tintdev, value);
2432                return writesysint(tintdev, value, 1);
2433        }
2434
2435        return 0;
2436}
2437
2438int ozip(char* inbuf, int inlen, char** outbuf, int* outlen, int level)
2439{
2440        int ret = 0;
2441        z_stream stream;
2442
2443        if(inbuf == NULL || outbuf == NULL || inlen == 0) return 1;
2444
2445        stream.zalloc = Z_NULL;
2446        stream.zfree = Z_NULL;
2447        stream.opaque = Z_NULL;
2448        stream.avail_in = 0;
2449        stream.next_in = Z_NULL;
2450        stream.avail_out = 0;
2451        stream.next_out = Z_NULL;
2452
2453        ret = deflateInit(&stream, level);
2454        if(ret != Z_OK)
2455                return 1;
2456
2457        *outbuf = malloc(inlen);
2458        if(*outbuf == NULL)
2459        {
2460                err("no mem");
2461                (void)deflateEnd(&stream);
2462                return 1;
2463        }
2464
2465        stream.avail_in = inlen;
2466        stream.next_in = (void*)inbuf;
2467
2468        do
2469        {
2470                stream.avail_out = inlen;
2471                stream.next_out = (void*)*outbuf;
2472
2473                ret = deflate(&stream, Z_FINISH);
2474                if(ret == Z_STREAM_ERROR)
2475                {
2476                        free(*outbuf); *outbuf = NULL;
2477                        (void)deflateEnd(&stream);
2478                        return 1;
2479                }
2480        }
2481        while(stream.avail_out == 0);
2482
2483        char* tmpoutbuf = *outbuf;
2484        *outlen = inlen - stream.avail_out;
2485        *outbuf = realloc(*outbuf, *outlen);
2486        if(*outbuf == NULL)
2487        {
2488                if(*outlen > 0)
2489                {
2490                        err("no mem");
2491                        free(tmpoutbuf);
2492                }
2493                *outlen = 0;
2494                (void)deflateEnd(&stream);
2495                return 1;
2496        }
2497
2498        (void)deflateEnd(&stream);
2499        return 0;
2500}
2501
2502//flag 0: malloc mem
2503//flag 1: don't malloc mem
2504//flag 2: malloc mem (gzip)
2505//flag 3: don't malloc mem (gzip)
2506int ounzip(char* inbuf, int inlen, char** outbuf, int* outlen, int maxbuf, int flag)
2507{
2508        int ret = 0;
2509        z_stream stream;
2510
2511        if(inbuf == NULL || outbuf == NULL || maxbuf == 0) return 1;
2512        if(flag == 1 && *outbuf == NULL) return 1;
2513
2514        stream.zalloc = Z_NULL;
2515        stream.zfree = Z_NULL;
2516        stream.opaque = Z_NULL;
2517        stream.avail_in = 0;
2518        stream.next_in = Z_NULL;
2519        stream.avail_out = 0;
2520        stream.next_out = Z_NULL;
2521
2522        if(flag == 2 || flag == 3)
2523        {
2524                ret = inflateInit2(&stream, 16 + MAX_WBITS);
2525                if(flag == 2) flag = 0;
2526                else if(flag == 3) flag = 1;
2527        }
2528        else
2529                ret = inflateInit(&stream);
2530        if(ret != Z_OK)
2531                return 1;
2532
2533        if(flag == 0)
2534        {
2535                *outbuf = malloc(maxbuf);
2536                if(*outbuf == NULL)
2537                {
2538                        err("no mem");
2539                        (void)inflateEnd(&stream);
2540                        return 1;
2541                }
2542        }
2543
2544        stream.avail_in = inlen;
2545        stream.next_in = (void*)inbuf;
2546
2547        int round = 0;
2548        do
2549        {
2550                stream.avail_out = maxbuf;
2551
2552                if(flag == 0 && round > 0)
2553                {
2554                        char* tmpoutbuf = *outbuf;
2555                        *outbuf = realloc(*outbuf, maxbuf * (round + 1));
2556                        if(*outbuf == NULL)
2557                        {
2558                                err("no mem");
2559                                free(tmpoutbuf);
2560                                (void)inflateEnd(&stream);
2561                                return 1;
2562                        }
2563                        stream.next_out = (void*)(*outbuf) + maxbuf * round;
2564                }
2565                else
2566                        stream.next_out = (void*)*outbuf;
2567
2568                ret = inflate(&stream, Z_NO_FLUSH);
2569                if(ret == Z_NEED_DICT || ret == Z_DATA_ERROR || ret == Z_MEM_ERROR)
2570                {
2571                        if(flag == 0)
2572                        {
2573                                free(*outbuf);
2574                                *outbuf = NULL;
2575                        }
2576                        (void)inflateEnd(&stream);
2577                        return 1;
2578                }
2579
2580                round++;
2581        }
2582        while(stream.avail_out == 0);
2583
2584        if(flag == 0)
2585        {
2586                char* tmpoutbuf = *outbuf;
2587                *outlen = (maxbuf * round) - stream.avail_out;
2588                *outbuf = realloc(*outbuf, *outlen);
2589                if(*outbuf == NULL)
2590                {
2591                        err("no mem");
2592                        if(*outlen > 0) free(tmpoutbuf);
2593                        *outlen = 0;
2594                        (void)inflateEnd(&stream);
2595                        return 1;
2596                }
2597        }
2598        else
2599                *outlen = maxbuf - stream.avail_out;
2600
2601        (void)inflateEnd(&stream);
2602        return 0;
2603}
2604
2605void endianswapshort(unsigned short* value)
2606{
2607        *value = (*value >> 8) | (*value << 8);
2608}
2609
2610int rcnumber(int rcret)
2611{
2612        if(rcret == getrcconfigint("rc0", NULL) ||
2613        rcret == getrcconfigint("rc1", NULL) ||
2614        rcret == getrcconfigint("rc2", NULL) ||
2615        rcret == getrcconfigint("rc3", NULL) ||
2616        rcret == getrcconfigint("rc4", NULL) ||
2617        rcret == getrcconfigint("rc5", NULL) ||
2618        rcret == getrcconfigint("rc6", NULL) ||
2619        rcret == getrcconfigint("rc7", NULL) ||
2620        rcret == getrcconfigint("rc8", NULL) ||
2621        rcret == getrcconfigint("rc9", NULL))
2622                return rcret;
2623        else
2624                return -9999;
2625}
2626
2627int checkdirext(char* dir, char* ext)
2628{
2629        struct dirent *dirent = NULL;
2630        DIR *pdir = NULL;
2631
2632        pdir = opendir(dir);
2633        if(pdir != NULL)
2634        {
2635                while((dirent = readdir(pdir)) != NULL)
2636                {
2637                        if(ostrcmp(".", dirent->d_name) != 0 && ostrcmp("..", dirent->d_name) != 0)
2638                        {
2639                                if(ostrstr(dirent->d_name, ext) != NULL)
2640                                {
2641                                        closedir(pdir);
2642                                        return 1;
2643                                }
2644                        }
2645                }
2646
2647                closedir(pdir);
2648        }
2649
2650        return 0;
2651}
2652
2653int delallfiles(char* dir, char* ext)
2654{
2655        struct dirent *dirent = NULL;
2656        DIR *pdir = NULL;
2657        char* tmpstr = NULL;
2658
2659        pdir = opendir(dir);
2660        if(pdir != NULL)
2661        {
2662                while((dirent = readdir(pdir)) != NULL)
2663                {
2664                        if(ostrcmp(".", dirent->d_name) != 0 && ostrcmp("..", dirent->d_name) != 0)
2665                        {
2666                                if(ext == NULL || ostrstr(dirent->d_name, ext) != NULL)
2667                                {
2668                                        tmpstr = ostrcat(dir, "/", 0, 0);
2669                                        tmpstr = ostrcat(tmpstr, dirent->d_name, 1, 0);
2670                                        unlink(tmpstr);
2671                                        free(tmpstr); tmpstr = NULL;
2672                                }
2673                        }
2674                }
2675
2676                closedir(pdir);
2677        }
2678
2679        return 0;
2680}
2681
2682unsigned long getfilecount(char* dir)
2683{
2684        unsigned long count = 0;
2685        struct dirent *dirent = NULL;
2686        DIR *pdir = NULL;
2687
2688        pdir = opendir(dir);
2689        if(pdir != NULL)
2690        {
2691                while((dirent = readdir(pdir)) != NULL)
2692                        count++;
2693
2694                closedir(pdir);
2695        }
2696
2697        return count;
2698}
2699
2700int getfiletype(char* filename)
2701{
2702        struct stat64 s;
2703
2704        if(filename == NULL) return -1;
2705
2706        if(stat64(filename, &s) >= 0)
2707        {
2708                if(S_ISREG(s.st_mode)) return DT_REG;
2709                if(S_ISDIR(s.st_mode)) return DT_DIR;
2710                if(S_ISCHR(s.st_mode)) return DT_CHR;
2711                if(S_ISBLK(s.st_mode)) return DT_BLK;
2712                if(S_ISFIFO(s.st_mode)) return DT_FIFO;
2713                if(S_ISLNK(s.st_mode)) return DT_LNK;
2714        }
2715
2716        return DT_UNKNOWN;
2717}
2718
2719int getlfiletype(char* filename)
2720{
2721        struct stat64 s;
2722
2723        if(filename == NULL) return -1;
2724
2725        if(lstat64(filename, &s) >= 0)
2726        {
2727                if(S_ISREG(s.st_mode)) return DT_REG;
2728                if(S_ISDIR(s.st_mode)) return DT_DIR;
2729                if(S_ISCHR(s.st_mode)) return DT_CHR;
2730                if(S_ISBLK(s.st_mode)) return DT_BLK;
2731                if(S_ISFIFO(s.st_mode)) return DT_FIFO;
2732                if(S_ISLNK(s.st_mode)) return DT_LNK;
2733        }
2734
2735        return DT_UNKNOWN;
2736}
2737
2738unsigned long long getfullspace(char* dir)
2739{
2740        struct statfs64 s;
2741        unsigned long long fullsize = 0;
2742
2743        if(statfs64(dir, &s) >= 0)
2744        {
2745                fullsize = s.f_blocks;
2746                fullsize *= s.f_bsize;
2747        }
2748
2749        return fullsize;
2750}
2751
2752unsigned long long getfreespace(char* dir)
2753{
2754        struct statfs64 s;
2755        unsigned long long freesize = 0;
2756
2757        if(statfs64(dir, &s) >= 0)
2758        {
2759                freesize = s.f_bfree;
2760                freesize *= s.f_bsize;
2761        }
2762
2763        return freesize;
2764}
2765
2766int checkbit(int value, int bitpos)
2767{
2768        int ret = 0;
2769
2770        ret = value & (1 << bitpos) ? 1: 0;
2771        return ret;
2772}
2773
2774int tooglebit(int value, int bitpos)
2775{
2776        value ^= 1 << bitpos;
2777        return value;
2778}
2779
2780int clearbit(int value, int bitpos)
2781{
2782        value &= ~(1 << bitpos);
2783        return value;
2784}
2785
2786int setbit(int value, int bitpos)
2787{
2788        value |= 1 << bitpos;
2789        return value;
2790}
2791
2792int setsystime(time_t* newtime)
2793{
2794        if (stime(newtime))
2795        {
2796                err("can't set system time");
2797                return 1;
2798        }
2799        return 0;
2800}
2801
2802off64_t getfilesize(char* name)
2803{
2804        struct stat64 sbuf;
2805
2806        if(lstat64(name, &sbuf) == -1)
2807                return 0;
2808
2809        return sbuf.st_size;
2810}
2811
2812time_t getfiletime(char* name, int type)
2813{
2814        struct stat64 sbuf;
2815
2816        if(lstat64(name, &sbuf) == -1)
2817                return 0;
2818
2819        switch(type)
2820        {
2821                case 1: return sbuf.st_mtime;
2822                case 2: return sbuf.st_ctime;
2823                default: return sbuf.st_atime;
2824        }
2825}
2826
2827int isfile(char* name)
2828{
2829        struct stat64 sbuf;
2830
2831        if(lstat64(name, &sbuf) == -1)
2832                return 0;
2833
2834        if(S_ISREG(sbuf.st_mode))
2835                return 1;
2836
2837        return 0;
2838}
2839
2840int isdir(char* name)
2841{
2842        struct stat64 sbuf;
2843        char *rpath = NULL;
2844
2845        if(lstat64(name, &sbuf) == -1)
2846                return 0;
2847
2848        if(S_ISDIR(sbuf.st_mode))
2849                return 1;
2850
2851        if(S_ISLNK(sbuf.st_mode))
2852        {
2853                rpath = realpath(name, NULL);
2854                if(lstat64(rpath, &sbuf) == -1)
2855                {
2856                        free(rpath);
2857                        return 0;
2858                }
2859                free(rpath);
2860                if(S_ISDIR(sbuf.st_mode))
2861                        return 1;
2862        }
2863
2864        return 0;
2865}
2866
2867char* getmaxsatstring(int maxsat)
2868{
2869        char* tmpstr = NULL, *tmpnr = NULL;
2870        int i;
2871
2872        tmpstr = ostrcat(tmpstr, "1", 1, 0);
2873        for(i = 2; i <= maxsat; i++)
2874        {
2875                tmpnr = oitoa(i);
2876                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
2877                tmpstr = ostrcat(tmpstr, tmpnr, 1, 1);
2878        }
2879        return tmpstr;
2880}
2881
2882void ostrcatbig(char** value1, char* value2, int* maxlen, int* pos)
2883{
2884        int len = 0;
2885
2886        if(value2 == NULL)
2887                return;
2888
2889        len = strlen(value2) + 1;
2890
2891        if(*value1 != NULL && maxlen == 0)
2892                *maxlen = strlen(*value1);
2893
2894        if(*value1 == NULL || *pos + len > *maxlen)
2895        {
2896                *maxlen = *maxlen + len + (MINMALLOC * 10);
2897                *value1 = realloc(*value1, *maxlen);
2898                if(*value1 == NULL)
2899                {
2900                        err("no mem");
2901                        return;
2902                }
2903        }
2904
2905        memcpy(*value1 + *pos, value2, len);
2906        *pos = *pos + (len - 1);
2907}
2908
2909char* ostrshrink(char* value)
2910{
2911        int len = 0;
2912        char* buf = NULL;
2913
2914        if(value == NULL) return NULL;
2915
2916        len = strlen(value);
2917        if(len == 0) return value;
2918
2919        buf = malloc(len + 1);
2920        if(buf == NULL)
2921                return value;
2922
2923        memcpy(buf, value, len);
2924        free(value);
2925        buf[len] = '\0';
2926
2927        return buf;
2928}
2929
2930char* ostrcat(char* value1, char* value2, int free1, int free2)
2931{
2932        int len = 0, len1 = 0, len2 = 0;
2933        char* buf = NULL;
2934
2935        if(value1 == NULL && value2 == NULL) return NULL;
2936
2937        if(value1 != NULL) len1 = strlen(value1);
2938        if(value2 != NULL) len2 = strlen(value2);
2939
2940        len = len1 + len2 + 1;
2941
2942        if(free1 == 1)
2943                buf = realloc(value1, len);
2944        else
2945                buf = malloc(len);
2946        if(buf == NULL)
2947        {
2948                if(free1 == 1) free(value1);
2949                if(free2 == 1) free(value2);
2950                return NULL;
2951        }
2952
2953        if(free1 == 0 && len1 > 0) memcpy(buf, value1, len1);
2954        if(len2 > 0) memcpy(buf + len1, value2, len2);
2955        buf[len - 1] = '\0';
2956
2957        if(free2 == 1) free(value2);
2958
2959        //helpfull for memleak detect
2960        //if(buf != NULL && strlen(buf) == 0x0b - 0x01)
2961        //      printf("******** memleak string (%s) (%p) ********\n", buf, buf);
2962
2963        return buf;
2964}
2965
2966char* ollutoa(uint64_t value)
2967{
2968        char *buf = NULL;
2969
2970        buf = malloc(MINMALLOC);
2971        if(buf == NULL)
2972        {
2973                err("no mem");
2974                return NULL;
2975        }
2976
2977        sprintf(buf, "%llu", value);
2978        buf = ostrshrink(buf);
2979
2980        return buf;
2981}
2982
2983char* olutoa(unsigned long value)
2984{
2985        char *buf = NULL;
2986
2987        buf = malloc(MINMALLOC);
2988        if(buf == NULL)
2989        {
2990                err("no mem");
2991                return NULL;
2992        }
2993
2994        sprintf(buf, "%lu", value);
2995        buf = ostrshrink(buf);
2996
2997        return buf;
2998}
2999
3000char* oitoax(int value)
3001{
3002        char *buf = NULL;
3003
3004        buf = malloc(MINMALLOC);
3005        if(buf == NULL)
3006        {
3007                err("no mem");
3008                return NULL;
3009        }
3010
3011        sprintf(buf, "%x", value);
3012        buf = ostrshrink(buf);
3013
3014        return buf;
3015}
3016
3017char* oitoa(int value)
3018{
3019        char *buf = NULL;
3020
3021        buf = malloc(MINMALLOC);
3022        if(buf == NULL)
3023        {
3024                err("no mem");
3025                return NULL;
3026        }
3027
3028        sprintf(buf, "%d", value);
3029        buf = ostrshrink(buf);
3030
3031        return buf;
3032}
3033
3034char* oitoa64(off64_t value)
3035{
3036        char *buf = NULL;
3037
3038        buf = malloc(MINMALLOC);
3039        if(buf == NULL)
3040        {
3041                err("no mem");
3042                return NULL;
3043        }
3044
3045        sprintf(buf, "%lld", value);
3046        buf = ostrshrink(buf);
3047
3048        return buf;
3049}
3050
3051char* oftoa64(double value, char* count)
3052{
3053        char *buf = NULL;
3054        char* tmpstr = NULL;
3055
3056        buf = malloc(MINMALLOC);
3057        if(buf == NULL)
3058        {
3059                err("no mem");
3060                return NULL;
3061        }
3062
3063        tmpstr = ostrcat("%.", count, 0, 0);
3064        tmpstr = ostrcat(tmpstr, "f", 1, 0);
3065
3066        sprintf(buf, tmpstr, value);
3067        buf = ostrshrink(buf);
3068
3069        free(tmpstr);
3070        return buf;
3071}
3072
3073int ostrncmp(char* value1, char* value2, int count)
3074{
3075        int ret = 1;
3076
3077        if(value1 != NULL && value2 != NULL)
3078                ret = strncmp(value1, value2, count);
3079
3080        return ret;
3081}
3082
3083int ostrcmp(char* value1, char* value2)
3084{
3085        int ret = 1;
3086
3087        if(value1 != NULL && value2 != NULL)
3088                ret = strcmp(value1, value2);
3089
3090        return ret;
3091}
3092
3093int ostrcasecmp(char* value1, char* value2)
3094{
3095        int ret = 1;
3096
3097        if(value1 != NULL && value2 != NULL)
3098                ret = strcasecmp(value1, value2);
3099
3100        return ret;
3101}
3102
3103char* createpath(char* dir, char* file)
3104{
3105        char *absdir = NULL;
3106        char *pos = NULL;
3107        char* tmpdir = NULL;
3108
3109        if(dir == NULL || file == NULL)
3110        {
3111                err("NULL detect");
3112                return NULL;
3113        }
3114
3115        tmpdir = ostrcat(dir, NULL, 0, 0);
3116        if(tmpdir == NULL)
3117        {
3118                err("NULL detect");
3119                return NULL;
3120        }
3121
3122        while((tmpdir[strlen(tmpdir) - 1] == '.' && tmpdir[strlen(tmpdir) - 2] != '.') || tmpdir[strlen(tmpdir) - 1] == '/')
3123                tmpdir[strlen(tmpdir) - 1] = '\0';
3124
3125        while(tmpdir[strlen(tmpdir) - 1] == '.' && tmpdir[strlen(tmpdir) - 2] == '.')
3126        {
3127                tmpdir[strlen(tmpdir) - 1] = '\0';
3128                tmpdir[strlen(tmpdir) - 1] = '\0';
3129                if(tmpdir[strlen(tmpdir) - 1] == '/')
3130                        tmpdir[strlen(tmpdir) - 1] = '\0';
3131                pos = strrchr(tmpdir, '/');
3132                if(pos != NULL)
3133                        pos[0] = '\0';
3134        }
3135
3136        absdir = malloc(strlen(tmpdir) + strlen(file) + 2);
3137        if(absdir == NULL)
3138        {
3139                free(tmpdir);
3140                err("no mem");
3141                return NULL;
3142        }
3143
3144        if(strlen(file) > 0 || strlen(tmpdir) == 0)
3145                sprintf(absdir, "%s/%s", tmpdir, file);
3146        else
3147                sprintf(absdir, "%s", tmpdir);
3148
3149        free(tmpdir);
3150        return absdir;
3151}
3152
3153int settimezone(char* zone)
3154{
3155        int ret = 0;
3156        char* tmpzone = NULL, *zonepath = NULL;
3157
3158        zonepath = getconfig("zonepath", NULL);
3159        if(zonepath == NULL)
3160        {
3161                err("config zonepath not defined");
3162                return 1;
3163        }
3164
3165        tmpzone = createpath(zonepath, zone);
3166        if(tmpzone == NULL)
3167                return 1;
3168
3169        setenv("TZ", zone, 1);
3170
3171        ret = unlink(getconfig("localtimefile", NULL));
3172        if(ret != 0)
3173                perr("unlink");
3174        ret = symlink(tmpzone, getconfig("localtimefile", NULL));
3175        if(ret != 0)
3176                perr("link");
3177
3178        free(tmpzone);
3179        return ret;
3180}
3181
3182int delchar(char** text, int pos)
3183{
3184        char *tmptext = NULL;
3185        int i = 0, y = 0, len = 0;
3186
3187        if(text == NULL || *text == NULL)
3188                return pos;
3189
3190        len = strlen(*text);
3191        if(len == 0) return pos;
3192
3193        tmptext = malloc(strlen(*text));
3194        if(tmptext == NULL)
3195        {
3196                err("no mem");
3197                return pos;
3198        }
3199
3200        for(i = 0; i < strlen(*text); i++)
3201        {
3202                if(i == pos - 1)
3203                        y++;
3204
3205                tmptext[i] = (*text)[y];
3206                y++;
3207        }
3208
3209        if(i > 0) tmptext[i - 1] = '\0';
3210        if(pos >= strlen(tmptext)) pos = strlen(tmptext);
3211
3212        free(*text);
3213        *text = tmptext;
3214        return pos;
3215}
3216
3217
3218int insertchar(char** text, char zeichen, int pos)
3219{
3220        char *tmptext = NULL;
3221        int i, y = 0;
3222
3223        if(text == NULL || *text == NULL)
3224                return pos;
3225
3226        tmptext = malloc(strlen(*text) + 2);
3227        if(tmptext == NULL)
3228        {
3229                err("no mem");
3230                return pos;
3231        }
3232
3233        if(strlen(*text) == 0)
3234        {
3235                tmptext[0] = zeichen;
3236                i = 1;
3237                pos = 0;
3238        }
3239        else
3240        {
3241                for(i = 0; i < strlen(*text) + 1; i++)
3242                {
3243                        if(i == pos)
3244                                tmptext[i] = zeichen;
3245                        else
3246                        {
3247                                tmptext[i] = (*text)[y];
3248                                y++;
3249                        }
3250                }
3251        }
3252        tmptext[i] = '\0';
3253
3254        free(*text);
3255        *text = tmptext;
3256        return pos + 1;
3257}
3258
3259void calctext(char* buf, char* buf1, unsigned int* linecount, unsigned int* pagecount, unsigned int* poscount, int pagelen, int page)
3260{
3261        unsigned int tmpposcount = 0;
3262        unsigned int pagepagelen = 0;
3263
3264        *poscount = 0;
3265        *linecount = 1;
3266        *pagecount = 1;
3267
3268        page--;
3269        if(page < 0) page = 0;
3270        pagepagelen = pagelen * page;
3271
3272        if(buf != NULL)
3273        {
3274                while(*buf != '\0')
3275                {
3276                        if(*buf == '\n')
3277                        {
3278                                if(*(buf + 1) == '\0') break;
3279                                (*linecount)++;
3280
3281                                if(*linecount - 1 == pagepagelen)
3282                                        *poscount = tmpposcount + 1;
3283                        }
3284                        buf++;
3285                        tmpposcount++;
3286                }
3287        }
3288
3289        if(buf1 != NULL)
3290        {
3291                while(*buf1 != '\0')
3292                {
3293                        if(*buf1 == '\n')
3294                        {
3295                                if(*(buf1 + 1) == '\0') break;
3296                                (*linecount)++;
3297
3298                                if(*linecount - 1 == pagepagelen)
3299                                        *poscount = tmpposcount + 1;
3300                        }
3301                        buf1++;
3302                        tmpposcount++;
3303                }
3304        }
3305
3306        if(pagelen > 0)
3307                *pagecount = (int)ceil(((float)*linecount / pagelen));
3308}
3309
3310int initlocale(char *localepath)
3311{
3312        debug(10, "localepath: %s", localepath);
3313        setlocale(LC_ALL, "");
3314        if(bindtextdomain(PROGNAME, localepath) == NULL)
3315        {
3316                debug(10, "err set bindtextdomain");
3317                err("set bindtextdomain");
3318                return 1;
3319        }
3320        if(textdomain(PROGNAME) == NULL)
3321        {
3322                debug(10, "err set textdomain");
3323                err("set textdomain");
3324                return 1;
3325        }
3326        return 0;
3327}
3328
3329//for langage you must
3330//mkdir /usr/lib/locale
3331//ln -s %titanpath%/po /usr/lib/locale/po
3332//copy SYS_LC_MESSAGES from other language into LC_MESSAGE
3333int setlang(char *lang)
3334{
3335        debug(10, "lang: %s", lang);
3336        char *ret;
3337
3338#ifdef MIPSEL
3339        // old: po/de new: de_DE
3340        char* tmpstr = NULL, *src = NULL, *dest = NULL, *cmd = NULL;
3341        tmpstr = ostrcat(lang, NULL, 0, 0);
3342        int count = 0;
3343        struct splitstr* ret1 = NULL;
3344        ret1 = strsplit(tmpstr, "/", &count);
3345        if(count > 1)
3346        {
3347                lang = ostrcat(ret1[1].part, NULL, 0, 0);
3348                lang = string_replace("de", "de_DE", lang, 1);
3349                lang = string_replace("el", "el_GR", lang, 1);
3350                lang = string_replace("en", "en_EN", lang, 1);
3351                lang = string_replace("es", "es_ES", lang, 1);
3352                lang = string_replace("fr", "fr_FR", lang, 1);
3353                lang = string_replace("it", "it_IT", lang, 1);
3354                lang = string_replace("lt", "lt_LT", lang, 1);
3355                lang = string_replace("nl", "nl_NL", lang, 1);
3356                lang = string_replace("pl", "pl_PL", lang, 1);
3357                lang = string_replace("ru", "ru_RU", lang, 1);
3358                lang = string_replace("vi", "vi_VN", lang, 1);
3359                debug(10, "lang changed: %s", lang);
3360
3361                dest = ostrcat("/var/usr/local/share/titan/po/", ret1[1].part, 0, 0);
3362                src = ostrcat("/var/usr/local/share/titan/po/", lang, 0, 0);
3363
3364                debug(10, "lang link: %s > %s", dest, src);
3365                symlink(dest, src);
3366
3367                free(dest), dest = NULL;
3368                dest = ostrcat("/usr/lib/locale/", lang, 0, 0);
3369                debug(10, "lang check system locale: %s", dest);
3370                if(!file_exist(dest))
3371                {
3372                        cmd = ostrcat("cp -a /usr/lib/locale/en_EN ", dest, 0, 0);
3373                        debug(10, "lang create system locale: %s", dest);
3374                        debug(10, "lang cmd: %s", cmd);
3375                        system(cmd);
3376                }
3377        }
3378        free(ret1), ret1 = NULL;
3379        free(dest), dest = NULL;
3380        free(src), src = NULL;
3381        free(cmd), cmd = NULL;
3382        free(tmpstr), tmpstr = NULL;
3383#endif
3384
3385        setenv("LANG", lang, 1);
3386        setenv("LANGUAGE", lang, 1);
3387        ret = setlocale(LC_MESSAGES, lang);
3388        if(ret == NULL)
3389        {
3390                printf("can't set LC_MESSAGES to %s\n", lang);
3391                err("can't set LC_MESSAGES to %s", lang);
3392                return 1;
3393        }
3394        return 0;
3395}
3396
3397unsigned long readsysul(const char *filename, int line)
3398{
3399        int i = 0, len = 0;
3400        unsigned long ret = 0;
3401        FILE *fd = NULL;
3402        char *fileline = NULL;
3403        char *buf1 = NULL;
3404
3405        fileline = malloc(MINMALLOC);
3406        if(fileline == NULL)
3407        {
3408                err("no mem");
3409                return 0;
3410        }
3411
3412        fd = fopen(filename, "r");
3413        if(fd == NULL)
3414        {
3415                perr("can't open %s", filename);
3416                free(fileline);
3417                return 0;
3418        }
3419
3420        for(i = 0; i < line; i++)
3421        {
3422                memset(fileline, 0, MINMALLOC);
3423                fgets(fileline, MINMALLOC, fd);
3424        }
3425
3426        len = strlen(fileline) - 1;
3427        if(len >= 0 && fileline[len] == '\n')
3428                fileline[len] = '\0';
3429        buf1 = ostrshrink(fileline);
3430
3431        fclose(fd);
3432
3433        if(buf1 != NULL)
3434        {
3435                ret = strtoul(buf1, NULL, 10);
3436                free(buf1); buf1 = NULL;
3437        }
3438
3439        return ret;
3440}
3441
3442unsigned long long readsysull(const char *filename, int line)
3443{
3444        int i = 0, len = 0;
3445        unsigned long long ret = 0;
3446        FILE *fd = NULL;
3447        char *fileline = NULL;
3448        char *buf1 = NULL;
3449
3450        fileline = malloc(MINMALLOC);
3451        if(fileline == NULL)
3452        {
3453                err("no mem");
3454                return 0;
3455        }
3456
3457        fd = fopen(filename, "r");
3458        if(fd == NULL)
3459        {
3460                perr("can't open %s", filename);
3461                free(fileline);
3462                return 0;
3463        }
3464
3465        for(i = 0; i < line; i++)
3466        {
3467                memset(fileline, 0, MINMALLOC);
3468                fgets(fileline, MINMALLOC, fd);
3469        }
3470
3471        len = strlen(fileline) - 1;
3472        if(len >= 0 && fileline[len] == '\n')
3473                fileline[len] = '\0';
3474        buf1 = ostrshrink(fileline);
3475
3476        fclose(fd);
3477
3478        if(buf1 != NULL)
3479        {
3480                ret = strtoull(buf1, NULL, 10);
3481                free(buf1); buf1 = NULL;
3482        }
3483
3484        return ret;
3485}
3486
3487char* readsys(const char *filename, int line)
3488{
3489        int i = 0, len = 0;
3490        FILE *fd = NULL;
3491        char *fileline = NULL;
3492        char *buf1 = NULL;
3493
3494        fileline = malloc(MINMALLOC);
3495        if(fileline == NULL)
3496        {
3497                err("no mem");
3498                return NULL;
3499        }
3500
3501        fd = fopen(filename, "r");
3502        if(fd == NULL)
3503        {
3504                perr("can't open %s", filename);
3505                free(fileline);
3506                return NULL;
3507        }
3508
3509        for(i = 0; i < line; i++)
3510        {
3511                memset(fileline, 0, MINMALLOC);
3512                fgets(fileline, MINMALLOC, fd);
3513        }
3514
3515        len = strlen(fileline) - 1;
3516        if(len >= 0 && fileline[len] == '\n')
3517                fileline[len] = '\0';
3518        buf1 = ostrshrink(fileline);
3519
3520        fclose(fd);
3521        return buf1;
3522}
3523
3524//flag 0: without \n
3525//flag 1: with \n
3526//flag 2: append without \n
3527//flag 3: append with \n
3528int writesys(const char *filename, char *value, int flag)
3529{
3530        FILE *fd = NULL;
3531        char* tmpstr = NULL;
3532        int ret;
3533
3534        if(value == NULL)
3535        {
3536                err("NULL detect");
3537                return 1;
3538        }
3539
3540        if(flag == 2 || flag == 3)
3541                fd = fopen(filename, "a");
3542        else
3543                fd = fopen(filename, "w");
3544        if(fd == NULL)
3545        {
3546                perr("can't open %s", filename);
3547                return 1;
3548        }
3549
3550        if(flag == 1 || flag == 3)
3551                tmpstr = ostrcat(value, "\n", 0, 0);
3552        else
3553                tmpstr = ostrcat(value, NULL, 0, 0);
3554
3555        ret = fwrite(tmpstr, strlen(tmpstr), 1, fd);
3556        if(ret != 1)
3557        {
3558                perr("writting to %s", filename);
3559                free(tmpstr);
3560                fclose(fd);
3561                return 1;
3562        }
3563
3564        free(tmpstr);
3565        fclose(fd);
3566        return 0;
3567}
3568
3569//flag 0: without \n
3570//flag 1: with \n
3571//flag 2: append without \n
3572//flag 3: append with \n
3573int writesysint(const char *filename, int value, int flag)
3574{
3575        char* tmpstr = NULL;
3576        int ret = 0;
3577
3578        tmpstr = oitoa(value);
3579        ret = writesys(filename, tmpstr, flag);
3580
3581        free(tmpstr);
3582        return ret;
3583}
3584
3585char* getdevcontent(char* devconfig)
3586{
3587        char *dev = NULL;
3588        char *value = NULL;
3589
3590        dev = getconfig(devconfig, NULL);
3591
3592        if(dev == NULL)
3593        {
3594                err("NULL detect");
3595                return NULL;
3596        }
3597
3598        value = readsys(dev, 1);
3599        if(value == NULL)
3600        {
3601                err("NULL detect");
3602                return NULL;
3603        }
3604
3605        return value;
3606}
3607
3608char* convertspacetolf(char* value)
3609{
3610        int i = 0;
3611
3612        while(value[i] != '\0')
3613        {
3614                if(value[i] == ' ')
3615                        value[i] = '\n';
3616                i++;
3617        }
3618
3619        return value;
3620}
3621
3622//flag 0: all
3623//flag 1: hdmi
3624//flag 2: not hdmi
3625char* getcolorformatchoices(int flag)
3626{
3627        char *colorformatchoicesdev = NULL;
3628        char *value = NULL;
3629
3630        colorformatchoicesdev = getconfig("colorformatchoicesdev", NULL);
3631
3632        if(colorformatchoicesdev == NULL)
3633        {
3634                err("NULL detect");
3635                return NULL;
3636        }
3637
3638        value = readsys(colorformatchoicesdev, 1);
3639        if(value == NULL)
3640        {
3641                err("NULL detect");
3642                return NULL;
3643        }
3644
3645        if(flag == 1)
3646        {
3647                value = string_replace("rgb", NULL, value, 1);
3648                value = string_replace("  ", " ", value, 1);
3649                value = string_replace("cvbs", NULL, value, 1);
3650                value = string_replace("  ", " ", value, 1);
3651                value = string_replace("svideo", NULL, value, 1);
3652                value = string_replace("  ", " ", value, 1);
3653                value = string_replace("yuv", NULL, value, 1);
3654                value = string_replace("  ", " ", value, 1);
3655        }
3656        else if(flag == 2)
3657        {
3658                value = string_replace("hdmi_rgb", NULL, value, 1);
3659                value = string_replace("  ", " ", value, 1);
3660                value = string_replace("hdmi_yuv", NULL, value, 1);
3661                value = string_replace("  ", " ", value, 1);
3662                value = string_replace("hdmi_422", NULL, value, 1);
3663                value = string_replace("  ", " ", value, 1);
3664        }
3665
3666        value = strstrip(value);
3667        value = convertspacetolf(value);
3668
3669        return value;
3670}
3671
3672char* getaudiosourcechoices()
3673{
3674        char *audiosourcechoicesdev = NULL;
3675        char *value = NULL;
3676
3677        audiosourcechoicesdev = getconfig("audiosourcechoicesdev", NULL);
3678
3679        if(audiosourcechoicesdev == NULL)
3680        {
3681                err("NULL detect");
3682                return NULL;
3683        }
3684
3685        value = readsys(audiosourcechoicesdev, 1);
3686        if(value == NULL)
3687        {
3688                err("NULL detect");
3689                return NULL;
3690        }
3691
3692        value = convertspacetolf(value);
3693
3694        return value;
3695}
3696
3697char* getac3pluschoices()
3698{
3699        char *ac3pluschoicesdev = NULL;
3700        char *value = NULL;
3701
3702        ac3pluschoicesdev = getconfig("ac3pluschoicesdev", NULL);
3703
3704        if(ac3pluschoicesdev == NULL)
3705        {
3706                err("NULL detect");
3707                return NULL;
3708        }
3709
3710        value = readsys(ac3pluschoicesdev, 1);
3711        if(value == NULL)
3712        {
3713                err("NULL detect");
3714                return NULL;
3715        }
3716
3717        value = convertspacetolf(value);
3718
3719        return value;
3720}
3721
3722char* getdtshdchoices()
3723{
3724        char *dtshdchoicesdev = NULL;
3725        char *value = NULL;
3726
3727        dtshdchoicesdev = getconfig("dtshdchoicesdev", NULL);
3728
3729        if(dtshdchoicesdev == NULL)
3730        {
3731                err("NULL detect");
3732                return NULL;
3733        }
3734
3735        value = readsys(dtshdchoicesdev, 1);
3736        if(value == NULL)
3737        {
3738                err("NULL detect");
3739                return NULL;
3740        }
3741
3742        value = convertspacetolf(value);
3743
3744        return value;
3745}
3746
3747char* getwmaprochoices()
3748{
3749        char *wmaprochoicesdev = NULL;
3750        char *value = NULL;
3751
3752        wmaprochoicesdev = getconfig("wmaprochoicesdev", NULL);
3753
3754        if(wmaprochoicesdev == NULL)
3755        {
3756                err("NULL detect");
3757                return NULL;
3758        }
3759
3760        value = readsys(wmaprochoicesdev, 1);
3761        if(value == NULL)
3762        {
3763                err("NULL detect");
3764                return NULL;
3765        }
3766
3767        value = convertspacetolf(value);
3768
3769        return value;
3770}
3771
3772char* getac3choices()
3773{
3774        char *ac3choicesdev = NULL;
3775        char *value = NULL;
3776
3777        ac3choicesdev = getconfig("ac3choicesdev", NULL);
3778
3779        if(ac3choicesdev == NULL)
3780        {
3781                err("NULL detect");
3782                return NULL;
3783        }
3784
3785        value = readsys(ac3choicesdev, 1);
3786        if(value == NULL)
3787        {
3788                err("NULL detect");
3789                return NULL;
3790        }
3791
3792        value = convertspacetolf(value);
3793
3794        return value;
3795}
3796
3797char* getaacchoices()
3798{
3799        char *aacchoicesdev = NULL;
3800        char *value = NULL;
3801
3802        aacchoicesdev = getconfig("aacchoicesdev", NULL);
3803
3804        if(aacchoicesdev == NULL)
3805        {
3806                err("NULL detect");
3807                return NULL;
3808        }
3809
3810        value = readsys(aacchoicesdev, 1);
3811        if(value == NULL)
3812        {
3813                err("NULL detect");
3814                return NULL;
3815        }
3816
3817        value = convertspacetolf(value);
3818
3819        return value;
3820}
3821
3822char* getwsschoices()
3823{
3824        char *wsschoicesdev = NULL;
3825        char *value = NULL;
3826
3827        wsschoicesdev = getconfig("wsschoicesdev", NULL);
3828
3829        if(wsschoicesdev == NULL)
3830        {
3831                err("NULL detect");
3832                return NULL;
3833        }
3834
3835        value = readsys(wsschoicesdev, 1);
3836        if(value == NULL)
3837        {
3838                err("NULL detect");
3839                return NULL;
3840        }
3841
3842        value = convertspacetolf(value);
3843
3844        return value;
3845}
3846
3847int setciclock(int slotnr, char* value)
3848{
3849        char* ciclockdev = NULL, *tmpstr = NULL;
3850        int ret = 0;
3851
3852        ciclockdev = getconfig("ciclockdev", NULL);
3853
3854        if(ciclockdev != NULL && value != NULL)
3855        {
3856                tmpstr = malloc(MINMALLOC);
3857                if(tmpstr == NULL)
3858                {
3859                        err("no mem");
3860                        return 1;
3861                }
3862
3863                snprintf(tmpstr, MINMALLOC, ciclockdev, slotnr);
3864                debug(100, "set %s to %s", tmpstr, value);
3865                ret = writesys(tmpstr, value, 0);
3866
3867                free(tmpstr); tmpstr = NULL;
3868                return ret;
3869        }
3870
3871        return 0;
3872}
3873
3874//routes stream from tuner to ci or ci to ci
3875int setciinput(int slotnr, char* value)
3876{
3877        char* ciinputdev = NULL, *tmpstr = NULL;
3878        int ret = 0;
3879
3880        ciinputdev = getconfig("ciinputdev", NULL);
3881
3882        if(ciinputdev != NULL && value != NULL)
3883        {
3884                tmpstr = malloc(MINMALLOC);
3885                if(tmpstr == NULL)
3886                {
3887                        err("no mem");
3888                        return 1;
3889                }
3890
3891                snprintf(tmpstr, MINMALLOC, ciinputdev, slotnr);
3892                debug(100, "set %s to %s", tmpstr, value);
3893                ret = writesys(tmpstr, value, 0);
3894
3895                free(tmpstr); tmpstr = NULL;
3896                return ret;
3897        }
3898
3899        return 0;
3900}
3901
3902//routes stream from tuner or ci to linux
3903int setcisource(int tunernr, char* value)
3904{
3905        char* cisourcedev = NULL, *tmpstr = NULL;
3906        int ret = 0;
3907
3908        cisourcedev = getconfig("cisourcedev", NULL);
3909
3910        if(cisourcedev != NULL && value != NULL)
3911        {
3912                tmpstr = malloc(MINMALLOC);
3913                if(tmpstr == NULL)
3914                {
3915                        err("no mem");
3916                        return 1;
3917                }
3918
3919                snprintf(tmpstr, MINMALLOC, cisourcedev, tunernr);
3920                debug(100, "set %s to %s", tmpstr, value);
3921                ret = writesys(tmpstr, value, 0);
3922
3923                free(tmpstr); tmpstr = NULL;
3924                return ret;
3925        }
3926
3927        return 0;
3928}
3929
3930int setinput(char* value)
3931{
3932        char* inputdev = NULL;
3933        int ret = 0;
3934
3935        inputdev = getconfig("inputdev", NULL);
3936
3937        if(inputdev != NULL && value != NULL)
3938        {
3939                debug(100, "set %s to %s", inputdev, value);
3940                ret = writesys(inputdev, value, 0);
3941                return ret;
3942        }
3943
3944        return 0;
3945}
3946
3947char* getinput()
3948{
3949        char *inputdev = NULL;
3950        char *value = NULL;
3951
3952        inputdev = getconfig("inputdev", NULL);
3953
3954        if(inputdev == NULL)
3955        {
3956                err("NULL detect");
3957                return NULL;
3958        }
3959
3960        value = readsys(inputdev, 1);
3961        if(value == NULL)
3962        {
3963                err("NULL detect");
3964                return NULL;
3965        }
3966
3967        return value;
3968}
3969
3970int setac3plus(char* value)
3971{
3972        char* ac3plusdev = NULL;
3973        int ret = 0;
3974
3975        ac3plusdev = getconfig("ac3plusdev", NULL);
3976
3977        if(ac3plusdev != NULL && value != NULL)
3978        {
3979                debug(100, "set %s to %s", ac3plusdev, value);
3980                ret = writesys(ac3plusdev, value, 0);
3981                if(ret == 0) addconfig("av_ac3plusmode", value);
3982                return ret;
3983        }
3984
3985        return 0;
3986}
3987
3988int setdtshd(char* value)
3989{
3990        char* dtshddev = NULL;
3991        int ret = 0;
3992
3993        dtshddev = getconfig("dtshddev", NULL);
3994
3995        if(dtshddev != NULL && value != NULL)
3996        {
3997                debug(100, "set %s to %s", dtshddev, value);
3998                ret = writesys(dtshddev, value, 0);
3999                if(ret == 0) addconfig("av_dtshdmode", value);
4000                return ret;
4001        }
4002
4003        return 0;
4004}
4005
4006int setwmapro(char* value)
4007{
4008        char* wmaprodev = NULL;
4009        int ret = 0;
4010
4011        wmaprodev = getconfig("wmaprodev", NULL);
4012
4013        if(wmaprodev != NULL && value != NULL)
4014        {
4015                debug(100, "set %s to %s", wmaprodev, value);
4016                ret = writesys(wmaprodev, value, 0);
4017                if(ret == 0) addconfig("av_wmapromode", value);
4018                return ret;
4019        }
4020
4021        return 0;
4022}
4023
4024int setac3(char* value)
4025{
4026        char* ac3dev = NULL;
4027        int ret = 0;
4028
4029        ac3dev = getconfig("ac3dev", NULL);
4030
4031        if(ac3dev != NULL && value != NULL)
4032        {
4033                debug(100, "set %s to %s", ac3dev, value);
4034                ret = writesys(ac3dev, value, 0);
4035                if(ret == 0) addconfig("av_ac3mode", value);
4036                if(ostrcmp(value, "passthrough") == 0)
4037                        status.downmix = 0;
4038                else
4039                        status.downmix = 1;
4040                return ret;
4041        }
4042
4043        return 0;
4044}
4045
4046int setaac(char* value)
4047{
4048        char* aacdev = NULL;
4049        int ret = 0;
4050
4051        aacdev = getconfig("aacdev", NULL);
4052
4053        if(aacdev != NULL && value != NULL)
4054        {
4055                debug(100, "set %s to %s", aacdev, value);
4056                ret = writesys(aacdev, value, 0);
4057                if(ret == 0) addconfig("av_aacmode", value);
4058                return ret;
4059        }
4060
4061        return 0;
4062}
4063
4064int setwss(char* value)
4065{
4066        char* wssdev = NULL;
4067        int ret = 0;
4068
4069        wssdev = getconfig("wssdev", NULL);
4070
4071        if(wssdev != NULL && value != NULL)
4072        {
4073                debug(100, "set %s to %s", wssdev, value);
4074                ret = writesys(wssdev, value, 0);
4075                if(ret == 0) addconfig("av_wssmode", value);
4076                return ret;
4077        }
4078        else if(wssdev != NULL && value == NULL)
4079        {
4080                debug(100, "set %s to %s", wssdev, "auto");
4081                ret = writesys(wssdev, "auto", 0);
4082                return ret;
4083        }
4084
4085        return 0;
4086}
4087
4088char* getac3plus()
4089{
4090        char *ac3plusdev = NULL;
4091        char *value = NULL;
4092
4093        ac3plusdev = getconfig("ac3plusdev", NULL);
4094
4095        if(ac3plusdev == NULL)
4096        {
4097                err("NULL detect");
4098                return NULL;
4099        }
4100
4101        value = readsys(ac3plusdev, 1);
4102        if(value == NULL)
4103        {
4104                err("NULL detect");
4105                return NULL;
4106        }
4107
4108        return value;
4109}
4110
4111char* getdtshd()
4112{
4113        char *dtshddev = NULL;
4114        char *value = NULL;
4115
4116        dtshddev = getconfig("dtshddev", NULL);
4117
4118        if(dtshddev == NULL)
4119        {
4120                err("NULL detect");
4121                return NULL;
4122        }
4123
4124        value = readsys(dtshddev, 1);
4125        if(value == NULL)
4126        {
4127                err("NULL detect");
4128                return NULL;
4129        }
4130
4131        return value;
4132}
4133
4134char* getwmapro()
4135{
4136        char *wmaprodev = NULL;
4137        char *value = NULL;
4138
4139        wmaprodev = getconfig("wmaprodev", NULL);
4140
4141        if(wmaprodev == NULL)
4142        {
4143                err("NULL detect");
4144                return NULL;
4145        }
4146
4147        value = readsys(wmaprodev, 1);
4148        if(value == NULL)
4149        {
4150                err("NULL detect");
4151                return NULL;
4152        }
4153
4154        return value;
4155}
4156
4157char* getac3()
4158{
4159        char *ac3dev = NULL;
4160        char *value = NULL;
4161
4162        ac3dev = getconfig("ac3dev", NULL);
4163
4164        if(ac3dev == NULL)
4165        {
4166                err("NULL detect");
4167                return NULL;
4168        }
4169
4170        value = readsys(ac3dev, 1);
4171        if(value == NULL)
4172        {
4173                err("NULL detect");
4174                return NULL;
4175        }
4176
4177        return value;
4178}
4179
4180char* getaac()
4181{
4182        char *aacdev = NULL;
4183        char *value = NULL;
4184
4185        aacdev = getconfig("aacdev", NULL);
4186
4187        if(aacdev == NULL)
4188        {
4189                err("NULL detect");
4190                return NULL;
4191        }
4192
4193        value = readsys(aacdev, 1);
4194        if(value == NULL)
4195        {
4196                err("NULL detect");
4197                return NULL;
4198        }
4199
4200        return value;
4201}
4202
4203char* getwss()
4204{
4205        char *wssdev = NULL;
4206        char *value = NULL;
4207
4208        wssdev = getconfig("wssdev", NULL);
4209
4210        if(wssdev == NULL)
4211        {
4212                err("NULL detect");
4213                return NULL;
4214        }
4215
4216        value = readsys(wssdev, 1);
4217        if(value == NULL)
4218        {
4219                err("NULL detect");
4220                return NULL;
4221        }
4222
4223        return value;
4224}
4225
4226int setaudiodelaybitstream(char* value)
4227{
4228        char* audiodelaybitstreamdev = NULL;
4229        int ret = 0;
4230
4231        audiodelaybitstreamdev = getconfig("audiodelaybitstreamdev", NULL);
4232
4233        if(audiodelaybitstreamdev != NULL && value != NULL)
4234        {
4235                debug(100, "set %s to %s", audiodelaybitstreamdev, value);
4236                ret = writesys(audiodelaybitstreamdev, value, 0);
4237                if(ret == 0) addconfig("audiodelaybitstream", value);
4238                return ret;
4239        }
4240
4241        return 0;
4242}
4243
4244char* getaudiodelaybitstream()
4245{
4246        char *audiodelaybitstreamdev = NULL;
4247        char *value = NULL;
4248
4249        audiodelaybitstreamdev = getconfig("audiodelaybitstreamdev", NULL);
4250
4251        if(audiodelaybitstreamdev == NULL)
4252        {
4253                err("NULL detect");
4254                return NULL;
4255        }
4256
4257        value = readsys(audiodelaybitstreamdev, 1);
4258        if(value == NULL)
4259        {
4260                err("NULL detect");
4261                return NULL;
4262        }
4263
4264        return value;
4265}
4266
4267int setaudiodelaypcm(char* value)
4268{
4269        char* audiodelaypcmdev = NULL;
4270        int ret = 0;
4271
4272        audiodelaypcmdev = getconfig("audiodelaypcmdev", NULL);
4273
4274        if(audiodelaypcmdev != NULL && value != NULL)
4275        {
4276                debug(100, "set %s to %s", audiodelaypcmdev, value);
4277                ret = writesys(audiodelaypcmdev, value, 0);
4278                if(ret == 0) addconfig("audiodelaypcm", value);
4279                return ret;
4280        }
4281
4282        return 0;
4283}
4284
4285char* getaudiodelaypcm()
4286{
4287        char *audiodelaypcmdev = NULL;
4288        char *value = NULL;
4289
4290        audiodelaypcmdev = getconfig("audiodelaypcmdev", NULL);
4291
4292        if(audiodelaypcmdev == NULL)
4293        {
4294                err("NULL detect");
4295                return NULL;
4296        }
4297
4298        value = readsys(audiodelaypcmdev, 1);
4299        if(value == NULL)
4300        {
4301                err("NULL detect");
4302                return NULL;
4303        }
4304
4305        return value;
4306}
4307
4308
4309char* getpolicychoices()
4310{
4311        char *policychoicesdev = NULL;
4312        char *value = NULL;
4313
4314        policychoicesdev = getconfig("policychoicesdev", NULL);
4315
4316        if(policychoicesdev == NULL)
4317        {
4318                err("NULL detect");
4319                return NULL;
4320        }
4321
4322        value = readsys(policychoicesdev, 1);
4323        if(value == NULL)
4324        {
4325                err("NULL detect");
4326                return NULL;
4327        }
4328
4329#ifdef MIPSEL
4330        free(value), value = NULL;
4331//      value = ostrcat("16:9_set_bestfit_to_policy_show_justscale 16:9_set_letterbox_to_policy_show_panscan 16:9_set_panscan_to_policy_show_pillarbox 4:3_set_bestfit_to_policy2_show_justscale 4:3_set_letterbox_to_policy2_show_letterbox 4:3_set_panscan_to_policy2_show_panscan", NULL, 0, 0);
4332        value = ostrcat(_("16:9_set_bestfit_to_policy_show_justscale"), NULL, 0, 0);
4333        value = ostrcat(value, "\n", 1, 0);
4334        value = ostrcat(value, _("16:9_set_letterbox_to_policy_show_panscan"), 1, 0);
4335        value = ostrcat(value, "\n", 1, 0);
4336        value = ostrcat(value, _("16:9_set_panscan_to_policy_show_pillarbox"), 1, 0);
4337        value = ostrcat(value, "\n", 1, 0);
4338        value = ostrcat(value, _("4:3_set_bestfit_to_policy2_show_justscale"), 1, 0);
4339        value = ostrcat(value, "\n", 1, 0);
4340        value = ostrcat(value, _("4:3_set_letterbox_to_policy2_show_letterbox"), 1, 0);
4341        value = ostrcat(value, "\n", 1, 0);
4342        value = ostrcat(value, _("4:3_set_panscan_to_policy2_show_panscan"), 1, 0);
4343#else
4344        value = convertspacetolf(value);
4345#endif
4346
4347        return value;
4348}
4349
4350char* getpolicy()
4351{
4352        char *policydev = NULL;
4353        char *value = NULL;
4354
4355        policydev = getconfig("policydev", NULL);
4356
4357        if(policydev == NULL)
4358        {
4359                err("NULL detect");
4360                return NULL;
4361        }
4362
4363        value = readsys(policydev, 1);
4364
4365#ifdef MIPSEL
4366        char *aspect = NULL;
4367        aspect = getaspect();
4368        if(!ostrncmp("16:9", aspect, 4))
4369        {
4370                if(ostrcmp("bestfit", value) == 0)
4371                {
4372                        free(value), value = NULL;
4373                        value = ostrcat(_("16:9_set_bestfit_to_policy_show_justscale"), NULL, 0, 0);
4374                }
4375                else if(ostrcmp("letterbox", value) == 0)
4376                {
4377                        free(value), value = NULL;
4378                        value = ostrcat(_("16:9_set_letterbox_to_policy_show_panscan"), NULL, 0, 0);
4379                }
4380                else if(ostrcmp("panscan", value) == 0)
4381                {
4382                        free(value), value = NULL;
4383                        value = ostrcat(_("16:9_set_panscan_to_policy_show_pillarbox"), NULL, 0, 0);
4384                }
4385        }
4386        else
4387        {
4388                policydev = getconfig("policy2dev", NULL);
4389                value = readsys(policydev, 1);
4390
4391                if(ostrcmp("bestfit", value) == 0)
4392                {
4393                        free(value), value = NULL;
4394                        value = ostrcat(_("4:3_set_bestfit_to_policy2_show_justscale"), NULL, 0, 0);
4395                }
4396                else if(ostrcmp("letterbox", value) == 0)
4397                {
4398                        free(value), value = NULL;
4399                        value = ostrcat(_("4:3_set_letterbox_to_policy2_show_letterbox"), NULL, 0, 0);
4400                }
4401                else if(ostrcmp("panscan", value) == 0)
4402                {
4403                        free(value), value = NULL;
4404                        value = ostrcat(_("4:3_set_panscan_to_policy2_show_panscan"), NULL, 0, 0);
4405                }
4406        }
4407        free(aspect), aspect = NULL;
4408
4409#endif
4410
4411        if(value == NULL)
4412        {
4413                err("NULL detect");
4414                return NULL;
4415        }
4416
4417        return value;
4418}
4419
4420int setpolicy(char* value)
4421{
4422        char* policydev, *tmpstr = NULL, *tmpstr2 = NULL;
4423        int ret = 0;
4424
4425        policydev = getconfig("policydev", NULL);
4426
4427        if(policydev != NULL && value != NULL)
4428        {
4429                debug(10, "set %s to %s", policydev, value);
4430
4431#ifdef MIPSEL
4432                if(ostrcmp(_("16:9_set_bestfit_to_policy_show_justscale"), _(value)) == 0)
4433                {
4434                        tmpstr = ostrcat("bestfit", NULL, 0, 0);
4435                        tmpstr2 = ostrcat("16:9_set_bestfit_to_policy_show_justscale", NULL, 0, 0);
4436                        setaspect("set_16:9");
4437                }
4438                else if(ostrcmp(_("16:9_set_letterbox_to_policy_show_panscan"), _(value)) == 0)
4439                {
4440                        tmpstr = ostrcat("letterbox", NULL, 0, 0);
4441                        tmpstr2 = ostrcat("16:9_set_letterbox_to_policy_show_panscan", NULL, 0, 0);
4442                        setaspect("set_16:9");
4443                }
4444                else if(ostrcmp(_("16:9_set_panscan_to_policy_show_pillarbox"), _(value)) == 0)
4445                {
4446                        tmpstr = ostrcat("panscan", NULL, 0, 0);
4447                        tmpstr2 = ostrcat("16:9_set_panscan_to_policy_show_pillarbox", NULL, 0, 0);
4448                        setaspect("set_16:9");
4449                }
4450                else if(ostrcmp(_("4:3_set_bestfit_to_policy2_show_justscale"), _(value)) == 0)
4451                {
4452                        policydev = getconfig("policy2dev", NULL);
4453                        tmpstr = ostrcat("bestfit", NULL, 0, 0);
4454                        tmpstr2 = ostrcat("4:3_set_bestfit_to_policy2_show_justscale", NULL, 0, 0);
4455                        setaspect("set_4:3");
4456                }
4457                else if(ostrcmp(_("4:3_set_letterbox_to_policy2_show_letterbox"), _(value)) == 0)
4458                {
4459                        policydev = getconfig("policy2dev", NULL);
4460                        tmpstr = ostrcat("letterbox", NULL, 0, 0);
4461                        tmpstr2 = ostrcat("4:3_set_letterbox_to_policy2_show_letterbox", NULL, 0, 0);
4462                        setaspect("set_4:3");
4463                }
4464                else if(ostrcmp(_("4:3_set_panscan_to_policy2_show_panscan"), _(value)) == 0)
4465                {
4466                        policydev = getconfig("policy2dev", NULL);
4467                        tmpstr = ostrcat("panscan", NULL, 0, 0);
4468                        tmpstr2 = ostrcat("4:3_set_panscan_to_policy2_show_panscan", NULL, 0, 0);
4469                        setaspect("set_4:3");
4470                }
4471#else
4472                tmpstr = ostrcat(value, NULL, 0, 0);
4473#endif
4474                debug(10, "set change %s to %s", policydev, tmpstr);
4475                ret = writesys(policydev, tmpstr, 0);
4476
4477#ifdef MIPSEL
4478                if(ret == 0)
4479                {
4480                        debug(10, "write %s to /mnt/config/titan.cfg", tmpstr2);
4481                        addconfig("av_policy", tmpstr2);
4482                }
4483#else
4484                if(ret == 0) addconfig("av_policy", value);
4485                {
4486                        debug(10, "write %s to /mnt/config/titan.cfg", value);
4487                        addconfig("av_policy", value);
4488                }
4489#endif
4490        }
4491
4492        free(tmpstr), tmpstr = NULL;
4493        free(tmpstr2), tmpstr2 = NULL;
4494        return ret;
4495}
4496
4497char* getaspectchoices()
4498{
4499        char *aspectchoicesdev = NULL;
4500        char *value = NULL;
4501
4502        aspectchoicesdev = getconfig("aspectchoicesdev", NULL);
4503
4504        if(aspectchoicesdev == NULL)
4505        {
4506                err("NULL detect");
4507                return NULL;
4508        }
4509
4510        value = readsys(aspectchoicesdev, 1);
4511        if(value == NULL)
4512        {
4513                err("NULL detect");
4514                return NULL;
4515        }
4516
4517        value = convertspacetolf(value);
4518
4519        return value;
4520}
4521
4522char* getaspect()
4523{
4524        char *aspectdev = NULL;
4525        char *value = NULL;
4526
4527        aspectdev = getconfig("aspectdev", NULL);
4528
4529        if(aspectdev == NULL)
4530        {
4531                err("NULL detect");
4532                return NULL;
4533        }
4534
4535        value = readsys(aspectdev, 1);
4536        if(value == NULL)
4537        {
4538                err("NULL detect");
4539                return NULL;
4540        }
4541
4542        return value;
4543}
4544
4545int setaspect(char* value)
4546{
4547        char* aspectdev;
4548        int ret = 0;
4549
4550        aspectdev = getconfig("aspectdev", NULL);
4551
4552        if(aspectdev != NULL && value != NULL)
4553        {
4554                debug(10, "set %s to %s", aspectdev, value);
4555
4556                if(!ostrncmp("set_", value, 4))
4557                {
4558                        char* tmpstr = NULL;
4559                        tmpstr = ostrcat(value, NULL, 0, 0);
4560                        tmpstr = string_replace("set_", "", tmpstr, 1);
4561                        debug(10, "change %s to %s", aspectdev, tmpstr);
4562                        ret = writesys(aspectdev, tmpstr, 0);
4563                        if(ret == 0) addconfig("av_aspect", tmpstr);
4564                        free(tmpstr); tmpstr = NULL;
4565                        return ret;
4566                }
4567                else
4568                {
4569                        ret = writesys(aspectdev, value, 0);
4570
4571                        if(ret == 0)
4572                        {
4573                                addconfig("av_aspect", value);
4574
4575                                //set policy new after change aspect
4576                                char* tmpstr = getpolicy();
4577                                setpolicy(tmpstr);
4578                                free(tmpstr); tmpstr = NULL;
4579                        }
4580                }
4581                return ret;
4582        }
4583
4584        return 0;
4585}
4586
4587char* getvideomodechoices()
4588{
4589        char *videomodechoicesdev = NULL;
4590        char *value = NULL;
4591
4592        videomodechoicesdev = getconfig("videomodechoicesdev", NULL);
4593
4594        if(videomodechoicesdev == NULL)
4595        {
4596                err("NULL detect");
4597                return NULL;
4598        }
4599
4600        value = readsys(videomodechoicesdev, 1);
4601        if(value == NULL)
4602        {
4603                err("NULL detect");
4604                return NULL;
4605        }
4606
4607        value = string_replace("pal", NULL, value, 1);
4608        value = string_replace("  ", " ", value, 1);
4609
4610        if(status.mcaktiv == 0)
4611        {
4612                value = string_replace("1080p60", NULL, value, 1);
4613                value = string_replace("  ", " ", value, 1);
4614                value = string_replace("1080p59", NULL, value, 1);
4615                value = string_replace("  ", " ", value, 1);
4616                value = string_replace("1080p30", NULL, value, 1);
4617                value = string_replace("  ", " ", value, 1);
4618                value = string_replace("1080p29", NULL, value, 1);
4619                value = string_replace("  ", " ", value, 1);
4620                value = string_replace("1080p25", NULL, value, 1);
4621                value = string_replace("  ", " ", value, 1);
4622                value = string_replace("1080p24", NULL, value, 1);
4623                value = string_replace("  ", " ", value, 1);
4624                value = string_replace("1080p23", NULL, value, 1);
4625                value = string_replace("  ", " ", value, 1);
4626                value = string_replace("1080i60", NULL, value, 1);
4627                value = string_replace("  ", " ", value, 1);
4628                value = string_replace("1080i59", NULL, value, 1);
4629                value = string_replace("  ", " ", value, 1);
4630                value = string_replace("1080i60", NULL, value, 1);
4631                value = string_replace("  ", " ", value, 1);
4632                value = string_replace("720p60", NULL, value, 1);
4633                value = string_replace("  ", " ", value, 1);
4634                value = string_replace("576p50", NULL, value, 1);
4635                value = string_replace("  ", " ", value, 1);
4636                value = string_replace("1280x1024_75", NULL, value, 1);
4637                value = string_replace("  ", " ", value, 1);
4638                value = string_replace("1280x1024_70", NULL, value, 1);
4639                value = string_replace("  ", " ", value, 1);
4640                value = string_replace("1280x1024_60", NULL, value, 1);
4641                value = string_replace("  ", " ", value, 1);
4642                value = string_replace("1600x1200_60", NULL, value, 1);
4643                value = string_replace("  ", " ", value, 1);
4644                value = string_replace("1024x768_100", NULL, value, 1);
4645                value = string_replace("  ", " ", value, 1);
4646                value = string_replace("1024x768_90", NULL, value, 1);
4647                value = string_replace("  ", " ", value, 1);
4648                value = string_replace("1024x768_75", NULL, value, 1);
4649                value = string_replace("  ", " ", value, 1);
4650                value = string_replace("1024x768_70", NULL, value, 1);
4651                value = string_replace("  ", " ", value, 1);
4652                value = string_replace("1024x768_60", NULL, value, 1);
4653                value = string_replace("  ", " ", value, 1);
4654        }
4655
4656        value = strstrip(value);
4657        value = convertspacetolf(value);
4658
4659        return value;
4660}
4661
4662char* getmode3dchoices()
4663{
4664        char *mode3dchoicesdev = NULL;
4665        char *value = NULL;
4666
4667        mode3dchoicesdev = getconfig("mode3dchoicesdev", NULL);
4668
4669        if(mode3dchoicesdev == NULL)
4670        {
4671                return ostrcat("off\nsbs\ntab", "", 0, 0);
4672        }
4673
4674        value = readsys(mode3dchoicesdev, 1);
4675        if(value == NULL)
4676        {
4677                err("NULL detect");
4678                return NULL;
4679        }
4680
4681        value = convertspacetolf(value);
4682
4683        return value;
4684}
4685
4686char* getmode3d()
4687{
4688        char *mode3ddev = NULL;
4689        char *value = NULL;
4690
4691        mode3ddev = getconfig("mode3ddev", NULL);
4692
4693        if(mode3ddev == NULL)
4694        {
4695                err("NULL detect");
4696                return NULL;
4697        }
4698
4699        value = readsys(mode3ddev, 1);
4700        if(value == NULL)
4701        {
4702                err("NULL detect");
4703                return NULL;
4704        }
4705
4706        return value;
4707}
4708
4709int setmode3d(char* value)
4710{
4711        char* mode3ddev;
4712        int ret = 0;
4713
4714        mode3ddev = getconfig("mode3ddev", NULL);
4715
4716        if(mode3ddev != NULL && value != NULL)
4717        {
4718                debug(100, "set %s to %s", mode3ddev, value);
4719                ret = writesys(mode3ddev, value, 0);
4720                if(ret == 0) addconfig("av_mode3d", value);
4721                return ret;
4722        }
4723
4724        return 0;
4725}
4726
4727char* getvideomode()
4728{
4729        char *videomodedev = NULL;
4730        char *value = NULL;
4731
4732        videomodedev = getconfig("videomodedev", NULL);
4733
4734        if(videomodedev == NULL)
4735        {
4736                err("NULL detect");
4737                return NULL;
4738        }
4739
4740        value = readsys(videomodedev, 1);
4741        if(value == NULL)
4742        {
4743                err("NULL detect");
4744                return NULL;
4745        }
4746
4747        return value;
4748}
4749
4750void switchvideomode()
4751{
4752        int rcret = 0;
4753        char* tmpstr = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL;
4754        tmpstr = getvideomode();
4755        struct skin* playpolicy = getscreen("playpolicy");
4756        tmpstr2 = getcolorformat(2);
4757
4758        if(tmpstr != NULL)
4759        {
4760                if((ostrcmp("pal", tmpstr) == 0 || ostrncmp("576", tmpstr, 3) == 0) && ostrncmp("yuv", tmpstr2, 3) == 0)
4761                {
4762                        setvideomode("720p50", 0);
4763                        changefbresolution("720p50", 0);
4764                        changetext(playpolicy, "720p50 (rgb)");
4765                        writevfdmenu("720p50 (rgb)");
4766                        setcolorformat("rgb", 1);
4767                        unlink("/var/etc/.scart");
4768                }
4769                else if((ostrcmp("pal", tmpstr) == 0 || ostrncmp("576", tmpstr, 3) == 0) && ostrncmp("rgb", tmpstr2, 3) == 0)
4770                {
4771                        setvideomode("720p50", 0);
4772                        changefbresolution("720p50", 0);
4773                        changetext(playpolicy, "720p50 (yuv)");
4774                        writevfdmenu("720p50 (yuv)");
4775                        setcolorformat("yuv", 1);
4776                        unlink("/var/etc/.scart");
4777                }
4778                else if(ostrncmp("720", tmpstr, 3) == 0)
4779                {
4780                        setvideomode("1080i50", 0);
4781                        changefbresolution("1080i50", 0);
4782                        tmpstr3 = ostrcat("1080i50 (", tmpstr2, 0, 0);
4783                        tmpstr3 = ostrcat(tmpstr3, ")", 1, 0);
4784                        changetext(playpolicy, tmpstr3);
4785                        writevfdmenu(tmpstr3);
4786                        unlink("/var/etc/.scart");
4787                }
4788                else if(ostrncmp("1080", tmpstr, 4) == 0)
4789                {
4790                        setvideomode("576i50", 0);
4791                        changefbresolution("576i50", 0);
4792                        changetext(playpolicy, "576i50 (rgb)");
4793                        writevfdmenu("576i50 (rgb)");
4794                        setcolorformat("rgb", 1);
4795                        writesys("/var/etc/.scart", "0", 0);
4796                }
4797                /*
4798                int ret = textbox(_("Message"), _("Is this Videomode ok ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 10, 0);
4799                if(ret == 1 || ret == 2)
4800                {
4801                        setvideomode(tmpstr, 0);
4802                        changefbresolution(tmpstr, 0);
4803                }
4804                */
4805                drawscreen(playpolicy, 0, 0);
4806                while(1)
4807                {
4808                        rcret = waitrc(playpolicy, 5000, 0);
4809                        break;
4810                }
4811                clearscreen(playpolicy);
4812        }
4813        free(tmpstr);
4814        free(tmpstr2);
4815        free(tmpstr3);
4816}
4817
4818//flag 0: write videomode to config
4819//flag 1: don't write videomode to config
4820int setvideomode(char* value, int flag)
4821{
4822        char* videomodedev;
4823        int ret = 0;
4824
4825        videomodedev = getconfig("videomodedev", NULL);
4826
4827        if(videomodedev != NULL && value != NULL)
4828        {
4829                debug(100, "set %s to %s", videomodedev, value);
4830                ret = writesys(videomodedev, value, 0);
4831                if(ret == 0 && flag == 0) addconfig("av_videomode", value);
4832                return ret;
4833        }
4834
4835        return 0;
4836}
4837
4838//flag 0 = hdmi
4839//flag 1 = scart
4840int setcolorformat(char* value, int flag)
4841{
4842        char* colorformatdev;
4843        int ret = 0;
4844
4845        colorformatdev = getconfig("colorformatdev", NULL);
4846
4847        if(colorformatdev != NULL && value != NULL)
4848        {
4849                debug(100, "set %s to %s", colorformatdev, value);
4850                ret = writesys(colorformatdev, value, 0);
4851                if(ret == 0)
4852                {
4853                        if(flag == 0)
4854                                addconfig("av_colorformat", value);
4855                        else
4856                                addconfig("av_colorformatscart", value);
4857                }
4858                return ret;
4859        }
4860
4861        return 0;
4862}
4863
4864char* getcolorformat(int line)
4865{
4866        char *colorformatdev = NULL;
4867        char *value = NULL;
4868
4869        colorformatdev = getconfig("colorformatdev", NULL);
4870
4871        if(colorformatdev == NULL)
4872        {
4873                err("NULL detect");
4874                return NULL;
4875        }
4876
4877        value = readsys(colorformatdev, line);
4878        if(value == NULL)
4879        {
4880                err("NULL detect");
4881                return NULL;
4882        }
4883
4884        return value;
4885}
4886
4887int setaudiosource(char* value)
4888{
4889        char* audiosourcedev;
4890        int ret = 1;
4891
4892        audiosourcedev = getconfig("audiosourcedev", NULL);
4893
4894        if(audiosourcedev != NULL && value != NULL)
4895        {
4896                debug(100, "set %s to %s", audiosourcedev, value);
4897                ret = writesys(audiosourcedev, value, 0);
4898                if(ret == 0) addconfig("av_audiosource", value);
4899                return ret;
4900        }
4901
4902        return 0;
4903}
4904
4905char* getaudiosource()
4906{
4907        char *audiosourcedev = NULL;
4908        char *value = NULL;
4909
4910        audiosourcedev = getconfig("audiosourcedev", NULL);
4911
4912        if(audiosourcedev == NULL)
4913        {
4914                err("NULL detect");
4915                return NULL;
4916        }
4917
4918        value = readsys(audiosourcedev, 1);
4919        if(value == NULL)
4920        {
4921                err("NULL detect");
4922                return NULL;
4923        }
4924
4925        return value;
4926}
4927
4928char* getsataswitch()
4929{
4930        char *sataswitchdev = NULL;
4931        char *value = NULL;
4932
4933        sataswitchdev = getconfig("sataswitchdev", NULL);
4934
4935        if(sataswitchdev == NULL)
4936        {
4937                err("NULL detect");
4938                return NULL;
4939        }
4940
4941        value = readsys(sataswitchdev, 1);
4942        if(value == NULL)
4943        {
4944                err("NULL detect");
4945                return NULL;
4946        }
4947
4948        return value;
4949}
4950
4951int setsataswitch(char* value)
4952{
4953        char* sataswitchdev;
4954        int ret = 1;
4955
4956        sataswitchdev = getconfig("sataswitchdev", NULL);
4957
4958        if(sataswitchdev != NULL && value != NULL)
4959        {
4960                debug(100, "set %s to %s", sataswitchdev, value);
4961                ret = writesys(sataswitchdev, value, 0);
4962                return ret;
4963        }
4964
4965        return 0;
4966}
4967
4968int setprogress(int value)
4969{
4970        char *progressdev;
4971
4972        progressdev = getconfig("progressdev", NULL);
4973
4974        if(progressdev != NULL)
4975        {
4976                debug(100, "set %s to %d",progressdev, value);
4977                if(checkbox("DM7020HD") == 1 || checkbox("DM7020HDV2") == 1 || checkbox("DM900") == 1)
4978                        return writesysint(progressdev, value, 1);
4979                else
4980                        return writesysint(progressdev, value, 0);
4981        }
4982
4983        return 0;
4984}
4985
4986int setmute(int value)
4987{
4988        char* mutedev;
4989        int tmpvol, ret = 0;
4990
4991        //don't set mute 2x
4992        if(value == 1 && status.mute == 1) return 0;
4993
4994//      printf("mute value: %d\n", value);
4995
4996        if(value == 2)
4997        {
4998                tmpvol = getvol();
4999                tmpvol = tmpvol * 50 / 100;
5000                status.mute = value;
5001                setvol(tmpvol);
5002        }
5003        else
5004        {
5005                mutedev = getconfig("mutedev", NULL);
5006
5007                if(mutedev != NULL)
5008                {
5009                        debug(100, "set %s to %d", mutedev, value);
5010                        //if(status.volautochangevalue != 0 && value == 0) setvol(getvol());
5011#ifdef MIPSEL
5012                        struct dvbdev *audionode = NULL;
5013                        int openaudio = 0;
5014                        if(status.aktservice != NULL)
5015                        {
5016                                if(status.aktservice->audiodev == NULL)
5017                                {
5018                                        audionode = audioopen(0); //we must open the audio device for set mute in external player
5019                                        openaudio = 1;
5020                                }
5021                                else
5022                                        audionode = status.aktservice->audiodev;
5023                        }
5024                        ret = audiosetmute(audionode, value);
5025                        if(openaudio == 1)
5026                                audioclose(audionode, -1);
5027#else
5028                        ret = writesysint(mutedev, value, 0);
5029#endif
5030
5031                        if(ret == 0) status.mute = value;
5032                        if(status.volautochangevalue != 0 && value == 0) setvol(getvol());
5033//                      if(value == 1)
5034//                      {
5035//                              printf("mute\n");
5036//                              system("amixer -c 1 set HDMI mute &");
5037//                              system("amixer -c 1 set Analog mute &");
5038//                              system("amixer -c 1 set SPDIF mute &");
5039//                              sleep(1);
5040//                      }
5041//                      else
5042//                      {
5043//                              printf("unmute\n");
5044//                              system("amixer -c 1 set HDMI unmute &");
5045//                              system("amixer -c 1 set Analog unmute &");
5046//                              system("amixer -c 1 set SPDIF unmute &");
5047//                      }
5048
5049                        return ret;
5050                }
5051        }
5052        return 0;
5053}
5054
5055int setvol(int value)
5056{
5057        char* voldev;
5058        int ret = 0, tmpvol = value;
5059
5060        voldev = getconfig("voldev", NULL);
5061
5062        if(voldev != NULL)
5063        {
5064                if(value > 100) value = 100;
5065                if(value < 0) value = 0;
5066                if(status.volautochangevalue != 0 && value != 0)
5067                {
5068                        if(status.volautochange == 0)
5069                                value = value - (status.volautochangevalue * value / 100);
5070                }
5071                value = 63 - value * 63 / 100;
5072                debug(100, "set %s to %d", voldev, value);
5073                ret = 0;
5074                if(status.mute == 1)
5075                        status.volmute = value;
5076                else
5077                {
5078                        status.volmute = -1;
5079                        if(file_exist(voldev))
5080                                ret = writesysint(voldev, value, 0);
5081                        else
5082                                ret = 0;
5083#ifdef MIPSEL
5084                        struct dvbdev *audionode = NULL;
5085                        int openaudio = 0;
5086
5087                        if(ret == 0 && status.aktservice != NULL)
5088                        {
5089                                if(status.aktservice->audiodev == NULL)
5090                                {
5091                                        audionode = audioopen(0); //we must open the audio device for change volume in external player
5092                                        openaudio = 1;
5093                                }
5094                                else
5095                                        audionode = status.aktservice->audiodev;
5096
5097                                if(ret == 0 && audionode != NULL)
5098                                        ret = setmixer(audionode, value, value);
5099
5100                                if(ret == 0)
5101                                        status.volume = value;
5102
5103                                if(openaudio == 1)
5104                                        audioclose(audionode, -1);
5105                        }
5106#else
5107                        if(ret == 0 && status.aktservice != NULL)
5108                                ret = setmixer(status.aktservice->audiodev, value, value);
5109#endif
5110                }
5111                if(ret == 0 && status.mute != 2) addconfigint("vol", tmpvol);
5112                return ret;
5113        }
5114
5115        return 0;
5116}
5117
5118int getvol()
5119{
5120        char *voldev = NULL;
5121        char *value = NULL;
5122        int tmpvol = -1;
5123
5124        voldev = getconfig("voldev", NULL);
5125
5126        if(voldev == NULL)
5127        {
5128                err("NULL detect");
5129                return 0;
5130        }
5131        if(status.volmute == -1)
5132        {
5133                if(file_exist(voldev))
5134                        value = readsys(voldev, 1);
5135        }
5136        else
5137                tmpvol = status.volmute;
5138        if((value == NULL && status.volume == -1) && tmpvol == -1)
5139        {
5140                err("NULL detect");
5141                return 0;
5142        }
5143        if(status.volmute == -1)
5144        {
5145                if(file_exist(voldev))
5146                        tmpvol = atoi(value);
5147                else
5148                        tmpvol = status.volume;
5149        }
5150        free(value);
5151        tmpvol = 100 - tmpvol * 100 / 63;
5152        if(status.volautochangevalue != 0)
5153        {
5154                if(status.volautochange == 0 && status.volautochangevalue < 100)
5155                        tmpvol = tmpvol + ((tmpvol * status.volautochangevalue) / (100 - status.volautochangevalue));
5156        }
5157        return tmpvol;
5158}
5159
5160void setdebuglevel()
5161{
5162        debug_level = getconfigint("debuglevel", NULL);
5163        debug(0, "set debug level to %d", debug_level);
5164}
5165
5166char* getxmlentry(char *line, char *searchstr)
5167{
5168        char *buf = NULL, *buf1 = NULL, *buf2 = NULL;
5169
5170        buf = ostrstr(line, searchstr);
5171        if(buf == NULL)
5172                return NULL;
5173
5174        buf = buf + strlen(searchstr);
5175        if(buf[0] == '"')
5176        {
5177                buf = buf + 1;
5178                if(buf[0] == '\\')
5179                {
5180                        buf = buf + 1;
5181                        if(buf[0] == '"')
5182                                buf2 = strchr(buf+1, '"');
5183                        else
5184                                buf2 = strchr(buf, '"');
5185                }
5186                else
5187                        buf2 = strchr(buf, '"');
5188                if(buf2 == NULL)
5189                {
5190                        err("strchr returns NULL");
5191                        return NULL;
5192                }
5193                buf1 = strndup(buf, buf2 - buf);
5194                if(buf1 == NULL)
5195                {
5196                        err("strndup failed");
5197                        return NULL;
5198                }
5199        }
5200        else if(buf[0] == '\'')
5201        {
5202                buf = buf + 1;
5203                buf2 = strchr(buf, '\'');
5204                if(buf2 == NULL)
5205                {
5206                        err("strchr returns NULL");
5207                        return NULL;
5208                }
5209                buf1 = strndup(buf, buf2 - buf);
5210                if(buf1 == NULL)
5211                {
5212                        err("strndup failed");
5213                        return NULL;
5214                }
5215        }
5216        else
5217        {
5218                buf2 = strchr(buf, ' ');
5219                if(buf2 == NULL)
5220                {
5221                        buf2 = ostrstr(buf, "/>");
5222                        if(buf2 == NULL)
5223                        {
5224                                buf2 = strchr(buf, '>');
5225                                if(buf2 == NULL)
5226                                {
5227                                        err("strchr returns NULL");
5228                                        return NULL;
5229                                }
5230                        }
5231                }
5232                buf1 = strndup(buf, buf2 - buf);
5233                if(buf1 == NULL)
5234                {
5235                        err("strndup failed");
5236                        return NULL;
5237                }
5238        }
5239
5240        return buf1;
5241}
5242
5243char* readbintomem(const char* filename, size_t size)
5244{
5245        FILE *fd = NULL;
5246        char *fileline = NULL;
5247
5248        fileline = calloc(1, size + 1);
5249        if(fileline == NULL)
5250        {
5251                err("no mem");
5252                return NULL;
5253        }
5254
5255        fd = fopen(filename, "rb");
5256        if(fd == NULL)
5257        {
5258                perr("can't open %s", filename);
5259                free(fileline);
5260                return NULL;
5261        }
5262
5263        fread(fileline, size, 1, fd);
5264
5265        fclose(fd);
5266        return fileline;
5267}
5268
5269char* readfiletomem(const char* filename, int flag)
5270{
5271        FILE *fd = NULL;
5272        char *fileline = NULL, *buf = NULL, *tmpbuf = NULL;
5273        int bufsize = 0, bufoldsize = 0;
5274
5275        fileline = malloc(MINMALLOC);
5276        if(fileline == NULL)
5277        {
5278                err("no mem");
5279                return NULL;
5280        }
5281
5282        fd = fopen(filename, "r");
5283        if(fd == NULL)
5284        {
5285                perr("can't open %s", filename);
5286                free(fileline);
5287                return NULL;
5288        }
5289
5290        while(fgets(fileline, MINMALLOC, fd) != NULL)
5291        {
5292                if(flag == 1)
5293                        if(fileline[0] == '#' || fileline[0] == '\n')
5294                                continue;
5295
5296                bufoldsize = bufsize;
5297                bufsize += strlen(fileline);
5298                tmpbuf = buf;   buf = realloc(buf, bufsize + 1);
5299                if(buf == NULL)
5300                {
5301                        err("no mem");
5302                        free(fileline);
5303                        free(tmpbuf);
5304                        fclose(fd);
5305                        return NULL;
5306                }
5307
5308                sprintf(buf + bufoldsize, "%s", fileline);
5309        }
5310
5311        free(fileline);
5312        fclose(fd);
5313        return buf;
5314}
5315
5316char* readeittomem(const char* filename)
5317{
5318        unsigned char byte;
5319        FILE *fil = NULL;
5320        char *zeichen = NULL, *buf = NULL, *buf1 = NULL, *tmpbuf1 = NULL;
5321        int buf1size = 0, buf1oldsize = 0;
5322        int Beschreibung;
5323        int len;
5324
5325        zeichen = malloc(255);
5326        if(zeichen == NULL)
5327        {
5328                err("no mem");
5329                return NULL;
5330        }
5331        buf = malloc(255);
5332        if(buf == NULL)
5333        {
5334                free(zeichen);
5335                err("no mem");
5336                return NULL;
5337        }
5338
5339        fil = fopen(filename, "r");
5340        if(fil == NULL)
5341        {
5342                err("can't open %s", filename);
5343                free(zeichen);
5344                free(buf);
5345                return NULL;
5346        }
5347        Beschreibung = 0;
5348        fseek(fil, 12, SEEK_SET); //ersten 12 Byte nicht relevant
5349        while(!feof(fil))
5350        {
5351                byte = fgetc(fil);
5352
5353                if(byte == 0x4D)
5354                {
5355                        fseek(fil, 4,SEEK_CUR);
5356                        byte = fgetc(fil);
5357                        len = byte + 0;
5358                        byte = fgetc(fil);
5359                        fgets(zeichen, len, fil);
5360                        if(byte != 0x05)
5361                                sprintf(buf, "%c%s\n", byte, zeichen);
5362                        else
5363                                sprintf(buf, "%s\n", zeichen);
5364
5365                        buf1oldsize = buf1size;
5366                        buf1size += strlen(buf);
5367                        tmpbuf1 = buf1; buf1 = realloc(buf1, buf1size + 1);
5368                        if(buf1 == NULL)
5369                        {
5370                                err("no mem");
5371                                free(zeichen);
5372                                free(buf);
5373                                free(tmpbuf1);
5374                                fclose(fil);
5375                                return NULL;
5376                        }
5377                        sprintf(buf1 + buf1oldsize, "%s", buf);
5378
5379                        //printf("T %s\n", zeichen);
5380                        byte = fgetc(fil);
5381                        len = byte + 0;
5382                        byte = fgetc(fil);
5383                        fgets(zeichen, len, fil);
5384                        if(byte != 0x05)
5385                                sprintf(buf,"%c%s\n\n", byte, zeichen);
5386                        else
5387                                sprintf(buf,"%s\n\n", zeichen);
5388
5389                        buf1oldsize = buf1size;
5390                        buf1size += strlen(buf);
5391                        tmpbuf1 = buf1; buf1 = realloc(buf1, buf1size + 1);
5392                        if(buf1 == NULL)
5393                        {
5394                                err("no mem");
5395                                free(zeichen);
5396                                free(buf);
5397                                free(tmpbuf1);
5398                                fclose(fil);
5399                                return NULL;
5400                        }
5401                        sprintf(buf1 + buf1oldsize, "%s", buf);
5402
5403                }
5404                else if(byte == 0x4E)
5405                {
5406                        fseek(fil, 6, SEEK_CUR);
5407                        byte = fgetc(fil);
5408                        len = byte;
5409                        byte = fgetc(fil);
5410                        fgets(zeichen, len, fil);
5411                        if(Beschreibung == 0)
5412                        {
5413                                if(byte != 0x05)
5414                                        sprintf(buf, "%c%s", byte, zeichen);
5415                                else
5416                                        sprintf(buf, "%s", zeichen);
5417                                Beschreibung = 1;
5418                        }
5419                        else
5420                        {
5421                                if(byte != 0x05)
5422                                        sprintf(buf, "%c%s", byte, zeichen);
5423                                else
5424                                        sprintf(buf, "%s", zeichen);
5425                        }
5426
5427                        buf1oldsize = buf1size;
5428                        buf1size += strlen(buf);
5429                        tmpbuf1 = buf1; buf1 = realloc(buf1, buf1size + 1);
5430                        if(buf1 == NULL)
5431                        {
5432                                err("no mem");
5433                                free(zeichen);
5434                                free(buf);
5435                                free(tmpbuf1);
5436                                fclose(fil);
5437                                return NULL;
5438                        }
5439                        sprintf(buf1 + buf1oldsize, "%s", buf);
5440
5441                }
5442                else
5443                {
5444                        byte = fgetc(fil);
5445                        len= byte;
5446                        fgets(zeichen, len + 1, fil);
5447                }
5448        }
5449        free(zeichen);
5450        free(buf);
5451        fclose(fil);
5452        return buf1;
5453}
5454
5455char* command(char* input)
5456{
5457        int maxlen = 0, pos = 0;
5458        char* tmpstr = NULL, *fileline = NULL;
5459        FILE *iopipe = NULL;
5460
5461        if(input == NULL) return NULL;
5462
5463        fileline = malloc(MINMALLOC);
5464        if(fileline == NULL)
5465        {
5466                err("no mem");
5467                return NULL;
5468        }
5469
5470        if((iopipe = popen(input, "r")) == NULL)
5471        {
5472                free(fileline);
5473                return NULL;
5474        }
5475
5476        while(!feof(iopipe))
5477        {
5478                if(fgets(fileline, MINMALLOC, iopipe) != NULL)
5479                        ostrcatbig(&tmpstr, fileline, &maxlen, &pos);
5480        }
5481
5482        if(pos > 0)
5483        {
5484                char* tmp = tmpstr;
5485                tmpstr = realloc(tmpstr, pos + 1);
5486                if(tmpstr == NULL)
5487                        tmpstr = tmp;
5488        }
5489
5490        free(fileline);
5491        pclose(iopipe);
5492        return tmpstr;
5493}
5494
5495char* string_tolower(char *str)
5496{
5497/*
5498        char *p1 = str;
5499
5500        if(str == NULL) return NULL;
5501
5502        while(*p1 != '\0')
5503                *p1++ = tolower(*p1);
5504
5505        return str;
5506*/
5507        if(str == NULL) return NULL;
5508
5509        int i=0;
5510        while (str[i])
5511        {
5512                str[i] = tolower(str[i]);
5513                i++;
5514        }
5515        return str;
5516}
5517
5518char* string_toupper(char *str)
5519{
5520/*
5521        char *p1 = str;
5522
5523        if(str == NULL) return NULL;
5524
5525        while(*p1 != '\0')
5526                *p1++ = toupper(*p1);
5527
5528*/
5529        if(str == NULL) return NULL;
5530
5531        int i=0;
5532        while (str[i])
5533        {
5534                str[i] = toupper(str[i]);
5535                i++;
5536        }
5537        return str;
5538}
5539
5540char* stringreplacecharonce(char *str, char c1, char c2)
5541{
5542        char *p1 = str;
5543
5544        if(str == NULL) return NULL;
5545
5546        while(*p1 != '\0')
5547        {
5548                if(*p1 == c1)
5549                {
5550                        *p1 = c2;
5551                        break;
5552                }
5553                p1++;
5554        }
5555
5556        return str;
5557}
5558
5559char* stringreplacechar(char *str, char c1, char c2)
5560{
5561        char *p1 = str;
5562
5563        if(str == NULL) return NULL;
5564
5565        while(*p1 != '\0')
5566        {
5567                if(*p1 == c1) *p1 = c2;
5568                p1++;
5569        }
5570
5571        return str;
5572}
5573
5574
5575char* string_removechar(char *str)
5576{
5577        char *p1 = str;
5578
5579        if(str == NULL) return NULL;
5580
5581        while(*p1 != '\0')
5582        {
5583                if(*p1 == '.') *p1 = ' ';
5584                else if(*p1 == '-') *p1 = ' ';
5585                else if(*p1 == '_') *p1 = ' ';
5586                else if(*p1 == '/') *p1 = ' ';
5587                p1++;
5588        }
5589
5590        return str;
5591}
5592
5593char* string_withchars2return(char *str)
5594{
5595        char *p1 = str;
5596
5597        if(str == NULL) return NULL;
5598
5599        while(*p1 != '\0')
5600        {
5601                if(*p1 == ' ') *p1 = '\n';
5602                p1++;
5603        }
5604
5605        return str;
5606}
5607
5608char* string_remove_whitechars(char *text)
5609{
5610        char *p1 = text, *p2 = text;
5611
5612        if(text == NULL) return NULL;
5613
5614        while(*p1 != '\0')
5615        {
5616                if(*p1 == ' ')
5617                        ++p1;
5618                else
5619                        *p2++ = *p1++;
5620        }
5621        *p2 = '\0';
5622
5623        return text;
5624}
5625
5626char* strstrip(char *text)
5627{
5628        char* tmpstr = text;
5629
5630        if(text == NULL) return NULL;
5631        int len = strlen(text);
5632
5633        while(isspace(tmpstr[len - 1])) tmpstr[--len] = '\0';
5634        while(*tmpstr && isspace(*tmpstr)) ++tmpstr, --len;
5635
5636        if(text != tmpstr) memmove(text, tmpstr, len + 1);
5637
5638        return text;
5639}
5640
5641char* string_strip_whitechars(char *text)
5642{
5643        char *p1 = text, *p2 = text;
5644
5645        if(text == NULL)
5646                return NULL;
5647
5648        while(*p1 != '\0')
5649        {
5650                if(*p1 == ' ' && *(p1 + 1) == ' ')
5651                        ++p1;
5652                else
5653                        *p2++ = *p1++;
5654        }
5655        *p2 = '\0';
5656
5657        return text;
5658}
5659
5660char* string_replace_all(char *search, char *replace, char *string, int free1)
5661{
5662        char* tmpstr = NULL;
5663        char* searchpos = NULL;
5664
5665        if(string == NULL || search == NULL)
5666        {
5667                tmpstr = ostrcat(tmpstr, string, 1, 0);
5668                if(free1 == 1) free(string);
5669                return tmpstr;
5670        }
5671
5672        searchpos = strstr(string, search);
5673        if(searchpos == NULL)
5674        {
5675                tmpstr = ostrcat(tmpstr, string, 1, 0);
5676                if(free1 == 1) free(string);
5677                return tmpstr;
5678        }
5679
5680        int count = 0;
5681        int stringlen = strlen(string);
5682        int searchlen = strlen(search);
5683        int replacelen = strlen(replace);
5684
5685        while(searchpos != NULL)
5686        {
5687                count++;
5688                searchpos = strstr(searchpos + searchlen, search);
5689        }
5690
5691        int len = stringlen - (searchlen * count) + (replacelen * count);
5692        tmpstr = calloc(1, len + 1);
5693        if(tmpstr == NULL)
5694        {
5695                err("no mem");
5696                tmpstr = ostrcat(tmpstr, string, 1, 0);
5697                if(free1 == 1) free(string);
5698                return tmpstr;
5699        }
5700
5701        len = 0;
5702        char* str = string;
5703        char* tmp = tmpstr;
5704        searchpos = strstr(str, search);
5705        while(searchpos != NULL)
5706        {
5707                len = searchpos - str;
5708                memcpy(tmp, str, len);
5709                memcpy(tmp + len, replace, replacelen);
5710                tmp += len + replacelen;
5711                str += len + searchlen;
5712                searchpos = strstr(str, search);
5713        }
5714        memcpy(tmp, str, strlen(str));
5715
5716        if(free1 == 1) free(string);
5717
5718        return tmpstr;
5719}
5720
5721char* string_replace_remove_last_chars(char *search, char *replace, char *string, int free1)
5722{
5723        char* searchpos = NULL;
5724        char* tmpstr = NULL;
5725
5726        if(string == NULL || search == NULL)
5727        {
5728                tmpstr = ostrcat(tmpstr, string, 1, 0);
5729                if(free1 == 1) free(string);
5730                return tmpstr;
5731        }
5732
5733        searchpos = ostrstr(string, search);
5734
5735        if(searchpos == NULL)
5736        {
5737                tmpstr = ostrcat(tmpstr, string, 1, 0);
5738                if(free1 == 1) free(string);
5739                return tmpstr;
5740        }
5741
5742        tmpstr = strndup(string, searchpos - string);
5743        if(replace != NULL)
5744                tmpstr = ostrcat(tmpstr, replace, 1, 0);
5745
5746        if(free1 == 1) free(string);
5747
5748        return tmpstr;
5749}
5750
5751char* string_replace(char *search, char *replace, char *string, int free1)
5752{
5753        char* searchpos = NULL;
5754        char* tmpstr = NULL;
5755
5756        if(string == NULL || search == NULL)
5757        {
5758                tmpstr = ostrcat(tmpstr, string, 1, 0);
5759                if(free1 == 1) free(string);
5760                return tmpstr;
5761        }
5762
5763        searchpos = ostrstr(string, search);
5764
5765        if(searchpos == NULL)
5766        {
5767                tmpstr = ostrcat(tmpstr, string, 1, 0);
5768                if(free1 == 1) free(string);
5769                return tmpstr;
5770        }
5771
5772        tmpstr = strndup(string, searchpos - string);
5773        if(replace != NULL)
5774                tmpstr = ostrcat(tmpstr, replace, 1, 0);
5775        tmpstr = ostrcat(tmpstr, string + (searchpos - string) + strlen(search), 1, 0);
5776
5777        if(free1 == 1) free(string);
5778
5779        return tmpstr;
5780}
5781
5782//flag 0: search full str
5783//flag 1: search only end of string
5784char* ostrrstrcase(char* str, char* search, int len, int flag)
5785{
5786        int slen = 0;
5787        char* tmpstr = NULL;
5788
5789        if(str == NULL || search == NULL) return NULL;
5790
5791        if(len == -1) len = strlen(str);
5792        slen = strlen(search);
5793        if(slen > len) return NULL;
5794
5795        for(tmpstr = str + len - slen; tmpstr >= str; tmpstr--)
5796        {
5797                if(strncasecmp(tmpstr, search, slen) == 0)
5798                        return tmpstr;
5799                if(flag == 1) return NULL;
5800        }
5801
5802        return NULL;
5803}
5804
5805//flag 0: search full str
5806//flag 1: search only end of string
5807char* ostrrstr(char* str, char* search, int len, int flag)
5808{
5809        int slen = 0;
5810        char* tmpstr = NULL;
5811
5812        if(str == NULL || search == NULL) return NULL;
5813
5814        if(len == -1) len = strlen(str);
5815        slen = strlen(search);
5816        if(slen > len) return NULL;
5817
5818        for(tmpstr = str + len - slen; tmpstr >= str; tmpstr--)
5819        {
5820                if(strncmp(tmpstr, search, slen) == 0)
5821                        return tmpstr;
5822                if(flag == 1) return NULL;
5823        }
5824
5825        return NULL;
5826}
5827
5828char* ostrstr(char* str, char* search)
5829{
5830        char* ret = NULL;
5831
5832        if(str == NULL || search == NULL) return NULL;
5833        ret = strstr(str, search);
5834
5835        return ret;
5836}
5837
5838int file_exist(char* filename)
5839{
5840        if(access(filename, F_OK) == 0)
5841                return 1;
5842        else
5843                return 0;
5844}
5845
5846char* string_newline(char* str)
5847{
5848        if(str == NULL) return NULL;
5849
5850        int size = strlen(str);
5851
5852        if(str[size - 1] == '\n')
5853                str[size - 1] = '\0';
5854
5855        return str;
5856}
5857
5858char* string_quote(char* str)
5859{
5860        char* tmpstr = NULL;
5861
5862        tmpstr = ostrcat("\"", str, 0, 0);
5863        tmpstr = ostrcat(tmpstr, "\"", 1, 0);
5864
5865        return tmpstr;
5866}
5867
5868struct splitstr* strsplit(char *str, char *tok, int* count)
5869{
5870        char *tmpstr = NULL;
5871        struct splitstr *array = NULL, *tmparray = NULL;
5872        *count = 0;
5873
5874        if(str == NULL || tok == NULL)
5875                return NULL;
5876
5877        tmpstr = strtok(str, tok);
5878        while(tmpstr != NULL)
5879        {
5880                *count = *count + 1;
5881                tmparray = array; array = (struct splitstr*)realloc(array, sizeof(struct splitstr*) * (*count));
5882                if(array == NULL)
5883                {
5884                        err("no mem");
5885                        free(tmparray);
5886                        return NULL;
5887                }
5888
5889                (&array[(*count) - 1])->part = tmpstr;
5890                tmpstr = strtok(NULL, tok);
5891        }
5892
5893        return array;
5894}
5895
5896char* string_shortname(char *tmpfilename, int mode)
5897{
5898        debug(50, "in %s", tmpfilename);
5899
5900//      char replacelist[] = "avi mkv x264 se disc0 disc1 disc2 disc3 disc4 0disc 1disc 2disc 3disc 4disc season0 season1 season2 season3 season4 season5 season6 season7 season8 season9 hdtv 720p 1080i 1080p uncut cd0 cd1 cd2 cd3 cd4 cd5 cd6 cd7 cd8 cd9 dvd0 dvd1 dvd2 dvd3 dvd4 ac3d ac3 bdrip bluray cam camrip complete custom cut dc directors dl doku dts dvdr dvdrip dvdscr dvdscreener extended french finnish german hd hddvd hddvdrip hdtv int internal int ld limited multi multisubs nordic ntsc pal pl r1 r5 recut remastered repack rip screener se see special.edition sse stv subbed swedish staffel tc telecine telesync ts unrated ws xxx italian";
5901        char* str = NULL;
5902
5903        if(mode==1)
5904        {
5905                char* replacelist = "avi mkv x264 xvid se uncut ac3d ac3hd ac3 bdrip bluray cam camrip complete custom cut dc directors dl doku dts dvdr dvdrip dvdscr dvdscreener ecc extended french finnish german hd hddvd hddvdrip hdtv int internal int ld limited multi multisubs nordic ntsc pal pl r1 r5 recut remastered repack rip screener se see sse stv subbed swedish staffel tc telecine telesync ts unrated ws xxx italian";
5906                str = ostrcat(str, replacelist, 1, 0);
5907        }
5908        else if(mode==2)
5909        {
5910                char* replacelist = "1080i 1080p 720p ac3 ac3d ac3hd avi bdrip bluray cam camrip complete custom cut dat dc directors divx dl doku dts dvdr dvdrip dvdscr dvdscreener ecc ed extended finnish flv french german hd hddvd hddvdrip hdtv int internal ld limited linedubbed m2ts m4v md mkv mov mp4 mpeg mpg mts multi multisubs nordic ntsc pal pl proper r1 r3 r5 recut remastered repack rip rm screener se sse staffel stv subbed svcd swedish tc telecine telesync trp ts uc uncut unrated ur vcd vdr vob wmv ws x264 xvid xxx";
5911                str = ostrcat(str, replacelist, 1, 0);
5912        }
5913        else
5914        {
5915                char* replacelist = "disc0 disc1 disc2 disc3 disc4 0disc 1disc 2disc 3disc 4disc season0 season1 season2 season3 season4 season5 season6 season7 season8 season9 hdtv 720p 1080i 1080p cd0 cd1 cd2 cd3 cd4 cd5 cd6 cd7 cd8 cd9 dvd0 dvd1 dvd2 dvd3 dvd4";
5916                str = ostrcat(str, replacelist, 1, 0);
5917        }
5918
5919        char* replace = NULL;
5920        struct splitstr* ret1 = NULL;
5921        int count = 0;
5922        int i = 0;
5923        ret1 = strsplit(str, " ", &count);
5924        int max = count - 1;
5925        int first = 1;
5926
5927        for(i = 0; i < max; i++)
5928        {
5929                struct splitstr* ret2 = NULL;
5930                int count2 = 0;
5931                int j = 0;
5932                char *tmpstr = NULL;
5933                tmpstr = ostrcat(tmpstr, tmpfilename, 1, 0);
5934                ret2 = strsplit(tmpstr, " ,.-_", &count2);
5935
5936                for(j = 0; j < count2; j++)
5937                {
5938                        if(j > 0)
5939                        {
5940                                if(ostrcmp((&ret1[i])->part, (&ret2[j])->part) == 0)
5941                                {
5942                                        if(mode==1)
5943                                        {
5944                                                tmpfilename = string_replace((&ret2[j])->part, replace, tmpfilename, 1);
5945                                                continue;
5946                                        }
5947                                        else if(mode==2)
5948                                        {
5949                                                tmpfilename = string_replace_remove_last_chars((&ret2[j])->part, replace, tmpfilename, 1);
5950                                                //break;
5951                                                continue;
5952                                        }
5953                                        else
5954                                        {
5955                                                tmpfilename = string_replace((&ret2[j])->part, replace, tmpfilename, 1);
5956                                                continue;
5957                                        }
5958                                }
5959                                else if(first == 1 && mode == 2)
5960                                {
5961//                                      printf("zahl: %s\n", (&ret2[j])->part);
5962                                        int theCharacter = atoi((&ret2[j])->part);
5963                                        if(theCharacter != 0)
5964                                        {
5965//                                              printf("found zahl: %s\n", (&ret2[j])->part);
5966                                                if(theCharacter > 1800 && theCharacter < 2100)
5967                                                {
5968//                                                      printf("found year: %s\n", (&ret2[j])->part);
5969                                                        tmpfilename = string_replace_remove_last_chars((&ret2[j])->part, "", tmpfilename, 1);
5970                                                        break;
5971                                                }
5972                                        }
5973                                }
5974                        }
5975                }
5976                free(ret2); ret2 = NULL;
5977                first = 0;
5978                free(tmpstr), tmpstr = NULL;
5979        }
5980
5981        free(ret1); ret1 = NULL;
5982        free(replace); replace = NULL;
5983        free(str); str = NULL;
5984
5985        debug(50, "out %s", tmpfilename);
5986        return tmpfilename;
5987}
5988
5989char* get_uuid(char* device)
5990{
5991        debug(60, "in %s", device);
5992        char* cmd = NULL, *tmpstr = NULL;
5993
5994        if(device == NULL) return NULL;
5995#ifdef MIPSEL
5996        cmd = ostrcat(cmd, "blkid -w /dev/null -c /dev/null -s UUID /dev/", 1, 0);
5997#else
5998        cmd = ostrcat(cmd, "/bin/blkid -w /dev/null -c /dev/null -s UUID /dev/", 1, 0);
5999#endif
6000        cmd = ostrcat(cmd, device, 1, 0);
6001        cmd = ostrcat(cmd, " | cut -d'\"' -f2", 1, 0);
6002
6003        tmpstr = string_newline(command(cmd));
6004
6005        if(ostrcmp(string_newline(tmpstr), "") == 0)
6006        {
6007                free(tmpstr); tmpstr = NULL;
6008        }
6009
6010        debug(60, "out %s", cmd);
6011        free(cmd); cmd = NULL;
6012        return tmpstr;
6013}
6014
6015char* get_label(char* device)
6016{
6017        debug(60, "in %s", device);
6018        char* cmd = NULL, *tmpstr = NULL;
6019
6020        if(device == NULL) return NULL;
6021#ifdef MIPSEL
6022        cmd = ostrcat(cmd, "blkid -w /dev/null -c /dev/null -s LABEL /dev/", 1, 0);
6023#else
6024        cmd = ostrcat(cmd, "/bin/blkid -w /dev/null -c /dev/null -s LABEL /dev/", 1, 0);
6025#endif
6026        cmd = ostrcat(cmd, device, 1, 0);
6027        cmd = ostrcat(cmd, " | cut -d'\"' -f2", 1, 0);
6028
6029        tmpstr = string_newline(command(cmd));
6030
6031        if(tmpstr == NULL)
6032                tmpstr = ostrcat(tmpstr, "NONLABEL", 1, 0);
6033
6034        if(ostrcmp(string_newline(tmpstr), "") == 0)
6035                tmpstr = ostrcat(tmpstr, "NONLABEL", 1, 0);
6036
6037        debug(60, "out %s", cmd);
6038        free(cmd); cmd = NULL;
6039        return tmpstr;
6040}
6041
6042char* get_filesystem(char* device)
6043{
6044        debug(60, "in %s", device);
6045        char* cmd = NULL, *tmpstr = NULL;
6046
6047        if(device == NULL) return NULL;
6048#ifdef MIPSEL
6049        cmd = ostrcat(cmd, "blkid -w /dev/null -c /dev/null -s TYPE /dev/", 1, 0);
6050#else
6051        cmd = ostrcat(cmd, "/bin/blkid -w /dev/null -c /dev/null -s TYPE /dev/", 1, 0);
6052#endif
6053        cmd = ostrcat(cmd, device, 1, 0);
6054        cmd = ostrcat(cmd, " | cut -d'\"' -f2", 1, 0);
6055
6056        tmpstr = string_newline(command(cmd));
6057
6058        if(tmpstr == NULL)
6059                tmpstr = ostrcat(tmpstr, "NONTYPE", 1, 0);
6060
6061        if(ostrcmp(string_newline(tmpstr), "") == 0)
6062                tmpstr = ostrcat(tmpstr, "NONTYPE", 1, 0);
6063
6064        debug(60, "out %s", cmd);
6065        free(cmd); cmd = NULL;
6066        return tmpstr;
6067}
6068
6069//flag 0: convert ip to 000.000.000.000
6070//flag 1: convert ip to 0.0.0.0
6071char* fixip(char* ipinput, int flag)
6072{
6073        debug(60, "in %s", ipinput);
6074        int ret = 0;
6075        char* ipout = NULL;
6076        unsigned char ip[4];
6077
6078        ip[0] = 0;
6079        ip[1] = 0;
6080        ip[2] = 0;
6081        ip[3] = 0;
6082
6083        if(ipinput == NULL) return NULL;
6084        ret = sscanf(ipinput, "%hhu.%hhu.%hhu.%hhu", &ip[0], &ip[1], &ip[2], &ip[3]);
6085        if(ret != 4) return NULL;
6086
6087        ipout = malloc(16);
6088        if(ipout == NULL)
6089        {
6090                err("no mem");
6091                return NULL;
6092        }
6093
6094        if(flag == 1)
6095                snprintf(ipout, 16, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
6096        else
6097                snprintf(ipout, 16, "%03d.%03d.%03d.%03d", ip[0], ip[1], ip[2], ip[3]);
6098
6099        return ipout;
6100}
6101
6102void setfanspeed(int speed, int aktion)
6103{
6104        char* speedWert = NULL;
6105        char* speedSet = NULL;
6106        int base = 0;
6107
6108        if(checkbox("UFS922") == 1)
6109                base = 100;
6110        else
6111                base = -15;
6112
6113
6114        if(speed < 0)
6115        {
6116                if(speed == -1)
6117                        speedWert = getconfig("fanspeed", NULL);
6118                else
6119                        speedWert = getconfig("fanspeedstandby", NULL);
6120                if(speedWert == NULL)
6121                        speedSet = ostrcat(speedSet, oitoa(base + 70), 1, 1);
6122                else
6123                        speedSet = ostrcat(speedSet, speedWert, 1, 0);
6124        }
6125        else
6126        {
6127                if(speed == 0)
6128                        speedSet = ostrcat(speedSet, oitoa(base + 15), 1, 1);
6129                else if(speed == 25)
6130                        speedSet = ostrcat(speedSet, oitoa(base + 30), 1, 1);
6131                else if(speed == 50)
6132                        speedSet = ostrcat(speedSet, oitoa(base + 45), 1, 1);
6133                else if(speed == 75)
6134                        speedSet = ostrcat(speedSet, oitoa(base + 55), 1, 1);
6135                else
6136                        speedSet = ostrcat(speedSet, oitoa(base + 70), 1, 1);
6137        }
6138
6139        if(checkbox("UFS922") == 1)
6140                writesys("/proc/stb/fan/fan_ctrl", speedSet, 1);
6141        else
6142                writesys("/proc/stb/fp/fan_pwm", speedSet, 1);
6143
6144        if(aktion == 1)
6145                addconfig("fanspeed", speedSet);
6146        else if(aktion == 2)
6147                addconfig("fanspeedstandby", speedSet);
6148
6149        free(speedSet); speedSet=NULL;
6150}
6151
6152void setaktres()
6153{
6154        int m_width = 0;
6155        char* res = NULL;
6156        char* res_akt = NULL;
6157        char* res_sd = NULL;
6158        int count = 1;
6159        int sec = 0;
6160
6161        m_lock(&status.setaktresmutex, 23);
6162
6163        if(status.restimer == NULL)
6164                goto end;
6165
6166        sec = (int)status.restimer->param1;
6167
6168        if(sec > 0)
6169        {
6170                while(status.restimer->aktion == START && count <= (sec * 10))
6171                {
6172                        usleep(100000);
6173                        if(status.restimer->aktion != START)
6174                                goto end;
6175                        count++;
6176                }
6177        }
6178        if(status.restimer->aktion != START) goto end;
6179
6180        if(videoreadqwidth(status.aktservice->videodev) == 0)
6181        {
6182                if(status.restimer->aktion != START) goto end;
6183                m_width = status.videosize.w;
6184                if(m_width == 720)
6185                {
6186                        res_sd = getconfig("av_videomode_autores_sd", NULL);
6187                        if(res_sd == NULL)
6188                                res = ostrcat(res, "576i50", 1, 0);
6189                        else
6190                                res = ostrcat(res, res_sd, 1, 0);
6191                }
6192                else if (m_width == 1280)
6193                        res = ostrcat(res, "720p50", 1, 0);
6194                else if (m_width == 1920)
6195                        res = ostrcat(res, "1080i50", 1, 0);
6196                else
6197                        m_width = 0;
6198
6199                if(m_width > 0)
6200                {
6201                        if(status.restimer->aktion != START) goto end;
6202                        res_akt = getvideomode();
6203                        if(status.restimer->aktion != START) goto end;
6204                        if(ostrcmp(res_akt, res) != 0)
6205                        {
6206                                if(status.restimer->aktion != START) goto end;
6207                                setvideomode(res, 1);
6208                                changefbresolution(res, 1);
6209/*
6210                                if(status.restimer->aktion != START) goto end;
6211
6212                                count = 0;
6213                                while(status.restimer->aktion == START && count < 10)
6214                                {
6215                                        usleep(100000);
6216                                        if(status.restimer->aktion != START)
6217                                                goto end;
6218                                        count++;
6219                                }
6220
6221                                if(status.restimer->aktion != START) goto end;
6222*/
6223                                screenautores(res, 5, 0);
6224                        }
6225                }
6226        }
6227        else
6228        {
6229                if(status.restimer->aktion != START) goto end;
6230                if(status.servicetype == 0)
6231                        textbox(_("Message"), _("ERROR cant read res"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 5, 0);
6232        }
6233
6234end:
6235        free(res); res = NULL;
6236        status.restimer = NULL;
6237        m_unlock(&status.setaktresmutex, 23);
6238        return;
6239}
6240
6241char* gettimestamp()
6242{
6243        char* timestamp = NULL;
6244        struct timeval numtime;
6245
6246        gettimeofday(&numtime, 0);
6247        timestamp = ostrcat(timestamp, olutoa(numtime.tv_sec), 1, 1);
6248        timestamp = ostrcat(timestamp, olutoa(numtime.tv_usec), 1, 1);
6249
6250        return timestamp;
6251}
6252
6253char* string_decode(char* input, int flag)
6254{
6255        if(input == NULL) return input;
6256
6257        while(ostrstr(input, "\\u00") != NULL)
6258        {
6259                debug(210, "input: %s", input);
6260                input = string_replace("\\u00", "%", input, 1);
6261                debug(210, "input: %s", input);
6262        }
6263
6264        while(ostrstr(input, "&amp;") != NULL)
6265        {
6266                debug(210, "input: %s", input);
6267                input = string_replace("&amp;", "und", input, 1);
6268                debug(210, "input: %s", input);
6269        }
6270
6271        while(ostrstr(input, "&gt;") != NULL)
6272        {
6273                debug(210, "input: %s", input);
6274                input = string_replace("&gt;", ">", input, 1);
6275                debug(210, "input: %s", input);
6276        }
6277
6278        while(ostrstr(input, "&lt;") != NULL)
6279        {
6280                debug(210, "input: %s", input);
6281                input = string_replace("&lt;", "<", input, 1);
6282                debug(210, "input: %s", input);
6283        }
6284
6285        while(ostrstr(input, "&quot;") != NULL)
6286        {
6287                debug(210, "input: %s", input);
6288                input = string_replace("&quot;", "\"", input, 1);
6289                debug(210, "input: %s", input);
6290        }
6291
6292        while(ostrstr(input, "&#x") != NULL)
6293        {
6294                debug(210, "out %s", input);
6295                input = string_replace("&#x", "%", input, 1);
6296                debug(210, "input: %s", input);
6297        }
6298
6299        while(ostrstr(input, "&#") != NULL)
6300        {
6301                debug(210, "input: %s", input);
6302                input = string_replace("&#", "%", input, 1);
6303                debug(210, "input: %s", input);
6304        }
6305
6306        if(flag == 1)
6307                htmldecode2(input, input);
6308        else
6309                htmldecode(input, input);
6310
6311        while(ostrstr(input, ";") != NULL)
6312        {
6313                debug(210, "input: %s", input);
6314                input = string_replace(";", NULL, input, 1);
6315                debug(210, "input: %s", input);
6316        }
6317
6318        return input;
6319}
6320
6321char* string_deltags(char* str)
6322{
6323        int i = 0, y = 0, len = 0;
6324
6325        if(str == NULL) return 0;
6326
6327        len = strlen(str);
6328
6329        int skip = 0;
6330        for(i = 0; i < len; i++)
6331        {
6332                if(str[i] == '<')
6333                        skip = 1;
6334                else if(str[i] == '>')
6335                        skip = 0;
6336
6337                if(skip == 0 && str[i] != '>')
6338                {
6339                        str[y] = str[i];
6340                        y++;
6341                }
6342        }
6343        str[y] = '\0';
6344
6345        return str;
6346}
6347
6348char* string_striptags(char* str)
6349{
6350        int i = 0, len = 0;
6351
6352        if(str == NULL) return 0;
6353
6354        len = strlen(str);
6355
6356        int skip = 0;
6357        for(i = 0; i < len; i++)
6358        {
6359                if(str[i] == '<')
6360                        skip = 1;
6361                else if(str[i] == '>')
6362                {
6363                        skip = 0;
6364                        str[i] = ' ';
6365                }
6366                if(skip == 1)
6367                        str[i] = ' ';
6368        }
6369
6370        return strstrip(str);
6371}
6372
6373char* string_resub(char* str, char* str2, char* input, int dir)
6374{
6375        char* tmpstr = NULL, *pos = NULL, *pos2 = NULL;
6376
6377        if(str == NULL || str2 == NULL || input == NULL) return NULL;
6378
6379        if(dir == 0)
6380        {
6381                pos = ostrstr(input, str);
6382                if(pos == NULL) return NULL;
6383                pos += strlen(str);
6384
6385                pos2 = ostrstr(pos, str2);
6386                if(pos2 == NULL) return NULL;
6387        }
6388        else
6389        {
6390                pos2 = ostrstr(input, str2);
6391                if(pos2 == NULL) return NULL;
6392
6393                pos = ostrrstr(input, str, pos2 - input, 0);
6394                if(pos == NULL) return NULL;
6395                pos += strlen(str);
6396        }
6397
6398        tmpstr = strndup(pos, pos2 - pos);
6399
6400        return strstrip(tmpstr);
6401}
6402
6403char* ostrstrcase(char* str, char* sub)
6404{
6405        size_t len = 0;
6406
6407        if(str == NULL || sub == NULL) return NULL;
6408
6409        len = strlen(sub);
6410        while(*str)
6411        {
6412                if(toupper(*str) == toupper(*sub) && strncasecmp(str, sub, len) == 0)
6413                        return str;
6414                ++str;
6415        }
6416        return NULL;
6417}
6418
6419//flag 0: convert port to 00021
6420//flag 1: convert port to 21
6421char* fixport(char* input, int flag)
6422{
6423        char* tmpstr = NULL;
6424
6425        if(flag == 0)
6426        {
6427                int plen = strlen(input);
6428                if(plen < 5)
6429                {
6430                        int i;
6431                        for(i = 0; i < 5 - plen; i++)
6432                                tmpstr = ostrcat(tmpstr, "0", 1, 0);
6433                }
6434                tmpstr = ostrcat(tmpstr, input, 1, 0);
6435        }
6436        else
6437        {
6438                while (*input && *input == '0')
6439                input++;
6440
6441                tmpstr = ostrcat(tmpstr, input, 1, 0);
6442        }
6443        return tmpstr;
6444}
6445
6446//flag 0: Mon > Montag
6447//flag 1: Mon > Mon
6448//flag 2: Monday > Montag
6449//flag 3: January > Januar
6450char* translate_time(char* input, int flag)
6451{
6452        char* tmpstr = NULL;
6453        if(input == NULL) return tmpstr;
6454        tmpstr = ostrcat(tmpstr, input, 1, 1);
6455
6456        if(flag == 0)
6457        {
6458                tmpstr = string_replace_all("Mon", _("Monday"), tmpstr, 1);
6459                tmpstr = string_replace_all("Tue", _("Tuesday"), tmpstr, 1);
6460                tmpstr = string_replace_all("Wed", _("Wednesday"), tmpstr, 1);
6461                tmpstr = string_replace_all("Thu", _("Thursday"), tmpstr, 1);
6462                tmpstr = string_replace_all("Fri", _("Friday"), tmpstr, 1);
6463                tmpstr = string_replace_all("Sat", _("Saturday"), tmpstr, 1);
6464                tmpstr = string_replace_all("Sun", _("Sunday"), tmpstr, 1);
6465        }
6466        else if(flag == 2)
6467        {
6468                tmpstr = string_replace_all("Monday", _("Monday"), tmpstr, 1);
6469                tmpstr = string_replace_all("Tuesday", _("Tuesday"), tmpstr, 1);
6470                tmpstr = string_replace_all("Wednesday", _("Wednesday"), tmpstr, 1);
6471                tmpstr = string_replace_all("Thursday", _("Thursday"), tmpstr, 1);
6472                tmpstr = string_replace_all("Friday", _("Friday"), tmpstr, 1);
6473                tmpstr = string_replace_all("Saturday", _("Saturday"), tmpstr, 1);
6474                tmpstr = string_replace_all("Sunday", _("Sunday"), tmpstr, 1);
6475        }
6476        else if(flag == 3)
6477        {
6478                tmpstr = string_replace_all("January", _("January"), tmpstr, 1);
6479                tmpstr = string_replace_all("February", _("February"), tmpstr, 1);
6480                tmpstr = string_replace_all("March", _("March"), tmpstr, 1);
6481                tmpstr = string_replace_all("April", _("April"), tmpstr, 1);
6482                tmpstr = string_replace_all("May", _("May"), tmpstr, 1);
6483                tmpstr = string_replace_all("June", _("June"), tmpstr, 1);
6484                tmpstr = string_replace_all("July", _("July"), tmpstr, 1);
6485                tmpstr = string_replace_all("August", _("August"), tmpstr, 1);
6486                tmpstr = string_replace_all("September", _("September"), tmpstr, 1);
6487                tmpstr = string_replace_all("October", _("October"), tmpstr, 1);
6488                tmpstr = string_replace_all("November", _("November"), tmpstr, 1);
6489                tmpstr = string_replace_all("December", _("December"), tmpstr, 1);
6490        }
6491        else
6492        {
6493                tmpstr = string_replace("Mon", _("Mon"), tmpstr, 1);
6494                tmpstr = string_replace("Tue", _("Tue"), tmpstr, 1);
6495                tmpstr = string_replace("Wed", _("Wed"), tmpstr, 1);
6496                tmpstr = string_replace("Thu", _("Thu"), tmpstr, 1);
6497                tmpstr = string_replace("Fri", _("Fri"), tmpstr, 1);
6498                tmpstr = string_replace("Sat", _("Sat"), tmpstr, 1);
6499                tmpstr = string_replace("Sun", _("Sun"), tmpstr, 1);
6500        }
6501
6502        return tmpstr;
6503}
6504
6505char* gethypridtunerchoices(int dev)
6506{
6507        char *value = NULL;
6508        char *hypridtunerchoices = NULL;
6509        char *tmpstr = NULL;
6510        char *tmpstr1 = NULL;
6511        char* start = NULL;
6512
6513#ifdef MIPSEL
6514        char *tmpstr2 = NULL;
6515        char *tmpstr3 = NULL;
6516#endif
6517
6518
6519        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
6520
6521        if(hypridtunerchoices == NULL)
6522        {
6523                err("NULL detect");
6524                return NULL;
6525        }
6526
6527        tmpstr = readfiletomem(hypridtunerchoices, 1);
6528        if(tmpstr == NULL)
6529        {
6530                err("NULL detect");
6531                return NULL;
6532        }
6533
6534        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
6535        start = ostrcat(start, ":", 1, 0);
6536
6537#ifdef MIPSEL
6538
6539        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6540        tmpstr2 = string_resub("Mode ", ":", tmpstr1, 0);
6541        tmpstr3 = oregex(".*Mode ([0-9]{1}):.*", tmpstr1);
6542
6543        if(tmpstr2 != NULL)
6544                value = ostrcat(tmpstr2, "\n", 0, 0);
6545        if(tmpstr3 != NULL)
6546                value = ostrcat(value, tmpstr3, 1, 0);
6547
6548        free(start), start = NULL;
6549        free(tmpstr), tmpstr = NULL;
6550        free(tmpstr1), tmpstr1 = NULL;
6551        free(tmpstr2), tmpstr2 = NULL;
6552        free(tmpstr3), tmpstr3 = NULL;
6553#else
6554        tmpstr1 = string_resub(start, "Frontend_Device", tmpstr, 0);
6555        free(start), start = NULL;
6556
6557        printf("---gethypridtunerchoices--------------------------------\n");
6558        printf("tmpstr1: %s\n", tmpstr1);
6559
6560        if(ostrstr(tmpstr1, "(T/C)") != NULL)
6561        {
6562                value = ostrcat("t", "\n", 0, 0);
6563                value = ostrcat(value, "c", 1, 0);
6564        }
6565        printf("value: %s\n", value);
6566        printf("---gethypridtunerchoices--------------------------------\n");
6567
6568        free(tmpstr1), tmpstr1 = NULL;
6569#endif
6570        return value;
6571}
6572
6573char* gethypridtunerchoicesvalue(int dev)
6574{
6575        char* hypridtunerchoices = NULL, *value = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *start = NULL;
6576
6577#ifdef MIPSEL
6578        char* tmpstr2 = NULL, *hypridlist = NULL;
6579#endif
6580
6581        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
6582
6583        if(hypridtunerchoices == NULL)
6584        {
6585                err("NULL detect");
6586                return NULL;
6587        }
6588
6589        tmpstr = readfiletomem(hypridtunerchoices, 1);
6590        if(tmpstr == NULL)
6591        {
6592                err("NULL detect");
6593                return NULL;
6594        }
6595
6596        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
6597        start = ostrcat(start, ":", 1, 0);
6598#ifdef MIPSEL
6599        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6600        free(start), start = NULL;
6601
6602        hypridlist = gethypridtunerchoices(dev);
6603
6604        int count = 0;
6605        int i = 0;
6606        struct splitstr* ret1 = NULL;
6607        ret1 = strsplit(hypridlist, "\n", &count);
6608
6609        if(ret1 != NULL)
6610        {
6611                int max = count;
6612                for(i = 0; i < max; i++)
6613                {
6614                        start = ostrcat("Mode ", ret1[i].part, 0, 0);
6615                        start = ostrcat(start, ":", 1, 0);
6616                        tmpstr2 = string_resub(start, "\n", tmpstr1, 0);
6617
6618                        if(i > 0)
6619                                value = ostrcat(value, "\n", 1, 0);
6620
6621                        if(tmpstr2 != NULL)
6622                                value = ostrcat(value, tmpstr2, 1, 0);
6623
6624                        free(tmpstr2), tmpstr2 = NULL;
6625                        free(start), start = NULL;
6626                }
6627        }
6628        free(ret1), ret1 = NULL;
6629        free(tmpstr1), tmpstr1 = NULL;
6630        free(hypridlist), hypridlist = NULL;
6631#else
6632        tmpstr1 = string_resub(start, "Frontend_Device", tmpstr, 0);
6633        free(start), start = NULL;
6634
6635        printf("---gethypridtunerchoicesvalue--------------------------------\n");
6636        printf("tmpstr1: %s\n", tmpstr1);
6637
6638        if(ostrstr(tmpstr1, "(T/C)") != NULL)
6639        {
6640                value = ostrcat("DVB-T", "\n", 0, 0);
6641                value = ostrcat(value, "DVB-C", 1, 0);
6642        }
6643        printf("value: %s\n", value);
6644        printf("---gethypridtunerchoicesvalue--------------------------------\n");
6645        free(tmpstr1), tmpstr1 = NULL;
6646#endif
6647
6648        return value;
6649}
6650
6651char* gethypridtunerchoicesvaluename(int dev, char* hyprid)
6652{
6653
6654        char* value = NULL;
6655#ifdef MIPSEL
6656        char* hypridtunerchoices = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *start = NULL;
6657
6658        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
6659
6660        if(hypridtunerchoices == NULL)
6661        {
6662                err("NULL detect");
6663                return NULL;
6664        }
6665
6666        tmpstr = readfiletomem(hypridtunerchoices, 1);
6667        if(tmpstr == NULL)
6668        {
6669                err("NULL detect");
6670                return NULL;
6671        }
6672
6673        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
6674        start = ostrcat(start, ":", 1, 0);
6675        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6676        free(start), start = NULL;
6677
6678        start = ostrcat("Mode ", hyprid, 0, 0);
6679        start = ostrcat(start, ":", 1, 0);
6680
6681        tmpstr2 = string_resub(start, "\n", tmpstr1, 0);
6682
6683        if(tmpstr2 != NULL)
6684                value = ostrcat(value, tmpstr2, 1, 0);
6685
6686        free(tmpstr1), tmpstr1 = NULL;
6687        free(tmpstr2), tmpstr2 = NULL;
6688        free(start), start = NULL;
6689#else
6690        printf("---gethypridtunerchoicesvalue--------------------------------\n");
6691        if(ostrstr(hyprid, "t") != NULL)
6692                value = ostrcat("DVB-T", NULL, 0, 0);
6693        else if(ostrstr(hyprid, "c") != NULL)
6694                value = ostrcat("DVB-C", NULL, 0, 0);
6695        printf("value: %s\n", value);
6696        printf("---gethypridtunerchoicesvalue--------------------------------\n");
6697
6698#endif
6699        return value;
6700}
6701
6702int sethypridtuner(int dev, char* value)
6703{
6704        int ret = 0;
6705
6706#ifdef MIPSEL
6707        char* buf = NULL, *hypridtuner = NULL, *tmpstr = NULL;
6708
6709        hypridtuner = getconfig("hypridtuner", NULL);
6710
6711        if(hypridtuner != NULL)
6712        {
6713                buf = malloc(MINMALLOC);
6714                if(buf == NULL)
6715                {
6716                        err("no memory");
6717                        return 0;
6718                }
6719        }
6720
6721        sprintf(buf, hypridtuner, dev);
6722        if(buf != NULL)
6723        {
6724                printf("set %s to %s\n", buf, value);
6725                ret = writesys(buf, value, 0);
6726                free(tmpstr); tmpstr = NULL;
6727                return ret;
6728        }
6729#else
6730        printf("---sethypridtuner--------------------------------\n");
6731
6732        addconfigtmp("hypridtuner", value);
6733        ret = writeconfigtmp();
6734        writeallconfig(1);
6735
6736        printf("value: %s\n", value);
6737        printf("read titan.cfg: hypridtuner=%s\n", getconfig("frontenddev", NULL));
6738        printf("---sethypridtuner--------------------------------\n");
6739
6740        return ret;
6741#endif
6742        return 0;
6743}
6744
6745int phpkit_userauth(char* link, char* user, char* pass)
6746{
6747        debug(99, "phpkit user: %s", user);
6748        debug(99, "phpkit pass: %s", pass);
6749        debug(99, "phpkit url: %s", link);
6750
6751        int skip = 0;
6752        char* ip = NULL, *tmphost = NULL, *tmppath = NULL, *tmpstr = NULL, *send = NULL, *hash = NULL, *cookie1 = NULL, *cookie2 = NULL, *tmplink = NULL, *pos = NULL, *path = NULL, *hashlen = NULL;
6753
6754        tmplink = ostrcat(link, NULL, 0, 0);
6755
6756        tmphost = string_replace("http://", "", tmplink, 0);
6757        free(tmplink) , tmplink = NULL;
6758
6759        if(tmphost != NULL)
6760                pos = strchr(tmphost, '/');
6761        if(pos != NULL)
6762        {
6763                pos[0] = '\0';
6764                path = pos + 1;
6765        }
6766
6767        tmppath = ostrcat("/", path, 0, 0);
6768
6769        send = ostrcat(send, "GET ", 1, 0);
6770        send = ostrcat(send, tmppath, 1, 0);
6771        send = ostrcat(send, " HTTP/1.1\r\nHost: ", 1, 0);
6772        send = ostrcat(send, tmphost, 1, 0);
6773        send = ostrcat(send, "\r\nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.99 Safari/535.1\r\nConnection: close\r\nAccept-Encoding: gzip\r\n\r\n", 1, 0);
6774        debug(99, "#############################################################################################################");
6775        debug(99, "send1: %s", send);
6776        debug(99, "#############################################################################################################");
6777
6778        tmpstr = gethttpreal(tmphost, tmppath, 80, NULL, NULL, NULL, 0, send, NULL, 5000, 1);
6779        debug(99, "tmpstr: %s", tmpstr);
6780
6781        free(send), send = NULL;
6782        free(tmpstr), tmpstr = NULL;
6783
6784        if(user == NULL || pass == NULL || link == NULL) return 1;
6785
6786        hash = ostrcat("login=1&user=", user, 0, 0);
6787        hash = ostrcat(hash, "&userpw=", 1, 0);
6788        hash = ostrcat(hash, pass, 1, 1);
6789        hashlen = oitoa(strlen(hash));
6790
6791        send = ostrcat(send, "POST ", 1, 0);
6792        send = ostrcat(send, tmppath, 1, 0);
6793        send = ostrcat(send, " HTTP/1.1\r\nContent-Length: ", 1, 0);
6794        send = ostrcat(send, hashlen, 1, 0);
6795        send = ostrcat(send, "\r\nAccept-Encoding: gzip\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.99 Safari/535.1\r\nHost: ", 1, 0);
6796        send = ostrcat(send, tmphost, 1, 0);
6797        send = ostrcat(send, "\r\nCookie: pageredir=", 1, 0);
6798        send = ostrcat(send, cookie1, 1, 0);
6799        send = ostrcat(send, "; PHPSESSID=", 1, 0);
6800        send = ostrcat(send, cookie2, 1, 0);
6801        send = ostrcat(send, "\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n", 1, 0);
6802        send = ostrcat(send, hash, 1, 0);
6803        free(hash); hash = NULL;
6804        free(hashlen); hashlen = NULL;
6805
6806        debug(99, "#############################################################################################################");
6807        debug(99, "send1: %s", send);
6808        debug(99, "#############################################################################################################");
6809
6810        tmpstr = gethttpreal(tmphost, tmppath, 80, NULL, NULL, NULL, 0, send, NULL, 5000, 1);
6811        debug(99, "tmpstr: %s", tmpstr);
6812
6813        free(cookie1); cookie1 = NULL;
6814        free(cookie2); cookie2 = NULL;
6815        free(tmphost); tmphost = NULL;
6816        free(send); send = NULL;
6817        free(ip); ip = NULL;
6818        if(tmpstr == NULL) skip = 1;
6819        free(tmpstr); tmpstr = NULL;
6820        if(skip == 1) return 1;
6821        return 0;
6822}
6823
6824void changetunername(struct skin* tunernode, int adapter, int devnr, char* name, char* fehyprid)
6825{
6826        char* tmpnr = NULL, *tmpstr = NULL;
6827        tmpnr = oitoa(adapter);
6828        tmpstr = ostrcat(_("Tuner "), tmpnr, 0, 1);
6829        tmpstr = ostrcat(tmpstr, "/", 1, 0);
6830        tmpnr = oitoa(devnr);
6831        tmpstr = ostrcat(tmpstr, tmpnr, 1, 1);
6832        tmpstr = ostrcat(tmpstr, ": ", 1, 0);
6833        tmpstr = ostrcat(tmpstr, name, 1, 0);
6834        if(fehyprid != NULL)
6835        {
6836                tmpstr = ostrcat(tmpstr, " (", 1, 0);
6837                tmpstr = ostrcat(tmpstr, _("Multituner adjustable"), 1, 0);
6838                tmpstr = ostrcat(tmpstr, ")", 1, 0);
6839        }
6840        changetext(tunernode, tmpstr);
6841        free(tmpstr); tmpstr = NULL;
6842}
6843
6844char* gethypridtunername(int dev, char* hyprid)
6845{
6846        char* hypridtunerchoices = NULL, *value = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *start = NULL;
6847
6848        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
6849
6850        if(hypridtunerchoices == NULL)
6851        {
6852                err("NULL detect");
6853                return NULL;
6854        }
6855
6856        tmpstr = readfiletomem(hypridtunerchoices, 1);
6857        if(tmpstr == NULL)
6858        {
6859                err("NULL detect");
6860                return NULL;
6861        }
6862
6863        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
6864        start = ostrcat(start, ":", 1, 0);
6865        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6866        free(start), start = NULL;
6867
6868        tmpstr2 = string_resub("Name: ", "\n", tmpstr1, 0);
6869
6870        if(tmpstr2 != NULL)
6871                value = ostrcat(value, tmpstr2, 1, 0);
6872
6873        free(tmpstr1), tmpstr1 = NULL;
6874        free(tmpstr2), tmpstr2 = NULL;
6875        free(start), start = NULL;
6876
6877        return value;
6878}
6879
6880void convertsettings()
6881{
6882        struct menulist* mlist = NULL, *mbox = NULL;
6883        struct skin* load = getscreen("loading");
6884        int flag = 0, ret = 0;
6885        char* tmpstr = NULL;
6886
6887        addmenulist(&mlist, "Create Satellites/Provider (Sat)", _("Create Satellites/Provider (Sat)"), NULL, 0, 0);
6888        addmenulist(&mlist, "Create Satellites/Provider (Cable)", _("Create Satellites/Provider (Cable)"), NULL, 0, 0);
6889        addmenulist(&mlist, "Create Satellites/Provider (Terrestrial)", _("Create Satellites/Provider (Terrestrial)"), NULL, 0, 0);
6890        addmenulist(&mlist, "Create Satellites/Provider (All)", _("Create Satellites/Provider (All)"), NULL, 0, 0);
6891
6892        mbox = menulistbox(mlist, "createsettings", _("Import mode"), NULL, NULL, NULL, 1, 0);
6893        if(mbox != NULL) tmpstr = mbox->name;
6894
6895        if(ostrcmp(tmpstr, "Create Satellites/Provider (Sat)") == 0)
6896                flag = 0;
6897        else if(ostrcmp(tmpstr, "Create Satellites/Provider (Cable)") == 0)
6898                flag = 1;
6899        else if(ostrcmp(tmpstr, "Create Satellites/Provider (Terrestrial)") == 0)
6900                flag = 2;
6901        else if(ostrcmp(tmpstr, "Create Satellites/Provider (All)") == 0)
6902                flag = 3;
6903        else
6904        {
6905                freemenulist(mlist, 1); mlist = NULL;
6906                return;
6907        }
6908
6909        freemenulist(mlist, 1); mlist = NULL;
6910
6911        drawscreen(load, 0, 0);
6912
6913        if(flag == 0)
6914        {
6915                ret = converte2settings(0);
6916                if(ret == 0) return;
6917                system("cp -a /tmp/satellites.sat /mnt/settings/satellites");
6918                system("cp -a /tmp/transponder.sat /mnt/settings/transponder");
6919        }
6920        else if(flag == 1)
6921        {
6922                ret = converte2settings(1);
6923                if(ret == 0) return;
6924                system("cp -a /tmp/satellites.cable /mnt/settings/satellites");
6925                system("cp -a /tmp/transponder.cable /mnt/settings/transponder");
6926        }
6927        else if(flag == 2)
6928        {
6929                converte2settings(2);
6930                system("cp -a /tmp/satellites.ter /mnt/settings/satellites");
6931                system("cp -a /tmp/transponder.ter /mnt/settings/transponder");
6932        }
6933        else if(flag == 3)
6934        {
6935                ret = converte2settings(0);
6936                if(ret == 0) return;
6937                ret = converte2settings(1);
6938                if(ret == 0) return;
6939                ret = converte2settings(2);
6940                if(ret == 0) return;
6941                system("cp -a /tmp/satellites.sat /mnt/settings/satellites");
6942                system("cp -a /tmp/transponder.sat /mnt/settings/transponder");
6943
6944                system("cat /tmp/satellites.cable >> /mnt/settings/satellites");
6945                system("cat /tmp/transponder.cable >> /mnt/settings/transponder");
6946
6947                system("cat /tmp/satellites.ter >> /mnt/settings/satellites");
6948                system("cat /tmp/transponder.ter >> /mnt/settings/transponder");
6949        }
6950
6951//      free(tmpstr), tmpstr = NULL;
6952        textbox(_("Message"), _("Satellite/Provider import done, Titan will be restarted!\nPlease check tuner config and\nexecute a channel search after restart."), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1100, 200, 0, 0);
6953        //sync usb
6954        system("sync");
6955        //enable autoscan after guirestart
6956        addconfig("autoscan", "1");
6957        //write only config file
6958        writeallconfig(3);
6959        //gui restart and write no config
6960        oshutdown(3, 2);
6961}
6962
6963// flag 0 = sat
6964// flag 1 = cable
6965// flag 2 = ter
6966int converte2settings(int flag)
6967{
6968        char* path = NULL, *buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *line = NULL, *name = NULL, *orbitalpos = NULL, *fetype = NULL, *flags = NULL, *outfile = NULL, *start = NULL, *end = NULL, *filename = NULL, *transponderfile = NULL, *satfile = NULL;
6969        int incount = 0;
6970
6971        if(flag == 0)
6972        {
6973                system("rm -rf /tmp/transponder.sat");
6974                system("rm -rf /tmp/satellites.sat");
6975                system("cp -a /var/etc/tuxbox/satellites.xml /tmp/satellites.xml");
6976                start = ostrcat("<sat ", NULL, 0, 0);
6977                end = ostrcat("</sat>", NULL, 0, 0);
6978                filename = ostrcat("/tmp/satellites.xml", NULL, 0, 0);
6979                path = ostrcat("/transponder/satellites.xml", NULL, 0, 0);
6980                transponderfile = ostrcat("/tmp/transponder.sat", NULL, 0, 0);
6981                satfile = ostrcat("/tmp/satellites.sat", NULL, 0, 0);
6982                fetype = ostrcat("0", NULL, 0, 0);
6983        }
6984        else if(flag == 1)
6985        {
6986                system("rm -rf /tmp/transponder.cable");
6987                system("rm -rf /tmp/satellites.cable");
6988                system("cp -a /var/etc/tuxbox/cables.xml /tmp/cables.xml");
6989                start = ostrcat("<cable ", NULL, 0, 0);
6990                end = ostrcat("</cable>", NULL, 0, 0);
6991                filename = ostrcat("/tmp/cables.xml", NULL, 0, 0);
6992                path = ostrcat("/transponder/cables.xml", NULL, 0, 0);
6993                transponderfile = ostrcat("/tmp/transponder.cable", NULL, 0, 0);
6994                satfile = ostrcat("/tmp/satellites.cable", NULL, 0, 0);
6995                fetype = ostrcat("1", NULL, 0, 0);
6996                incount = 4999;
6997        }
6998        else if(flag == 2)
6999        {
7000                system("rm -rf /tmp/transponder.ter");
7001                system("rm -rf /tmp/satellites.ter");
7002                system("cp -a /var/etc/tuxbox/terrestrial.xml /tmp/terrestrial.xml");
7003                start = ostrcat("<terrestrial ", NULL, 0, 0);
7004                end = ostrcat("</terrestrial>", NULL, 0, 0);
7005                filename = ostrcat("/tmp/terrestrial.xml", NULL, 0, 0);
7006                path = ostrcat("/transponder/terrestrial.xml", NULL, 0, 0);
7007                transponderfile = ostrcat("/tmp/transponder.ter", NULL, 0, 0);
7008                satfile = ostrcat("/tmp/satellites.ter", NULL, 0, 0);
7009                fetype = ostrcat("2", NULL, 0, 0);
7010                incount = 9999;
7011        }
7012
7013        if(!file_exist(filename))
7014                gethttp("atemio.dyndns.tv", path, 80, filename, HTTPAUTH, 5000, NULL, 0);
7015
7016        char* tmptext = NULL;
7017        tmptext = ostrcat(_("Error: Transponder Source file not found"), "\nfilename: ", 0, 0);
7018        tmptext = ostrcat(tmptext, transponderfile, 1, 0);
7019
7020        if(!file_exist(filename))
7021        {
7022                textbox(_("Message"), tmptext, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
7023                free(tmptext), tmptext = NULL;
7024                free(path), path = NULL;
7025                free(filename), filename = NULL;
7026                free(satfile), satfile = NULL;
7027                free(fetype), fetype = NULL;
7028                free(start), start = NULL;
7029                free(end), end = NULL;
7030                free(transponderfile), transponderfile = NULL;
7031                return 0;
7032        }
7033        free(tmptext), tmptext = NULL;
7034
7035        buf = readfiletomem(filename, 1);
7036        if(buf == NULL)
7037        {
7038                printf("buf: %s\n", buf);
7039                tmptext = ostrcat(_("Error: Transponder Source file no data"), "\nfilename: ", 0, 0);
7040                tmptext = ostrcat(tmptext, transponderfile, 1, 0);
7041                textbox(_("Message"), tmptext, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
7042                free(tmptext), tmptext = NULL;
7043                free(path), path = NULL;
7044                free(filename), filename = NULL;
7045                free(satfile), satfile = NULL;
7046                free(fetype), fetype = NULL;
7047                free(start), start = NULL;
7048                free(end), end = NULL;
7049                free(transponderfile), transponderfile = NULL;
7050                return 0;
7051        }
7052
7053//      writesys("/tmp/convert.log", buf, 1);
7054
7055        while(ostrstr(buf, start) != NULL)
7056        {
7057                incount++;
7058                tmpstr = string_resub(start, end, buf, 0);
7059                tmpstr1 = ostrcat(tmpstr, NULL, 0, 0);
7060
7061                //printf("name: %s\n", getxmlentry(ret1[i].part, "name="));
7062                //printf("position: %s\n", getxmlentry(ret1[i].part, "position="));
7063
7064                name = getxmlentry(tmpstr, "name=");
7065                if(flag == 0)
7066                        orbitalpos = getxmlentry(tmpstr, "position=");
7067                else
7068                        orbitalpos = ostrcat(oitoa(incount), NULL, 1, 0);
7069
7070                flags = getxmlentry(tmpstr, "flags=");
7071                //string_decode(name, 0);
7072                name = string_replace_all("&amp;", "und", name, 1);
7073
7074                line = ostrcat(line, name, 1, 0); //name
7075                line = ostrcat(line, "#", 1, 0);
7076//              line = ostrcat(line, flags, 1, 0); //flag
7077// 0 for all sat/ter/cab ???
7078                line = ostrcat(line, "0", 1, 0);
7079                line = ostrcat(line, "#", 1, 0);
7080                line = ostrcat(line, orbitalpos, 1, 0); //orbitalpos
7081                line = ostrcat(line, "#", 1, 0);
7082                line = ostrcat(line, fetype, 1, 0); //fetype
7083                printf("%s: %s\n", satfile, line);
7084                writesys(satfile, line, 3);
7085                free(line), line = NULL;
7086
7087                int count = 0;
7088
7089                int i = 0;
7090                struct splitstr* ret1 = NULL;
7091                ret1 = strsplit(tmpstr1, "\n", &count);
7092                if(ret1 != NULL)
7093                {
7094                        int max = count;
7095                        for(i = 0; i < max; i++)
7096                        {
7097                                if(i == 0) continue;
7098                                line = ostrcat(line, "0", 1, 0); //id
7099                                line = ostrcat(line, "#", 1, 0);
7100
7101                                line = ostrcat(line, fetype, 1, 0); //fetype
7102                                line = ostrcat(line, "#", 1, 0);
7103
7104                                if(ostrstr((ret1[i]).part, "frequency=") != NULL)
7105                                        line = ostrcat(line, getxmlentry(ret1[i].part, "frequency="), 1, 0); //frequency
7106                                else
7107                                        line = ostrcat(line, "-1", 1, 0);
7108                                line = ostrcat(line, "#", 1, 0);
7109
7110                                if(ostrstr((ret1[i]).part, "polarization=") != NULL)
7111                                        line = ostrcat(line, getxmlentry(ret1[i].part, "polarization="), 1, 0); //polarization
7112                                else
7113                                        line = ostrcat(line, "-1", 1, 0); //polarization
7114
7115                                line = ostrcat(line, "#", 1, 0);
7116                                if(orbitalpos != NULL)
7117                                        line = ostrcat(line, orbitalpos, 1, 0); //orbitalpos
7118                                else
7119                                        line = ostrcat(line, "-1", 1, 0); //orbitalpos
7120                                line = ostrcat(line, "#", 1, 0);
7121
7122                                if(ostrstr((ret1[i]).part, "symbol_rate=") != NULL)
7123                                        line = ostrcat(line, getxmlentry(ret1[i].part, "symbol_rate="), 1, 0); //symbolrate
7124                                else
7125                                        line = ostrcat(line, "-1", 1, 0);
7126                                line = ostrcat(line, "#", 1, 0);
7127
7128                                if(ostrstr((ret1[i]).part, "modulation=") != NULL)
7129                                        line = ostrcat(line, getxmlentry(ret1[i].part, "modulation="), 1, 0); //modulation
7130                                else
7131                                {
7132                                        if(flag == 2)
7133                                                line = ostrcat(line, "3", 1, 0);
7134                                        else
7135                                                line = ostrcat(line, "0", 1, 0);
7136                                }
7137                                line = ostrcat(line, "#", 1, 0);
7138
7139                                if(ostrstr((ret1[i]).part, "fec_inner=") != NULL)
7140                                        line = ostrcat(line, getxmlentry(ret1[i].part, "fec_inner="), 1, 0); //fec
7141                                else
7142                                {
7143                                        if(flag == 2)
7144                                                line = ostrcat(line, "5", 1, 0);
7145                                        else
7146                                                line = ostrcat(line, "0", 1, 0);
7147                                }
7148                                line = ostrcat(line, "#", 1, 0);
7149
7150                                if(checkbox("UFS910") == 1)
7151                                        line = ostrcat(line, "1", 1, 0); //pilot
7152                                else
7153                                        line = ostrcat(line, "2", 1, 0); //pilot
7154                                line = ostrcat(line, "#", 1, 0);
7155
7156                                if(checkbox("UFS910") == 1)
7157                                        line = ostrcat(line, "0", 1, 0); //rolloff
7158                                else
7159                                        line = ostrcat(line, "3", 1, 0); //rolloff
7160                                line = ostrcat(line, "#", 1, 0);
7161
7162                                line = ostrcat(line, "2", 1, 0); //inversion
7163                                line = ostrcat(line, "#", 1, 0);
7164
7165                                if(ostrstr((ret1[i]).part, "system=") != NULL)
7166                                        line = ostrcat(line, getxmlentry(ret1[i].part, "system="), 1, 0); //system
7167                                else
7168                                        line = ostrcat(line, "0", 1, 0); //system
7169                                line = ostrcat(line, "\n", 1, 0);
7170                        }
7171                }
7172
7173                tmpstr2 = ostrcat(start, tmpstr, 0, 0);
7174
7175                buf = string_replace(tmpstr2, NULL, buf, 1);
7176
7177        //      outfile = ostrcat("/tmp/convert.", oitoa(incount), 0, 1);
7178        //      outfile = ostrcat(outfile, ".log", 1, 0);
7179        //      writesys(outfile, buf, 2);
7180        //      writesys("/tmp/convert.log", buf, 3);
7181
7182                writesys(transponderfile, line, 2);
7183                free(line), line = NULL;
7184
7185                free(tmpstr), tmpstr = NULL;
7186                free(tmpstr1), tmpstr1 = NULL;
7187                free(tmpstr2), tmpstr2 = NULL;
7188                free(ret1), ret1 = NULL;
7189                free(name), name = NULL;
7190                free(orbitalpos), orbitalpos = NULL;
7191                free(flags), flags = NULL;
7192                free(outfile), outfile = NULL;
7193        }
7194
7195        free(path), path = NULL;
7196        free(filename), filename = NULL;
7197        free(satfile), satfile = NULL;
7198        free(transponderfile), transponderfile = NULL;
7199
7200        free(buf), buf = NULL;
7201        free(start), start = NULL;
7202        free(end), end = NULL;
7203        free(fetype), fetype = NULL;
7204
7205        return 1;
7206}
7207
7208char* system_infos(int mode)
7209{
7210        char* tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL;
7211
7212        if(mode == 0)
7213        {
7214                tmpstr1 = ostrcat("Date = ", "", 0, 0);
7215                tmpstr1 = ostrcat(tmpstr1, gettime(NULL, "%d %B %Y"), 1, 1);
7216                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
7217
7218                tmpstr1 = ostrcat("\nTime = ", "", 0, 0);
7219                tmpstr1 = ostrcat(tmpstr1, gettime(NULL, "%H:%M:%S"), 1, 1);
7220                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
7221
7222                tmpstr1 = ostrcat("\nUptime = ", "", 0, 0);
7223                tmpstr2 = command("uptime");
7224                if(tmpstr2 != NULL) tmpstr2 = strtok(tmpstr2, ",");
7225                tmpstr1 = ostrcat(tmpstr1, tmpstr2, 1, 1);
7226                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
7227
7228                tmpstr1 = ostrcat("\nBoxtype = ", "", 0, 0);
7229                tmpstr2 = string_toupper(command("cat /etc/model"));
7230                tmpstr1 = ostrcat(tmpstr1, tmpstr2, 1, 1);
7231                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
7232
7233                tmpstr1 = ostrcat("\nLoad = ", "", 0, 0);
7234                tmpstr2 = command("cat /proc/loadavg");
7235                tmpstr1 = ostrcat(tmpstr1, tmpstr2, 1, 1);
7236                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
7237        }
7238
7239        if(mode == 1)
7240        {
7241                system("ls /media/usb/* >/dev/null");
7242                system("ls /media/net/* >/dev/null");
7243                system("ls /var/swap/* >/dev/null");
7244                system("ls /mnt/swapextension/* >/dev/null");
7245                system("ls /var/backup/* >/dev/null");
7246                system("ls /media/hdd/* >/dev/null");
7247                tmpstr = command("df -h");
7248        }
7249
7250        if(mode == 2)
7251                tmpstr = command("cat /proc/version");
7252
7253        if(mode == 3)
7254        {
7255                system("ls /media/usb/* >/dev/null");
7256                system("ls /media/net/* >/dev/null");
7257                system("ls /var/swap/* >/dev/null");
7258                system("ls /mnt/swapextension/* >/dev/null");
7259                system("ls /var/backup/* >/dev/null");
7260                system("ls /media/hdd/* >/dev/null");
7261                tmpstr = command("mount");
7262        }
7263
7264        if(mode == 4)
7265        {
7266                tmpstr1 = command("ifconfig");
7267                tmpstr2 = command("route -n");
7268                tmpstr = ostrcat(tmpstr1, tmpstr2, 1, 1);
7269        }
7270
7271        if(mode == 5)
7272                tmpstr = command("free");
7273
7274        return tmpstr;
7275}
7276
7277char* system_infos_sysinfo(int mode)
7278{
7279        char* tmpstr = NULL;
7280
7281        if(mode == 0)
7282                tmpstr = command("cat /proc/cpuinfo | sed 's/\t\t/\t/'");
7283        else if(mode == 1)
7284                tmpstr = command("cat /proc/meminfo");
7285        else if(mode == 2)
7286                tmpstr = command("cat /proc/mtd");
7287        else if(mode == 3)
7288                tmpstr = command("cat /proc/modules");
7289        else if(mode == 4)
7290                tmpstr = command("cat /proc/devices");
7291        else if(mode == 5)
7292        {
7293                char* tmpstr1 = NULL, **tmpstr2 = NULL, **tmpstr3 = NULL;
7294                int i = 0, ii = 0;
7295                char* swap[] = {"Name: ", "Type: ", "Size: ", "Used: ", "Prio: "};
7296
7297                tmpstr1 = command("cat /proc/swaps | sed 's/\t/ /g; s/[ ]* / /g'");
7298                tmpstr2 = str_split(tmpstr1, "\n");
7299                if(tmpstr2 != NULL)
7300                {
7301                        free(tmpstr2[0]); tmpstr2[0] = NULL;
7302
7303                        for(i = 1; tmpstr2[i] != NULL; i++)
7304                        {
7305                                tmpstr3 = str_split(tmpstr2[i], " ");
7306                                if(tmpstr3 != NULL)
7307                                {
7308
7309                                        for(ii = 0; tmpstr3[ii] != NULL; ii++)
7310                                        {
7311                                                tmpstr = ostrcat(tmpstr, swap[ii], 1, 0);
7312                                                tmpstr = ostrcat(tmpstr, tmpstr3[ii], 1, 1);
7313                                                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
7314                                        }
7315                                }
7316
7317                                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
7318                                free(tmpstr2[i]); tmpstr2[i] = NULL;
7319                                free(tmpstr3); tmpstr3 = NULL;
7320                        }
7321                }
7322
7323                free(tmpstr3); tmpstr3 = NULL;
7324                free(tmpstr2); tmpstr2 = NULL;
7325                free(tmpstr1); tmpstr1 = NULL;
7326        }
7327        else if(mode == 6)
7328                tmpstr = command("top -b -n1");
7329        else if(mode == 7)
7330                tmpstr = command("ps");
7331        else if(mode == 8)
7332        {
7333                tmpstr = command("lsusb");
7334                tmpstr = ostrcat(tmpstr, "\n-------------------------------------------\n", 1, 0);
7335                char* tmpstr2 = NULL;
7336                tmpstr2 = command("cat /proc/bus/usb/devices");
7337                tmpstr = ostrcat(tmpstr, tmpstr2, 1, 1);
7338        }
7339        return tmpstr;
7340}
7341
7342char* system_logs(int mode)
7343{
7344        char* tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL, *path = NULL, *boxversion = NULL;
7345
7346        path = ostrcat("/svn/image/changelog.", NULL, 0, 0);
7347
7348        if(mode == 0)
7349        {
7350                tmpstr1 = readfiletomem("/etc/motd", 0);
7351                if(tmpstr1 != NULL) tmpstr2 = strstr(tmpstr1, "wElc0me");
7352                tmpstr3 = readfiletomem("/etc/imageinfo", 0);
7353                if(tmpstr2 == NULL)
7354                        tmpstr = ostrcat(tmpstr3, NULL, 1, 0);
7355                else
7356                        tmpstr = ostrcat(tmpstr2, tmpstr3, 1, 1);
7357        }
7358        else if(mode == 1)
7359        {
7360                if(isfile("/etc/model") == 0) return NULL;
7361                boxversion = string_tolower(readsys("/etc/model", 1));
7362
7363                path = ostrcat(path, boxversion, 1, 0);
7364                path = ostrcat(path, ".titan", 1, 0);
7365
7366                tmpstr1 = gethttp("atemio.dyndns.tv", path, 80, NULL, HTTPAUTH, 5000, NULL, 0);
7367
7368                tmpstr = readfromlinetoline(tmpstr1, 37, 537, 1);
7369        }
7370        else if(mode == 2)
7371        {
7372#ifdef MIPSEL
7373                path = ostrcat(path, "git.mipsel", 1, 0);
7374#else
7375                path = ostrcat(path, "git.sh4", 1, 0);
7376#endif
7377
7378                tmpstr1 = gethttp("atemio.dyndns.tv", path, 80, NULL, HTTPAUTH, 5000, NULL, 0);
7379
7380                tmpstr = readfromlinetoline(tmpstr1, 0, 500, 1);
7381        }
7382        else if(mode == 3)
7383        {
7384                tmpstr = readfiletomem(getconfig("tracelog", NULL), 0);
7385        }
7386
7387        free(path), path = NULL;
7388        free(boxversion), boxversion = NULL;
7389//      free(tmpstr1), tmpstr1 = NULL;
7390//      free(tmpstr2), tmpstr2 = NULL;
7391//      free(tmpstr3), tmpstr3 = NULL;
7392
7393        return tmpstr;
7394}
7395
7396char* getimgnamereal()
7397{
7398        char* tmpstr = NULL;
7399
7400        tmpstr = readfiletomem(getconfig("imagenamefile", NULL), 1);
7401
7402        return tmpstr;
7403}
7404
7405char* getmoviedev()
7406{
7407        char* tmpstr = NULL, *buf = NULL;
7408
7409        tmpstr = readfiletomem("/tmp/.moviedev", 1);
7410        printf("tmpstr: %s\n", tmpstr);
7411
7412        buf = oregex("sd([a-z]{1,1}).*", tmpstr);
7413        printf("buf: %s\n", buf);
7414
7415        free(tmpstr), tmpstr = NULL;
7416
7417        return buf;
7418}
7419
7420void wakeup_record_device()
7421{
7422        char* cmd = NULL, *dev = NULL;
7423
7424        dev = getmoviedev();
7425        if(dev == NULL)
7426        {
7427                cmd = ostrcat("ls -al ", getconfig("rec_path", NULL), 0, 0);
7428                cmd = ostrcat(cmd," > /dev/null 2>&1", 1, 0);
7429        }
7430        else
7431                cmd = ostrcat("sdparm -C START /dev/sd", dev, 0, 0);
7432
7433//      cmd = ostrcat(cmd, " >/dev/null", 1, 0);
7434        printf("cmd: %s\n", cmd);
7435        system(cmd);
7436        free(dev), dev = NULL;
7437        free(cmd), cmd = NULL;
7438}
7439
7440void setdefaultbouquets()
7441{
7442        if(textbox(_("Message"), _("Start Restore Default Bouquets ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
7443        {
7444                struct skin* load = getscreen("loading");
7445                drawscreen(load, 0, 0);
7446
7447                system("rm -f /mnt/settings/bouquets.* > /dev/null 2>&1");
7448                system("cp -a /etc/titan.restore/mnt/settings/bouquets* /mnt/settings > /dev/null 2>&1");
7449
7450                textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
7451                //sync usb
7452                system("sync");
7453                //write only config file
7454                writeallconfig(3);
7455                //gui restart and write no config
7456                oshutdown(3, 2);
7457        }
7458}
7459
7460void setdefaultsettings()
7461{
7462        if(textbox(_("Message"), _("Start Restore Default Channel Settings ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
7463        {
7464                struct skin* load = getscreen("loading");
7465                drawscreen(load, 0, 0);
7466
7467                system("rm -rf /mnt/settings/* > /dev/null 2>&1");
7468                system("cp -a /etc/titan.restore/mnt/settings/* /mnt/settings > /dev/null 2>&1");
7469
7470                textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
7471                //sync usb
7472                system("sync");
7473                //write only config file
7474                writeallconfig(3);
7475                //gui restart and write no config
7476                oshutdown(3, 2);
7477        }
7478}
7479
7480void setdefaultproviders()
7481{
7482        if(textbox(_("Message"), _("Start Restore Default Providers ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
7483        {
7484                struct skin* load = getscreen("loading");
7485                drawscreen(load, 0, 0);
7486
7487                system("rm -f /mnt/settings/provider > /dev/null 2>&1");
7488                system("cp -a /etc/titan.restore/mnt/settings/provider /mnt/settings > /dev/null 2>&1");
7489
7490                textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
7491                //sync usb
7492                system("sync");
7493                //write only config file
7494                writeallconfig(3);
7495                //gui restart and write no config
7496                oshutdown(3, 2);
7497        }
7498}
7499
7500void setdefaultchannels()
7501{
7502        if(textbox(_("Message"), _("Start Restore Default Channels ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
7503        {
7504                struct skin* load = getscreen("loading");
7505                drawscreen(load, 0, 0);
7506
7507                system("rm -f /mnt/settings/channel > /dev/null 2>&1");
7508                system("cp -a /etc/titan.restore/mnt/settings/channel /mnt/settings > /dev/null 2>&1");
7509
7510                textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
7511                //sync usb
7512                system("sync");
7513                //write only config file
7514                writeallconfig(3);
7515                //gui restart and write no config
7516                oshutdown(3, 2);
7517        }
7518}
7519
7520void setdefaultsats()
7521{
7522        if(textbox(_("Message"), _("Start Restore Default Sats ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
7523        {
7524                struct skin* load = getscreen("loading");
7525                drawscreen(load, 0, 0);
7526
7527                system("rm -f /mnt/settings/satellites > /dev/null 2>&1");
7528                system("cp -a /etc/titan.restore/mnt/settings/satellites /mnt/settings > /dev/null 2>&1");
7529
7530                textbox(_("Message"), _("Titan will be restarted!"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 1000, 200, 0, 0);
7531                //sync usb
7532                system("sync");
7533                //write only config file
7534                writeallconfig(3);
7535                //gui restart and write no config
7536                oshutdown(3, 2);
7537        }
7538}
7539
7540char* create_backup(char* input, int flag)
7541{
7542        char* infotext = ostrcat(_("The backup image will be saved to /tmp or /var/backup. In case of insufficient internal\nmemory, a USB Stick or HDD must be used. A folder named backup must exist on\nthe target drive."), NULL, 0, 0);
7543        if(flag == 0) return infotext;
7544
7545        char* tmpstr = NULL, *cmd = NULL;
7546        int merksec = status.sec;
7547
7548        status.sec = 0; //deaktivate spinner
7549        if(checkbox("DM900") == 1)
7550                cmd = ostrcat(cmd, "backupdream.sh ", 1, 0);
7551        else
7552                cmd = ostrcat(cmd, "backup.sh ", 1, 0);
7553        cmd = ostrcat(cmd, input, 1, 0);
7554
7555        if(flag == 2)
7556                cmd = ostrcat(cmd, " 1", 1, 0);
7557
7558        if(file_exist("/var/swap"))
7559        {
7560                if(!file_exist("/var/swap/logs"))
7561                         mkdir("/var/swap/logs", 777);
7562
7563                if(file_exist("/etc/.beta") && file_exist("/var/swap/logs"))
7564                        cmd = ostrcat(cmd, " > /var/swap/logs/backup_debug.log 2>&1", 1, 0);
7565        }
7566        else if(checkbox("ATEMIO510") != 1 && checkbox("UFS910") != 1 && checkbox("UFS922") != 1 && checkbox("ATEVIO700") != 1 && checkbox("ATEVIO7000") != 1 && checkbox("IPBOX91") != 1 && checkbox("IPBOX900") != 1 && checkbox("IPBOX910") != 1 && checkbox("IPBOX9000") != 1)
7567        {
7568                if(!file_exist("/mnt/logs"))
7569                         mkdir("/mnt/logs", 777);
7570
7571                if(file_exist("/etc/.beta") && file_exist("/mnt/logs"))
7572                        cmd = ostrcat(cmd, " > /mnt/logs/backup_debug.log 2>&1", 1, 0);
7573        }
7574        //tmpstr = command(cmd);
7575        if(system(cmd) == 0)
7576        //if(tmpstr == NULL)
7577                tmpstr = ostrcat(tmpstr, _("Backup created successfully"), 1, 0);
7578        else
7579                tmpstr = ostrcat(tmpstr, _("Backup ended with error"), 1, 0);
7580
7581        free(cmd); cmd = NULL;
7582        status.sec = merksec;
7583
7584        return tmpstr;
7585}
7586
7587char* create_backuprestore()
7588{
7589        char* tmpstr = ostrcat(_("Press -restore- and your saved settings will be restored from your swapstick / recording hdd! The Box will restart automatically for restoring!\n\nPress -backup- to save your actual settings to swapstick / recording hdd.\nWARNING: The old backup will be deleted!"), NULL, 0, 0);
7590        return tmpstr;
7591}
7592char* randomstring(int n)
7593{
7594    int i, wert;
7595    time_t t;
7596    char* tmp = malloc(n+1);
7597
7598    /* Intializes random number generator */
7599    srand((unsigned) time(&t));
7600    for( i = 0 ; i < n ; i++ )
7601    {
7602        wert = rand() % 9;
7603        sprintf(tmp+i, "%d", wert);
7604    }
7605    tmp[i] = '\0';
7606    return tmp;
7607}
7608
7609
7610int putmsgbuffer()
7611{
7612        if(file_exist("/tmp/textbox_standby") != 1)
7613                return 1;
7614
7615        FILE *fp = fopen("/tmp/textbox_standby" , "r");
7616        if(fp == NULL)
7617        {
7618                printf("Error opening file: /tmp/textbox_standby\n");
7619                return(-1);
7620        }
7621
7622        char* caption = malloc(255);
7623        char* body = malloc(255);
7624        char* comtext1 = malloc(20);
7625        char* com1 = malloc(10);
7626        char* comtext2 = malloc(20);
7627        char* com2 = malloc(10);
7628        char* comtext3 = malloc(20);
7629        char* com3 = malloc(10);
7630        char* comtext4 = malloc(20);
7631        char* com4 = malloc(10);
7632        char* width = malloc(10);
7633        char* height = malloc(10);
7634        char* timeout = malloc(10);
7635        char* flag = malloc(10);
7636
7637        while(fgets(caption, 255, fp)!=NULL)
7638        {
7639                string_newline(caption);
7640
7641                fgets(body, 255, fp);
7642                string_newline(body);
7643                body = string_replace_all("\t", "\n", body, 1);
7644
7645                if(comtext1 == NULL)
7646                        comtext1 = malloc(20);
7647                fgets(comtext1, 20, fp);
7648                string_newline(comtext1);
7649                fgets(com1, 10, fp);
7650                string_newline(com1);
7651
7652                if(comtext2 == NULL)
7653                        comtext2 = malloc(20);
7654                fgets(comtext2, 20, fp);
7655                string_newline(comtext2);
7656                fgets(com2, 10, fp);
7657                string_newline(com2);
7658
7659                if(comtext3 == NULL)
7660                        comtext3 = malloc(20);
7661                fgets(comtext3, 20, fp);
7662                string_newline(comtext3);
7663                fgets(com3, 10, fp);
7664                string_newline(com3);
7665
7666                if(comtext4 == NULL)
7667                        comtext4 = malloc(20);
7668                fgets(comtext4, 20, fp);
7669                string_newline(comtext4);
7670                fgets(com4, 10, fp);
7671                string_newline(com4);
7672
7673                fgets(width, 10, fp);
7674                string_newline(width);
7675
7676                fgets(height, 10, fp);
7677                string_newline(height);
7678
7679                fgets(timeout, 10, fp);
7680                string_newline(timeout);
7681
7682                fgets(flag, 10, fp);
7683                string_newline(flag);
7684
7685                if(atoi(com1) == 0)
7686                {
7687                        free(comtext1);
7688                        comtext1 = NULL;
7689                }
7690                if(atoi(com2) == 0)
7691                {
7692                        free(comtext2);
7693                        comtext2 = NULL;
7694                }
7695                if(atoi(com3) == 0)
7696                {
7697                        free(comtext3);
7698                        comtext3 = NULL;
7699                }
7700                if(atoi(com4) == 0)
7701                {
7702                        free(comtext4);
7703                        comtext4 = NULL;
7704                }
7705                textbox(caption, body, comtext1, atoi(com1), comtext2, atoi(com2), comtext3, atoi(com3), comtext4, atoi(com4), atoi(width), atoi(height), atoi(timeout), atoi(flag));
7706        }
7707
7708        fclose(fp);
7709        system("rm /tmp/textbox_standby");
7710
7711        free(caption);
7712        free(body);
7713        free(comtext1);
7714        free(com1);
7715        free(comtext2);
7716        free(com2);
7717        free(comtext3);
7718        free(com3);
7719        free(comtext4);
7720        free(com4);
7721        free(width);
7722        free(height);
7723        free(timeout);
7724        free(flag);
7725
7726        return 0;
7727}
7728
7729void delunusedsat()
7730{
7731        debug(10, "delunusedsat: start");
7732        struct sat* node = sat;
7733        struct sat* prev = NULL;
7734
7735        while(node != NULL)
7736        {
7737                prev = node;
7738                node = node->next;
7739
7740                if(prev->scan != 1)
7741                        delsat(prev->name);
7742        }
7743        debug(10, "delunusedsat: end");
7744}
7745
7746void delunusedtransponder()
7747{
7748        debug(10, "delunusedtransponder: start");
7749        struct transponder* node = transponder;
7750        struct transponder* prev = NULL;
7751
7752        while(node != NULL)
7753        {
7754                prev = node;
7755                node = node->next;
7756
7757                if(getsatbyorbitalpos(prev->orbitalpos) == NULL)
7758                        deltransponder(prev);
7759        }
7760        debug(10, "delunusedtransponder: end");
7761}
7762
7763void delunusedchannel()
7764{
7765        debug(10, "delunusedchannel: start");
7766        struct channel* node = channel;
7767        struct channel* prev = NULL;
7768
7769        while(node != NULL)
7770        {
7771                prev = node;
7772                node = node->next;
7773
7774                if(prev->transponder == NULL)
7775                        delchannel(prev->serviceid, prev->transponderid, 0);
7776        }
7777        debug(10, "delunusedchannel: end");
7778}
7779
7780void delunusedbouquet()
7781{
7782        debug(10, "delunusedbouquet: start");
7783        struct mainbouquet* mnode = mainbouquet;
7784        struct bouquet* first = NULL;
7785        struct bouquet* node = NULL;
7786        struct bouquet* prev = NULL;
7787
7788        while(mnode != NULL)
7789        {
7790                first = mnode->bouquet;
7791                node = mnode->bouquet;
7792                while(node != NULL)
7793                {
7794                        prev = node;
7795                        node = node->next;
7796                        if(getchannel(prev->serviceid, prev->transponderid) == NULL)
7797                                delbouquet(prev->serviceid, prev->transponderid, &first);
7798                }
7799                mnode = mnode->next;
7800        }
7801        debug(10, "delunusedbouquet: end");
7802}
7803
7804void delunusedepgchannel()
7805{
7806        debug(10, "delunusedepgchannel: start");
7807        struct epgscanlist* node = epgscanlist;
7808        struct epgscanlist* prev = NULL;
7809
7810        while(node != NULL)
7811        {
7812                prev = node;
7813                node = node->next;
7814                if(getchannel(prev->serviceid, prev->transponderid) == NULL)
7815                        delepgscanlist(node->serviceid, node->transponderid);
7816        }
7817        debug(10, "delunusedepgchannel: end");
7818}
7819
7820void delunusedprovider()
7821{
7822        debug(10, "delunusedprovider: start");
7823        struct provider* node = provider;
7824        struct provider* prev = NULL;
7825
7826        while(node != NULL)
7827        {
7828                prev = node;
7829                node = node->next;
7830                delprovidernotused(prev);
7831        }
7832        debug(10, "delunusedprovider: end");
7833}
7834
7835int checkshutdown(int flag)
7836{
7837        int i = 0;
7838
7839        //check if record running
7840        if((flag == 1 || flag == 2 || flag == 3 || flag == 4 || flag == 5 || flag == 6) && (status.streaming > 0 || status.recording > 0 || getrectimerbytimediff(300) != NULL))
7841        {
7842                if(flag == 4 && status.fixpowerofftime > 1)
7843                {
7844                                status.fixpowerofftime = time(NULL) + 900; //check powerofftimer again in 15min
7845                                return 1;
7846                }
7847                if(flag == 5 && status.sd_timer != NULL && status.sd_timer->active)
7848                {
7849                                status.sd_timer->shutdown_time = time(NULL) + 900; //check powerofftimer again in 15min
7850                                return 1;
7851                }
7852                else if(flag == 6)
7853                {
7854                        if(textbox(_("Message"), _("Found running record\nor record is starting soon.\nProceed System Update?\nOK to proceed, Exit to cancel"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 15, 0) != 1)
7855                                return 1;
7856                }
7857                else
7858                {
7859                        if(textbox(_("Message"), _("Found running record\nor record is starting soon.\nProceed shutdown?\nOK to proceed, Exit to cancel"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 15, 0) != 1)
7860                                return 1;
7861                }
7862        }
7863
7864        //check if download is running
7865        for(i = 0; i < MAXBGDOWNLOAD; i++)
7866        {
7867                if(bgdownload[i] != NULL && bgdownload[i]->ret == -1)
7868                {
7869                        if(flag == 6)
7870                        {
7871                                if(textbox(_("Message"), _("Found running record\nor record is starting soon.\nProceed System Update?\nOK to proceed, Exit to cancel"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 15, 0) != 1)
7872                                        return 1;
7873                        }
7874                        else
7875                        {
7876                                if(textbox(_("Message"), _("Found running download\nProceed shutdown?\nOK to proceed, Exit to cancel"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 15, 0) != 1)
7877                                        return 1;
7878                        }
7879                        break;
7880
7881                }
7882        }
7883
7884        return 0;
7885}
7886
7887#endif
Note: See TracBrowser for help on using the repository browser.