source: titan/titan/httpdfunc.h @ 30591

Last change on this file since 30591 was 30591, checked in by gost, 9 years ago

[titan] webif.. start plugin with query?startplugin&name

File size: 198.8 KB
Line 
1#ifndef HTTPDFUNC_H
2#define HTTPDFUNC_H
3
4time_t webcreatetimeline(char** buf, int* maxlen, int* pos)
5{
6        int i = 0;
7        struct tm *loctime = NULL;
8        int timeadd = 15 * 60;
9        char* buf1 = NULL;
10        time_t akttimeadd = 0;
11
12#ifdef SIMULATE
13        time_t akttime = 1307871000;
14        akttime = 1315614961;
15#else
16        time_t akttime = time(NULL);
17#endif
18
19        akttime -= (((akttime) % 100));
20        akttime -= (((akttime / 60) % 15) * 60);
21        akttimeadd = akttime;
22
23        buf1 = malloc(6);
24        if(buf1 == NULL)
25        {
26                err("no mem");
27                return akttime;
28        }
29
30        //not shown
31        ostrcatbig(buf, "<th class=gepgchannel1> </th><th style=\"width: 1px; max-width: 1px; min-width: 1px;\"></th>", maxlen, pos);
32        for(i = 0; i < 96; i++)
33        {
34                loctime = olocaltime(&akttimeadd);
35                if(loctime != NULL)
36                        strftime(buf1, 6, "%H:%M", loctime);
37                else
38                        snprintf(buf1, 6, "00:00");
39                free(loctime); loctime = NULL;
40
41                ostrcatbig(buf, "<th class=gepgtimelinecell><div class=gepgcellborder>", maxlen, pos);
42                ostrcatbig(buf, buf1, maxlen, pos);
43                ostrcatbig(buf, "</div></th>", maxlen, pos);
44
45                akttimeadd += timeadd;
46        }
47
48        free(buf1);
49        return akttime / 60;
50}
51
52void webcreatetailbig(char** buf, int* maxlen, int* pos, int flag)
53{
54        ostrcatbig(buf, "</table></font></center></body></html>", maxlen, pos);
55}
56
57
58char* webcreatetail(char* buf, int flag)
59{
60        buf = ostrcat(buf, "</table></font></center></body></html>", 1, 0);
61        return buf;
62}
63
64void webcreateheadbig(char** buf, int* maxlen, char* meta, int* pos, int flag)
65{
66        ostrcatbig(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css>", maxlen, pos);
67        if(meta != NULL)
68                ostrcatbig(buf, meta, maxlen, pos);
69        ostrcatbig(buf, "</head><body class=body>", maxlen, pos);
70        if(flag == 0)
71                ostrcatbig(buf, "<center><table border=0 width=100%>", maxlen, pos);
72        else
73                ostrcatbig(buf, "<center><table border=0 width=100% height=100%>", maxlen, pos);
74}
75
76char* webcreatehead(char* buf, char* meta, int flag)
77{
78        buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css>", 1, 0);
79        if(meta != NULL)
80                buf = ostrcat(buf, meta, 1, 0);
81        buf = ostrcat(buf, "</head><body class=body>", 1, 0);
82        if(flag == 0)
83                buf = ostrcat(buf, "<center><table border=0 width=100%>", 1, 0);
84        else
85                buf = ostrcat(buf, "<center><table border=0 width=100% height=100%>", 1, 0);
86        return buf;
87}
88
89void webcreatechannelbody(char** buf, int line, struct channel* chnode, char* channellist, int* maxlen, int* pos, int flag, int fmt)
90{
91        char* tmpstr = NULL, *buf1 = NULL, *serviceid = NULL, *transponderid = NULL;
92        struct epg* epgnode = getepgakt(chnode);
93        int ret = 0, proz = 0;
94        struct tm *loctime = NULL;
95        time_t max = 0, akt = 0;
96
97        if(chnode == NULL) return;
98        ret = channelnottunable(chnode);
99
100        buf1 = malloc(MINMALLOC);
101        if(buf1 == NULL)
102        {
103                err("no mem");
104                return;
105        }
106
107        if(fmt == 0)
108        {
109                if(line == 0)
110                        ostrcatbig(buf, "<tr class=line1>", maxlen, pos);
111                else
112                        ostrcatbig(buf, "<tr class=line2>", maxlen, pos);
113        }
114
115        if(epgnode != NULL)
116        {
117                proz = (time(NULL) - epgnode->starttime) * 100 / (epgnode->endtime - epgnode->starttime);
118                if(proz > 100) proz = 100;
119                if(proz < 0) proz = 0;
120        }
121
122        if(fmt == 0)
123        {
124                ostrcatbig(buf, "<td width=100% valign=middle nowrap class=link><div class=timelineborder><div class=timelinebar style=\"width: ", maxlen, pos);
125                tmpstr = oitoa(proz);
126                ostrcatbig(buf, tmpstr, maxlen, pos);
127                free(tmpstr); tmpstr = NULL;
128                ostrcatbig(buf, "%;\"> </div></div>", maxlen, pos);
129        }
130
131        serviceid = oitoa(chnode->serviceid);
132        transponderid = ollutoa(chnode->transponderid);
133
134        if(fmt == 0 && ret == 0)
135        {
136                ostrcatbig(buf, "<a target=aktservice class=link href=query?switch&", maxlen, pos);
137                ostrcatbig(buf, serviceid, maxlen, pos);
138                ostrcatbig(buf, "&", maxlen, pos);
139                ostrcatbig(buf, transponderid, maxlen, pos);
140                ostrcatbig(buf, "&", maxlen, pos);
141                ostrcatbig(buf, channellist, maxlen, pos);
142                ostrcatbig(buf, ">", maxlen, pos);
143        }
144
145        if(fmt == 0)
146        {
147                ostrcatbig(buf, chnode->name, maxlen, pos);
148                if(ret == 0)
149                        ostrcatbig(buf, "</a>", maxlen, pos);
150        }
151        else
152        {
153                *buf = ostrcat(*buf, chnode->name, 1, 0);
154                *buf = ostrcat(*buf, "#", 1, 0);
155                *buf = ostrcat(*buf, oitoa(proz), 1, 1);
156                *buf = ostrcat(*buf, "#", 1, 0);
157                *buf = ostrcat(*buf, serviceid, 1, 0);
158                *buf = ostrcat(*buf, "#", 1, 0);
159                *buf = ostrcat(*buf, transponderid, 1, 0);
160                *buf = ostrcat(*buf, "#", 1, 0);
161                *buf = ostrcat(*buf, channellist, 1, 0);
162                *buf = ostrcat(*buf, "#", 1, 0);
163                *buf = ostrcat(*buf, oitoa(chnode->servicetype), 1, 1);
164                *buf = ostrcat(*buf, "#", 1, 0);
165                if(epgnode != NULL)
166                {
167                        *buf = ostrcat(*buf, oitoa(epgnode->eventid), 1, 1);
168                        *buf = ostrcat(*buf, "#", 1, 0);
169                        *buf = ostrcat(*buf, olutoa(epgnode->starttime), 1, 1);
170                        *buf = ostrcat(*buf, "#", 1, 0);
171                        *buf = ostrcat(*buf, epgnode->title, 1, 0);
172                        *buf = ostrcat(*buf, "#", 1, 0);
173                        if(epgnode->next != NULL)
174                        {
175                                *buf = ostrcat(*buf, olutoa(epgnode->next->starttime), 1, 1);
176                                *buf = ostrcat(*buf, "#", 1, 0);
177                                *buf = ostrcat(*buf, olutoa(epgnode->next->endtime), 1, 1);
178                                *buf = ostrcat(*buf, "#", 1, 0);
179                                *buf = ostrcat(*buf, epgnode->next->title, 1, 0);
180                                *buf = ostrcat(*buf, "#", 1, 0);
181                                *buf = ostrcat(*buf, oitoa(epgnode->next->eventid), 1, 1);
182                        }
183                        else
184                        {
185                                *buf = ostrcat(*buf, olutoa(epgnode->endtime), 1, 1);
186                                *buf = ostrcat(*buf, "#", 1, 0);
187                                *buf = ostrcat(*buf, "#", 1, 0);
188                                *buf = ostrcat(*buf, "#", 1, 0);
189                                *buf = ostrcat(*buf, "0", 1, 0);
190                        }
191                }
192                else
193                {
194                        *buf = ostrcat(*buf, "0", 1, 0);
195                        *buf = ostrcat(*buf, "#", 1, 0);
196                        *buf = ostrcat(*buf, "#", 1, 0);
197                        *buf = ostrcat(*buf, "#", 1, 0);
198                        *buf = ostrcat(*buf, "#", 1, 0);
199                        *buf = ostrcat(*buf, "#", 1, 0);
200                        *buf = ostrcat(*buf, "#", 1, 0);
201                        *buf = ostrcat(*buf, "0", 1, 0);
202                }
203                *buf = ostrcat(*buf, "#", 1, 0);
204
205                if(ret == 1)
206                        *buf = ostrcat(*buf, "1", 1, 0);
207                else
208                        *buf = ostrcat(*buf, "0", 1, 0);
209
210                *buf = ostrcat(*buf, "\n", 1, 0);
211        }
212
213        //akt epg
214        if(fmt == 0 && epgnode != NULL)
215        {
216                if(flag == 0)
217                        ostrcatbig(buf, "<br><a target=main class=smalllink href=query?getepg&", maxlen, pos);
218                else
219                        ostrcatbig(buf, " <a target=main class=smalllink href=query?getepg&", maxlen, pos);
220
221                ostrcatbig(buf, serviceid, maxlen, pos);
222                ostrcatbig(buf, "&", maxlen, pos);
223                ostrcatbig(buf, transponderid, maxlen, pos);
224                ostrcatbig(buf, "&", maxlen, pos);
225                tmpstr = oitoa(epgnode->eventid);
226                ostrcatbig(buf, tmpstr, maxlen, pos);
227                free(tmpstr); tmpstr = NULL;
228                ostrcatbig(buf, ">", maxlen, pos);
229
230                loctime = olocaltime(&epgnode->starttime);
231                if(loctime != NULL)
232                        strftime(buf1, MINMALLOC, "%H:%M -", loctime);
233                free(loctime); loctime = NULL;
234                loctime = olocaltime(&epgnode->endtime);
235                if(loctime != NULL)
236                        strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
237                free(loctime); loctime = NULL;
238
239                ostrcatbig(buf, buf1, maxlen, pos);
240                ostrcatbig(buf, epgnode->title, maxlen, pos);
241
242                max = (epgnode->endtime - epgnode->starttime) / 60;
243                akt = (time(NULL) - epgnode->starttime) / 60;
244                if(max < 0) max = 0;
245                if(akt < 0) akt = 0;
246                snprintf(buf1, MINMALLOC, " (%ld from %ld min, %d%%)", akt, max, proz);
247                ostrcatbig(buf, buf1, maxlen, pos);
248
249                ostrcatbig(buf, "</a>", maxlen, pos);
250
251                //next epg
252                epgnode = epgnode->next;
253                if(flag == 0 && epgnode != NULL)
254                {
255                        ostrcatbig(buf, "<br><a target=main class=smalllink href=query?getepg&", maxlen, pos);
256                        ostrcatbig(buf, serviceid, maxlen, pos);
257                        ostrcatbig(buf, "&", maxlen, pos);
258                        ostrcatbig(buf, transponderid, maxlen, pos);
259                        ostrcatbig(buf, "&", maxlen, pos);
260                        tmpstr = oitoa(epgnode->eventid);
261                        ostrcatbig(buf, tmpstr, maxlen, pos);
262                        free(tmpstr); tmpstr = NULL;
263                        ostrcatbig(buf, ">", maxlen, pos);
264
265                        loctime = olocaltime(&epgnode->starttime);
266                        if(loctime != NULL)
267                                strftime(buf1, 8, "%H:%M -", loctime);
268                        free(loctime); loctime = NULL;
269                        loctime = olocaltime(&epgnode->endtime);
270                        if(loctime != NULL)
271                                strftime(&buf1[7], 8, " %H:%M ", loctime);
272                        free(loctime); loctime = NULL;
273
274                        ostrcatbig(buf, buf1, maxlen, pos);
275                        ostrcatbig(buf, epgnode->title, maxlen, pos);
276                        ostrcatbig(buf, "</a>", maxlen, pos);
277                }
278        }
279
280        //tv - radio
281        if(fmt == 0)
282        {
283                if(chnode->servicetype == 0)
284                        ostrcatbig(buf, "</td><td width=100 align=right valign=middle nowrap><img style=\"margin-left: 5\" border=0 src=img/tv.png alt=TV width=16 height=16>", maxlen, pos);
285                else
286                        ostrcatbig(buf, "</td><td width=100 align=right valign=middle nowrap><img style=\"margin-left: 5\" border=0 src=img/radio.png alt=Radio width=16 height=16>", maxlen, pos);
287
288                //single epg
289                ostrcatbig(buf, "<a target=main href=query?getsingleepg&", maxlen, pos);
290                ostrcatbig(buf, serviceid, maxlen, pos);
291                ostrcatbig(buf, "&", maxlen, pos);
292                ostrcatbig(buf, transponderid, maxlen, pos);
293                ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/singleepg.png alt=\"Single EPG\" width=16 height=16></a>", maxlen, pos);
294
295                //m3u stream + webstream
296                if(ret == 0)
297                {
298                        ostrcatbig(buf, "<a target=nothing href=query?getm3u&", maxlen, pos);
299                        ostrcatbig(buf, serviceid, maxlen, pos);
300                        ostrcatbig(buf, ",", maxlen, pos);
301                        ostrcatbig(buf, transponderid, maxlen, pos);
302                        ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/stream.png alt=Stream width=16 height=16></a>", maxlen, pos);
303
304                        ostrcatbig(buf, "<a target=_blank href=query?getvideo&", maxlen, pos);
305                        ostrcatbig(buf, serviceid, maxlen, pos);
306                        ostrcatbig(buf, ",", maxlen, pos);
307                        ostrcatbig(buf, transponderid, maxlen, pos);
308                        ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/webstream.png alt=WebStream width=16 height=16></a>", maxlen, pos);
309                }
310                else
311                        ostrcatbig(buf, "<img style=\"margin-left: 5\" border=0 src=img/cross.png alt=\"Channel not availabel\" width=16 height=16>", maxlen, pos);
312                ostrcatbig(buf, "</td></tr>", maxlen, pos);
313        }
314
315        free(buf1);
316        free(serviceid);
317        free(transponderid);
318}
319
320char* webgetbouquetchannel(char* param, int fmt)
321{
322        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
323        struct mainbouquet *mbouquet = NULL;
324        struct bouquet *node = NULL;
325        struct channel* chnode = NULL;
326        int line = 0, maxlen = 0, pos = 0;
327
328        if(param == NULL) return NULL;
329
330        if(fmt == 0) webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=60>", &pos, 0);
331
332        mbouquet = getmainbouquet(param);
333        if(mbouquet != NULL)
334        {
335                node = mbouquet->bouquet;
336                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 1, 0);
337                tmpstr = ostrcat(tmpstr, mbouquet->name, 1, 0);
338                tmpstr1 = htmlencode(tmpstr);
339                free(tmpstr); tmpstr = NULL;
340                while(node != NULL)
341                {
342                        chnode = getchannel(node->serviceid, node->transponderid);
343                        if(chnode != NULL)
344                        {
345                                webcreatechannelbody(&buf, line, chnode, tmpstr1, &maxlen, &pos, 0, fmt);
346                                if(line == 0)
347                                        line = 1;
348                                else
349                                        line = 0;
350                        }
351                        node = node->next;
352                }
353                free(tmpstr1); tmpstr1 = NULL;
354        }
355        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
356
357        return buf;
358}
359
360//flag 0: all
361//flag 1: sat
362//flag 2: provider
363//flag 3: A-Z
364char* webgetchannel(int param, int flag, int page, int fmt)
365{
366        char* buf = NULL, *tmpnr = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
367        struct channel* chnode = channel;
368        int line = 0, maxcount = 0, maxlen = 0, pos = 0;
369
370        if(fmt == 0) webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=60>", &pos, 0);
371
372        if(flag == 0) tmpstr1 = ostrcat(tmpstr1, "(ALL)", 1, 0);
373        if(flag == 1)
374        {
375                struct sat* node = getsatbyorbitalpos(param);
376                if(node != NULL)
377                {
378                        tmpstr = ostrcat(tmpstr, "(SAT)-", 1, 0);
379                        tmpstr = ostrcat(tmpstr, node->name, 1, 0);
380                        tmpstr1 = htmlencode(tmpstr);
381                        free(tmpstr); tmpstr = NULL;
382                }
383        }
384        if(flag == 2)
385        {
386                struct provider* node = getprovider(param);
387                if(node != NULL)
388                {
389                        tmpstr = ostrcat(tmpstr, "(PROVIDER)-", 1, 0);
390                        tmpstr = ostrcat(tmpstr, node->name, 1, 0);
391                        tmpstr1 = htmlencode(tmpstr);
392                        free(tmpstr); tmpstr = NULL;
393                }
394        }
395        if(flag == 3)
396        {
397                tmpstr = malloc(2);
398                if(tmpstr != NULL)
399                        snprintf(tmpstr, 2, "%c", param);
400                tmpstr = ostrcat("(A-Z)-", tmpstr, 0, 1);
401                tmpstr1 = htmlencode(tmpstr);
402                free(tmpstr); tmpstr = NULL;
403        }
404
405        while(chnode != NULL)
406        {
407                if(chnode->transponder == NULL)
408                {
409                        chnode = chnode->next;
410                        continue;
411                }
412                if(chnode->name == NULL)
413                {
414                        chnode = chnode->next;
415                        continue;
416                }
417                if(flag == 1 && chnode->transponder->orbitalpos != param)
418                {
419                        chnode = chnode->next;
420                        continue;
421                }
422                if(flag == 2 && chnode->providerid != param)
423                {
424                        chnode = chnode->next;
425                        continue;
426                }
427                if(flag == 3 && chnode->name[0] != param && chnode->name[0] != param + 32)
428                {
429                        chnode = chnode->next;
430                        continue;
431                }
432
433                maxcount++;
434                if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
435                {
436                        chnode = chnode->next;
437                        continue;
438                }
439                webcreatechannelbody(&buf, line, chnode, tmpstr1, &maxlen, &pos, 0, fmt);
440
441                if(line == 0)
442                        line = 1;
443                else
444                        line = 0;
445
446                chnode = chnode->next;
447        }
448        free(tmpstr); tmpstr = NULL;
449
450        if(fmt == 0 && maxcount > MAXHTMLLINE)
451        {
452                int i;
453                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
454                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
455                {
456                        if(page == i)
457                                ostrcatbig(&buf, "<a class=pagesellink href=query?getchannelpage&", &maxlen, &pos);
458                        else
459                                ostrcatbig(&buf, "<a class=pagelink href=query?getchannelpage&", &maxlen, &pos);
460                        tmpnr = oitoa(param);
461                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
462                        ostrcatbig(&buf, "&", &maxlen, &pos);
463                        free(tmpnr); tmpnr = NULL;
464                        tmpnr = oitoa(flag);
465                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
466                        ostrcatbig(&buf, "&", &maxlen, &pos);
467                        free(tmpnr); tmpnr = NULL;
468
469                        tmpnr = oitoa(i);
470                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
471                        ostrcatbig(&buf, ">", &maxlen, &pos);
472                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
473                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
474                        free(tmpnr); tmpnr = NULL;
475                }
476                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
477        }
478
479        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
480        return buf;
481}
482
483char* webgetprovider(int fmt)
484{
485        char* buf = NULL, *tmpstr = NULL;
486        struct provider* node = provider;
487        int line = 0, maxlen = 0, pos = 0;
488
489        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
490
491        while(node != NULL)
492        {
493                if(fmt == 0)
494                {
495                        if(line == 0)
496                        {
497                                ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getproviderchannel&", &maxlen, &pos);
498                                tmpstr = oitoa(node->providerid);
499                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
500                                free(tmpstr); tmpstr = NULL;
501                                ostrcatbig(&buf, "\">", &maxlen, &pos);
502                                line = 1;
503                        }
504                        else
505                        {
506                                ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getproviderchannel&", &maxlen, &pos);
507                                tmpstr = oitoa(node->providerid);
508                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
509                                free(tmpstr); tmpstr = NULL;
510                                ostrcatbig(&buf, "\">", &maxlen, &pos);
511                                line = 0;
512                        }
513                        ostrcatbig(&buf, node->name, &maxlen, &pos);
514                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
515                }
516                else
517                {
518                        buf = ostrcat(buf, node->name, 1, 0);
519                        buf = ostrcat(buf, "#", 1, 0);
520                        buf = ostrcat(buf, oitoa(node->providerid), 1, 1);
521                        buf = ostrcat(buf, "\n", 1, 0);
522                }
523
524                node = node->next;
525        }
526
527        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
528        return buf;
529}
530
531char* webgetsat(int fmt)
532{
533        char* buf = NULL, *tmpstr = NULL;
534        struct sat* node = sat;
535        int line = 0, maxlen = 0, pos = 0;
536
537        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
538
539        while(node != NULL)
540        {
541                if(fmt == 0)
542                {
543                        if(line == 0)
544                        {
545                                ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getsatchannel&", &maxlen, &pos);
546                                tmpstr = oitoa(node->orbitalpos);
547                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
548                                free(tmpstr); tmpstr = NULL;
549                                ostrcatbig(&buf, "\">", &maxlen, &pos);
550                                line = 1;
551                        }
552                        else
553                        {
554                                ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getsatchannel&", &maxlen, &pos);
555                                tmpstr = oitoa(node->orbitalpos);
556                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
557                                free(tmpstr); tmpstr = NULL;
558                                ostrcatbig(&buf, "\">", &maxlen, &pos);
559                                line = 0;
560                        }
561                        ostrcatbig(&buf, node->name, &maxlen, &pos);
562                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
563                }
564                else
565                {
566                        buf = ostrcat(buf, node->name, 1, 0);
567                        buf = ostrcat(buf, "#", 1, 0);
568                        buf = ostrcat(buf, oitoa(node->orbitalpos), 1, 1);
569                        buf = ostrcat(buf, "\n", 1, 0);
570                }
571
572                node = node->next;
573        }
574
575        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
576        return buf;
577}
578
579char* webgetaz(int fmt)
580{
581        char* buf = NULL, *tmpstr = NULL, *tmpnr = NULL;
582        int line = 0, maxlen = 0, pos = 0, i;
583
584        tmpstr = malloc(2);
585        if(tmpstr == NULL)
586        {
587                err("no memory");
588                return NULL;
589        }
590
591        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
592
593        for(i = 65; i < 91; i++)
594        {
595                if(fmt == 0)
596                {
597                        if(line == 0)
598                        {
599                                ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getazchannel&", &maxlen, &pos);
600                                tmpnr = oitoa(i);
601                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
602                                free(tmpnr); tmpnr = NULL;
603                                ostrcatbig(&buf, "\">", &maxlen, &pos);
604                                line = 1;
605                        }
606                        else
607                        {
608                                ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getazchannel&", &maxlen, &pos);
609                                tmpnr = oitoa(i);
610                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
611                                free(tmpnr); tmpnr = NULL;
612                                ostrcatbig(&buf, "\">", &maxlen, &pos);
613                                line = 0;
614                        }
615                        snprintf(tmpstr, 2, "%c", i);
616                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
617                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
618                }
619                else
620                {
621                        snprintf(tmpstr, 2, "%c", i);
622                        buf = ostrcat(buf, tmpstr, 1, 0);
623                        buf = ostrcat(buf, "\n", 1, 0);
624                }
625        }
626
627        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
628        free(tmpstr);
629        return buf;
630}
631
632char* webgetbouquet(int fmt)
633{
634        char* buf = NULL;
635        struct mainbouquet* node = mainbouquet;
636        int line = 0, maxlen = 0, pos = 0;
637
638        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
639
640        while(node != NULL)
641        {
642                if(fmt == 0)
643                {
644                        if(line == 0)
645                        {
646                                ostrcatbig(&buf, "<tr class=line1><td width=100% nowrap><a class=link href=\"query?getbouquetchannel&", &maxlen, &pos);
647                                ostrcatbig(&buf, node->name, &maxlen, &pos);
648                                ostrcatbig(&buf, "\">", &maxlen, &pos);
649                                line = 1;
650                        }
651                        else
652                        {
653                                ostrcatbig(&buf, "<tr class=line2><td width=100% nowrap><a class=link href=\"query?getbouquetchannel&", &maxlen, &pos);
654                                ostrcatbig(&buf, node->name, &maxlen, &pos);
655                                ostrcatbig(&buf, "\">", &maxlen, &pos);
656                                line = 0;
657                        }
658                        ostrcatbig(&buf, node->name, &maxlen, &pos);
659                        ostrcatbig(&buf, "</a></td>", &maxlen, &pos);
660
661                        ostrcatbig(&buf, "<td width=50 nowrap align=right valign=middle><img style=\"margin-left: 5\" border=0 src=", &maxlen, &pos);
662
663                        if(node->type == 0)
664                                ostrcatbig(&buf, "img/tv.png width=16 height=16 alt=TV>", &maxlen, &pos);
665                        else
666                                ostrcatbig(&buf, "img/radio.png width=16 height=16 alt=Radio>", &maxlen, &pos);
667                        ostrcatbig(&buf, "<a href=\"query?getgmultiepg&", &maxlen, &pos);
668                        ostrcatbig(&buf, node->name, &maxlen, &pos);
669                        ostrcatbig(&buf, "\">", &maxlen, &pos);
670                        ostrcatbig(&buf, "<img style=\"margin-left: 5\" border=0 width=16 height=16 alt=\"Graphical Multi EPG\" src=img/gmultiepg.png></a>", &maxlen, &pos);
671                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
672                }
673                else
674                {
675                        buf = ostrcat(buf, node->name, 1, 0);
676                        buf = ostrcat(buf, "#", 1, 0);
677                        buf = ostrcat(buf, oitoa(node->type), 1, 1);
678                        buf = ostrcat(buf, "\n", 1, 0);
679                }
680
681                node = node->next;
682        }
683
684        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
685        return buf;
686}
687
688char* websetmute(char* param, int fmt)
689{
690        char* buf = NULL;
691        int mute = status.mute;
692
693        if(param != NULL)
694                mute = atoi(param);
695
696        if(fmt == 0)
697        {
698                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><center>", 1, 0);
699                if(mute == 0)
700                        buf = ostrcat(buf, "<a href=query?setmute&1><img src=img/speak_on.png border=0 alt=\"Mute on\"></img></a>", 1, 0);
701                else
702                        buf = ostrcat(buf, "<a href=query?setmute&0><img src=img/speak_off.png border=0 alt=\"Mute off\"></img></a>", 1, 0);
703                buf = ostrcat(buf, "</center></body></html>", 1, 0);
704        }
705        else
706        {
707                if(mute == 0)
708                        buf = ostrcat(buf, "0", 1, 0);
709                else
710                        buf = ostrcat(buf, "1", 1, 0);
711        }
712
713        if(mute != status.mute)
714                screenmute(NULL, NULL, 0);
715       
716        return buf;
717}
718
719char* websetvol(char* param, int fmt)
720{
721        char* buf = NULL;
722        int vol = 30;
723
724        if(param == NULL)
725                vol = getvol();
726        else
727                vol = atoi(param);
728
729        if(fmt == 0)
730        {
731                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><center>", 1, 0);
732                if(vol >=10)
733                        buf = ostrcat(buf, "<a href=query?setvol&10><img src=img/led_on.png border=0></img></a> ", 1, 0);
734                else
735                        buf = ostrcat(buf, "<a href=query?setvol&10><img src=img/led_off.png border=0></img></a> ", 1, 0);
736                if(vol >=20)
737                        buf = ostrcat(buf, "<a href=query?setvol&20><img src=img/led_on.png border=0></img></a> ", 1, 0);
738                else
739                        buf = ostrcat(buf, "<a href=query?setvol&20><img src=img/led_off.png border=0></img></a> ", 1, 0);
740                if(vol >=30)
741                        buf = ostrcat(buf, "<a href=query?setvol&30><img src=img/led_on.png border=0></img></a> ", 1, 0);
742                else
743                        buf = ostrcat(buf, "<a href=query?setvol&30><img src=img/led_off.png border=0></img></a> ", 1, 0);
744                if(vol >=40)
745                        buf = ostrcat(buf, "<a href=query?setvol&40><img src=img/led_on.png border=0></img></a> ", 1, 0);
746                else
747                        buf = ostrcat(buf, "<a href=query?setvol&40><img src=img/led_off.png border=0></img></a> ", 1, 0);
748                if(vol >=50)
749                        buf = ostrcat(buf, "<a href=query?setvol&50><img src=img/led_on.png border=0></img></a> ", 1, 0);
750                else
751                        buf = ostrcat(buf, "<a href=query?setvol&50><img src=img/led_off.png border=0></img></a> ", 1, 0);
752                if(vol >=60)
753                        buf = ostrcat(buf, "<a href=query?setvol&60><img src=img/led_on.png border=0></img></a> ", 1, 0);
754                else
755                        buf = ostrcat(buf, "<a href=query?setvol&60><img src=img/led_off.png border=0></img></a> ", 1, 0);
756                if(vol >=70)
757                        buf = ostrcat(buf, "<a href=query?setvol&70><img src=img/led_on.png border=0></img></a> ", 1, 0);
758                else
759                        buf = ostrcat(buf, "<a href=query?setvol&70><img src=img/led_off.png border=0></img></a> ", 1, 0);
760                if(vol >=80)
761                        buf = ostrcat(buf, "<a href=query?setvol&80><img src=img/led_on.png border=0></img></a> ", 1, 0);
762                else
763                        buf = ostrcat(buf, "<a href=query?setvol&80><img src=img/led_off.png border=0></img></a> ", 1, 0);
764                if(vol >=90)
765                        buf = ostrcat(buf, "<a href=query?setvol&90><img src=img/led_on.png border=0></img></a> ", 1, 0);
766                else
767                        buf = ostrcat(buf, "<a href=query?setvol&90><img src=img/led_off.png border=0></img></a> ", 1, 0);
768                if(vol >=100)
769                        buf = ostrcat(buf, "<a href=query?setvol&100><img src=img/led_on.png border=0></img></a> ", 1, 0);
770                else
771                        buf = ostrcat(buf, "<a href=query?setvol&100><img src=img/led_off.png border=0></img></a> ", 1, 0);
772                buf = ostrcat(buf, "</center></body></html>", 1, 0);
773        }
774        else
775                buf = ostrcat(buf, oitoa(vol), 1, 1);
776
777        if(param != NULL)
778        {
779                setvol(vol);
780                if(status.mute == 1)
781                        screenmute(NULL, NULL, 0);
782        }
783        return buf;
784}
785
786char* webgetaktservice(int fmt)
787{
788        char* buf = NULL;
789        struct channel* chnode = status.aktservice->channel;
790        int line = 0, maxlen = 0, pos = 0;
791
792        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 1);
793        webcreatechannelbody(&buf, line, chnode, getconfig("channellist", NULL), &maxlen, &pos ,1, fmt);
794        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 1);
795
796        return buf;
797}
798
799char* webgetservice(char* param, int fmt)
800{
801        char* buf = NULL, *param1 = NULL;
802        struct channel* chnode = NULL;
803        int line = 0, maxlen = 0, pos = 0;
804
805        if(param == NULL) return NULL;
806
807        //create param1
808        param1 = strchr(param, '&');
809        if(param1 != NULL)
810                *param1++ = '\0';
811
812        if(param1 == NULL) return NULL;
813
814        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
815
816        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 1);
817        webcreatechannelbody(&buf, line, chnode, getconfig("channellist", NULL), &maxlen, &pos ,1, fmt);
818        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 1);
819
820        return buf;
821}
822
823char* webswitch(char* param, int fmt)
824{
825        if(status.channelswitch == 1) goto end;
826
827        int ret = 0;
828        char* param1 = NULL, *param2 = NULL;
829        struct channel* chnode = NULL;
830
831        if(param == NULL) goto end;
832
833        //create param1
834        param1 = strchr(param, '&');
835        if(param1 != NULL)
836        {
837                *param1++ = '\0';
838                param2 = strchr(param1, '&');
839                if(param2 != NULL)
840                        *param2++ = '\0';
841        }
842
843        if(param1 == NULL && param2 == NULL) goto end;
844
845        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
846        if(chnode != NULL)
847        {
848                ret = channelnottunable(chnode);
849                if(ret == 0)
850                        ret = servicestart(chnode, param2, NULL, 0);
851        }
852
853end:
854        return webgetaktservice(fmt);
855}
856
857char* webgetm3u(char* param, int connfd, int fmt)
858{
859        int extip = 1;
860        char* buf = NULL, *ip = NULL, *tmpbuf = NULL;
861        struct sockaddr_in sin;
862        socklen_t len = sizeof(sin);
863
864        if(param == NULL) return NULL;
865
866        if(getconfigint("webifip", NULL) == 1)
867                ip = getispip();
868
869        if(ip == NULL)
870        {
871                if(getsockname(connfd, &sin, &len) < 0)
872                {
873                        perr("getsockname");
874                        return NULL;
875                }
876
877                extip = 0;
878                ip = inet_ntoa(sin.sin_addr);
879                        if(ip == NULL) return NULL;
880        }
881
882        buf = ostrcat(buf, "#EXTM3U\n", 1, 0);
883        buf = ostrcat(buf, "#EXTVLCOPT--http-reconnect=true\n", 1, 0);
884        buf = ostrcat(buf, "http://", 1, 0);
885        buf = ostrcat(buf, ip, 1, 0);
886        buf = ostrcat(buf, ":", 1, 0);
887        buf = ostrcat(buf, getconfig("streamport", NULL), 1, 0);
888        buf = ostrcat(buf, "/", 1, 0);
889
890        tmpbuf = htmlencode(param);
891        if(tmpbuf != NULL)
892                param = tmpbuf;
893
894        buf = ostrcat(buf, param, 1, 0);
895        free(tmpbuf); tmpbuf = NULL;
896
897        if(extip == 1) free(ip);
898        return buf;
899}
900
901char* webgetvideo(char* param, int connfd, int fmt)
902{
903        int extip = 1;
904        char* buf = NULL, *ip = NULL, *tmpbuf = NULL;
905        struct sockaddr_in sin;
906        socklen_t len = sizeof(sin);
907
908        if(param == NULL) return NULL;
909
910        if(getconfigint("webifip", NULL) == 1)
911                ip = getispip();
912
913        if(ip == NULL)
914        {
915                if(getsockname(connfd, &sin, &len) < 0)
916                {
917                        perr("getsockname");
918                        return NULL;
919                }
920
921                extip = 0;
922                ip = inet_ntoa(sin.sin_addr);
923                if(ip == NULL) return NULL;
924        }
925
926        if(fmt == 0)
927        {
928                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><table border=0 width=100% height=100%><tr><td align=center valign=middle>", 1, 0);
929                buf = ostrcat(buf, "<embed width=100% height=100% type=application/x-vlc-plugin name=video autoplay=yes target=\"http://", 1, 0);
930        }
931        else
932                buf = ostrcat(buf, "http://", 1, 0);
933
934        buf = ostrcat(buf, ip, 1, 0);
935        buf = ostrcat(buf, ":", 1, 0);
936        buf = ostrcat(buf, getconfig("streamport", NULL), 1, 0);
937        buf = ostrcat(buf, "/", 1, 0);
938
939        tmpbuf = htmlencode(param);
940        if(tmpbuf != NULL)
941                param = tmpbuf;
942
943        buf = ostrcat(buf, param, 1, 0);
944        free(tmpbuf); tmpbuf = NULL;
945
946        if(fmt == 0)
947        {
948                buf = ostrcat(buf, "\" />", 1, 0);
949                //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.play()'>Play</a>", 1, 0);
950                //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.stop()'>Stop</a>", 1, 0);
951                //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.fullscreen()'>Fullscreen</a>", 1, 0);
952                buf = ostrcat(buf, "</td></tr></body></html>", 1, 0);
953        }
954
955        if(extip == 1) free(ip);
956        return buf;
957}
958
959char* webvideo(char* param, int fmt)
960{
961        char* buf = NULL, *param1 = NULL, *tmpbuf = NULL;
962
963        if(param == NULL) return NULL;
964
965        if(ostrcmp("status", param) == 0) // status is only available for queryraw
966        {
967                char buf[30];
968                int active = (status.webplayfile != NULL ? 1 : 0);
969                int st = 0; // status, 0: paused, 1: playing
970                unsigned long pos = 0; // current position
971                unsigned long len = 0; // stream length
972               
973                if(status.play == 1)
974                        st = 1;
975               
976                if(active == 1)
977                {
978                        pos = playergetpts() / 90000;
979                        len = playergetlength();
980                }
981               
982                snprintf(buf, 30, "%d#%d#%lu#%lu", active, st, pos, len);
983               
984                return ostrcat(buf, NULL, 0, 0);
985        }
986
987        //create param1
988        param1 = strchr(param, '&');
989        if(param1 != NULL)
990                *param1++ = '\0';
991
992        if(param1 == NULL) return NULL;
993
994        htmldecode(param1, param1);
995        if(param1 != NULL)
996        {
997                if(status.play == 0 && status.webplayfile == NULL)
998                {
999                        if(ostrstr(param1, "url=") == param1)
1000                                status.webplayfile = ostrcat(param1 + 4, NULL, 0, 0);
1001                        else if(ostrstr(param1, "hosterurl=") == param1)
1002                        {
1003                                status.webplayfile = ostrcat(param1 + 10, NULL, 0, 0);
1004
1005                                // stream over tithek enable start
1006                                printf("status.webplayfile: %s\n",status.webplayfile);
1007                                struct skin* tithekplugin = getplugin("TiTan Mediathek");
1008                                if(tithekplugin != NULL)
1009                                {
1010                                        struct tithek* (*startplugin)(char*);
1011               
1012                                        startplugin = dlsym(tithekplugin->pluginhandle, "hoster");
1013                                        if(startplugin != NULL)
1014                                        {
1015                                                status.webplayfile = (char*)startplugin(status.webplayfile);
1016                                                printf("status.webplayfile changed: %s\n",status.webplayfile);
1017                                        }
1018                                }
1019                                // stream over tithek enable end
1020                        }
1021                        else
1022                                status.webplayfile = ostrcat(param1, NULL, 0, 0);
1023                }
1024        }
1025        tmpbuf = ostrcat("not in play mode", NULL, 0, 0);
1026   
1027        int count = 0;
1028        if(status.timeshift == 0 && status.play == 0 && (ostrcmp("play", param) == 0 || ostrcmp("play=", param) == 0))
1029        {
1030                int count = 0;
1031
1032                int rcret = getrcconfigint("rcwebplay", NULL);
1033                if(rcret == 0) rcret = getrcconfigint("rcarchive", NULL);
1034                if(rcret == 0) rcret = getrcconfigint("rcplay", NULL);
1035                writerc(rcret);
1036                while(status.play == 0 && count < 30)
1037                {
1038                        usleep(100000);
1039                        count++;
1040                }
1041        }
1042        else
1043                count = 31;
1044
1045        if(count >= 30 && status.play == 0)
1046        {
1047                free(status.webplayfile); status.webplayfile = NULL;
1048                free(tmpbuf); tmpbuf = NULL;
1049                tmpbuf = ostrcat("can not start playback", NULL, 0, 0);
1050        }
1051
1052        if(status.timeshift == 0 && status.play == 1)
1053        {
1054                if(ostrcmp("stop", param) == 0 || ostrcmp("stop=", param) == 0)
1055                        writerc(getrcconfigint("rcstop", NULL));
1056
1057                if(ostrcmp("pause", param) == 0 || ostrcmp("pause=", param) == 0)
1058                        writerc(getrcconfigint("rcpause", NULL));
1059   
1060                if(ostrcmp("ff", param) == 0 || ostrcmp("ff=", param) == 0)
1061                        writerc(getrcconfigint("rcff", NULL));
1062   
1063                if(ostrcmp("fr", param) == 0 || ostrcmp("fr=", param) == 0)
1064                        writerc(getrcconfigint("rcfr", NULL));
1065
1066                free(tmpbuf); tmpbuf = NULL;
1067                tmpbuf = ostrcat(param, NULL, 0, 0);
1068
1069                if(ostrcmp("getlen", param) == 0 || ostrcmp("getlen=", param) == 0)
1070                {
1071                        unsigned long len = 0;
1072                        free(tmpbuf); tmpbuf = NULL;
1073   
1074                        len = playergetlength();
1075                        tmpbuf = ostrcat(buf, olutoa(len), 1, 1);
1076                }
1077 
1078                if(ostrcmp("getpos", param) == 0 || ostrcmp("getpos=", param) == 0)
1079                {
1080                        unsigned long pos = 0;
1081                        free(tmpbuf); tmpbuf = NULL;
1082   
1083                        pos = playergetpts() / 90000;
1084                        tmpbuf = ostrcat(buf, olutoa(pos), 1, 1);
1085                }
1086 
1087                if(ostrcmp("getisplaying", param) == 0 || ostrcmp("getisplaying=", param) == 0)
1088                {
1089                        int playing = 0;
1090                        free(tmpbuf); tmpbuf = NULL;
1091   
1092                        playing = playerisplaying();
1093                        tmpbuf = ostrcat(buf, oitoa(playing), 1, 1);
1094                }
1095 
1096                if(ostrcmp("getplayercan", param) == 0 || ostrcmp("getplayercan=", param) == 0)
1097                {
1098                        free(tmpbuf); tmpbuf = NULL;
1099                        tmpbuf = ostrcat(buf, olutoa(status.playercan), 1, 1);
1100                }
1101        }
1102
1103        if(fmt == 0)
1104        {
1105                buf = webcreatehead(buf, NULL, 1);
1106                buf = ostrcat(buf, "<tr><td align=center valign=top><font class=biglabel><br><br>Video ", 1, 0);
1107                buf = ostrcat(buf, tmpbuf, 1, 1);
1108                buf = ostrcat(buf, " !!!</font></td></tr>", 1, 0);
1109                buf = webcreatetail(buf, 1);
1110        }
1111        else
1112                buf = ostrcat(buf, tmpbuf, 1, 1);
1113 
1114        return buf;
1115}
1116
1117char* webgetchannelpage(char* param, int fmt)
1118{
1119        char* param1 = NULL, *param2 = NULL;
1120
1121        if(param == NULL) return NULL;
1122
1123        //create param1 + 2
1124        param1 = strchr(param, '&');
1125        if(param1 != NULL)
1126        {
1127                *param1++ = '\0';
1128                param2 = strchr(param1, '&');
1129                if(param2 != NULL)
1130                        *param2++ = '\0';
1131        }
1132
1133        if(param1 == NULL || param2 == NULL) return NULL;
1134
1135        return webgetchannel(atoi(param), atoi(param1), atoi(param2), fmt);
1136}
1137
1138void webmessage(struct stimerthread* timernode, char* text, int flag)
1139{
1140        textbox(_("Message"), text, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
1141        free(text);
1142}
1143
1144char* websendmessage(char* param, int fmt)
1145{
1146        char* text = NULL, *buf = NULL;
1147
1148        if(param == NULL) return NULL;
1149        param = strchr(param, '=');
1150        if(param != NULL)
1151        {
1152                param++;
1153                stringreplacechar(param, '+', ' ');
1154                text = ostrcat(text, param, 1, 0);
1155        }
1156        addtimer(&webmessage, START, 1000, 1, (void*)text, NULL, NULL);
1157
1158        if(fmt == 0)
1159        {
1160                buf = webcreatehead(buf, NULL, 1);
1161                buf = ostrcat(buf, "<tr><td align=center valign=top><font class=biglabel><br><br>Message Send !!!</font></td></tr>", 1, 0);
1162                buf = webcreatetail(buf, 1);
1163        }
1164        else
1165                buf = ostrcat(buf, "Message Send", 1, 0);
1166               
1167        return buf;
1168}
1169
1170char* webgetsignal(int fmt)
1171{
1172        char* buf = NULL, *tmpnr = NULL;
1173        uint16_t snr = 0, signal = 0;
1174        uint32_t ber = 0, unc = 0;
1175
1176        ber = fereadber(status.aktservice->fedev);
1177        unc = fereaduncorrectedblocks(status.aktservice->fedev);
1178        signal = fereadsignalstrength(status.aktservice->fedev);
1179        snr = fereadsnr(status.aktservice->fedev);
1180        snr = (snr * 100) / 0xffff;
1181
1182        if(fmt == 0)
1183        {
1184                buf = webcreatehead(buf, "<meta http-equiv=refresh content=1>", 0);
1185
1186                buf = ostrcat(buf, "<tr><td align=center><font class=biglabel><br><br>BER: ", 1, 0);
1187                tmpnr = oitoa(ber);
1188                buf = ostrcat(buf, tmpnr, 1, 0);
1189                free(tmpnr); tmpnr = NULL;
1190
1191                buf = ostrcat(buf, "<br>UNC: ", 1, 0);
1192                tmpnr = oitoa(unc);
1193                buf = ostrcat(buf, tmpnr, 1, 0);
1194                free(tmpnr); tmpnr = NULL;
1195
1196                buf = ostrcat(buf, "<br>SIG: ", 1, 0);
1197                tmpnr = oitoa(signal);
1198                buf = ostrcat(buf, tmpnr, 1, 0);
1199                free(tmpnr); tmpnr = NULL;
1200
1201                buf = ostrcat(buf, "<br>SNR: ", 1, 0);
1202                tmpnr = oitoa(snr);
1203                buf = ostrcat(buf, tmpnr, 1, 0);
1204                free(tmpnr); tmpnr = NULL;
1205
1206                buf = ostrcat(buf, "</font></td></tr>", 1, 0);
1207                buf = webcreatetail(buf, 0);
1208        }
1209        else
1210        {
1211                buf = ostrcat(buf, oitoa(ber), 1, 1);
1212                buf = ostrcat(buf, "#", 1, 0);
1213                buf = ostrcat(buf, oitoa(unc), 1, 1);
1214                buf = ostrcat(buf, "#", 1, 0);
1215                buf = ostrcat(buf, oitoa(signal), 1, 1);
1216                buf = ostrcat(buf, "#", 1, 0);
1217                buf = ostrcat(buf, oitoa(snr), 1, 1);
1218        }
1219
1220        return buf;
1221}
1222
1223char* webgetepg(char* param, int fmt)
1224{
1225        char* buf = NULL, *buf1 = NULL, *tmpstr = NULL, *param1 = NULL, *param2 = NULL;
1226        struct epg* epgnode = NULL;
1227        struct channel* chnode = NULL;
1228        struct tm *loctime = NULL;
1229
1230        if(param == NULL) return NULL;
1231
1232        //create param1 + 2
1233        param1 = strchr(param, '&');
1234        if(param1 != NULL)
1235        {
1236                *param1++ = '\0';
1237                param2 = strchr(param1, '&');
1238                if(param2 != NULL)
1239                        *param2++ = '\0';
1240        }
1241
1242        if(param1 == NULL || param2 == NULL) return NULL;
1243
1244        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
1245        if(chnode == NULL) return NULL;
1246
1247        epgnode = getepg(chnode, atoi(param2), 0);
1248        if(epgnode == NULL) return NULL;
1249
1250        if(fmt == 0) buf = webcreatehead(buf, NULL, 0);
1251
1252        buf1 = malloc(MINMALLOC);
1253        if(buf1 == NULL)
1254        {
1255                err("no mem");
1256                return buf;
1257        }
1258
1259        buf = ostrcat(buf, "<tr class=channelname><td><h4 style=\"margin:2px 0px\">", 1, 0);
1260        buf = ostrcat(buf, chnode->name, 1, 0);
1261        buf = ostrcat(buf, "</h4></td></tr>", 1, 0);
1262
1263        if(fmt == 0) buf = ostrcat(buf, "<tr><td><font class=biglabel>", 1, 0);
1264        if(epgnode->title != NULL)
1265        {
1266                buf = ostrcat(buf, epgnode->title, 1, 0);
1267                if(fmt == 0)
1268                {
1269                        buf = ostrcat(buf, " (", 1, 0);
1270                        loctime = olocaltime(&epgnode->starttime);
1271                        if(loctime != NULL)
1272                                strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1273                        free(loctime); loctime = NULL;
1274                        loctime = olocaltime(&epgnode->endtime);
1275                        if(loctime != NULL)
1276                                strftime(&buf1[7], MINMALLOC - 8, " %H:%M", loctime);
1277                        free(loctime); loctime = NULL;
1278                        buf = ostrcat(buf, buf1, 1, 0);
1279                        buf = ostrcat(buf, ")", 1, 0);
1280                }
1281        }
1282        if(fmt == 0)
1283        {
1284                buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
1285                buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
1286        }
1287        else
1288        {
1289                buf = ostrcat(buf, "#", 1, 0);
1290                buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
1291                buf = ostrcat(buf, "#", 1, 0);
1292                buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
1293                buf = ostrcat(buf, "#", 1, 0);
1294        }
1295
1296        if(epgnode->subtitle != NULL)
1297                buf = ostrcat(buf, epgnode->subtitle, 1, 0);
1298
1299        if(fmt == 0)
1300        {
1301                buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
1302                buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
1303        }
1304        else
1305                buf = ostrcat(buf, "#", 1, 0);
1306
1307        tmpstr = epgdescunzip(epgnode);
1308        if(tmpstr != NULL)
1309                buf = ostrcat(buf, tmpstr, 1, 0);
1310        free(tmpstr); tmpstr = NULL;
1311
1312        if(fmt == 0)
1313        {
1314                buf = ostrcat(buf, "</font></td></tr>", 1, 0);
1315                buf = webcreatetail(buf, 0);
1316        }
1317
1318        free(buf1);
1319        return buf;
1320}
1321
1322char* webgetsingleepg(char* param, int fmt)
1323{
1324        int line = 0, maxlen = 0, pos = 0, longdesc = 1;
1325        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *param1 = NULL, *param2 = NULL, *tmpstr = NULL;
1326        struct epg* epgnode = NULL;
1327        struct channel* chnode = NULL;
1328        struct tm *loctime = NULL;
1329       
1330        if(param == NULL) return NULL;
1331
1332        //create param1 + 2
1333        param1 = strchr(param, '&');
1334        if(param1 != NULL)
1335        {
1336                *param1++ = '\0';
1337                param2 = strchr(param1, '&');
1338                if(param2 != NULL)
1339                        *param2++ = '\0';
1340        }
1341
1342        if(param1 == NULL) return NULL;
1343        if(param2 != NULL) longdesc = atoi(param2);
1344
1345        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
1346        if(chnode == NULL) return NULL;
1347        epgnode = getepgakt(chnode);;
1348
1349        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1350
1351        buf1 = malloc(MINMALLOC);
1352        if(buf1 == NULL)
1353        {
1354                err("no mem");
1355                return buf;
1356        }
1357
1358        ostrcatbig(&buf, "<tr class=channelname><td colspan=4><h4 style=\"margin:2px 0px\">", &maxlen, &pos);
1359        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1360        ostrcatbig(&buf, "</h4></td></tr>", &maxlen, &pos);
1361        ostrcatbig(&buf, "<tr class=tabledesc><td width=70px align=center>Datum</td><td width=70px align=center>Uhrzeit</td><td align=left>Beschreibung</td><td width=50px align=center>Timer</td></tr>", &maxlen, &pos);
1362       
1363        while(epgnode != NULL)
1364        {
1365                if(fmt == 0)
1366                {
1367                        if(line == 0)
1368                        {
1369                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1370                                line = 1;
1371                        }
1372                        else
1373                        {
1374                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1375                                line = 0;
1376                        }
1377
1378                        loctime = olocaltime(&epgnode->starttime);
1379                        if(loctime != NULL)
1380                                strftime(buf1, MINMALLOC, "%d.%m", loctime);
1381                        ostrcatbig(&buf, "<td nowrap class=coldate>", &maxlen, &pos);
1382                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1383                        if(loctime != NULL)
1384                                strftime(buf1, MINMALLOC, "%H.%M", loctime);
1385                        ostrcatbig(&buf, "</td><td nowrap class=coltime>", &maxlen, &pos);
1386                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1387                        free(loctime); loctime = NULL; 
1388                       
1389                        ostrcatbig(&buf, "</td><td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1390                        tmpstr = oitoa(chnode->serviceid);
1391                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1392                        buf2 = ostrcat("<td nowrap class=linkimage><a target=main class=link href=query?addrectimer&", tmpstr, 0, 0);
1393                        buf2 = ostrcat(buf2, "&", 0, 0);
1394                        free(tmpstr); tmpstr = NULL;
1395                        ostrcatbig(&buf, "&", &maxlen, &pos);
1396                        tmpstr = ollutoa(chnode->transponderid);
1397                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1398                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1399                        buf2 = ostrcat(buf2, "&", 0, 0);
1400                        free(tmpstr); tmpstr = NULL;
1401                        ostrcatbig(&buf, "&", &maxlen, &pos);
1402                        tmpstr = oitoa(epgnode->eventid);
1403                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1404                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1405                        buf2 = ostrcat(buf2, ">", 0, 0);
1406                        free(tmpstr); tmpstr = NULL;
1407                        ostrcatbig(&buf, ">", &maxlen, &pos);
1408
1409                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1410                        if(epgnode->subtitle != NULL)
1411                        {
1412                                ostrcatbig(&buf, " (", &maxlen, &pos);
1413                                ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1414                                ostrcatbig(&buf, ")", &maxlen, &pos);
1415                        }
1416
1417                        ostrcatbig(&buf, "</a></td>", &maxlen, &pos);
1418                        ostrcatbig(&buf, buf2, &maxlen, &pos);
1419                       
1420                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/timer.png alt=\"set timer\"/>", &maxlen, &pos);
1421                        ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1422                }
1423                else
1424                {
1425                        buf = ostrcat(buf, epgnode->title, 1, 0);
1426                        buf = ostrcat(buf, "#", 1, 0);
1427                        buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
1428                        buf = ostrcat(buf, "#", 1, 0);
1429                        buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
1430                        buf = ostrcat(buf, "#", 1, 0);
1431                        buf = ostrcat(buf, epgnode->subtitle, 1, 0);
1432                        buf = ostrcat(buf, "#", 1, 0);
1433                        if(longdesc == 1)
1434                        {
1435                                tmpstr = epgdescunzip(epgnode);
1436                                if(tmpstr != NULL)
1437                                        buf = ostrcat(buf, tmpstr, 1, 0);
1438                                free(tmpstr); tmpstr = NULL;
1439                        }
1440                        buf = ostrcat(buf, "#", 1, 0);
1441                        buf = ostrcat(buf, oitoa(epgnode->eventid), 1, 1);
1442                        buf = ostrcat(buf, "\n", 1, 0);
1443                }
1444       
1445                epgnode = epgnode->next;
1446                free(buf2); buf2 = NULL;
1447        }
1448
1449        if(fmt == 0)
1450                webcreatetailbig(&buf, &maxlen, &pos, 0);
1451        else if(buf == NULL)
1452                buf = ostrcat("no data", NULL, 0, 0);
1453
1454        free(buf1);
1455        return buf;
1456}
1457
1458//TODO: create rectimer line
1459void webcalcrecline(char** buf, int* maxlen, int* pos)
1460{
1461        //ostrcatbig(buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed\"><tr><td width=500 style=\"background-color: c0c0c0; height: 2; border-left: 2px solid #303030;\"></td></tr></table>", maxlen, pos);
1462}
1463
1464char* webgetgmultiepg(char* param, int fmt)
1465{
1466        int page = 1, i, line = 0, treffer = 0, maxlen = 0, pos = 0;
1467        char* buf = NULL, *tmpnr = NULL, *param1 = NULL;
1468        struct mainbouquet *mbouquet = NULL;
1469        struct bouquet *node = NULL;
1470        struct channel* chnode = NULL;
1471        struct epg* epgnode = NULL;
1472        time_t akttime = 0, difftime = 0, starttime = 0, endtime = 0, lastendtime = 0;
1473
1474        if(param == NULL) return NULL;
1475
1476        //create param1
1477        param1 = strchr(param, '&');
1478        if(param1 != NULL)
1479                *param1++ = '\0';
1480
1481        if(param1 != NULL) page = atoi(param1);
1482
1483        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100% height=100%><tr><td height=100%><table cellpadding=0 cellspacing=0 border=0 id=gmultiepg class=scrolltable style=\"table-layout: fixed;\" cellpadding=0><thead><tr>", &maxlen, &pos);
1484
1485        akttime = webcreatetimeline(&buf, &maxlen, &pos);
1486        akttime += ((page - 1) * 1440);
1487        ostrcatbig(&buf, "</tr></thead><tbody>", &maxlen, &pos);
1488
1489        mbouquet = getmainbouquet(param);
1490        if(mbouquet != NULL)
1491        {
1492                node = mbouquet->bouquet;
1493                while(node != NULL)
1494                {
1495                        chnode = getchannel(node->serviceid, node->transponderid);
1496                        if(chnode != NULL)
1497                        {
1498                                if(line == 0)
1499                                {
1500                                        ostrcatbig(&buf, "<tr><th class=gepgchannel1>", &maxlen, &pos);
1501                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1502                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1503                                        webcalcrecline(&buf, &maxlen, &pos);
1504                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line1>", &maxlen, &pos);
1505                                        line = 1;
1506                                }
1507                                else
1508                                {
1509                                        ostrcatbig(&buf, "<tr><th class=gepgchannel2>", &maxlen, &pos);
1510                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1511                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1512                                        webcalcrecline(&buf, &maxlen, &pos);
1513
1514                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line2>", &maxlen, &pos);
1515                                        line = 0;
1516                                }
1517
1518                                treffer = 0;
1519                                lastendtime = 0;
1520                                epgnode = getepgakt(chnode);
1521                                while(epgnode != NULL)
1522                                {
1523                                        treffer = 1;
1524                                        starttime = epgnode->starttime / 60;
1525                                        endtime = epgnode->endtime / 60;
1526
1527                                        if(endtime <= starttime || starttime >= akttime + 1440)
1528                                        {
1529                                                epgnode = epgnode->next;
1530                                                continue;
1531                                        }
1532
1533                                        //check if old endtime > new starttime
1534                                        if(lastendtime > 0 && starttime > lastendtime)
1535                                        {
1536                                                difftime = (starttime - lastendtime) * 5;
1537
1538                                                if(difftime <= 0)
1539                                                {
1540                                                        epgnode = epgnode->next;
1541                                                        continue;
1542                                                }
1543
1544                                                ostrcatbig(&buf, "<td class=gepgcellblank style=\"", &maxlen, &pos);
1545                                                tmpnr = oitoa(difftime);
1546                                                ostrcatbig(&buf, "width:", &maxlen, &pos);
1547                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1548                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1549                                                ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1550                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1551                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1552                                                ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1553                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1554                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1555                                                free(tmpnr); tmpnr = NULL;
1556
1557                                                ostrcatbig(&buf, "\"> </td>", &maxlen, &pos);
1558                                        }
1559
1560                                        //check if starttime < last endtime
1561                                        if(starttime < lastendtime)
1562                                                starttime = lastendtime;
1563
1564                                        //check if endtime is in next day
1565                                        if(endtime > akttime + 1440)
1566                                                endtime = endtime - (endtime - (akttime + 1440));
1567
1568                                        //check if starttime is in prev day
1569                                        if(starttime < akttime)
1570                                                difftime = (endtime - akttime) * 5;
1571                                        else
1572                                                difftime = (endtime - starttime) * 5;
1573
1574                                        if(difftime <= 0)
1575                                        {
1576                                                epgnode = epgnode->next;
1577                                                continue;
1578                                        }
1579
1580                                        lastendtime = endtime;
1581
1582                                        ostrcatbig(&buf, "<td class=gepgcell style=\"", &maxlen, &pos);
1583                                        tmpnr = oitoa(difftime);
1584                                        ostrcatbig(&buf, "width:", &maxlen, &pos);
1585                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1586                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1587                                        ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1588                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1589                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1590                                        ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1591                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1592                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1593                                        free(tmpnr); tmpnr = NULL;
1594
1595                                        ostrcatbig(&buf, "\"><div class=gepgcellborder>", &maxlen, &pos);
1596                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1597                                        ostrcatbig(&buf, "</div></div></td>", &maxlen, &pos);
1598                                       
1599                                        epgnode = epgnode->next;
1600                                }
1601                                if(treffer == 0)
1602                                        ostrcatbig(&buf, "<td class=gepgcellblank> </td>", &maxlen, &pos);
1603                        }
1604                        ostrcatbig(&buf, "</tr></table></td></tr>", &maxlen, &pos);
1605
1606                        node = node->next;
1607                }
1608        }
1609        ostrcatbig(&buf, "<script type=text/javascript>if(typeof tableScroll == 'function'){tableScroll('gmultiepg');}</script></tbody></table></td></tr><tr><td align=center>", &maxlen, &pos);
1610
1611        for(i = 1; i <= 14; i++)
1612        {
1613                if(page == i)
1614                        ostrcatbig(&buf, "<a class=pagesellink href=\"query?getgmultiepg&", &maxlen, &pos);
1615                else
1616                        ostrcatbig(&buf, "<a class=pagelink href=\"query?getgmultiepg&", &maxlen, &pos);
1617                ostrcatbig(&buf, param, &maxlen, &pos);
1618                ostrcatbig(&buf, "&", &maxlen, &pos);
1619                tmpnr = oitoa(i);
1620                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1621                ostrcatbig(&buf, "\">", &maxlen, &pos);
1622                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1623                ostrcatbig(&buf, "</a>", &maxlen, &pos);
1624                free(tmpnr); tmpnr = NULL;
1625        }
1626       
1627        ostrcatbig(&buf, "</td></tr></table></center></body></html>", &maxlen, &pos);
1628        return buf;
1629}
1630
1631char* webgetdrawcount(char* param, int fmt)
1632{
1633        return oitoa(status.drawscreencount);
1634}
1635
1636void webgetshoot(char* param, int fmt)
1637{
1638        printf("param: %s\n",param);
1639        printf("parm: %d\n",fmt);
1640        screenshoot(atoi(param));
1641}
1642
1643char* webgetepgsearch(char* query, char* param, int fmt)
1644{
1645        int line = 0, maxlen = 0, pos = 0, maxcount = 0, page = 1, newchannel = 0, longepg = 0;
1646        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *tmpstr = NULL, *tmpnr = NULL, *param1 = NULL, *param2 = NULL;
1647        struct channel* chnode = channel;
1648        struct epg* epgnode = NULL;
1649        struct tm *loctime = NULL;
1650
1651        if(query == NULL) return NULL;
1652
1653        if(param == NULL)
1654        {
1655                query = strchr(query, '=');
1656                if(query != NULL)
1657                {
1658                        query++;
1659                        stringreplacechar(param, '+', ' ');
1660                        param = query;
1661                }
1662        }
1663        else
1664        {
1665                //create param1 + 2
1666                param1 = strchr(param, '&');
1667                if(param1 != NULL)
1668                {
1669                        *param1++ = '\0';
1670                        param2 = strchr(param1, '&');
1671                        if(param2 != NULL)
1672                                *param2++ = '\0';
1673                }
1674        }
1675
1676        if(param1 != NULL) page = atoi(param1);
1677        if(param2 != NULL) longepg = atoi(param2);
1678
1679        buf1 = malloc(MINMALLOC);
1680        if(buf1 == NULL)
1681        {
1682                err("no mem");
1683                return buf;
1684        }
1685
1686        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1687        while(chnode != NULL)
1688        {
1689                newchannel = 1;
1690                epgnode = getepgakt(chnode);
1691                while(epgnode != NULL)
1692                {
1693                        if(epgnode->title != NULL && ostrstrcase(epgnode->title, param) != NULL)
1694                        {
1695
1696                                maxcount++;
1697
1698                                if(page >= 0)
1699                                {
1700                                        if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1701                                        {
1702                                                epgnode = epgnode->next;
1703                                                continue;
1704                                        }
1705                                }
1706
1707                                if(fmt == 0)
1708                                {
1709                                        if(line == 0)
1710                                        {
1711                                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1712                                                line = 1;
1713                                        }
1714                                        else
1715                                        {
1716                                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1717                                                line = 0;
1718                                        }
1719                                }
1720
1721                                if(fmt == 1 && newchannel == 1)
1722                                {
1723                                        newchannel = 0;
1724                                        ostrcatbig(&buf, "BeginNewChannel", &maxlen, &pos);
1725                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1726                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1727                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1728                                        tmpstr = oitoa(chnode->serviceid);
1729                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1730                                        free(tmpstr); tmpstr = NULL;
1731                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1732                                        tmpstr = ollutoa(chnode->transponderid);
1733                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1734                                        free(tmpstr); tmpstr = NULL;
1735                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1736                                        tmpstr = oitoa(chnode->servicetype);
1737                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1738                                        free(tmpstr); tmpstr = NULL;
1739                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1740                                }
1741
1742                                if(fmt == 0)
1743                                {
1744                                        ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1745                                        tmpstr = oitoa(chnode->serviceid);
1746                                        buf2 = ostrcat("<td nowrap><a target=main class=link href=query?addrectimer&", tmpstr, 0, 0);
1747                                        buf2 = ostrcat(buf2, "&", 0, 0);
1748                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1749                                        free(tmpstr); tmpstr = NULL;
1750                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1751                                        tmpstr = ollutoa(chnode->transponderid);
1752                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1753                                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1754                                        buf2 = ostrcat(buf2, "&", 0, 0);
1755                                        free(tmpstr); tmpstr = NULL;
1756                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1757                                        tmpstr = oitoa(epgnode->eventid);
1758                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1759                                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1760                                        buf2 = ostrcat(buf2, ">", 0, 0);
1761                                        free(tmpstr); tmpstr = NULL;
1762                                        ostrcatbig(&buf, ">", &maxlen, &pos);
1763       
1764                                        loctime = olocaltime(&epgnode->starttime);
1765                                        if(loctime != NULL)
1766                                                strftime(buf1, MINMALLOC, "%d.%m _ %H:%M __ ", loctime);
1767                                                //strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1768                                        free(loctime); loctime = NULL;
1769                                        //loctime = olocaltime(&epgnode->endtime);
1770                                        //if(loctime != NULL)
1771                                        //      strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1772                                        //free(loctime); loctime = NULL;
1773                                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1774                                        ostrcatbig(&buf, " ", &maxlen, &pos);
1775       
1776                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1777                                        if(chnode->name != NULL)
1778                                        {
1779                                                ostrcatbig(&buf, " (", &maxlen, &pos);
1780                                                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1781                                                ostrcatbig(&buf, ")", &maxlen, &pos);
1782                                        }
1783
1784                                        ostrcatbig(&buf, "</a><br><font class=smalllabel1>", &maxlen, &pos);
1785                                        ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1786
1787                                        ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1788                                        ostrcatbig(&buf, buf2, &maxlen, &pos);
1789                                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/timer.png alt=\"set timer\"/>", &maxlen, &pos);
1790                                        ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1791                                }
1792                                else
1793                                {
1794                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1795                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1796
1797                                        tmpstr = olutoa(epgnode->starttime);
1798                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1799                                        free(tmpstr); tmpstr = NULL;
1800                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1801
1802                                        tmpstr = olutoa(epgnode->endtime);
1803                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1804                                        free(tmpstr); tmpstr = NULL;
1805                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1806
1807                                        ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1808                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1809
1810                                        if(longepg == 1)
1811                                        {
1812                                                tmpstr = epgdescunzip(epgnode);
1813                                                if(tmpstr != NULL)
1814                                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1815                                                free(tmpstr); tmpstr = NULL;
1816                                        }
1817                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1818
1819                                        tmpstr = oitoa(epgnode->eventid);
1820                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1821                                        free(tmpstr); tmpstr = NULL;
1822                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1823                                }
1824                        }
1825                        epgnode = epgnode->next;
1826                        free(buf2); buf2 = NULL;
1827                }
1828                chnode = chnode->next;
1829        }
1830
1831        if(maxcount > MAXHTMLLINE && fmt == 0)
1832        {
1833                int i;
1834                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1835                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1836                {
1837                        if(page == i)
1838                                ostrcatbig(&buf, "<a class=pagesellink href=query?getepgsearch&", &maxlen, &pos);
1839                        else
1840                                ostrcatbig(&buf, "<a class=pagelink href=query?getepgsearch&", &maxlen, &pos);
1841                        ostrcatbig(&buf, param, &maxlen, &pos);
1842                        ostrcatbig(&buf, "&", &maxlen, &pos);
1843                        free(tmpnr); tmpnr = NULL;
1844
1845                        tmpnr = oitoa(i);
1846                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1847                        ostrcatbig(&buf, ">", &maxlen, &pos);
1848                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1849                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
1850                        free(tmpnr); tmpnr = NULL;
1851                }
1852                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1853        }
1854
1855        if(fmt == 0)
1856                webcreatetailbig(&buf, &maxlen, &pos, 0);
1857        else if(buf == NULL)
1858                buf = ostrcat("no data", NULL, 0, 0);
1859
1860        free(buf1);
1861        return buf;
1862}
1863
1864//flagbit 0: restrict to path
1865//flagbit 1: show epg icon
1866//flagbit 2: show delete icon
1867//flagbit 3: show stream icon
1868//flagbit 4: show websteam icon
1869char* webgetfilelist(char* param, char* link, char* dellink, char* path, char* mask, int flag, int fmt)
1870{
1871        char* buf = NULL, *tmppath = NULL, *tmpnr = NULL, *param1 = NULL;
1872        int maxlen = 0, pos = 0, line = 0, maxcount = 0, page = 1;
1873        struct skin* webdir = getscreen("webdir");
1874        struct skin* filelist = getscreennode(webdir, "filelist");
1875        struct skin* filelistpath = getscreennode(webdir, "filelistpath");
1876        struct skin* node = NULL;
1877
1878        if(param == NULL) param = path;
1879
1880        //create param1
1881        param1 = strchr(param, '&');
1882        if(param1 != NULL)
1883                *param1++ = '\0';
1884
1885        if(param1 != NULL) page = atoi(param1);
1886
1887        if(strlen(param) == 0 || !isdir(param))
1888                tmppath = ostrcat(path, NULL, 0, 0);
1889        else
1890                tmppath = ostrcat(param, NULL, 0, 0);
1891
1892        char* tmppath1 = createpath(tmppath, "");
1893        free(tmppath); tmppath = tmppath1;
1894
1895        if(checkbit(flag, 0) == 1)
1896        {
1897                if(ostrstr(tmppath, path) != tmppath)
1898                {
1899                        free(tmppath); tmppath = NULL;
1900                        tmppath = ostrcat(path, NULL, 0, 0);
1901                }
1902        }
1903
1904        changemask(filelist, mask);
1905        changeinput(filelist, tmppath);
1906        changetext(filelistpath, filelist->input);
1907
1908        free(tmppath); tmppath = NULL;
1909
1910        delmarkedscreennodes(webdir, FILELISTDELMARK);
1911        createfilelist(webdir, filelist, 0);
1912
1913        if(fmt == 0) ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100%>", &maxlen, &pos);
1914
1915        node = filelist;
1916        while(node != NULL)
1917        {
1918                if(node->del == FILELISTDELMARK)
1919                {
1920                        maxcount++;
1921                        if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1922                        {
1923                                node = node->next;
1924                                continue;
1925                        }
1926
1927                        if(fmt == 0)
1928                        {
1929                                if(line == 0)
1930                                {
1931                                        ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1932                                        line = 1;
1933                                }
1934                                else
1935                                {
1936                                        ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1937                                        line = 0;
1938                                }
1939
1940                                ostrcatbig(&buf, "<td>", &maxlen, &pos);
1941                        }
1942                        if(node->input != NULL) //dir
1943                        {
1944                                if(fmt == 0)
1945                                {
1946                                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/folder.png alt=Directory> <a class=link href=\"query?", &maxlen, &pos);
1947                                        ostrcatbig(&buf, link, &maxlen, &pos);
1948                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1949                                        ostrcatbig(&buf, node->input, &maxlen, &pos);
1950                                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1951                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1952                                        ostrcatbig(&buf, "</a><td> </td>", &maxlen, &pos);
1953                                }
1954                                else
1955                                {
1956                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1957                                        ostrcatbig(&buf, "#0", &maxlen, &pos);
1958                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1959                                }
1960                        }
1961                        else
1962                        {
1963                                if(fmt == 0)
1964                                {
1965                                        ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
1966                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1967                                        ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1968
1969                                        ostrcatbig(&buf, "<td width=80 align=right>", &maxlen, &pos);
1970
1971                                        //epg png
1972                                        if(checkbit(flag, 1) == 1)
1973                                        {
1974                                                ostrcatbig(&buf, "<a href=\"query?getmovieepg&", &maxlen, &pos);
1975                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1976                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1977                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1978                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1979                                                ostrcatbig(&buf, "<img border=0 src=img/movieepg.png width=16 height=16 alt=EPG></a>", &maxlen, &pos);
1980                                        }
1981                                        //delete png
1982                                        if(checkbit(flag, 2) == 1)
1983                                        {
1984                                                ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
1985                                                ostrcatbig(&buf, "query?", &maxlen, &pos);
1986                                                ostrcatbig(&buf, dellink, &maxlen, &pos);
1987                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1988                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1989                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1990                                                tmpnr = oitoa(page);
1991                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1992                                                free(tmpnr); tmpnr = NULL;
1993                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1994                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1995                                                ostrcatbig(&buf, "\");'>", &maxlen, &pos);
1996                                        }
1997                                        //stream png
1998                                        if(checkbit(flag, 3) == 1)
1999                                        {
2000                                                ostrcatbig(&buf, "<a target=nothing href=\"query?getm3u&0,0,", &maxlen, &pos);
2001                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
2002                                                ostrcatbig(&buf, "/", &maxlen, &pos);
2003                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
2004                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2005
2006                                                ostrcatbig(&buf, "<img border=0 src=img/stream.png width=16 height=16 alt=Stream></a>", &maxlen, &pos);
2007                                        }
2008                                        //webstream png
2009                                        if(checkbit(flag, 4) == 1)
2010                                        {
2011                                                ostrcatbig(&buf, "<a target=_blank href=\"query?getvideo&0,0,", &maxlen, &pos);
2012                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
2013                                                ostrcatbig(&buf, "/", &maxlen, &pos);
2014                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
2015                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2016
2017                                                ostrcatbig(&buf, "<img border=0 src=img/webstream.png width=16 height=16 alt=WebStream></a>", &maxlen, &pos);
2018
2019                                                ostrcatbig(&buf, "<a target=_blank href=\"", &maxlen, &pos);
2020                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
2021                                                ostrcatbig(&buf, "/", &maxlen, &pos);
2022                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
2023                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2024       
2025                                                ostrcatbig(&buf, "<img border=0 src=img/icon_restart.png width=16 height=16 alt=Download></a>", &maxlen, &pos);
2026                                        }
2027                                }
2028                                else
2029                                {
2030                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
2031                                        ostrcatbig(&buf, "#1", &maxlen, &pos);
2032                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
2033                                }
2034                        }
2035                        if(fmt == 0)
2036                        {
2037                                ostrcatbig(&buf, "</td>", &maxlen, &pos);
2038                                ostrcatbig(&buf, "</tr>", &maxlen, &pos);
2039                        }
2040                }
2041
2042                node = node->next;
2043        }
2044
2045        if(maxcount > MAXHTMLLINE)
2046        {
2047                int i;
2048                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
2049                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
2050                {
2051                        if(page == i)
2052                        {
2053                                ostrcatbig(&buf, "<a class=pagesellink href=query?", &maxlen, &pos);
2054                                ostrcatbig(&buf, link, &maxlen, &pos);
2055                                ostrcatbig(&buf, "&", &maxlen, &pos);
2056                        }
2057                        else
2058                        {
2059                                ostrcatbig(&buf, "<a class=pagelink href=query?", &maxlen, &pos);
2060                                ostrcatbig(&buf, link, &maxlen, &pos);
2061                                ostrcatbig(&buf, "&", &maxlen, &pos);
2062                        }
2063                        ostrcatbig(&buf, param, &maxlen, &pos);
2064                        ostrcatbig(&buf, "&", &maxlen, &pos);
2065
2066                        tmpnr = oitoa(i);
2067                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
2068                        ostrcatbig(&buf, ">", &maxlen, &pos);
2069                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
2070                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
2071                        free(tmpnr); tmpnr = NULL;
2072                }
2073                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
2074        }
2075
2076        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
2077        delmarkedscreennodes(webdir, FILELISTDELMARK);
2078        return buf;
2079}
2080
2081char* webgetmovieepg(char* param, char* path, int flag, int fmt)
2082{
2083        char* buf = NULL, *tmpstr = NULL;
2084        char tstr[2];
2085        char c = 0;
2086        int first = 1, maxlen = 0, pos = 0;
2087        FILE* fd = NULL;
2088
2089        if(fmt == 0)
2090        {
2091                webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
2092                ostrcatbig(&buf, "<tr><td><font class=biglabel>", &maxlen, &pos);
2093        }
2094
2095        if(flag == 1)
2096        {
2097                if(param != NULL && ostrstr(param, path) == param)
2098                {
2099                        tmpstr = changefilenameext(param, ".epg");
2100                        fd = fopen(tmpstr, "r");
2101                }
2102        }
2103        else
2104        {
2105                tmpstr = changefilenameext(param, ".epg");
2106                fd = fopen(tmpstr, "r");
2107        }
2108
2109        if(fd != NULL)
2110        {
2111                while(c != EOF)
2112                {
2113                        c = fgetc(fd);
2114                        if(fmt == 0 && c == '\n')
2115                        {
2116                                if(first == 1)
2117                                {
2118                                        ostrcatbig(&buf, "</font><br><font class=label>", &maxlen, &pos);
2119                                        first = 0;
2120                                }
2121                                ostrcatbig(&buf, "<br>", &maxlen, &pos);
2122                                continue;
2123                        }
2124                        if(c != EOF)
2125                        {
2126                                sprintf(tstr, "%c", c);
2127                                ostrcatbig(&buf, tstr, &maxlen, &pos);
2128                        }
2129                }
2130                fclose(fd);
2131        }
2132
2133        if(fmt == 0)
2134        {
2135                ostrcatbig(&buf, "</font></td></tr>", &maxlen, &pos);
2136                webcreatetailbig(&buf, &maxlen, &pos, 0);
2137        }
2138
2139        free(tmpstr); tmpstr = NULL;
2140        return buf;
2141}
2142
2143char* webdelfile(char* param, char* link, char* dellink, char* path, char* mask, int flag, int fmt)
2144{
2145        int del = 0;
2146        char* buf = NULL, *param1 = NULL, *param2 = NULL, *tmpparam = NULL;
2147
2148        if(param == NULL) return NULL;
2149
2150        //create param1 + 2
2151        param1 = strchr(param, '&');
2152        if(param1 != NULL)
2153        {
2154                *param1++ = '\0';
2155                param2 = strchr(param1, '&');
2156                if(param2 != NULL)
2157                        *param2++ = '\0';
2158        }
2159
2160        if(param1 == NULL || param2 == NULL) return NULL;
2161
2162        tmpparam = createpath(param, param2);
2163
2164        if(checkbit(flag, 0) == 1)
2165        {
2166                if(tmpparam != NULL && ostrstr(tmpparam, path) == tmpparam)
2167                        del = 1;
2168        }
2169        else
2170                del = 1;
2171
2172        if(del == 1)
2173        {
2174                char* epgfilename = NULL;
2175
2176                unlink(tmpparam);
2177
2178                if(cmpfilenameext(tmpparam, ".ts") == 0)
2179                {
2180                        epgfilename = changefilenameext(tmpparam, ".epg");
2181                        unlink(epgfilename);
2182                        free(epgfilename); epgfilename = NULL;
2183                        epgfilename = changefilenameext(tmpparam, ".se");
2184                        unlink(epgfilename);
2185                        free(epgfilename); epgfilename = NULL;
2186                        epgfilename = changefilenameext(tmpparam, ".ma");
2187                        unlink(epgfilename);
2188                        free(epgfilename); epgfilename = NULL;
2189                }
2190        }
2191
2192        free(tmpparam); tmpparam = NULL;
2193        tmpparam = ostrcat(tmpparam, param, 1, 0);
2194        tmpparam = ostrcat(tmpparam, "&", 1, 0);
2195        tmpparam = ostrcat(tmpparam, param1, 1, 0);
2196
2197        buf = webgetfilelist(tmpparam, link, dellink, path, mask, flag, fmt);
2198        free(tmpparam); tmpparam = NULL;
2199        return buf;
2200}
2201
2202char* websendrc(char* param, int fmt)
2203{
2204        int rccode = 0;
2205        char* buf = NULL;
2206
2207        rccode = getrcconfigint(param, NULL);
2208        writerc(rccode);
2209
2210        buf = ostrcat("ok", NULL, 0, 0);
2211        return buf;
2212}
2213
2214//flag 0: get aktiv timer
2215//flag 1: get old timer
2216char* webgetrectimer(char* param, int flag, int fmt)
2217{
2218        char* buf = NULL, *buf1 = NULL;
2219        struct rectimer* node = rectimer;
2220        struct channel* chnode = NULL;
2221        int line = 0, maxlen = 0, pos = 0;
2222        struct tm *loctime = NULL;
2223
2224        buf1 = malloc(MINMALLOC);
2225        if(buf1 == NULL)
2226        {
2227                err("no mem");
2228                return NULL;
2229        }
2230
2231        if(fmt == 0) ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100%>", &maxlen, &pos);
2232
2233        while(node != NULL)
2234        {
2235                if((flag == 0 && (node->status == 2 || node->status == 3)) || (flag == 1 && (node->status == 0 || node->status == 1)) || node->status == 4 || node->status == 5)
2236                {
2237                        node = node->next;
2238                        continue;
2239                }
2240                if(fmt == 0)
2241                {
2242                        if(line == 0)
2243                        {
2244                                ostrcatbig(&buf, "<tr class=line1><td>", &maxlen, &pos);
2245                                line = 1;
2246                        }
2247                        else
2248                        {
2249                                ostrcatbig(&buf, "<tr class=line2><td>", &maxlen, &pos);
2250                                line = 0;
2251                        }
2252
2253                        loctime = olocaltime(&node->begin);
2254                        if(loctime != NULL)
2255                                strftime(buf1, MINMALLOC, "%d-%m-%Y %H:%M -", loctime);
2256                        free(loctime); loctime = NULL;
2257                        loctime = olocaltime(&node->end);
2258                        if(loctime != NULL)
2259                                strftime(&buf1[18], MINMALLOC - 19, " %H:%M ", loctime);
2260                        free(loctime); loctime = NULL;
2261       
2262                        ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
2263                        ostrcatbig(&buf, buf1, &maxlen, &pos);
2264
2265                        ostrcatbig(&buf, " (", &maxlen, &pos);
2266                        if(node->justplay == 0)
2267                                ostrcatbig(&buf, "rec - ", &maxlen, &pos);
2268                        else
2269                                ostrcatbig(&buf, "switch - ", &maxlen, &pos);
2270                        if(node->repeate == 0)
2271                                ostrcatbig(&buf, "once", &maxlen, &pos);
2272                        else
2273                                ostrcatbig(&buf, "repeate", &maxlen, &pos);
2274
2275                        ostrcatbig(&buf, ")</font><br><font class=smalllabel1>", &maxlen, &pos);
2276                        if(node->name == NULL || strlen(node->name) == 0)
2277                                ostrcatbig(&buf, "---", &maxlen, &pos);
2278                        else
2279                                ostrcatbig(&buf, node->name, &maxlen, &pos);
2280
2281                        chnode = getchannel(node->serviceid, node->transponderid);
2282                        if(chnode != NULL)
2283                        {
2284                                ostrcatbig(&buf, " (", &maxlen, &pos);
2285                                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
2286                                ostrcatbig(&buf, ")", &maxlen, &pos);
2287                        }
2288                        ostrcatbig(&buf, "<br>", &maxlen, &pos);
2289
2290                        if(node->status == 0)
2291                                ostrcatbig(&buf, "waiting", &maxlen, &pos);
2292                        else if(node->status == 1)
2293                                ostrcatbig(&buf, "running", &maxlen, &pos);
2294                        else if(node->status == 2)
2295                                ostrcatbig(&buf, "succes", &maxlen, &pos);
2296                        else if(node->status == 3)
2297                        {
2298                                ostrcatbig(&buf, "error", &maxlen, &pos);
2299                                if(node->errstr != NULL && strlen(node->errstr) > 0)
2300                                {
2301                                        ostrcatbig(&buf, " (", &maxlen, &pos);
2302                                        ostrcatbig(&buf, node->errstr, &maxlen, &pos);
2303                                        ostrcatbig(&buf, ")", &maxlen, &pos);
2304                                }
2305                        }
2306
2307                        ostrcatbig(&buf, "</font>", &maxlen, &pos);
2308
2309                        if(flag == 0)
2310                        {
2311                                ostrcatbig(&buf, "</td><td width=40 align=right>", &maxlen, &pos);
2312
2313                                //edit png
2314                                ostrcatbig(&buf, "<a target=main href=\"query?editrectimer", &maxlen, &pos);
2315                                ostrcatbig(&buf, "&", &maxlen, &pos);
2316                                ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2317                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2318
2319                                ostrcatbig(&buf, "<img border=0 src=img/edit.png width=16 height=16 alt=\"Edit Timer\"></a>", &maxlen, &pos);
2320
2321                                //delete png
2322                                ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
2323                                ostrcatbig(&buf, "query?delrectimer", &maxlen, &pos);
2324                                ostrcatbig(&buf, "&", &maxlen, &pos);
2325                                ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2326                                //ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
2327                                //ostrcatbig(&buf, "&", &maxlen, &pos);
2328                                //tmpnr = oitoa(page);
2329                                //ostrcatbig(&buf, tmpnr, &maxlen, &pos);
2330                                //free(tmpnr); tmpnr = NULL;
2331                                //ostrcatbig(&buf, "&", &maxlen, &pos);
2332                                //ostrcatbig(&buf, node->text, &maxlen, &pos);
2333                                ostrcatbig(&buf, "\");'>", &maxlen, &pos);
2334                        }
2335
2336                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
2337                }
2338                else
2339                {
2340                        buf = ostrcat(buf, olutoa(node->begin), 1, 1);
2341                        buf = ostrcat(buf, "#", 1, 0);
2342                        buf = ostrcat(buf, olutoa(node->end), 1, 1);
2343                        buf = ostrcat(buf, "#", 1, 0);
2344                        buf = ostrcat(buf, oitoa(node->justplay), 1, 1);
2345                        buf = ostrcat(buf, "#", 1, 0);
2346                        buf = ostrcat(buf, oitoa(node->repeate), 1, 1);
2347                        buf = ostrcat(buf, "#", 1, 0);
2348                        buf = ostrcat(buf, node->name, 1, 0);
2349                        buf = ostrcat(buf, "#", 1, 0);
2350                        buf = ostrcat(buf, oitoa(node->serviceid), 1, 1);
2351                        buf = ostrcat(buf, "#", 1, 0);
2352                        buf = ostrcat(buf, ollutoa(node->transponderid), 1, 1);
2353                        buf = ostrcat(buf, "#", 1, 0);
2354                        buf = ostrcat(buf, oitoa(node->status), 1, 1);
2355                        buf = ostrcat(buf, "#", 1, 0);
2356                        buf = ostrcat(buf, node->errstr, 1, 0);
2357                        buf = ostrcat(buf, "#", 1, 0);
2358                        buf = ostrcat(buf, node->timestamp, 1, 0);
2359                        buf = ostrcat(buf, "#", 1, 0);
2360                        chnode = getchannel(node->serviceid, node->transponderid);
2361                        if(chnode != NULL)
2362                                buf = ostrcat(buf, chnode->name, 1, 0);
2363                        buf = ostrcat(buf, "#", 1, 0);
2364                        buf = ostrcat(buf, oitoa(node->afterevent), 1, 1);
2365                        buf = ostrcat(buf, "\n", 1, 0);
2366                }
2367
2368                node = node->next;
2369        }
2370
2371        if(fmt == 0)
2372                webcreatetailbig(&buf, &maxlen, &pos, 0);
2373        else if(buf == NULL)
2374                buf = ostrcat("no data", NULL, 0, 0);
2375
2376        free(buf1);
2377        return buf;
2378}
2379
2380char* webaddrectimer(char* param, int fmt)
2381{
2382        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *param1 = NULL, *param2 = NULL;
2383        struct channel* chnode = NULL;
2384        struct epg* epgnode = NULL;
2385//      int maxlen = 0, pos = 0, tmpservicetype = 0;
2386        int maxlen = 0, pos = 0;
2387        struct tm* loctime = NULL;
2388        time_t akttime = time(NULL);
2389       
2390        if(param != NULL)
2391        {
2392                //create param1 + 2
2393                param1 = strchr(param, '&');
2394                if(param1 != NULL)
2395                {
2396                        *param1++ = '\0';
2397                        param2 = strchr(param1, '&');
2398                        if(param2 != NULL)
2399                                *param2++ = '\0';
2400                }
2401                if(param1 == NULL || param2 == NULL) return NULL;
2402                chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
2403                if(chnode == NULL) return NULL;
2404
2405                epgnode = getepg(chnode, atoi(param2), 0);
2406                if(epgnode == NULL) return NULL;
2407        }
2408
2409               
2410        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"stylesheet\" type=\"text/css\" href=\"titan.css\"></head>", &maxlen, &pos);
2411        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2412        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2413        if(chnode == NULL)
2414                ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimercheck&node\" value=\"", &maxlen, &pos);
2415        else
2416                ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2417        ostrcatbig(&buf, "0", &maxlen, &pos);
2418        ostrcatbig(&buf, "\">", &maxlen, &pos);
2419        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2420        ostrcatbig(&buf, "<td><font class=label>Name:&nbsp;</font></td>", &maxlen, &pos);
2421        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"name\" value=\"", &maxlen, &pos);
2422        if(epgnode != NULL)
2423                ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
2424        else   
2425                ostrcatbig(&buf, " ", &maxlen, &pos);
2426        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2427        ostrcatbig(&buf, "<td><font class=label>Type:&nbsp;</font></td>", &maxlen, &pos);
2428        ostrcatbig(&buf, "<td><select name=\"type\" border=0><option selected>", &maxlen, &pos);
2429        ostrcatbig(&buf, "record", &maxlen, &pos);
2430        ostrcatbig(&buf, "<option>record<option>switch channel</select></td></tr>", &maxlen, &pos);
2431
2432        buf2 = malloc(MINMALLOC);
2433        if(epgnode != NULL)
2434                loctime =       olocaltime(&epgnode->starttime);
2435        else
2436                loctime = olocaltime(&akttime);
2437        if(loctime != NULL)
2438                strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2439        free(loctime); loctime = NULL;
2440
2441        buf1 = ostrcat(buf2, NULL, 0, 0);
2442        ostrcatbig(&buf, "<td><font class=label>Begin:&nbsp;</font></td>", &maxlen, &pos);
2443        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"begin\" value=\"", &maxlen, &pos);
2444        ostrcatbig(&buf, buf1, &maxlen, &pos);
2445        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2446        free(buf1); buf1 = NULL;
2447       
2448        if(epgnode != NULL)
2449                loctime =       olocaltime(&epgnode->endtime);
2450        else
2451                loctime = olocaltime(&akttime);
2452        if(loctime != NULL)
2453                strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2454        free(loctime); loctime = NULL;
2455       
2456        buf1 = ostrcat(buf2, NULL, 0, 0);
2457        ostrcatbig(&buf, "<td><font class=label>End:&nbsp;</font></td>", &maxlen, &pos);
2458        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"end\" value=\"", &maxlen, &pos);
2459        ostrcatbig(&buf, buf1, &maxlen, &pos);
2460        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2461        free(buf1); buf1 = NULL;
2462        free(buf2); buf2 = NULL;
2463
2464        ostrcatbig(&buf, "<td><font class=label>Channel:&nbsp;</font></td>", &maxlen, &pos);
2465        if(chnode == NULL)
2466                ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"channel\" value=\"", &maxlen, &pos);
2467        else
2468        {
2469                ostrcatbig(&buf, "<td>", &maxlen, &pos);
2470                ostrcatbig(&buf, "<input class=inputbox type=\"hidden\" name=\"sid\" value=\"", &maxlen, &pos);
2471                buf1 = oitoa(chnode->serviceid);
2472                ostrcatbig(&buf, buf1, &maxlen, &pos);
2473                free(buf1); buf1 = NULL;
2474                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2475                ostrcatbig(&buf, "<input class=inputbox type=\"hidden\" name=\"tid\" value=\"", &maxlen, &pos);
2476                buf1 = ollutoa(chnode->transponderid);
2477                ostrcatbig(&buf, buf1, &maxlen, &pos);
2478                free(buf1); buf1 = NULL;
2479                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2480                ostrcatbig(&buf, "<input readonly class=inputbox type=\"text\" name=\"channel\" value=\"", &maxlen, &pos);
2481        }
2482        if(chnode != NULL)
2483                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
2484        else if(status.aktservice->channel != NULL)
2485                ostrcatbig(&buf, status.aktservice->channel->name, &maxlen, &pos);
2486        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2487        free(buf1); buf1 = NULL;
2488       
2489        ostrcatbig(&buf, "<td><font class=label>after event:&nbsp;</font></td>", &maxlen, &pos);
2490        ostrcatbig(&buf, "<td><select name=\"afterevent\" border=0><option selected>", &maxlen, &pos);
2491        ostrcatbig(&buf, "auto", &maxlen, &pos);
2492        ostrcatbig(&buf, "<option>auto<option>nothing<option>standby<option>off</select></td></tr>", &maxlen, &pos);
2493       
2494        ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return checkdaytime(begin.value, end.value)\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
2495
2496        //ostrcatbig(&buf, param, &maxlen, &pos);
2497        return buf;
2498}
2499
2500char* webrectimercheck(char* param, int fmt)
2501{
2502        char* buf = NULL, *buf1 = NULL, *string = NULL, *param1 = NULL, *name = NULL, *begin = NULL, *end = NULL, *type = NULL, *anode = NULL, *channelname = NULL, *ext = NULL, *afterevent = NULL, *repeat = NULL;
2503        int maxlen = 0, pos = 0, channelfind = 0;
2504        struct channel *channel1 = NULL;
2505       
2506        anode = ostrstr(param, "node=");
2507        if(anode != NULL)
2508                anode = anode + 5;
2509        name = ostrstr(param, "name=");
2510        if(name != NULL)
2511                name = name + 5;
2512        begin = ostrstr(param, "begin=");
2513        if(begin != NULL)
2514                begin = begin + 6;
2515        end = ostrstr(param, "end=");
2516        if(end != NULL)
2517                end = end + 4;
2518        type = ostrstr(param, "type=");
2519        if(type != NULL)
2520                type = type + 5;
2521        channelname = ostrstr(param, "channel=");
2522        if(channelname != NULL)
2523                channelname = channelname + 8;
2524        ext = ostrstr(param, "ext=");
2525        if(ext != NULL)
2526                ext = ext + 4;
2527        afterevent = ostrstr(param, "afterevent=");
2528        if(afterevent != NULL)
2529                afterevent = afterevent + 11;
2530        repeat = ostrstr(param, "repeat=");
2531        if(repeat != NULL)
2532                repeat = repeat + 7;
2533
2534        param1 = ostrcat(param, NULL, 0, 0);
2535        string = param;
2536        while(string != NULL)
2537        {
2538                string = strchr(string, '&');
2539                if(string != NULL)
2540                        *string++ = '\0';
2541        }
2542       
2543        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"stylesheet\" type=\"text/css\" href=\"titan.css\"></head>", &maxlen, &pos);
2544        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2545        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2546       
2547        if(anode != NULL)
2548        {
2549                ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2550                ostrcatbig(&buf, anode, &maxlen, &pos);
2551                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2552        }
2553       
2554        if(name != NULL)
2555        {       
2556                ostrcatbig(&buf, "<input type=\"hidden\" name=\"name\" value=\"", &maxlen, &pos);
2557                ostrcatbig(&buf, name, &maxlen, &pos);
2558                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2559        }
2560       
2561        if(begin != NULL)
2562        {
2563                ostrcatbig(&buf, "<input type=\"hidden\" name=\"begin\" value=\"", &maxlen, &pos);
2564                ostrcatbig(&buf, begin, &maxlen, &pos);
2565                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2566        }
2567       
2568        if(end != NULL)
2569        {
2570                ostrcatbig(&buf, "<input type=\"hidden\" name=\"end\" value=\"", &maxlen, &pos);
2571                ostrcatbig(&buf, end, &maxlen, &pos);             
2572                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2573        }
2574       
2575        if(type != NULL)
2576        {
2577                ostrcatbig(&buf, "<input type=\"hidden\" name=\"type\" value=\"", &maxlen, &pos);
2578                ostrcatbig(&buf, type, &maxlen, &pos);
2579                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2580        }
2581       
2582        if(ext != NULL)
2583        {
2584                ostrcatbig(&buf, "<input type=\"hidden\" name=\"ext\" value=\"", &maxlen, &pos);
2585                ostrcatbig(&buf, ext, &maxlen, &pos);
2586                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2587        }
2588       
2589        if(afterevent != NULL)
2590        {
2591                ostrcatbig(&buf, "<input type=\"hidden\" name=\"afterevent\" value=\"", &maxlen, &pos);
2592                ostrcatbig(&buf, afterevent, &maxlen, &pos);
2593                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2594        }
2595       
2596        if(repeat != NULL)
2597        {
2598                ostrcatbig(&buf, "<input type=\"hidden\" name=\"repeat\" value=\"", &maxlen, &pos);
2599                ostrcatbig(&buf, repeat, &maxlen, &pos);
2600                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2601        }
2602       
2603        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2604        ostrcatbig(&buf, "<td><select name=sid size=10 border=0>", &maxlen, &pos);
2605       
2606        /*
2607        channel1 = channel;             
2608        while(channel1 != NULL)
2609        {
2610                if(ostrcmp(channel1->name, channelname) == 0 && (channel1->servicetype == 0 || channel1->servicetype == 1))
2611                {
2612                        if(channelfind == 0)
2613                                ostrcatbig(&buf, "<option selected value=\"", &maxlen, &pos);
2614                        else
2615                                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
2616                       
2617                        buf1 = oitoa(channel1->serviceid);
2618                        ostrcatbig(&buf, buf1, &maxlen, &pos);
2619                        free(buf1); buf1 = NULL;
2620                        ostrcatbig(&buf, "&tid=", &maxlen, &pos);
2621                        buf1 = ollutoa(channel1->transponderid);
2622                        ostrcatbig(&buf, buf1, &maxlen, &pos);
2623                        free(buf1); buf1 = NULL;
2624                        ostrcatbig(&buf, "\">", &maxlen, &pos);
2625                       
2626                        ostrcatbig(&buf, channel1->name, &maxlen, &pos);
2627                        ostrcatbig(&buf, " (", &maxlen, &pos);
2628                       
2629                        //get satname from channel
2630                        if(channel1->transponder != NULL)
2631                        {
2632                                struct sat* snode = getsatbyorbitalpos(channel1->transponder->orbitalpos);
2633                                if(snode != NULL)
2634                                        ostrcatbig(&buf, snode->name, &maxlen, &pos);
2635                                else
2636                                        ostrcatbig(&buf, _("unknown"), &maxlen, &pos);
2637                                       
2638                                if(channel1->provider != NULL)
2639                                        ostrcatbig(&buf, " - ", &maxlen, &pos);                 
2640                        }
2641                       
2642                        //get provider from channel
2643                        if(channel1->provider != NULL)
2644                        {
2645                                if(channel1->provider->name != NULL)
2646                                        ostrcatbig(&buf, channel1->provider->name, &maxlen, &pos);
2647                                else
2648                                        ostrcatbig(&buf, _("unknown"), &maxlen, &pos);                 
2649                        }
2650                       
2651                        ostrcatbig(&buf, ")", &maxlen, &pos);   
2652                       
2653                        channelfind++;
2654                }
2655                channel1 = channel1->next;
2656        }
2657        */
2658       
2659        if(channelfind == 0)
2660        {
2661                channel1 = channel;             
2662                while(channel1 != NULL)
2663                {
2664                        if(ostrstrcase(channel1->name, channelname) != NULL && (channel1->servicetype == 0 || channel1->servicetype == 1))
2665                        {
2666                                if(channelfind == 0)
2667                                        ostrcatbig(&buf, "<option selected value=\"", &maxlen, &pos);
2668                                else
2669                                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
2670                               
2671                                buf1 = oitoa(channel1->serviceid);
2672                                ostrcatbig(&buf, buf1, &maxlen, &pos);
2673                                free(buf1); buf1 = NULL;
2674                                ostrcatbig(&buf, "&tid=", &maxlen, &pos);
2675                                buf1 = ollutoa(channel1->transponderid);
2676                                ostrcatbig(&buf, buf1, &maxlen, &pos);
2677                                free(buf1); buf1 = NULL;
2678                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2679                               
2680                                ostrcatbig(&buf, channel1->name, &maxlen, &pos);
2681                                ostrcatbig(&buf, " (", &maxlen, &pos);
2682                               
2683                                //get satname from channel
2684                                if(channel1->transponder != NULL)
2685                                {
2686                                        struct sat* snode = getsatbyorbitalpos(channel1->transponder->orbitalpos);
2687                                        if(snode != NULL)
2688                                                ostrcatbig(&buf, snode->name, &maxlen, &pos);
2689                                        else
2690                                                ostrcatbig(&buf, _("unknown"), &maxlen, &pos);
2691                                               
2692                                        if(channel1->provider != NULL)
2693                                                ostrcatbig(&buf, " - ", &maxlen, &pos);                 
2694                                }
2695                               
2696                                //get provider from channel
2697                                if(channel1->provider != NULL)
2698                                {
2699                                        if(channel1->provider->name != NULL)
2700                                                ostrcatbig(&buf, channel1->provider->name, &maxlen, &pos);
2701                                        else
2702                                                ostrcatbig(&buf, _("unknown"), &maxlen, &pos);                 
2703                                }
2704                               
2705                                ostrcatbig(&buf, ")", &maxlen, &pos);   
2706                               
2707                                channelfind++;
2708                        }
2709                        channel1 = channel1->next;
2710                }
2711        }
2712       
2713        ostrcatbig(&buf, "</td></tr></table><br><br></select><input class=button type=submit name=send value=\"Send\" onClick=\"return checkdaytime(begin.value, end.value)\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
2714
2715        if(channelfind < 2)
2716        {
2717                free(buf); buf = NULL;
2718                buf = webrectimersend(param1, fmt);     
2719                free(param1); param1 = NULL;
2720        }
2721
2722        return buf;             
2723}
2724
2725char* webrectimersend(char* param, int fmt)
2726{
2727        char* buf = NULL, *string = NULL, *name = NULL, *begin = NULL, *end = NULL, *type = NULL, *anode = NULL, *channelname = NULL, *sid = NULL, *tid = NULL, *ext = NULL, *afterevent = NULL, *repeat = NULL;
2728        int newnode = 0, channelfind = 0;
2729        struct rectimer *node = NULL;
2730        char* tmpstr = NULL;
2731        struct tm* loctime = NULL;
2732        struct channel *channel1 = NULL;
2733
2734        anode = ostrstr(param, "node=");
2735        if(anode != NULL)
2736                anode = anode + 5;
2737        name = ostrstr(param, "name=");
2738        if(name != NULL)
2739                name = name + 5;
2740        begin = ostrstr(param, "begin=");
2741        if(begin != NULL)
2742                begin = begin + 6;
2743        end = ostrstr(param, "end=");
2744        if(end != NULL)
2745                end = end + 4;
2746        type = ostrstr(param, "type=");
2747        if(type != NULL)
2748                type = type + 5;
2749        channelname = ostrstr(param, "channel=");
2750        if(channelname != NULL)
2751                channelname = channelname + 8;
2752        sid = ostrstr(param, "sid=");
2753        if(sid != NULL)
2754                sid = sid + 4;
2755        tid = ostrstr(param, "tid=");
2756        if(tid != NULL)
2757                tid = tid + 4;
2758        ext = ostrstr(param, "ext=");
2759        if(ext != NULL)
2760                ext = ext + 4;
2761        afterevent = ostrstr(param, "afterevent=");
2762        if(afterevent != NULL)
2763                afterevent = afterevent + 11;
2764        repeat = ostrstr(param, "repeat=");
2765        if(repeat != NULL)
2766                repeat = repeat + 7;
2767       
2768        string = param;
2769        while(string != NULL)
2770        {       
2771                string = strchr(string, '&');
2772                if(string != NULL)
2773                        *string++ = '\0';
2774        }
2775       
2776        if((sid == NULL && tid != NULL) || (sid != NULL && tid == NULL))
2777        {
2778                buf = ostrcat(buf, "ERROR: sid and tid required or only channel", 1, 0);       
2779                return buf;
2780        }
2781               
2782        if(channelname != NULL && sid == NULL)
2783        {
2784                channelfind = 0;
2785                channel1 = channel;
2786                while(channel1 != NULL)
2787                {
2788                        if(ostrcmp(channel1->name, channelname) == 0 && (channel1->servicetype == 0 || channel1->servicetype == 1))
2789                        {
2790                                        channelfind = 1;
2791                                        break;
2792                        }
2793                        channel1 = channel1->next;
2794                }
2795                if(channelfind == 0)
2796                {
2797                        channel1 = channel;             
2798                        while(channel1 != NULL)
2799                        {
2800                                if(ostrstr(channel1->name, channelname) != NULL && (channel1->servicetype == 0 || channel1->servicetype == 1))
2801                                {
2802                                                channelfind = 1;
2803                                                break;
2804                                }
2805                                channel1 = channel1->next;
2806                        }
2807                }
2808                if(channelfind == 0)
2809                {
2810                        buf = ostrcat(buf, "ERROR: channel not found", 1, 0);   
2811                        return buf;
2812                }
2813        }
2814       
2815        newnode = 0;
2816        node = getrectimerbytimestamp(anode);
2817        if(node == NULL)
2818        {
2819                node = addrectimernode(NULL, NULL);
2820                if(node != NULL)
2821                {
2822                        newnode = 1;
2823                        node->pincode = ostrcat("0000", NULL, 0, 0);
2824                        node->recpath = ostrcat(NULL, getconfig("rec_path", NULL), 0, 0);
2825                        node->afterevent = 0;
2826                        node->repeate = 0;
2827                }
2828        }
2829       
2830        if(node != NULL)
2831        {
2832                if(channelfind == 1 && channel1 != NULL)
2833                {
2834                        node->serviceid = channel1->serviceid;
2835                        node->servicetype = channel1->servicetype;
2836                        node->transponderid = channel1->transponderid;
2837                }
2838       
2839                if(sid != NULL && tid != NULL)
2840                {
2841                        node->serviceid = atoi(sid);
2842                        node->transponderid = strtoull(tid, NULL, 10);
2843                        node->servicetype = 0;
2844                }
2845       
2846                free(node->name); node->name = NULL;
2847                node->name = ostrcat(name, NULL, 0, 0);
2848       
2849                if(ostrcmp(type, "record") == 0)
2850                        node->justplay = 0;
2851                else
2852                        node->justplay = 1;
2853                       
2854                if(afterevent != NULL)
2855                {
2856                        if(ostrcmp(afterevent, "auto") == 0)
2857                                node->afterevent = 0;
2858                        else if(ostrcmp(afterevent, "nothing") == 0)
2859                                node->afterevent = 1;
2860                        else if(ostrcmp(afterevent, "standby") == 0)
2861                                node->afterevent = 2;
2862                        else if(ostrcmp(afterevent, "off") == 0)
2863                                node->afterevent = 3;
2864                }
2865
2866                if(repeat != NULL)
2867                        node->repeate = atoi(repeat);
2868       
2869                loctime = olocaltime(&node->begin);
2870                if(loctime != NULL && begin != NULL)
2871                {
2872                        tmpstr = strptime(begin, "%H:%M %d-%m-%Y", loctime);
2873                        if(tmpstr != NULL) {
2874                                loctime->tm_isdst = -1;
2875                                node->begin = mktime(loctime);
2876                        }
2877                }
2878                if(node->justplay == 0 && newnode == 1) node->begin -= getconfigint("recforerun" , NULL) * 60;
2879                node->begin -= (node->begin % 60);
2880                tmpstr = NULL;
2881                free(loctime); loctime = NULL;
2882
2883                loctime = olocaltime(&node->end);
2884                if(loctime != NULL && end != NULL)
2885                {
2886                        tmpstr = strptime(end, "%H:%M %d-%m-%Y", loctime);
2887                        if(tmpstr != NULL) {
2888                                loctime->tm_isdst = -1;
2889                                node->end = mktime(loctime);
2890                        }
2891                }
2892                if(node->justplay == 0 && newnode == 1) node->end += getconfigint("recoverrun" , NULL) * 60;
2893                node->end -= (node->end % 60);
2894                tmpstr = NULL;
2895                free(loctime); loctime = NULL;
2896
2897                if(newnode == 1)
2898                        node->disabled = 0;
2899       
2900                status.writerectimer = 1;
2901                writerectimer(getconfig("rectimerfile", NULL), 0);
2902               
2903                if(ext == NULL)
2904                        buf = webgetrectimer(NULL, 0, fmt);
2905                else
2906                {
2907                        buf = ostrcat(buf, "ok -> TimerID=", 1, 0);
2908                        buf = ostrcat(buf, node->timestamp, 1, 0);
2909                }
2910        }
2911        else
2912                buf = ostrcat(buf, "Timer not ok", 1, 0);
2913
2914        return buf;
2915}
2916
2917char* webeditrectimer(char* param, int fmt)
2918{
2919        char* buf = NULL, *buf1 = NULL, *buf2 = NULL;
2920        int maxlen = 0, pos = 0;
2921        struct rectimer *node = NULL;
2922        struct tm* loctime = NULL;
2923
2924        node = getrectimerbytimestamp(param);
2925        if(node == NULL) return NULL;
2926               
2927        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"stylesheet\" type=\"text/css\" href=\"titan.css\"></head>", &maxlen, &pos);
2928        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2929        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2930        ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2931        ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2932        ostrcatbig(&buf, "\">", &maxlen, &pos);
2933        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2934        ostrcatbig(&buf, "<td><font class=label>Name:&nbsp;</font></td>", &maxlen, &pos);
2935        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"name\" value=\"", &maxlen, &pos);
2936        ostrcatbig(&buf, node->name, &maxlen, &pos);
2937        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2938
2939        ostrcatbig(&buf, "<td><font class=label>Type:&nbsp;</font></td>", &maxlen, &pos);
2940        ostrcatbig(&buf, "<td><select name=\"type\" border=0><option selected>", &maxlen, &pos);
2941        if( node->justplay == 0 )
2942                ostrcatbig(&buf, "record", &maxlen, &pos);
2943        else
2944                ostrcatbig(&buf, "switch channel", &maxlen, &pos);
2945        ostrcatbig(&buf, "<option>record<option>switch channel</select></td></tr>", &maxlen, &pos);
2946       
2947        /*ostrcatbig(&buf, "<td><font class=label>Repeate:&nbsp;</font></td>", &maxlen, &pos);
2948        ostrcatbig(&buf, "<td><select name=\"repeate\" border=0><option selected>", &maxlen, &pos);
2949        if( node->repeate == 0 )
2950                ostrcatbig(&buf, "once", &maxlen, &pos);
2951        else
2952                ostrcatbig(&buf, "repeate", &maxlen, &pos);
2953        ostrcatbig(&buf, "<option>once<option>repeate</select></td></tr>", &maxlen, &pos);     
2954        */
2955       
2956        /*ostrcatbig(&buf, "<td><font class=label>Repeate type:&nbsp;</font></td>", &maxlen, &pos);
2957        ostrcatbig(&buf, "<td><select name=\"repeatetype\" border=0><option selected>", &maxlen, &pos);
2958        if( node->repeate == 0 )
2959                ostrcatbig(&buf, "daily", &maxlen, &pos);
2960        else if( node->repeate == 1 )
2961                ostrcatbig(&buf, "weekly", &maxlen, &pos);
2962        else if( node->repeate == 2 )
2963                ostrcatbig(&buf, "workdays", &maxlen, &pos);
2964        else
2965                ostrcatbig(&buf, "user defined", &maxlen, &pos);
2966        ostrcatbig(&buf, "<option>daily<option>weekly<option>workdays<option>user defined</select></td></tr>", &maxlen, &pos); 
2967        */
2968               
2969        buf2 = malloc(20);
2970        loctime = olocaltime(&node->begin);
2971        if(loctime != NULL && buf2 != NULL)
2972                strftime(buf2, 20, "%H:%M %d-%m-%Y", loctime);
2973        free(loctime); loctime = NULL;
2974
2975        buf1 = ostrcat(buf2, NULL, 0, 0);
2976        ostrcatbig(&buf, "<td><font class=label>Begin:&nbsp;</font></td>", &maxlen, &pos);
2977        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"begin\" value=\"", &maxlen, &pos);
2978        ostrcatbig(&buf, buf1, &maxlen, &pos);
2979        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2980        free(buf1); buf1 = NULL;
2981       
2982        loctime = olocaltime(&node->end);
2983        if(loctime != NULL && buf2 != NULL)
2984                strftime(buf2, 20, "%H:%M %d-%m-%Y", loctime);
2985        free(loctime); loctime = NULL;
2986
2987        buf1 = ostrcat(buf2, NULL, 0, 0);
2988        ostrcatbig(&buf, "<td><font class=label>End:&nbsp;</font></td>", &maxlen, &pos);
2989        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"end\" value=\"", &maxlen, &pos);
2990        ostrcatbig(&buf, buf1, &maxlen, &pos);
2991        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2992        free(buf1); buf1 = NULL;
2993        free(buf2); buf2 = NULL;
2994       
2995        ostrcatbig(&buf, "<td><font class=label>after event:&nbsp;</font></td>", &maxlen, &pos);
2996        ostrcatbig(&buf, "<td><select name=\"afterevent\" border=0><option selected>", &maxlen, &pos);
2997        if( node->afterevent == 0 )
2998                ostrcatbig(&buf, "auto", &maxlen, &pos);
2999        else if( node->afterevent == 1 )
3000                ostrcatbig(&buf, "nothing", &maxlen, &pos);
3001        else if( node->afterevent == 2 )
3002                ostrcatbig(&buf, "standby", &maxlen, &pos);
3003        else if( node->afterevent == 3 )
3004                ostrcatbig(&buf, "off", &maxlen, &pos);
3005        else
3006                ostrcatbig(&buf, "auto", &maxlen, &pos);
3007        ostrcatbig(&buf, "<option>auto<option>nothing<option>standby<option>off</select></td></tr>", &maxlen, &pos);
3008       
3009        ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return checkdaytime(begin.value, end.value)\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
3010       
3011        //ostrcatbig(&buf, param, &maxlen, &pos);
3012        return buf;
3013}
3014
3015char* webdelrectimer(char* param, int fmt)
3016{
3017        char* buf = NULL, *string = NULL, *timerid = NULL;
3018        struct rectimer *node = NULL;
3019        int ext = 0;
3020       
3021        timerid = ostrstr(param, "timerid=");
3022        if(timerid != NULL)
3023        {
3024                timerid = timerid + 8;
3025                ext = 1;
3026        }
3027
3028        node = NULL;
3029        if(ext == 1)
3030        {
3031                string = param;
3032                while(string != NULL)
3033                {       
3034                        string = strchr(string, '&');
3035                        if(string != NULL)
3036                                *string++ = '\0';
3037                }
3038                node = getrectimerbytimestamp(timerid);
3039        }
3040        else
3041                node = getrectimerbytimestamp(param);
3042
3043        if(node == NULL)
3044        {
3045                buf = ostrcat(buf, "ERROR: timer not found", 1, 0);     
3046                return buf;
3047        }
3048       
3049        delrectimer(node, 1, 0);
3050       
3051        if(ext == 1)
3052                buf = ostrcat(buf, "ok -> timer deleted", 1, 0);
3053        else
3054                buf = webgetrectimer(NULL, 0, fmt);
3055       
3056        return buf;
3057}
3058
3059void putxmessage(struct stimerthread* timernode, char* captiontime, char* body)
3060{
3061        struct splitstr* ret1 = NULL;
3062        char* caption = NULL;
3063        int count1 = 0;
3064        int timeout = 5;
3065
3066        ret1 = strsplit(captiontime, "\t", &count1);
3067
3068        if(count1 >= 2)
3069        {
3070                caption = ostrcat(caption, (&ret1[0])->part, 1, 0);
3071                if((&ret1[1])->part != NULL)
3072                        timeout = atoi((&ret1[1])->part);
3073                textbox(caption, body, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 280, timeout, 0);
3074        }
3075
3076        free(caption); free(body); free(captiontime); free(ret1);
3077}
3078
3079void xmessage(char* filename)
3080{
3081        char* param=NULL, *param1 = NULL, *param2 = NULL, *param3 = NULL, *param4 = NULL;
3082        char* caption=NULL, *body=NULL;
3083        char* timeout=NULL;
3084
3085        param4 = ostrstr(filename, "icon=");
3086        param3 = ostrstr(filename, "charset=");
3087        param2 = ostrstr(filename, "timeout=");
3088        param1 = ostrstr(filename, "caption=");
3089        param = ostrstr(filename, "body=");
3090
3091        if(param4 != NULL)
3092        {
3093                param4 = param4 - 1;
3094                *param4 = '\0';
3095                param4 = param4 + 5;
3096                *param4++ = '\0';
3097        }
3098        if(param3 != NULL)
3099        {
3100                param3 = param3 - 1;
3101                *param3 = '\0';
3102                param3 = param3 + 8;
3103                *param3++ = '\0';
3104        }
3105        if(param2 != NULL)
3106        {
3107                param2 = param2 - 1;
3108                *param2 = '\0';
3109                param2 = param2 + 8;
3110                *param2++ = '\0';
3111        }
3112        if(param1 != NULL)
3113        {
3114                param1 = param1 - 1;
3115                *param1 = '\0';
3116                param1 = param1 + 8;
3117                *param1++ = '\0';
3118        }
3119        if(param != NULL)
3120        {
3121                param = param - 1;
3122                *param = '\0';
3123                param = param + 5;
3124                *param++ = '\0';
3125                body = ostrcat(body, param, 1, 0);
3126        }
3127        else
3128                body = ostrcat(body, " ", 1, 0);
3129               
3130        if(param2 != NULL)
3131                timeout = ostrcat(timeout, param2, 1, 0);
3132        else
3133                timeout = ostrcat(timeout, "5", 1, 0);
3134               
3135        if(param1 != NULL)
3136                caption = ostrcat(caption, param1, 1, 0);
3137        else
3138                caption = ostrcat(caption, "XMESSAGE", 1, 0);
3139       
3140        caption = ostrcat(caption, "\t", 1, 0);
3141        caption = ostrcat(caption, timeout, 1, 1);
3142               
3143        addtimer(&putxmessage, START, 1000, 1, (void*)caption, (void*)body, NULL);
3144        return;
3145}
3146
3147char* webgetvol(int fmt)
3148{
3149        char* buf = NULL;
3150
3151        buf = oitoa(getvol());
3152        return buf;
3153}
3154
3155char* webgetrecsteampath(int fmt)
3156{
3157        char* buf = NULL;
3158       
3159        if(getconfig("rec_streampath", NULL) == NULL)
3160                buf = ostrcat(buf, "/var/media/hdd/movie", 1, 0);
3161        else
3162                buf = ostrcat(buf, getconfig("rec_streampath", NULL), 1, 0);
3163
3164        return buf;
3165}
3166
3167char* webgetmute(int fmt)
3168{
3169        char* buf = NULL;
3170
3171        buf = oitoa(status.mute);
3172        return buf;
3173}
3174
3175char* webgetrccodes(int fmt)
3176{
3177        int i = 0;
3178        char* buf = NULL;
3179        struct clist* node = NULL;
3180
3181        m_lock(&status.clistmutex, 12);
3182        struct clist **clist = rcconfig;
3183
3184        for(i = 0; i < LISTHASHSIZE; i++)
3185        {
3186                node = clist[i];
3187
3188                while(node != NULL)
3189                {
3190                        buf = ostrcat(buf, node->key, 1, 0);
3191                        buf = ostrcat(buf, "#", 1, 0);
3192                        buf = ostrcat(buf, node->value, 1, 0);
3193                        buf = ostrcat(buf, "\n", 1, 0);
3194                        node = node->next;
3195                }
3196        }
3197
3198        m_unlock(&status.clistmutex, 12);
3199        return buf;
3200}
3201
3202char* webgetconfig(int fmt)
3203{
3204        char* buf = NULL;
3205        struct clist *node = NULL;
3206        int i = 0;
3207
3208        m_lock(&status.clistmutex, 12);
3209        if(fmt == 0)
3210        {
3211                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
3212                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
3213                buf = ostrcat(buf, "</head><body class=body id=\"configinfo\">", 1, 0);
3214        }
3215                                                       
3216        struct clist **clist = config;
3217
3218        for(i = 0; i < LISTHASHSIZE; i++)
3219        {
3220                node = clist[i];
3221
3222                while(node != NULL)
3223                {
3224                        if(node->tmp != NULL && strlen(node->tmp) > 0)
3225                        {
3226                                buf = ostrcat(buf, node->key, 1, 0);
3227                                buf = ostrcat(buf, "#", 1, 0);
3228                                buf = ostrcat(buf, node->tmp, 1, 0);
3229                                buf = ostrcat(buf, "\n", 1, 0);
3230                        }
3231                        else if(node->value != NULL)
3232                        {
3233                                buf = ostrcat(buf, node->key, 1, 0);
3234                                buf = ostrcat(buf, "#", 1, 0);
3235                                buf = ostrcat(buf, node->value, 1, 0);
3236                                buf = ostrcat(buf, "\n", 1, 0);
3237                        }
3238                        else
3239                        {
3240                                buf = ostrcat(buf, node->key, 1, 0);
3241                                buf = ostrcat(buf, "#", 1, 0);
3242                                buf = ostrcat(buf, node->def, 1, 0);
3243                                buf = ostrcat(buf, "\n", 1, 0);
3244                        }
3245
3246                        node = node->next;
3247                }
3248        }
3249
3250        buf = string_replace_all("\n", "<br>\n", buf, 1);
3251
3252        if(fmt == 0)
3253        {
3254                buf = ostrcat(buf, "</body></html>", 1, 0);
3255        }
3256       
3257        m_unlock(&status.clistmutex, 12);
3258        return buf;
3259}
3260
3261char* webgetsysteminfo(int fmt)
3262{
3263        char* buf = NULL;
3264        char* imgversion = NULL;
3265
3266        if(fmt == 0)
3267        {
3268                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
3269                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
3270                buf = ostrcat(buf, "</head><body class=body id=\"systeminfo\">", 1, 0);
3271        }
3272
3273        buf = ostrcat(buf, PROGNAME, 1, 0);
3274        buf = ostrcat(buf, "#", 1, 0);
3275        buf = ostrcat(buf, COPYRIGHT, 1, 0);
3276        buf = ostrcat(buf, "#", 1, 0);
3277        buf = ostrcat(buf, OVERSION, 1, 0);
3278        buf = ostrcat(buf, "#", 1, 0);
3279       
3280        if(isfile(getconfig("imagenamefile", NULL))     != 0)
3281                imgversion = readsys(getconfig("imagenamefile", NULL), 1);
3282        else
3283                imgversion = ostrcat("unknown", NULL, 0, 0);
3284       
3285        buf = ostrcat(buf, imgversion, 1, 1);
3286        buf = ostrcat(buf, "#", 1, 0);
3287        buf = ostrcat(buf, getboxtype(), 1, 0);
3288        buf = ostrcat(buf, "#", 1, 0);
3289        buf = ostrcat(buf, ollutoa(time(NULL)), 1, 1);
3290        buf = ostrcat(buf, "#", 1, 0);
3291
3292        if(status.standby == 0)
3293                buf = ostrcat(buf, "0", 1, 0);
3294        else
3295                buf = ostrcat(buf, "1", 1, 0);
3296
3297        if(fmt == 0)
3298        {
3299                buf = ostrcat(buf, "</body></html>", 1, 0);
3300        }       
3301       
3302        return buf;
3303}
3304
3305char* webgetchannellock(char* param, int fmt)
3306{
3307        char* buf = NULL, *param1 = NULL;
3308        struct channel* chnode = NULL;
3309
3310        if(param == NULL) return NULL;
3311
3312        //create param1
3313        param1 = strchr(param, '&');
3314        if(param1 != NULL)
3315                *param1++ = '\0';
3316
3317        if(param1 == NULL) return NULL;
3318
3319        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
3320        if(chnode != NULL)
3321        {
3322                buf = ostrcat(buf, chnode->name, 1, 0);
3323                buf = ostrcat(buf, "#", 1, 0);
3324                buf = ostrcat(buf, oitoa(chnode->serviceid), 1, 1);
3325                buf = ostrcat(buf, "#", 1, 0);
3326                buf = ostrcat(buf, ollutoa(chnode->transponderid), 1, 1);
3327                buf = ostrcat(buf, "#", 1, 0);
3328
3329                if(channelnottunable(chnode) == 1)
3330                        buf = ostrcat(buf, "1", 1, 0);
3331                else
3332                        buf = ostrcat(buf, "0", 1, 0);
3333        }
3334        else
3335                buf = ostrcat("no data", NULL, 0, 0);
3336
3337        return buf;
3338}
3339
3340char* webgetbouquetepg(char* param, int fmt)
3341{
3342        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
3343        char* param1 = NULL, *param2 = NULL, *param3 = NULL;
3344        struct mainbouquet *mbouquet = NULL;
3345        struct bouquet *node = NULL;
3346        struct channel* chnode = NULL;
3347        struct epg* epgnode = NULL;
3348        int longepg = 0;
3349        time_t start = 0, end = 0;
3350
3351        if(param == NULL) return NULL;
3352
3353        //create param1 + 2 + 3
3354        param1 = strchr(param, '&');
3355        if(param1 != NULL)
3356        {
3357                *param1++ = '\0';
3358                param2 = strchr(param1, '&');
3359                if(param2 != NULL)
3360                {
3361                        *param2++ = '\0';
3362                        param3 = strchr(param2, '&');
3363                        if(param3 != NULL)
3364                                *param3++ = '\0';
3365                }
3366        }
3367        if(param1 == NULL || param2 == NULL || param3 == NULL) return NULL;
3368
3369        longepg = atoi(param1);
3370        start = atoi(param2);
3371        end = atoi(param3);
3372
3373        mbouquet = getmainbouquet(param);
3374        if(mbouquet != NULL)
3375        {
3376                node = mbouquet->bouquet;
3377                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 1, 0);
3378                tmpstr = ostrcat(tmpstr, mbouquet->name, 1, 0);
3379                tmpstr1 = htmlencode(tmpstr);
3380                free(tmpstr); tmpstr = NULL;
3381                while(node != NULL)
3382                {
3383                        chnode = getchannel(node->serviceid, node->transponderid);
3384                        if(chnode != NULL)
3385                        {
3386                                buf = ostrcat(buf, "BeginNewChannel", 1, 0);
3387                                buf = ostrcat(buf, "#", 1, 0);
3388                                buf = ostrcat(buf, chnode->name, 1, 0);
3389                                buf = ostrcat(buf, "#", 1, 0);
3390                                buf = ostrcat(buf, oitoa(chnode->serviceid), 1, 1);
3391                                buf = ostrcat(buf, "#", 1, 0);
3392                                buf = ostrcat(buf, ollutoa(chnode->transponderid), 1, 1);
3393                                buf = ostrcat(buf, "#", 1, 0);
3394                                buf = ostrcat(buf, oitoa(chnode->servicetype), 1, 1);
3395                                buf = ostrcat(buf, "\n", 1, 0);
3396
3397                                epgnode = chnode->epg;
3398                                while(epgnode != NULL)
3399                                {
3400                                        if((epgnode->starttime >= start && epgnode->starttime < end) || (epgnode->endtime > start && epgnode->endtime <= end) || (epgnode->starttime < start && epgnode->endtime > end))
3401                                        {
3402                                                buf = ostrcat(buf, epgnode->title, 1, 0);
3403                                                buf = ostrcat(buf, "#", 1, 0);
3404                                                buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
3405                                                buf = ostrcat(buf, "#", 1, 0);
3406                                                buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
3407                                                buf = ostrcat(buf, "#", 1, 0);
3408                                                buf = ostrcat(buf, epgnode->subtitle, 1, 0);
3409                                                buf = ostrcat(buf, "#", 1, 0);
3410
3411                                                if(longepg == 1)
3412                                                {
3413                                                        tmpstr = epgdescunzip(epgnode);
3414                                                        if(tmpstr != NULL)
3415                                                                buf = ostrcat(buf, tmpstr, 1, 0);
3416                                                        free(tmpstr); tmpstr = NULL;
3417                                                }
3418
3419                                                buf = ostrcat(buf, "#", 1, 0);
3420                                                buf = ostrcat(buf, oitoa(epgnode->eventid), 1, 1);
3421                                                buf = ostrcat(buf, "\n", 1, 0);
3422                                        }
3423
3424                                        epgnode = epgnode->next;
3425                                }
3426                        }
3427                        node = node->next;
3428                }
3429                free(tmpstr1); tmpstr1 = NULL;
3430        }
3431
3432        if(buf == NULL)
3433                buf = ostrcat("no data", NULL, 0, 0);
3434        return buf;
3435}
3436
3437char* webadjust(char* param, int fmt)
3438{
3439printf("webadjust param: %s\n",param);
3440printf("webadjust fmt: %d\n",fmt);
3441
3442        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *sendstr = NULL;
3443        int i = 0, max = 0, count = 0, maxlen = 0, pos = 0;
3444
3445       
3446        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"stylesheet\" type=\"text/css\" href=\"titan.css\"></head>", &maxlen, &pos);
3447        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
3448        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
3449        ostrcatbig(&buf, "<input type=\"hidden\" name=\"adjustsend&node\" value=\"", &maxlen, &pos);
3450        ostrcatbig(&buf, "0", &maxlen, &pos);
3451        ostrcatbig(&buf, "\">", &maxlen, &pos);
3452//      ostrcatbig(&buf, "<input type=\"hidden\" name=\"adjustsend\">", &maxlen, &pos);
3453        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
3454
3455        ostrcatbig(&buf, "<table>", &maxlen, &pos);
3456
3457///////////////////
3458//      ostrcatbig(&buf, "<tr><td><font class=\"label\">Volbartimeout:&nbsp;</font></td><td><select name=\"volbartimeout\" border=\"0\"><option value=\"1\" selected>1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option><option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option><option value=\"10\">10</option></select></td></tr>", &maxlen, &pos);
3459        max = 10;
3460        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3461        ostrcatbig(&buf, _("Volumebar Timeout"), &maxlen, &pos);
3462        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"volbartimeout\" border=\"0\">", &maxlen, &pos);
3463        for(i = 1; i <= max; i++)
3464        {
3465                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3466                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);             
3467                if(getconfigint("volbartimeout", NULL) == i)
3468                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3469                else
3470                        ostrcatbig(&buf, "\">", &maxlen, &pos);
3471                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
3472                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3473        }
3474        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3475        sendstr = ostrcat(sendstr, "volbartimeout.value", 1 , 0);
3476
3477///////////////////
3478//      ostrcatbig(&buf, "<tr><td><font class=\"label\">Infobartimeout:&nbsp;</font></td><td><select name=\"infobartimeout\" border=\"0\"><option value=\"1\" selected>1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option><option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option><option value=\"10\">10</option></select></td></tr>", &maxlen, &pos);
3479        max = 10;
3480        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3481        ostrcatbig(&buf, _("Infobar Timeout"), &maxlen, &pos);
3482        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"infobartimeout\" border=\"0\">", &maxlen, &pos);
3483        for(i = 1; i <= max; i++)
3484        {
3485                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3486                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);     
3487                if(getconfigint("infobartimeout", NULL) == i)
3488                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3489                else
3490                        ostrcatbig(&buf, "\">", &maxlen, &pos);
3491                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
3492                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3493        }
3494        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3495        sendstr = ostrcat(sendstr, ", infobartimeout.value", 1 , 0);
3496
3497///////////////////
3498//      ostrcatbig(&buf, "<tr><td><font class=\"label\">Infobar Sleep:&nbsp;</font></td><td><select name=\"infobarsleep\" border=\"0\"><option value=\"0\">0</option><option value=\"1\" selected>1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option></select></td></tr>", &maxlen, &pos);
3499        max = 5;
3500        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3501        ostrcatbig(&buf, _("Infobar Sleep"), &maxlen, &pos);
3502        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"infobarsleep\" border=\"0\">", &maxlen, &pos);
3503        for(i = 0; i <= max; i++)
3504        {
3505                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3506                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);             
3507                if(getconfigint("infobarsleep", NULL) == i)
3508                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3509                else
3510                        ostrcatbig(&buf, "\">", &maxlen, &pos);
3511                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
3512                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3513        }
3514        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3515        sendstr = ostrcat(sendstr, ", infobarsleep.value", 1 , 0);
3516
3517///////////////////
3518//      ostrcatbig(&buf, "<tr><td><font class=\"label\">Infobar Sleep:&nbsp;</font></td><td><select name=\"infobarsleep\" border=\"0\"><option value=\"0\">0</option><option value=\"1\" selected>1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option></select></td></tr>", &maxlen, &pos);
3519        max = 5;
3520        tmpstr = ostrcat("1\n3\n9\n12\n15\n18\n21\n24\n27\n30", NULL, 0, 0);
3521
3522        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3523        ostrcatbig(&buf, _("Spinnerspeed"), &maxlen, &pos);
3524        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"spinnerspeed\" border=\"0\">", &maxlen, &pos);
3525
3526        count = 0;
3527        struct splitstr* ret1 = NULL;
3528        ret1 = strsplit(tmpstr, "\n", &count);
3529        max = count - 1;
3530
3531        if(ret1 != NULL)
3532        {
3533                for(i = 0; i <= max; i++)
3534                {
3535                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3536                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3537                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3538                        if(getconfigint("spinnerspeed", NULL) == atoi(tmpstr1))
3539                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3540                        else
3541                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3542                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3543                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3544                }
3545        }
3546        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3547        sendstr = ostrcat(sendstr, ", spinnerspeed.value", 1 , 0);
3548        free(ret1), ret1 = NULL;
3549        free(tmpstr), tmpstr = NULL;
3550        free(tmpstr1), tmpstr1 = NULL;
3551
3552///////////////////
3553        tmpstr = ostrcat("1\n2\n3\n4\n5\n6\n7\n8\n10000", NULL, 0, 0);
3554
3555        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3556        ostrcatbig(&buf, _("Spinnertime"), &maxlen, &pos);
3557        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"spinnertime\" border=\"0\">", &maxlen, &pos);
3558
3559        count = 0;
3560        ret1 = strsplit(tmpstr, "\n", &count);
3561        max = count - 1;
3562
3563        if(ret1 != NULL)
3564        {
3565                for(i = 0; i <= max; i++)
3566                {
3567                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3568                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3569                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3570                        if(getconfigint("spinnertime", NULL) == atoi(tmpstr1)) 
3571                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3572                        else
3573                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3574                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3575                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3576                }
3577        }
3578        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3579        sendstr = ostrcat(sendstr, ", spinnertime.value", 1 , 0);
3580        free(ret1), ret1 = NULL;
3581        free(tmpstr), tmpstr = NULL;
3582        free(tmpstr1), tmpstr1 = NULL;
3583
3584///////////////////
3585        tmpstr = ostrcat("5\n10\n15\n30\n60\n120\n10000", NULL, 0, 0);
3586
3587        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3588        ostrcatbig(&buf, _("Hangtime"), &maxlen, &pos);
3589        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"hangtime\" border=\"0\">", &maxlen, &pos);
3590
3591        count = 0;
3592        ret1 = strsplit(tmpstr, "\n", &count);
3593        max = count - 1;
3594
3595        if(ret1 != NULL)
3596        {
3597                for(i = 0; i <= max; i++)
3598                {
3599                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3600                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3601                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3602                        if(getconfigint("hangtime", NULL) == atoi(tmpstr1))
3603                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3604                        else
3605                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3606                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3607                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3608                }
3609        }
3610        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3611        sendstr = ostrcat(sendstr, ", hangtime.value", 1 , 0);
3612        free(ret1), ret1 = NULL;
3613        free(tmpstr), tmpstr = NULL;
3614        free(tmpstr1), tmpstr1 = NULL;
3615
3616///////////////////
3617//      ostrcatbig(&buf, "<tr><td><font class=\"label\">Second Infobar:&nbsp;</font></td><td><select name=\"secondinfobar\" border=\"0\"><option value=\"0\">no</option><option value=\"1\" selected>infobar</option><option value=\"2\">epg</option><option value=\"3\">channel epg</option></select></td></tr>", &maxlen, &pos);
3618        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3619        ostrcatbig(&buf, _("Second Infobar"), &maxlen, &pos);
3620        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"secondinfobar\" border=\"0\">", &maxlen, &pos);
3621       
3622        if(getconfigint("secondinfobar", NULL) == 0)
3623                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3624        else
3625                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3626        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3627        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3628
3629        if(getconfigint("secondinfobar", NULL) == 1)
3630                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3631        else
3632                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3633        ostrcatbig(&buf, _("infobar"), &maxlen, &pos);
3634        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3635
3636        if(getconfigint("secondinfobar", NULL) == 2)
3637                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3638        else
3639                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3640        ostrcatbig(&buf, _("epg"), &maxlen, &pos);
3641        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3642
3643        if(getconfigint("secondinfobar", NULL) == 3)
3644                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3645        else
3646                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3647        ostrcatbig(&buf, _("Channel EPG"), &maxlen, &pos);
3648        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3649       
3650        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3651        sendstr = ostrcat(sendstr, ", secondinfobar.value", 1 , 0);
3652
3653///////////////////
3654        if(checkbox("ATEMIO7600") != 1)
3655        {
3656                ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3657                ostrcatbig(&buf, _("Don't clear TV on zap (only with fastzap)"), &maxlen, &pos);
3658                ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"nozapclear\" border=\"0\">", &maxlen, &pos);
3659       
3660                if(getconfigint("nozapclear", NULL) == 0)
3661                        ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3662                else
3663                        ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3664                ostrcatbig(&buf, _("no"), &maxlen, &pos);
3665                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3666
3667                if(getconfigint("nozapclear", NULL) == 1)
3668                        ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3669                else
3670                        ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3671                ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3672                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3673       
3674                ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3675                sendstr = ostrcat(sendstr, ", nozapclear.value", 1 , 0);
3676        }
3677
3678///////////////////
3679        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3680        ostrcatbig(&buf, _("Fastzap"), &maxlen, &pos);
3681        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"fastzap\" border=\"0\">", &maxlen, &pos);
3682       
3683        if(getconfigint("fastzap", NULL) == 0)
3684                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3685        else
3686                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3687        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3688        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3689
3690        if(getconfigint("fastzap", NULL) == 1)
3691                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3692        else
3693                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3694        ostrcatbig(&buf, _("medium"), &maxlen, &pos);
3695        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3696
3697        if(getconfigint("fastzap", NULL) == 2)
3698                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3699        else
3700                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3701        ostrcatbig(&buf, _("fast"), &maxlen, &pos);
3702        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3703       
3704        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3705        sendstr = ostrcat(sendstr, ", fastzap.value", 1 , 0);
3706
3707///////////////////
3708        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3709        ostrcatbig(&buf, _("Faststop"), &maxlen, &pos);
3710        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"faststop\" border=\"0\">", &maxlen, &pos);
3711       
3712        if(getconfigint("faststop", NULL) == 0)
3713                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3714        else
3715                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3716        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3717        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3718
3719        if(getconfigint("faststop", NULL) == 1)
3720                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3721        else
3722                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3723        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3724        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3725       
3726        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3727        sendstr = ostrcat(sendstr, ", faststop.value", 1 , 0);
3728
3729///////////////////
3730        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3731        ostrcatbig(&buf, _("Dirsort"), &maxlen, &pos);
3732        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"dirsort\" border=\"0\">", &maxlen, &pos);
3733       
3734        if(getconfigint("dirsort", NULL) == 0)
3735                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3736        else
3737                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3738        ostrcatbig(&buf, _("alpha"), &maxlen, &pos);
3739        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3740
3741        if(getconfigint("dirsort", NULL) == 1)
3742                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3743        else
3744                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3745        ostrcatbig(&buf, _("reverse alpha"), &maxlen, &pos);
3746        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3747
3748        if(getconfigint("dirsort", NULL) == 2)
3749                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3750        else
3751                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3752        ostrcatbig(&buf, _("size"), &maxlen, &pos);
3753        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3754
3755        if(getconfigint("dirsort", NULL) == 3)
3756                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3757        else
3758                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3759        ostrcatbig(&buf, _("reverse size"), &maxlen, &pos);
3760        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3761
3762        if(getconfigint("dirsort", NULL) == 4)
3763                ostrcatbig(&buf, "<option value=\"4\" selected>", &maxlen, &pos);               
3764        else
3765                ostrcatbig(&buf, "<option value=\"4\">", &maxlen, &pos);
3766        ostrcatbig(&buf, _("date"), &maxlen, &pos);
3767        ostrcatbig(&buf, "</option>", &maxlen, &pos);   
3768
3769        if(getconfigint("dirsort", NULL) == 5)
3770                ostrcatbig(&buf, "<option value=\"5\" selected>", &maxlen, &pos);               
3771        else
3772                ostrcatbig(&buf, "<option value=\"5\">", &maxlen, &pos);
3773        ostrcatbig(&buf, _("reverse date"), &maxlen, &pos);
3774        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3775       
3776        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3777        sendstr = ostrcat(sendstr, ", dirsort.value", 1 , 0);
3778
3779///////////////////
3780        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3781        ostrcatbig(&buf, _("Power aktion"), &maxlen, &pos);
3782        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"poweraktion\" border=\"0\">", &maxlen, &pos);
3783       
3784        if(getconfigint("poweraktion", NULL) == 0)
3785                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3786        else
3787                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3788        ostrcatbig(&buf, _("Power Menu"), &maxlen, &pos);
3789        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3790
3791        if(getconfigint("poweraktion", NULL) == 1)
3792                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3793        else
3794                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3795        ostrcatbig(&buf, _("Power Off"), &maxlen, &pos);
3796        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3797
3798        if(getconfigint("poweraktion", NULL) == 2)
3799                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3800        else
3801                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3802        ostrcatbig(&buf, _("Standby"), &maxlen, &pos);
3803        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3804
3805        if(getconfigint("poweraktion", NULL) == 3)
3806                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3807        else
3808                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3809        ostrcatbig(&buf, _("Restart"), &maxlen, &pos);
3810        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3811
3812        if(getconfigint("poweraktion", NULL) == 4)
3813                ostrcatbig(&buf, "<option value=\"4\" selected>", &maxlen, &pos);               
3814        else
3815                ostrcatbig(&buf, "<option value=\"4\">", &maxlen, &pos);
3816        ostrcatbig(&buf, _("Gui Restart"), &maxlen, &pos);
3817        ostrcatbig(&buf, "</option>", &maxlen, &pos);   
3818       
3819        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3820        sendstr = ostrcat(sendstr, ", poweraktion.value", 1 , 0);
3821
3822///////////////////
3823        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3824        ostrcatbig(&buf, _("Virtualzap Timeout"), &maxlen, &pos);
3825        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"virtualzap\" border=\"0\">", &maxlen, &pos);
3826       
3827        if(getconfigint("virtualzap", NULL) == 0)
3828                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3829        else
3830                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3831        ostrcatbig(&buf, _("deaktiv"), &maxlen, &pos);
3832        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3833
3834        if(getconfigint("virtualzap", NULL) == 1)
3835                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3836        else
3837                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3838        ostrcatbig(&buf, _("1 sec"), &maxlen, &pos);
3839        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3840
3841        if(getconfigint("virtualzap", NULL) == 2)
3842                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3843        else
3844                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3845        ostrcatbig(&buf, _("2 sec"), &maxlen, &pos);
3846        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3847
3848        if(getconfigint("virtualzap", NULL) == 3)
3849                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3850        else
3851                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3852        ostrcatbig(&buf, _("endless"), &maxlen, &pos);
3853        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3854       
3855        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3856        sendstr = ostrcat(sendstr, ", virtualzap.value", 1 , 0);
3857       
3858///////////////////
3859        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3860        ostrcatbig(&buf, _("Fast Text Render"), &maxlen, &pos);
3861        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"fasttextrender\" border=\"0\">", &maxlen, &pos);
3862       
3863        if(getconfigint("fasttextrender", NULL) == 0)
3864                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3865        else
3866                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3867        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3868        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3869
3870        if(getconfigint("fasttextrender", NULL) == 1)
3871                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3872        else
3873                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3874        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3875        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3876       
3877        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3878        sendstr = ostrcat(sendstr, ", fasttextrender.value", 1 , 0);
3879
3880///////////////////
3881        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3882        ostrcatbig(&buf, _("Record Split Size"), &maxlen, &pos);
3883        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recsplitsize\" border=\"0\">", &maxlen, &pos);
3884       
3885        if(getconfigint("recsplitsize", NULL) == 0)
3886                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3887        else
3888                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3889        ostrcatbig(&buf, _("deaktiv"), &maxlen, &pos);
3890        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3891
3892        if(getconfigint("recsplitsize", NULL) == 1)
3893                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3894        else
3895                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3896        ostrcatbig(&buf, _("1 GB"), &maxlen, &pos);
3897        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3898
3899        if(getconfigint("recsplitsize", NULL) == 2)
3900                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3901        else
3902                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3903        ostrcatbig(&buf, _("2 GB"), &maxlen, &pos);
3904        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3905
3906        if(getconfigint("recsplitsize", NULL) == 3)
3907                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3908        else
3909                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3910        ostrcatbig(&buf, _("3 GB"), &maxlen, &pos);
3911        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3912
3913        if(getconfigint("recsplitsize", NULL) == 4)
3914                ostrcatbig(&buf, "<option value=\"4\" selected>", &maxlen, &pos);               
3915        else
3916                ostrcatbig(&buf, "<option value=\"4\">", &maxlen, &pos);
3917        ostrcatbig(&buf, _("4 GB"), &maxlen, &pos);
3918        ostrcatbig(&buf, "</option>", &maxlen, &pos);   
3919       
3920        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3921        sendstr = ostrcat(sendstr, ", recsplitsize.value", 1 , 0);
3922
3923///////////////////
3924        tmpstr = ostrcat("0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n15\n20\n25\n30\n35\n40\n45\n50\n55\n60", NULL, 0, 0);
3925
3926        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3927        ostrcatbig(&buf, _("Record Forerun (min)"), &maxlen, &pos);
3928        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recforerun\" border=\"0\">", &maxlen, &pos);
3929
3930        count = 0;
3931        ret1 = strsplit(tmpstr, "\n", &count);
3932        max = count - 1;
3933
3934        if(ret1 != NULL)
3935        {
3936                for(i = 0; i <= max; i++)
3937                {
3938                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3939                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3940                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3941                        if(getconfigint("recforerun", NULL) == atoi(tmpstr1))
3942                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3943                        else
3944                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3945                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3946                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3947                }
3948        }
3949        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3950        sendstr = ostrcat(sendstr, ", recforerun.value", 1 , 0);
3951        free(ret1), ret1 = NULL;
3952        free(tmpstr), tmpstr = NULL;
3953        free(tmpstr1), tmpstr1 = NULL;
3954
3955///////////////////
3956        tmpstr = ostrcat("0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n15\n20\n25\n30\n35\n40\n45\n50\n55\n60", NULL, 0, 0);
3957
3958        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3959        ostrcatbig(&buf, _("Record Overrun (min)"), &maxlen, &pos);
3960        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recoverrun\" border=\"0\">", &maxlen, &pos);
3961
3962        count = 0;
3963        ret1 = strsplit(tmpstr, "\n", &count);
3964        max = count - 1;
3965
3966        if(ret1 != NULL)
3967        {
3968                for(i = 0; i <= max; i++)
3969                {
3970                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3971                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3972                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3973                        if(getconfigint("recoverrun", NULL) == atoi(tmpstr1))
3974                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3975                        else
3976                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3977                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3978                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3979                }
3980        }
3981        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
3982        sendstr = ostrcat(sendstr, ", recoverrun.value", 1 , 0);
3983        free(ret1), ret1 = NULL;
3984        free(tmpstr), tmpstr = NULL;
3985        free(tmpstr1), tmpstr1 = NULL;
3986
3987///////////////////
3988        tmpstr = ostrcat("15\n20\n30\n45\n60\n90\n120\n180\n300\n600\n900\n1200", NULL, 0, 0);
3989
3990        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3991        ostrcatbig(&buf, _("Skip 1/3"), &maxlen, &pos);
3992        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"skip13\" border=\"0\">", &maxlen, &pos);
3993
3994        count = 0;
3995        ret1 = strsplit(tmpstr, "\n", &count);
3996        max = count - 1;
3997
3998        if(ret1 != NULL)
3999        {
4000                for(i = 0; i <= max; i++)
4001                {
4002                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
4003                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
4004                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
4005                        if(getconfigint("skip13", NULL) == atoi(tmpstr1))
4006                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
4007                        else
4008                                ostrcatbig(&buf, "\">", &maxlen, &pos);
4009                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
4010                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4011                }
4012        }
4013        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4014        sendstr = ostrcat(sendstr, ", skip13.value", 1 , 0);
4015        free(ret1), ret1 = NULL;
4016        free(tmpstr), tmpstr = NULL;
4017        free(tmpstr1), tmpstr1 = NULL;
4018
4019///////////////////
4020        tmpstr = ostrcat("15\n20\n30\n45\n60\n90\n120\n180\n300\n600\n900\n1200", NULL, 0, 0);
4021
4022        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4023        ostrcatbig(&buf, _("Skip 4/6"), &maxlen, &pos);
4024        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"skip46\" border=\"0\">", &maxlen, &pos);
4025
4026        count = 0;
4027        ret1 = strsplit(tmpstr, "\n", &count);
4028        max = count - 1;
4029
4030        if(ret1 != NULL)
4031        {
4032                for(i = 0; i <= max; i++)
4033                {
4034                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
4035                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
4036                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
4037                        if(getconfigint("skip46", NULL) == atoi(tmpstr1))
4038                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
4039                        else
4040                                ostrcatbig(&buf, "\">", &maxlen, &pos);
4041                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
4042                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4043                }
4044        }
4045        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4046        sendstr = ostrcat(sendstr, ", skip46.value", 1 , 0);
4047        free(ret1), ret1 = NULL;
4048        free(tmpstr), tmpstr = NULL;
4049        free(tmpstr1), tmpstr1 = NULL;
4050       
4051///////////////////
4052        tmpstr = ostrcat("15\n20\n30\n45\n60\n90\n120\n180\n300\n600\n900\n1200", NULL, 0, 0);
4053
4054        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4055        ostrcatbig(&buf, _("Skip 7/9"), &maxlen, &pos);
4056        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"skip79\" border=\"0\">", &maxlen, &pos);
4057
4058        count = 0;
4059        ret1 = strsplit(tmpstr, "\n", &count);
4060        max = count - 1;
4061
4062        if(ret1 != NULL)
4063        {
4064                for(i = 0; i <= max; i++)
4065                {
4066                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
4067                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
4068                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
4069                        if(getconfigint("skip79", NULL) == atoi(tmpstr1))
4070                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
4071                        else
4072                                ostrcatbig(&buf, "\">", &maxlen, &pos);
4073                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
4074                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4075                }
4076        }
4077        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4078        sendstr = ostrcat(sendstr, ", skip79.value", 1 , 0);
4079        free(ret1), ret1 = NULL;
4080        free(tmpstr), tmpstr = NULL;
4081        free(tmpstr1), tmpstr1 = NULL;
4082       
4083///////////////////
4084        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4085        ostrcatbig(&buf, _("Player for .ts"), &maxlen, &pos);
4086        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"playertype\" border=\"0\">", &maxlen, &pos);
4087       
4088        if(getconfigint("playertype", NULL) == 0)
4089                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4090        else
4091                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4092        ostrcatbig(&buf, _("extern"), &maxlen, &pos);
4093        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4094
4095        if(getconfigint("faststop", NULL) == 1)
4096                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4097        else
4098                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4099        ostrcatbig(&buf, _("intern"), &maxlen, &pos);
4100        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4101       
4102        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4103        sendstr = ostrcat(sendstr, ", playertype.value", 1 , 0);
4104
4105///////////////////
4106        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4107        ostrcatbig(&buf, _("Change Channelname auto."), &maxlen, &pos);
4108        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"autochangechannelname\" border=\"0\">", &maxlen, &pos);
4109       
4110        if(getconfigint("autochangechannelname", NULL) == 0)
4111                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4112        else
4113                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4114        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4115        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4116
4117        if(getconfigint("autochangechannelname", NULL) == 1)
4118                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4119        else
4120                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4121        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4122        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4123       
4124        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4125        sendstr = ostrcat(sendstr, ", autochangechannelname.value", 1 , 0);
4126
4127///////////////////
4128        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4129        ostrcatbig(&buf, _("Set action after rec"), &maxlen, &pos);
4130        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"def_rectimer_after\" border=\"0\">", &maxlen, &pos);
4131       
4132        if(getconfigint("def_rectimer_after", NULL) == 0)
4133                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4134        else
4135                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4136        ostrcatbig(&buf, _("auto"), &maxlen, &pos);
4137        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4138
4139        if(getconfigint("def_rectimer_after", NULL) == 1)
4140                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4141        else
4142                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4143        ostrcatbig(&buf, _("nothing"), &maxlen, &pos);
4144        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4145
4146        if(getconfigint("def_rectimer_after", NULL) == 2)
4147                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
4148        else
4149                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
4150        ostrcatbig(&buf, _("standby"), &maxlen, &pos);
4151        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4152
4153        if(getconfigint("def_rectimer_after", NULL) == 3)
4154                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
4155        else
4156                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
4157        ostrcatbig(&buf, _("power off"), &maxlen, &pos);
4158        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4159       
4160        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4161        sendstr = ostrcat(sendstr, ", def_rectimer_after.value", 1 , 0);
4162
4163///////////////////
4164        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4165        ostrcatbig(&buf, _("Show Timeline in Channellist"), &maxlen, &pos);
4166        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"showchanneltimeline\" border=\"0\">", &maxlen, &pos);
4167       
4168        if(getconfigint("showchanneltimeline", NULL) == 0)
4169                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4170        else
4171                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4172        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4173        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4174
4175        if(getconfigint("showchanneltimeline", NULL) == 1)
4176                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4177        else
4178                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4179        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4180        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4181       
4182        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4183        sendstr = ostrcat(sendstr, ", showchanneltimeline.value", 1 , 0);
4184
4185///////////////////
4186        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4187        ostrcatbig(&buf, _("Animated Screens"), &maxlen, &pos);
4188        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"screenanim\" border=\"0\">", &maxlen, &pos);
4189       
4190        if(getconfigint("screenanim", NULL) == 0)
4191                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4192        else
4193                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4194        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4195        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4196
4197        if(getconfigint("screenanim", NULL) == 1)
4198                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4199        else
4200                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4201        ostrcatbig(&buf, _("anim. width"), &maxlen, &pos);
4202        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4203
4204        if(getconfigint("screenanim", NULL) == 2)
4205                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
4206        else
4207                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
4208        ostrcatbig(&buf, _("anim. height"), &maxlen, &pos);
4209        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4210
4211        if(getconfigint("screenanim", NULL) == 3)
4212                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
4213        else
4214                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
4215        ostrcatbig(&buf, _("anim. both"), &maxlen, &pos);
4216        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4217       
4218        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4219        sendstr = ostrcat(sendstr, ", screenanim.value", 1 , 0);
4220
4221///////////////////
4222        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4223        ostrcatbig(&buf, _("Animated Speed"), &maxlen, &pos);
4224        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"screenanimspeed\" border=\"0\">", &maxlen, &pos);
4225       
4226        if(getconfigint("screenanimspeed", NULL) == 1)
4227                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4228        else
4229                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4230        ostrcatbig(&buf, _("very fast"), &maxlen, &pos);
4231        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4232
4233        if(getconfigint("screenanimspeed", NULL) == 5)
4234                ostrcatbig(&buf, "<option value=\"5\" selected>", &maxlen, &pos);               
4235        else
4236                ostrcatbig(&buf, "<option value=\"5\">", &maxlen, &pos);
4237        ostrcatbig(&buf, _("fast"), &maxlen, &pos);
4238        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4239
4240        if(getconfigint("screenanimspeed", NULL) == 10)
4241                ostrcatbig(&buf, "<option value=\"10\" selected>", &maxlen, &pos);             
4242        else
4243                ostrcatbig(&buf, "<option value=\"10\">", &maxlen, &pos);
4244        ostrcatbig(&buf, _("normal"), &maxlen, &pos);
4245        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4246
4247        if(getconfigint("screenanimspeed", NULL) == 15)
4248                ostrcatbig(&buf, "<option value=\"15\" selected>", &maxlen, &pos);             
4249        else
4250                ostrcatbig(&buf, "<option value=\"15\">", &maxlen, &pos);
4251        ostrcatbig(&buf, _("slow"), &maxlen, &pos);
4252        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4253
4254        if(getconfigint("screenanimspeed", NULL) == 20)
4255                ostrcatbig(&buf, "<option value=\"20\" selected>", &maxlen, &pos);             
4256        else
4257                ostrcatbig(&buf, "<option value=\"20\">", &maxlen, &pos);
4258        ostrcatbig(&buf, _("very slow"), &maxlen, &pos);
4259        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4260       
4261        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4262        sendstr = ostrcat(sendstr, ", screenanimspeed.value", 1 , 0);
4263
4264///////////////////
4265        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4266        ostrcatbig(&buf, _("Channellist view"), &maxlen, &pos);
4267        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"channellistview\" border=\"0\">", &maxlen, &pos);
4268       
4269        if(getconfigint("channellistview", NULL) == 0)
4270                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4271        else
4272                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4273        ostrcatbig(&buf, _("hidden"), &maxlen, &pos);
4274        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4275
4276        if(getconfigint("channellistview", NULL) == 1)
4277                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4278        else
4279                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4280        ostrcatbig(&buf, _("deaktiv"), &maxlen, &pos);
4281        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4282       
4283        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4284        sendstr = ostrcat(sendstr, ", channellistview.value", 1 , 0);
4285
4286///////////////////
4287        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4288        ostrcatbig(&buf, _("Show last pos Question"), &maxlen, &pos);
4289        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"showlastpos\" border=\"0\">", &maxlen, &pos);
4290       
4291        if(getconfigint("showlastpos", NULL) == 0)
4292                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4293        else
4294                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4295        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4296        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4297
4298        if(getconfigint("showlastpos", NULL) == 1)
4299                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4300        else
4301                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4302        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4303        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4304       
4305        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4306        sendstr = ostrcat(sendstr, ", showlastpos.value", 1 , 0);
4307
4308///////////////////
4309        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4310        ostrcatbig(&buf, _("Resync Recording immediately"), &maxlen, &pos);
4311        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recsync\" border=\"0\">", &maxlen, &pos);
4312       
4313        if(getconfigint("recsync", NULL) == 0)
4314                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4315        else
4316                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4317        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4318        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4319
4320        if(getconfigint("recsync", NULL) == 1)
4321                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4322        else
4323                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4324        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4325        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4326       
4327        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4328        sendstr = ostrcat(sendstr, ", recsync.value", 1 , 0);
4329
4330///////////////////
4331        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4332        ostrcatbig(&buf, _("Recording name"), &maxlen, &pos);
4333        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recordnamefmt\" border=\"0\">", &maxlen, &pos);
4334       
4335        if(getconfigint("recordnamefmt", NULL) == 0)
4336                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4337        else
4338                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4339        ostrcatbig(&buf, _("channel-movie"), &maxlen, &pos);
4340        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4341
4342        if(getconfigint("recordnamefmt", NULL) == 1)
4343                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4344        else
4345                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4346        ostrcatbig(&buf, _("movie-channel"), &maxlen, &pos);
4347        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4348       
4349        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4350        sendstr = ostrcat(sendstr, ", recordnamefmt.value", 1 , 0);
4351
4352///////////////////
4353        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4354        ostrcatbig(&buf, _("Newsletter"), &maxlen, &pos);
4355        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"newsletter\" border=\"0\">", &maxlen, &pos);
4356       
4357        if(getconfigint("newsletter", NULL) == 0)
4358                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4359        else
4360                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4361        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4362        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4363
4364        if(getconfigint("newsletter", NULL) == 1)
4365                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4366        else
4367                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4368        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4369        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4370       
4371        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4372        sendstr = ostrcat(sendstr, ", newsletter.value", 1 , 0);
4373
4374///////////////////
4375        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4376        ostrcatbig(&buf, _("Show hidden files"), &maxlen, &pos);
4377        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"showhiddenfiles\" border=\"0\">", &maxlen, &pos);
4378       
4379        if(getconfigint("showhiddenfiles", NULL) == 0)
4380                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4381        else
4382                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4383        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4384        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4385
4386        if(getconfigint("showhiddenfiles", NULL) == 1)
4387                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4388        else
4389                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4390        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4391        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4392       
4393        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4394        sendstr = ostrcat(sendstr, ", showhiddenfiles.value", 1 , 0);
4395
4396///////////////////
4397        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4398        ostrcatbig(&buf, _("Expert Modus"), &maxlen, &pos);
4399        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"expertmodus\" border=\"0\">", &maxlen, &pos);
4400       
4401        if(getconfigint("expertmodus", NULL) == 0)
4402                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4403        else
4404                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4405        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4406        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4407
4408        if(getconfigint("expertmodus", NULL) == 10)
4409                ostrcatbig(&buf, "<option value=\"10\" selected>", &maxlen, &pos);             
4410        else
4411                ostrcatbig(&buf, "<option value=\"10\">", &maxlen, &pos);
4412        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4413        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4414
4415        if(getconfigint("expertmodus", NULL) == 11)
4416                ostrcatbig(&buf, "<option value=\"11\" selected>", &maxlen, &pos);             
4417        else
4418                ostrcatbig(&buf, "<option value=\"11\">", &maxlen, &pos);
4419        ostrcatbig(&buf, _("expert (11)"), &maxlen, &pos);
4420        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4421       
4422        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4423        sendstr = ostrcat(sendstr, ", expertmodus.value", 1 , 0);
4424
4425///////////////////
4426        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4427        ostrcatbig(&buf, _("Show infobar on program change"), &maxlen, &pos);
4428        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"infobarprogram\" border=\"0\">", &maxlen, &pos);
4429       
4430        if(getconfigint("infobarprogram", NULL) == 0)
4431                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4432        else
4433                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4434        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4435        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4436
4437        if(getconfigint("infobarprogram", NULL) == 1)
4438                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4439        else
4440                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4441        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4442        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4443       
4444        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4445        sendstr = ostrcat(sendstr, ", infobarprogram.value", 1 , 0);
4446
4447///////////////////
4448        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4449        ostrcatbig(&buf, _("Use cross control for fast zapping and vol"), &maxlen, &pos);
4450        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"crosscontrol\" border=\"0\">", &maxlen, &pos);
4451       
4452        if(getconfigint("crosscontrol", NULL) == 0)
4453                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4454        else
4455                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4456        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4457        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4458
4459        if(getconfigint("crosscontrol", NULL) == 1)
4460                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4461        else
4462                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4463        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4464        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4465
4466        if(getconfigint("crosscontrol", NULL) == 2)
4467                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
4468        else
4469                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
4470        ostrcatbig(&buf, _("yes / vzap 1 sec"), &maxlen, &pos);
4471        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4472
4473        if(getconfigint("crosscontrol", NULL) == 3)
4474                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
4475        else
4476                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
4477        ostrcatbig(&buf, _("yes / vzap 2 sec"), &maxlen, &pos);
4478        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4479
4480        if(getconfigint("crosscontrol", NULL) == 9999)
4481                ostrcatbig(&buf, "<option value=\"9999\" selected>", &maxlen, &pos);           
4482        else
4483                ostrcatbig(&buf, "<option value=\"9999\">", &maxlen, &pos);
4484        ostrcatbig(&buf, _("yes / vzap endless"), &maxlen, &pos);
4485        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4486       
4487        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4488        sendstr = ostrcat(sendstr, ", crosscontrol.value", 1 , 0);
4489       
4490///////////////////
4491        if(status.security == 1)
4492        {
4493                ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4494                ostrcatbig(&buf, _("Deactivate Crypt Support on Media Playback"), &maxlen, &pos);
4495                ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"emucontrol\" border=\"0\">", &maxlen, &pos);
4496       
4497                if(getconfigint("emucontrol", NULL) == 0)
4498                        ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4499                else
4500                        ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4501                ostrcatbig(&buf, _("no"), &maxlen, &pos);
4502                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4503
4504                if(getconfigint("emucontrol", NULL) == 1)
4505                        ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4506                else
4507                        ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4508                ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4509                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4510       
4511                ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4512                sendstr = ostrcat(sendstr, ", emucontrol.value", 1 , 0);
4513        }
4514
4515///////////////////
4516        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4517        ostrcatbig(&buf, _("Deactivate MiniTV"), &maxlen, &pos);
4518        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"choiceminitv\" border=\"0\">", &maxlen, &pos);
4519       
4520        if(getconfigint("choiceminitv", NULL) == 0)
4521                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4522        else
4523                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4524        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4525        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4526
4527        if(getconfigint("choiceminitv", NULL) == 1)
4528                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4529        else
4530                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4531        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4532        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4533       
4534        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4535        sendstr = ostrcat(sendstr, ", choiceminitv.value", 1 , 0);
4536
4537///////////////////
4538        if(checkbox("ATEMIO510") == 1 || checkbox("UFS912") == 1 || checkbox("ATEMIO7600") == 1 || checkbox("ATEMIO520") == 1 || checkbox("ATEMIO530") == 1)
4539        {
4540                ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4541                ostrcatbig(&buf, _("Activate CEC"), &maxlen, &pos);
4542                ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"usecec\" border=\"0\">", &maxlen, &pos);
4543       
4544                if(getconfigint("usecec", NULL) == 0)
4545                        ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4546                else
4547                        ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4548                ostrcatbig(&buf, _("no"), &maxlen, &pos);
4549                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4550
4551                if(getconfigint("usecec", NULL) == 1)
4552                        ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4553                else
4554                        ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4555                ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4556                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4557       
4558                ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4559                sendstr = ostrcat(sendstr, ", usecec.value", 1 , 0);
4560        }
4561
4562///////////////////
4563        if(checkbox("ATEMIO7600") == 1)
4564        {
4565                ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4566                ostrcatbig(&buf, _("SATA Connector"), &maxlen, &pos);
4567                ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"sataswitch\" border=\"0\">", &maxlen, &pos);
4568       
4569                if(getconfigint("sataswitch", NULL) == 0)
4570                        ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4571                else
4572                        ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4573                ostrcatbig(&buf, _("extern"), &maxlen, &pos);
4574                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4575
4576                if(getconfigint("sataswitch", NULL) == 1)
4577                        ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4578                else
4579                        ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4580                ostrcatbig(&buf, _("intern"), &maxlen, &pos);
4581                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4582       
4583                ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos);
4584                sendstr = ostrcat(sendstr, ", sataswitch.value", 1 , 0);
4585        }
4586
4587///////////////////
4588//      ostrcatbig(&buf, "<tr><td><font class=\"label\">Volbartimeout:&nbsp;</font></td><td><select name=\"volbartimeout\" border=\"0\"><option value=\"1\" selected>1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option><option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option><option value=\"10\">10</option></select></td></tr>", &maxlen, &pos);
4589        max = 10;
4590        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4591        ostrcatbig(&buf, _("Time to wait after seek for fill buffer"), &maxlen, &pos);
4592        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"playerbufferseektime\" border=\"0\">", &maxlen, &pos);
4593        for(i = 1; i <= max; i++)
4594        {
4595                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
4596                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);             
4597                if(getconfigint("playerbufferseektime", NULL) == i)
4598                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
4599                else
4600                        ostrcatbig(&buf, "\">", &maxlen, &pos);
4601                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
4602                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4603        }       
4604        ostrcatbig(&buf, "</select></td></tr>", &maxlen, &pos);
4605        sendstr = ostrcat(sendstr, ", playerbufferseektime.value", 1 , 0);
4606       
4607///////////////////     
4608#ifdef MIPSEL
4609        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4610        ostrcatbig(&buf, _("Dualboot Menu TitanNit / E2"), &maxlen, &pos);
4611        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"dualboot\" border=\"0\">", &maxlen, &pos);
4612
4613//              if(getconfigint("dualboot", NULL) == 0)
4614        if(!file_exist("/mnt/config/dualboot"))
4615                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4616        else
4617                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4618        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4619        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4620
4621//              if(getconfigint("dualboot", NULL) == 1)
4622        if(file_exist("/mnt/config/dualboot"))
4623                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4624        else
4625                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4626        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4627        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4628
4629        ostrcatbig(&buf,"</select></td></tr>", &maxlen, &pos); 
4630        sendstr = ostrcat(sendstr, ", dualboot.value", 1 , 0);
4631#endif
4632       
4633
4634//      ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return checkdaytime(begin.value, end.value)\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
4635//      ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return volbartimeout.value, infobartimeout.value, infobarsleep.value, spinnerspeed.value, spinnertime.value, hangtime.value, secondinfobar.value, nozapclear.value, fastzap.value, faststop.value, dirsort.value, poweraktion.value, virtualzap.value, fasttextrender.value, recsplitsize.value, recforerun.value, recoverrun.value, skip13.value, skip46.value, skip79.value, playertype.value, autochangechannelname.value, def_rectimer_after.value, showchanneltimeline.value, screenanim.value, screenanimspeed.value, channellistview.value, showlastpos.value, recsync.value, recordnamefmt.value, newsletter.value, showhiddenfiles.value, expertmodus.value, infobarprogram.value, emucontrol.value, choiceminitv.value, usecec.value, playerbufferseektime.value, dualboot.value\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
4636// sendstr verwenden
4637        ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return ", &maxlen, &pos);
4638        ostrcatbig(&buf, sendstr, &maxlen, &pos);
4639        ostrcatbig(&buf, "\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
4640       
4641       
4642//writesys("/tmp/tmpstr", buf, 1);
4643        //ostrcatbig(&buf, param, &maxlen, &pos);
4644        return buf;
4645}
4646
4647char* webadjustsend(char* param, int fmt)
4648{
4649        debug(77, "fmt: %d param: %s",fmt , param);
4650
4651        char* buf = NULL;
4652        char* tmpstr = NULL, *tmpstr1 = NULL;
4653
4654        int count, count2,  max, i;
4655
4656        tmpstr = ostrcat(param, NULL, 0, 0);
4657       
4658        count = 0;
4659        struct splitstr* ret1 = NULL;
4660        ret1 = strsplit(tmpstr, "&", &count);
4661        max = count - 1;
4662       
4663        if(ret1 != NULL)
4664        {
4665                for(i = 0; i <= max; i++)
4666                {
4667                        if(ostrcmp(ret1[i].part, "node=0") == 0 || ostrcmp(ret1[i].part, "send=Send") == 0)
4668                        {
4669                                debug(77, "skip: %s", ret1[i].part);
4670                                continue;
4671                        }
4672                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
4673                        count2 = 0;
4674                        struct splitstr* ret2 = NULL;
4675                        ret2 = strsplit(tmpstr1, "=", &count2);
4676                        if(ret2 != NULL && count2 > 1)
4677                        {
4678                                if(ret2[1].part != NULL && ostrcmp(ret2[0].part, "dualboot") == 0)
4679                                {
4680                                        debug(77, "add %s: %s", ret2[0].part, ret2[1].part);
4681                                        if(ostrcmp(ret2[1].part, "0") == 0)
4682                                        {
4683                                                debug(77, "unlink /mnt/config/dualboot");
4684                                                unlink("/mnt/config/dualboot");
4685                                        }
4686                                        else
4687                                        {
4688                                                debug(77, "touch /mnt/config/dualboot");
4689                                                system("touch /mnt/config/dualboot");
4690                                        }
4691                                }
4692                                else if(ret2[1].part != NULL)
4693                                {
4694                                        debug(77, "add %s: %s", ret2[0].part, ret2[1].part);
4695                                        addconfigtmp(ret2[0].part, ret2[1].part);
4696                                }
4697
4698                        }
4699                        free(ret2), ret2 = NULL;
4700                        free(tmpstr1), tmpstr1 = NULL;
4701                }
4702        }
4703        free(ret1), ret1 = NULL;
4704        free(tmpstr), tmpstr = NULL;
4705       
4706        buf = webadjust(NULL, fmt);
4707        writeallconfig(1);
4708
4709        return buf;
4710}
4711
4712char* webgetparamvalue(char* param, char* searchparam)
4713{
4714        char* buf = NULL;
4715        char* tmpstr = NULL;
4716       
4717        tmpstr = ostrcat(param, NULL, 0, 0);
4718        if(tmpstr != NULL) buf = ostrstr(tmpstr, searchparam);
4719        if(buf != NULL) buf = buf + strlen(searchparam);
4720        free(tmpstr); tmpstr = NULL;
4721        buf = stringreplacecharonce(buf, '&', '\0');
4722        debug(77, "webgetparamvalue param: %s", param);
4723        debug(77, "webgetparamvalue search: %s", searchparam);
4724        debug(77, "webgetparamvalue value: %s", buf);
4725        return buf;
4726}
4727
4728char* webgetcommand(char* param, int fmt)
4729{
4730        char* buf = NULL, *tmpstr = NULL;
4731        if(param == NULL) return NULL;
4732        if(status.security == 0) return NULL;
4733
4734//      if(fmt == 0)
4735//      {
4736                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4737                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4738                buf = ostrcat(buf, "</head><body class=body id=\"command\"><center>", 1, 0);
4739//      }
4740
4741        debug(10, "cmd: %s", param);
4742        tmpstr = command(param);
4743        buf = ostrcat(buf, tmpstr, 1, 0);
4744        free(tmpstr), tmpstr = NULL;   
4745
4746        buf = string_replace_all("\n", "<br>", buf, 1);
4747        buf = string_replace_all("<br>", "<br>\n", buf, 1);
4748
4749//      if(fmt == 0)
4750                buf = ostrcat(buf, "</center></body></html>", 1, 0);
4751
4752        return buf;
4753}
4754
4755char* webgetsystem(char* param, int fmt)
4756{
4757        char* buf = NULL;
4758        int ret = 0;
4759        if(param == NULL) return NULL;
4760        if(status.security == 0) return NULL;
4761
4762//      if(fmt == 0)
4763//      {
4764                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4765                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4766                buf = ostrcat(buf, "</head><body class=body id=\"system\"><center>", 1, 0);
4767                buf = ostrcat(buf, "<h1>", 1, 0);
4768//      }
4769
4770        debug(10, "cmd: %s", param);
4771        ret = system(param);
4772
4773        if(ret != 0)
4774                buf = ostrcat(buf, _("Error, Program not started."), 1, 0);
4775        else
4776                buf = ostrcat(buf, _("Program started successfully"), 1, 0);
4777        buf = ostrcat(buf, "<br>", 1, 0);
4778
4779        buf = string_replace_all("<br>", "<br>\n", buf, 1);
4780
4781//      if(fmt == 0)
4782                buf = ostrcat(buf, "</h1></center></body></html>", 1, 0);
4783
4784        return buf;
4785}
4786
4787char* webgethelp(char* param, int fmt)
4788{
4789        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *helppath = NULL, *lang = NULL;
4790        if(param == NULL) return NULL;
4791
4792//      if(fmt == 0)
4793//      {
4794                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4795                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4796                buf = ostrcat(buf, "</head><body class=body id=\"help\"><center>", 1, 0);
4797                buf = ostrcat(buf, "<br>", 1, 0);
4798                buf = ostrcat(buf, "<h1>", 1, 0);
4799                buf = ostrcat(buf, _(param), 1, 0);
4800                buf = ostrcat(buf, "</h1>", 1, 0);
4801                buf = ostrcat(buf, "<br>", 1, 0);
4802//      }
4803
4804        helppath = getconfig("helppath", NULL);
4805        if(helppath == NULL) return NULL;
4806
4807        //get language
4808        lang = ostrcat(getconfig("lang", NULL), NULL, 0, 0);
4809        lang = string_replace("po/", "", lang, 1);
4810
4811        //create full filename
4812        tmpstr = ostrcat(helppath, "/", 0, 0);
4813        tmpstr = ostrcat(tmpstr, lang, 1, 0);
4814        tmpstr = ostrcat(tmpstr, "/", 1, 0);
4815        tmpstr = ostrcat(tmpstr, param, 1, 0);
4816        tmpstr = ostrcat(tmpstr, ".txt", 1, 0);
4817       
4818        debug(10, "file: %s", tmpstr);
4819        tmpstr1 = readfiletomem(tmpstr, 1);
4820
4821        buf = ostrcat(buf, _(tmpstr1), 1, 0);
4822
4823// segfault ??
4824//      free(helppath), helppath = NULL;
4825
4826        free(lang), lang = NULL;
4827        free(tmpstr), tmpstr = NULL;
4828        free(tmpstr1), tmpstr1 = NULL;
4829        buf = string_replace_all("<br>", "<br>\n", buf, 1);
4830
4831//      if(fmt == 0)
4832                buf = ostrcat(buf, "</center></body></html>", 1, 0);
4833
4834        return buf;
4835}
4836
4837char* webgethelpchoices(int fmt)
4838{
4839        char* buf = NULL, *tmpstr = NULL, *helppath = NULL, *lang = NULL, *cmd = NULL;
4840       
4841//      if(fmt == 0)
4842//      {
4843                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4844                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4845                buf = ostrcat(buf, "</head><body class=body id=\"helpchoices\"><center>", 1, 0);
4846                buf = ostrcat(buf, "<br>", 1, 0);
4847                buf = ostrcat(buf, "<h1>", 1, 0);
4848                buf = ostrcat(buf, _("Help"), 1, 0);
4849                buf = ostrcat(buf, "</h1>", 1, 0);
4850                buf = ostrcat(buf, "<br>", 1, 0);
4851//      }
4852
4853        helppath = getconfig("helppath", NULL);
4854        if(helppath == NULL) return NULL;
4855
4856        //get language
4857        lang = ostrcat(getconfig("lang", NULL), NULL, 0, 0);
4858        lang = string_replace("po/", "", lang, 1);
4859
4860        //create full filename
4861        cmd = ostrcat("ls -1 ", helppath, 0, 0);
4862        cmd = ostrcat(cmd, "/", 1, 0);
4863        cmd = ostrcat(cmd, lang, 1, 1);
4864        cmd = ostrcat(cmd, "/", 1, 0);
4865       
4866        debug(10, "cmd: %s", cmd);
4867        tmpstr = command(cmd);
4868       
4869        int count, i, max;
4870        count = 0;
4871        struct splitstr* ret1 = NULL;
4872        ret1 = strsplit(tmpstr, "\n", &count);
4873        max = count - 1;
4874       
4875        buf = ostrcat(buf, "<table cellpadding=5 cellspacing=5><tr><td nowrap>", 1, 0);
4876 
4877        if(ret1 != NULL)
4878        {
4879                for(i = 0; i <= max; i++)
4880                {
4881                        buf = ostrcat(buf, "<a class=linelink2 href=queryraw?gethelp&", 1, 0);
4882                        buf = ostrcat(buf, stringreplacecharonce(ret1[i].part, '.', '\0'), 1, 0);
4883                        buf = ostrcat(buf, " target=main>", 1, 0);
4884                        buf = ostrcat(buf, _(stringreplacecharonce(ret1[i].part, '.', '\0')), 1, 0);
4885                        buf = ostrcat(buf, "</a>", 1, 0);
4886                        buf = ostrcat(buf, "</br></br>", 1, 0);
4887                }
4888        }               
4889
4890// segfault ??
4891//      free(helppath), helppath = NULL;
4892        free(ret1), ret1 = NULL;
4893
4894        free(tmpstr), tmpstr = NULL;
4895        buf = string_replace_all("<br>", "<br>\n", buf, 1);
4896
4897//      if(fmt == 0)
4898                buf = ostrcat(buf, "</td></tr></table></center></body></html>", 1, 0);
4899
4900        return buf;
4901}
4902
4903char* webgettestpage(char* param, int fmt)
4904{
4905        char* buf = NULL, *tmpstr = NULL;
4906        if(param == NULL) return NULL;
4907        if(status.security == 0) return NULL;
4908
4909//      if(fmt == 0)
4910//      {
4911                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4912                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4913                buf = ostrcat(buf, "</head><body class=body id=\"help\"><center>", 1, 0);
4914//      }
4915       
4916        debug(10, "file: %s", param);
4917        tmpstr = readfiletomem(param, 1);
4918
4919        buf = ostrcat(buf, tmpstr, 1, 0);
4920
4921        free(tmpstr), tmpstr = NULL;   
4922        buf = string_replace_all("<br>", "<br>\n", buf, 1);
4923
4924//      if(fmt == 0)
4925                buf = ostrcat(buf, "</center></body></html>", 1, 0);
4926
4927        debug(10, "buf: %s", buf);
4928
4929        return buf;
4930}
4931
4932char* webgetsysteminfos(char* param, int fmt)
4933{
4934        char* buf = NULL, *tmpstr = NULL;
4935        int mode;
4936
4937        mode = atoi(param);
4938        if(fmt == 0)
4939        {
4940                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4941                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4942                buf = ostrcat(buf, "</head><body class=body id=\"systeminfos\"><center>", 1, 0);
4943                buf = ostrcat(buf, "<br>", 1, 0);
4944                buf = ostrcat(buf, "<h1>", 1, 0);
4945                if(mode == 0)
4946                        buf = ostrcat(buf, _("System Status"), 1, 0);
4947                else if(mode == 1)
4948                        buf = ostrcat(buf, _("Free Space"), 1, 0);
4949                else if(mode == 2)
4950                        buf = ostrcat(buf, _("Kernel"), 1, 0);
4951                else if(mode == 3)
4952                        buf = ostrcat(buf, _("Mounts"), 1, 0);
4953                else if(mode == 4)
4954                        buf = ostrcat(buf, _("Network"), 1, 0);
4955                else if(mode == 5)
4956                        buf = ostrcat(buf, _("Ram"), 1, 0);
4957
4958                buf = ostrcat(buf, "</h1>", 1, 0);
4959                buf = ostrcat(buf, "<br>", 1, 0);
4960        }
4961
4962        tmpstr = system_infos(mode);
4963        tmpstr = string_replace_all("\n", "<br>", tmpstr, 1);
4964
4965        buf = ostrcat(buf, tmpstr, 1, 0);
4966
4967        free(tmpstr), tmpstr = NULL;
4968        buf = string_replace_all("<br>", "<br>\n", buf, 1);
4969
4970        if(fmt == 0)
4971        {
4972                buf = ostrcat(buf, "</center></body></html>", 1, 0);
4973        }       
4974       
4975        return buf;
4976}       
4977
4978char* webgetsysinfos(char* param, int fmt)
4979{
4980        char* buf = NULL, *tmpstr = NULL;
4981        int mode;
4982
4983        mode = atoi(param);
4984        if(fmt == 0)
4985        {
4986                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
4987                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
4988                buf = ostrcat(buf, "</head><body class=body id=\"sysinfos\"><center>", 1, 0);
4989                buf = ostrcat(buf, "<br>", 1, 0);
4990                buf = ostrcat(buf, "<h1>", 1, 0);
4991                if(mode == 0)
4992                        buf = ostrcat(buf, _("CPU"), 1, 0);
4993                else if(mode == 1)
4994                        buf = ostrcat(buf, _("Memory"), 1, 0);
4995                else if(mode == 2)
4996                        buf = ostrcat(buf, _("MTD"), 1, 0);
4997                else if(mode == 3)
4998                        buf = ostrcat(buf, _("Module"), 1, 0);
4999                else if(mode == 4)
5000                        buf = ostrcat(buf, _("Devices"), 1, 0);
5001                else if(mode == 5)
5002                        buf = ostrcat(buf, _("Swap"), 1, 0);
5003                else if(mode == 6)
5004                        buf = ostrcat(buf, _("Top"), 1, 0);
5005                else if(mode == 7)
5006                        buf = ostrcat(buf, _("Prozesslist"), 1, 0);
5007                else if(mode == 8)
5008                        buf = ostrcat(buf, _("USB"), 1, 0);
5009
5010                buf = ostrcat(buf, "</h1>", 1, 0);
5011                buf = ostrcat(buf, "<br>", 1, 0);
5012        }
5013
5014        tmpstr = system_infos_sysinfo(mode);
5015        tmpstr = string_replace_all("\n", "<br>", tmpstr, 1);
5016
5017        buf = ostrcat(buf, tmpstr, 1, 0);
5018
5019        free(tmpstr), tmpstr = NULL;
5020        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5021
5022        if(fmt == 0)
5023        {
5024                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5025        }       
5026       
5027        return buf;
5028}       
5029
5030char* webgetlogs(char* param, int fmt)
5031{
5032        char* buf = NULL, *tmpstr = NULL;
5033        int mode;
5034
5035        mode = atoi(param);
5036        if(fmt == 0)
5037        {
5038                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5039                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5040                buf = ostrcat(buf, "</head><body class=body id=\"logs\"><center>", 1, 0);
5041                buf = ostrcat(buf, "<br>", 1, 0);
5042                buf = ostrcat(buf, "<h1>", 1, 0);
5043                if(mode == 0)
5044                        buf = ostrcat(buf, _("Hotline"), 1, 0);
5045                else if(mode == 1)
5046                        buf = ostrcat(buf, _("Svn Changelog"), 1, 0);
5047                else if(mode == 2)
5048                        buf = ostrcat(buf, _("Git Changelog"), 1, 0);
5049                else if(mode == 3)
5050                        buf = ostrcat(buf, _("titan Log"), 1, 0);
5051                else if(mode == 4)
5052                        buf = ostrcat(buf, _("Svn Changelog Full"), 1, 0);
5053                else if(mode == 5)
5054                        buf = ostrcat(buf, _("Git Changelog Full"), 1, 0);
5055
5056                buf = ostrcat(buf, "</h1>", 1, 0);
5057                buf = ostrcat(buf, "<br>", 1, 0);
5058        }
5059
5060        tmpstr = system_logs(mode);
5061        tmpstr = string_replace_all("\n", "<br>", tmpstr, 1);
5062
5063        buf = ostrcat(buf, tmpstr, 1, 0);
5064
5065        free(tmpstr), tmpstr = NULL;
5066        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5067
5068        if(fmt == 0)
5069        {
5070                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5071        }       
5072       
5073        return buf;
5074}       
5075
5076char* webgetabout(int fmt)
5077{
5078        char* buf = NULL, *tmpstr = NULL;
5079
5080        if(fmt == 0)
5081        {
5082                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5083                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5084                buf = ostrcat(buf, "</head><body class=body id=\"about\"><center>", 1, 0);
5085                buf = ostrcat(buf, "<br>", 1, 0);
5086                buf = ostrcat(buf, "<h1>", 1, 0);
5087                buf = ostrcat(buf, _("About"), 1, 0);
5088                buf = ostrcat(buf, "</h1>", 1, 0);
5089                buf = ostrcat(buf, "<br>", 1, 0);
5090        }
5091
5092        tmpstr = getabout();
5093        tmpstr = string_replace_all("\n", "<br>", tmpstr, 1);
5094
5095        buf = ostrcat(buf, tmpstr, 1, 0);
5096
5097        free(tmpstr), tmpstr = NULL;
5098        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5099
5100        if(fmt == 0)
5101        {
5102                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5103        }       
5104       
5105        return buf;
5106}
5107
5108char* webgetnewsletterchoices(int fmt)
5109{
5110        char* buf = NULL;
5111
5112        if(fmt == 0)
5113        {
5114                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5115                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5116                buf = ostrcat(buf, "</head><body class=body id=\"newsletterchoices\"><center>", 1, 0);
5117                buf = ostrcat(buf, "<br>", 1, 0);
5118                buf = ostrcat(buf, "<h1>", 1, 0);
5119                buf = ostrcat(buf, _("Newsletter"), 1, 0);
5120                buf = ostrcat(buf, "</h1>", 1, 0);
5121                buf = ostrcat(buf, "<br>", 1, 0);
5122        }
5123
5124        buf = ostrcat(buf, "<table cellpadding=5 cellspacing=5><tr><td nowrap>", 1, 0);
5125
5126        struct newsletter* node = NULL;
5127
5128        m_lock(&status.newslettermutex, 19);
5129        long unsigned lastnewsletter = getconfiglu("lastnewsletter", NULL);
5130
5131        readnewsletter();
5132        node = newsletter;
5133
5134        while(node != NULL)
5135        {
5136                buf = ostrcat(buf, "<a class=linelink2 href=queryraw?getnewsletter&", 1, 0);
5137                buf = ostrcat(buf, oitoa(node->nr), 1, 0);
5138                buf = ostrcat(buf, " target=main>", 1, 0);
5139                buf = ostrcat(buf, node->title, 1, 0);
5140                buf = ostrcat(buf, " - ", 1, 0);
5141                buf = ostrcat(buf, node->date, 1, 0);   
5142                buf = ostrcat(buf, "</a>", 1, 0);
5143                buf = ostrcat(buf, "</br></br>", 1, 0);
5144
5145                if(node->nr > lastnewsletter)
5146                        addconfiglu("lastnewsletter", node->nr);
5147
5148                node = node->next;
5149        }
5150
5151        freenewsletter();
5152        m_unlock(&status.newslettermutex, 19);
5153
5154        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5155
5156        if(fmt == 0)
5157                buf = ostrcat(buf, "</td></tr></table></center></body></html>", 1, 0);
5158       
5159        return buf;
5160}
5161
5162char* webgetnewsletter(char* param, int fmt)
5163{
5164        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
5165
5166//      if(fmt == 0)
5167//      {
5168                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5169                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5170                buf = ostrcat(buf, "</head><body class=body id=\"newsletter\"><center>", 1, 0);
5171//      }
5172
5173        struct newsletter* node = NULL;
5174
5175        m_lock(&status.newslettermutex, 19);
5176
5177        readnewsletter();
5178        node = newsletter;
5179
5180        while(node != NULL)
5181        {
5182                if(ostrcmp(oitoa(node->nr), param) == 0)       
5183                {
5184                        tmpstr1 = ostrcat(node->title, " - ", 0, 0);
5185                        tmpstr1 = ostrcat(tmpstr1, node->date, 1, 0);
5186                        tmpstr = ostrcat(node->text, "\n", 0, 0);
5187                        break;
5188                }
5189                node = node->next;
5190        }
5191
5192//      if(fmt == 0)
5193//      {
5194                buf = ostrcat(buf, "<br>", 1, 0);
5195                buf = ostrcat(buf, "<h1>", 1, 0);
5196                buf = ostrcat(buf, tmpstr1, 1, 0);
5197                buf = ostrcat(buf, "</h1>", 1, 0);
5198                buf = ostrcat(buf, "<br>", 1, 0);
5199//      }
5200
5201
5202        freenewsletter();
5203        m_unlock(&status.newslettermutex, 19);
5204
5205        tmpstr = string_replace_all("\n", "<br>\n", tmpstr, 1);
5206
5207        buf = ostrcat(buf, tmpstr, 1, 0);
5208
5209        free(tmpstr), tmpstr = NULL;
5210        free(tmpstr1), tmpstr1 = NULL;
5211        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5212
5213//      if(fmt == 0)
5214                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5215       
5216        return buf;
5217}
5218
5219char* webgetstreamingchoices(int fmt)
5220{
5221        char* buf = NULL, *tmpstr = NULL;
5222
5223        if(fmt == 0)
5224        {
5225                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5226                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5227                buf = ostrcat(buf, "</head><body class=body id=\"streamingchoices\"><center>", 1, 0);
5228                buf = ostrcat(buf, "<br>", 1, 0);
5229                buf = ostrcat(buf, "<h1>", 1, 0);
5230                buf = ostrcat(buf, _("Streaming"), 1, 0);
5231                buf = ostrcat(buf, "</h1>", 1, 0);
5232                buf = ostrcat(buf, "<br>", 1, 0);
5233        }
5234
5235        int count = 0;
5236        struct service* servicenode = service;
5237
5238        while(servicenode != NULL)
5239        {
5240                if(servicenode->type == RECORDSTREAM && servicenode->recname != NULL)
5241                {
5242                        buf = ostrcat(buf, "<a class=linelink2 href=queryraw?getstreaming&", 1, 0);
5243                        tmpstr = htmlencode(servicenode->recname);
5244                        buf = ostrcat(buf, tmpstr, 1, 0);
5245                        buf = ostrcat(buf, " target=main>", 1, 0);
5246                        buf = ostrcat(buf, _("stop"), 1, 0);
5247                        buf = ostrcat(buf, " - ", 1, 0);
5248                        buf = ostrcat(buf, servicenode->recname, 1, 0);
5249                        buf = ostrcat(buf, " (", 1, 0);
5250                        if(servicenode->channel != NULL && servicenode->channel->name != NULL)
5251                                buf = ostrcat(buf, servicenode->channel->name, 1, 0);
5252                        else
5253                                buf = ostrcat(buf, _("unknown"), 1, 0);
5254                        buf = ostrcat(buf, ")", 1, 0);
5255                        buf = ostrcat(buf, "</a>", 1, 0);
5256                        buf = ostrcat(buf, "</br></br>", 1, 0);
5257                        count++;
5258                        free(tmpstr), tmpstr = NULL;
5259                }
5260                servicenode = servicenode->next;
5261        }
5262
5263        if(count == 0)
5264                buf = ostrcat(buf, _("No Live Stream running"), 1, 0);
5265
5266        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5267
5268        if(fmt == 0)
5269                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5270       
5271        return buf;
5272}
5273
5274char* webgetstreaming(char* param, int fmt)
5275{
5276        char* buf = NULL, *tmpstr = NULL;
5277
5278//      if(fmt == 0)
5279//      {
5280                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5281                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5282                buf = ostrcat(buf, "</head><body class=body id=\"streaming\"><center>", 1, 0);
5283//      }
5284
5285        htmldecode(param, param);
5286
5287        struct service* servicenode = service;
5288        while(servicenode != NULL)
5289        {
5290                if(servicenode->recname != NULL && ostrcmp(servicenode->recname, param) == 0)
5291                {
5292                        tmpstr = ostrcat(tmpstr, _("stop"), 1, 0);
5293                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
5294                        tmpstr = ostrcat(tmpstr, servicenode->recname, 1, 0);
5295                        tmpstr = ostrcat(tmpstr, " (", 1, 0);
5296                        if(servicenode->channel != NULL && servicenode->channel->name != NULL)
5297                                tmpstr = ostrcat(tmpstr, servicenode->channel->name, 1, 0);
5298                        else
5299                                tmpstr = ostrcat(tmpstr, _("unknown"), 1, 0);
5300                        tmpstr = ostrcat(tmpstr, ")", 1, 0);
5301                        break;
5302                }
5303                servicenode = servicenode->next;
5304        }
5305
5306//      if(fmt == 0)
5307//      {
5308                buf = ostrcat(buf, "<br>", 1, 0);
5309                buf = ostrcat(buf, "<h1>", 1, 0);
5310                buf = ostrcat(buf, tmpstr, 1, 0);
5311                buf = ostrcat(buf, "</h1>", 1, 0);
5312                buf = ostrcat(buf, "<br>", 1, 0);
5313//      }
5314
5315        servicenode = getrecordbyname(param, RECORDSTREAM);
5316        if(servicenode != NULL)
5317        {
5318                servicenode->recendtime = 1;
5319                buf = ostrcat(buf, _("Streaming succesfull stopped."), 1, 0);
5320        }
5321        else
5322                buf = ostrcat(buf, _("ERROR, Streaming can not be stopped."), 1, 0);
5323
5324        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5325        free(tmpstr) , tmpstr = NULL;
5326
5327//      if(fmt == 0)
5328                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5329       
5330        return buf;
5331}
5332
5333char* webgetupdatelist(char* param, int fmt)
5334{
5335        if(status.security == 0) return NULL;
5336
5337        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *cmd = NULL;
5338        int mode;
5339
5340        mode = atoi(param);
5341
5342        struct update* node = createupdatelist(mode);
5343
5344        if(fmt == 0)
5345        {
5346                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5347                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5348                buf = ostrcat(buf, "</head><body class=body id=\"updatelist\">", 1, 0);
5349                buf = ostrcat(buf, "<br><center>", 1, 0);
5350                buf = ostrcat(buf, "<h1>", 1, 0);
5351                buf = ostrcat(buf, _("System Update"), 1, 0);
5352                buf = ostrcat(buf, "</h1>", 1, 0);
5353                buf = ostrcat(buf, "<br>", 1, 0);
5354        }
5355
5356        tmpstr = getimgnamereal();
5357        if(tmpstr != NULL)
5358        {
5359                buf = ostrcat(buf, _("Installed:"), 1, 0);
5360                buf = ostrcat(buf, " ", 1, 0);
5361                buf = ostrcat(buf, tmpstr, 1, 1);
5362                buf = ostrcat(buf, "<br><br>", 1, 0);
5363        }
5364
5365        if(mode == 0)
5366                tmpstr = command("ls -1 /tmp/online | grep .img | sort -r");
5367        else
5368                tmpstr = command("ls -1 /tmp | grep .img | sort -r");
5369       
5370        int count, i, max;
5371        count = 0;
5372        struct splitstr* ret1 = NULL;
5373        ret1 = strsplit(tmpstr, "\n", &count);
5374        max = count - 1;
5375
5376        buf = ostrcat(buf, "<table cellpadding=5 cellspacing=5><tr><td nowrap>", 1, 0);
5377 
5378        if(ret1 != NULL)
5379        {
5380                for(i = 0; i <= max; i++)
5381                {
5382                        buf = ostrcat(buf, "<a class=linelink2 href=queryraw?getupdate&", 1, 0);
5383
5384                        if(ostrstr(ret1[i].part, "_FULL_") != NULL)
5385                        {
5386                                cmd = ostrcat(cmd, "/sbin/update.sh ", 1, 0);
5387                                cmd = ostrcat(cmd, node->type, 1, 0);
5388                                cmd = ostrcat(cmd, " ", 1, 0);
5389
5390                                cmd = ostrcat(cmd, "full ", 1, 0);
5391
5392                                if(mode == 0)
5393                                        cmd = ostrcat(cmd, "/tmp/online/", 1, 0);
5394                                else
5395                                        cmd = ostrcat(cmd, "/tmp/", 1, 0);
5396                                cmd = ostrcat(cmd, ret1[i].part, 1, 0);
5397
5398                                cmd = ostrcat(cmd, node->auth, 1, 0);
5399                                if(node->imgtype == 1)
5400                                        cmd = ostrcat(cmd, " dev beta.dyndns.tv", 1, 0);
5401                                else
5402                                        cmd = ostrcat(cmd, " release atemio.dyndns.tv", 1, 0);
5403                                if(file_exist("/var/swap"))
5404                                {
5405                                        if(!file_exist("/var/swap/logs"))
5406                                                 mkdir("/var/swap/logs", 777);
5407                               
5408                                        if(file_exist("/etc/.beta") && file_exist("/var/swap/logs"))
5409                                                cmd = ostrcat(cmd, " > /var/swap/logs/update_debug.log 2>&1", 1, 0);           
5410                                }
5411                                else if(checkbox("ATEMIO510") != 1 && checkbox("UFS910") != 1 && checkbox("UFS922") != 1 && checkbox("ATEVIO700") != 1 && checkbox("ATEVIO7000") != 1 && checkbox("IPBOX91") != 1 && checkbox("IPBOX900") != 1 && checkbox("IPBOX910") != 1 && checkbox("IPBOX9000") != 1)
5412                                {
5413                                        if(!file_exist("/mnt/logs"))
5414                                                 mkdir("/mnt/logs", 777);
5415                               
5416                                        if(file_exist("/etc/.beta") && file_exist("/mnt/logs"))
5417                                                cmd = ostrcat(cmd, " > /mnt/logs/update_debug.log 2>&1", 1, 0);
5418                                }
5419                                tmpstr1 = htmlencode(cmd);
5420                                buf = ostrcat(buf, tmpstr1, 1, 0);
5421                                free(tmpstr1), tmpstr1 = NULL;
5422                                free(cmd), cmd = NULL;
5423                        }
5424
5425                        buf = ostrcat(buf, " target=main>", 1, 0);
5426                        buf = ostrcat(buf, _(stringreplacecharonce(ret1[i].part, '.', '\0')), 1, 0);
5427                        buf = ostrcat(buf, "</a>", 1, 0);
5428                        buf = ostrcat(buf, "</br></br>", 1, 0);
5429                }
5430        }
5431
5432        free(tmpstr), tmpstr = NULL;
5433        free(ret1), ret1 = NULL;
5434
5435        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5436
5437        if(fmt == 0)
5438                buf = ostrcat(buf, "</td></tr></table></center></body></html>", 1, 0);
5439
5440// needed ??
5441//      freeupdatelist(node);
5442
5443        return buf;
5444}
5445
5446char* webgetupdate(char* param, int fmt)
5447{
5448        if(status.security == 0) return NULL;
5449
5450        char* buf = NULL, *cmd = NULL;
5451        printf("param: %s\n",param);
5452
5453//      if(fmt == 0)
5454//      {
5455                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5456                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5457                buf = ostrcat(buf, "</head><body class=body id=\"updatelist\"><center>", 1, 0);
5458                buf = ostrcat(buf, "<br>", 1, 0);
5459                buf = ostrcat(buf, "<h1 id=\"updatetitle\">", 1, 0);
5460                buf = ostrcat(buf, _("System Update"), 1, 0);
5461                buf = ostrcat(buf, "</h1>", 1, 0);
5462                buf = ostrcat(buf, "<br>", 1, 0);
5463//      }
5464
5465        writeallconfig(1);
5466
5467        cmd = htmlencode(param);
5468
5469        buf = ostrcat(buf, "<title>", 1, 0);
5470        buf = ostrcat(buf, _("Message"), 1, 0);
5471        buf = ostrcat(buf, "</title>\n", 1, 0);
5472        buf = ostrcat(buf, " <script type=\"text/javascript\">\n", 1, 0);
5473        buf = ostrcat(buf, "var bRepeat=confirm(\"", 1, 0);
5474        buf = ostrcat(buf, _("starting Full Update ?"), 1, 0);
5475        buf = ostrcat(buf, "\");\n", 1, 0);
5476        buf = ostrcat(buf, "if(bRepeat==true)\n", 1, 0);
5477        buf = ostrcat(buf, "{\n", 1, 0);
5478        buf = ostrcat(buf, "document.getElementById(\"updatetitle\").innerHTML = \"", 1, 0);
5479        buf = ostrcat(buf, _("System Update started Please wait 5 Minutes and Refresh this Page, more infos they see on your TV."), 1, 0);
5480        buf = ostrcat(buf, "\";\n", 1, 0);
5481        buf = ostrcat(buf, "window.location = \"../queryraw?getsystem&", 1, 0);
5482        buf = ostrcat(buf, cmd, 1, 0);
5483        buf = ostrcat(buf, "\";\n", 1, 0);
5484        buf = ostrcat(buf, "}\n", 1, 0);
5485        buf = ostrcat(buf, "else\n", 1, 0);
5486        buf = ostrcat(buf, "alert(\"exit\");\n", 1, 0);
5487        buf = ostrcat(buf, "</script>\n", 1, 0);
5488
5489        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5490
5491        free(cmd), cmd = NULL;
5492       
5493//      if(fmt == 0)
5494                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5495
5496        return buf;
5497}
5498
5499char* webgettpksection(int fmt)
5500{
5501        if(status.security == 0) return NULL;
5502
5503        char* buf = NULL;
5504
5505        if(fmt == 0)
5506        {
5507                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5508                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5509                buf = ostrcat(buf, "</head><body class=body id=\"tpksection\"><center>", 1, 0);
5510                buf = ostrcat(buf, "<br>", 1, 0);
5511                buf = ostrcat(buf, "<h1>", 1, 0);
5512                buf = ostrcat(buf, _("Tpk Install - select section"), 1, 0);
5513                buf = ostrcat(buf, "</h1>", 1, 0);
5514                buf = ostrcat(buf, "<br>", 1, 0);
5515        }
5516
5517        status.hangtime = 99999;
5518
5519        unlink(TPKLOG);
5520        tpkgetindex(0);
5521        tpklist();
5522
5523        struct tpk* node = tpk;
5524
5525        if(node == NULL) buf = ostrcat(buf, _("No Tpk Sections Found."), 1, 0);
5526       
5527        while(node != NULL)
5528        {
5529                if(findsectiondone(node->section) == 1)
5530                {
5531                        node = node->next;
5532                        continue;
5533                }
5534
5535                node->done = 1;
5536
5537                buf = ostrcat(buf, "<a class=linelink2 href=queryraw?gettpklist&", 1, 0);
5538                buf = ostrcat(buf, node->section, 1, 0);
5539                buf = ostrcat(buf, " target=main>", 1, 0);
5540                buf = ostrcat(buf, _(node->section), 1, 0);
5541                buf = ostrcat(buf, "</a>", 1, 0);
5542                buf = ostrcat(buf, "</br></br>", 1, 0);
5543
5544                node = node->next;
5545        }
5546
5547        freetpk();
5548
5549        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5550
5551        if(fmt == 0)
5552        {
5553                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5554        }       
5555
5556        tpkcleantmp(0);
5557        status.hangtime = getconfigint("hangtime", NULL);
5558       
5559        return buf;
5560}
5561
5562char* webgettpklist(char* param, int fmt)
5563{
5564        if(status.security == 0) return NULL;
5565        int skip = 0;
5566
5567        char* buf = NULL;
5568
5569//      if(fmt == 0)
5570//      {
5571                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5572                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5573                buf = ostrcat(buf, "</head><body class=body id=\"tpklist\"><center>", 1, 0);
5574                buf = ostrcat(buf, "<br>", 1, 0);
5575                buf = ostrcat(buf, "<h1>", 1, 0);
5576                buf = ostrcat(buf, _("Tpk Install - select file"), 1, 0);
5577                buf = ostrcat(buf, "</h1>", 1, 0);
5578                buf = ostrcat(buf, "<br>", 1, 0);
5579//      }
5580
5581        status.hangtime = 99999;
5582
5583        unlink(TPKLOG);
5584        tpkgetindex(0);
5585        tpklist();
5586
5587        struct tpk* node = tpk, *tpk_installed = NULL, *node_installed = NULL;
5588
5589        if(node == NULL) buf = ostrcat(buf, _("No Tpk Files Found."), 1, 0);
5590
5591        tpk = NULL;
5592        tpklistinstalled(0);
5593        tpk_installed = tpk;
5594        tpk = node;
5595               
5596        while(node != NULL)
5597        {
5598                node_installed = tpk_installed;
5599                skip = 0;
5600                while(node_installed != NULL)
5601                {
5602                        if(ostrcmp(node->section, node_installed->section) == 0 && ostrcmp(node->showname, node_installed->showname) == 0)
5603                        {
5604                                skip = 1;
5605                                break;
5606                        }
5607                        node_installed = node_installed->next;
5608                }
5609               
5610                //check if tpk is in section
5611                if(param != NULL && ostrcmp(node->section, param) != 0)
5612                        skip = 1;
5613
5614                if(skip == 1)
5615                {
5616                        node = node->next;
5617                        continue;
5618                }
5619
5620                buf = ostrcat(buf, "<a class=linelink2 href=queryraw?gettpkinstallpath&", 1, 0);
5621                buf = ostrcat(buf, node->filename, 1, 0);
5622                buf = ostrcat(buf, " target=main>", 1, 0);
5623                buf = ostrcat(buf, _(node->showname), 1, 0);
5624                buf = ostrcat(buf, " v.", 1, 0);
5625                buf = ostrcat(buf, oitoa(node->version), 1, 1);
5626                buf = ostrcat(buf, "</a>", 1, 0);
5627                buf = ostrcat(buf, "</br></br>", 1, 0);
5628
5629                node = node->next;
5630        }
5631
5632        freetpk();
5633        tpkcleantmp(0);
5634        status.hangtime = getconfigint("hangtime", NULL);
5635
5636        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5637
5638//      if(fmt == 0)
5639//      {
5640                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5641//      }       
5642       
5643        return buf;
5644}
5645
5646char* webgettpkinstallpath(char* param, int fmt)
5647{
5648        if(status.security == 0) return NULL;
5649
5650        char* buf = NULL, *tmpstr = NULL, *path = NULL, *url = NULL, *showname = NULL;
5651        int count = 0, size = 0;
5652
5653        status.hangtime = 99999;
5654
5655        unlink(TPKLOG);
5656        tpkgetindex(0);
5657        tpklist();
5658
5659        struct tpk* node = tpk;
5660
5661        while(node != NULL)
5662        {
5663                if(ostrcmp(node->filename, param) == 0)
5664                {
5665                        size = node->size;
5666                        showname = ostrcat(node->showname, NULL, 0, 0);
5667                        url = htmlencode(node->url);
5668                        path = ostrcat(node->usepath, NULL, 0, 0);
5669                        break;
5670                }
5671                node = node->next;
5672        }
5673
5674//      if(fmt == 0)
5675//      {
5676                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5677                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5678                buf = ostrcat(buf, "</head><body class=body id=\"tpkinstallpath\"><center>", 1, 0);
5679                buf = ostrcat(buf, "<br>", 1, 0);
5680                buf = ostrcat(buf, "<h1>", 1, 0);
5681                buf = ostrcat(buf, _("Choice Install Medium"), 1, 0);
5682                buf = ostrcat(buf, "</h1>", 1, 0);
5683                buf = ostrcat(buf, "<br>", 1, 0);
5684//      }
5685
5686        if(path == NULL || path[0] == '*' || ostrstr(path, "mnt") != NULL)
5687        {
5688                if(tpkchecksize(NULL, "/mnt/swapextensions", size) == 0)
5689                {
5690                        tmpstr = ostrcat(tmpstr, "<a class=linelink2 href=queryraw?gettpkinstall&", 1, 0);
5691                        tmpstr = ostrcat(tmpstr, param, 1, 0);
5692                        tmpstr = ostrcat(tmpstr, "&", 1, 0);
5693                        tmpstr = ostrcat(tmpstr, url, 1, 0);
5694                        tmpstr = ostrcat(tmpstr, "&", 1, 0);
5695                        tmpstr = ostrcat(tmpstr, "/mnt/swapextensions", 1, 0);
5696                        tmpstr = ostrcat(tmpstr, " target=main>", 1, 0);
5697                        tmpstr = ostrcat(tmpstr, _("Install to MNT"), 1, 0);
5698                        tmpstr = ostrcat(tmpstr, "</a>\n", 1, 0);
5699                        tmpstr = ostrcat(tmpstr, "</br></br>\n", 1, 0);
5700                        count++;
5701                }
5702        }
5703       
5704        if(path == NULL || path[0] == '*' || ostrstr(path, "var") != NULL)
5705        {
5706                if(tpkchecksize(NULL, "/var", size) == 0)
5707                {
5708                        tmpstr = ostrcat(tmpstr, "<a class=linelink2 href=queryraw?gettpkinstall&", 1, 0);
5709                        tmpstr = ostrcat(tmpstr, param, 1, 0);
5710                        tmpstr = ostrcat(tmpstr, "&", 1, 0);
5711                        tmpstr = ostrcat(tmpstr, url, 1, 0);
5712                        tmpstr = ostrcat(tmpstr, "&", 1, 0);
5713                        tmpstr = ostrcat(tmpstr, "/var", 1, 0);
5714                        tmpstr = ostrcat(tmpstr, " target=main>", 1, 0);
5715                        tmpstr = ostrcat(tmpstr, _("Install to FLASH"), 1, 0);
5716                        tmpstr = ostrcat(tmpstr, "</a>\n", 1, 0);
5717                        tmpstr = ostrcat(tmpstr, "</br></br>\n", 1, 0);
5718                        count++;
5719                }
5720        }
5721       
5722        if(path == NULL || path[0] == '*' || ostrstr(path, "swap") != NULL)
5723        {
5724                if(file_exist("/tmp/.swapextensionsdev") == 1 || file_exist("/var/swap"))
5725                {
5726                        if(tpkchecksize(NULL, "/var/swap", size) == 0)
5727                        {
5728                                tmpstr = ostrcat(tmpstr, "<a class=linelink2 href=queryraw?gettpkinstall&", 1, 0);
5729                                tmpstr = ostrcat(tmpstr, param, 1, 0);
5730                                tmpstr = ostrcat(tmpstr, "&", 1, 0);
5731                                tmpstr = ostrcat(tmpstr, url, 1, 0);
5732                                tmpstr = ostrcat(tmpstr, "&", 1, 0);
5733                                tmpstr = ostrcat(tmpstr, "/var/swap", 1, 0);
5734                                tmpstr = ostrcat(tmpstr, " target=main>", 1, 0);
5735                                tmpstr = ostrcat(tmpstr, _("Install to SWAP"), 1, 0);
5736                                tmpstr = ostrcat(tmpstr, "</a>", 1, 0);
5737                                tmpstr = ostrcat(tmpstr, "</br></br>", 1, 0);
5738                                count++;
5739                        }
5740                }
5741        }
5742
5743        if(node == NULL && tmpstr == NULL) buf = ostrcat(buf, _("No Tpk Files Found."), 1, 0);
5744        freetpk();
5745
5746        if(count == 0)
5747        {
5748                buf = ostrcat(buf, "<br>", 1, 0);
5749                buf = ostrcat(buf, _("Can't install Package. Package to big."), 1, 0);
5750        }
5751
5752        buf = ostrcat(buf, tmpstr, 1, 0);
5753
5754        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5755
5756        free(tmpstr), tmpstr = NULL;
5757        free(showname), showname = NULL;
5758        free(url), url = NULL;
5759        free(path), path = NULL;
5760
5761        tpkcleantmp(0);
5762        status.hangtime = getconfigint("hangtime", NULL);
5763       
5764//      if(fmt == 0)
5765//      {
5766                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5767//      }       
5768       
5769        return buf;
5770}
5771
5772char* webgettpkinstall(char* param, int fmt)
5773{
5774        if(status.security == 0) return NULL;
5775
5776        char* buf = NULL, *tmpstr = NULL, *param1 = NULL, *param2 = NULL;
5777
5778        //create param1
5779        param1 = strchr(param, '&');
5780        if(param1 != NULL)
5781                *param1++ = '\0';
5782
5783        //create param2
5784        param2 = strchr(param1, '&');
5785        if(param2 != NULL)
5786                *param2++ = '\0';
5787
5788        if(param == NULL) return NULL;
5789        if(param1 == NULL) return NULL;
5790        if(param2 == NULL) return NULL;
5791
5792        status.hangtime = 99999;
5793
5794        char* log = NULL;
5795        int tpkret = tpkgetpackage(param, param1, param2, 0, 1);
5796
5797        if(tpkret == 0)
5798                tmpstr = ostrcat(_("Tpk Install Info - Install OK"), NULL, 0, 0);
5799        else if(tpkret == 2)
5800                tmpstr = ostrcat(_("Tpk Install Info - Install ERROR"), NULL, 0, 0);
5801        else
5802                tmpstr = ostrcat(_("Tpk Install Info - Install ERROR"), NULL, 0, 0);
5803
5804//      if(fmt == 0)
5805//      {
5806                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5807                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5808                buf = ostrcat(buf, "</head><body class=body id=\"tpkinstall\"><center>", 1, 0);
5809                buf = ostrcat(buf, "<br>", 1, 0);
5810                buf = ostrcat(buf, "<h1>", 1, 0);
5811                buf = ostrcat(buf, _(tmpstr), 1, 0);
5812                buf = ostrcat(buf, "</h1>", 1, 0);
5813                buf = ostrcat(buf, "<br>", 1, 0);
5814                buf = ostrcat(buf, "<br>", 1, 0);
5815//      }
5816
5817        free(tmpstr), tmpstr = NULL;
5818
5819        if(tpkret == 0)
5820        {
5821                log = gettpklog(param2, 0);
5822                log = string_replace_all("\n", "<br>\n", log, 1);
5823                buf = ostrcat(buf, "<br>", 1, 0);
5824                buf = ostrcat(buf, _("Install Log:"), 1, 0);
5825                buf = ostrcat(buf, "<br>", 1, 0);
5826                buf = ostrcat(buf, "<br>", 1, 0);
5827                buf = ostrcat(buf, log, 1, 0);
5828        }
5829        else if(tpkret == 2)
5830        {
5831                buf = ostrcat(buf, "<br>", 1, 0);
5832                buf = ostrcat(buf, _("Install Log:"), 1, 0);
5833                buf = ostrcat(buf, "<br>", 1, 0);
5834                buf = ostrcat(buf, "<br>", 1, 0);
5835                buf = ostrcat(buf, _("It may only be a package to be installed. If they want to install another package of this section, they only remove the installed packet. Is not the plugin after reinstalling the software TitanNit in TitanNit Menu Visible then perform an update by Tpk to: "), 1, 0);
5836        }
5837        else
5838        {
5839                log = gettpklog(param2, 1);
5840                log = string_replace_all("\n", "<br>\n", log, 1);
5841                buf = ostrcat(buf, "<br>", 1, 0);
5842                buf = ostrcat(buf, _("Install Log:"), 1, 0);
5843                buf = ostrcat(buf, "<br>", 1, 0);
5844                buf = ostrcat(buf, "<br>", 1, 0);
5845                buf = ostrcat(buf, log, 1, 0);
5846        }
5847
5848        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5849
5850        loadplugin();
5851        free(log), log = NULL;
5852        unlink(TPKLOG);
5853        if(file_exist("/tmp/.tpk_needs_reboot"))
5854        {
5855// need other..
5856                textbox(_("Message"), _("TPK Install done, your system will reboot !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0);
5857                buf = ostrcat(buf, "<br>", 1, 0);
5858                buf = ostrcat(buf, _("TPK Install done, your system will reboot !"), 1, 0);
5859                buf = string_replace_all("<br>", "<br>\n", buf, 1);
5860                //write only config file
5861                writeallconfig(3);
5862                oshutdown(2,2);
5863                system("init 6");
5864        }
5865
5866        status.hangtime = getconfigint("hangtime", NULL);
5867
5868//      if(fmt == 0)
5869//      {
5870                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5871//      }       
5872       
5873        return buf;
5874}
5875
5876char* webgettpktmplist(char* param, int fmt)
5877{
5878        if(status.security == 0) return NULL;
5879        int mode = atoi(param);
5880
5881        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL, *tmpstr3 = NULL;
5882
5883        if(fmt == 0)
5884        {
5885                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5886                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5887                buf = ostrcat(buf, "</head><body class=body id=\"tpktmplist\"><center>", 1, 0);
5888                buf = ostrcat(buf, "<br>", 1, 0);
5889                buf = ostrcat(buf, "<h1>", 1, 0);
5890                if(mode == 0)
5891                        buf = ostrcat(buf, _("TPK tmp (tmp)"), 1, 0);
5892                else
5893                        buf = ostrcat(buf, _("TPK media (media)"), 1, 0);
5894               
5895                buf = ostrcat(buf, "</h1>", 1, 0);
5896                buf = ostrcat(buf, "<br>", 1, 0);
5897        }
5898
5899        if(mode == 0)
5900                tmpstr = gettpktmplist("/tmp");
5901        else
5902        {
5903                int treffer = 0;
5904                struct hdd *node = NULL;
5905
5906                addhddall();
5907                node = hdd;
5908       
5909                while(node != NULL)
5910                {
5911                        if(node->partition != 0)
5912                        {
5913                                tmpstr1 = ostrcat("/autofs/", node->device, 0, 0);
5914                                tmpstr2 = gettpktmplist(tmpstr1);
5915       
5916                                if(tmpstr2 != NULL)
5917                                {
5918                                        treffer = 1;
5919//                                      screenextensions(2, tmpstr1, NULL, 1);
5920                                        tmpstr3 = ostrcat(tmpstr3, tmpstr1, 1, 0);                                     
5921                                        tmpstr3 = ostrcat(tmpstr3, "\n", 1, 0);
5922                                }
5923       
5924                                free(tmpstr1); tmpstr1 = NULL;
5925                                free(tmpstr2); tmpstr2 = NULL;
5926                        }
5927                        node = node->next;
5928                }
5929       
5930                tmpstr = gettpktmplist(tmpstr3);       
5931                free(tmpstr3), tmpstr = NULL;
5932        }
5933       
5934        if(mode == 0)
5935        {
5936                if(tmpstr == NULL) buf = ostrcat(buf, _("No Tpk Files Found on /tmp Directory."), 1, 0);
5937        }
5938        else
5939        {
5940                if(tmpstr == NULL) buf = ostrcat(buf, _("No Tpk Files Found on Media Devices."), 1, 0);
5941        }
5942
5943        int count, i, max;
5944        count = 0;
5945        struct splitstr* ret1 = NULL;
5946        ret1 = strsplit(tmpstr, "\n", &count);
5947        max = count - 1;
5948
5949        buf = ostrcat(buf, "<table cellpadding=5 cellspacing=5><tr><td nowrap>", 1, 0);
5950 
5951        if(ret1 != NULL)
5952        {
5953                for(i = 0; i <= max; i++)
5954                {
5955                        buf = ostrcat(buf, "<a class=linelink2 href=queryraw?gettpkinstallpath&", 1, 0);
5956                        buf = ostrcat(buf, ret1[i].part, 1, 0);
5957                        buf = ostrcat(buf, " target=main>", 1, 0);
5958                        buf = ostrcat(buf, _(stringreplacecharonce(ret1[i].part, '.', '\0')), 1, 0);
5959                        buf = ostrcat(buf, "</a>", 1, 0);
5960                        buf = ostrcat(buf, "</br></br>", 1, 0);
5961                }
5962        }
5963
5964        free(tmpstr), tmpstr = NULL;
5965        free(ret1), ret1 = NULL;
5966
5967        buf = string_replace_all("<br>", "<br>\n", buf, 1);
5968
5969        if(fmt == 0)
5970        {
5971                buf = ostrcat(buf, "</center></body></html>", 1, 0);
5972        }       
5973       
5974        return buf;
5975}
5976
5977char* webgettpkremovelist(int fmt)
5978{
5979        if(status.security == 0) return NULL;
5980
5981        char* buf = NULL;
5982        int skip;
5983
5984//      if(fmt == 0)
5985//      {
5986                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
5987                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
5988                buf = ostrcat(buf, "</head><body class=body id=\"tpkremovelist\"><center>", 1, 0);
5989                buf = ostrcat(buf, "<br>", 1, 0);
5990                buf = ostrcat(buf, "<h1>", 1, 0);
5991                buf = ostrcat(buf, _("Tpk Remove - select file"), 1, 0);
5992                buf = ostrcat(buf, "</h1>", 1, 0);
5993                buf = ostrcat(buf, "<br>", 1, 0);
5994//      }
5995
5996        status.hangtime = 99999;
5997
5998        unlink(TPKLOG);
5999        tpkgetindex(0);
6000        tpklist();
6001
6002        struct tpk* node = tpk, *tpk_installed = NULL, *node_installed = NULL;
6003
6004        if(node == NULL) buf = ostrcat(buf, _("No Tpk Files Found."), 1, 0);
6005
6006        tpk = NULL;
6007        tpklistinstalled(0);
6008        tpk_installed = tpk;
6009        tpk = node;
6010       
6011        while(node != NULL)
6012        {
6013                node_installed = tpk_installed;
6014                skip = 1;
6015                while(node_installed != NULL)
6016                {
6017                        if(ostrcmp(node->showname, node_installed->showname) == 0)
6018                        {
6019                                skip = 0;
6020                                break;
6021                        }
6022                        node_installed = node_installed->next;
6023                }
6024
6025                if(skip == 1)
6026                {
6027                        node = node->next;
6028                        continue;
6029                }
6030
6031                buf = ostrcat(buf, "<a class=linelink2 href=queryraw?gettpkremove&", 1, 0);
6032                buf = ostrcat(buf, node->name, 1, 0);
6033                buf = ostrcat(buf, " target=main>", 1, 0);
6034                buf = ostrcat(buf, _(node->showname), 1, 0);
6035                buf = ostrcat(buf, " (", 1, 0);
6036                buf = ostrcat(buf, _(node->section), 1, 0);
6037                buf = ostrcat(buf, ")</a>", 1, 0);
6038                buf = ostrcat(buf, "</br></br>", 1, 0);
6039
6040                node = node->next;
6041        }
6042
6043        freetpk();
6044        tpkcleantmp(0);
6045        status.hangtime = getconfigint("hangtime", NULL);
6046
6047        buf = string_replace_all("<br>", "<br>\n", buf, 1);
6048
6049//      if(fmt == 0)
6050//      {
6051                buf = ostrcat(buf, "</center></body></html>", 1, 0);
6052//      }       
6053       
6054        return buf;
6055}
6056
6057char* webgettpkremove(char* param, int fmt)
6058{
6059        if(status.security == 0) return NULL;
6060
6061        char* buf = NULL, *tmpstr = NULL;
6062
6063        status.hangtime = 99999;
6064
6065        char* log = NULL;
6066
6067        int tpkret = tpkremove(param, 0, 0);
6068
6069        if(tpkret == 0)
6070        {
6071                tmpstr = ostrcat(_("Tpk Remove Info - Remove OK"), NULL, 0, 0);
6072                if(param != NULL && param[0] != '*') delplugin(param);
6073        }
6074        else
6075                tmpstr = ostrcat(_("Tpk Remove Info - Remove ERROR"), NULL, 0, 0);
6076
6077//      if(fmt == 0)
6078//      {
6079                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
6080                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
6081                buf = ostrcat(buf, "</head><body class=body id=\"tpkremove\"><center>", 1, 0);
6082                buf = ostrcat(buf, "<br>", 1, 0);
6083                buf = ostrcat(buf, "<h1>", 1, 0);
6084                buf = ostrcat(buf, _(tmpstr), 1, 0);
6085                buf = ostrcat(buf, "</h1>", 1, 0);
6086                buf = ostrcat(buf, "<br>", 1, 0);
6087                buf = ostrcat(buf, "<br>", 1, 0);
6088//      }
6089
6090        free(tmpstr), tmpstr = NULL;
6091
6092        if(tpkret == 0)
6093        {
6094                log = gettpklog(NULL, 2);
6095                log = string_replace_all("\n", "<br>\n", log, 1);
6096                buf = ostrcat(buf, "<br>", 1, 0);
6097                buf = ostrcat(buf, _("Remove Log:"), 1, 0);
6098                buf = ostrcat(buf, "<br>", 1, 0);
6099                buf = ostrcat(buf, "<br>", 1, 0);
6100                buf = ostrcat(buf, log, 1, 0);
6101        }
6102        else
6103        {
6104                log = gettpklog(NULL, 3);
6105                log = string_replace_all("\n", "<br>\n", log, 1);
6106                buf = ostrcat(buf, "<br>", 1, 0);
6107                buf = ostrcat(buf, _("Remove Log:"), 1, 0);
6108                buf = ostrcat(buf, "<br>", 1, 0);
6109                buf = ostrcat(buf, "<br>", 1, 0);
6110                buf = ostrcat(buf, log, 1, 0);
6111        }
6112
6113        buf = string_replace_all("<br>", "<br>\n", buf, 1);
6114
6115        loadplugin();
6116        free(log), log = NULL;
6117        unlink(TPKLOG);
6118        if(file_exist("/tmp/.tpk_needs_reboot"))
6119        {
6120// need other..
6121                textbox(_("Message"), _("TPK Remove done, your system will reboot !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 200, 0, 0);
6122                buf = ostrcat(buf, "<br>", 1, 0);
6123                buf = ostrcat(buf, _("TPK Install done, your system will reboot !"), 1, 0);
6124                buf = string_replace_all("<br>", "<br>\n", buf, 1);
6125                //write only config file
6126                writeallconfig(3);
6127                oshutdown(2,2);
6128                system("init 6");
6129        }
6130
6131        status.hangtime = getconfigint("hangtime", NULL);
6132
6133//      if(fmt == 0)
6134//      {
6135                buf = ostrcat(buf, "</center></body></html>", 1, 0);
6136//      }       
6137       
6138        return buf;
6139}
6140
6141char* webgettpkupgrade(int fmt)
6142{
6143        if(status.security == 0) return NULL;
6144
6145        char* buf = NULL;
6146
6147        status.hangtime = 99999;
6148
6149        if(fmt == 0)
6150        {
6151                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
6152                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
6153                buf = ostrcat(buf, "</head><body class=body id=\"tpkupgrade\"><center>", 1, 0);
6154        }
6155
6156        if(tpkgetindex(1) != 0)
6157        {
6158                buf = ostrcat(buf, "<br>", 1, 0);
6159                buf = ostrcat(buf, "<h1>", 1, 0);
6160                buf = ostrcat(buf, _("Tpk Update Info - Update ERROR"), 1, 0);
6161                buf = ostrcat(buf, "</h1>", 1, 0);
6162                buf = ostrcat(buf, "<br>", 1, 0);
6163                buf = ostrcat(buf, _("Can't get all TPK index !"), 1, 0);
6164                buf = ostrcat(buf, "<br>", 1, 0);
6165        }
6166               
6167        writesys("/tmp/.tpk_upgrade_start", "0", 0);
6168        if(tpkupdate(0) != 0)
6169        {
6170                buf = ostrcat(buf, "<br>", 1, 0);
6171                buf = ostrcat(buf, "<h1>", 1, 0);
6172                buf = ostrcat(buf, _("Tpk Update Info - Update ERROR"), 1, 0);
6173                buf = ostrcat(buf, "</h1>", 1, 0);
6174                buf = ostrcat(buf, "<br>", 1, 0);
6175                buf = ostrcat(buf, _("Can't update all packages !"), 1, 0);
6176                buf = ostrcat(buf, "<br>", 1, 0);
6177        }
6178        else
6179        {
6180                buf = ostrcat(buf, "<br>", 1, 0);
6181                buf = ostrcat(buf, "<h1>", 1, 0);
6182                buf = ostrcat(buf, _("Tpk Update Info - Update OK"), 1, 0);
6183                buf = ostrcat(buf, "</h1>", 1, 0);
6184                buf = ostrcat(buf, "<br>", 1, 0);
6185        }
6186
6187        loadplugin();
6188        unlink(TPKLOG);
6189
6190        if(file_exist("/tmp/.tpk_needs_reboot"))
6191        {
6192                textbox(_("Message"), _("TPK Upgrade done, your system will reboot !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
6193                //write only config file
6194                writeallconfig(3);
6195                oshutdown(2,2);
6196                system("init 6");
6197        }
6198        unlink("/tmp/.tpk_upgrade_start");
6199
6200        status.hangtime = getconfigint("hangtime", NULL);
6201
6202        if(fmt == 0)
6203        {
6204                buf = ostrcat(buf, "</center></body></html>", 1, 0);
6205        }       
6206       
6207        return buf;
6208}
6209
6210char* webgetserviceinfo(int fmt)
6211{
6212        char* buf = NULL, *tmpstr = NULL;
6213
6214        if(fmt == 0)
6215        {
6216                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
6217                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
6218                buf = ostrcat(buf, "</head><body class=body id=\"serviceinfo\"><center>", 1, 0);
6219                buf = ostrcat(buf, "<br>", 1, 0);
6220                buf = ostrcat(buf, "<h1>", 1, 0);
6221                buf = ostrcat(buf, _("Service"), 1, 0);
6222                buf = ostrcat(buf, "</h1>", 1, 0);
6223                buf = ostrcat(buf, "<br>", 1, 0);
6224        }
6225
6226//      tmpstr = getabout();
6227//      readnewsletter();
6228        tmpstr = readfiletomem("/tmp/Service.txt", 0);
6229        tmpstr = ostrcat(tmpstr, "\ncomming soon...\n", 1, 0);
6230       
6231        tmpstr = string_replace_all("\n", "<br>\n", tmpstr, 1);
6232
6233        buf = ostrcat(buf, tmpstr, 1, 1);
6234
6235        if(fmt == 0)
6236        {
6237                buf = ostrcat(buf, "</center></body></html>", 1, 0);
6238        }       
6239       
6240        return buf;
6241}
6242
6243char* webgetbackup(int fmt)
6244{
6245        if(status.security == 0) return NULL;
6246
6247        char* buf = NULL, *tmpstr = NULL;
6248
6249        if(fmt == 0)
6250        {
6251                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
6252                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
6253                buf = ostrcat(buf, "</head><body class=body id=\"backup\"><center>", 1, 0);
6254                buf = ostrcat(buf, "<br>", 1, 0);
6255                buf = ostrcat(buf, "<h1>", 1, 0);
6256                buf = ostrcat(buf, _("System Backup"), 1, 0);
6257                buf = ostrcat(buf, "</h1>", 1, 0);
6258                buf = ostrcat(buf, "<br>", 1, 0);
6259        }
6260
6261//      tmpstr = getabout();
6262//      readnewsletter();
6263        tmpstr = readfiletomem("/tmp/Service.txt", 0);
6264        tmpstr = ostrcat(tmpstr, "\ncomming soon...\n", 1, 0);
6265       
6266        tmpstr = string_replace_all("\n", "<br>\n", tmpstr, 1);
6267
6268        buf = ostrcat(buf, tmpstr, 1, 1);
6269
6270        if(fmt == 0)
6271        {
6272                buf = ostrcat(buf, "</center></body></html>", 1, 0);
6273        }       
6274       
6275        return buf;
6276}
6277
6278char* webgetrestore(int fmt)
6279{
6280        if(status.security == 0) return NULL;
6281
6282        char* buf = NULL, *tmpstr = NULL;
6283
6284        if(fmt == 0)
6285        {
6286                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", 1, 0);
6287                buf = ostrcat(buf, "<link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script>", 1, 0);
6288                buf = ostrcat(buf, "</head><body class=body id=\"restore\"><center>", 1, 0);
6289                buf = ostrcat(buf, "<br>", 1, 0);
6290                buf = ostrcat(buf, "<h1>", 1, 0);
6291                buf = ostrcat(buf, _("Settings backup/restore"), 1, 0);
6292                buf = ostrcat(buf, "</h1>", 1, 0);
6293                buf = ostrcat(buf, "<br>", 1, 0);
6294        }
6295
6296//      tmpstr = getabout();
6297//      readnewsletter();
6298        tmpstr = readfiletomem("/tmp/Service.txt", 0);
6299        tmpstr = ostrcat(tmpstr, "\ncomming soon...\n", 1, 0);
6300       
6301        tmpstr = string_replace_all("\n", "<br>\n", tmpstr, 1);
6302
6303        buf = ostrcat(buf, tmpstr, 1, 1);
6304
6305        if(fmt == 0)
6306        {
6307                buf = ostrcat(buf, "</center></body></html>", 1, 0);
6308        }       
6309       
6310        return buf;
6311}
6312
6313char* webstartplugin(char* param, int fmt)
6314{
6315        void (*startplugin)(void);
6316        char* buf = NULL;
6317       
6318        struct skin* pluginnode = getplugin(param);
6319       
6320        if(pluginnode != NULL)
6321        {
6322                startplugin = dlsym(pluginnode->pluginhandle, "start");
6323                if(startplugin != NULL)
6324                {
6325                        resettvpic();
6326                        startplugin();
6327                        resettvpic();
6328                        buf = ostrcat(buf, "ok", 1, 0);
6329                }
6330                else
6331                        buf = ostrcat(buf, "internal error", 1, 0);
6332        }
6333        else
6334                buf = ostrcat(buf, "wrong plugin name", 1, 0);
6335               
6336        return buf;
6337}
6338       
6339       
6340#endif
Note: See TracBrowser for help on using the repository browser.