mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 0.6
- Added support for LIRC remote control (thanks to Carsten Koch!). There are now three different remote control modes: KBD (PC-Keyboard), RCU and LIRC. See the INSTALL file for information on how to enable either of these modes. The default mode is now KBD, not RCU as before (to make it work immediately even if there is no actual remote control). - Fixed small bug in dvbapi.c that was causing some channels (many on hotbird) not to be correctly tuned (thanks to Plamen Ganev!). - Now clearing the replay buffer in search forward/back, which results in faster reaction. - The 'Recordings' menu is now listed alphabetically (thanks to Carsten Koch!). - The new 'epg2timers' tool (thanks to Carsten Koch!) can be used to convert an EPG "merkliste" page (http://www.tvtv.de) to vdr timer entries. - The new 'xtvrc2vdr' tool (thanks to Plamen Ganev!) can be used to convert 'xtvrc' channel files into 'vdr' format. - When more than one timer matches at the same time, the first one in the list with the highest 'Priority' is selected. - The MANUAL section on "Programming the Timer" has been filled in. - The year in the "Recordings" menu as well as in the progress display during replay has been reduced to 2 digits to allow more space for the recording's title. In the internal file structure the year is still stored with 4 digits, so there will be no problem at the next turn of the century ;-) - Channel names and timer filenames can now contain blanks. To avoid problems with file names that contain blanks, all blanks in recording file names are converted to underscores. - The polarization can now be given in uppercase or lowercase characters in channels.conf. - Fixed buffer initialization to work with DVB driver version 0.6. - Implemented the "Simple Video Disk Recorder Protocol" (SVDRP) to control the VDR over a network connection. - Implemented command line option handling. - The program can now run in full background mode by using the --daemon option. - Added a "summary" field to the timers (thanks to Carsten Koch!). This field can contain a descriptive text of the programme and will be displayed when the "Blue" key is pressed on a recording that was created by this timer. If the text contains the special character '|', a newline will be inserted at that place. When pressing "Ok" on a timer that contains a summary field, the summary will be displayed. To edit such a timer the "Red" key must be pressed. Timers without a summary still go into Edit mode when pressing "Ok". The summary field can only be filled in directly by editing the 'timers.conf' file with a text editor, or by defining/modifying the timer via the SVDRP interface.
This commit is contained in:
242
Tools/epg2timers/epg2timers.cxx
Normal file
242
Tools/epg2timers/epg2timers.cxx
Normal file
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* epg2timers.cxx: Convert an EPG "merkliste" page (http://www.tvtv.de) to a timers.conf
|
||||
* file for Klaus Schmidinger's vdr (http://www.cadsoft.de/people/kls/vdr).
|
||||
*
|
||||
* Copyright (C) 2000 Carsten Koch
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Or, point your browser to http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* The author can be reached at Carsten.Koch@icem.de
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
static const char date_line[] = "\t<td align=center valign=middle colspan=3><span id=fb-b10>";
|
||||
static const char start_time_line[] = " \t\t<td bgcolor=\"#7f98bf\" align=center><span id=\"fb-w14\"><nobr> ";
|
||||
static const char stop_time_line[] = "\t\t\t<tr><td bgcolor=\"#002b64\" align=center><span id=\"fn-w9\">bis ";
|
||||
static const char channel_line[] = "\t\t\t<tr><td bgcolor=\"#002b64\" align=center><span id=\"fb-w9\">";
|
||||
static const char title_line[] = "\t\t\t\t<td bgcolor=\"#002b64\" align=left width=100%><span id=\"fb-w10\">";
|
||||
static const char summary_line[] = "\t\t\t<table border=0 cellpadding=10 cellspacing=0 bgcolor=\"white\" width=100%>";
|
||||
static const char * const channel_names[] =
|
||||
{"RTL", "SAT1", "PRO7", "RTL2", "ARD", "BR3", "HR3", "NDR", "SWF", "WDR", "BR Alpha", "SWR BW", "Phoenix",
|
||||
"ZDF", "3sat", "Kinderkanal", "ARTE", "phoenix", "ORF Sat", "ZDF.info", "CNN", "Super RTL", "VOX", "DW TV",
|
||||
"Kabel1", "TM3", "DSF", "HOT", "BloombergTV", "Sky News", "KinderNet", "Alice", "n-tv", "Grand Tour.", "TW1",
|
||||
"Eins Extra", "Eins Festival", "Eins MuXx", "MDR", "ORB", "B1", "ARD Online-Kanal", "Premiere World Promo",
|
||||
"Premiere", "Star Kino", "Cine Action", "Cine Comedy", "Sci Fantasy", "Romantic Movies", "Studio Universal",
|
||||
"TV Niepokalanow", "Mosaico", "Andalucia TV", "TVC Internacional", "Nasza TV", "WishLine test", "Pro 7 Austria",
|
||||
"Kabel 1 Schweiz", "Kabel 1 Austria", "Pro 7 Schweiz", "Kiosque", "KTO", "TCM", "Cartoon Network France & Spain",
|
||||
"TVBS Europe", "TVBS Europe", "Travel", "TCM Espania", "MTV Spain", "TCM France", "RTL2 CH",
|
||||
"La Cinquieme", "ARTE", "Post Filial TV", "Canal Canaris", "Canal Canaris", "Canal Canaris", "Canal Canaris",
|
||||
"AB Sat Passion promo", "AB Channel 1", "Taquilla 0", "CSAT", "Mosaique", "Mosaique 2", "Mosaique 3", "Le Sesame C+",
|
||||
"FEED", "RTM 1", "ESC 1", "TV5 Europe", "TV7 Tunisia", "ARTE", "RAI Uno", "RTP International",
|
||||
"Fashion TV", "VideoService", "Beta Research promo", "Canal Canarias", "TVC International", "Fitur", "Astra Info 1",
|
||||
"Astra Info 2", "Astra Vision 1", "Astra Vision 1", "Astra Vision 1", "Astra Vision 1", "Astra Vision 1",
|
||||
"Astra Vision 1", "Astra Vision 1", "RTL Tele Letzebuerg", "Astra Mosaic", "MHP test", "Bloomberg TV Spain",
|
||||
"Video Italia", "AC 3 promo", ""
|
||||
};
|
||||
static const int month_lengths[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
|
||||
static const int max_channel = sizeof(channel_names)/sizeof(char *);
|
||||
static const int max_title = 50; // maximum length of title file name generated
|
||||
static const int max_line = 1024; // line buffer (not used when parsing summary text)
|
||||
static const int max_summary = 5000; // Summary can be up to 5000 bytes long
|
||||
static const int stop_time_safety_margin = 10; // add 10 minutes to stop time in case start was delayed
|
||||
|
||||
|
||||
|
||||
char map_special_char(const char * const word)
|
||||
|
||||
{
|
||||
if (strcmp(word, "auml") == 0)
|
||||
return '<EFBFBD>';
|
||||
else if (strcmp(word, "ouml") == 0)
|
||||
return '<EFBFBD>';
|
||||
else if (strcmp(word, "uuml") == 0)
|
||||
return '<EFBFBD>';
|
||||
else if (strcmp(word, "Auml") == 0)
|
||||
return '<EFBFBD>';
|
||||
else if (strcmp(word, "Ouml") == 0)
|
||||
return '<EFBFBD>';
|
||||
else if (strcmp(word, "Uuml") == 0)
|
||||
return '<EFBFBD>';
|
||||
else if (strcmp(word, "szlig") == 0)
|
||||
return '<EFBFBD>';
|
||||
return ' ';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void read_file_name(const char * const line, char * const file_name)
|
||||
|
||||
{
|
||||
int line_index = sizeof(title_line) - 1;
|
||||
int title_index = 0;
|
||||
char ch = line[line_index++];
|
||||
do
|
||||
{
|
||||
if (ch == '&')
|
||||
{
|
||||
char word[10];
|
||||
int i = 0;
|
||||
while ((line[line_index + i] != ';') && (i < 9))
|
||||
word[i++] = line[line_index + i];
|
||||
word[i] = 0;
|
||||
ch = map_special_char(word);
|
||||
line_index += i;
|
||||
}
|
||||
switch (ch)
|
||||
{
|
||||
case '<EFBFBD>': file_name[title_index++] = 'a'; file_name[title_index++] = 'e'; break;
|
||||
case '<EFBFBD>': file_name[title_index++] = 'o'; file_name[title_index++] = 'e'; break;
|
||||
case '<EFBFBD>': file_name[title_index++] = 'u'; file_name[title_index++] = 'e'; break;
|
||||
case '<EFBFBD>': file_name[title_index++] = 'A'; file_name[title_index++] = 'e'; break;
|
||||
case '<EFBFBD>': file_name[title_index++] = 'O'; file_name[title_index++] = 'e'; break;
|
||||
case '<EFBFBD>': file_name[title_index++] = 'U'; file_name[title_index++] = 'e'; break;
|
||||
case '<EFBFBD>': file_name[title_index++] = 's'; file_name[title_index++] = 's'; break;
|
||||
default:
|
||||
if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || ((ch >= '0') && (ch <= '9')))
|
||||
file_name[title_index++] = ch;
|
||||
}
|
||||
ch = int(line[line_index++]);
|
||||
} while ((title_index < max_title-1) && (ch != '<') && (ch != 0) && (line_index < max_line-1));
|
||||
file_name[title_index] = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void read_summary(char * const summary)
|
||||
|
||||
{
|
||||
int summary_index = 0;
|
||||
int ch;
|
||||
bool need_space = false;
|
||||
bool done = false;
|
||||
do
|
||||
{
|
||||
ch = getchar();
|
||||
switch (ch)
|
||||
{
|
||||
case '&':
|
||||
{
|
||||
char word[10];
|
||||
int i = 0;
|
||||
ch = getchar();
|
||||
while ((ch != ';') && (ch != EOF) && (i < 9))
|
||||
{
|
||||
word[i++] = ch;
|
||||
ch = getchar();
|
||||
}
|
||||
word[i] = 0;
|
||||
if (need_space) {summary[summary_index++] = ' '; need_space = false;}
|
||||
summary[summary_index++] = map_special_char(word);
|
||||
}
|
||||
break;
|
||||
case '<':
|
||||
{
|
||||
char word[6];
|
||||
int word_index = 0;
|
||||
do
|
||||
{
|
||||
ch = getchar();
|
||||
word[word_index++] = ch;
|
||||
} while ((word_index < 6) && (ch != '>') && (ch != EOF));
|
||||
while ((ch != '>') && (ch != EOF)) ch = getchar();
|
||||
if (strncmp("/table", word, 6) == 0)
|
||||
done = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
if (ch <= ' ')
|
||||
{
|
||||
if (summary_index > 0) need_space = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (need_space) {summary[summary_index++] = ' '; need_space = false;}
|
||||
summary[summary_index++] = ch;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while ((summary_index < max_summary - 2) && (!done) && (ch != EOF));
|
||||
summary[summary_index] = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
main()
|
||||
|
||||
{
|
||||
int channel = 0;
|
||||
int day = -1;
|
||||
int next_day = -1;
|
||||
int start_time = -1;
|
||||
int stop_time = -1;
|
||||
char summary[max_summary] = {0};
|
||||
char file_name[max_title] = {0};
|
||||
|
||||
while (!feof(stdin))
|
||||
{
|
||||
char line[max_line];
|
||||
fgets(line, max_line-1, stdin);
|
||||
if (strncmp(line, date_line, sizeof(date_line)-1) == 0)
|
||||
{
|
||||
const int month = (line[sizeof(date_line) + 6]- '0') * 10 + line[sizeof(date_line) + 7]-'0';
|
||||
day = (line[sizeof(date_line) + 3]- '0') * 10 + line[sizeof(date_line) + 4]-'0';
|
||||
next_day = day == month_lengths[month]? 1 : day + 1;
|
||||
}
|
||||
else if (strncmp(line, start_time_line, sizeof(start_time_line)-1) == 0)
|
||||
{
|
||||
start_time = (line[sizeof(start_time_line) - 1] - '0') * 1000 +
|
||||
(line[sizeof(start_time_line) ] - '0') * 100 +
|
||||
(line[sizeof(start_time_line) + 2] - '0') * 10 +
|
||||
(line[sizeof(start_time_line) + 3] - '0');
|
||||
}
|
||||
else if (strncmp(line, stop_time_line, sizeof(stop_time_line)-1) == 0)
|
||||
{
|
||||
stop_time = ((line[sizeof(stop_time_line) - 1] - '0') * 1000 +
|
||||
(line[sizeof(stop_time_line) ] - '0') * 100 +
|
||||
(line[sizeof(stop_time_line) + 2] - '0') * 10 +
|
||||
(line[sizeof(stop_time_line) + 3] - '0') + stop_time_safety_margin) % 2400;
|
||||
if ((day < 0) || (start_time < 0) || (file_name[0] == 0) || (channel == max_channel))
|
||||
fprintf(stderr, "Input data error.\n");
|
||||
else
|
||||
printf("1:%03d:%02d:%04d:%04d:2:7:%s:%s\n", channel+1, start_time < 600? next_day : day, start_time, stop_time, file_name, summary);
|
||||
start_time = -1; stop_time = -1; file_name[0] = 0; summary[0] = 0; channel = max_channel;
|
||||
}
|
||||
else if (strncmp(line, title_line, sizeof(title_line)-1) == 0)
|
||||
read_file_name(line, file_name);
|
||||
else if (strncmp(line, channel_line, sizeof(channel_line)-1) == 0)
|
||||
{
|
||||
int i = sizeof(channel_line);
|
||||
while ((i < max_line-1) && (line[i] != '<')) i++;
|
||||
line[i] = 0; // end of string
|
||||
for (channel = 0; (channel < max_channel) &&
|
||||
(strcmp(line + sizeof(channel_line) - 1, channel_names[channel]) != 0);
|
||||
channel++);
|
||||
if (channel == max_channel)
|
||||
fprintf(stderr, "Error - channel '%s' not recognized.\n", line + sizeof(channel_line) - 1);
|
||||
}
|
||||
else if (strncmp(line, summary_line, sizeof(summary_line)-1) == 0)
|
||||
read_summary(summary);
|
||||
}
|
||||
}
|
16
Tools/xtvrc2vdr/Makefile
Normal file
16
Tools/xtvrc2vdr/Makefile
Normal file
@@ -0,0 +1,16 @@
|
||||
#
|
||||
# Makefile for xtvrc2vdr utility
|
||||
#
|
||||
|
||||
OBJS = xtvrc2vdr.o
|
||||
|
||||
%.o: %.c
|
||||
gcc -g -O2 -Wall -c $(DEFINES) $<
|
||||
|
||||
all: xtvrc2vdr
|
||||
|
||||
xtvrc2vdr: $(OBJS)
|
||||
gcc -g -O2 $(OBJS) -o xtvrc2vdr
|
||||
|
||||
clean:
|
||||
-rm -f $(OBJS) xtvrc2vdr
|
191
Tools/xtvrc2vdr/hotbird.conf
Normal file
191
Tools/xtvrc2vdr/hotbird.conf
Normal file
@@ -0,0 +1,191 @@
|
||||
TV Polonia:10719:v:1:27500:163:92:0:0
|
||||
Credit Agricole:10834:v:1:27500:5321:5333:0:0
|
||||
La Chaine Parlementaire:10873:v:1:27500:1020:1030:0:0
|
||||
TMT:10892:v:1:27500:163:92:0:0
|
||||
Multivision Accueil:10911:v:1:27500:320:330:0:0
|
||||
RTL:11054:v:1:27500:160:80:0:0
|
||||
VOX:11054:v:1:27500:500:501:0:0
|
||||
Sat 1 A:11054:v:1:27500:511:512:0:0
|
||||
RTL II Austria:11054:v:1:27500:520:521:0:0
|
||||
NBC Europe:11054:v:1:27500:550:551:0:0
|
||||
ZDF:11054:v:1:27500:570:571:0:0
|
||||
K-T9:11054:v:1:27500:580:581:0:0
|
||||
Sat 1 Schweiz:11604:v:1:27500:101:102:0:0
|
||||
MKT9:11623:v:1:27500:222:242:0:0
|
||||
Olisat TV Promo:11623:v:1:27500:226:246:0:0
|
||||
Bloomberg TV Germany:11642:v:1:27500:1460:1420:0:0
|
||||
Bloomberg TV UK:11642:v:1:27500:1560:1520:0:0
|
||||
SAT 7:11642:v:1:27500:1660:1620:0:0
|
||||
Multivision 1:11662:v:1:27500:120:130:0:0
|
||||
Dubai EDT9:11746:v:1:27500:4130:4131:0:0
|
||||
Dubai Sport Channel:11746:v:1:27500:4386:4387:0:0
|
||||
Dubai Business Channel:11746:v:1:27500:4642:4643:0:0
|
||||
Dubai EDT9:11746:v:1:27500:4898:4899:0:0
|
||||
RAI Uno:11766:v:1:27500:160:80:0:0
|
||||
RAI Due:11766:v:1:27500:161:84:0:0
|
||||
RAI Tre:11766:v:1:27500:162:88:0:0
|
||||
RAI Mosaico:11766:v:1:27500:518:8191:0:0
|
||||
RAI SportSat:11804:v:1:27500:512:650:0:0
|
||||
RAI Nettuno Sat 2:11804:v:1:27500:513:651:0:0
|
||||
RAI Educational:11804:v:1:27500:514:652:0:0
|
||||
TelePace :11804:v:1:27500:515:653:0:0
|
||||
RAI News24:11804:v:1:27500:516:654:0:0
|
||||
Camera dei Deputati:11804:v:1:27500:517:655:0:0
|
||||
SAT 2000:11804:v:1:27500:518:656:0:0
|
||||
RAI NettunoSat 1:11804:v:1:27500:519:657:0:0
|
||||
ERT Sat:11823:v:1:27500:521:740:0:0
|
||||
INT9:11843:v:1:27500:2324:2325:0:0
|
||||
TVL:11843:v:1:27500:2441:2442:0:0
|
||||
Team TV :11881:v:1:27500:2305:2306:0:0
|
||||
Ante Prima:11881:v:1:27500:2435:2436:0:0
|
||||
SNAI:11881:v:1:27500:2561:2562:0:0
|
||||
Italia 1 :11919:v:1:27500:512:650:0:0
|
||||
Canale 5:11919:v:1:27500:513:660:0:0
|
||||
Rete 4 :11919:v:1:27500:514:670:0:0
|
||||
ART Europe:12015:v:1:27500:164:96:0:0
|
||||
ESC 2:12015:v:1:27500:166:104:0:0
|
||||
ART Iqra:12015:v:1:27500:168:112:0:0
|
||||
Vetrina D+:12034:v:1:27500:166:105:0:0
|
||||
D+ Info:12073:v:1:27500:160:80:0:0
|
||||
Palco Promo:12073:v:1:27500:161:84:0:0
|
||||
Vacaciones T9:12092:v:1:27500:4112:4113:0:0
|
||||
TvL - TV Locale:12092:v:1:27500:4160:4161:0:0
|
||||
Satisfaction T9:12092:v:1:27500:4192:4193:0:0
|
||||
TVE Internacional:12092:v:1:27500:4208:4209:0:0
|
||||
TVG - TV de Galicia :12092:v:1:27500:4224:4225:0:0
|
||||
La Cadena Del Milagro:12092:v:1:27500:4368:4369:0:0
|
||||
Fiesta:12092:v:1:27500:4432:4433:0:0
|
||||
Visions Europe:12092:v:1:27500:4416:4417:0:0
|
||||
SateliTV/TV Sex Channel:12092:v:1:27500:4480:4481:0:0
|
||||
Krisma:12111:v:1:27500:200:201:0:0
|
||||
NT9:12111:v:1:27500:210:211:0:0
|
||||
Armenia TV 1:12111:v:1:27500:240:241:0:0
|
||||
SMAU Channel :12111:v:1:27500:260:261:0:0
|
||||
JSC - Al Jazeera Satellite Ch :12111:v:1:27500:270:271:0:0
|
||||
Il Tirreno Sat:12111:v:1:27500:280:301:0:0
|
||||
Coming Soon T9:12111:v:1:27500:310:311:0:0
|
||||
Alice:12149:v:1:27500:160:161:0:0
|
||||
Nuvolari Promo:12149:v:1:27500:176:177:0:0
|
||||
CCTV 4:12169:v:1:27500:516:690:0:0
|
||||
Kanali Vuolis:12169:v:1:27500:517:700:0:0
|
||||
Nova Promo:12169:v:1:27500:521:740:0:0
|
||||
ERT Sat :12188:v:1:27500:514:652:0:0
|
||||
Kanali Voulis:12188:v:1:27500:515:653:0:0
|
||||
OTE Promo:12188:v:1:27500:517:655:0:0
|
||||
TV 5 Europe:12245:v:1:27500:121:131:0:0
|
||||
Fashion T9:12245:v:1:27500:123:133:0:0
|
||||
TV Ajara:12245:v:1:27500:127:137:0:0
|
||||
Telekom T9:12265:v:1:27500:1460:1420:0:0
|
||||
SLO-TV1:12303:v:1:27500:200:201:0:0
|
||||
Polonia 1:12303:v:1:27500:205:206:0:0
|
||||
Super 1:12303:v:1:27500:207:208:0:0
|
||||
Sicilia Internacional:12303:v:1:27500:210:211:0:0
|
||||
SicilSat:12303:v:1:27500:225:226:0:0
|
||||
TBNE Italy:12303:v:1:27500:230:231:0:0
|
||||
Countdown T9:12303:v:1:27500:235:236:0:0
|
||||
Napoli International:12303:v:1:27500:240:241:0:0
|
||||
Magic T9:12303:v:1:27500:245:246:0:0
|
||||
TEST:12341:v:1:27500:165:108:0:0
|
||||
Colour Bars:12380:v:1:27500:3022:3032:0:0
|
||||
Tele 24 :12380:v:1:27500:3023:3033:0:0
|
||||
Abu Dhabi TV :12380:v:1:27500:3024:3034:0:0
|
||||
LCA:12380:v:1:27500:3025:3035:0:0
|
||||
RTV Montenegro:12380:v:1:27500:3026:3036:0:0
|
||||
SRG SSR Sat Access :12399:v:1:27500:165:98:0:0
|
||||
Jam-e-Jam Network 1 (IRIB 1):12437:v:1:27500:160:80:0:0
|
||||
Jam-e-Jam Network 2 (IRIB 2):12437:v:1:27500:161:82:0:0
|
||||
Sahar University Network:12437:v:1:27500:162:84:0:0
|
||||
Maharishi Open University:12476:v:1:27500:42:43:0:0
|
||||
Europe by Satellite:12476:v:1:27500:101:201:0:0
|
||||
Pink Backup:12476:v:1:27500:308:256:0:0
|
||||
Mizik Tropical:12476:v:1:27500:435:436:0:0
|
||||
TLI info card:12476:v:1:27500:771:768:0:0
|
||||
Liberty T9:12476:v:1:27500:941:942:0:0
|
||||
HRT TV 1:12520:v:1:27500:100:101:0:0
|
||||
HRT National:12520:v:1:27500:107:108:0:0
|
||||
BVN TV:12520:v:1:27500:210:211:0:0
|
||||
Sicilia International:12520:v:1:27500:501:502:0:0
|
||||
Sardegna Uno:12520:v:1:27500:503:504:0:0
|
||||
TGRT:12520:v:1:27500:505:506:0:0
|
||||
Euro Mediterraneo:12520:v:1:27500:510:511:0:0
|
||||
WWWTravel T9:12540:v:1:27500:1180:1183:0:0
|
||||
WWWTravel T9:12540:v:1:27500:1180:1184:0:0
|
||||
WWWTravel T9:12540:v:1:27500:1180:1185:0:0
|
||||
Bulgaria T9:12540:v:1:27500:4612:4613:0:0
|
||||
MC Sat Monte Carlo:12540:v:1:27500:5126:5122:0:0
|
||||
MBC:12597:v:1:27500:160:80:0:0
|
||||
SIMA-YEH-MOGHAVEMENT:12597:v:1:27500:161:84:0:0
|
||||
NITV (National Iran TV ):12597:v:1:27500:163:92:0:0
|
||||
BET International:12597:v:1:27500:167:108:0:0
|
||||
JSTV 2 Info Card:12597:v:1:27500:2011:2012:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2231:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2232:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2233:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2234:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2235:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2236:0:0
|
||||
EuroNews:12597:v:1:27500:2221:2237:0:0
|
||||
Canal Agro Rual:12597:v:1:27500:2321:2331:0:0
|
||||
MMO9:12616:v:1:27500:2561:2562:0:0
|
||||
Dubai Sport Channel:12654:v:1:27500:1060:1020:0:0
|
||||
Sharjah TV :12654:v:1:27500:1160:1120:0:0
|
||||
Qatar T9:12654:v:1:27500:1260:1220:0:0
|
||||
Saudi Channel 1 :12654:v:1:27500:1360:1320:0:0
|
||||
Kuwait Space Channel :12654:v:1:27500:1460:1420:0:0
|
||||
Libya T9:12654:v:1:27500:1560:1520:0:0
|
||||
Sudan T9:12654:v:1:27500:1660:1620:0:0
|
||||
Oman T9:12654:v:1:27500:1760:1720:0:0
|
||||
Jordan Satellite Channel:12654:v:1:27500:1860:1820:0:0
|
||||
Iraq Satellite Channel:12654:v:1:27500:1960:1920:0:0
|
||||
Thai TV 5 Global Network :12673:v:1:27500:200:201:0:0
|
||||
DigItaly:12673:v:1:27500:220:221:0:0
|
||||
Studio Europa:12673:v:1:27500:230:231:0:0
|
||||
Game Network:12673:v:1:27500:291:292:0:0
|
||||
Video Italia :12673:v:1:27500:340:341:0:0
|
||||
Telemarket:12673:v:1:27500:350:351:0:0
|
||||
Evision:12673:v:1:27500:360:361:0:0
|
||||
AB Passion:12692:v:1:27500:160:80:0:0
|
||||
Onyx T9:12692:v:1:27500:161:84:0:0
|
||||
EWTN:10723:v:1:29900:1001:1201:0:0
|
||||
Test (Newslynx):10723:v:1:29900:1002:1202:0:0
|
||||
MTA International:10723:v:1:29900:1004:1204:0:0
|
||||
J TV Test:10992:v:1:27500:2436:2437:0:0
|
||||
Bloomberg UK Test Card:11242:v:1:27500:162:88:0:0
|
||||
Channel SUN Test (KBT):11604:v:1:27500:111:112:0:0
|
||||
Racing Channel Test:11623:v:1:27500:223:243:0:0
|
||||
Test Card (pgm 4):11623:v:1:27500:224:244:0:0
|
||||
Olisat TLC test card:11623:v:1:27500:225:245:0:0
|
||||
Channel SUN Test (KBT):11623:v:1:27500:229:249:0:0
|
||||
Rai way 3 test card:11766:v:1:27500:164:96:0:0
|
||||
Rai way 1 test card:11766:v:1:27500:515:653:0:0
|
||||
Rai way 2 test card:11766:v:1:27500:516:654:0:0
|
||||
Test (Local Satellite):12092:v:1:27500:4176:4177:0:0
|
||||
Retelsat Test:12092:v:1:27500:4464:4465:0:0
|
||||
AIT Test Card:12111:v:1:27500:220:221:0:0
|
||||
Fucino Test Card:12111:v:1:27500:230:231:0:0
|
||||
Espresso(Antenna Hungaria Test Card):12149:v:1:27500:36:37:0:0
|
||||
Antenna Hungaria Test Card:12149:v:1:27500:96:97:0:0
|
||||
Antenna Hungaria Test Card:12149:v:1:27500:112:113:0:0
|
||||
Leonardo (Antenna Hungaria Test):12149:v:1:27500:128:129:0:0
|
||||
Test (Sahar):12437:v:1:27500:163:86:0:0
|
||||
Test 1:12437:v:1:27500:164:88:0:0
|
||||
Test 2:12437:v:1:27500:165:90:0:0
|
||||
CNES-Toulouse test:12558:v:1:27500:6143:6142:0:0
|
||||
Test Card:12597:v:1:27500:161:84:0:0
|
||||
FEED:11242:v:1:27500:167:108:0:0
|
||||
Feed :11623:v:1:27500:221:241:0:0
|
||||
Quantum 24 :10913:v:1:3998:1160:1120:0:0
|
||||
Quantum 24:10913:v:1:3998:1160:1220:0:0
|
||||
VIVA Polska:11131:v:1:4340:98:99:0:0
|
||||
Deutsche Welle T9:11196:v:1:9096:101:102:0:0
|
||||
Canal 24 Horas :11205:v:1:4000:4130:4131:0:0
|
||||
TV 5 Asie :11338:v:1:5632:512:640:0:0
|
||||
RAI4IFA:11548:v:1:4398:512:650:0:0
|
||||
Pro TV International:12201:v:1:5632:1160:1120:0:0
|
||||
TVN Polnoc:12211:v:1:5632:4194:4195:0:0
|
||||
WorldNet Europe:12484:v:1:8298:4260:4220:0:0
|
||||
WorldNet Europe:12484:v:1:8298:4360:4320:0:0
|
||||
WorldNet Europe:12484:v:1:8298:4460:4420:0:0
|
||||
WorldNet Europe:12484:v:1:8298:4560:4520:0:0
|
||||
TVN Polnoc:12573:v:1:5632:4194:4195:0:0
|
||||
APTN:12582:v:1:5632:308:256:0:0
|
1337
Tools/xtvrc2vdr/xtvrc.hotbird
Normal file
1337
Tools/xtvrc2vdr/xtvrc.hotbird
Normal file
File diff suppressed because it is too large
Load Diff
146
Tools/xtvrc2vdr/xtvrc2vdr.c
Normal file
146
Tools/xtvrc2vdr/xtvrc2vdr.c
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* * xtvrc2vdr.c: Converts 'xtvrc' files to 'vdr' channel format
|
||||
* *
|
||||
* * Copyright (C) 2000 Plamen Ganev
|
||||
* *
|
||||
* * This program is free software; you can redistribute it and/or
|
||||
* * modify it under the terms of the GNU General Public License
|
||||
* * as published by the Free Software Foundation; either version 2
|
||||
* * of the License, or (at your option) any later version.
|
||||
* *
|
||||
* * This program is distributed in the hope that it will be useful,
|
||||
* * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* * GNU General Public License for more details.
|
||||
* *
|
||||
* * You should have received a copy of the GNU General Public License
|
||||
* * along with this program; if not, write to the Free Software
|
||||
* * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
|
||||
* *
|
||||
* * The author can be reached at pganev@comm.it
|
||||
* *
|
||||
* */
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAX_LINE_LEN 1024
|
||||
#define MAX_NAME 100
|
||||
#define TOKS ": \n\r"
|
||||
#define NAMETOKS ":\n\r"
|
||||
|
||||
typedef struct {
|
||||
char Name[MAX_NAME+1];
|
||||
int freq;
|
||||
int color, hue, bright, saturation ;
|
||||
int nitv, input ;
|
||||
int pol, srate, fec, vpid, apid, lnbnum, type;
|
||||
} CHANNEL_DATA ;
|
||||
|
||||
void strlwr( char *s ){
|
||||
while ( s && *s ){
|
||||
*s = tolower(*s);
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
int ReadChannel( FILE *f, CHANNEL_DATA *channel ) {
|
||||
static char s[MAX_LINE_LEN+1];
|
||||
char *p;
|
||||
|
||||
memset( channel, sizeof( CHANNEL_DATA ), 0 ) ;
|
||||
|
||||
while ((p=fgets( s, MAX_LINE_LEN, f ))!=NULL){
|
||||
// printf("%s", s ) ;
|
||||
if (s[0] == '*')
|
||||
break ;
|
||||
}
|
||||
|
||||
if ( !p ) { /* EOF? */
|
||||
// printf("EOF\n");
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
while (fgets( s, MAX_LINE_LEN, f )){
|
||||
if ( s[0] == '\n' )
|
||||
return channel->freq ? 1 : 0;
|
||||
p = strtok( s, TOKS ) ;
|
||||
if ( !p ) {
|
||||
return 0;
|
||||
}
|
||||
strlwr( p ) ;
|
||||
if ( !strcmp( p, "channel" )){
|
||||
p=strtok( NULL, NAMETOKS );
|
||||
while ( p && *p==' ')
|
||||
p++;
|
||||
strcpy( channel->Name, p );
|
||||
// printf("%d ", channel->freq ) ;
|
||||
} else if ( !strcmp( p, "frequency")) {
|
||||
channel->freq = atoi( p=strtok( NULL, TOKS ));
|
||||
// printf("%d ", channel->freq ) ;
|
||||
} else if ( !strcmp( p, "cbhc")) {
|
||||
channel->color = atoi(p=strtok(NULL,TOKS));
|
||||
channel->hue = atoi(p=strtok(NULL,TOKS));
|
||||
channel->bright = atoi(p=strtok(NULL,TOKS));
|
||||
channel->saturation = atoi(p=strtok(NULL,TOKS));
|
||||
} else if ( !strcmp( p, "ni")) {
|
||||
channel->nitv = atoi(p=strtok(NULL,TOKS));
|
||||
channel->input = atoi(p=strtok(NULL,TOKS));
|
||||
} else if ( !strcmp( p, "sat")) {
|
||||
channel->pol = atoi(p=strtok(NULL,TOKS));
|
||||
channel->srate = atoi(p=strtok(NULL,TOKS));
|
||||
channel->fec = atoi(p=strtok(NULL,TOKS));
|
||||
channel->vpid = atoi(p=strtok(NULL,TOKS));
|
||||
channel->apid = atoi(p=strtok(NULL,TOKS));
|
||||
channel->lnbnum = atoi(p=strtok(NULL,TOKS));
|
||||
channel->type = atoi(p=strtok(NULL,TOKS));
|
||||
} else
|
||||
printf("Unknown token %s\n", p ) ;
|
||||
}
|
||||
return 1 ;
|
||||
}
|
||||
|
||||
int main ( int argc, char *argv[] ){
|
||||
FILE *f, *fo ;
|
||||
int cnt = 0;
|
||||
CHANNEL_DATA channel ;
|
||||
|
||||
if ( argc != 3 ){
|
||||
printf("USAGE: %s <xtvrc file> <vdr file>\n\n", argv[0] ) ;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( !(f=fopen(argv[1], "rt"))){
|
||||
printf("Can't open %s for reading\n\n", argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( !(fo=fopen(argv[2], "wt"))){
|
||||
printf("Can't open %s for writing\n\n", argv[2]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
while ( ReadChannel( f, &channel ) ) {
|
||||
cnt++;
|
||||
fprintf(fo, "%s:%d:%c:%d:%d:%d:%d:%d:%d\n",
|
||||
channel.Name ,
|
||||
channel.freq ,
|
||||
channel.pol ? 'v' : 'h' ,
|
||||
1, //channel.lnbnum ,
|
||||
channel.srate ,
|
||||
channel.vpid ,
|
||||
channel.apid ,
|
||||
0, //channel.type ,
|
||||
0 ); //channel.fec ) ;
|
||||
}
|
||||
|
||||
printf( "%d channels read.\n\n", cnt ) ;
|
||||
|
||||
fclose(f);
|
||||
fclose(fo);
|
||||
return 1;
|
||||
}
|
Reference in New Issue
Block a user