source: titan/titan/global.h @ 33146

Last change on this file since 33146 was 33146, checked in by obi, 9 years ago

fix

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