From 80c04529681b844de88cfa47ec743f847b37d7a2 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 23 Jul 2006 18:00:00 +0200 Subject: =?UTF-8?q?Version=201.4.1-2=20-=20Fixed=20the=20Makefile=20of=20t?= =?UTF-8?q?he=20'servicedemo'=20plugin,=20so=20that=20it=20defines=20the?= =?UTF-8?q?=20=20=20PLUGIN=20macro,=20which=20allows=20the=20Make.config?= =?UTF-8?q?=20file=20to=20react=20properly=20when=20=20=20compiling=20the?= =?UTF-8?q?=20plugin=20(reported=20by=20Bernd=20Melcher).=20=20=20Note=20t?= =?UTF-8?q?o=20all=20plugin=20developers:=20a=20plugin's=20Makefile=20*mus?= =?UTF-8?q?t*=20define=20the=20PLUGIN=20=20=20macro,=20even=20if=20it=20do?= =?UTF-8?q?esn't=20use=20it=20itself!=20-=20Added=20a=20comment=20regardin?= =?UTF-8?q?g=20the=20PLUGIN=20macro=20to=20the=20'newplugin'=20script.=20-?= =?UTF-8?q?=20Added=20'--vfat'=20to=20the=20vdr.1=20man=20page=20(reported?= =?UTF-8?q?=20by=20Udo=20Richter).=20-=20Removed=20a=20double=20fdopen()?= =?UTF-8?q?=20in=20cPipe::Open()=20(reported=20by=20Stefan=20Huelswitt).?= =?UTF-8?q?=20-=20Fixed=20handling=20the=20running=20status=20of=20EPG=20e?= =?UTF-8?q?vents=20before=20the=20currently=20running=20one,=20=20=20in=20?= =?UTF-8?q?case=20they=20are=20added=20after=20the=20current=20event.=20-?= =?UTF-8?q?=20cEIT::cEIT()=20now=20calls=20pSchedule->SetPresentSeen()=20e?= =?UTF-8?q?ven=20if=20OnlyRunningStatus=20is=20=20=20true.=20-=20Newlines?= =?UTF-8?q?=20in=20title=20and=20short=20text=20of=20an=20EPG=20event=20ar?= =?UTF-8?q?e=20now=20changed=20into=20blanks=20only=20=20=20after=20all=20?= =?UTF-8?q?other=20fixes,=20because=20a=20short=20text=20might=20become=20?= =?UTF-8?q?a=20description.=20-=20Fixed=20handling=20network=20masks=20in?= =?UTF-8?q?=20the=20svdrphosts.conf=20file=20(thanks=20to=20Patrick=20=20?= =?UTF-8?q?=20Maier).=20-=20Fixed=20handling=20relative=20volume=20setting?= =?UTF-8?q?s=20in=20the=20call=20to=20cStatus::MsgSetVolume()=20=20=20(rep?= =?UTF-8?q?orted=20by=20Norbert=20Wentz).=20-=20Added=20a=20missing=20init?= =?UTF-8?q?ialization=20of=20'mutex'=20in=20cCiMenu::cCiMenu()=20and=20rem?= =?UTF-8?q?oved=20=20=20some=20superfluous=20semicolons=20in=20ci.c=20(tha?= =?UTF-8?q?nks=20to=20Marco=20Schl=C3=BC=C3=9Fler).=20-=20Fixed=20handling?= =?UTF-8?q?=20client=20side=20termination=20of=20SVDRP=20connections=20(th?= =?UTF-8?q?anks=20to=20Frank=20=20=20Schmirler).=20-=20cDevice::GetDevice(?= =?UTF-8?q?)=20now=20prefers=20any=20device=20that's=20already=20receiving?= =?UTF-8?q?=20and=20doesn't=20=20=20require=20detatching=20receivers=20(su?= =?UTF-8?q?ggested=20by=20Anssi=20Hannula).=20-=20Fixed=20handling=20numer?= =?UTF-8?q?ic=20keys=20in=20the=20channel=20display=20after=20switching=20?= =?UTF-8?q?channel=20groups=20=20=20(thanks=20to=20Andreas=20Regel).=20-?= =?UTF-8?q?=20Menu=20items=20derived=20from=20cMenuEditIntItem=20now=20loo?= =?UTF-8?q?p=20though=20their=20values=20if=20they=20=20=20have=20a=20dedi?= =?UTF-8?q?cated=20minimum=20or=20maximum=20limit=20(suggested=20by=20Andy?= =?UTF-8?q?=20Grobb).=20Looping=20is=20=20=20only=20done=20for=20normal=20?= =?UTF-8?q?keypresses,=20not=20for=20repeated=20ones.=20This=20allows=20th?= =?UTF-8?q?e=20user=20to=20=20=20scroll=20the=20value=20all=20the=20way=20?= =?UTF-8?q?to=20the=20limit=20by=20keeping=20the=20key=20pressed.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTORS | 23 ++++++++++++++++++++++ HISTORY | 33 +++++++++++++++++++++++++++++++ PLUGINS/src/servicedemo/Makefile | 3 ++- ci.c | 7 ++++--- config.c | 8 +++++--- config.h | 4 ++-- device.c | 7 ++++--- eit.c | 6 +++--- epg.c | 42 +++++++++++++++++++++++++--------------- menu.c | 5 +++-- menuitems.c | 7 ++++++- newplugin | 4 +++- svdrp.c | 10 +++++++--- thread.c | 3 +-- vdr.1 | 6 +++++- 15 files changed, 127 insertions(+), 41 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 5e522b9..4609300 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -219,6 +219,7 @@ Stefan Huelswitt again for reporting a problem with channel up/down switching on single card systems for fixing the PremiereContentTransmissionDescriptor in 'libsi' + for reporting a double fdopen() in cPipe::Open() Ulrich Röder for pointing out that there are channels that have a symbol rate higher than 27500 @@ -340,6 +341,8 @@ Andy Grobb for reporting a bug in handling min/max borders when entering integer values for reporting a problem with replaying in fast forward mode if the video directory is mounted via a Samba share + for suggesting to make menu items that are derived from cMenuEditIntItem loop + though their values if they have a dedicated minimum or maximum limit Thomas Heiligenmann for implementing the SVDRP commands LSTR and DELR @@ -1221,6 +1224,8 @@ Andreas Regel for reporting a problem in handling Transfer Mode for radio channels for reporting a problem with messages when a cOsdObject uses the raw OSD for implementing palette replace mode in the OSD bitmaps + for fixing handling numeric keys in the channel display after switching channel + groups Thomas Bergwinkl for fixing the validity check for channel IDs, because some providers use TIDs @@ -1364,6 +1369,8 @@ Marco Schl and PremiereContentTransmissionDescriptor to 'libsi' for pointing out that plugins might be compiled with different DVB driver header files than VDR itself + for adding a missing initialization of 'mutex' in cCiMenu::cCiMenu() and removing + some superfluous semicolons in ci.c Jürgen Schmitz for reporting a bug in displaying the current channel when switching via the SVDRP @@ -1442,6 +1449,7 @@ Udo Richter for setting a timer's cached start time to 0 after a call to Skip() for adding "-fPIC" to the compiler options in Make.config.template when compiling plugins + for reporting a missing '--vfat' in the vdr.1 man page Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date @@ -1932,6 +1940,21 @@ Prakash Punnoor Anssi Hannula for a patch that was used to implement processing the "frequency list descriptor" + for suggesting that cDevice::GetDevice() should prefer any device that's already + receiving and doesn't require detatching receivers Antti Hartikainen for updating 'S13E' in 'sources.conf' + +Bernd Melcher + for reporting a problem with the 'servicedemo' plugin having no PLUGIN macro + +Patrick Maier + for fixing handling network masks in the svdrphosts.conf file + +Norbert Wentz + for reporting a bug in handling relative volume settings in the call to + cStatus::MsgSetVolume() + +Frank Schmirler + for fixing handling client side termination of SVDRP connections diff --git a/HISTORY b/HISTORY index 796f443..d3a2490 100644 --- a/HISTORY +++ b/HISTORY @@ -4801,3 +4801,36 @@ Video Disk Recorder Revision History Patrick Cernko). - Now making sure a VPS timer has a schedule in case the epg.data file didn't contain one when VDR was started. + +2006-07-23: Version 1.4.1-2 + +- Fixed the Makefile of the 'servicedemo' plugin, so that it defines the + PLUGIN macro, which allows the Make.config file to react properly when + compiling the plugin (reported by Bernd Melcher). + Note to all plugin developers: a plugin's Makefile *must* define the PLUGIN + macro, even if it doesn't use it itself! +- Added a comment regarding the PLUGIN macro to the 'newplugin' script. +- Added '--vfat' to the vdr.1 man page (reported by Udo Richter). +- Removed a double fdopen() in cPipe::Open() (reported by Stefan Huelswitt). +- Fixed handling the running status of EPG events before the currently running one, + in case they are added after the current event. +- cEIT::cEIT() now calls pSchedule->SetPresentSeen() even if OnlyRunningStatus is + true. +- Newlines in title and short text of an EPG event are now changed into blanks only + after all other fixes, because a short text might become a description. +- Fixed handling network masks in the svdrphosts.conf file (thanks to Patrick + Maier). +- Fixed handling relative volume settings in the call to cStatus::MsgSetVolume() + (reported by Norbert Wentz). +- Added a missing initialization of 'mutex' in cCiMenu::cCiMenu() and removed + some superfluous semicolons in ci.c (thanks to Marco Schlüßler). +- Fixed handling client side termination of SVDRP connections (thanks to Frank + Schmirler). +- cDevice::GetDevice() now prefers any device that's already receiving and doesn't + require detatching receivers (suggested by Anssi Hannula). +- Fixed handling numeric keys in the channel display after switching channel groups + (thanks to Andreas Regel). +- Menu items derived from cMenuEditIntItem now loop though their values if they + have a dedicated minimum or maximum limit (suggested by Andy Grobb). Looping is + only done for normal keypresses, not for repeated ones. This allows the user to + scroll the value all the way to the limit by keeping the key pressed. diff --git a/PLUGINS/src/servicedemo/Makefile b/PLUGINS/src/servicedemo/Makefile index 08e83c3..e44af0b 100644 --- a/PLUGINS/src/servicedemo/Makefile +++ b/PLUGINS/src/servicedemo/Makefile @@ -1,12 +1,13 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 1.6 2006/04/24 17:21:01 kls Exp $ +# $Id: Makefile 1.7 2006/06/24 09:09:54 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. # By default the main source file also carries this name. # +PLUGIN = servicedemo # dummy name for Make.config PLUGIN1 = svccli PLUGIN2 = svcsvr diff --git a/ci.c b/ci.c index 863be53..e6bfa72 100644 --- a/ci.c +++ b/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.42 2006/01/07 15:07:16 kls Exp $ + * $Id: ci.c 1.43 2006/07/22 13:40:30 kls Exp $ */ #include "ci.h" @@ -1387,6 +1387,7 @@ bool cCiMMI::SendCloseMMI(void) cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable) { mmi = MMI; + mutex = NULL; selectable = Selectable; titleText = subTitleText = bottomText = NULL; numEntries = 0; @@ -1445,8 +1446,8 @@ cCiEnquiry::cCiEnquiry(cCiMMI *MMI) { mmi = MMI; text = NULL; - blind = false;; - expectedLength = 0;; + blind = false; + expectedLength = 0; } cCiEnquiry::~cCiEnquiry() diff --git a/config.c b/config.c index 8d49fc6..f394266 100644 --- a/config.c +++ b/config.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 1.145 2006/04/17 12:43:57 kls Exp $ + * $Id: config.c 1.146 2006/07/22 11:57:51 kls Exp $ */ #include "config.h" @@ -106,8 +106,10 @@ bool cSVDRPhost::Parse(const char *s) *(char *)p = 0; // yes, we know it's 'const' - will be restored! if (m == 0) mask = 0; - else - mask >>= (32 - m); + else { + mask <<= (32 - m); + mask = htonl(mask); + } } int result = inet_aton(s, &addr); if (p) diff --git a/config.h b/config.h index 212c88d..92a1433 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.261 2006/06/15 09:23:21 kls Exp $ + * $Id: config.h 1.262 2006/06/24 09:08:46 kls Exp $ */ #ifndef __CONFIG_H @@ -21,7 +21,7 @@ // VDR's own version number: -#define VDRVERSION "1.4.1-1" +#define VDRVERSION "1.4.1-2" #define VDRVERSNUM 10401 // Version * 10000 + Major * 100 + Minor // The plugin API's version number: diff --git a/device.c b/device.c index 25c09f6..8f451d7 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 1.131 2006/06/15 09:59:40 kls Exp $ + * $Id: device.c 1.133 2006/07/22 14:06:11 kls Exp $ */ #include "device.h" @@ -292,7 +292,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool *NeedsDe // to their individual severity, where the one listed first will make the most // difference, because it results in the most significant bit of the result. uint imp = 0; - imp <<= 1; imp |= !device[i]->Receiving() || ndr; // use receiving devices if we don't need to detach existing receivers + imp <<= 1; imp |= !device[i]->Receiving(true) || ndr; // use receiving devices if we don't need to detach existing receivers imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving imp <<= 1; imp |= device[i] == ActualDevice(); // avoid the actual device (in case of Transfer Mode) imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device @@ -776,9 +776,10 @@ void cDevice::SetAudioChannel(int AudioChannel) void cDevice::SetVolume(int Volume, bool Absolute) { + int OldVolume = volume; volume = min(max(Absolute ? Volume : volume + Volume, 0), MAXVOLUME); SetVolumeDevice(volume); - cStatus::MsgSetVolume(volume, Absolute); + cStatus::MsgSetVolume(Absolute ? volume : volume - OldVolume, Absolute); if (volume > 0) { mute = false; Audios.MuteAudio(mute); diff --git a/eit.c b/eit.c index d27849c..d9714ef 100644 --- a/eit.c +++ b/eit.c @@ -8,7 +8,7 @@ * Robert Schneider and Rolf Hakenes . * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg . * - * $Id: eit.c 1.118 2006/05/25 14:35:19 kls Exp $ + * $Id: eit.c 1.119 2006/07/22 09:21:59 kls Exp $ */ #include "eit.h" @@ -253,10 +253,10 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo if (Empty && Tid == 0x4E && getSectionNumber() == 0) // ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running pSchedule->ClrRunningStatus(channel); - if (OnlyRunningStatus) - return; if (Tid == 0x4E) pSchedule->SetPresentSeen(); + if (OnlyRunningStatus) + return; if (Modified) { pSchedule->Sort(); if (!HasExternalData) diff --git a/epg.c b/epg.c index 566f20e..dbd5350 100644 --- a/epg.c +++ b/epg.c @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.c 1.75 2006/05/25 14:55:36 kls Exp $ + * $Id: epg.c 1.77 2006/07/22 10:13:34 kls Exp $ */ #include "epg.h" @@ -435,18 +435,6 @@ void ReportEpgBugFixStats(bool Reset) void cEvent::FixEpgBugs(void) { - // VDR can't usefully handle newline characters in the title and shortText of EPG - // data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel): - strreplace(title, '\n', ' '); - strreplace(shortText, '\n', ' '); - // Same for control characters: - strreplace(title, '\x86', ' '); - strreplace(title, '\x87', ' '); - strreplace(shortText, '\x86', ' '); - strreplace(shortText, '\x87', ' '); - strreplace(description, '\x86', ' '); - strreplace(description, '\x87', ' '); - if (isempty(title)) { // we don't want any "(null)" titles title = strcpyrealloc(title, tr("No title")); @@ -454,7 +442,7 @@ void cEvent::FixEpgBugs(void) } if (Setup.EPGBugfixLevel == 0) - return; + goto Final; // 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: @@ -528,7 +516,7 @@ void cEvent::FixEpgBugs(void) } if (Setup.EPGBugfixLevel <= 1) - return; + goto Final; // 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 @@ -574,7 +562,7 @@ void cEvent::FixEpgBugs(void) strreplace(description, '`', '\''); if (Setup.EPGBugfixLevel <= 2) - return; + goto Final; // The stream components have a "description" field which some channels // apparently have no idea of how to set correctly: @@ -638,6 +626,20 @@ void cEvent::FixEpgBugs(void) } } } + +Final: + + // VDR can't usefully handle newline characters in the title and shortText of EPG + // data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel): + strreplace(title, '\n', ' '); + strreplace(shortText, '\n', ' '); + // Same for control characters: + strreplace(title, '\x86', ' '); + strreplace(title, '\x87', ' '); + strreplace(shortText, '\x86', ' '); + strreplace(shortText, '\x87', ' '); + strreplace(description, '\x86', ' '); + strreplace(description, '\x87', ' '); } // --- cSchedule ------------------------------------------------------------- @@ -770,6 +772,14 @@ void cSchedule::ResetVersions(void) void cSchedule::Sort(void) { events.Sort(); + // Make sure there are no RunningStatusUndefined before the currently running event: + if (hasRunning) { + for (cEvent *p = events.First(); p; p = events.Next(p)) { + if (p->RunningStatus() > SI::RunningStatusNotRunning) + break; + p->SetRunningStatus(SI::RunningStatusNotRunning); + } + } } void cSchedule::DropOutdated(time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version) diff --git a/menu.c b/menu.c index 788ce0f..7e4f362 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.441 2006/06/03 13:32:42 kls Exp $ + * $Id: menu.c 1.443 2006/07/23 09:23:11 kls Exp $ */ #include "menu.h" @@ -39,7 +39,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 MINFREEDISK 300 // minimum free disk space required to start recording +#define MINFREEDISK 300 // minimum free disk space (in MB) required to start recording #define NODISKSPACEDELTA 300 // seconds between "Not enough disk space to start recording!" messages #define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1) @@ -3146,6 +3146,7 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) return osEnd; } case k1 ... k9: + group = -1; if (number >= 0) { if (number > Channels.MaxNumber()) number = Key - k0; diff --git a/menuitems.c b/menuitems.c index 517664c..cbfcf05 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.45 2006/06/03 13:20:01 kls Exp $ + * $Id: menuitems.c 1.46 2006/07/23 09:42:17 kls Exp $ */ #include "menuitems.h" @@ -75,6 +75,7 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key) if (state == osUnknown) { int newValue = *value; + bool IsRepeat = Key & k_Repeat; Key = NORMALKEY(Key); switch (Key) { case kNone: break; @@ -88,10 +89,14 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key) case kLeft: // TODO might want to increase the delta if repeated quickly? newValue = *value - 1; fresh = true; + if (!IsRepeat && newValue < min && max != INT_MAX) + newValue = max; break; case kRight: newValue = *value + 1; fresh = true; + if (!IsRepeat && newValue > max && min != INT_MIN) + newValue = min; break; default: if (*value < min) { *value = min; Set(); } diff --git a/newplugin b/newplugin index 98b8645..dd49140 100755 --- a/newplugin +++ b/newplugin @@ -12,7 +12,7 @@ # See the main source file 'vdr.c' for copyright information and # how to reach the author. # -# $Id: newplugin 1.28 2006/04/24 17:18:41 kls Exp $ +# $Id: newplugin 1.29 2006/06/24 09:15:17 kls Exp $ $PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin \n"; @@ -61,6 +61,8 @@ $MAKEFILE = qq # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. # By default the main source file also carries this name. +# IPORTANT: the presence of this macro is important for the Make.config +# file. So it must be defined, even if it is not used here! # PLUGIN = $PLUGIN_NAME diff --git a/svdrp.c b/svdrp.c index 34f283f..6972681 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 1.97 2006/06/11 09:04:36 kls Exp $ + * $Id: svdrp.c 1.98 2006/07/22 13:59:43 kls Exp $ */ #include "svdrp.h" @@ -1594,8 +1594,12 @@ bool cSVDRP::Process(void) isyslog("lost connection to SVDRP client"); Close(); } - else - break; + else { + isyslog("SVDRP client closed connection"); + //TODO give cSVDRP::Close() an extra parameter to avoid this code duplication + file.Close(); + DELETENULL(PUTEhandler); + } } if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRPTimeout) { isyslog("timeout on SVDRP connection"); diff --git a/thread.c b/thread.c index c65f9e2..1749fc1 100644 --- a/thread.c +++ b/thread.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 1.55 2006/06/02 13:51:39 kls Exp $ + * $Id: thread.c 1.56 2006/06/24 10:10:58 kls Exp $ */ #include "thread.h" @@ -423,7 +423,6 @@ bool cPipe::Open(const char *Command, const char *Mode) iopipe = 1; } close(fd[iopipe]); - f = fdopen(fd[1 - iopipe], mode); if ((f = fdopen(fd[1 - iopipe], mode)) == NULL) { LOG_ERROR; close(fd[1 - iopipe]); diff --git a/vdr.1 b/vdr.1 index 2325086..86f5bdf 100644 --- a/vdr.1 +++ b/vdr.1 @@ -8,7 +8,7 @@ .\" License as specified in the file COPYING that comes with the .\" vdr distribution. .\" -.\" $Id: vdr.1 1.25 2006/04/30 08:55:12 kls Exp $ +.\" $Id: vdr.1 1.26 2006/06/24 10:07:16 kls Exp $ .\" .TH vdr 1 "30 Apr 2006" "1.4.0" "Video Disk Recorder" .SH NAME @@ -137,6 +137,10 @@ be set from the transponder data, but for security reasons vdr can switch to a lesser privileged user id during normal operation. .TP +.BI \-\-vfat +Encode special characters in recording names to avoid problems +with VFAT file systems. +.TP .BI \-v\ dir ,\ \-\-video= dir Use \fIdir\fR as video directory. The default is \fI/video\fR. -- cgit v1.2.3