mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Changed reading and writing of floating point numbers into configuration files to make it independent of the decimal point used in the current locale
This commit is contained in:
parent
c005465d90
commit
9a0236b9e2
@ -3013,3 +3013,5 @@ Stefan Hofmann <stefan.hofmann@t-online.de>
|
|||||||
Stefan Blochberger <Stefan.Blochberger@gmx.de>
|
Stefan Blochberger <Stefan.Blochberger@gmx.de>
|
||||||
for suggesting to automatically display the progress display whenever replay of a
|
for suggesting to automatically display the progress display whenever replay of a
|
||||||
recording is started
|
recording is started
|
||||||
|
for suggesting that floating point numbers presented to the user shall be displayed
|
||||||
|
in the way defined by the current locale
|
||||||
|
18
HISTORY
18
HISTORY
@ -7339,7 +7339,7 @@ Video Disk Recorder Revision History
|
|||||||
- Modified editing marks are now written to disk whenever the replay progress display
|
- Modified editing marks are now written to disk whenever the replay progress display
|
||||||
gets hidden (thanks to Christoph Haubrich).
|
gets hidden (thanks to Christoph Haubrich).
|
||||||
|
|
||||||
2012-12-05: Version 1.7.33
|
2012-12-06: Version 1.7.33
|
||||||
|
|
||||||
- In order to be able to play TS recordings from other sources, in which there is
|
- In order to be able to play TS recordings from other sources, in which there is
|
||||||
more than one PMT PID in the PAT, 'int cPatPmtParser::PatPmt(void)' has been changed
|
more than one PMT PID in the PAT, 'int cPatPmtParser::PatPmt(void)' has been changed
|
||||||
@ -7396,3 +7396,19 @@ Video Disk Recorder Revision History
|
|||||||
- The new option "Setup/Replay/Progress display time" can be used to activate
|
- The new option "Setup/Replay/Progress display time" can be used to activate
|
||||||
automatically displaying the progress display whenever replay of a recording is
|
automatically displaying the progress display whenever replay of a recording is
|
||||||
started (suggested by Stefan Blochberger).
|
started (suggested by Stefan Blochberger).
|
||||||
|
- Changed reading and writing of floating point numbers into configuration files to
|
||||||
|
make it independent of the decimal point used in the current locale. All calls to
|
||||||
|
atof() have been replaced with the new function atod(), which makes sure the string
|
||||||
|
representation of a floating point number using a '.' as decimal point will be
|
||||||
|
handled correctly, even if the locale in use expects a ',' as the decimal point.
|
||||||
|
Plugins that read floating point numbers from their own configuration files will
|
||||||
|
also need to use atod() for this, or use a method of their own (this is not necessary
|
||||||
|
if values are stored in VDR's setup.conf file, because VDR takes care of this).
|
||||||
|
The reason for these changes is that floating point numbers presented to the user
|
||||||
|
shall be displayed in the way defined by the current locale (suggested by Stefan
|
||||||
|
Blochberger).
|
||||||
|
If you use plugins that store floating point values in configuration files of their
|
||||||
|
own and have not yet been adapted to this change, you should set
|
||||||
|
export LC_NUMERIC=C
|
||||||
|
before running VDR. Otherwise your plugin's configuration data may not be read or
|
||||||
|
written correctly.
|
||||||
|
20
config.c
20
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.c 2.30 2012/12/05 11:33:14 kls Exp $
|
* $Id: config.c 2.31 2012/12/06 09:00:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -509,7 +509,7 @@ void cSetup::Store(const char *Name, int Value, const char *Plugin)
|
|||||||
|
|
||||||
void cSetup::Store(const char *Name, double &Value, const char *Plugin)
|
void cSetup::Store(const char *Name, double &Value, const char *Plugin)
|
||||||
{
|
{
|
||||||
Store(Name, cString::sprintf("%f", Value), Plugin);
|
Store(Name, dtoa(Value), Plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cSetup::Load(const char *FileName)
|
bool cSetup::Load(const char *FileName)
|
||||||
@ -630,24 +630,24 @@ bool cSetup::Parse(const char *Name, const char *Value)
|
|||||||
else if (!strcasecmp(Name, "UseDolbyDigital")) UseDolbyDigital = atoi(Value);
|
else if (!strcasecmp(Name, "UseDolbyDigital")) UseDolbyDigital = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "ChannelInfoPos")) ChannelInfoPos = atoi(Value);
|
else if (!strcasecmp(Name, "ChannelInfoPos")) ChannelInfoPos = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value);
|
else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atof(Value);
|
else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atod(Value);
|
||||||
else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atof(Value);
|
else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atod(Value);
|
||||||
else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atof(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
|
else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atod(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
|
||||||
else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atof(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
|
else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atod(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
|
||||||
else if (!strcasecmp(Name, "OSDLeft")) OSDLeft = atoi(Value);
|
else if (!strcasecmp(Name, "OSDLeft")) OSDLeft = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "OSDTop")) OSDTop = atoi(Value);
|
else if (!strcasecmp(Name, "OSDTop")) OSDTop = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "OSDWidth")) { OSDWidth = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8
|
else if (!strcasecmp(Name, "OSDWidth")) { OSDWidth = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8
|
||||||
else if (!strcasecmp(Name, "OSDHeight")) OSDHeight = atoi(Value);
|
else if (!strcasecmp(Name, "OSDHeight")) OSDHeight = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "OSDAspect")) OSDAspect = atof(Value);
|
else if (!strcasecmp(Name, "OSDAspect")) OSDAspect = atod(Value);
|
||||||
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
|
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
|
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
|
else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
|
else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
|
||||||
else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
|
else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
|
||||||
else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
|
else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
|
||||||
else if (!strcasecmp(Name, "FontOsdSizeP")) { FontOsdSizeP = atof(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
|
else if (!strcasecmp(Name, "FontOsdSizeP")) { FontOsdSizeP = atod(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
|
||||||
else if (!strcasecmp(Name, "FontSmlSizeP")) { FontSmlSizeP = atof(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
|
else if (!strcasecmp(Name, "FontSmlSizeP")) { FontSmlSizeP = atod(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
|
||||||
else if (!strcasecmp(Name, "FontFixSizeP")) { FontFixSizeP = atof(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
|
else if (!strcasecmp(Name, "FontFixSizeP")) { FontFixSizeP = atod(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
|
||||||
else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
|
else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
|
else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
|
else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 2.77 2012/12/05 11:08:47 kls Exp $
|
* $Id: recording.c 2.78 2012/12/06 09:35:13 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -455,7 +455,7 @@ bool cRecordingInfo::Read(FILE *f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'F': framesPerSecond = atof(t);
|
case 'F': framesPerSecond = atod(t);
|
||||||
break;
|
break;
|
||||||
case 'L': lifetime = atoi(t);
|
case 'L': lifetime = atoi(t);
|
||||||
break;
|
break;
|
||||||
@ -482,7 +482,7 @@ bool cRecordingInfo::Write(FILE *f, const char *Prefix) const
|
|||||||
if (channelID.Valid())
|
if (channelID.Valid())
|
||||||
fprintf(f, "%sC %s%s%s\n", Prefix, *channelID.ToString(), channelName ? " " : "", channelName ? channelName : "");
|
fprintf(f, "%sC %s%s%s\n", Prefix, *channelID.ToString(), channelName ? " " : "", channelName ? channelName : "");
|
||||||
event->Dump(f, Prefix, true);
|
event->Dump(f, Prefix, true);
|
||||||
fprintf(f, "%sF %.10g\n", Prefix, framesPerSecond);
|
fprintf(f, "%sF %s\n", Prefix, *dtoa(framesPerSecond, "%.10g"));
|
||||||
fprintf(f, "%sP %d\n", Prefix, priority);
|
fprintf(f, "%sP %d\n", Prefix, priority);
|
||||||
fprintf(f, "%sL %d\n", Prefix, lifetime);
|
fprintf(f, "%sL %d\n", Prefix, lifetime);
|
||||||
if (aux)
|
if (aux)
|
||||||
|
28
tools.c
28
tools.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.c 2.27 2012/12/03 09:31:32 kls Exp $
|
* $Id: tools.c 2.28 2012/12/06 09:40:02 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
@ -18,6 +18,7 @@ extern "C" {
|
|||||||
#include <jpeglib.h>
|
#include <jpeglib.h>
|
||||||
#undef boolean
|
#undef boolean
|
||||||
}
|
}
|
||||||
|
#include <locale.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
@ -302,6 +303,31 @@ cString AddDirectory(const char *DirName, const char *FileName)
|
|||||||
return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
|
return cString::sprintf("%s/%s", DirName && *DirName ? DirName : ".", FileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double atod(const char *s)
|
||||||
|
{
|
||||||
|
static lconv *loc = localeconv();
|
||||||
|
char buf[strlen(s) + 1];
|
||||||
|
char *p = buf;
|
||||||
|
while (*s) {
|
||||||
|
if (*s == '.')
|
||||||
|
*p = *loc->decimal_point;
|
||||||
|
else
|
||||||
|
*p = *s;
|
||||||
|
p++;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
*p = 0;
|
||||||
|
return atof(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
cString dtoa(double d, const char *Format)
|
||||||
|
{
|
||||||
|
static lconv *loc = localeconv();
|
||||||
|
char buf[16];
|
||||||
|
snprintf(buf, sizeof(buf), Format, d);
|
||||||
|
return strreplace(buf, *loc->decimal_point, '.');
|
||||||
|
}
|
||||||
|
|
||||||
cString itoa(int n)
|
cString itoa(int n)
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[16];
|
||||||
|
10
tools.h
10
tools.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.h 2.22 2012/09/30 11:02:21 kls Exp $
|
* $Id: tools.h 2.23 2012/12/06 08:59:39 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TOOLS_H
|
#ifndef __TOOLS_H
|
||||||
@ -216,6 +216,14 @@ int64_t StrToNum(const char *s);
|
|||||||
bool StrInArray(const char *a[], const char *s);
|
bool StrInArray(const char *a[], const char *s);
|
||||||
///< Returns true if the string s is equal to one of the strings pointed
|
///< Returns true if the string s is equal to one of the strings pointed
|
||||||
///< to by the (NULL terminated) array a.
|
///< to by the (NULL terminated) array a.
|
||||||
|
double atod(const char *s);
|
||||||
|
///< Converts the given string, which is a floating point number using a '.' as
|
||||||
|
///< the decimal point, to a double value, independent of the currently selected
|
||||||
|
///< locale.
|
||||||
|
cString dtoa(double d, const char *Format = "%f");
|
||||||
|
///< Converts the given double value to a string, making sure it uses a '.' as
|
||||||
|
///< the decimal point, independent of the currently selected locale.
|
||||||
|
///< If Format is given, it will be used instead of the default.
|
||||||
cString itoa(int n);
|
cString itoa(int n);
|
||||||
cString AddDirectory(const char *DirName, const char *FileName);
|
cString AddDirectory(const char *DirName, const char *FileName);
|
||||||
bool EntriesOnSameFileSystem(const char *File1, const char *File2);
|
bool EntriesOnSameFileSystem(const char *File1, const char *File2);
|
||||||
|
3
vdr.c
3
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.tvdr.de
|
* The project's page is at http://www.tvdr.de
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 2.44 2012/12/04 12:55:02 kls Exp $
|
* $Id: vdr.c 2.45 2012/12/06 10:29:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -174,7 +174,6 @@ int main(int argc, char *argv[])
|
|||||||
// Initiate locale:
|
// Initiate locale:
|
||||||
|
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
setlocale(LC_NUMERIC, "C"); // makes sure any floating point numbers written use a decimal point
|
|
||||||
|
|
||||||
// Command line options:
|
// Command line options:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user