#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include <snd.h>
#include <egb.h>

#include <..\yghigh.h>


#define XBUF 16
#define LNG 480
#define SRAND 79154726  /* wДԍ(^_^;) */
#define TIMES 30000


char EGB_work[EgbWorkSize];

int vx1=10;
int vy1=10;
int vx2=309;
int vy2=229;

short para[64];
short egbpnt[TIMES*2+1];
int pnt[TIMES*2+1];

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 j,ms,x,y;

	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();

	para[0]=1;
	ms=clock();
	for(j=0; j<TIMES; j++)
	{
		EGB_color(EGB_work,0,rand()%32768);
		para[1]=rand()%320;
		para[2]=rand()%240;
		EGB_pset(EGB_work,(char *)para);
	}
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("EGB pset\n");
	printf("%d ms as %d psets.\n",ms,TIMES);
	printf("%d ms as a pset.\n",ms/TIMES);
	printf("%d clocks as a pset.\n",16000*ms/TIMES);


	srand(SRAND);

	frame();

	ms=clock();
	for(j=0; j<TIMES; j++)
	{
		YGH_color(&p,rand()%32768);
		x=rand()%320;
		y=rand()%240;
		YGH_pset(&p,x,y);
	}
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("YGHIGH pset\n");
	printf("%d ms as %d psets.\n",ms,TIMES);
	printf("%d ms as a pset.\n",ms/TIMES);
	printf("%d clocks as a pset.\n",16000*ms/TIMES);




	srand(SRAND);

	frame();

	for(j=0; j<TIMES; j++)
	{
		x=rand()%512;
		y=rand()%480;
		egbpnt[j*2+1]=x;
		egbpnt[j*2+2]=y;
	}
	egbpnt[0]=TIMES;
	ms=clock();
	EGB_color(EGB_work,0,rand()%32768);
	EGB_pset(EGB_work,(char *)egbpnt);
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("EGB pset(para)\n");
	printf("%d ms as %d psets.\n",ms,TIMES);
	printf("%d ms as a pset.\n",ms/TIMES);
	printf("%d clocks as a pset.\n",16000*ms/TIMES);


	srand(SRAND);

	frame();

	for(j=0; j<TIMES; j++)
	{
		x=rand()%512;
		y=rand()%480;
		pnt[j*2+1]=x;
		pnt[j*2+2]=y;
	}
	pnt[0]=TIMES;
	ms=clock();
	YGH_color(&p,rand()%32768);
	YGH_psets(&p,pnt);
	ms=(clock()-ms)*1000/CLOCKS_PER_SEC;

	printf("YGHIGH pset(para)\n");
	printf("%d ms as %d psets.\n",ms,TIMES);
	printf("%d ms as a pset.\n",ms/TIMES);
	printf("%d clocks as a pset.\n",16000*ms/TIMES);
}
