[GRASS-dev] gis.m error for i.points (guarantee_xmon exec as string not list?)

Hi,

in gis.m, Image -> Rectify & georef image group -> set GCPs (both flavors)

Error: couldn't execute "d.mon start=x0": no such file or directory

couldn't execute "d.mon start=x0": no such file or directory
couldn't execute "d.mon start=x0": no such file or directory
    while executing
"exec -- $cmd $args &"
    (procedure "spawn" line 2)
    invoked from within
"spawn "d.mon start=$xmon""
    (procedure "guarantee_xmon" line 15)
    invoked from within
"guarantee_xmon"
    invoked from within
".tearoff1 invoke active"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 [list $w invoke active]"
    (procedure "tk::MenuInvoke" line 47)
    invoked from within
"tk::MenuInvoke .tearoff1 1"
    (command bound to event)

I guess "d.mon start=x0" in guarantee_xmon is being exec'd as a string
and not a list? This was working 2 weeks ago.

thanks,
Hamish

This was difficult to track down, but I got it. Glynn updated grass-run.sh
by adding "" around an expression parser and I removed 'eval' from an
expression parser (term procedure) for modules requiring an xterm in
runandoutput.tcl.

Doing one or the other of these was good. Doing both was a gotcha. Since the
term procedure is much more limited in effects (and I pretty much can tell
what is is affecting, I reverted term back to using eval. It all seems to
work OK now.

This probably fixed some other anomalous bugs in some menu items from the
GUI.

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics and Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Hamish <hamish_nospam@yahoo.com>
Date: Fri, 21 Jul 2006 00:09:56 +1200
To: grass5 <grass-dev@grass.itc.it>
Subject: [GRASS-dev] gis.m error for i.points (guarantee_xmon exec as string
not list?)

Hi,

in gis.m, Image -> Rectify & georef image group -> set GCPs (both flavors)

Error: couldn't execute "d.mon start=x0": no such file or directory

couldn't execute "d.mon start=x0": no such file or directory
couldn't execute "d.mon start=x0": no such file or directory
    while executing
"exec -- $cmd $args &"
    (procedure "spawn" line 2)
    invoked from within
"spawn "d.mon start=$xmon""
    (procedure "guarantee_xmon" line 15)
    invoked from within
"guarantee_xmon"
    invoked from within
".tearoff1 invoke active"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 [list $w invoke active]"
    (procedure "tk::MenuInvoke" line 47)
    invoked from within
"tk::MenuInvoke .tearoff1 1"
    (command bound to event)

I guess "d.mon start=x0" in guarantee_xmon is being exec'd as a string
and not a list? This was working 2 weeks ago.

thanks,
Hamish

Michael Barton wrote:

This was difficult to track down, but I got it. Glynn updated grass-run.sh
by adding "" around an expression parser and I removed 'eval' from an
expression parser (term procedure) for modules requiring an xterm in
runandoutput.tcl.

Doing one or the other of these was good. Doing both was a gotcha. Since the
term procedure is much more limited in effects (and I pretty much can tell
what is is affecting, I reverted term back to using eval. It all seems to
work OK now.

However, this:

  eval exec -- xterm -name xterm-grass -e $env(GISBASE)/etc/grass-run.sh $cmd $args &

should be:

  eval [list exec -- xterm -name xterm-grass -e $env(GISBASE)/etc/grass-run.sh $cmd] $args &

The difference is that the latter will work correctly if there are
spaces in either $env(GISBASE) or $cmd, while the former won't.

The "eval" function treats all of its arguments as lists. If any of
them aren't lists and could contain spaces, they must be turned into
lists using the "list" function.

On Windows, it should be possible for GRASS (as well as any commands
which it uses and any files which it reads) to reside in either the
"Program Files" directory or the user's "My Documents" directory, both
of which may (and often will) contain spaces.

--
Glynn Clements <glynn@gclements.plus.com>

OK. Done. Also had to do it for spawn and run procedures in the
runandoutput.tcl script.

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics and Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Glynn Clements <glynn@gclements.plus.com>
Date: Fri, 21 Jul 2006 12:55:30 +0100
To: Michael Barton <michael.barton@asu.edu>
Cc: Hamish <hamish_nospam@yahoo.com>, grass5 <grass-dev@grass.itc.it>
Subject: Re: [GRASS-dev] gis.m error for i.points (guarantee_xmon exec as
string not list?)

Michael Barton wrote:

This was difficult to track down, but I got it. Glynn updated grass-run.sh
by adding "" around an expression parser and I removed 'eval' from an
expression parser (term procedure) for modules requiring an xterm in
runandoutput.tcl.

Doing one or the other of these was good. Doing both was a gotcha. Since the
term procedure is much more limited in effects (and I pretty much can tell
what is is affecting, I reverted term back to using eval. It all seems to
work OK now.

However, this:

eval exec -- xterm -name xterm-grass -e $env(GISBASE)/etc/grass-run.sh $cmd
$args &

should be:

eval [list exec -- xterm -name xterm-grass -e $env(GISBASE)/etc/grass-run.sh
$cmd] $args &

The difference is that the latter will work correctly if there are
spaces in either $env(GISBASE) or $cmd, while the former won't.

The "eval" function treats all of its arguments as lists. If any of
them aren't lists and could contain spaces, they must be turned into
lists using the "list" function.

On Windows, it should be possible for GRASS (as well as any commands
which it uses and any files which it reads) to reside in either the
"Program Files" directory or the user's "My Documents" directory, both
of which may (and often will) contain spaces.

--
Glynn Clements <glynn@gclements.plus.com>