//Practice tracing circles //Giotto, a famous artist, drew a freehand circle as a portfolio for a job. AcctRegSetDftEntry("TempleOS/CircleTrace","F64 best_score=999;\n"); AcctRegExeBranch("TempleOS/CircleTrace"); I64 cx,cy; F64 avg_error=0,elapsed_time=0,total_error=0,score=999; U0 SongTask(I64) { Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) Play("hEDCARCDECR"); } U0 DrawIt(CTask *task,CDC *dc) { GrPrint(dc,0,0,"Error:%6.3f Time:%6.3f Score:%6.3f Best:%8.3f",avg_error,elapsed_time,score,best_score); } #define CIRCLE_RADIUS 100 #define CIRCUMFERENCE (2*ã*CIRCLE_RADIUS) Bool CTPlot(CDC *dc,I64 x,I64 y,I64) { F64 rad=Sqrt(Sqr(x-cx)+Sqr(y-cy)); GrPlot(dc,x,y); total_error+=Abs(rad-CIRCLE_RADIUS); return TRUE; } U0 CircleTrace() { I64 msg_code,a1,a2,x1,y1; F64 rad,t0,total_distance; CDC *dc=DCAlias; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); AutoComplete; cx=Fs->pix_width/2; cy=Fs->pix_height/2; Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; DocCursor; DocClear; Fs->draw_it=&DrawIt; DCFill; dc->color=ROP_XOR+BLACK^TRANSPARENT; GrCircle(dc,cx,cy,CIRCLE_RADIUS); do { msg_code=GetMsg(&a1,&a2, 1<color=ROP_XOR+BLACK^TRANSPARENT; GrCircle(dc,cx,cy,CIRCLE_RADIUS); dc->color=ROP_XOR+RED^TRANSPARENT; t0=tS; total_distance=0.001; total_error=0; x1=a1; y1=a2; do { msg_code=ScanMsg(&a1,&a2, 1<0.95*CIRCUMFERENCE) { if (score