From: Stefan J. <st...@gr...> - 2006-06-28 11:41:32
|
Am Mi, 28.06.2006, 13:02, schrieb Christopher Ede: > hello stefan! hi christopher, > thanx for your help; i did not do a complete check so far, but i modified > the diagram.h (where the crashes appeared) according to your advice and > the crashes disappeared; > one note: i assume it was just a typo: the function "setlocal(...)" did > not exsist, i used "setlocale(...)" (with "e"before opening brace); erm. sorry for the typo. so now i assume that setlocale ((LC_NUMERIC, "C"); somewhere in the application should be enough. changing all files should not be necessary. > i will change the setting in all source files ASAP; but for now everything > seems to be fine! thanx! mvlufgumolf ede > >> after some debugging digging and googling i managed to localize >> the source of the troubles; >> >> for some reason the strtod has problems when the gtk+ - toolkit is run >> (default desktop under ubuntu ) and $LANG is something like "german" >> (like >> my notebook: LANG=de_AT.UTF-8) >> you might have a look under: >> >> http://mail.gnome.org/archives/gtk-list/1997-December/msg00312.html >> >> basically the strtod believes that the decimal-point is a ',' and not a >> '.' well ans that hurts then ;o) > > Is it that the dataset (.dat file) contains those ',' numbers? Or does > the GUI fails to read '.' using strtod(). Probably you can try to > setlocal(LC_NUMERIC,"C") > before any strtod(). Would this work as well? Cheers, Stefan. |
From: Stefan J. <st...@gr...> - 2006-06-28 12:54:36
|
Am Mi, 28.06.2006, 14:41, schrieb Christopher Ede: > hello stefan! hi christopher, > thanx for your advice; i put a line > > "setlocale(LC_NUMERIC,"C");" > > at the beginning of main and threw out the rest of the calls to > setlocale(LC_NUMERIC,"C") ; it seems however this alone was not enough as > the program crashed when i put in the diagram (always my test); is this > possible? well i will do some further digging lateron; thanx again in the > meantime! mvlufgumolf ede probably it's better to put it where it belongs: in the constructor of the grap class... cheers, stefan. |
From: Stefan J. <st...@gr...> - 2006-06-29 06:41:33
|
Am Mi, 28.06.2006, 16:08, schrieb Christopher Ede: > hello stefan! Hi Christopher, > thanx! this one worked out VERY fine; only one question left: is graph the > only class using the strtod? Apparently not. > i did a ergrep and found some other > instatnces; for instance in > > ./qucs-core/src/scan_dataset.cpp > ./qucs/components/component.cpp > ./qucs/components/rs_flipflop.cpp > ... I'll look through the code... > is it possible that the problem will come back to haunt me again > >>quiver,tremble<< ?; anyhow thanx a lot again in the meantime! ...and come up with some statement or fixes. Cheers, Stefan. |
From: Stefan J. <st...@gr...> - 2006-07-03 05:48:12
|
Am Mi, 28.06.2006, 16:08, schrieb Christopher Ede: > hello stefan! hi christopher, > thanx! this one worked out VERY fine; only one question left: is graph the > only class using the strtod? i did a ergrep and found some other > instatnces; for instance in > > ./qucs-core/src/scan_dataset.cpp > ./qucs/components/component.cpp > ./qucs/components/rs_flipflop.cpp > ... > > is it possible that the problem will come back to haunt me again > >>quiver,tremble<< ?; anyhow thanx a lot again in the meantime! i just made up my mind about this topic. i would like to summarize: you have somehow set your locale to "de_DE.utf8", correct? thus the qucs program failed to read e.g "1.2e8" data, because it uses strtod() which expects "1,2e8" with this locale set? a solution was to setlocale (LC_NUMERIC, "C"); in the graph constructor. so far for the problem (and its kinda solution). first thing i don't understand is this: how does the program get this locale state? there is now statement in the program which setlocale (LC_ALL, "de_DE.utf8"); and with $ export LC_ALL=de_DE.utf8 I can't reproduce the problem. so how does this work? anyone an idea? anyway. I think the actual solution should not be placed in the graph constructor but in the main program. thus I sent Raimund a patch for CVS which setlocale (LC_NUMERIC, "C"); in the file 'qucs/main.cpp' right before QucsMain = new QucsApp(); this should suffice to take effect for any code in qucs. chrisopher: can you please verify that? thanks in advance, stefan. |
From: Raimund 'R. J. <ra...@lk...> - 2006-07-03 08:05:32
|
Stefan Jahn wrote: morning! > i just made up my mind about this topic. i would like to summarize: > > you have somehow set your locale to "de_DE.utf8", correct? thus the > qucs program failed to read e.g "1.2e8" data, because it uses strtod() > which expects "1,2e8" with this locale set? a solution was to > > setlocale (LC_NUMERIC, "C"); > > in the graph constructor. > > so far for the problem (and its kinda solution). > > first thing i don't understand is this: how does the program get this > locale state? there is now statement in the program which > > setlocale (LC_ALL, "de_DE.utf8"); > > and with > > $ export LC_ALL=de_DE.utf8 > > I can't reproduce the problem. so how does this work? anyone an idea? the locale setting is a process-wide setting just like for example the current working directory. i think you just hit one of the weak points of low-level programming that evolved with the invention of international languages after everyone got used to using ASCII. while it is very reasonable for a user to set LANG or LC_* to something sane for his/her environment, programmers must take extra precautions so that their (plain text) file formats dont get b0rked. so the "bug" is actually that you are using a parsing funtion that is influenced by a locale setting while your file format is not localized and defined to contain (in this case) numerical values as externalized by the C/POSIX locale. > anyway. I think the actual solution should not be placed in the graph > constructor but in the main program. thus I sent Raimund a patch for > CVS which > > setlocale (LC_NUMERIC, "C"); see above, it is a process-wide setting. so watch out for side-effects. are there any places where users can user numbers according to their locale? > chrisopher: can you please verify that? the patch is in the process of being compile-tested and will be in the cvs shortly... Raimund -- ___ ___ _____________ / /| / /_ / ____/ ___/\ Nothing useful for / / / / _ / / __/ / __\/ more than a decade / /_/_/ \/ /_/_/ /_/ {www.|raimi@} /______/__/\._\.____/\.____/\ .org \._____\._\/\._\.___\/\.___\/ |
From: Christopher E. <chr...@bo...> - 2006-07-03 10:26:52
|
hello all! thanx stefan for your mail! sorry for the long delay but i was = busy;=20 the problem description seemed accurate to me; i testet the fix,like = indicated in the code snippet=20 =3D=3D=3D=3D=3D=3D=3D=3D main.cpp snippet begin =3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D .... tor.load( QString("qucs_") + lang, QucsSettings.LangDir); a.installTranslator( &tor ); setlocale (LC_NUMERIC, "C"); QucsMain =3D new QucsApp(); a.setMainWidget(QucsMain); .... =3D=3D=3D=3D=3D=3D=3D=3D main.cpp snippet end =3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D but no luck, the application still crashed; of cource this could be a = ubuntu-specific problem; what might explain why you can not reproduce the = problem; or i made some stupid mistake in the setup;=20 i will stay tuned if i can do some further testing; in the meantime = thanx! mvlufgumolf ede >>> "Stefan Jahn" <st...@gr...> 07/03/06 7:47 AM >>> Am Mi, 28.06.2006, 16:08, schrieb Christopher Ede: > hello stefan! hi christopher, > thanx! this one worked out VERY fine; only one question left: is graph = the > only class using the strtod? i did a ergrep and found some other > instatnces; for instance in > > ./qucs-core/src/scan_dataset.cpp > ./qucs/components/component.cpp > ./qucs/components/rs_flipflop.cpp > ... > > is it possible that the problem will come back to haunt me again > >>quiver,tremble<< ?; anyhow thanx a lot again in the meantime! i just made up my mind about this topic. i would like to summarize: you have somehow set your locale to "de_DE.utf8", correct? thus the qucs program failed to read e.g "1.2e8" data, because it uses strtod() which expects "1,2e8" with this locale set? a solution was to setlocale (LC_NUMERIC, "C"); in the graph constructor. so far for the problem (and its kinda solution). first thing i don't understand is this: how does the program get this locale state? there is now statement in the program which setlocale (LC_ALL, "de_DE.utf8"); and with $ export LC_ALL=3Dde_DE.utf8 I can't reproduce the problem. so how does this work? anyone an idea? anyway. I think the actual solution should not be placed in the graph constructor but in the main program. thus I sent Raimund a patch for CVS which setlocale (LC_NUMERIC, "C"); in the file 'qucs/main.cpp' right before QucsMain =3D new QucsApp(); this should suffice to take effect for any code in qucs. chrisopher: can you please verify that? thanks in advance, stefan. |
From: Stefan J. <st...@gr...> - 2006-07-03 11:07:39
|
Am Mo, 3.07.2006, 12:26, schrieb Christopher Ede: > hello all! hi! > thanx stefan for your mail! sorry for the long delay but i was > busy; > the problem description seemed accurate to me; i testet the fix,like > indicated in the code snippet > > ======== main.cpp snippet begin ============ > .... > tor.load( QString("qucs_") + lang, QucsSettings.LangDir); > a.installTranslator( &tor ); > > setlocale (LC_NUMERIC, "C"); > QucsMain = new QucsApp(); > a.setMainWidget(QucsMain); > .... > ======== main.cpp snippet end ============ > > > but no luck, the application still crashed; of cource this could be a > ubuntu-specific problem; what might explain why you can not reproduce the > problem; or i made some stupid mistake in the setup; > > i will stay tuned if i can do some further testing; in the meantime hm. so which code changes the locale setting, then??? i don't understand this, yet... stefan. |
From: Stefan J. <st...@gr...> - 2006-07-03 11:05:43
|
Am Mo, 3.07.2006, 10:05, schrieb Raimund 'Raimi' Jacob: > morning! hi there again, >> i just made up my mind about this topic. i would like to summarize: >> >> you have somehow set your locale to "de_DE.utf8", correct? thus the >> qucs program failed to read e.g "1.2e8" data, because it uses strtod() >> which expects "1,2e8" with this locale set? a solution was to >> >> setlocale (LC_NUMERIC, "C"); >> >> in the graph constructor. >> >> so far for the problem (and its kinda solution). >> >> first thing i don't understand is this: how does the program get this >> locale state? there is now statement in the program which >> >> setlocale (LC_ALL, "de_DE.utf8"); >> >> and with >> >> $ export LC_ALL=de_DE.utf8 >> >> I can't reproduce the problem. so how does this work? anyone an idea? > > the locale setting is a process-wide setting just like for example the > current working directory. i think you just hit one of the weak points > of low-level programming that evolved with the invention of > international languages after everyone got used to using ASCII. > > while it is very reasonable for a user to set LANG or LC_* to something > sane for his/her environment, programmers must take extra precautions so > that their (plain text) file formats dont get b0rked. > > so the "bug" is actually that you are using a parsing funtion that is > influenced by a locale setting while your file format is not localized > and defined to contain (in this case) numerical values as externalized > by the C/POSIX locale. to be precise: the file formats should be portable, thus we must stay with the "C" locale representation of numbers. >> anyway. I think the actual solution should not be placed in the graph >> constructor but in the main program. thus I sent Raimund a patch for >> CVS which >> >> setlocale (LC_NUMERIC, "C"); > > see above, it is a process-wide setting. so watch out for side-effects. > are there any places where users can user numbers according to their > locale? as said: any inputs into qucs should be locale "C". parsing numbers should fail if the user tries to enter "1,23" instead of "1.23". bottom line: you missed the problem i described. at my computer i can set LANG=de_DE.utf in the environment. this does *not* change the behaviour of the program at all. but setlocale(LC_NUMERIC,"de_DE.utf") *does* change it! also it seems that at christopher's laptop the environment is setup using LANG=de_AT.UTF-8 and this *does* change the program behaviour. this is what i don't understand. cheers, stefan. |
From: Raimund 'R. J. <ra...@lk...> - 2006-07-03 11:14:15
|
Stefan Jahn wrote: hello again! > bottom line: you missed the problem i described. at my computer i can > set LANG=de_DE.utf in the environment. this does *not* change the > behaviour of the program at all. but setlocale(LC_NUMERIC,"de_DE.utf") > *does* change it! also it seems that at christopher's laptop the > environment is setup using LANG=de_AT.UTF-8 and this *does* change > the program behaviour. this is what i don't understand. right. the LANG environment variable overrides everything. check man 7 locale. it also contains something about localeconv(3) which returns a struct* for the definition of numerical formats. perhaps there is something to manipulate it officially. i see this resulting in manually parsing the numbers :) Raimund -- ___ ___ _____________ / /| / /_ / ____/ ___/\ Nothing useful for / / / / _ / / __/ / __\/ more than a decade / /_/_/ \/ /_/_/ /_/ {www.|raimi@} /______/__/\._\.____/\.____/\ .org \._____\._\/\._\.___\/\.___\/ |
From: Stefan J. <st...@gr...> - 2006-07-03 11:29:01
|
Am Mo, 3.07.2006, 13:14, schrieb Raimund 'Raimi' Jacob: > hello again! hi there, >> bottom line: you missed the problem i described. at my computer i can >> set LANG=de_DE.utf in the environment. this does *not* change the >> behaviour of the program at all. but setlocale(LC_NUMERIC,"de_DE.utf") >> *does* change it! also it seems that at christopher's laptop the >> environment is setup using LANG=de_AT.UTF-8 and this *does* change >> the program behaviour. this is what i don't understand. > > right. the LANG environment variable overrides everything. check man 7 > locale. it also contains something about localeconv(3) which returns a > struct* for the definition of numerical formats. perhaps there is > something to manipulate it officially. the problem is that the LANG does not override everything at my computer, but on christophers. > i see this resulting in manually parsing the numbers :) also christopher tried to setlocale(LC_NUMERIC,"C") in the graph constructor. and this worked somehow, thus it is not completely useless but i still don't know where to place it. cheers, stefan. |