/** * \file auto_mask.c * * \brief Raster Library - Auto masking routines. * * (C) 2001-2008 by the GRASS Development Team * * This program is free software under the GNU General Public License * (>=v2). Read the file COPYING that comes with GRASS for details. * * \author GRASS GIS Development Team * * \date 1999-2008 */ #include #include #include #include #include "R.h" /** * \brief Checks for auto masking. * * On first call, opens the mask file if declared and available and * allocates buffer for reading mask rows. * On second call, returns 0 or 1. * * \return 0 if mask unset or unavailable * \return 1 if mask set and available and ready to use */ int Rast__check_for_auto_masking(void) { struct Cell_head cellhd; Rast__init(); /* if mask is switched off (-2) return -2 if R__.auto_mask is not set (-1) or set (>=0) recheck the MASK */ if (R__.auto_mask < -1) return R__.auto_mask; /* if(R__.mask_fd > 0) G_free (R__.mask_buf); */ /* look for the existence of the MASK file */ R__.auto_mask = (G_find_raster("MASK", G_mapset()) != 0); if (R__.auto_mask <= 0) return 0; /* check MASK projection/zone against current region */ Rast_get_cellhd("MASK", G_mapset(), &cellhd); if (cellhd.zone != G_zone() || cellhd.proj != G_projection()) { R__.auto_mask = 0; return 0; } if (R__.mask_fd >= 0) Rast_unopen(R__.mask_fd); R__.mask_fd = Rast__open_old("MASK", G_mapset()); if (R__.mask_fd < 0) { R__.auto_mask = 0; G_warning(_("Unable to open automatic MASK file")); return 0; } /* R__.mask_buf = Rast_allocate_c_buf(); */ R__.auto_mask = 1; return 1; } /** * \brief Suppresses masking. * * \return */ void Rast_suppress_masking(void) { Rast__init(); if (R__.auto_mask > 0) { Rast_close(R__.mask_fd); /* G_free (R__.mask_buf); */ R__.mask_fd = -1; } R__.auto_mask = -2; } /** * \brief Unsuppresses masking. * * \return */ void Rast_unsuppress_masking(void) { Rast__init(); if (R__.auto_mask < -1) { R__.mask_fd = -1; Rast__check_for_auto_masking(); } }