include 'proc32.inc'

macro start_draw_window x,y,xsize,ysize,areacolor,caption,capsize
{
	;pusha
	mov	eax, 12 		; function 12:tell os about windowdraw
	mov	ebx, 1			; 1, start of draw
	int	0x40
	; DRAW WINDOW
	mov	eax, 0			; function 0 : define and draw window
	mov	ebx, x*65536+xsize	; [x start] *65536 + [x size]
	mov	ecx, y*65536+ysize	; [y start] *65536 + [y size]
	mov	edx, areacolor		 ; color of work area RRGGBB
	mov	esi, 0x00334455 	 ; color of grab bar  RRGGBB
	mov	edi, 0x00ddeeff 	 ; color of frames    RRGGBB
	int	0x40
	; WINDOW LABEL
	mov	eax, 4			; function 4 : write text to window
	mov	ebx, 8*65536+8		; [x start] *65536 + [y start]
	mov	ecx, 0x0;0ffffff         ; color of text RRGGBB
	mov	edx, caption		; pointer to text beginning
	mov	esi, capsize	; text length
	int	0x40
	;popa
}

macro end_draw_window
{
	mov	eax, 12 		; end of redraw
	mov	ebx, 2
	int	0x40
}

macro change_window_place_size x,y,xsize,ysize
{
	mov	eax, 67 		 ; function 67 : replace and/or resize window
	mov	ebx, x
	mov	ecx, y
	mov	edx, xsize
	mov	esi, ysize
	int	0x40
}

proc draw_button stdcall, x:dword, y:dword, xsize:dword, ysize:dword, \
	id:dword, butcolor:dword, text:dword, textlen:byte, textcolor:dword

	pusha
	mov	ebx, dword [x]
	shl	ebx, 16
	add	ebx, dword [xsize]	  ; [x start] *65536 + [x size]

	mov	ecx, dword [y]
	shl	ecx, 16
	add	ecx, dword [ysize]	  ; [y start] *65536 + [y size]

	mov	edx, dword [id] 		; button id
	mov	esi, dword [butcolor]		; button color RRGGBB
	mov	eax, 8			; function 8 : define and draw button
	int	0x40

	mov	ebx, dword [x]
	add	ebx, 5
	shl	ebx, 16
	mov	eax, dword [ysize]
	sub	eax, 5
	shr	eax, 1
	add	ebx, eax
	add	ebx, dword [y]	;mov    ebx, (x+5)*65536+y+(ysize-5)/2  ; Draw button text

	mov	ecx, dword [textcolor]
	mov	edx, dword [text]
	xor	eax, eax
	mov	al,  byte [textlen]
	mov	esi, eax
	mov	eax, 4
	int	0x40
	popa
ret
endp

;macro outtextxy x,y,prompt,prompt_len,color
;{
proc outtextxy stdcall, x:dword, y:dword, prompt:dword, prompt_len:dword, color:dword
	pusha
	mov	eax, 4
	mov	ebx, dword [x]	       ; draw info text with function 4
	shl	ebx, 16
	or	ebx, dword [y]
	mov	ecx, dword [color]
	mov	edx, dword [prompt]
	mov	esi, dword [prompt_len]
	test	esi, esi
	jnz	@f
	or	ecx, 0x80000000
      @@:
	int	0x40
	popa
ret
endp
;}

;proc bar x:dword, y:dword, xsize:dword, ysize:dword, color:dword
macro bar x, y, xsize, ysize, color
{
	pusha
	mov eax, 13
	;mov ebx, [x]
	;shl ebx, 16
	;add ebx, [xsize]
	;mov ecx, [y]
	;shl ecx, 16
	;add ecx, [ysize]
	;mov edx, [color]
	mov	ebx, x*65536+xsize
	mov	ecx, y*65536+ysize
	mov edx, color

	int 0x40
	popa
;ret
;endp
}

macro line x1,y1,x2,y2,color
{
  pusha
  mov eax, 38
  mov ebx, x1*65536+x2
  mov ecx, y1*65536+y2
  mov edx, color
  int 0x40
  popa
}

macro rectangle x,y,xsize,ysize,color
{
  x2=x+xsize
  y2=y+ysize
  line x,y,x2,y,color
  line x,y,x,y2,color
  line x,y2,x2,y2,color
  line x2,y,x2,y2,color
}

macro rectangle2 x,y,xsize,ysize,color1,color2
{
  x2=x+xsize
  y2=y+ysize
  line x,y,x2,y,color1
  line x,y,x,y2,color1
  line x,y2,x2,y2,color2
  line x2,y,x2,y2,color2
}

macro putpixel x,y,color
{
  mov eax, 1
  mov ebx, x
  mov ecx, y
  mov edx, color
  int 0x40
}