Hi Alan,

I have looked at the locale behaviour with the small program below:

/* chklocale.c --
        Check the behaviour of the locale - printf() and friends
*/

#include <stdio.h>
#include <locale.h>

int main( int argc, char *argv[] ) {

     float x = 1.2;

     setlocale(LC_NUMERIC, "");

     printf( "Number: %f\n", x );

     if ( argc > 1 ) {
         sscanf( argv[1], "%f", &x );
         printf( "Read: %f\n", x );
     }
}

Setting LC_NUMERIC to "nl_NL.UTF-8" gives the following
results:

 > chklocale 1.3
chklocale 1.3
Number: 1,200000
Read: 1,000000

 > chklocal 1,3
chklocale 1.3
Number: 1,200000
Read: 1,300000

So indeed - as was to be expected, the comma is used on input and
output instead of a period. If PLplot's setting of the locale is visible
outside the PLplot functions, this may give very nasty errors!

Regards,

Arjen

On 2009-09-04 08:59, Arjen Markus wrote:
> Hi Alan,
> 
> much as I appreciate the use of commas instead of periods (living in
> a country where commas are used - or should be - as the decimal
> separator), I do see a number of problems:
> - If a user sets the locale in his/her program before a call to
>    plinit(), a default enforced by PLplot might cause a different
>    behaviour than expected.
> - If PLplot sets the locale, does this have consequences for
>    functions like fscanf()? I have never dug into the specifics,
>    but it might all of a sudden read "1,2" as the number 1.2.
> 
> The effect of introducing setlocale() in PLplot should, in my
> opinion, be limited entirely to calls to the PLplot library.
> Otherwise there could be all manner of trouble that is difficult
> to hunt down.
> 
> Maybe I am pessimistic, but I have seen too many bizarre consequences
> from half-hearted implementations of locale settings. (Older versions
> of MS Excel made spreadsheets written in one locale unuseable in
> another locale, because "1.2" suddenly was a literal string instead
> of a number. Even more troublesome: current versions use function
> names that are specific to the human language the operating system
> is set to. At home I need to type SOM(A1:A10) instead of SUM(A1:A10),
> as the OS is set to Dutch.)
> 
> Regards,
> 
> Arjen
> 
> On 2009-09-03 21:48, Alan W. Irwin wrote:
>> I have assigned a new subject because this topic deserves its own thread.
>>
>> On 2009-09-01 11:24-0700 Alan W. Irwin wrote:
>>
>>> [...]  Thus, I think our best solution to this whole issue is to save
>>> the user locale, use setlocale(LC_NUMERIC, "C"); to read the file, then
>>> restore the user locale in both cmap0_palette_read and plspal1.  This method
>>> absolutely guards against any locale issue (say for a different library than
>>> qt) ever again screwing up palette file reading so this is what I like.
>>>
>>> What do you think of this idea?
>> I have continued to think some more about LC_NUMERIC issues in PLplot, and
>> to give some context to further discussion of this, have a look at
>> http://en.wikipedia.org/wiki/File:DecimalSeparator.png.  My own country of
>> Canada has different decimal separators depending upon whether you are
>> located in Quebec or otherwise, and a substantial fraction of the countries
>> in the world use the comma for the separator rather than a period.
>>
>> The current status is our plots all correspond to
>>
>> setlocale(LC_NUMERIC, "C");
>>
>> That is they use the period as the decimal separator on axis labels. This is
>> probably consistent with the policy of many scientific publishers out there,
>> but there are almost guaranteed to be some publishers that accept a decimal
>> separator in plots that is whatever the author likes and even some that
>> demand the comma separator regardless of the locale of the author. In
>> addition, although we advertise PLplot as a scientific plotting library, it
>> is also used in other contexts as well where there may be a need to follow
>> the local locale with a comma decimal separator. Thus, for maximum PLplot
>> usefulness, I think we should have a global variables local_locale set to 0
>> or 1 at user option so that plinit calls either
>>
>> setlocale(LC_NUMERIC, "C");
>>
>> for local_locale = 0
>>
>> or
>>
>> setlocale(LC_NUMERIC, "");
>>
>> for local_locale = 1,
>>
>> where the first one should be the default, and the latter one gives complete
>> flexibility since it obtains LC_NUMERIC from the environment (which can be
>> set to anything by the user).
>>
>> Furthermore, this would fit in with my proposed solution to the above issue
>> if we always setlocale(LC_NUMERIC, "C"); before reading palette files
>> regardless of local_locale and restore to either of the above two choices
>> depending on local_locale. Finally, in qt.cpp we should change back to the
>> PLplot locale specified by local_locale just in case the Qt4 libraries
>> change it.
>>
>> I hope to implement all of this later today or early tomorrow so please let
>> me know quickly your comments on my proposal to deal with LC_NUMERIC issues
>> in PLplot.
>>
>> Alan
>> __________________________
>>
>> Alan W. Irwin
>>
>> Astronomical research affiliation with Department of Physics and Astronomy,
>> University of Victoria (astrowww.phys.uvic.ca).
>>
>> Programming affiliations with the FreeEOS equation-of-state implementation
>> for stellar interiors (freeeos.sf.net); PLplot scientific plotting software
>> package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of
>> Linux Links project (loll.sf.net); and the Linux Brochure Project
>> (lbproject.sf.net).
>> __________________________
>>
>> Linux-powered Science
>> __________________________
>>
>> ------------------------------------------------------------------------------
>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
>> trial. Simplify your report design, integration and deployment - and focus 
>> on 
>> what you do best, core application coding. Discover what's new with 
>> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>> _______________________________________________
>> Plplot-devel mailing list
>> Plplot-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/plplot-devel
>>
> 
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
> trial. Simplify your report design, integration and deployment - and focus on 
> what you do best, core application coding. Discover what's new with 
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> Plplot-devel mailing list
> Plplot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/plplot-devel
> 

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to