diff options
-rw-r--r-- | CONTRIBUTORS | 22 | ||||
-rw-r--r-- | HISTORY | 43 | ||||
-rw-r--r-- | INSTALL | 9 | ||||
-rw-r--r-- | channels.c | 16 | ||||
-rw-r--r-- | channels.conf | 18 | ||||
-rw-r--r-- | channels.h | 8 | ||||
-rw-r--r-- | config.h | 6 | ||||
-rw-r--r-- | device.c | 4 | ||||
-rw-r--r-- | diseqc.c | 5 | ||||
-rw-r--r-- | diseqc.conf | 11 | ||||
-rw-r--r-- | dvbdevice.c | 75 | ||||
-rw-r--r-- | dvbplayer.c | 4 | ||||
-rw-r--r-- | eit.c | 7 | ||||
-rw-r--r-- | epg.c | 18 | ||||
-rw-r--r-- | epg.h | 11 | ||||
-rw-r--r-- | font.c | 16 | ||||
-rw-r--r-- | font.h | 5 | ||||
-rw-r--r-- | fontosd-iso8859-2.c | 363 | ||||
-rw-r--r-- | fontsml-iso8859-2.c | 68 | ||||
-rw-r--r-- | genfontfile.c | 2 | ||||
-rw-r--r-- | i18n.c | 360 | ||||
-rw-r--r-- | libsi/util.h | 4 | ||||
-rw-r--r-- | remux.c | 8 | ||||
-rw-r--r-- | sections.c | 5 | ||||
-rw-r--r-- | thread.c | 56 | ||||
-rw-r--r-- | thread.h | 10 | ||||
-rw-r--r-- | timers.c | 54 | ||||
-rw-r--r-- | timers.h | 6 | ||||
-rw-r--r-- | transfer.c | 4 | ||||
-rw-r--r-- | 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 <werner@suse.de> 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 <hakenes@hippomi.de> for providing 'libdtv' and adapting the EIT mechanisms to it @@ -530,6 +531,7 @@ Oliver Endriss <o.endriss@gmx.de> 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 <rw.buchner@freenet.de> for adding some satellites to 'sources.conf' @@ -741,6 +743,8 @@ Ludwig Nussel <ludwig.nussel@web.de> 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 <tom@harhar.net> for his support in keeping the Premiere World channels up to date in 'channels.conf' @@ -797,6 +801,8 @@ Alfred Zastrow <vdr@zastrow4u.de> 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 <matthias-raus@web.de> for reporting a problem with starting the editing process if no marks have been set @@ -870,6 +876,8 @@ Reinhard Nissl <rnissl@gmx.de> 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 <richard_robson@beeb.net> for reporting freezing replay if a timer starts while in Transfer Mode from the @@ -1021,6 +1029,7 @@ Drazen Dupor <drazen.dupor@dupor.com> Prakash K. Cheemplavam <PrakashKC@gmx.de> for fixing some issues with gcc 3.4 + for some minor code cleanups Miko Wohlgemuth <weak@chello.at> for reporting a problem with the OSD alignment in the SPU decoder @@ -1053,6 +1062,8 @@ Marco Schlüßler <marco@lordzodiac.de> 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 <j.schmitz@web.de> for reporting a bug in displaying the current channel when switching via the SVDRP @@ -1100,3 +1111,14 @@ Udo Richter <udo_richter@gmx.de> Sven Kreiensen <svenk@kammer.uni-hannover.de> for his help in keeping 'channels.conf.terr' up to date + +Stefan Meyknecht <stefan@meyknecht.org> + for a patch that fixed detecting transponder lock in cDvbTuner + +Lucian Muresan <lucianm@users.sourceforge.net> + for updating the Romanian language texts and the iso8859-2 fonts + for making VDR actually use the iso8859-15 fonts + +Mattias Grönlund <Mattias@Gronlund.net> + for pointing out a missing cleanup at program exit in case there is a problem + with a plugin @@ -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. @@ -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" @@ -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 @@ -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; } @@ -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 @@ -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; } @@ -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 <ctype.h> #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: @@ -8,7 +8,7 @@ * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>. * - * $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 ------------------------------------------------------------------ @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * - * $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) @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * - * $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<cEvent> 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); @@ -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; @@ -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", @@ -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 <ruben.nunez@tang-it.com> * Greek Dimitrios Dimitrakos <mail@dimitrios.de> * Swedish Tomas Prybil <tomas@prybil.se> and Jan Ekholm <chakie@infa.abo.fi> - * Romanian Paul Lacatus <paul@campina.iiruc.ro> + * Romanian Paul Lacatus <paul@campina.iiruc.ro>, Lucian Muresan <lucianm@users.sourceforge.net> * Hungarian Istvan Koenigsberger <istvnko@hotmail.com> and Guido Josten <guido.josten@t-online.de> * Catalanian Marc Rovira Vall <tm05462@salleURL.edu>, Ramon Roca <ramon.roca@xcombo.com> and Jordi Vilà <jvila@tinet.org> * Russian Vyacheslav Dikonov <sdiconov@mail.ru> @@ -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 { @@ -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 } @@ -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 <unistd.h> #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; @@ -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 <errno.h> #include <malloc.h> -#include <signal.h> #include <stdarg.h> #include <sys/resource.h> #include <sys/time.h> @@ -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); @@ -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: @@ -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); } @@ -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<cTimer> { 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); }; @@ -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 @@ -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 <getopt.h> @@ -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; } |