program Skeleton {
	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
		int r13 = 0
		int r14 = 0
		ptr arg0 = null
		string str_0 = "Hello, World"
		string str_1 = "font subsystem could not initalized"
		string str_2 = "./font.ttf"
		string str_3 = "Error loading font"
		string fmt_str = "%s "
		string newline = "\n"
		int running = 0
		int event_type_result = 0
		int window_id = 0
		int renderer = 0
		int font_id = 0
		ptr init_title = null
		int init_x = 0
		int init_y = 0
		int init_w = 0
		int init_h = 0
		int __funcret_init = 0
	}
	section code {
	start:
		mov arg0, str_0
		mov rbx, 100
		mov rcx, 100
		mov rdx, 1280
		mov rsi, 720
		call PROC_init
		mov running, 1
	WHILE_0:
		cmp running, 1
		jne ENDWHILE_1
	WHILE_4:
		invoke poll_event
		return rcx
		cmp rcx, 0
		je ENDWHILE_5
		invoke get_event_type
		return rsi
		mov event_type_result, rsi
		cmp event_type_result, 256
		jne ELSE_8
		mov running, 0
	ELSE_8:
		cmp event_type_result, 768
		jne ELSE_12
		invoke get_key_code
		return r9
		cmp r9, 27
		jne ELSE_12
		mov running, 0
	ELSE_12:
		jmp WHILE_4
	ENDWHILE_5:
		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
		call PROC_render
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, 15
		mov r10, 15
		mov r11, 255
		mov r12, 255
		mov r13, 255
		mov r14, 255
		invoke draw_text, renderer, font_id, str_0, r9, r10, r11, r12, r13, r14
		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:
	PROC_END_render:
		ret
	function PROC_init:
		mov init_title, arg0
		mov init_x, rbx
		mov init_y, rcx
		mov init_w, rdx
		mov init_h, rsi
		invoke init
		return rbx
		mov __funcret_init, rbx
		cmp __funcret_init, 0
		je ELSE_20
		exit 0
	ELSE_20:
		mov rsi, 4
		invoke create_window, init_title, init_x, init_y, init_w, init_h, rsi
		return rdx
		mov window_id, rdx
		mov rsi, 0
		sub rsi, 1
		cmp window_id, rsi
		jne ELSE_24
		invoke quit
		exit 0
	ELSE_24:
		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_28
		invoke destroy_window, window_id
		invoke quit
		exit 0
	ELSE_28:
		invoke get_ticks
		return r9
		invoke srand, r9
		invoke init_text
		return r9
		cmp r9, 1
		je ELSE_32
		print fmt_str, str_1
		print newline
		mov r9, 0
		sub r9, 1
		exit r9
	ELSE_32:
		mov r10, 24
		invoke load_font, str_2, r10
		return r9
		mov font_id, r9
		mov r9, 0
		sub r9, 1
		cmp font_id, r9
		jne ELSE_36
		print fmt_str, str_3
		print newline
		mov r9, 0
		sub r9, 1
		exit r9
	ELSE_36:
	PROC_END_init:
		ret
	function PROC_cleanup:
		invoke quit_text
		invoke destroy_renderer, renderer
		invoke destroy_window, window_id
		invoke quit
	PROC_END_cleanup:
		ret
	}
}