#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include <snd.h>
#include <egb.h>

#include <..\concorde.h>


#define XBUF 16
#define LNG 480
#define SRAND 79154726  /* wДԍ(^_^;) */
#define TIMES 100
#define EDGES 5


char EGB_work[EgbWorkSize];

int vx1=10;
int vy1=10;
int vx2=309;
int vy2=229;

short para[64];

void frame()
{
	EGB_clearScreen(EGB_work);
	EGB_paintMode(EGB_work,0x22);

	EGB_color(EGB_work,0,32767);
	EGB_color(EGB_work,2,32767);
	para[0]=0;
	para[1]=0;
	para[2]=319;
	para[3]=239;
	EGB_viewport(EGB_work,(char *)para);
	EGB_rectangle(EGB_work,(char *)para);

	EGB_color(EGB_work,0,0);
	EGB_color(EGB_work,2,0);
	para[0]=vx1;
	para[1]=vy1;
	para[2]=vx2;
	para[3]=vy2;
	EGB_rectangle(EGB_work,(char *)para);
	EGB_viewport(EGB_work,(char *)para);
}

void main()
{
	PAGE p;
	int pnt[1+EDGES*2],ar[16*512],ed[4];
	short egn[1+EDGES*2];
	int i,j,ms;

	EGB_init(EGB_work,EgbWorkSize);
	EGB_resolution(EGB_work,0,10);
	EGB_resolution(EGB_work,1,10);

	EGB_writePage(EGB_work,0);
	EGB_displayStart(EGB_work,0,0,0);
	EGB_displayStart(EGB_work,2,2,2);
	EGB_displayStart(EGB_work,3,320,240);
	EGB_clearScreen(EGB_work);

	EGB_writePage(EGB_work,1);
	EGB_displayStart(EGB_work,0,0,0);
	EGB_displayStart(EGB_work,2,2,2);
	EGB_displayStart(EGB_work,3,320,240);
	EGB_clearScreen(EGB_work);

	EGB_displayPage(EGB_work,1,2);

	YGH_initPage(&p,SEG_VRAMP,0x40000,512,256);
	YGH_viewPort(&p,vx1,vy1,vx2,vy2);


	srand(SRAND);

	frame();

	EGB_paintMode(EGB_work,0x20);
	egn[0]=EDGES;

	ms=clock();
	for(j=0; j<TIMES; j++)
	{
		EGB_color(EGB_work,2,rand()%32768);
		for(i=0; i<EDGES; i++)
		{
			egn[1+i*2]=rand()%320;
			egn[2+i*2]=rand()%240;
		}
		EGB_polygon(EGB_work,(char *)egn);
	}
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("EGB polygon\n");
	printf("%d ms as %d polygons.\n",ms,TIMES);
	printf("%d ms as a polygon.\n",ms/TIMES);
	printf("%d clocks as a polygon.\n",16000*ms/TIMES);



	srand(SRAND);

	frame();
	pnt[0]=EDGES;

	ms=clock();
	for(j=0; j<TIMES; j++)
	{
		YGH_color(&p,rand()%32768);
		for(i=0; i<EDGES; i++)
		{
			pnt[1+i*2]=rand()%320;
			pnt[2+i*2]=rand()%240;
		}
		if(YGH_polygonArea(&p,ar,ed,pnt)==0)YGH_areaPaint(&p,ar,ed);
	}
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("YGHIGH polygon\n");
	printf("%d ms as %d polygons.\n",ms,TIMES);
	printf("%d ms as a polygon.\n",ms/TIMES);
	printf("%d clocks as a polygon.\n",16000*ms/TIMES);



	srand(SRAND);

	frame();
	pnt[0]=EDGES;

	ms=clock();
	for(j=0; j<TIMES; j++)
	{
		YGH_color(&p,rand()%32768);
		for(i=0; i<EDGES; i++)
		{
			pnt[1+i*2]=rand()%320;
			pnt[2+i*2]=rand()%240;
		}
		YGH_polygonArea(&p,ar,ed,pnt);
	}
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("YGHIGH polygon without Painting\n");
	printf("%d ms as %d polygons.\n",ms,TIMES);
	printf("%d ms as a polygon.\n",ms/TIMES);
	printf("%d clocks as a polygon.\n",16000*ms/TIMES);
}
