diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2006-01-22 18:00:00 +0100 |
---|---|---|
committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2006-01-22 18:00:00 +0100 |
commit | 446b0e8e0b94b997293aef2f63220c5f8a68bf0f (patch) | |
tree | b2d3e77137f068f9fc3682197c9e7b91afba5fe1 | |
parent | 78e3da813cb4345e57934a9a60f6316f1e257307 (diff) | |
download | vdr-patch-lnbsharing-446b0e8e0b94b997293aef2f63220c5f8a68bf0f.tar.gz vdr-patch-lnbsharing-446b0e8e0b94b997293aef2f63220c5f8a68bf0f.tar.bz2 |
Version 1.3.40vdr-1.3.40
- Fixed a second place where a message should be given when an instant recording
is started (reported by Jesus Bravo Alvarez).
- Modified logging so that even on NPTL systems each line in the log file shows
the individual thread's pid (based on a suggestion from Francois-Xavier Kowalski).
- Fixed a problem with @plugin in keymacros.conf in case the named plugin is not
loaded (reported by Franz Gangkofer).
- Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule'
pointers from cChannel objects (reported by Malte Schröder).
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Improved NULL checking in strreplace().
- Fixed a crash in the Schedule menu with events that have no title (reported by
Rolf Ahrenberg). cEvent::FixEpgBugs() now assigns a "No title" string to events
that have no title.
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
- Recordings are now only started if there is at least 300MB free disk space
(suggested by Markus Hahn).
- When entering text via the numeric keys, the cursor now automatically advances
(based on a patch from Rolf Ahrenberg).
- Updated the Polish OSD texts and the fontosd-iso8859-2.c file (thanks to Jaroslaw
Swierczynski).
- Disabled the "buffer reserve" in Transfer Mode. Last chance to complain if you
really need it - it will be completely removed in the next version. If you are
experiencing problems with a/v running out of sync, try the latest driver and
firmware (if you are using a full featured DVB card).
- Switching channels with the Up/Down or Channel+/Channel- keys now works a lot
faster when the repeat function kicks in, by not actually switching the
channel every time, but rather only displaying the channel info and doing
the final switch when the key is released.
- The channel display is now updated _before_ the channel is switched.
- Added a missing initialization of 'timeout' in the cDisplayChannel constructor.
- Fixed detecting if there can be any useful further input when entering channel
numbers (thanks to Thomas Bergwinkl).
- Updated the Spanish OSD texts (thanks to Jesus Bravo Alvarez).
- Fixed handling the '0' key for switching between the last two channels (thanks
to Thomas Bergwinkl).
-rw-r--r-- | CONTRIBUTORS | 30 | ||||
-rw-r--r-- | HISTORY | 38 | ||||
-rw-r--r-- | channels.conf | 29 | ||||
-rw-r--r-- | config.h | 6 | ||||
-rw-r--r-- | epg.c | 334 | ||||
-rw-r--r-- | fontosd-iso8859-2.c | 452 | ||||
-rw-r--r-- | i18n.c | 779 | ||||
-rw-r--r-- | keys.c | 12 | ||||
-rw-r--r-- | menu.c | 181 | ||||
-rw-r--r-- | menu.h | 5 | ||||
-rw-r--r-- | menuitems.c | 53 | ||||
-rw-r--r-- | menuitems.h | 4 | ||||
-rw-r--r-- | recording.c | 6 | ||||
-rw-r--r-- | recording.h | 6 | ||||
-rw-r--r-- | tools.c | 30 | ||||
-rw-r--r-- | tools.h | 10 | ||||
-rw-r--r-- | transfer.c | 3 | ||||
-rw-r--r-- | vdr.c | 31 |
18 files changed, 1111 insertions, 898 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index dadcf8c..5b460ca 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -936,6 +936,9 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi> for reporting a bug in handling key macros with keys after @plugin for adding compiler options "-fPIC -g" to all plugins for adding a leading '0' to the day in the DayDateTime() function + for reporting a crash in the Schedule menu with events that have no title + for a patch that was used to implement automatic cursor advance when entering text + via the numeric keys Ralf Klueber <ralf.klueber@vodafone.com> for reporting a bug in cutting a recording if there is only a single editing mark @@ -1154,11 +1157,14 @@ Andreas Regel <andreas.regel@gmx.de> for reporting a problem with messages when a cOsdObject uses the raw OSD for implementing palette replace mode in the OSD bitmaps -Thomas Bergwinkl <Thomas.Bergwinkl@t-online.de> +Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de> for fixing the validity check for channel IDs, because some providers use TIDs with value 0 for pointing out that transponder handling didn't work with satellites that provide two transponders on the same frequency, with different polarization + for fixing detecting if there can be any useful further input when entering channel + numbers + for fixing handling the '0' key for switching between the last two channels Stéphane Esté-Gracias <sestegra@free.fr> for fixing a typo in libsi/si.h @@ -1655,3 +1661,25 @@ André Weidemann <Andre.Weidemann@web.de> Jürgen Schilling <juergen_schilling@web.de> for reporting that color buttons were displayed in the recording info menu if it has been invoked from a player + +Jesus Bravo Alvarez <jba@pobox.com> + for reporting a second place where a message should be given when an instant + recording is started + for updating the Spanish OSD texts + +Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> + for suggesting how to modify logging so that even on NPTL systems each line in + the log file shows the individual thread's pid + +Franz Gangkofer <Franz.Gangkofer@cadsoft.de> + for reporting a problem with @plugin in keymacros.conf in case the named plugin + is not loaded + +Malte Schröder <MalteSch@gmx.de> + for reporting a crash after executing the SVDRP command CLRE + +Markus Hahn <mhahn@reel-multimedia.com> + for suggesting to only start recordings if there is at least 300MB free disk space + +Jaroslaw Swierczynski <swiergot@gmail.com> + for updating the Polish OSD texts and the fontosd-iso8859-2.c file @@ -4189,3 +4189,41 @@ Video Disk Recorder Revision History Ahrenberg). - No longer displaying color buttons in the recording info menu if it has been invoked from a player (reported by Jürgen Schilling). + +2006-01-22: Version 1.3.40 + +- Fixed a second place where a message should be given when an instant recording + is started (reported by Jesus Bravo Alvarez). +- Modified logging so that even on NPTL systems each line in the log file shows + the individual thread's pid (based on a suggestion from Francois-Xavier Kowalski). +- Fixed a problem with @plugin in keymacros.conf in case the named plugin is not + loaded (reported by Franz Gangkofer). +- Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule' + pointers from cChannel objects (reported by Malte Schröder). +- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). +- Improved NULL checking in strreplace(). +- Fixed a crash in the Schedule menu with events that have no title (reported by + Rolf Ahrenberg). cEvent::FixEpgBugs() now assigns a "No title" string to events + that have no title. +- Updated the Estonian OSD texts (thanks to Arthur Konovalov). +- Recordings are now only started if there is at least 300MB free disk space + (suggested by Markus Hahn). +- When entering text via the numeric keys, the cursor now automatically advances + (based on a patch from Rolf Ahrenberg). +- Updated the Polish OSD texts and the fontosd-iso8859-2.c file (thanks to Jaroslaw + Swierczynski). +- Disabled the "buffer reserve" in Transfer Mode. Last chance to complain if you + really need it - it will be completely removed in the next version. If you are + experiencing problems with a/v running out of sync, try the latest driver and + firmware (if you are using a full featured DVB card). +- Switching channels with the Up/Down or Channel+/Channel- keys now works a lot + faster when the repeat function kicks in, by not actually switching the + channel every time, but rather only displaying the channel info and doing + the final switch when the key is released. +- The channel display is now updated _before_ the channel is switched. +- Added a missing initialization of 'timeout' in the cDisplayChannel constructor. +- Fixed detecting if there can be any useful further input when entering channel + numbers (thanks to Thomas Bergwinkl). +- Updated the Spanish OSD texts (thanks to Jesus Bravo Alvarez). +- Fixed handling the '0' key for switching between the last two channels (thanks + to Thomas Bergwinkl). diff --git a/channels.conf b/channels.conf index c427628..e15663d 100644 --- a/channels.conf +++ b/channels.conf @@ -23,7 +23,7 @@ Super RTL,S RTL;RTL World:12187:hC34:S19.2E:27500:165:120=deu:65:0:12040:1:1089: VOX;RTL World:12187:hC34:S19.2E:27500:167:136=deu:71:0:12060:1:1089:0 KABEL1;ProSiebenSat.1:12480:vC34:S19.2E:27500:511:512=deu:33:0:899:133:33:0 DAS VIERTE,D VIERTE;BetaDigital:12460:hC34:S19.2E:27500:2047:2048=deu:36:0:1793:133:5:0 -NEUN LIVE Television,NEUN LIVE;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0 +9Live;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0 DSF;BetaDigital:12480:vC34:S19.2E:27500:1023:1024=deu:39:0:900:133:33:0 HSE24,HSE24;BetaDigital:12480:vC34:S19.2E:27500:1279:1280=deu:37:0:40:133:33:0 Bloomberg TV Germany;Bloomberg:12551:vC56:S19.2E:22000:162:99=deu:0:0:12160:1:1108:0 @@ -46,7 +46,7 @@ rbb Berlin;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0 :Premiere World PREMIERE START,START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1801,1722,1702:8:133:2:0 PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1801,1722,1702:10:133:2:0 -PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1801,1722,1702:11:133:2:0 +PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1801,1722,1702:11:133:2:0 PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1702,1801:43:133:2:0 PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0 PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1722,1702,1801:29:133:2:0 @@ -65,6 +65,7 @@ PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:33:0:27:133:4:0 N24;ProSiebenSat.1:12480:vC34:S19.2E:27500:2047:2048=deu:36:0:47:133:33:0 LibertyTV FR;LibertyTV.com:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0 :- +münchen.TV/RFO,müTV/RFO;BetaDigital:12148:hC34:S19.2E:27500:495:496=deu:0:0:658:133:7:0 ProSieben Austria;ProSiebenSat.1:12051:vC34:S19.2E:27500:161:84=deu;85=deu:36:0:20002:1:1082:0 Kabel 1 Schweiz;ProSiebenSat.1:12051:vC34:S19.2E:27500:162:163=deu:165:0:20003:1:1082:0 Kabel 1 Austria;ProSiebenSat.1:12051:vC34:S19.2E:27500:166:167=deu:169:0:20004:1:1082:0 @@ -83,10 +84,26 @@ RTL TELE Letzebuerg:12551:vC56:S19.2E:22000:168:144=eng,146=fra,151=ltz:74:0:399 Nick/Talpa;CANALDIGITAAL:12574:hC56:S19.2E:22000:512+8190:84=dut:33:622,100:5010:53:1109:0 NICK;MTV Networks:12226:hC34:S19.2E:27500:513+8190:661=deu:577:0:28640:1:1091:0 MTV Central;MTV Networks:11739:vC34:S19.2E:27500:3031:3032:3034:0:28653:1:1066:0 -VIVA;VIVA Fernsehen GmbH & Co. KG:12669:vC56:S19.2E:22000:309:310=deu:311:0:12732:1:1116:0 -VIVA PLUS;VIVA Fernsehen GmbH & Co. KG:12551:vC56:S19.2E:22000:171:172=deu:173:0:12120:1:1108:0 +VIVA;MTV Networks:11973:vC34:S19.2E:27500:4061+8190:4062:4064:0:28676:1:1078:0 +VIVA PLUS;MTV Networks:11973:vC34:S19.2E:27500:4071+8190:4072:4074:0:28677:1:1078:0 QVC Deutschland;QVC:12551:vC56:S19.2E:22000:165:166:167:0:12100:1:1108:0 TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0 +:NTSC +Venevision;T-Systems/MTI:11200:vC56:S13.0E:27500:922:923=und:0:0:4750:0:13400:0 +EBC.1;T-Systems/MTI:11200:vC56:S13.0E:27500:373:374=eng:0:0:4747:0:13400:0 +:HDTV +HDFORUM;TF1:11242:vC34:S13.0E:27500:33:36=fra:0:0:13809:100:200:0 +HDFORUM;TF1:11242:vC34:S13.0E:27500:33:36=fra:0:0:13809:318:200:0 +Euro1080 HD-5;Euro1080:10758:vC78:S23.5E:22000:34:160=eng:0:0:1085:9999:3104:0 +Euro1080;EURO1080:12168:vC56:S19.2E:27500:308:256:0:0:21100:1:1088:0 +SMD HD;SES ASTRA:12699:vC56:S19.2E:22000:133+80:234=eng:0:0:29700:0:0:0 +SMD HD:12699:V:S19.2E:22000:133:234=eng:0:0:3231:1:1118:0 +Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:0:29700:0:0:0 +TV HD;CSAT:12581:vC56:S19.2E:22000:165:100=fra;101=fra:0:0:9306:1:1110:0 +C M HD;Telenor:11261:hC78:S1.0W:24500:517:660=eng;661=eng:0:B00:3306:70:33:0 +C MORE HD;Telenor:11389:hC78:S1.0W:24500:512:640;641=eng:0:B00:3306:70:34:0 +HELLAS-HDTV;Scopus Network Technologies:11642:hC34:S13.0E:27500:2201:2211=ell,2212=eng:0:0:2200:318:15700:0 +TPS Star:10757:vC34:S13.0E:27500:420:430=fra,431=eng:440:500,100:1204:176:11200:0 :@201 Sky Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0 Sky Two;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0 @@ -115,10 +132,6 @@ S1T;BSkyB:12285:vC23:S28.2E:27500:513+8190:641=eng,661=NAR:577:960,961:4409:2:20 CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0 BBC PARL'MNT;BSkyB:10847:vC56:S28.2E:22000:2327:2328=eng:2331:0:6902:2:2050:0 IGLESIA MME;T-Systems/MTI:11200:vC56:S13.0E:27500:4097:4098:0:0:4733:318:13400:0 -Euro1080 HD-5;Euro1080:10758:vC78:S23.5E:22000:34:160=eng:0:0:1085:9999:3104:0 -Euro1080;EURO1080:12168:vC56:S19.2E:27500:308:256:0:0:21100:1:1088:0 -SMD HD;SES ASTRA:12699:vC56:S19.2E:22000:133+80:234=eng:0:0:29700:0:0:0 -Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:0:29700:0:0:0 eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0 Challenger Tv;Telespazio:11304:hC34:S13.0E:27500:490:491:0:0:8409:318:500:0 TVS Teleport Bonn;DMV:11535:vC34:S1.0W:5632:308+8190:256=eng,257=eng:0:3:1:65535:1:0 @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.240 2006/01/13 15:17:19 kls Exp $ + * $Id: config.h 1.241 2006/01/15 16:01:48 kls Exp $ */ #ifndef __CONFIG_H @@ -19,8 +19,8 @@ #include "i18n.h" #include "tools.h" -#define VDRVERSION "1.3.39" -#define VDRVERSNUM 10339 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.3.40" +#define VDRVERSNUM 10340 // Version * 10000 + Major * 100 + Minor #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -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.49 2006/01/15 13:58:30 kls Exp $ + * $Id: epg.c 1.51 2006/01/20 14:09:48 kls Exp $ */ #include "epg.h" @@ -422,197 +422,196 @@ void cEvent::FixEpgBugs(void) strreplace(description, '\x86', ' '); strreplace(description, '\x87', ' '); + if (!title) { + // we don't want any "(null)" titles + title = strcpyrealloc(title, tr("No title")); + EpgBugFixStat(12, ChannelID()); + } + if (Setup.EPGBugfixLevel == 0) return; // Some TV stations apparently have their own idea about how to fill in the // EPG data. Let's fix their bugs as good as we can: - if (title) { - - // Some channels put the ShortText in quotes and use either the ShortText - // or the Description field, depending on how long the string is: - // - // Title - // "ShortText". Description - // - if ((shortText == NULL) != (description == NULL)) { - char *p = shortText ? shortText : description; - if (*p == '"') { - const char *delim = "\"."; - char *e = strstr(p + 1, delim); - if (e) { - *e = 0; - char *s = strdup(p + 1); - char *d = strdup(e + strlen(delim)); - free(shortText); - free(description); - shortText = s; - description = d; - EpgBugFixStat(1, ChannelID()); - } - } - } - // Some channels put the Description into the ShortText (preceded - // by a blank) if there is no actual ShortText and the Description - // is short enough: - // - // Title - // Description - // - if (shortText && !description) { - if (*shortText == ' ') { - memmove(shortText, shortText + 1, strlen(shortText)); - description = shortText; - shortText = NULL; - EpgBugFixStat(2, ChannelID()); + // Some channels put the ShortText in quotes and use either the ShortText + // or the Description field, depending on how long the string is: + // + // Title + // "ShortText". Description + // + if ((shortText == NULL) != (description == NULL)) { + char *p = shortText ? shortText : description; + if (*p == '"') { + const char *delim = "\"."; + char *e = strstr(p + 1, delim); + if (e) { + *e = 0; + char *s = strdup(p + 1); + char *d = strdup(e + strlen(delim)); + free(shortText); + free(description); + shortText = s; + description = d; + EpgBugFixStat(1, ChannelID()); } } + } - // Sometimes they repeat the Title in the ShortText: - // - // Title - // Title - // - if (shortText && strcmp(title, shortText) == 0) { - free(shortText); + // Some channels put the Description into the ShortText (preceded + // by a blank) if there is no actual ShortText and the Description + // is short enough: + // + // Title + // Description + // + if (shortText && !description) { + if (*shortText == ' ') { + memmove(shortText, shortText + 1, strlen(shortText)); + description = shortText; shortText = NULL; - EpgBugFixStat(3, ChannelID()); + EpgBugFixStat(2, ChannelID()); } + } - // Some channels put the ShortText between double quotes, which is nothing - // but annoying (some even put a '.' after the closing '"'): - // - // Title - // "ShortText"[.] - // - if (shortText && *shortText == '"') { - int l = strlen(shortText); - if (l > 2 && (shortText[l - 1] == '"' || (shortText[l - 1] == '.' && shortText[l - 2] == '"'))) { - memmove(shortText, shortText + 1, l); - char *p = strrchr(shortText, '"'); - if (p) - *p = 0; - EpgBugFixStat(4, ChannelID()); - } + // Sometimes they repeat the Title in the ShortText: + // + // Title + // Title + // + if (shortText && strcmp(title, shortText) == 0) { + free(shortText); + shortText = NULL; + EpgBugFixStat(3, ChannelID()); + } + + // Some channels put the ShortText between double quotes, which is nothing + // but annoying (some even put a '.' after the closing '"'): + // + // Title + // "ShortText"[.] + // + if (shortText && *shortText == '"') { + int l = strlen(shortText); + if (l > 2 && (shortText[l - 1] == '"' || (shortText[l - 1] == '.' && shortText[l - 2] == '"'))) { + memmove(shortText, shortText + 1, l); + char *p = strrchr(shortText, '"'); + if (p) + *p = 0; + EpgBugFixStat(4, ChannelID()); } + } - if (Setup.EPGBugfixLevel <= 1) - return; + if (Setup.EPGBugfixLevel <= 1) + return; - // Some channels apparently try to do some formatting in the texts, - // which is a bad idea because they have no way of knowing the width - // of the window that will actually display the text. - // Remove excess whitespace: - title = compactspace(title); - shortText = compactspace(shortText); - description = compactspace(description); + // Some channels apparently try to do some formatting in the texts, + // which is a bad idea because they have no way of knowing the width + // of the window that will actually display the text. + // Remove excess whitespace: + title = compactspace(title); + shortText = compactspace(shortText); + description = compactspace(description); #define MAX_USEFUL_EPISODE_LENGTH 40 - // Some channels put a whole lot of information in the ShortText and leave - // the Description totally empty. So if the ShortText length exceeds - // MAX_USEFUL_EPISODE_LENGTH, let's put this into the Description - // instead: - if (!isempty(shortText) && isempty(description)) { - if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { - free(description); - description = shortText; - shortText = NULL; - EpgBugFixStat(6, ChannelID()); - } + // Some channels put a whole lot of information in the ShortText and leave + // the Description totally empty. So if the ShortText length exceeds + // MAX_USEFUL_EPISODE_LENGTH, let's put this into the Description + // instead: + if (!isempty(shortText) && isempty(description)) { + if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { + free(description); + description = shortText; + shortText = NULL; + EpgBugFixStat(6, ChannelID()); } + } - // Some channels put the same information into ShortText and Description. - // In that case we delete one of them: - if (shortText && description && strcmp(shortText, description) == 0) { - if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { - free(shortText); - shortText = NULL; - } - else { - free(description); - description = NULL; - } - EpgBugFixStat(7, ChannelID()); + // Some channels put the same information into ShortText and Description. + // In that case we delete one of them: + if (shortText && description && strcmp(shortText, description) == 0) { + if (strlen(shortText) > MAX_USEFUL_EPISODE_LENGTH) { + free(shortText); + shortText = NULL; + } + else { + free(description); + description = NULL; } + EpgBugFixStat(7, ChannelID()); + } - // Some channels use the ` ("backtick") character, where a ' (single quote) - // would be normally used. Actually, "backticks" in normal text don't make - // much sense, so let's replace them: - strreplace(title, '`', '\''); - strreplace(shortText, '`', '\''); - strreplace(description, '`', '\''); + // Some channels use the ` ("backtick") character, where a ' (single quote) + // would be normally used. Actually, "backticks" in normal text don't make + // much sense, so let's replace them: + strreplace(title, '`', '\''); + strreplace(shortText, '`', '\''); + strreplace(description, '`', '\''); - if (Setup.EPGBugfixLevel <= 2) - return; + if (Setup.EPGBugfixLevel <= 2) + return; - // The stream components have a "description" field which some channels - // apparently have no idea of how to set correctly: - if (components) { - for (int i = 0; i < components->NumComponents(); i++) { - tComponent *p = components->Component(i); - switch (p->stream) { - case 0x01: { // video - if (p->description) { - if (strcasecmp(p->description, "Video") == 0 || - strcasecmp(p->description, "Bildformat") == 0) { - // Yes, we know it's video - that's what the 'stream' code - // is for! But _which_ video is it? - free(p->description); - p->description = NULL; - EpgBugFixStat(8, ChannelID()); - } - } - if (!p->description) { - switch (p->type) { - case 0x01: - case 0x05: p->description = strdup("4:3"); break; - case 0x02: - case 0x03: - case 0x06: - case 0x07: p->description = strdup("16:9"); break; - case 0x04: - case 0x08: p->description = strdup(">16:9"); break; - case 0x09: - case 0x0D: p->description = strdup("HD 4:3"); break; - case 0x0A: - case 0x0B: - case 0x0E: - case 0x0F: p->description = strdup("HD 16:9"); break; - case 0x0C: - case 0x10: p->description = strdup("HD >16:9"); break; - } - EpgBugFixStat(9, ChannelID()); + // The stream components have a "description" field which some channels + // apparently have no idea of how to set correctly: + if (components) { + for (int i = 0; i < components->NumComponents(); i++) { + tComponent *p = components->Component(i); + switch (p->stream) { + case 0x01: { // video + if (p->description) { + if (strcasecmp(p->description, "Video") == 0 || + strcasecmp(p->description, "Bildformat") == 0) { + // Yes, we know it's video - that's what the 'stream' code + // is for! But _which_ video is it? + free(p->description); + p->description = NULL; + EpgBugFixStat(8, ChannelID()); } } - break; - case 0x02: { // audio - if (p->description) { - if (strcasecmp(p->description, "Audio") == 0) { - // Yes, we know it's audio - that's what the 'stream' code - // is for! But _which_ audio is it? - free(p->description); - p->description = NULL; - EpgBugFixStat(10, ChannelID()); - } - } - if (!p->description) { - switch (p->type) { - case 0x05: p->description = strdup("Dolby Digital"); break; - // all others will just display the language - } - EpgBugFixStat(11, ChannelID()); + if (!p->description) { + switch (p->type) { + case 0x01: + case 0x05: p->description = strdup("4:3"); break; + case 0x02: + case 0x03: + case 0x06: + case 0x07: p->description = strdup("16:9"); break; + case 0x04: + case 0x08: p->description = strdup(">16:9"); break; + case 0x09: + case 0x0D: p->description = strdup("HD 4:3"); break; + case 0x0A: + case 0x0B: + case 0x0E: + case 0x0F: p->description = strdup("HD 16:9"); break; + case 0x0C: + case 0x10: p->description = strdup("HD >16:9"); break; + } + EpgBugFixStat(9, ChannelID()); + } + } + break; + case 0x02: { // audio + if (p->description) { + if (strcasecmp(p->description, "Audio") == 0) { + // Yes, we know it's audio - that's what the 'stream' code + // is for! But _which_ audio is it? + free(p->description); + p->description = NULL; + EpgBugFixStat(10, ChannelID()); } } - break; - } - } - } - } - else { - // we don't want any "(null)" titles - title = strcpyrealloc(title, tr("No title")); - EpgBugFixStat(12, ChannelID()); + if (!p->description) { + switch (p->type) { + case 0x05: p->description = strdup("Dolby Digital"); break; + // all others will just display the language + } + EpgBugFixStat(11, ChannelID()); + } + } + break; + } + } } } @@ -935,7 +934,10 @@ bool cSchedules::ClearAll(void) cSchedulesLock SchedulesLock(true, 1000); cSchedules *s = (cSchedules *)Schedules(SchedulesLock); if (s) { - s->Clear(); + for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) + Timer->SetEvent(NULL); + for (cSchedule *Schedule = s->First(); Schedule; Schedule = s->Next(Schedule)) + Schedule->Cleanup(INT_MAX); return true; } return false; diff --git a/fontosd-iso8859-2.c b/fontosd-iso8859-2.c index 979c902..e61e9a8 100644 --- a/fontosd-iso8859-2.c +++ b/fontosd-iso8859-2.c @@ -3948,23 +3948,23 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x000001F0, // ....*****.... - 0x000003F8, // ...*******... - 0x0000071C, // ..***...***.. - 0x00000C0C, // .**......**.. - 0x00000C06, // .**.......**. - 0x00000C06, // .**.......**. - 0x00000E00, // .***......... - 0x00000700, // ..***........ + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000FE0, // .*******..... 0x00000FE0, // .*******..... - 0x00000FA0, // .*****.*..... - 0x00000380, // ...***....... - 0x00000180, // ....**....... - 0x00000180, // ....**....... - 0x00000300, // ...**........ 0x00000600, // ..**......... - 0x00000FFE, // .***********. - 0x00000FFC, // .**********.. + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x00000600, // ..**......... + 0x000007FE, // ..**********. + 0x000007FE, // ..**********. 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. @@ -4032,34 +4032,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. }, { // 166 - 6, 27, - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x00000000, // ...... - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. - 0x0000000C, // ..**.. + 15, 27, + 0x00000070, // ........***.... + 0x000000E0, // .......***..... + 0x000001C0, // ......***...... + 0x00000380, // .....***....... + 0x00000000, // ............... + 0x000003E0, // .....*****..... + 0x00000FF8, // ...*********... + 0x00000C1C, // ...**.....***.. + 0x0000180C, // ..**.......**.. + 0x00001804, // ..**........*.. + 0x00001800, // ..**........... + 0x00001C00, // ..***.......... + 0x00000F80, // ...*****....... + 0x000007F8, // ....********... + 0x0000007C, // ........*****.. + 0x0000000E, // ...........***. + 0x00000006, // ............**. + 0x00003006, // .**.........**. + 0x00001806, // ..**........**. + 0x0000180C, // ..**.......**.. + 0x00000FF8, // ...*********... + 0x000007F0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... }, { // 167 13, 27, @@ -4212,34 +4212,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // .............. }, { // 172 - 13, 27, - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000FFF, // .************ - 0x00000FFF, // .************ - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000003, // ...........** - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. + 14, 27, + 0x00000000, // .............. + 0x00000030, // ........**.... + 0x00000060, // .......**..... + 0x000000C0, // ......**...... + 0x00000000, // .............. + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x0000000E, // ..........***. + 0x0000000C, // ..........**.. + 0x0000001C, // .........***.. + 0x00000038, // ........***... + 0x00000070, // .......***.... + 0x000000E0, // ......***..... + 0x000000C0, // ......**...... + 0x000001C0, // .....***...... + 0x00000380, // ....***....... + 0x00000700, // ...***........ + 0x00000600, // ...**......... + 0x00000E00, // ..***......... + 0x00001C00, // .***.......... + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. }, { // 173 8, 27, @@ -4302,34 +4302,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // .............. }, { // 175 - 8, 27, - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x0000007E, // .******. - 0x0000007E, // .******. - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ + 14, 27, + 0x00000000, // .............. + 0x00000000, // .............. + 0x000000C0, // ......**...... + 0x000000C0, // ......**...... + 0x00000000, // .............. + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x0000000E, // ..........***. + 0x0000000C, // ..........**.. + 0x0000001C, // .........***.. + 0x00000038, // ........***... + 0x00000070, // .......***.... + 0x000000E0, // ......***..... + 0x000000C0, // ......**...... + 0x000001C0, // .....***...... + 0x00000380, // ....***....... + 0x00000700, // ...***........ + 0x00000600, // ...**......... + 0x00000E00, // ..***......... + 0x00001C00, // .***.......... + 0x00001FFE, // .************. + 0x00001FFE, // .************. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. + 0x00000000, // .............. }, { // 176 14, 27, @@ -4371,23 +4371,23 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000FFE, // .***********. - 0x00000FFE, // .***********. - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000060, // ......**..... - 0x00000000, // ............. - 0x00000FFE, // .***********. - 0x00000FFE, // .***********. - 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. + 0x000001F0, // ....*****.... + 0x000007FC, // ..*********.. + 0x0000060C, // ..**.....**.. + 0x0000040C, // ..*......**.. + 0x0000000C, // .........**.. + 0x000001FC, // ....*******.. + 0x000007CC, // ..*****..**.. + 0x00000E0C, // .***.....**.. + 0x00000C0C, // .**......**.. + 0x00000C1C, // .**.....***.. + 0x00000FFE, // .***********. + 0x000003EE, // ...*****.***. + 0x0000000E, // .........***. + 0x0000000E, // .........***. + 0x00000006, // ..........**. 0x00000000, // ............. 0x00000000, // ............. }, @@ -4428,23 +4428,23 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ........ 0x00000000, // ........ 0x00000000, // ........ - 0x00000000, // ........ - 0x0000003C, // ..****.. - 0x0000007E, // .******. - 0x00000046, // .*...**. - 0x00000006, // .....**. - 0x0000001C, // ...***.. - 0x00000006, // .....**. - 0x00000003, // ......** - 0x000000C3, // **....** - 0x0000007E, // .******. + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x0000001E, // ...****. 0x0000003C, // ..****.. - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ - 0x00000000, // ........ + 0x00000070, // .***.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... + 0x00000030, // ..**.... 0x00000000, // ........ 0x00000000, // ........ 0x00000000, // ........ @@ -4518,27 +4518,27 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............ 0x00000000, // ............ 0x00000000, // ............ - 0x000000FF, // ....******** - 0x000001FF, // ...********* - 0x000003F6, // ..******.**. - 0x000003F6, // ..******.**. - 0x000007F6, // .*******.**. - 0x000007F6, // .*******.**. - 0x000007F6, // .*******.**. - 0x000007F6, // .*******.**. - 0x000003F6, // ..******.**. - 0x000003F6, // ..******.**. - 0x000000F6, // ....****.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. - 0x00000036, // ......**.**. + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000000, // ............ + 0x00000000, // ............ + 0x000001F8, // ...******... + 0x000003FC, // ..********.. + 0x0000060C, // .**.....**.. + 0x00000600, // .**......... + 0x00000700, // .***........ + 0x000003F0, // ..******.... + 0x000000FC, // ....******.. + 0x0000000E, // ........***. + 0x00000606, // .**......**. + 0x00000606, // .**......**. + 0x000007FC, // .*********.. + 0x000001F8, // ...******... + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ 0x00000000, // ............ }, { // 183 @@ -4692,34 +4692,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ....... }, { // 188 - 20, 27, - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00018030, // ...**.........**.... - 0x00038020, // ..***.........*..... - 0x00078040, // .****........*...... - 0x000180C0, // ...**.......**...... - 0x00018180, // ...**......**....... - 0x00018100, // ...**......*........ - 0x0001830C, // ...**.....**....**.. - 0x0001860C, // ...**....**.....**.. - 0x0001861C, // ...**....**....***.. - 0x00000C3C, // ........**....****.. - 0x0000186C, // .......**....**.**.. - 0x0000384C, // ......***....*..**.. - 0x000030FF, // ......**....******** - 0x000060FF, // .....**.....******** - 0x0000E00C, // ....***.........**.. - 0x0000C004, // ....**...........*.. - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... - 0x00000000, // .................... + 12, 27, + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000000, // ............ + 0x00000000, // ............ + 0x000007FC, // .*********.. + 0x000007FC, // .*********.. + 0x00000018, // .......**... + 0x00000018, // .......**... + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000180, // ...**....... + 0x00000300, // ..**........ + 0x00000600, // .**......... + 0x000007FE, // .**********. + 0x000007FE, // .**********. + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ }, { // 189 20, 27, @@ -4782,34 +4782,34 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............ }, { // 191 - 14, 27, - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x000000C0, // ......**...... - 0x000000C0, // ......**...... - 0x00000000, // .............. - 0x00000000, // .............. - 0x00000000, // .............. - 0x000000C0, // ......**...... - 0x000000C0, // ......**...... - 0x000001C0, // .....***...... - 0x00000380, // ....***....... - 0x00000700, // ...***........ - 0x00000600, // ...**......... - 0x00000C00, // ..**.......... - 0x00000C0C, // ..**......**.. - 0x00000C0C, // ..**......**.. - 0x00000E1C, // ..***....***.. - 0x000007F8, // ...********... - 0x000003E0, // ....*****..... + 12, 27, + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000060, // .....**..... + 0x00000060, // .....**..... + 0x00000000, // ............ + 0x00000000, // ............ + 0x000007FC, // .*********.. + 0x000007FC, // .*********.. + 0x00000018, // .......**... + 0x00000018, // .......**... + 0x00000030, // ......**.... + 0x00000060, // .....**..... + 0x000000C0, // ....**...... + 0x00000180, // ...**....... + 0x00000300, // ..**........ + 0x00000600, // .**......... + 0x000007FE, // .**********. + 0x000007FE, // .**********. + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ + 0x00000000, // ............ }, { // 192 15, 27, @@ -5113,10 +5113,10 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { }, { // 202 15, 27, - 0x000000C0, // .......**...... - 0x000001E0, // ......****..... - 0x00000320, // .....**..*..... - 0x00000230, // .....*...**.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... 0x00000000, // ............... 0x00001FFE, // ..************. 0x00001FFE, // ..************. @@ -5135,9 +5135,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00001800, // ..**........... 0x00001FFE, // ..************. 0x00001FFE, // ..************. - 0x00000000, // ............... - 0x00000000, // ............... - 0x00000000, // ............... + 0x00000006, // ............**. + 0x00000006, // ............**. + 0x00000006, // ............**. 0x00000000, // ............... 0x00000000, // ............... }, @@ -5323,10 +5323,10 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { }, { // 209 17, 27, - 0x00000000, // ................. - 0x00000760, // ......***.**..... - 0x00000FE0, // .....*******..... + 0x00000070, // ..........***.... + 0x00000060, // ..........**..... 0x000000C0, // .........**...... + 0x00000180, // ........**....... 0x00000000, // ................. 0x0000600C, // ..**.........**.. 0x0000700C, // ..***........**.. @@ -6078,9 +6078,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x000000E0, // .....***..... - 0x000000B0, // .....*.**.... - 0x00000190, // ....**..*.... + 0x00000000, // ............. + 0x00000000, // ............. + 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. 0x000001F0, // ....*****.... @@ -6095,9 +6095,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x0000060C, // ..**.....**.. 0x000007F8, // ..********... 0x000001F0, // ....*****.... - 0x00000000, // ............. - 0x00000000, // ............. - 0x00000000, // ............. + 0x00000038, // .......***... + 0x00000070, // ......***.... + 0x00000038, // .......***... 0x00000000, // ............. 0x00000000, // ............. }, @@ -6288,9 +6288,9 @@ cFont::tPixelData FontOsd_iso8859_2[][29] = { 0x00000000, // ............. 0x00000000, // ............. 0x00000000, // ............. - 0x00000180, // ....**....... - 0x000003F8, // ...*******... - 0x00000270, // ...*..***.... + 0x0000000C, // .........**.. + 0x00000018, // ........**... + 0x00000030, // .......**.... 0x00000000, // ............. 0x00000000, // ............. 0x000004F8, // ..*..*****... @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.235 2006/01/15 12:22:15 kls Exp $ + * $Id: i18n.c 1.240 2006/01/22 15:55:28 kls Exp $ * * Translations provided by: * @@ -15,8 +15,8 @@ * French Jean-Claude Repetto <jc@repetto.org>, Olivier Jacques <jacquesolivier@hotmail.com>, Gregoire Favre <greg@magma.unil.ch>, Nicolas Huillard <nhuillard@e-dition.fr> * Norwegian Jørgen Tvedt <pjtvedt@online.no>, Truls Slevigen <truls@slevigen.no> * Finnish Hannu Savolainen <hannu@opensound.com>, Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, Niko Tarnanen <niko.tarnanen@hut.fi>, Rolf Ahrenberg <rahrenbe@cc.hut.fi> - * Polish Michael Rakowski <mrak@gmx.de> - * Spanish Ruben Nunez Francisco <ruben.nunez@tang-it.com> + * Polish Michael Rakowski <mrak@gmx.de>, Jaroslaw Swierczynski <swiergot@gmail.com> + * Spanish Ruben Nunez Francisco <ruben.nunez@tang-it.com>, Jesus Bravo Alvarez <jba@pobox.com> * Greek Dimitrios Dimitrakos <mail@dimitrios.de> * Swedish Tomas Prybil <tomas@prybil.se>, Jan Ekholm <chakie@infa.abo.fi> * Romanian Paul Lacatus <paul@campina.iiruc.ro>, Lucian Muresan <lucianm@users.sourceforge.net> @@ -112,8 +112,8 @@ const tI18nPhrase Phrases[] = { "iso8859-1", "iso8859-1", "iso8859-15", - "iso8859-1", - "iso8859-1", + "iso8859-2", + "iso8859-15", "iso8859-7", "iso8859-1", "iso8859-2", @@ -198,7 +198,7 @@ const tI18nPhrase Phrases[] = { "Chaînes", "Kanaler", "Kanavat", - "Kanaly", + "Kana³y", "Canales", "ÊáíÜëéá", "Kanaler", @@ -220,7 +220,7 @@ const tI18nPhrase Phrases[] = { "Timere", "Ajastimet", "Timery", - "Timer", + "Programar grabaciones", "×ñïíïðñïãñáììáôéóìïß", "Timers", "Timer-e", @@ -261,8 +261,8 @@ const tI18nPhrase Phrases[] = { "Infos sur l'enregistrement", "",// TODO "Tallenteen tiedot", - "",// TODO - "",// TODO + "Informacje o nagraniu", + "Información de grabación", "Ðëçñïöïñßåò EããñáöÞò", "Inspelning", "Detaliile înregistrãrii", @@ -282,7 +282,7 @@ const tI18nPhrase Phrases[] = { "Configuration", "Konfigurasjon", "Asetukset", - "Nastawy", + "Ustawienia", "Configuración", "Ñõèìéóåéò", "Inställningar", @@ -303,7 +303,7 @@ const tI18nPhrase Phrases[] = { "Commandes", "Kommandoer", "Komennot", - "Rozkazy", + "Polecenia", "Órdenes", "ÅíôïëÝò", "Kommandon", @@ -324,7 +324,7 @@ const tI18nPhrase Phrases[] = { "Commandes d'enregistrement", "",// TODO "Tallennekomennot", - "Rozkazy Nagran", + "Polecenia nagrañ", "Órdenes de grabación", "ÅíôïëÝò ãéÜ åããñáöÝò", "Inspelningskommandon", @@ -345,7 +345,7 @@ const tI18nPhrase Phrases[] = { "Modifier une chaîne", "Editer kanal", "Muokkaa kanavaa", - "Ustawienie kanalu", + "Edycja kana³u", "Modificar canal", "Ôñïðïðïßçóç Êáíáëéïý", "Ändra kanal", @@ -366,8 +366,8 @@ const tI18nPhrase Phrases[] = { "Changer la programmation", "Editer timer", "Muokkaa ajastinta", - "Ustawienie timerow", - "Modificar timer", + "Edycja timera", + "Modificar programación", "Ôñïðïðïßçóç ÷ñïíïðñïãñáììáôéóìïý", "Ändra timer", "Modificare timer", @@ -408,8 +408,8 @@ const tI18nPhrase Phrases[] = { "Info", "",//TODO "Tiedot", - "",//TODO - "",//TODO + "Info", + "Info", "Ðëçñïöïñßåò", "Info", "Info", @@ -430,7 +430,7 @@ const tI18nPhrase Phrases[] = { "Program Guide - %s", "Ohjelmisto - %s", "Program - %s", - "Programa - %s", + "Guía de programación - %s", "Ðñüãñáììá - %s", "Program - %s", "Programul canalului %s", @@ -438,7 +438,7 @@ const tI18nPhrase Phrases[] = { "Guia de Programació - %s", "¿àÞÓàÐÜÜÐ - %s", "Raspored - %s", - "Programm - %s", + "Ajakava - %s", "Program - %s", }, { "This event - %s", @@ -449,17 +449,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "Tämä tapahtuma - %s", "",//TODO + "Este evento - %s", "",//TODO + "Ta audycja - %s", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "See sündmus - %s", "",//TODO }, { "This event - all channels", @@ -470,17 +470,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "Tämä tapahtuma - kaikki kanavat", "",//TODO + "Este evento - todos los canales", "",//TODO + "Ta audycja - wszystkie kana³y", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "See sündmus - kõik kanalid", "",//TODO }, { "All events - all channels", @@ -491,17 +491,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "Kaikki tapahtumat - kaikki kanavat", "",//TODO + "Todos los eventos - todos los canales", "",//TODO + "Wszystkie audycje - wszystkie kana³y", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "Kõik sündmused - kõik kanalid", "",//TODO }, { "What's on now?", @@ -513,7 +513,7 @@ const tI18nPhrase Phrases[] = { "Programmes en cours", "Hvilket program sendes nå?", "Menossa nyt", - "Program biezacy", + "Program bie¿±cy", "¿Qué hay ahora?", "ÔñÝ÷ïí ðñüãñáììá", "Vad sänds nu?", @@ -534,8 +534,8 @@ const tI18nPhrase Phrases[] = { "Prochains programmes", "Hvilket program er neste?", "Tulossa seuraavaksi", - "Program nastepny", - "¿Qué hay proximo?", + "Nastêpne audycje", + "¿Qué hay después?", "Åðüìåíï ðñüãñáììá", "Vilket är nästa program?", "Ce emisiuni urmeazã?", @@ -555,7 +555,7 @@ const tI18nPhrase Phrases[] = { "Résumé", "Sammendrag", "Yhteenveto", - "Zawartosc", + "Podsumowanie", "Resumen", "Ðåñéå÷üìåíï", "Sammanfattning", @@ -564,7 +564,7 @@ const tI18nPhrase Phrases[] = { "Resum", "¾ßØáÐÝØÕ", "Sadr¾aj", - "Kokkuvõte", + "Ülevaade", "Omtale", }, // Button texts (should not be more than 10 characters!): @@ -577,7 +577,7 @@ const tI18nPhrase Phrases[] = { "Modifier", "Editer", "Muokkaa", - "Edycja", + "Edytuj", "Modificar", "ÐñïóáñìïãÞ", "Ändra", @@ -619,7 +619,7 @@ const tI18nPhrase Phrases[] = { "Supprimer", "Slett", "Poista", - "Usunac", + "Usuñ", "Borrar", "ÄéáãñáöÞ", "Ta bort", @@ -640,7 +640,7 @@ const tI18nPhrase Phrases[] = { "Marquer", "Marker", "Siirrä", - "Zaznaczyc", + "Zaznacz", "Marcar", "ÅðéëïãÞ", "Märk", @@ -661,7 +661,7 @@ const tI18nPhrase Phrases[] = { "Marche/Arr", "Av/På", "Päällä/Pois", - "Zal./ Wyl.", + "W³/Wy³", "On/Off", "Aíïé÷/Këåéóôü", "På/Av", @@ -670,7 +670,7 @@ const tI18nPhrase Phrases[] = { "On/Off", "²ÚÛ/²ëÚÛ", "De-/Aktiviraj", - "Sees/Väljas", + "On/Off", "Til/Fra", }, { "Timer", @@ -682,6 +682,8 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "Ajastin", + "Timer",// TODO + "Programa", "",// TODO "",// TODO "",// TODO @@ -689,9 +691,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO - "",// TODO - "",// TODO - "",// TODO + "Taimer", "",// TODO }, { "Button$Record", @@ -703,7 +703,7 @@ const tI18nPhrase Phrases[] = { "Enregistre", "Ta opp", "Tallenna", - "Nagrywac", + "Nagraj", "Grabar", "ÅããñáöÞ", "Inspelning", @@ -724,7 +724,7 @@ const tI18nPhrase Phrases[] = { "Lire", "Spill av", "Toista", - "Odtwarzac", + "Odtwórz", "Play", "ÁíáðáñáãùãÞ", "Spela upp", @@ -745,7 +745,7 @@ const tI18nPhrase Phrases[] = { "Pause", "",// TODO "Tauko", - "Przerwa", + "Pauza", "Pausa", "Ðáýóç", "Pausa", @@ -766,7 +766,7 @@ const tI18nPhrase Phrases[] = { "Retour", "Spol tilbake", "Alkuun", - "Poczatek", + "Pocz±tek", "Rebobinar", "ÌåôáöïñÜ óôçí Áñ÷Þ", "Återspolning", @@ -787,7 +787,7 @@ const tI18nPhrase Phrases[] = { "Arrêt", "Stopp", "Lopeta", - "Zakonczyc", + "Zatrzymaj", "Parar", "ÔÝñìá", "Stopp", @@ -808,7 +808,7 @@ const tI18nPhrase Phrases[] = { "Reprendre", "Fortsett", "Jatka", - "Dalej", + "Wznów", "Continuar", "ÅðáíáöïñÜ", "Fortsätt", @@ -829,7 +829,7 @@ const tI18nPhrase Phrases[] = { "Ouvrir", "Åpne", "Avaa", - "Otworzyc", + "Otwórz", "Abrir", "Áíïéãìá", "Öppna", @@ -850,7 +850,7 @@ const tI18nPhrase Phrases[] = { "Regarder", "Skift til", "Valitse", - "Przelaczyc", + "Prze³±cz", "Cambiar", "AëëáãÞ", "Byt", @@ -892,8 +892,8 @@ const tI18nPhrase Phrases[] = { "Après", "Neste", "Seuraavaksi", - "Nastepny", - "Siguiente", + "Nastêpnie", + "Después", "Åðüìåíï", "Nästa", "Urmãtor", @@ -901,7 +901,7 @@ const tI18nPhrase Phrases[] = { "Següent", "´ÐÛÕÕ", "Slijedi", - "Järgmine", + "Tulekul", "Næste", }, { "Button$Schedule", @@ -914,7 +914,7 @@ const tI18nPhrase Phrases[] = { "Programmer", "Ohjelmisto", "Program", - "Programa", + "Guía", "Ðñüãñáììá", "Program", "Program", @@ -922,7 +922,7 @@ const tI18nPhrase Phrases[] = { "Programar", "¿àÞÓàÐÜÜÐ", "Raspored", - "Kava", + "Ajakava", "Program", }, { "Button$ABC/abc", @@ -955,7 +955,7 @@ const tI18nPhrase Phrases[] = { "Insérer", "",// TODO "Lisää", - "Wstawiac", + "Wstaw", "Insertar", "ÅéóáãùãÞ", "Infoga", @@ -976,7 +976,7 @@ const tI18nPhrase Phrases[] = { "Écraser", "",// TODO "Korvaa", - "Przepisac", + "Nadpisz", "Sobreescribir", "ÁíôéêáôÜóôáóç", "Skriv över", @@ -1039,8 +1039,8 @@ const tI18nPhrase Phrases[] = { "Scan", "",//TODO "Päivitä", - "",//TODO - "",//TODO + "Skanuj", + "Escanear", "ÓÜñùóç", "Skanna", "Cãutare canale", @@ -1060,8 +1060,8 @@ const tI18nPhrase Phrases[] = { "Audio", "",// TODO "Ääni", - "",// TODO - "",// TODO + "D¼wiêk", + "Audio", "¹÷ïò", "Ljud", "Sunet", @@ -1082,7 +1082,7 @@ const tI18nPhrase Phrases[] = { "Supprimer la chaîne?", "Slette kanal?", "Poistetaanko kanava?", - "Usunac kanal?", + "Usun±æ kana³?", "¿Eliminar canal?", "ÄéáãñáöÞ êáíáëéïý?", "Ta bort kanalen?", @@ -1103,8 +1103,8 @@ const tI18nPhrase Phrases[] = { "Supprimer la programmation?", "Slette timer?", "Poistetaanko ajastin?", - "Usunac timer?", - "¿Eliminar timer?", + "Usun±æ timer?", + "¿Eliminar programación?", "ÄéáãñáöÞ ÷ñïíïðñïãñáììáôéóìïý;?", "Ta bort timern?", "ªterg timer-ul?", @@ -1124,7 +1124,7 @@ const tI18nPhrase Phrases[] = { "Supprimer l'enregistrement?", "Slette opptak?", "Poistetaanko tallenne?", - "Usunac nagranie?", + "Usun±æ nagranie?", "¿Eliminar grabacion?", "ÄéáãñáöÞ åããñáöÞò?", "Ta bort inspelningen?", @@ -1145,8 +1145,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement en cours - confirmez la suppression", "Timer gjør opptak - vil du slette likevel?", "Ajastettu tallennus käynnissä - poistetaanko silti?", - "Nagrywanie w trakcie - napewno usunac?", - "¿Timer activo - de verdad eliminarlo?", + "Trwa nagrywanie - na pewno usun±æ?", + "Todavía está grabando - ¿eliminar realmente?", "×ñïíïðñïãñáììáôéóìüò óÝ åîÝëéîç - ÄéáãñáöÞ óßãïõñá?", "Timerstyrd inspelning pågår - Avbryta ändå?", "Timer-ul tocmai înregistreazã - ºterg, totuºi?", @@ -1166,7 +1166,7 @@ const tI18nPhrase Phrases[] = { "Arrêter l'enregistrement?", "Stoppe opptak?", "Lopetetaanko tallennus?", - "Zakonczyc nagranie?", + "Zatrzymaæ nagrywanie?", "¿Parar grabación?", "Áêýñùóç åããñáöÞò?", "Stanna inspelning?", @@ -1187,8 +1187,8 @@ const tI18nPhrase Phrases[] = { "Annuler les modifications?", "Avbryte redigering?", "Perutaanko muokkaus?", - "Zakonczyc montaz?", - "¿Cancelar modificación?", + "Anulowaæ monta¿?", + "¿Cancelar edición?", "Aêýñùóç åðåîåñãáóßáò?", "Avbryta redigeringen?", "Opresc montajul înregistrãrii?", @@ -1208,8 +1208,8 @@ const tI18nPhrase Phrases[] = { "Redémarrer?", "Vil du virkelig starte på nytt?", "Käynnistetäänkö uudelleen?", - "Rzeczywiscie nowy start?", - "¿De verdad reiniciar?", + "Na pewno zrestartowaæ?", + "¿Reiniciar realmente?", "Ná ãßíåé óßãïõñá åðáíåêêßíçóç?", "Vill du verkligen starta om?", "Sigur repornesc?", @@ -1229,8 +1229,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement en cours - redémarrer?", "Gjør opptak - starte på nytt likevel?", "Tallennus kesken - käynnistetäänkö uudelleen?", - "Nagrywanie w trakcie - rzeczywiscie nowy start?", - "Grabando - ¿reiniciar?", + "Trwa nagrywanie - zrestartowaæ mimo to?", + "Grabación en curso - ¿reiniciar igualmente?", "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé åðáíåêêßíçóç?", "Inspelning pågår, vill du ändå starta om?", "Tocmai se înregistreazã - repornesc, totuºi?", @@ -1250,8 +1250,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement en cours - confirmez l'arrêt", "Gjør opptak - slå av likevel?", "Tallennus kesken - sammutetaanko?", - "Nagrywanie w trakcie - mimo to wylaczyc?", - "Grabando - ¿apagar?", + "Trwa nagrywanie - wy³±czyæ mimo to?", + "Grabación en curso - ¿apagar igualmente?", "Ãßíåôáé åããñáöÞ - ÔåëéêÜ íá ãßíåé ôåñìáôéóìüò?", "Inspelning pågår, vill du ändå avbryta?", "Tocmai se înregistreazã - închid, totuºi?", @@ -1271,8 +1271,8 @@ const tI18nPhrase Phrases[] = { "Enregistrement dans %d minutes - confirmez l'arrêt", "Skal gjøre opptak om %d minutter - slå av likevel?", "Tallennus alkaa %d min kuluttua - sammutetaanko?", - "Nagrywanie za %d minut - mimo to wylaczyc?", - "Grabando en %d minutos, ¿de verdad apagar?", + "Nagrywanie za %d minut - wy³±czyæ mimo to?", + "Grabación dentro de %d minutos, ¿apagar realmente?", "ÁíáìÝíåôáé åããñáöÞ óÝ %d ëåðôÜ - ÔåëéêÜ íá ôåñìáôéóôåß?", "Inspelning startar om %d minuter, vill du avsluta?", "Înregistrez peste %d minute - închid, totuºi?", @@ -1292,7 +1292,7 @@ const tI18nPhrase Phrases[] = { "Appuyez sur une touche pour annuler l'arrêt", "Trykk en tast for ikke å slå av", "Peru sammutus painamalla mitä tahansa näppäintä", - "Dowolny przycisk zatrzyma wylaczanie", + "Naci¶nij dowolny klawisz aby nie wy³±czaæ", "Pulse una tecla para interrumpir apagar", "Ðßåóå Ýíá ðëÞêôñï ãéÜ áêýñùäç ôåñìáôéóìïý", "Tryck valfri knapp för att återkalla avstängningen", @@ -1335,7 +1335,7 @@ const tI18nPhrase Phrases[] = { "Fréquence", "Frekvens", "Taajuus", - "Czestotliwosc", + "Czêstotliwo¶æ", "Frecuencia", "Óõ÷íüôçôá", "Frekvens", @@ -1377,8 +1377,8 @@ const tI18nPhrase Phrases[] = { "Source", "",//TODO "Lähde", - "Zrodlo", - "",//TODO + "¬ród³o", + "Fuente", "ÐçãÞ", "Källa", "Sursã", @@ -1399,7 +1399,7 @@ const tI18nPhrase Phrases[] = { "Srate", "Symbolinopeus", "Srate", - "Srate", + "T.símbolos", "Srate", "Srate", "Ratã simboluri", @@ -1567,7 +1567,7 @@ const tI18nPhrase Phrases[] = { "Kortleser", "Salaus (CA)", "CA", - "CA", + "Acceso condicional (CA)", "CA", "Kortläsare", "CA (Acces Condiþional)", @@ -1586,17 +1586,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "vapaa", "",//TODO + "en abierto", "",//TODO + "Otwarta transmisja", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "FTA", "",//TODO }, { "encrypted", @@ -1607,17 +1607,17 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO + "salattu", "",//TODO + "cifrado", "",//TODO + "szyfrowany", "",//TODO "",//TODO "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO - "",//TODO + "krüptitud", "",//TODO }, { "Sid", @@ -1650,7 +1650,7 @@ const tI18nPhrase Phrases[] = { "Inversion", "Inversion", "Inversio", - "Inversion", + "Inwersja", "Inversion", "ÁíôéóôñïöÞ", "Inversion", @@ -1671,8 +1671,8 @@ const tI18nPhrase Phrases[] = { "Bande passante", "Bandwidth", "Kaistanleveys", - "Szerokosc pasma", - "Bandwidth", + "Pasmo", + "Ancho de banda", "Åýñïò Óõ÷íïôÞôùí", "Bandbredd", "Lãrgime de bandã", @@ -1735,7 +1735,7 @@ const tI18nPhrase Phrases[] = { "Modulation", "Modulaatio", "Modulacja", - "Modulation", + "Modulación", "Äéáìüñöùóç", "Modulation", "Modulaþie", @@ -1756,7 +1756,7 @@ const tI18nPhrase Phrases[] = { "Transmission", "Transmissio", "Transmisja", - "Transmission", + "Transmisión", "ÌåôÜäïóç", "Transmission", "Transmisiune", @@ -1777,7 +1777,7 @@ const tI18nPhrase Phrases[] = { "Guard", "Suojaväli", "Guard", - "Guard", + "Int.Guarda", "Ðñïóôáóßá", "Guard", "Guard", @@ -1797,8 +1797,8 @@ const tI18nPhrase Phrases[] = { "Hiérarchie", "Hierarchy", "Hierarkia", - "Hierachia", - "Hierarchy", + "Hierarchia", + "Jerarquía", "Éåñáñ÷åßá", "Hierarchy", "Ierarhie", @@ -1840,7 +1840,7 @@ const tI18nPhrase Phrases[] = { "Chaîne", "Kanal", "Kanava", - "Kanal", + "Kana³", "Canal", "ÊáíÜëé", "Kanal", @@ -1861,7 +1861,7 @@ const tI18nPhrase Phrases[] = { "Jour", "Dag", "Päivä", - "Dzien", + "Dzieñ", "Día", "ÇìÝñá", "Dag", @@ -1882,7 +1882,7 @@ const tI18nPhrase Phrases[] = { "Début", "Start", "Aloitus", - "Poczatek", + "Pocz±tek", "Comienzo", "Áñ÷Þ", "Börjar", @@ -1924,8 +1924,8 @@ const tI18nPhrase Phrases[] = { "VPS", "",// TODO "VPS", - "",// TODO - "",// TODO + "VPS", + "VPS", "VPS", "VPS", "VPS", @@ -1966,8 +1966,8 @@ const tI18nPhrase Phrases[] = { "Durée de vie", "Levetid", "Elinikä", - "Trwalosc dni", - "Durabilidad", + "Czas ¿ycia", + "Duración", "ÄéÝñêåéá ÐáñáìïíÞò", "Livstid", "Timp de pãstrare", @@ -2008,7 +2008,7 @@ const tI18nPhrase Phrases[] = { "Premier jour", "Første dag", "1. päivä", - "Pierwszy dzien", + "Pierwszy dzieñ", "Primer día", "Ðñþôç ìÝñá", "Första dag", @@ -2030,8 +2030,8 @@ const tI18nPhrase Phrases[] = { "Cette chaîne est en cours d'utilisation!", "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!", + "Kana³ jest u¿ywany przez timer!", + "¡Hay una grabación programada para este canal!", "Ôï êáíÜëç ÷ñéóéìïðïéåßôáé áðü ÷ñïíïðñïãñáììáôéóìü!", "Kanalen används av en timer!", "Canalul este utilizat de un timer!", @@ -2051,8 +2051,8 @@ const tI18nPhrase Phrases[] = { "Impossible de changer de chaîne!", "Ikke mulig å skifte kanal!", "Kanavan vaihtaminen ei mahdollista!", - "Kanal nie moze byc teraz przelaczony!", - "¡No puedo cambiar canal!", + "Nie mo¿na prze³±czyæ kana³u!", + "¡No se puede cambiar de canal!", "ÁëëáãÞ êáíáëéïý áäýíáôç!", "Omöjligt att byta kanal!", "Nu pot comuta canalul!", @@ -2073,7 +2073,7 @@ const tI18nPhrase Phrases[] = { "Timer gjør opptak!", "Ajastintallennus käynnissä!", "Timer nagrywa!", - "¡Timer esta grabando!", + "¡Grabación en curso!", "Ãßíåôáé ðñïãñáìáôéóìÝíç åããñáöÞ!", "Timerstyrd inspelning pågår!", "Timer-ul tocmai înregistreazã!", @@ -2081,7 +2081,7 @@ const tI18nPhrase Phrases[] = { "El temporitzador està gravant!", "¸Ôñâ ×ÐßØáì ßÞ âÐÙÜÕàã!", "Snimanje po definiranom terminu!", - "Taimeri salvestamine!", + "Taimeriga salvestamine aktiivne!", "Timer optager nu!", }, { "Error while accessing recording!", @@ -2093,7 +2093,7 @@ const tI18nPhrase Phrases[] = { "Impossible d'accèder à l'enregistrement", "Feil under lesing av opptak!", "Tallenteen toistaminen epäonnistui!", - "Blad - brak dostepu do nagrania!", + "Bl±d podczas dostêpu do nagrania!", "¡Error al acceder a la grabación!", "Ðñüâëçìá óôÞí ðñïóðÝëáóç åããñáöÞò!", "Inspelningen går inte att läsa!", @@ -2114,7 +2114,7 @@ const tI18nPhrase Phrases[] = { "Erreur de suppression de l'enregistrement!", "Feil under sletting av opptak!", "Tallenteen poistaminen epäonnistui!", - "Blad przy usuwaniu nagrania!", + "Bl±d podczas usuwania nagrania!", "¡Error al borrar la grabación!", "ËÜèïò êáôÜ ôÞí äéáãñáöÞ ôïõ áñ÷åßïõ!", "Inspelningen går inte att ta bort!", @@ -2135,8 +2135,8 @@ const tI18nPhrase Phrases[] = { "*** Chaîne invalide! ***", "*** Ugyldig Kanal! ***", "*** Virheellinen kanavavalinta! ***", - "*** Niewazny kanal ***", - "*** Canal inválido ***", + "*** Niepoprawny kana³ ***", + "*** Canal no válido ***", "*** Áêõñï êáíÜëç ***", "*** Felaktig kanal ***", "*** Canal invalid ***", @@ -2157,7 +2157,7 @@ const tI18nPhrase Phrases[] = { "Ingen ledige DVB enheter for opptak!", "Ei vapaata DVB-viritintä tallennukselle!", "Brak wolnej karty DVB do nagrywania!", - "¡No hay dispositivo DVB disponible para grabar!", + "¡Ningún dispositivo DVB disponible para grabar!", "ÁíåðÜñêåéá DVB ÊÜñôáò ãéÜ åããñáöÞ!", "Det finns ingen ledig DVB enhet för inspelning!", "Nu mai sunt dispozitive DVB disponibile pentru înregistrare!", @@ -2177,7 +2177,7 @@ const tI18nPhrase Phrases[] = { "Chaîne non disponible!", "",//TODO "Kanava ei ole käytettävissä!", - "Kanal jest niedostepny!", + "Kana³ nie jest dostêpny!", "!Canal no disponible!", "Ôï êáíÜëç äÝí åßíáé äéáèÝóéìï!", "Kanalen är inte tillgänglig!", @@ -2198,7 +2198,7 @@ const tI18nPhrase Phrases[] = { "Caractéristiques des chaînes ne sont pas uniques", "",//TODO "Kanava-asetukset eivät ole yksilölliset!", - "Nastawy kanalu sa niejednoznaczne!", + "Ustawienia kana³u nie s± unikalne!", "!Propiedades de canal duplicadas!", "Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!", "Kanalinställningarna är ej unika!", @@ -2219,7 +2219,7 @@ const tI18nPhrase Phrases[] = { "Chaîne verrouillée (enregistrement en cours)!", "Kanalen er låst (opptak)!", "Kanava lukittu (tallennus käynnissä)!", - "Kanal zablokowany (nagrywanie w toku)!", + "Kana³ zablokowany (trwa nagrywanie)!", "¡Canal bloqueado (grabando)!", "Ôï êáíÜëé åßíáé áðïó÷ïëéìÝíï (Ãßíåôå åããñáöÞ)!", "Kanalen är låst (inspelning pågår)!", @@ -2240,8 +2240,8 @@ const tI18nPhrase Phrases[] = { "Impossible d'utiliser le mode transfert!", "Kan ikke starte transfer modus!", "Siirtotilan aloitus epäonnistui!", - "Tryb transferowy jest niemozliwy!", - "¡No puedo iniciar modo de transferencia!", + "Nie mo¿na uruchomiæ trybu transferu!", + "¡No se puede iniciar el modo de transferencia!", "Áäõíáìßá åêêßíçóçò êáôÜóôáóçò ìåôáöïñÜò!", "Kan inte starta Transfer Mode!", "Nu pot porni modul de transfer!", @@ -2261,8 +2261,8 @@ const tI18nPhrase Phrases[] = { "Pas de marques d'édition définies!", "",//TODO "Muokkausmerkinnät puuttuvat!", - "Brak znakow montazowych!", - "",//TODO + "Nie zdefiniowano znaczników monta¿u!", + "¡No se definieron marcas de edición!", "ÄÝí Ý÷ïõí ïñéóôåß óçìåßá åðåîåñãáóßáò", "Det finns inga redigeringsmärken",//TODO "Nu s-au pus marcaje de montaj pentru aceastã înregistrare", @@ -2282,8 +2282,8 @@ const tI18nPhrase Phrases[] = { "Impossible de commencer le montage!", "Kan ikke starte redigeringsprosessen!", "Muokkauksen aloitus epäonnistui!", - "Uruchamianie montazu jest niemozliwe!", - "¡No puedo iniciar proceso de modificación!", + "Nie mo¿na uruchomiæ procesu edycji!", + "¡No se puede iniciar el proceso de edición!", "Áäõíáìßá åêêßíçóçò ôçò åðåîåñãáóßáò!", "Kan inte starta redigering!", "Nu pot porni montajul înregistrãrii!", @@ -2303,8 +2303,8 @@ const tI18nPhrase Phrases[] = { "Montage déjà en cours!", "Redigeringsprosessen er allerede aktiv!", "Muokkaus on jo käynnissä!", - "Montaz w toku!", - "¡Proceso de modificación ya fue iniciado!", + "Proces edycji jest ju¿ aktywny!", + "¡El proceso de edición ya está activo!", "Åðåîåñãáóßá âñßóêåôáé óÝ åîÝëéîç!", "Redigeringen är redan aktiv!", "Montajul înregistrãrii este deja activ!", @@ -2312,7 +2312,7 @@ const tI18nPhrase Phrases[] = { "Procés d'edició iniciat anteriorment!", "¿àÞæÕáá ÒØÔÕÞÜÞÝâÐÖÐ ãÖÕ ×ÐßãéÕÝ!", "Ureðivanje je veæ aktivirano!", - "Redigeerimine on juba aktiivne!", + "Redigeerimine juba aktiivne!", "Redigeringsproces er allerede aktiv!", }, { "Can't shutdown - option '-s' not given!", @@ -2324,8 +2324,8 @@ const tI18nPhrase Phrases[] = { "Arrêt impossible - option '-s' absente!", "Kan ikke slå av - startet uten parameteret '-s'!", "Sammutus ei onnistu - '-s' parametri puuttuu!", - "Wylaczenie niemozliwe - brak opcji '-s'!", - "¡No puedo apagar - opción '-s' ausente!", + "Nie mo¿na wy³±czyæ - nie podano opcji '-s'!", + "¡No se puede apagar - falta el parámetro '-s'!", "Áäýíáôïí íá ãßíåé ôåñìáôéóìüò. Áíýðáñêôç ç ðáñÜìåôñïò '-s'!", "Kan inte avsluta, måste använda parameter '-s'", "Nu pot închide - vezi opþiunea '-s'", @@ -2336,6 +2336,27 @@ const tI18nPhrase Phrases[] = { "Väljalülitamine ebaõnnestus - '-s' parameeter puudub!", "Kan ikke slukke - parameter '-s' ikke angivet!", }, + { "Not enough disk space to start recording!", + "Nicht genügend Plattenplatz für Aufnahme!", + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + "",//TODO + }, { "Low disk space!", "Platte beinahe voll!", "Premalo prostora na disku!", @@ -2345,8 +2366,8 @@ const tI18nPhrase Phrases[] = { "Disque presque plein!", "Lite ledig diskplass!", "Tallennustila loppumassa!", - "Dysk wkrotce pelny!", - "¡Disco casi lleno", + "Ma³o miejsca na dysku!", + "¡Poco espacio en disco!", "Ï óêëçñüò êïíôåýåé íÜ ãåìßóåé!", "Lågt diskutrymme!", "Spaþiul pe disc e foarte scãzut!", @@ -2354,7 +2375,7 @@ const tI18nPhrase Phrases[] = { "Disc gairebé ple!", "½ÕÔÞáâÐâÞçÝÞ ÜÕáâÐ ÝÐ ÔØáÚÕ!", "Nedovoljno prostora na disku", - "Kõvaketas peaaegu täis!", + "Kõvaketas täis!", "Kun lidt diskplads tilbage!", }, { "Opening CAM menu...", @@ -2366,8 +2387,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "Avataan CA-moduulin valikkoa...", - "",//TODO - "",//TODO + "Otwieram menu CAM...", + "Abriendo el menú CAM...", "",//TODO "Åßóïäïò CAM Ìåíïý", "",//TODO @@ -2387,8 +2408,8 @@ const tI18nPhrase Phrases[] = { "Impossible d'ouvrir le menu CAM!", "",//TODO "CA-moduulin valikko ei saatavilla", - "CAM-Menu niedostepne!", - "¡No pudeo acceder al menú de la CAM!", + "Nie mo¿na otworzyæ menu CAM!", + "¡No se puede abrir el menú CAM!", "Áäýíáôç ç ðñüóâáóç óôü CAM ìåíïý!", "Det går inte att öppna CAM menyn!", "Nu pot deschide meniul CAM", @@ -2408,8 +2429,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "CA-moduuli palautetaan alkutilaan...", - "",//TODO - "",//TODO + "Resetujê CAM...", + "Reiniciando CAM...", "",//TODO "ÅðáíáöïñÜ CAM", "",//TODO @@ -2429,8 +2450,8 @@ const tI18nPhrase Phrases[] = { "Impossible de réinitialiser la CAM!", "",//TODO "CA-moduulin palautus alkutilaan epäonnistui!", - "Nieudany CAM-Reset!", - "¡No puedo reiniciar la CAM!", + "Nie mo¿na zresetowaæ CAM!", + "¡No se puede reiniciar CAM!", "Áäýíáôç ç åðáíáöïñÜ óôü CAM", "Kan inte återställa CAM!", "Nu pot reseta CAM", @@ -2450,8 +2471,8 @@ const tI18nPhrase Phrases[] = { "La CAM a été réinitialisée", "",//TODO "CA-moduuli palautettu alkutilaan", - "CAM-Reset wykonany", - "CAM reiniciada", + "CAM zosta³ zresetowany", + "CAM reiniciado", "¸ãéíå åðáíáöïñÜ óôï CAM", "CA modulen har återställts", "CAM-ul a fost resetat", @@ -2471,8 +2492,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "Syötä %d numeroa!", - "",//TODO - "",//TODO + "Proszê podaæ %d cyfr!", + "¡Escriba %d dígitos!", "",//TODO "Ðáñáêáëü ðëçêôñïëïãÞóåôå %d íïýìåñá", "",//TODO @@ -2492,8 +2513,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "Pas d'audio disponible!", "Äänen kieli ei ole valittavissa!", - "",//TODO - "",//TODO + "D¼wiêk nie jest dostêpny!", + "¡No hay audio disponible!", "Ìç äéáèÝóéìïò Þ÷ïò", "Ljud saknas!" "Lipseºte sunetul!", @@ -2620,7 +2641,7 @@ const tI18nPhrase Phrases[] = { "Opptak", "Tallennus", "Nagranie", - "Opciones de Grabación", + "Opciones de grabación", "ÅããñáöÞ", "Inspelning", "Înregistrare", @@ -2641,7 +2662,7 @@ const tI18nPhrase Phrases[] = { "Spill av", "Toisto", "Odtwarzanie", - "Opciones de Reproducción", + "Opciones de reproducción", "ÁíáðáñáãùãÞ", "Uppspelning", "Redare", @@ -2661,7 +2682,7 @@ const tI18nPhrase Phrases[] = { "Divers", "Forskjellig", "Sekalaiset", - "Pozostale", + "Ró¿ne", "Varios", "ÄéÜöïñá", "Diverse", @@ -2682,7 +2703,7 @@ const tI18nPhrase Phrases[] = { "Plugins", "Plugins", "Laajennokset", - "Plugins", + "Wtyczki", "Plugins", "ÅðåêôÜóåéò", "Moduler", @@ -2703,7 +2724,7 @@ const tI18nPhrase Phrases[] = { "Plugin", "Plugin", "Laajennos", - "Plugin", + "Wtyczka", "Plugin", "ÅðÝêôáóç", "Modul", @@ -2724,7 +2745,7 @@ const tI18nPhrase Phrases[] = { "Redémarrer", "Start på nytt", "Käynnistä uudelleen", - "Zastartowac", + "Restart", "Reiniciar", "Åðáíåêêßíçóç", "Omstart", @@ -2746,7 +2767,7 @@ const tI18nPhrase Phrases[] = { "Langue", "Språk", "Kieli", - "Jezyk", + "Jêzyk", "Idioma", "Ãëþóóá", "Språk", @@ -2767,8 +2788,8 @@ const tI18nPhrase Phrases[] = { "Skin", "",// TODO "Ulkoasu", - "",// TODO - "",// TODO + "Skórka", + "Skin", "ÅðéöÜíåéá", "Skin", "Skin", @@ -2788,8 +2809,8 @@ const tI18nPhrase Phrases[] = { "Thème", "",// TODO "Teema", - "",// TODO - "",// TODO + "Motyw", + "Tema", "ÈÝìá", "Tema", "Temã", @@ -2809,8 +2830,8 @@ const tI18nPhrase Phrases[] = { "Gauche", "",// TODO "Vaakakeskitys", - "",// TODO - "",// TODO + "Od lewej", + "Izquierda", "ÁñéóôåñÜ", "Vänster", "Stânga", @@ -2830,8 +2851,8 @@ const tI18nPhrase Phrases[] = { "Haut", "",// TODO "Pystykeskitys", - "",// TODO - "",// TODO + "Od góry", + "Arriba", "ÅðÜíù", "Övre", "Sus", @@ -2851,7 +2872,7 @@ const tI18nPhrase Phrases[] = { "Largeur", "Bredde", "Leveys", - "Szerokosc", + "Szeroko¶æ", "Anchura", "ÌÜêñïò", "Bredd", @@ -2872,7 +2893,7 @@ const tI18nPhrase Phrases[] = { "Hauteur", "Høyde", "Korkeus", - "Wysokosc", + "Wysoko¶æ", "Altura", "¾øïò", "Höjd", @@ -2893,8 +2914,8 @@ const tI18nPhrase Phrases[] = { "Durée affichage message (s)", "Tid meldinger skal vises (s)", "Viestien esitysaika (s)", - "Czas wyswietlania wiadomosci (s)", - "Duración muestra mensajes (s)", + "Czas trwania wiadomo¶ci (s)", + "Duración de los mensajes (sg)", "×ñüíïò Ýíäåéîçò ìõíçìÜôùí (ä)", "Tid för meddelanden (sek)", "Timp afiºare mesaje (sec)", @@ -2914,8 +2935,8 @@ const tI18nPhrase Phrases[] = { "Utiliser les petits caractères", "",// TODO "Käytä pieniä kirjasimia", - "",// TODO - "",// TODO + "U¿ywaj ma³ej czcionki", + "Usar letra pequeña", "×ñéóçìïðïßçóç ìéêñüí ãñáììáôïóåéñþí", "Använd liten font", "Utilizare fonturi mici", @@ -2935,8 +2956,8 @@ const tI18nPhrase Phrases[] = { "jamais", "",// TODO "ei koskaan", - "",// TODO - "",// TODO + "nigdy", + "nunca", "ÐïôÝ" "aldrig", "niciodatã", @@ -2956,8 +2977,8 @@ const tI18nPhrase Phrases[] = { "dépend du skin", "",// TODO "ulkoasun mukaan", - "",// TODO - "",// TODO + "zal. od skórki", + "según skin", "ÅîáñôÜôå áðü ôÞí åðéöÜíåéá", "skin beroende", "dep. de skin", @@ -2977,8 +2998,8 @@ const tI18nPhrase Phrases[] = { "toujours", "",// TODO "aina", - "",// TODO - "",// TODO + "zawsze", + "siempre", "ðÜíôá", "alltid", "întotdeauna", @@ -2998,8 +3019,8 @@ const tI18nPhrase Phrases[] = { "Position infos chaînes", "Posisjon på kanalinformasjon", "Kanavatiedon sijainti", - "Lokalizacja informacji o kanale", - "Posición para información canal", + "Pozycja informacji o kanale", + "Posición para información de canal", "ÈÝóç ðëçñïöïñßáò êáíáëéþí", "Placering av kanalinformation", "Poziþia informaþiilor despre canal", @@ -3019,8 +3040,8 @@ const tI18nPhrase Phrases[] = { "Durée affichage infos chaînes (s)", "",// TODO "Kanavatiedon esitysaika (s)", - "",// TODO - "",// TODO + "Czas trwania informacji o kanale (s)", + "Tiempo de información de canal (sg)", "÷ñüíïò Ýíäåéêóçò ðëçñïöïñßùí êáíáëéïý óå (ä)", "Kanal information (s)", "Durata afiºãrii info-canal (s)", @@ -3028,7 +3049,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "¿ÞÚÐ× ØÝäÞàÜÐæØØ Þ ÚÐÝÐÛÕ (áÕÚ)", "Vrijeme prikaza informacije o programu (s)", - "Kanaliteate esitusaeg (s)", + "Kanaliinfo esitusaeg (s)", "Tid kanalinfo skal vises (s)", }, { "Setup.OSD$Info on channel switch", @@ -3040,8 +3061,8 @@ const tI18nPhrase Phrases[] = { "Affichage progr. en cours", "Info ved kanalskifte", "Näytä kanavatieto vaihdettaessa", - "Informacja przy zmianie kanalu", - "Información para cambio de canal", + "Informacja przy zmianie kana³u", + "Mostrar info al cambiar de canal", "Ðëçñïöïñßåò óôÞí áëëáãÞ êáíáëéïý", "Information vid kanalbyte", "Informaþii la comutarea canalului", @@ -3049,7 +3070,7 @@ const tI18nPhrase Phrases[] = { "Informació del canvi de canal", "¿ÞÚÐ×ëÒÐâì ØÝäÞàÜÐæØî Þ ÚÐÝÐÛÕ", "Informacije kod promjene kanala", - "Kanaliteate näitamine", + "Kanaliinfo näitamine", "Info ved kanalskift", }, { "Setup.OSD$Timeout requested channel info", @@ -3061,6 +3082,8 @@ const tI18nPhrase Phrases[] = { "", // TODO "", // TODO "Sulje kanavatieto pyydettäessä", + "Czas oczekiwania na informacje", + "Auto-cerrar al solicitar info de canal", "", // TODO "", // TODO "", // TODO @@ -3068,9 +3091,7 @@ const tI18nPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO - "", // TODO - "", // TODO - "", // TODO + "Kanaliinfo kuvamise ajapiirang", "", // TODO }, { "Setup.OSD$Scroll pages", @@ -3082,8 +3103,8 @@ const tI18nPhrase Phrases[] = { "Défilement par pages", "Rask rulling i menyer", "Valikoiden vieritys sivuttain", - "Przesuwac stronami", - "Desplazar página entera", + "Przesuwaj stronami", + "Deslizar páginas enteras", "Êýëéóç óåëßäáò", "Bläddra sidor", "Deruleazã pagini", @@ -3103,8 +3124,8 @@ const tI18nPhrase Phrases[] = { "Défilement rotatif", "",// TODO "Valikoiden vieritys ympäri", - "",// TODO - "",// TODO + "Skrajne pozycje s±siaduj±", + "Rotar arriba/abajo al deslizar", "Êýëéóç ãýñù-ãýñù", "Rulla texten", "Derulare circularã", @@ -3123,17 +3144,17 @@ const tI18nPhrase Phrases[] = { "",// TODO "",// TODO "",// TODO + "Sulje valikkonäppäimellä", "",// TODO + "Cerrar al pulsar botón de menú", "",// TODO + "Klawisz Menu zamyka", "",// TODO "",// TODO "",// TODO "",// TODO "",// TODO - "",// TODO - "",// TODO - "",// TODO - "",// TODO + "Sulgemine Menüü klahviga", "",// TODO }, { "Setup.OSD$Sort timers", @@ -3145,8 +3166,8 @@ const tI18nPhrase Phrases[] = { "Trier les programmations", "Sorter timere", "Järjestä ajastimet", - "Sortowanie timerow", - "Ordenar timers", + "Sortuj timery", + "Ordenar programas de grabación", "ÏñãÜíùóç ÷ñïíïðñïãñáììáôéóìþí", "Sortera timers", "Sortare timer-e", @@ -3166,8 +3187,8 @@ const tI18nPhrase Phrases[] = { "Dossiers d'enregistrements", "Kataloger til opptak", "Näytä tallennehakemistot", - "Wykaz nagran", - "Gracaciones en directorios", + "Katalogi nagrañ", + "Mostrar directorios de grabaciones", "ÖÜêåëïé åããñáöþí", "Kataloger för inspelningar", "Directoare înregistrãri", @@ -3187,8 +3208,8 @@ const tI18nPhrase Phrases[] = { "Inactivité avant rech. EPG (h)", "Ledig tid før EPG-søk (h)", "Ohjelmaoppaan taustapäivitys (h)", - "Czas do skanu EPG (h)", - "Tiempo hasta exploración EPG (h)", + "Czas skanowania EPG (h)", + "Tiempo de exploración de EPG (h)", "×ñüíïò äéÜñêåéáò åîÝôáóçò EPG óå þñåò", "EPG sökning timeout", "Interval achiziþie EPG (h)", @@ -3208,8 +3229,8 @@ const tI18nPhrase Phrases[] = { "Niveau de correction EPG", "Nivå for EPG-feilretting", "Ohjelmaoppaan korjaustaso", - "Poziom bledow EPG", - "Nivel para arreglar EPG", + "Stopieñ poprawek b³êdów EPG", + "Nivel de corrección de EPG", "Âáèìüò äéüñèùóçò ïäçãïý EPG", "Nivå för EPG bugfix", "Nivel corecþie EPG", @@ -3229,8 +3250,8 @@ const tI18nPhrase Phrases[] = { "Montrer l'EPG périmé (min)", "",// TODO "Vanha tieto näkyy (min)", - "",// TODO - "",// TODO + "Czas przechowywania EPG (min)", + "Mostrar datos antiguos de EPG (m)", "¸íäåéîç îåðåñáóìÝíùí ðëçñïöïñéþí (ëåðôÜ)", "Visa gammal information (min)", "Date EPG expirate cel mult (min)", @@ -3250,7 +3271,7 @@ const tI18nPhrase Phrases[] = { "Ajuster l'heure du système", "Juster system-klokken", "Tahdista kellonaika", - "Ustawianie czasu", + "Ustawiaj czas systemowy", "Ajustar reloj de sistema", "Óõíôïíéóìüò þñáò õðïëïãéóôÞ", "Ställ in systemtid", @@ -3271,8 +3292,8 @@ const tI18nPhrase Phrases[] = { "Utiliser l'heure de la chaîne", "Bruk klokke fra transponder", "Vastaanota kellonaika transponderilta", - "Transponder do ustawiania czasu", - "Transponder para reloj de sistema", + "U¿yj czasu z transpondera", + "Transponder del que tomar la hora", "Áíáìåôáäüôçò óõíôïíéóìïý þñáò", "Använd klockan från transponder", "Preia ora din transponder", @@ -3292,8 +3313,8 @@ const tI18nPhrase Phrases[] = { "Langues préférées", "",// TODO "Suosikkikielet", - "",// TODO - "",// TODO + "Preferowanych jêzyków", + "Idiomas preferidos", "Ðñïôåéíüìåíåò ãëþóóåò", "Önskade språk", "Limbi preferate", @@ -3313,8 +3334,8 @@ const tI18nPhrase Phrases[] = { "Langue préférée", "",// TODO "Suosikkikieli", - "",// TODO - "",// TODO + "Preferowany jêzyk", + "Idioma preferido", "Ðñïôåéíüìåíç ãëþóóá", "Önskat språk", "Limba preferatã", @@ -3334,8 +3355,8 @@ const tI18nPhrase Phrases[] = { "Carte DVB primaire", "Hoved DVB-enhet", "Ensisijainen DVB-sovitin", - "Pierwotny interfejs DVB", - "Primer interface DVB", + "Pierwszy interfejs DVB", + "Interfaz DVB primario", "Êýñéá DVB êÜñôá", "Primär DVB enhet", "Dispozitiv DVB primar", @@ -3355,8 +3376,8 @@ const tI18nPhrase Phrases[] = { "Format d'affichage", "",//TODO "Näyttömuoto", - "",//TODO - "",//TODO + "Format wy¶wietlania obrazu", + "Formato de visualización", "ÌïñöÞ áðåéêüíéóçò Âßíôåï", "Format för video display", "Formatul redãrii video", @@ -3439,8 +3460,8 @@ const tI18nPhrase Phrases[] = { "Format vidéo", "TV-Format", "Kuvasuhde", - "Format telewizyjny", - "Formato Vídeo", + "Format obrazu", + "Formato de vídeo", "ÌïñöÞ ïèüíçò", "Video format", "Format video", @@ -3460,8 +3481,8 @@ const tI18nPhrase Phrases[] = { "Utiliser le Dolby Digital", "",//TODO "Käytä Dolby Digital -ääntä", - "",//TODO - "",//TODO + "U¿ywaj Dolby Digital", + "Usar Dolby Digital", "×ñÞóç Þ÷ïõ Dolby Digital", "Använd Dolby Digital", "Sunet Dolby Digital", @@ -3481,8 +3502,8 @@ const tI18nPhrase Phrases[] = { "Mettre à jour les chaînes", "",// TODO "Päivitä kanavat", - "",// TODO - "",// TODO + "Aktualizuj kana³y", + "Actualizar canales", "ÅíçìÝñùóç êáíáëéþí", "Uppdatera kanaler", "Actualizare canale", @@ -3502,8 +3523,8 @@ const tI18nPhrase Phrases[] = { "noms uniquement", "",// TODO "vain nimet", - "",// TODO - "",// TODO + "tylko nazwy", + "sólo nombres", "ìüíï ïíüìáôá", "bara namn", "doar numele", @@ -3523,8 +3544,8 @@ const tI18nPhrase Phrases[] = { "noms et PIDs", "",// TODO "nimet ja PID:it", - "",// TODO - "",// TODO + "nazwy i PID-y", + "nombres y PIDs", "Ïíüìáôá êáß PIDs", "namn och PID", "nume si PID-uri", @@ -3532,7 +3553,7 @@ const tI18nPhrase Phrases[] = { "",// TODO "ÝÐ×ÒÐÝØï Ø PIDë", "imena i identifikatore (PIDs)", - "nimed ja PID-id", + "nimi ja PID-id", "navne og PIDs", }, { "add new channels", @@ -3544,8 +3565,8 @@ const tI18nPhrase Phrases[] = { "ajouter chaînes", "",// TODO "uudet kanavat", - "",// TODO - "",// TODO + "dodawaj nowe kana³y", + "añadir canales", "ðñïóèÞêç íÝùí êáíáëéþí", "lägg till nya kanaler", "adãugare canale noi", @@ -3565,8 +3586,8 @@ const tI18nPhrase Phrases[] = { "ajouter transpondeurs", "",// TODO "uudet transponderit", - "",// TODO - "",// TODO + "dodawaj nowe transpondery", + "añadir transponders", "ðñïóèÞêç íÝïõ áíáìåôáäüôç", "lägg till nya transponders", "adãugare transpondere noi", @@ -3586,8 +3607,8 @@ const tI18nPhrase Phrases[] = { "Langues audio", "",//TODO "Äänen kielet", - "",//TODO - "",//TODO + "Jêzyków d¼wiêku", + "Idiomas de audio", "Ãëþóóåò Þ÷ïõ", "Antal ljudspråk", "Limbi sunet", @@ -3607,8 +3628,8 @@ const tI18nPhrase Phrases[] = { "Langue audio", "",//TODO "Äänen kieli", - "",//TODO - "",//TODO + "Jêzyk d¼wiêku", + "Idioma de audio", "Ãëþóóá Þ÷ïõ", "Ljudspråk", "Limba sunetului", @@ -3649,8 +3670,8 @@ const tI18nPhrase Phrases[] = { "Fréquence basse LNB (MHz)", "LO-frekvens i lavbåndet (MHz)", "LNB-alataajuus (MHz)", - "Dolna czestotliwosc LNB (MHz)", - "Frecuencia baja LNB (MHz)", + "Dolna czêstotliwo¶æ LNB (MHz)", + "Frecuencia inferior del LNB (MHz)", "ÊÜôù LNB-Óõ÷íüôçôá (MHz)", "Undre LNB frekvens (MHz)", "Frecvnþã LNB inferioarã (Mhz)", @@ -3670,8 +3691,8 @@ const tI18nPhrase Phrases[] = { "Fréquence haute LNB (MHz)", "LO-frekvens i høybåndet (MHz)", "LNB-ylätaajuus (MHz)", - "Gorna czestotliwosc LNB (MHz)", - "Frecuencia alta LNB (MHz)", + "Górna czêstotliwo¶æ LNB (MHz)", + "Frecuencia superior del LNB (MHz)", "¢íù LNB-Óõ÷íüôçôá (MHz)", "Övre LNB frekvens (MHz)", "Frecvnþã LNB superioarã (MHz)", @@ -3691,7 +3712,7 @@ const tI18nPhrase Phrases[] = { "Utiliser le DiSEqC", "Bruk DiSEqC", "Käytä DiSEqC-kytkintä", - "Uzywac DiSEqC", + "U¿ywaj DiSEqC", "Utilizar DiSEqC", "Åíåñãïðïßçóç DiSEqC", "Använd DiSEqC", @@ -3733,7 +3754,7 @@ const tI18nPhrase Phrases[] = { "Marge antérieure (min)", "Opptaksmargin start (min)", "Aloitusmarginaali (min)", - "Poczatkowy czas buforowy (min)", + "Margines na pocz±tku (min)", "Comenzar grabación antes (min)", "Ðñüóèåôïò ÷ñüíïò óôçí áñ÷Þ (ëåðôÜ)", "Marginal för start (min)", @@ -3754,8 +3775,8 @@ const tI18nPhrase Phrases[] = { "Marge postérieure (min)", "Opptaksmargin slutt (min)", "Lopetusmarginaali (min)", - "Koncowy czas buforowy (min)", - "Cortar grabación después (min)", + "Margines na koñcu (min)", + "Acabar grabación después (min)", "Ðñüóèåôïò ÷ñüíïò óôü ôÝëïò (ëåðôÜ)", "Marginal för stopp (min)", "Marjã la oprire (min)", @@ -3775,7 +3796,7 @@ const tI18nPhrase Phrases[] = { "Limite primaire", "Prioritetsgrense HovedDVB", "Ensisijaisen sovittimen prioriteettiraja", - "Pierwotny limit", + "Podstawowy limit", "Límite primario", "Ðñïôåýïí üñéï", "Primär gräns", @@ -3784,7 +3805,7 @@ const tI18nPhrase Phrases[] = { "Límit primari", "¼ØÝ. ßàØÞàØâÕâ ×ÐåÒÐâÐ ÞáÝ. ãáâàÞÙáâÒÐ", "Standardno ogranièenje", - "Esmase seadme prioriteet", + "Esmane prioriteet", "Primær grænse", }, { "Setup.Recording$Default priority", @@ -3796,8 +3817,8 @@ const tI18nPhrase Phrases[] = { "Priorité par défaut", "Normal prioritet (Timer)", "Tallenteen oletusprioriteetti", - "Priorytet pierwotny", - "Prioridad predefinida", + "Domy¶lny priorytet", + "Prioridad por defecto", "ÐñïêáèïñéóìÝíç ðñïôåñáéüôçôá", "Normal prioritet", "Prioritate implicitã", @@ -3817,8 +3838,8 @@ const tI18nPhrase Phrases[] = { "Durée de vie par défaut (j)", "Normal levetid timer (d)", "Tallenteen oletuselinikä (d)", - "Pierwotna trwalosc (d)", - "Duración predefinida", + "Domy¶lny czas ¿ycia (d)", + "Duración por defecto (días)", "ÐñïêáèïñéóìÝíç äéÜñêåéá ðáñáìïíÞò (ÇìÝñåò)", "Normal livstid (dagar)", "Timp de pãstrare predefinit (zile)", @@ -3838,8 +3859,8 @@ const tI18nPhrase Phrases[] = { "Priorité des pauses", "",// TODO "Taukotallenteen prioriteetti", - "Priorytet przerwy", - "",// TODO + "Priorytet pauzy", + "Prioridad en modo pausa", "Ðñïôåñáéüôçôá äéáëåßììáôïò", "Prioritet för direktinspelning", "Prioritate pauzã", @@ -3859,8 +3880,8 @@ const tI18nPhrase Phrases[] = { "Durée de vie des pauses (j)", "",// TODO "Taukotallenteen elinikä (d)", - "Okres trwania przerwy (d)", - "",// TODO + "Czas ¿ycia pauzy (d)", + "Duración en modo pausa (días)", "ÄéÜñêåéá äéáëåßìáôïò", "Livstid för direktinspelning (dagar)", "Pãstrarea emisiunilor 'pauzate' (zile)", @@ -3880,7 +3901,7 @@ const tI18nPhrase Phrases[] = { "Utiliser le nom de l'épisode", "Bruk episodenavn", "Käytä jakson nimeä", - "Czy uzywac nazwe epizodu", + "U¿ywaj nazwy epizodu", "Utilizar nombre de episodo", "×ñÞóç ïíüìáôïò åðåéóïäßïõ", "Använd episodnamn", @@ -3901,8 +3922,8 @@ const tI18nPhrase Phrases[] = { "Utiliser le VPS", "",// TODO "Käytä VPS-toimintoa", - "",// TODO - "",// TODO + "U¿ywaj VPS", + "Usar servicio VPS", "×ñÞóç VPS", "Använd VPS", "Utilizeazã VPS", @@ -3922,8 +3943,8 @@ const tI18nPhrase Phrases[] = { "Marge VPS", "",// TODO "VPS-toiminnon aloitusmarginaali (s)", - "",// TODO - "",// TODO + "Margines VPS (s)", + "Margen VPS (sg)", "Ðåñéèþñéï VPS (ä)", "VPS marginal (s)", "Marjã de timp la utilizare VPS (s)", @@ -3943,8 +3964,8 @@ const tI18nPhrase Phrases[] = { "Marquage enregistr. immédiats", "Markere direkteopptak", "Merkitse pikatallenne", - "Zaznaczyc natychm. nagranie", - "Marcar grabaciones instantáneas", + "Zaznaczaj natychm. nagrywanie", + "Marcar grabaciones inmediatas", "ÅðéëïãÞ ôñÝ÷ïõóáò åããñáöÞò", "Märk direktinspelning", "Marcheazã înregistrare imediatã", @@ -3964,8 +3985,8 @@ const tI18nPhrase Phrases[] = { "Noms enregistr. immédiats", "Navngi direkteopptak", "Nimeä pikatallenne", - "Nazwac natychm. nagranie", - "Nombrar grabaciones instantáneas", + "Nazywaj natychm. nagrywanie", + "Nombrar grabaciones inmediatas", "Ïíïìáóßá ôñÝ÷ïõóáò åããñáöÞò", "Namnge direktinspelning", "Nume înregistrare imediatã", @@ -3985,8 +4006,8 @@ const tI18nPhrase Phrases[] = { "Durée enregistr. immédiat (min)", "",//TODO "Pikatallennuksen kesto (min)", - "Dlugosc bezposredniego nagrania (min)", - "Tiempo de grabación instantánea (min)", + "Czas natychm. nagrywania (min)", + "Tiempo de grabación inmediata (min)", "ÄéÜñêåéá óôãìéáßáò åããñáöÞò (ëåðôÜ)", "Direktinspelning längd (min)", "Timpul de înregistare imediatã (min)", @@ -4006,8 +4027,8 @@ const tI18nPhrase Phrases[] = { "Taille maxi des fichiers (MB)", "Maksimal størrelse på videofiler (MB)", "Suurin tiedostokoko (Mt)", - "Maks. wielkosc pliku (MB)", - "Tamaño máx. de fichero (MB)", + "Maksymalny rozmiar pliku (MB)", + "Tamaño máximo de fichero (MB)", "ÌÝãéóôï ìÝãåèïò áñ÷åßïõ (MB)", "Maximal filstorlek för inspelning (MB)", "Dimensiune maximã a fiºierului video (MB)", @@ -4027,8 +4048,8 @@ const tI18nPhrase Phrases[] = { "Séparer les séquences éditées", "Splitt redigerte filer", "Jaottele muokatut tallenteet", - "Dzielic montowane pliki", - "Quebrar ficheros", + "Dziel edytowane pliki", + "Partir ficheros editados", "ÄéáìÝëéóìüò åðåîåñãáóìÝíùí áñ÷åßùí", "Dela upp redigerade filer", "Separare fiºiere montate", @@ -4048,7 +4069,7 @@ const tI18nPhrase Phrases[] = { "Mode multi-vitesses", "Multispeed modus", "Käytä toiston moninopeustilaa", - "Tryb wielopredkosciowy", + "Tryb wieloprêdko¶ciowy", "Modo multi-velocidad", "Ìåèïäïò ðïëëáðëÞò ôá÷ýôçôáò", "Multispeed mode", @@ -4069,8 +4090,8 @@ const tI18nPhrase Phrases[] = { "Affichage mode de lecture", "Vis avspillingsmodus", "Näytä toiston tila", - "Wyswietlac status odtwarzania", - "Mostrar modo de replay", + "Pokazuj tryb odtwarzania", + "Mostrar modo de reproducción", "¸íäåéîç êáôÜóôáóçò áíáìåôÜäïóçò", "Visa uppspelningsläge", "Afiºeazã redarea", @@ -4090,8 +4111,8 @@ const tI18nPhrase Phrases[] = { "ID de reprise", "Resume ID",// TODO "Tallenteen paluutunniste", - "ID odtwarzania", - "Continuar ID", + "ID wznowienia", + "ID de continuación", "ID áíáìåôÜäïóçò", "Återuppta ID", "Identificator continuare", @@ -4111,8 +4132,8 @@ const tI18nPhrase Phrases[] = { "MinEventTimeout (min)", "Minste hendelsespause (min)", "Tapahtuman odotusaika (min)", - "Min. czas do nast. akcji (Event) (min)", - "Tiempo mínimo pausa (min)", + "Minimalny czas audycji (min)", + "Tiempo mín. antes de un evento (m)", "ÅëÜ÷éóôïò ÷ñÜíïò ðáñåìâïëÞò (ëåðôÜ)", "Minsta händelse-pause (min)", "Duratã minimã emisiuni (min)", @@ -4132,8 +4153,8 @@ const tI18nPhrase Phrases[] = { "Durée minimale d'inact. (min)", "Minimumstid med inaktivitet (min)", "Käyttäjätoiminnon odotusaika (min)", - "Min. brak aktywnosci uzytkownika (min)", - "Tiempo mínimo inactividad (min)", + "Minimalny czas nieaktywno¶ci (min)", + "Tiempo mín. de inactividad (m)", "ÅëÜ÷éóôïò ÷ñüíïò áíáìïíÞò (ëåðôÜ)", "Minsta användar-inaktivitet (min)", "Durata minimã de inactivitate (min)", @@ -4153,8 +4174,8 @@ const tI18nPhrase Phrases[] = { "Temps maxi SVDRP (s)", "Ubrukt SVDRP-levetid (s)", "SVDRP-komennon odotusaika (s)", - "Min. brak aktywnosci SVDRP (s)", - "SVDRP Timeout (s)", + "Czas oczekiwania na SVDRP (s)", + "Tiempo de espera de SVDRP (sg)", "SVDRP äéáêïðÞ (ä)", "SVDRP Timeout (s)", "Timeout SVDRP (sec)", @@ -4174,8 +4195,8 @@ const tI18nPhrase Phrases[] = { "Prise en compte chaîne (s)", "",// TODO "Kanavavalinnan odotusaika (s)", - "",// TODO - "",// TODO + "Czas oczekiwania na zap (s)", + "Considerar canal como visto (sg)", "ÆÜðéíãê äéáêïðÞ (ä)", "Zap timeout(s)", "Interval zapping (s)", @@ -4196,8 +4217,8 @@ const tI18nPhrase Phrases[] = { "LMMJVSD", "MTOTFLS", "MTKTPLS", - "PWSCPSN", - "LMMJVSD", + "PW¦CPSN", + "LMXJVSD", "ÄÔÔÐÐÓÊ", "MTOTFLS", "LMMJVSD", @@ -4217,7 +4238,7 @@ const tI18nPhrase Phrases[] = { "LunMarMerJeuVenSamDim", "ManTirOnsTorFreLørSøn", "Ma Ti Ke To Pe La Su ", - "PonWtoSroCzwPiaSobNie", + "PonWto¦roCzwPi±SobNie", "LunMarMieJueVieSabDom", "ÄåõÔñßÔåôÐÝìÐáñÓÜâKõñ", "MånTisOnsTorFreLörSön", @@ -4239,8 +4260,8 @@ const tI18nPhrase Phrases[] = { " aàbcçdeéèêfghiîjklmnoôpqrstuùûvwxyz0123456789-.#~,/_@", "",// TODO " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~,/_@", - " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@", - " aábcdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~,/_@", + " a±bcædeêfghijkl³mnñoópqrs¶tuvwxyz¼¿0123456789-.#~,/_@", + " aábcçdeéfghiíjklmnñoópqrstuúvwxyz0123456789-.#~,/_@", " áÜâãäåÝæçÞèéßêëìíîïüðñóòôõýö÷øùþ0123456789-.#~,/_@abcdefghijklmnopqrstuvwxyz", " abcdefghijklmnopqrstuvwxyzåäö0123456789-.#~,/_@", " aãâbcdefghiîjklmnopqrsºtþuvwxyz0123456789-.#~,/_@", @@ -4261,6 +4282,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO " 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoö6\tpqrs7\ttuv8\twxyz9", + " 0\t-.#~,/_@1\tabc2±æ\tdef3ê\tghi4\tjkl5³\tmno6ñó\tpqrs7¶\ttuv8\twxyz9¼¿", + " 0\t-.#~,/_@1\tabcáç2\tdefé3\tghií4\tjkl5\tmnoñó6\tpqrs7\ttuvú8\twxyz9", "",//TODO "",//TODO "",//TODO @@ -4268,9 +4291,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO + " 0\t-.#~,/_@1\tabcäå2\tdef3\tghi4\tjkl5\tmnoõö6\tpqrsð7\ttuvü8\twxyzþ9", "",//TODO }, // Learning keys: @@ -4283,8 +4304,8 @@ const tI18nPhrase Phrases[] = { "Apprentissage des codes de télécommande", "Lære fjernkontrolltaster", "Kaukosäätimen opettaminen", - "Nauka kodu pilota", - "Aprendiendo teclas del telemando", + "Nauka klawiszy pilota", + "Aprendiendo teclas del mando", "ÅêìÜèçóç ðëÞêôñùí ôçëå÷åéñéóìïý", "Inlärning av fjärrkontrollsknappar", "Învãþare taste telecomandã", @@ -4304,8 +4325,8 @@ const tI18nPhrase Phrases[] = { "Phase 1: Détection du type de code", "Fase 1: Finne fjernkontroll-kodetype", "Vaihe 1: Koodauksen tunnistaminen", - "Faza 1: Detekcja typu kodu", - "Fase 1: Detectando tipo de receptor", + "Etap 1: Wykrywanie rodzaju kodu pilota", + "Fase 1: Detectando tipo de mando", "ÖÜóç 1: Áíß÷íåõóç êþäéêá RC", "Steg1: identifiering av kod", "Faza 1: Detecþia tipului telecomenzii", @@ -4325,8 +4346,8 @@ const tI18nPhrase Phrases[] = { "Appuyer sur une touche de la télécommande", "Trykk en av tastene på fjernkontrollen", "Paina mitä tahansa kaukosäätimen näppäintä", - "Nacisnac klawisz pilota", - "Pulse una tecla en el telemando", + "Naci¶nij dowolny klawisz na pilocie", + "Pulse cualquier tecla en el mando", "Ðßåóå Ýíá ðëÞêôñï óôï ôçëå÷åéñéóôÞñéï", "Tryck valfri tangent på fjärrkontrollen", "Apãsaþi o tastã pe telecomandã", @@ -4346,8 +4367,8 @@ const tI18nPhrase Phrases[] = { "Code de la télécommande détecté!", "Fjernkontroll-kodetype funnet!", "Näppäinpainallus vastaanotettu!", - "Kod pilota zostal poznany!", - "¡Código detectado!", + "Wykryto kod pilota!", + "¡Código RC detectado!", "ÂñÝèçêå êþäéêáò RC!", "Koden detekterad!", "S-a detectat tipul telecomenzii!", @@ -4367,7 +4388,7 @@ const tI18nPhrase Phrases[] = { "N'appuyer sur aucune touche ...", "Ikke trykk på noen av tastene...", "Älä paina kaukosäätimen näppäimiä...", - "Nie naciskac klawiszy...", + "Nie naciskaj teraz ¿adnego klawisza...", "No pulse ninguna tecla...", "ÌÞí ðáôÜò ðëÞêôñá...", "Tryck inte på någon knapp...", @@ -4388,7 +4409,7 @@ const tI18nPhrase Phrases[] = { "Phase 2: Apprentissage des codes des touches", "Fase 2: Lære spesifikke tastekoder", "Vaihe 2: Näppäinkoodien opettelu", - "Faza 2: Nauka pojedynczych klawiszy", + "Etap 2: Nauka konkretnych kodów klawiszy", "Fase 2: Aprendiendo códigos específicos", "Öáóç 2: ÅêìÜèçóç ìåìïíïìÝíùí ðëÞêôñùí", "Fas 2: Inlärning av specifika knapp-koder", @@ -4409,8 +4430,8 @@ const tI18nPhrase Phrases[] = { "Appuyer sur la touche '%s'", "Trykk tasten for '%s'", "Paina näppäintä toiminnolle '%s'", - "Nacisnac klawisz dla '%s'", - "Pulsar tecla para '%s'", + "Naci¶nij klawisz dla '%s'", + "Pulse la tecla para '%s'", "Ðßåóå ôï ðëÞêôñï ãéÜ '%s'", "Tryck på knappen för '%s'", "Apãsaþi tasta pentru '%s'", @@ -4430,7 +4451,7 @@ const tI18nPhrase Phrases[] = { "Appuyer sur 'Haut' pour confirmer", "Trykk 'Opp' for å bekrefte", "Hyväksy painamalla 'Ylös'", - "Nacisnac 'Gora' do potwierdzenia", + "Naci¶nij 'Do góry' aby potwierdziæ", "Pulse 'Arriba' para confirmar", "Ðßåóå 'ðÜíù' ãéÜ áðïäï÷Þ", "Tryck 'Upp' för att bekräfta", @@ -4451,8 +4472,8 @@ const tI18nPhrase Phrases[] = { "Appuyer sur 'Bas' pour continuer", "Trykk Ned' for å fortsette", "Jatka painamalla 'Alas'", - "Nacisnac 'Dol' zeby kontynuowac", - "Pulse 'Abajo' para confirmar", + "Naci¶nij 'Na dó³' aby kontynuowaæ", + "Pulse 'Abajo' para continuar", "Ðßåóå 'êÜôù' ãéÜ óõíÝ÷åéá", "Tryck 'Ner' för att bekräfta", "Apãsaþi 'Jos' pentru continuare", @@ -4472,7 +4493,7 @@ const tI18nPhrase Phrases[] = { "(Appuyer sur 'Haut' pour revenir en arrière)", "(trykk 'Opp' for å gå tilbake)", "(palaa takaisin painamalla 'Ylös')", - "(Nacisnac 'Gora' cofa)", + "(naci¶nij 'Do góry' aby siê cofn±æ)", "(Pulse 'Arriba' para retornar)", "(Ðßåóå 'ðÜíù' ãéÜ åðéóôñïöÞ", "(Tryck 'Upp' för att backa)", @@ -4493,8 +4514,8 @@ const tI18nPhrase Phrases[] = { "(Appuyer sur 'Bas' pour terminer)", "(trykk 'Ned' for å avslutte innlæring)", "(lopeta opettaminen painamalla 'Alas')", - "(Nacisnac 'Dol' by zakonczyc)", - "(Pulse 'Abajo' para terminar programación teclas)", + "(naci¶nij 'Na dó³' aby zakoñczyæ definiowanie)", + "(Pulse 'Abajo' para terminar el aprendizaje)", "(Ðßåóå 'êÜôù' ãéÜ ôåñìáôéóìü äçëþóåùí ðëÞêôñùí)", "(Tryck 'Ner' för att avsluta inlärningen)", "(Apãsaþi 'Jos' pentru terminare)", @@ -4514,8 +4535,8 @@ const tI18nPhrase Phrases[] = { "('Menu' pour passer cette touche)", "",// TODO "näppäimen puuttuessa paina 'Valikko'", - "(Nacisnac 'Menu' by ominac klawisz)", - "Pulse 'Menu' para saltarse esta tecla", + "(naci¶nij 'Menu' aby pomin±æ ten klawisz)", + "Pulse 'Menú' para omitir esta tecla", "Ðßåóå 'ìåíïý' ãéá ðñïóðÝñáóç áõôïý ôïý ðëÞêôñïõ", "(Tryck 'Meny' för att hoppa över knappen.)", "Apãsaþi 'Meniu' pentru a sãri peste aceastã tastã", @@ -4535,8 +4556,8 @@ const tI18nPhrase Phrases[] = { "Phase 3: Sauvegarde des codes des touches", "Fase 3: Lagre tastekoder", "Vaihe 3: Näppäinkoodien tallentaminen", - "Faza 3: Zapamietac Kod", - "Fase 3: Guardar códigos de teclas", + "Etap 3: Zapisywanie kodów klawiszy", + "Fase 3: Guardando los códigos de teclas", "Öáóç 3: ÁðïèÞêåõóç êùäéêþí", "Fas 3: Spara knappkoder", "Faza 3: Salvarea codurilor de taste", @@ -4556,7 +4577,7 @@ const tI18nPhrase Phrases[] = { "Appuyer sur 'Haut' pour sauvegarder, 'Bas' pour annuler", "Trykk 'Opp' for å lagre, 'Ned' for å avbryte", "Paina 'Ylös' tallentaaksesi ja 'Alas' peruuttaaksesi", - "'Gora' zapamietuje, 'Dol' przerywa", + "Naci¶nij 'Do góry' aby zapisaæ, 'Na dó³' - aby anulowaæ", "Pulse 'Arriba' para guardar, 'Abajo' para anular", "Ðßåóå 'ÐÜíù' ãéá áðïèÞêåõóç, 'ÊÜôù' ãéá áêýñùóç", "Tryck 'Upp' för att spara eller 'Ner' för att avsluta.", @@ -4578,7 +4599,7 @@ const tI18nPhrase Phrases[] = { "Haut", "Opp", "Ylös", - "Gora", + "Do góry", "Arriba", "ÐÜíù", "Upp", @@ -4599,7 +4620,7 @@ const tI18nPhrase Phrases[] = { "Bas", "Ned", "Alas", - "Dol", + "Na dó³", "Abajo", "ÊÜôù", "Ner", @@ -4621,7 +4642,7 @@ const tI18nPhrase Phrases[] = { "Meny", "Valikko", "Menu", - "Menu", + "Menú", "Ìåíïý", "Meny", "Meniu", @@ -4683,7 +4704,7 @@ const tI18nPhrase Phrases[] = { "Gauche", "Venstre", "Vasemmalle", - "Lewo", + "W lewo", "Izquierda", "ÁñéóôåñÜ", "Vänster", @@ -4704,7 +4725,7 @@ const tI18nPhrase Phrases[] = { "Droite", "Høyre", "Oikealle", - "Prawo", + "W prawo", "Derecha", "ÄåîéÜ", "Höger", @@ -4767,7 +4788,7 @@ const tI18nPhrase Phrases[] = { "Jaune", "Gul", "Keltainen", - "Zolty", + "¯ó³ty", "Amarillo", "Êßôñéíï", "Gul", @@ -4809,8 +4830,8 @@ const tI18nPhrase Phrases[] = { "Info", "",//TODO "Tiedot", - "",//TODO - "",//TODO + "Info", + "Info", "Ðëçñïöïñßåò", "Info", "Info", @@ -4830,7 +4851,7 @@ const tI18nPhrase Phrases[] = { "Lecture", "",// TODO "Toista", - "Odtworzenie", + "Odtwórz", "Reproducir", "ÁíáðáñáãùãÞ", "Spela upp", @@ -4851,7 +4872,7 @@ const tI18nPhrase Phrases[] = { "Pause", "",// TODO "Tauko", - "Przerwa", + "Pauza", "Pausa", "Ðáýóç", "Pausa", @@ -4893,7 +4914,7 @@ const tI18nPhrase Phrases[] = { "Enregistrement", "",// TODO "Tallenna", - "Nagrywac", + "Nagrywaj", "Grabar", "EããñáöÞ", "Spela in", @@ -4914,8 +4935,8 @@ const tI18nPhrase Phrases[] = { "Avance rapide", "",// TODO "Pikakelaus >>", - "Naprzod", - "Adelante rápido", + "Do przodu", + "Avance rápido", "Ðñïþèçóç åìðñüò", "Snabbspolning framåt", "Derulare înainte", @@ -4935,8 +4956,8 @@ const tI18nPhrase Phrases[] = { "Retour rapide", "",// TODO "Pikakelaus <<", - "Wstecz", - "Atrás rápido", + "Do ty³u", + "Retroceso rápido", "Ðñïþèçóç ðßóù", "Snabbspolning bakåt", "Derulare înapoi", @@ -4956,8 +4977,8 @@ const tI18nPhrase Phrases[] = { "Veille", // This one caused some bug reports ;) "Power", "Virtakytkin", - "Wylaczyc", - "Corriente", + "Wy³±cz", + "Apagar", "Këåßóéìï", "På/Av", "Închidere", @@ -4977,8 +4998,8 @@ const tI18nPhrase Phrases[] = { "Chaîne+", "",// TODO "Kanava +", - "Kanal+", - "Canal +", + "Kana³+", + "Canal+", "ÊáíÜëé+", "Kanal+", "Canal+", @@ -4998,8 +5019,8 @@ const tI18nPhrase Phrases[] = { "Chaîne-", "",// TODO "Kanava -", - "Kanal-", - "Canal -", + "Kana³-", + "Canal-", "ÊáíÜëé-", "Kanal-", "Canal-", @@ -5019,7 +5040,7 @@ const tI18nPhrase Phrases[] = { "Volume+", "Volum+", "Äänenvoimakkuus +", - "Glosnej", + "G³o¶niej", "Volumen+", "¸íôáóç+", "Volym+", @@ -5061,7 +5082,7 @@ const tI18nPhrase Phrases[] = { "Coupure du son", "Lyd av", "Äänetön", - "Cisza", + "Wycisz", "Mudo", "Óéùðçëü", "Ljud Av", @@ -5082,8 +5103,8 @@ const tI18nPhrase Phrases[] = { "Audio", "",// TODO "Ääni", - "",// TODO - "",// TODO + "D¼wiêk", + "Audio", "¹÷ïò", "Ljud", "Sunet", @@ -5146,7 +5167,7 @@ const tI18nPhrase Phrases[] = { "off", "",// TODO "pois", - "wyl.", + "wy³±cz", "off", "êëåéóôü", "av", @@ -5167,7 +5188,7 @@ const tI18nPhrase Phrases[] = { "aucun", "",// TODO "tyhjä", - "zaden", + "brak", "ninguno", "êáíÝíá", "ingen", @@ -5209,8 +5230,8 @@ const tI18nPhrase Phrases[] = { "haut", "øvre", "yläreuna", - "gora", - "parte superior", + "góra", + "arriba", "ðÜíù", "övre", "sus", @@ -5230,8 +5251,8 @@ const tI18nPhrase Phrases[] = { "bas", "nedre", "alareuna", - "dol", - "parte inferior", + "dó³", + "abajo", "êÜôù", "undre", "jos", @@ -5251,7 +5272,7 @@ const tI18nPhrase Phrases[] = { "Disque", "Disk", "Levy", - "Disk", + "Dysk", "Disco", "Äßóêïò", "Disk", @@ -5272,7 +5293,7 @@ const tI18nPhrase Phrases[] = { "restant", "ledig", "vapaana", - "pozostalo", + "wolnego", "libre", "Åëåýèåñïò", "ledigt", @@ -5294,7 +5315,7 @@ const tI18nPhrase Phrases[] = { "Hopp: ", "Siirry: ", "Skok: ", - "Salta a: ", + "Saltar: ", "ÔïðïèÝôçóç: ", "Hopp: ", "Salt la: ", @@ -5314,7 +5335,7 @@ const tI18nPhrase Phrases[] = { "Volume ", "Volum ", "Äänenvoimakkuus ", - "Glosnosc ", + "G³o¶no¶æ ", "Volumen ", "¸íôáóç ", "Volym ", @@ -5335,7 +5356,7 @@ const tI18nPhrase Phrases[] = { " Arrêter la lecture", " Stopp avspilling", " Lopeta toisto", - " Zatrzymac odtwarzanie", + " Zatrzymaj odtwarzanie", " Parar reprodución", " ÔÝëïò áíáðáñáãùãÞò", " Avsluta uppspelning", @@ -5356,7 +5377,7 @@ const tI18nPhrase Phrases[] = { " Arrêter l'enregistrement ", " Stopp opptak fra ", " Lopeta tallennus ", - " Zatrzymac nagrywanie ", + " Zatrzymaj nagrywanie ", " Parar grabación ", " ÔÝëïò åããáöÞò ", " Avsluta inspelning ", @@ -5377,8 +5398,8 @@ const tI18nPhrase Phrases[] = { " Annuler le montage", " Avbryt redigering", " Peru muokkaus", - " Przerwac montaz", - " Anular modificación ", + " Anuluj edycjê", + " Anular edición", " Áêýñùóç åðåîåñãáóßáò", " Avbryt redigering", " Opreºte montajul înregistrãrii", @@ -5398,8 +5419,8 @@ const tI18nPhrase Phrases[] = { "Changement de carte DVB primaire...", "Bytter første DVB-enhet...", "Vaihdetaan ensisijaista DVB-sovitinta...", - "Pierwszy interfejs DVB przelacza...", - "Cambio al interface DVB primario...", + "Przê³±czam na pierwszy interfejs DVB...", + "Cambiando el interfaz DVB primario...", "Ç êýñéá DVB êÜñôá áëëÜæåé...", "Byter primär DVB enhet...", "Comut dispozitiv DVB primar...", @@ -5419,8 +5440,8 @@ const tI18nPhrase Phrases[] = { "Haut/Bas -> nouvelle place - OK -> déplacer", "Opp/Ned for ny plass - OK for å flytte", "'Ylös/Alas' uusi paikka - 'OK' hyväksy", - "Gora/Dol na nowa pozycje - Ok zmienia", - "Arriba/Abajo para el nuevo lugar - OK para mover", + "Do góry/Na dó³ na now± pozycjê - Ok zatwierdza", + "Arriba/Abajo para mover - OK para confirmar", "ÐÜíù/ÊÜôù ãéÜ íÝá èÝóç. ÌåôÜ ÏÊ", "Upp/Ner för nya platsen - därefter OK för att flytta", "Sus/Jos pentru noua locaþie - OK pentru a muta", @@ -5440,8 +5461,8 @@ const tI18nPhrase Phrases[] = { "Opération de montage lancée", "Redigeringsprosess startet", "Muokkaus aloitettu", - "Uruchomiony proces montazu", - "Proceso modificación iniciado", + "Proces edycji rozpoczêty", + "Proceso de edición iniciado", "Áñ÷éóå ç åðåîåñãáóßá", "Redigeringen startar", "Montajul înregistrãrii a început", @@ -5461,8 +5482,8 @@ const tI18nPhrase Phrases[] = { "Montage terminé", "Redigeringsprosess avsluttet", "Muokkaus valmis", - "Proces montazu zakonczony", - "Proceso de modificación terminado", + "Proces edycji zakoñczony", + "Proceso de edición terminado", "Ç åðåîåñãáóßá ôåëåßùóå", "Redigering avslutad", "Montajul înregistrãrii s-a terminat", @@ -5470,7 +5491,7 @@ const tI18nPhrase Phrases[] = { "Procés d'edició finalitzat", "¼ÞÝâÐÖ ÞÚÞÝçÕÝ", "Rezanje zavr¹eno", - "Redigeerimine on lõpetatud", + "Redigeerimine lõpetatud", "Redigeringsproces afsluttet", }, { "Editing process failed!", @@ -5482,8 +5503,8 @@ const tI18nPhrase Phrases[] = { "Echec du montage!", "Feil under redigering!", "Muokkaus epäonnistui!", - "Bledny proces montazu!", - "Modificación ha fallado!", + "Proces edycji nie powiód³ siê!", + "¡Proceso de edición fallido!", "Ç åðåîåñãáóßá áðÝôõ÷å!", "Redigeringsprocessen misslyckades", "Montajul înregistrãrii a eºuat", @@ -5503,6 +5524,8 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "Tallennus aloitettu", + "Rozpoczêto nagrywanie", + "Iniciando grabación", "",//TODO "",//TODO "",//TODO @@ -5510,9 +5533,7 @@ const tI18nPhrase Phrases[] = { "",//TODO "",//TODO "",//TODO - "",//TODO - "",//TODO - "",//TODO + "Salvestamine algas", "",//TODO }, { "Pausing live video...", @@ -5524,8 +5545,8 @@ const tI18nPhrase Phrases[] = { "Pause de l'émission en direct...", "",// TODO "Pysäytetään lähetys...", - "Zatrzymany program biezacy...", - "Emisión en directo parada...", + "Pauzujê program na ¿ywo...", + "Pausa de la emisión en directo...", "ÐÜãùìá æùíôáíïý óÞìáôïò", "Pausar direktinspelningen", "Trec în pauzã emisiunea transmisã...", @@ -5545,8 +5566,8 @@ const tI18nPhrase Phrases[] = { "Mise à jour du guide des programmes", "",// TODO "Ohjelmaoppaan päivitys aloitettu", - "",// TODO - "",// TODO + "Rozpoczynam skanowanie EPG", + "Iniciando la exploración de EPG", "Áñ÷Þ óÜñùóç EPG", "Påbörjar EPG skanning", "Pornesc achiziþia EPG", @@ -5566,7 +5587,7 @@ const tI18nPhrase Phrases[] = { "Ce plugin n'a pas de paramètres!", "",// TODO "Tällä laajennoksella ei ole asetuksia!", - "Ten plugin niema parametrow!", + "Ta wtyczka nie ma ¿adnych ustawieñ!", "Este plugin no admite configuración", "ÁõôÞ ç åðÝêôáóç äåí Ý÷åé ðáñÜìåôñïõò!", "Den här modulen har inga parametrar", @@ -5587,8 +5608,8 @@ const tI18nPhrase Phrases[] = { "VDR Classique",// TODO "",// TODO "Klassinen VDR", - "",// TODO - "",// TODO + "Klasyczny VDR", + "VDR clásico", "Êëáóéêü VDR", "Klassisk VDR", "VDR clasic", @@ -5608,8 +5629,8 @@ const tI18nPhrase Phrases[] = { "Consoles ST:TNG", "",// TODO "ST:TNG konsoli", - "",// TODO - "",// TODO + "Panel ST:TNG", + "Paneles ST:TNG", "ÌïñöÝò ST:TNG", "ST:TNG konsoll", "Cons. ST:TNG", @@ -5629,8 +5650,8 @@ const tI18nPhrase Phrases[] = { "Sans titre", "",// TODO "Ei esitystä", - "",// TODO - "",// TODO + "Bez tytu³u", + "Sin título", "×ùñßò Ôßôëï", "ingen titel", "Fãrã titlu", @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: keys.c 1.10 2006/01/05 15:39:26 kls Exp $ + * $Id: keys.c 1.11 2006/01/16 17:01:25 kls Exp $ */ #include "keys.h" @@ -250,9 +250,11 @@ cKeyMacros KeyMacros; const cKeyMacro *cKeyMacros::Get(eKeys Key) { - for (cKeyMacro *k = First(); k; k = Next(k)) { - if (*k->Macro() == Key) - return k; - } + if (Key != kNone) { + for (cKeyMacro *k = First(); k; k = Next(k)) { + if (*k->Macro() == Key) + return k; + } + } return NULL; } @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.396 2006/01/15 15:02:36 kls Exp $ + * $Id: menu.c 1.403 2006/01/22 16:06:39 kls Exp $ */ #include "menu.h" @@ -36,6 +36,8 @@ #define MAXRECORDCONTROLS (MAXDEVICES * MAXRECEIVERS) #define MAXINSTANTRECTIME (24 * 60 - 1) // 23:59 hours #define MAXWAITFORCAMMENU 4 // seconds to wait for the CAM menu to open +#define MINFREEDISK 300 // minimum free disk space required to start recording +#define NODISKSPACEDELTA 300 // seconds between "Not enough disk space to start recording!" messages #define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1) @@ -2996,9 +2998,12 @@ static void SetTrackDescriptions(bool Live) #define DIRECTCHANNELTIMEOUT 1000 //ms +cDisplayChannel *cDisplayChannel::currentDisplayChannel = NULL; + cDisplayChannel::cDisplayChannel(int Number, bool Switched) :cOsdObject(true) { + currentDisplayChannel = this; group = -1; withInfo = !Switched || Setup.ShowInfoOnChSwitch; displayChannel = Skins.Current()->DisplayChannel(withInfo); @@ -3017,12 +3022,15 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched) cDisplayChannel::cDisplayChannel(eKeys FirstKey) :cOsdObject(true) { + currentDisplayChannel = this; group = -1; number = 0; + timeout = true; lastPresent = lastFollowing = NULL; lastTime.Set(); withInfo = Setup.ShowInfoOnChSwitch; displayChannel = Skins.Current()->DisplayChannel(withInfo); + channel = Channels.GetByNumber(cDevice::CurrentChannel()); ProcessKey(FirstKey); } @@ -3030,6 +3038,7 @@ cDisplayChannel::~cDisplayChannel() { delete displayChannel; cStatus::MsgOsdClear(); + currentDisplayChannel = NULL; } void cDisplayChannel::DisplayChannel(void) @@ -3063,14 +3072,27 @@ void cDisplayChannel::DisplayInfo(void) void cDisplayChannel::Refresh(void) { - channel = Channels.GetByNumber(cDevice::CurrentChannel()); DisplayChannel(); displayChannel->SetEvents(NULL, NULL); - lastTime.Set(); +} + +cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction) +{ + if (Direction) { + while (Channel) { + Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel); + if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0)) + return Channel; + } + } + return NULL; } eOSState cDisplayChannel::ProcessKey(eKeys Key) { + cChannel *NewChannel = NULL; + if (Key != kNone) + lastTime.Set(); switch (Key) { case k0: if (number == 0) { @@ -3081,31 +3103,32 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) case k1 ... k9: if (number >= 0) { number = number * 10 + Key - k0; - if (number > 0) { - channel = Channels.GetByNumber(number); - displayChannel->SetEvents(NULL, NULL); - withInfo = false; - DisplayChannel(); - lastTime.Set(); - // Lets see if there can be any useful further input: - int n = channel ? number * 10 : 0; - cChannel *ch = channel; - while (ch && (ch = Channels.Next(ch)) != NULL) { - if (!ch->GroupSep()) { - if (n <= ch->Number() && ch->Number() <= n + 9) { - n = 0; - break; - } - if (ch->Number() > n) - n *= 10; + channel = Channels.GetByNumber(number); + displayChannel->SetEvents(NULL, NULL); + withInfo = false; + DisplayChannel(); + // Lets see if there can be any useful further input: + int n = channel ? number * 10 : 0; + int m = 10; + cChannel *ch = channel; + while (ch && (ch = Channels.Next(ch)) != NULL) { + if (!ch->GroupSep()) { + if (n <= ch->Number() && ch->Number() < n + m) { + n = 0; + break; + } + if (ch->Number() > n) { + n *= 10; + m *= 10; } } - if (n > 0) { - // This channel is the only one that fits the input, so let's take it right away: - displayChannel->Flush(); // makes sure the user sees his last input - Channels.SwitchTo(number); - return osEnd; } + if (n > 0) { + // This channel is the only one that fits the input, so let's take it right away: + displayChannel->Flush(); // makes sure the user sees his last input + NewChannel = channel; + withInfo = true; + number = 0; } } break; @@ -3136,18 +3159,27 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) group = -1; } } - lastTime.Set(); break; case kUp|k_Repeat: case kUp: case kDown|k_Repeat: case kDown: - cDevice::SwitchChannel(NORMALKEY(Key) == kUp ? 1 : -1); - // no break here case kChanUp|k_Repeat: case kChanUp: case kChanDn|k_Repeat: - case kChanDn: + case kChanDn: { + eKeys k = NORMALKEY(Key); + cChannel *ch = NextAvailableChannel(channel, (k == kUp || k == kChanUp) ? 1 : -1); + if (ch) + channel = ch; + } + // no break here + case kUp|k_Release: + case kDown|k_Release: + case kChanUp|k_Release: + case kChanDn|k_Release: + if (!(Key & k_Repeat) && channel) + NewChannel = channel; withInfo = true; group = -1; number = 0; @@ -3155,43 +3187,57 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) break; case kNone: if (number && lastTime.Elapsed() > DIRECTCHANNELTIMEOUT) { - if (Channels.GetByNumber(number)) - Channels.SwitchTo(number); - else { - number = 0; - channel = NULL; - DisplayChannel(); - lastTime.Set(); - return osContinue; - } - return osEnd; + channel = Channels.GetByNumber(number); + if (channel) + NewChannel = channel; + withInfo = true; + number = 0; + Refresh(); + lastTime.Set(); } break; //TODO //XXX case kGreen: return osEventNow; //XXX case kYellow: return osEventNext; - case kOk: if (group >= 0) { - channel = Channels.Get(Channels.GetNextNormal(group)); - if (channel) - Channels.SwitchTo(channel->Number()); - withInfo = true; - group = -1; - Refresh(); - break; - } - else if (number > 0 && channel) - Channels.SwitchTo(number); - return osEnd; - default: if ((Key & (k_Repeat | k_Release)) == 0) { - cRemote::Put(Key); - return osEnd; - } + case kOk: + if (group >= 0) { + channel = Channels.Get(Channels.GetNextNormal(group)); + if (channel) + NewChannel = channel; + withInfo = true; + group = -1; + Refresh(); + } + else if (number > 0) { + channel = Channels.GetByNumber(number); + if (channel) + NewChannel = channel; + withInfo = true; + number = 0; + Refresh(); + } + else + return osEnd; + break; + default: + if ((Key & (k_Repeat | k_Release)) == 0) { + cRemote::Put(Key); + return osEnd; + } }; if (!timeout || lastTime.Elapsed() < (uint64)(Setup.ChannelInfoTime * 1000)) { - if (!number && group < 0 && channel && channel->Number() != cDevice::CurrentChannel()) - Refresh(); // makes sure a channel switch through the SVDRP CHAN command is displayed + if (Key == kNone && !number && group < 0 && !NewChannel && channel && channel->Number() != cDevice::CurrentChannel()) { + // makes sure a channel switch through the SVDRP CHAN command is displayed + channel = Channels.GetByNumber(cDevice::CurrentChannel()); + Refresh(); + lastTime.Set(); + } DisplayInfo(); displayChannel->Flush(); + if (NewChannel) { + Channels.SwitchTo(NewChannel->Number()); + channel = NewChannel; + } return osContinue; } return osEnd; @@ -3520,6 +3566,23 @@ int cRecordControls::state = 0; bool cRecordControls::Start(cTimer *Timer, bool Pause) { + static time_t LastNoDiskSpaceMessage = 0; + int FreeMB = 0; + if (Timer) { + AssertFreeDiskSpace(Timer->Priority(), !Timer->Pending()); + Timer->SetPending(true); + } + VideoDiskSpace(&FreeMB); + if (FreeMB < MINFREEDISK) { + if (!Timer || time(NULL) - LastNoDiskSpaceMessage > NODISKSPACEDELTA) { + isyslog("not enough disk space to start recording%s%s", Timer ? " timer " : "", Timer ? *Timer->ToDescr() : ""); + Skins.Message(mtWarning, tr("Not enough disk space to start recording!")); + LastNoDiskSpaceMessage = time(NULL); + } + return false; + } + LastNoDiskSpaceMessage = 0; + ChangeState(); int ch = Timer ? Timer->Channel()->Number() : cDevice::CurrentChannel(); cChannel *channel = Channels.GetByNumber(ch); @@ -3548,8 +3611,10 @@ bool cRecordControls::Start(cTimer *Timer, bool Pause) } } } - else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) + else if (!Timer || (Timer->Priority() >= Setup.PrimaryLimit && !Timer->Pending())) { isyslog("no free DVB device to record channel %d!", ch); + Skins.Message(mtError, tr("No free DVB device to record!")); + } } else esyslog("ERROR: channel %d not defined!", ch); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.81 2006/01/06 11:30:38 kls Exp $ + * $Id: menu.h 1.82 2006/01/22 14:24:31 kls Exp $ */ #ifndef __MENU_H @@ -82,14 +82,17 @@ private: cChannel *channel; const cEvent *lastPresent; const cEvent *lastFollowing; + static cDisplayChannel *currentDisplayChannel; void DisplayChannel(void); void DisplayInfo(void); void Refresh(void); + cChannel *NextAvailableChannel(cChannel *Channel, int Direction); public: cDisplayChannel(int Number, bool Switched); cDisplayChannel(eKeys FirstKey); virtual ~cDisplayChannel(); virtual eOSState ProcessKey(eKeys Key); + static bool IsOpen(void) { return currentDisplayChannel != NULL; } }; class cDisplayVolume : public cOsdObject { diff --git a/menuitems.c b/menuitems.c index 88e8a50..455070d 100644 --- a/menuitems.c +++ b/menuitems.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.c 1.29 2006/01/07 15:37:03 kls Exp $ + * $Id: menuitems.c 1.30 2006/01/21 12:27:14 kls Exp $ */ #include "menuitems.h" @@ -15,6 +15,8 @@ #include "skins.h" #include "status.h" +#define AUTO_ADVANCE_TIMEOUT 1500 // ms before auto advance when entering characters via numeric keys + const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@"; // --- cMenuEditItem --------------------------------------------------------- @@ -262,6 +264,23 @@ void cMenuEditStrItem::SetHelpKeys(void) cSkinDisplay::Current()->SetButtons(NULL); } +void cMenuEditStrItem::AdvancePos(void) +{ + if (pos < length - 2 && pos < int(strlen(value)) ) { + if (++pos >= int(strlen(value))) { + if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ') + pos--; // allow only two blanks at the end + else { + value[pos] = ' '; + value[pos + 1] = 0; + } + } + } + newchar = true; + if (!insert && isalpha(value[pos])) + uppercase = isupper(value[pos]); +} + void cMenuEditStrItem::Set(void) { char buf[1000]; @@ -326,6 +345,13 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) bool SameKey = Key == lastKey; if (Key != kNone) lastKey = Key; + else if (!newchar && autoAdvanceTimeout.TimedOut()) { + AdvancePos(); + newchar = true; + currentChar = NULL; + Set(); + return osContinue; + } switch (Key) { case kRed: // Switch between upper- and lowercase characters if (InEditMode()) { @@ -382,19 +408,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) uppercase = isupper(value[pos]); break; case kRight|k_Repeat: - case kRight: if (pos < length - 2 && pos < int(strlen(value)) ) { - if (++pos >= int(strlen(value))) { - if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ') - pos--; // allow only two blanks at the end - else { - value[pos] = ' '; - value[pos + 1] = 0; - } - } - } - newchar = true; - if (!insert && isalpha(value[pos])) - uppercase = isupper(value[pos]); + case kRight: AdvancePos(); if (pos == 0) SetHelpKeys(); break; @@ -413,15 +427,19 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) value[pos] = toupper(Inc(tolower(value[pos]), NORMALKEY(Key) == kUp)); else value[pos] = Inc( value[pos], NORMALKEY(Key) == kUp); - newchar = false; + newchar = true; } else return cMenuEditItem::ProcessKey(Key); break; + case k0|k_Repeat ... k9|k_Repeat: case k0 ... k9: { - if (!SameKey) - currentChar = NULL; if (InEditMode()) { + if (!SameKey) { + if (!newchar) + AdvancePos(); + currentChar = NULL; + } if (insert && newchar) { // create a new character in insert mode if (int(strlen(value)) < length - 1) { @@ -445,6 +463,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) currentChar++; } newchar = false; + autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT); } else return cMenuEditItem::ProcessKey(Key); diff --git a/menuitems.h b/menuitems.h index bfaf436..ec8e08f 100644 --- a/menuitems.h +++ b/menuitems.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.h 1.15 2006/01/06 15:16:25 kls Exp $ + * $Id: menuitems.h 1.16 2006/01/21 10:45:55 kls Exp $ */ #ifndef __MENUITEMS_H @@ -85,7 +85,9 @@ private: const char *charMap; const char *currentChar; eKeys lastKey; + cTimeMs autoAdvanceTimeout; void SetHelpKeys(void); + void AdvancePos(void); virtual void Set(void); char Inc(char c, bool Up); protected: diff --git a/recording.c b/recording.c index 0f704af..5c57e18 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 1.132 2006/01/08 11:40:13 kls Exp $ + * $Id: recording.c 1.133 2006/01/20 17:18:59 kls Exp $ */ #include "recording.h" @@ -117,7 +117,7 @@ void RemoveDeletedRecordings(void) } } -void AssertFreeDiskSpace(int Priority) +void AssertFreeDiskSpace(int Priority, bool Force) { static cMutex Mutex; cMutexLock MutexLock(&Mutex); @@ -126,7 +126,7 @@ void AssertFreeDiskSpace(int Priority) // it will get removed during the next call. static time_t LastFreeDiskCheck = 0; int Factor = (Priority == -1) ? 10 : 1; - if (time(NULL) - LastFreeDiskCheck > DISKCHECKDELTA / Factor) { + if (Force || time(NULL) - LastFreeDiskCheck > DISKCHECKDELTA / Factor) { if (!VideoFileSpaceAvailable(MINDISKSPACE)) { // Make sure only one instance of VDR does this: cLockFile LockFile(VideoDirectory); diff --git a/recording.h b/recording.h index d79b6b4..7eaddcc 100644 --- a/recording.h +++ b/recording.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.h 1.48 2005/12/18 11:26:51 kls Exp $ + * $Id: recording.h 1.49 2006/01/20 17:18:28 kls Exp $ */ #ifndef __RECORDING_H @@ -21,9 +21,11 @@ extern bool VfatFileSystem; void RemoveDeletedRecordings(void); -void AssertFreeDiskSpace(int Priority = 0); +void AssertFreeDiskSpace(int Priority = 0, bool Force = false); ///< The special Priority value -1 means that we shall get rid of any ///< deleted recordings faster than normal (because we're cutting). + ///< If Force is true, the check will be done even if the timeout + ///< hasn't expired yet. class cResumeFile { private: @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.110 2006/01/15 14:31:45 kls Exp $ + * $Id: tools.c 1.112 2006/01/20 14:01:28 kls Exp $ */ #include "tools.h" @@ -26,9 +26,22 @@ extern "C" { #include <unistd.h> #include <utime.h> #include "i18n.h" +#include "thread.h" int SysLogLevel = 3; +#define MAXSYSLOGBUF 256 + +void syslog_with_tid(int priority, const char *format, ...) +{ + va_list ap; + char fmt[MAXSYSLOGBUF]; + snprintf(fmt, sizeof(fmt), "[%d] %s", cThread::ThreadId(), format); + va_start(ap, format); + vsyslog(priority, fmt, ap); + va_end(ap); +} + int BCD2INT(int x) { return ((1000000 * BCDCHARTOINT((x >> 24) & 0xFF)) + @@ -125,13 +138,14 @@ char *strn0cpy(char *dest, const char *src, size_t n) char *strreplace(char *s, char c1, char c2) { - char *p = s; - - while (p && *p) { - if (*p == c1) - *p = c2; - p++; - } + if (s) { + char *p = s; + while (*p) { + if (*p == c1) + *p = c2; + p++; + } + } return s; } @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.89 2006/01/08 11:40:37 kls Exp $ + * $Id: tools.h 1.90 2006/01/15 16:19:56 kls Exp $ */ #ifndef __TOOLS_H @@ -26,9 +26,9 @@ typedef unsigned long long int uint64; extern int SysLogLevel; -#define esyslog(a...) void( (SysLogLevel > 0) ? syslog(LOG_ERR, a) : void() ) -#define isyslog(a...) void( (SysLogLevel > 1) ? syslog(LOG_INFO, a) : void() ) -#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog(LOG_DEBUG, a) : void() ) +#define esyslog(a...) void( (SysLogLevel > 0) ? syslog_with_tid(LOG_ERR, a) : void() ) +#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_INFO, a) : void() ) +#define dsyslog(a...) void( (SysLogLevel > 2) ? syslog_with_tid(LOG_DEBUG, a) : void() ) #define LOG_ERROR esyslog("ERROR (%s,%d): %m", __FILE__, __LINE__) #define LOG_ERROR_STR(s) esyslog("ERROR: %s: %m", s) @@ -52,6 +52,8 @@ template<class T> inline int sgn(T a) { return a < 0 ? -1 : a > 0 ? 1 : 0; } template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; } #endif +void syslog_with_tid(int priority, const char *format, ...); + #define BCDCHARTOINT(x) (10 * ((x & 0xF0) >> 4) + (x & 0xF)) int BCD2INT(int x); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: transfer.c 1.30 2005/08/14 10:55:03 kls Exp $ + * $Id: transfer.c 1.31 2006/01/21 14:13:16 kls Exp $ */ #include "transfer.h" @@ -63,6 +63,7 @@ void cTransfer::Action(void) int Result = 0; #ifdef FW_NEEDS_BUFFER_RESERVE_FOR_AC3 bool GotBufferReserve = false; + GotBufferReserve = true; //XXX remove this line if you absolutely need the buffer reserve int RequiredBufferReserve = KILOBYTE(DvbCardWith4MBofSDRAM ? 288 : 576); #endif while (Running()) { @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.238 2006/01/15 13:31:57 kls Exp $ + * $Id: vdr.c 1.244 2006/01/22 15:59:13 kls Exp $ */ #include <getopt.h> @@ -447,7 +447,7 @@ int main(int argc, char *argv[]) // Log file: if (SysLogLevel > 0) - openlog("vdr", LOG_PID | LOG_CONS, SysLogTarget); + openlog("vdr", LOG_CONS, SysLogTarget); // LOG_PID doesn't work as expected under NPTL // Check the video directory: @@ -727,7 +727,7 @@ int main(int argc, char *argv[]) LastChannel = cDevice::CurrentChannel(); LastChannelChanged = time(NULL); } - if (time(NULL) - LastChannelChanged >= Setup.ZapTimeout && LastChannel != PreviousChannel[0] && LastChannel != PreviousChannel[1]) + if (time(NULL) - LastChannelChanged >= Setup.ZapTimeout && LastChannel != PreviousChannel[PreviousChannelIndex]) PreviousChannel[PreviousChannelIndex ^= 1] = LastChannel; // Timers and Recordings: if (!Timers.BeingEdited()) { @@ -822,6 +822,7 @@ int main(int argc, char *argv[]) } } break; + // Direct main menu functions: #define DirectMainFunction(function)\ DELETE_MENU;\ if (cControl::Control())\ @@ -855,7 +856,15 @@ int main(int argc, char *argv[]) case kChanUp: case kChanDn|k_Repeat: case kChanDn: - cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1); + if (!Interact) + Menu = new cDisplayChannel(NORMALKEY(key)); + else if (cDisplayChannel::IsOpen()) { + Interact->ProcessKey(key); + continue; + } + else + cDevice::SwitchChannel(NORMALKEY(key) == kChanUp ? 1 : -1); + key = kNone; // nobody else needs to see these keys break; // Volume control: case kVolUp|k_Repeat: @@ -901,9 +910,7 @@ int main(int argc, char *argv[]) case kRecord: if (!cControl::Control()) { if (cRecordControls::Start()) - ;//XXX Skins.Message(mtInfo, tr("Recording")); - else - Skins.Message(mtError, tr("No free DVB device to record!")); + Skins.Message(mtInfo, tr("Recording started")); key = kNone; // nobody else needs to see this key } break; @@ -947,8 +954,6 @@ int main(int argc, char *argv[]) case osRecord: DELETE_MENU; if (cRecordControls::Start()) Skins.Message(mtInfo, tr("Recording started")); - else - Skins.Message(mtError, tr("No free DVB device to record!")); break; case osRecordings: DELETE_MENU; @@ -985,7 +990,7 @@ int main(int argc, char *argv[]) } else { // Key functions in "normal" viewing mode: - if (KeyMacros.Get(key)) { + if (key != kNone && KeyMacros.Get(key)) { cRemote::PutMacro(key); key = kNone; } @@ -999,21 +1004,17 @@ int main(int argc, char *argv[]) } // Direct Channel Select: case k1 ... k9: - Menu = new cDisplayChannel(key); - break; // Left/Right rotates trough channel groups: case kLeft|k_Repeat: case kLeft: case kRight|k_Repeat: case kRight: - Menu = new cDisplayChannel(NORMALKEY(key)); - break; // Up/Down Channel Select: case kUp|k_Repeat: case kUp: case kDown|k_Repeat: case kDown: - cDevice::SwitchChannel(NORMALKEY(key) == kUp ? 1 : -1); + Menu = new cDisplayChannel(NORMALKEY(key)); break; // Viewing Control: case kOk: LastChannel = -1; break; // forces channel display |