mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Version 1.3.34
- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting this one). - Fixed opening recording folders in case the last replayed recording no longer exists (reported by Udo Richter). - Fixed an unjustified "Error while accessing recording!" after deleting a recording from a subfolder. - Fixed handling the '.update' file in case the video directory is not at the default location (reported by Jon Burgess). - Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha Volkenandt). - Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco Schlüßler). - Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo Richter). - Fixed setting current menu item if the first one is non-selectable. - cOsdItem::cOsdItem() now has a 'Selectable' parameter. - Improved displaying 'sub-title' and 'bottom text' in the CAM menu. - Added status message "Resetting CAM..." for an immediate feedback when the CAM reset has been triggered. - The CAM menu now automatically updates itself in case of a progress display (as used, for instance, when updating the firmware via satellite). - Now skipping some funny characters sent by some CAMs at the beginning of strings. - The CAM menu is now completely closed when pressing the Menu key while inside a sub menu. - Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing appear hanging). - Added status message "Opening CAM menu..." for an immediate feedback when the CAM menu has been requested. - Speeded up initial opening of the CAM menu. - Fixed handling of menus with no selectable items. - The character 0x8A in CAM menu strings is now mapped to a real newline. - The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines. - Improved the CAM enquiry menu.
This commit is contained in:
		@@ -791,6 +791,7 @@ Sascha Volkenandt <sascha@akv-soft.de>
 | 
			
		||||
 for reporting a bug in timeout handling in cRwLock::Lock()
 | 
			
		||||
 for pointing out that the SVDRP command DELR deleted recordings that are currently
 | 
			
		||||
 being written to by a timer
 | 
			
		||||
 for fixing a crash in cConfig::Load() when compiling on the PPC
 | 
			
		||||
 | 
			
		||||
Malcolm Caldwell <malcolm.caldwell@ntu.edu.au>
 | 
			
		||||
 for modifying LOF handling to allow for C-band reception
 | 
			
		||||
@@ -918,6 +919,7 @@ Hermann Gausterer <mrq1@gmx.net>
 | 
			
		||||
Peter Bieringer <pb@bieringer.de>
 | 
			
		||||
 for reporting a problem with duplicate recordings with the same file name
 | 
			
		||||
 for suggesting to implement the command line option '--vfat'
 | 
			
		||||
 for reporting a leftover 'summary.vdr' in vdr.5
 | 
			
		||||
 | 
			
		||||
Alexander Damhuis <ad@phonedation.de>
 | 
			
		||||
 for reporting problems when deleting a timer that is currently recording
 | 
			
		||||
@@ -933,6 +935,8 @@ Jon Burgess <mplayer@jburgess.uklinux.net>
 | 
			
		||||
 for pointing out a problem with NPTL ("Native Posix Thread Library")
 | 
			
		||||
 for changing thread handling to make it work with NPTL ("Native Posix Thread Library")
 | 
			
		||||
 for fixing a memory leak in thread handling when using NPTL
 | 
			
		||||
 for reporting a bug in handling the '.update' file in case the video directory is
 | 
			
		||||
 not at the default location
 | 
			
		||||
 | 
			
		||||
Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
 | 
			
		||||
 for reporting a crash when canceling a newly created timer
 | 
			
		||||
@@ -1229,6 +1233,7 @@ Marco Schl
 | 
			
		||||
 for improving resetting CAM connections
 | 
			
		||||
 for fixing handling EPG data for time shifted events
 | 
			
		||||
 for fixing detecting short channel names for "Kabel Deutschland"
 | 
			
		||||
 for reporting that the FATALERRNO macro needs to check for a non-zero errno value
 | 
			
		||||
 | 
			
		||||
J<EFBFBD>rgen Schmitz <j.schmitz@web.de>
 | 
			
		||||
 for reporting a bug in displaying the current channel when switching via the SVDRP
 | 
			
		||||
@@ -1281,6 +1286,9 @@ Udo Richter <udo_richter@gmx.de>
 | 
			
		||||
 for reporting a problem with cRemux in a single thread
 | 
			
		||||
 for adding 'Service' functions to the plugin interface
 | 
			
		||||
 for reporting an unused MAINMENUENTRY in svdrpdemo.c
 | 
			
		||||
 for reporting a bug in opening recording folders in case the last replayed recording
 | 
			
		||||
 no longer exists
 | 
			
		||||
 for reporting a missing check against MAXOSDAREAS in cOsd::CanHandleAreas()
 | 
			
		||||
 | 
			
		||||
Sven Kreiensen <svenk@kammer.uni-hannover.de>
 | 
			
		||||
 for his help in keeping 'channels.conf.terr' up to date
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								HISTORY
									
									
									
									
									
								
							@@ -45,7 +45,7 @@ Video Disk Recorder Revision History
 | 
			
		||||
  a prepended '@' character.
 | 
			
		||||
- If an instant recording is currently active, the "Main" menu now contains
 | 
			
		||||
  an option to stop that recording.
 | 
			
		||||
- Timers are now only processed when the Menu is not active. So after editing
 | 
			
		||||
- Timers are now only processed when the menu is not active. So after editing
 | 
			
		||||
  a timer the effect will take place only after the menu has been closed.
 | 
			
		||||
  In order to avoid missing a timer event by inadvertently leaving the menu
 | 
			
		||||
  open, the menu will be closed automatically after about two minutes of
 | 
			
		||||
@@ -3849,3 +3849,39 @@ Video Disk Recorder Revision History
 | 
			
		||||
  added or deleted, so that other VDR instances can update their lists (thanks to
 | 
			
		||||
  Alexander Rieger).
 | 
			
		||||
- Made the function ExchangeChars() public (suggested by Lucian Muresan).
 | 
			
		||||
 | 
			
		||||
2005-10-03: Version 1.3.34
 | 
			
		||||
 | 
			
		||||
- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting
 | 
			
		||||
  this one).
 | 
			
		||||
- Fixed opening recording folders in case the last replayed recording no longer
 | 
			
		||||
  exists (reported by Udo Richter).
 | 
			
		||||
- Fixed an unjustified "Error while accessing recording!" after deleting a recording
 | 
			
		||||
  from a subfolder.
 | 
			
		||||
- Fixed handling the '.update' file in case the video directory is not at the default
 | 
			
		||||
  location (reported by Jon Burgess).
 | 
			
		||||
- Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha
 | 
			
		||||
  Volkenandt).
 | 
			
		||||
- Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco
 | 
			
		||||
  Schl<68><6C>ler).
 | 
			
		||||
- Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo
 | 
			
		||||
  Richter).
 | 
			
		||||
- Fixed setting current menu item if the first one is non-selectable.
 | 
			
		||||
- cOsdItem::cOsdItem() now has a 'Selectable' parameter.
 | 
			
		||||
- Improved displaying 'sub-title' and 'bottom text' in the CAM menu.
 | 
			
		||||
- Added status message "Resetting CAM..." for an immediate feedback when the CAM
 | 
			
		||||
  reset has been triggered.
 | 
			
		||||
- The CAM menu now automatically updates itself in case of a progress display (as
 | 
			
		||||
  used, for instance, when updating the firmware via satellite).
 | 
			
		||||
- Now skipping some funny characters sent by some CAMs at the beginning of strings.
 | 
			
		||||
- The CAM menu is now completely closed when pressing the Menu key while inside
 | 
			
		||||
  a sub menu.
 | 
			
		||||
- Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing
 | 
			
		||||
  appear hanging).
 | 
			
		||||
- Added status message "Opening CAM menu..." for an immediate feedback when the CAM
 | 
			
		||||
  menu has been requested.
 | 
			
		||||
- Speeded up initial opening of the CAM menu.
 | 
			
		||||
- Fixed handling of menus with no selectable items.
 | 
			
		||||
- The character 0x8A in CAM menu strings is now mapped to a real newline.
 | 
			
		||||
- The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines.
 | 
			
		||||
- Improved the CAM enquiry menu.
 | 
			
		||||
 
 | 
			
		||||
@@ -17,3 +17,7 @@ VDR Plugin 'skincurses' Revision History
 | 
			
		||||
2005-05-16: Version 0.0.4
 | 
			
		||||
 | 
			
		||||
- New "recording info" display.
 | 
			
		||||
 | 
			
		||||
2005-10-01:
 | 
			
		||||
 | 
			
		||||
- Added a note about using this skin to the README file.
 | 
			
		||||
 
 | 
			
		||||
@@ -14,3 +14,11 @@ The 'skincurses' plugin implements a VDR skin that works in a
 | 
			
		||||
shell window, using only plain text output. It re-implements
 | 
			
		||||
what used to be available by compiling VDR versions before 1.3.7
 | 
			
		||||
with the DEBUG_OSD macro set.
 | 
			
		||||
 | 
			
		||||
To activate this skin you can either select it in the Setup/OSD
 | 
			
		||||
menu, or put the line
 | 
			
		||||
 | 
			
		||||
OSDSkin = curses
 | 
			
		||||
 | 
			
		||||
into your 'setup.conf' file before starting VDR. Make sure this
 | 
			
		||||
is the only OSDSkin line in that file.
 | 
			
		||||
 
 | 
			
		||||
@@ -8,26 +8,27 @@ hr-fernsehen;ARD:11836:hC34:S19.2E:27500:301:302=deu:304:0:28108:1:1101:0
 | 
			
		||||
NDR FS MV;ARD:12109:hC34:S19.2E:27500:2401:2402=deu:2404:0:28224:1:1073:0
 | 
			
		||||
SR S<>DWEST Fernsehen;ARD:12265:hC34:S19.2E:27500:1301:1302=deu:1304:0:28486:1:1093:0
 | 
			
		||||
WDR K<>ln;ARD:11836:hC34:S19.2E:27500:601:602=deu:604:0:28111:1:1101:0
 | 
			
		||||
BR-alpha;ARD:11836:hC34:S19.2E:27500:701:702=deu:704:0:28112:1:1101:0
 | 
			
		||||
BR-alpha;ARD:11836:hC34:S19.2E:27500:701:702=deu;703:704:0:28112:1:1101:0
 | 
			
		||||
S<EFBFBD>DWEST Ferns. BW;ARD:11836:hC34:S19.2E:27500:801:802=deu:804:0:28113:1:1101:0
 | 
			
		||||
Phoenix;ARD:11836:hC34:S19.2E:27500:901:902=deu:904:0:28114:1:1101:0
 | 
			
		||||
ZDF;ZDFvision:11953:hC34:S19.2E:27500:110:120=deu,121=2ch;125=dd:130:0:28006:1:1079:0
 | 
			
		||||
3sat;ZDFvision:11953:hC34:S19.2E:27500:210:220=deu,221=2ch;225=dd:230:0:28007:1:1079:0
 | 
			
		||||
KiKa;ZDFvision:11953:hC34:S19.2E:27500:310:320=deu:330:0:28008:1:1079:0
 | 
			
		||||
KiKa;ZDFvision:11953:hC34:S19.2E:27500:310:320:330:0:28008:1:1079:0
 | 
			
		||||
arte;ARD:11836:hC34:S19.2E:27500:401:402=deu,403=fra:404:0:28109:1:1101:0
 | 
			
		||||
ORF1;ORF:12692:hC56:S19.2E:22000:160:161=deu;163=deu:165:1762,D05,1702,1801:13001:1:1117:0
 | 
			
		||||
ORF2;ORF:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:3:13002:1:1117:0
 | 
			
		||||
ORF2;ORF:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:1762,D05,1702,1801:13002:1:1117:0
 | 
			
		||||
ZDFinfokanal;ZDFvision:11953:hC34:S19.2E:27500:610:620=deu:130:0:28011:1:1079:0
 | 
			
		||||
CNN Int.;CNN:11778:vC34:S19.2E:27500:165:100=eng:47:0:28522:1:1068:0
 | 
			
		||||
Super RTL,S RTL;RTL World:12187:hC34:S19.2E:27500:165:120=deu:65:0:12040:1:1089:0
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
EURONEWS;CSAT:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,91=rus,98=por,99=deu:0:0:8004:1:1070:0
 | 
			
		||||
rbb Brandenburg;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28205:1:1073:0
 | 
			
		||||
EURONEWS;CSAT:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,98=por,99=deu,91=rus:0:0:8004:1:1070:0
 | 
			
		||||
rbb Brandenburg;ARD:12109:hC34:S19.2E:27500:501:502=deu:504:0:28205:1:1073:0
 | 
			
		||||
Sky News:11597:vC56:S19.2E:22000:305+131:306=eng:0:0:28707:1:1026:0
 | 
			
		||||
Veronica/JETIX;CANALDIGITAAL:12574:hC56:S19.2E:22000:518+8190:92=dut:38:622,100:5020:53:1109:0
 | 
			
		||||
BVN;CANALDIGITAAL:12574:hC56:S19.2E:22000:515+8190:96=dut:36:0:5025:53:1109:0
 | 
			
		||||
@@ -44,22 +45,22 @@ MDR FERNSEHEN;ARD:12109:hC34:S19.2E:27500:401:402=deu:404:0:28204:1:1073:0
 | 
			
		||||
rbb Berlin;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0
 | 
			
		||||
:Premiere World
 | 
			
		||||
PREMIERE START,START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1:8:133:2:0
 | 
			
		||||
PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:32:1:10:133:2:0
 | 
			
		||||
PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1:11:133:2:0
 | 
			
		||||
PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1:10:133:2:0
 | 
			
		||||
PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1:11:133:2:0
 | 
			
		||||
PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1: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:1702,1801,1722:29:133:2:0
 | 
			
		||||
PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu,1281=deu:32:1722,1702,1801:29:133:2:0
 | 
			
		||||
PREMIERE 6,PREM 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1:41:133:2:0
 | 
			
		||||
PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1702,1801,1722:20:133:2:0
 | 
			
		||||
PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1801,1722,1702:20:133:2:0
 | 
			
		||||
DISNEY CHANNEL,DISNEY;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:32:1722,1801,1702:34:133:17:0
 | 
			
		||||
:Premiere Direkt
 | 
			
		||||
PREMIERE DIREKT,DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0
 | 
			
		||||
:PW Erotic
 | 
			
		||||
BEATE-UHSE.TV,B-UHSE;PREMIERE:11758:hC34:S19.2E:27500:1791:1792=deu:32:1801,1722,1702:21:133:17:0
 | 
			
		||||
DIREKT EROTIK,EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:1280=deu:0:1722,1801,1702:513:133:4:0
 | 
			
		||||
BEATE-UHSE.TV,B-UHSE;PREMIERE:11758:hC34:S19.2E:27500:1791:1792=deu:32:1722,1702,1801:21:133:17:0
 | 
			
		||||
DIREKT EROTIK,EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:1280=deu:0:1801,1722,1702:513:133:4:0
 | 
			
		||||
:Sportsworld
 | 
			
		||||
PREMIERE SPORT PORTAL,SPORT PORTAL;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1702,1801,1722:17:133:3:0
 | 
			
		||||
PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:32:1722,1801,1702:27:133:4:0
 | 
			
		||||
PREMIERE SPORT PORTAL,SPORT PORTAL;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1722,1702,1801:17:133:3:0
 | 
			
		||||
PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:32:1801,1702,1722:27:133:4:0
 | 
			
		||||
:Beta Digital
 | 
			
		||||
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
 | 
			
		||||
@@ -89,9 +90,9 @@ TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0
 | 
			
		||||
:@201 Sky
 | 
			
		||||
Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0
 | 
			
		||||
Sky Mix;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0
 | 
			
		||||
ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng:2317:960,961:10070:2:2044:0
 | 
			
		||||
ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng,2363=NAR:2317:960,961:10070:2:2044:0
 | 
			
		||||
Sci-Fi;BSkyB:12148:hC23:S28.2E:27500:512+8190:640=eng:576:960,961:4905:2:2023:0
 | 
			
		||||
Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2317=eng,2318=NAR:2315:960,961:5904:2:2025:0
 | 
			
		||||
Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2326=eng,2327=NAR:2315:960,961:5904:2:2025:0
 | 
			
		||||
Paramount;BSkyB:11526:vC23:S28.2E:27500:2317+2306:2318=eng:2319:960,961:50305:2:2404:0
 | 
			
		||||
Paramount 2;BSkyB:11914:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:4504:2:2011:0
 | 
			
		||||
Discovery;BSkyB:11875:hC23:S28.2E:27500:2304:2306=eng,2307=NAR:2305:960,961:6201:2:2009:0
 | 
			
		||||
@@ -108,7 +109,7 @@ Sky Cinema 1;BSkyB:12285:vC23:S28.2E:27500:519+8190:647=eng,667=NAR:583:960,961:
 | 
			
		||||
Sky Cinema 2;BSkyB:12285:vC23:S28.2E:27500:517+8190:645=eng,665=NAR:581:960,961:4802:2:2030:0
 | 
			
		||||
:@900 Some 'seed' channels
 | 
			
		||||
Chelsea TV;BskyB:11778:vC23:S28.2E:27500:2308+2304:2309=eng:0:960,961:9307:2:2004:0
 | 
			
		||||
WDR M<>nster;ARD:12421:hC34:S19.2E:27500:701:702=deu:104:0:28310:1:1201:0
 | 
			
		||||
WDR M<>nster;ARD:12421:hC34:S19.2E:27500:101:102=deu:104:0:28310:1:1201:0
 | 
			
		||||
Animal Plnt+;BSkyB:12070:hC23:S28.2E:27500:2314+2307:2315=eng:0:960,961:50002:2:2019:0
 | 
			
		||||
S1T;BSkyB:12285:vC23:S28.2E:27500:513+8190:641=eng,661=NAR:577:960,961:4409:2:2030:0
 | 
			
		||||
CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0
 | 
			
		||||
@@ -117,4 +118,5 @@ IGLESIA MME;T-Systems/MTI:11200:vC56:S13.0E:27500:4097:4098:0:0:4733:318:13400:0
 | 
			
		||||
Euro1080;EURO1080:12168:vC34:S19.2E:27500:308:256:0:FF:21100:1:1088:0
 | 
			
		||||
Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:FF:29700:0:0:0
 | 
			
		||||
eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0
 | 
			
		||||
TVS Teleport Bonn;DMV:11535:vC34:S1.0W:5632:308+8190:256=eng,257=eng:0:2:1:65535:1:0
 | 
			
		||||
:@1000 New channels
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								ci.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								ci.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: ci.c 1.28 2005/09/17 11:43:08 kls Exp $
 | 
			
		||||
 * $Id: ci.c 1.36 2005/10/03 12:58:22 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "ci.h"
 | 
			
		||||
@@ -92,9 +92,17 @@ static char *CopyString(int Length, const uint8_t *Data)
 | 
			
		||||
///< Copies the string at Data.
 | 
			
		||||
///< \return Returns a pointer to a newly allocated string.
 | 
			
		||||
{
 | 
			
		||||
  // Some CAMs send funny characters at the beginning of strings.
 | 
			
		||||
  // Let's just skip them:
 | 
			
		||||
  while (Length > 0 && (*Data == ' ' || *Data == 0x05 || *Data == 0x96 || *Data == 0x97)) {
 | 
			
		||||
        Length--;
 | 
			
		||||
        Data++;
 | 
			
		||||
        }
 | 
			
		||||
  char *s = MALLOC(char, Length + 1);
 | 
			
		||||
  strncpy(s, (char *)Data, Length);
 | 
			
		||||
  s[Length] = 0;
 | 
			
		||||
  // The character 0x8A is used as newline, so let's put a real '\n' in there:
 | 
			
		||||
  strreplace(s, 0x8A, '\n');
 | 
			
		||||
  return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -394,7 +402,7 @@ const uint8_t *cCiTransportConnection::Data(int &Length)
 | 
			
		||||
  return tpdu->Data(Length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define MAX_CONNECT_RETRIES  20
 | 
			
		||||
#define MAX_CONNECT_RETRIES  2
 | 
			
		||||
 | 
			
		||||
int cCiTransportConnection::CreateConnection(void)
 | 
			
		||||
{
 | 
			
		||||
@@ -1026,6 +1034,7 @@ public:
 | 
			
		||||
  cCiEnquiry *Enquiry(bool Clear = false);
 | 
			
		||||
  bool SendMenuAnswer(uint8_t Selection);
 | 
			
		||||
  bool SendAnswer(const char *Text);
 | 
			
		||||
  bool SendCloseMMI(void);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
cCiMMI::cCiMMI(int SessionId, cCiTransportConnection *Tc)
 | 
			
		||||
@@ -1198,6 +1207,14 @@ bool cCiMMI::SendAnswer(const char *Text)
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cCiMMI::SendCloseMMI(void)
 | 
			
		||||
{
 | 
			
		||||
  dbgprotocol("%d: ==> Close MMI\n", SessionId());
 | 
			
		||||
  SendData(AOT_CLOSE_MMI, 0);
 | 
			
		||||
  //XXX return value of all SendData() calls???
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cCiMenu ---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable)
 | 
			
		||||
@@ -1229,6 +1246,12 @@ bool cCiMenu::AddEntry(char *s)
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cCiMenu::HasUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  // If the mmi is gone, the menu shall be closed, which also qualifies as 'update'.
 | 
			
		||||
  return !mmi || mmi->HasUserIO();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cCiMenu::Select(int Index)
 | 
			
		||||
{
 | 
			
		||||
  cMutexLock MutexLock(&mutex);
 | 
			
		||||
@@ -1242,6 +1265,11 @@ bool cCiMenu::Cancel(void)
 | 
			
		||||
  return Select(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cCiMenu::Abort(void)
 | 
			
		||||
{
 | 
			
		||||
  return mmi && mmi->SendCloseMMI();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cCiEnquiry ------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
cCiEnquiry::cCiEnquiry(cCiMMI *MMI)
 | 
			
		||||
@@ -1271,6 +1299,11 @@ bool cCiEnquiry::Cancel(void)
 | 
			
		||||
  return Reply(NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cCiEnquiry::Abort(void)
 | 
			
		||||
{
 | 
			
		||||
  return mmi && mmi->SendCloseMMI();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cCiCaPmt --------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Ca Pmt List Management:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								ci.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								ci.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: ci.h 1.14 2005/08/20 14:56:11 kls Exp $
 | 
			
		||||
 * $Id: ci.h 1.17 2005/10/03 12:49:52 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CI_H
 | 
			
		||||
@@ -40,6 +40,8 @@ public:
 | 
			
		||||
  bool Selectable(void) { return selectable; }
 | 
			
		||||
  bool Select(int Index);
 | 
			
		||||
  bool Cancel(void);
 | 
			
		||||
  bool Abort(void);
 | 
			
		||||
  bool HasUpdate(void);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
class cCiEnquiry {
 | 
			
		||||
@@ -58,6 +60,7 @@ public:
 | 
			
		||||
  int ExpectedLength(void) { return expectedLength; }
 | 
			
		||||
  bool Reply(const char *s);
 | 
			
		||||
  bool Cancel(void);
 | 
			
		||||
  bool Abort(void);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
class cCiCaPmt {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								config.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: config.h 1.228 2005/09/14 16:04:09 kls Exp $
 | 
			
		||||
 * $Id: config.h 1.230 2005/10/01 10:41:33 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CONFIG_H
 | 
			
		||||
@@ -19,8 +19,8 @@
 | 
			
		||||
#include "i18n.h"
 | 
			
		||||
#include "tools.h"
 | 
			
		||||
 | 
			
		||||
#define VDRVERSION  "1.3.33"
 | 
			
		||||
#define VDRVERSNUM   10333  // Version * 10000 + Major * 100 + Minor
 | 
			
		||||
#define VDRVERSION  "1.3.34"
 | 
			
		||||
#define VDRVERSNUM   10334  // Version * 10000 + Major * 100 + Minor
 | 
			
		||||
 | 
			
		||||
#define MAXPRIORITY 99
 | 
			
		||||
#define MAXLIFETIME 99
 | 
			
		||||
@@ -91,7 +91,7 @@ public:
 | 
			
		||||
  const char *FileName(void) { return fileName; }
 | 
			
		||||
  bool Load(const char *FileName = NULL, bool AllowComments = false, bool MustExist = false)
 | 
			
		||||
  {
 | 
			
		||||
    Clear();
 | 
			
		||||
    cConfig<T>::Clear();
 | 
			
		||||
    if (FileName) {
 | 
			
		||||
       free(fileName);
 | 
			
		||||
       fileName = strdup(FileName);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										79
									
								
								i18n.c
									
									
									
									
									
								
							
							
						
						
									
										79
									
								
								i18n.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: i18n.c 1.210 2005/09/25 11:57:04 kls Exp $
 | 
			
		||||
 * $Id: i18n.c 1.213 2005/10/03 12:27:15 kls Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * Translations provided by:
 | 
			
		||||
 *
 | 
			
		||||
@@ -2273,6 +2273,27 @@ const tI18nPhrase Phrases[] = {
 | 
			
		||||
    "K<EFBFBD>vaketas peaaegu t<>is!",
 | 
			
		||||
    "Kun lidt diskplads tilbage!",
 | 
			
		||||
  },
 | 
			
		||||
  { "Opening CAM menu...",
 | 
			
		||||
    "CAM-Men<65> wird ge<67>ffnet...",
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
  },
 | 
			
		||||
  { "Can't open CAM menu!",
 | 
			
		||||
    "CAM-Men<65> kann nicht ge<67>ffnet werden!",
 | 
			
		||||
    "Ne morem odpreti CAM menija!",
 | 
			
		||||
@@ -2294,6 +2315,27 @@ const tI18nPhrase Phrases[] = {
 | 
			
		||||
    "Ei saa avada CAM men<65><6E>d!",
 | 
			
		||||
    "Kan ikke <20>bne CAM menuen!",
 | 
			
		||||
  },
 | 
			
		||||
  { "Resetting CAM...",
 | 
			
		||||
    "CAM wird zur<75>ckgesetzt...",
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
  },
 | 
			
		||||
  { "Can't reset CAM!",
 | 
			
		||||
    "CAM-Reset fehlgeschlagen!",
 | 
			
		||||
    "Ne morem resetirati CAM-a",
 | 
			
		||||
@@ -2316,26 +2358,47 @@ const tI18nPhrase Phrases[] = {
 | 
			
		||||
    "Kan ikke nulstille CAM!",
 | 
			
		||||
  },
 | 
			
		||||
  { "CAM has been reset",
 | 
			
		||||
    "CAM wurde zur<75>ckgesetzt!",
 | 
			
		||||
    "CAM je resetiran!",
 | 
			
		||||
    "Modulo CAM reimpostato!",
 | 
			
		||||
    "CAM is herstart!",
 | 
			
		||||
    "CAM wurde zur<75>ckgesetzt",
 | 
			
		||||
    "CAM je resetiran",
 | 
			
		||||
    "Modulo CAM reimpostato",
 | 
			
		||||
    "CAM is herstart",
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "La CAM a <20>t<EFBFBD> r<>initialis<69>e",
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "Salausmoduuli alustettu",
 | 
			
		||||
    "CAM-Reset wykonany!",
 | 
			
		||||
    "CAM-Reset wykonany",
 | 
			
		||||
    "CAM reiniciada",
 | 
			
		||||
    "<EFBFBD><EFBFBD><EFBFBD> CAM <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
 | 
			
		||||
    "CA modulen har <20>terst<73>llts",
 | 
			
		||||
    "CAM-ul a fost resetat",
 | 
			
		||||
    "A CAM vissza lett <20>ll<6C>tva",
 | 
			
		||||
    "CAM reiniciada",
 | 
			
		||||
    "CAM-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!",
 | 
			
		||||
    "CAM je resetiran!",
 | 
			
		||||
    "CAM-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
 | 
			
		||||
    "CAM je resetiran",
 | 
			
		||||
    "CAM mooduli taask<73>ivitus tehtud",
 | 
			
		||||
    "CAM er blevet nulstillet",
 | 
			
		||||
  },
 | 
			
		||||
  { "Please enter %d digits!",
 | 
			
		||||
    "Bitte geben Sie %d Ziffern ein!",
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
  },
 | 
			
		||||
  { "No audio available!",
 | 
			
		||||
    "Kein Audio verf<72>gbar!",
 | 
			
		||||
    "Zvok ni dosegljiv",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								menu.c
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								menu.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: menu.c 1.362 2005/09/25 13:37:21 kls Exp $
 | 
			
		||||
 * $Id: menu.c 1.374 2005/10/03 12:53:51 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
@@ -34,6 +34,7 @@
 | 
			
		||||
 | 
			
		||||
#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 CHNUMWIDTH  (numdigits(Channels.MaxNumber()) + 1)
 | 
			
		||||
 | 
			
		||||
@@ -1287,33 +1288,59 @@ eOSState cMenuCommands::ProcessKey(eKeys Key)
 | 
			
		||||
cMenuCam::cMenuCam(cCiMenu *CiMenu)
 | 
			
		||||
:cOsdMenu("")
 | 
			
		||||
{
 | 
			
		||||
  dsyslog("CAM: Menu ------------------");
 | 
			
		||||
  ciMenu = CiMenu;
 | 
			
		||||
  selected = false;
 | 
			
		||||
  offset = 0;
 | 
			
		||||
  if (ciMenu->Selectable())
 | 
			
		||||
     SetHasHotkeys();
 | 
			
		||||
  SetTitle(ciMenu->TitleText() ? ciMenu->TitleText() : "CAM");
 | 
			
		||||
  for (int i = 0; i < ciMenu->NumEntries(); i++)
 | 
			
		||||
      Add(new cOsdItem(hk(ciMenu->Entry(i))));
 | 
			
		||||
  //XXX implement a clean way of displaying this:
 | 
			
		||||
  Add(new cOsdItem(ciMenu->SubTitleText()));
 | 
			
		||||
  Add(new cOsdItem(ciMenu->BottomText()));
 | 
			
		||||
  SetTitle(*ciMenu->TitleText() ? ciMenu->TitleText() : "CAM");
 | 
			
		||||
  dsyslog("CAM: '%s'", ciMenu->TitleText());
 | 
			
		||||
  if (*ciMenu->SubTitleText()) {
 | 
			
		||||
     dsyslog("CAM: '%s'", ciMenu->SubTitleText());
 | 
			
		||||
     AddMultiLineItem(ciMenu->SubTitleText());
 | 
			
		||||
     offset = Count();
 | 
			
		||||
     }
 | 
			
		||||
  for (int i = 0; i < ciMenu->NumEntries(); i++) {
 | 
			
		||||
      Add(new cOsdItem(hk(ciMenu->Entry(i)), osUnknown, ciMenu->Selectable()));
 | 
			
		||||
      dsyslog("CAM: '%s'", ciMenu->Entry(i));
 | 
			
		||||
      }
 | 
			
		||||
  if (*ciMenu->BottomText()) {
 | 
			
		||||
     AddMultiLineItem(ciMenu->BottomText());
 | 
			
		||||
     dsyslog("CAM: '%s'", ciMenu->BottomText());
 | 
			
		||||
     }
 | 
			
		||||
  Display();
 | 
			
		||||
  dsyslog("CAM: Menu - %s", ciMenu->TitleText());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cMenuCam::~cMenuCam()
 | 
			
		||||
{
 | 
			
		||||
  if (!selected)
 | 
			
		||||
     ciMenu->Cancel();
 | 
			
		||||
     ciMenu->Abort();
 | 
			
		||||
  delete ciMenu;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cMenuCam::AddMultiLineItem(const char *s)
 | 
			
		||||
{
 | 
			
		||||
  while (s && *s) {
 | 
			
		||||
        const char *p = strchr(s, '\n');
 | 
			
		||||
        int l = p ? p - s : strlen(s);
 | 
			
		||||
        cOsdItem *item = new cOsdItem;
 | 
			
		||||
        item->SetSelectable(false);
 | 
			
		||||
        item->SetText(strndup(s, l), false);
 | 
			
		||||
        Add(item);
 | 
			
		||||
        s = p ? p + 1 : p;
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
eOSState cMenuCam::Select(void)
 | 
			
		||||
{
 | 
			
		||||
  if (ciMenu->Selectable()) {
 | 
			
		||||
     ciMenu->Select(Current());
 | 
			
		||||
     selected = true;
 | 
			
		||||
     ciMenu->Select(Current() - offset);
 | 
			
		||||
     dsyslog("CAM: select %d", Current() - offset);
 | 
			
		||||
     }
 | 
			
		||||
  else
 | 
			
		||||
     ciMenu->Cancel();
 | 
			
		||||
  selected = true;
 | 
			
		||||
  return osEnd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1327,36 +1354,51 @@ eOSState cMenuCam::ProcessKey(eKeys Key)
 | 
			
		||||
       default: break;
 | 
			
		||||
       }
 | 
			
		||||
     }
 | 
			
		||||
  else if (state == osBack) {
 | 
			
		||||
     ciMenu->Cancel();
 | 
			
		||||
     selected = true;
 | 
			
		||||
     return osEnd;
 | 
			
		||||
     }
 | 
			
		||||
  if (ciMenu->HasUpdate()) {
 | 
			
		||||
     selected = true;
 | 
			
		||||
     return osEnd;
 | 
			
		||||
     }
 | 
			
		||||
  return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cMenuCamEnquiry -------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//XXX this is just quick and dirty - make this a separate display object
 | 
			
		||||
cMenuCamEnquiry::cMenuCamEnquiry(cCiEnquiry *CiEnquiry)
 | 
			
		||||
:cOsdMenu("", 10)
 | 
			
		||||
:cOsdMenu("", 1)
 | 
			
		||||
{
 | 
			
		||||
  ciEnquiry = CiEnquiry;
 | 
			
		||||
  int Length = ciEnquiry->ExpectedLength();
 | 
			
		||||
  input = MALLOC(char, Length + 1);
 | 
			
		||||
  *input = 0;
 | 
			
		||||
  replied = false;
 | 
			
		||||
  SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM");
 | 
			
		||||
  Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind()));
 | 
			
		||||
  SetTitle("CAM");
 | 
			
		||||
  Add(new cOsdItem(ciEnquiry->Text(), osUnknown, false));
 | 
			
		||||
  Add(new cOsdItem("", osUnknown, false));
 | 
			
		||||
  Add(new cMenuEditNumItem("", input, Length, ciEnquiry->Blind()));
 | 
			
		||||
  Display();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cMenuCamEnquiry::~cMenuCamEnquiry()
 | 
			
		||||
{
 | 
			
		||||
  if (!replied)
 | 
			
		||||
     ciEnquiry->Cancel();
 | 
			
		||||
     ciEnquiry->Abort();
 | 
			
		||||
  free(input);
 | 
			
		||||
  delete ciEnquiry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
eOSState cMenuCamEnquiry::Reply(void)
 | 
			
		||||
{
 | 
			
		||||
  //XXX check length???
 | 
			
		||||
  if (ciEnquiry->ExpectedLength() < 0xFF && int(strlen(input)) != ciEnquiry->ExpectedLength()) {
 | 
			
		||||
     char buffer[64];
 | 
			
		||||
     snprintf(buffer, sizeof(buffer), tr("Please enter %d digits!"), ciEnquiry->ExpectedLength());
 | 
			
		||||
     Skins.Message(mtError, buffer);
 | 
			
		||||
     return osContinue;
 | 
			
		||||
     }
 | 
			
		||||
  ciEnquiry->Reply(input);
 | 
			
		||||
  replied = true;
 | 
			
		||||
  return osEnd;
 | 
			
		||||
@@ -1372,6 +1414,11 @@ eOSState cMenuCamEnquiry::ProcessKey(eKeys Key)
 | 
			
		||||
       default: break;
 | 
			
		||||
       }
 | 
			
		||||
     }
 | 
			
		||||
  else if (state == osBack) {
 | 
			
		||||
     ciEnquiry->Cancel();
 | 
			
		||||
     replied = true;
 | 
			
		||||
     return osEnd;
 | 
			
		||||
     }
 | 
			
		||||
  return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1513,6 +1560,7 @@ cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
 | 
			
		||||
     SetCurrent(First());
 | 
			
		||||
  else if (OpenSubMenus && cReplayControl::LastReplayed() && Open(true))
 | 
			
		||||
     return;
 | 
			
		||||
  Display();
 | 
			
		||||
  SetHelpKeys();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1556,7 +1604,7 @@ void cMenuRecordings::Set(bool Refresh)
 | 
			
		||||
  if (Refresh) {
 | 
			
		||||
     cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
 | 
			
		||||
     if (ri) {
 | 
			
		||||
        cRecording *Recording = GetRecording(ri);
 | 
			
		||||
        cRecording *Recording = Recordings.GetByName(ri->FileName());
 | 
			
		||||
        if (Recording)
 | 
			
		||||
           CurrentRecording = Recording->FileName();
 | 
			
		||||
        }
 | 
			
		||||
@@ -1583,6 +1631,7 @@ void cMenuRecordings::Set(bool Refresh)
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
  free(LastItemText);
 | 
			
		||||
  if (Refresh)
 | 
			
		||||
     Display();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2155,8 +2204,13 @@ eOSState cMenuSetupCICAM::Menu(void)
 | 
			
		||||
{
 | 
			
		||||
  cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current());
 | 
			
		||||
  if (item) {
 | 
			
		||||
     if (item->CiHandler()->EnterMenu(item->Slot()))
 | 
			
		||||
     if (item->CiHandler()->EnterMenu(item->Slot())) {
 | 
			
		||||
        Skins.Message(mtWarning, tr("Opening CAM menu..."));
 | 
			
		||||
        time_t t = time(NULL);
 | 
			
		||||
        while (time(NULL) - t < MAXWAITFORCAMMENU && !item->CiHandler()->HasUserIO())
 | 
			
		||||
              item->CiHandler()->Process();
 | 
			
		||||
        return osEnd; // the CAM menu will be executed explicitly from the main loop
 | 
			
		||||
        }
 | 
			
		||||
     else
 | 
			
		||||
        Skins.Message(mtError, tr("Can't open CAM menu!"));
 | 
			
		||||
     }
 | 
			
		||||
@@ -2167,6 +2221,7 @@ eOSState cMenuSetupCICAM::Reset(void)
 | 
			
		||||
{
 | 
			
		||||
  cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current());
 | 
			
		||||
  if (item) {
 | 
			
		||||
     Skins.Message(mtWarning, tr("Resetting CAM..."));
 | 
			
		||||
     if (item->CiHandler()->Reset(item->Slot())) {
 | 
			
		||||
        Skins.Message(mtInfo, tr("CAM has been reset"));
 | 
			
		||||
        return osEnd;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								menu.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								menu.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: menu.h 1.74 2005/09/25 09:03:32 kls Exp $
 | 
			
		||||
 * $Id: menu.h 1.76 2005/10/03 10:39:08 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __MENU_H
 | 
			
		||||
@@ -120,6 +120,8 @@ class cMenuCam : public cOsdMenu {
 | 
			
		||||
private:
 | 
			
		||||
  cCiMenu *ciMenu;
 | 
			
		||||
  bool selected;
 | 
			
		||||
  int offset;
 | 
			
		||||
  void AddMultiLineItem(const char *s);
 | 
			
		||||
  eOSState Select(void);
 | 
			
		||||
public:
 | 
			
		||||
  cMenuCam(cCiMenu *CiMenu);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								osd.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								osd.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: osd.c 1.62 2005/06/19 10:43:04 kls Exp $
 | 
			
		||||
 * $Id: osd.c 1.63 2005/10/02 08:47:13 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "osd.h"
 | 
			
		||||
@@ -618,6 +618,8 @@ cBitmap *cOsd::GetBitmap(int Area)
 | 
			
		||||
 | 
			
		||||
eOsdError cOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
 | 
			
		||||
{
 | 
			
		||||
  if (NumAreas > MAXOSDAREAS)
 | 
			
		||||
     return oeTooManyAreas;
 | 
			
		||||
  eOsdError Result = oeOk;
 | 
			
		||||
  for (int i = 0; i < NumAreas; i++) {
 | 
			
		||||
      if (Areas[i].x1 > Areas[i].x2 || Areas[i].y1 > Areas[i].y2 || Areas[i].x1 < 0 || Areas[i].y1 < 0)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								osdbase.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								osdbase.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: osdbase.c 1.20 2005/06/18 10:30:51 kls Exp $
 | 
			
		||||
 * $Id: osdbase.c 1.22 2005/10/02 15:00:40 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "osdbase.h"
 | 
			
		||||
@@ -25,12 +25,12 @@ cOsdItem::cOsdItem(eOSState State)
 | 
			
		||||
  fresh = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cOsdItem::cOsdItem(const char *Text, eOSState State)
 | 
			
		||||
cOsdItem::cOsdItem(const char *Text, eOSState State, bool Selectable)
 | 
			
		||||
{
 | 
			
		||||
  text = NULL;
 | 
			
		||||
  offset = -1;
 | 
			
		||||
  state = State;
 | 
			
		||||
  selectable = true;
 | 
			
		||||
  selectable = Selectable;
 | 
			
		||||
  fresh = true;
 | 
			
		||||
  SetText(Text);
 | 
			
		||||
}
 | 
			
		||||
@@ -196,8 +196,11 @@ void cOsdMenu::Display(void)
 | 
			
		||||
  int count = Count();
 | 
			
		||||
  if (count > 0) {
 | 
			
		||||
     int ni = 0;
 | 
			
		||||
     for (cOsdItem *item = First(); item; item = Next(item))
 | 
			
		||||
     for (cOsdItem *item = First(); item; item = Next(item)) {
 | 
			
		||||
         cStatus::MsgOsdItem(item->Text(), ni++);
 | 
			
		||||
         if (current < 0 && item->Selectable())
 | 
			
		||||
            current = item->Index();
 | 
			
		||||
         }
 | 
			
		||||
     if (current < 0)
 | 
			
		||||
        current = 0; // just for safety - there HAS to be a current item!
 | 
			
		||||
     if (current - first >= displayMenuItems || current < first) {
 | 
			
		||||
@@ -210,8 +213,9 @@ void cOsdMenu::Display(void)
 | 
			
		||||
     int i = first;
 | 
			
		||||
     int n = 0;
 | 
			
		||||
     for (cOsdItem *item = Get(first); item; item = Next(item)) {
 | 
			
		||||
         displayMenu->SetItem(item->Text(), i - first, i == current, item->Selectable());
 | 
			
		||||
         if (i == current)
 | 
			
		||||
         bool CurrentSelectable = (i == current) && item->Selectable();
 | 
			
		||||
         displayMenu->SetItem(item->Text(), i - first, CurrentSelectable, item->Selectable());
 | 
			
		||||
         if (CurrentSelectable)
 | 
			
		||||
            cStatus::MsgOsdCurrentItem(item->Text());
 | 
			
		||||
         if (++n == displayMenuItems)
 | 
			
		||||
            break;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: osdbase.h 1.11 2005/06/12 10:46:34 kls Exp $
 | 
			
		||||
 * $Id: osdbase.h 1.12 2005/10/02 09:18:20 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __OSDBASE_H
 | 
			
		||||
@@ -56,7 +56,7 @@ protected:
 | 
			
		||||
  bool fresh;
 | 
			
		||||
public:
 | 
			
		||||
  cOsdItem(eOSState State = osUnknown);
 | 
			
		||||
  cOsdItem(const char *Text, eOSState State = osUnknown);
 | 
			
		||||
  cOsdItem(const char *Text, eOSState State = osUnknown, bool Selectable = true);
 | 
			
		||||
  virtual ~cOsdItem();
 | 
			
		||||
  bool Selectable(void) { return selectable; }
 | 
			
		||||
  void SetText(const char *Text, bool Copy = true);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								recording.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								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.119 2005/09/25 14:29:49 kls Exp $
 | 
			
		||||
 * $Id: recording.c 1.120 2005/10/01 10:29:02 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "recording.h"
 | 
			
		||||
@@ -743,10 +743,11 @@ void cRecording::ResetResume(void) const
 | 
			
		||||
 | 
			
		||||
cRecordings Recordings;
 | 
			
		||||
 | 
			
		||||
char *cRecordings::updateFileName = NULL;
 | 
			
		||||
 | 
			
		||||
cRecordings::cRecordings(bool Deleted)
 | 
			
		||||
:cThread("video directory scanner")
 | 
			
		||||
{
 | 
			
		||||
  updateFileName = strdup(AddDirectory(VideoDirectory, ".update"));
 | 
			
		||||
  deleted = Deleted;
 | 
			
		||||
  lastUpdate = 0;
 | 
			
		||||
  state = 0;
 | 
			
		||||
@@ -755,7 +756,6 @@ cRecordings::cRecordings(bool Deleted)
 | 
			
		||||
cRecordings::~cRecordings()
 | 
			
		||||
{
 | 
			
		||||
  Cancel(3);
 | 
			
		||||
  free(updateFileName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cRecordings::Action(void)
 | 
			
		||||
@@ -763,6 +763,13 @@ void cRecordings::Action(void)
 | 
			
		||||
  Refresh();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *cRecordings::UpdateFileName(void)
 | 
			
		||||
{
 | 
			
		||||
  if (!updateFileName)
 | 
			
		||||
     updateFileName = strdup(AddDirectory(VideoDirectory, ".update"));
 | 
			
		||||
  return updateFileName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cRecordings::Refresh(bool Foreground)
 | 
			
		||||
{
 | 
			
		||||
  lastUpdate = time(NULL); // doing this first to make sure we don't miss anything
 | 
			
		||||
@@ -825,13 +832,13 @@ bool cRecordings::StateChanged(int &State)
 | 
			
		||||
 | 
			
		||||
void cRecordings::TouchUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  TouchFile(updateFileName);
 | 
			
		||||
  TouchFile(UpdateFileName());
 | 
			
		||||
  lastUpdate = time(NULL); // make sure we don't tigger ourselves
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cRecordings::NeedsUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  return lastUpdate < LastModifiedTime(updateFileName);
 | 
			
		||||
  return lastUpdate < LastModifiedTime(UpdateFileName());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cRecordings::Update(bool Wait)
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: recording.h 1.44 2005/09/25 14:30:13 kls Exp $
 | 
			
		||||
 * $Id: recording.h 1.45 2005/10/01 10:24:41 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __RECORDING_H
 | 
			
		||||
@@ -93,10 +93,11 @@ public:
 | 
			
		||||
 | 
			
		||||
class cRecordings : public cList<cRecording>, public cThread {
 | 
			
		||||
private:
 | 
			
		||||
  char *updateFileName;
 | 
			
		||||
  static char *updateFileName;
 | 
			
		||||
  bool deleted;
 | 
			
		||||
  time_t lastUpdate;
 | 
			
		||||
  int state;
 | 
			
		||||
  const char *UpdateFileName(void);
 | 
			
		||||
  void Refresh(bool Foreground = false);
 | 
			
		||||
  void ScanVideoDir(const char *DirName, bool Foreground = false);
 | 
			
		||||
protected:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								skins.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								skins.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: skins.c 1.4 2005/01/14 13:07:19 kls Exp $
 | 
			
		||||
 * $Id: skins.c 1.5 2005/10/02 10:12:10 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "skins.h"
 | 
			
		||||
@@ -170,6 +170,7 @@ eKeys cSkins::Message(eMessageType Type, const char *s, int Seconds)
 | 
			
		||||
{
 | 
			
		||||
  switch (Type) {
 | 
			
		||||
    case mtInfo:    isyslog("info: %s", s); break;
 | 
			
		||||
    case mtWarning: isyslog("warning: %s", s); break;
 | 
			
		||||
    case mtError:   esyslog("ERROR: %s", s); break;
 | 
			
		||||
    default: ;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								tools.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tools.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: tools.h 1.78 2005/09/25 12:54:58 kls Exp $
 | 
			
		||||
 * $Id: tools.h 1.79 2005/10/01 12:43:31 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __TOOLS_H
 | 
			
		||||
@@ -45,7 +45,7 @@ extern int SysLogLevel;
 | 
			
		||||
#define DELETENULL(p) (delete (p), p = NULL)
 | 
			
		||||
 | 
			
		||||
#define CHECK(s) { if ((s) < 0) LOG_ERROR; } // used for 'ioctl()' calls
 | 
			
		||||
#define FATALERRNO (errno != EAGAIN && errno != EINTR)
 | 
			
		||||
#define FATALERRNO (errno && errno != EAGAIN && errno != EINTR)
 | 
			
		||||
 | 
			
		||||
#ifndef __STL_CONFIG_H // in case some plugin needs to use the STL
 | 
			
		||||
template<class T> inline T min(T a, T b) { return a <= b ? a : b; }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								vdr.5
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								vdr.5
									
									
									
									
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
.\" License as specified in the file COPYING that comes with the
 | 
			
		||||
.\" vdr distribution.
 | 
			
		||||
.\"
 | 
			
		||||
.\" $Id: vdr.5 1.38 2005/09/04 14:43:42 kls Exp $
 | 
			
		||||
.\" $Id: vdr.5 1.39 2005/09/26 21:38:44 kls Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.TH vdr 5 "19 Mar 2005" "1.3.23" "Video Disk Recorder Files"
 | 
			
		||||
.SH NAME
 | 
			
		||||
@@ -325,7 +325,7 @@ of these cannot be determined, \fBTITLE\fR will default to the channel name, and
 | 
			
		||||
Arbitrary text that describes the recording made by this timer.
 | 
			
		||||
Any newline characters in the summary have to be replaced by '|', and
 | 
			
		||||
the summary may contain ':' characters. If this field is not empty, its
 | 
			
		||||
contents will be written into the \fIsummary.vdr\fR file of the recording.
 | 
			
		||||
contents will be written into the \fIinfo.vdr\fR file of the recording.
 | 
			
		||||
.SS SOURCES
 | 
			
		||||
The file \fIsources.conf\fR defines the codes to be used in the \fBSource\fR field
 | 
			
		||||
of channels in \fIchannels.conf\fR and assigns descriptive texts to them.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user