define  @Menuet@OpenFileDialog$qr22Menuet@TOpenFileStruct
  push ebx
  push esi
  push edi
  push ebp
  call @Menuet@GetThreadData$qv
  mov  ebp,eax
  mov  ebx,[esp+20]
  cmp  dword [ebx+4],0
  jnz  Menuet_open_file_dlg_str
  mov  esi,7
  jmp  Menuet_open_file_dlg_alloc
Menuet_open_file_dlg_str:
  cld
  mov  edi,[ebx+4]
  mov  ecx,-1
  xor  al,al
  repnz scas byte [edi]
  not  ecx
  mov  esi,ecx
Menuet_open_file_dlg_alloc:
  push esi
  call @@Menuet@Alloc$qui
  pop  ecx
  test eax,eax
  jz   Menuet_open_file_dlg_ret
  mov  ecx,esi
  dec  ecx
  push esi
  push ecx
  push eax
  mov  dword [ebx],-1
  cmp  dword [ebx+4],0
  jnz  Menuet_open_file_dlg_copy
  mov  dword [eax],0x2F64722F
  mov  word [eax+4],0x2F31
  jmp  Menuet_open_file_dlg_redraw
Menuet_open_file_dlg_copy:
  cld
  mov  ecx,esi
  mov  esi,[ebx+4]
  mov  edi,eax
  rep movs byte [edi],[esi]
Menuet_open_file_dlg_redraw:
  mov  eax,12
  mov  ebx,1
  int  0x40
  xor  eax,eax
  mov  ebx,[ebp+MENUET_THREAD_DATA_X*4]
  mov  ecx,[ebp+MENUET_THREAD_DATA_Y*4]
  mov  edx,[ebp+MENUET_THREAD_DATA_C_WINDOW*4]
  mov  esi,[ebp+MENUET_THREAD_DATA_C_HEADER*4]
  mov  edi,[ebp+MENUET_THREAD_DATA_C_BORDER*4]
  int  0x40
  mov  eax,4
  mov  ebx,0x00070007
  mov  ecx,[ebp+MENUET_THREAD_DATA_C_TITLE*4]
  mov  edx,Menuet_open_file_dlg_name
  mov  esi,Menuet_open_file_dlg_name_end - Menuet_open_file_dlg_name
  int  0x40
  mov  eax,4
  mov  ebx,0x000C001E
  xor  ecx,ecx
  mov  edx,[esp]
  mov  esi,[esp+4]
  int  0x40
  mov  eax,12
  mov  ebx,2
  int  0x40
Menuet_open_file_dlg_loop:
  mov  eax,10
  int  0x40
  dec  eax
  jz   Menuet_open_file_dlg_redraw
  dec  eax
  jz   Menuet_open_file_dlg_key
  dec  eax
  jz   Menuet_open_file_dlg_end
  jmp  Menuet_open_file_dlg_loop
Menuet_open_file_dlg_key:
  xor  edi,edi
Menuet_open_file_dlg_key_loop:
  mov  eax,2
  int  0x40
  test al,al
  jnz  Menuet_open_file_dlg_key_end
  cmp  ah,27
  jz   Menuet_open_file_dlg_end
  cmp  ah,13
  jz   Menuet_open_file_dlg_apply
  cmp  ah,8
  jz   Menuet_open_file_dlg_key_bsp
  cmp  ah,32
  jna  Menuet_open_file_dlg_key_loop
  mov  ebx,[esp+4]
  cmp  ebx,[esp+8]
  jb   Menuet_open_file_dlg_key_any
  lea  esi,[ebx+2*ebx]
  shr  esi,1
  inc  esi
  push eax
  push esi
  push dword [esp+8]
  call @@Menuet@ReAlloc$qpvui
  add  esp,8
  mov  ecx,eax
  pop  eax
  test ecx,ecx
  jz   Menuet_open_file_dlg_key
  mov  [esp+8],esi
  mov  [esp],ecx
Menuet_open_file_dlg_key_any:
  mov  esi,ebx
  add  esi,[esp]
  mov  byte [esi],ah
  inc  ebx
  mov  edi,1
  mov  [esp+4],ebx
  jmp  Menuet_open_file_dlg_key_loop
Menuet_open_file_dlg_key_bsp:
  mov  eax,[esp+4]
  test eax,eax
  jz   Menuet_open_file_dlg_key_loop
  dec  eax
  mov  edi,1
  mov  [esp+4],eax
  jmp  Menuet_open_file_dlg_key_loop
Menuet_open_file_dlg_key_end:
  test edi,edi
  jnz  Menuet_open_file_dlg_redraw
  jmp  Menuet_open_file_dlg_loop
Menuet_open_file_dlg_apply:
  mov  eax,[esp+4]
  inc  eax
  mov  [esp+8],eax
  push eax
  push dword [esp+4]
  call @@Menuet@ReAlloc$qpvui
  add  esp,8
  test eax,eax
  jz   Menuet_open_file_dlg_end
  mov  eax,[esp]
  mov  esi,eax
  add  eax,[esp+4]
  mov  byte [eax],0
  add  esp,12
  mov  ebx,[esp+20]
  mov  dword [ebx],2
  push dword [ebx+4]
  call @@Menuet@Free$qpv
  pop  ecx
  mov  [ebx+4],esi
  jmp  Menuet_open_file_dlg_invalidate
Menuet_open_file_dlg_end:
  call @@Menuet@Free$qpv
  add  esp,12
  mov  ebx,[esp+20]
  mov  dword [ebx],1
Menuet_open_file_dlg_invalidate:
  push ebp
  push dword 1
  call @@Menuet@Invalidate$qippv
  add  esp,8
Menuet_open_file_dlg_ret:
  pop  ebp
  pop  edi
  pop  esi
  pop  ebx
  ret
Menuet_open_file_dlg_name:
  db   'Open file'
Menuet_open_file_dlg_name_end:
enddef