From 6f93a5f7819b3c7030a5b199e502bedd4eb7844c Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 24 Oct 2004 18:00:00 +0200 Subject: =?UTF-8?q?Version=201.3.14=20-=20Fixed=20detecting=20transponder?= =?UTF-8?q?=20lock=20in=20cDvbTuner=20(based=20on=20a=20patch=20from=20Ste?= =?UTF-8?q?fan=20=20=20Meyknecht).=20-=20What=20was=20previously=20marked?= =?UTF-8?q?=20with=20WAIT=5FFOR=5FLOCK=5FAFTER=5FTUNING=20is=20now=20perma?= =?UTF-8?q?nently=20=20=20active=20and=20uses=20a=20cCondVar=20to=20signal?= =?UTF-8?q?=20when=20a=20transponder=20is=20locked.=20-=20Added=20some=20m?= =?UTF-8?q?issing=20'const'=20to=20cChannel.=20-=20Added=20a=20sample=20se?= =?UTF-8?q?tup=20for=20'DisiCon-4=20Single=20Cable=20Network'=20to=20'dise?= =?UTF-8?q?qc.conf'=20=20=20(thanks=20to=20Oliver=20Endriss).=20-=20Fixed?= =?UTF-8?q?=20attaching=20a=20cPlayer=20to=20a=20cDevice,=20so=20that=20'O?= =?UTF-8?q?peration=20not=20permitted'=20=20=20errors=20don't=20occur=20an?= =?UTF-8?q?y=20more=20(thanks=20to=20Marco=20Schl=C3=BC=C3=9Fler).=20-=20F?= =?UTF-8?q?ixed=20a=20case=20where=20the=20resultBuffer=20in=20cRemux=20ra?= =?UTF-8?q?n=20full=20before=20getting=20a=20sync.=20-=20Removed=20the=20u?= =?UTF-8?q?sleep()=20call=20from=20cDvbPlayer::Action()=20to=20make=20VDR?= =?UTF-8?q?=20run=20on=20NPTL=20=20=20systems=20(thanks=20to=20Alfred=20Za?= =?UTF-8?q?strow).=20The=20NPTL=20check=20at=20startup=20has=20also=20been?= =?UTF-8?q?=20=20=20removed.=20-=20Taking=20the=20complete=20size=20of=20a?= =?UTF-8?q?vailable=20data=20into=20account=20when=20deciding=20whether=20?= =?UTF-8?q?=20=20to=20clear=20the=20transfer=20buffer=20to=20avoid=20overf?= =?UTF-8?q?lows=20(thanks=20to=20Reinhard=20Nissl).=20-=20Updated=20Romani?= =?UTF-8?q?an=20language=20texts=20and=20the=20iso8859-2=20fonts=20(thanks?= =?UTF-8?q?=20to=20Lucian=20Muresan).=20-=20Now=20actually=20using=20the?= =?UTF-8?q?=20iso8859-15=20fonts=20(thanks=20to=20Lucian=20Muresan).=20-?= =?UTF-8?q?=20Some=20minor=20code=20cleanups=20(thanks=20to=20Prakash=20K.?= =?UTF-8?q?=20Cheemplavam).=20-=20Fixed=20missing=20cleanup=20at=20program?= =?UTF-8?q?=20exit=20in=20case=20there=20is=20a=20problem=20with=20a=20plu?= =?UTF-8?q?gin=20=20=20(thanks=20to=20Mattias=20Gr=C3=B6nlund=20for=20poin?= =?UTF-8?q?ting=20this=20out).=20-=20Increased=20the=20required=20free=20b?= =?UTF-8?q?uffer=20space=20in=20the=20resultBuffer=20of=20cRemux=20to=20?= =?UTF-8?q?=20=202=20*=20IPACKS=20to=20avoid=20a=20buffer=20overflow=20in?= =?UTF-8?q?=20case=20a=20cTS2PES=20writes=20one=20complete=20=20=20packet?= =?UTF-8?q?=20and=20then=20(within=20processing=20the=20same=20TS=20packet?= =?UTF-8?q?)=20wants=20to=20write=20another=20=20=20small=20packet.=20-=20?= =?UTF-8?q?Removed=20the=20signal=20handler=20and=20WakeUp()=20call=20from?= =?UTF-8?q?=20cThread=20(it=20is=20no=20longer=20=20=20needed).=20-=20Adde?= =?UTF-8?q?d=20some=20checks=20when=20canceling=20a=20thread=20and=20remov?= =?UTF-8?q?ed=20the=20usleep()=20in=20=20=20cThread::Start()=20(suggested?= =?UTF-8?q?=20by=20Ludwig=20Nussel).=20Also=20removed=20'running'=20from?= =?UTF-8?q?=20=20=20cThread=20and=20using=20only=20childTid=20to=20indicat?= =?UTF-8?q?e=20whether=20a=20thread=20is=20actually=20=20=20running.=20-?= =?UTF-8?q?=20Added=20cCondWait::Sleep()=20and=20using=20it=20to=20replace?= =?UTF-8?q?=20all=20usleep()=20calls=20(based=20=20=20on=20a=20suggestion?= =?UTF-8?q?=20by=20Werner=20Fink).=20-=20Only=20assigning=20events=20to=20?= =?UTF-8?q?timers=20if=20the=20related=20schedule=20has=20actually=20been?= =?UTF-8?q?=20=20=20modified.=20-=20When=20searching=20for=20the=20present?= =?UTF-8?q?=20event,=20the=20running=20status=20is=20now=20only=20taken=20?= =?UTF-8?q?=20=20into=20account=20if=20the=20event=20has=20been=20"seen"?= =?UTF-8?q?=20within=20the=20past=2030=20seconds.=20=20=20This=20avoids=20?= =?UTF-8?q?shortly=20seeing=20the=20wrong=20events=20in=20the=20channel=20?= =?UTF-8?q?display=20when=20=20=20switching=20to=20a=20channel=20that=20ha?= =?UTF-8?q?sn't=20been=20tuned=20to=20in=20a=20while.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTORS | 22 ++++ HISTORY | 43 ++++++- INSTALL | 9 +- channels.c | 16 +-- channels.conf | 18 +-- channels.h | 8 +- config.h | 6 +- device.c | 4 +- diseqc.c | 5 +- diseqc.conf | 11 ++ dvbdevice.c | 75 ++++++----- dvbplayer.c | 4 +- eit.c | 7 +- epg.c | 18 ++- epg.h | 11 +- font.c | 16 ++- font.h | 5 +- fontosd-iso8859-2.c | 363 ++++++++++++++++++++++++++-------------------------- fontsml-iso8859-2.c | 68 +++++----- genfontfile.c | 2 +- i18n.c | 360 +++++++++++++++++++++++++-------------------------- libsi/util.h | 4 +- remux.c | 8 +- sections.c | 5 +- thread.c | 56 ++++---- thread.h | 10 +- timers.c | 54 +++++--- timers.h | 6 +- transfer.c | 4 +- vdr.c | 68 +++++----- 30 files changed, 696 insertions(+), 590 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0874cf4..86f1e28 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -257,6 +257,7 @@ Werner Fink for modifying handling of audio packets in cDvbPlayer for better sync with external AC3 replay for changing thread handling to make it work with NPTL ("Native Posix Thread Library") + for suggesting to replace usleep() calls with a pthread_cond_timedwait() based wait Rolf Hakenes for providing 'libdtv' and adapting the EIT mechanisms to it @@ -530,6 +531,7 @@ Oliver Endriss for reporting that the "Classic VDR" skin wrongly displayed unused color buttons for reporting some missing cStatus::MsgOsdTextItem() calls for reporting a missing "Editing process finished" message with skins + for adding a sample setup for 'DisiCon-4 Single Cable Network' to 'diseqc.conf' Reinhard Walter Buchner for adding some satellites to 'sources.conf' @@ -741,6 +743,8 @@ Ludwig Nussel for reporting a problem on systems that have UTF-8 enabled for pointing out a flaw in the the description of cRingBufferLinear for reporting a bug in cRingBufferLinear::Get() in case the buffer wraps around + for adding some checks when cancelling a thread and removing the usleep() in + cThread::Start() Thomas Koch for his support in keeping the Premiere World channels up to date in 'channels.conf' @@ -797,6 +801,8 @@ Alfred Zastrow the recordings created when pausing live video for reporting two warnings when compiling with gcc 3.3.1 for reporting a bug in handling menu status messages when the list contents is scrolled + for reporting that without the usleep() call in cDvbPlayer::Action() VDR runs on NPTL + systems Matthias Raus for reporting a problem with starting the editing process if no marks have been set @@ -870,6 +876,8 @@ Reinhard Nissl for suggesting to make sure the OSD reports oeWrongAlignment errors before any oeAreasOverlap error for reporting a a crash in the time search mechanism + for taking the complete size of available data into account when deciding whether + to clear the transfer buffer to avoid overflows Richard Robson for reporting freezing replay if a timer starts while in Transfer Mode from the @@ -1021,6 +1029,7 @@ Drazen Dupor Prakash K. Cheemplavam for fixing some issues with gcc 3.4 + for some minor code cleanups Miko Wohlgemuth for reporting a problem with the OSD alignment in the SPU decoder @@ -1053,6 +1062,8 @@ Marco Schl for avoiding unnecessary section filter start/stops for pointing out that if one PID can't be added, the whole cDevice::AttachReceiver() should fail and all PIDs added so far should be deleted + for fixing attaching a cPlayer to a cDevice, so that 'Operation not permited' + errors don't occur any more Jürgen Schmitz for reporting a bug in displaying the current channel when switching via the SVDRP @@ -1100,3 +1111,14 @@ Udo Richter Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date + +Stefan Meyknecht + for a patch that fixed detecting transponder lock in cDvbTuner + +Lucian Muresan + for updating the Romanian language texts and the iso8859-2 fonts + for making VDR actually use the iso8859-15 fonts + +Mattias Grönlund + for pointing out a missing cleanup at program exit in case there is a problem + with a plugin diff --git a/HISTORY b/HISTORY index 3baa1b9..f6d6c20 100644 --- a/HISTORY +++ b/HISTORY @@ -3003,7 +3003,7 @@ Video Disk Recorder Revision History - The cRingBuffer now does EnableGet()/EnablePut() only if the buffer is more than one third full or empty, respectively. This dramatically improves recording performance and reduces system load (thanks to Marco Schlüßler for doing some - testing regarding buffer performance and giving me some hints that finally lead + testing regarding buffer performance and giving me some hints that finally led to finding out that this was the basic problem causing buffer overflows). - Improved Transfer Mode (thanks to Marco Schlüßler for suggestions and testing). - Fixed a possible crash with inconsistent SI data (thanks to Marcel Wiesweg). @@ -3036,3 +3036,44 @@ Video Disk Recorder Revision History - Removed the 'Log' parameter from the cChannel::Set... functions. Instead checking if the channel has a non-zero number. - Updated 'channels.conf.terr' for Hannover (thanks to Sven Kreiensen). + +2004-10-24: Version 1.3.14 + +- Fixed detecting transponder lock in cDvbTuner (based on a patch from Stefan + Meyknecht). +- What was previously marked with WAIT_FOR_LOCK_AFTER_TUNING is now permanently + active and uses a cCondVar to signal when a transponder is locked. +- Added some missing 'const' to cChannel. +- Added a sample setup for 'DisiCon-4 Single Cable Network' to 'diseqc.conf' + (thanks to Oliver Endriss). +- Fixed attaching a cPlayer to a cDevice, so that 'Operation not permited' + errors don't occur any more (thanks to Marco Schlüßler). +- Fixed a case where the resultBuffer in cRemux ran full before getting a sync. +- Removed the usleep() call from cDvbPlayer::Action() to make VDR run on NPTL + systems (thanks to Alfred Zastrow). The NPTL check at startup has also been + removed. +- Taking the complete size of available data into account when deciding whether + to clear the transfer buffer to avoid overflows (thanks to Reinhard Nissl). +- Updated Romanian language texts and the iso8859-2 fonts (thanks to Lucian Muresan). +- Now actually using the iso8859-15 fonts (thanks to Lucian Muresan). +- Some minor code cleanups (thanks to Prakash K. Cheemplavam). +- Fixed missing cleanup at program exit in case there is a problem with a plugin + (thanks to Mattias Grönlund for pointing this out). +- Increased the required free buffer space in the resultBuffer of cRemux to + 2 * IPACKS to avoid a buffer overflow in case a cTS2PES writes one complete + packet and then (within processing the same TS packet) wants to write another + small packet. +- Removed the signal handler and WakeUp() call from cThread (it is no longer + needed). +- Added some checks when cancelling a thread and removed the usleep() in + cThread::Start() (suggested by Ludwig Nussel). Also removed 'running' from + cThread and using only childTid to indicate whether a thread is actually + running. +- Added cCondWait::Sleep() and using it to replace all usleep() calls (based + on a suggestion by Werner Fink). +- Only assigning events to timers if the related schedule has actually been + modified. +- When searching for the present event, the running status is now only taken + into account if the event has been "seen" within the past 30 seconds. + This avoids shortly seeing the wrong events in the channel display when + switching to a channel that hasn't been tuned to in a while. diff --git a/INSTALL b/INSTALL index f054d7a..2b363d4 100644 --- a/INSTALL +++ b/INSTALL @@ -7,14 +7,7 @@ Version 1.3 IMPORTANT NOTES: ---------------- -VDR currently doesn't work with NPTL ("Native Posix Thread Library"). -Either don't use NPTL, or set the environment variable - - LD_ASSUME_KERNEL=2.4.1 - -before running VDR. - -Also, please make sure your environment is NOT set to use UTF-8 or +Please make sure your environment is NOT set to use UTF-8 or any other multibyte character representation. Check the value of your $LANG or $LC_CTYPE environment variable, and if it contains something like "de_DE.UTF-8", make sure you set it to something like "de_DE.iso8859-1" diff --git a/channels.c b/channels.c index ad3ca7f..ad8156d 100644 --- a/channels.c +++ b/channels.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.c 1.27 2004/10/17 12:20:56 kls Exp $ + * $Id: channels.c 1.28 2004/10/22 14:11:07 kls Exp $ */ #include "channels.h" @@ -503,7 +503,7 @@ static int PrintParameter(char *p, char Name, int Value) return Value >= 0 && Value != 999 ? sprintf(p, "%c%d", Name, Value) : 0; } -const char *cChannel::ParametersToString(void) +const char *cChannel::ParametersToString(void) const { char type = *cSource::ToString(source); if (isdigit(type)) @@ -563,14 +563,12 @@ bool cChannel::StringToParameters(const char *s) return true; } -const char *cChannel::ToText(cChannel *Channel) +const char *cChannel::ToText(const cChannel *Channel) { char buf[MaxChannelName * 2]; - char *s = Channel->name; - if (strchr(s, ':')) { - s = strcpy(buf, s); - strreplace(s, ':', '|'); - } + const char *s = Channel->name; + if (strchr(s, ':')) + s = strreplace(strcpy(buf, s), ':', '|'); free(buffer); if (Channel->groupSep) { if (Channel->number) @@ -602,7 +600,7 @@ const char *cChannel::ToText(cChannel *Channel) return buffer; } -const char *cChannel::ToText(void) +const char *cChannel::ToText(void) const { return ToText(this); } diff --git a/channels.conf b/channels.conf index 008f732..d7f7db0 100644 --- a/channels.conf +++ b/channels.conf @@ -32,7 +32,7 @@ Sky News;BSkyB:11597:vC56:S19.2E:22000:305+131:306=eng:0:0:28707:1:1026:0 Veronica/FoxKids;CANAL+:12574:hC56:S19.2E:22000:518+8190:92=dut:38:622,602,100:5020:53:1109:0 BVN;CANAL+:12574:hC56:S19.2E:22000:515+8190:96=dut:36:0:5025:53:1109:0 CNBC Europe;CNBC:12610:vC56:S19.2E:22000:944:945=eng:946:0:12200:1:1112:0 -n-tv;n-tv:12669:vC56:S19.2E:22000:162:96=deu:55:0:12730:1:1116:0 +n-tv;RTL World:12187:hC34:S19.2E:27500:169:73=deu:80:0:12090:1:1089:0 Al Jazeera;CANALSATELLITE:11567:vC56:S19.2E:22000:55:56=ara:0:0:9021:1:1024:0 TW1;ORF:12692:hC56:S19.2E:22000:166:167=deu:168:0:13013:1:1117:0 Eurosport;ZDFvision:11953:hC34:S19.2E:27500:410:420=deu:430:0:28009:1:1079:0 @@ -45,22 +45,22 @@ MDR FERNSEHEN;ARD:12109:hC34:S19.2E:27500:401:402=deu:404:0:28204:1:1073:0 rbb Berlin;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0 :Premiere World START,PREMIERE START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1702,1801,1722:8:133:2:0 -PREM 1,PREMIERE 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:32:1702,1801,1722:10:133:2:0 -PREM 2,PREMIERE 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1702,1801,1722:11:133:2:0 +PREM 1,PREMIERE 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1702,1801,1722:10:133:2:0 +PREM 2,PREMIERE 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1702,1722,1801:11:133:2:0 PREM 3,PREMIERE 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1801,1702:43:133:2:0 PREM 4,PREMIERE 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0 -PREM 5,PREMIERE 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu,1281=deu:32:1722,1702,1801:29:133:2:0 -PREM 6,PREMIERE 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1702,1801,1722:41:133:2:0 -PREM 7,PREMIERE 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1722,1801,1702:20:133:2:0 +PREM 5,PREMIERE 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1722,1702,1801:29:133:2:0 +PREM 6,PREMIERE 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1702,1722,1801:41:133:2:0 +PREM 7,PREMIERE 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1722,1702,1801:20:133:2:0 DISNEY,DISNEY CHANNEL;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:0:1722,1702,1801:34:133:17:0 :Premiere Direkt DIREKT,PREMIERE DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0 :PW Erotic B-UHSE,BEATE-UHSE.TV;PREMIERE:12070:hC34:S19.2E:27500:1023:1024=deu:32:1801,1702,1722:21:133:1:0 -EROTIK,DIREKT EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:0:0:1722,1801,1702:513:133:4:0 +EROTIK,DIREKT EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:0:0:1722,1702,1801:513:133:4:0 :Sportsworld -SPORT 1,PREMIERE SPORT 1;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu:32:1801,1702,1722:17:133:3:0 -SPORT 2,PREMIERE SPORT 2;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu,3841=deu:32:1722,1702,1801:27:133:4:0 +Konferenz:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1801,1702,1722:17:133:3:0 +Formel 1:12031:hC34:S19.2E:27500:3839:3840=deu,3841=deu:32:1702,1722,1801:27:133:4:0 :Beta Digital N24;ProSiebenSat.1:12480:vC34:S19.2E:27500:2047:2048=deu:36:0:47:133:33:0 Liberty TV.com;Maastricht Multimedia:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0 diff --git a/channels.h b/channels.h index 666e91b..a2530f1 100644 --- a/channels.h +++ b/channels.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.h 1.19 2004/10/17 11:52:07 kls Exp $ + * $Id: channels.h 1.20 2004/10/22 14:09:47 kls Exp $ */ #ifndef __CHANNELS_H @@ -88,7 +88,7 @@ class cChannel : public cListObject { friend class cMenuEditChannel; private: static char *buffer; - static const char *ToText(cChannel *Channel); + static const char *ToText(const cChannel *Channel); enum { MaxChannelName = 64 }; // 63 chars + terminating 0! int __BeginData__; char name[MaxChannelName]; @@ -122,14 +122,14 @@ private: int modification; cLinkChannels *linkChannels; cChannel *refChannel; - const char *ParametersToString(void); + const char *ParametersToString(void) const; bool StringToParameters(const char *s); public: cChannel(void); cChannel(const cChannel &Channel); ~cChannel(); cChannel& operator= (const cChannel &Channel); - const char *ToText(void); + const char *ToText(void) const; bool Parse(const char *s, bool AllowNonUniqueID = false); bool Save(FILE *f); const char *Name(void) const { return name; } diff --git a/config.h b/config.h index d61f1d1..c3372a8 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.200 2004/07/27 07:22:46 kls Exp $ + * $Id: config.h 1.201 2004/10/22 13:29:38 kls Exp $ */ #ifndef __CONFIG_H @@ -20,8 +20,8 @@ #include "i18n.h" #include "tools.h" -#define VDRVERSION "1.3.13" -#define VDRVERSNUM 10313 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.3.14" +#define VDRVERSNUM 10314 // Version * 10000 + Major * 100 + Minor #define MAXPRIORITY 99 #define MAXLIFETIME 99 diff --git a/device.c b/device.c index b53c0ab..5a57faf 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 1.60 2004/10/17 09:39:10 kls Exp $ + * $Id: device.c 1.61 2004/10/23 10:15:31 kls Exp $ */ #include "device.h" @@ -595,8 +595,8 @@ bool cDevice::AttachPlayer(cPlayer *Player) if (player) Detach(player); player = Player; - player->device = this; SetPlayMode(player->playMode); + player->device = this; player->Activate(true); return true; } diff --git a/diseqc.c b/diseqc.c index 0766db8..801e1cd 100644 --- a/diseqc.c +++ b/diseqc.c @@ -4,12 +4,13 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: diseqc.c 1.2 2002/12/07 13:44:56 kls Exp $ + * $Id: diseqc.c 1.3 2004/10/24 11:04:56 kls Exp $ */ #include "diseqc.h" #include #include "sources.h" +#include "thread.h" // -- cDiseqc ---------------------------------------------------------------- @@ -61,7 +62,7 @@ char *cDiseqc::Wait(char *s) int n = strtol(s, &p, 10); if (!errno && p != s && n >= 0) { if (!parsing) - usleep(n * 1000); + cCondWait::SleepMs(n); return p; } esyslog("ERROR: illegal value for wait time in '%s'", s - 1); diff --git a/diseqc.conf b/diseqc.conf index 135089e..d4526d8 100644 --- a/diseqc.conf +++ b/diseqc.conf @@ -60,3 +60,14 @@ S21.5E 99999 H 10600 t V W15 [E0 10 38 F7] W15 B W15 T # S21.5E 99999 V 10600 [E0 10 38 F5] # S21.5E 11700 H 9750 [E0 10 38 F6] # S21.5E 99999 H 10600 [E0 10 38 F7] +# +# DisiCon-4 Single Cable Network: +# +# horizontal: 11.704 - 12.205 GHz (1. IF: 1144 - 1645 MHz) - LOF 1 (10,56 GHz) +# horizontal: 12.676 - 12.709 GHz (1. IF: 2116 - 2148 MHz) - LOF 1 (10,56 GHz) +# vertical: 12.035 - 12.107 GHz (1. IF: 955 - 1027 MHz) - LOF 3 (11,08 GHz) +# vertical: 12.464 - 12.716 GHz (1. IF: 1744 - 1996 MHz) - LOF 2 (10,72 GHz) +# +# S19.2E 99999 H 10560 t v +# S19.2E 12110 V 11080 t v +# S19.2E 99999 V 10720 t v diff --git a/dvbdevice.c b/dvbdevice.c index 561b6c6..3f38a0a 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 1.97 2004/10/17 09:10:43 kls Exp $ + * $Id: dvbdevice.c 1.100 2004/10/24 11:06:37 kls Exp $ */ #include "dvbdevice.h" @@ -35,7 +35,7 @@ extern "C" { #define DO_REC_AND_PLAY_ON_PRIMARY_DEVICE 1 #define DO_MULTIPLE_RECORDINGS 1 -//#define WAIT_FOR_LOCK_AFTER_TUNING 1 +#define TUNER_LOCK_TIMEOUT 5000 // ms #define DEV_VIDEO "/dev/video" #define DEV_DVB_ADAPTER "/dev/dvb/adapter" @@ -78,6 +78,8 @@ private: bool useCa; time_t startTime; eTunerStatus tunerStatus; + cMutex mutex; + cCondVar locked; cCondWait newSet; bool SetFrontend(void); virtual void Action(void); @@ -86,7 +88,7 @@ public: virtual ~cDvbTuner(); bool IsTunedTo(const cChannel *Channel) const; void Set(const cChannel *Channel, bool Tune, bool UseCa); - bool Locked(void) { return tunerStatus >= tsLocked; } + bool Locked(int TimeoutMs = 0); }; cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType, cCiHandler *CiHandler) @@ -125,7 +127,7 @@ void cDvbTuner::Set(const cChannel *Channel, bool Tune, bool UseCa) if (Tune) tunerStatus = tsSet; else if (tunerStatus == tsCam) - tunerStatus = tsTuned; + tunerStatus = tsLocked; useCa = UseCa; if (Channel->Ca() && tunerStatus != tsCam) startTime = time(NULL); @@ -134,6 +136,14 @@ void cDvbTuner::Set(const cChannel *Channel, bool Tune, bool UseCa) newSet.Signal(); } +bool cDvbTuner::Locked(int TimeoutMs) +{ + cMutexLock MutexLock(&mutex); + if (TimeoutMs && tunerStatus < tsLocked) + locked.TimedWait(mutex, TimeoutMs); + return tunerStatus >= tsLocked; +} + static unsigned int FrequencyToHz(unsigned int f) { while (f && f < 1000000) @@ -253,22 +263,25 @@ void cDvbTuner::Action(void) active = true; while (active) { Lock(); - if (tunerStatus == tsSet) + if (tunerStatus == tsSet) { + dvb_frontend_event event; + while (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0) + ; // discard stale events tunerStatus = SetFrontend() ? tsTuned : tsIdle; - if (tunerStatus == tsTuned) { - fe_status_t status = fe_status_t(0); - CHECK(ioctl(fd_frontend, FE_READ_STATUS, &status)); - if (status & FE_HAS_LOCK) - tunerStatus = tsLocked; } if (tunerStatus != tsIdle) { dvb_frontend_event event; - if (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0) { - if (event.status & FE_REINIT) { - tunerStatus = tsSet; - esyslog("ERROR: frontend %d was reinitialized - re-tuning", cardIndex); + while (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0) { + if (event.status & FE_REINIT) { + tunerStatus = tsSet; + esyslog("ERROR: frontend %d was reinitialized - re-tuning", cardIndex); + } + if (event.status & FE_HAS_LOCK) { + cMutexLock MutexLock(&mutex); + tunerStatus = tsLocked; + locked.Broadcast(); + } } - } } if (ciHandler) { if (ciHandler->Process() && useCa) { @@ -293,7 +306,7 @@ void cDvbTuner::Action(void) } Unlock(); // in the beginning we loop more often to let the CAM connection start up fast - newSet.Wait((ciHandler && (time(NULL) - startTime < 20)) ? 100 : 1000); + newSet.Wait((tunerStatus == tsTuned || ciHandler && (time(NULL) - startTime < 20)) ? 100 : 1000); } } @@ -735,25 +748,29 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) StartTransferMode = false; #endif - // XXX 1.3: use the same mechanism as below (!EITScanner.UsesDevice(this)) - if (EITScanner.Active()) { - StartTransferMode = false; - TurnOnLivePIDs = false; - } - // Turn off live PIDs if necessary: if (TurnOffLivePIDs) TurnOffLiveMode(); + // Set the tuner: + dvbTuner->Set(Channel, DoTune, !EITScanner.UsesDevice(this)); //XXX 1.3: this is an ugly hack - find a cleaner solution//XXX -#ifdef WAIT_FOR_LOCK_AFTER_TUNING - //XXX TODO preliminary fix for the "Unknown picture type" error - time_t t0 = time(NULL); - while (!dvbTuner->Locked() && time(NULL) - t0 < 5) - usleep(100); -#endif + // If this channel switch was requested by the EITScanner we don't wait for + // a lock and don't set any live PIDs (the EITScanner will wait for the lock + // by itself before setting any filters): + + if (EITScanner.UsesDevice(this)) + return true; + + // Wait for a lock: + + if (!dvbTuner->Locked(TUNER_LOCK_TIMEOUT)) { + esyslog("ERROR: no lock for channel %d on device %d", Channel->Number(), CardIndex() + 1); + return false; + } + // PID settings: if (TurnOnLivePIDs) { @@ -1058,7 +1075,7 @@ void cDvbDevice::StillPicture(const uchar *Data, int Length) #define MIN_IFRAME 400000 for (int i = MIN_IFRAME / Length + 1; i > 0; i--) { safe_write(fd_video, Data, Length); - usleep(1); // allows the buffer to be displayed in case the progress display is active + cCondWait::SleepMs(1); // allows the buffer to be displayed in case the progress display is active } #endif } diff --git a/dvbplayer.c b/dvbplayer.c index c9cdc1a..d583fe6 100644 --- a/dvbplayer.c +++ b/dvbplayer.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbplayer.c 1.25 2004/10/15 13:07:55 kls Exp $ + * $Id: dvbplayer.c 1.26 2004/10/23 12:39:35 kls Exp $ */ #include "dvbplayer.h" @@ -490,8 +490,6 @@ void cDvbPlayer::Action(void) break; } } - else//XXX - usleep(1); // this keeps the CPU load low } // Store the frame in the buffer: diff --git a/eit.c b/eit.c index b0cbfdf..8ff51d3 100644 --- a/eit.c +++ b/eit.c @@ -8,7 +8,7 @@ * Robert Schneider and Rolf Hakenes . * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg . * - * $Id: eit.c 1.97 2004/10/16 09:49:13 kls Exp $ + * $Id: eit.c 1.98 2004/10/24 14:56:39 kls Exp $ */ #include "eit.h" @@ -59,6 +59,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data) } else { // We have found an existing event, either through its event ID or its start time. + pEvent->SetSeen(); // If the existing event has a zero table ID it was defined externally and shall // not be overwritten. if (pEvent->TableID() == 0x00) @@ -215,8 +216,10 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data) if (Empty && Tid == 0x4E && getSectionNumber() == 0) // ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running pSchedule->ClrRunningStatus(channel); - if (Modified) + if (Modified) { pSchedule->Sort(); + Schedules->SetModified(pSchedule); + } } // --- cTDT ------------------------------------------------------------------ diff --git a/epg.c b/epg.c index 2768db2..39b029e 100644 --- a/epg.c +++ b/epg.c @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.c 1.19 2004/05/22 12:37:07 kls Exp $ + * $Id: epg.c 1.20 2004/10/24 15:01:50 kls Exp $ */ #include "epg.h" @@ -99,6 +99,11 @@ void cEvent::SetVps(time_t Vps) vps = Vps; } +void cEvent::SetSeen(void) +{ + seen = time(NULL); +} + bool cEvent::HasTimer(void) const { for (cTimer *t = Timers.First(); t; t = Timers.Next(t)) { @@ -478,6 +483,7 @@ cSchedule::cSchedule(tChannelID ChannelID) { channelID = ChannelID; hasRunning = false;; + modified = 0; } cEvent *cSchedule::AddEvent(cEvent *Event) @@ -496,7 +502,7 @@ const cEvent *cSchedule::GetPresentEvent(bool CheckRunningStatus) const if (!CheckRunningStatus) break; } - if (CheckRunningStatus && p->RunningStatus() >= SI::RunningStatusPausing) + if (CheckRunningStatus && time(NULL) - p->Seen() < 30 && p->RunningStatus() >= SI::RunningStatusPausing) return p; } return pe; @@ -643,6 +649,7 @@ bool cSchedule::Read(FILE *f, cSchedules *Schedules) if (!cEvent::Read(f, p)) return false; p->Sort(); + Schedules->SetModified(p); } } else { @@ -680,6 +687,7 @@ cSchedules cSchedules::schedules; const char *cSchedules::epgDataFileName = NULL; time_t cSchedules::lastCleanup = time(NULL); time_t cSchedules::lastDump = time(NULL); +time_t cSchedules::modified = 0; const cSchedules *cSchedules::Schedules(cSchedulesLock &SchedulesLock) { @@ -693,6 +701,12 @@ void cSchedules::SetEpgDataFileName(const char *FileName) epgDataFileName = strdup(FileName); } +void cSchedules::SetModified(cSchedule *Schedule) +{ + Schedule->SetModified(); + modified = time(NULL); +} + void cSchedules::Cleanup(bool Force) { if (Force) diff --git a/epg.h b/epg.h index 9a6547e..6c31049 100644 --- a/epg.h +++ b/epg.h @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.h 1.15 2004/03/14 13:25:39 kls Exp $ + * $Id: epg.h 1.16 2004/10/24 13:56:00 kls Exp $ */ #ifndef __EPG_H @@ -36,6 +36,7 @@ private: time_t startTime; // Start time of this event int duration; // Duration of this event in seconds time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) + time_t seen; // When this event was last seen in the data stream public: cEvent(tChannelID ChannelID, u_int16_t EventID); ~cEvent(); @@ -52,6 +53,7 @@ public: time_t EndTime(void) const { return startTime + duration; } int Duration(void) const { return duration; } time_t Vps(void) const { return vps; } + time_t Seen(void) const { return seen; } bool HasTimer(void) const; bool IsRunning(bool OrAboutToStart = false) const; const char *GetDateString(void) const; @@ -68,6 +70,7 @@ public: void SetStartTime(time_t StartTime); void SetDuration(int Duration); void SetVps(time_t Vps); + void SetSeen(void); void Dump(FILE *f, const char *Prefix = "") const; static bool Read(FILE *f, cSchedule *Schedule); void FixEpgBugs(void); @@ -80,9 +83,12 @@ private: tChannelID channelID; cList events; bool hasRunning; + time_t modified; public: cSchedule(tChannelID ChannelID); tChannelID ChannelID(void) const { return channelID; } + time_t Modified(void) const { return modified; } + void SetModified(void) { modified = time(NULL); } void SetRunningStatus(cEvent *Event, int RunningStatus, cChannel *Channel = NULL); void ClrRunningStatus(cChannel *Channel = NULL); void ResetVersions(void); @@ -117,12 +123,15 @@ private: static const char *epgDataFileName; static time_t lastCleanup; static time_t lastDump; + static time_t modified; public: static void SetEpgDataFileName(const char *FileName); static const cSchedules *Schedules(cSchedulesLock &SchedulesLock); ///< Caller must provide a cSchedulesLock which has to survive the entire ///< time the returned cSchedules is accessed. Once the cSchedules is no ///< longer used, the cSchedulesLock must be destroyed. + static time_t Modified(void) { return modified; } + static void SetModified(cSchedule *Schedule); static void Cleanup(bool Force = false); static void ResetVersions(void); static bool ClearAll(void); diff --git a/font.c b/font.c index eeabd33..29f9494 100644 --- a/font.c +++ b/font.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: font.c 1.8 2004/05/31 09:55:37 kls Exp $ + * $Id: font.c 1.9 2004/10/23 14:06:01 kls Exp $ */ #include "config.h" @@ -28,13 +28,18 @@ #include "fontosd-iso8859-7.c" #include "fontsml-iso8859-7.c" +#include "fontfix-iso8859-15.c" +#include "fontosd-iso8859-15.c" +#include "fontsml-iso8859-15.c" + // --- cFont ----------------------------------------------------------------- static void *FontData[eDvbCodeSize][eDvbFontSize] = { - { FontOsd_iso8859_1, FontFix_iso8859_1, FontSml_iso8859_1 }, - { FontOsd_iso8859_2, FontFix_iso8859_2, FontSml_iso8859_2 }, - { FontOsd_iso8859_5, FontFix_iso8859_5, FontSml_iso8859_5 }, - { FontOsd_iso8859_7, FontFix_iso8859_7, FontSml_iso8859_7 }, + { FontOsd_iso8859_1, FontFix_iso8859_1, FontSml_iso8859_1 }, + { FontOsd_iso8859_2, FontFix_iso8859_2, FontSml_iso8859_2 }, + { FontOsd_iso8859_5, FontFix_iso8859_5, FontSml_iso8859_5 }, + { FontOsd_iso8859_7, FontFix_iso8859_7, FontSml_iso8859_7 }, + { FontOsd_iso8859_15, FontFix_iso8859_15, FontSml_iso8859_15 }, }; static const char *FontCode[eDvbCodeSize] = { @@ -42,6 +47,7 @@ static const char *FontCode[eDvbCodeSize] = { "iso8859-2", "iso8859-5", "iso8859-7", + "iso8859-15", }; eDvbCode cFont::code = code_iso8859_1; diff --git a/font.h b/font.h index b90daf6..5d74f66 100644 --- a/font.h +++ b/font.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: font.h 1.8 2004/05/31 09:52:46 kls Exp $ + * $Id: font.h 1.9 2004/10/23 14:06:37 kls Exp $ */ #ifndef __FONT_H @@ -24,7 +24,8 @@ enum eDvbCode { code_iso8859_2, code_iso8859_5, code_iso8859_7, -#define eDvbCodeSize (code_iso8859_7 + 1) + code_iso8859_15, +#define eDvbCodeSize (code_iso8859_15 + 1) }; class cFont { diff --git a/fontosd-iso8859-2.c b/fontosd-iso8859-2.c index c478361..bf9c0fb 100644 --- a/fontosd-iso8859-2.c +++ b/fontosd-iso8859-2.c @@ -419,8 +419,8 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x00001FFE, // .************ - 0x00001FFE, // .************ + 0x000007F8, // ...********.. + 0x000007F8, // ...********.. 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. @@ -2473,33 +2473,33 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { }, { // 114 8, 27, - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x0000001C, // ....***. - 0x0000007C, // ..*****. - 0x00000070, // ..***... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000060, // ..**.... - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x000000CE, // ..**..***. + 0x000000FE, // ..*******. + 0x000000E0, // ..***..... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x000000C0, // ..**...... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... + 0x00000000, // .......... }, { // 115 12, 27, @@ -4151,35 +4151,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............... 0x00000000, // ............... }, - { // 170 - 9, 27, - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x000000F0, // ..****... - 0x000001F8, // .******.. - 0x00000018, // .....**.. - 0x00000078, // ...****.. - 0x00000198, // .**..**.. - 0x00000198, // .**..**.. - 0x000001FC, // .*******. - 0x000000EC, // ..***.**. - 0x000001F8, // .******.. - 0x000001F8, // .******.. - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... - 0x00000000, // ......... + { // 170 iso8859-2 + 15, 27, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00001838, // ...**.....***.. + 0x00003018, // ..**.......**.. + 0x00003008, // ..**........*.. + 0x00003000, // ..**........... + 0x00003800, // ..***.......... + 0x00001F00, // ...*****....... + 0x00000FF0, // ....********... + 0x000000F8, // ........*****.. + 0x0000001C, // ...........***. + 0x0000000C, // ............**. + 0x0000600C, // .**.........**. + 0x0000300C, // ..**........**. + 0x00003018, // ..**.......**.. + 0x00001FF0, // ...*********... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00000180, // .......**...... + 0x00000F80, // ....*****...... + 0x00000700, // .....***....... }, { // 171 14, 27, @@ -4631,36 +4631,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............ 0x00000000, // ............ }, - - { // 186 - 8, 27, - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000078, // ..****.. - 0x0000007C, // ..*****. - 0x000000C6, // .**...** - 0x000000C6, // .**...** - 0x000000C6, // .**...** - 0x000000C6, // .**...** - 0x0000007C, // ..*****. - 0x00000038, // ...***.. - 0x000000FC, // .******. - 0x000000FC, // .******. - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ + { // 186 iso8859-2 + 12, 27, + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. + 0x000003F0, // ...******.... + 0x000007F8, // ..********... + 0x00000C18, // .**.....**... + 0x00000C00, // .**.......... + 0x00000E00, // .***......... + 0x000007E0, // ..******..... + 0x000001F8, // ....******... + 0x0000001C, // ........***.. + 0x00000C0C, // .**......**.. + 0x00000C0C, // .**......**.. + 0x00000FF8, // .*********... + 0x000003F0, // ...******.... + 0x00000000, // ............. + 0x000001E0, // ....****..... + 0x00000060, // ......**..... + 0x000003E0, // ...*****..... + 0x000001C0, // ....***...... }, { // 187 6, 27, @@ -4902,12 +4901,12 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............... 0x00000000, // ............... }, - { // 195 + { // 195 iso8859-2 15, 27, 0x00000000, // ............... - 0x00000720, // .....***..*.... - 0x00000FE0, // ....*******.... - 0x00000040, // .........*..... + 0x00000C30, // ....**...**.... + 0x00000660, // .....**.**..... + 0x00000380, // ......***...... 0x00000000, // ............... 0x00000380, // ......***...... 0x000003C0, // ......****..... @@ -5233,34 +5232,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ....... }, { // 206 - 6, 27, - 0x00000030, // ..**... - 0x00000078, // .****.. - 0x0000004C, // .*..**. - 0x000000C4, // **...*. - 0x00000000, // ....... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000030, // ..**... - 0x00000000, // ....... - 0x00000000, // ....... - 0x00000000, // ....... - 0x00000000, // ....... - 0x00000000, // ....... + 7, 27, + 0x00000030, // ..**.... + 0x00000078, // .****... + 0x00000048, // .*..*... + 0x000000CC, // **..**.. + 0x00000000, // ........ + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000000, // ........ + 0x00000000, // ........ + 0x00000000, // ........ + 0x00000000, // ........ + 0x00000000, // ........ }, { // 207 6, 27, @@ -5712,35 +5711,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............... 0x00000000, // ............... }, - { // 222 - 15, 27, - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... - 0x00003000, // ..**........... - 0x00003000, // ..**........... - 0x00003000, // ..**........... - 0x00003FF0, // ..**********... - 0x00003FF8, // ..***********.. - 0x0000301C, // ..**.......***. - 0x0000300C, // ..**........**. - 0x0000300C, // ..**........**. - 0x0000300C, // ..**........**. - 0x0000300C, // ..**........**. - 0x00003038, // ..**......***.. - 0x00003FF8, // ..***********.. - 0x00003FF0, // ..**********... - 0x00003000, // ..**........... - 0x00003000, // ..**........... - 0x00003000, // ..**........... - 0x00003000, // ..**........... - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... + { // 222 iso8859-2 + 14, 27, + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00007FFE, // ************** + 0x00007FFE, // ************** + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000180, // ......**...... + 0x00000000, // .............. + 0x000003C0, // .....****..... + 0x000000C0, // .......**..... + 0x000006C0, // ....**.**..... + 0x00000380, // .....***...... }, { // 223 14, 27, @@ -5862,16 +5861,16 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. }, - { // 227 + { // 227 iso8859-2 13, 27, 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x00000300, // ....**....... - 0x000007F0, // ...*******... - 0x000004E0, // ...*..***.... + 0x00000630, // ...**...**... + 0x00000360, // ....**.**.... + 0x000001C0, // .....***..... 0x00000000, // ............. 0x00000000, // ............. 0x000003E0, // ....*****.... @@ -6672,35 +6671,35 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000F00, // .****....... 0x00000E00, // .***........ }, - { // 254 - 13, 27, - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00001800, // .**.......... - 0x00001800, // .**.......... - 0x00001800, // .**.......... - 0x00001800, // .**.......... - 0x00001BE0, // .**.*****.... - 0x00001FF8, // .**********.. - 0x00001E38, // .****...***.. - 0x00001C1C, // .***.....***. - 0x0000180C, // .**.......**. - 0x0000180C, // .**.......**. - 0x0000180C, // .**.......**. - 0x0000180C, // .**.......**. - 0x00001C1C, // .***.....***. - 0x00001E38, // .****...***.. - 0x00001FF8, // .**********.. - 0x000019E0, // .**..****.... - 0x00001800, // .**.......... - 0x00001800, // .**.......... - 0x00001800, // .**.......... - 0x00001800, // .**.......... - 0x00001800, // .**.......... + { // 254 iso8859-2 + 6, 27, + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x0000007E, // ****** + 0x0000007E, // ****** + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x00000018, // ..**.. + 0x0000001E, // ..**** + 0x0000001E, // ..**** + 0x00000000, // ...... + 0x0000001E, // ..**** + 0x00000006, // ....** + 0x00000036, // .**.** + 0x0000001C, // ..***. }, { // 255 12, 27, diff --git a/fontsml-iso8859-2.c b/fontsml-iso8859-2.c index f33afd6..ce5b35e 100644 --- a/fontsml-iso8859-2.c +++ b/fontsml-iso8859-2.c @@ -2132,30 +2132,30 @@ cFont::tPixelData FontSml_iso8859_2[][25] = { 0x0000000C, // ........**. }, { // 114 - 6, 23, - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000036, // .**.** - 0x00000036, // .**.** - 0x00000038, // .***.. - 0x00000030, // .**... - 0x00000030, // .**... - 0x00000030, // .**... - 0x00000030, // .**... - 0x00000030, // .**... - 0x00000030, // .**... - 0x00000030, // .**... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... + 9, 23, + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x000000CC, // .**..**.. + 0x000000F8, // .*****... + 0x000000E0, // .***..... + 0x000000C0, // .**...... + 0x000000C0, // .**...... + 0x000000C0, // .**...... + 0x000000C0, // .**...... + 0x000000C0, // .**...... + 0x000000C0, // .**...... + 0x000000C0, // .**...... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... + 0x00000000, // ......... }, { // 115 9, 23, @@ -5356,12 +5356,12 @@ cFont::tPixelData FontSml_iso8859_2[][25] = { 0x00000000, // .... }, { // 238 - 4, 23, - 0x00000000, // ..... - 0x00000000, // ..... - 0x00000000, // ..... - 0x00000000, // ..... - 0x00000000, // ..... + 6, 23, + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... 0x00000018, // ..**.. 0x0000003C, // .****. 0x00000066, // **..** @@ -5376,10 +5376,10 @@ cFont::tPixelData FontSml_iso8859_2[][25] = { 0x00000018, // ..**.. 0x00000018, // ..**.. 0x00000018, // ..**.. - 0x00000000, // ..... - 0x00000000, // ..... - 0x00000000, // ..... - 0x00000000, // ..... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... + 0x00000000, // ...... }, { // 239 14, 23, diff --git a/genfontfile.c b/genfontfile.c index 41d87b7..bc171cf 100644 --- a/genfontfile.c +++ b/genfontfile.c @@ -179,7 +179,7 @@ SuckGlyphsFromServer(Display * dpy, Font font) charHeight = charinfo->ascent + charinfo->descent; spanLength = (charWidth + 7) / 8; } - bitmapData = calloc(height * spanLength, sizeof(char)); + bitmapData = (unsigned char *)calloc(height * spanLength, sizeof(char)); if (!bitmapData) goto FreeFontAndReturn; DEBUG_GLYPH4("index %d, glyph %d (%d by %d)\n", diff --git a/i18n.c b/i18n.c index e3f4637..f325d57 100644 --- a/i18n.c +++ b/i18n.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.159 2004/10/16 13:20:56 kls Exp $ + * $Id: i18n.c 1.160 2004/10/23 13:57:38 kls Exp $ * * Translations provided by: * @@ -19,7 +19,7 @@ * Spanish Ruben Nunez Francisco * Greek Dimitrios Dimitrakos * Swedish Tomas Prybil and Jan Ekholm - * Romanian Paul Lacatus + * Romanian Paul Lacatus , Lucian Muresan * Hungarian Istvan Koenigsberger and Guido Josten * Catalanian Marc Rovira Vall , Ramon Roca and Jordi Vilà * Russian Vyacheslav Dikonov @@ -92,7 +92,7 @@ const tI18nPhrase Phrases[] = { "Español", "ÅëëçíéêÜ", // Greek "Svenska", - "Romaneste", + "Românã", "Magyar", "Català", "ÀãááÚØÙ", // Russian @@ -113,7 +113,7 @@ const tI18nPhrase Phrases[] = { "iso8859-1", "iso8859-7", "iso8859-1", - "iso8859-1", + "iso8859-2", "iso8859-1", "iso8859-1", "iso8859-5", @@ -134,7 +134,7 @@ const tI18nPhrase Phrases[] = { "esl,spa", "ell,gre", "sve,swe", - "ron,rum", + "rom,rum", "hun", "cat,cln", "rus", @@ -175,7 +175,7 @@ const tI18nPhrase Phrases[] = { "Guía de Programación", "Ðñüãñáììá", "Program", - "Program", + "Program (EPG)", "Program", "Guia de Programació", "ÂÕÛÕÓØÔ", @@ -215,7 +215,7 @@ const tI18nPhrase Phrases[] = { "Timer", "×ñïíïäéáêüðôçò", "Timers", - "Timere", + "Timer-e", "Felvétel beprogramozása", "Temporitzadors", "ÂÐÙÜÕàë", @@ -235,7 +235,7 @@ const tI18nPhrase Phrases[] = { "Grabaciones", "ÅããñáöÝò", "Inspelningar", - "Inregistrari", + "Înregistrãri", "Felvett adások", "Veure programes gravats", "·ÐßØáØ", @@ -255,7 +255,7 @@ const tI18nPhrase Phrases[] = { "Configuración", "Ñõèìéóåéò", "Inställningar", - "Setari", + "Configuraþie", "Beállítások", "Configuració", "½ÐáâàÞÙÚÐ", @@ -295,7 +295,7 @@ const tI18nPhrase Phrases[] = { "Órdenes de grabación", "ÅíôïëÝò ãéÜ åããñáöÝò", "Inspelningskommandon", - "",// TODO + "Comenzi înregistrare", "Parancsok a felvett filmekhez", "Ordres de gravació", "ºÞÜÐÝÔë ×ÐßØáØ", @@ -315,7 +315,7 @@ const tI18nPhrase Phrases[] = { "Modificar canal", "ÐñïóáñìïãÝò Êáíáëéïý", "Ändra kanal", - "Editare canale", + "Modificare canal", "Csatornák beállítása", "Editar canal", "ÀÕÔÐÚâØàÞÒÐÝØÕ ÚÐÝÐÛÐ", @@ -335,7 +335,7 @@ const tI18nPhrase Phrases[] = { "Modificar timer", "ÐñïóáñìïãÞ ÷ñïíïäéáêüðôç", "Ändra timer", - "Editare timere", + "Modificare timer", "Felvétel beprogramozásának megváltoztatása", "Editar temporitzador", "ÃáâÐÝÞÒÚÐ âÐÙÜÕàÐ", @@ -355,7 +355,7 @@ const tI18nPhrase Phrases[] = { "Evento", "ÅêðïìðÞ", "Sändning", - "Evenimente", + "Emisiune", "Adás", "Esdeveniment", "¿ÕàÕÔÐçÐ", @@ -375,7 +375,7 @@ const tI18nPhrase Phrases[] = { "Resúmen", "Ðåñéå÷üìåíï", "Sammanfattning", - "Cuprins", + "Detalii", "Tartalom", "Sinopsi", "¾ßØáÐÝØÕ", @@ -395,7 +395,7 @@ const tI18nPhrase Phrases[] = { "Programa - %s", "Ðñüãñáììá - %s", "Program - %s", - "Program - %s", + "Programul canalului %s", "Program - %s", "Guia de Programació - %s", "¿àÞÓàÐÜÜÐ - %s", @@ -415,7 +415,7 @@ const tI18nPhrase Phrases[] = { "¿Qué hay ahora?", "ÔñÝ÷ïí ðñüãñáììá", "Vilket program sänds nu?", - "Programul actual?", + "Ce emisiuni sunt acum?", "Mi megy most?", "Què fan ara?", "ÁÕÙçÐá Ò íäØàÕ:", @@ -435,7 +435,7 @@ const tI18nPhrase Phrases[] = { "¿Qué hay proximo?", "Åðüìåíï ðñüãñáììá", "Vilket är nästa program?", - "Programul urmator?", + "Ce emisiuni urmeazã?", "Mi következik?", "Què fan després?", "´ÐÛÕÕ Ò ßàÞÓàÐÜÜÕ:", @@ -456,7 +456,7 @@ const tI18nPhrase Phrases[] = { "Modificar", "ÐñïóáñìïãÞ", "Ändra", - "Modificare", + "Modificã", "Beállítani", "Editar", "ÀÕÔÐÚâØàÞÒÐâì", @@ -496,7 +496,7 @@ const tI18nPhrase Phrases[] = { "Borrar", "ÄéáãñáöÞ", "Ta bort", - "Sterge", + "ªterge", "Törölni", "Esborrar", "ÃÔÐÛØâì", @@ -516,7 +516,7 @@ const tI18nPhrase Phrases[] = { "Marcar", "ÅðéëïãÞ", "Märk", - "Marcheaza", + "Marcheazã", "Megjelölni", "Marcar", "¿ÕàÕÜÕáâØâì", @@ -536,7 +536,7 @@ const tI18nPhrase Phrases[] = { "On/Off", "Aíïé÷/Këåéóôü", "På/Av", - "Pornit/Oprit", + "Act./Inact.", "Be/Ki", "On/Off", "²ÚÛ/²ëÚÛ", @@ -556,7 +556,7 @@ const tI18nPhrase Phrases[] = { "Grabar", "ÅããñáöÞ", "Inspelning", - "Inregistrare", + "Înregistr.", "Felvenni", "Gravar", "·ÐßØáì", @@ -596,7 +596,7 @@ const tI18nPhrase Phrases[] = { "Rebobinar", "Áñ÷Þ", "Återspolning", - "Inapoi", + "Înapoi", "Vissza az elejére", "Enrera", "½Ð×ÐÔ", @@ -636,7 +636,7 @@ const tI18nPhrase Phrases[] = { "Continuar", "ÓõíÝ÷åéá", "Fortsätt", - "Reia", + "Revenire", "Tovább", "Continuar", "¿àÞÔÞÛÖØâì", @@ -696,7 +696,7 @@ const tI18nPhrase Phrases[] = { "Cambiar", "AëëáãÞ", "Byt", - "Schimba", + "Comutã", "Átkapcsolni", "Canviar", "¿ÕàÕÚÛîçØâì", @@ -736,7 +736,7 @@ const tI18nPhrase Phrases[] = { "Siguiente", "Åðüìåíï", "Nästa", - "Urmator", + "Urmãtor", "Következö", "Següent", "´ÐÛÕÕ", @@ -796,7 +796,7 @@ const tI18nPhrase Phrases[] = { "Expulsar", "ÅîáãùãÞ", "Mata ut", - "Ejecteaza", + "Ejecteazã", "Kidobni", "Expulsar", "¸×ÒÛÕçì", @@ -836,7 +836,7 @@ const tI18nPhrase Phrases[] = { "Insertar", "ÅéóáãùãÞ", "Infoga", - "Insereaza", + "Insereazã", "Beilleszteni", "Inserir", "²áâÐÒÚÐ", @@ -896,7 +896,7 @@ const tI18nPhrase Phrases[] = { "Reiniciar", "ÅðáíáöïñÜ", "Återställ", - "",//TODO + "Resetare", "Reset", "Reiniciar", "ÁÑàÞá", @@ -916,7 +916,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO - "",//TODO + "Cãutare canale", "",//TODO "",//TODO "ÁÚÐÝØàÞÒÐâì", @@ -937,7 +937,7 @@ const tI18nPhrase Phrases[] = { "¿Eliminar canal?", "ÄéáãñáöÞ êáíáëéïý?", "Ta bort kanalen?", - "Sterg canalul?", + "ªterg canalul?", "Csatorna törlése?", "Esborrar el canal?", "ÃÔÐÛØâì ÚÐÝÐÛ?", @@ -957,7 +957,7 @@ const tI18nPhrase Phrases[] = { "¿Eliminar timer?", "ÄéáãñáöÞ ÷ñïíïäéáêüðôç?", "Ta bort timern?", - "Sterg timer-ul?", + "ªterg timer-ul?", "Felvétel beprogramozásának törlése?", "Esborrar el temporitzador?", "ÃÔÐÛØâì âÐÙÜÕà?", @@ -977,7 +977,7 @@ const tI18nPhrase Phrases[] = { "¿Eliminar grabacion?", "ÄéáãñáöÞ áñ÷åßïõ?", "Ta bort inspelningen?", - "Sterg inregistrarea?", + "ªterg înregistrarea?", "Felvétel törlése?", "Esborrar gravació?", "ÁâÕàÕâì ×ÐßØáì?", @@ -997,7 +997,7 @@ const tI18nPhrase Phrases[] = { "¿Timer activo - de verdad eliminarlo?", "×ñïíïäéáêüðôçò óÝ åîÝëéîç - ÄéáãñáöÞ óßãïõñá?", "Timerstyrd inspelning pågår - Avbryta ändå?", - "Timer-ul in inregistrare - sterg?", + "Timer-ul tocmai înregistreazã - ºterg, totuºi?", "Felvétel folyamatban van - mégis törölni?", "Temporitzador activat - Esborrar de totes maneres?", "¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã - ÔÕÙáâÒØâÕÛìÝÞ ãÔÐÛØâì?", @@ -1017,7 +1017,7 @@ const tI18nPhrase Phrases[] = { "¿Parar grabación?", "Áêýñùóç åããñáöÞò?", "Stanna inspelning?", - "Opresc inregistrarea?", + "Opresc înregistrarea?", "Felvétel befejezni?", "Aturar la gravació?", "¿àÕÚàÐâØâì ×ÐßØáì?", @@ -1037,7 +1037,7 @@ const tI18nPhrase Phrases[] = { "en interface primario", "óôÞí êýñéá êÜñôá", "från den första enheten?", - "pe prima interfata", + "pe prima interfaþã", "az elsö kártyán", "a la interfície primària", "ÝÐ ÞáÝÞÒÝÞÜ ãáâàÞÙáâÒÕ", @@ -1057,7 +1057,7 @@ const tI18nPhrase Phrases[] = { "¿Cancelar modificación?", "Aêýñùóç åðåîåñãáóßáò?", "Avbryta redigeringen?", - "Opresc editarea?", + "Opresc montajul înregistrãrii?", "Vágást befejezni?", "Cancel·lar l'edició?", "¿àÕàÒÐâì àÕÔÐÚâØàÞÒÐÝØÕ?", @@ -1077,7 +1077,7 @@ const tI18nPhrase Phrases[] = { "¿De verdad reiniciar?", "Ná ãßíåé óßãïõñá åðáíåêêßíçóç?", "Vill du verkligen starta om?", - "Esti sigur de repornire?", + "Sigur repornesc?", "Tényleg újraindítani?", "Segur que voleu reiniciar?", "´ÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?", @@ -1097,7 +1097,7 @@ const tI18nPhrase Phrases[] = { "Grabando - ¿reiniciar?", "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé åðáíåêêßíçóç?", "Inspelning pågår, vill du ändå starta om?", - "In inregistrare - repornesc?", + "Tocmai se înregistreazã - repornesc, totuºi?", "Felvétel folyamatban van - mégis újraindítani?", "Gravant - Reiniciar de totes maneres?", "¸Ôñâ ×ÐßØáì - ÔÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?", @@ -1117,7 +1117,7 @@ const tI18nPhrase Phrases[] = { "Grabando - ¿apagar?", "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé ôåñìáôéóìüò?", "Inspelning pågår, vill du ändå avbryta?", - "In inregistrare - opresc?", + "Tocmai se înregistreazã - închid, totuºi?", "Felvétel folyamatban van - mégis kikapcsolni?", "Gravant - Apagar de totes maneres?", "¸Ôñâ ×ÐßØáì - ÔÕÙáâÒØâÕÛìÝÞ ÒëÚÛîçØâì?", @@ -1137,7 +1137,7 @@ const tI18nPhrase Phrases[] = { "Grabando en %d minutos, ¿de verdad apagar?", "ÁíáìÝíåôáé åããñáöÞ óÝ %d ëåðôÜ - ÔåëéêÜ íá ôåñìáôéóôåé?", "Inspelning startar om %d minuter, vill du avsluta?", - "Inregistrez in %d minute, opresc?", + "Înregistrez peste %d minute - închid, totuºi?", "Felvétel %d perc mulva kezdödik - mégis kikapcsolni?", "Hi ha una gravació en %d minuts - Apagar de totes maneres?", "ÇÕàÕ× %d ÜØÝãâ ÝÐçÝñâáï ×ÐßØáì - ÔÕÙáâÒØâÕÛìÝÞ ÒëÚÛîçØâì?", @@ -1157,7 +1157,7 @@ const tI18nPhrase Phrases[] = { "Pulse una tecla para interrumpir apagar", "Ðßåóå Ýíá ðëÞêôñï ãéÜ áêýñùäç ôåñìáôéóìïý", "Tryck valfri knapp för att återkalla avstängningen", - "Apasa orice tasta pentru a anula inchiderea", + "Apasã orice tastã pentru a anula închiderea", "Nyomj egy gombot a leállás megállításához", "Prem qualsevol tecla per cancel·lar l'aturada", "½ÐÖÜØâÕ ÛîÑãî ÚÝÞßÚã çâÞÑë ÞâÜÕÝØâì ÒëÚÛîçÕÝØÕ.", @@ -1198,7 +1198,7 @@ const tI18nPhrase Phrases[] = { "Frecuencia", "Óõ÷íüôçôá", "Frekvens", - "Frecventa", + "Frecvenþã", "Frekvencia", "Freqüència", "ÇÐáâÞâÐ", @@ -1238,7 +1238,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "Äéåñåýíçóç", "Källa", - "",//TODO + "Sursã", "Forrás", "Origen", "¸áâÞçÝØÚ", @@ -1258,7 +1258,7 @@ const tI18nPhrase Phrases[] = { "Srate", "Srate", "Symbolrate", - "Rata simboluri", + "Ratã simboluri", "Srate", "Srate", "ÁØÜÒ. áÚÞàÞáâì", @@ -1418,7 +1418,7 @@ const tI18nPhrase Phrases[] = { "CA", "CA", "Kortläsare", - "Criptare", + "CA (Acces Condiþional)", "CA", "Accés Condicional", "CA (ÔÕÚÞÔÕà)", @@ -1458,7 +1458,7 @@ const tI18nPhrase Phrases[] = { "Inversion", "Inversion", "Inversion", - "Inversion", + "Inversiune", "Inversion", "Inversió", "¸ÝÒÕàáØï", @@ -1478,7 +1478,7 @@ const tI18nPhrase Phrases[] = { "Bandwidth", "Bandwidth", "Bandbredd", - "Bandwidth", + "Lãrgime de bandã", "Bandwidth", "Amplada de banda", "´ØÐßÐ×ÞÝ", @@ -1538,7 +1538,7 @@ const tI18nPhrase Phrases[] = { "Modulation", "Modulation", "Modulation", - "Modulation", + "Modulaþie", "Modulation", "Modulació", "¼ÞÔãÛïæØï", @@ -1558,7 +1558,7 @@ const tI18nPhrase Phrases[] = { "Transmission", "Transmission", "Transmission", - "Transmission", + "Transmisiune", "Transmission", "Transmissió", "¿ÕàÕÔÐçÐ", @@ -1598,7 +1598,7 @@ const tI18nPhrase Phrases[] = { "Hierarchy", "Hierarchy", "Hierarchy", - "Hierarchy", + "Ierarhie", "Hierarchy", "Jerarquia", "¸ÕàÐàåØï", @@ -1679,7 +1679,7 @@ const tI18nPhrase Phrases[] = { "Comienzo", "Áñ÷Þ", "Börjar", - "Start", + "Început", "Kezdet", "Inici", "½ÐçÐÛÞ", @@ -1699,7 +1699,7 @@ const tI18nPhrase Phrases[] = { "Fin", "ÔÝëïò", "Slutar", - "Stop", + "Sfârºit", "Vége", "Fi", "ºÞÝÕæ", @@ -1719,7 +1719,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "VPS", "",// TODO "",// TODO "VPS ßÞßàÐÒÚÐ", @@ -1759,7 +1759,7 @@ const tI18nPhrase Phrases[] = { "Durabilidad", "ÄéÝñêåéá ÐáñáìïíÞò", "Livstid", - "Durata", + "Timp de pãstrare", "Élettartam", "Durada", "ÁàÞÚ åàÐÝÕÝØï", @@ -1779,7 +1779,7 @@ const tI18nPhrase Phrases[] = { "Fichero", "Áñ÷åßï", "Filnamn", - "Fisier", + "Fiºier", "File", "Arxiu", "ÄÐÙÛ", @@ -1860,7 +1860,7 @@ const tI18nPhrase Phrases[] = { "¡Timer esta grabando!", "Ãßíåôáé ðñïãñáìáôéóìÝíç åããñáöÞ!", "Timerstyrd inspelning pågår!", - "Timer-ul este in inregistrare!", + "Timer-ul tocmai înregistreazã!", "Felvétel folyamatban van!", "El temporitzador està gravant!", "¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã!", @@ -1880,7 +1880,7 @@ const tI18nPhrase Phrases[] = { "¡Error al acceder a la grabación!", "Ðñüâëçìá óôÞí ðñïóðÝëáóç åããñáöÞò!", "Inspelningen går inte att läsa!", - "Eroare in timpul accesarii inregistrarii", + "Eroare la accesarea înregistrãrii", "Hiba a felvétel hozzáférésénél", "Error a l'accedir a la gravació!", "¾èØÑÚÐ ÔÞáâãßÐ Ú ×ÐßØáØ!", @@ -1900,7 +1900,7 @@ const tI18nPhrase Phrases[] = { "¡Error al borrar la grabación!", "ËÜèïò êáôÜ ôÞí äéáãñáöÞ ôïõ áñ÷åßïõ!", "Inspelningen går inte att ta bort!", - "Eroare in timpul stergerii inregistrarii!", + "Eroare la ºtergerea înregistrãrii!", "Hiba a felvétel törlésénél!", "Error a l'esborrar la gravació!", "¾èØÑÚÐ ãÔÐÛÕÝØï ×ÐßØáØ!", @@ -1940,7 +1940,7 @@ const tI18nPhrase Phrases[] = { "¡No hay dispositivo DVB disponible para grabar!", "ÁíåðÜñêåéá DVB ÊÜñôáò ãéÜ åããñáöÞ!", "Det finns ingen ledig DVB enhet för inspelning!", - "Nu mai sunt dispozitive DVB pentru inregistrare!", + "Nu mai sunt dispozitive DVB disponibile pentru înregistrare!", "Nincs szabad DVB kártya a felvételhez!", "No hi ha cap dispositiu DVB lliure per gravar!", "½Õâ áÒÞÑÞÔÝÞÓÞ DVB-ãáâàÞÙáâÒÐ ÔÛï ×ÐßØáØ!", @@ -1960,7 +1960,7 @@ const tI18nPhrase Phrases[] = { "!Canal no disponible!", "Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!", "Kanalen ej tillgänglig!", - "",//TODO + "Canal indisponibil", "A csatorna nem elérhetö", "Canal no disponible!", "ºÐÝÐÛ ÝÕÔÞáâãßÕÝ!", @@ -1980,7 +1980,7 @@ const tI18nPhrase Phrases[] = { "!Propiedades de canal duplicadas!", "Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!", "Kanalinställningarna är ej unika!", - "",//TODO + "Parametrii canalului nu sunt univoci!", "A csatornabeállítások nem egyértelmüek", "Propietats del canal duplicades!", "½ÐáâàÞÙÚØ ÚÐÝÐÛÐ ÝÕ ãÝØÚÐÛìÝë!", @@ -2000,7 +2000,7 @@ const tI18nPhrase Phrases[] = { "¡Canal bloqueado (grabando)!", "Ôï êáíÜëé åßíáé áðïó÷ïëéìÝíï (Ãßíåôå åããñáöÞ)!", "Kanalen är låst (inspelning pågår)!", - "Canal blocat (inregistrare)!", + "Canal blocat (înregistrare)!", "Csatorna hozzáférhetetlen (felvétel)!", "Canal bloquejat (gravant)!", "ºÐÝÐÛ ×ÐÑÛÞÚØàÞÒÐÝ (ØÔñâ ×ÐßØáì)!", @@ -2020,7 +2020,7 @@ const tI18nPhrase Phrases[] = { "¡No puedo iniciar modo de transferencia!", "Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!", "Kan inte starta Transfer Mode!", - "Nu pot porni Modul de Transfer!", + "Nu pot porni modul de transfer!", "Transfer-Mode nem indítható!", "No puc iniciar el mode de transferència!", "½ÕÒÞ×ÜÞÖÝÞ ÒÚÛîçØâì àÕÖØÜ ßàÞßãáÚÐ!", // ??? @@ -2040,7 +2040,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "ÄÝí Ý÷ïõí ïñéóôåß óçìåßá åðåîåñãáóßáò", "Det finns inga redigeringsmärken",//TODO - "",//TODO + "Nu s-au pus marcaje de montaj pentru aceastã înregistrare", "A vágópont nincs kijelölve",//TODO "No hi ha marques d'edició definides", "½Õ ×ÐÔÐÝë ÜÕâÚØ ÔÛï ÜÞÝâÐÖÐ!", @@ -2060,7 +2060,7 @@ const tI18nPhrase Phrases[] = { "¡No puedo iniciar proceso de modificación!", "Áäõíáìßá åêêßíçóçò ôçò åðåîåñãáóßáò!", "Kan inte starta redigering!", - "Nu pot porni procesul de editare!", + "Nu pot porni montajul înregistrãrii!", "A vágás nem indítható!", "No puc iniciar el procés d'edició!", "½ÕÒÞ×ÜÞÖÝÞ ÝÐçÐâì ÜÞÝâÐÖ ×ÐßØáØ!", @@ -2080,7 +2080,7 @@ const tI18nPhrase Phrases[] = { "¡Proceso de modificación ya fue iniciado!", "Åðåîåñãáóßá âñßóêåôáé óÝ åîÝëéîç!", "Redigeringen är redan aktiv!", - "Procesul de editare este activ!", + "Montajul înregistrãrii este deja activ!", "A vágás már aktivált!", "Procés d'edició iniciat anteriorment!", "¿àÞæÕáá ÒØÔÕÞÜÞÝâÐÖÐ ãÖÕ ×ÐßãéÕÝ!", @@ -2100,7 +2100,7 @@ const tI18nPhrase Phrases[] = { "¡No puedo apagar - opción '-s' ausente!", "Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!", "Kan inte avsluta, måste använda parameter '-s'", - "Nu pot opri calculatorul - vezi optiunea '-s'", + "Nu pot închide - vezi opþiunea '-s'", "A leállítás nem lehetséges - Opció '-s' hiányzik!", "No puc apagar, falta la opció -s !", "²ëÚÛîçÕÝØÕ ÝÕÒÞ×ÜÞÖÝÞ - ÝÕ ×ÐÔÐÝ ßÐàÐÜÕâà '-s'!", @@ -2120,7 +2120,7 @@ const tI18nPhrase Phrases[] = { "¡Disco casi lleno", "Ï óêëçñüò êïíôåýåé íÜ ãåìßóåé!", "Lågt diskutrymme!", - "Spatiu scazut pe disc!", + "Spaþiul pe disc e foarte scãzut!", "A merev lemez majdnem tele!", "Disc gairebé ple!", "½ÕÔÞáâÐâÞçÝÞ ÜÕáâÐ ÝÐ ÔØáÚÕ!", @@ -2140,7 +2140,7 @@ const tI18nPhrase Phrases[] = { "¡No pudeo acceder al menú de la CAM!", "Áäýíáôç ç ðñüóâáóç óôü CAM ìåíïý!", "Det går inte att öppna CAM menyn!", - "",//TODO + "Nu pot deschide meniul CAM", "A CAM-Menü nem nyitható", "No puc obrir el menú de la CAM!", "¼ÕÝî CAM-ÜÞÔãÛï ÝÕÔÞáâãßÝÞ!", @@ -2160,7 +2160,7 @@ const tI18nPhrase Phrases[] = { "¡No puedo reiniciar la CAM!", "Áäýíáôï íá ãßíåé åðáíáöïñÜ óôü CAM", "Kan inte återställa CAM!", - "",//TODO + "Nu pot reseta CAM", "A CAM-Reset nem sikerült", "No puc reiniciar la CAM!", "¾èØÑÚÐ ßÕàÕ×ÐßãáÚÐ CAM-ÜÞÔãÛï!", @@ -2180,7 +2180,7 @@ const tI18nPhrase Phrases[] = { "CAM reiniciada", "Óôï CAM Ýãéíå åðáíáöïñÜ", "CA modulen har återställts", - "",//TODO + "CAM-ul a fost resetat", "A CAM vissza lett állítva", "CAM reiniciada", "CAM-ÜÞÔãÛì ßÕàÕ×ÐßãéÕÝ!", @@ -2241,7 +2241,7 @@ const tI18nPhrase Phrases[] = { "DVB", "DVB", "DVB", - "Placa DVB", + "Dispozitiv DVB", "DVB", "Tarja DVB", "DVB", @@ -2281,7 +2281,7 @@ const tI18nPhrase Phrases[] = { "CICAM", "CICAM", "CICAM", - "Acces conditionat", + "CICAM", "CICAM", "CI Accés condicional", "ÃáÛÞÒÝëÙ ÔÞáâãß", @@ -2301,7 +2301,7 @@ const tI18nPhrase Phrases[] = { "Opciones de Grabación", "ÅããñáöÞ", "Inspelning", - "Inregistrare", + "Înregistrare", "Felvétel", "Opcions de Gravació", "·ÐßØáì", @@ -2361,7 +2361,7 @@ const tI18nPhrase Phrases[] = { "Plugins", "Âßóìáôá", "Moduler", - "Plugins", + "Plugin-uri", "Plugins", "Plugins", "¼ÞÔãÛØ àÐáèØàÕÝØï", @@ -2381,7 +2381,7 @@ const tI18nPhrase Phrases[] = { "Plugin", "Âßóìá", "Modul", - "Plugin", + "Plugin (modul adiþional)", "Plugin", "Plugin", "¼ÞÔãÛì", @@ -2401,7 +2401,7 @@ const tI18nPhrase Phrases[] = { "Reiniciar", "Åðáíåêêßíçóç", "Omstart", - "Restart", + "Repornire", "Ùjraindítás", "Reiniciar", "¿ÕàÕ×ÐßãáâØâì", @@ -2442,7 +2442,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Skin", "",// TODO "",// TODO "ÁâØÛì", @@ -2462,7 +2462,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Temã", "",// TODO "",// TODO "¿ÐÛØâàÐ", @@ -2482,7 +2482,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Stânga", "",// TODO "",// TODO "¾âáâãß áÛÕÒÐ", @@ -2502,7 +2502,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Sus", "",// TODO "",// TODO "¾âáâãß áÒÕàåã", @@ -2522,7 +2522,7 @@ const tI18nPhrase Phrases[] = { "Anchura", "ÌÜêñïò", "Bredd", - "Latime OSD", + "Lãþime OSD", "Szélesség", "Amplada", "ÈØàØÝÐ", @@ -2542,7 +2542,7 @@ const tI18nPhrase Phrases[] = { "Altura", "¾øïò", "Höjd", - "Inaltime OSD", + "Înãlþime OSD", "Magasság", "Alçada", "²ëáÞâÐ", @@ -2562,7 +2562,7 @@ const tI18nPhrase Phrases[] = { "Duración muestra mensajes (s)", "×ñüíïò Ýíäåéîçò ìõíçìÜôùí (ä)", "Tid för meddelanden (sek)", - "Timp afisare mesaj (sec)", + "Timp afiºare mesaje (sec)", "Információ feltüntetésének idötartama", "Durada dels missatges (s)", "´ÛØâÕÛìÝÞáâì ßÞÚÐ×Ð áÞÞÑéÕÝØÙ (áÕÚ)", @@ -2582,7 +2582,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Utilizare fonturi mici", "",// TODO "",// TODO "¸áßÞÛì×ÞÒÐâì ÜÕÛÚØÙ èàØäâ", @@ -2602,7 +2602,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "niciodatã", "",// TODO "",// TODO "ÝØÚÞÓÔÐ", @@ -2622,7 +2622,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "dep. de skin", "",// TODO "",// TODO "áÞÓÛÐáÝÞ âÕÜÕ", @@ -2642,7 +2642,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "întotdeauna", "",// TODO "",// TODO "ÒáÕÓÔÐ", @@ -2662,7 +2662,7 @@ const tI18nPhrase Phrases[] = { "Posición para información canal", "ÈÝóç ðëçñïöïñßáò êáíáëéþí", "Placering av kanalinformation", - "Pozitie info canal", + "Poziþia informaþiilor despre canal", "Csatorna-Infó poziciója", "Posició de la informació del canal", "¿ÞÛÞÖÕÝØÕ ÞÚÝÐ ØÝäÞàÜÐæØØ Þ ÚÐÝÐÛÕ", @@ -2682,7 +2682,7 @@ const tI18nPhrase Phrases[] = { "Información para cambio de canal", "Ðëçñïöïñßåò óôÞí áëëáãÞ êáíáëéïý", "Information vid kanalbyte", - "Info despre comutare canal", + "Informaþii la comutarea canalului", "Infó a csatorna váltásánál", "Informació del canvi de canal", "¿ÞÚÐ×ëÒÐâì ØÝäÞàÜÐæØî Þ ÚÐÝÐÛÕ", @@ -2702,7 +2702,7 @@ const tI18nPhrase Phrases[] = { "Desplazar página entera", "Êßëéóç óåëßäáò", "Bläddra sidor", - "Deruleaza pagini", + "Deruleazã pagini", "Oldalanként léptetmi", "Desplaçar pàgina sencera", "¿àÞÚàãâÚÐ áâàÐÝØæ ÜÕÝî", @@ -2722,7 +2722,7 @@ const tI18nPhrase Phrases[] = { "Ordenar timers", "ÏñãÜíùóç ðñïãñáìáôéóìÝíùí", "Sortera timers", - "Sortare timere", + "Sortare timer-e", "A beprogramozott felvételek elrendezése", "Ordenar gravacions programades", "ÁÞàâØàÞÒÚÐ âÐÙÜÕàÞÒ", @@ -2742,7 +2742,7 @@ const tI18nPhrase Phrases[] = { "Gracaciones en directorios", "ÖÜêåëïé åããñáöþí", "Kataloger för inspelningar", - "Directoare inregistrari", + "Directoare înregistrãri", "Felvételek listája", "Gravacions en subcarpetes", "ºÐâÐÛÞÓØ åàÐÝÕÝØï ×ÐßØáÕÙ", @@ -2762,7 +2762,7 @@ const tI18nPhrase Phrases[] = { "Tiempo hasta exploración EPG (h)", "×ñüíïò ìÝ÷ñé åîÝôáóç EPG óå þñåò", "EPG sökning timeout", - "Timeout EPG", + "Interval achiziþie EPG (h)", "Fennmaradt idö az EPG-g (h)", "Màxim d'Hores a cercar per la Guia", "·ÐÔÕàÖÚÐ áÚÐÝØàÞÒÐÝØï âÕÛÕÓØÔÐ (ç)", @@ -2782,7 +2782,7 @@ const tI18nPhrase Phrases[] = { "Nivel para arreglar EPG", "Âáèìüò äéüñèïóçò ïäçãïý EPG", "Nivå för EPG bugfix", - "Nivel corectie EPG", + "Nivel corecþie EPG", "EPG hibaelhárítás", "Nivell de correcció de la Guia", "ÃàÞÒÕÝì ÚÞààÕÚæØØ ÞèØÑÞÚ", @@ -2802,7 +2802,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "Visa gammal info (min)", - "",// TODO + "Date EPG expirate cel mult (min)", "",// TODO "",// TODO "ÅàÐÝÕÝØÕ ãáâÐàÕÒèØå ÔÐÝÝëå (ÜØÝ)", @@ -2822,7 +2822,7 @@ const tI18nPhrase Phrases[] = { "Ajustar reloj de sistema", "Óõíôïíéóìüò þñáò õðïëïãéóôÞ", "Ställ in systemtid", - "Seteaza ceasul sistem", + "Potriveºte ceasul sistem", "Az idö beállítása", "Ajustar l'hora del sistema", "ÃáâÐÝÞÒØâì áØáâÕÜÝÞÕ ÒàÕÜï", @@ -2842,7 +2842,7 @@ const tI18nPhrase Phrases[] = { "Transponder para reloj de sistema", "Áíáìåôáäüôçò óõíôïíéóìïý þñáò", "Använd klockan från transponder", - "Preia ceasul din transponder", + "Preia ora din transponder", "Idöhöz tartozó Transponder", "Usar el temps del múltiplex", "¸áßÞÛì×ÞÒÐâì ÒàÕÜï âàÐÝáßÞÝÔÕàÐ", @@ -2862,7 +2862,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Limbi preferate", "",// TODO "",// TODO "¿àÕÔßÞçØâÐÕÜëÕ ï×ëÚØ", @@ -2882,7 +2882,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Limba preferatã", "",// TODO "",// TODO "²ëÑàÐÝ", @@ -2902,7 +2902,7 @@ const tI18nPhrase Phrases[] = { "Primer interface DVB", "Êýñéá DVB êÜñôá", "Primär DVB enhet", - "Placa DVB primara", + "Dispozitiv DVB primar", "Elsö DVB interface", "Tarja DVB primària", "¾áÝÞÒÝÞÕ DVB-ãáâàÞÙáâÒÞ", @@ -2922,7 +2922,7 @@ const tI18nPhrase Phrases[] = { "Formato Vídeo", "Ó÷Þìá ïèüíçò", "Video format", - "Format Video", + "Format video", "Video formátum", "Format del vídeo", "ÄÞàÜÐâ ÒØÔÕÞ", @@ -2942,7 +2942,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Actualizare canale", "",// TODO "",// TODO "¾ÑÝÞÒÛïâì ÝÐáâàÞÙÚØ ÚÐÝÐÛÞÒ", @@ -2962,7 +2962,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "doar numele", "",// TODO "",// TODO "âÞÛìÚÞ ÝÐ×ÒÐÝØï", @@ -2982,7 +2982,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "nume si PID-uri", "",// TODO "",// TODO "ÝÐ×ÒÐÝØï Ø PIDë", @@ -3002,7 +3002,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "adãugare canale noi", "",// TODO "",// TODO "ÝÞÒëÕ ÚÐÝÐÛë", @@ -3022,7 +3022,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "adãugare transpondere noi", "",// TODO "",// TODO "ÝÞÒ. âàÐÝáßÞÝÔÕàë", @@ -3042,7 +3042,7 @@ const tI18nPhrase Phrases[] = { "SLOF (MHz)", "SLOF (MHz)", "SLOF (MHz)", - "SLOF (MHz)", + "Frecvenþã comutare bandã, SLOF (MHz)", "SLOF (MHz)", "SLOF (MHz)", "ÇÐáâÞâÐ ßÕàÕÚÛîçÕÝØï (SLOF) (¼³æ)", @@ -3062,7 +3062,7 @@ const tI18nPhrase Phrases[] = { "Frecuencia baja LNB (MHz)", "ÊÜôù LNB-Óõ÷íüôçôá (MHz)", "Undre LNB frekvens (MHz)", - "Frecvnta LO LNB (Mhz)", + "Frecvnþã LNB inferioarã (Mhz)", "Alsó LNB-frekvencia (MHZ)", "Freqüència LNB baixa (MHz)", "½ØÖÝïï çÐáâÞâÐ ÚÞÝÒÕàâÕàÐ (¼³æ)", @@ -3082,7 +3082,7 @@ const tI18nPhrase Phrases[] = { "Frecuencia alta LNB (MHz)", "¢íù LNB-Óõ÷íüôçôá (MHz)", "Övre LNB frekvens (MHz)", - "Feecventa HI LNB (MHz)", + "Frecvnþã LNB superioarã (MHz)", "Felsö LNB-frekvencia (MHZ)", "Freqüència LNB alta (MHz)", "²ÕàåÝïï çÐáâÞâÐ ÚÞÝÒÕàâÕàÐ (¼³æ)", @@ -3102,7 +3102,7 @@ const tI18nPhrase Phrases[] = { "Utilizar DiSEqC", "Åíåñãïðïßçóç DiSEqC", "Använd DiSEqC", - "Utilizez DiSEqC", + "Utilizare DiSEqC", "DiSEqC használata", "Utilitzar DiSEqC", "¸áßÞÛì×ÞÒÐâì DiSEqC", @@ -3122,7 +3122,7 @@ const tI18nPhrase Phrases[] = { "CICAM DVB", "CICAM DVB", "CICAM DVB", - "Setare acces conditional", + "CICAM DVB", "CICAM DVB", "Accés condicional CICAM", "CAM-ÜÞÔãÛì DVB", @@ -3142,7 +3142,7 @@ const tI18nPhrase Phrases[] = { "Comenzar grabación antes (min)", "Ðñüóèåôïò ÷ñüíïò ðñßí áñ÷Þ (ëåðôÜ)", "Marginal för start (min)", - "Margine la pornire (min)", + "Marjã la pornire (min)", "Idöeltolódás a kezdésnél (min)", "Marge d'inici de gravació (min)", "¾ßÕàÕÖÕÝØÕ ÝÐçÐÛÐ ×ÐßØáØ (ÜØÝ)", @@ -3162,7 +3162,7 @@ const tI18nPhrase Phrases[] = { "Cortar grabación después (min)", "Ðñüóèåôïò ÷ñüíïò óôü ôÝëïò (ëåðôÜ)", "Marginal för stopp (min)", - "Margine la oprire (min)", + "Marjã la oprire (min)", "Idöeltolódás a befejezésnél", "Marge de fi de gravació (min)", "·ÐßÐ×ÔëÒÐÝØÕ ÞáâÐÝÞÒÚØ ×ÐßØáØ (ÜØÝ)", @@ -3182,7 +3182,7 @@ const tI18nPhrase Phrases[] = { "Límite primario", "Ðñïôåýïí üñéï", "Primär gräns", - "Limita Primara", + "Limitã primarã", "Primér-határ", "Límit primari", "¼ØÝ. ßàØÞàØâÕâ ×ÐåÒÐâÐ ÞáÝ. ãáâàÞÙáâÒÐ", @@ -3202,7 +3202,7 @@ const tI18nPhrase Phrases[] = { "Prioridad predefinida", "Ðñïôåñáéüôçôá", "Normal prioritet", - "Prioritate implicita", + "Prioritate implicitã", "Default priority", "Prioritat per defecte", "¿àØÞàØâÕâ âÐÙÜÕàÐ ßÞ ãÜÞÛçÐÝØî", @@ -3222,7 +3222,7 @@ const tI18nPhrase Phrases[] = { "Duración predefinida", "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)", "Normal livstid (dagar)", - "Durata predefinita", + "Timp de pãstrare predefinit (zile)", "Default élettartam", "Durada predefinida", "ÁàÞÚ åàÐÝÕÝØï ×ÐßØáØ ßÞ ãÜÞÛçÐÝØî (Ô)", @@ -3242,7 +3242,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "Ðñïôåñáéüôçôá äéáëåßììáôïò", "Prioritet för direktinspelning", - "",// TODO + "Prioritate pauzã", "Szünet prioritás", "Prioritat de la pausa", "¿àØÞàØâÕâ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ", @@ -3262,7 +3262,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "ÄéÜñêåéá äéáëåßìáôïò", "Livstid för direktinspelning (dagar)", - "",// TODO + "Pãstrarea emisiunilor 'pauzate' (zile)", "Szünet élettartama", "Durada de la pausa (d)", "ÅàÐÝÕÝØÕ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ (Ô)", @@ -3282,7 +3282,7 @@ const tI18nPhrase Phrases[] = { "Utilizar nombre de episodo", "×ñÞóç ïíüìáôïò åðåéóïäßïõ", "Använd episodnamn", - "Utilizeaza numele episodului", + "Utilizeazã numele episodului", "Epizódnév felhasználása", "Utilitzar el nom de l'episodi", "³àãßßØàÞÒÐâì äÐÙÛë ßÞ íßØ×ÞÔÐÜ", @@ -3302,7 +3302,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Utilizeazã VPS", "",// TODO "",// TODO "¸áßÞÛì×ÞÒÐâì áØÓÝÐÛë VPS", @@ -3322,7 +3322,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Marjã de timp la utilizare VPS (s)", "",// TODO "",// TODO "±ãäÕàÝÞÕ ÒàÕÜï VPS (áÕÚ)", @@ -3342,7 +3342,7 @@ const tI18nPhrase Phrases[] = { "Marcar grabaciones instantáneas", "ÅðéëïãÞ ôñÝ÷ïõóáò åããñáöÞò", "Märk direktinspelning", - "Inregistrare imediata", + "Marcheazã înregistrare imediatã", "Direktfelvétel megjelölése", "Marcar gravació instantània", "¾âÜÕçÐâì áÔÕÛÐÝÝëÕ ÒàãçÝãî ×ÐßØáØ", @@ -3362,7 +3362,7 @@ const tI18nPhrase Phrases[] = { "Nombrar grabaciones instantáneas", "Ïíïìáóßá ôñÝ÷ïõóáò åããñáöÞò", "Namnge direktinspelning", - "Nume inregistrare imediata", + "Nume înregistrare imediatã", "Direktfelvétel megnevezése", "Anomenar gravacions instantànies", "ÁåÕÜÐ ØÜÕÝÞÒÐÝØï àãçÝëå ×ÐßØáÕÙ", @@ -3382,7 +3382,7 @@ const tI18nPhrase Phrases[] = { "Tiempo de grabación instantánea (min)", "ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)", "Direktinspelning längd (min)", - "Timpul de inregistarea imediata (min)", + "Timpul de înregistare imediatã (min)", "Felvétel idötartama", "Temps de gravació instantània (min)", "´ÛØâÕÛìÝÞáâì àãçÝÞÙ ×ÐßØáØ (ÜØÝ)", @@ -3402,7 +3402,7 @@ const tI18nPhrase Phrases[] = { "Grabar sonido Dolby Digital", "ÅããñáöÞ ôïõ Dolby Digital Þ÷ïõ", "Spela in ljudet med Dolby Digital", - "Inregistreaza Dolby Digital", + "Înregistreazã Dolby Digital", "Dolby Digitál felvétel", "Gravar el so en Dolby Digital", "·ÐßØáëÒÐâì ×ÒãÚ Dolby Digital", @@ -3422,7 +3422,7 @@ const tI18nPhrase Phrases[] = { "Tamaño máx. de fichero (MB)", "ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)", "Maximal filstorlek för inspelning (MB)", - "Dimensiune maxima a fisierului video (MB)", + "Dimensiune maximã a fiºierului video (MB)", "Max. video File-terjedelem (MB)", "Mida màxima de l'arxiu (MB)", "¼ÐÚá. àÐ×ÜÕà ÒØÔÕÞäÐÙÛÐ (¼Ñ)", @@ -3442,7 +3442,7 @@ const tI18nPhrase Phrases[] = { "Quebrar ficheros", "ÄéáìÝëéóìüò åðåîåñãáóìÝíùí áñ÷åßùí", "Dela upp redigerade filer", - "Separare fisiere editate", + "Separare fiºiere montate", "Feldolgozott File-k felosztása", "Separar arxius", "´ÕÛØâì ÞâàÕÔÐÚâØàÞÒÐÝÝëÕ äÐÙÛë", @@ -3462,7 +3462,7 @@ const tI18nPhrase Phrases[] = { "Modo multi-velocidad", "Ìåèïäïò ðïëëáðëÞò ôá÷ýôçôáò", "Multispeed mode", - "Mod multi-rata", + "Mod multi-vitezã", "MultiSpeed funkció", "Mode de multivelocitat", "¼ÝÞÓÞáÚÞàÞáâÝÞÙ àÕÖØÜ", @@ -3482,7 +3482,7 @@ const tI18nPhrase Phrases[] = { "Mostrar modo de replay", "¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò", "Visa uppspelnings läge", - "Afiseaza modul de redare", + "Afiºeazã redarea", "Lejátszás feltüntetése", "Mostrar mode de reproducció", "¾âÞÑàÐÖÐâì àÕÖØÜ ÒÞáßàÞØ×ÒÕÔÕÝØï", // ??? @@ -3502,7 +3502,7 @@ const tI18nPhrase Phrases[] = { "Continuar ID", "ID áíáìåôÜäïóçò", "Återuppta ID", - "Resume ID",// TODO + "Identificator continuare", "Lejátszás ID", "ID de Continuar", "ID ÒÞáßàÞØ×ÒÕÔÕÝØï", // ??? @@ -3522,7 +3522,7 @@ const tI18nPhrase Phrases[] = { "Tiempo mínimo pausa (min)", "ÅëÜ÷éóôïò ÷ñÜíïò ðáñåìâïëÞò (ëåðôÜ)", "Minsta händelse-pause (min)", - "MinEventTimeout (min)", + "Duratã minimã emisiuni (min)", "Min. esemény szünet (min)", "Temps mínim en pausa (min)", "¼ØÝ. ÒàÕÜï ÞÖØÔÐÝØï áÞÑëâØï (ÜØÝ)", @@ -3542,7 +3542,7 @@ const tI18nPhrase Phrases[] = { "Tiempo mínimo inactividad (min)", "ÅëÜ÷éóôïò ÷ñüíïò áíáìïíÞò (ëåðôÜ)", "Minsta anändar-inaktivitet (min)", - "Durata minima de inactivitate (min)", + "Durata minimã de inactivitate (min)", "Min. kezelési aktivitás (min)", "Temps mínim d'inactivitat (min)", "¼ØÝ. ÒàÕÜï ÞÖØÔÐÝØï ÒÒÞÔÐ (ÜØÝ)", @@ -3582,7 +3582,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "ÆÜðéíãê äéáêïðÞ (ä)", "",// TODO - "",// TODO + "Interval zapping (s)", "",// TODO "",// TODO "·ÐÔÕàÖÚÐ ßÕàÕÚÛîçÕÝØï ÚÐÝÐÛÐ (áÕÚ)", @@ -3623,7 +3623,7 @@ const tI18nPhrase Phrases[] = { "LunMarMieJueVieSabDom", "ÄåõÔñßÔåôÐÝìÐáñÓÜâKõñ", "MånTisOnsTorFreLörSön", - "LunMarMieJoiVinSimDum", + "LunMarMieJoiVinSâmDum", "HétKedSzeCsüPénSzoVas", "Dl Dm Dc Dj Dv Ds Dg ", "¿ÞݲâàÁàÔÇâÒ¿âÝÁãѲáÚ", @@ -3644,7 +3644,7 @@ const tI18nPhrase Phrases[] = { " aábcdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~", " áÜâãäåÝæçÞèéßêëìíîïüðñóòôõýö÷øùþ0123456789-.#~abcdefghijklmnopqrstuvwxyz", " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~", - " abcdefghijklmnopqrstuvwxyz0123456789-.#~", + " aãâbcdefghiîjklmnopqrsºtþuvwxyz0123456789-.#~", " aábcdeéfghiíjklmnoóöpqrstuúüvwxyz0123456789-.,#~", " aàbcçdeéèfghiíjklmnoòpqrstuúvwxyz0123456789-.,#~_·", " abcdefghijklmnopqrstuvwxyzÐÑÒÓÔÕñÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìîï0123456789-.#~", @@ -3665,7 +3665,7 @@ const tI18nPhrase Phrases[] = { "Aprendiendo teclas del telemando (%s)", "ÅêìÜèçóç ðëÞêôñùí ôçëå÷åéñéóìïý (%s)", "Inlärning av fjärrkontrollsknappar (%s)", - "Invatare taste telecomanda (%s)", + "Învãþare taste telecomandã (%s)", "Távirányító betanítása (%s)", "Aprenent les tecles del comandament a distància (%s)", "²ÒÞÔ ÚÞÔÞÒ ÚÝÞßÞÚ ßãÛìâÐ (%s)", @@ -3685,7 +3685,7 @@ const tI18nPhrase Phrases[] = { "Fase 1: Detectando tipo de receptor", "ÖÜóç 1: Áíß÷íåõóç êþäéêá RC", "Steg1: identifiering av RC kod", - "Faza 1: Detectie tip telecomanda", + "Faza 1: Detecþia tipului telecomenzii", "Elsö lépés: távirányító kódjának meghatározása", "Fase 1: Detectant el tipus de receptor", "ÈÐÓ 1: ¾ßàÕÔÕÛÕÝØÕ âØßÐ ÚÞÔÐ ßãÛìâÐ", @@ -3705,7 +3705,7 @@ const tI18nPhrase Phrases[] = { "Pulse una tecla en el telemando", "Ðßåóå Ýíá ðëÞêôñï óôï ôçëå÷åéñéóôÞñéï", "Tryck valfri tangent på fjärrkontrollen", - "Apasati o tasta pe telecomanda", + "Apãsaþi o tastã pe telecomandã", "Nyomjon meg egy gombot a távirányítón", "Premeu qualsevol tecla del comandament", "½ÐÖÜØâÕ ÛîÑãî ÚÝÞßÚã ÝÐ ßãÛìâÕ", @@ -3745,7 +3745,7 @@ const tI18nPhrase Phrases[] = { "No pulse ninguna tecla...", "ÌÞí ðéÝæåéò ðëÞêôñá...", "Tryck inte på någon knapp...", - "Nu apasati nicio tasta...", + "Nu apãsaþi nici o tastã...", "Ne nyomjon meg gombot...", "No premeu cap tecla...", "½Õ ÝÐÖØÜÐÙâÕ ÚÝÞßÚØ...", @@ -3765,7 +3765,7 @@ const tI18nPhrase Phrases[] = { "Fase 2: Aprendiendo códigos específicos", "Öáóç 2: ÅêìÜèçóç ìåìïíïìÝíùí ðëÞêôñùí", "Fas 2: Inlärning av specifika knapp koder", - "Faza 2: Invatarea codurilor specifice tastelor", + "Faza 2: Învãþarea codurilor anumitor taste", "Második lépés: az egyes gombok betanítása", "Fase 2: Aprenentantge de les funcions", "ÈÐÓ 2: ·ÐÔÐÝØÕ ÚÞÔÞÒ ÞâÔÕÛìÝëå ÚÝÞßÞÚ", @@ -3785,7 +3785,7 @@ const tI18nPhrase Phrases[] = { "Pulsar tecla para '%s'", "Ðßåóå ôï ðëÞêôñï ãéÜ '%s'", "Tryck på knappen för '%s'", - "Apasati tasta pentru '%s'", + "Apãsaþi tasta pentru '%s'", "'%s' gomb megnyomása", "Premeu una tecla per '%s'", "½ÐÖÜØâÕ ÚÝÞßÚã '%s'", @@ -3805,7 +3805,7 @@ const tI18nPhrase Phrases[] = { "Pulse 'Arriba' para confirmar", "Ðßåóå 'ðÜíù' ãéÜ áðïäï÷Þ", "Tryck 'Upp' för att bekräfta", - "Apsati 'Sus' pentru confirmare", + "Apãsaþi 'Sus' pentru confirmare", "'Fel' megnyomása az elfogadáshoz", "Premeu 'Amunt' per confirmar", "½ÐÖÜØâÕ '²ÒÕàå' çâÞÑë ßÞÔâÒÕàÔØâì", @@ -3825,7 +3825,7 @@ const tI18nPhrase Phrases[] = { "Pulse 'Abajo' para confirmar", "Ðßåóå 'êÜôù' ãéÜ óõíÝ÷åéá", "Tryck 'Ner' för att bekräfta", - "Apasati jos pentru continuare", + "Apãsaþi 'Jos' pentru continuare", "'Le' megnyomása a folytatáshoz", "Premeu 'Avall' per continuar", "½ÐÖÜØâÕ '²ÝØ×' çâÞÑë ßàÞÔÞÛÖØâì", @@ -3845,7 +3845,7 @@ const tI18nPhrase Phrases[] = { "(Pulse 'Arriba' para retornar)", "(Ðßåóå 'ðÜíù' ãéÜ åðéóôñïöÞ", "(Tryck 'Upp' för att backa)", - "(Apsati 'Sus' pentru revenire)", + "(Apãsaþi 'Sus' pentru revenire)", "(´Fel' megnyomása a visszatéréshez)", "(Premeu 'Amunt' per retornar)", "(½ÐÖÜØâÕ '²ÒÕàå' çâÞÑë ÒÕàÝãâìáï)", @@ -3865,7 +3865,7 @@ const tI18nPhrase Phrases[] = { "(Pulse 'Abajo' para terminar programación teclas)", "(Ðßåóå 'êÜôù' ãéÜ ôåñìáôéóìü äçëþóåùí ðëÞêôñùí)", "(Tryck 'Ner' för att avsluta knapp definition)", - "(Apasati 'Jos' pentru terminare)", + "(Apãsaþi 'Jos' pentru terminare)", "('Le' megnyomása a befejezéshez)", "(Premeu 'Avall' per finalitzar l'aprenentatge)", "(½ÐÖÜØâÕ '²ÝØ×' çâÞÑë ×ÐÚÞÝçØâì ÝÐáâàÞÙÚã ßãÛìâÐ)", @@ -3885,7 +3885,7 @@ const tI18nPhrase Phrases[] = { "Pulse 'Menu' para saltarse esta tecla", "ÐÜôá 'ìåíïý' ãéá ðñïóðÝñáóç áõôïý ôïý ðëÞêôñïõ", "Tryck 'Meny' för att hoppa över denna knapp.", - "",// TODO + "Apãsaþi 'Meniu' pentru a sãri peste aceastã tastã", "A Menü gombot nyomni ennek a gombnak a kihagyásához", "Premeu 'Menú' per obviar aquesta tecla", "(½ÐÖÜØâÕ '¼ÕÝî' çâÞÑë ßàÞßãáâØâì ÚÝÞßÚã)", @@ -3925,7 +3925,7 @@ const tI18nPhrase Phrases[] = { "Pulse 'Arriba' para guardar, 'Abajo' para anular", "'ÐÜíù' áðïèßêåõóç, 'ÊÜôù' áêýñùóç", "Tryck 'Upp' för att spara, 'Ner' för att avsluta", - "Apsati 'Sus' pentru salvare, 'Jos' pentru anulare", + "Apãsaþi 'Sus' pentru salvare, 'Jos' pentru anulare", "'Fel' mentés, 'Le´ mégse", "Premeu 'Amunt' per guardar, 'Avall' per anul·lar", "½ÐÖÜØâÕ '²ÒÕàå' çâÞÑë ×ÐßÞÜÝØâì, '²ÝØ×' çâÞÑë ÞâÚÐ×Ðâìáï", @@ -4006,7 +4006,7 @@ const tI18nPhrase Phrases[] = { "Ok", "Ïê", "Ok", - "Ok", + "OK", "Ok", "D'acord", "Ok", @@ -4026,7 +4026,7 @@ const tI18nPhrase Phrases[] = { "Retornar", "Ðßóù", "Tillbaka", - "Inapoi", + "Înapoi", "Vissza", "Retornar", "½Ð×ÐÔ", @@ -4046,7 +4046,7 @@ const tI18nPhrase Phrases[] = { "Izquierda", "ÁñéóôåñÜ", "Vänster", - "Stinga", + "Stânga", "Balra", "Esquerra", "½ÐÛÕÒÞ", @@ -4086,7 +4086,7 @@ const tI18nPhrase Phrases[] = { "Rojo", "Êüêêéíï", "Röd", - "Rosu", + "Roºu", "Piros", "Vermell", "ºàÐáÝëÙ", @@ -4166,7 +4166,7 @@ const tI18nPhrase Phrases[] = { "Reproducir", "AíáìåôÜäïóç", "Spela upp", - "",// TODO + "Redare", "Lejátszás", "Reproduir", "²ÞáßàÞØ×ÒÕÔÕÝØÕ", @@ -4186,7 +4186,7 @@ const tI18nPhrase Phrases[] = { "Pausa", "ÄéÜëåéììá", "Pausa", - "",// TODO + "Pauzã", "Szünet", "Pausa", "¿Ðã×Ð", @@ -4206,7 +4206,7 @@ const tI18nPhrase Phrases[] = { "Parar", "TÝñìá", "Stoppa", - "",// TODO + "Stop", "Stop", "Aturar", "ÁâÞß", @@ -4226,7 +4226,7 @@ const tI18nPhrase Phrases[] = { "Grabar", "EããñáöÞ", "Spela in", - "",// TODO + "Înregistrare", "Felvenni", "Gravar", "·ÐßØáì", @@ -4246,7 +4246,7 @@ const tI18nPhrase Phrases[] = { "Adelante rápido", "Ðñïüèéóç åìðñüò", "Snabbspolning framåt", - "",// TODO + "Derulare înainte", "Elöre pörgetni", "Endavant ràpidament", "²ßÕàñÔ", @@ -4266,7 +4266,7 @@ const tI18nPhrase Phrases[] = { "Atrás rápido", "Ðñïüèéóç ðßóù", "Snabbspolning bakåt", - "",// TODO + "Derulare înapoi", "Vissza pörgetni", "Enrera ràpidament", "½Ð×ÐÔ", @@ -4286,7 +4286,7 @@ const tI18nPhrase Phrases[] = { "Corriente", "Këåßóéìï", "På/Av", - "Pornit", + "Închidere", "Kikapcsolni", "Aturar", "²ëÚÛîçØâì", @@ -4306,7 +4306,7 @@ const tI18nPhrase Phrases[] = { "Canal +", "ÊáíÜëé+", "Kanal+", - "",// TODO + "Canal+", "Csatorna+", "Canal +", "ºÐÝÐÛ +", @@ -4326,7 +4326,7 @@ const tI18nPhrase Phrases[] = { "Canal -", "ÊáíÜëç-", "Kanal-", - "",// TODO + "Canal-", "Csatorna-", "Canal -", "ºÐÝÐÛ -", @@ -4386,7 +4386,7 @@ const tI18nPhrase Phrases[] = { "Mudo", "Óéùðçëü", "Ljud Av", - "Mut(e)", + "Fãrã sunet", "Csend", "En silenci", "²ëÚÛîçØâì ×ÒãÚ", @@ -4447,7 +4447,7 @@ const tI18nPhrase Phrases[] = { "off", "êëåéóôü", "av", - "",// TODO + "inactiv", "ki", "off", "ÒëÚÛ", @@ -4467,7 +4467,7 @@ const tI18nPhrase Phrases[] = { "ninguno", "êáíÝíá", "ingen", - "",// TODO + "niciuna(ul)", "semmi", "cap", "ÝØçÕÓÞ", @@ -4487,7 +4487,7 @@ const tI18nPhrase Phrases[] = { "auto", "áõôüìáôï", "automatisk", - "",// TODO + "automat", "auto", "auto", "ÐÒâÞ", @@ -4587,7 +4587,7 @@ const tI18nPhrase Phrases[] = { "Salta a: ", "ÔïðïèÝôçóç: ", "Hopp: ", - "Salt: ", + "Salt la: ", "Ugrás: ", "Salta a:", "¿ÕàÕÙâØ: ", @@ -4627,7 +4627,7 @@ const tI18nPhrase Phrases[] = { " Parar reprodución", " ÔÝëïò áíáìåôÜäïóçò", " Avsluta uppspelning", - " Opreste redare", + " Opreºte redarea", " Lejátszást befejzni", " Aturar la reproducció", " ¿àÕÚàÐâØâì ÒÞáßàÞØ×ÒÕÔÕÝØÕ", @@ -4647,7 +4647,7 @@ const tI18nPhrase Phrases[] = { " Parar grabación ", " ÔÝëïò åããáöÞò ", " Avsluta inspelning ", - " Opreste inregistrarea ", + " Opreºte înregistrarea ", " Felvételt befejezni ", " Aturar la gravació ", " ¿àÕÚàÐâØâì ×ÐßØáì ", @@ -4667,7 +4667,7 @@ const tI18nPhrase Phrases[] = { " Anular modificación ", " Áêýñùóç åðåîåñãáóßáò", " Avbryt redigering", - " Opreste editare", + " Opreºte montajul înregistrãrii", " Vágást megszakítani", " Cancel·lar l'edició ", " ¿àÕàÒÐâì ÜÞÝâÐÖ ×ÐßØáØ", @@ -4687,7 +4687,7 @@ const tI18nPhrase Phrases[] = { "Cambio al interface DVB primario...", "Ç êýñéá DVB êÜñôá áëëÜæåé...", "Byter primär DVB enhet...", - "Comuta interfata primara DVB...", + "Comut dispozitiv DVB primar...", "Primér Interface átkapcsolva...", "Canviant a la interfície DVB primària...", "ÁÜÕÝÐ ÞáÝÞÒÝÞÓÞ DVB-ãáâàÞÙáâÒÐ...", @@ -4707,7 +4707,7 @@ const tI18nPhrase Phrases[] = { "Arriba/Abajo para el nuevo lugar - OK para mover", "ÐÜíù/ÊÜôù ãéÜ íÝá èÝóç. ÌåôÜ ÏÊ", "Upp/Ner för ny plats - OK för att flytta", - "Sus/Jos pentru noua locatie - OK pentru a muta", + "Sus/Jos pentru noua locaþie - OK pentru a muta", "Fel/Le egy uj opcióért - aztán OK", "Amunt/Avall per una nova localització - OK per moure", "½ÐÖØÜÐÙâÕ \"²ÒÕàå\"/\"²ÝØ×\" ÔÛï ÒëÑÞàÐ ßÞ×ØæØØ, Ð ×ÐâÕÜ \"OK\"", @@ -4727,7 +4727,7 @@ const tI18nPhrase Phrases[] = { "Proceso modificación iniciado", "Áñ÷Þ åðåîåñãáóßáò", "Redigering startad", - "Procesul de editare a inceput", + "Montajul înregistrãrii a început", "Vágás elindítva", "Procés d'edició iniciat", "½ÐçÐâ ÜÞÝâÐÖ ×ÐßØáØ", @@ -4747,7 +4747,7 @@ const tI18nPhrase Phrases[] = { "Proceso de modificación terminado", "Ç åðåîåñãáóßá ôåëåßùóå", "Redigering avslutad", - "Procesul de editare s-a terminat", + "Montajul înregistrãrii s-a terminat", "Vágás befejezve", "Procés d'edició finalitzat", "¼ÞÝâÐÖ ÞÚÞÝçÕÝ", @@ -4767,7 +4767,7 @@ const tI18nPhrase Phrases[] = { "Modificación ha fallado!", "Ç åðåîåñãáóßá áðÝôõ÷å!", "Redigeringsprocessen misslyckades", - "Proces de editare nereusit", + "Montajul înregistrãrii a eºuat", "Vágás sikertelen!", "Procés d'edició fallit!", "¾èØÑÚÐ ÒÞ ÒàÕÜï ÜÞÝâÐÖÐ ×ÐßØáØ!", @@ -4787,7 +4787,7 @@ const tI18nPhrase Phrases[] = { "buscando grabaciones...", "ÅîÝôáóç åããñáöþí...", "Söker igenom inspelningarna...", - "Caut inregistrari...", + "Caut înregistrãri...", "Felvett adások böngészése...", "cercant gravacions...", "ÁÚÐÝØàÞÒÐÝØÕ ×ÐßØáÕÙ...", @@ -4807,7 +4807,7 @@ const tI18nPhrase Phrases[] = { "Emisión en directo parada...", "ÄéÜëåéììá æùíôáíïý óÞìáôïò", "Pausar direktinspelningen", - "",// TODO + "Trec în pauzã emisiunea transmisã...", "Az élö adás megállítva...", "Pausa d'emissió en directe...", "ÀÕÖØÜ ÞâÛÞÖÕÝÝÞÓÞ ßàÞáÜÞâàÐ...", @@ -4827,7 +4827,7 @@ const tI18nPhrase Phrases[] = { "Este plugin no admite configuración", "Áõôü ôï âßóìá äåí Ý÷åé ðáñÜìåôñïõò", "Den här modulen har inga parametrar", - "",// TODO + "Acest plugin nu se configureazã!", "Ennek a plugin-nak nincs setup-parametere!", "Aquest plugin no admet configuració!", "¼ÞÔãÛì ÝÕ ØÜÕÕâ ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ!", @@ -4847,7 +4847,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "VDR clasic", "",// TODO "",// TODO "ºÛÐááØçÕáÚØÙ", @@ -4867,7 +4867,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO + "Cons. ST:TNG", "",// TODO "",// TODO "ST:TNG ßÐÝÕÛØ", diff --git a/libsi/util.h b/libsi/util.h index db2a0a1..da188ad 100644 --- a/libsi/util.h +++ b/libsi/util.h @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: util.h 1.4 2004/10/16 09:59:48 kls Exp $ + * $Id: util.h 1.5 2004/10/23 14:22:40 kls Exp $ * * ***************************************************************************/ @@ -140,7 +140,7 @@ namespace DVBTime { time_t getTime(unsigned char date_hi, unsigned char date_lo, unsigned char timehr, unsigned char timemi, unsigned char timese); time_t getDuration(unsigned char timehr, unsigned char timemi, unsigned char timese); inline unsigned char bcdToDec(unsigned char b) { return ((b >> 4) & 0x0F) * 10 + (b & 0x0F); } -}; +} //taken and adapted from libdtv, (c) Rolf Hakenes class CRC32 { diff --git a/remux.c b/remux.c index 9b3b286..e096f9c 100644 --- a/remux.c +++ b/remux.c @@ -8,7 +8,7 @@ * the Linux DVB driver's 'tuxplayer' example and were rewritten to suit * VDR's needs. * - * $Id: remux.c 1.19 2004/10/16 09:11:52 kls Exp $ + * $Id: remux.c 1.21 2004/10/24 09:25:33 kls Exp $ */ #include "remux.h" @@ -491,8 +491,8 @@ int cRemux::Put(const uchar *Data, int Count) break; if (Data[i] != TS_SYNC_BYTE) break; - if (resultBuffer->Free() < IPACKS) - break; + if (resultBuffer->Free() < 2 * IPACKS) + break; // A cTS2PES might write one full packet and also a small rest int pid = GetPid(Data + i + 1); if (Data[i + 3] & 0x10) { // got payload if (pid == vPid) vTS2PES->ts_to_pes(Data + i); @@ -597,7 +597,7 @@ uchar *cRemux::Get(int &Count, uchar *PictureType) Count += l; } else - resultSkipped = i; + resultSkipped = i + l; if (l > 0) i += l - 1; // the loop increments, too } diff --git a/sections.c b/sections.c index 6492336..7c42a6e 100644 --- a/sections.c +++ b/sections.c @@ -4,13 +4,14 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sections.c 1.9 2004/10/16 13:45:02 kls Exp $ + * $Id: sections.c 1.10 2004/10/24 11:05:12 kls Exp $ */ #include "sections.h" #include #include "channels.h" #include "device.h" +#include "thread.h" // --- cFilterHandle---------------------------------------------------------- @@ -185,7 +186,7 @@ void cSectionHandler::Action(void) if (poll(pfd, NumFilters, 1000) > 0) { bool DeviceHasLock = device->HasLock(); if (!DeviceHasLock) - usleep(100000); + cCondWait::SleepMs(100); for (int i = 0; i < NumFilters; i++) { if (pfd[i].revents & POLLIN) { cFilterHandle *fh = NULL; diff --git a/thread.c b/thread.c index 64b944b..144563d 100644 --- a/thread.c +++ b/thread.c @@ -4,13 +4,12 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 1.32 2004/10/15 13:15:02 kls Exp $ + * $Id: thread.c 1.35 2004/10/24 11:05:56 kls Exp $ */ #include "thread.h" #include #include -#include #include #include #include @@ -33,6 +32,12 @@ cCondWait::~cCondWait() pthread_mutex_destroy(&mutex); } +void cCondWait::SleepMs(int TimeoutMs) +{ + cCondWait w; + w.Wait(TimeoutMs); +} + bool cCondWait::Wait(int TimeoutMs) { pthread_mutex_lock(&mutex); @@ -186,19 +191,10 @@ void cMutex::Unlock(void) // --- cThread --------------------------------------------------------------- -// The signal handler is necessary to be able to use SIGIO to wake up any -// pending 'select()' call. - -bool cThread::signalHandlerInstalled = false; bool cThread::emergencyExitRequested = false; cThread::cThread(const char *Description) { - if (!signalHandlerInstalled) { - signal(SIGIO, SignalHandler); - signalHandlerInstalled = true; - } - running = false; parentTid = childTid = 0; description = NULL; SetDescription(Description); @@ -221,11 +217,6 @@ void cThread::SetDescription(const char *Description, ...) } } -void cThread::SignalHandler(int signum) -{ - signal(signum, SignalHandler); -} - void *cThread::StartThread(cThread *Thread) { Thread->childTid = pthread_self(); @@ -240,13 +231,11 @@ void *cThread::StartThread(cThread *Thread) bool cThread::Start(void) { - if (!running) { - running = true; + if (!childTid) { parentTid = pthread_self(); pthread_create(&childTid, NULL, (void *(*) (void *))&StartThread, (void *)this); pthread_detach(childTid); // auto-reap pthread_setschedparam(childTid, SCHED_RR, 0); - usleep(10000); // otherwise calling Active() immediately after Start() causes a "pure virtual method called" error } return true; //XXX return value of pthread_create()??? } @@ -277,21 +266,20 @@ bool cThread::Active(void) void cThread::Cancel(int WaitSeconds) { - running = false; - if (WaitSeconds > 0) { - for (time_t t0 = time(NULL) + WaitSeconds; time(NULL) < t0; ) { - if (!Active()) - return; - usleep(10000); - } - esyslog("ERROR: thread %ld won't end (waited %d seconds) - cancelling it...", childTid, WaitSeconds); + if (childTid) { + if (WaitSeconds > 0) { + for (time_t t0 = time(NULL) + WaitSeconds; time(NULL) < t0; ) { + if (!Active()) + return; + cCondWait::SleepMs(10); + } + esyslog("ERROR: thread %ld won't end (waited %d seconds) - cancelling it...", childTid, WaitSeconds); + } + if (childTid) { + pthread_cancel(childTid); + childTid = 0; + } } - pthread_cancel(childTid); -} - -void cThread::WakeUp(void) -{ - pthread_kill(parentTid, SIGIO); // makes any waiting 'select()' call return immediately } bool cThread::EmergencyExit(bool Request) @@ -451,7 +439,7 @@ int cPipe::Close(void) else if (ret == pid) break; i--; - usleep(100000); + cCondWait::SleepMs(100); } if (!i) { kill(pid, SIGKILL); diff --git a/thread.h b/thread.h index 7d9254c..2cc623b 100644 --- a/thread.h +++ b/thread.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.h 1.21 2004/10/15 13:16:39 kls Exp $ + * $Id: thread.h 1.24 2004/10/24 11:00:32 kls Exp $ */ #ifndef __THREAD_H @@ -22,6 +22,10 @@ private: public: cCondWait(void); ~cCondWait(); + static void SleepMs(int TimeoutMs); + ///< Creates a cCondWait object and uses it to sleep for TimeoutMs + ///< milliseconds, immediately giving up the calling thread's time + ///< slice and thus avoiding a "busy wait". bool Wait(int TimeoutMs = 0); ///< Waits at most TimeoutMs milliseconds for a call to Signal(), or ///< forever if TimeoutMs is 0. @@ -71,16 +75,12 @@ class cThread { private: pthread_t parentTid, childTid; cMutex mutex; - bool running; char *description; static bool emergencyExitRequested; - static bool signalHandlerInstalled; - static void SignalHandler(int signum); static void *StartThread(cThread *Thread); protected: void Lock(void) { mutex.Lock(); } void Unlock(void) { mutex.Unlock(); } - void WakeUp(void); virtual void Action(void) = 0; void Cancel(int WaitSeconds = 0); public: diff --git a/timers.c b/timers.c index ab1690a..4c4ba21 100644 --- a/timers.c +++ b/timers.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.c 1.13 2004/07/17 12:46:27 kls Exp $ + * $Id: timers.c 1.14 2004/10/24 14:56:55 kls Exp $ */ #include "timers.h" @@ -456,6 +456,12 @@ void cTimer::OnOff(void) cTimers Timers; +cTimers::cTimers(void) +{ + beingEdited = 0;; + lastSetEvents = 0; +} + cTimer *cTimers::GetTimer(cTimer *Timer) { for (cTimer *ti = First(); ti; ti = Next(ti)) { @@ -507,29 +513,35 @@ cTimer *cTimers::GetNextActiveTimer(void) void cTimers::SetEvents(void) { + if (time(NULL) - lastSetEvents < 5) + return; cSchedulesLock SchedulesLock(false, 100); const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock); if (Schedules) { - for (cTimer *ti = First(); ti; ti = Next(ti)) { - const cSchedule *Schedule = Schedules->GetSchedule(ti->Channel()->GetChannelID()); - const cEvent *Event = NULL; - if (Schedule) { - //XXX what if the Schedule doesn't have any VPS??? - int Match = tmNone; - for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) { - if (cRemote::HasKeys()) - return; // react immediately on user input - int m = ti->Matches(e); - if (m > Match) { - Match = m; - Event = e; - if (Match == tmFull) - break; - //XXX what if there's another event with the same VPS time??? - } - } + if (!lastSetEvents || Schedules->Modified() >= lastSetEvents) { + for (cTimer *ti = First(); ti; ti = Next(ti)) { + const cSchedule *Schedule = Schedules->GetSchedule(ti->Channel()->GetChannelID()); + if (Schedule) { + if (!lastSetEvents || Schedule->Modified() >= lastSetEvents) { + const cEvent *Event = NULL; + int Match = tmNone; + for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) { + if (cRemote::HasKeys()) + return; // react immediately on user input + int m = ti->Matches(e); + if (m > Match) { + Match = m; + Event = e; + if (Match == tmFull) + break; + //XXX what if there's another event with the same VPS time??? + } + } + ti->SetEvent(Event); + } + } } - ti->SetEvent(Event); - } + } } + lastSetEvents = time(NULL); } diff --git a/timers.h b/timers.h index ce4bff6..cbc6a92 100644 --- a/timers.h +++ b/timers.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.h 1.7 2004/02/29 14:18:17 kls Exp $ + * $Id: timers.h 1.8 2004/10/24 14:40:37 kls Exp $ */ #ifndef __TIMERS_H @@ -93,14 +93,16 @@ public: class cTimers : public cConfig { private: int beingEdited; + time_t lastSetEvents; public: + cTimers(void); cTimer *GetTimer(cTimer *Timer); cTimer *GetMatch(time_t t); cTimer *GetMatch(const cEvent *Event, int *Match = NULL); cTimer *GetNextActiveTimer(void); int BeingEdited(void) { return beingEdited; } void IncBeingEdited(void) { beingEdited++; } - void DecBeingEdited(void) { beingEdited--; } + void DecBeingEdited(void) { if (!--beingEdited) lastSetEvents = 0; } void SetEvents(void); }; diff --git a/transfer.c b/transfer.c index a791439..d4ccee2 100644 --- a/transfer.c +++ b/transfer.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: transfer.c 1.17 2004/10/16 09:22:58 kls Exp $ + * $Id: transfer.c 1.18 2004/10/23 13:35:08 kls Exp $ */ #include "transfer.h" @@ -65,7 +65,7 @@ void cTransfer::Action(void) int Count; uchar *b = ringBuffer->Get(Count); if (b) { - if (Count > TRANSFERBUFSIZE * 2 / 3) { + if (ringBuffer->Available() > TRANSFERBUFSIZE * 9 / 10) { // If the buffer runs full, we have no chance of ever catching up // since the data comes in at the same rate as it goes out (it's "live"). // So let's clear the buffer instead of suffering from permanent diff --git a/vdr.c b/vdr.c index 6d76f17..033f186 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.187 2004/10/17 11:50:21 kls Exp $ + * $Id: vdr.c 1.190 2004/10/24 14:01:11 kls Exp $ */ #include @@ -64,6 +64,8 @@ #define MANUALSTART 600 // seconds the next timer must be in the future to assume manual start #define CHANNELSAVEDELTA 600 // seconds before saving channels.conf after automatic modifications +#define EXIT(v) { ExitCode = (v); goto Exit; } + static int Interrupted = 0; static void SignalHandler(int signum) @@ -85,17 +87,6 @@ static void Watchdog(int signum) int main(int argc, char *argv[]) { -#ifdef _CS_GNU_LIBPTHREAD_VERSION - // Check for NPTL and exit if present - VDR apparently doesn't run well with NPTL: - char LibPthreadVersion[128]; - if (confstr(_CS_GNU_LIBPTHREAD_VERSION, LibPthreadVersion, sizeof(LibPthreadVersion)) > 0) { - if (strstr(LibPthreadVersion, "NPTL")) { - fprintf(stderr, "vdr: please turn off NPTL by setting 'export LD_ASSUME_KERNEL=2.4.1' before starting VDR\n"); - return 2; - } - } -#endif - // Check for UTF-8 and exit if present - asprintf() will fail if it encounters 8 bit ASCII codes char *LangEnv; if ((LangEnv = getenv("LANG")) != NULL && strcasestr(LangEnv, "utf") || @@ -133,6 +124,7 @@ int main(int argc, char *argv[]) const char *Terminal = NULL; const char *Shutdown = NULL; cPluginManager PluginManager(DEFAULTPLUGINDIR); + int ExitCode = 0; static struct option long_options[] = { { "audio", required_argument, NULL, 'a' }, @@ -358,7 +350,7 @@ int main(int argc, char *argv[]) // Load plugins: if (!PluginManager.LoadPlugins(true)) - return 2; + EXIT(2); // Configuration data: @@ -380,7 +372,7 @@ int main(int argc, char *argv[]) Keys.Load(AddDirectory(ConfigDirectory, "remote.conf")) && KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true) )) - return 2; + EXIT(2); cFont::SetCode(I18nCharSets()[Setup.OSDLanguage]); @@ -402,7 +394,7 @@ int main(int argc, char *argv[]) // Initialize plugins: if (!PluginManager.InitializePlugins()) - return 2; + EXIT(2); // Primary device: @@ -425,12 +417,12 @@ int main(int argc, char *argv[]) fprintf(stderr, "vdr: %s\n", msg); esyslog("ERROR: %s", msg); if (!cDevice::SetPrimaryDevice(1)) - return 2; + EXIT(2); if (!cDevice::PrimaryDevice()) { const char *msg = "no primary device found - giving up!"; fprintf(stderr, "vdr: %s\n", msg); esyslog("ERROR: %s", msg); - return 2; + EXIT(2); } } } @@ -442,7 +434,7 @@ int main(int argc, char *argv[]) // Start plugins: if (!PluginManager.StartPlugins()) - return 2; + EXIT(2); // Skins: @@ -498,18 +490,18 @@ int main(int argc, char *argv[]) // Main program loop: - cOsdObject *Menu = NULL; - cOsdObject *Temp = NULL; - int LastChannel = -1; - int LastTimerChannel = -1; - int PreviousChannel[2] = { 1, 1 }; - int PreviousChannelIndex = 0; - time_t LastChannelChanged = time(NULL); - time_t LastActivity = 0; - int MaxLatencyTime = 0; - bool ForceShutdown = false; - bool UserShutdown = false; - bool TimerInVpsMargin = false; + static cOsdObject *Menu = NULL; + static cOsdObject *Temp = NULL; + static int LastChannel = -1; + static int LastTimerChannel = -1; + static int PreviousChannel[2] = { 1, 1 }; + static int PreviousChannelIndex = 0; + static time_t LastChannelChanged = time(NULL); + static time_t LastActivity = 0; + static int MaxLatencyTime = 0; + static bool ForceShutdown = false; + static bool UserShutdown = false; + static bool TimerInVpsMargin = false; while (!Interrupted) { // Handle emergency exits: @@ -589,14 +581,9 @@ int main(int argc, char *argv[]) // Timers and Recordings: if (!Timers.BeingEdited()) { // Assign events to timers: - if (time(NULL) - LastActivity > 10) { - static time_t LastSetEvents = 0;//XXX trigger by actual EPG data modification??? - if (time(NULL) - LastSetEvents > 5) { - Timers.SetEvents(); - LastSetEvents = time(NULL); - } - } - time_t Now = time(NULL); // must do all following calls with the exact same time! + Timers.SetEvents(); + // Must do all following calls with the exact same time! + time_t Now = time(NULL); // Process ongoing recordings: cRecordControls::Process(Now); // Start new recordings: @@ -898,6 +885,9 @@ int main(int argc, char *argv[]) } if (Interrupted) isyslog("caught signal %d", Interrupted); + +Exit: + cRecordControls::Shutdown(); cCutter::Stop(); delete Menu; @@ -924,5 +914,5 @@ int main(int argc, char *argv[]) esyslog("emergency exit!"); return 1; } - return 0; + return ExitCode; } -- cgit v1.2.3