From c9a5d8ea5328e4a8bcb0c3423b825c02cb0c3b27 Mon Sep 17 00:00:00 2001
From: Klaus Schmidinger <kls (at) cadsoft (dot) de>
Date: Sun, 7 Apr 2002 18:00:00 +0200
Subject: Version 1.0.0 - Fixed a problem with wrong EPG data in the Schedules
 menu (thanks to Tobias   Kerner, problem was initially reported by Michel
 Moster, but somehow I had   misplaced his message...). - Added Spanish
 language texts (thanks to Ruben Nunez Francisco). - Fixed resetting the
 "First day" timer parameter once the timer actually starts   recording. -
 Fixed the still picture workaround in case the progress display is active  
 (thanks to Gerald Raaf). - Fixed a problem with accessing the epg.data file
 before it is fully written   (thanks to Thilo Wunderlich for reporting this
 one). - Now the EPG scan skips channels that have their 'Ca' parameter
 explicitly set   to an other DVB card (suggested by Sergei Haller). - Fixed a
 possible hangup when reading a broken epg.data file (thanks to Henning  
 Holtschneider for pointing this one out). - Fixed a bug in the editing
 process in case a previously edited file with the   same name was manually
 deleted on a system with more than one video directory   (thanks to Dirk
 Wiebel for reporting this one).

---
 CONTRIBUTORS |  25 ++++++++
 HISTORY      |  24 ++++++-
 config.c     |   6 +-
 config.h     |   4 +-
 dvbapi.c     |  34 +++++++---
 eit.c        |  16 ++---
 eit.diff     |  25 --------
 i18n.c       | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 menu.c       |  12 +++-
 mpatrol.diff |  56 -----------------
 vdr.1        |   4 +-
 vdr.5        |   4 +-
 12 files changed, 287 insertions(+), 126 deletions(-)
 delete mode 100644 eit.diff
 delete mode 100644 mpatrol.diff

diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 6a126c9..ec742b1 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -88,6 +88,7 @@ Benjamin Reichardt <reichard@math.uni-goettingen.de>
 Henning Holtschneider <hh@holtschneider.com>
  for patching 'runvdr' to check whether the driver is already loaded
  for reporting a bug in parsing group separators in channels.conf
+ for pointing out a possible hangup when reading a broken epg.data file
 
 Paulo Lopes <pmml@netvita.pt>
  for translating OSD texts to the Portugese language
@@ -186,6 +187,7 @@ Norbert Schmidt <nschmidt-nrw@t-online.de>
 
 Thilo Wunderlich <tw@ubcom.net>
  for his help in keeping 'channels.conf' up to date
+ for reporting a problem with accessing the epg.data file before it is fully written
 
 Stephan Schreiber <stephan@sschreiber.de>
  for his support in keeping the Premiere World channels up to date in 'channels.conf.cable'
@@ -198,6 +200,8 @@ Sergei Haller <Sergei.Haller@math.uni-giessen.de>
  for fixing the LastActivity timestamp after a shutdown prompt
  for fixing the "Low disk space!" message
  for adding the TPID to Hessen-3 in 'channels.conf'
+ for suggesting that the EPG scan should skip channels with their 'Ca' parameter
+ explicitly set to an other DVB card
 
 Andreas Gebel <andreas@xcapenet.de>
  for his help in keeping 'channels.conf' up to date
@@ -252,6 +256,27 @@ Truls Slevigen <truls@slevigen.no>
 
 Ruben Nunez Francisco <ruben.nunez@tang-it.com>
  for implementing FreeDiskSpaceMB() without external 'df' command
+ for translating OSD texts to the Spanish language
+
+Mirko D�lle <mdoelle@linux-user.de>
+  for reporting a bug when a timer records over midnight of a day that had a
+  change in Daylight Saving Time
 
 Michael Rakowski <mrak@gmx.de>
  for translating OSD texts to the Polish language
+
+Michael Moster <dvb@juelich-gmbh.de>
+ for initally reporting the problem with wrong EPG data in the Schedules menu
+ (somehow I had misplaced his message...)
+
+Tobias Kerner <tobschle@gmx.de>
+ for helping to debug a problem with wrong EPG data in the Schedules menu
+
+Dirk Wiebel <dirk@wiebel.de>
+ for reporting a bug in the editing process in case a previously edited file
+ with the same name was manually deleted on a system with more than one video
+ directory
+
+Gerald Raaf <graaf@attglobal.net>
+ for helping to fix the still picture workaround in case the progress display
+ is active
diff --git a/HISTORY b/HISTORY
index cafa4c1..af15667 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1151,7 +1151,7 @@ Video Disk Recorder Revision History
   commands.conf starts with a digit in the range '1'...'9', followed by a blank.
 - Fixed a bug in switching back the replay mode display in time shift mode
   (thanks to Achim Lange for reporting this one).
-- Fixed a bug in the 'First day' timer parameter for timers that record over
+- Fixed a bug in the "First day" timer parameter for timers that record over
   midnight.
 - Added units to Setup parameters.
 - Changed time entry in the 'Jump' command during replay, so that it is filled
@@ -1161,7 +1161,7 @@ Video Disk Recorder Revision History
 - Fixed skipping the next hit of a repeating timer (thanks to Rainer Zocholl
   for reporting this one).
 - Fixed a bug when a timer records over midnight of a day that had a change in
-  Daylight Saving Time.
+  Daylight Saving Time (thanks to Mirko D�lle for reporting this one).
 - Added Polish language texts (thanks to Michael Rakowski).
 - Fixed a bug in parsing group separators in channels.conf (thanks to Henning
   Holtschneider for reporting this one).
@@ -1170,3 +1170,23 @@ Video Disk Recorder Revision History
   the F-keys on top.
 - Fixed a bug in the EPG bugfix mechanism if the extended description is shorter
   than 3 characters (thanks to Andreas Schultz).
+
+2002-04-07: Version 1.0.0
+
+- Fixed a problem with wrong EPG data in the Schedules menu (thanks to Tobias
+  Kerner, problem was initially reported by Michel Moster, but somehow I had
+  misplaced his message...).
+- Added Spanish language texts (thanks to Ruben Nunez Francisco).
+- Fixed resetting the "First day" timer parameter once the timer actually starts
+  recording.
+- Fixed the still picture workaround in case the progress display is active
+  (thanks to Gerald Raaf).
+- Fixed a problem with accessing the epg.data file before it is fully written
+  (thanks to Thilo Wunderlich for reporting this one).
+- Now the EPG scan skips channels that have their 'Ca' parameter explicitly set
+  to an other DVB card (suggested by Sergei Haller).
+- Fixed a possible hangup when reading a broken epg.data file (thanks to Henning
+  Holtschneider for pointing this one out).
+- Fixed a bug in the editing process in case a previously edited file with the
+  same name was manually deleted on a system with more than one video directory
+  (thanks to Dirk Wiebel for reporting this one).
diff --git a/config.c b/config.c
index 7104dcc..76e138b 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: config.c 1.96 2002/04/01 11:54:05 kls Exp $
+ * $Id: config.c 1.97 2002/04/02 21:56:51 kls Exp $
  */
 
 #include "config.h"
@@ -606,14 +606,14 @@ bool cTimer::Matches(time_t t)
          if ((!firstday || a >= firstday) && t <= b) {
             startTime = a;
             stopTime = b;
-            if (t >= firstday + SECSINDAY)
-               firstday = 0;
             break;
             }
          }
       }
   if (!startTime)
      startTime = firstday; // just to have something that's more than a week in the future
+  else if (t > startTime || t > firstday + SECSINDAY + 3600) // +3600 in case of DST change
+     firstday = 0;
   return active && startTime <= t && t < stopTime; // must stop *before* stopTime to allow adjacent timers
 }
 
diff --git a/config.h b/config.h
index e7c01eb..00774b0 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: config.h 1.107 2002/03/31 21:17:30 kls Exp $
+ * $Id: config.h 1.109 2002/04/07 13:08:12 kls Exp $
  */
 
 #ifndef __CONFIG_H
@@ -19,7 +19,7 @@
 #include "eit.h"
 #include "tools.h"
 
-#define VDRVERSION "1.0.0pre5"
+#define VDRVERSION "1.0.0"
 
 #define MAXPRIORITY 99
 #define MAXLIFETIME 99
diff --git a/dvbapi.c b/dvbapi.c
index d990618..9d59d90 100644
--- a/dvbapi.c
+++ b/dvbapi.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: dvbapi.c 1.166 2002/03/29 11:32:47 kls Exp $
+ * $Id: dvbapi.c 1.170 2002/04/07 09:35:51 kls Exp $
  */
 
 #include "dvbapi.h"
@@ -1194,8 +1194,10 @@ void cReplayBuffer::DisplayFrame(uchar *b, int Length)
   CHECK(ioctl(videoDev, VIDEO_STILLPICTURE, &sp));
 #else
 #define MIN_IFRAME 400000
-  for (int i = MIN_IFRAME / Length + 1; i > 0; i--)
+  for (int i = MIN_IFRAME / Length + 1; i > 0; i--) {
       safe_write(videoDev, b, Length);
+      usleep(1); // allows the buffer to be displayed in case the progress display is active
+      }
 #endif
 }
 
@@ -1612,6 +1614,18 @@ bool cVideoCutter::Start(const char *FileName)
      cRecording Recording(FileName);
      const char *evn = Recording.PrefixFileName('%');
      if (evn && RemoveVideoFile(evn) && MakeDirs(evn, true)) {
+        // XXX this can be removed once RenameVideoFile() follows symlinks (see videodir.c)
+        // remove a possible deleted recording with the same name to avoid symlink mixups:
+        char *s = strdup(evn);
+        char *e = strrchr(s, '.');
+        if (e) {
+           if (strcmp(e, ".rec") == 0) {
+              strcpy(e, ".del");
+              RemoveVideoFile(s);
+              }
+           }
+        delete s;
+        // XXX
         editedVersionName = strdup(evn);
         Recording.WriteSummary();
         cuttingBuffer = new cCuttingBuffer(FileName, editedVersionName);
@@ -2803,12 +2817,16 @@ void cEITScanner::Process(void)
                               numTransponders = 0;
                               }
                            cChannel *Channel = Channels.GetByNumber(ch);
-                           if (Channel && Channel->pnr && !TransponderScanned(Channel)) {
-                              if (DvbApi == cDvbApi::PrimaryDvbApi && !currentChannel)
-                                 currentChannel = DvbApi->Channel();
-                              Channel->Switch(DvbApi, false);
-                              lastChannel = ch;
-                              break;
+                           if (Channel) {
+                              if (Channel->ca <= MAXDVBAPI && !DvbApi->ProvidesCa(Channel->ca))
+                                 break; // the channel says it explicitly needs a different card
+                              if (Channel->pnr && !TransponderScanned(Channel)) {
+                                 if (DvbApi == cDvbApi::PrimaryDvbApi && !currentChannel)
+                                    currentChannel = DvbApi->Channel();
+                                 Channel->Switch(DvbApi, false);
+                                 lastChannel = ch;
+                                 break;
+                                 }
                               }
                            ch++;
                            }
diff --git a/eit.c b/eit.c
index 4fc749b..b27fbc7 100644
--- a/eit.c
+++ b/eit.c
@@ -16,7 +16,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- * $Id: eit.c 1.42 2002/04/01 12:58:20 kls Exp $
+ * $Id: eit.c 1.44 2002/04/06 13:58:59 kls Exp $
  ***************************************************************************/
 
 #include "eit.h"
@@ -390,12 +390,12 @@ bool cEventInfo::Read(FILE *f, cSchedule *Schedule)
              case 'e': pEvent = NULL;
                        break;
              case 'c': // to keep things simple we react on 'c' here
-                       return false;
+                       return true;
              default:  esyslog(LOG_ERR, "ERROR: unexpected tag while reading EPG data: %s", s);
                        return false;
              }
            }
-     return true;
+     esyslog(LOG_ERR, "ERROR: unexpected end of file while reading EPG data");
      }
   return false;
 }
@@ -754,8 +754,8 @@ bool cSchedule::Read(FILE *f, cSchedules *Schedules)
               if (1 == sscanf(s + 1, "%u", &uServiceID)) {
                  cSchedule *p = (cSchedule *)Schedules->SetCurrentServiceID(uServiceID);
                  if (p) {
-                    while (cEventInfo::Read(f, p))
-                          ; // loop stops after having read the closing 'c'
+                    if (!cEventInfo::Read(f, p))
+                       return false;
                     }
                  }
               }
@@ -1090,10 +1090,10 @@ void cSIProcessor::Action()
          if (epgDataFileName && now - lastDump > 600)
          {
             cMutexLock MutexLock(&schedulesMutex);
-            FILE *f = fopen(GetEpgDataFileName(), "w");
-            if (f) {
+            cSafeFile f(GetEpgDataFileName());
+            if (f.Open()) {
                schedules->Dump(f);
-               fclose(f);
+               f.Close();
                }
             else
                LOG_ERROR;
diff --git a/eit.diff b/eit.diff
deleted file mode 100644
index 57584b9..0000000
--- a/eit.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-# This is a BitKeeper generated patch for the following project:
-# Project Name: Linux VDR
-# This patch format is intended for GNU patch command version 2.5 or higher.
-# This patch includes the following deltas:
-#	           ChangeSet	1.21    -> 1.22   
-#	               eit.c	1.6     -> 1.7    
-#
-# The following is the BitKeeper ChangeSet Log
-# --------------------------------------------
-# 02/04/01	aschultz@warp10.net	1.22
-# fix segfault in eit.c
-# --------------------------------------------
-#
-diff -Nru a/eit.c b/eit.c
---- a/eit.c	Mon Apr  1 14:38:00 2002
-+++ b/eit.c	Mon Apr  1 14:38:00 2002
-@@ -559,7 +559,7 @@
-      pSubtitle = compactspace(pSubtitle);
-      pExtendedDescription = compactspace(pExtendedDescription);
-      // Remove superfluous hyphens:
--     if (pExtendedDescription) {
-+     if (pExtendedDescription && strlen(pExtendedDescription) >= 3) {
-         char *p = pExtendedDescription + 1;
-         while (*p) {
-               if (*p == '-' && *(p + 1) == ' ' && *(p + 2) && islower(*(p - 1)) && islower(*(p + 2))) {
diff --git a/i18n.c b/i18n.c
index 0ffbf45..0b22f1d 100644
--- a/i18n.c
+++ b/i18n.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: i18n.c 1.78 2002/04/01 11:37:08 kls Exp $
+ * $Id: i18n.c 1.79 2002/04/06 09:49:19 kls Exp $
  *
  * Slovenian  translations provided by Miha Setina <mihasetina@softhome.net> and Matjaz Thaler <matjaz.thaler@guest.arnes.si>
  * Italian    translations provided by Alberto Carraro <bertocar@tin.it>
@@ -14,6 +14,7 @@
  * Norwegian  translations provided by J�rgen Tvedt <pjtvedt@online.no> and Truls Slevigen <truls@slevigen.no>
  * Finnish    translations provided by Hannu Savolainen <hannu@opensound.com>
  * Polish     translations provided by Michael Rakowski <mrak@gmx.de>
+ * Spanish    translations provided by Ruben Nunez Francisco <ruben.nunez@tang-it.com>
  *
  */
 
@@ -62,7 +63,7 @@
 #include "config.h"
 #include "tools.h"
 
-const int NumLanguages = 10;
+const int NumLanguages = 11;
 
 typedef const char *tPhrase[NumLanguages];
 
@@ -78,6 +79,7 @@ const tPhrase Phrases[] = {
     "Norsk",
     "Suomi",
     "Polski",
+    "Espa�ol",
   },
   // Menu titles:
   { "VDR",
@@ -90,6 +92,7 @@ const tPhrase Phrases[] = {
     "VDR",
     "VDR",
     "VDR",
+    "VDR",
   },
   { "Schedule",
     "Programm",
@@ -101,6 +104,7 @@ const tPhrase Phrases[] = {
     "Programmer",
     "Ohjelmat",
     "Program",
+    "Programa",
   },
   { "Channels",
     "Kan�le",
@@ -112,6 +116,7 @@ const tPhrase Phrases[] = {
     "Kanaler",
     "Kanavat",
     "Kanaly",
+    "Canales",
   },
   { "Timers",
     "Timer",
@@ -123,6 +128,7 @@ const tPhrase Phrases[] = {
     "Timere",
     "Ajastin",
     "Timery",
+    "Timer",
   },
   { "Recordings",
     "Aufzeichnungen",
@@ -134,6 +140,7 @@ const tPhrase Phrases[] = {
     "Opptak",
     "Nauhoitteet",
     "Nagrania",
+    "Grabaciones",
   },
   { "Setup",
     "Einstellungen",
@@ -145,6 +152,7 @@ const tPhrase Phrases[] = {
     "Konfigurasjon",
     "Asetukset",
     "Nastawy",
+    "Configuraci�n",
   },
   { "Commands",
     "Befehle",
@@ -156,28 +164,31 @@ const tPhrase Phrases[] = {
     "Kommandoer",
     "Komennot",
     "Rozkazy",
+    "�rdenes",
   },
-  { "Edit Channel",
-    "Kanal Editieren",
+  { "Edit channel",
+    "Kanal editieren",
     "Uredi kanal",
     "Modifica canale",
     "Kanaal aanpassen",
-    "Modificar Canal",
+    "Modificar canal",
     "Modifier une cha�ne",
-    "Editer Kanal",
+    "Editer kanal",
     "Muokkaa kanavaa",
-    "Ustawienie Kanalu",
+    "Ustawienie kanalu",
+    "Modificar canal",
   },
-  { "Edit Timer",
-    "Timer Editieren",
+  { "Edit timer",
+    "Timer editieren",
     "Uredi termin",
-    "Modifica Timer",
+    "Modifica timer",
     "Timer veranderen",
-    "Modificar Timer",
+    "Modificar timer",
     "Changer la programmation",
-    "Editer Timer",
+    "Editer timer",
     "Muokkaa ajastusta",
-    "Ustawienie Timerow",
+    "Ustawienie timerow",
+    "Modificar timer",
   },
   { "Event",
     "Sendung",
@@ -189,6 +200,7 @@ const tPhrase Phrases[] = {
     "Hendelse",
     "Tapahtuma",
     "Audycja",
+    "Evento",
   },
   { "Summary",
     "Inhalt",
@@ -200,6 +212,7 @@ const tPhrase Phrases[] = {
     "Sammendrag",
     "Yhteenveto",
     "Zawartosc",
+    "Res�men",
   },
   { "Schedule - %s",
     "Programm - %s",
@@ -211,6 +224,7 @@ const tPhrase Phrases[] = {
     "Program Guide - %s",
     "Ohjelma - %s",
     "Program - %s",
+    "Programa - %s",
   },
   { "What's on now?",
     "Was l�uft jetzt?",
@@ -222,6 +236,7 @@ const tPhrase Phrases[] = {
     "Hvilket program sendes n�?",
     "Nykyinen ohjelma",
     "Program biezacy",
+    "�Qu� hay ahora?",
   },
   { "What's on next?",
     "Was l�uft als n�chstes?",
@@ -233,6 +248,7 @@ const tPhrase Phrases[] = {
     "Hvilket program er neste?",
     "Seuraava ohjelma",
     "Program nastepny",
+    "�Qu� hay proximo?",
   },
   // Button texts (should not be more than 10 characters!):
   { "Edit",
@@ -245,6 +261,7 @@ const tPhrase Phrases[] = {
     "Editer",
     "Muuta",
     "Edycja",
+    "Modificar",
   },
   { "New",
     "Neu",
@@ -256,6 +273,7 @@ const tPhrase Phrases[] = {
     "Ny",
     "Uusi",
     "Nowy",
+    "Nuevo",
   },
   { "Delete",
     "L�schen",
@@ -267,6 +285,7 @@ const tPhrase Phrases[] = {
     "Slett",
     "Poista",
     "Usunac",
+    "Borrar",
   },
   { "Mark",
     "Markieren",
@@ -278,6 +297,7 @@ const tPhrase Phrases[] = {
     "Marker",
     "Merkitse",
     "Zaznaczyc",
+    "Marcar",
   },
   { "On/Off",
     "Ein/Aus",
@@ -289,6 +309,7 @@ const tPhrase Phrases[] = {
     "Av/P�",
     "P��ll�/Pois",
     "Zal./ Wyl.",
+    "On/Off",
   },
   { "Record",
     "Aufnehmen",
@@ -300,6 +321,7 @@ const tPhrase Phrases[] = {
     "Ta opp",
     "Nauhoita",
     "Nagrywac",
+    "Grabar",
   },
   { "Play",
     "Wiedergabe",
@@ -311,6 +333,7 @@ const tPhrase Phrases[] = {
     "Spill av",
     "Toista",
     "Odtwarzac",
+    "Play",
   },
   { "Rewind",
     "Anfang",
@@ -322,6 +345,7 @@ const tPhrase Phrases[] = {
     "Spol tilbake",
     "Takaisinkel.",
     "Poczatek",
+    "Rebobinar",
   },
   { "Button$Stop",
     "Beenden",
@@ -333,6 +357,7 @@ const tPhrase Phrases[] = {
     "Stopp",
     "Pys�yt�",
     "Zakonczyc",
+    "Parar",
   },
   { "Resume",
     "Weiter",
@@ -344,6 +369,7 @@ const tPhrase Phrases[] = {
     "Fortsett",
     "Jatka",
     "Dalej",
+    "Continuar",
   },
   { "Summary",
     "Inhalt",
@@ -355,6 +381,7 @@ const tPhrase Phrases[] = {
     "Sammendrag",
     "Yhteenveto",
     "Zawartosc",
+    "Resumen",
   },
   { "Open",
     "�ffnen",
@@ -366,6 +393,7 @@ const tPhrase Phrases[] = {
     "�pne",
     "Avaa",
     "Otworzyc",
+    "Abrir",
   },
   { "Switch",
     "Umschalten",
@@ -377,6 +405,7 @@ const tPhrase Phrases[] = {
     "Skift til",
     "Valitse",
     "Przelaczyc",
+    "Cambiar",
   },
   { "Now",
     "Jetzt",
@@ -388,6 +417,7 @@ const tPhrase Phrases[] = {
     "N�",
     "Nyt",
     "Teraz",
+    "Ahora",
   },
   { "Next",
     "N�chste",
@@ -399,6 +429,7 @@ const tPhrase Phrases[] = {
     "Neste",
     "Seuraava",
     "Nastepny",
+    "Siguiente",
   },
   { "Button$Schedule",
     "Programm",
@@ -410,6 +441,7 @@ const tPhrase Phrases[] = {
     "Programmer",
     "Ohjelmisto",
     "Program",
+    "Programa",
   },
   { "Language",
     "Sprache",
@@ -421,6 +453,7 @@ const tPhrase Phrases[] = {
     "Spr�k",
     "Kieli",
     "Jezyk",
+    "Lengua",
   },
   { "Eject",
     "Auswerfen",
@@ -432,6 +465,7 @@ const tPhrase Phrases[] = {
     "Eject",
     "Avaa",
     "Wyrzucenie",
+    "Eyectar",
   },
   // Confirmations:
   { "Delete channel?",
@@ -444,6 +478,7 @@ const tPhrase Phrases[] = {
     "Slette kanal?",
     "Poistetaanko kanava?",
     "Usunac kanal?",
+    "�Eliminar canal?",
   },
   { "Delete timer?",
     "Timer l�schen?",
@@ -455,6 +490,7 @@ const tPhrase Phrases[] = {
     "Slette timer?",
     "Poistetaanko ajastus?",
     "Usunac timer?",
+    "�Eliminar timer?",
   },
   { "Delete recording?",
     "Aufzeichnung l�schen?",
@@ -466,6 +502,7 @@ const tPhrase Phrases[] = {
     "Slette opptak?",
     "Poistetaanko nauhoitus?",
     "Usunac nagranie?",
+    "�Eliminar grabacion?",
   },
   { "Timer still recording - really delete?",
     "Timer zeichnet auf - trotzdem l�schen?",
@@ -477,6 +514,7 @@ const tPhrase Phrases[] = {
     "Timer gj�r opptak - vil du slette likevel?",
     "Ajastin nauhoittaa - poistetaanko silti?",
     "Nagrywanie w trakcie - napewno usunac?",
+    "�Timer activo - de verdad eliminarlo?",
   },
   { "Stop recording?",
     "Aufzeichnung beenden?",
@@ -488,6 +526,7 @@ const tPhrase Phrases[] = {
     "Stoppe opptak?",
     "Pys�ytet��nk� nauhoitus?",
     "Zakonczyc nagranie?",
+    "�Parar grabaci�n?",
   },
   { "on primary interface",
     "auf dem prim�ren Interface",
@@ -499,6 +538,7 @@ const tPhrase Phrases[] = {
     "p� f�rste enhet",
     "p��vastaanottimella",
     "na pierwszym interfejsie",
+    "en interface primario",
   },
   { "Cancel editing?",
     "Schneiden abbrechen?",
@@ -510,6 +550,7 @@ const tPhrase Phrases[] = {
     "Avbryte redigering?",
     "Peruutetaanko muokkaus?",
     "Zakonczyc montaz?",
+    "�Cancelar modificaci�n?",
   },
   { "Really restart?",
     "Wirklich neu starten?",
@@ -521,6 +562,7 @@ const tPhrase Phrases[] = {
     "Vil du virkelig starte p� nytt?",
     "Aloitetaanko varmasti alusta?",
     "Rzeczywiscie nowy start?",
+    "�De verdad reiniciar?",
   },
   { "Recording - restart anyway?",
     "Aufnahme l�uft - trotzdem neu starten?",
@@ -532,6 +574,7 @@ const tPhrase Phrases[] = {
     "Gj�r opptak - starte p� nytt likevel?",
     "Nauhoitus k�ynniss� - aloitetaanko alusta?",
     "Nagrywanie w trakcie - rzeczywiscie nowy start?",
+    "�Grabando - reiniciar?",
   },
   { "Recording - shut down anyway?",
     "Aufnahme l�uft - trotzdem ausschalten?",
@@ -543,6 +586,7 @@ const tPhrase Phrases[] = {
     "Gj�r opptak - sl� av likevel?",
     "Nauhoitus kesken - lopetetaanko se?",
     "Nagrywanie w trakcie - mimo to wylaczyc?",
+    "�Grabando - apagar?",
   },
   { "Recording in %d minutes, shut down anyway?",
     "Aufnahme in %d Minuten - trotzdem ausschalten?",
@@ -554,6 +598,7 @@ const tPhrase Phrases[] = {
     "Skal gj�re opptak om %d minutter - sl� av likevel?",
     "Nauhoitus alkaisi %d min. kuluttua - sammutetaanko silti?",
     "Nagrywanie za %d minut - mimo to wylaczyc?",
+    "�Grabando en %d minutos, de verdad cortar?",
   },
   { "Press any key to cancel shutdown",
     "Taste dr�cken um Shutdown abzubrechen",
@@ -565,6 +610,7 @@ const tPhrase Phrases[] = {
     "Trykk en tast for ikke � sl� av",
     "Peruuta pys�ytys painamalla jotakin n�pp�int�",
     "Dowolny przycisk zatrzyma wylaczanie",
+    "Pulse una tecla para interrumpir corte",
   },
   // Channel parameters:
   { "Name",
@@ -577,6 +623,7 @@ const tPhrase Phrases[] = {
     "Navn",
     "Nimi",
     "Nazwa",
+    "Nombre",
   },
   { "Frequency",
     "Frequenz",
@@ -588,6 +635,7 @@ const tPhrase Phrases[] = {
     "Frekvens",
     "Taajuus",
     "Czestotliwosc",
+    "Frecuencia",
   },
   { "Polarization",
     "Polarisation",
@@ -599,6 +647,7 @@ const tPhrase Phrases[] = {
     "Polarisasjon",
     "Polarisaatio",
     "Polaryzacja",
+    "Polarizaci�n",
   },
   { "DiSEqC",
     "DiSEqC",
@@ -610,6 +659,7 @@ const tPhrase Phrases[] = {
     "DiSEqC",
     "DiSEqC",
     "DiSEqC",
+    "DiSEqC",
   },
   { "Srate",
     "Srate",
@@ -621,6 +671,7 @@ const tPhrase Phrases[] = {
     "Srate",
     "Srate",
     "Srate",
+    "Srate",
   },
   { "Vpid",
     "Vpid",
@@ -632,6 +683,7 @@ const tPhrase Phrases[] = {
     "Vpid",
     "Kuva PID",
     "Vpid",
+    "Vpid",
   },
   { "Apid1",
     "Apid1",
@@ -643,6 +695,7 @@ const tPhrase Phrases[] = {
     "Apid1",
     "��ni PID1",
     "Apid1",
+    "Apid1",
   },
   { "Apid2",
     "Apid2",
@@ -654,6 +707,7 @@ const tPhrase Phrases[] = {
     "Apid2",
     "��ni PID2",
     "Apid2",
+    "Apid2",
   },
   { "Dpid1",
     "Dpid1",
@@ -665,6 +719,7 @@ const tPhrase Phrases[] = {
     "AC3pid1",
     "AC3 PID1",
     "Dpid1",
+    "Dpid1",
   },
   { "Dpid2",
     "Dpid2",
@@ -676,6 +731,7 @@ const tPhrase Phrases[] = {
     "AC3pid2",
     "AC3 PID2",
     "Dpid2",
+    "Dpid2",
   },
   { "Tpid",
     "Tpid",
@@ -687,6 +743,7 @@ const tPhrase Phrases[] = {
     "Tekst-TV pid",
     "TekstiTV PID",
     "Tpid",
+    "Tpid",
   },
   { "CA",
     "CA",
@@ -698,6 +755,7 @@ const tPhrase Phrases[] = {
     "Kortleser",
     "Salauskortti",
     "CA",
+    "CA",
   },
   { "Pnr",
     "Pnr",
@@ -709,6 +767,7 @@ const tPhrase Phrases[] = {
     "Program Id",
     "Ohjelmatunnus",
     "Pnr",
+    "Pnr",
   },
   // Timer parameters:
   { "Active",
@@ -721,6 +780,7 @@ const tPhrase Phrases[] = {
     "Aktiv",
     "Aktiivinen",
     "Aktywny",
+    "Activo",
   },
   { "Channel",
     "Kanal",
@@ -732,6 +792,7 @@ const tPhrase Phrases[] = {
     "Kanal",
     "Kanava",
     "Kanal",
+    "Canal",
   },
   { "Day",
     "Tag",
@@ -743,6 +804,7 @@ const tPhrase Phrases[] = {
     "Dag",
     "P�iv�",
     "Dzien",
+    "D�a",
   },
   { "Start",
     "Anfang",
@@ -754,6 +816,7 @@ const tPhrase Phrases[] = {
     "Start",
     "Aloitus",
     "Poczatek",
+    "Comienzo",
   },
   { "Stop",
     "Ende",
@@ -765,6 +828,7 @@ const tPhrase Phrases[] = {
     "Slutt",
     "Lopetus",
     "Koniec",
+    "Fin",
   },
   { "Priority",
     "Priorit�t",
@@ -776,6 +840,7 @@ const tPhrase Phrases[] = {
     "Prioritet",
     "Prioriteetti",
     "Priorytet",
+    "Prioridad",
   },
   { "Lifetime",
     "Lebensdauer",
@@ -787,6 +852,7 @@ const tPhrase Phrases[] = {
     "Levetid",
     "Voimassaolo",
     "Trwalosc dni",
+    "Durabilidad",
   },
   { "File",
     "Datei",
@@ -798,6 +864,7 @@ const tPhrase Phrases[] = {
     "Filnavn",
     "Tiedosto",
     "Plik",
+    "Fichero",
   },
   { "First day",
     "Erster Tag",
@@ -809,6 +876,7 @@ const tPhrase Phrases[] = {
     "F�rste dag",
     "1. p�iv�",
     "Pierwszy dzien",
+    "Primer d�a",
   },
   // Error messages:
   { "Channel is being used by a timer!",
@@ -821,6 +889,7 @@ const tPhrase Phrases[] = {
     "Kanalen er i bruk av en timer!",
     "Kanava on ajastimen k�yt�ss�!",
     "Kanal jest zajety przez timer nagran",
+    "�Canal est� ocupado por un timer!",
   },
   { "Can't switch channel!",
     "Kanal kann nicht umgeschaltet werden!",
@@ -832,6 +901,7 @@ const tPhrase Phrases[] = {
     "Ikke mulig � skifte kanal!",
     "Kanavan vaihtaminen ei mahdollista!",
     "Kanal nie moze byc teraz przelaczony!",
+    "�No puedo cambiar canal!",
   },
   { "Timer is recording!",
     "Timer zeichnet gerade auf!",
@@ -843,9 +913,10 @@ const tPhrase Phrases[] = {
     "Timer gj�r opptak!",
     "Ajastinnauhoitus k�ynniss�!",
     "Timer nagrywa!",
+    "�Timer esta grabando!",
   },
   { "Error while accessing recording!",
-    "Fehler beim ansprechen der Aufzeichnung!",
+    "Fehler beim Ansprechen der Aufzeichnung!",
     "Napaka pri dostopu do posnetka",
     "Errore nel tentativo di acc alla registrazione",
     "Fout bij lezen opname!",
@@ -854,6 +925,7 @@ const tPhrase Phrases[] = {
     "Feil under lesing av opptak!",
     "Nauhoituksen toistaminen ep�onnistui!",
     "Blad - brak dostepu do nagrania!",
+    "�Error al accesar la grabaci�n!",
   },
   { "Error while deleting recording!",
     "Fehler beim L�schen der Aufzeichnung!",
@@ -865,6 +937,7 @@ const tPhrase Phrases[] = {
     "Feil under sletting av opptak!",
     "Nauhoituksen poistaminen ep�onnistui!",
     "Blad przy usuwaniu nagrania!",
+    "�Error al borrar la grabaci�n!",
   },
   { "*** Invalid Channel ***",
     "*** Ung�ltiger Kanal ***",
@@ -876,6 +949,7 @@ const tPhrase Phrases[] = {
     "*** Ugyldig Kanal! ***",
     "*** Virheellinen kanavavalinta! ***",
     "*** Niewazny kanal ***",
+    "*** Canal inv�lido ***",
   },
   { "No free DVB device to record!",
     "Keine freie DVB-Karte zum Aufnehmen!",
@@ -887,6 +961,7 @@ const tPhrase Phrases[] = {
     "Ingen ledige DVB enheter for opptak!",
     "Ei vapaata vastaanotinta nauhoitusta varten!",
     "Brak wolnej karty DVB do nagrywania!",
+    "�No hay dispositivo DVB disponible para grabar!",
   },
   { "Channel locked (recording)!",
     "Kanal blockiert (zeichnet auf)!",
@@ -898,6 +973,7 @@ const tPhrase Phrases[] = {
     "Kanalen er l�st (opptak)!",
     "Kanava lukittu (nauhoitusta varten)!",
     "Kanal zablokowany (nagrywanie w toku)!",
+    "�Canal bloqueado (grabando)!",
   },
   { "Can't start Transfer Mode!",
     "Transfer-Mode kann nicht gestartet werden!",
@@ -909,6 +985,7 @@ const tPhrase Phrases[] = {
     "Kan ikke starte transfer modus!",
     "K�sitt�m�tt�mi� teknisi� ongelmia!",
     "Tryb transferowy jest niemozliwy!",
+    "�No puedo iniciar modo de transferencia!",
   },
   { "Can't start editing process!",
     "Schnitt kann nicht gestartet werden!",
@@ -920,6 +997,7 @@ const tPhrase Phrases[] = {
     "Kan ikke starte redigeringsprosessen!",
     "Muokkauksen aloittaminen ei onnistu!",
     "Uruchamianie montazu jest niemozliwe!",
+    "�No puedo iniciar proceso de modificaci�n!",
   },
   { "Editing process already active!",
     "Schnitt bereits aktiv!",
@@ -931,6 +1009,7 @@ const tPhrase Phrases[] = {
     "Redigeringsprosessen er allerede aktiv!",
     "Muokkaus on jo k�ynniss�!",
     "Montaz w toku!",
+    "�Proceso de modificaci�n ya fue iniciado!",
   },
   { "Can't shutdown - option '-s' not given!",
     "Shutdown unm�glich - Option '-s' fehlt!",
@@ -942,6 +1021,7 @@ const tPhrase Phrases[] = {
     "Kan ikke sl� av - startet uten parameteret '-s'!",
     "Ei voida sammuttaa '-s' parametria ei annettu!",
     "Wylaczenie niemozliwe - brak opcji '-s' !",
+    "�No puedo cortar - opci�n '-s' absente!",
   },
   { "Low disk space!",
     "Platte beinahe voll!",
@@ -953,6 +1033,7 @@ const tPhrase Phrases[] = {
     "Lite ledig diskplass!",
     "Kovalevy l�hes t�ynn�!",
     "Dysk wkrotce pelny!",
+    "�Disco casi lleno",
   },
   // Setup pages:
   { "OSD",
@@ -965,6 +1046,7 @@ const tPhrase Phrases[] = {
     "OSD",
     "Tekstin�ytt�",
     "OSD",
+    "OSD",
   },
   { "EPG",
     "EPG",
@@ -976,6 +1058,7 @@ const tPhrase Phrases[] = {
     "Programoversikt",
     "Ohjelmaopas",
     "EPG",
+    "EPG",
   },
   { "DVB",
     "DVB",
@@ -987,6 +1070,7 @@ const tPhrase Phrases[] = {
     "DVB-enheter",
     "DVB",
     "DVB",
+    "DVB",
   },
   { "LNB",
     "LNB",
@@ -998,6 +1082,7 @@ const tPhrase Phrases[] = {
     "LNB",
     "LNB",
     "LNB",
+    "LNB",
   },
   { "CICAM",
     "CICAM",
@@ -1009,6 +1094,7 @@ const tPhrase Phrases[] = {
     "CICAM",
     "CICAM",
     "CICAM",
+    "CICAM",
   },
   { "Recording",
     "Aufnahme",
@@ -1020,6 +1106,7 @@ const tPhrase Phrases[] = {
     "Opptak",
     "Nauhoita",
     "Nagranie",
+    "Grabaci�n",
   },
   { "Replay",
     "Wiedergabe",
@@ -1031,6 +1118,7 @@ const tPhrase Phrases[] = {
     "Spill av",
     "Toista",
     "Odtwarzanie",
+    "Poner",
   },
   { "Miscellaneous",
     "Sonstiges",
@@ -1042,6 +1130,7 @@ const tPhrase Phrases[] = {
     "Forskjellig",
     "Sekalaista",
     "Pozostale",
+    "Varios",
   },
   { "Restart",
     "Neustart",
@@ -1053,6 +1142,7 @@ const tPhrase Phrases[] = {
     "Start p� nytt",
     "Aloita uudelleen",
     "Zastartowac",
+    "Reiniciar",
   },
   // Setup parameters:
   { "Setup.OSD$Language",
@@ -1065,6 +1155,7 @@ const tPhrase Phrases[] = {
     "Spr�k",
     "Kieli",
     "Jezyk",
+    "Lengua",
   },
   { "Setup.OSD$Width",
     "Breite",
@@ -1076,6 +1167,7 @@ const tPhrase Phrases[] = {
     "Bredde",
     "Leveys",
     "Szerokosc",
+    "Anchura",
   },
   { "Setup.OSD$Height",
     "H�he",
@@ -1087,6 +1179,7 @@ const tPhrase Phrases[] = {
     "H�yde",
     "Korkeus",
     "Wysokosc",
+    "Altura",
   },
   { "Setup.OSD$Message time (s)",
     "Anzeigedauer f�r Nachrichten (s)",
@@ -1098,6 +1191,7 @@ const tPhrase Phrases[] = {
     "Tid meldinger skal vises (s)",
     "Ilmoitusten n�kymisaika (s)",
     "Czas wyswietlania wiadomosci (s)",
+    "Duraci�n muestra mensajes (s)",
   },
   { "Setup.OSD$Channel info position",
     "Kanal-Info Position",
@@ -1109,6 +1203,7 @@ const tPhrase Phrases[] = {
     "Posisjon p� kanalinformasjon",
     "Kanavainfon sijainti",
     "Lokalizacja informacji o kanale",
+    "Posici�n para informaci�n canal",
   },
   { "Setup.OSD$Info on channel switch",
     "Info beim Kanalwechsel",
@@ -1120,6 +1215,7 @@ const tPhrase Phrases[] = {
     "Info ved kanalskifte",
     "N�yt� kanavainfo",
     "Informacja przy zmianie kanalu",
+    "Informaci�n para cambio de canal",
   },
   { "Setup.OSD$Scroll pages",
     "Seitenweise scrollen",
@@ -1131,6 +1227,7 @@ const tPhrase Phrases[] = {
     "Rask rulling i menyer",
     "Valikkojen rullaus",
     "Przesuwac stronami",
+    "Desplazar p�gina entera",
   },
   { "Setup.OSD$Sort timers",
     "Timer sortieren",
@@ -1142,9 +1239,10 @@ const tPhrase Phrases[] = {
     "Sorter timere",
     "J�rjest� ajastimet",
     "Sortowanie timerow",
+    "Ordenar timer",
   },
   { "Setup.OSD$Recording directories",
-    "Aufnahme Verzeichnisse",
+    "Aufnahmeverzeichnisse",
     "Direktoriji za posnetke",
     "Directory di registrazione",
     "Opname directories",
@@ -1153,6 +1251,7 @@ const tPhrase Phrases[] = {
     "Kataloger til opptak",
     "Nauhoitushakemistot",
     "Wykaz nagran",
+    "Directorios para grabaci�n",
   },
   { "Setup.EPG$EPG scan timeout (h)",
     "Zeit bis EPG Scan (h)",
@@ -1164,6 +1263,7 @@ const tPhrase Phrases[] = {
     "Ledig tid f�r EPG-s�k (h)",
     "Ohjelmatied. odotusaika (h)",
     "Czas do skanu EPG (h)",
+    "Tiempo hasta exploraci�n EPG (h)",
   },
   { "Setup.EPG$EPG bugfix level",
     "EPG Fehlerbereinigung",
@@ -1175,6 +1275,7 @@ const tPhrase Phrases[] = {
     "Niv� for EPG-feilretting",
     "EPG Bugfix Level",
     "Poziom bledow EPG",
+    "Nivel para arreglar EPG",
   },
   { "Setup.EPG$Set system time",
     "Systemzeit stellen",
@@ -1186,6 +1287,7 @@ const tPhrase Phrases[] = {
     "Juster system-klokken",
     "Vastaanota kellonaika",
     "Ustawianie czasu",
+    "Ajustar reloj de sistema",
   },
   { "Setup.EPG$Use time from transponder",
     "Transponder f�r Systemzeit",
@@ -1197,6 +1299,7 @@ const tPhrase Phrases[] = {
     "Bruk klokke fra transponder",
     "Vastaanota kellonaika l�hettimelt�",
     "Transponder do ustawiania czasu",
+    "Transponder para reloj de sistema",
   },
   { "Setup.DVB$Primary DVB interface",
     "Prim�res DVB Interface",
@@ -1208,6 +1311,7 @@ const tPhrase Phrases[] = {
     "Hoved DVB-enhet",
     "Ensisij. vast.otin",
     "Pierwotny interfejs DVB",
+    "Primer interface DVB",
   },
   { "Setup.DVB$Video format",
     "Video Format",
@@ -1219,6 +1323,7 @@ const tPhrase Phrases[] = {
     "TV-Format",
     "Kuvamuoto",
     "Format telewizyjny",
+    "Formato V�deo",
   },
   { "Setup.LNB$SLOF (MHz)",
     "SLOF (MHz)",
@@ -1230,6 +1335,7 @@ const tPhrase Phrases[] = {
     "LO-grensefrekvens (MHz)",
     "SLOF (MHz)",
     "SLOF (MHz)",
+    "SLOF (MHz)",
   },
   { "Setup.LNB$Low LNB frequency (MHz)",
     "Untere LNB-Frequenz (MHz)",
@@ -1241,6 +1347,7 @@ const tPhrase Phrases[] = {
     "LO-frekvens i lavb�ndet (MHz)",
     "LO LNB taajuus (MHz)",
     "Dolna czestotliwosc LNB (MHz)",
+    "Frecuencia baja LNB (MHz)",
   },
   { "Setup.LNB$High LNB frequency (MHz)",
     "Obere LNB-Frequenz (MHz)",
@@ -1252,6 +1359,7 @@ const tPhrase Phrases[] = {
     "LO-frekvens i h�yb�ndet (MHz)",
     "HI LNB taajuus (MHz)",
     "Gorna czestotliwosc LNB (MHz)",
+    "Frecuencia alta LNB (MHz)",
   },
   { "Setup.LNB$Use DiSEqC",
     "DiSEqC benutzen",
@@ -1263,6 +1371,7 @@ const tPhrase Phrases[] = {
     "Bruk DiSEqC",
     "K�yt� DiSEqC",
     "Uzywac DiSEqC",
+    "Utilizar DiSEqC",
   },
   { "Setup.CICAM$CICAM DVB",
     "CICAM DVB",
@@ -1274,6 +1383,7 @@ const tPhrase Phrases[] = {
     "CICAM DVB",
     "CICAM DVB",
     "CICAM DVB",
+    "CICAM DVB",
   },
   { "Setup.Recording$Margin at start (min)",
     "Zeitpuffer bei Anfang (min)",
@@ -1285,6 +1395,7 @@ const tPhrase Phrases[] = {
     "Opptaksmargin start (min)",
     "Aloitusmarginaali (min)",
     "Poczatkowy czas buforowy (min)",
+    "Comenzar grabaci�n antes (min)",
   },
   { "Setup.Recording$Margin at stop (min)",
     "Zeitpuffer bei Ende (min)",
@@ -1296,6 +1407,7 @@ const tPhrase Phrases[] = {
     "Opptaksmargin slutt (min)",
     "Lopetusmarginaali (min)",
     "Koncowy czas buforowy (min)",
+    "Cortar grabaci�n despu�s (min)",
   },
   { "Setup.Recording$Primary limit",
     "Prim�r-Limit",
@@ -1307,6 +1419,7 @@ const tPhrase Phrases[] = {
     "Prioritetsgrense HovedDVB",
     "PrimaryLimit",
     "Pierwotny limit",
+    "L'mite primario",
   },
   { "Setup.Recording$Default priority",
     "Default Priorit�t",
@@ -1318,6 +1431,7 @@ const tPhrase Phrases[] = {
     "Normal prioritet (Timer)",
     "Oletusprioriteetti",
     "Priorytet pierwotny",
+    "Prioridad predefinida",
   },
   { "Setup.Recording$Default lifetime (d)",
     "Default Lebensdauer (d)",
@@ -1329,6 +1443,7 @@ const tPhrase Phrases[] = {
     "Normal levetid timer (d)",
     "Oletus voimassaoloaika (d)",
     "Pierwotna trwalosc (d)",
+    "Duraci�n predefinida",
   },
   { "Setup.Recording$Use episode name",
     "Episodenname verwenden",
@@ -1340,6 +1455,7 @@ const tPhrase Phrases[] = {
     "Bruk episodenavn",
     "K�yt� jakson nime�",
     "Czy uzywac nazwe epizodu",
+    "Utilizar nombre de episodo",
   },
   { "Setup.Recording$Mark instant recording",
     "Direktaufzeichnung markieren",
@@ -1351,6 +1467,7 @@ const tPhrase Phrases[] = {
     "Markere direkteopptak",
     "Merkitse v�lit�n nauh.",
     "Zaznaczyc natychm. nagranie",
+    "Marcar grabaciones instant�neas",
   },
   { "Setup.Recording$Name instant recording",
     "Direktaufzeichnung benennen",
@@ -1362,6 +1479,7 @@ const tPhrase Phrases[] = {
     "Navngi direkteopptak",
     "Nime� v�lit�n nauh.",
     "Nazwac natychm. nagranie",
+    "Nombrar grabaciones instant�neas",
   },
   { "Setup.Recording$Record Dolby Digital",
     "Dolby Digital Ton aufzeichnen",
@@ -1373,6 +1491,7 @@ const tPhrase Phrases[] = {
     "Ta opp Dolby Digital lyd",
     "Dolby Digital nauhoitus",
     "Nagrywac Dolby Digital",
+    "Grabar sonido Dolby Digital",
   },
   { "Setup.Recording$Max. video file size (MB)",
     "Max. Video Dateigr��e (MB)",
@@ -1384,6 +1503,7 @@ const tPhrase Phrases[] = {
     "Maksimal st�rrelse p� videofiler (MB)",
     "Maksimi tiedoston koko (MB)",
     "Maks. wielkosc pliku (MB)",
+    "Tama�o m�x. ficheros (MB)",
   },
   { "Setup.Recording$Split edited files",
     "Editierte Dateien aufteilen",
@@ -1395,6 +1515,7 @@ const tPhrase Phrases[] = {
     "Splitt redigerte filer",
     "Paloittele muokatut",
     "Dzielic montowane pliki",
+    "Quebrar ficheros",
   },
   { "Setup.Replay$Multi speed mode",
     "MultiSpeed Modus",
@@ -1406,6 +1527,7 @@ const tPhrase Phrases[] = {
     "Multispeed modus",
     "Moninopeustila",
     "Tryb wielopredkosciowy",
+    "Modo multi-velocidad",
   },
   { "Setup.Replay$Show replay mode",
     "Wiedergabestatus anzeigen",
@@ -1417,6 +1539,7 @@ const tPhrase Phrases[] = {
     "Vis avspillingsmodus",
     "N�yt� toiston tila",
     "Wyswietlac status odtwarzania",
+    "Mostrar modo de replay",
   },
   { "Setup.Miscellaneous$Min. event timeout (min)",
     "Mindest Event Pause (min)",
@@ -1428,6 +1551,7 @@ const tPhrase Phrases[] = {
     "Minste hendelsespause (min)",
     "Minimi tapahtuman odotus (min)",
     "Min. czas do nast. akcji (Event) (min)",
+    "Tiempo m�nimo pausa (min)",
   },
   { "Setup.Miscellaneous$Min. user inactivity (min)",
     "Mindest Benutzer-Inaktivit�t (min)",
@@ -1439,6 +1563,7 @@ const tPhrase Phrases[] = {
     "Minimumstid med inaktivitet (min)",
     "Minimi k�ytt�j�n odotus (min)",
     "Min. brak aktywnosci uzytkownika (min)",
+    "Tiempo m�nimo inactividad (min)",
   },
   { "Setup.Miscellaneous$SVDRP timeout (min)",
     "SVDRP Timeout (min)",
@@ -1450,6 +1575,7 @@ const tPhrase Phrases[] = {
     "Ubrukt SVDRP-levetid (min)",
     "SVDRP odotusaika (min)",
     "Min. brak aktywnosci SVDRP (min)",
+    "SVDRP interrupci�n (min)",
   },
   // The days of the week:
   { "MTWTFSS",
@@ -1462,6 +1588,7 @@ const tPhrase Phrases[] = {
     "MTOTFLS",
     "MTKTPLS",
     "PWSCPSN",
+    "LMMJVSD",
   },
   { "MonTueWedThuFriSatSun", // must all be 3 letters!
     "MonDieMitDonFreSamSon",
@@ -1473,6 +1600,7 @@ const tPhrase Phrases[] = {
     "ManTirOnsTorFreL�rS�n",
     "MaaTiiKesTorPerLauSun",
     "PonWtoSroCzwPiaSobNie",
+    "LunMarMieJueVieSabDom",
   },
   // Learning keys:
   { "Learning Remote Control Keys",
@@ -1485,6 +1613,7 @@ const tPhrase Phrases[] = {
     "L�re fjernkontrolltaster",
     "Kaukos��timen n�pp�inten opettelu",
     "Nauka kodu pilota",
+    "Aprendiendo teclas del telemando",
   },
   { "Phase 1: Detecting RC code type",
     "Phase 1: FB Code feststellen",
@@ -1496,6 +1625,7 @@ const tPhrase Phrases[] = {
     "Fase 1: Finne fjernkontroll-kodetype",
     "Vaihe 1: L�hetystavan selvitt�minen",
     "Faza 1: Detekcja typu kodu",
+    "Fase 1: Detectando tipo de receptor",
   },
   { "Press any key on the RC unit",
     "Eine Taste auf der FB dr�cken",
@@ -1507,6 +1637,7 @@ const tPhrase Phrases[] = {
     "Trykk en av tastene p� fjernkontrollen",
     "Paina mit� tahansa kaukos��timen n�pp�int�",
     "Nacisnac klawisz pilota",
+    "Pulse una tecla en el telemando",
   },
   { "RC code detected!",
     "FB Code erkannt!",
@@ -1518,6 +1649,7 @@ const tPhrase Phrases[] = {
     "Fjernkontroll-kodetype funnet!",
     "N�pp�inpainallus vastaanotettu!",
     "Kod pilota zostal poznany!",
+    "�C�digo detectado!",
   },
   { "Do not press any key...",
     "Keine Taste dr�cken...",
@@ -1529,6 +1661,7 @@ const tPhrase Phrases[] = {
     "Ikke trykk p� noen av tastene...",
     "�l� paina mit��n n�pp�int�...",
     "Nie naciskac klawiszy...",
+    "No pulse tecla...",
   },
   { "Phase 2: Learning specific key codes",
     "Phase 2: Einzelne Tastencodes lernen",
@@ -1540,6 +1673,7 @@ const tPhrase Phrases[] = {
     "Fase 2: L�re spesifikke tastekoder",
     "Vaihe 2: N�pp�inkoodien opettelu",
     "Faza 2: Nauka pojedynczych klawiszy",
+    "Fase 2: Aprendiendo c�digos espec�ficos",
   },
   { "Press key for '%s'",
     "Taste f�r '%s' dr�cken",
@@ -1551,6 +1685,7 @@ const tPhrase Phrases[] = {
     "Trykk tasten for '%s'",
     "Paina n�pp�int� toiminnolle '%s'",
     "Nacisnac klawisz dla '%s'",
+    "Pulsar tecla para '%s'",
   },
   { "Press 'Up' to confirm",
     "'Auf' dr�cken zum Best�tigen",
@@ -1562,6 +1697,7 @@ const tPhrase Phrases[] = {
     "Trykk 'Opp' for � bekrefte",
     "Paina 'Yl�s' hyv�ksy�ksesi",
     "Nacisnac 'Gora' do potwierdzenia",
+    "Pulse 'Arriba' para confirmar",
   },
   { "Press 'Down' to continue",
     "'Ab' dr�cken zum Weitermachen",
@@ -1573,6 +1709,7 @@ const tPhrase Phrases[] = {
     "Trykk Ned' for � fortsette",
     "Paina 'Alas' jatkaaksesi",
     "Nacisnac 'Dol' zeby kontynuowac",
+    "Pulse 'Abajo' para confirmar",
   },
   { "(press 'Up' to go back)",
     "('Auf' dr�cken um zur�ckzugehen)",
@@ -1584,6 +1721,7 @@ const tPhrase Phrases[] = {
     "(trykk 'Opp' for � g� tilbake)",
     "(paina 'Yl�s' palataksesi takaisin)",
     "(Nacisnac 'Gora' cofa)",
+    "(Pulse 'Arriba' para retornar)",
   },
   { "(press 'Down' to end key definition)",
     "('Ab' dr�cken zum Beenden)",
@@ -1595,6 +1733,7 @@ const tPhrase Phrases[] = {
     "(trykk 'Ned' for � avslutte innl�ring)",
     "(paina 'Alas' lopettaaksesi n�pp�inten opettelun)",
     "(Nacisnac 'Dol' by zakonczyc)",
+    "(Pulse 'Abajo' para terminar programaci�n teclas)",
   },
   { "Phase 3: Saving key codes",
     "Phase 3: Codes abspeichern",
@@ -1606,6 +1745,7 @@ const tPhrase Phrases[] = {
     "Fase 3: Lagre tastekoder",
     "Vaihe 3: N�pp�inkoodien tallettaminen",
     "Faza 3: Zapamietac Kod",
+    "Fase 3: Guardar c�digos de teclas",
   },
   { "Press 'Up' to save, 'Down' to cancel",
     "'Auf' speichert, 'Ab' bricht ab",
@@ -1617,6 +1757,7 @@ const tPhrase Phrases[] = {
     "Trykk 'Opp' for � lagre, 'Ned' for � avbryte",
     "Paina 'Yl�s' tallettaaksesi ja 'Alas' peruuttaaksesi",
     "'Gora' zapamietuje, 'Dol' przerywa",
+    "Pulse 'Arriba' para guarder, 'Abajo' para anular",
   },
   // Key names:
   { "Up",
@@ -1629,6 +1770,7 @@ const tPhrase Phrases[] = {
     "Opp",
     "Yl�s",
     "Gora",
+    "Arriba",
   },
   { "Down",
     "Ab",
@@ -1640,6 +1782,7 @@ const tPhrase Phrases[] = {
     "Ned",
     "Alas",
     "Dol",
+    "Abajo",
   },
   { "Menu",
     "Men�",
@@ -1651,6 +1794,7 @@ const tPhrase Phrases[] = {
     "Meny",
     "Valikko",
     "Menu",
+    "Menu",
   },
   { "Ok",
     "Ok",
@@ -1662,6 +1806,7 @@ const tPhrase Phrases[] = {
     "Ok",
     "Ok",
     "Ok",
+    "Ok",
   },
   { "Back",
     "Zur�ck",
@@ -1673,6 +1818,7 @@ const tPhrase Phrases[] = {
     "Tilbake",
     "Takaisin",
     "Wstecz",
+    "Retornar",
   },
   { "Left",
     "Links",
@@ -1684,6 +1830,7 @@ const tPhrase Phrases[] = {
     "Venstre",
     "Vasemmalle",
     "Lewo",
+    "Izquierda",
   },
   { "Right",
     "Rechts",
@@ -1695,6 +1842,7 @@ const tPhrase Phrases[] = {
     "H�yre",
     "Oikealle",
     "Prawo",
+    "Derecha",
   },
   { "Red",
     "Rot",
@@ -1706,6 +1854,7 @@ const tPhrase Phrases[] = {
     "R�d",
     "Punainen",
     "Czerwony",
+    "Rojo",
   },
   { "Green",
     "Gr�n",
@@ -1717,6 +1866,7 @@ const tPhrase Phrases[] = {
     "Gr�nn",
     "Vihre�",
     "Zielony",
+    "Verde",
   },
   { "Yellow",
     "Gelb",
@@ -1728,6 +1878,7 @@ const tPhrase Phrases[] = {
     "Gul",
     "Keltainen",
     "Zolty",
+    "Amarillo",
   },
   { "Blue",
     "Blau",
@@ -1739,6 +1890,7 @@ const tPhrase Phrases[] = {
     "Bl�",
     "Sininen",
     "Niebieski",
+    "Azul",
   },
   { "Power",
     "Ausschalten",
@@ -1750,6 +1902,7 @@ const tPhrase Phrases[] = {
     "Power",
     "Virtakytkin",
     "Wylaczyc",
+    "Corriente",
   },
   { "Volume+",
     "Lautst�rke+",
@@ -1761,6 +1914,7 @@ const tPhrase Phrases[] = {
     "Volum+",
     "��nenvoimakkuus+",
     "Glosnej",
+    "Volumen+",
   },
   { "Volume-",
     "Lautst�rke-",
@@ -1772,6 +1926,7 @@ const tPhrase Phrases[] = {
     "Volum-",
     "��nenvoimakkuus-",
     "Ciszej",
+    "Volumen-",
   },
   { "Mute",
     "Stumm",
@@ -1783,6 +1938,7 @@ const tPhrase Phrases[] = {
     "Lyd av",
     "��nen vaimennus",
     "Cisza",
+    "Mudo",
   },
   // Miscellaneous:
   { "yes",
@@ -1795,6 +1951,7 @@ const tPhrase Phrases[] = {
     "ja",
     "kyll�",
     "tak",
+    "s�",
   },
   { "no",
     "nein",
@@ -1806,6 +1963,7 @@ const tPhrase Phrases[] = {
     "nei",
     "ei",
     "nie",
+    "no",
   },
   { "top",
     "oben",
@@ -1817,6 +1975,7 @@ const tPhrase Phrases[] = {
     "�vre",
     "yl�",
     "gora",
+    "parte sup.",
   },
   { "bottom",
     "unten",
@@ -1828,6 +1987,7 @@ const tPhrase Phrases[] = {
     "nedre",
     "ala",
     "dol",
+    "fondo",
   },
   { "Disk",
     "Disk",
@@ -1839,6 +1999,7 @@ const tPhrase Phrases[] = {
     "Disk",
     "Disk",
     "Disk",
+    "Disco",
   },
   { "free",
     "frei",
@@ -1850,6 +2011,7 @@ const tPhrase Phrases[] = {
     "ledig",
     "vapaa",
     "pozostalo",
+    "libre",
   },
   { "Jump: ", // note the trailing blank
     "Springen: ",
@@ -1861,6 +2023,7 @@ const tPhrase Phrases[] = {
     "Hopp: ",
     "Hypp��: ",
     "Skok: ",
+    "Saltar: ",
   },
   { "Volume ", // note the trailing blank
     "Lautst�rke ",
@@ -1872,6 +2035,7 @@ const tPhrase Phrases[] = {
     "Volum ",
     "��nenvoimakkuus ",
     "Glosnosc ",
+    "Volumen ",
   },
   { " Stop replaying", // note the leading blank!
     " Wiedergabe beenden",
@@ -1883,6 +2047,7 @@ const tPhrase Phrases[] = {
     " Stopp avspilling",
     " Pys�yt� toisto",
     " Zatrzymac odtwarzanie",
+    " Parar reproduci�n",
   },
   { " Stop recording ", // note the leading and trailing blanks!
     " Aufzeichnung beenden ",
@@ -1894,6 +2059,7 @@ const tPhrase Phrases[] = {
     " Stopp opptak fra ",
     " Pys�yt� nauhoitus ",
     " Zatrzymac nagrywanie ",
+    " Parar grabaci�n ",
   },
   { " Cancel editing", // note the leading blank!
     " Schneiden abbrechen",
@@ -1905,6 +2071,7 @@ const tPhrase Phrases[] = {
     " Avbryt redigering",
     " Peruuta muokkaus",
     " Przerwac montaz ",
+    " Anular modificaci�n ",
   },
   { "Switching primary DVB...",
     "Prim�res Interface wird umgeschaltet...",
@@ -1916,6 +2083,7 @@ const tPhrase Phrases[] = {
     "Bytter f�rste DVB-enhet..."
     "Vaihdetaan ensisijainen vastaanotin...",
     "Pierwszy interfejs DVB przelacza...",
+    "Cambio interface primario...",
   },
   { "Up/Dn for new location - OK to move",
     "Auf/Ab f�r neue Position - dann OK",
@@ -1927,6 +2095,7 @@ const tPhrase Phrases[] = {
     "Opp/Ned for ny plass - OK for � flytte",
     "Yl�s/Alas = liiku, OK = siirr�",
     "Gora/Dol na nowa pozycje - Ok zmienia",
+    "Arriba/Abajo para nuevo lugar - OK para mover",
   },
   { "Editing process started",
     "Schnitt gestartet",
@@ -1938,6 +2107,7 @@ const tPhrase Phrases[] = {
     "Redigeringsprosess startet",
     "Muokkaus aloitettu",
     "Uruchomiony proces montazu",
+    "Proceso modificaci�n iniciado",
   },
   { "Editing process finished",
     "Schnitt beendet",
@@ -1949,6 +2119,7 @@ const tPhrase Phrases[] = {
     "Redigeringsprosess avsluttet",
     "Muokkaus lopetettu",
     "Proces montazu zakonczony",
+    "Proceso modificacion terminado",
   },
   { "Editing process failed!",
     "Schnitt gescheitert!",
@@ -1960,6 +2131,7 @@ const tPhrase Phrases[] = {
     "Feil under redigering!",
     "Muokkaus ep�onnistui!",
     "Bledny proces montazu!",
+    "Modificaci�n ha fallado!",
   },
   { "scanning recordings...",
     "Aufzeichnungen werden durchsucht...",
@@ -1971,6 +2143,7 @@ const tPhrase Phrases[] = {
     "G�r igjennom opptakene...",
     "haetaan nauhoituksia...",
     "Skan nagran...",
+    "buscando grabaciones...",
   },
   { NULL }
   };
diff --git a/menu.c b/menu.c
index 03dbcea..bc3aeb6 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
  * See the main source file 'vdr.c' for copyright information and
  * how to reach the author.
  *
- * $Id: menu.c 1.180 2002/03/31 21:17:42 kls Exp $
+ * $Id: menu.c 1.182 2002/04/06 09:41:59 kls Exp $
  */
 
 #include "menu.h"
@@ -694,7 +694,7 @@ public:
   };
 
 cMenuEditChannel::cMenuEditChannel(int Index)
-:cOsdMenu(tr("Edit Channel"), 14)
+:cOsdMenu(tr("Edit channel"), 14)
 {
   channel = Channels.Get(Index);
   if (channel) {
@@ -1070,7 +1070,7 @@ public:
   };
 
 cMenuEditTimer::cMenuEditTimer(int Index, bool New)
-:cOsdMenu(tr("Edit Timer"), 12)
+:cOsdMenu(tr("Edit timer"), 12)
 {
   firstday = NULL;
   timer = Timers.Get(Index);
@@ -1539,6 +1539,7 @@ private:
   void PrepareSchedule(cChannel *Channel);
 public:
   cMenuSchedule(void);
+  virtual ~cMenuSchedule();
   virtual eOSState ProcessKey(eKeys Key);
   };
 
@@ -1556,6 +1557,11 @@ cMenuSchedule::cMenuSchedule(void)
      }
 }
 
+cMenuSchedule::~cMenuSchedule()
+{
+  cMenuWhatsOn::ScheduleEventInfo(); // makes sure any posted data is cleared
+}
+
 static int CompareEventTime(const void *p1, const void *p2)
 {
   return (int)((*(cEventInfo **)p1)->GetTime() - (*(cEventInfo **)p2)->GetTime());
diff --git a/mpatrol.diff b/mpatrol.diff
deleted file mode 100644
index 59497c4..0000000
--- a/mpatrol.diff
+++ /dev/null
@@ -1,56 +0,0 @@
-# This is a BitKeeper generated patch for the following project:
-# Project Name: Linux VDR
-# This patch format is intended for GNU patch command version 2.5 or higher.
-# This patch includes the following deltas:
-#	           ChangeSet	1.20    -> 1.21   
-#	            config.c	1.4     -> 1.5    
-#	             tools.c	1.2     -> 1.3    
-#
-# The following is the BitKeeper ChangeSet Log
-# --------------------------------------------
-# 02/04/01	aschultz@warp10.net	1.21
-# fix memory management due to MPatrol
-# --------------------------------------------
-#
-diff -Nru a/config.c b/config.c
---- a/config.c	Mon Apr  1 14:37:48 2002
-+++ b/config.c	Mon Apr  1 14:37:48 2002
-@@ -265,7 +265,7 @@
-         sscanf(apidbuf, "%d ,%d ", &apid1, &apid2);
-         if (p)
-            sscanf(p, "%d ,%d ", &dpid1, &dpid2);
--        delete apidbuf;
-+        free(apidbuf);
-         }
-      else
-         return false;
-@@ -277,7 +277,7 @@
-            tpid = 0;
-            }
-         strn0cpy(name, buffer, MaxChannelName);
--        delete buffer;
-+        free(buffer);
-         }
-      else
-         return false;
-diff -Nru a/tools.c b/tools.c
---- a/tools.c	Mon Apr  1 14:37:48 2002
-+++ b/tools.c	Mon Apr  1 14:37:48 2002
-@@ -71,7 +71,7 @@
-         esyslog(LOG_ERR, "ERROR: out of memory");
-      }
-   else {
--     delete dest;
-+     free(dest);
-      dest = NULL;
-      }
-   return dest;
-@@ -230,7 +230,7 @@
- const char *AddDirectory(const char *DirName, const char *FileName)
- {
-   static char *buf = NULL;
--  delete buf;
-+  free(buf);
-   asprintf(&buf, "%s/%s", DirName && *DirName ? DirName : ".", FileName);
-   return buf;
- }
diff --git a/vdr.1 b/vdr.1
index 1fd39df..b26a9df 100644
--- a/vdr.1
+++ b/vdr.1
@@ -8,9 +8,9 @@
 .\" License as specified in the file COPYING that comes with the
 .\" vdr distribution.
 .\"
-.\" $Id: vdr.1 1.2 2002/03/29 10:10:04 kls Exp $
+.\" $Id: vdr.1 1.3 2002/04/07 13:11:43 kls Exp $
 .\"
-.TH vdr 1 "29 Mar 2002" "1.0.0" "Video Disk Recorder"
+.TH vdr 1 "7 Apr 2002" "1.0.0" "Video Disk Recorder"
 .SH NAME
 vdr - the Video Disk Recorder
 .SH SYNOPSIS
diff --git a/vdr.5 b/vdr.5
index 483e15f..b440f12 100644
--- a/vdr.5
+++ b/vdr.5
@@ -8,9 +8,9 @@
 .\" License as specified in the file COPYING that comes with the
 .\" vdr distribution.
 .\"
-.\" $Id: vdr.5 1.3 2002/04/01 12:32:59 kls Exp $
+.\" $Id: vdr.5 1.4 2002/04/07 13:12:04 kls Exp $
 .\"
-.TH vdr 5 "29 Mar 2002" "1.0.0" "Video Disk Recorder Files"
+.TH vdr 5 "7 Apr 2002" "1.0.0" "Video Disk Recorder Files"
 .SH NAME
 vdr file formats - the Video Disk Recorder Files
 .SH DESCRIPTION
-- 
cgit v1.2.3