source: titan/titan/global.h @ 32853

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

fix

File size: 140.8 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        if(!ostrncmp("letterbox", tmppolicy, 8))
1915                tmpstr = ostrcat(tmpstr, "panscan", 1, 0);
1916        else if(!ostrncmp("panscan", tmppolicy, 7))
1917                tmpstr = ostrcat(tmpstr, "non", 1, 0);
1918        else if(!ostrncmp("non", tmppolicy, 3))
1919                tmpstr = ostrcat(tmpstr, "bestfit", 1, 0);
1920        else if(!ostrncmp("bestfit", tmppolicy, 7))
1921                tmpstr = ostrcat(tmpstr, "letterbox", 1, 0);
1922
1923        setpolicy(tmpstr);
1924
1925        free(tmpstr); tmpstr = NULL;
1926        free(tmppolicy); tmppolicy = NULL;
1927        return 0;
1928}
1929
1930char* getmac(char* dev)
1931{
1932        int sock = -1, i = 0;
1933        struct ifreq buf;
1934        char* tmpstr = NULL;
1935        char tmpbuf[4] = {};
1936
1937        if(dev == NULL) return NULL;
1938
1939        sock = socket(PF_INET, SOCK_DGRAM, 0);
1940        if(sock >= 0)
1941        {
1942                memset(&buf, 0x00, sizeof(buf));
1943                strcpy(buf.ifr_name, dev);
1944                ioctl(sock, SIOCGIFHWADDR, &buf);
1945                close(sock);
1946
1947                for(i = 0; i < 6; i++)
1948                {
1949                        snprintf(tmpbuf, 4, "%.2X:", (unsigned char)buf.ifr_hwaddr.sa_data[i]);
1950                        tmpstr = ostrcat(tmpstr, tmpbuf, 1, 0);
1951                }
1952                if(tmpbuf != NULL)
1953                        tmpstr[strlen(tmpstr) - 1] = '\0';
1954        }
1955
1956        return tmpstr;
1957}
1958
1959char* getdefaultgw()
1960{
1961        char* name = NULL;
1962        unsigned long def, gw, m;
1963        int flags, ref, use, metric, mtu, win, ir;
1964        struct in_addr ip;
1965
1966        FILE *fd = fopen("/proc/net/route", "r");
1967        if(fd == NULL)
1968                return NULL;
1969
1970        if(fscanf(fd, "%*[^\n]\n") < 0)
1971        {
1972                fclose(fd);
1973                return NULL;
1974        }
1975
1976        name = malloc(64);
1977        if(name == NULL)
1978        {
1979                err("no mem");
1980                return NULL;
1981        }
1982
1983        while(1)
1984        {
1985                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);
1986                if(def == 0) break;
1987                if(r != 11)
1988                {
1989                        fclose(fd);
1990                        free(name);
1991                        return NULL;
1992                }
1993                if(!(flags & 0x0001)) continue; //is interface down
1994        }
1995
1996        fclose(fd);
1997        free(name);
1998
1999        ip.s_addr = gw;
2000        if(def == 0)
2001                return inet_ntoa(ip);
2002
2003        return NULL;
2004}
2005
2006char* changefilenameext(char* filename, char* ext)
2007{
2008        char* newfilename = NULL;
2009        char* zeichen = NULL;
2010
2011        if(filename == NULL) return NULL;
2012
2013        newfilename = ostrcat(filename, NULL, 0, 0);
2014
2015        zeichen = strrchr(newfilename, '.');
2016        if(zeichen != NULL)
2017        {
2018                zeichen[0] = '\0';
2019                newfilename = ostrcat(newfilename, ext, 1, 0);
2020        }
2021
2022        return newfilename;
2023}
2024
2025int cmpfilenameext(char* filename, char* ext)
2026{
2027        char* zeichen = NULL;
2028
2029        if(filename == NULL) return 1;
2030
2031        zeichen = strrchr(filename, '.');
2032        if(zeichen != NULL)
2033        {
2034                if(ostrcasecmp(zeichen, ext) == 0) return 0;
2035        }
2036
2037        return 1;
2038}
2039
2040char* getfilenameext(char* filename)
2041{
2042        char* zeichen = NULL;
2043
2044        if(filename == NULL) return NULL;
2045
2046        zeichen = strrchr(filename, '.');
2047        if(zeichen != NULL)
2048        {
2049                return ostrcat(zeichen + 1, NULL, 0, 0);
2050        }
2051
2052        return NULL;
2053}
2054
2055char* getfilenamepng(char* filename)
2056{
2057        char* tmpstr = NULL;
2058
2059        if(filename == NULL) return NULL;
2060       
2061        if(!filelistflt(".avi .dat .divx .flv .mkv .m4v .mp4 .mov .mpg .mpeg .mts .m2ts .trp .ts .vdr .vob .wmv .rm", filename))
2062                tmpstr = ostrcat("movie", NULL, 0, 0);
2063        else if(!filelistflt(".mp3 .flac .ogg .wma .ra .wav", filename))
2064                tmpstr = ostrcat("musik", NULL, 0, 0);
2065        else if(!filelistflt(".jpg .png", filename))
2066                tmpstr = ostrcat("picture", NULL, 0, 0);
2067        else
2068                tmpstr = ostrcat(getfilenameext(filename), NULL, 1, 0);
2069
2070        if(tmpstr != NULL)
2071        {
2072                return tmpstr;
2073        }
2074
2075        return NULL;
2076}
2077
2078char* getcurrentdir(char* path)
2079{
2080        char* zeichen = NULL;
2081
2082        if(path == NULL) return NULL;
2083
2084        zeichen = strrchr(path, '/');
2085        if(zeichen != NULL)
2086        {
2087                return ostrcat(zeichen + 1, NULL, 0, 0);
2088        }
2089
2090        return NULL;
2091}
2092
2093char* convert_timesec(int sec)
2094{
2095        int hour = 0, min = 0, seconds = 0;
2096        char* buf = NULL;
2097
2098        buf = malloc(9);
2099        if(buf == NULL)
2100        {
2101                err("no mem");
2102                return NULL;
2103        }
2104
2105        seconds = sec % 60;
2106        min = (sec / 60) % 60;
2107        hour = sec / 3600;
2108
2109        if(seconds < 0) seconds = 0;
2110        if(min < 0) min = 0;
2111        if(hour < 0 || hour > 23)
2112        {
2113                hour = 0;
2114                min = 0;
2115                seconds = 0;
2116        }
2117
2118        snprintf(buf, 9, "%02d:%02d:%02d", hour, min, seconds);
2119
2120        return buf;
2121}
2122
2123int checkdate()
2124{
2125        time_t dvbtime = 0;
2126
2127        if(time(NULL) < 1072224000 || status.timeupdatecount > 3600) // 01.01.2004
2128        {
2129                if(dvbgetdate(&dvbtime, 10000000) == 0) //10 sek
2130                {
2131                        setsystime(&dvbtime);
2132#ifdef MIPSEL
2133                        setrtctimemips();
2134#endif
2135                        status.timeupdatecount = 0;
2136                        return 0;
2137                }
2138                return 1;
2139        }
2140        return 0;
2141}
2142
2143void closeonexec(int fd)
2144{
2145        if(fd > -1)
2146                fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
2147}
2148
2149void startnewsletter(flag)
2150{
2151        if(flag == 1)
2152        {
2153                if(getconfigint("newsletter", NULL) == 1 && status.newsletterthread == NULL)
2154                        status.newsletterthread = addtimer(&newsletterthreadfunc, START, 1000, 1, NULL, NULL, NULL);
2155        }
2156        else if(status.newsletterthread != NULL)
2157        {
2158                status.newsletterthread->aktion = STOP;
2159                status.newsletterthread = NULL;
2160        }
2161}
2162
2163void startthumb(flag)
2164{
2165        if(flag == 1)
2166        {
2167                if(getconfigint("createthumb", NULL) == 1 && status.thumbthread == NULL)
2168                        status.thumbthread = addtimer(&thumbthread, START, 1000, 1, NULL, NULL, NULL);
2169        }
2170        else if(status.thumbthread != NULL)
2171        {
2172                status.thumbthread->aktion = STOP;
2173                status.thumbthread = NULL;
2174        }
2175}
2176
2177void starthttpd(flag)
2178{
2179        if(flag == 1)
2180        {
2181                if(getconfigint("httpdstart", NULL) == 1 && status.httpthread == NULL)
2182                {
2183                        status.httpthread = addtimer(&httpdthreadfunc, START, 10000, -1, NULL, NULL, NULL);
2184                        if(status.httpthread != NULL)
2185                                status.httpthread->flag = setbit(status.httpthread->flag, 0);
2186                }
2187        }
2188        else if(status.httpthread != NULL)
2189        {
2190                status.httpthread->aktion = STOP;
2191                status.httpthread = NULL;
2192        }
2193}
2194
2195void startrguid(flag)
2196{
2197        if(flag == 1)
2198        {
2199                if(getconfigint("rguidstart", NULL) == 1 && status.rguithread == NULL)
2200                {
2201                        status.rguithread = addtimer(&rguidthreadfunc, START, 10000, -1, NULL, NULL, NULL);
2202                        if(status.rguithread != NULL)
2203                                status.rguithread->flag = setbit(status.rguithread->flag, 0);
2204                }
2205        }
2206        else if(status.rguithread != NULL)
2207        {
2208                status.rguithread->aktion = STOP;
2209                status.rguithread = NULL;
2210        }
2211}
2212
2213int setoverclockfreq(int mode)
2214{
2215        // mode 0 = Set Standby Freq
2216        // mode 1 = Set Freq
2217
2218        if(ostrcmp(getownconfig("standby_overclock"), "0") == 0)
2219                return 1;
2220
2221        if(isfile("/proc/cpu_frequ/pll0_ndiv_mdiv") == 0)
2222                return 1;
2223
2224        char* tmpstr = NULL;
2225
2226        if(mode == 0)
2227                tmpstr = getownconfig("standby_freq");
2228        else
2229                tmpstr = getownconfig("pll0_ndiv_mdiv");
2230
2231        return writesys("/proc/cpu_frequ/pll0_ndiv_mdiv", tmpstr, 1);
2232}
2233
2234/*
2235int checkdev(char* dev)
2236{
2237        char* cmd = NULL;
2238        cmd = ostrcat(cmd, "cat ", 1, 0);
2239        cmd = ostrcat(cmd, dev, 1, 0);
2240
2241        char* tmpstr = NULL;
2242        tmpstr = string_newline(command(cmd));
2243        free(cmd), cmd = NULL;
2244
2245        if(tmpstr == NULL)
2246        {
2247                return 0;
2248        }
2249
2250        if(ostrcmp(tmpstr, "Segmentation fault") == 0)
2251        {
2252                return 0;
2253        }
2254       
2255        free(tmpstr), tmpstr = NULL;
2256        return 1;
2257}
2258*/
2259
2260int setsaturation(int value)
2261{
2262        char* saturationdev;
2263
2264        saturationdev = getconfig("saturationdev", NULL);
2265
2266        if(saturationdev != NULL /*&& checkdev(saturationdev)*/)
2267        {
2268                debug(100, "set %s to %d", saturationdev, value);
2269                return writesysint(saturationdev, value, 1);
2270        }
2271
2272        return 0;
2273}
2274
2275int setbrightness(int value)
2276{
2277        char* brightnessdev;
2278
2279        brightnessdev = getconfig("brightnessdev", NULL);
2280
2281        if(brightnessdev != NULL /*&& checkdev(brightnessdev)*/)
2282        {
2283                debug(100, "set %s to %d", brightnessdev, value);
2284                return writesysint(brightnessdev, value, 1);
2285        }
2286
2287        return 0;
2288}
2289
2290int setcontrast(int value)
2291{
2292        char* contrastdev;
2293
2294        contrastdev = getconfig("contrastdev", NULL);
2295
2296        if(contrastdev != NULL /*&& checkdev(contrastdev)*/)
2297        {
2298                debug(100, "set %s to %d", contrastdev, value);
2299                return writesysint(contrastdev, value, 1);
2300        }
2301
2302        return 0;
2303}
2304
2305int settint(int value)
2306{
2307        char* tintdev;
2308
2309        tintdev = getconfig("tintdev", NULL);
2310
2311        if(tintdev != NULL /*&& checkdev(tintdev)*/)
2312        {
2313                debug(100, "set %s to %d", tintdev, value);
2314                return writesysint(tintdev, value, 1);
2315        }
2316
2317        return 0;
2318}
2319
2320int ozip(char* inbuf, int inlen, char** outbuf, int* outlen, int level)
2321{
2322        int ret = 0;
2323        z_stream stream;
2324       
2325        if(inbuf == NULL || outbuf == NULL || inlen == 0) return 1;
2326
2327        stream.zalloc = Z_NULL;
2328        stream.zfree = Z_NULL;
2329        stream.opaque = Z_NULL;
2330        stream.avail_in = 0;
2331        stream.next_in = Z_NULL;
2332        stream.avail_out = 0;
2333        stream.next_out = Z_NULL;
2334
2335        ret = deflateInit(&stream, level);
2336        if(ret != Z_OK)
2337                return 1;
2338
2339        *outbuf = malloc(inlen);
2340        if(*outbuf == NULL)
2341        {
2342                err("no mem");
2343                (void)deflateEnd(&stream);
2344                return 1;
2345        }
2346
2347        stream.avail_in = inlen;
2348        stream.next_in = (void*)inbuf;
2349 
2350        do
2351        {
2352                stream.avail_out = inlen;
2353                stream.next_out = (void*)*outbuf;
2354
2355                ret = deflate(&stream, Z_FINISH);
2356                if(ret == Z_STREAM_ERROR)
2357                {
2358                        free(*outbuf); *outbuf = NULL;
2359                        (void)deflateEnd(&stream);
2360                        return 1;
2361                }
2362        }
2363        while(stream.avail_out == 0);
2364       
2365        char* tmpoutbuf = *outbuf;     
2366        *outlen = inlen - stream.avail_out;
2367        *outbuf = realloc(*outbuf, *outlen);
2368        if(*outbuf == NULL)
2369        {
2370                if(*outlen > 0)
2371                {
2372                        err("no mem"); 
2373                        free(tmpoutbuf);
2374                }
2375                *outlen = 0;
2376                (void)deflateEnd(&stream);
2377                return 1;
2378        }       
2379
2380        (void)deflateEnd(&stream);
2381        return 0;
2382}
2383
2384//flag 0: malloc mem
2385//flag 1: don't malloc mem
2386//flag 2: malloc mem (gzip)
2387//flag 3: don't malloc mem (gzip)
2388int ounzip(char* inbuf, int inlen, char** outbuf, int* outlen, int maxbuf, int flag)
2389{
2390        int ret = 0;
2391        z_stream stream;
2392       
2393        if(inbuf == NULL || outbuf == NULL || maxbuf == 0) return 1;
2394        if(flag == 1 && *outbuf == NULL) return 1;
2395
2396        stream.zalloc = Z_NULL;
2397        stream.zfree = Z_NULL;
2398        stream.opaque = Z_NULL;
2399        stream.avail_in = 0;
2400        stream.next_in = Z_NULL;
2401        stream.avail_out = 0;
2402        stream.next_out = Z_NULL;
2403
2404        if(flag == 2 || flag == 3)
2405        {
2406                ret = inflateInit2(&stream, 16 + MAX_WBITS);
2407                if(flag == 2) flag = 0;
2408                else if(flag == 3) flag = 1;
2409        }
2410        else
2411                ret = inflateInit(&stream);
2412        if(ret != Z_OK)
2413                return 1;
2414
2415        if(flag == 0)
2416        {
2417                *outbuf = malloc(maxbuf);
2418                if(*outbuf == NULL)
2419                {
2420                        err("no mem");
2421                        (void)inflateEnd(&stream);
2422                        return 1;
2423                }
2424        }
2425
2426        stream.avail_in = inlen;
2427        stream.next_in = (void*)inbuf;
2428
2429        int round = 0;
2430        do
2431        {
2432                stream.avail_out = maxbuf;
2433               
2434                if(flag == 0 && round > 0)
2435                {
2436                        char* tmpoutbuf = *outbuf;
2437                        *outbuf = realloc(*outbuf, maxbuf * (round + 1));
2438                        if(*outbuf == NULL)
2439                        {
2440                                err("no mem");
2441                                free(tmpoutbuf);
2442                                (void)inflateEnd(&stream);
2443                                return 1;
2444                        }
2445                        stream.next_out = (void*)(*outbuf) + maxbuf * round;
2446                }
2447                else
2448                        stream.next_out = (void*)*outbuf;
2449
2450                ret = inflate(&stream, Z_NO_FLUSH);
2451                if(ret == Z_NEED_DICT || ret == Z_DATA_ERROR || ret == Z_MEM_ERROR)
2452                {
2453                        if(flag == 0)
2454                        {
2455                                free(*outbuf);
2456                                *outbuf = NULL;
2457                        }                               
2458                        (void)inflateEnd(&stream);
2459                        return 1;
2460                }
2461
2462                round++;
2463        }
2464        while(stream.avail_out == 0);
2465       
2466        if(flag == 0)
2467        {
2468                char* tmpoutbuf = *outbuf;
2469                *outlen = (maxbuf * round) - stream.avail_out;
2470                *outbuf = realloc(*outbuf, *outlen);
2471                if(*outbuf == NULL)
2472                {
2473                        err("no mem");
2474                        if(*outlen > 0) free(tmpoutbuf);
2475                        *outlen = 0;
2476                        (void)inflateEnd(&stream);
2477                        return 1;
2478                }       
2479        }
2480        else
2481                *outlen = maxbuf - stream.avail_out;                   
2482
2483        (void)inflateEnd(&stream);
2484        return 0;
2485}
2486
2487void endianswapshort(unsigned short* value)
2488{
2489        *value = (*value >> 8) | (*value << 8);
2490}
2491
2492int rcnumber(int rcret)
2493{
2494        if(rcret == getrcconfigint("rc0", NULL) ||
2495        rcret == getrcconfigint("rc1", NULL) ||
2496        rcret == getrcconfigint("rc2", NULL) ||
2497        rcret == getrcconfigint("rc3", NULL) ||
2498        rcret == getrcconfigint("rc4", NULL) ||
2499        rcret == getrcconfigint("rc5", NULL) ||
2500        rcret == getrcconfigint("rc6", NULL) ||
2501        rcret == getrcconfigint("rc7", NULL) ||
2502        rcret == getrcconfigint("rc8", NULL) ||
2503        rcret == getrcconfigint("rc9", NULL))
2504                return rcret;
2505        else
2506                return -9999;
2507}
2508
2509int checkdirext(char* dir, char* ext)
2510{
2511        struct dirent *dirent = NULL;
2512        DIR *pdir = NULL;
2513
2514        pdir = opendir(dir);
2515        if(pdir != NULL)
2516        {
2517                while((dirent = readdir(pdir)) != NULL)
2518                {
2519                        if(ostrcmp(".", dirent->d_name) != 0 && ostrcmp("..", dirent->d_name) != 0)
2520                        {
2521                                if(ostrstr(dirent->d_name, ext) != NULL)
2522                                {
2523                                        closedir(pdir);
2524                                        return 1;
2525                                }
2526                        }
2527                }
2528
2529                closedir(pdir);
2530        }
2531
2532        return 0;
2533}
2534
2535int delallfiles(char* dir, char* ext)
2536{
2537        struct dirent *dirent = NULL;
2538        DIR *pdir = NULL;
2539        char* tmpstr = NULL;
2540
2541        pdir = opendir(dir);
2542        if(pdir != NULL)
2543        {
2544                while((dirent = readdir(pdir)) != NULL)
2545                {
2546                        if(ostrcmp(".", dirent->d_name) != 0 && ostrcmp("..", dirent->d_name) != 0)
2547                        {
2548                                if(ext == NULL || ostrstr(dirent->d_name, ext) != NULL)
2549                                {
2550                                        tmpstr = ostrcat(dir, "/", 0, 0);
2551                                        tmpstr = ostrcat(tmpstr, dirent->d_name, 1, 0);
2552                                        unlink(tmpstr);
2553                                        free(tmpstr); tmpstr = NULL;
2554                                }
2555                        }
2556                }
2557
2558                closedir(pdir);
2559        }
2560
2561        return 0;
2562}
2563
2564unsigned long getfilecount(char* dir)
2565{
2566        unsigned long count = 0;
2567        struct dirent *dirent = NULL;
2568        DIR *pdir = NULL;
2569
2570        pdir = opendir(dir);
2571        if(pdir != NULL)
2572        {
2573                while((dirent = readdir(pdir)) != NULL)
2574                        count++;
2575
2576                closedir(pdir);
2577        }
2578
2579        return count;
2580}
2581
2582int getfiletype(char* filename)
2583{
2584        struct stat64 s;
2585
2586        if(filename == NULL) return -1;
2587
2588        if(stat64(filename, &s) >= 0)
2589        {
2590                if(S_ISREG(s.st_mode)) return DT_REG;
2591                if(S_ISDIR(s.st_mode)) return DT_DIR;
2592                if(S_ISCHR(s.st_mode)) return DT_CHR;
2593                if(S_ISBLK(s.st_mode)) return DT_BLK;
2594                if(S_ISFIFO(s.st_mode)) return DT_FIFO;
2595                if(S_ISLNK(s.st_mode)) return DT_LNK;
2596        }
2597
2598        return DT_UNKNOWN;
2599}
2600
2601int getlfiletype(char* filename)
2602{
2603        struct stat64 s;
2604
2605        if(filename == NULL) return -1;
2606
2607        if(lstat64(filename, &s) >= 0)
2608        {
2609                if(S_ISREG(s.st_mode)) return DT_REG;
2610                if(S_ISDIR(s.st_mode)) return DT_DIR;
2611                if(S_ISCHR(s.st_mode)) return DT_CHR;
2612                if(S_ISBLK(s.st_mode)) return DT_BLK;
2613                if(S_ISFIFO(s.st_mode)) return DT_FIFO;
2614                if(S_ISLNK(s.st_mode)) return DT_LNK;
2615        }
2616
2617        return DT_UNKNOWN;
2618}
2619
2620unsigned long long getfullspace(char* dir)
2621{
2622        struct statfs64 s;
2623        unsigned long long fullsize = 0;
2624
2625        if(statfs64(dir, &s) >= 0)
2626        {
2627                fullsize = s.f_blocks;
2628                fullsize *= s.f_bsize;
2629        }
2630
2631        return fullsize;
2632}
2633
2634unsigned long long getfreespace(char* dir)
2635{
2636        struct statfs64 s;
2637        unsigned long long freesize = 0;
2638
2639        if(statfs64(dir, &s) >= 0)
2640        {
2641                freesize = s.f_bfree;
2642                freesize *= s.f_bsize;
2643        }
2644
2645        return freesize;
2646}
2647
2648int checkbit(int value, int bitpos)
2649{
2650        int ret = 0;
2651
2652        ret = value & (1 << bitpos) ? 1: 0;
2653        return ret;
2654}
2655
2656int tooglebit(int value, int bitpos)
2657{
2658        value ^= 1 << bitpos;
2659        return value;
2660}
2661
2662int clearbit(int value, int bitpos)
2663{
2664        value &= ~(1 << bitpos);
2665        return value;
2666}
2667
2668int setbit(int value, int bitpos)
2669{
2670        value |= 1 << bitpos;
2671        return value;
2672}
2673
2674int setsystime(time_t* newtime)
2675{
2676        if (stime(newtime))
2677        {
2678                err("can't set system time");
2679                return 1;
2680        }
2681        return 0;
2682}
2683
2684off64_t getfilesize(char* name)
2685{
2686        struct stat64 sbuf;
2687
2688        if(lstat64(name, &sbuf) == -1)
2689                return 0;
2690
2691        return sbuf.st_size;
2692}
2693
2694time_t getfiletime(char* name, int type)
2695{
2696        struct stat64 sbuf;
2697
2698        if(lstat64(name, &sbuf) == -1)
2699                return 0;
2700
2701        switch(type)
2702        {
2703                case 1: return sbuf.st_mtime;
2704                case 2: return sbuf.st_ctime;
2705                default: return sbuf.st_atime;
2706        }
2707}
2708
2709int isfile(char* name)
2710{
2711        struct stat64 sbuf;
2712
2713        if(lstat64(name, &sbuf) == -1)
2714                return 0;
2715
2716        if(S_ISREG(sbuf.st_mode))
2717                return 1;
2718
2719        return 0;
2720}
2721
2722int isdir(char* name)
2723{
2724        struct stat64 sbuf;
2725        char *rpath = NULL;
2726
2727        if(lstat64(name, &sbuf) == -1)
2728                return 0;
2729
2730        if(S_ISDIR(sbuf.st_mode))
2731                return 1;
2732
2733        if(S_ISLNK(sbuf.st_mode))
2734        {
2735                rpath = realpath(name, NULL);
2736                if(lstat64(rpath, &sbuf) == -1)
2737                {
2738                        free(rpath);
2739                        return 0;
2740                }
2741                free(rpath);
2742                if(S_ISDIR(sbuf.st_mode))
2743                        return 1;
2744        }
2745
2746        return 0;
2747}
2748
2749char* getmaxsatstring(int maxsat)
2750{
2751        char* tmpstr = NULL, *tmpnr = NULL;
2752        int i;
2753
2754        tmpstr = ostrcat(tmpstr, "1", 1, 0);
2755        for(i = 2; i <= maxsat; i++)
2756        {
2757                tmpnr = oitoa(i);
2758                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
2759                tmpstr = ostrcat(tmpstr, tmpnr, 1, 1);
2760        }
2761        return tmpstr;
2762}
2763
2764void ostrcatbig(char** value1, char* value2, int* maxlen, int* pos)
2765{
2766        int len = 0;
2767
2768        if(value2 == NULL)
2769                return;
2770
2771        len = strlen(value2) + 1;
2772
2773        if(*value1 != NULL && maxlen == 0)
2774                *maxlen = strlen(*value1);
2775
2776        if(*value1 == NULL || *pos + len > *maxlen)
2777        {
2778                *maxlen = *maxlen + len + (MINMALLOC * 10);
2779                *value1 = realloc(*value1, *maxlen);
2780                if(*value1 == NULL)
2781                {
2782                        err("no mem");
2783                        return;
2784                }
2785        }
2786
2787        memcpy(*value1 + *pos, value2, len);
2788        *pos = *pos + (len - 1);
2789}
2790
2791char* ostrshrink(char* value)
2792{
2793        int len = 0;
2794        char* buf = NULL;
2795
2796        if(value == NULL) return NULL;
2797
2798        len = strlen(value);
2799        if(len == 0) return value;
2800
2801        buf = malloc(len + 1);
2802        if(buf == NULL)
2803                return value;
2804
2805        memcpy(buf, value, len);
2806        free(value);
2807        buf[len] = '\0';
2808
2809        return buf;
2810}
2811
2812char* ostrcat(char* value1, char* value2, int free1, int free2)
2813{
2814        int len = 0, len1 = 0, len2 = 0;
2815        char* buf = NULL;
2816
2817        if(value1 == NULL && value2 == NULL) return NULL;
2818
2819        if(value1 != NULL) len1 = strlen(value1);
2820        if(value2 != NULL) len2 = strlen(value2);
2821
2822        len = len1 + len2 + 1;
2823
2824        if(free1 == 1)
2825                buf = realloc(value1, len);
2826        else
2827                buf = malloc(len);
2828        if(buf == NULL)
2829        {
2830                if(free1 == 1) free(value1);
2831                if(free2 == 1) free(value2);
2832                return NULL;
2833        }
2834
2835        if(free1 == 0 && len1 > 0) memcpy(buf, value1, len1);
2836        if(len2 > 0) memcpy(buf + len1, value2, len2);
2837        buf[len - 1] = '\0';
2838
2839        if(free2 == 1) free(value2);
2840
2841        //helpfull for memleak detect
2842        //if(buf != NULL && strlen(buf) == 0x0b - 0x01)
2843        //      printf("******** memleak string (%s) (%p) ********\n", buf, buf);
2844
2845        return buf;
2846}
2847
2848char* ollutoa(uint64_t value)
2849{
2850        char *buf = NULL;
2851
2852        buf = malloc(MINMALLOC);
2853        if(buf == NULL)
2854        {
2855                err("no mem");
2856                return NULL;
2857        }
2858
2859        sprintf(buf, "%llu", value);
2860        buf = ostrshrink(buf);
2861
2862        return buf;
2863}
2864
2865char* olutoa(unsigned long value)
2866{
2867        char *buf = NULL;
2868
2869        buf = malloc(MINMALLOC);
2870        if(buf == NULL)
2871        {
2872                err("no mem");
2873                return NULL;
2874        }
2875
2876        sprintf(buf, "%lu", value);
2877        buf = ostrshrink(buf);
2878
2879        return buf;
2880}
2881
2882char* oitoax(int value)
2883{
2884        char *buf = NULL;
2885
2886        buf = malloc(MINMALLOC);
2887        if(buf == NULL)
2888        {
2889                err("no mem");
2890                return NULL;
2891        }
2892
2893        sprintf(buf, "%x", value);
2894        buf = ostrshrink(buf);
2895
2896        return buf;
2897}
2898
2899char* oitoa(int value)
2900{
2901        char *buf = NULL;
2902
2903        buf = malloc(MINMALLOC);
2904        if(buf == NULL)
2905        {
2906                err("no mem");
2907                return NULL;
2908        }
2909
2910        sprintf(buf, "%d", value);
2911        buf = ostrshrink(buf);
2912
2913        return buf;
2914}
2915
2916char* oitoa64(off64_t value)
2917{
2918        char *buf = NULL;
2919
2920        buf = malloc(MINMALLOC);
2921        if(buf == NULL)
2922        {
2923                err("no mem");
2924                return NULL;
2925        }
2926
2927        sprintf(buf, "%lld", value);
2928        buf = ostrshrink(buf);
2929
2930        return buf;
2931}
2932
2933char* oftoa64(double value, char* count)
2934{
2935        char *buf = NULL;
2936        char* tmpstr = NULL;
2937
2938        buf = malloc(MINMALLOC);
2939        if(buf == NULL)
2940        {
2941                err("no mem");
2942                return NULL;
2943        }
2944
2945        tmpstr = ostrcat("%.", count, 0, 0);
2946        tmpstr = ostrcat(tmpstr, "f", 1, 0);
2947
2948        sprintf(buf, tmpstr, value);
2949        buf = ostrshrink(buf);
2950
2951        free(tmpstr);
2952        return buf;
2953}
2954
2955int ostrncmp(char* value1, char* value2, int count)
2956{
2957        int ret = 1;
2958
2959        if(value1 != NULL && value2 != NULL)
2960                ret = strncmp(value1, value2, count);
2961
2962        return ret;
2963}
2964
2965int ostrcmp(char* value1, char* value2)
2966{
2967        int ret = 1;
2968
2969        if(value1 != NULL && value2 != NULL)
2970                ret = strcmp(value1, value2);
2971
2972        return ret;
2973}
2974
2975int ostrcasecmp(char* value1, char* value2)
2976{
2977        int ret = 1;
2978
2979        if(value1 != NULL && value2 != NULL)
2980                ret = strcasecmp(value1, value2);
2981
2982        return ret;
2983}
2984
2985char* createpath(char* dir, char* file)
2986{
2987        char *absdir = NULL;
2988        char *pos = NULL;
2989        char* tmpdir = NULL;
2990
2991        if(dir == NULL || file == NULL)
2992        {
2993                err("NULL detect");
2994                return NULL;
2995        }
2996
2997        tmpdir = ostrcat(dir, NULL, 0, 0);
2998        if(tmpdir == NULL)
2999        {
3000                err("NULL detect");
3001                return NULL;
3002        }
3003
3004        while((tmpdir[strlen(tmpdir) - 1] == '.' && tmpdir[strlen(tmpdir) - 2] != '.') || tmpdir[strlen(tmpdir) - 1] == '/')
3005                tmpdir[strlen(tmpdir) - 1] = '\0';
3006
3007        while(tmpdir[strlen(tmpdir) - 1] == '.' && tmpdir[strlen(tmpdir) - 2] == '.')
3008        {
3009                tmpdir[strlen(tmpdir) - 1] = '\0';
3010                tmpdir[strlen(tmpdir) - 1] = '\0';
3011                if(tmpdir[strlen(tmpdir) - 1] == '/')
3012                        tmpdir[strlen(tmpdir) - 1] = '\0';
3013                pos = strrchr(tmpdir, '/');
3014                if(pos != NULL)
3015                        pos[0] = '\0';
3016        }
3017
3018        absdir = malloc(strlen(tmpdir) + strlen(file) + 2);
3019        if(absdir == NULL)
3020        {
3021                free(tmpdir);
3022                err("no mem");
3023                return NULL;
3024        }
3025
3026        if(strlen(file) > 0 || strlen(tmpdir) == 0)
3027                sprintf(absdir, "%s/%s", tmpdir, file);
3028        else
3029                sprintf(absdir, "%s", tmpdir);
3030
3031        free(tmpdir);
3032        return absdir;
3033}
3034
3035int settimezone(char* zone)
3036{
3037        int ret = 0;
3038        char* tmpzone = NULL, *zonepath = NULL;
3039
3040        zonepath = getconfig("zonepath", NULL);
3041        if(zonepath == NULL)
3042        {
3043                err("config zonepath not defined");
3044                return 1;
3045        }
3046
3047        tmpzone = createpath(zonepath, zone);
3048        if(tmpzone == NULL)
3049                return 1;
3050
3051        setenv("TZ", zone, 1);
3052
3053        ret = unlink(getconfig("localtimefile", NULL));
3054        if(ret != 0)
3055                perr("unlink");
3056        ret = symlink(tmpzone, getconfig("localtimefile", NULL));
3057        if(ret != 0)
3058                perr("link");
3059
3060        free(tmpzone);
3061        return ret;
3062}
3063
3064int delchar(char** text, int pos)
3065{
3066        char *tmptext = NULL;
3067        int i = 0, y = 0, len = 0;
3068
3069        if(text == NULL || *text == NULL)
3070                return pos;
3071
3072        len = strlen(*text);
3073        if(len == 0) return pos;
3074
3075        tmptext = malloc(strlen(*text));
3076        if(tmptext == NULL)
3077        {
3078                err("no mem");
3079                return pos;
3080        }
3081
3082        for(i = 0; i < strlen(*text); i++)
3083        {
3084                if(i == pos - 1)
3085                        y++;
3086
3087                tmptext[i] = (*text)[y];
3088                y++;
3089        }
3090
3091        if(i > 0) tmptext[i - 1] = '\0';
3092        if(pos >= strlen(tmptext)) pos = strlen(tmptext);
3093
3094        free(*text);
3095        *text = tmptext;
3096        return pos;
3097}
3098
3099
3100int insertchar(char** text, char zeichen, int pos)
3101{
3102        char *tmptext = NULL;
3103        int i, y = 0;
3104
3105        if(text == NULL || *text == NULL)
3106                return pos;
3107
3108        tmptext = malloc(strlen(*text) + 2);
3109        if(tmptext == NULL)
3110        {
3111                err("no mem");
3112                return pos;
3113        }
3114
3115        if(strlen(*text) == 0)
3116        {
3117                tmptext[0] = zeichen;
3118                i = 1;
3119                pos = 0;
3120        }
3121        else
3122        {
3123                for(i = 0; i < strlen(*text) + 1; i++)
3124                {
3125                        if(i == pos)
3126                                tmptext[i] = zeichen;
3127                        else
3128                        {
3129                                tmptext[i] = (*text)[y];
3130                                y++;
3131                        }
3132                }
3133        }
3134        tmptext[i] = '\0';
3135
3136        free(*text);
3137        *text = tmptext;
3138        return pos + 1;
3139}
3140
3141void calctext(char* buf, char* buf1, unsigned int* linecount, unsigned int* pagecount, unsigned int* poscount, int pagelen, int page)
3142{
3143        unsigned int tmpposcount = 0;
3144        unsigned int pagepagelen = 0;
3145
3146        *poscount = 0;
3147        *linecount = 1;
3148        *pagecount = 1;
3149
3150        page--;
3151        if(page < 0) page = 0;
3152        pagepagelen = pagelen * page;
3153
3154        if(buf != NULL)
3155        {
3156                while(*buf != '\0')
3157                {
3158                        if(*buf == '\n')
3159                        {
3160                                if(*(buf + 1) == '\0') break;
3161                                (*linecount)++;
3162
3163                                if(*linecount - 1 == pagepagelen)
3164                                        *poscount = tmpposcount + 1;
3165                        }
3166                        buf++;
3167                        tmpposcount++;
3168                }
3169        }
3170
3171        if(buf1 != NULL)
3172        {
3173                while(*buf1 != '\0')
3174                {
3175                        if(*buf1 == '\n')
3176                        {
3177                                if(*(buf1 + 1) == '\0') break;
3178                                (*linecount)++;
3179
3180                                if(*linecount - 1 == pagepagelen)
3181                                        *poscount = tmpposcount + 1;
3182                        }
3183                        buf1++;
3184                        tmpposcount++;
3185                }
3186        }
3187
3188        if(pagelen > 0)
3189                *pagecount = (int)ceil(((float)*linecount / pagelen));
3190}
3191
3192int initlocale(char *localepath)
3193{
3194        setlocale(LC_ALL, "");
3195        if(bindtextdomain(PROGNAME, localepath) == NULL)
3196        {
3197                err("set bindtextdomain");
3198                return 1;
3199        }
3200        if(textdomain(PROGNAME) == NULL)
3201        {
3202                err("set textdomain");
3203                return 1;
3204        }
3205        return 0;
3206}
3207
3208//for langage you must
3209//mkdir /usr/lib/locale
3210//ln -s %titanpath%/po /usr/lib/locale/po
3211//copy SYS_LC_MESSAGES from other language into LC_MESSAGE
3212int setlang(char *lang)
3213{
3214        char *ret;
3215
3216        setenv("LANG", lang, 1);
3217        setenv("LANGUAGE", lang, 1);
3218        ret = setlocale(LC_MESSAGES, lang);
3219        if(ret == NULL)
3220        {
3221                err("can't set LC_MESSAGES to %s", lang);
3222                return 1;
3223        }
3224        return 0;
3225}
3226
3227unsigned long readsysul(const char *filename, int line)
3228{
3229        int i = 0, len = 0;
3230        unsigned long ret = 0;
3231        FILE *fd = NULL;
3232        char *fileline = NULL;
3233        char *buf1 = NULL;
3234
3235        fileline = malloc(MINMALLOC);
3236        if(fileline == NULL)
3237        {
3238                err("no mem");
3239                return 0;
3240        }
3241
3242        fd = fopen(filename, "r");
3243        if(fd == NULL)
3244        {
3245                perr("can't open %s", filename);
3246                free(fileline);
3247                return 0;
3248        }
3249
3250        for(i = 0; i < line; i++)
3251        {
3252                memset(fileline, 0, MINMALLOC);
3253                fgets(fileline, MINMALLOC, fd);
3254        }
3255
3256        len = strlen(fileline) - 1;
3257        if(len >= 0 && fileline[len] == '\n')
3258                fileline[len] = '\0';
3259        buf1 = ostrshrink(fileline);
3260
3261        fclose(fd);
3262
3263        if(buf1 != NULL)
3264        {
3265                ret = strtoul(buf1, NULL, 10);
3266                free(buf1); buf1 = NULL;
3267        }
3268
3269        return ret;
3270}
3271
3272unsigned long long readsysull(const char *filename, int line)
3273{
3274        int i = 0, len = 0;
3275        unsigned long long ret = 0;
3276        FILE *fd = NULL;
3277        char *fileline = NULL;
3278        char *buf1 = NULL;
3279
3280        fileline = malloc(MINMALLOC);
3281        if(fileline == NULL)
3282        {
3283                err("no mem");
3284                return 0;
3285        }
3286
3287        fd = fopen(filename, "r");
3288        if(fd == NULL)
3289        {
3290                perr("can't open %s", filename);
3291                free(fileline);
3292                return 0;
3293        }
3294
3295        for(i = 0; i < line; i++)
3296        {
3297                memset(fileline, 0, MINMALLOC);
3298                fgets(fileline, MINMALLOC, fd);
3299        }
3300
3301        len = strlen(fileline) - 1;
3302        if(len >= 0 && fileline[len] == '\n')
3303                fileline[len] = '\0';
3304        buf1 = ostrshrink(fileline);
3305
3306        fclose(fd);
3307
3308        if(buf1 != NULL)
3309        {
3310                ret = strtoull(buf1, NULL, 10);
3311                free(buf1); buf1 = NULL;
3312        }
3313
3314        return ret;
3315}
3316
3317char* readsys(const char *filename, int line)
3318{
3319        int i = 0, len = 0;
3320        FILE *fd = NULL;
3321        char *fileline = NULL;
3322        char *buf1 = NULL;
3323
3324        fileline = malloc(MINMALLOC);
3325        if(fileline == NULL)
3326        {
3327                err("no mem");
3328                return NULL;
3329        }
3330
3331        fd = fopen(filename, "r");
3332        if(fd == NULL)
3333        {
3334                perr("can't open %s", filename);
3335                free(fileline);
3336                return NULL;
3337        }
3338
3339        for(i = 0; i < line; i++)
3340        {
3341                memset(fileline, 0, MINMALLOC);
3342                fgets(fileline, MINMALLOC, fd);
3343        }
3344
3345        len = strlen(fileline) - 1;
3346        if(len >= 0 && fileline[len] == '\n')
3347                fileline[len] = '\0';
3348        buf1 = ostrshrink(fileline);
3349
3350        fclose(fd);
3351        return buf1;
3352}
3353
3354//flag 0: without \n
3355//flag 1: with \n
3356//flag 2: append without \n
3357//flag 3: append with \n
3358int writesys(const char *filename, char *value, int flag)
3359{
3360        FILE *fd = NULL;
3361        char* tmpstr = NULL;
3362        int ret;
3363
3364        if(value == NULL)
3365        {
3366                err("NULL detect");
3367                return 1;
3368        }
3369
3370        if(flag == 2 || flag == 3)
3371                fd = fopen(filename, "a");
3372        else
3373                fd = fopen(filename, "w");
3374        if(fd == NULL)
3375        {
3376                perr("can't open %s", filename);
3377                return 1;
3378        }
3379
3380        if(flag == 1 || flag == 3)
3381                tmpstr = ostrcat(value, "\n", 0, 0);
3382        else
3383                tmpstr = ostrcat(value, NULL, 0, 0);
3384
3385        ret = fwrite(tmpstr, strlen(tmpstr), 1, fd);
3386        if(ret != 1)
3387        {
3388                perr("writting to %s", filename);
3389                free(tmpstr);
3390                fclose(fd);
3391                return 1;
3392        }
3393
3394        free(tmpstr);
3395        fclose(fd);
3396        return 0;
3397}
3398
3399//flag 0: without \n
3400//flag 1: with \n
3401//flag 2: append without \n
3402//flag 3: append with \n
3403int writesysint(const char *filename, int value, int flag)
3404{
3405        char* tmpstr = NULL;
3406        int ret = 0;
3407
3408        tmpstr = oitoa(value);
3409        ret = writesys(filename, tmpstr, flag);
3410
3411        free(tmpstr);
3412        return ret;
3413}
3414
3415char* getdevcontent(char* devconfig)
3416{
3417        char *dev = NULL;
3418        char *value = NULL;
3419
3420        dev = getconfig(devconfig, NULL);
3421
3422        if(dev == NULL)
3423        {
3424                err("NULL detect");
3425                return NULL;
3426        }
3427
3428        value = readsys(dev, 1);
3429        if(value == NULL)
3430        {
3431                err("NULL detect");
3432                return NULL;
3433        }
3434
3435        return value;
3436}
3437
3438char* convertspacetolf(char* value)
3439{
3440        int i = 0;
3441
3442        while(value[i] != '\0')
3443        {
3444                if(value[i] == ' ')
3445                        value[i] = '\n';
3446                i++;
3447        }
3448
3449        return value;
3450}
3451
3452//flag 0: all
3453//flag 1: hdmi
3454//flag 2: not hdmi
3455char* getcolorformatchoices(int flag)
3456{
3457        char *colorformatchoicesdev = NULL;
3458        char *value = NULL;
3459
3460        colorformatchoicesdev = getconfig("colorformatchoicesdev", NULL);
3461
3462        if(colorformatchoicesdev == NULL)
3463        {
3464                err("NULL detect");
3465                return NULL;
3466        }
3467
3468        value = readsys(colorformatchoicesdev, 1);
3469        if(value == NULL)
3470        {
3471                err("NULL detect");
3472                return NULL;
3473        }
3474       
3475        if(flag == 1)
3476        {
3477                value = string_replace("rgb", NULL, value, 1);
3478                value = string_replace("  ", " ", value, 1);
3479                value = string_replace("cvbs", NULL, value, 1);
3480                value = string_replace("  ", " ", value, 1);
3481                value = string_replace("svideo", NULL, value, 1);
3482                value = string_replace("  ", " ", value, 1);
3483                value = string_replace("yuv", NULL, value, 1);
3484                value = string_replace("  ", " ", value, 1);
3485        }
3486        else if(flag == 2)
3487        {
3488                value = string_replace("hdmi_rgb", NULL, value, 1);
3489                value = string_replace("  ", " ", value, 1);
3490                value = string_replace("hdmi_yuv", NULL, value, 1);
3491                value = string_replace("  ", " ", value, 1);
3492                value = string_replace("hdmi_422", NULL, value, 1);
3493                value = string_replace("  ", " ", value, 1);
3494        }
3495
3496        value = strstrip(value);
3497        value = convertspacetolf(value);
3498
3499        return value;
3500}
3501
3502char* getaudiosourcechoices()
3503{
3504        char *audiosourcechoicesdev = NULL;
3505        char *value = NULL;
3506
3507        audiosourcechoicesdev = getconfig("audiosourcechoicesdev", NULL);
3508
3509        if(audiosourcechoicesdev == NULL)
3510        {
3511                err("NULL detect");
3512                return NULL;
3513        }
3514
3515        value = readsys(audiosourcechoicesdev, 1);
3516        if(value == NULL)
3517        {
3518                err("NULL detect");
3519                return NULL;
3520        }
3521
3522        value = convertspacetolf(value);
3523
3524        return value;
3525}
3526
3527char* getac3choices()
3528{
3529        char *ac3choicesdev = NULL;
3530        char *value = NULL;
3531
3532        ac3choicesdev = getconfig("ac3choicesdev", NULL);
3533
3534        if(ac3choicesdev == NULL)
3535        {
3536                err("NULL detect");
3537                return NULL;
3538        }
3539
3540        value = readsys(ac3choicesdev, 1);
3541        if(value == NULL)
3542        {
3543                err("NULL detect");
3544                return NULL;
3545        }
3546
3547        value = convertspacetolf(value);
3548
3549        return value;
3550}
3551
3552char* getaacchoices()
3553{
3554        char *aacchoicesdev = NULL;
3555        char *value = NULL;
3556
3557        aacchoicesdev = getconfig("aacchoicesdev", NULL);
3558
3559        if(aacchoicesdev == NULL)
3560        {
3561                err("NULL detect");
3562                return NULL;
3563        }
3564
3565        value = readsys(aacchoicesdev, 1);
3566        if(value == NULL)
3567        {
3568                err("NULL detect");
3569                return NULL;
3570        }
3571
3572        value = convertspacetolf(value);
3573
3574        return value;
3575}
3576
3577char* getwsschoices()
3578{
3579        char *wsschoicesdev = NULL;
3580        char *value = NULL;
3581
3582        wsschoicesdev = getconfig("wsschoicesdev", NULL);
3583
3584        if(wsschoicesdev == NULL)
3585        {
3586                err("NULL detect");
3587                return NULL;
3588        }
3589
3590        value = readsys(wsschoicesdev, 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
3602int setciclock(int slotnr, char* value)
3603{
3604        char* ciclockdev = NULL, *tmpstr = NULL;
3605        int ret = 0;
3606
3607        ciclockdev = getconfig("ciclockdev", NULL);
3608
3609        if(ciclockdev != NULL && value != NULL)
3610        {
3611                tmpstr = malloc(MINMALLOC);
3612                if(tmpstr == NULL)
3613                {
3614                        err("no mem");
3615                        return 1;
3616                }
3617
3618                snprintf(tmpstr, MINMALLOC, ciclockdev, slotnr);
3619                debug(100, "set %s to %s", tmpstr, value);
3620                ret = writesys(tmpstr, value, 0);
3621
3622                free(tmpstr); tmpstr = NULL;
3623                return ret;
3624        }
3625
3626        return 0;
3627}
3628
3629//routes stream from tuner to ci or ci to ci
3630int setciinput(int slotnr, char* value)
3631{
3632        char* ciinputdev = NULL, *tmpstr = NULL;
3633        int ret = 0;
3634
3635        ciinputdev = getconfig("ciinputdev", NULL);
3636
3637        if(ciinputdev != NULL && value != NULL)
3638        {
3639                tmpstr = malloc(MINMALLOC);
3640                if(tmpstr == NULL)
3641                {
3642                        err("no mem");
3643                        return 1;
3644                }
3645
3646                snprintf(tmpstr, MINMALLOC, ciinputdev, slotnr);
3647                debug(100, "set %s to %s", tmpstr, value);
3648                ret = writesys(tmpstr, value, 0);
3649
3650                free(tmpstr); tmpstr = NULL;
3651                return ret;
3652        }
3653
3654        return 0;
3655}
3656
3657//routes stream from tuner or ci to linux
3658int setcisource(int tunernr, char* value)
3659{
3660        char* cisourcedev = NULL, *tmpstr = NULL;
3661        int ret = 0;
3662
3663        cisourcedev = getconfig("cisourcedev", NULL);
3664
3665        if(cisourcedev != NULL && value != NULL)
3666        {
3667                tmpstr = malloc(MINMALLOC);
3668                if(tmpstr == NULL)
3669                {
3670                        err("no mem");
3671                        return 1;
3672                }
3673
3674                snprintf(tmpstr, MINMALLOC, cisourcedev, tunernr);
3675                debug(100, "set %s to %s", tmpstr, value);
3676                ret = writesys(tmpstr, value, 0);
3677
3678                free(tmpstr); tmpstr = NULL;
3679                return ret;
3680        }
3681
3682        return 0;
3683}
3684
3685int setinput(char* value)
3686{
3687        char* inputdev = NULL;
3688        int ret = 0;
3689
3690        inputdev = getconfig("inputdev", NULL);
3691
3692        if(inputdev != NULL && value != NULL)
3693        {
3694                debug(100, "set %s to %s", inputdev, value);
3695                ret = writesys(inputdev, value, 0);
3696                return ret;
3697        }
3698
3699        return 0;
3700}
3701
3702char* getinput()
3703{
3704        char *inputdev = NULL;
3705        char *value = NULL;
3706
3707        inputdev = getconfig("inputdev", NULL);
3708
3709        if(inputdev == NULL)
3710        {
3711                err("NULL detect");
3712                return NULL;
3713        }
3714
3715        value = readsys(inputdev, 1);
3716        if(value == NULL)
3717        {
3718                err("NULL detect");
3719                return NULL;
3720        }
3721
3722        return value;
3723}
3724
3725int setac3(char* value)
3726{
3727        char* ac3dev = NULL;
3728        int ret = 0;
3729
3730        ac3dev = getconfig("ac3dev", NULL);
3731
3732        if(ac3dev != NULL && value != NULL)
3733        {
3734                debug(100, "set %s to %s", ac3dev, value);
3735                ret = writesys(ac3dev, value, 0);
3736                if(ret == 0) addconfig("av_ac3mode", value);
3737                return ret;
3738        }
3739
3740        return 0;
3741}
3742
3743int setaac(char* value)
3744{
3745        char* aacdev = NULL;
3746        int ret = 0;
3747
3748        aacdev = getconfig("aacdev", NULL);
3749
3750        if(aacdev != NULL && value != NULL)
3751        {
3752                debug(100, "set %s to %s", aacdev, value);
3753                ret = writesys(aacdev, value, 0);
3754                if(ret == 0) addconfig("av_aacmode", value);
3755                return ret;
3756        }
3757
3758        return 0;
3759}
3760
3761int setwss(char* value)
3762{
3763        char* wssdev = NULL;
3764        int ret = 0;
3765
3766        wssdev = getconfig("wssdev", NULL);
3767
3768        if(wssdev != NULL && value != NULL)
3769        {
3770                debug(100, "set %s to %s", wssdev, value);
3771                ret = writesys(wssdev, value, 0);
3772                if(ret == 0) addconfig("av_wssmode", value);
3773                return ret;
3774        }
3775        else if(wssdev != NULL && value == NULL)
3776        {
3777                debug(100, "set %s to %s", wssdev, "auto");
3778                ret = writesys(wssdev, "auto", 0);
3779                return ret;
3780        }
3781
3782        return 0;
3783}
3784
3785char* getac3()
3786{
3787        char *ac3dev = NULL;
3788        char *value = NULL;
3789
3790        ac3dev = getconfig("ac3dev", NULL);
3791
3792        if(ac3dev == NULL)
3793        {
3794                err("NULL detect");
3795                return NULL;
3796        }
3797
3798        value = readsys(ac3dev, 1);
3799        if(value == NULL)
3800        {
3801                err("NULL detect");
3802                return NULL;
3803        }
3804
3805        return value;
3806}
3807
3808char* getaac()
3809{
3810        char *aacdev = NULL;
3811        char *value = NULL;
3812
3813        aacdev = getconfig("aacdev", NULL);
3814
3815        if(aacdev == NULL)
3816        {
3817                err("NULL detect");
3818                return NULL;
3819        }
3820
3821        value = readsys(aacdev, 1);
3822        if(value == NULL)
3823        {
3824                err("NULL detect");
3825                return NULL;
3826        }
3827
3828        return value;
3829}
3830
3831char* getwss()
3832{
3833        char *wssdev = NULL;
3834        char *value = NULL;
3835
3836        wssdev = getconfig("wssdev", NULL);
3837
3838        if(wssdev == NULL)
3839        {
3840                err("NULL detect");
3841                return NULL;
3842        }
3843
3844        value = readsys(wssdev, 1);
3845        if(value == NULL)
3846        {
3847                err("NULL detect");
3848                return NULL;
3849        }
3850
3851        return value;
3852}
3853
3854int setaudiodelaybitstream(char* value)
3855{
3856        char* audiodelaybitstreamdev = NULL;
3857        int ret = 0;
3858
3859        audiodelaybitstreamdev = getconfig("audiodelaybitstreamdev", NULL);
3860
3861        if(audiodelaybitstreamdev != NULL && value != NULL)
3862        {
3863                debug(100, "set %s to %s", audiodelaybitstreamdev, value);
3864                ret = writesys(audiodelaybitstreamdev, value, 0);
3865                if(ret == 0) addconfig("audiodelaybitstream", value);
3866                return ret;
3867        }
3868
3869        return 0;
3870}
3871
3872char* getaudiodelaybitstream()
3873{
3874        char *audiodelaybitstreamdev = NULL;
3875        char *value = NULL;
3876
3877        audiodelaybitstreamdev = getconfig("audiodelaybitstreamdev", NULL);
3878
3879        if(audiodelaybitstreamdev == NULL)
3880        {
3881                err("NULL detect");
3882                return NULL;
3883        }
3884
3885        value = readsys(audiodelaybitstreamdev, 1);
3886        if(value == NULL)
3887        {
3888                err("NULL detect");
3889                return NULL;
3890        }
3891
3892        return value;
3893}
3894
3895char* getpolicychoices()
3896{
3897        char *policychoicesdev = NULL;
3898        char *value = NULL;
3899
3900        policychoicesdev = getconfig("policychoicesdev", NULL);
3901
3902        if(policychoicesdev == NULL)
3903        {
3904                err("NULL detect");
3905                return NULL;
3906        }
3907
3908        value = readsys(policychoicesdev, 1);
3909        if(value == NULL)
3910        {
3911                err("NULL detect");
3912                return NULL;
3913        }
3914
3915#ifdef MIPSEL
3916        char *aspect = NULL;
3917        aspect = getaspect();
3918        if(!ostrncmp("16:9", aspect, 4))
3919                value = string_replace("nonlinear", "", value, 1);
3920        free(aspect), aspect = NULL;
3921#endif
3922
3923        value = convertspacetolf(value);
3924
3925        return value;
3926}
3927
3928char* getpolicy()
3929{
3930        char *policydev = NULL;
3931        char *value = NULL;
3932
3933        policydev = getconfig("policydev", NULL);
3934
3935        if(policydev == NULL)
3936        {
3937                err("NULL detect");
3938                return NULL;
3939        }
3940
3941        value = readsys(policydev, 1);
3942
3943#ifdef MIPSEL
3944        char *aspect = NULL;
3945        aspect = getaspect();
3946        if(!ostrncmp("16:9", aspect, 4))
3947        {
3948                policydev = getconfig("policy2dev", NULL);
3949                value = readsys(policydev, 1);
3950        }
3951        else
3952        {
3953                if(!ostrncmp("letterbox", value, 9))
3954                        value = string_replace("letterbox", "panscan", value, 1);                       
3955                else
3956                        value = string_replace("panscan", "pillarbox", value, 1);
3957        }
3958        free(aspect), aspect = NULL;
3959#endif
3960
3961        if(value == NULL)
3962        {
3963                err("NULL detect");
3964                return NULL;
3965        }
3966
3967        return value;
3968}
3969
3970int setpolicy(char* value)
3971{
3972        char* policydev, *tmpstr = NULL;
3973        int ret = 0;
3974
3975        policydev = getconfig("policydev", NULL);
3976
3977        if(policydev != NULL && value != NULL)
3978        {
3979                debug(10, "set %s to %s", policydev, value);
3980                tmpstr = ostrcat(value, NULL, 0, 0);
3981
3982#ifdef MIPSEL
3983                char* aspect = NULL;
3984                aspect = getaspect();
3985                if(!ostrncmp("16:9", aspect, 4))
3986                        policydev = getconfig("policy2dev", NULL);
3987                else
3988                {               
3989                        if(!ostrncmp("letterbox", tmpstr, 9))
3990                                tmpstr = string_replace("pillarbox", "panscan", tmpstr, 1);                     
3991                        else
3992                                tmpstr = string_replace("panscan", "letterbox", tmpstr, 1);
3993                }
3994                free(aspect), aspect = NULL;
3995#endif
3996                debug(10, "set change %s to %s", policydev, tmpstr);
3997                ret = writesys(policydev, tmpstr, 0);
3998
3999                if(ret == 0) addconfig("av_policy", value);
4000
4001                free(tmpstr), tmpstr = NULL;
4002                return ret;
4003        }
4004
4005        return 0;
4006}
4007
4008char* getaspectchoices()
4009{
4010        char *aspectchoicesdev = NULL;
4011        char *value = NULL;
4012
4013        aspectchoicesdev = getconfig("aspectchoicesdev", NULL);
4014
4015        if(aspectchoicesdev == NULL)
4016        {
4017                err("NULL detect");
4018                return NULL;
4019        }
4020
4021        value = readsys(aspectchoicesdev, 1);
4022        if(value == NULL)
4023        {
4024                err("NULL detect");
4025                return NULL;
4026        }
4027
4028        value = convertspacetolf(value);
4029
4030        return value;
4031}
4032
4033char* getaspect()
4034{
4035        char *aspectdev = NULL;
4036        char *value = NULL;
4037
4038        aspectdev = getconfig("aspectdev", NULL);
4039
4040        if(aspectdev == NULL)
4041        {
4042                err("NULL detect");
4043                return NULL;
4044        }
4045
4046        value = readsys(aspectdev, 1);
4047        if(value == NULL)
4048        {
4049                err("NULL detect");
4050                return NULL;
4051        }
4052
4053        return value;
4054}
4055
4056int setaspect(char* value)
4057{
4058        char* aspectdev;
4059        int ret = 0;
4060
4061        aspectdev = getconfig("aspectdev", NULL);
4062
4063        if(aspectdev != NULL && value != NULL)
4064        {
4065                debug(100, "set %s to %s", aspectdev, value);
4066                ret = writesys(aspectdev, value, 0);
4067                if(ret == 0)
4068                {
4069                        addconfig("av_aspect", value);
4070
4071                        //set policy new after change aspect
4072                        char* tmpstr = getpolicy();
4073                        setpolicy(tmpstr);
4074                        free(tmpstr); tmpstr = NULL;
4075                }
4076                return ret;
4077        }
4078
4079        return 0;
4080}
4081
4082char* getvideomodechoices()
4083{
4084        char *videomodechoicesdev = NULL;
4085        char *value = NULL;
4086
4087        videomodechoicesdev = getconfig("videomodechoicesdev", NULL);
4088
4089        if(videomodechoicesdev == NULL)
4090        {
4091                err("NULL detect");
4092                return NULL;
4093        }
4094
4095        value = readsys(videomodechoicesdev, 1);
4096        if(value == NULL)
4097        {
4098                err("NULL detect");
4099                return NULL;
4100        }
4101
4102        value = string_replace("pal", NULL, value, 1);
4103        value = string_replace("  ", " ", value, 1);
4104
4105        if(status.mcaktiv == 0)
4106        {
4107                value = string_replace("1080p60", NULL, value, 1);
4108                value = string_replace("  ", " ", value, 1);
4109                value = string_replace("1080p59", NULL, value, 1);
4110                value = string_replace("  ", " ", value, 1);
4111                value = string_replace("1080p30", NULL, value, 1);
4112                value = string_replace("  ", " ", value, 1);
4113                value = string_replace("1080p29", NULL, value, 1);
4114                value = string_replace("  ", " ", value, 1);
4115                value = string_replace("1080p25", NULL, value, 1);
4116                value = string_replace("  ", " ", value, 1);
4117                value = string_replace("1080p24", NULL, value, 1);
4118                value = string_replace("  ", " ", value, 1);
4119                value = string_replace("1080p23", NULL, value, 1);
4120                value = string_replace("  ", " ", value, 1);
4121                value = string_replace("1080i60", NULL, value, 1);
4122                value = string_replace("  ", " ", value, 1);
4123                value = string_replace("1080i59", NULL, value, 1);
4124                value = string_replace("  ", " ", value, 1);
4125                value = string_replace("1080i60", NULL, value, 1);
4126                value = string_replace("  ", " ", value, 1);
4127                value = string_replace("720p60", NULL, value, 1);
4128                value = string_replace("  ", " ", value, 1);
4129                value = string_replace("576p50", NULL, value, 1);
4130                value = string_replace("  ", " ", value, 1);
4131                value = string_replace("1280x1024_75", NULL, value, 1);
4132                value = string_replace("  ", " ", value, 1);
4133                value = string_replace("1280x1024_70", NULL, value, 1);
4134                value = string_replace("  ", " ", value, 1);
4135                value = string_replace("1280x1024_60", NULL, value, 1);
4136                value = string_replace("  ", " ", value, 1);
4137                value = string_replace("1600x1200_60", NULL, value, 1);
4138                value = string_replace("  ", " ", value, 1);
4139                value = string_replace("1024x768_100", NULL, value, 1);
4140                value = string_replace("  ", " ", value, 1);
4141                value = string_replace("1024x768_90", NULL, value, 1);
4142                value = string_replace("  ", " ", value, 1);
4143                value = string_replace("1024x768_75", NULL, value, 1);
4144                value = string_replace("  ", " ", value, 1);
4145                value = string_replace("1024x768_70", NULL, value, 1);
4146                value = string_replace("  ", " ", value, 1);
4147                value = string_replace("1024x768_60", NULL, value, 1);
4148                value = string_replace("  ", " ", value, 1);
4149        }
4150
4151        value = strstrip(value);
4152        value = convertspacetolf(value);
4153
4154        return value;
4155}
4156
4157char* getmode3dchoices()
4158{
4159        char *mode3dchoicesdev = NULL;
4160        char *value = NULL;
4161
4162        mode3dchoicesdev = getconfig("mode3dchoicesdev", NULL);
4163
4164        if(mode3dchoicesdev == NULL)
4165        {
4166                return ostrcat("off\nsbs\ntab", "", 0, 0);
4167        }
4168
4169        value = readsys(mode3dchoicesdev, 1);
4170        if(value == NULL)
4171        {
4172                err("NULL detect");
4173                return NULL;
4174        }
4175
4176        value = convertspacetolf(value);
4177
4178        return value;
4179}
4180
4181char* getmode3d()
4182{
4183        char *mode3ddev = NULL;
4184        char *value = NULL;
4185
4186        mode3ddev = getconfig("mode3ddev", NULL);
4187
4188        if(mode3ddev == NULL)
4189        {
4190                err("NULL detect");
4191                return NULL;
4192        }
4193
4194        value = readsys(mode3ddev, 1);
4195        if(value == NULL)
4196        {
4197                err("NULL detect");
4198                return NULL;
4199        }
4200
4201        return value;
4202}
4203
4204int setmode3d(char* value)
4205{
4206        char* mode3ddev;
4207        int ret = 0;
4208
4209        mode3ddev = getconfig("mode3ddev", NULL);
4210
4211        if(mode3ddev != NULL && value != NULL)
4212        {
4213                debug(100, "set %s to %s", mode3ddev, value);
4214                ret = writesys(mode3ddev, value, 0);
4215                if(ret == 0) addconfig("av_mode3d", value);
4216                return ret;
4217        }
4218
4219        return 0;
4220}
4221
4222char* getvideomode()
4223{
4224        char *videomodedev = NULL;
4225        char *value = NULL;
4226
4227        videomodedev = getconfig("videomodedev", NULL);
4228
4229        if(videomodedev == NULL)
4230        {
4231                err("NULL detect");
4232                return NULL;
4233        }
4234
4235        value = readsys(videomodedev, 1);
4236        if(value == NULL)
4237        {
4238                err("NULL detect");
4239                return NULL;
4240        }
4241
4242        return value;
4243}
4244
4245void switchvideomode()
4246{
4247        int rcret = 0;
4248        char* tmpstr = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL;
4249        tmpstr = getvideomode();       
4250        struct skin* playpolicy = getscreen("playpolicy");
4251        tmpstr2 = getcolorformat(2);
4252               
4253        if(tmpstr != NULL)
4254        {
4255                if((ostrcmp("pal", tmpstr) == 0 || ostrncmp("576", tmpstr, 3) == 0) && ostrncmp("yuv", tmpstr2, 3) == 0)
4256                {
4257                        setvideomode("720p50", 0);
4258                        changefbresolution("720p50", 0);
4259                        changetext(playpolicy, "720p50 (rgb)");
4260                        writevfdmenu("720p50 (rgb)");
4261                        setcolorformat("rgb", 1);
4262                        unlink("/var/etc/.scart");
4263                }
4264                else if((ostrcmp("pal", tmpstr) == 0 || ostrncmp("576", tmpstr, 3) == 0) && ostrncmp("rgb", tmpstr2, 3) == 0)
4265                {
4266                        setvideomode("720p50", 0);
4267                        changefbresolution("720p50", 0);
4268                        changetext(playpolicy, "720p50 (yuv)");
4269                        writevfdmenu("720p50 (yuv)");
4270                        setcolorformat("yuv", 1);
4271                        unlink("/var/etc/.scart");
4272                }
4273                else if(ostrncmp("720", tmpstr, 3) == 0)
4274                {
4275                        setvideomode("1080i50", 0);
4276                        changefbresolution("1080i50", 0);
4277                        tmpstr3 = ostrcat("1080i50 (", tmpstr2, 0, 0);
4278                        tmpstr3 = ostrcat(tmpstr3, ")", 1, 0);
4279                        changetext(playpolicy, tmpstr3);
4280                        writevfdmenu(tmpstr3);
4281                        unlink("/var/etc/.scart");                     
4282                }
4283                else if(ostrncmp("1080", tmpstr, 4) == 0)
4284                {
4285                        setvideomode("576i50", 0);
4286                        changefbresolution("576i50", 0);
4287                        changetext(playpolicy, "576i50 (rgb)");
4288                        writevfdmenu("576i50 (rgb)");
4289                        setcolorformat("rgb", 1);
4290                        writesys("/var/etc/.scart", "0", 0);
4291                }
4292                /*
4293                int ret = textbox(_("Message"), _("Is this Videomode ok ?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
4294                if(ret == 1 || ret == 2)
4295                {
4296                        setvideomode(tmpstr, 0);
4297                        changefbresolution(tmpstr, 0);
4298                }
4299                */
4300                drawscreen(playpolicy, 0, 0);
4301                while(1)
4302                {
4303                        rcret = waitrc(playpolicy, 5000, 0);
4304                        break;
4305                }
4306                clearscreen(playpolicy);
4307        }
4308        free(tmpstr);
4309        free(tmpstr2);
4310        free(tmpstr3);
4311}
4312
4313//flag 0: write videomode to config
4314//flag 1: don't write videomode to config
4315int setvideomode(char* value, int flag)
4316{
4317        char* videomodedev;
4318        int ret = 0;
4319
4320        videomodedev = getconfig("videomodedev", NULL);
4321
4322        if(videomodedev != NULL && value != NULL)
4323        {
4324                debug(100, "set %s to %s", videomodedev, value);
4325                ret = writesys(videomodedev, value, 0);
4326                if(ret == 0 && flag == 0) addconfig("av_videomode", value);
4327                return ret;
4328        }
4329
4330        return 0;
4331}
4332
4333//flag 0 = hdmi
4334//flag 1 = scart
4335int setcolorformat(char* value, int flag)
4336{
4337        char* colorformatdev;
4338        int ret = 0;
4339
4340        colorformatdev = getconfig("colorformatdev", NULL);
4341
4342        if(colorformatdev != NULL && value != NULL)
4343        {
4344                debug(100, "set %s to %s", colorformatdev, value);
4345                ret = writesys(colorformatdev, value, 0);
4346                if(ret == 0)
4347                {
4348                        if(flag == 0)
4349                                addconfig("av_colorformat", value);
4350                        else
4351                                addconfig("av_colorformatscart", value);
4352                }
4353                return ret;
4354        }
4355
4356        return 0;
4357}
4358
4359char* getcolorformat(int line)
4360{
4361        char *colorformatdev = NULL;
4362        char *value = NULL;
4363
4364        colorformatdev = getconfig("colorformatdev", NULL);
4365
4366        if(colorformatdev == NULL)
4367        {
4368                err("NULL detect");
4369                return NULL;
4370        }
4371
4372        value = readsys(colorformatdev, line);
4373        if(value == NULL)
4374        {
4375                err("NULL detect");
4376                return NULL;
4377        }
4378
4379        return value;
4380}
4381
4382int setaudiosource(char* value)
4383{
4384        char* audiosourcedev;
4385        int ret = 1;
4386
4387        audiosourcedev = getconfig("audiosourcedev", NULL);
4388
4389        if(audiosourcedev != NULL && value != NULL)
4390        {
4391                debug(100, "set %s to %s", audiosourcedev, value);
4392                ret = writesys(audiosourcedev, value, 0);
4393                if(ret == 0) addconfig("av_audiosource", value);
4394                return ret;
4395        }
4396
4397        return 0;
4398}
4399
4400char* getaudiosource()
4401{
4402        char *audiosourcedev = NULL;
4403        char *value = NULL;
4404
4405        audiosourcedev = getconfig("audiosourcedev", NULL);
4406
4407        if(audiosourcedev == NULL)
4408        {
4409                err("NULL detect");
4410                return NULL;
4411        }
4412
4413        value = readsys(audiosourcedev, 1);
4414        if(value == NULL)
4415        {
4416                err("NULL detect");
4417                return NULL;
4418        }
4419
4420        return value;
4421}
4422
4423char* getsataswitch()
4424{
4425        char *sataswitchdev = NULL;
4426        char *value = NULL;
4427
4428        sataswitchdev = getconfig("sataswitchdev", NULL);
4429
4430        if(sataswitchdev == NULL)
4431        {
4432                err("NULL detect");
4433                return NULL;
4434        }
4435
4436        value = readsys(sataswitchdev, 1);
4437        if(value == NULL)
4438        {
4439                err("NULL detect");
4440                return NULL;
4441        }
4442
4443        return value;
4444}
4445
4446int setsataswitch(char* value)
4447{
4448        char* sataswitchdev;
4449        int ret = 1;
4450
4451        sataswitchdev = getconfig("sataswitchdev", NULL);
4452
4453        if(sataswitchdev != NULL && value != NULL)
4454        {
4455                debug(100, "set %s to %s", sataswitchdev, value);
4456                ret = writesys(sataswitchdev, value, 0);
4457                return ret;
4458        }
4459
4460        return 0;
4461}
4462
4463int setprogress(value)
4464{
4465        char *progressdev;
4466
4467        progressdev = getconfig("progressdev", NULL);
4468
4469        if(progressdev != NULL)
4470        {
4471                debug(100, "set %s to %d",progressdev, value);
4472                return writesysint(progressdev, value, 0);
4473        }
4474
4475        return 0;
4476}
4477
4478int setmute(int value)
4479{
4480        char* mutedev;
4481        int tmpvol, ret = 0;
4482
4483        //don't set mute 2x
4484        if(value == 1 && status.mute == 1) return 0;
4485
4486//      printf("mute value: %d\n", value);
4487
4488        if(value == 2)
4489        {
4490                tmpvol = getvol();
4491                tmpvol = tmpvol * 50 / 100;
4492                status.mute = value;
4493                setvol(tmpvol);
4494        }
4495        else
4496        {
4497                mutedev = getconfig("mutedev", NULL);
4498
4499                if(mutedev != NULL)
4500                {
4501                        debug(100, "set %s to %d", mutedev, value);
4502                        //if(status.volautochangevalue != 0 && value == 0) setvol(getvol());
4503#ifdef MIPSEL
4504                        struct dvbdev *audionode = NULL;
4505                        int openaudio = 0;
4506                        if(status.aktservice != NULL)
4507                        {
4508                                if(status.aktservice->audiodev == NULL)
4509                                {
4510                                        audionode = audioopen(0); //we must open the audio device for set mute in external player
4511                                        openaudio = 1;
4512                                }
4513                                else
4514                                        audionode = status.aktservice->audiodev;
4515                        }
4516                        ret = audiosetmute(audionode, value);
4517                        if(openaudio == 1)
4518                                audioclose(audionode, -1);
4519#else
4520                        ret = writesysint(mutedev, value, 0);
4521#endif
4522               
4523                        if(ret == 0) status.mute = value;
4524                        if(status.volautochangevalue != 0 && value == 0) setvol(getvol());
4525//                      if(value == 1)
4526//                      {
4527//                              printf("mute\n");
4528//                              system("amixer -c 1 set HDMI mute &");
4529//                              system("amixer -c 1 set Analog mute &");
4530//                              system("amixer -c 1 set SPDIF mute &");
4531//                              sleep(1);
4532//                      }
4533//                      else
4534//                      {
4535//                              printf("unmute\n");
4536//                              system("amixer -c 1 set HDMI unmute &");
4537//                              system("amixer -c 1 set Analog unmute &");
4538//                              system("amixer -c 1 set SPDIF unmute &");
4539//                      }
4540
4541                        return ret;
4542                }
4543        }
4544        return 0;
4545}
4546
4547int setvol(int value)
4548{
4549        char* voldev;
4550        int ret = 0, tmpvol = value;
4551
4552        voldev = getconfig("voldev", NULL);
4553       
4554        if(voldev != NULL)
4555        {
4556                if(value > 100) value = 100;
4557                if(value < 0) value = 0;
4558                if(status.volautochangevalue != 0 && value != 0)
4559                {
4560                        if(status.volautochange == 0)
4561                                value = value - (status.volautochangevalue * value / 100);
4562                }
4563                value = 63 - value * 63 / 100;
4564                debug(100, "set %s to %d", voldev, value);
4565                ret = 0;
4566                if(status.mute == 1)
4567                        status.volmute = value;
4568                else
4569                {
4570                        status.volmute = -1;
4571                        ret = writesysint(voldev, value, 0);
4572
4573#ifdef MIPSEL
4574                        struct dvbdev *audionode = NULL;
4575                        int openaudio = 0;
4576       
4577                        if(ret == 0 && status.aktservice != NULL)
4578                        {
4579                                if(status.aktservice->audiodev == NULL)
4580                                {
4581                                        audionode = audioopen(0); //we must open the audio device for change volume in external player
4582                                        openaudio = 1;
4583                                }
4584                                else
4585                                        audionode = status.aktservice->audiodev;
4586               
4587                                if(ret == 0 && audionode != NULL)
4588                                        ret = setmixer(audionode, value, value);
4589                               
4590                                if(openaudio == 1)
4591                                        audioclose(audionode, -1);
4592                        }
4593#else
4594                        if(ret == 0 && status.aktservice != NULL)
4595                                ret = setmixer(status.aktservice->audiodev, value, value);
4596#endif
4597                }
4598                if(ret == 0 && status.mute != 2) addconfigint("vol", tmpvol);
4599                return ret;
4600        }
4601
4602        return 0;
4603}
4604
4605int getvol()
4606{
4607        char *voldev = NULL;
4608        char *value = NULL;
4609        int tmpvol = -1;
4610
4611        voldev = getconfig("voldev", NULL);
4612
4613        if(voldev == NULL)
4614        {
4615                err("NULL detect");
4616                return 0;
4617        }
4618        if(status.volmute == -1)
4619                value = readsys(voldev, 1);
4620        else
4621                tmpvol = status.volmute;
4622        if(value == NULL && tmpvol == -1)
4623        {
4624                err("NULL detect");
4625                return 0;
4626        }
4627        if(status.volmute == -1)
4628                tmpvol = atoi(value);
4629        free(value);
4630        tmpvol = 100 - tmpvol * 100 / 63;
4631        if(status.volautochangevalue != 0)
4632        {
4633                if(status.volautochange == 0 && status.volautochangevalue < 100)
4634                        tmpvol = tmpvol + ((tmpvol * status.volautochangevalue) / (100 - status.volautochangevalue));
4635        }
4636        return tmpvol;
4637}
4638
4639void setdebuglevel()
4640{
4641        debug_level = getconfigint("debuglevel", NULL);
4642        debug(0, "set debug level to %d", debug_level);
4643}
4644
4645char* getxmlentry(char *line, char *searchstr)
4646{
4647        char *buf = NULL, *buf1 = NULL, *buf2 = NULL;
4648
4649        buf = ostrstr(line, searchstr);
4650        if(buf == NULL)
4651                return NULL;
4652
4653        buf = buf + strlen(searchstr);
4654        if(buf[0] == '"')
4655        {
4656                buf = buf + 1;
4657                buf2 = strchr(buf, '"');
4658                if(buf2 == NULL)
4659                {
4660                        err("strchr returns NULL");
4661                        return NULL;
4662                }
4663                buf1 = strndup(buf, buf2 - buf);
4664                if(buf1 == NULL)
4665                {
4666                        err("strndup failed");
4667                        return NULL;
4668                }
4669        }
4670        else
4671        {
4672                buf2 = strchr(buf, ' ');
4673                if(buf2 == NULL)
4674                {
4675                        buf2 = ostrstr(buf, "/>");
4676                        if(buf2 == NULL)
4677                        {
4678                                buf2 = strchr(buf, '>');
4679                                if(buf2 == NULL)
4680                                {
4681                                        err("strchr returns NULL");
4682                                        return NULL;
4683                                }
4684                        }
4685                }
4686                buf1 = strndup(buf, buf2 - buf);
4687                if(buf1 == NULL)
4688                {
4689                        err("strndup failed");
4690                        return NULL;
4691                }
4692        }
4693
4694        return buf1;
4695}
4696
4697char* readbintomem(const char* filename, size_t size)
4698{
4699        FILE *fd = NULL;
4700        char *fileline = NULL;
4701
4702        fileline = calloc(1, size + 1);
4703        if(fileline == NULL)
4704        {
4705                err("no mem");
4706                return NULL;
4707        }
4708
4709        fd = fopen(filename, "rb");
4710        if(fd == NULL)
4711        {
4712                perr("can't open %s", filename);
4713                free(fileline);
4714                return NULL;
4715        }
4716
4717        fread(fileline, size, 1, fd);
4718
4719        fclose(fd);
4720        return fileline;
4721}
4722
4723char* readfiletomem(const char* filename, int flag)
4724{
4725        FILE *fd = NULL;
4726        char *fileline = NULL, *buf = NULL, *tmpbuf = NULL;
4727        int bufsize = 0, bufoldsize = 0;
4728
4729        fileline = malloc(MINMALLOC);
4730        if(fileline == NULL)
4731        {
4732                err("no mem");
4733                return NULL;
4734        }
4735
4736        fd = fopen(filename, "r");
4737        if(fd == NULL)
4738        {
4739                perr("can't open %s", filename);
4740                free(fileline);
4741                return NULL;
4742        }
4743
4744        while(fgets(fileline, MINMALLOC, fd) != NULL)
4745        {
4746                if(flag == 1)
4747                        if(fileline[0] == '#' || fileline[0] == '\n')
4748                                continue;
4749
4750                bufoldsize = bufsize;
4751                bufsize += strlen(fileline);
4752                tmpbuf = buf;   buf = realloc(buf, bufsize + 1);
4753                if(buf == NULL)
4754                {
4755                        err("no mem");
4756                        free(fileline);
4757                        free(tmpbuf);
4758                        fclose(fd);
4759                        return NULL;
4760                }
4761
4762                sprintf(buf + bufoldsize, "%s", fileline);
4763        }
4764
4765        free(fileline);
4766        fclose(fd);
4767        return buf;
4768}
4769
4770char* readeittomem(const char* filename)
4771{
4772        unsigned char byte;
4773        FILE *fil = NULL;
4774        char *zeichen = NULL, *buf = NULL, *buf1 = NULL, *tmpbuf1 = NULL;
4775        int buf1size = 0, buf1oldsize = 0;
4776        int Beschreibung;
4777        int len;
4778
4779        zeichen = malloc(255);
4780        if(zeichen == NULL)
4781        {
4782                err("no mem");
4783                return NULL;
4784        }
4785        buf = malloc(255);
4786        if(buf == NULL)
4787        {
4788                free(zeichen);
4789                err("no mem");
4790                return NULL;
4791        }
4792
4793        fil = fopen(filename, "r");
4794        if(fil == NULL)
4795        {
4796                err("can't open %s", filename);
4797                free(zeichen);
4798                free(buf);
4799                return NULL;
4800        }
4801        Beschreibung = 0;
4802        fseek(fil, 12, SEEK_SET); //ersten 12 Byte nicht relevant
4803        while(!feof(fil))
4804        {
4805                byte = fgetc(fil);
4806
4807                if(byte == 0x4D)
4808                {
4809                        fseek(fil, 4,SEEK_CUR);
4810                        byte = fgetc(fil);
4811                        len = byte + 0;
4812                        byte = fgetc(fil);
4813                        fgets(zeichen, len, fil);
4814                        if(byte != 0x05)
4815                                sprintf(buf, "%c%s\n", byte, zeichen);
4816                        else
4817                                sprintf(buf, "%s\n", zeichen);
4818
4819                        buf1oldsize = buf1size;
4820                        buf1size += strlen(buf);
4821                        tmpbuf1 = buf1; buf1 = realloc(buf1, buf1size + 1);
4822                        if(buf1 == NULL)
4823                        {
4824                                err("no mem");
4825                                free(zeichen);
4826                                free(buf);
4827                                free(tmpbuf1);
4828                                fclose(fil);
4829                                return NULL;
4830                        }
4831                        sprintf(buf1 + buf1oldsize, "%s", buf);
4832
4833                        //printf("T %s\n", zeichen);
4834                        byte = fgetc(fil);
4835                        len = byte + 0;
4836                        byte = fgetc(fil);
4837                        fgets(zeichen, len, fil);
4838                        if(byte != 0x05)
4839                                sprintf(buf,"%c%s\n\n", byte, zeichen);
4840                        else
4841                                sprintf(buf,"%s\n\n", zeichen);
4842                               
4843                        buf1oldsize = buf1size;
4844                        buf1size += strlen(buf);
4845                        tmpbuf1 = buf1; buf1 = realloc(buf1, buf1size + 1);
4846                        if(buf1 == NULL)
4847                        {
4848                                err("no mem");
4849                                free(zeichen);
4850                                free(buf);
4851                                free(tmpbuf1);
4852                                fclose(fil);
4853                                return NULL;
4854                        }
4855                        sprintf(buf1 + buf1oldsize, "%s", buf);
4856
4857                }
4858                else if(byte == 0x4E)
4859                {
4860                        fseek(fil, 6, SEEK_CUR);
4861                        byte = fgetc(fil);
4862                        len = byte;
4863                        byte = fgetc(fil);
4864                        fgets(zeichen, len, fil);
4865                        if(Beschreibung == 0)
4866                        {
4867                                if(byte != 0x05)
4868                                        sprintf(buf, "%c%s", byte, zeichen);
4869                                else
4870                                        sprintf(buf, "%s", zeichen);
4871                                Beschreibung = 1;
4872                        }
4873                        else
4874                        {
4875                                if(byte != 0x05)
4876                                        sprintf(buf, "%c%s", byte, zeichen);
4877                                else
4878                                        sprintf(buf, "%s", zeichen);
4879                        }       
4880
4881                        buf1oldsize = buf1size;
4882                        buf1size += strlen(buf);
4883                        tmpbuf1 = buf1; buf1 = realloc(buf1, buf1size + 1);
4884                        if(buf1 == NULL)
4885                        {
4886                                err("no mem");
4887                                free(zeichen);
4888                                free(buf);
4889                                free(tmpbuf1);
4890                                fclose(fil);
4891                                return NULL;
4892                        }
4893                        sprintf(buf1 + buf1oldsize, "%s", buf);     
4894
4895                }
4896                else
4897                {
4898                        byte = fgetc(fil);
4899                        len= byte;
4900                        fgets(zeichen, len + 1, fil);
4901                } 
4902        }
4903        free(zeichen);
4904        free(buf);
4905        fclose(fil);
4906        return buf1;
4907}
4908
4909char* command(char* input)
4910{
4911        int maxlen = 0, pos = 0;
4912        char* tmpstr = NULL, *fileline = NULL;
4913        FILE *iopipe = NULL;
4914       
4915        if(input == NULL) return NULL;
4916
4917        fileline = malloc(MINMALLOC);
4918        if(fileline == NULL)
4919        {
4920                err("no mem");
4921                return NULL;
4922        }
4923
4924        if((iopipe = popen(input, "r")) == NULL)
4925        {
4926                free(fileline);
4927                return NULL;
4928        }
4929
4930        while(!feof(iopipe))
4931        {
4932                if(fgets(fileline, MINMALLOC, iopipe) != NULL)
4933                        ostrcatbig(&tmpstr, fileline, &maxlen, &pos);
4934        }
4935       
4936        if(pos > 0)
4937        {
4938                char* tmp = tmpstr;
4939                tmpstr = realloc(tmpstr, pos + 1);
4940                if(tmpstr == NULL)
4941                        tmpstr = tmp;
4942        }
4943
4944        free(fileline);
4945        pclose(iopipe);
4946        return tmpstr;
4947}
4948
4949char* string_tolower(char *str)
4950{
4951/*
4952        char *p1 = str;
4953
4954        if(str == NULL) return NULL;
4955
4956        while(*p1 != '\0')
4957                *p1++ = tolower(*p1);
4958       
4959        return str;
4960*/
4961        if(str == NULL) return NULL;
4962
4963        int i=0;
4964        while (str[i])
4965        {
4966                str[i] = tolower(str[i]);
4967                i++;
4968        }
4969        return str;
4970}
4971
4972char* string_toupper(char *str)
4973{
4974/*
4975        char *p1 = str;
4976
4977        if(str == NULL) return NULL;
4978
4979        while(*p1 != '\0')
4980                *p1++ = toupper(*p1);
4981       
4982*/
4983        if(str == NULL) return NULL;
4984
4985        int i=0;
4986        while (str[i])
4987        {
4988                str[i] = toupper(str[i]);
4989                i++;
4990        }
4991        return str;
4992}
4993
4994char* stringreplacecharonce(char *str, char c1, char c2)
4995{
4996        char *p1 = str;
4997
4998        if(str == NULL) return NULL;
4999
5000        while(*p1 != '\0')
5001        {
5002                if(*p1 == c1)
5003                {
5004                        *p1 = c2;
5005                        break;                 
5006                }                       
5007                p1++;
5008        }
5009
5010        return str;
5011}
5012
5013char* stringreplacechar(char *str, char c1, char c2)
5014{
5015        char *p1 = str;
5016
5017        if(str == NULL) return NULL;
5018
5019        while(*p1 != '\0')
5020        {
5021                if(*p1 == c1) *p1 = c2;
5022                p1++;
5023        }
5024
5025        return str;
5026}
5027
5028
5029char* string_removechar(char *str)
5030{
5031        char *p1 = str;
5032
5033        if(str == NULL) return NULL;
5034
5035        while(*p1 != '\0')
5036        {
5037                if(*p1 == '.') *p1 = ' ';
5038                else if(*p1 == '-') *p1 = ' ';
5039                else if(*p1 == '_') *p1 = ' ';
5040                else if(*p1 == '/') *p1 = ' ';
5041                p1++;
5042        }
5043
5044        return str;
5045}
5046
5047char* string_withchars2return(char *str)
5048{
5049        char *p1 = str;
5050
5051        if(str == NULL) return NULL;
5052
5053        while(*p1 != '\0')
5054        {
5055                if(*p1 == ' ') *p1 = '\n';
5056                p1++;
5057        }
5058
5059        return str;
5060}
5061
5062char* string_remove_whitechars(char *text)
5063{
5064        char *p1 = text, *p2 = text;
5065
5066        if(text == NULL) return NULL;
5067
5068        while(*p1 != '\0')
5069        {
5070                if(*p1 == ' ')
5071                        ++p1;
5072                else
5073                        *p2++ = *p1++;
5074        }
5075        *p2 = '\0';
5076
5077        return text;
5078}
5079
5080char* strstrip(char *text)
5081{
5082        char* tmpstr = text;
5083
5084        if(text == NULL) return NULL;
5085        int len = strlen(text);
5086
5087        while(isspace(tmpstr[len - 1])) tmpstr[--len] = '\0';
5088        while(*tmpstr && isspace(*tmpstr)) ++tmpstr, --len;
5089
5090        if(text != tmpstr) memmove(text, tmpstr, len + 1);
5091
5092        return text;
5093}
5094
5095char* string_strip_whitechars(char *text)
5096{
5097        char *p1 = text, *p2 = text;
5098
5099        if(text == NULL)
5100                return NULL;
5101
5102        while(*p1 != '\0')
5103        {
5104                if(*p1 == ' ' && *(p1 + 1) == ' ')
5105                        ++p1;
5106                else
5107                        *p2++ = *p1++;
5108        }
5109        *p2 = '\0';
5110
5111        return text;
5112}
5113
5114char* string_replace_all(char *search, char *replace, char *string, int free1)
5115{
5116        char* tmpstr = NULL;
5117        char* searchpos = NULL;
5118
5119        if(string == NULL || search == NULL)
5120        {
5121                tmpstr = ostrcat(tmpstr, string, 1, 0);
5122                if(free1 == 1) free(string);
5123                return tmpstr;
5124        }
5125
5126        searchpos = strstr(string, search);
5127        if(searchpos == NULL)
5128        {
5129                tmpstr = ostrcat(tmpstr, string, 1, 0);
5130                if(free1 == 1) free(string);
5131                return tmpstr;
5132        }
5133
5134        int count = 0;
5135        int stringlen = strlen(string);
5136        int searchlen = strlen(search);
5137        int replacelen = strlen(replace);
5138
5139        while(searchpos != NULL)
5140        {
5141                count++;
5142                searchpos = strstr(searchpos + searchlen, search);
5143        }
5144
5145        int len = stringlen - (searchlen * count) + (replacelen * count);
5146        tmpstr = calloc(1, len + 1);
5147        if(tmpstr == NULL)
5148        {
5149                err("no mem");
5150                tmpstr = ostrcat(tmpstr, string, 1, 0);
5151                if(free1 == 1) free(string);
5152                return tmpstr;
5153        }
5154
5155        len = 0;       
5156        char* str = string;
5157        char* tmp = tmpstr;
5158        searchpos = strstr(str, search);
5159        while(searchpos != NULL)
5160        {
5161                len = searchpos - str;
5162                memcpy(tmp, str, len);
5163                memcpy(tmp + len, replace, replacelen);
5164                tmp += len + replacelen;
5165                str += len + searchlen;
5166                searchpos = strstr(str, search);
5167        }
5168        memcpy(tmp, str, strlen(str));
5169
5170        if(free1 == 1) free(string);
5171
5172        return tmpstr;
5173}
5174
5175char* string_replace_remove_last_chars(char *search, char *replace, char *string, int free1)
5176{
5177        char* searchpos = NULL;
5178        char* tmpstr = NULL;
5179
5180        if(string == NULL || search == NULL)
5181        {
5182                tmpstr = ostrcat(tmpstr, string, 1, 0);
5183                if(free1 == 1) free(string);
5184                return tmpstr;
5185        }
5186
5187        searchpos = ostrstr(string, search);
5188
5189        if(searchpos == NULL)
5190        {
5191                tmpstr = ostrcat(tmpstr, string, 1, 0);
5192                if(free1 == 1) free(string);
5193                return tmpstr;
5194        }
5195
5196        tmpstr = strndup(string, searchpos - string);
5197        if(replace != NULL)
5198                tmpstr = ostrcat(tmpstr, replace, 1, 0);
5199
5200        if(free1 == 1) free(string);
5201
5202        return tmpstr;
5203}
5204
5205char* string_replace(char *search, char *replace, char *string, int free1)
5206{
5207        char* searchpos = NULL;
5208        char* tmpstr = NULL;
5209
5210        if(string == NULL || search == NULL)
5211        {
5212                tmpstr = ostrcat(tmpstr, string, 1, 0);
5213                if(free1 == 1) free(string);
5214                return tmpstr;
5215        }
5216
5217        searchpos = ostrstr(string, search);
5218
5219        if(searchpos == NULL)
5220        {
5221                tmpstr = ostrcat(tmpstr, string, 1, 0);
5222                if(free1 == 1) free(string);
5223                return tmpstr;
5224        }
5225
5226        tmpstr = strndup(string, searchpos - string);
5227        if(replace != NULL)
5228                tmpstr = ostrcat(tmpstr, replace, 1, 0);
5229        tmpstr = ostrcat(tmpstr, string + (searchpos - string) + strlen(search), 1, 0);
5230
5231        if(free1 == 1) free(string);
5232
5233        return tmpstr;
5234}
5235
5236//flag 0: search full str
5237//flag 1: search only end of string
5238char* ostrrstrcase(char* str, char* search, int len, int flag)
5239{
5240        int slen = 0;
5241        char* tmpstr = NULL;
5242
5243        if(str == NULL || search == NULL) return NULL;
5244
5245        if(len == -1) len = strlen(str);
5246        slen = strlen(search);
5247        if(slen > len) return NULL;
5248
5249        for(tmpstr = str + len - slen; tmpstr >= str; tmpstr--)
5250        {
5251                if(strncasecmp(tmpstr, search, slen) == 0)
5252                        return tmpstr;
5253                if(flag == 1) return NULL;
5254        }
5255
5256        return NULL;
5257}
5258
5259//flag 0: search full str
5260//flag 1: search only end of string
5261char* ostrrstr(char* str, char* search, int len, int flag)
5262{
5263        int slen = 0;
5264        char* tmpstr = NULL;
5265
5266        if(str == NULL || search == NULL) return NULL;
5267
5268        if(len == -1) len = strlen(str);
5269        slen = strlen(search);
5270        if(slen > len) return NULL;
5271
5272        for(tmpstr = str + len - slen; tmpstr >= str; tmpstr--)
5273        {
5274                if(strncmp(tmpstr, search, slen) == 0)
5275                        return tmpstr;
5276                if(flag == 1) return NULL;
5277        }
5278
5279        return NULL;
5280}
5281
5282char* ostrstr(char* str, char* search)
5283{
5284        char* ret = NULL;
5285
5286        if(str == NULL || search == NULL) return NULL;
5287        ret = strstr(str, search);
5288
5289        return ret;
5290}
5291
5292int file_exist(char* filename)
5293{
5294        if(access(filename, F_OK) == 0)
5295                return 1;
5296        else
5297                return 0;
5298}
5299
5300char* string_newline(char* str)
5301{
5302        if(str == NULL) return NULL;
5303
5304        int size = strlen(str);
5305
5306        if(str[size - 1] == '\n')
5307                str[size - 1] = '\0';
5308
5309        return str;
5310}
5311
5312char* string_quote(char* str)
5313{
5314        char* tmpstr = NULL;
5315
5316        tmpstr = ostrcat("\"", str, 0, 0);
5317        tmpstr = ostrcat(tmpstr, "\"", 1, 0);
5318
5319        return tmpstr;
5320}
5321
5322struct splitstr* strsplit(char *str, char *tok, int* count)
5323{
5324        char *tmpstr = NULL;
5325        struct splitstr *array = NULL, *tmparray = NULL;
5326        *count = 0;
5327
5328        if(str == NULL || tok == NULL)
5329                return NULL;
5330
5331        tmpstr = strtok(str, tok);
5332        while(tmpstr != NULL)
5333        {
5334                *count = *count + 1;
5335                tmparray = array; array = (struct splitstr*)realloc(array, sizeof(struct splitstr*) * (*count));
5336                if(array == NULL)
5337                {
5338                        err("no mem");
5339                        free(tmparray);
5340                        return NULL;
5341                }
5342               
5343                (&array[(*count) - 1])->part = tmpstr;
5344                tmpstr = strtok(NULL, tok);
5345        }
5346
5347        return array;
5348}
5349
5350char* string_shortname(char *tmpfilename, int mode)
5351{
5352        debug(50, "in %s", tmpfilename);
5353
5354//      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";
5355        char* str = NULL;
5356
5357        if(mode==1)
5358        {
5359                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";
5360                str = ostrcat(str, replacelist, 1, 0);
5361        }
5362        else if(mode==2)
5363        {
5364                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";
5365                str = ostrcat(str, replacelist, 1, 0);
5366        }
5367        else
5368        {
5369                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";
5370                str = ostrcat(str, replacelist, 1, 0);
5371        }
5372
5373        char* replace = NULL;
5374        struct splitstr* ret1 = NULL;
5375        int count = 0;
5376        int i = 0;
5377        ret1 = strsplit(str, " ", &count);
5378        int max = count - 1;
5379        int first = 1;
5380
5381        for(i = 0; i < max; i++)
5382        {
5383                struct splitstr* ret2 = NULL;
5384                int count2 = 0;
5385                int j = 0;
5386                char *tmpstr = NULL;
5387                tmpstr = ostrcat(tmpstr, tmpfilename, 1, 0);
5388                ret2 = strsplit(tmpstr, " ,.-_", &count2);
5389
5390                for(j = 0; j < count2; j++)
5391                {
5392                        if(j > 0)
5393                        {                                       
5394                                if(ostrcmp((&ret1[i])->part, (&ret2[j])->part) == 0)
5395                                {
5396                                        if(mode==1)
5397                                        {
5398                                                tmpfilename = string_replace((&ret2[j])->part, replace, tmpfilename, 1);
5399                                                continue;
5400                                        }
5401                                        else if(mode==2)
5402                                        {
5403                                                tmpfilename = string_replace_remove_last_chars((&ret2[j])->part, replace, tmpfilename, 1);
5404                                                //break;
5405                                                continue;
5406                                        }
5407                                        else
5408                                        {
5409                                                tmpfilename = string_replace((&ret2[j])->part, replace, tmpfilename, 1);
5410                                                continue;
5411                                        }
5412                                }
5413                                else if(first == 1 && mode == 2)
5414                                {
5415//                                      printf("zahl: %s\n", (&ret2[j])->part);
5416                                        int theCharacter = atoi((&ret2[j])->part);
5417                                        if(theCharacter != 0)
5418                                        {
5419//                                              printf("found zahl: %s\n", (&ret2[j])->part);
5420                                                if(theCharacter > 1800 && theCharacter < 2100)
5421                                                {
5422//                                                      printf("found year: %s\n", (&ret2[j])->part);
5423                                                        tmpfilename = string_replace_remove_last_chars((&ret2[j])->part, "", tmpfilename, 1);
5424                                                        break;
5425                                                }
5426                                        }
5427                                }                               
5428                        }
5429                }
5430                free(ret2); ret2 = NULL;
5431                first = 0;
5432                free(tmpstr), tmpstr = NULL;
5433        }
5434
5435        free(ret1); ret1 = NULL;
5436        free(replace); replace = NULL;
5437        free(str); str = NULL;
5438
5439        debug(50, "out %s", tmpfilename);
5440        return tmpfilename;
5441}
5442
5443char* get_uuid(char* device)
5444{
5445        debug(60, "in %s", device);
5446        char* cmd = NULL, *tmpstr = NULL;
5447       
5448        if(device == NULL) return NULL;
5449#ifdef MIPSEL           
5450        cmd = ostrcat(cmd, "blkid -w /dev/null -c /dev/null -s UUID /dev/", 1, 0);
5451#else
5452        cmd = ostrcat(cmd, "/bin/blkid -w /dev/null -c /dev/null -s UUID /dev/", 1, 0);
5453#endif
5454        cmd = ostrcat(cmd, device, 1, 0);
5455        cmd = ostrcat(cmd, " | cut -d'\"' -f2", 1, 0);
5456
5457        tmpstr = string_newline(command(cmd));
5458
5459        if(ostrcmp(string_newline(tmpstr), "") == 0)
5460        {
5461                free(tmpstr); tmpstr = NULL;
5462        }
5463
5464        debug(60, "out %s", cmd);
5465        free(cmd); cmd = NULL;
5466        return tmpstr;
5467}
5468
5469char* get_label(char* device)
5470{
5471        debug(60, "in %s", device);
5472        char* cmd = NULL, *tmpstr = NULL;
5473
5474        if(device == NULL) return NULL;
5475#ifdef MIPSEL
5476        cmd = ostrcat(cmd, "blkid -w /dev/null -c /dev/null -s LABEL /dev/", 1, 0);
5477#else
5478        cmd = ostrcat(cmd, "/bin/blkid -w /dev/null -c /dev/null -s LABEL /dev/", 1, 0);
5479#endif 
5480        cmd = ostrcat(cmd, device, 1, 0);
5481        cmd = ostrcat(cmd, " | cut -d'\"' -f2", 1, 0);
5482
5483        tmpstr = string_newline(command(cmd));
5484
5485        if(tmpstr == NULL)
5486                tmpstr = ostrcat(tmpstr, "NONLABEL", 1, 0);
5487
5488        if(ostrcmp(string_newline(tmpstr), "") == 0)
5489                tmpstr = ostrcat(tmpstr, "NONLABEL", 1, 0);
5490
5491        debug(60, "out %s", cmd);
5492        free(cmd); cmd = NULL;
5493        return tmpstr;
5494}
5495
5496char* get_filesystem(char* device)
5497{
5498        debug(60, "in %s", device);
5499        char* cmd = NULL, *tmpstr = NULL;
5500
5501        if(device == NULL) return NULL;
5502#ifdef MIPSEL
5503        cmd = ostrcat(cmd, "blkid -w /dev/null -c /dev/null -s TYPE /dev/", 1, 0);
5504#else
5505        cmd = ostrcat(cmd, "/bin/blkid -w /dev/null -c /dev/null -s TYPE /dev/", 1, 0);
5506#endif
5507        cmd = ostrcat(cmd, device, 1, 0);
5508        cmd = ostrcat(cmd, " | cut -d'\"' -f2", 1, 0);
5509
5510        tmpstr = string_newline(command(cmd));
5511
5512        if(tmpstr == NULL)
5513                tmpstr = ostrcat(tmpstr, "NONTYPE", 1, 0);
5514
5515        if(ostrcmp(string_newline(tmpstr), "") == 0)
5516                tmpstr = ostrcat(tmpstr, "NONTYPE", 1, 0);
5517
5518        debug(60, "out %s", cmd);
5519        free(cmd); cmd = NULL;
5520        return tmpstr;
5521}
5522
5523//flag 0: convert ip to 000.000.000.000
5524//flag 1: convert ip to 0.0.0.0
5525char* fixip(char* ipinput, int flag)
5526{
5527        debug(60, "in %s", ipinput);
5528        int ret = 0;
5529        char* ipout = NULL;
5530        unsigned char ip[4];
5531       
5532        ip[0] = 0;
5533        ip[1] = 0;
5534        ip[2] = 0;
5535        ip[3] = 0;
5536
5537        if(ipinput == NULL) return NULL;
5538        ret = sscanf(ipinput, "%hhu.%hhu.%hhu.%hhu", &ip[0], &ip[1], &ip[2], &ip[3]);
5539        if(ret != 4) return NULL;
5540
5541        ipout = malloc(16);
5542        if(ipout == NULL)
5543        {
5544                err("no mem");
5545                return NULL;
5546        }
5547
5548        if(flag == 1)
5549                snprintf(ipout, 16, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
5550        else
5551                snprintf(ipout, 16, "%03d.%03d.%03d.%03d", ip[0], ip[1], ip[2], ip[3]);
5552
5553        return ipout;
5554}
5555
5556void setfanspeed(int speed, int aktion)
5557{
5558        char* speedWert = NULL;
5559        char* speedSet = NULL;
5560        int base = 0;
5561
5562        if(checkbox("UFS922") == 1)
5563                base = 100;
5564        else
5565                base = -15;
5566               
5567
5568        if(speed < 0)
5569        {
5570                if(speed == -1)
5571                        speedWert = getconfig("fanspeed", NULL);
5572                else
5573                        speedWert = getconfig("fanspeedstandby", NULL);
5574                if(speedWert == NULL)
5575                        speedSet = ostrcat(speedSet, oitoa(base + 70), 1, 1);
5576                else
5577                        speedSet = ostrcat(speedSet, speedWert, 1, 0);
5578        }
5579        else
5580        {
5581                if(speed == 0)
5582                        speedSet = ostrcat(speedSet, oitoa(base + 15), 1, 1);
5583                else if(speed == 25)
5584                        speedSet = ostrcat(speedSet, oitoa(base + 30), 1, 1);
5585                else if(speed == 50)
5586                        speedSet = ostrcat(speedSet, oitoa(base + 45), 1, 1);
5587                else if(speed == 75)
5588                        speedSet = ostrcat(speedSet, oitoa(base + 55), 1, 1);
5589                else
5590                        speedSet = ostrcat(speedSet, oitoa(base + 70), 1, 1);
5591        }
5592
5593        if(checkbox("UFS922") == 1)
5594                writesys("/proc/stb/fan/fan_ctrl", speedSet, 1);
5595        else
5596                writesys("/proc/stb/fp/fan_pwm", speedSet, 1);
5597
5598        if(aktion == 1)
5599                addconfig("fanspeed", speedSet);
5600        else if(aktion == 2)
5601                addconfig("fanspeedstandby", speedSet);
5602
5603        free(speedSet); speedSet=NULL;
5604}
5605
5606void setaktres()
5607{
5608        int m_width = 0;
5609        char* res = NULL;
5610        char* res_akt = NULL;
5611        char* res_sd = NULL;
5612        int count = 1;
5613        int sec = 0;
5614
5615        m_lock(&status.setaktresmutex, 23);
5616
5617        if(status.restimer == NULL)
5618                goto end;
5619
5620        sec = (int)status.restimer->param1;
5621
5622        if(sec > 0)
5623        {
5624                while(status.restimer->aktion == START && count <= (sec * 10))
5625                {
5626                        usleep(100000);
5627                        if(status.restimer->aktion != START)
5628                                goto end;
5629                        count++;
5630                }
5631        }
5632        if(status.restimer->aktion != START) goto end;
5633
5634        if(videoreadqwidth(status.aktservice->videodev) == 0)
5635        {
5636                if(status.restimer->aktion != START) goto end;
5637                m_width = status.videosize.w;
5638                if(m_width == 720)
5639                {
5640                        res_sd = getconfig("av_videomode_autores_sd", NULL);
5641                        if(res_sd == NULL)
5642                                res = ostrcat(res, "576i50", 1, 0);
5643                        else
5644                                res = ostrcat(res, res_sd, 1, 0);
5645                }
5646                else if (m_width == 1280)
5647                        res = ostrcat(res, "720p50", 1, 0);
5648                else if (m_width == 1920)
5649                        res = ostrcat(res, "1080i50", 1, 0);
5650                else
5651                        m_width = 0;
5652
5653                if(m_width > 0)
5654                {
5655                        if(status.restimer->aktion != START) goto end;
5656                        res_akt = getvideomode();
5657                        if(status.restimer->aktion != START) goto end;
5658                        if(ostrcmp(res_akt, res) != 0)
5659                        {
5660                                if(status.restimer->aktion != START) goto end;
5661                                setvideomode(res, 1);
5662                                changefbresolution(res, 1);
5663/*
5664                                if(status.restimer->aktion != START) goto end;
5665
5666                                count = 0;
5667                                while(status.restimer->aktion == START && count < 10)
5668                                {
5669                                        usleep(100000);
5670                                        if(status.restimer->aktion != START)
5671                                                goto end;
5672                                        count++;
5673                                }
5674
5675                                if(status.restimer->aktion != START) goto end;
5676*/
5677                                screenautores(res, 5, 0);
5678                        }
5679                }
5680        }
5681        else
5682        {
5683                if(status.restimer->aktion != START) goto end;
5684                if(status.servicetype == 0)
5685                        textbox(_("Message"), _("ERROR cant read res"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 5, 0);
5686        }
5687
5688end:
5689        free(res); res = NULL;
5690        status.restimer = NULL;
5691        m_unlock(&status.setaktresmutex, 23);
5692        return;
5693}
5694
5695char* gettimestamp()
5696{
5697        char* timestamp = NULL;
5698        struct timeval numtime;
5699               
5700        gettimeofday(&numtime, 0);
5701        timestamp = ostrcat(timestamp, olutoa(numtime.tv_sec), 1, 1);
5702        timestamp = ostrcat(timestamp, olutoa(numtime.tv_usec), 1, 1);
5703
5704        return timestamp;
5705}
5706
5707char* string_decode(char* input, int flag)
5708{
5709        if(input == NULL) return input;
5710
5711        while(ostrstr(input, "\\u00") != NULL)
5712        {
5713                debug(210, "input: %s", input);
5714                input = string_replace("\\u00", "%", input, 1);
5715                debug(210, "input: %s", input);
5716        }
5717
5718        while(ostrstr(input, "&amp;") != NULL)
5719        {
5720                debug(210, "input: %s", input);
5721                input = string_replace("&amp;", "und", input, 1);
5722                debug(210, "input: %s", input);
5723        }
5724
5725        while(ostrstr(input, "&gt;") != NULL)
5726        {
5727                debug(210, "input: %s", input);
5728                input = string_replace("&gt;", ">", input, 1);
5729                debug(210, "input: %s", input);
5730        }
5731
5732        while(ostrstr(input, "&lt;") != NULL)
5733        {
5734                debug(210, "input: %s", input);
5735                input = string_replace("&lt;", "<", input, 1);
5736                debug(210, "input: %s", input);
5737        }
5738       
5739        while(ostrstr(input, "&quot;") != NULL)
5740        {
5741                debug(210, "input: %s", input);
5742                input = string_replace("&quot;", "\"", input, 1);
5743                debug(210, "input: %s", input);
5744        }
5745
5746        while(ostrstr(input, "&#x") != NULL)
5747        {
5748                debug(210, "out %s", input);
5749                input = string_replace("&#x", "%", input, 1);
5750                debug(210, "input: %s", input);
5751        }
5752       
5753        while(ostrstr(input, "&#") != NULL)
5754        {
5755                debug(210, "input: %s", input);
5756                input = string_replace("&#", "%", input, 1);
5757                debug(210, "input: %s", input);
5758        }
5759       
5760        if(flag == 1)
5761                htmldecode2(input, input);
5762        else
5763                htmldecode(input, input);
5764                       
5765        while(ostrstr(input, ";") != NULL)
5766        {
5767                debug(210, "input: %s", input);
5768                input = string_replace(";", NULL, input, 1);
5769                debug(210, "input: %s", input);
5770        }
5771
5772        return input;
5773}
5774
5775char* string_deltags(char* str)
5776{
5777        int i = 0, y = 0, len = 0;
5778
5779        if(str == NULL) return 0;
5780
5781        len = strlen(str);
5782
5783        int skip = 0;
5784        for(i = 0; i < len; i++)
5785        {
5786                if(str[i] == '<')
5787                        skip = 1;
5788                else if(str[i] == '>')
5789                        skip = 0;
5790
5791                if(skip == 0 && str[i] != '>')
5792                {
5793                        str[y] = str[i];
5794                        y++;
5795                }
5796        }
5797        str[y] = '\0';
5798
5799        return str;
5800}
5801
5802char* string_striptags(char* str)
5803{
5804        int i = 0, len = 0;
5805
5806        if(str == NULL) return 0;
5807       
5808        len = strlen(str);
5809
5810        int skip = 0;
5811        for(i = 0; i < len; i++)
5812        {
5813                if(str[i] == '<')
5814                        skip = 1;
5815                else if(str[i] == '>')
5816                {
5817                        skip = 0;
5818                        str[i] = ' ';
5819                }
5820                if(skip == 1)
5821                        str[i] = ' ';
5822        }       
5823
5824        return strstrip(str);
5825}
5826
5827char* string_resub(char* str, char* str2, char* input, int dir)
5828{
5829        char* tmpstr = NULL, *pos = NULL, *pos2 = NULL;
5830
5831        if(str == NULL || str2 == NULL || input == NULL) return NULL;
5832
5833        if(dir == 0)
5834        {
5835                pos = ostrstr(input, str);
5836                if(pos == NULL) return NULL;
5837                pos += strlen(str);
5838
5839                pos2 = ostrstr(pos, str2);
5840                if(pos2 == NULL) return NULL;
5841        }
5842        else
5843        {
5844                pos2 = ostrstr(input, str2);
5845                if(pos2 == NULL) return NULL;
5846
5847                pos = ostrrstr(input, str, pos2 - input, 0);
5848                if(pos == NULL) return NULL;
5849                pos += strlen(str);
5850        }
5851
5852        tmpstr = strndup(pos, pos2 - pos);
5853
5854        return strstrip(tmpstr);
5855}
5856
5857char* ostrstrcase(char* str, char* sub)
5858{
5859        size_t len = 0;
5860
5861        if(str == NULL || sub == NULL) return NULL;
5862
5863        len = strlen(sub);
5864        while(*str)
5865        {
5866                if(toupper(*str) == toupper(*sub) && strncasecmp(str, sub, len) == 0)
5867                        return str;     
5868                ++str;
5869        }
5870        return NULL;
5871}
5872
5873//flag 0: convert port to 00021
5874//flag 1: convert port to 21
5875char* fixport(char* input, int flag)
5876{
5877        char* tmpstr = NULL;
5878
5879        if(flag == 0)
5880        {
5881                int plen = strlen(input);
5882                if(plen < 5)
5883                {
5884                        int i;
5885                        for(i = 0; i < 5 - plen; i++)
5886                                tmpstr = ostrcat(tmpstr, "0", 1, 0);
5887                }
5888                tmpstr = ostrcat(tmpstr, input, 1, 0);         
5889        }
5890        else
5891        {
5892                while (*input && *input == '0')
5893                input++;
5894       
5895                tmpstr = ostrcat(tmpstr, input, 1, 0);         
5896        }
5897        return tmpstr;
5898}
5899
5900//flag 0: Mon > Montag
5901//flag 1: Mon > Mon
5902char* translate_time(char* input, int flag)
5903{
5904        char* tmpstr = NULL;
5905        if(input == NULL) return tmpstr;
5906        tmpstr = ostrcat(tmpstr, input, 1, 1); 
5907
5908        if(flag == 0)
5909        {
5910                tmpstr = string_replace_all("Mon", _("Monday"), tmpstr, 1);
5911                tmpstr = string_replace_all("Tue", _("Tuesday"), tmpstr, 1);
5912                tmpstr = string_replace_all("Wed", _("Wednesday"), tmpstr, 1);
5913                tmpstr = string_replace_all("Thu", _("Thursday"), tmpstr, 1);
5914                tmpstr = string_replace_all("Fri", _("Friday"), tmpstr, 1);
5915                tmpstr = string_replace_all("Sat", _("Saturday"), tmpstr, 1);
5916                tmpstr = string_replace_all("Sun", _("Sunday"), tmpstr, 1);
5917        }
5918        else
5919        {       
5920                tmpstr = string_replace("Mon", _("Mon"), tmpstr, 1);
5921                tmpstr = string_replace("Tue", _("Tue"), tmpstr, 1);
5922                tmpstr = string_replace("Wed", _("Wed"), tmpstr, 1);
5923                tmpstr = string_replace("Thu", _("Thu"), tmpstr, 1);
5924                tmpstr = string_replace("Fri", _("Fri"), tmpstr, 1);
5925                tmpstr = string_replace("Sat", _("Sat"), tmpstr, 1);
5926                tmpstr = string_replace("Sun", _("Sun"), tmpstr, 1);
5927        }
5928
5929        return tmpstr;
5930}
5931
5932char* gethypridtunerchoices(int dev)
5933{
5934        char *hypridtunerchoices = NULL;
5935        char *value = NULL;
5936        char *tmpstr = NULL;
5937        char *tmpstr1 = NULL;
5938        char *tmpstr2 = NULL;
5939        char *tmpstr3 = NULL;
5940        char* start = NULL;
5941
5942        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
5943
5944        if(hypridtunerchoices == NULL)
5945        {
5946                err("NULL detect");
5947                return NULL;
5948        }
5949
5950        tmpstr = readfiletomem(hypridtunerchoices, 1);
5951        if(tmpstr == NULL)
5952        {
5953                err("NULL detect");
5954                return NULL;
5955        }
5956
5957        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
5958        start = ostrcat(start, ":", 1, 0);
5959
5960        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
5961        tmpstr2 = string_resub("Mode ", ":", tmpstr1, 0);
5962        tmpstr3 = oregex(".*Mode ([0-9]{1}):.*", tmpstr1);
5963
5964        if(tmpstr2 != NULL)
5965                value = ostrcat(tmpstr2, "\n", 0, 0);
5966        if(tmpstr3 != NULL)
5967                value = ostrcat(value, tmpstr3, 1, 0);
5968
5969        free(start), start = NULL;
5970        free(tmpstr), tmpstr = NULL;
5971        free(tmpstr1), tmpstr1 = NULL;
5972        free(tmpstr2), tmpstr2 = NULL;
5973        free(tmpstr3), tmpstr3 = NULL;
5974
5975        return value;
5976}
5977
5978char* gethypridtunerchoicesvalue(int dev)
5979{
5980        char* hypridtunerchoices = NULL, *value = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *hypridlist = NULL, *start = NULL;
5981
5982        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
5983
5984        if(hypridtunerchoices == NULL)
5985        {
5986                err("NULL detect");
5987                return NULL;
5988        }
5989
5990        tmpstr = readfiletomem(hypridtunerchoices, 1);
5991        if(tmpstr == NULL)
5992        {
5993                err("NULL detect");
5994                return NULL;
5995        }
5996
5997        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
5998        start = ostrcat(start, ":", 1, 0);
5999        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6000        free(start), start = NULL;
6001
6002        hypridlist = gethypridtunerchoices(dev);
6003
6004        int count = 0;
6005        int i = 0;
6006        struct splitstr* ret1 = NULL;
6007        ret1 = strsplit(hypridlist, "\n", &count);
6008
6009        if(ret1 != NULL)
6010        {
6011                int max = count;
6012                for(i = 0; i < max; i++)
6013                {
6014                        start = ostrcat("Mode ", ret1[i].part, 0, 0);
6015                        start = ostrcat(start, ":", 1, 0);
6016                        tmpstr2 = string_resub(start, "\n", tmpstr1, 0);
6017               
6018                        if(i > 0)
6019                                value = ostrcat(value, "\n", 1, 0);
6020               
6021                        if(tmpstr2 != NULL)
6022                                value = ostrcat(value, tmpstr2, 1, 0);
6023                               
6024                        free(tmpstr2), tmpstr2 = NULL;
6025                        free(start), start = NULL;
6026                }
6027        }
6028        free(ret1), ret1 = NULL;                       
6029        free(tmpstr1), tmpstr1 = NULL;
6030        free(hypridlist), hypridlist = NULL;
6031
6032        return value;
6033}
6034
6035char* gethypridtunerchoicesvaluename(int dev, char* hyprid)
6036{
6037        char* hypridtunerchoices = NULL, *value = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *start = NULL;
6038
6039        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
6040
6041        if(hypridtunerchoices == NULL)
6042        {
6043                err("NULL detect");
6044                return NULL;
6045        }
6046
6047        tmpstr = readfiletomem(hypridtunerchoices, 1);
6048        if(tmpstr == NULL)
6049        {
6050                err("NULL detect");
6051                return NULL;
6052        }
6053
6054        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
6055        start = ostrcat(start, ":", 1, 0);
6056        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6057        free(start), start = NULL;
6058
6059        start = ostrcat("Mode ", hyprid, 0, 0);
6060        start = ostrcat(start, ":", 1, 0);
6061
6062        tmpstr2 = string_resub(start, "\n", tmpstr1, 0);
6063       
6064        if(tmpstr2 != NULL)
6065                value = ostrcat(value, tmpstr2, 1, 0);
6066
6067        free(tmpstr1), tmpstr1 = NULL;
6068        free(tmpstr2), tmpstr2 = NULL;
6069        free(start), start = NULL;
6070
6071        return value;
6072}
6073
6074int sethypridtuner(int dev, char* value)
6075{
6076        char* buf = NULL, *hypridtuner = NULL, *tmpstr = NULL;
6077        int ret = 0;
6078
6079        hypridtuner = getconfig("hypridtuner", NULL);
6080       
6081        if(hypridtuner != NULL)
6082        {
6083                buf = malloc(MINMALLOC);
6084                if(buf == NULL)
6085                {
6086                        err("no memory");
6087                        return 0;
6088                }
6089        }
6090
6091        sprintf(buf, hypridtuner, dev);
6092        if(buf != NULL)
6093        {
6094                printf("set %s to %s\n", buf, value);
6095                ret = writesys(buf, value, 0);
6096                free(tmpstr); tmpstr = NULL;
6097                return ret;
6098        }
6099
6100        return 0;
6101}
6102
6103int phpkit_userauth(char* link, char* user, char* pass)
6104{
6105        debug(99, "phpkit user: %s", user);
6106        debug(99, "phpkit pass: %s", pass);     
6107        debug(99, "phpkit url: %s", link);
6108
6109        int skip = 0;
6110        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;
6111
6112        tmplink = ostrcat(link, NULL, 0, 0);
6113
6114        tmphost = string_replace("http://", "", tmplink, 0);
6115        free(tmplink) , tmplink = NULL;
6116
6117        if(tmphost != NULL)
6118                pos = strchr(tmphost, '/');
6119        if(pos != NULL)
6120        {
6121                pos[0] = '\0';
6122                path = pos + 1;
6123        }
6124
6125        tmppath = ostrcat("/", path, 0, 0);
6126
6127        send = ostrcat(send, "GET ", 1, 0);
6128        send = ostrcat(send, tmppath, 1, 0);
6129        send = ostrcat(send, " HTTP/1.1\r\nHost: ", 1, 0);     
6130        send = ostrcat(send, tmphost, 1, 0);
6131        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);       
6132        debug(99, "#############################################################################################################");
6133        debug(99, "send1: %s", send);
6134        debug(99, "#############################################################################################################");
6135
6136        tmpstr = gethttpreal(tmphost, tmppath, 80, NULL, NULL, NULL, 0, send, NULL, 5000, 1);
6137        debug(99, "tmpstr: %s", tmpstr);
6138
6139        free(send), send = NULL;
6140        free(tmpstr), tmpstr = NULL;
6141
6142        if(user == NULL || pass == NULL || link == NULL) return 1;
6143
6144        hash = ostrcat("login=1&user=", user, 0, 0);
6145        hash = ostrcat(hash, "&userpw=", 1, 0);
6146        hash = ostrcat(hash, pass, 1, 1);
6147        hashlen = oitoa(strlen(hash));
6148       
6149        send = ostrcat(send, "POST ", 1, 0);
6150        send = ostrcat(send, tmppath, 1, 0);
6151        send = ostrcat(send, " HTTP/1.1\r\nContent-Length: ", 1, 0);
6152        send = ostrcat(send, hashlen, 1, 0);
6153        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);
6154        send = ostrcat(send, tmphost, 1, 0);
6155        send = ostrcat(send, "\r\nCookie: pageredir=", 1, 0);
6156        send = ostrcat(send, cookie1, 1, 0);
6157        send = ostrcat(send, "; PHPSESSID=", 1, 0);     
6158        send = ostrcat(send, cookie2, 1, 0);
6159        send = ostrcat(send, "\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n", 1, 0);     
6160        send = ostrcat(send, hash, 1, 0);
6161        free(hash); hash = NULL;
6162        free(hashlen); hashlen = NULL;
6163
6164        debug(99, "#############################################################################################################");
6165        debug(99, "send1: %s", send);
6166        debug(99, "#############################################################################################################");
6167
6168        tmpstr = gethttpreal(tmphost, tmppath, 80, NULL, NULL, NULL, 0, send, NULL, 5000, 1);
6169        debug(99, "tmpstr: %s", tmpstr);
6170
6171        free(cookie1); cookie1 = NULL;
6172        free(cookie2); cookie2 = NULL;
6173        free(tmphost); tmphost = NULL;
6174        free(send); send = NULL;
6175        free(ip); ip = NULL;
6176        if(tmpstr == NULL) skip = 1;
6177        free(tmpstr); tmpstr = NULL;
6178        if(skip == 1) return 1;
6179        return 0;
6180}
6181
6182void changetunername(struct skin* tunernode, int adapter, int devnr, char* name, char* fehyprid)
6183{
6184        char* tmpnr = NULL, *tmpstr = NULL;
6185        tmpnr = oitoa(adapter);
6186        tmpstr = ostrcat(_("Tuner "), tmpnr, 0, 1);
6187        tmpstr = ostrcat(tmpstr, "/", 1, 0);
6188        tmpnr = oitoa(devnr);
6189        tmpstr = ostrcat(tmpstr, tmpnr, 1, 1);
6190        tmpstr = ostrcat(tmpstr, ": ", 1, 0);
6191        tmpstr = ostrcat(tmpstr, name, 1, 0);
6192        if(fehyprid != NULL)
6193        {
6194                tmpstr = ostrcat(tmpstr, " (", 1, 0);
6195                tmpstr = ostrcat(tmpstr, _("Multituner adjustable"), 1, 0);
6196                tmpstr = ostrcat(tmpstr, ")", 1, 0);
6197        }
6198        changetext(tunernode, tmpstr);
6199        free(tmpstr); tmpstr = NULL;
6200}
6201
6202char* gethypridtunername(int dev, char* hyprid)
6203{
6204        char* hypridtunerchoices = NULL, *value = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *start = NULL;
6205
6206        hypridtunerchoices = getconfig("hypridtunerchoices", NULL);
6207
6208        if(hypridtunerchoices == NULL)
6209        {
6210                err("NULL detect");
6211                return NULL;
6212        }
6213
6214        tmpstr = readfiletomem(hypridtunerchoices, 1);
6215        if(tmpstr == NULL)
6216        {
6217                err("NULL detect");
6218                return NULL;
6219        }
6220
6221        start = ostrcat("NIM Socket ", oitoa(dev), 0, 0);
6222        start = ostrcat(start, ":", 1, 0);
6223        tmpstr1 = string_resub(start, "I2C_Device", tmpstr, 0);
6224        free(start), start = NULL;
6225
6226        tmpstr2 = string_resub("Name: ", "\n", tmpstr1, 0);
6227       
6228        if(tmpstr2 != NULL)
6229                value = ostrcat(value, tmpstr2, 1, 0);
6230
6231        free(tmpstr1), tmpstr1 = NULL;
6232        free(tmpstr2), tmpstr2 = NULL;
6233        free(start), start = NULL;
6234
6235        return value;
6236}
6237
6238void convertsettings()
6239{
6240        struct menulist* mlist = NULL, *mbox = NULL;
6241        struct skin* load = getscreen("loading");
6242        int flag = 0, ret = 0;
6243        char* tmpstr = NULL;
6244
6245        addmenulist(&mlist, "Create Transponder (Sat)", _("Create Transponder (Sat)"), NULL, 0, 0);
6246        addmenulist(&mlist, "Create Transponder (Cable)", _("Create Transponder (Cable)"), NULL, 0, 0);
6247        addmenulist(&mlist, "Create Transponder (Terrestrial)", _("Create Transponder (Terrestrial)"), NULL, 0, 0);
6248        addmenulist(&mlist, "Create Transponder (All)", _("Create Transponder (All)"), NULL, 0, 0);
6249
6250        mbox = menulistbox(mlist, "createsettings", _("Select Your Serach Modus"), NULL, NULL, NULL, 1, 0);
6251        if(mbox != NULL) tmpstr = mbox->name;
6252
6253        if(ostrcmp(tmpstr, "Create Transponder (Sat)") == 0)
6254                flag = 0;
6255        else if(ostrcmp(tmpstr, "Create Transponder (Cable)") == 0)
6256                flag = 1;
6257        else if(ostrcmp(tmpstr, "Create Transponder (Terrestrial)") == 0)
6258                flag = 2;
6259        else if(ostrcmp(tmpstr, "Create Transponder (All)") == 0)
6260                flag = 3;
6261        else
6262        {
6263                freemenulist(mlist, 1); mlist = NULL;
6264                return;
6265        }
6266
6267        freemenulist(mlist, 1); mlist = NULL;
6268
6269        drawscreen(load, 0, 0);
6270
6271        if(flag == 0)
6272        {
6273                ret = converte2settings(0);
6274                if(ret == 0) return;
6275                system("cp -a /tmp/satellites.sat /mnt/settings/satellites");
6276                system("cp -a /tmp/transponder.sat /mnt/settings/transponder");
6277        }
6278        else if(flag == 1)
6279        {
6280                ret = converte2settings(1);
6281                if(ret == 0) return;
6282                system("cp -a /tmp/satellites.cable /mnt/settings/satellites");
6283                system("cp -a /tmp/transponder.cable /mnt/settings/transponder");
6284        }
6285        else if(flag == 2)
6286        {
6287                converte2settings(2);
6288                system("cp -a /tmp/satellites.ter /mnt/settings/satellites");
6289                system("cp -a /tmp/transponder.ter /mnt/settings/transponder");
6290        }
6291        else if(flag == 3)
6292        {
6293                ret = converte2settings(0);
6294                if(ret == 0) return;
6295                ret = converte2settings(1);
6296                if(ret == 0) return;
6297                ret = converte2settings(2);
6298                if(ret == 0) return;
6299                system("cp -a /tmp/satellites.sat /mnt/settings/satellites");
6300                system("cp -a /tmp/transponder.sat /mnt/settings/transponder");
6301
6302                system("cat /tmp/satellites.cable >> /mnt/settings/satellites");
6303                system("cat /tmp/transponder.cable >> /mnt/settings/transponder");
6304
6305                system("cat /tmp/satellites.ter >> /mnt/settings/satellites");
6306                system("cat /tmp/transponder.ter >> /mnt/settings/transponder");
6307        }
6308
6309//      free(tmpstr), tmpstr = NULL;
6310        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)
6311        {       
6312                //write only config file
6313                system("sync");
6314                writeallconfig(3);
6315                oshutdown(2,2);
6316                system("init 6");
6317        }
6318}
6319
6320// flag 0 = sat
6321// flag 1 = cable
6322// flag 2 = ter
6323int converte2settings(int flag)
6324{
6325        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;
6326        int incount = 0;
6327       
6328        if(flag == 0)
6329        {
6330                system("rm -rf /tmp/transponder.sat");
6331                system("rm -rf /tmp/satellites.sat");
6332                system("cp -a /var/etc/tuxbox/satellites.xml /tmp/satellites.xml");
6333                start = ostrcat("<sat ", NULL, 0, 0);
6334                end = ostrcat("</sat>", NULL, 0, 0);
6335                filename = ostrcat("/tmp/satellites.xml", NULL, 0, 0);
6336                path = ostrcat("/transponder/satellites.xml", NULL, 0, 0);
6337                transponderfile = ostrcat("/tmp/transponder.sat", NULL, 0, 0);
6338                satfile = ostrcat("/tmp/satellites.sat", NULL, 0, 0);
6339                fetype = ostrcat("0", NULL, 0, 0);
6340        }
6341        else if(flag == 1)
6342        {
6343                system("rm -rf /tmp/transponder.cable");
6344                system("rm -rf /tmp/satellites.cable");
6345                system("cp -a /var/etc/tuxbox/cables.xml /tmp/cables.xml");
6346                start = ostrcat("<cable ", NULL, 0, 0);
6347                end = ostrcat("</cable>", NULL, 0, 0);
6348                filename = ostrcat("/tmp/cables.xml", NULL, 0, 0);
6349                path = ostrcat("/transponder/cables.xml", NULL, 0, 0);
6350                transponderfile = ostrcat("/tmp/transponder.cable", NULL, 0, 0);
6351                satfile = ostrcat("/tmp/satellites.cable", NULL, 0, 0);
6352                fetype = ostrcat("1", NULL, 0, 0);
6353                incount = 4999;
6354        }
6355        else if(flag == 2)
6356        {
6357                system("rm -rf /tmp/transponder.ter");
6358                system("rm -rf /tmp/satellites.ter");
6359                system("cp -a /var/etc/tuxbox/terrestrial.xml /tmp/terrestrial.xml");
6360                start = ostrcat("<terrestrial ", NULL, 0, 0);
6361                end = ostrcat("</terrestrial>", NULL, 0, 0);
6362                filename = ostrcat("/tmp/terrestrial.xml", NULL, 0, 0);
6363                path = ostrcat("/transponder/terrestrial.xml", NULL, 0, 0);
6364                transponderfile = ostrcat("/tmp/transponder.ter", NULL, 0, 0);
6365                satfile = ostrcat("/tmp/satellites.ter", NULL, 0, 0);
6366                fetype = ostrcat("2", NULL, 0, 0);
6367                incount = 9999;
6368        }
6369
6370        if(!file_exist(filename))
6371                gethttp("atemio.dyndns.tv", path, 80, filename, HTTPAUTH, 5000, NULL, 0);
6372
6373        char* tmptext = NULL;
6374        tmptext = ostrcat(_("Error: Transponder Source file not found"), "\nfilename: ", 0, 0);
6375        tmptext = ostrcat(tmptext, transponderfile, 1, 0);
6376
6377        if(!file_exist(filename))
6378        {
6379                textbox(_("Message"), tmptext, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
6380                free(tmptext), tmptext = NULL;
6381                free(path), path = NULL;
6382                free(filename), filename = NULL;
6383                free(satfile), satfile = NULL;
6384                free(fetype), fetype = NULL;
6385                free(start), start = NULL;
6386                free(end), end = NULL;
6387                free(transponderfile), transponderfile = NULL;
6388                return 0;
6389        }
6390        free(tmptext), tmptext = NULL;
6391
6392        buf = readfiletomem(filename, 1);
6393        if(buf == NULL)
6394        {
6395                printf("buf: %s\n", buf);       
6396                tmptext = ostrcat(_("Error: Transponder Source file no data"), "\nfilename: ", 0, 0);
6397                tmptext = ostrcat(tmptext, transponderfile, 1, 0);
6398                textbox(_("Message"), tmptext, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
6399                free(tmptext), tmptext = NULL;
6400                free(path), path = NULL;
6401                free(filename), filename = NULL;
6402                free(satfile), satfile = NULL;
6403                free(fetype), fetype = NULL;
6404                free(start), start = NULL;
6405                free(end), end = NULL;
6406                free(transponderfile), transponderfile = NULL;
6407                return 0;
6408        }
6409       
6410//      writesys("/tmp/convert.log", buf, 1);
6411
6412        while(ostrstr(buf, start) != NULL)
6413        {
6414                incount++;
6415                tmpstr = string_resub(start, end, buf, 0);
6416                tmpstr1 = ostrcat(tmpstr, NULL, 0, 0);
6417               
6418                //printf("name: %s\n", getxmlentry(ret1[i].part, "name="));
6419                //printf("position: %s\n", getxmlentry(ret1[i].part, "position="));
6420               
6421                name = getxmlentry(tmpstr, "name=");
6422                if(flag == 0)
6423                        orbitalpos = getxmlentry(tmpstr, "position=");
6424                else
6425                        orbitalpos = ostrcat(oitoa(incount), NULL, 1, 0);
6426                       
6427                flags = getxmlentry(tmpstr, "flags=");
6428                //string_decode(name, 0);
6429                name = string_replace_all("&amp;", "und", name, 1);
6430       
6431                line = ostrcat(line, name, 1, 0); //name
6432                line = ostrcat(line, "#", 1, 0);
6433//              line = ostrcat(line, flags, 1, 0); //flag
6434// 0 for all sat/ter/cab ???
6435                line = ostrcat(line, "0", 1, 0);
6436                line = ostrcat(line, "#", 1, 0);
6437                line = ostrcat(line, orbitalpos, 1, 0); //orbitalpos
6438                line = ostrcat(line, "#", 1, 0);
6439                line = ostrcat(line, fetype, 1, 0); //fetype
6440                printf("%s: %s\n", satfile, line);
6441                writesys(satfile, line, 3);
6442                free(line), line = NULL;
6443                               
6444                int count = 0;
6445
6446                int i = 0;
6447                struct splitstr* ret1 = NULL;
6448                ret1 = strsplit(tmpstr1, "\n", &count);
6449                if(ret1 != NULL)
6450                {
6451                        int max = count;
6452                        for(i = 0; i < max; i++)
6453                        {
6454                                if(i == 0) continue;
6455                                line = ostrcat(line, "0", 1, 0); //id
6456                                line = ostrcat(line, "#", 1, 0);
6457
6458                                line = ostrcat(line, fetype, 1, 0); //fetype
6459                                line = ostrcat(line, "#", 1, 0);
6460
6461                                if(ostrstr((ret1[i]).part, "frequency=") != NULL)
6462                                        line = ostrcat(line, getxmlentry(ret1[i].part, "frequency="), 1, 0); //frequency
6463                                else
6464                                        line = ostrcat(line, "-1", 1, 0);
6465                                line = ostrcat(line, "#", 1, 0);
6466
6467                                if(ostrstr((ret1[i]).part, "polarization=") != NULL)
6468                                        line = ostrcat(line, getxmlentry(ret1[i].part, "polarization="), 1, 0); //polarization
6469                                else
6470                                        line = ostrcat(line, "-1", 1, 0); //polarization
6471
6472                                line = ostrcat(line, "#", 1, 0);
6473                                if(orbitalpos != NULL)
6474                                        line = ostrcat(line, orbitalpos, 1, 0); //orbitalpos
6475                                else
6476                                        line = ostrcat(line, "-1", 1, 0); //orbitalpos
6477                                line = ostrcat(line, "#", 1, 0);
6478
6479                                if(ostrstr((ret1[i]).part, "symbol_rate=") != NULL)
6480                                        line = ostrcat(line, getxmlentry(ret1[i].part, "symbol_rate="), 1, 0); //symbolrate
6481                                else
6482                                        line = ostrcat(line, "-1", 1, 0);
6483                                line = ostrcat(line, "#", 1, 0);
6484
6485                                if(ostrstr((ret1[i]).part, "modulation=") != NULL)
6486                                        line = ostrcat(line, getxmlentry(ret1[i].part, "modulation="), 1, 0); //modulation
6487                                else
6488                                {
6489                                        if(flag == 2)
6490                                                line = ostrcat(line, "3", 1, 0);
6491                                        else
6492                                                line = ostrcat(line, "0", 1, 0);
6493                                }
6494                                line = ostrcat(line, "#", 1, 0);
6495
6496                                if(ostrstr((ret1[i]).part, "fec_inner=") != NULL)
6497                                        line = ostrcat(line, getxmlentry(ret1[i].part, "fec_inner="), 1, 0); //fec
6498                                else
6499                                {
6500                                        if(flag == 2)
6501                                                line = ostrcat(line, "5", 1, 0);
6502                                        else
6503                                                line = ostrcat(line, "0", 1, 0);
6504                                }
6505                                line = ostrcat(line, "#", 1, 0);
6506
6507                                if(checkbox("UFS910") == 1)
6508                                        line = ostrcat(line, "1", 1, 0); //pilot
6509                                else
6510                                        line = ostrcat(line, "2", 1, 0); //pilot
6511                                line = ostrcat(line, "#", 1, 0);
6512
6513                                if(checkbox("UFS910") == 1)
6514                                        line = ostrcat(line, "0", 1, 0); //rolloff
6515                                else
6516                                        line = ostrcat(line, "3", 1, 0); //rolloff
6517                                line = ostrcat(line, "#", 1, 0);
6518
6519                                line = ostrcat(line, "2", 1, 0); //inversion
6520                                line = ostrcat(line, "#", 1, 0);
6521
6522                                if(ostrstr((ret1[i]).part, "system=") != NULL)
6523                                        line = ostrcat(line, getxmlentry(ret1[i].part, "system="), 1, 0); //system
6524                                else
6525                                        line = ostrcat(line, "0", 1, 0); //system
6526                                line = ostrcat(line, "\n", 1, 0);
6527                        }
6528                }
6529       
6530                tmpstr2 = ostrcat(start, tmpstr, 0, 0);
6531       
6532                buf = string_replace(tmpstr2, NULL, buf, 1);
6533       
6534        //      outfile = ostrcat("/tmp/convert.", oitoa(incount), 0, 1);
6535        //      outfile = ostrcat(outfile, ".log", 1, 0);       
6536        //      writesys(outfile, buf, 2);
6537        //      writesys("/tmp/convert.log", buf, 3);
6538       
6539                writesys(transponderfile, line, 2);
6540                free(line), line = NULL;
6541       
6542                free(tmpstr), tmpstr = NULL;   
6543                free(tmpstr1), tmpstr1 = NULL;
6544                free(tmpstr2), tmpstr2 = NULL;
6545                free(ret1), ret1 = NULL;
6546                free(name), name = NULL;
6547                free(orbitalpos), orbitalpos = NULL;
6548                free(flags), flags = NULL;
6549                free(outfile), outfile = NULL; 
6550        }
6551
6552        free(path), path = NULL;
6553        free(filename), filename = NULL;
6554        free(satfile), satfile = NULL;
6555        free(transponderfile), transponderfile = NULL;
6556               
6557        free(buf), buf = NULL;
6558        free(start), start = NULL;
6559        free(end), end = NULL;
6560        free(fetype), fetype = NULL;
6561                       
6562        return 1;
6563}
6564
6565void createfav()
6566{
6567        struct skin* load = getscreen("loading");
6568        drawscreen(load, 0, 0);
6569
6570        system("rm -rf /mnt/settings/bouquets*");
6571        system("cp -a /etc/titan.restore/mnt/settings/bouquets* /mnt/settings");
6572
6573        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)
6574        {
6575                //write only config file
6576                system("sync");
6577                writeallconfig(3);
6578                oshutdown(2,2);
6579                system("init 6");
6580        }
6581}
6582
6583char* system_infos(int mode)
6584{
6585        char* tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL;
6586
6587        if(mode == 0)
6588        {
6589                tmpstr1 = ostrcat("Date = ", "", 0, 0);
6590                tmpstr1 = ostrcat(tmpstr1, gettime(NULL, "%d %B %Y"), 1, 1);
6591                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
6592
6593                tmpstr1 = ostrcat("\nTime = ", "", 0, 0);
6594                tmpstr1 = ostrcat(tmpstr1, gettime(NULL, "%H:%M:%S"), 1, 1);
6595                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
6596               
6597                tmpstr1 = ostrcat("\nUptime = ", "", 0, 0);
6598                tmpstr2 = command("uptime");
6599                if(tmpstr2 != NULL) tmpstr2 = strtok(tmpstr2, ",");
6600                tmpstr1 = ostrcat(tmpstr1, tmpstr2, 1, 1);
6601                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
6602
6603                tmpstr1 = ostrcat("\nBoxtype = ", "", 0, 0);
6604                tmpstr2 = string_toupper(command("cat /etc/model"));
6605                tmpstr1 = ostrcat(tmpstr1, tmpstr2, 1, 1);
6606                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
6607
6608                tmpstr1 = ostrcat("\nLoad = ", "", 0, 0);
6609                tmpstr2 = command("cat /proc/loadavg");
6610                tmpstr1 = ostrcat(tmpstr1, tmpstr2, 1, 1);
6611                tmpstr = ostrcat(tmpstr, tmpstr1, 1, 1);
6612        }
6613
6614        if(mode == 1)
6615        {
6616                system("ls /media/usb/* >/dev/null");
6617                system("ls /media/net/* >/dev/null");
6618                system("ls /var/swap/* >/dev/null");
6619                system("ls /mnt/swapextension/* >/dev/null");
6620                system("ls /var/backup/* >/dev/null");
6621                system("ls /media/hdd/* >/dev/null");
6622                tmpstr = command("df -h");
6623        }
6624
6625        if(mode == 2)
6626                tmpstr = command("cat /proc/version");
6627
6628        if(mode == 3)
6629        {
6630                system("ls /media/usb/* >/dev/null");
6631                system("ls /media/net/* >/dev/null");
6632                system("ls /var/swap/* >/dev/null");
6633                system("ls /mnt/swapextension/* >/dev/null");
6634                system("ls /var/backup/* >/dev/null");
6635                system("ls /media/hdd/* >/dev/null");
6636                tmpstr = command("mount");
6637        }
6638
6639        if(mode == 4)
6640        {
6641                tmpstr1 = command("ifconfig");
6642                tmpstr2 = command("route -n");
6643                tmpstr = ostrcat(tmpstr1, tmpstr2, 1, 1);
6644        }
6645
6646        if(mode == 5)
6647                tmpstr = command("free");
6648
6649        return tmpstr;
6650}
6651
6652char* system_infos_sysinfo(int mode)
6653{
6654        char* tmpstr = NULL;
6655
6656        if(mode == 0)
6657                tmpstr = command("cat /proc/cpuinfo | sed 's/\t\t/\t/'");
6658        else if(mode == 1)
6659                tmpstr = command("cat /proc/meminfo");
6660        else if(mode == 2)
6661                tmpstr = command("cat /proc/mtd");
6662        else if(mode == 3)
6663                tmpstr = command("cat /proc/modules");
6664        else if(mode == 4)
6665                tmpstr = command("cat /proc/devices");
6666        else if(mode == 5)
6667        {
6668                char* tmpstr1 = NULL, **tmpstr2 = NULL, **tmpstr3 = NULL;
6669                int i = 0, ii = 0;
6670                char* swap[] = {"Name: ", "Type: ", "Size: ", "Used: ", "Prio: "};
6671
6672                tmpstr1 = command("cat /proc/swaps | sed 's/\t/ /g; s/[ ]* / /g'");
6673                tmpstr2 = str_split(tmpstr1, "\n");
6674                if(tmpstr2 != NULL)
6675                {
6676                        free(tmpstr2[0]); tmpstr2[0] = NULL;
6677
6678                        for(i = 1; tmpstr2[i] != NULL; i++)
6679                        {
6680                                tmpstr3 = str_split(tmpstr2[i], " ");
6681                                if(tmpstr3 != NULL)
6682                                {
6683
6684                                        for(ii = 0; tmpstr3[ii] != NULL; ii++)
6685                                        {
6686                                                tmpstr = ostrcat(tmpstr, swap[ii], 1, 0);
6687                                                tmpstr = ostrcat(tmpstr, tmpstr3[ii], 1, 1);
6688                                                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
6689                                        }
6690                                }
6691
6692                                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
6693                                free(tmpstr2[i]); tmpstr2[i] = NULL;
6694                                free(tmpstr3); tmpstr3 = NULL;
6695                        }
6696                }
6697
6698                free(tmpstr3); tmpstr3 = NULL;
6699                free(tmpstr2); tmpstr2 = NULL;
6700                free(tmpstr1); tmpstr1 = NULL;
6701        }
6702        else if(mode == 6)
6703                tmpstr = command("top -b -n1");
6704        else if(mode == 7)
6705                tmpstr = command("ps");
6706        else if(mode == 8)
6707                tmpstr = command("cat /proc/bus/usb/devices");
6708
6709        return tmpstr;
6710}
6711
6712char* system_logs(int mode)
6713{
6714        char* tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL, *path = NULL, *boxversion = NULL;
6715
6716        if(mode == 0)
6717        {
6718                tmpstr1 = readfiletomem("/etc/motd", 0);
6719                if(tmpstr1 != NULL) tmpstr2 = strstr(tmpstr1, "wElc0me");
6720                tmpstr3 = readfiletomem("/etc/imageinfo", 0);
6721                if(tmpstr2 == NULL)
6722                        tmpstr = ostrcat(tmpstr3, NULL, 1, 0);
6723                else
6724                        tmpstr = ostrcat(tmpstr2, tmpstr3, 1, 1);
6725        }
6726        else if(mode == 1)
6727        {
6728                if(isfile("/etc/model") == 0) return NULL;
6729                boxversion = string_tolower(readsys("/etc/model", 1));
6730
6731//              if(file_exist("/etc/.beta"))
6732                        path = ostrcat(path, "/svn/image-beta/changelog.", 1, 0);
6733//              else
6734//                      path = ostrcat(path, "/svn/image/changelog.", 1, 0);
6735
6736                path = ostrcat(path, boxversion, 1, 0);
6737                path = ostrcat(path, ".titan", 1, 0);
6738
6739//              if(file_exist("/etc/.beta"))
6740                        tmpstr1 = gethttp("beta.dyndns.tv", path, 80, NULL, HTTPAUTH, 5000, NULL, 0);
6741//              else
6742//                      tmpstr1 = gethttp("atemio.dyndns.tv", path, 80, NULL, HTTPAUTH, 5000, NULL, 0);
6743
6744                tmpstr = readfromlinetoline(tmpstr1, 37, 537, 1);
6745        }
6746        else if(mode == 2)
6747        {
6748//              if(file_exist("/etc/.beta"))
6749#ifdef MIPSEL
6750                        path = ostrcat(path, "/svn/image-beta/changelog.git.mipsel", 1, 0);
6751#else
6752                        path = ostrcat(path, "/svn/image-beta/changelog.git.sh4", 1, 0);
6753#endif
6754//              else
6755//                      path = ostrcat(path, "/svn/image/changelog.git", 1, 0);
6756
6757//              if(file_exist("/etc/.beta"))
6758                        tmpstr1 = gethttp("beta.dyndns.tv", path, 80, NULL, HTTPAUTH, 5000, NULL, 0);
6759//              else
6760//                      tmpstr1 = gethttp("atemio.dyndns.tv", path, 80, NULL, HTTPAUTH, 5000, NULL, 0);
6761
6762                tmpstr = readfromlinetoline(tmpstr1, 0, 500, 1);
6763        }
6764        else if(mode == 3)
6765        {
6766                tmpstr = readfiletomem(getconfig("tracelog", NULL), 0);
6767        }
6768
6769        free(path), path = NULL;
6770        free(boxversion), boxversion = NULL;
6771//      free(tmpstr1), tmpstr1 = NULL;
6772//      free(tmpstr2), tmpstr2 = NULL;
6773//      free(tmpstr3), tmpstr3 = NULL;
6774
6775        return tmpstr;
6776}
6777
6778char* getabout()
6779{
6780        char* text = NULL, *tmpstr = NULL, *imgversion = NULL;
6781        struct dvbdev* dvbnode = dvbdev;
6782
6783        if(isfile(getconfig("imagenamefile", NULL))     != 0)
6784                imgversion = readsys(getconfig("imagenamefile", NULL), 1);
6785        else
6786                imgversion = ostrcat("unknown", NULL, 0, 0);
6787
6788        text = ostrcat(_("Image"), ": ", 0, 0);
6789        text = ostrcat(text, PROGNAME, 1, 0);
6790        text = ostrcat(text, "\n", 1, 0);
6791        text = ostrcat(text, _("Version"), 1, 0);
6792        text = ostrcat(text, ": ", 1, 0);
6793        text = ostrcat(text, OVERSION, 1, 0);
6794        text = ostrcat(text, "\n", 1, 0);
6795        text = ostrcat(text, _("Installed:"), 1, 0);
6796        text = ostrcat(text, " ", 1, 0);
6797        text = ostrcat(text, imgversion, 1, 1);
6798        text = ostrcat(text, "\n", 1, 0);
6799        text = ostrcat(text, _("Copyright"), 1, 0);
6800        text = ostrcat(text, ": ", 1, 0);
6801        text = ostrcat(text, COPYRIGHT, 1, 0);
6802        text = ostrcat(text, "\n\n", 1, 0);
6803               
6804        while(dvbnode != NULL)
6805        {
6806                if(dvbnode->type == FRONTENDDEV && dvbnode->feinfo != NULL)
6807                {
6808                        text = ostrcat(text, _("Tuner"), 1, 0);
6809                        text = ostrcat(text, ": ", 1, 0);
6810                        if(dvbnode->feinfo->name != NULL)
6811                                text = ostrcat(text, dvbnode->feinfo->name, 1, 0);
6812                        else
6813                                text = ostrcat(text, _("unknown"), 1, 0);
6814                        text = ostrcat(text, "\n", 1, 0);
6815                        text = ostrcat(text, _("Tunertype"), 1, 0);
6816                        text = ostrcat(text, ": ", 1, 0);
6817
6818                        tmpstr = fegettypestr(dvbnode);
6819                        text = ostrcat(text, tmpstr, 1, 1);
6820                        text = ostrcat(text, "\n\n", 1, 0);
6821                }
6822                dvbnode = dvbnode->next;
6823        }
6824       
6825        char* flog = readfiletomem("/tmp/.firmware.log", 0);
6826        text = ostrcat(text, flog, 1, 1);
6827
6828        return text;
6829}
6830
6831char* getimgnamereal()
6832{
6833        char* tmpstr = NULL;
6834
6835        tmpstr = readfiletomem(getconfig("imagenamefile", NULL), 1);
6836
6837        return tmpstr;
6838}
6839
6840char* getmoviedev()
6841{
6842        char* tmpstr = NULL, *buf = NULL;
6843
6844        tmpstr = readfiletomem("/tmp/.moviedev", 1);
6845        printf("tmpstr: %s\n", tmpstr);
6846
6847        buf = oregex("sd([a-z]{1,1}).*", tmpstr);
6848        printf("buf: %s\n", buf);
6849
6850        free(tmpstr), tmpstr = NULL;
6851
6852        return buf;
6853}
6854
6855void wakeup_record_device()
6856{
6857        char* cmd = NULL, *dev = NULL;
6858
6859        dev = getmoviedev();
6860        if(dev == NULL)
6861                cmd = ostrcat("ls -al ", getconfig("rec_path", NULL), 0, 0);
6862        else
6863                cmd = ostrcat("sdparm -C START /dev/sd", dev, 0, 0);
6864
6865//      cmd = ostrcat(cmd, " >/dev/null", 1, 0);
6866        printf("cmd: %s\n", cmd);
6867        system(cmd);
6868        free(dev), dev = NULL;
6869        free(cmd), cmd = NULL;
6870}
6871
6872#endif
Note: See TracBrowser for help on using the repository browser.