long locale_ptr(word_ptr, bit)
	register long *word_ptr;
	register long bit;
{	
	static long lt_bit;        /*  bit number of bit to the left of center  */
	static long rt_bit;        /*  bit number of bit to the right of center */
	static long locale;        /*  returned variable                        */


		/***************** calc the locale variable **************************/
	switch(bit & 7)   {
	case 0:               /************* on rt edge of byte  */
		lt_bit = bit + 1;
		if(bit == 24)     /************* on rt edge of word  */
		{	rt_bit = 7;
			locale = ((*word_ptr >> lt_bit) & 1) << 6;
			word_ptr++;
			locale |= ((*word_ptr >> rt_bit) & 1) << 2;
			word_ptr -= raster_wincrement;
			locale |= ((*word_ptr >> rt_bit) & 1) << 3;
			word_ptr--;
			locale |= ((*word_ptr >>    bit) & 3) << 4; /* bits 5 4 together */
			word_ptr += raster_wincrement + raster_wincrement;
			locale |= ((*word_ptr >> lt_bit) & 1) << 7;
			locale |= ((*word_ptr >>    bit) & 1)     ;
			word_ptr++;
			locale |= ((*word_ptr >> rt_bit) & 1) << 1;
		}
		else              /************* not on rt edge of word */
		{	rt_bit = bit + 15;
			locale = ((*word_ptr >> rt_bit) & 1) << 2;
			locale |= ((*word_ptr >> lt_bit) & 1) << 6;
			word_ptr -= raster_wincrement;
			locale |= ((*word_ptr >>    bit) & 3) << 4; /* bits 5 4 together */
			locale |= ((*word_ptr >> rt_bit) & 1) << 3;
			word_ptr += raster_wincrement + raster_wincrement;
			locale |= ((*word_ptr >> lt_bit) & 1) << 7;
			locale |= ((*word_ptr >>    bit) & 1)     ;
			locale |= ((*word_ptr >> rt_bit) & 1) << 1;
		}
		break;
	case 7:               /************* on lt edge of byte  */
		rt_bit = bit - 1;
		if(bit == 7)      /************* on lt edge of word  */
		{	lt_bit = 24;
			locale = ((*word_ptr >> rt_bit) & 1) << 2;
			word_ptr--;
			locale |= ((*word_ptr >> lt_bit) & 1) << 6;
			word_ptr -= raster_wincrement;
			locale |= ((*word_ptr >> lt_bit) & 1) << 5;
			word_ptr++;
			locale |= ((*word_ptr >> rt_bit) & 3) << 3;   /* bits 4 3 together*/
			word_ptr += raster_wincrement + raster_wincrement;
			locale |= ((*word_ptr >>    bit) & 1)     ;
			locale |= ((*word_ptr >> rt_bit) & 1) << 1;
			word_ptr--;
			locale |= ((*word_ptr >> lt_bit) & 1) << 7;
		}
		else              /************* not on lt edge of word */
		{	lt_bit = bit - 15;
			locale = ((*word_ptr >> rt_bit) & 1) << 2;
			locale |= ((*word_ptr >> lt_bit) & 1) << 6;
			word_ptr -= raster_wincrement;
			locale |= ((*word_ptr >> lt_bit) & 1) << 5;
			locale |= ((*word_ptr >> rt_bit) & 3) << 3;   /* bits 4 3 together*/
			word_ptr += raster_wincrement + raster_wincrement;
			locale |= ((*word_ptr >> lt_bit) & 1) << 7;
			locale |= ((*word_ptr >>    bit) & 1)     ;
			locale |= ((*word_ptr >> rt_bit) & 1) << 1;
		}
		break;
	default:              /************* in middle of byte   */
		lt_bit = bit + 1;
		rt_bit = bit - 1;
		locale = ((*word_ptr >> rt_bit) & 1) << 2;
		locale |= ((*word_ptr >> lt_bit) & 1) << 6;
		word_ptr -= raster_wincrement;
		locale |= ((*word_ptr >> rt_bit) & 7) << 3;   /*  bits 5 4 3 together */
		word_ptr += raster_wincrement + raster_wincrement;
		locale |= ((*word_ptr >> lt_bit) & 1) << 7;
		locale |= ((*word_ptr >>    bit) & 1)     ;
		locale |= ((*word_ptr >> rt_bit) & 1) << 1;
		break;
	}

		/***************** return **************************************/
	return(locale);
}

