Function at 0x180077890
Capabilities:
Log keystrokes via polling

Disassembly:
push rdi
sub rsp, 0xd0
mov rax, qword [0x18019d440]
xor rax, rsp
mov qword [rsp + 0x68], rax
mov qword [rsp + 0xe8], rbx
mov rdi, rcx
call fcn.180076dc0
lea rcx, str.instructional_buttons
call fcn.180029330
mov ecx, eax
mov dword [0x1801de6f5], eax
call fcn.180029380
test eax, eax
je 0x180077953
mov ecx, dword [0x1801de6f5]
call fcn.180041690
mov ecx, dword [0x1801de6f5]
lea rdx, str.CLEAR_ALL
call fcn.180029510
call fcn.18002ade0
mov ecx, dword [0x1801de6f5]
lea rdx, str.SET_CLEAR_SPACE
call fcn.180029510
mov ecx, reloc.WLDAP32.dll_Ordinal_200
call fcn.180041760
call fcn.18002ade0
mov ecx, dword [0x1801de6f5]
lea rdx, str.SET_MAX_WIDTH
call fcn.180029510
movss xmm0, dword [0x1801896b8]
call fcn.18002ae10
call fcn.18002ade0
mov ecx, dword [0x1801de6f5]
lea rdx, str.SET_DATA_SLOT_EMPTY
call fcn.180029510
call fcn.18002ade0
lea r8, [0x180122978]
mov byte [0x1801de6f4], 1
lea rdx, str.Open_Virtual_X
lea rcx, [0x1801de6f0]
call fcn.180041820
cmp byte [0x18019e970], 0
lea r8, [0x180122974]
mov rdx, qword [str.Mousse_Off]
lea rcx, [0x1801de6f0]
cmovne rdx, qword [str.Mousse_On]
call fcn.180041820
xor ebx, ebx
cmp byte [0x1801de6f4], bl
je 0x180077a0d
mov ecx, dword [0x1801de6f5]
call fcn.180029380
test eax, eax
je 0x180077a07
mov ecx, dword [0x1801de6f5]
lea rdx, str.DRAW_INSTRUCTIONAL_BUTTONS
call fcn.180029510
call fcn.18002ade0
mov ecx, dword [0x1801de6f5]
lea rdx, str.SET_BACKGROUND_COLOUR
call fcn.180029510
xor ecx, ecx
call fcn.180041760
xor ecx, ecx
call fcn.180041760
xor ecx, ecx
call fcn.180041760
lea ecx, [rbx + 0x50]
call fcn.180041760
call fcn.18002ade0
mov dword [0x1801de6f0], ebx
mov byte [0x1801de6f4], bl
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077a30
mov ecx, reloc.WS2_32.dll_WSACleanup
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077a30
mov al, 1
jmp 0x180077a32
xor eax, eax
mov byte [0x1801e46aa], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077a5b
mov ecx, 8
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077a5b
mov al, 1
jmp 0x180077a5d
xor eax, eax
mov byte [0x1801e46ab], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077a86
mov ecx, reloc.WS2_32.dll_listen
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077a86
mov al, 1
jmp 0x180077a88
xor eax, eax
mov byte [0x1801e46ac], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077ab1
mov ecx, Ordinal_41
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077ab1
mov al, 1
jmp 0x180077ab3
xor eax, eax
mov byte [0x1801e46ad], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077adc
mov ecx, Ordinal_41
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077adc
mov al, 1
jmp 0x180077ade
xor eax, eax
mov byte [0x1801e46ae], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077b07
mov ecx, Ordinal_41
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077b07
mov al, 1
jmp 0x180077b09
xor eax, eax
mov byte [0x1801e46af], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077b32
mov ecx, Ordinal_41
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077b32
mov al, 1
jmp 0x180077b34
xor eax, eax
mov byte [0x1801e46b0], al
call qword [sym.imp.USER32.dll_GetForegroundWindow]
cmp rax, qword [0x1801de850]
jne 0x180077b5d
mov ecx, reloc.WS2_32.dll_WSAStartup
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077b5d
mov al, 1
jmp 0x180077b5f
xor eax, eax
lea rcx, [0x18019e970]
mov byte [0x1801e46b1], al
call fcn.1800309d0
cmp dword [rdi + 0xe97], ebx
je 0x180077e8a
cmp byte [rdi], bl
je 0x180077e8a
mov eax, dword [rdi + 5]
lea rcx, reloc.WS2_32.dll_accept
movaps xmmword [rsp + 0xc0], xmm6
movaps xmmword [rsp + 0xb0], xmm7
movaps xmmword [rsp + 0xa0], xmm8
movaps xmmword [rsp + 0x90], xmm9
movaps xmmword [rsp + 0x80], xmm10
movaps xmmword [rsp + 0x70], xmm11
mov dword [rdi + 9], eax
call fcn.18002aed0
cmp byte [rdi + 0x4b], bl
je 0x180077bd4
call fcn.1800758c0
jmp 0x180077be0
mov rdx, qword [rdi + 0x3d84]
call fcn.1800754f0
mov ecx, 1
call fcn.180008a20
movss xmm4, dword [0x1801de9e1]
mov ecx, dword [0x1801df857]
movaps xmm2, xmm4
cmp ecx, dword [0x1801df853]
mov rdx, qword [0x1801df762]
cmovg ecx, dword [0x1801df853]
mov rax, rdx
mov r8, qword [0x1801df75a]
movss xmm1, dword [0x1801df6c1]
addss xmm1, dword [0x1801df722]
movss xmm8, dword [0x180189690]
mulss xmm2, dword [0x1801de9e5]
shr rax, 0x20
movd xmm0, ecx
mov rcx, r8
addss xmm1, dword [0x1801de9d5]
cvtdq2ps xmm0, xmm0
mov dword [rsp + 0x38], eax
mov dword [rsp + 0x30], edx
shr rcx, 0x20
mov dword [rsp + 0x28], ecx
mov dword [rsp + 0x20], r8d
mulss xmm0, dword [0x1801df74e]
movaps xmm3, xmm0
mulss xmm0, xmm8
mulss xmm3, xmm4
addss xmm1, xmm0
mulss xmm1, xmm4
mulss xmm4, dword [0x1801de9d1]
movaps xmm0, xmm4
call fcn.180039a90
mov ecx, 3
mov dword [0x1801df857], ebx
call fcn.180008a20
call qword [rdi + 0x1e3b]
mov eax, dword [0x1801df85b]
lea rbx, str.shop_arrows_upanddown
movss xmm6, dword [0x1801df7ff]
xorps xmm7, xmm7
cmp eax, 1
jne 0x180077cce
movss xmm7, dword [0x180189768]
jmp 0x180077cde
cmp eax, dword [0x1801df857]
jne 0x180077ced
movss xmm7, dword [0x180189784]
mulss xmm6, dword [0x1801896a0]
lea rbx, str.arrowright
lea rdx, [rsp + 0x60]
lea rcx, [rsp + 0x64]
call fcn.180076e00
movss xmm1, dword [0x1801df7fb]
movd xmm0, dword [rsp + 0x64]
movaps xmm3, xmm1
mov rdx, qword [0x1801df80b]
mov r8, qword [0x1801df803]
mov rax, rdx
movd xmm9, dword [rsp + 0x60]
mov rcx, r8
cvtdq2ps xmm0, xmm0
shr rax, 0x20
mov dword [rsp + 0x38], eax
mov dword [rsp + 0x30], edx
shr rcx, 0x20
cvtdq2ps xmm9, xmm9
mov dword [rsp + 0x28], ecx
mov dword [rsp + 0x20], r8d
mulss xmm1, xmm8
divss xmm9, xmm0
movss xmm0, dword [0x1801de9e1]
addss xmm1, dword [0x1801de9d9]
movaps xmm2, xmm0
mulss xmm3, xmm0
mulss xmm2, dword [0x1801de9e5]
mulss xmm1, xmm0
mulss xmm0, dword [0x1801de9d1]
mulss xmm9, xmm6
call fcn.180039a90
movss xmm10, dword [0x1801df7fb]
lea rcx, str.commonmenu
movss xmm11, dword [0x1801de9d1]
mulss xmm10, xmm8
movups xmm8, xmmword [0x1801df7eb]
addss xmm10, dword [0x1801de9d9]
call fcn.180039a40
lea rcx, str.commonmenu
test eax, eax
je 0x180077e3c
movss xmm2, dword [0x1801de9e1]
movdqa xmm0, xmm8
psrldq xmm0, 0xc
movaps xmm4, xmm2
movd dword [rsp + 0x50], xmm0
movdqa xmm1, xmm8
mulss xmm10, xmm2
movdqa xmm0, xmm8
mov rdx, rbx
mulss xmm9, xmm2
psrldq xmm1, 8
movaps xmm3, xmm10
movd dword [rsp + 0x48], xmm1
psrldq xmm0, 4
movd dword [rsp + 0x40], xmm0
movd dword [rsp + 0x38], xmm8
movss dword [rsp + 0x30], xmm7
mulss xmm4, xmm6
mulss xmm2, xmm11
movss dword [rsp + 0x28], xmm4
movss dword [rsp + 0x20], xmm9
call fcn.180039bb0
jmp 0x180077e41
call fcn.1800399f0
movss xmm0, dword [0x1801de9d9]
addss xmm0, dword [0x1801df7fb]
movaps xmm11, xmmword [rsp + 0x70]
movaps xmm10, xmmword [rsp + 0x80]
movaps xmm9, xmmword [rsp + 0x90]
movaps xmm8, xmmword [rsp + 0xa0]
movaps xmm7, xmmword [rsp + 0xb0]
movaps xmm6, xmmword [rsp + 0xc0]
movss dword [0x1801de9d9], xmm0
mov rbx, qword [rdi + 0xdca]
mov rbx, qword [rbx]
cmp byte [rbx + 0x19], 0
jne 0x180077f59
mov qword [rsp + 0xf0], rbp
mov qword [rsp + 0xf8], rsi
nop
mov ebp, dword [rbx + 0x20]
mov rsi, qword [rbx + 0x28]
call qword [sym.imp.KERNEL32.dll_GetTickCount64]
movsxd rdx, dword [rdi + 0x5cfa]
sub rax, rdx
movsxd rdx, dword [rdi + 0x5cf6]
cmp rax, rdx
jbe 0x180077ef4
mov ecx, ebp
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x180077ef4
cmp byte [rsi], 0
sete al
mov byte [rsi], al
call qword [sym.imp.KERNEL32.dll_GetTickCount64]
mov dword [rdi + 0x5cfa], eax
mov rax, qword [rbx + 0x10]
cmp byte [rax + 0x19], 0
je 0x180077f20
mov rax, qword [rbx + 8]
cmp byte [rax + 0x19], 0
jne 0x180077f1b
cmp rbx, qword [rax + 0x10]
jne 0x180077f1b
mov rbx, rax
mov rax, qword [rax + 8]
cmp byte [rax + 0x19], 0
je 0x180077f08
mov rbx, rax
jmp 0x180077f3f
mov rcx, qword [rax]
mov rbx, rax
cmp byte [rcx + 0x19], 0
jne 0x180077f3f
nop dword [rax]
mov rax, qword [rcx]
mov rbx, rcx
mov rcx, rax
cmp byte [rax + 0x19], 0
je 0x180077f30
cmp byte [rbx + 0x19], 0
je 0x180077eb0
mov rsi, qword [rsp + 0xf8]
mov rbp, qword [rsp + 0xf0]
mov eax, dword [rdi + 0x27]
mov rbx, qword [rsp + 0xe8]
mov dword [rdi + 0x5cd4], 0
mov word [rdi + 0x5cd8], 0
test eax, eax
jne 0x180077f83
mov word [rdi + 0x25], 1
jmp 0x180077f8e
cmp eax, 1
jne 0x180077f8e
mov word [rdi + 0x25], 0x100
mov rcx, qword [rsp + 0x68]
xor rcx, rsp
call fcn.1800d0330
add rsp, 0xd0
pop rdi
ret