#ifndef lint
static char SccsId[] = "%W%  %G%";
#endif

/* Module:	mask.c (Image Mask)
 * Subroutine:	btn_MakeLabelMask()		returns: char *
 * Copyright:	1989 Smithsonian Astrophysical Observatory
 *		You may do anything you like with this file except remove
 *		this copyright.  The Smithsonian Astrophysical Observatory
 *		makes no representations about the suitability of this
 *		software for any purpose.  It is provided "as is" without
 *		express or implied warranty.
 * Modified:	{0} Michael VanHilst	initial version		   9 May 1989
 *		{n} <who> -- <does what> -- <when>
 */

/*
 * Subroutine:	btn_MakeLabelMask
 * Purpose:	make a mask that surrounds the given image
 * Note:	mask extends 1 pixel in every direction beyond given image
 */
char *btn_MakeLabelMask ( icon, width, height )
     char *icon;
     int width, height;
{
  char *mask;
  char *icon_left, *icon_pix, *icon_right;
  char *mask_above, *mask_pix, *mask_below;
  char *above, *pix, *below;
  char *icon_next;
  int i, j;
  char *btn_Alloc();

  /* allocate mask space */
  mask = btn_Alloc(width*height, 1, "mask map");
  height--;
  icon_next = icon;
  mask_pix = mask;
  mask_below = mask;
  for( i=0; i<=height; i++ ) {
    /* set up mask pointers for this line */
    mask_above = mask_pix;
    mask_pix = mask_below;
    if( i < height )
      mask_below += width;
    above = mask_above;
    pix = mask_pix;
    below = mask_below;
    /* set up icon pointers for this (next) line */
    icon_pix = icon_next;
    icon_left = icon_pix;
    icon_right = icon_pix + 1;
    icon_next = icon_pix + width;
    for( j=0; j<width; j++ ) {
      if( (*icon_left != 0) || (*icon_pix != 0) || (*icon_right != 0) ) {
	*above = 1;
	*pix = 1;
	*below = 1;
      }
      icon_left = icon_pix;
      icon_pix = icon_right;
      if( ++icon_right >= icon_next )
	icon_right--;
      above++;
      pix++;
      below++;
    }
  }
  return( mask );
}


syntax highlighted by Code2HTML, v. 0.9.1