#define initshell_file
#include "shell.h"

#define p_delay 0,0
#define p_update (-1),(-1),0.0


#define display_width  1057
#define display_height 768 

int contrast,delay, fcount;
Rect c_rect;

void DrawRect(int x1,int y1,int x2,int y2,int p_flg){
	Rect	rRect;
	SetRect(&rRect,x1,y1,x2,y2);
	switch(p_flg){
		case 0:
			FrameRect(&rRect); break;
		case 1:
			PaintRect(&rRect); break;
		}
}

void DrawOval(int x1,int y1,int x2,int y2,int p_flg){
	Rect	oRect;
	SetRect(&oRect,x1,y1,x2,y2);
	switch(p_flg){
		case 0:
			FrameOval(&oRect); break;
		case 1:
			PaintOval(&oRect); break;
		}	
}


void MakeAnim(){
	int i;

	for(i=1;i<5;i++){     /*Drawing Background*/
		startdrawscreen(-i);
		macbits(127);
		DrawRect(0,0,display_width,display_height,1);
		enddrawscreen();
	}
	
	startdrawscreen(-1);	
	macbits(254);	
	DrawOval(display_width/2-25, display_height/2-25, display_width/2+25, display_height/2+25,1);
	enddrawscreen();
	
	startdrawscreen(-2);	
	macbits(254);	
	DrawOval(display_width/2-28, display_height/2-25, display_width/2+22, display_height/2+25,1);
	enddrawscreen();
	
	startdrawscreen(-3);	
	macbits(1);	
	DrawOval(display_width/2-25, display_height/2-25, display_width/2+25, display_height/2+25,1);
	enddrawscreen();
	
	startdrawscreen(-4);	
	macbits(1);	
	DrawOval(display_width/2-28, display_height/2-25, display_width/2+22, display_height/2+25,1);
	enddrawscreen();
	
}


static int setlut(int x, int y, float val){
	int i;
	int lut[512];
	for (i=1; i<255; i++) lut[i] = i ;
	macltset(1, &lut[1], &lut[1], &lut[1], 254);
}

static int set_delay(int x, int y, float val) { delay=val;}


void initshell(void){
	usemainscreen(1000, true, set8bits+usecolors);
//	macinit(set8bits+usecolors);
	makebuffers(4);

	delay=10;
	addintparameter(p_delay, "Frame Duration"/*name*/,
					delay/*value*/, 0/*min*/, 300/*max*/,
					nil, set_delay, nil, nil);
 	setlut(p_update);
	fcount=1;
	MakeAnim();
	
	startdrawscreen(0);  /* Baackground */
	macbits(127);
	SetRect(&c_rect,0,0,display_width,display_height); /* set the region to be copied */
	DrawRect(0,0,display_width,display_height,1);
	enddrawscreen();
}

void mainloop(void){
	if (dframecount < 0) {
		macwait(1);
		copyrect(&c_rect,0,0,-fcount,0); fcount++;    
		if(fcount==5) fcount=1;  /*-1->0 */
		dframecount = delay-2;   /*delay = frame number */
	}
}