[GRASS5] The status of 5.0

rgrmill at rt66.com rgrmill at rt66.com
Mon Mar 25 10:59:34 EST 2002


Glynn wrote:

> One of the main obstacles to switching location/mapset on the fly is
> the number of scripts[1] which reference $GISDBASE, $LOCATION_NAME,
> $MAPSET and/or $LOCATION directly.
> 
> Currently, these are set in Init.sh using "eval `g.gisenv`". There
> isn't any way to subsequently change them using an external command;
> using "eval" is inconvenient, and shell aliases/functions are messy
> (non-portable, aren't inherited by scripts).

That is solved.  It was difficult, but perhaps not for the reasons you 
are envisioning.

g.gisenv calls gisinit() to initialize those values.  In fact, those 
values are initialized again by every modules I know of (5.0pre2) by 
calling gisinit().  All accesses to the gis environment variables, 
including initialization in gisinit() are carried out through the 
functions in env.c

The manager intersepts calls to the functions that read and write the 
gis environment variables.  A more complete implementation would 
probably replace all of the functions in env.c and it would be quite a 
bit more efficient.  This is one case where the manager has a lot to 
offer.

> 
> Shell scripts ought to be calling e.g. "eval `g.gisenv`" themselves 
to
> obtain the current settings from $GISRC.

True.

> [1] AFAICT, I've fixed all of the C programs which accessed these
> variables via getenv().

I find this a little confusing, as getenv() is used to get the values 
from the shell environment.  MAPSET, LOCATION_NAME and so on are in the 
gis environment, not in the shell environment.  getenv() shouldn't 
work.

Unless that has changed since pre2.  If it has then I'll probably just 
cuss a lot.

The main difficulties have been with getting the gis environment 
correctly initialized in the manager itself and with synchronizing the 
value of the MONITOR environment variable between the manager and the 
gis environment.


Roger Miller





More information about the grass-dev mailing list