// File: /workspace/github_c_makefile_star2_O0/baines[P]MiniGBS/x11.c
// Function: x11_init
int x11_init(void){
	xlib = dlopen("libX11.so", RTLD_NOW | RTLD_LOCAL);
	if(!xlib || dlerror()){
		xlib = NULL;
		return -1;
	}

	int i = 0;
	for(void** fn = (void**)&x11; fn != (void**)(&x11+1); ++fn, ++i){
		*fn = dlsym(xlib, x11_func_names[i]);

		const char* msg = dlerror();
		if(!*fn || msg){
			goto fail;
		}
	}

	if(!(x11_dpy = x11.open_dpy(NULL)))
		goto fail;

	x11_win = x11.simple_win(x11_dpy, RootWindow(x11_dpy, 0), 0, 0, X11_WIN_W, X11_WIN_H, 0, 0, BlackPixel(x11_dpy, 0));

	int op, ev, err;
	if(!x11.query_ext(x11_dpy, "Present", &op, &ev, &err))
		goto fail;

	XExtCodes* xec = x11.init_ext(x11_dpy, "Present");
	if(!xec)
		goto fail;

	x11_present_op = xec->major_opcode;
	x11.flush(x11_dpy);

	if(!(x11_pix = x11.create_pix(x11_dpy, x11_win, X11_WIN_W, X11_WIN_H, 24)))
		goto fail;

	XGCValues gcv = {
		.foreground = WhitePixel(x11_dpy, 0),
		.background = BlackPixel(x11_dpy, 0),
		.line_width = 2,
	};

	x11_gc = x11.create_gc(x11_dpy, x11_pix, GCForeground | GCBackground | GCLineWidth, &gcv);
	gcv.foreground = BlackPixel(x11_dpy, 0);
	gcv.background = WhitePixel(x11_dpy, 0);
	x11_gc2 = x11.create_gc(x11_dpy, x11_pix, GCForeground | GCBackground | GCLineWidth, &gcv);

	if(!x11_gc || !x11_gc2)
		goto fail;

	x11.store_name(x11_dpy, x11_win, "MiniGBS Oscilloscope");
	x11.sel_input(x11_dpy, x11_win, KeyPressMask);

    x11_atom_wm_delete = x11.intern_atom(x11_dpy, "WM_DELETE_WINDOW", 0);
    x11.set_protos(x11_dpy, x11_win, &x11_atom_wm_delete, 1);

	return ConnectionNumber(x11_dpy);

fail:
	dlclose(xlib);
	x11_dpy = xlib = NULL;
	x11_win = 0;
	return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
leaq 0x2d48(%rip), %rdi      # 0x1200a
movl $0x2, %esi
callq 0x5370
movq %rax, 0xed65(%rip)      # 0x1e038
cmpq $0x0, 0xed5d(%rip)      # 0x1e038
je 0xf2e8
callq 0x5060
cmpq $0x0, %rax
je 0xf2ff
movq $0x0, 0xed45(%rip) # 0x1e038
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0xf657
movl $0x0, -0x8(%rbp)
leaq 0xed33(%rip), %rax      # 0x1e040
movq %rax, -0x10(%rbp)
leaq 0xed28(%rip), %rax      # 0x1e040
addq $0x98, %rax
cmpq %rax, -0x10(%rbp)
je 0xf381
movq 0xed0d(%rip), %rdi      # 0x1e038
movslq -0x8(%rbp), %rcx
leaq 0x74aa(%rip), %rax      # 0x167e0
movq (%rax,%rcx,8), %rsi
callq 0x5500
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
callq 0x5060
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0xf363
cmpq $0x0, -0x18(%rbp)
je 0xf368
jmp 0xf623
jmp 0xf36a
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x10(%rbp)
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0xf311
xorl %eax, %eax
movl %eax, %edi
callq *0xecb5(%rip)           # 0x1e040
movq %rax, 0xed46(%rip)      # 0x1e0d8
cmpq $0x0, %rax
jne 0xf39d
jmp 0xf623
movq 0xeca4(%rip), %rax      # 0x1e048
movq 0xed2d(%rip), %rdi      # 0x1e0d8
movq 0xed26(%rip), %rcx      # 0x1e0d8
movq 0xe8(%rcx), %rcx
movq 0x10(%rcx), %rsi
movq 0xed14(%rip), %rcx      # 0x1e0d8
movq 0xe8(%rcx), %rcx
movq 0x60(%rcx), %r10
xorl %ecx, %ecx
movl $0x356, %r8d            # imm = 0x356
movl $0x1e0, %r9d            # imm = 0x1E0
xorl %edx, %edx
movl %ecx, %edx
movl $0x0, (%rsp)
movq $0x0, 0x8(%rsp)
movq %r10, 0x10(%rsp)
callq *%rax
movq %rax, 0xece1(%rip)      # 0x1e0e0
movq 0xec62(%rip), %rax      # 0x1e068
movq 0xeccb(%rip), %rdi      # 0x1e0d8
leaq 0x2c00(%rip), %rsi      # 0x12014
leaq -0x1c(%rbp), %rdx
leaq -0x20(%rbp), %rcx
leaq -0x24(%rbp), %r8
callq *%rax
cmpl $0x0, %eax
jne 0xf42c
jmp 0xf623
movq 0xec3d(%rip), %rax      # 0x1e070
movq 0xec9e(%rip), %rdi      # 0x1e0d8
leaq 0x2bd3(%rip), %rsi      # 0x12014
callq *%rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xf453
jmp 0xf623
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, 0xec88(%rip)      # 0x1e0e8
movq 0xec31(%rip), %rax      # 0x1e098
movq 0xec6a(%rip), %rdi      # 0x1e0d8
callq *%rax
movq 0xec09(%rip), %rax      # 0x1e080
movq 0xec5a(%rip), %rdi      # 0x1e0d8
movq 0xec5b(%rip), %rsi      # 0x1e0e0
movl $0x356, %edx            # imm = 0x356
movl $0x1e0, %ecx            # imm = 0x1E0
movl $0x18, %r8d
callq *%rax
movq %rax, 0xec52(%rip)      # 0x1e0f0
cmpq $0x0, %rax
jne 0xf4a9
jmp 0xf623
leaq -0xb0(%rbp), %rdi
xorl %esi, %esi
movl $0x80, %edx
callq 0x5080
movq 0xec15(%rip), %rax      # 0x1e0d8
movq 0xe8(%rax), %rax
movq 0x58(%rax), %rax
movq %rax, -0xa0(%rbp)
movq 0xebfc(%rip), %rax      # 0x1e0d8
movq 0xe8(%rax), %rax
movq 0x60(%rax), %rax
movq %rax, -0x98(%rbp)
movl $0x2, -0x90(%rbp)
movq 0xeb79(%rip), %rax      # 0x1e078
movq 0xebd2(%rip), %rdi      # 0x1e0d8
movq 0xebe3(%rip), %rsi      # 0x1e0f0
movl $0x1c, %edx
leaq -0xb0(%rbp), %rcx
callq *%rax
movq %rax, 0xebd6(%rip)      # 0x1e0f8
movq 0xebaf(%rip), %rax      # 0x1e0d8
movq 0xe8(%rax), %rax
movq 0x60(%rax), %rax
movq %rax, -0xa0(%rbp)
movq 0xeb96(%rip), %rax      # 0x1e0d8
movq 0xe8(%rax), %rax
movq 0x58(%rax), %rax
movq %rax, -0x98(%rbp)
movq 0xeb1d(%rip), %rax      # 0x1e078
movq 0xeb76(%rip), %rdi      # 0x1e0d8
movq 0xeb87(%rip), %rsi      # 0x1e0f0
movl $0x1c, %edx
leaq -0xb0(%rbp), %rcx
callq *%rax
movq %rax, 0xeb82(%rip)      # 0x1e100
cmpq $0x0, 0xeb72(%rip)      # 0x1e0f8
je 0xf592
cmpq $0x0, 0xeb70(%rip)      # 0x1e100
jne 0xf597
jmp 0xf623
movq 0xeac2(%rip), %rax      # 0x1e060
movq 0xeb33(%rip), %rdi      # 0x1e0d8
movq 0xeb34(%rip), %rsi      # 0x1e0e0
leaq 0x2a69(%rip), %rdx      # 0x1201c
callq *%rax
movq 0xeae4(%rip), %rax      # 0x1e0a0
movq 0xeb15(%rip), %rdi      # 0x1e0d8
movq 0xeb16(%rip), %rsi      # 0x1e0e0
movl $0x1, %edx
callq *%rax
movq 0xeae8(%rip), %rax      # 0x1e0c0
movq 0xeaf9(%rip), %rdi      # 0x1e0d8
leaq 0x2a4b(%rip), %rsi      # 0x12031
xorl %edx, %edx
callq *%rax
movq %rax, 0xeb17(%rip)      # 0x1e108
movq 0xead0(%rip), %rax      # 0x1e0c8
movq 0xead9(%rip), %rdi      # 0x1e0d8
movq 0xeada(%rip), %rsi      # 0x1e0e0
leaq 0xeafb(%rip), %rdx      # 0x1e108
movl $0x1, %ecx
callq *%rax
movq 0xeabd(%rip), %rax      # 0x1e0d8
movl 0x10(%rax), %eax
movl %eax, -0x4(%rbp)
jmp 0xf657
movq 0xea0e(%rip), %rdi      # 0x1e038
callq 0x55f0
movq $0x0, 0xe9fe(%rip) # 0x1e038
movq $0x0, 0xea93(%rip) # 0x1e0d8
movq $0x0, 0xea90(%rip) # 0x1e0e0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addq $0xd0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)