program RandomSquaresExpand {
	section module {
 		sdl,
		std
	}
	section data {
		int rax = 0
		int rbx = 0
		int rcx = 0
		int rdx = 0
		int rsi = 0
		int rdi = 0
		int r8 = 0
		int r9 = 0
		int r10 = 0
		int r11 = 0
		int r12 = 0
		string str_0 = "Random Squares"
		int window_id = 0
		int renderer = 0
		int event_type_result = 0
		int running = 0
		int color_value_r = 0
		int color_value_g = 0
		int color_value_b = 0
		int max_cols = 0
		int max_rows = 0
		int index_w = 0
		int index_h = 0
		int render_cols = 0
		int render_rows = 0
		int render_z = 0
		int render_i = 0
		int __funcret_init = 0
	}
	section code {
	start:
		mov index_w, 2
		mov index_h, 2
		mov max_cols, 24
		mov max_rows, 24
		call PROC_init
		mov running, 1
	WHILE_0:
		cmp running, 0
		je ENDWHILE_1
	WHILE_2:
		invoke poll_event
		return rbx
		cmp rbx, 0
		je ENDWHILE_3
		invoke get_event_type
		return rdx
		mov event_type_result, rdx
		cmp event_type_result, 256
		jne ELSE_6
		mov running, 0
	ELSE_6:
		cmp event_type_result, 768
		jne ELSE_10
		invoke get_key_code
		return r8
		cmp r8, 27
		jne ELSE_10
		mov running, 0
	ELSE_10:
		jmp WHILE_2
	ENDWHILE_3:
		mov r9, 0
		mov r10, 0
		mov r11, 0
		mov r12, 255
		invoke set_draw_color, renderer, r9, r10, r11, r12
		invoke clear, renderer
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, index_w
		mov rcx, index_h
		call PROC_render
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp index_w, max_cols
		jge OR_ONE_24
		cmp index_h, max_rows
		jl ELSE_18
	OR_ONE_24:
		mov index_w, 2
		mov index_h, 2
		jmp ENDIF_19
	ELSE_18:
		mov r9, index_w
		add r9, 1
		mov index_w, r9
		mov r9, index_h
		add r9, 1
		mov index_h, r9
	ENDIF_19:
		invoke present, renderer
		mov r9, 16
		invoke delay, r9
		jmp WHILE_0
	ENDWHILE_1:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_cleanup
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		done
	function PROC_render:
		mov render_cols, rbx
		mov render_rows, rcx
		mov render_z, 0
	FOR_26:
		cmp render_z, render_rows
		jg ENDFOR_27
		mov render_i, 0
	FOR_29:
		cmp render_i, render_cols
		jg ENDFOR_30
		invoke rand
		return rbx
		mov color_value_r, rbx
		mod color_value_r, 255
		invoke rand
		return rdx
		mov color_value_g, rdx
		mod color_value_g, 255
		invoke rand
		return rdi
		mov color_value_b, rdi
		mod color_value_b, 255
		mov r9, 255
		invoke set_draw_color, renderer, color_value_r, color_value_g, color_value_b, r9
		mov r9, render_i
		mul r9, 32
		mov r10, render_z
		mul r10, 32
		mov r11, 32
		mov r12, 32
		invoke fill_rect, renderer, r9, r10, r11, r12
	FOR_CONTINUE_31:
		add render_i, 1
		jmp FOR_29
	ENDFOR_30:
	FOR_CONTINUE_28:
		add render_z, 1
		jmp FOR_26
	ENDFOR_27:
	PROC_END_render:
		ret
	function PROC_init:
		invoke init
		return rbx
		mov __funcret_init, rbx
		cmp __funcret_init, 0
		je ELSE_32
		exit 0
	ELSE_32:
		mov rsi, 100
		mov rdi, 100
		mov r8, 800
		mov r9, 800
		mov r10, 4
		invoke create_window, str_0, rsi, rdi, r8, r9, r10
		return rdx
		mov window_id, rdx
		mov rsi, 0
		sub rsi, 1
		cmp window_id, rsi
		jne ELSE_36
		invoke quit
		exit 0
	ELSE_36:
		mov r8, 0
		sub r8, 1
		mov r10, 2
		invoke create_renderer, window_id, r8, r10
		return r9
		mov renderer, r9
		mov r8, 0
		sub r8, 1
		cmp renderer, r8
		jne ELSE_40
		invoke destroy_window, window_id
		invoke quit
		exit 0
	ELSE_40:
		invoke get_ticks
		return r9
		invoke srand, r9
	PROC_END_init:
		ret
	function PROC_cleanup:
		invoke destroy_renderer, renderer
		invoke destroy_window, window_id
		invoke quit
	PROC_END_cleanup:
		ret
	}
}