//Practice tracing circles I1 ct_buf[128]; double score=0,rad; void SongEndTsk() { Sound(0); Exit; } void SongTsk() { Fs->end_task_cb=&SongEndTsk; ResetMusicSettings; while (TRUE) Play("hEDCARCDECR"); } void DrawIt(TssStruct *tss) { ClearWinText(tss); PlotWinStr(tss,ct_buf,BLACK<<4+WHITE,0,0); } #define cir_radius 100 void CTPlot(GrBitMap *base,I8 x,I8 y,I8 z) { nounusedwarn z; GrPlot(base,x,y); rad=Sqrt(Sqr(x-cir_radius-25)+Sqr(y-cir_radius-25)); score+=Abs(rad-cir_radius); } void CircleTrace() { I8 cmd,p1,p2,x1,y1; 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; U8 start_time; GrBitMap *base=GrAlias(Gs->grbase,Fs); TssStruct *song_tss=Spawn(&SongTsk,"Circle Trace Song",Fs); ip_inhibit_win_operations=TRUE; WinMax; *ct_buf=0; Fs->update_win=&DrawIt; GrClear; base->color=ROP_XOR+(BLACK ^ WHITE); GrCircle(base,cir_radius+25,cir_radius+25,cir_radius); FlushMsgs; do { cmd=GetMsg(&p1,&p2, (1<color=ROP_XOR+(BLACK ^ WHITE); GrCircle(base,cir_radius+25,cir_radius+25,cir_radius); base->color=ROP_XOR+(RED ^ WHITE); score=0; start_time=BootTime; x1=p1; y1=p2; do { cmd=ScanMsg(&p1,&p2, (1<update_win=old_update; GrClear; AssignBit(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK,old_ip_double); ip_inhibit_win_operations=old_inhibit; GrDel(base); Kill(song_tss); } CircleTrace; //Execute when #included