Commit 610c5600 authored by Klaus Schmidinger's avatar Klaus Schmidinger

Version 0.72

- Fixed SVDRP commands LSTC and LSTT to make them return an error message if
  no channels or timers are defined.
- Enhanced 'channels.conf.cable' (thanks to Hans-Peter Raschke).
- Fixed switching to another channel via the EPG while a recording is being
  replayed.
- Fixed a memory leak in the EIT processor that happened when the system time
  was set.
- Removed some redundant code from the cListBase destructor.
- Fixed internationalization of some Main menu texts.
- Updated 'channels.conf' after the recent changes of Premiere World (thanks
  to Axel Gruber).
- Redesigned the ring buffer to make it work with two separate threads for
  input and output (also prepared for using a remultiplexer).
- Fixed setting system time from transponders.
- Fixed a segfault in the Schedule menu in case there is no EPG information.
- The 'runvdr' script now kills any leftover vdr threads before restarting it.
- Fixed a problem with Daylight Saving Time when displaying the times of
  recordings.
- Added Dutch language texts (thanks to Arnold Niessen).
- The new command line option -t can be used to set the controlling terminal
  (thanks to Jürgen Sauer). This is especially useful when starting VDR through
  an entry in /etc/inittab (see INSTALL).
- Since the CAM module only works if it is installed in the "highest" DVB card,
  recordings now search for a free DVB card from lowest to highest index (as
  opposed to the previous "highest to lowest" search) in order to not use the
  CAM card for FTA recordings unless necessary. This is only important for
  systems with three or more DVB cards.
- Added the "statdvb2vdr" tool from Hans-Peter Raschke.
- Fixed a segfault that sometimes happened when killing VDR.
- VDR now returns an exit status of '2' in case of an error at startup, instead
  of terminating with 'abort()' (which caused a core dump).
- SVDRP now also works with clients that don't do line buffering (like the
  Windows 'telnet').
- Empty lines in config files no longer cause error messages.
- New SVDRP command LSTE to list the EPG data.
- The SVDRP HELP command now prints the topics in several columns.
parent f2937af9
......@@ -57,6 +57,16 @@ Dave Chapman <dave@dchapman.com>
Hans-Peter Raschke <Hans-Peter.Raschke@Wintermann-DatenService.de>
for his support in adapting VDR to DVB-C
for adding the 'statdvb2vdr' tool (see Tools/statdvb2vdr)
Peter Hofmann <software@pxh.de>
for his support in adapting VDR to DVB-C
Axel Gruber <axel@agm.de>
for his support in keeping the Premiere World channels up to date in 'channels.conf'
Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>
for translating the OSD texts to the Dutch language
Jürgen Sauer <jojo@automatix.de>
for implementing the -t option to set the controlling terminal
......@@ -413,3 +413,42 @@ Video Disk Recorder Revision History
VDR exit in case the main program loop does not respond for more than the
given number of seconds. This is mainly useful in combination with the new
'runvdr' script that restarts VDR in case is has exited.
2001-04-01: Version 0.72
- Fixed SVDRP commands LSTC and LSTT to make them return an error message if
no channels or timers are defined.
- Enhanced 'channels.conf.cable' (thanks to Hans-Peter Raschke).
- Fixed switching to another channel via the EPG while a recording is being
replayed.
- Fixed a memory leak in the EIT processor that happened when the system time
was set.
- Removed some redundant code from the cListBase destructor.
- Fixed internationalization of some Main menu texts.
- Updated 'channels.conf' after the recent changes of Premiere World (thanks
to Axel Gruber).
- Redesigned the ring buffer to make it work with two separate threads for
input and output (also prepared for using a remultiplexer).
- Fixed setting system time from transponders.
- Fixed a segfault in the Schedule menu in case there is no EPG information.
- The 'runvdr' script now kills any leftover vdr threads before restarting it.
- Fixed a problem with Daylight Saving Time when displaying the times of
recordings.
- Added Dutch language texts (thanks to Arnold Niessen).
- The new command line option -t can be used to set the controlling terminal
(thanks to Jürgen Sauer). This is especially useful when starting VDR through
an entry in /etc/inittab (see INSTALL).
- Since the CAM module only works if it is installed in the "highest" DVB card,
recordings now search for a free DVB card from lowest to highest index (as
opposed to the previous "highest to lowest" search) in order to not use the
CAM card for FTA recordings unless necessary. This is only important for
systems with three or more DVB cards.
- Added the "statdvb2vdr" tool from Hans-Peter Raschke.
- Fixed a segfault that sometimes happened when killing VDR.
- VDR now returns an exit status of '2' in case of an error at startup, instead
of terminating with 'abort()' (which caused a core dump).
- SVDRP now also works with clients that don't do line buffering (like the
Windows 'telnet').
- Empty lines in config files no longer cause error messages.
- New SVDRP command LSTE to list the EPG data.
- The SVDRP HELP command now prints the topics in several columns.
......@@ -71,6 +71,11 @@ If the program shall run as a daemon, use the --daemon option. This
will completely detach it from the terminal and will continue as a
background process.
When starting the program through an entry in /etc/inittab, use the --terminal
option to set the controlling terminal, as in
vdr:123:respawn:/usr/local/bin/vdr --terminal=/dev/tty8 -w 60
Automatic restart in case of hangups:
-------------------------------------
......
......@@ -4,13 +4,14 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Makefile 1.20 2001/02/24 15:52:58 kls Exp $
# $Id: Makefile 1.21 2001/03/11 11:36:15 kls Exp $
DVBDIR = ../DVB
INCLUDES = -I$(DVBDIR)/driver
OBJS = config.o dvbapi.o dvbosd.o eit.o font.o i18n.o interface.o menu.o osd.o\
recording.o remote.o svdrp.o thread.o tools.o vdr.o videodir.o
recording.o remote.o remux.o ringbuffer.o svdrp.o thread.o tools.o vdr.o\
videodir.o
OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
......@@ -37,26 +38,28 @@ font: genfontfile fontfix.c fontosd.c
# Implicit rules:
%.o: %.c
g++ -g -O2 -Wall -m486 -c $(DEFINES) $(INCLUDES) $<
g++ -g -O2 -Wall -Woverloaded-virtual -m486 -c $(DEFINES) $(INCLUDES) $<
# Dependencies:
config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
dvbapi.o : dvbapi.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
dvbosd.o : dvbosd.c dvbosd.h font.h tools.h
eit.o : eit.c config.h dvbapi.h dvbosd.h eit.h font.h thread.h tools.h videodir.h
font.o : font.c font.h fontfix.c fontosd.c tools.h
i18n.o : i18n.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h thread.h tools.h
interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h
osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h osd.h remote.h svdrp.h thread.h tools.h
recording.o: recording.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
remote.o : remote.c config.h dvbapi.h dvbosd.h eit.h font.h remote.h thread.h tools.h
svdrp.o : svdrp.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
thread.o : thread.c thread.h tools.h
tools.o : tools.c tools.h
vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
videodir.o : videodir.c tools.h videodir.h
config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
dvbapi.o : dvbapi.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h remux.h ringbuffer.h svdrp.h thread.h tools.h videodir.h
dvbosd.o : dvbosd.c dvbosd.h font.h tools.h
eit.o : eit.c config.h dvbapi.h dvbosd.h eit.h font.h thread.h tools.h videodir.h
font.o : font.c font.h fontfix.c fontosd.c tools.h
i18n.o : i18n.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h thread.h tools.h
interface.o : interface.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h
osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h osd.h remote.h svdrp.h thread.h tools.h
recording.o : recording.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
remote.o : remote.c config.h dvbapi.h dvbosd.h eit.h font.h remote.h thread.h tools.h
remux.o : remux.c remux.h tools.h
ringbuffer.o: ringbuffer.c ringbuffer.h thread.h tools.h
svdrp.o : svdrp.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
thread.o : thread.c thread.h tools.h
tools.o : tools.c tools.h
vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
videodir.o : videodir.c tools.h videodir.h
# The main program:
......
#!/usr/bin/perl
# Reads the file statdvb.dat produced by the Siemens windows
# software (1.50), which contains the scanned channels of an
# DVB-C (-S). The file ist located in the windows directory.
#
# Output is suitable for VDR (channels.conf). Only tested for
# the cable version. Should work with slight modifications for
# the sat version.
#
# 8. Mrz 2001 - Hans-Peter Raschke
# file structure derived from "DvbGlobalDef.h" of the Siemens
# DVB kit.
# typedef int TABLETYPE;
# enum TunStandard
# {
# PAL_BG, //B/G stereo or mono
# PAL_I, //I mono (with Nicam stereo)
# PAL_DK, //D/K mono
# SECAM_L, //L mono (with Nicam stereo)
# SECAM_LI, //Secam L (with Nicam stereo)
# SECAM_DK,
# SECAM_BG,
# NTSC_M,
# DVB_C,
# DVB_S,
# DVB_T
# };
#
# typedef struct TunProgDataTag //xx bytes+1string
# {
# int nNumber; //logical number of the program
# DWORD dwFrequency; //frequency in khz
# CString csName; //name of the program
# TunStandard eStandard; //standard of the program
# DWORD dwExtraInfo; //specific info, like teletext,reserved data
# //0x8 == external input 1-CVBS
# //0x10 == external input 2-Y/C
# //0x20 == scrambled Program stream
# //0x40 == ASTRA Sattable
# //0x80 == Eutelsat Sattable
# //0xC0 == Sattable from File
# //0x100 == Pulsed switch to other satellite dish
# //0x1000-0xF000 = Other Satellite Nr(if Sattable from File)
# //Digital only params beginning from here
# WORD ProgNr; //DVB Nr for the prog (PAS related)
# WORD wTS_ID; //Transport-Stream ID orig.
# WORD wNW_ID; //Network ID orig.
# WORD wService_ID; //Service /Programm Id
# BYTE nModulation; //Modulation-Type QAM,QPSK,other
# BYTE nFEC_outerinner; //outer(high nibble) and inner(low n.)
# DWORD dwSymbolrate; //in symbol/s
# BOOL b22kHz; //east or west(TRUE) position in Sat
# BOOL bVertical_pos; //horizontal or vertical(TRUE) position in SAT
# BYTE nProgtype; //type of service (e.g. tv, radio)
# WORD wVideo_PID; //video-pid of the channel
# WORD wAudio_PID; //audio-pid of the channel
# WORD wPMT_PID; //PID of the associated PMT
# WORD wTxt_PID; //teletext PID for the program
# WORD wSubtitling_PID; //subtitling PID for the program
# WORD wData_PID; //PID for data broadcast
# BYTE nIPFilter; //filter for different ip's
# DWORD dwReserved1; //Shows some extended Information LOWORD=DataBroadcast_Id,
# //MSB showing Databroadcast, (HIWORD & 0xFF)=ComponentTag from the stream ident desc
# DWORD dwReserved2; //reserved dword
# }DVBTunProgData;
#
use strict;
use FileHandle;
# for a full dump
my @varNames = ("nNumber", # logical number of the program
"dwFrequency", # frequency in khz
"csName", # name of the program
"eStandard", # standard of the program
"dwExtraInfo", # specific info, like teletext,reserved data
# 0x8 == external input 1-CVBS
# 0x10 == external input 2-Y/C
# 0x20 == scrambled Program stream
# 0x40 == ASTRA Sattable
# 0x80 == Eutelsat Sattable
# 0xC0 == Sattable from File
# 0x100 == Pulsed switch to other satellite dish
# 0x1000-0xF000 = Other Satellite Nr(if Sattable from File)
"ProgNr", # DVB Nr for the prog (PAS related)
"wTS_ID", # Transport-Stream ID orig.
"wNW_ID", # Network ID orig.
"wService_ID", # Service /Programm Id
"nModulation", # Modulation-Type QAM,QPSK,other
"nFEC_outerinner", # outer(high nibble) and inner(low n.)
"dwSymbolrate", # in symbol/s
"b22kHz", # east or west(TRUE) position in Sat
"bVertical_pos", # horizontal or vertical(TRUE) position in SAT
"nProgtype", # type of service (e.g. tv, radio)
"wVideo_PID", # video-pid of the channel
"wAudio_PID", # audio-pid of the channel
"wPMT_PID", # PID of the associated PMT
"wTxt_PID", # teletext PID for the program
"wSubtitling_PID", # subtitling PID for the program
"wData_PID"); # PID for data broadcast
my @outVar = ("csName",
"dwFrequency",
"bVertical_pos",
"b22kHz",
"dwSymbolrate",
"wVideo_PID",
"wAudio_PID",
"wTxt_PID",
"dwExtraInfo",
"ProgNr");
# channels that need a valid smartcard
my @addCrypted = ("Extreme Sport",
"Bloomberg",
"Fashion TV",
"BET ON JAZZ",
"LANDSCAPE",
"Einstein",
"Single TV");
my @chNames = (); # list of scanned channels
my $camNo = 1; # number of CI/CAM to use
my %chData; # all channel data
my $buff; # input buffer
my $fh = new FileHandle("$ARGV[0]") or die "Datei $ARGV[0] nicht gefunden!";
binmode($fh); # could be run on windows
$fh->seek(4, 0); # skip id
my $chCnt = 0;
while (!$fh->eof()) {
$chCnt++;
last if ($fh->read($buff, 7) != 7);
my ($nNumber,
$dwFrequency,
$sLen
) = unpack("SLC", $buff);
last if ($fh->read($buff, $sLen) != $sLen);
my ($csName) = unpack("A$sLen", $buff);
$csName =~ s/:/./g;
$csName =~ s/^\s+//;
$csName =~ s/\s+$//;
last if ($fh->read($buff, 54) != 54);
my ($eStandard,
$dwExtraInfo,
$ProgNr,
$wTS_ID,
$wNW_ID,
$wService_ID,
$nModulation,
$nFEC_outerinner,
$dwSymbolrate,
$b22kHz,
$bVertical_pos,
$nProgtype,
$wVideo_PID,
$wAudio_PID,
$wPMT_PID,
$wTxt_PID,
$wSubtitling_PID,
$wData_PID
) = unpack("LLSSSSCCLLLCSSSSSS", $buff);
# some modifications for VDR
$dwFrequency /= 1000;
$bVertical_pos = $bVertical_pos ? "v" : "h";
$dwSymbolrate /= 1000;
$dwExtraInfo = ($dwExtraInfo == 32 || grep(($_ cmp $csName) == 0, @addCrypted)) ? $camNo : 0;
my $x = 1;
my $orgName = $csName;
while (exists($chData{$csName})) {
$csName = "$orgName" . "_$x";
$x++;
}
push(@chNames, $csName);
my %tmp = ("nNumber" => $nNumber,
"dwFrequency" => $dwFrequency,
"csName" => $orgName,
"eStandard" => $eStandard,
"dwExtraInfo" => $dwExtraInfo,
"ProgNr" => $ProgNr,
"wTS_ID" => $wTS_ID,
"wNW_ID" => $wNW_ID,
"wService_ID" => $wService_ID,
"nModulation" => $nModulation,
"nFEC_outerinner" => $nFEC_outerinner,
"dwSymbolrate" => $dwSymbolrate,
"b22kHz" => $b22kHz,
"bVertical_pos" => $bVertical_pos,
"nProgtype" => $nProgtype,
"wVideo_PID" => $wVideo_PID,
"wAudio_PID" => $wAudio_PID,
"wPMT_PID" => $wPMT_PID,
"wTxt_PID" => $wTxt_PID,
"wSubtitling_PID" => $wSubtitling_PID,
"wData_PID" => $wData_PID);
$chData{$csName} = {%tmp};
}
print STDERR "$chCnt channels found!\n";
# now we print the channels.conf
# crypted TV
print ":verschlsselte Fernsehprogramme\n";
for my $n (@chNames) {
my %tmp = %{$chData{$n}};
printChannel($chData{$n}) if ($tmp{"nProgtype"} == 1 && $tmp{"dwExtraInfo"});
}
# TV
print ":Fernsehprogramme\n";
for my $n (@chNames) {
my %tmp = %{$chData{$n}};
printChannel($chData{$n}) if ($tmp{"nProgtype"} == 1 && !$tmp{"dwExtraInfo"});
}
# crypted radio
print ":verschlsselte Radioprogramme\n";
for my $n (@chNames) {
my %tmp = %{$chData{$n}};
printChannel($chData{$n}) if ($tmp{"nProgtype"} == 2 && $tmp{"dwExtraInfo"});
}
# radio
print ":Radioprogramme\n";
for my $n (@chNames) {
my %tmp = %{$chData{$n}};
printChannel($chData{$n}) if ($tmp{"nProgtype"} == 2 && !$tmp{"dwExtraInfo"});
}
sub printChannel {
my $p = shift;
my @tmp = ();
for my $n (@outVar) {
push(@tmp, ${$p}{$n});
}
print join(":", @tmp), "\n";
}
RTL:12188:h:0:27500:163:104:32:0:12003
RTL:12188:h:0:27500:163:104:105:0:12003
Sat.1:12480:v:0:27500:1791:1792:34:0:46
Pro-7:12480:v:0:27500:255:256:32:0:898
RTL2:12188:h:0:27500:166:128:68:0:12020
......@@ -54,53 +54,54 @@ Star Kino:11798:h:0:27500:767:768:0:3:9
Cine Action:11798:h:0:27500:1023:1024:0:3:20
Cine Comedy:11798:h:0:27500:1279:1280:0:3:29
Sci Fantasy:11798:h:0:27500:1535:1536:0:3:41
Romantic Movies:11798:h:0:27500:1791:1792:0:3:11
Studio Universal:11798:h:0:27500:2047:2048:0:3:21
Romantic Movies:11797:h:0:27500:1791:1792:0:3:11
Studio Universal:12090:v:0:27500:255:256:0:3:36
13th Street:11797:h:0:27500:2303:2304:0:3:43
Junior:12031:h:0:27500:255:256:0:3:19
K-Toon:12032:h:0:27500:511:512:0:3:12
Disney Channel:12031:h:0:27500:767:768:0:3:15
Fox Kids:11798:h:0:27500:255:256:0:3:0
Disney Channel:12090:v:0:27500:767:768:0:3:34
Fox Kids:11797:h:0:27500:2559:2560:0:3:22
Sunset:12031:h:0:27500:1023:1024:0:3:16
Comedy:12031:h:0:27500:1279:1280:0:3:28
Planet:12031:h:0:27500:2047:2048:0:3:13
Planet:12090:v:0:27500:1279:1280:0:3:13
Discovery Channel:12031:h:0:27500:1791:1792:0:3:14
Krimi&Co:12031:h:0:27500:1535:1536:0:3:23
Filmpalast:12090:v:0:27500:255:256:0:3:36
Filmpalast:11758:h:0:27500:2559:2560:0:3:516
Heimatkanal:11758:h:0:27500:2815:2816:0:3:517
Goldstar:11758:h:0:27500:3839:3840:0:3:518
Classica:12090:v:0:27500:767:768:0:3:34
Classica:12031:h:0:27500:767:768:0:3:15
Seasons:12090:v:0:27500:511:512:0:3:33
Blue Channel:11758:h:0:27500:2559:2560:0:3:516
Cinedom 1A de:12070:h:0:27500:1279:1280:0:3:188
Cinedom 1A en:12070:h:0:27500:1279:1281:0:3:188
Cinedom 1B:12070:h:0:27500:1791:1792:0:3:191
Cinedom 1C:12070:h:0:27500:767:768:0:3:185
Cinedom 1D:11758:h:0:27500:511:512:0:3:178
Cinedom 1E:11720:h:0:27500:1535:1537:0:3:176
Sport 1:11720:h:0:27500:255:256:0:3:17
Sport 2:12070:h:0:27500:2047:2048:0:3:27
Sport 3:12070:h:0:27500:2303:2304:0:3:18
Sport 4:12070:h:0:27500:2559:2560:0:3:24
Feed (F1 Boxengasse):11720:h:0:27500:2559:2560:0:3:242
Feed (F1 Data):11720:h:0:27500:3071:3072:0:3:244
Feed (F1 Multi):11720:h:0:27500:2815:2816:0:3:243
Feed (F1 On Board):11720:h:0:27500:2303:2304:0:3:241
Feed (F1 Verfolger):11720:h:0:27500:2047:2048:0:3:240
Cinedom Deluxe:12070:h:0:27500:1279:1280:0:3:188
Cinedom 1A de:11758:h:0:27500:511:512:0:3:178
Cinedom 1A en:11758:h:0:27500:511:513:0:3:178
Cinedom 1B:12070:h:0:27500:767:768:0:3:185
Cinedom 1C:12070:h:0:27500:1791:1792:0:3:191
Cinedom 1E??:11720:h:0:27500:1535:1537:0:3:176
Cinedom 2A:12070:h:0:27500:1535:1536:0:3:189
Cinedom 2B:12070:h:0:27500:511:512:0:3:184
Cinedom 2C:11758:h:0:27500:767:768:0:3:179
Cinedom 2D:11758:h:0:27500:1023:1024:0:3:193
Cinedom 2E:11720:h:0:27500:1279:1280:0:3:183
Cinedom 2B:11758:h:0:27500:767:768:0:3:179
Cinedom 2C:11758:h:0:27500:1023:1024:0:3:193
Cinedom 2D??:12070:h:0:27500:511:512:0:3:184
Cinedom 3A:11758:h:0:27500:255:256:0:3:177
Cinedom 3B:11758:h:0:27500:1279:1280:0:3:194
Cinedom 3C:12090:v:0:27500:1279:1280:17689:3:192
Cinedom 3D:11720:h:0:27500:511:512:0:3:180
Cinedom 3E:11720:h:0:27500:1023:1024:0:3:182
Cinedom 3C??:12090:v:0:27500:1279:1280:17689:3:192
Cinedom 4A:11758:h:0:27500:1535:1536:0:3:195
Cinedom 4B:12032:h:0:27500:2559:2560:0:3:187
Cinedom 4C:11720:h:0:27500:767:768:0:3:181
Cinedom 4D:11720:h:0:27500:1791:1792:0:3:190
Cinedom 4E:12070:h:0:27500:1023:1025:0:3:186
Cinedom 4B:12070:h:0:27500:1023:1025:0:3:186
Cinedom 4C??:11720:h:0:27500:767:768:0:3:181
Cinedom 5A:12032:h:0:27500:2559:2560:0:3:187
Beate Uhse_TV:11797:h:0:27500:2047:2048:0:3:21
Blue Channel:11758:h:0:27500:2559:2560:0:3:516
Blue Movie 1:11758:h:0:27500:1791:1792:0:3:513
Blue Movie 2:11758:h:0:27500:2047:2048:0:3:514
Blue Movie 3:11758:h:0:27500:2303:2304:0:3:515
Feed (F1 Boxengasse):11720:h:0:27500:2559:2560:0:3:242
Feed (F1 Data):11720:h:0:27500:3071:3072:0:3:244
Feed (F1 Multi):11720:h:0:27500:2815:2816:0:3:243
Feed (F1 On Board):11720:h:0:27500:2303:2304:0:3:241
Feed (F1 Verfolger):11720:h:0:27500:2047:2048:0:3:240
:
TV Niepokalanow:11876:h:0:27500:305:321:0:0:20601
Mosaico:11934:v:0:27500:165:100:0:0:29010
......
This diff is collapsed.
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 1.43 2001/02/24 13:20:18 kls Exp $
* $Id: config.c 1.44 2001/04/01 14:32:22 kls Exp $
*/
#include "config.h"
......@@ -75,37 +75,39 @@ bool cKeys::Load(const char *FileName)
result = true;
while (fgets(buffer, sizeof(buffer), f) > 0) {
line++;
char *Name = buffer;
char *p = strpbrk(Name, " \t");
if (p) {
*p = 0; // terminates 'Name'
while (*++p && isspace(*p))
;
if (*p) {
if (strcasecmp(Name, "Code") == 0)
code = *p;
else if (strcasecmp(Name, "Address") == 0)
address = strtol(p, NULL, 16);
else {
for (tKey *k = keys; k->type != kNone; k++) {
if (strcasecmp(Name, k->name) == 0) {
k->code = strtol(p, NULL, 16);
Name = NULL; // to indicate that we found it
if (!isempty(buffer)) {
char *Name = buffer;
char *p = strpbrk(Name, " \t");
if (p) {
*p = 0; // terminates 'Name'
while (*++p && isspace(*p))
;
if (*p) {
if (strcasecmp(Name, "Code") == 0)
code = *p;
else if (strcasecmp(Name, "Address") == 0)
address = strtol(p, NULL, 16);
else {
for (tKey *k = keys; k->type != kNone; k++) {
if (strcasecmp(Name, k->name) == 0) {
k->code = strtol(p, NULL, 16);
Name = NULL; // to indicate that we found it
break;
}
}
if (Name) {
esyslog(LOG_ERR, "unknown key in %s, line %d\n", fileName, line);
result = false;
break;
}
}
if (Name) {
esyslog(LOG_ERR, "unknown key in %s, line %d\n", fileName, line);
result = false;
break;
}
}
}
continue;
}
continue;
esyslog(LOG_ERR, "error in %s, line %d\n", fileName, line);
result = false;
break;
}
esyslog(LOG_ERR, "error in %s, line %d\n", fileName, line);
result = false;
break;
}
fclose(f);
}
......@@ -782,10 +784,12 @@ bool cSetup::Load(const char *FileName)
bool result = true;
while (fgets(buffer, sizeof(buffer), f) > 0) {
line++;
if (*buffer != '#' && !Parse(buffer)) {
esyslog(LOG_ERR, "error in %s, line %d\n", fileName, line);
result = false;
break;
if (!isempty(buffer)) {
if (*buffer != '#' && !Parse(buffer)) {
esyslog(LOG_ERR, "error in %s, line %d\n", fileName, line);
result = false;
break;
}
}
}
fclose(f);
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.42 2001/02/24 13:19:39 kls Exp $
* $Id: config.h 1.44 2001/04/01 14:44:40 kls Exp $
*/
#ifndef __CONFIG_H
......@@ -19,7 +19,7 @@
#include "eit.h"
#include "tools.h"
#define VDRVERSION "0.71"
#define VDRVERSION "0.72"
#define MaxBuffer 10000
......@@ -184,14 +184,16 @@ public:
result = true;
while (fgets(buffer, sizeof(buffer), f) > 0) {
line++;
T *l = new T;
if (l->Parse(buffer))
Add(l);
else {
esyslog(LOG_ERR, "error in %s, line %d\n", fileName, line);
delete l;
result = false;
break;
if (!isempty(buffer)) {
T *l = new T;
if (l->Parse(buffer))
Add(l);
else {
esyslog(LOG_ERR, "error in %s, line %d\n", fileName, line);
delete l;
result = false;
break;
}
}
}
fclose(f);
......
This diff is collapsed.
This diff is collapsed.
......@@ -13,7 +13,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: eit.h 1.4 2000/11/24 14:35:22 kls Exp $
* $Id: eit.h 1.6 2001/04/01 15:14:12 kls Exp $
***************************************************************************/
#ifndef __EIT_H
......@@ -49,7 +49,7 @@ protected:
bool SetSubtitle(char *string);
void IncreaseExtendedDescriptorNumber(void);
cEventInfo(unsigned short serviceid, unsigned short eventid);
public:
public:
~cEventInfo();
const char *GetTimeString(void) const;
const char *GetEndTimeString(void) const;
......@@ -66,7 +66,7 @@ public:
unsigned short GetServiceID(void) const;
int GetChannelNumber(void) const { return nChannelNumber; }
void SetChannelNumber(int ChannelNumber) const { ((cEventInfo *)this)->nChannelNumber = ChannelNumber; } // doesn't modify the EIT data, so it's ok to make it 'const'
void Dump(FILE *f) const;
void Dump(FILE *f, const char *Prefix = "") const;
};
class cSchedule : public cListObject {
......@@ -84,7 +84,7 @@ protected:
void Cleanup(time_t tTime);
void Cleanup(void);
cSchedule(unsigned short servid = 0);
public:
public:
~cSchedule();
const cEventInfo *GetPresentEvent(void) const;
const cEventInfo *GetFollowingEvent(void) const;
......@@ -93,7 +93,7 @@ public:
const cEventInfo *GetEvent(time_t tTime) const;
const cEventInfo *GetEventNumber(int n) const { return Events.Get(n); }
int NumEvents(void) const { return Events.Count(); }
void Dump(FILE *f) const;
void Dump(FILE *f, const char *Prefix = "") const;
};
class cSchedules : public cList<cSchedule> {
......@@ -104,12 +104,12 @@ private:
protected:
bool SetCurrentServiceID(unsigned short servid);
void Cleanup();
public:
public:
cSchedules(void);
~cSchedules();
const cSchedule *GetSchedule(unsigned short servid) const;
const cSchedule *GetSchedule(void) const;
void Dump(FILE *f) const;
void Dump(FILE *f, const char *Prefix = "") const;
};
typedef struct sip_filter {
......@@ -130,9 +130,10 @@ private:
bool useTStime;
SIP_FILTER *filters;
int fsvbi;
bool active;
bool RefreshFilters(void);
void Action(void);
public:
public:
cSIProcessor(const char *FileName);
~cSIProcessor();
bool SetUseTSTime(bool use);
......
This diff is collapsed.
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.68 2001/02/24 14:53:40 kls Exp $
* $Id: menu.c 1.70 2001/03/18 10:16:56 kls Exp $
*/
#include "menu.h"
......@@ -1425,23 +1425,27 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
case kRed: return Record();
case kGreen: {
if (!now && !next) {
int ChannelNr = 0;
if (Count()) {
cChannel *channel = Channels.GetByServiceID(((cMenuScheduleItem *)Get(Current()))->eventInfo->GetServiceID());
if (channel)
ChannelNr = channel->number;
}
now = true;
return AddSubMenu(new cMenuWhatsOn(schedules, true, ChannelNr));
}
now = !now;
next = !next;
return AddSubMenu(new cMenuWhatsOn(schedules, now, cMenuWhatsOn::CurrentChannel()));
}
case kYellow: return AddSubMenu(new cMenuWhatsOn(schedules, false, cMenuWhatsOn::CurrentChannel()));
case kBlue: return Switch();
case kGreen: if (schedules) {
if (!now && !next) {
int ChannelNr = 0;
if (Count()) {
cChannel *channel = Channels.GetByServiceID(((cMenuScheduleItem *)Get(Current()))->eventInfo->GetServiceID());
if (channel)
ChannelNr = channel->number;
}
now = true;
return AddSubMenu(new cMenuWhatsOn(schedules, true, ChannelNr));
}