//Generated with Lev's C-- pack for HiAsm, www.hiasm.com

#define MEMSIZE 4096*400

#include "../lib/kolibri.h"
#include "../lib/gui.h"

/*========================================================
=                                                        =
=                          DATA                          =
=                                                        =
========================================================*/

_rgb image[256*256];

#define fw 256+167
#define fh 290

enum { 
	DRAW1_BTN=10, 
	DRAW2_BTN, 
	SETBG_BTN 
};

/*========================================================
=                                                        =
=                       MAIN CYCLE                       =
=                                                        =
========================================================*/

void main()
int id;
{
  loop() switch(WaitEvent())
  {
	case evButton:
		id=GetButtonID();
		if (id==1) ExitProcess();
		if (id==DRAW1_BTN) EventDraw1();
		if (id==DRAW2_BTN) EventDraw2();
		if (id==SETBG_BTN) EventSetBackground(#image,256,256);
		break;
	case evKey:
		if (GetKeys()==27) ExitProcess();
		break;
	case evReDraw:
		system.color.get();
		DefineAndDrawWindow(screen.width-fw/2,screen.height-fh/2,fw,fh+skin_height,0x33,0xE0DFE3,"Rainbow (rgb test)",0);
		_PutImage(0,0,256,256,#image);
		DrawCaptButton(280,20, 110,30,DRAW1_BTN,system.color.work_button,system.color.work_button_text,"Draw 1");
		DrawCaptButton(280,60, 110,30,DRAW2_BTN,system.color.work_button,system.color.work_button_text,"Draw 2");
		DrawCaptButton(280,100,110,30,SETBG_BTN,system.color.work_button,system.color.work_button_text,"Background");
  }
}

/*========================================================
=                                                        =
=              Background system functions               =
=                                                        =
========================================================*/

inline fastcall void BG_PaintMode( ECX)
{
	$mov eax, 15
	$mov ebx, 4
	$int  0x40
}

inline fastcall void BG_SetImageSize( ECX, EDX)
{
	$mov eax, 15
	$mov ebx, 1
	$int  0x40
}

inline fastcall void BG_PutPixels( ECX, EDX, ESI)
{
	$mov eax, 15
	$mov ebx, 5
	$int  0x40
}

inline fastcall void BG_Redraw()
{
	$mov eax, 15
	$mov ebx, 3
	$int  0x40
}

/*========================================================
=                                                        =
=                       EVENTS                           =
=                                                        =
========================================================*/

void EventDraw1()
{
int i1;
int i4;
int pos;
  for(i4 = 0; i4 < 256; i4++) {
	for(i1 = 0; i1 < 256; i1++) {
	  pos = i1 * 256 + i4;
	  image[pos].b = i1;
	  image[pos].r = 0;
	  image[pos].g = 0;
	}
  }
  _PutImage(0,0,256,256,#image);
}

void EventDraw2()
{
int i1;
int i4;
int t2;
  for(i4 = 0; i4 < 256; i4++) {
	for(i1 = 0; i1 < 256; i1++) {
	  t2 = i1 * 256 + i4;
	  image[t2].r = i4;
	  image[t2].g = i1;
	  image[t2].b = 0;
	}
  }
  _PutImage(0,0,256,256,#image);
}

void EventSetBackground(dword img_pointer, w,h)
{
	BG_PaintMode(2); //1-tile,2-stratch
	BG_SetImageSize(w,h);
	BG_PutPixels(img_pointer, 0, 3*w*h);
	BG_Redraw();	
}

stop: