Function at 0x4030c0
Capabilities:
Get common file path
Log keystrokes via polling

Disassembly:
mov eax, dword [esp + 8]
sub esp, 0x24
push ebx
push ebp
mov ebp, dword [esp + 0x30]
xor ebx, ebx
cmp eax, ebx
mov dword [0x50856c], ebp
jne 0x4030ea
push ebp
call fcn.00401530
add esp, 4
test eax, eax
jne 0x40353a
push esi
push edi
push 0x50ad7c
push 0x7f0
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA]
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x50ad7c
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
mov esi, edi
mov edi, 0x50a57c
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
or ecx, 0xffffffff
xor eax, eax
mov edi, str.dgen.ini
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov edx, ecx
or ecx, 0xffffffff
mov esi, edi
mov edi, 0x50a57c
repne scasb al, byte es:[edi]
mov ecx, edx
shr ecx, 2
dec edi
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
push 0x50a57c
rep movsb byte es:[edi], byte [esi]
call fcn.00403ec0
mov al, byte [0x508d78]
add esp, 4
cmp al, bl
jne 0x403189
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x50ad7c
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
shr ecx, 2
mov edi, 0x508d78
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
cmp byte [0x508578], bl
jne 0x4031b6
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x50ad7c
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov edx, ecx
mov esi, edi
shr ecx, 2
mov edi, 0x508578
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
call fcn.00402ef0
call fcn.00402040
mov eax, dword [0x508564]
push eax
push ebp
call fcn.004057d0
mov eax, dword [esp + 0x48]
add esp, 8
cmp eax, ebx
je 0x4031f1
cmp byte [eax], bl
je 0x4031f1
push 1
push eax
mov ecx, 0x4ffc48
call fcn.00406cb0
push ebx
call fcn.004027d0
add esp, 4
call dword [sym.imp.WINMM.dll_timeGetTime]
mov ebp, dword [sym.imp.USER32.dll_PeekMessageA]
mov esi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov dword [0x50c88c], eax
push 1
push ebx
push ebx
push ebx
lea ecx, [esp + 0x28]
push ecx
call ebp
test eax, eax
je 0x403246
mov eax, dword [esp + 0x1c]
cmp eax, 0x12
je 0x40348b
cmp eax, 2
je 0x40348b
lea edx, [esp + 0x18]
push edx
call dword [sym.imp.USER32.dll_TranslateMessage]
lea eax, [esp + 0x18]
push eax
call dword [sym.imp.USER32.dll_DispatchMessageA]
jmp 0x403208
call fcn.00403550
cmp dword [0x4ec444], ebx
je 0x403208
push 0x70
call esi
test ah, 0x80
jne 0x4032a8
push 0x71
call esi
test ah, 0x80
jne 0x4032a8
push 0x72
call esi
test ah, 0x80
jne 0x4032a8
push 0x76
call esi
test ah, 0x80
jne 0x4032a8
push 0x74
call esi
test ah, 0x80
jne 0x4032a8
push 0x76
call esi
test ah, 0x80
jne 0x4032a8
push 0x77
call esi
test ah, 0x80
jne 0x4032a8
push 0x52
call esi
test ah, 0x80
jne 0x4032a8
push 0x50
call esi
test ah, 0x80
jne 0x4032a8
xor eax, eax
jmp 0x4032ad
mov eax, 1
cmp dword [0x50d1a8], ebx
mov dword [0x4ffc38], eax
jne 0x4033ac
cmp eax, ebx
je 0x4033ac
push 0x70
call esi
test ah, 0x80
je 0x4032e1
mov eax, dword [0x508570]
xor ecx, ecx
cmp eax, ebx
sete cl
mov dword [0x508570], ecx
push 0x71
call esi
test ah, 0x80
je 0x4032fc
mov eax, dword [0x51d3e4]
xor edx, edx
cmp eax, ebx
sete dl
mov dword [0x51d3e4], edx
push 0x72
call esi
test ah, 0x80
je 0x40331c
mov eax, dword [0x500414]
inc eax
and eax, 0x80000003
jns 0x403317
dec eax
or eax, 0xfffffffc
inc eax
mov dword [0x500414], eax
push 0x74
call esi
test ah, 0x80
je 0x403332
push ebx
push ebx
push ebx
push 1
call fcn.004025e0
add esp, 0x10
push 0x76
call esi
test ah, 0x80
je 0x403347
push ebx
push ebx
push ebx
push ebx
call fcn.004025e0
add esp, 0x10
push 0x77
call esi
test ah, 0x80
je 0x403362
mov eax, dword [0x4ec45c]
xor ecx, ecx
cmp eax, ebx
sete cl
mov dword [0x4ec45c], ecx
push 0x12
call esi
test ah, 0x80
je 0x40337e
push 0x52
call esi
test ah, 0x80
je 0x40337e
mov dword [0x508574], 1
push 0x12
call esi
test ah, 0x80
je 0x4033a2
push 0x50
call esi
test ah, 0x80
je 0x4033a2
mov eax, dword [0x5002f4]
xor edx, edx
cmp eax, ebx
sete dl
mov dword [0x5002f4], edx
call fcn.00402840
mov eax, dword [0x4ffc38]
push 0x73
mov dword [0x50d1a8], eax
call esi
test ah, 0x80
je 0x4033cf
mov edi, 0x14
push ebx
push ebx
push ebx
mov ecx, 0x4ffc48
call fcn.00408f00
dec edi
jne 0x4033bf
push 0x10
mov dword [esp + 0x3c], 0x3d4ccccd
call esi
test ah, 0x80
je 0x4033e8
mov dword [esp + 0x38], 0xbd4ccccd
push 0x56
call esi
test ah, 0x80
je 0x403401
fld dword [0x4ec44c]
fadd dword [esp + 0x38]
fstp dword [0x4ec44c]
push 0x55
call esi
test ah, 0x80
je 0x40341a
fld dword [0x4ec448]
fadd dword [esp + 0x38]
fstp dword [0x4ec448]
push 0x43
call esi
test ah, 0x80
je 0x403433
fld dword [0x4ec454]
fadd dword [esp + 0x38]
fstp dword [0x4ec454]
push 0x42
call esi
test ah, 0x80
je 0x40344c
fld dword [0x4ec450]
fadd dword [esp + 0x38]
fstp dword [0x4ec450]
cmp dword [0x50c9a0], ebx
je 0x403459
call fcn.00404a40
cmp dword [0x508574], ebx
je 0x403480
mov ecx, 0x4ffc48
call fcn.00406580
call fcn.00402550
call fcn.00402040
mov dword [0x50b5b0], ebx
call fcn.00402840
mov dword [0x508574], ebx
jmp 0x403208
call dword [sym.imp.WINMM.dll_timeGetTime]
mov dword [0x50c890], eax
call fcn.00405de0
push 1
call fcn.004027d0
add esp, 4
mov ecx, 0x4ffc48
call fcn.00406c40
call fcn.00402550
call fcn.00403090
mov eax, dword [0x50c890]
sub eax, dword [0x50c88c]
pop edi
mov dword [esp + 0x34], eax
pop esi
je 0x4034fd
mov ecx, dword [0x50c888]
mov dword [esp + 8], ecx
mov dword [esp + 0xc], ebx
fild qword [esp + 8]
sub esp, 8
fild dword [esp + 0x38]
fmul qword [0x4ea1c0]
fdivp st(1)
fstp qword [esp]
push str.Frames_per_second_was__.1f_n
call fcn.00401000
add esp, 0xc
push 0x50a57c
call fcn.00404780
mov eax, dword [0x50b584]
add esp, 4
cmp eax, ebx
je 0x40351c
push eax
call fcn.004e0a7a
add esp, 4
mov eax, dword [0x508568]
cmp eax, ebx
mov dword [0x50b584], ebx
je 0x403534
push eax
call fcn.004e0a7a
add esp, 4
mov dword [0x508568], ebx
pop ebp
xor eax, eax
pop ebx
add esp, 0x24
ret 0x10