bool gvVisionImage_botcap_front::_insp_loc( Hobject image_src, Hobject *outRegion_loc)
{
	// Local iconic variables
	Hobject  ImageMean, region_thre, region_fillup;
	Hobject  region_erosion, region_dilation, region_conn, region_sel;

	// Local control variables
	Hlong  numRegions;

	gen_empty_obj(&(*outRegion_loc));

	mean_image(image_src, &ImageMean, 31, 31);
	dyn_threshold(image_src, ImageMean, &region_thre, 5, "light");
	fill_up(region_thre, &region_fillup);
	erosion_circle(region_fillup, &region_erosion, 5.5);
	dilation_circle(region_erosion, &region_dilation, 5.5);
	connection(region_dilation, &region_conn);
	select_shape(region_conn, &region_sel, "area", "and", m_minarea, 999999);
	count_obj(region_sel, &numRegions);

	if ( 1 == numRegions )
	{
		disp_obj(ho_Image,hl_WindowID);
		disp_obj(region_sel,hl_WindowID);
		copy_obj(region_sel, &(*outRegion_loc), 1, 1);
		return true;
	}

	return false;
}
示例#2
0
文件: gc.c 项目: komiyamb/kom_lisp
/**
   ガーベジコレクションを行う。
   コンパクションしながら、
   envとprotectから辿れるオブジェクトを回収する。
 */
void gc(void)
{
  int i;

  init_gc_tag();//現在の領域のgcタグを初期化
  init_symbol_table();
  
  flip_offset();//次からのalloc_objでは新しい領域を使用
  
  env = copy_obj(env);
  
  for(i = 0; i < protect.index; i++){
    protect.stack[i] = copy_obj(protect.stack[i]);
  }
  
  return;
}
示例#3
0
文件: copy_gc.c 项目: dec9ue/copy_gc
/* *src is a tag tainted pointer */
void evacuate_small(void** src, struct s_gc* s_gc){
	void** obj_ptr = (void**) PTR_BITS(*src);
	if(IS_FORWARDED(obj_ptr)){
		debug("%s : pointer forwarded : %08x\n",__FUNCTION__,obj_ptr);
		void** new_ptr = FORWARDED_PTR(obj_ptr);
		/* UPDATING SOURCE (with tag) */
		*(src)         = (void*)((unsigned int) new_ptr | SAVED_BITS(*src));
	} else{
		void** new_ptr;
		size_t size_in_word = GET_SIZE(obj_ptr);
		check_to_space(size_in_word,s_gc);
		/* remember new_pointer points to preceding info area. */
		new_ptr = copy_obj(obj_ptr,s_gc->to_space,size_in_word);
		/* FORWARDING POINTER (with forward tag) */
		*((obj_ptr)-1) = (void*)(FORWARD_MASK | (unsigned int)(new_ptr));
		/* UPDATING SOURCE (with tag) */
		*(src)         = (void*)((unsigned int) (new_ptr) | SAVED_BITS(*src));
		debug("%s : evacuated. the old object is now as below:\n",__FUNCTION__);
		dump_small(obj_ptr,size_in_word);
		s_gc->small_evaced ++;
	}
}
示例#4
0
文件: BKGDBELL.C 项目: Ced2911/umk3
void bell_fall_scan(void)
{
	long a0,a1,a2,a3,a4,a5,a6,a7;
	OBJECT *oa8,*oa0;
	OBJECT *obj=current_proc->pa8;

	if (distance_off_ground(current_proc,current_proc->pa8)<=224)
		return;						// wait to get off screen

	stop_me(current_proc->pa8);
	obj->oxpos.u.intpos=0xb0;		// SCX(600);
	process_sleep(0x50);			// let scroller catch up!

	set_noedge(current_proc->pdata.p_otherguy);		// dont allow otherguy to update position with neew world edges

	obj->oyvel.pos=SCY(0xc0000);
	obj->ograv.pos=0;
	set_x_vel(current_proc->pa8,0);

	/* bfall3 */
	do
	{
		process_sleep(1);
	}
	while(distance_off_ground(current_proc,current_proc->pa8)>SCY(0x10));

	dallprc(PID_BACKG);
	dallprc(PID_SCROLL);
	stop_scrolling();

	a0=worldtlx.pos;
	a1=worldtlx1.pos;
	a2=worldtlx2.pos;
	a3=worldtlx3.pos;
	a4=worldtlx4.pos;
	a5=worldtlx5.pos;
	a6=worldtlx6.pos;
	a7=worldtlx7.pos;

	/* init */
	init_background_module(bell2_module);
	worldtly.u.intpos-=SCY(0x50);
	multi_plane();
	worldtly.u.intpos+=SCY(0x50);

	worldtlx.pos=a0;
	worldtlx1.pos=a1;
	worldtlx2.pos=a2;
	worldtlx3.pos=a3;
	worldtlx4.pos=a4;
	worldtlx5.pos=a5;
	worldtlx6.pos=a6;
	worldtlx7.pos=a7;

	(OBJECT *)a0=baklst8;
	a7=0;
	/* adj8 */
	do
	{
		a1=((OBJECT *)a0)->oypos.u.intpos=((OBJECT *)a0)->oypos.u.intpos+ONE_FLOOR;
		a1+=((OBJECT *)a0)->osize.u.ypos;
		if (a1>=a7)
			a7=a1;				// new lowest point

		(OBJECT *)a0=((OBJECT*)a0)->olink;
	}
	while((OBJECT *)a0!=NULL);

	/* tack on xtra pieces to bottom of floor */
	(long)current_proc->a7=a7;
	(long)current_proc->a6=worldtlx.u.intpos;
	current_proc->a3=0;
	floor_piece();
	broken_floor_a();
	broken_floor_b();
	current_proc->a3^=1;
	floor_piece();

	CREATE(PID_FX,crash_fx)->pa8=(OBJECT *)(current_proc->pdata.p_store7);
	scrolly.pos=SCY(0xc0000);					// dont fall 2 fast

	/* wait_old_offscreen */
	do
	{
		process_sleep(1);
	}
	while(worldtly.u.intpos<SCRBOT);

	current_proc->pa8=(OBJECT*)current_proc->pdata.p_store7;
	clear_shadow_bit(current_proc->pdata.p_otherguy);
	set_inviso(current_proc->pdata.p_otherguy);

	/* get rid of bell tower #1 images */
	f_skew=0;
	delolist(&baklst1);
	delolist(&baklst2);
	delolist(&baklst3);
	delolist(&baklst4);
	delolist(&baklst5);
	delolist(&baklst6);
	delolist(&baklst7);

	/* make another copy of bell2 on list 7 */
	(short)current_proc->a10=worldtly.u.intpos;
	worldtlx7.pos=worldtlx8.pos;
	current_proc->pa8=oa8=baklst8;
	oa0=get_object();
	copy_obj(oa8,oa0);
	baklst7=oa0;
	goto copy81;

	/* copy8 */
	do
	{
		oa0=get_object();
		copy_obj(oa8,oa0);
		((OBJECT *)current_proc->pa9)->olink=oa0;
copy81:
		oa0->oypos.u.intpos+=ONE_FLOOR;
		oa0->olink=NULL;
		(OBJECT *)current_proc->pa9=oa0;
		oa8=oa8->olink;
	}
	while(oa8!=NULL);

	scroll_down_1_floor();
	baklst_down_2_floors(&baklst8);
	scroll_down_1_floor();
	baklst_down_2_floors(&baklst7);

	/* speed up past the guy !! */
	scrolly.pos=SCY(0x100000);				// dont fall to fast
	scroll_down_1_floor();

	/* fix borken pieces !!! */
	fix_broken_pieces(baklst7);
	fix_broken_pieces(baklst8);

	baklst_down_2_floors(&baklst8);
	scroll_down_1_floor();
	baklst_down_2_floors(&baklst7);
	scroll_down_1_floor();

	current_proc->a10=14;
	(short)current_proc->a3=worldtlx.u.intpos;
	/* spike3 */
	do
	{
		oa0=make_a_spike();
		oa0->ozval=0;

		oa0=make_a_spike();
		oa0->ozval=100;

	}
	while(--current_proc->a10>0 );

	process_sleep(5);
	scrolly.pos=0;
	current_proc->pa8=oa8=(OBJECT*)current_proc->pdata.p_store7;

	/* falld3, fall till I meet my maker !!! */
	do
	{
		process_sleep(1);
	}
	while(oa8->oypos.u.intpos<SCY(0xa40) );

	rsnd_stab();
	death_scream;
	find_ani_part2(ANIM_KDOWN);
	do_next_a9_frame(oa8);

	oa8->oyvel.pos=SCY(0xa0000);

	/* falld4 */
	do
	{
		process_sleep(1);
		oa8->oyvel.pos>>=4;
	}
	while(oa8->oyvel.pos>SCY(0x10000) );

	ground_y=oa8->oypos.u.intpos+SCY(0x100);
	create_blood_proc(BLOOD_PIT);

	process_sleep(10);

	death_blow_complete();
	f_no_bonus=0;								// allow bonus routine to do its thing
	stop_a8(oa8);
	wait_forever();
}
示例#5
0
文件: MKTEXT.C 项目: Ced2911/umk3
/******************************************************************************
 Function: void stringer(void)

 By: David Schwartz

 Date: Jan 1995

 Parameters: fnt_state - init state information
			 fnt_buffer - set to text to print
			 current_proc->pa8 - ptr to fnt_buffer

			str_flags - insert:justify
			bit 17 = set the "no_scroll" bit in oflags2
			bit 16 = 1 insert on obj list
			bit 15 = 1 shadow the characters that get kicked out

			justify =  0 left justify
					   1 center justify
					   2 right justify

 Returns: None

 Description:	read fnt_buffer and create an object lists of text to display
******************************************************************************/
void stringer(void)
{
	LONG str_flags;
	short b2;				// emul b2 register
	XYTYPE initpos;		// a3
	char cur_char;
	FNTTPAGE *fptr;
	OBJECT *obj,*tobj;			// current object

	/* setup correct flag state */
	switch (fnt_state.fnt_routine)
	{
		case STRCNRMOS:
			str_flags=0x18001;
			break;
		case STRCNRMOS_SCR:
			str_flags=0x18001|STR_SCROLL;
			break;
		case STRLNRMOS_SCR:
			str_flags=0x18000|STR_SCROLL;
			break;
		case STRRNRMOS_SCR:
			str_flags=0x18002|STR_SCROLL;
			break;
		case STRCNRMO_SCR:
			str_flags=0x10001|STR_SCROLL;
			break;
		case STRLNRMO_SCR:
			str_flags=0x10002|STR_SCROLL;
			break;
		case STRRNRMO_SCR:
			str_flags=0x10000|STR_SCROLL;
			break;
	}

	string_underline=0;			// clear shadowing and underling flag
	(char *)current_proc->pa8=fnt_buffer;			// set to start of string to display

	string_shadow=(str_flags & STR_SHADOW) ? 1:0;

	/* stringer_noshad */
	spacing();

	initpos.u.xpos=fnt_state.fnt_posx;
	initpos.u.ypos=fnt_state.fnt_posy;

	justify(str_flags & STR_JUSTIFY);

	/* stringr2 */
	while (((short)*((char *)current_proc->pa8))!=0)
	{
		cur_char=*((char *)current_proc->pa8);
		((char *)(current_proc->pa8))++;					// next char
		b0=0;					// not a space, yet

		if (cur_char<' ')
		{
			/* control character */
			switch ((short)cur_char)
			{
				case NEW_XY:
					fnt_state.fnt_posx=(short)(*((char *)(current_proc->pa8)));
					((char *)(current_proc->pa8))++;					// next char
					fnt_state.fnt_posy=(short)(*((char *)(current_proc->pa8)));
					((char *)(current_proc->pa8))++;					// next char
					break;
				case NEW_SPACING:
					fnt_state.fnt_spacing=(WORD)(*((char *)(current_proc->pa8)));
					((char *)(current_proc->pa8))++;					// next char
					break;
				case ASCII_CR:
					fnt_state.fnt_posx=initpos.u.xpos;			// get back to where we started
					fnt_state.fnt_posy=initpos.u.ypos+fnt_spacing.u.ypos;	// move down 1 line
					initpos.u.xpos=fnt_state.fnt_posx;		// store position
					initpos.u.ypos=fnt_state.fnt_posy;
					justify(str_flags & STR_JUSTIFY);
					break;
				case ADD_DYDX:
					fnt_state.fnt_posx+=((short)(*((char *)(current_proc->pa8))));		// add delta x
					((char *)(current_proc->pa8))++;					// next char
					fnt_state.fnt_posy+=((short)(*((char *)(current_proc->pa8))));			// add delta y
					((char *)(current_proc->pa8))++;					// next char
					break;
			}
		}
		else
		{
			if (cur_char==' ')
			{
				/* spacing info setup */
				b2=fnt_state.fnt_posx;
				fnt_state.fnt_posx+=(fnt_spacing.u.xpos+fnt_state.fnt_spacing);

				if (string_underline==0)
					goto SKIP_DRAW;

				b0=b2;
				b2=fnt_state.fnt_posx;		// swap locations
				fnt_state.fnt_posx=b0;

				b0=1;
				cur_char='a';

				goto SKIP_DRAW;
			}

			/* strnchar, legal character draw time */
			fptr=(font_lists[fnt_state.fnt_num].f_ptr)+((WORD)cur_char-0x21);		// get ptr to correct character

			if (text_draw==1) 
			{
				
					setXY4(cdb->curr_prim, \
						fnt_state.fnt_posx,fnt_state.fnt_posy, \
						fnt_state.fnt_posx+fptr->w,fnt_state.fnt_posy, \
						fnt_state.fnt_posx,fnt_state.fnt_posy+fptr->h, \
						fnt_state.fnt_posx+fptr->w,fnt_state.fnt_posy+fptr->h);

					SetUVWH(cdb->curr_prim,fptr->u0,	\
							fptr->v0, \
							fptr->w, \
							fptr->h);

					cdb->curr_prim->tpage=font_lists[fnt_state.fnt_num].f_tpage;
					cdb->curr_prim->clut=get_fore_pal(fnt_state.fnt_pal);
					DrawPrim(cdb->curr_prim);
					DrawSync(0);
				
			}
			else
			{
				if ((obj=get_object())!=NULL)
				{
					obj->oflags2=0;

					if (str_flags & STR_SCROLL)
						obj->oflags2|=M_NOSCROLL;		// set no scroll bit

					obj->osag=fptr;

					obj->oxvel.pos=0;			// clear out position & vel info
					obj->oyvel.pos=0;
					obj->oxpos.pos=0;
					obj->oypos.pos=0;

#if CD_DEBUG
					if ( f_cdbug==1 )
					{
						obj->oid=OID_CD;				// stuff findable ID
						obj->opal=get_fore_pal(YELLOW_p);
						obj->ozval=1000;
					}
					else
					{
						obj->oid=OID_TEXT;				// stuff findable ID
						obj->opal=get_fore_pal(fnt_state.fnt_pal);
						obj->ozval=1;
					}
#else
					obj->oid=OID_TEXT;				// stuff findable ID
					obj->opal=get_fore_pal(fnt_state.fnt_pal);
					obj->ozval=1;
#endif

					obj->oxpos.u.intpos=fnt_state.fnt_posx;		// eliminated anim point stuff
					obj->oypos.u.intpos=fnt_state.fnt_posy;

					/* setup header stuff */
					obj->header.tpage=font_lists[fnt_state.fnt_num].f_tpage;
					obj->header.t_xoffset=(fptr->u0);
					obj->header.t_yoffset=fptr->v0;
					obj->header.t_width=fptr->w;
					obj->header.t_height=fptr->h;

					if (b0==0)
						insert_object(obj,&objlst2);

					/* check for underlining */

					/* check for shadowing */
					if (string_shadow!=0)
					{
						tobj=obj;
						if ((obj=get_object())!=NULL)
						{
							copy_obj(tobj,obj);

							if (fnt_state.fnt_num==FONT_15)
							{
								obj->oxpos.u.intpos+=1;
								obj->oypos.u.intpos+=1;
							}
							else
							{
								obj->oxpos.u.intpos+=1;
								obj->oypos.u.intpos+=1;
							}

							obj->ozval=0;				// normal letters in front of shadows

							obj->opal=get_fore_pal(bpal_black_P);		// shadow is done in black

							insert_object(obj,&objlst2);
						}
					}
				}
			}

			/* strngdun */
			if (b0==0)
			{
				/* if characters is one need special spacing routine */
				if (cur_char=='1')
					fptr++;

				fnt_state.fnt_posx+=(fnt_state.fnt_spacing+fptr->w);	// pass character size and font spacing
			}
			else
			{
				fnt_state.fnt_posx=b2;
			}

			/* strng_bypass_1 */
			if (fnt_state.fnt_sleep!=0)
				process_sleep(fnt_state.fnt_sleep);
		}

SKIP_DRAW:
	}

	/* stringrx */
	return;
}

/******************************************************************************
 Function: void spacing(void)

 By: David Schwartz

 Date: Jan 1995

 Parameters: None

 Returns: fnt_spacing - sets variables with correct spacing

 Description:	set the spacing for the current font
******************************************************************************/
void spacing(void)
{
	FNTTPAGE *fptr;

	if (fnt_state.fnt_num==FONT_15)
	{
		fnt_spacing.u.xpos=SCX(0x0a);
		fnt_spacing.u.ypos=SCY(0x13);
	}
	else
	{
		fptr=font_lists[fnt_state.fnt_num].f_ptr;			// get pointer to font info

		fptr+='H'-0x21;				// USE 'H' for space and newline stuff

		/* x sizing = (x size of 'H')/2 */
		fnt_spacing.u.xpos=(fptr->w)>>1;

		/* x sizing = 3*(y size of 'H')/2 */
		fnt_spacing.u.ypos=(fptr->h)+((fptr->h)>>1);
	}

	return;
}