[GRASS-dev] MASK_OVERRIDE
Ivan Shmakov
ivan at theory.asu.ru
Tue Feb 19 22:30:16 EST 2008
>>>>> Glynn Clements <glynn at gclements.plus.com> writes:
>> Since it's somewhat cumbersome to work with multiple `MASK's
>> currently (`r.reclass', `g.copy'?),
> Once you have a set of maps suitable for use as masks, switching
> between them just requires using g.rename or "g.copy --o".
Yes. Though, in my opinion, it's hardly as convenient as,
e. g.:
$ MASK_OVERRIDE=my_mask r.stats -c my_raster
$ MASK_OVERRIDE=my_mask bash process-it-all-for-me.sh
> The r.reclass (or r.mapcalc) step still needs to be done regardless.
The calculation of the mask needs to be done just once. The
point was that one may use an ``identity'' `r.reclass' to create
`MASK' as an alias to some existing raster.
>> I'd like to introduce `MASK_OVERRIDE' -- an environment variable
>> analogous to `WIND_OVERRIDE'.
> This would eliminate potential problems with running commands
> concurrently. E.g. if you set a mask from the command line, any
> display commands used by the GUI will also use the mask.
Yes.
> So, this is really more an issue of flexibility than
> convenience. It's probably easier for the user to just use
> g.rename/g.copy.
Not for me, at least.
[...]
>> + {
>> + const char *override = getenv ("MASK_OVERRIDE");
>> + if (override != 0) strncpy (name, override, sizeof (name));
> Use "if (override)" rather than an explicit comparison against 0.
> Although C allows comparisons between pointers and literal 0, you may
> get a warning, and we have enough of those cluttering up the build
> output already. Also, NULL/non-NULL pointers are conventionally as
> much of a logic value as zero/non-zero integers.
... The thing I cannot get used in C...
> Presumably you wouldn't write "if ((x == y) != 0)" instead of "if (x
> == y)"?
[...]
> For this feature to be of real use, you need to allow MASK_OVERRIDE
> to be used to disable reading a mask altogether. E.g. if
> MASK_OVERRIDE is defined but empty, no mask should be used rather
> than falling back to MASK. This would allow the GUI to operate
> without a mask even when MASK has been created via the command line.
The code doesn't ever fall back to `MASK' if `MASK_OVERRIDE' is
defined. If `MASK_OVERRIDE' doesn't point to a valid raster
(e. g., if it's an empty string), the mask is ignored.
However, I doubt if it's a reasonable behaviour. It seems to be
usual in the Unix world to ignore the environment variable's
value if it's an empty string. Using a non-existing raster
(say, `.') is probably a better idea.
[...]
>> if(G_is_reclass (name, mapset, rname, rmapset) > 0) {
> Personally, I think that returning the base map in the case of a
> reclass map is probably bogus. There may be some point to it when the
> actual mask will always be MASK@<current mapset>, but if you can
> configure it with a variable, the actual mask map will be more useful
> than the base map.
> I suggest changing G_mask_info() to print the name of the actual mask
> map (i.e. either $MASK_OVERRIDE or "MASK at mapset"), as well as the
> base map if it's a reclass map.
I agree, but this deserves a separate entry in the SVN log.
I'll post a revised diff later.
More information about the grass-dev
mailing list