source: titan/titan/httpdfunc.h @ 27899

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

[webif] add settings adjust read screen

File size: 140.9 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        //create param1
966        param1 = strchr(param, '&');
967        if(param1 != NULL)
968                *param1++ = '\0';
969
970        if(param1 == NULL) return NULL;
971
972        htmldecode(param1, param1);
973        if(param1 != NULL)
974        {
975                if(status.play == 0 && status.webplayfile == NULL)
976                {
977                        if(ostrstr(param1, "url=") == param1)
978                                status.webplayfile = ostrcat(param1 + 4, NULL, 0, 0);
979                        else
980                                status.webplayfile = ostrcat(param1, NULL, 0, 0);
981                }
982        }
983        tmpbuf = ostrcat("not in play mode", NULL, 0, 0);
984   
985        int count = 0;
986        if(status.timeshift == 0 && status.play == 0 && (ostrcmp("play", param) == 0 || ostrcmp("play=", param) == 0))
987        {
988                int count = 0;
989
990                int rcret = getrcconfigint("rcwebplay", NULL);
991                if(rcret == 0) rcret = getrcconfigint("rcarchive", NULL);
992                if(rcret == 0) rcret = getrcconfigint("rcplay", NULL);
993                writerc(rcret);
994                while(status.play == 0 && count < 30)
995                {
996                        usleep(100000);
997                        count++;
998                }
999        }
1000        else
1001                count = 31;
1002
1003        if(count >= 30 && status.play == 0)
1004        {
1005                free(status.webplayfile); status.webplayfile = NULL;
1006                free(tmpbuf); tmpbuf = NULL;
1007                tmpbuf = ostrcat("can not start playback", NULL, 0, 0);
1008        }
1009
1010        if(status.timeshift == 0 && status.play == 1)
1011        {
1012                if(ostrcmp("stop", param) == 0 || ostrcmp("stop=", param) == 0)
1013                        writerc(getrcconfigint("rcstop", NULL));
1014
1015                if(ostrcmp("pause", param) == 0 || ostrcmp("pause=", param) == 0)
1016                        writerc(getrcconfigint("rcpause", NULL));
1017   
1018                if(ostrcmp("ff", param) == 0 || ostrcmp("ff=", param) == 0)
1019                        writerc(getrcconfigint("rcff", NULL));
1020   
1021                if(ostrcmp("fr", param) == 0 || ostrcmp("fr=", param) == 0)
1022                        writerc(getrcconfigint("rcfr", NULL));
1023
1024                free(tmpbuf); tmpbuf = NULL;
1025                tmpbuf = ostrcat(param, NULL, 0, 0);
1026
1027                if(ostrcmp("getlen", param) == 0 || ostrcmp("getlen=", param) == 0)
1028                {
1029                        unsigned long len = 0;
1030                        free(tmpbuf); tmpbuf = NULL;
1031   
1032                        len = playergetlength();
1033                        tmpbuf = ostrcat(buf, olutoa(len), 1, 1);
1034                }
1035 
1036                if(ostrcmp("getpos", param) == 0 || ostrcmp("getpos=", param) == 0)
1037                {
1038                        unsigned long pos = 0;
1039                        free(tmpbuf); tmpbuf = NULL;
1040   
1041                        pos = playergetpts() / 90000;
1042                        tmpbuf = ostrcat(buf, olutoa(pos), 1, 1);
1043                }
1044 
1045                if(ostrcmp("getisplaying", param) == 0 || ostrcmp("getisplaying=", param) == 0)
1046                {
1047                        int playing = 0;
1048                        free(tmpbuf); tmpbuf = NULL;
1049   
1050                        playing = playerisplaying();
1051                        tmpbuf = ostrcat(buf, oitoa(playing), 1, 1);
1052                }
1053 
1054                if(ostrcmp("getplayercan", param) == 0 || ostrcmp("getplayercan=", param) == 0)
1055                {
1056                        free(tmpbuf); tmpbuf = NULL;
1057                        tmpbuf = ostrcat(buf, olutoa(status.playercan), 1, 1);
1058                }
1059        }
1060
1061        if(fmt == 0)
1062        {
1063                buf = webcreatehead(buf, NULL, 1);
1064                buf = ostrcat(buf, "<tr><td align=center valign=top><font class=biglabel><br><br>Video ", 1, 0);
1065                buf = ostrcat(buf, tmpbuf, 1, 1);
1066                buf = ostrcat(buf, " !!!</font></td></tr>", 1, 0);
1067                buf = webcreatetail(buf, 1);
1068        }
1069        else
1070                buf = ostrcat(buf, tmpbuf, 1, 1);
1071 
1072        return buf;
1073}
1074
1075char* webgetchannelpage(char* param, int fmt)
1076{
1077        char* param1 = NULL, *param2 = NULL;
1078
1079        if(param == NULL) return NULL;
1080
1081        //create param1 + 2
1082        param1 = strchr(param, '&');
1083        if(param1 != NULL)
1084        {
1085                *param1++ = '\0';
1086                param2 = strchr(param1, '&');
1087                if(param2 != NULL)
1088                        *param2++ = '\0';
1089        }
1090
1091        if(param1 == NULL || param2 == NULL) return NULL;
1092
1093        return webgetchannel(atoi(param), atoi(param1), atoi(param2), fmt);
1094}
1095
1096void webmessage(struct stimerthread* timernode, char* text, int flag)
1097{
1098        textbox(_("Message"), text, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
1099        free(text);
1100}
1101
1102char* websendmessage(char* param, int fmt)
1103{
1104        char* text = NULL, *buf = NULL;
1105
1106        if(param == NULL) return NULL;
1107        param = strchr(param, '=');
1108        if(param != NULL)
1109        {
1110                param++;
1111                stringreplacechar(param, '+', ' ');
1112                text = ostrcat(text, param, 1, 0);
1113        }
1114        addtimer(&webmessage, START, 1000, 1, (void*)text, NULL, NULL);
1115
1116        if(fmt == 0)
1117        {
1118                buf = webcreatehead(buf, NULL, 1);
1119                buf = ostrcat(buf, "<tr><td align=center valign=top><font class=biglabel><br><br>Message Send !!!</font></td></tr>", 1, 0);
1120                buf = webcreatetail(buf, 1);
1121        }
1122        else
1123                buf = ostrcat(buf, "Message Send", 1, 0);
1124               
1125        return buf;
1126}
1127
1128char* webgetsignal(int fmt)
1129{
1130        char* buf = NULL, *tmpnr = NULL;
1131        uint16_t snr = 0, signal = 0;
1132        uint32_t ber = 0, unc = 0;
1133
1134        ber = fereadber(status.aktservice->fedev);
1135        unc = fereaduncorrectedblocks(status.aktservice->fedev);
1136        signal = fereadsignalstrength(status.aktservice->fedev);
1137        snr = fereadsnr(status.aktservice->fedev);
1138        snr = (snr * 100) / 0xffff;
1139
1140        if(fmt == 0)
1141        {
1142                buf = webcreatehead(buf, "<meta http-equiv=refresh content=1>", 0);
1143
1144                buf = ostrcat(buf, "<tr><td align=center><font class=biglabel><br><br>BER: ", 1, 0);
1145                tmpnr = oitoa(ber);
1146                buf = ostrcat(buf, tmpnr, 1, 0);
1147                free(tmpnr); tmpnr = NULL;
1148
1149                buf = ostrcat(buf, "<br>UNC: ", 1, 0);
1150                tmpnr = oitoa(unc);
1151                buf = ostrcat(buf, tmpnr, 1, 0);
1152                free(tmpnr); tmpnr = NULL;
1153
1154                buf = ostrcat(buf, "<br>SIG: ", 1, 0);
1155                tmpnr = oitoa(signal);
1156                buf = ostrcat(buf, tmpnr, 1, 0);
1157                free(tmpnr); tmpnr = NULL;
1158
1159                buf = ostrcat(buf, "<br>SNR: ", 1, 0);
1160                tmpnr = oitoa(snr);
1161                buf = ostrcat(buf, tmpnr, 1, 0);
1162                free(tmpnr); tmpnr = NULL;
1163
1164                buf = ostrcat(buf, "</font></td></tr>", 1, 0);
1165                buf = webcreatetail(buf, 0);
1166        }
1167        else
1168        {
1169                buf = ostrcat(buf, oitoa(ber), 1, 1);
1170                buf = ostrcat(buf, "#", 1, 0);
1171                buf = ostrcat(buf, oitoa(unc), 1, 1);
1172                buf = ostrcat(buf, "#", 1, 0);
1173                buf = ostrcat(buf, oitoa(signal), 1, 1);
1174                buf = ostrcat(buf, "#", 1, 0);
1175                buf = ostrcat(buf, oitoa(snr), 1, 1);
1176        }
1177
1178        return buf;
1179}
1180
1181char* webgetepg(char* param, int fmt)
1182{
1183        char* buf = NULL, *buf1 = NULL, *tmpstr = NULL, *param1 = NULL, *param2 = NULL;
1184        struct epg* epgnode = NULL;
1185        struct channel* chnode = NULL;
1186        struct tm *loctime = NULL;
1187
1188        if(param == NULL) return NULL;
1189
1190        //create param1 + 2
1191        param1 = strchr(param, '&');
1192        if(param1 != NULL)
1193        {
1194                *param1++ = '\0';
1195                param2 = strchr(param1, '&');
1196                if(param2 != NULL)
1197                        *param2++ = '\0';
1198        }
1199
1200        if(param1 == NULL || param2 == NULL) return NULL;
1201
1202        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
1203        if(chnode == NULL) return NULL;
1204
1205        epgnode = getepg(chnode, atoi(param2), 0);
1206        if(epgnode == NULL) return NULL;
1207
1208        if(fmt == 0) buf = webcreatehead(buf, NULL, 0);
1209
1210        buf1 = malloc(MINMALLOC);
1211        if(buf1 == NULL)
1212        {
1213                err("no mem");
1214                return buf;
1215        }
1216
1217        if(fmt == 0) buf = ostrcat(buf, "<tr><td><font class=biglabel>", 1, 0);
1218        if(epgnode->title != NULL)
1219        {
1220                buf = ostrcat(buf, epgnode->title, 1, 0);
1221                if(fmt == 0)
1222                {
1223                        buf = ostrcat(buf, " (", 1, 0);
1224                        loctime = olocaltime(&epgnode->starttime);
1225                        if(loctime != NULL)
1226                                strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1227                        free(loctime); loctime = NULL;
1228                        loctime = olocaltime(&epgnode->endtime);
1229                        if(loctime != NULL)
1230                                strftime(&buf1[7], MINMALLOC - 8, " %H:%M", loctime);
1231                        free(loctime); loctime = NULL;
1232                        buf = ostrcat(buf, buf1, 1, 0);
1233                        buf = ostrcat(buf, ")", 1, 0);
1234                }
1235        }
1236        if(fmt == 0)
1237        {
1238                buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
1239                buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
1240        }
1241        else
1242        {
1243                buf = ostrcat(buf, "#", 1, 0);
1244                buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
1245                buf = ostrcat(buf, "#", 1, 0);
1246                buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
1247                buf = ostrcat(buf, "#", 1, 0);
1248        }
1249
1250        if(epgnode->subtitle != NULL)
1251                buf = ostrcat(buf, epgnode->subtitle, 1, 0);
1252
1253        if(fmt == 0)
1254        {
1255                buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
1256                buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
1257        }
1258        else
1259                buf = ostrcat(buf, "#", 1, 0);
1260
1261        tmpstr = epgdescunzip(epgnode);
1262        if(tmpstr != NULL)
1263                buf = ostrcat(buf, tmpstr, 1, 0);
1264        free(tmpstr); tmpstr = NULL;
1265
1266        if(fmt == 0)
1267        {
1268                buf = ostrcat(buf, "</font></td></tr>", 1, 0);
1269                buf = webcreatetail(buf, 0);
1270        }
1271
1272        free(buf1);
1273        return buf;
1274}
1275
1276char* webgetsingleepg(char* param, int fmt)
1277{
1278        int line = 0, maxlen = 0, pos = 0, longdesc = 1;
1279        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *param1 = NULL, *param2 = NULL, *tmpstr = NULL;
1280        struct epg* epgnode = NULL;
1281        struct channel* chnode = NULL;
1282        struct tm *loctime = NULL;
1283       
1284        if(param == NULL) return NULL;
1285
1286        //create param1 + 2
1287        param1 = strchr(param, '&');
1288        if(param1 != NULL)
1289        {
1290                *param1++ = '\0';
1291                param2 = strchr(param1, '&');
1292                if(param2 != NULL)
1293                        *param2++ = '\0';
1294        }
1295
1296        if(param1 == NULL) return NULL;
1297        if(param2 != NULL) longdesc = atoi(param2);
1298
1299        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
1300        if(chnode == NULL) return NULL;
1301        epgnode = getepgakt(chnode);;
1302
1303        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1304
1305        buf1 = malloc(MINMALLOC);
1306        if(buf1 == NULL)
1307        {
1308                err("no mem");
1309                return buf;
1310        }
1311
1312        while(epgnode != NULL)
1313        {
1314                if(fmt == 0)
1315                {
1316                        if(line == 0)
1317                        {
1318                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1319                                line = 1;
1320                        }
1321                        else
1322                        {
1323                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1324                                line = 0;
1325                        }
1326
1327                        ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1328                        tmpstr = oitoa(chnode->serviceid);
1329                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1330                        buf2 = ostrcat("<td nowrap><a target=main class=link href=query?addrectimer&", tmpstr, 0, 0);
1331                        buf2 = ostrcat(buf2, "&", 0, 0);
1332                        free(tmpstr); tmpstr = NULL;
1333                        ostrcatbig(&buf, "&", &maxlen, &pos);
1334                        tmpstr = ollutoa(chnode->transponderid);
1335                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1336                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1337                        buf2 = ostrcat(buf2, "&", 0, 0);
1338                        free(tmpstr); tmpstr = NULL;
1339                        ostrcatbig(&buf, "&", &maxlen, &pos);
1340                        tmpstr = oitoa(epgnode->eventid);
1341                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1342                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1343                        buf2 = ostrcat(buf2, ">", 0, 0);
1344                        free(tmpstr); tmpstr = NULL;
1345                        ostrcatbig(&buf, ">", &maxlen, &pos);
1346
1347                        loctime = olocaltime(&epgnode->starttime);
1348                        if(loctime != NULL)
1349                                strftime(buf1, MINMALLOC, "%d.%m _ %H:%M __ ", loctime);
1350                        //strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1351                        free(loctime); loctime = NULL;
1352                        //loctime = olocaltime(&epgnode->endtime);
1353                        //if(loctime != NULL)
1354                        //      strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1355                        //free(loctime); loctime = NULL;
1356                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1357                        ostrcatbig(&buf, " ", &maxlen, &pos);
1358                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1359                        if(epgnode->subtitle != NULL)
1360                        {
1361                                ostrcatbig(&buf, " (", &maxlen, &pos);
1362                                ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1363                                ostrcatbig(&buf, ")", &maxlen, &pos);
1364                        }
1365
1366                        ostrcatbig(&buf, "</a></td>", &maxlen, &pos);
1367                        ostrcatbig(&buf, buf2, &maxlen, &pos);
1368                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/timer.png alt=\"set timer\"/>", &maxlen, &pos);
1369                        ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1370                }
1371                else
1372                {
1373                        buf = ostrcat(buf, epgnode->title, 1, 0);
1374                        buf = ostrcat(buf, "#", 1, 0);
1375                        buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
1376                        buf = ostrcat(buf, "#", 1, 0);
1377                        buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
1378                        buf = ostrcat(buf, "#", 1, 0);
1379                        buf = ostrcat(buf, epgnode->subtitle, 1, 0);
1380                        buf = ostrcat(buf, "#", 1, 0);
1381                        if(longdesc == 1)
1382                        {
1383                                tmpstr = epgdescunzip(epgnode);
1384                                if(tmpstr != NULL)
1385                                        buf = ostrcat(buf, tmpstr, 1, 0);
1386                                free(tmpstr); tmpstr = NULL;
1387                        }
1388      buf = ostrcat(buf, "#", 1, 0);
1389                        buf = ostrcat(buf, oitoa(epgnode->eventid), 1, 1);
1390                        buf = ostrcat(buf, "\n", 1, 0);
1391                }
1392       
1393                epgnode = epgnode->next;
1394                free(buf2); buf2 = NULL;
1395        }
1396
1397        if(fmt == 0)
1398                webcreatetailbig(&buf, &maxlen, &pos, 0);
1399        else if(buf == NULL)
1400                buf = ostrcat("no data", NULL, 0, 0);
1401
1402        free(buf1);
1403        return buf;
1404}
1405
1406//TODO: create rectimer line
1407void webcalcrecline(char** buf, int* maxlen, int* pos)
1408{
1409        //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);
1410}
1411
1412char* webgetgmultiepg(char* param, int fmt)
1413{
1414        int page = 1, i, line = 0, treffer = 0, maxlen = 0, pos = 0;
1415        char* buf = NULL, *tmpnr = NULL, *param1 = NULL;
1416        struct mainbouquet *mbouquet = NULL;
1417        struct bouquet *node = NULL;
1418        struct channel* chnode = NULL;
1419        struct epg* epgnode = NULL;
1420        time_t akttime = 0, difftime = 0, starttime = 0, endtime = 0, lastendtime = 0;
1421
1422        if(param == NULL) return NULL;
1423
1424        //create param1
1425        param1 = strchr(param, '&');
1426        if(param1 != NULL)
1427                *param1++ = '\0';
1428
1429        if(param1 != NULL) page = atoi(param1);
1430
1431        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);
1432
1433        akttime = webcreatetimeline(&buf, &maxlen, &pos);
1434        akttime += ((page - 1) * 1440);
1435        ostrcatbig(&buf, "</tr></thead><tbody>", &maxlen, &pos);
1436
1437        mbouquet = getmainbouquet(param);
1438        if(mbouquet != NULL)
1439        {
1440                node = mbouquet->bouquet;
1441                while(node != NULL)
1442                {
1443                        chnode = getchannel(node->serviceid, node->transponderid);
1444                        if(chnode != NULL)
1445                        {
1446                                if(line == 0)
1447                                {
1448                                        ostrcatbig(&buf, "<tr><th class=gepgchannel1>", &maxlen, &pos);
1449                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1450                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1451                                        webcalcrecline(&buf, &maxlen, &pos);
1452                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line1>", &maxlen, &pos);
1453                                        line = 1;
1454                                }
1455                                else
1456                                {
1457                                        ostrcatbig(&buf, "<tr><th class=gepgchannel2>", &maxlen, &pos);
1458                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1459                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1460                                        webcalcrecline(&buf, &maxlen, &pos);
1461
1462                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line2>", &maxlen, &pos);
1463                                        line = 0;
1464                                }
1465
1466                                treffer = 0;
1467                                lastendtime = 0;
1468                                epgnode = getepgakt(chnode);
1469                                while(epgnode != NULL)
1470                                {
1471                                        treffer = 1;
1472                                        starttime = epgnode->starttime / 60;
1473                                        endtime = epgnode->endtime / 60;
1474
1475                                        if(endtime <= starttime || starttime >= akttime + 1440)
1476                                        {
1477                                                epgnode = epgnode->next;
1478                                                continue;
1479                                        }
1480
1481                                        //check if old endtime > new starttime
1482                                        if(lastendtime > 0 && starttime > lastendtime)
1483                                        {
1484                                                difftime = (starttime - lastendtime) * 5;
1485
1486                                                if(difftime <= 0)
1487                                                {
1488                                                        epgnode = epgnode->next;
1489                                                        continue;
1490                                                }
1491
1492                                                ostrcatbig(&buf, "<td class=gepgcellblank style=\"", &maxlen, &pos);
1493                                                tmpnr = oitoa(difftime);
1494                                                ostrcatbig(&buf, "width:", &maxlen, &pos);
1495                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1496                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1497                                                ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1498                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1499                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1500                                                ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1501                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1502                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1503                                                free(tmpnr); tmpnr = NULL;
1504
1505                                                ostrcatbig(&buf, "\"> </td>", &maxlen, &pos);
1506                                        }
1507
1508                                        //check if starttime < last endtime
1509                                        if(starttime < lastendtime)
1510                                                starttime = lastendtime;
1511
1512                                        //check if endtime is in next day
1513                                        if(endtime > akttime + 1440)
1514                                                endtime = endtime - (endtime - (akttime + 1440));
1515
1516                                        //check if starttime is in prev day
1517                                        if(starttime < akttime)
1518                                                difftime = (endtime - akttime) * 5;
1519                                        else
1520                                                difftime = (endtime - starttime) * 5;
1521
1522                                        if(difftime <= 0)
1523                                        {
1524                                                epgnode = epgnode->next;
1525                                                continue;
1526                                        }
1527
1528                                        lastendtime = endtime;
1529
1530                                        ostrcatbig(&buf, "<td class=gepgcell style=\"", &maxlen, &pos);
1531                                        tmpnr = oitoa(difftime);
1532                                        ostrcatbig(&buf, "width:", &maxlen, &pos);
1533                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1534                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1535                                        ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1536                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1537                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1538                                        ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1539                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1540                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1541                                        free(tmpnr); tmpnr = NULL;
1542
1543                                        ostrcatbig(&buf, "\"><div class=gepgcellborder>", &maxlen, &pos);
1544                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1545                                        ostrcatbig(&buf, "</div></div></td>", &maxlen, &pos);
1546                                       
1547                                        epgnode = epgnode->next;
1548                                }
1549                                if(treffer == 0)
1550                                        ostrcatbig(&buf, "<td class=gepgcellblank> </td>", &maxlen, &pos);
1551                        }
1552                        ostrcatbig(&buf, "</tr></table></td></tr>", &maxlen, &pos);
1553
1554                        node = node->next;
1555                }
1556        }
1557        ostrcatbig(&buf, "<script type=text/javascript>if(typeof tableScroll == 'function'){tableScroll('gmultiepg');}</script></tbody></table></td></tr><tr><td align=center>", &maxlen, &pos);
1558
1559        for(i = 1; i <= 14; i++)
1560        {
1561                if(page == i)
1562                        ostrcatbig(&buf, "<a class=pagesellink href=\"query?getgmultiepg&", &maxlen, &pos);
1563                else
1564                        ostrcatbig(&buf, "<a class=pagelink href=\"query?getgmultiepg&", &maxlen, &pos);
1565                ostrcatbig(&buf, param, &maxlen, &pos);
1566                ostrcatbig(&buf, "&", &maxlen, &pos);
1567                tmpnr = oitoa(i);
1568                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1569                ostrcatbig(&buf, "\">", &maxlen, &pos);
1570                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1571                ostrcatbig(&buf, "</a>", &maxlen, &pos);
1572                free(tmpnr); tmpnr = NULL;
1573        }
1574       
1575        ostrcatbig(&buf, "</td></tr></table></center></body></html>", &maxlen, &pos);
1576        return buf;
1577}
1578
1579char* webgetdrawcount(char* param, int fmt)
1580{
1581        return oitoa(status.drawscreencount);
1582}
1583
1584void webgetshoot(char* param, int fmt)
1585{
1586        printf("param: %s\n",param);
1587        printf("parm: %d\n",fmt);
1588        screenshoot(atoi(param));
1589}
1590
1591char* webgetepgsearch(char* query, char* param, int fmt)
1592{
1593        int line = 0, maxlen = 0, pos = 0, maxcount = 0, page = 1, newchannel = 0, longepg = 0;
1594        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *tmpstr = NULL, *tmpnr = NULL, *param1 = NULL, *param2 = NULL;
1595        struct channel* chnode = channel;
1596        struct epg* epgnode = NULL;
1597        struct tm *loctime = NULL;
1598
1599        if(query == NULL) return NULL;
1600
1601        if(param == NULL)
1602        {
1603                query = strchr(query, '=');
1604                if(query != NULL)
1605                {
1606                        query++;
1607                        stringreplacechar(param, '+', ' ');
1608                        param = query;
1609                }
1610        }
1611        else
1612        {
1613                //create param1 + 2
1614                param1 = strchr(param, '&');
1615                if(param1 != NULL)
1616                {
1617                        *param1++ = '\0';
1618                        param2 = strchr(param1, '&');
1619                        if(param2 != NULL)
1620                                *param2++ = '\0';
1621                }
1622        }
1623
1624        if(param1 != NULL) page = atoi(param1);
1625        if(param2 != NULL) longepg = atoi(param2);
1626
1627        buf1 = malloc(MINMALLOC);
1628        if(buf1 == NULL)
1629        {
1630                err("no mem");
1631                return buf;
1632        }
1633
1634        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1635        while(chnode != NULL)
1636        {
1637                newchannel = 1;
1638                epgnode = getepgakt(chnode);
1639                while(epgnode != NULL)
1640                {
1641                        if(epgnode->title != NULL && ostrstrcase(epgnode->title, param) != NULL)
1642                        {
1643
1644                                maxcount++;
1645
1646                                if(page >= 0)
1647                                {
1648                                        if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1649                                        {
1650                                                epgnode = epgnode->next;
1651                                                continue;
1652                                        }
1653                                }
1654
1655                                if(fmt == 0)
1656                                {
1657                                        if(line == 0)
1658                                        {
1659                                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1660                                                line = 1;
1661                                        }
1662                                        else
1663                                        {
1664                                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1665                                                line = 0;
1666                                        }
1667                                }
1668
1669                                if(fmt == 1 && newchannel == 1)
1670                                {
1671                                        newchannel = 0;
1672                                        ostrcatbig(&buf, "BeginNewChannel", &maxlen, &pos);
1673                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1674                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1675                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1676                                        tmpstr = oitoa(chnode->serviceid);
1677                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1678                                        free(tmpstr); tmpstr = NULL;
1679                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1680                                        tmpstr = ollutoa(chnode->transponderid);
1681                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1682                                        free(tmpstr); tmpstr = NULL;
1683                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1684                                        tmpstr = oitoa(chnode->servicetype);
1685                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1686                                        free(tmpstr); tmpstr = NULL;
1687                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1688                                }
1689
1690                                if(fmt == 0)
1691                                {
1692                                        ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1693                                        tmpstr = oitoa(chnode->serviceid);
1694                                        buf2 = ostrcat("<td nowrap><a target=main class=link href=query?addrectimer&", tmpstr, 0, 0);
1695                                        buf2 = ostrcat(buf2, "&", 0, 0);
1696                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1697                                        free(tmpstr); tmpstr = NULL;
1698                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1699                                        tmpstr = ollutoa(chnode->transponderid);
1700                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1701                                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1702                                        buf2 = ostrcat(buf2, "&", 0, 0);
1703                                        free(tmpstr); tmpstr = NULL;
1704                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1705                                        tmpstr = oitoa(epgnode->eventid);
1706                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1707                                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1708                                        buf2 = ostrcat(buf2, ">", 0, 0);
1709                                        free(tmpstr); tmpstr = NULL;
1710                                        ostrcatbig(&buf, ">", &maxlen, &pos);
1711       
1712                                        loctime = olocaltime(&epgnode->starttime);
1713                                        if(loctime != NULL)
1714                                                strftime(buf1, MINMALLOC, "%d.%m _ %H:%M __ ", loctime);
1715                                                //strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1716                                        free(loctime); loctime = NULL;
1717                                        //loctime = olocaltime(&epgnode->endtime);
1718                                        //if(loctime != NULL)
1719                                        //      strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1720                                        //free(loctime); loctime = NULL;
1721                                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1722                                        ostrcatbig(&buf, " ", &maxlen, &pos);
1723       
1724                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1725                                        if(chnode->name != NULL)
1726                                        {
1727                                                ostrcatbig(&buf, " (", &maxlen, &pos);
1728                                                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1729                                                ostrcatbig(&buf, ")", &maxlen, &pos);
1730                                        }
1731
1732                                        ostrcatbig(&buf, "</a><br><font class=smalllabel1>", &maxlen, &pos);
1733                                        ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1734
1735                                        ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1736                                        ostrcatbig(&buf, buf2, &maxlen, &pos);
1737                                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/timer.png alt=\"set timer\"/>", &maxlen, &pos);
1738                                        ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1739                                }
1740                                else
1741                                {
1742                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1743                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1744
1745                                        tmpstr = olutoa(epgnode->starttime);
1746                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1747                                        free(tmpstr); tmpstr = NULL;
1748                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1749
1750                                        tmpstr = olutoa(epgnode->endtime);
1751                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1752                                        free(tmpstr); tmpstr = NULL;
1753                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1754
1755                                        ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1756                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1757
1758                                        if(longepg == 1)
1759                                        {
1760                                                tmpstr = epgdescunzip(epgnode);
1761                                                if(tmpstr != NULL)
1762                                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1763                                                free(tmpstr); tmpstr = NULL;
1764                                        }
1765                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1766
1767                                        tmpstr = oitoa(epgnode->eventid);
1768                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1769                                        free(tmpstr); tmpstr = NULL;
1770                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1771                                }
1772                        }
1773                        epgnode = epgnode->next;
1774                        free(buf2); buf2 = NULL;
1775                }
1776                chnode = chnode->next;
1777        }
1778
1779        if(maxcount > MAXHTMLLINE && fmt == 0)
1780        {
1781                int i;
1782                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1783                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1784                {
1785                        if(page == i)
1786                                ostrcatbig(&buf, "<a class=pagesellink href=query?getepgsearch&", &maxlen, &pos);
1787                        else
1788                                ostrcatbig(&buf, "<a class=pagelink href=query?getepgsearch&", &maxlen, &pos);
1789                        ostrcatbig(&buf, param, &maxlen, &pos);
1790                        ostrcatbig(&buf, "&", &maxlen, &pos);
1791                        free(tmpnr); tmpnr = NULL;
1792
1793                        tmpnr = oitoa(i);
1794                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1795                        ostrcatbig(&buf, ">", &maxlen, &pos);
1796                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1797                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
1798                        free(tmpnr); tmpnr = NULL;
1799                }
1800                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1801        }
1802
1803        if(fmt == 0)
1804                webcreatetailbig(&buf, &maxlen, &pos, 0);
1805        else if(buf == NULL)
1806                buf = ostrcat("no data", NULL, 0, 0);
1807
1808        free(buf1);
1809        return buf;
1810}
1811
1812//flagbit 0: restrict to path
1813//flagbit 1: show epg icon
1814//flagbit 2: show delete icon
1815//flagbit 3: show stream icon
1816//flagbit 4: show websteam icon
1817char* webgetfilelist(char* param, char* link, char* dellink, char* path, char* mask, int flag, int fmt)
1818{
1819        char* buf = NULL, *tmppath = NULL, *tmpnr = NULL, *param1 = NULL;
1820        int maxlen = 0, pos = 0, line = 0, maxcount = 0, page = 1;
1821        struct skin* webdir = getscreen("webdir");
1822        struct skin* filelist = getscreennode(webdir, "filelist");
1823        struct skin* filelistpath = getscreennode(webdir, "filelistpath");
1824        struct skin* node = NULL;
1825
1826        if(param == NULL) param = path;
1827
1828        //create param1
1829        param1 = strchr(param, '&');
1830        if(param1 != NULL)
1831                *param1++ = '\0';
1832
1833        if(param1 != NULL) page = atoi(param1);
1834
1835        if(strlen(param) == 0 || !isdir(param))
1836                tmppath = ostrcat(path, NULL, 0, 0);
1837        else
1838                tmppath = ostrcat(param, NULL, 0, 0);
1839
1840        char* tmppath1 = createpath(tmppath, "");
1841        free(tmppath); tmppath = tmppath1;
1842
1843        if(checkbit(flag, 0) == 1)
1844        {
1845                if(ostrstr(tmppath, path) != tmppath)
1846                {
1847                        free(tmppath); tmppath = NULL;
1848                        tmppath = ostrcat(path, NULL, 0, 0);
1849                }
1850        }
1851
1852        changemask(filelist, mask);
1853        changeinput(filelist, tmppath);
1854        changetext(filelistpath, filelist->input);
1855
1856        free(tmppath); tmppath = NULL;
1857
1858        delmarkedscreennodes(webdir, FILELISTDELMARK);
1859        createfilelist(webdir, filelist, 0);
1860
1861        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);
1862
1863        node = filelist;
1864        while(node != NULL)
1865        {
1866                if(node->del == FILELISTDELMARK)
1867                {
1868                        maxcount++;
1869                        if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1870                        {
1871                                node = node->next;
1872                                continue;
1873                        }
1874
1875                        if(fmt == 0)
1876                        {
1877                                if(line == 0)
1878                                {
1879                                        ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1880                                        line = 1;
1881                                }
1882                                else
1883                                {
1884                                        ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1885                                        line = 0;
1886                                }
1887
1888                                ostrcatbig(&buf, "<td>", &maxlen, &pos);
1889                        }
1890                        if(node->input != NULL) //dir
1891                        {
1892                                if(fmt == 0)
1893                                {
1894                                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/folder.png alt=Directory> <a class=link href=\"query?", &maxlen, &pos);
1895                                        ostrcatbig(&buf, link, &maxlen, &pos);
1896                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1897                                        ostrcatbig(&buf, node->input, &maxlen, &pos);
1898                                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1899                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1900                                        ostrcatbig(&buf, "</a><td> </td>", &maxlen, &pos);
1901                                }
1902                                else
1903                                {
1904                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1905                                        ostrcatbig(&buf, "#0", &maxlen, &pos);
1906                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1907                                }
1908                        }
1909                        else
1910                        {
1911                                if(fmt == 0)
1912                                {
1913                                        ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
1914                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1915                                        ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1916
1917                                        ostrcatbig(&buf, "<td width=80 align=right>", &maxlen, &pos);
1918
1919                                        //epg png
1920                                        if(checkbit(flag, 1) == 1)
1921                                        {
1922                                                ostrcatbig(&buf, "<a href=\"query?getmovieepg&", &maxlen, &pos);
1923                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1924                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1925                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1926                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1927                                                ostrcatbig(&buf, "<img border=0 src=img/movieepg.png width=16 height=16 alt=EPG></a>", &maxlen, &pos);
1928                                        }
1929                                        //delete png
1930                                        if(checkbit(flag, 2) == 1)
1931                                        {
1932                                                ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
1933                                                ostrcatbig(&buf, "query?", &maxlen, &pos);
1934                                                ostrcatbig(&buf, dellink, &maxlen, &pos);
1935                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1936                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1937                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1938                                                tmpnr = oitoa(page);
1939                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1940                                                free(tmpnr); tmpnr = NULL;
1941                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1942                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1943                                                ostrcatbig(&buf, "\");'>", &maxlen, &pos);
1944                                        }
1945                                        //stream png
1946                                        if(checkbit(flag, 3) == 1)
1947                                        {
1948                                                ostrcatbig(&buf, "<a target=nothing href=\"query?getm3u&0,0,", &maxlen, &pos);
1949                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1950                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1951                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1952                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1953
1954                                                ostrcatbig(&buf, "<img border=0 src=img/stream.png width=16 height=16 alt=Stream></a>", &maxlen, &pos);
1955                                        }
1956                                        //webstream png
1957                                        if(checkbit(flag, 4) == 1)
1958                                        {
1959                                                ostrcatbig(&buf, "<a target=_blank href=\"query?getvideo&0,0,", &maxlen, &pos);
1960                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1961                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1962                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1963                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1964
1965                                                ostrcatbig(&buf, "<img border=0 src=img/webstream.png width=16 height=16 alt=WebStream></a>", &maxlen, &pos);
1966
1967                                                ostrcatbig(&buf, "<a target=_blank href=\"", &maxlen, &pos);
1968                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1969                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1970                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1971                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1972       
1973                                                ostrcatbig(&buf, "<img border=0 src=img/icon_restart.png width=16 height=16 alt=Download></a>", &maxlen, &pos);
1974                                        }
1975                                }
1976                                else
1977                                {
1978                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1979                                        ostrcatbig(&buf, "#1", &maxlen, &pos);
1980                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1981                                }
1982                        }
1983                        if(fmt == 0)
1984                        {
1985                                ostrcatbig(&buf, "</td>", &maxlen, &pos);
1986                                ostrcatbig(&buf, "</tr>", &maxlen, &pos);
1987                        }
1988                }
1989
1990                node = node->next;
1991        }
1992
1993        if(maxcount > MAXHTMLLINE)
1994        {
1995                int i;
1996                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1997                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1998                {
1999                        if(page == i)
2000                        {
2001                                ostrcatbig(&buf, "<a class=pagesellink href=query?", &maxlen, &pos);
2002                                ostrcatbig(&buf, link, &maxlen, &pos);
2003                                ostrcatbig(&buf, "&", &maxlen, &pos);
2004                        }
2005                        else
2006                        {
2007                                ostrcatbig(&buf, "<a class=pagelink href=query?", &maxlen, &pos);
2008                                ostrcatbig(&buf, link, &maxlen, &pos);
2009                                ostrcatbig(&buf, "&", &maxlen, &pos);
2010                        }
2011                        ostrcatbig(&buf, param, &maxlen, &pos);
2012                        ostrcatbig(&buf, "&", &maxlen, &pos);
2013
2014                        tmpnr = oitoa(i);
2015                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
2016                        ostrcatbig(&buf, ">", &maxlen, &pos);
2017                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
2018                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
2019                        free(tmpnr); tmpnr = NULL;
2020                }
2021                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
2022        }
2023
2024        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
2025        delmarkedscreennodes(webdir, FILELISTDELMARK);
2026        return buf;
2027}
2028
2029char* webgetmovieepg(char* param, char* path, int flag, int fmt)
2030{
2031        char* buf = NULL, *tmpstr = NULL;
2032        char tstr[2];
2033        char c = 0;
2034        int first = 1, maxlen = 0, pos = 0;
2035        FILE* fd = NULL;
2036
2037        if(fmt == 0)
2038        {
2039                webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
2040                ostrcatbig(&buf, "<tr><td><font class=biglabel>", &maxlen, &pos);
2041        }
2042
2043        if(flag == 1)
2044        {
2045                if(param != NULL && ostrstr(param, path) == param)
2046                {
2047                        tmpstr = changefilenameext(param, ".epg");
2048                        fd = fopen(tmpstr, "r");
2049                }
2050        }
2051        else
2052        {
2053                tmpstr = changefilenameext(param, ".epg");
2054                fd = fopen(tmpstr, "r");
2055        }
2056
2057        if(fd != NULL)
2058        {
2059                while(c != EOF)
2060                {
2061                        c = fgetc(fd);
2062                        if(fmt == 0 && c == '\n')
2063                        {
2064                                if(first == 1)
2065                                {
2066                                        ostrcatbig(&buf, "</font><br><font class=label>", &maxlen, &pos);
2067                                        first = 0;
2068                                }
2069                                ostrcatbig(&buf, "<br>", &maxlen, &pos);
2070                                continue;
2071                        }
2072                        if(c != EOF)
2073                        {
2074                                sprintf(tstr, "%c", c);
2075                                ostrcatbig(&buf, tstr, &maxlen, &pos);
2076                        }
2077                }
2078                fclose(fd);
2079        }
2080
2081        if(fmt == 0)
2082        {
2083                ostrcatbig(&buf, "</font></td></tr>", &maxlen, &pos);
2084                webcreatetailbig(&buf, &maxlen, &pos, 0);
2085        }
2086
2087        free(tmpstr); tmpstr = NULL;
2088        return buf;
2089}
2090
2091char* webdelfile(char* param, char* link, char* dellink, char* path, char* mask, int flag, int fmt)
2092{
2093        int del = 0;
2094        char* buf = NULL, *param1 = NULL, *param2 = NULL, *tmpparam = NULL;
2095
2096        if(param == NULL) return NULL;
2097
2098        //create param1 + 2
2099        param1 = strchr(param, '&');
2100        if(param1 != NULL)
2101        {
2102                *param1++ = '\0';
2103                param2 = strchr(param1, '&');
2104                if(param2 != NULL)
2105                        *param2++ = '\0';
2106        }
2107
2108        if(param1 == NULL || param2 == NULL) return NULL;
2109
2110        tmpparam = createpath(param, param2);
2111
2112        if(checkbit(flag, 0) == 1)
2113        {
2114                if(tmpparam != NULL && ostrstr(tmpparam, path) == tmpparam)
2115                        del = 1;
2116        }
2117        else
2118                del = 1;
2119
2120        if(del == 1)
2121        {
2122                char* epgfilename = NULL;
2123
2124                unlink(tmpparam);
2125
2126                if(cmpfilenameext(tmpparam, ".ts") == 0)
2127                {
2128                        epgfilename = changefilenameext(tmpparam, ".epg");
2129                        unlink(epgfilename);
2130                        free(epgfilename); epgfilename = NULL;
2131                        epgfilename = changefilenameext(tmpparam, ".se");
2132                        unlink(epgfilename);
2133                        free(epgfilename); epgfilename = NULL;
2134                        epgfilename = changefilenameext(tmpparam, ".ma");
2135                        unlink(epgfilename);
2136                        free(epgfilename); epgfilename = NULL;
2137                }
2138        }
2139
2140        free(tmpparam); tmpparam = NULL;
2141        tmpparam = ostrcat(tmpparam, param, 1, 0);
2142        tmpparam = ostrcat(tmpparam, "&", 1, 0);
2143        tmpparam = ostrcat(tmpparam, param1, 1, 0);
2144
2145        buf = webgetfilelist(tmpparam, link, dellink, path, mask, flag, fmt);
2146        free(tmpparam); tmpparam = NULL;
2147        return buf;
2148}
2149
2150char* websendrc(char* param, int fmt)
2151{
2152        int rccode = 0;
2153        char* buf = NULL;
2154
2155        rccode = getrcconfigint(param, NULL);
2156        writerc(rccode);
2157
2158        buf = ostrcat("ok", NULL, 0, 0);
2159        return buf;
2160}
2161
2162//flag 0: get aktiv timer
2163//flag 1: get old timer
2164char* webgetrectimer(char* param, int flag, int fmt)
2165{
2166        char* buf = NULL, *buf1 = NULL;
2167        struct rectimer* node = rectimer;
2168        struct channel* chnode = NULL;
2169        int line = 0, maxlen = 0, pos = 0;
2170        struct tm *loctime = NULL;
2171
2172        buf1 = malloc(MINMALLOC);
2173        if(buf1 == NULL)
2174        {
2175                err("no mem");
2176                return NULL;
2177        }
2178
2179        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);
2180
2181        while(node != NULL)
2182        {
2183                if((flag == 0 && (node->status == 2 || node->status == 3)) || (flag == 1 && (node->status == 0 || node->status == 1)) || node->status == 4 || node->status == 5)
2184                {
2185                        node = node->next;
2186                        continue;
2187                }
2188                if(fmt == 0)
2189                {
2190                        if(line == 0)
2191                        {
2192                                ostrcatbig(&buf, "<tr class=line1><td>", &maxlen, &pos);
2193                                line = 1;
2194                        }
2195                        else
2196                        {
2197                                ostrcatbig(&buf, "<tr class=line2><td>", &maxlen, &pos);
2198                                line = 0;
2199                        }
2200
2201                        loctime = olocaltime(&node->begin);
2202                        if(loctime != NULL)
2203                                strftime(buf1, MINMALLOC, "%d-%m-%Y %H:%M -", loctime);
2204                        free(loctime); loctime = NULL;
2205                        loctime = olocaltime(&node->end);
2206                        if(loctime != NULL)
2207                                strftime(&buf1[18], MINMALLOC - 19, " %H:%M ", loctime);
2208                        free(loctime); loctime = NULL;
2209       
2210                        ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
2211                        ostrcatbig(&buf, buf1, &maxlen, &pos);
2212
2213                        ostrcatbig(&buf, " (", &maxlen, &pos);
2214                        if(node->justplay == 0)
2215                                ostrcatbig(&buf, "rec - ", &maxlen, &pos);
2216                        else
2217                                ostrcatbig(&buf, "switch - ", &maxlen, &pos);
2218                        if(node->repeate == 0)
2219                                ostrcatbig(&buf, "once", &maxlen, &pos);
2220                        else
2221                                ostrcatbig(&buf, "repeate", &maxlen, &pos);
2222
2223                        ostrcatbig(&buf, ")</font><br><font class=smalllabel1>", &maxlen, &pos);
2224                        if(node->name == NULL || strlen(node->name) == 0)
2225                                ostrcatbig(&buf, "---", &maxlen, &pos);
2226                        else
2227                                ostrcatbig(&buf, node->name, &maxlen, &pos);
2228
2229                        chnode = getchannel(node->serviceid, node->transponderid);
2230                        if(chnode != NULL)
2231                        {
2232                                ostrcatbig(&buf, " (", &maxlen, &pos);
2233                                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
2234                                ostrcatbig(&buf, ")", &maxlen, &pos);
2235                        }
2236                        ostrcatbig(&buf, "<br>", &maxlen, &pos);
2237
2238                        if(node->status == 0)
2239                                ostrcatbig(&buf, "waiting", &maxlen, &pos);
2240                        else if(node->status == 1)
2241                                ostrcatbig(&buf, "running", &maxlen, &pos);
2242                        else if(node->status == 2)
2243                                ostrcatbig(&buf, "succes", &maxlen, &pos);
2244                        else if(node->status == 3)
2245                        {
2246                                ostrcatbig(&buf, "error", &maxlen, &pos);
2247                                if(node->errstr != NULL && strlen(node->errstr) > 0)
2248                                {
2249                                        ostrcatbig(&buf, " (", &maxlen, &pos);
2250                                        ostrcatbig(&buf, node->errstr, &maxlen, &pos);
2251                                        ostrcatbig(&buf, ")", &maxlen, &pos);
2252                                }
2253                        }
2254
2255                        ostrcatbig(&buf, "</font>", &maxlen, &pos);
2256
2257                        if(flag == 0)
2258                        {
2259                                ostrcatbig(&buf, "</td><td width=40 align=right>", &maxlen, &pos);
2260
2261                                //edit png
2262                                ostrcatbig(&buf, "<a target=main href=\"query?editrectimer", &maxlen, &pos);
2263                                ostrcatbig(&buf, "&", &maxlen, &pos);
2264                                ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2265                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2266
2267                                ostrcatbig(&buf, "<img border=0 src=img/edit.png width=16 height=16 alt=\"Edit Timer\"></a>", &maxlen, &pos);
2268
2269                                //delete png
2270                                ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
2271                                ostrcatbig(&buf, "query?delrectimer", &maxlen, &pos);
2272                                ostrcatbig(&buf, "&", &maxlen, &pos);
2273                                ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2274                                //ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
2275                                //ostrcatbig(&buf, "&", &maxlen, &pos);
2276                                //tmpnr = oitoa(page);
2277                                //ostrcatbig(&buf, tmpnr, &maxlen, &pos);
2278                                //free(tmpnr); tmpnr = NULL;
2279                                //ostrcatbig(&buf, "&", &maxlen, &pos);
2280                                //ostrcatbig(&buf, node->text, &maxlen, &pos);
2281                                ostrcatbig(&buf, "\");'>", &maxlen, &pos);
2282                        }
2283
2284                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
2285                }
2286                else
2287                {
2288                        buf = ostrcat(buf, olutoa(node->begin), 1, 1);
2289                        buf = ostrcat(buf, "#", 1, 0);
2290                        buf = ostrcat(buf, olutoa(node->end), 1, 1);
2291                        buf = ostrcat(buf, "#", 1, 0);
2292                        buf = ostrcat(buf, oitoa(node->justplay), 1, 1);
2293                        buf = ostrcat(buf, "#", 1, 0);
2294                        buf = ostrcat(buf, oitoa(node->repeate), 1, 1);
2295                        buf = ostrcat(buf, "#", 1, 0);
2296                        buf = ostrcat(buf, node->name, 1, 0);
2297                        buf = ostrcat(buf, "#", 1, 0);
2298                        buf = ostrcat(buf, oitoa(node->serviceid), 1, 1);
2299                        buf = ostrcat(buf, "#", 1, 0);
2300                        buf = ostrcat(buf, ollutoa(node->transponderid), 1, 1);
2301                        buf = ostrcat(buf, "#", 1, 0);
2302                        buf = ostrcat(buf, oitoa(node->status), 1, 1);
2303                        buf = ostrcat(buf, "#", 1, 0);
2304                        buf = ostrcat(buf, node->errstr, 1, 0);
2305                        buf = ostrcat(buf, "#", 1, 0);
2306                        buf = ostrcat(buf, node->timestamp, 1, 0);
2307                        buf = ostrcat(buf, "#", 1, 0);
2308                        chnode = getchannel(node->serviceid, node->transponderid);
2309                        if(chnode != NULL)
2310                                buf = ostrcat(buf, chnode->name, 1, 0);
2311                        buf = ostrcat(buf, "#", 1, 0);
2312                        buf = ostrcat(buf, oitoa(node->afterevent), 1, 1);
2313                        buf = ostrcat(buf, "\n", 1, 0);
2314                }
2315
2316                node = node->next;
2317        }
2318
2319        if(fmt == 0)
2320                webcreatetailbig(&buf, &maxlen, &pos, 0);
2321        else if(buf == NULL)
2322                buf = ostrcat("no data", NULL, 0, 0);
2323
2324        free(buf1);
2325        return buf;
2326}
2327
2328char* webaddrectimer(char* param, int fmt)
2329{
2330        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *param1 = NULL, *param2 = NULL;
2331        struct channel* chnode = NULL;
2332        struct epg* epgnode = NULL;
2333//      int maxlen = 0, pos = 0, tmpservicetype = 0;
2334        int maxlen = 0, pos = 0;
2335        struct tm* loctime = NULL;
2336        time_t akttime = time(NULL);
2337       
2338        if(param != NULL)
2339        {
2340                //create param1 + 2
2341                param1 = strchr(param, '&');
2342                if(param1 != NULL)
2343                {
2344                        *param1++ = '\0';
2345                        param2 = strchr(param1, '&');
2346                        if(param2 != NULL)
2347                                *param2++ = '\0';
2348                }
2349                if(param1 == NULL || param2 == NULL) return NULL;
2350                chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
2351                if(chnode == NULL) return NULL;
2352
2353                epgnode = getepg(chnode, atoi(param2), 0);
2354                if(epgnode == NULL) return NULL;
2355        }
2356
2357               
2358        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);
2359        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2360        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2361        if(chnode == NULL)
2362                ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimercheck&node\" value=\"", &maxlen, &pos);
2363        else
2364                ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2365        ostrcatbig(&buf, "0", &maxlen, &pos);
2366        ostrcatbig(&buf, "\">", &maxlen, &pos);
2367        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2368        ostrcatbig(&buf, "<td><font class=label>Name:&nbsp;</font></td>", &maxlen, &pos);
2369        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"name\" value=\"", &maxlen, &pos);
2370        if(epgnode != NULL)
2371                ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
2372        else   
2373                ostrcatbig(&buf, " ", &maxlen, &pos);
2374        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2375        ostrcatbig(&buf, "<td><font class=label>Type:&nbsp;</font></td>", &maxlen, &pos);
2376        ostrcatbig(&buf, "<td><select name=\"type\" border=0><option selected>", &maxlen, &pos);
2377        ostrcatbig(&buf, "record", &maxlen, &pos);
2378        ostrcatbig(&buf, "<option>record<option>switch channel</select></td></tr>", &maxlen, &pos);
2379
2380        buf2 = malloc(MINMALLOC);
2381        if(epgnode != NULL)
2382                loctime =       olocaltime(&epgnode->starttime);
2383        else
2384                loctime = olocaltime(&akttime);
2385        if(loctime != NULL)
2386                strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2387        free(loctime); loctime = NULL;
2388
2389        buf1 = ostrcat(buf2, NULL, 0, 0);
2390        ostrcatbig(&buf, "<td><font class=label>Begin:&nbsp;</font></td>", &maxlen, &pos);
2391        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"begin\" value=\"", &maxlen, &pos);
2392        ostrcatbig(&buf, buf1, &maxlen, &pos);
2393        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2394        free(buf1); buf1 = NULL;
2395       
2396        if(epgnode != NULL)
2397                loctime =       olocaltime(&epgnode->endtime);
2398        else
2399                loctime = olocaltime(&akttime);
2400        if(loctime != NULL)
2401                strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2402        free(loctime); loctime = NULL;
2403       
2404        buf1 = ostrcat(buf2, NULL, 0, 0);
2405        ostrcatbig(&buf, "<td><font class=label>End:&nbsp;</font></td>", &maxlen, &pos);
2406        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"end\" value=\"", &maxlen, &pos);
2407        ostrcatbig(&buf, buf1, &maxlen, &pos);
2408        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2409        free(buf1); buf1 = NULL;
2410        free(buf2); buf2 = NULL;
2411
2412        ostrcatbig(&buf, "<td><font class=label>Channel:&nbsp;</font></td>", &maxlen, &pos);
2413        if(chnode == NULL)
2414                ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"channel\" value=\"", &maxlen, &pos);
2415        else
2416        {
2417                ostrcatbig(&buf, "<td>", &maxlen, &pos);
2418                ostrcatbig(&buf, "<input class=inputbox type=\"hidden\" name=\"sid\" value=\"", &maxlen, &pos);
2419                buf1 = oitoa(chnode->serviceid);
2420                ostrcatbig(&buf, buf1, &maxlen, &pos);
2421                free(buf1); buf1 = NULL;
2422                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2423                ostrcatbig(&buf, "<input class=inputbox type=\"hidden\" name=\"tid\" value=\"", &maxlen, &pos);
2424                buf1 = ollutoa(chnode->transponderid);
2425                ostrcatbig(&buf, buf1, &maxlen, &pos);
2426                free(buf1); buf1 = NULL;
2427                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2428                ostrcatbig(&buf, "<input readonly class=inputbox type=\"text\" name=\"channel\" value=\"", &maxlen, &pos);
2429        }
2430        if(chnode != NULL)
2431                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
2432        else if(status.aktservice->channel != NULL)
2433                ostrcatbig(&buf, status.aktservice->channel->name, &maxlen, &pos);
2434        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2435        free(buf1); buf1 = NULL;
2436       
2437        ostrcatbig(&buf, "<td><font class=label>after event:&nbsp;</font></td>", &maxlen, &pos);
2438        ostrcatbig(&buf, "<td><select name=\"afterevent\" border=0><option selected>", &maxlen, &pos);
2439        ostrcatbig(&buf, "auto", &maxlen, &pos);
2440        ostrcatbig(&buf, "<option>auto<option>nothing<option>standby<option>off</select></td></tr>", &maxlen, &pos);
2441       
2442        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);
2443
2444        //ostrcatbig(&buf, param, &maxlen, &pos);
2445        return buf;
2446}
2447
2448char* webrectimercheck(char* param, int fmt)
2449{
2450        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;
2451        int maxlen = 0, pos = 0, channelfind = 0;
2452        struct channel *channel1 = NULL;
2453       
2454        anode = ostrstr(param, "node=");
2455        if(anode != NULL)
2456                anode = anode + 5;
2457        name = ostrstr(param, "name=");
2458        if(name != NULL)
2459                name = name + 5;
2460        begin = ostrstr(param, "begin=");
2461        if(begin != NULL)
2462                begin = begin + 6;
2463        end = ostrstr(param, "end=");
2464        if(end != NULL)
2465                end = end + 4;
2466        type = ostrstr(param, "type=");
2467        if(type != NULL)
2468                type = type + 5;
2469        channelname = ostrstr(param, "channel=");
2470        if(channelname != NULL)
2471                channelname = channelname + 8;
2472        ext = ostrstr(param, "ext=");
2473        if(ext != NULL)
2474                ext = ext + 4;
2475        afterevent = ostrstr(param, "afterevent=");
2476        if(afterevent != NULL)
2477                afterevent = afterevent + 11;
2478        repeat = ostrstr(param, "repeat=");
2479        if(repeat != NULL)
2480                repeat = repeat + 7;
2481
2482        param1 = ostrcat(param, NULL, 0, 0);
2483        string = param;
2484        while(string != NULL)
2485        {
2486                string = strchr(string, '&');
2487                if(string != NULL)
2488                        *string++ = '\0';
2489        }
2490       
2491        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);
2492        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2493        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2494       
2495        if(anode != NULL)
2496        {
2497                ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2498                ostrcatbig(&buf, anode, &maxlen, &pos);
2499                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2500        }
2501       
2502        if(name != NULL)
2503        {       
2504                ostrcatbig(&buf, "<input type=\"hidden\" name=\"name\" value=\"", &maxlen, &pos);
2505                ostrcatbig(&buf, name, &maxlen, &pos);
2506                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2507        }
2508       
2509        if(begin != NULL)
2510        {
2511                ostrcatbig(&buf, "<input type=\"hidden\" name=\"begin\" value=\"", &maxlen, &pos);
2512                ostrcatbig(&buf, begin, &maxlen, &pos);
2513                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2514        }
2515       
2516        if(end != NULL)
2517        {
2518                ostrcatbig(&buf, "<input type=\"hidden\" name=\"end\" value=\"", &maxlen, &pos);
2519                ostrcatbig(&buf, end, &maxlen, &pos);             
2520                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2521        }
2522       
2523        if(type != NULL)
2524        {
2525                ostrcatbig(&buf, "<input type=\"hidden\" name=\"type\" value=\"", &maxlen, &pos);
2526                ostrcatbig(&buf, type, &maxlen, &pos);
2527                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2528        }
2529       
2530        if(ext != NULL)
2531        {
2532                ostrcatbig(&buf, "<input type=\"hidden\" name=\"ext\" value=\"", &maxlen, &pos);
2533                ostrcatbig(&buf, ext, &maxlen, &pos);
2534                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2535        }
2536       
2537        if(afterevent != NULL)
2538        {
2539                ostrcatbig(&buf, "<input type=\"hidden\" name=\"afterevent\" value=\"", &maxlen, &pos);
2540                ostrcatbig(&buf, afterevent, &maxlen, &pos);
2541                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2542        }
2543       
2544        if(repeat != NULL)
2545        {
2546                ostrcatbig(&buf, "<input type=\"hidden\" name=\"repeat\" value=\"", &maxlen, &pos);
2547                ostrcatbig(&buf, repeat, &maxlen, &pos);
2548                ostrcatbig(&buf, "\" />", &maxlen, &pos);
2549        }
2550       
2551        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2552        ostrcatbig(&buf, "<td><select name=sid size=10 border=0>", &maxlen, &pos);
2553       
2554        /*
2555        channel1 = channel;             
2556        while(channel1 != NULL)
2557        {
2558                if(ostrcmp(channel1->name, channelname) == 0 && (channel1->servicetype == 0 || channel1->servicetype == 1))
2559                {
2560                        if(channelfind == 0)
2561                                ostrcatbig(&buf, "<option selected value=\"", &maxlen, &pos);
2562                        else
2563                                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
2564                       
2565                        buf1 = oitoa(channel1->serviceid);
2566                        ostrcatbig(&buf, buf1, &maxlen, &pos);
2567                        free(buf1); buf1 = NULL;
2568                        ostrcatbig(&buf, "&tid=", &maxlen, &pos);
2569                        buf1 = ollutoa(channel1->transponderid);
2570                        ostrcatbig(&buf, buf1, &maxlen, &pos);
2571                        free(buf1); buf1 = NULL;
2572                        ostrcatbig(&buf, "\">", &maxlen, &pos);
2573                       
2574                        ostrcatbig(&buf, channel1->name, &maxlen, &pos);
2575                        ostrcatbig(&buf, " (", &maxlen, &pos);
2576                       
2577                        //get satname from channel
2578                        if(channel1->transponder != NULL)
2579                        {
2580                                struct sat* snode = getsatbyorbitalpos(channel1->transponder->orbitalpos);
2581                                if(snode != NULL)
2582                                        ostrcatbig(&buf, snode->name, &maxlen, &pos);
2583                                else
2584                                        ostrcatbig(&buf, _("unknown"), &maxlen, &pos);
2585                                       
2586                                if(channel1->provider != NULL)
2587                                        ostrcatbig(&buf, " - ", &maxlen, &pos);                 
2588                        }
2589                       
2590                        //get provider from channel
2591                        if(channel1->provider != NULL)
2592                        {
2593                                if(channel1->provider->name != NULL)
2594                                        ostrcatbig(&buf, channel1->provider->name, &maxlen, &pos);
2595                                else
2596                                        ostrcatbig(&buf, _("unknown"), &maxlen, &pos);                 
2597                        }
2598                       
2599                        ostrcatbig(&buf, ")", &maxlen, &pos);   
2600                       
2601                        channelfind++;
2602                }
2603                channel1 = channel1->next;
2604        }
2605        */
2606       
2607        if(channelfind == 0)
2608        {
2609                channel1 = channel;             
2610                while(channel1 != NULL)
2611                {
2612                        if(ostrstrcase(channel1->name, channelname) != NULL && (channel1->servicetype == 0 || channel1->servicetype == 1))
2613                        {
2614                                if(channelfind == 0)
2615                                        ostrcatbig(&buf, "<option selected value=\"", &maxlen, &pos);
2616                                else
2617                                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
2618                               
2619                                buf1 = oitoa(channel1->serviceid);
2620                                ostrcatbig(&buf, buf1, &maxlen, &pos);
2621                                free(buf1); buf1 = NULL;
2622                                ostrcatbig(&buf, "&tid=", &maxlen, &pos);
2623                                buf1 = ollutoa(channel1->transponderid);
2624                                ostrcatbig(&buf, buf1, &maxlen, &pos);
2625                                free(buf1); buf1 = NULL;
2626                                ostrcatbig(&buf, "\">", &maxlen, &pos);
2627                               
2628                                ostrcatbig(&buf, channel1->name, &maxlen, &pos);
2629                                ostrcatbig(&buf, " (", &maxlen, &pos);
2630                               
2631                                //get satname from channel
2632                                if(channel1->transponder != NULL)
2633                                {
2634                                        struct sat* snode = getsatbyorbitalpos(channel1->transponder->orbitalpos);
2635                                        if(snode != NULL)
2636                                                ostrcatbig(&buf, snode->name, &maxlen, &pos);
2637                                        else
2638                                                ostrcatbig(&buf, _("unknown"), &maxlen, &pos);
2639                                               
2640                                        if(channel1->provider != NULL)
2641                                                ostrcatbig(&buf, " - ", &maxlen, &pos);                 
2642                                }
2643                               
2644                                //get provider from channel
2645                                if(channel1->provider != NULL)
2646                                {
2647                                        if(channel1->provider->name != NULL)
2648                                                ostrcatbig(&buf, channel1->provider->name, &maxlen, &pos);
2649                                        else
2650                                                ostrcatbig(&buf, _("unknown"), &maxlen, &pos);                 
2651                                }
2652                               
2653                                ostrcatbig(&buf, ")", &maxlen, &pos);   
2654                               
2655                                channelfind++;
2656                        }
2657                        channel1 = channel1->next;
2658                }
2659        }
2660       
2661        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);
2662
2663        if(channelfind < 2)
2664        {
2665                free(buf); buf = NULL;
2666                buf = webrectimersend(param1, fmt);     
2667                free(param1); param1 = NULL;
2668        }
2669
2670        return buf;             
2671}
2672
2673char* webrectimersend(char* param, int fmt)
2674{
2675        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;
2676        int newnode = 0, channelfind = 0;
2677        struct rectimer *node = NULL;
2678        char* tmpstr = NULL;
2679        struct tm* loctime = NULL;
2680        struct channel *channel1 = NULL;
2681
2682        anode = ostrstr(param, "node=");
2683        if(anode != NULL)
2684                anode = anode + 5;
2685        name = ostrstr(param, "name=");
2686        if(name != NULL)
2687                name = name + 5;
2688        begin = ostrstr(param, "begin=");
2689        if(begin != NULL)
2690                begin = begin + 6;
2691        end = ostrstr(param, "end=");
2692        if(end != NULL)
2693                end = end + 4;
2694        type = ostrstr(param, "type=");
2695        if(type != NULL)
2696                type = type + 5;
2697        channelname = ostrstr(param, "channel=");
2698        if(channelname != NULL)
2699                channelname = channelname + 8;
2700        sid = ostrstr(param, "sid=");
2701        if(sid != NULL)
2702                sid = sid + 4;
2703        tid = ostrstr(param, "tid=");
2704        if(tid != NULL)
2705                tid = tid + 4;
2706        ext = ostrstr(param, "ext=");
2707        if(ext != NULL)
2708                ext = ext + 4;
2709        afterevent = ostrstr(param, "afterevent=");
2710        if(afterevent != NULL)
2711                afterevent = afterevent + 11;
2712        repeat = ostrstr(param, "repeat=");
2713        if(repeat != NULL)
2714                repeat = repeat + 7;
2715       
2716        string = param;
2717        while(string != NULL)
2718        {       
2719                string = strchr(string, '&');
2720                if(string != NULL)
2721                        *string++ = '\0';
2722        }
2723       
2724        if((sid == NULL && tid != NULL) || (sid != NULL && tid == NULL))
2725        {
2726                buf = ostrcat(buf, "ERROR: sid and tid required or only channel", 1, 0);       
2727                return buf;
2728        }
2729               
2730        if(channelname != NULL && sid == NULL)
2731        {
2732                channelfind = 0;
2733                channel1 = channel;
2734                while(channel1 != NULL)
2735                {
2736                        if(ostrcmp(channel1->name, channelname) == 0 && (channel1->servicetype == 0 || channel1->servicetype == 1))
2737                        {
2738                                        channelfind = 1;
2739                                        break;
2740                        }
2741                        channel1 = channel1->next;
2742                }
2743                if(channelfind == 0)
2744                {
2745                        channel1 = channel;             
2746                        while(channel1 != NULL)
2747                        {
2748                                if(ostrstr(channel1->name, channelname) != NULL && (channel1->servicetype == 0 || channel1->servicetype == 1))
2749                                {
2750                                                channelfind = 1;
2751                                                break;
2752                                }
2753                                channel1 = channel1->next;
2754                        }
2755                }
2756                if(channelfind == 0)
2757                {
2758                        buf = ostrcat(buf, "ERROR: channel not found", 1, 0);   
2759                        return buf;
2760                }
2761        }
2762       
2763        newnode = 0;
2764        node = getrectimerbytimestamp(anode);
2765        if(node == NULL)
2766        {
2767                node = addrectimernode(NULL, NULL);
2768                if(node != NULL)
2769                {
2770                        newnode = 1;
2771                        node->pincode = ostrcat("0000", NULL, 0, 0);
2772                        node->recpath = ostrcat(NULL, getconfig("rec_path", NULL), 0, 0);
2773                        node->afterevent = 0;
2774                        node->repeate = 0;
2775                }
2776        }
2777       
2778        if(node != NULL)
2779        {
2780                if(channelfind == 1 && channel1 != NULL)
2781                {
2782                        node->serviceid = channel1->serviceid;
2783                        node->servicetype = channel1->servicetype;
2784                        node->transponderid = channel1->transponderid;
2785                }
2786       
2787                if(sid != NULL && tid != NULL)
2788                {
2789                        node->serviceid = atoi(sid);
2790                        node->transponderid = strtoull(tid, NULL, 10);
2791                        node->servicetype = 0;
2792                }
2793       
2794                free(node->name); node->name = NULL;
2795                node->name = ostrcat(name, NULL, 0, 0);
2796       
2797                if(ostrcmp(type, "record") == 0)
2798                        node->justplay = 0;
2799                else
2800                        node->justplay = 1;
2801                       
2802                if(afterevent != NULL)
2803                {
2804                        if(ostrcmp(afterevent, "auto") == 0)
2805                                node->afterevent = 0;
2806                        else if(ostrcmp(afterevent, "nothing") == 0)
2807                                node->afterevent = 1;
2808                        else if(ostrcmp(afterevent, "standby") == 0)
2809                                node->afterevent = 2;
2810                        else if(ostrcmp(afterevent, "off") == 0)
2811                                node->afterevent = 3;
2812                }
2813
2814                if(repeat != NULL)
2815                        node->repeate = atoi(repeat);
2816       
2817                loctime = olocaltime(&node->begin);
2818                if(loctime != NULL && begin != NULL)
2819                {
2820                        tmpstr = strptime(begin, "%H:%M %d-%m-%Y", loctime);
2821                        if(tmpstr != NULL) {
2822                                loctime->tm_isdst = -1;
2823                                node->begin = mktime(loctime);
2824                        }
2825                }
2826                if(node->justplay == 0 && newnode == 1) node->begin -= getconfigint("recforerun" , NULL) * 60;
2827                node->begin -= (node->begin % 60);
2828                tmpstr = NULL;
2829                free(loctime); loctime = NULL;
2830
2831                loctime = olocaltime(&node->end);
2832                if(loctime != NULL && end != NULL)
2833                {
2834                        tmpstr = strptime(end, "%H:%M %d-%m-%Y", loctime);
2835                        if(tmpstr != NULL) {
2836                                loctime->tm_isdst = -1;
2837                                node->end = mktime(loctime);
2838                        }
2839                }
2840                if(node->justplay == 0 && newnode == 1) node->end += getconfigint("recoverrun" , NULL) * 60;
2841                node->end -= (node->end % 60);
2842                tmpstr = NULL;
2843                free(loctime); loctime = NULL;
2844
2845                if(newnode == 1)
2846                        node->disabled = 0;
2847       
2848                status.writerectimer = 1;
2849                writerectimer(getconfig("rectimerfile", NULL), 0);
2850               
2851                if(ext == NULL)
2852                        buf = webgetrectimer(NULL, 0, fmt);
2853                else
2854                {
2855                        buf = ostrcat(buf, "ok -> TimerID=", 1, 0);
2856                        buf = ostrcat(buf, node->timestamp, 1, 0);
2857                }
2858        }
2859        else
2860                buf = ostrcat(buf, "Timer not ok", 1, 0);
2861
2862        return buf;
2863}
2864
2865char* webeditrectimer(char* param, int fmt)
2866{
2867        char* buf = NULL, *buf1 = NULL, *buf2 = NULL;
2868        int maxlen = 0, pos = 0;
2869        struct rectimer *node = NULL;
2870        struct tm* loctime = NULL;
2871
2872        node = getrectimerbytimestamp(param);
2873        if(node == NULL) return NULL;
2874               
2875        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);
2876        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2877        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2878        ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2879        ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2880        ostrcatbig(&buf, "\">", &maxlen, &pos);
2881        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2882        ostrcatbig(&buf, "<td><font class=label>Name:&nbsp;</font></td>", &maxlen, &pos);
2883        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"name\" value=\"", &maxlen, &pos);
2884        ostrcatbig(&buf, node->name, &maxlen, &pos);
2885        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2886
2887        ostrcatbig(&buf, "<td><font class=label>Type:&nbsp;</font></td>", &maxlen, &pos);
2888        ostrcatbig(&buf, "<td><select name=\"type\" border=0><option selected>", &maxlen, &pos);
2889        if( node->justplay == 0 )
2890                ostrcatbig(&buf, "record", &maxlen, &pos);
2891        else
2892                ostrcatbig(&buf, "switch channel", &maxlen, &pos);
2893        ostrcatbig(&buf, "<option>record<option>switch channel</select></td></tr>", &maxlen, &pos);
2894       
2895        /*ostrcatbig(&buf, "<td><font class=label>Repeate:&nbsp;</font></td>", &maxlen, &pos);
2896        ostrcatbig(&buf, "<td><select name=\"repeate\" border=0><option selected>", &maxlen, &pos);
2897        if( node->repeate == 0 )
2898                ostrcatbig(&buf, "once", &maxlen, &pos);
2899        else
2900                ostrcatbig(&buf, "repeate", &maxlen, &pos);
2901        ostrcatbig(&buf, "<option>once<option>repeate</select></td></tr>", &maxlen, &pos);     
2902        */
2903       
2904        /*ostrcatbig(&buf, "<td><font class=label>Repeate type:&nbsp;</font></td>", &maxlen, &pos);
2905        ostrcatbig(&buf, "<td><select name=\"repeatetype\" border=0><option selected>", &maxlen, &pos);
2906        if( node->repeate == 0 )
2907                ostrcatbig(&buf, "daily", &maxlen, &pos);
2908        else if( node->repeate == 1 )
2909                ostrcatbig(&buf, "weekly", &maxlen, &pos);
2910        else if( node->repeate == 2 )
2911                ostrcatbig(&buf, "workdays", &maxlen, &pos);
2912        else
2913                ostrcatbig(&buf, "user defined", &maxlen, &pos);
2914        ostrcatbig(&buf, "<option>daily<option>weekly<option>workdays<option>user defined</select></td></tr>", &maxlen, &pos); 
2915        */
2916               
2917        buf2 = malloc(20);
2918        loctime = olocaltime(&node->begin);
2919        if(loctime != NULL && buf2 != NULL)
2920                strftime(buf2, 20, "%H:%M %d-%m-%Y", loctime);
2921        free(loctime); loctime = NULL;
2922
2923        buf1 = ostrcat(buf2, NULL, 0, 0);
2924        ostrcatbig(&buf, "<td><font class=label>Begin:&nbsp;</font></td>", &maxlen, &pos);
2925        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"begin\" value=\"", &maxlen, &pos);
2926        ostrcatbig(&buf, buf1, &maxlen, &pos);
2927        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2928        free(buf1); buf1 = NULL;
2929       
2930        loctime = olocaltime(&node->end);
2931        if(loctime != NULL && buf2 != NULL)
2932                strftime(buf2, 20, "%H:%M %d-%m-%Y", loctime);
2933        free(loctime); loctime = NULL;
2934
2935        buf1 = ostrcat(buf2, NULL, 0, 0);
2936        ostrcatbig(&buf, "<td><font class=label>End:&nbsp;</font></td>", &maxlen, &pos);
2937        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"end\" value=\"", &maxlen, &pos);
2938        ostrcatbig(&buf, buf1, &maxlen, &pos);
2939        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2940        free(buf1); buf1 = NULL;
2941        free(buf2); buf2 = NULL;
2942       
2943        ostrcatbig(&buf, "<td><font class=label>after event:&nbsp;</font></td>", &maxlen, &pos);
2944        ostrcatbig(&buf, "<td><select name=\"afterevent\" border=0><option selected>", &maxlen, &pos);
2945        if( node->afterevent == 0 )
2946                ostrcatbig(&buf, "auto", &maxlen, &pos);
2947        else if( node->afterevent == 1 )
2948                ostrcatbig(&buf, "nothing", &maxlen, &pos);
2949        else if( node->afterevent == 2 )
2950                ostrcatbig(&buf, "standby", &maxlen, &pos);
2951        else if( node->afterevent == 3 )
2952                ostrcatbig(&buf, "off", &maxlen, &pos);
2953        else
2954                ostrcatbig(&buf, "auto", &maxlen, &pos);
2955        ostrcatbig(&buf, "<option>auto<option>nothing<option>standby<option>off</select></td></tr>", &maxlen, &pos);
2956       
2957        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);
2958       
2959        //ostrcatbig(&buf, param, &maxlen, &pos);
2960        return buf;
2961}
2962
2963char* webdelrectimer(char* param, int fmt)
2964{
2965        char* buf = NULL, *string = NULL, *timerid = NULL;
2966        struct rectimer *node = NULL;
2967        int ext = 0;
2968       
2969        timerid = ostrstr(param, "timerid=");
2970        if(timerid != NULL)
2971        {
2972                timerid = timerid + 8;
2973                ext = 1;
2974        }
2975
2976        node = NULL;
2977        if(ext == 1)
2978        {
2979                string = param;
2980                while(string != NULL)
2981                {       
2982                        string = strchr(string, '&');
2983                        if(string != NULL)
2984                                *string++ = '\0';
2985                }
2986                node = getrectimerbytimestamp(timerid);
2987        }
2988        else
2989                node = getrectimerbytimestamp(param);
2990
2991        if(node == NULL)
2992        {
2993                buf = ostrcat(buf, "ERROR: timer not found", 1, 0);     
2994                return buf;
2995        }
2996       
2997        delrectimer(node, 1, 0);
2998       
2999        if(ext == 1)
3000                buf = ostrcat(buf, "ok -> timer deleted", 1, 0);
3001        else
3002                buf = webgetrectimer(NULL, 0, fmt);
3003       
3004        return buf;
3005}
3006
3007void putxmessage(struct stimerthread* timernode, char* captiontime, char* body)
3008{
3009        struct splitstr* ret1 = NULL;
3010        char* caption = NULL;
3011        int count1 = 0;
3012        int timeout = 5;
3013
3014        ret1 = strsplit(captiontime, "\t", &count1);
3015
3016        if(count1 >= 2)
3017        {
3018                caption = ostrcat(caption, (&ret1[0])->part, 1, 0);
3019                if((&ret1[1])->part != NULL)
3020                        timeout = atoi((&ret1[1])->part);
3021                textbox(caption, body, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 280, timeout, 0);
3022        }
3023
3024        free(caption); free(body); free(captiontime); free(ret1);
3025}
3026
3027void xmessage(char* filename)
3028{
3029        char* param=NULL, *param1 = NULL, *param2 = NULL, *param3 = NULL, *param4 = NULL;
3030        char* caption=NULL, *body=NULL;
3031        char* timeout=NULL;
3032
3033        param4 = ostrstr(filename, "icon=");
3034        param3 = ostrstr(filename, "charset=");
3035        param2 = ostrstr(filename, "timeout=");
3036        param1 = ostrstr(filename, "caption=");
3037        param = ostrstr(filename, "body=");
3038
3039        if(param4 != NULL)
3040        {
3041                param4 = param4 - 1;
3042                *param4 = '\0';
3043                param4 = param4 + 5;
3044                *param4++ = '\0';
3045        }
3046        if(param3 != NULL)
3047        {
3048                param3 = param3 - 1;
3049                *param3 = '\0';
3050                param3 = param3 + 8;
3051                *param3++ = '\0';
3052        }
3053        if(param2 != NULL)
3054        {
3055                param2 = param2 - 1;
3056                *param2 = '\0';
3057                param2 = param2 + 8;
3058                *param2++ = '\0';
3059        }
3060        if(param1 != NULL)
3061        {
3062                param1 = param1 - 1;
3063                *param1 = '\0';
3064                param1 = param1 + 8;
3065                *param1++ = '\0';
3066        }
3067        if(param != NULL)
3068        {
3069                param = param - 1;
3070                *param = '\0';
3071                param = param + 5;
3072                *param++ = '\0';
3073                body = ostrcat(body, param, 1, 0);
3074        }
3075        else
3076                body = ostrcat(body, " ", 1, 0);
3077               
3078        if(param2 != NULL)
3079                timeout = ostrcat(timeout, param2, 1, 0);
3080        else
3081                timeout = ostrcat(timeout, "5", 1, 0);
3082               
3083        if(param1 != NULL)
3084                caption = ostrcat(caption, param1, 1, 0);
3085        else
3086                caption = ostrcat(caption, "XMESSAGE", 1, 0);
3087       
3088        caption = ostrcat(caption, "\t", 1, 0);
3089        caption = ostrcat(caption, timeout, 1, 1);
3090               
3091        addtimer(&putxmessage, START, 1000, 1, (void*)caption, (void*)body, NULL);
3092        return;
3093}
3094
3095char* webgetvol(int fmt)
3096{
3097        char* buf = NULL;
3098
3099        buf = oitoa(getvol());
3100        return buf;
3101}
3102
3103char* webgetmute(int fmt)
3104{
3105        char* buf = NULL;
3106
3107        buf = oitoa(status.mute);
3108        return buf;
3109}
3110
3111char* webgetrccodes(int fmt)
3112{
3113        int i = 0;
3114        char* buf = NULL;
3115        struct clist* node = NULL;
3116
3117        m_lock(&status.clistmutex, 12);
3118        struct clist **clist = rcconfig;
3119
3120        for(i = 0; i < LISTHASHSIZE; i++)
3121        {
3122                node = clist[i];
3123
3124                while(node != NULL)
3125                {
3126                        buf = ostrcat(buf, node->key, 1, 0);
3127                        buf = ostrcat(buf, "#", 1, 0);
3128                        buf = ostrcat(buf, node->value, 1, 0);
3129                        buf = ostrcat(buf, "\n", 1, 0);
3130                        node = node->next;
3131                }
3132        }
3133
3134        m_unlock(&status.clistmutex, 12);
3135        return buf;
3136}
3137
3138char* webgetconfig(int fmt)
3139{
3140        char* buf = NULL;
3141        struct clist *node = NULL;
3142        int i = 0;
3143
3144        m_lock(&status.clistmutex, 12);
3145        struct clist **clist = config;
3146
3147        for(i = 0; i < LISTHASHSIZE; i++)
3148        {
3149                node = clist[i];
3150
3151                while(node != NULL)
3152                {
3153                        if(node->tmp != NULL && strlen(node->tmp) > 0)
3154                        {
3155                                buf = ostrcat(buf, node->key, 1, 0);
3156                                buf = ostrcat(buf, "#", 1, 0);
3157                                buf = ostrcat(buf, node->tmp, 1, 0);
3158                                buf = ostrcat(buf, "\n", 1, 0);
3159                        }
3160                        else if(node->value != NULL)
3161                        {
3162                                buf = ostrcat(buf, node->key, 1, 0);
3163                                buf = ostrcat(buf, "#", 1, 0);
3164                                buf = ostrcat(buf, node->value, 1, 0);
3165                                buf = ostrcat(buf, "\n", 1, 0);
3166                        }
3167                        else
3168                        {
3169                                buf = ostrcat(buf, node->key, 1, 0);
3170                                buf = ostrcat(buf, "#", 1, 0);
3171                                buf = ostrcat(buf, node->def, 1, 0);
3172                                buf = ostrcat(buf, "\n", 1, 0);
3173                        }
3174
3175                        node = node->next;
3176                }
3177        }
3178
3179        m_unlock(&status.clistmutex, 12);
3180        return buf;
3181}
3182
3183char* webgetsysteminfo(int fmt)
3184{
3185        char* buf = NULL;
3186        char* imgversion = NULL;
3187
3188        buf = ostrcat(buf, PROGNAME, 1, 0);
3189        buf = ostrcat(buf, "#", 1, 0);
3190        buf = ostrcat(buf, COPYRIGHT, 1, 0);
3191        buf = ostrcat(buf, "#", 1, 0);
3192        buf = ostrcat(buf, OVERSION, 1, 0);
3193        buf = ostrcat(buf, "#", 1, 0);
3194       
3195        if(isfile(getconfig("imagenamefile", NULL))     != 0)
3196                imgversion = readsys(getconfig("imagenamefile", NULL), 1);
3197        else
3198                imgversion = ostrcat("unknown", NULL, 0, 0);
3199       
3200        buf = ostrcat(buf, imgversion, 1, 1);
3201        buf = ostrcat(buf, "#", 1, 0);
3202        buf = ostrcat(buf, getboxtype(), 1, 0);
3203        buf = ostrcat(buf, "#", 1, 0);
3204        buf = ostrcat(buf, ollutoa(time(NULL)), 1, 1);
3205        buf = ostrcat(buf, "#", 1, 0);
3206
3207        if(status.standby == 0)
3208                buf = ostrcat(buf, "0", 1, 0);
3209        else
3210                buf = ostrcat(buf, "1", 1, 0);
3211       
3212        return buf;
3213}
3214
3215char* webgetchannellock(char* param, int fmt)
3216{
3217        char* buf = NULL, *param1 = NULL;
3218        struct channel* chnode = NULL;
3219
3220        if(param == NULL) return NULL;
3221
3222        //create param1
3223        param1 = strchr(param, '&');
3224        if(param1 != NULL)
3225                *param1++ = '\0';
3226
3227        if(param1 == NULL) return NULL;
3228
3229        chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
3230        if(chnode != NULL)
3231        {
3232                buf = ostrcat(buf, chnode->name, 1, 0);
3233                buf = ostrcat(buf, "#", 1, 0);
3234                buf = ostrcat(buf, oitoa(chnode->serviceid), 1, 1);
3235                buf = ostrcat(buf, "#", 1, 0);
3236                buf = ostrcat(buf, ollutoa(chnode->transponderid), 1, 1);
3237                buf = ostrcat(buf, "#", 1, 0);
3238
3239                if(channelnottunable(chnode) == 1)
3240                        buf = ostrcat(buf, "1", 1, 0);
3241                else
3242                        buf = ostrcat(buf, "0", 1, 0);
3243        }
3244        else
3245                buf = ostrcat("no data", NULL, 0, 0);
3246
3247        return buf;
3248}
3249
3250char* webgetbouquetepg(char* param, int fmt)
3251{
3252        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
3253        char* param1 = NULL, *param2 = NULL, *param3 = NULL;
3254        struct mainbouquet *mbouquet = NULL;
3255        struct bouquet *node = NULL;
3256        struct channel* chnode = NULL;
3257        struct epg* epgnode = NULL;
3258        int longepg = 0;
3259        time_t start = 0, end = 0;
3260
3261        if(param == NULL) return NULL;
3262
3263        //create param1 + 2 + 3
3264        param1 = strchr(param, '&');
3265        if(param1 != NULL)
3266        {
3267                *param1++ = '\0';
3268                param2 = strchr(param1, '&');
3269                if(param2 != NULL)
3270                {
3271                        *param2++ = '\0';
3272                        param3 = strchr(param2, '&');
3273                        if(param3 != NULL)
3274                                *param3++ = '\0';
3275                }
3276        }
3277        if(param1 == NULL || param2 == NULL || param3 == NULL) return NULL;
3278
3279        longepg = atoi(param1);
3280        start = atoi(param2);
3281        end = atoi(param3);
3282
3283        mbouquet = getmainbouquet(param);
3284        if(mbouquet != NULL)
3285        {
3286                node = mbouquet->bouquet;
3287                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 1, 0);
3288                tmpstr = ostrcat(tmpstr, mbouquet->name, 1, 0);
3289                tmpstr1 = htmlencode(tmpstr);
3290                free(tmpstr); tmpstr = NULL;
3291                while(node != NULL)
3292                {
3293                        chnode = getchannel(node->serviceid, node->transponderid);
3294                        if(chnode != NULL)
3295                        {
3296                                buf = ostrcat(buf, "BeginNewChannel", 1, 0);
3297                                buf = ostrcat(buf, "#", 1, 0);
3298                                buf = ostrcat(buf, chnode->name, 1, 0);
3299                                buf = ostrcat(buf, "#", 1, 0);
3300                                buf = ostrcat(buf, oitoa(chnode->serviceid), 1, 1);
3301                                buf = ostrcat(buf, "#", 1, 0);
3302                                buf = ostrcat(buf, ollutoa(chnode->transponderid), 1, 1);
3303                                buf = ostrcat(buf, "#", 1, 0);
3304                                buf = ostrcat(buf, oitoa(chnode->servicetype), 1, 1);
3305                                buf = ostrcat(buf, "\n", 1, 0);
3306
3307                                epgnode = chnode->epg;
3308                                while(epgnode != NULL)
3309                                {
3310                                        if((epgnode->starttime >= start && epgnode->starttime < end) || (epgnode->endtime > start && epgnode->endtime <= end) || (epgnode->starttime < start && epgnode->endtime > end))
3311                                        {
3312                                                buf = ostrcat(buf, epgnode->title, 1, 0);
3313                                                buf = ostrcat(buf, "#", 1, 0);
3314                                                buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
3315                                                buf = ostrcat(buf, "#", 1, 0);
3316                                                buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
3317                                                buf = ostrcat(buf, "#", 1, 0);
3318                                                buf = ostrcat(buf, epgnode->subtitle, 1, 0);
3319                                                buf = ostrcat(buf, "#", 1, 0);
3320
3321                                                if(longepg == 1)
3322                                                {
3323                                                        tmpstr = epgdescunzip(epgnode);
3324                                                        if(tmpstr != NULL)
3325                                                                buf = ostrcat(buf, tmpstr, 1, 0);
3326                                                        free(tmpstr); tmpstr = NULL;
3327                                                }
3328
3329                                                buf = ostrcat(buf, "#", 1, 0);
3330                                                buf = ostrcat(buf, oitoa(epgnode->eventid), 1, 1);
3331                                                buf = ostrcat(buf, "\n", 1, 0);
3332                                        }
3333
3334                                        epgnode = epgnode->next;
3335                                }
3336                        }
3337                        node = node->next;
3338                }
3339                free(tmpstr1); tmpstr1 = NULL;
3340        }
3341
3342        if(buf == NULL)
3343                buf = ostrcat("no data", NULL, 0, 0);
3344        return buf;
3345}
3346
3347char* webadjust(char* param, int fmt)
3348{
3349        char* buf = NULL, *param1 = NULL, *param2 = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
3350        int i = 0, max = 0, count = 0, maxlen = 0, pos = 0;
3351
3352        struct channel* chnode = NULL;
3353        struct epg* epgnode = NULL;
3354
3355        if(param != NULL)
3356        {
3357                //create param1 + 2
3358                param1 = strchr(param, '&');
3359                if(param1 != NULL)
3360                {
3361                        *param1++ = '\0';
3362                        param2 = strchr(param1, '&');
3363                        if(param2 != NULL)
3364                                *param2++ = '\0';
3365                }
3366                if(param1 == NULL || param2 == NULL) return NULL;
3367                chnode = getchannel(atoi(param), strtoull(param1, NULL, 10));
3368                if(chnode == NULL) return NULL;
3369
3370                epgnode = getepg(chnode, atoi(param2), 0);
3371                if(epgnode == NULL) return NULL;
3372        }
3373
3374        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);
3375        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
3376        ostrcatbig(&buf, "<table>", &maxlen, &pos);
3377
3378///////////////////
3379//      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);
3380        max = 10;
3381        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3382        ostrcatbig(&buf, _("Volumebar Timeout"), &maxlen, &pos);
3383        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"volbartimeout\" border=\"0\"> <option value=\"", &maxlen, &pos);
3384        for(i = 1; i <= max; i++)
3385        {
3386                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3387                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);             
3388                if(getconfigint("volbartimeout", NULL) == i)
3389                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3390                else
3391                        ostrcatbig(&buf, "\">", &maxlen, &pos);
3392                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
3393                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3394        }
3395
3396///////////////////
3397//      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);
3398        max = 10;
3399        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3400        ostrcatbig(&buf, _("Infobar Timeout"), &maxlen, &pos);
3401        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"infobartimeout\" border=\"0\"> <option value=\"", &maxlen, &pos);
3402        for(i = 1; i <= max; i++)
3403        {
3404                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3405                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);     
3406                if(getconfigint("infobartimeout", NULL) == i)
3407                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3408                else
3409                        ostrcatbig(&buf, "\">", &maxlen, &pos);
3410                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
3411                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3412        }
3413
3414///////////////////
3415//      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);
3416        max = 5;
3417        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3418        ostrcatbig(&buf, _("Infobar Sleep"), &maxlen, &pos);
3419        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"infobarsleep\" border=\"0\"> <option value=\"", &maxlen, &pos);
3420        for(i = 0; i <= max; i++)
3421        {
3422                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3423                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);             
3424                if(getconfigint("infobarsleep", NULL) == i)
3425                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3426                else
3427                        ostrcatbig(&buf, "\">", &maxlen, &pos);
3428                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
3429                ostrcatbig(&buf, "</option>", &maxlen, &pos);
3430        }
3431
3432///////////////////
3433//      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);
3434        max = 5;
3435        tmpstr = ostrcat("1\n3\n9\n12\n15\n18\n21\n24\n27\n30", NULL, 0, 0);
3436
3437        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3438        ostrcatbig(&buf, _("Spinnerspeed"), &maxlen, &pos);
3439        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"spinnerspeed\" border=\"0\"> <option value=\"", &maxlen, &pos);
3440
3441        count = 0;
3442        struct splitstr* ret1 = NULL;
3443        ret1 = strsplit(tmpstr, "\n", &count);
3444        max = count - 1;
3445
3446        if(ret1 != NULL)
3447        {
3448                for(i = 0; i <= max; i++)
3449                {
3450                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3451                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3452                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3453                        if(getconfigint("spinnerspeed", NULL) == atoi(tmpstr1))
3454                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3455                        else
3456                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3457                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3458                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3459                }
3460        }
3461        free(ret1), ret1 = NULL;
3462        free(tmpstr), tmpstr = NULL;
3463        free(tmpstr1), tmpstr1 = NULL;
3464
3465///////////////////
3466        tmpstr = ostrcat("1\n2\n3\n4\n5\n6\n7\n8\n10000", NULL, 0, 0);
3467
3468        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3469        ostrcatbig(&buf, _("Spinnertime"), &maxlen, &pos);
3470        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"spinnertime\" border=\"0\"> <option value=\"", &maxlen, &pos);
3471
3472        count = 0;
3473        ret1 = strsplit(tmpstr, "\n", &count);
3474        max = count - 1;
3475
3476        if(ret1 != NULL)
3477        {
3478                for(i = 0; i <= max; i++)
3479                {
3480                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3481                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3482                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3483                        if(getconfigint("spinnertime", NULL) == atoi(tmpstr1)) 
3484                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3485                        else
3486                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3487                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3488                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3489                }
3490        }
3491        free(ret1), ret1 = NULL;
3492        free(tmpstr), tmpstr = NULL;
3493        free(tmpstr1), tmpstr1 = NULL;
3494
3495///////////////////
3496        tmpstr = ostrcat("5\n10\n15\n30\n60\n120\n10000", NULL, 0, 0);
3497
3498        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3499        ostrcatbig(&buf, _("Hangtime"), &maxlen, &pos);
3500        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"hangtime\" border=\"0\"> <option value=\"", &maxlen, &pos);
3501
3502        count = 0;
3503        ret1 = strsplit(tmpstr, "\n", &count);
3504        max = count - 1;
3505
3506        if(ret1 != NULL)
3507        {
3508                for(i = 0; i <= max; i++)
3509                {
3510                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3511                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3512                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3513                        if(getconfigint("hangtime", NULL) == atoi(tmpstr1))
3514                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3515                        else
3516                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3517                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3518                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3519                }
3520        }
3521        free(ret1), ret1 = NULL;
3522        free(tmpstr), tmpstr = NULL;
3523        free(tmpstr1), tmpstr1 = NULL;
3524
3525///////////////////
3526//      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);
3527        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3528        ostrcatbig(&buf, _("Second Infobar"), &maxlen, &pos);
3529        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"secondinfobar\" border=\"0\">", &maxlen, &pos);
3530       
3531        if(getconfigint("secondinfobar", NULL) == 0)
3532                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3533        else
3534                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3535        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3536        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3537
3538        if(getconfigint("secondinfobar", NULL) == 1)
3539                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3540        else
3541                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3542        ostrcatbig(&buf, _("infobar"), &maxlen, &pos);
3543        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3544
3545        if(getconfigint("secondinfobar", NULL) == 2)
3546                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3547        else
3548                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3549        ostrcatbig(&buf, _("epg"), &maxlen, &pos);
3550        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3551
3552        if(getconfigint("secondinfobar", NULL) == 3)
3553                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3554        else
3555                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3556        ostrcatbig(&buf, _("Channel EPG"), &maxlen, &pos);
3557        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3558
3559///////////////////
3560        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3561        ostrcatbig(&buf, _("Don't clear TV on zap (only with fastzap)"), &maxlen, &pos);
3562        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"nozapclear\" border=\"0\">", &maxlen, &pos);
3563       
3564        if(getconfigint("nozapclear", NULL) == 0)
3565                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3566        else
3567                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3568        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3569        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3570
3571        if(getconfigint("nozapclear", NULL) == 1)
3572                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3573        else
3574                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3575        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3576        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3577
3578///////////////////
3579        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3580        ostrcatbig(&buf, _("Fastzap"), &maxlen, &pos);
3581        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"fastzap\" border=\"0\">", &maxlen, &pos);
3582       
3583        if(getconfigint("fastzap", NULL) == 0)
3584                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3585        else
3586                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3587        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3588        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3589
3590        if(getconfigint("fastzap", NULL) == 1)
3591                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3592        else
3593                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3594        ostrcatbig(&buf, _("medium"), &maxlen, &pos);
3595        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3596
3597        if(getconfigint("fastzap", NULL) == 2)
3598                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3599        else
3600                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3601        ostrcatbig(&buf, _("fast"), &maxlen, &pos);
3602        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3603
3604///////////////////
3605        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3606        ostrcatbig(&buf, _("Faststop"), &maxlen, &pos);
3607        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"faststop\" border=\"0\">", &maxlen, &pos);
3608       
3609        if(getconfigint("faststop", NULL) == 0)
3610                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3611        else
3612                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3613        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3614        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3615
3616        if(getconfigint("faststop", NULL) == 1)
3617                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3618        else
3619                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3620        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3621        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3622
3623///////////////////
3624        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3625        ostrcatbig(&buf, _("Dirsort"), &maxlen, &pos);
3626        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"dirsort\" border=\"0\">", &maxlen, &pos);
3627       
3628        if(getconfigint("dirsort", NULL) == 0)
3629                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3630        else
3631                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3632        ostrcatbig(&buf, _("alpha"), &maxlen, &pos);
3633        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3634
3635        if(getconfigint("dirsort", NULL) == 1)
3636                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3637        else
3638                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3639        ostrcatbig(&buf, _("reverse alpha"), &maxlen, &pos);
3640        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3641
3642        if(getconfigint("dirsort", NULL) == 2)
3643                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3644        else
3645                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3646        ostrcatbig(&buf, _("size"), &maxlen, &pos);
3647        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3648
3649        if(getconfigint("dirsort", NULL) == 3)
3650                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3651        else
3652                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3653        ostrcatbig(&buf, _("reverse size"), &maxlen, &pos);
3654        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3655
3656        if(getconfigint("dirsort", NULL) == 4)
3657                ostrcatbig(&buf, "<option value=\"4\" selected>", &maxlen, &pos);               
3658        else
3659                ostrcatbig(&buf, "<option value=\"4\">", &maxlen, &pos);
3660        ostrcatbig(&buf, _("date"), &maxlen, &pos);
3661        ostrcatbig(&buf, "</option>", &maxlen, &pos);   
3662
3663        if(getconfigint("dirsort", NULL) == 5)
3664                ostrcatbig(&buf, "<option value=\"5\" selected>", &maxlen, &pos);               
3665        else
3666                ostrcatbig(&buf, "<option value=\"5\">", &maxlen, &pos);
3667        ostrcatbig(&buf, _("reverse date"), &maxlen, &pos);
3668        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3669
3670///////////////////
3671        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3672        ostrcatbig(&buf, _("Power aktion"), &maxlen, &pos);
3673        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"poweraktion\" border=\"0\">", &maxlen, &pos);
3674       
3675        if(getconfigint("poweraktion", NULL) == 0)
3676                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3677        else
3678                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3679        ostrcatbig(&buf, _("Power Menu"), &maxlen, &pos);
3680        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3681
3682        if(getconfigint("poweraktion", NULL) == 1)
3683                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3684        else
3685                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3686        ostrcatbig(&buf, _("Power Off"), &maxlen, &pos);
3687        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3688
3689        if(getconfigint("poweraktion", NULL) == 2)
3690                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3691        else
3692                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3693        ostrcatbig(&buf, _("Standby"), &maxlen, &pos);
3694        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3695
3696        if(getconfigint("poweraktion", NULL) == 3)
3697                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3698        else
3699                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3700        ostrcatbig(&buf, _("Restart"), &maxlen, &pos);
3701        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3702
3703        if(getconfigint("poweraktion", NULL) == 4)
3704                ostrcatbig(&buf, "<option value=\"4\" selected>", &maxlen, &pos);               
3705        else
3706                ostrcatbig(&buf, "<option value=\"4\">", &maxlen, &pos);
3707        ostrcatbig(&buf, _("Gui Restart"), &maxlen, &pos);
3708        ostrcatbig(&buf, "</option>", &maxlen, &pos);   
3709
3710///////////////////
3711        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3712        ostrcatbig(&buf, _("Virtualzap Timeout"), &maxlen, &pos);
3713        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"virtualzap\" border=\"0\">", &maxlen, &pos);
3714       
3715        if(getconfigint("virtualzap", NULL) == 0)
3716                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3717        else
3718                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3719        ostrcatbig(&buf, _("deaktiv"), &maxlen, &pos);
3720        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3721
3722        if(getconfigint("virtualzap", NULL) == 1)
3723                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3724        else
3725                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3726        ostrcatbig(&buf, _("1 sec"), &maxlen, &pos);
3727        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3728
3729        if(getconfigint("virtualzap", NULL) == 2)
3730                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3731        else
3732                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3733        ostrcatbig(&buf, _("2 sec"), &maxlen, &pos);
3734        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3735
3736        if(getconfigint("virtualzap", NULL) == 3)
3737                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3738        else
3739                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3740        ostrcatbig(&buf, _("endless"), &maxlen, &pos);
3741        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3742       
3743///////////////////
3744        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3745        ostrcatbig(&buf, _("Fast Text Render"), &maxlen, &pos);
3746        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"fasttextrender\" border=\"0\">", &maxlen, &pos);
3747       
3748        if(getconfigint("fasttextrender", NULL) == 0)
3749                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3750        else
3751                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3752        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3753        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3754
3755        if(getconfigint("fasttextrender", NULL) == 1)
3756                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3757        else
3758                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3759        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3760        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3761
3762///////////////////
3763        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3764        ostrcatbig(&buf, _("Record Split Size"), &maxlen, &pos);
3765        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recsplitsize\" border=\"0\">", &maxlen, &pos);
3766       
3767        if(getconfigint("recsplitsize", NULL) == 0)
3768                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3769        else
3770                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3771        ostrcatbig(&buf, _("deaktiv"), &maxlen, &pos);
3772        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3773
3774        if(getconfigint("recsplitsize", NULL) == 1)
3775                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3776        else
3777                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3778        ostrcatbig(&buf, _("1 GB"), &maxlen, &pos);
3779        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3780
3781        if(getconfigint("recsplitsize", NULL) == 2)
3782                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
3783        else
3784                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
3785        ostrcatbig(&buf, _("2 GB"), &maxlen, &pos);
3786        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3787
3788        if(getconfigint("recsplitsize", NULL) == 3)
3789                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
3790        else
3791                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
3792        ostrcatbig(&buf, _("3 GB"), &maxlen, &pos);
3793        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3794
3795        if(getconfigint("recsplitsize", NULL) == 4)
3796                ostrcatbig(&buf, "<option value=\"4\" selected>", &maxlen, &pos);               
3797        else
3798                ostrcatbig(&buf, "<option value=\"4\">", &maxlen, &pos);
3799        ostrcatbig(&buf, _("4 GB"), &maxlen, &pos);
3800        ostrcatbig(&buf, "</option>", &maxlen, &pos);   
3801
3802///////////////////
3803        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);
3804
3805        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3806        ostrcatbig(&buf, _("Record Forerun (min)"), &maxlen, &pos);
3807        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recforerun\" border=\"0\"> <option value=\"", &maxlen, &pos);
3808
3809        count = 0;
3810        ret1 = strsplit(tmpstr, "\n", &count);
3811        max = count - 1;
3812
3813        if(ret1 != NULL)
3814        {
3815                for(i = 0; i <= max; i++)
3816                {
3817                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3818                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3819                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3820                        if(getconfigint("recforerun", NULL) == atoi(tmpstr1))
3821                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3822                        else
3823                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3824                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3825                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3826                }
3827        }
3828        free(ret1), ret1 = NULL;
3829        free(tmpstr), tmpstr = NULL;
3830        free(tmpstr1), tmpstr1 = NULL;
3831
3832///////////////////
3833        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);
3834
3835        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3836        ostrcatbig(&buf, _("Record Overrun (min)"), &maxlen, &pos);
3837        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recoverrun\" border=\"0\"> <option value=\"", &maxlen, &pos);
3838
3839        count = 0;
3840        ret1 = strsplit(tmpstr, "\n", &count);
3841        max = count - 1;
3842
3843        if(ret1 != NULL)
3844        {
3845                for(i = 0; i <= max; i++)
3846                {
3847                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3848                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3849                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3850                        if(getconfigint("recoverrun", NULL) == atoi(tmpstr1))
3851                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3852                        else
3853                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3854                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3855                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3856                }
3857        }
3858        free(ret1), ret1 = NULL;
3859        free(tmpstr), tmpstr = NULL;
3860        free(tmpstr1), tmpstr1 = NULL;
3861
3862///////////////////
3863        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);
3864
3865        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3866        ostrcatbig(&buf, _("Skip 1/3"), &maxlen, &pos);
3867        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"skip13\" border=\"0\"> <option value=\"", &maxlen, &pos);
3868
3869        count = 0;
3870        ret1 = strsplit(tmpstr, "\n", &count);
3871        max = count - 1;
3872
3873        if(ret1 != NULL)
3874        {
3875                for(i = 0; i <= max; i++)
3876                {
3877                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3878                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3879                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3880                        if(getconfigint("skip13", NULL) == atoi(tmpstr1))
3881                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3882                        else
3883                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3884                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3885                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3886                }
3887        }
3888        free(ret1), ret1 = NULL;
3889        free(tmpstr), tmpstr = NULL;
3890        free(tmpstr1), tmpstr1 = NULL;
3891
3892///////////////////
3893        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);
3894
3895        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3896        ostrcatbig(&buf, _("Skip 4/6"), &maxlen, &pos);
3897        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"skip46\" border=\"0\"> <option value=\"", &maxlen, &pos);
3898
3899        count = 0;
3900        ret1 = strsplit(tmpstr, "\n", &count);
3901        max = count - 1;
3902
3903        if(ret1 != NULL)
3904        {
3905                for(i = 0; i <= max; i++)
3906                {
3907                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3908                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3909                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3910                        if(getconfigint("skip46", NULL) == atoi(tmpstr1))
3911                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3912                        else
3913                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3914                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3915                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3916                }
3917        }
3918        free(ret1), ret1 = NULL;
3919        free(tmpstr), tmpstr = NULL;
3920        free(tmpstr1), tmpstr1 = NULL;
3921       
3922///////////////////
3923        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);
3924
3925        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3926        ostrcatbig(&buf, _("Skip 7/9"), &maxlen, &pos);
3927        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"skip79\" border=\"0\"> <option value=\"", &maxlen, &pos);
3928
3929        count = 0;
3930        ret1 = strsplit(tmpstr, "\n", &count);
3931        max = count - 1;
3932
3933        if(ret1 != NULL)
3934        {
3935                for(i = 0; i <= max; i++)
3936                {
3937                        ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
3938                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);         
3939                        tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
3940                        if(getconfigint("skip79", NULL) == atoi(tmpstr1))
3941                                ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
3942                        else
3943                                ostrcatbig(&buf, "\">", &maxlen, &pos);
3944                        ostrcatbig(&buf, ret1[i].part, &maxlen, &pos);
3945                        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3946                }
3947        }
3948        free(ret1), ret1 = NULL;
3949        free(tmpstr), tmpstr = NULL;
3950        free(tmpstr1), tmpstr1 = NULL;
3951       
3952///////////////////
3953        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3954        ostrcatbig(&buf, _("Player for .ts"), &maxlen, &pos);
3955        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"playertype\" border=\"0\">", &maxlen, &pos);
3956       
3957        if(getconfigint("playertype", NULL) == 0)
3958                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3959        else
3960                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3961        ostrcatbig(&buf, _("extern"), &maxlen, &pos);
3962        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3963
3964        if(getconfigint("faststop", NULL) == 1)
3965                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3966        else
3967                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3968        ostrcatbig(&buf, _("intern"), &maxlen, &pos);
3969        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3970
3971///////////////////
3972        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3973        ostrcatbig(&buf, _("Change Channelname auto."), &maxlen, &pos);
3974        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"autochangechannelname\" border=\"0\">", &maxlen, &pos);
3975       
3976        if(getconfigint("autochangechannelname", NULL) == 0)
3977                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3978        else
3979                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3980        ostrcatbig(&buf, _("no"), &maxlen, &pos);
3981        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3982
3983        if(getconfigint("autochangechannelname", NULL) == 1)
3984                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
3985        else
3986                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
3987        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
3988        ostrcatbig(&buf, "</option>", &maxlen, &pos);
3989
3990///////////////////
3991        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
3992        ostrcatbig(&buf, _("Set action after rec"), &maxlen, &pos);
3993        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"def_rectimer_after\" border=\"0\">", &maxlen, &pos);
3994       
3995        if(getconfigint("def_rectimer_after", NULL) == 0)
3996                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
3997        else
3998                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
3999        ostrcatbig(&buf, _("auto"), &maxlen, &pos);
4000        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4001
4002        if(getconfigint("def_rectimer_after", NULL) == 1)
4003                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4004        else
4005                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4006        ostrcatbig(&buf, _("nothing"), &maxlen, &pos);
4007        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4008
4009        if(getconfigint("def_rectimer_after", NULL) == 2)
4010                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
4011        else
4012                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
4013        ostrcatbig(&buf, _("standby"), &maxlen, &pos);
4014        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4015
4016        if(getconfigint("def_rectimer_after", NULL) == 3)
4017                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
4018        else
4019                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
4020        ostrcatbig(&buf, _("power off"), &maxlen, &pos);
4021        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4022
4023///////////////////
4024        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4025        ostrcatbig(&buf, _("Show Timeline in Channellist"), &maxlen, &pos);
4026        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"showchanneltimeline\" border=\"0\">", &maxlen, &pos);
4027       
4028        if(getconfigint("showchanneltimeline", NULL) == 0)
4029                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4030        else
4031                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4032        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4033        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4034
4035        if(getconfigint("showchanneltimeline", NULL) == 1)
4036                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4037        else
4038                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4039        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4040        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4041
4042///////////////////
4043        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4044        ostrcatbig(&buf, _("Animated Screens"), &maxlen, &pos);
4045        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"screenanim\" border=\"0\">", &maxlen, &pos);
4046       
4047        if(getconfigint("screenanim", NULL) == 0)
4048                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4049        else
4050                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4051        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4052        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4053
4054        if(getconfigint("screenanim", NULL) == 1)
4055                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4056        else
4057                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4058        ostrcatbig(&buf, _("anim. width"), &maxlen, &pos);
4059        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4060
4061        if(getconfigint("screenanim", NULL) == 2)
4062                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
4063        else
4064                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
4065        ostrcatbig(&buf, _("anim. height"), &maxlen, &pos);
4066        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4067
4068        if(getconfigint("screenanim", NULL) == 3)
4069                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
4070        else
4071                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
4072        ostrcatbig(&buf, _("anim. both"), &maxlen, &pos);
4073        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4074
4075///////////////////
4076        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4077        ostrcatbig(&buf, _("Animated Speed"), &maxlen, &pos);
4078        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"screenanimspeed\" border=\"0\">", &maxlen, &pos);
4079       
4080        if(getconfigint("screenanimspeed", NULL) == 1)
4081                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4082        else
4083                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4084        ostrcatbig(&buf, _("very fast"), &maxlen, &pos);
4085        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4086
4087        if(getconfigint("screenanimspeed", NULL) == 5)
4088                ostrcatbig(&buf, "<option value=\"5\" selected>", &maxlen, &pos);               
4089        else
4090                ostrcatbig(&buf, "<option value=\"5\">", &maxlen, &pos);
4091        ostrcatbig(&buf, _("fast"), &maxlen, &pos);
4092        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4093
4094        if(getconfigint("screenanimspeed", NULL) == 10)
4095                ostrcatbig(&buf, "<option value=\"10\" selected>", &maxlen, &pos);             
4096        else
4097                ostrcatbig(&buf, "<option value=\"10\">", &maxlen, &pos);
4098        ostrcatbig(&buf, _("normal"), &maxlen, &pos);
4099        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4100
4101        if(getconfigint("screenanimspeed", NULL) == 15)
4102                ostrcatbig(&buf, "<option value=\"15\" selected>", &maxlen, &pos);             
4103        else
4104                ostrcatbig(&buf, "<option value=\"15\">", &maxlen, &pos);
4105        ostrcatbig(&buf, _("slow"), &maxlen, &pos);
4106        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4107
4108        if(getconfigint("screenanimspeed", NULL) == 20)
4109                ostrcatbig(&buf, "<option value=\"20\" selected>", &maxlen, &pos);             
4110        else
4111                ostrcatbig(&buf, "<option value=\"20\">", &maxlen, &pos);
4112        ostrcatbig(&buf, _("very slow"), &maxlen, &pos);
4113        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4114
4115///////////////////
4116        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4117        ostrcatbig(&buf, _("Channellist view"), &maxlen, &pos);
4118        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"channellistview\" border=\"0\">", &maxlen, &pos);
4119       
4120        if(getconfigint("channellistview", NULL) == 0)
4121                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4122        else
4123                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4124        ostrcatbig(&buf, _("hidden"), &maxlen, &pos);
4125        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4126
4127        if(getconfigint("channellistview", NULL) == 1)
4128                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4129        else
4130                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4131        ostrcatbig(&buf, _("deaktiv"), &maxlen, &pos);
4132        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4133
4134///////////////////
4135        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4136        ostrcatbig(&buf, _("Show last pos Question"), &maxlen, &pos);
4137        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"showlastpos\" border=\"0\">", &maxlen, &pos);
4138       
4139        if(getconfigint("showlastpos", NULL) == 0)
4140                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4141        else
4142                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4143        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4144        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4145
4146        if(getconfigint("showlastpos", NULL) == 1)
4147                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4148        else
4149                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4150        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4151        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4152
4153///////////////////
4154        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4155        ostrcatbig(&buf, _("Resync Recording immediately"), &maxlen, &pos);
4156        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recsync\" border=\"0\">", &maxlen, &pos);
4157       
4158        if(getconfigint("recsync", NULL) == 0)
4159                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4160        else
4161                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4162        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4163        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4164
4165        if(getconfigint("recsync", NULL) == 1)
4166                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4167        else
4168                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4169        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4170        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4171
4172///////////////////
4173        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4174        ostrcatbig(&buf, _("Recording name"), &maxlen, &pos);
4175        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"recordnamefmt\" border=\"0\">", &maxlen, &pos);
4176       
4177        if(getconfigint("recordnamefmt", NULL) == 0)
4178                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4179        else
4180                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4181        ostrcatbig(&buf, _("channel-movie"), &maxlen, &pos);
4182        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4183
4184        if(getconfigint("recordnamefmt", NULL) == 1)
4185                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4186        else
4187                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4188        ostrcatbig(&buf, _("movie-channel"), &maxlen, &pos);
4189        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4190
4191///////////////////
4192        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4193        ostrcatbig(&buf, _("Newsletter"), &maxlen, &pos);
4194        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"newsletter\" border=\"0\">", &maxlen, &pos);
4195       
4196        if(getconfigint("newsletter", NULL) == 0)
4197                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4198        else
4199                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4200        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4201        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4202
4203        if(getconfigint("newsletter", NULL) == 1)
4204                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4205        else
4206                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4207        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4208        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4209
4210///////////////////
4211        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4212        ostrcatbig(&buf, _("Show hidden files"), &maxlen, &pos);
4213        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"showhiddenfiles\" border=\"0\">", &maxlen, &pos);
4214       
4215        if(getconfigint("showhiddenfiles", NULL) == 0)
4216                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4217        else
4218                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4219        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4220        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4221
4222        if(getconfigint("showhiddenfiles", NULL) == 1)
4223                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4224        else
4225                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4226        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4227        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4228
4229///////////////////
4230        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4231        ostrcatbig(&buf, _("Expert Modus"), &maxlen, &pos);
4232        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"expertmodus\" border=\"0\">", &maxlen, &pos);
4233       
4234        if(getconfigint("expertmodus", NULL) == 0)
4235                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4236        else
4237                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4238        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4239        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4240
4241        if(getconfigint("expertmodus", NULL) == 10)
4242                ostrcatbig(&buf, "<option value=\"10\" selected>", &maxlen, &pos);             
4243        else
4244                ostrcatbig(&buf, "<option value=\"10\">", &maxlen, &pos);
4245        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4246        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4247
4248        if(getconfigint("expertmodus", NULL) == 11)
4249                ostrcatbig(&buf, "<option value=\"11\" selected>", &maxlen, &pos);             
4250        else
4251                ostrcatbig(&buf, "<option value=\"11\">", &maxlen, &pos);
4252        ostrcatbig(&buf, _("expert (11)"), &maxlen, &pos);
4253        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4254
4255///////////////////
4256        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4257        ostrcatbig(&buf, _("Show infobar on program change"), &maxlen, &pos);
4258        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"infobarprogram\" border=\"0\">", &maxlen, &pos);
4259       
4260        if(getconfigint("infobarprogram", NULL) == 0)
4261                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4262        else
4263                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4264        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4265        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4266
4267        if(getconfigint("infobarprogram", NULL) == 1)
4268                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4269        else
4270                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4271        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4272        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4273
4274///////////////////
4275        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4276        ostrcatbig(&buf, _("Use cross control for fast zapping and vol"), &maxlen, &pos);
4277        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"crosscontrol\" border=\"0\">", &maxlen, &pos);
4278       
4279        if(getconfigint("crosscontrol", NULL) == 0)
4280                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4281        else
4282                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4283        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4284        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4285
4286        if(getconfigint("crosscontrol", NULL) == 1)
4287                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4288        else
4289                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4290        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4291        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4292
4293        if(getconfigint("crosscontrol", NULL) == 2)
4294                ostrcatbig(&buf, "<option value=\"2\" selected>", &maxlen, &pos);               
4295        else
4296                ostrcatbig(&buf, "<option value=\"2\">", &maxlen, &pos);
4297        ostrcatbig(&buf, _("yes / vzap 1 sec"), &maxlen, &pos);
4298        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4299
4300        if(getconfigint("crosscontrol", NULL) == 3)
4301                ostrcatbig(&buf, "<option value=\"3\" selected>", &maxlen, &pos);               
4302        else
4303                ostrcatbig(&buf, "<option value=\"3\">", &maxlen, &pos);
4304        ostrcatbig(&buf, _("yes / vzap 2 sec"), &maxlen, &pos);
4305        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4306
4307        if(getconfigint("crosscontrol", NULL) == 9999)
4308                ostrcatbig(&buf, "<option value=\"9999\" selected>", &maxlen, &pos);           
4309        else
4310                ostrcatbig(&buf, "<option value=\"9999\">", &maxlen, &pos);
4311        ostrcatbig(&buf, _("yes / vzap endless"), &maxlen, &pos);
4312        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4313
4314///////////////////
4315        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4316        ostrcatbig(&buf, _("Deactivate Crypt Support on Media Playback"), &maxlen, &pos);
4317        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"emucontrol\" border=\"0\">", &maxlen, &pos);
4318       
4319        if(getconfigint("emucontrol", NULL) == 0)
4320                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4321        else
4322                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4323        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4324        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4325
4326        if(getconfigint("emucontrol", NULL) == 1)
4327                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4328        else
4329                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4330        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4331        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4332
4333///////////////////
4334        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4335        ostrcatbig(&buf, _("Deactivate MiniTV"), &maxlen, &pos);
4336        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"choiceminitv\" border=\"0\">", &maxlen, &pos);
4337       
4338        if(getconfigint("choiceminitv", NULL) == 0)
4339                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4340        else
4341                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4342        ostrcatbig(&buf, _("no"), &maxlen, &pos);
4343        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4344
4345        if(getconfigint("choiceminitv", NULL) == 1)
4346                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4347        else
4348                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4349        ostrcatbig(&buf, _("yes"), &maxlen, &pos);
4350        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4351
4352///////////////////
4353        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4354        ostrcatbig(&buf, _("Activate CEC"), &maxlen, &pos);
4355        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"usecec\" border=\"0\">", &maxlen, &pos);
4356       
4357        if(getconfigint("usecec", 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("usecec", 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
4372///////////////////
4373        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4374        ostrcatbig(&buf, _("SATA Connector"), &maxlen, &pos);
4375        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"sataswitch\" border=\"0\">", &maxlen, &pos);
4376       
4377        if(getconfigint("sataswitch", NULL) == 0)
4378                ostrcatbig(&buf, "<option value=\"0\" selected>", &maxlen, &pos);               
4379        else
4380                ostrcatbig(&buf, "<option value=\"0\">", &maxlen, &pos);
4381        ostrcatbig(&buf, _("extern"), &maxlen, &pos);
4382        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4383
4384        if(getconfigint("sataswitch", NULL) == 1)
4385                ostrcatbig(&buf, "<option value=\"1\" selected>", &maxlen, &pos);               
4386        else
4387                ostrcatbig(&buf, "<option value=\"1\">", &maxlen, &pos);
4388        ostrcatbig(&buf, _("intern"), &maxlen, &pos);
4389        ostrcatbig(&buf, "</option>", &maxlen, &pos);
4390
4391///////////////////
4392//      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);
4393        max = 10;
4394        ostrcatbig(&buf, "<tr><td><font class=\"label\">", &maxlen, &pos);
4395        ostrcatbig(&buf, _("Time to wait after seek for fill buffer"), &maxlen, &pos);
4396        ostrcatbig(&buf, "&nbsp;</font></td><td><select name=\"playerbufferseektime\" border=\"0\"> <option value=\"", &maxlen, &pos);
4397        for(i = 1; i <= max; i++)
4398        {
4399                ostrcatbig(&buf, "<option value=\"", &maxlen, &pos);
4400                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);             
4401                if(getconfigint("playerbufferseektime", NULL) == i)
4402                        ostrcatbig(&buf, "\" selected>", &maxlen, &pos);               
4403                else
4404                        ostrcatbig(&buf, "\">", &maxlen, &pos);
4405                ostrcatbig(&buf, oitoa(i), &maxlen, &pos);
4406                ostrcatbig(&buf, "</option>", &maxlen, &pos);
4407        }       
4408
4409
4410        ostrcatbig(&buf, "</select></td></tr>", &maxlen, &pos);
4411        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);
4412
4413        //ostrcatbig(&buf, param, &maxlen, &pos);
4414        return buf;
4415}
4416
4417#endif
Note: See TracBrowser for help on using the repository browser.