$SP,"<1>",1$ class MPCtrl { Bool core0_done,core1_done; } mp; I64 *r1,*r2; U0 DrawIt(CTask *task,CDC *dc) { I64 *old_r; if (mp.core0_done) return; old_r=dc->r; dc->color=BLACK; GrPutS(dc,0,0,"This is not art."); GrPutS(dc,0,FONT_HEIGHT,"It's just a test pattern."); GrSetRotMat(dc,r1); dc->x=200; dc->y=200; dc->flags|=DCF_TRANSFORMATION; dc->pen_width=2; SpritePlot3(dc,0,0,0,$IB,"<1>",1$); dc->color=BLUE; GrRect3(dc,50,75,0,100,50); GrRect3(dc,75,50,0,50,100); dc->color=GREEN; GrEllipse3(dc,100,100,0,50,25); GrEllipse3(dc,100,100,0,50,25,ã/2); dc->color=LTGREEN; GrEllipse3(dc,100,100,0,50,25,ã/6); GrEllipse3(dc,100,100,0,50,25,ã/3); GrSetRotMat(dc,old_r); mp.core0_done=TRUE; } U0 MPDrawIt(CTask *main_task) { CDC *dc; I64 *old_r; if (mp.core1_done) return; dc=DCAlias; old_r=dc->r; dc->win_task=main_task; GrSetRotMat(dc,r2); dc->x=200; dc->y=200; dc->flags|=DCF_TRANSFORMATION; DCFill(dc); dc->pen_width=2; SpritePlot3(dc,0,0,0,$IB,"<1>",1$); dc->color=BLUE; GrRect3(dc,50,75,0,100,50); GrRect3(dc,75,50,0,50,100); dc->color=GREEN; GrEllipse3(dc,100,100,0,50,25); GrEllipse3(dc,100,100,0,50,25,ã/2); dc->color=LTGREEN; GrEllipse3(dc,100,100,0,50,25,ã/6); GrEllipse3(dc,100,100,0,50,25,ã/3); GrSetRotMat(dc,old_r); DCDel(dc); mp.core1_done=TRUE; } U0 Layers3DJob() { F64 é2=0,è2=0,é3=0,è3=0; mp.core0_done=TRUE; mp.core1_done=TRUE; r1=GrIdent; r2=GrIdent; SettingsPush; //See $LK,"SettingsPush","MN:SettingsPush"$ DocClear; Fs->draw_it=&DrawIt; Preempt(OFF); //Don't access r1,r2 while being changed while (!ScanChar) { GrIdentEqu(r1); GrRotXEqu(r1,è2); GrRotZEqu(r1,é2); GrIdentEqu(r2); GrRotXEqu(r2,è3); GrRotZEqu(r2,é3); mp.core0_done=FALSE; mp.core1_done=FALSE; //Pass the task of the window as data item to job. MPJob(&MPDrawIt,Fs,1); WinMgrSync; while (!mp.core0_done || !mp.core1_done) Yield; é2+=2*ã/100; è2 +=2*ã/130; é3-=2*ã/100; è3 -=2*ã/130; } DCFill; SettingsPop; Free(r1); Free(r2); } Layers3DJob; Ü#ôÿÿÿ#ôÿÿÿ..  ìÿÿÿJIïÿÿÿéÿÿÿñÿÿÿêÿÿÿ!íý%9RÁð¿ =Åýï7RÁð¿lU9RÁð¿/€