$PI,"<1>",1$ #define NUM_APPLES 128 I8 x[NUM_APPLES],y[NUM_APPLES], cur_apple,cur_sub_element,cur_dist, cur_x=0,cur_y=0; I1 buf[128]; void DrawIt(TssStruct *tss) { I8 i,best_dist=MAX_I8,best_apple=0,best_sub_element=0; GrBitMap *base=GrAlias(grbase2,tss); ClearWinText(tss); base->flags|=BMF_LOCATE_NEAREST; base->cur_x=cur_x; base->cur_y=cur_y; base->cur_z=0; for (i=0;inearest_sub_grelem=0; base->nearest_dist=MAX_I8; GrElemsPlot(base,x[i],y[i],0,$IB,"<1>",1$); if (base->nearest_dist<=best_dist) { //$FG,2$distance to nearest pixel, squared$FG$ //$FG,2$$LK,"Sqrt","MN:Sqrt"$() is expensive so we work with distance squared.$FG$ best_dist=base->nearest_dist; best_apple=i; //$FG,2$Sub elements are the individual lines or whatever of the GrElem.$FG$ best_sub_element=base->nearest_sub_grelem; } } //$FG,2$Note: window manager does not get preempted and$FG$ //$FG,2$this code runs in the window manger task.$FG$ cur_apple=best_apple; cur_dist=best_dist; cur_sub_element=best_sub_element; base->color=WHITE; GrBox(base,5,5,StrLen(buf)*FONT_WIDTH,FONT_HEIGHT); base->color=BLACK; GrText(base,5,5,buf); } void DoIt() { I8 i,cmd,p1,p2,best_i=0,old_x,old_y; void *old_update=Fs->update_win; BoolU4 old_ip_double=Bts(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK); BoolU4 old_inhibit=ip_inhibit_win_operations; ip_inhibit_win_operations=TRUE; for (i=0;iupdate_win=&DrawIt; do { cmd=GetMsg(&p1,&p2,1<update_win=old_update; AssignBit(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK,old_ip_double); ip_inhibit_win_operations=old_inhibit; } DoIt; ¿                 ûÿÿÿûÿÿÿúÿÿÿÿÿÿÿüÿÿÿ