[GRASS-dev] Re: testing native winGRASS
Paul Kelly
paul-grass at stjohnspoint.co.uk
Mon Mar 19 06:08:50 EDT 2007
On Mon, 19 Mar 2007, Moritz Lennert wrote:
> On 19/03/07 01:02, Paul Kelly wrote:
>> Hello Moritz,
>> A few comments below.
>>
>> On Mon, 19 Mar 2007, Moritz Lennert wrote:
>>
>>>>> lib/gis/gishelp.c:55: system(buffer) ;
>>>>> sprintf(buffer, "%%GRASS_PAGER%% %s", file) ; /*ifdef __MINGW32__*/
>>>>> sprintf(buffer, "$GRASS_PAGER %s", file) ;/*else*/
>>>>
>>>> G_spawn(getenv("GRASS_PAGER"), getenv("GRASS_PAGER"), file, NULL);
>>>
>>> done, but I get:
>>
>> Note that that now won't work on Windows (while it presumably did before!)
>> because GRASS_PAGER is a shell built-in and we haven't done changed that
>> yet...
>> Same goes for the other usages of GRASS_PAGER.
>
> Ok, so, should I revert this, or should we leave it as a motivation to
> develop a GRASS_PAGER batch script ?
Leave it as motivation I think - although that instance too also has
prompts printing to stderr and pager output going to stdout so we're just
keeping the same bug.
>>>
>>> replaced by
>>>
>>> G_spawn(getenv("GRASS_PAGER"), getenv("GRASS_PAGER"),
>>> G_convert_dirseps_to_host(Tmp_file), NULL);
>>
>> As well as not working on Windows as mentioned above, this will also be
>> broken on Unix now for some circumstances as it will print the list of
>> datum choices to stdout but print the prompts to stderr. So if you run
>> something like
>> g.proj -wi epsg=29900 > wkt.prj
>> to write a WKT description of EPSG co-ordinate system 29900 to a text file,
>> but want g.proj to interactively prompt you on the datum names, the list of
>> datum names will be written into the file rather than printed to the screen
>> with the other prompts.
>
> So, should I revert or is there a better fix ? Unless we decide that any form
> of prompting is "illegal" in modules ?
I thought we decided that terminal interaction was OK if the user
specifically requested it, in this case by specifying the -i "interactive"
flag. Looks like G_spawn_ex() with appropriate flags would solve the
problem though, so it can be a motivation to develop that on Windows.
>>>>> raster/r.average/main.c:94: if ((stat = system(command)))
>>>>> sprintf (command, "%s -anC input=%s,%s fs=space > \"%s\"", STATS,
>>>>> basemap->answer, covermap->answer, tempfile1); & #define STATS "r.stats"
>>>>
>>>> sprintf(input_arg, "input=%s,%s", basemap->answer, covermap->answer);
>>>> G_spawn_ex(STATS, STATS, "-anC", input_arg, "fs=space",
>>>> SF_REDIRECT_FILE, 1, O_WRONLY|O_CREAT, tempfile, NULL);
>>>>
>>>>> raster/r.average/main.c:154: stat = system(command);
>>>>> sprintf (command, "%s input=%s output=%s < \"%s\"", RECODE,
>>>>> basemap->answer, outputmap->answer, tempfile2); & #define RECODE
>>>>> "r.recode"
>>>>
>>>> sprintf(input_arg, "input=%s", basemap->answer);
>>>> sprintf(output_arg, "output=%s", outputmap->answer);
>>>> G_spawn_ex(RECODE, RECODE, input_arg, output_arg, SF_REDIRECT_FILE,
>>>> 0, O_RDONLY, tempfile2, NULL);
>>>
>>> Should we use G_spawn_ex even though it is not ported to Windows ?
>>
>> Well seeing the point of this audit was to fix occurences of system() that
>> were broken on Windows, and that this one (like a lot of them) as far as I
>> can see isn't actually broken, but the change would break it, I should
>> think not! ;) It could do with being tidied up obviously but needs a bit
>> more work.
>
> Glynn seems to argue that we should try to avoid any calls to a shell...
Well I see this point yes but I don't think we should do it to the extent
that it breaks things that worked before. But looking at G_spawn_ex() for
Windows is probably the best way out here.
>>>>> raster/r.coin/inter.c:32: G_system("clear");
>>>>>
>>>>> raster/r.coin/inter.c:51: G_system("clear");
>>>>
>>>> G_spawn("clear", "clear", NULL);
>>>
>>> Should be G_clear_screen(). I guess I can just go ahead with this and we
>>> can deal with the internals of G_clear_screen() later, or ?
>>
>> I think so. This actually is a case of something that currently is broken
>> on Windows and will be fixed by the change.
>
>
> At least some good ;-)
>
>
> Moritz
>
More information about the grass-dev
mailing list