;*****************************************************************************
; Open Dialog - for Kolibri OS
; Copyright (c) 2009-2013, Marat Zakiyanov aka Mario79, aka Mario
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;	 * Redistributions of source code must retain the above copyright
;	   notice, this list of conditions and the following disclaimer.
;	 * Redistributions in binary form must reproduce the above copyright
;	   notice, this list of conditions and the following disclaimer in the
;	   documentation and/or other materials provided with the distribution.
;	 * Neither the name of the <organization> nor the
;	   names of its contributors may be used to endorse or promote products
;	   derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
;---------------------------------------------------------------------
;Some documentation for memory
;
;area name db 'FFFFFFFF_open_dialog',0 ; FFFFFFFF = PID
;
; communication area data
; flag	; +0
; dw 0	 ; 0 - empty, 1 - file for open, 2 -folder for open,
;	   3 - cancel, 4 - path=name of area 6822.
;
; type of dialog:  0-Open, 1-Save, 2-Dir
; dw 0 ; +2
;
; window X size ; +4
; dw 0
;
; window X position ; +6 
; dw 0
;
; window y size ; +8
; dw 0
;
; window Y position ; +10
; dw 0
;
; OpenDialog WINDOW SLOT ; +12
; dd 0
;
; file_path ; +16
; rb 3824 ; path to file
;
; file name ; +3840
; rb 256
;
; filtration flag ; +4096
; dd 0 ; flag 0 - no filtration,  1 - filtering
;
; area for storage of filtering values ; +4100
; rb 4092
;---------------------------------------------------------------------
	use32
	org	0x0

	db 'MENUET01'
	dd 0x01
	dd START
	dd IM_END
	dd I_END
	dd stacktop
	dd param
	dd path

include '../../macros.inc'
;define __DEBUG__ 1
;define __DEBUG_LEVEL__ 1
;include '../../debug-fdo.inc'
include '../../develop/libraries/box_lib/load_lib.mac'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
;include 'macros.inc'
;include 'load_lib.mac'
;include 'box_lib.mac'
@use_library

x_minimal_size equ 350
y_minimal_size equ 250
;---------------------------------------------------------------------
;---------------------------------------------------------------------
START:
	mcall	68,11
	mcall	66,1,1
	mcall	40,0x27
	call	get_communication_area
	
	call	get_active_pocess

load_libraries	l_libs_start,end_l_libs
	test	eax,eax
	jnz	button.exit
; initialize sort
	push	dword 1
	call	dword [sort_init]
; unpack deflate
	mov	eax,[unpack_DeflateUnpack2]
	mov	[deflate_unpack],eax

	mov	esi,start_pach
	mov	edi,previous_dir_path
	call	copy_dir_name.1
	
	call	load_root_directory
	call	load_start_directory
	call	sort_directory
	call	load_icons
	call	convert_icons
	call	load_ini
	call	calc_ini
	jmp	red_1
;---------------------------------------------------------------------
red:
	call	control_minimal_window_size
red_1:
	call	draw_window
;---------------------------------------------------------------------
still:
	mcall	10
	cmp	eax,1
	je	red
	cmp	eax,2
	je	key
	cmp	eax,3
	je	button
	cmp	eax,6
	je	mouse
	jmp	still
;---------------------------------------------------------------------
control_minimal_window_size:
	pusha
	call	get_window_param
	test	[window_status],10b
	jnz	.end	;red_1
	test	[window_status],100b
	jnz	.end	;red_1
	test	[window_status],1b
	jnz	.end	;red_1
	mov	esi,-1
	mov	eax,procinfo
	mov	eax,[eax+46]
	cmp	eax,dword y_minimal_size ;200
	jae	@f
	mov	esi,dword y_minimal_size ;200
	mcall	67,-1,ebx,ebx
@@:
	mov	edx,-1
	mov	eax,procinfo
	mov	eax,[eax+42]
	cmp	eax,dword x_minimal_size ;300
	jae	@f
	mov	edx,dword x_minimal_size ;300
	mcall	67,-1,ebx,,ebx
@@:
.end:
	popa
	ret
;---------------------------------------------------------------------
key:
	mov	al,[focus_pointer]
	test	al,al
	jne	key_ASCII
	mcall	2
	xor	ebx,ebx
	cmp	[extended_key],1
	je	.extended_key
	test	al,al
	jnz	still
	cmp	ah,0xE0
	jne	@f
	mov	[extended_key],1
	jmp	still
@@:
	cmp	ah,72	; arrow up
	je	.2
	cmp	ah,80	; arrow down
	je	.1
	cmp	ah,28	; Enter
	je	.7
	cmp	ah,1	; Esc
	je	button.exit
	cmp	ah,14	; Backspace
	je	button.exit_dir
	cmp	ah,187	; F1
	je	select_disk
	cmp	ah,188	; F2
	je	select_sort
	cmp	ah,189	; F3
	je	select_filter
	cmp	ah,19	; R
	je	button.reload_dir
	cmp	ah,42
	je	key_shift_up
	cmp	ah,54
	je	key_shift_up
	cmp	ah,170
	je	key_shift_down
	cmp	ah,182
	je	key_shift_down
	cmp	ah,29
	je	key_ctrl_up
	cmp	ah,157
	je	key_ctrl_down
	cmp	ah,56
	je	key_alt_up
	cmp	ah,184
	je	key_alt_down
	cmp	ah,206	; NumPad+ Up
	je	NumPad_plus_Up
	cmp	ah,202	; NumPad- Up
	je	NumPad_minus_Up
	cmp	ah,183	; NumPad* Up
	je	NumPad_invert_Up
	cmp	ah,158
	je	symbol_a_up
	cmp	ah,15	; Tab down
	je	change_focus_area_press_Tab_key
	cmp	ah,143	; Tab up
	je	change_focus_area_check_Tab_key
; compare for "1,2,3,4,5,6,7,8,9,0,(-),(=)"
	cmp	ah,2
	jb	still
	cmp	ah,13
	jbe	.12
; compare for "q,w,e,r,t,y,u,i,o,p,([),(])"	
	cmp	ah,16
	jb	still
	cmp	ah,27
	jbe	.12
; compare for "a,s,d,f,g,h,j,k,l,(;),('),(`)"	
	cmp	ah,30
	jb	still
	cmp	ah,41
	jbe	.12
; compare for "(\),z,x,c,v,b,n,m,(,),(.),(/)"	
	cmp	ah,43
	jb	still
	cmp	ah,53
	jbe	.12	
	jmp	still
.extended_key:
	mov	[extended_key],0
	cmp	ah,80	; arrow down
	je	.1
	cmp	ah,72	; arrow up
	je	.2
	cmp	ah,81	; PageDown
	je	.3
	cmp	ah,73	; PageUp
	je	.4
	cmp	ah,71	; Home
	je	.5
	cmp	ah,79	; End
	je	.6
	cmp	ah,28	; Enter
	je	.7
	cmp	ah,82	; Insert
	je	.8
	
	cmp	ah,29
	je	key_ctrl_up
	cmp	ah,157
	je	key_ctrl_down
	cmp	ah,56
	je	key_alt_up
	cmp	ah,184
	je	key_alt_down
	jmp	still
;---------------------------------
.12:
	inc	ebx	; 12 - Search with key
;---------------------------------
.11:
	inc	ebx	; 11 - Invert Mark
;---------------------------------
.10:
	inc	ebx	; 10 - Unmark All
;---------------------------------
.9:
	inc	ebx	; 9 - Mark All
;---------------------------------
.8:
	inc	ebx	; 8 - Insert (Mark)
;---------------------------------
.7:
	inc	ebx	; 7 - Enter
;---------------------------------
.6:
	inc	ebx	; 6 - End
;---------------------------------
.5:
	inc	ebx	; 5 - Home
;---------------------------------
.4:
	inc	ebx	; 4 - PageUp
;---------------------------------
.3:
	inc	ebx	; 3 - PageDown
;---------------------------------
.2:
	inc	ebx	; 2 - arrow up
;---------------------------------
.1:
	inc	ebx	; 1 - arrow down
;---------------------------------
	call	.key_action
	
;	movzx	ecx,word [file_browser_data_1.start_draw_cursor_line]
;	mcall	47,0x80000,,<50,0>,0x40000000,0xffffff
;	movzx	ecx,word [file_browser_data_1.size_y]
;	mcall	47,0x80000,,<150,0>,0x40000000,0xffffff

	mov	eax,file_browser_data_1.mouse_keys_delta
	cmp	[eax],dword 3
	jne	still
	xor	ebx,ebx
	mov	[eax],ebx
	call	load_next_dir
	jmp	still
;-------------------------------------------------------
.key_action:
	mov	[file_browser_data_1.key_action],bx
	shr	ax,8
	mov	[file_browser_data_1.key_action_num],ax

	push	dword file_browser_data_1
	call	[FileBrowser_key]

	call	draw_open_button_label

	cmp	[file_browser_data_1.draw_scroll_bar],0
	je	@f
	call	draw_scrollbar1
	mov	[file_browser_data_1.draw_scroll_bar],0
@@:
	ret
;---------------------------------------------------------------------
change_focus_area_Tab_key_ASCII:
	xor	eax,eax
	inc	eax
	mov	[Tab_key_block],al
	jmp	change_focus_area
;---------------------------------------------------------------------
change_focus_area_press_Tab_key:
	cmp	[open_dialog_type],1
	jne	still
	mov	al,[Tab_key_block]
	test	al,al
	jnz	still
	xor	eax,eax
	inc	eax
	mov	[Tab_key],al
	jmp	still
;---------------------------------------------------------------------
change_focus_area_check_Tab_key:
	cmp	[open_dialog_type],1
	jne	still
	xor	eax,eax
	mov	[Tab_key_block],al
	mov	al,[Tab_key]
	test	al,al
	jz	still
	xor	eax,eax
	mov	[Tab_key],al
;---------------------------------------------------------------------
change_focus_area:
	mov	al,[focus_pointer]
	inc	al
	and	al,1
	mov	[focus_pointer],al
.1:
	mov	edi,edit1
	test	al,al
	jne	@f
	mov	[file_browser_data_1.select_panel_counter],1
	and	[edi+44],dword 0xFFFFFFFD	; ed_focus
	mov	[edi+12],dword 0xffffff ; color white
	call	draw_draw_file_browser1
	mcall	66,1,1
	jmp	still
@@:
	mov	[file_browser_data_1.select_panel_counter],0
	or	[edi+44],dword ed_focus
	mov	[edi+12],dword 0xffffb0 ; color yellow
	call	draw_draw_file_browser1
	mcall	66,1,0
	jmp	still
;---------------------------------------------------------------------
key_ASCII:
	mcall	2
	cmp	ah,9
	je	change_focus_area_Tab_key_ASCII
	cmp	ah,13
	je	.13
	cmp	ah,27
	je	button.exit
	push	dword name_editboxes
	call	[edit_box_key]
	jmp	still
.13:
;	cmp [open_dialog_type],2	; Select dir
;	je	file_no_folder
;	cmp	[open_dialog_type],1	; Save file
;	jne	user_selected_name_action	; load_dir
;	inc	[open_dialog_type]
	jmp	file_no_folder
;.load_dir:
;	mov	[file_browser_data_1.select_panel_counter],1
;	xor	eax,eax
;	mov	[focus_pointer],al
;	mcall	66,1,1

;	xor	eax,eax
;	mov	esi,dir_path
;	cld
;@@:
;	lodsb
;	test	al,al
;	jne	@r
;	sub	esi,2
;	cmp	[esi],byte '/'
;	jne	@f
;	xor	eax,eax
;	mov	[esi],al
;@@:
;	call	load_next_dir.1
;	jmp	still
;---------------------------------------------------------------------
user_selected_name_action:
	mov	eax,[communication_area]
	test	eax,eax
	jnz	@f
	call	control_minimal_window_size
	call	draw_window
	ret
@@:
	add	eax,16	;12
;copy_path	user_selected_name,dir_path,eax,0
	mov	esi,dir_path
	mov	edi,eax
	call	copy_dir_name
	mov	[edi-1],byte '/'
	mov	esi,user_selected_name
	call	copy_dir_name
	
	mov	eax,[communication_area]
	mov	[eax],word 1
	jmp	button.exit
;---------------------------------------------------------------------	
select_disk:
	call	check_alt
.1:
	call	load_root_directory
	xor	eax,eax
	mov	[menu_data_1.ret_key],eax

	push	dword menu_data_1
	call	[menu_bar_activate]

	call	clear_control_key_flag

	mov	eax,[menu_data_1.ret_key]
	mov	[menu_data_1.ret_key],dword 0
	cmp	eax,1
	je	select_filter.1

	cmp	eax,2
	je	select_sort.1

	cmp	[menu_data_1.click],dword 1
	jne	still

	cmp	[menu_data_1.cursor_out],dword 0
	jne	analyse_out_menu_1
	jmp	still
;---------------------------------------------------------------------
select_sort:
	call	check_alt
.1:
	xor	eax,eax
	mov	[menu_data_2.ret_key],eax

	push	dword menu_data_2
	call	[menu_bar_activate]

	call	clear_control_key_flag

	mov	eax,[menu_data_2.ret_key]
	mov	[menu_data_2.ret_key],dword 0
	cmp	eax,1
	je	select_disk.1

	cmp	eax,2
	je	select_filter.1


	cmp	[menu_data_2.click],dword 1
	jne	still

	cmp	[menu_data_2.cursor_out],dword 0
	jne	analyse_out_menu_2
	jmp	still
;---------------------------------------------------------------------
select_filter:
	call	check_alt
.1:
	xor	eax,eax
	mov	[menu_data_3.ret_key],eax

	push	dword menu_data_3
	call	[menu_bar_activate]

	call	clear_control_key_flag

	mov	eax,[menu_data_3.ret_key]
	mov	[menu_data_3.ret_key],dword 0
	cmp	eax,1
	je	select_sort.1

	cmp	eax,2
	je	select_disk.1


	cmp	[menu_data_3.click],dword 1
	jne	still

	cmp	[menu_data_3.cursor_out],dword 0
	jne	analyse_out_menu_3
	jmp	still
;---------------------------------------------------------------------
symbol_a_up:
NumPad_plus_Up:
	call	check_ctrl
	jmp	key.9
;---------------------------------------
NumPad_minus_Up:
	call	check_ctrl
	jmp	key.10
;---------------------------------------
NumPad_invert_Up:
	call	check_ctrl
	jmp	key.11
;---------------------------------------	
check_alt:
	xor	eax,eax
	mov	al,[alt_flag]
	test	eax,eax
	jz	@f
	xor	ebx,ebx
	ret
@@:
	add	esp,4
	jmp	still
;---------------------------------------	
check_ctrl:
	xor	eax,eax
	mov	al,[ctrl_flag]
	test	eax,eax
	jz	@f
	xor	ebx,ebx
	ret
@@:
	add	esp,4
	jmp	still
;---------------------------------------------------------------------
clear_control_key_flag:
	xor	eax,eax
	mov	[shift_flag],al
	mov	[ctrl_flag],al
	mov	[alt_flag],al
	ret
;---------------------------------------------------------------------
key_shift_up:
	mov	[shift_flag],1
	jmp	still
;---------------------------------------------------------------------
key_shift_down:
	mov	[shift_flag],0
	jmp	still
;---------------------------------------------------------------------
key_ctrl_up:
	mov	[ctrl_flag],1
	jmp	still
;---------------------------------------------------------------------
key_ctrl_down:
	mov	[ctrl_flag],0
	jmp	still
;---------------------------------------------------------------------
key_alt_up:
	mov	[alt_flag],1
	jmp	still
;---------------------------------------------------------------------
key_alt_down:
	mov	[alt_flag],0
	jmp	still
;---------------------------------------------------------------------
button:
	mcall	17
	cmp	ah,6
	je	.reload_dir_1
	cmp	ah,4
	je	.open_dir_or_file
	cmp	ah,3
	je	.exit
	cmp	ah,2
	je	.exit_dir
	cmp	ah,1
	jne	still
.exit:
	mov	eax,[communication_area]
	test	eax,eax
	jz	@f
	cmp	[eax],word 1
	je	@f
	mov	[eax],word 3
@@:
	mov	eax,[N_error]
	test	eax,eax
	jz	@f
	call	start_error_window_thread
@@:
	call	get_window_param
	mov	ebx,[communication_area]
	mov	ecx,procinfo
;	mov	eax,[window_x]
	mov	eax,[ecx+34]
	shl	eax,16
	add	eax,[ecx+42]
	mov	[ebx+4],eax
;	mov	eax,[window_y]
	mov	eax,[ecx+38]
	shl	eax,16
	add	eax,[ecx+46]
	mov	[ebx+8],eax

	mcall	-1
;---------------------------------------------------------------------
.reload_dir:
	cmp	[ctrl_flag],bl
	je	key.12 ; Just symbol 'R' or 'r'
.reload_dir_1:
	call	load_next_dir.1
	jmp	still
;---------------------------------------------------------------------
.exit_dir:
	call	load_next_dir.exit_dir
	jmp	still
;---------------------------------------------------------------------
.open_dir_or_file:
	cmp	[open_dialog_type],0	;Open file
	jne	@f

	mov	eax,[file_browser_data_1.folder_data]
	mov	eax,[eax+4]
	test	eax,eax
	jz	button.exit
@@:
	cmp	[open_dialog_type],2	;Select dir
	je	file_no_folder
	
	cmp	[open_dialog_type],1	;Save file
	jne	@f

	mov	al,[focus_pointer]
	test	al,al
	jne	file_no_folder	
@@:
	xor	ebx,ebx
	jmp	key.7
;---------------------------------------------------------------------
thread_start:
	mov	eax,[N_error]
	cmp	al,1
	jne	@f
	mov	[N_error],load_ini_error_type
	mov	[error_path],file_name
	jmp	.error_type
@@:
	cmp	al,2
	jne	@f
	mov	[N_error],load_icons_error_type
	mov	[error_path],file_name
	jmp	.error_type
@@:
	cmp	al,3
	jne	@f
	mov	[N_error],memory_free_error_type
	xor	eax,eax
	mov	[error_path],eax
	mov	[error_type],eax
	jmp	.red
@@:
	cmp	al,4
	jne	@f
	mov	[N_error],memory_get_error_type
	xor	eax,eax
	mov	[error_path],eax
	mov	[error_type],eax
	jmp	.red
@@:
	cmp	al,5
	jne	@f
	mov	[N_error],load_directory_error_type
	mov	[error_path],dir_path
	jmp	.error_type
@@:
	cmp	al,6
	jne	.button
	mov	[N_error],convert_icons_error_type
	mov	[error_path],file_name
	xor	eax,eax
	mov	[error_type],eax
	jmp	.red
.error_type:
	mov	eax,[error_type]
	shl	eax,2
	add	eax,error_fs_text_pointers
	mov	eax,[eax]
	mov	[error_type],eax
.red:
	call	draw_error_window
.still:
	mcall	10
	cmp	eax,1
	je	.red
	cmp	eax,2
	je	.key
	cmp	eax,3
	je	.button
	jmp	.still
.key:
	mcall	2
	jmp	.still
.button:
	mcall	-1
	jmp	.still
;---------------------------------------------------------------------
draw_error_window:
	mcall	12,1
	mcall	0,[error_window_x],[error_window_y],0x03ff0000
	call	type_title
	mcall	4,<10,30>,0x90ffffff,[N_error]
	mov	eax,[error_path]
	test	eax,eax
	jz	@f
	mcall	4,<10,50>,,[error_path]
@@:
	mov	eax,[error_type]
	test	eax,eax
	jz	@f
	mcall	4,<10,70>,,[error_type]
@@:
	mcall	12,2
	ret
;---------------------------------------------------------------------
start_error_window_thread:
	mcall	9,procinfo,-1
	mov	eax,[ebx+46]
	shr	eax,1
	add	eax,[ebx+38]
	sub	eax,40
	mov	[error_window_y+2],ax
	mov	eax,[ebx+42]
	shr	eax,1
	add	eax,[ebx+34]
	sub	eax,125
	mov	[error_window_x+2],ax
	mcall	51,1,thread_start,thread_stack
	ret
;---------------------------------------------------------------------
mouse:
	mcall	18,7
	cmp	[active_process],eax
	jne	still

	mcall	37,7
	mov	[mouse_scroll_data],eax

	mcall	37,1
	mov	[mouse_position],eax

	cmp	[scroll_bar_data_vertical.delta2],0
	jne	.scrollbar

	mov	[file_browser_data_1.select_flag],0

	push	dword file_browser_data_1
	call	[FileBrowser_mouse]

	call	draw_open_button_label

	mov	eax,file_browser_data_1.mouse_keys_delta
	cmp	[eax],dword 3
	jne	.check_focus	; scrollbar
	mov	[eax],dword 0
	call	load_next_dir
	jmp	still
;---------------------------------------------------
.check_focus:
	mov	ebx,[file_browser_data_1.select_flag]
	test	ebx,ebx
	jz	.scrollbar	;@f
	mov	al,[focus_pointer]
	test	al,al
	jz	.scrollbar
	xor	eax,eax
	mov	[focus_pointer],al
	jmp	change_focus_area.1
;---------------------------------------------------
.scrollbar:
	mov	eax,[scroll_bar_data_vertical.max_area]
	cmp	eax,[scroll_bar_data_vertical.cur_area]
	jbe	.menu_bar	;still
	
	push	dword scroll_bar_data_vertical
	call	[scrollbar_ver_mouse]
	
	cmp	[scroll_bar_data_vertical.redraw],0
	je	.menu_bar	;still
	mov	[scroll_bar_data_vertical.redraw],0
.draw:
	call	draw_draw_file_browser2
	jmp	still

;---------------------------------------------------
.menu_bar:
	cmp	[scroll_bar_data_vertical.delta2],0
	jne	still

.menu_bar_1:
	call	.set_mouse_flag
@@:
	push	dword menu_data_1
	call	[menu_bar_mouse]

	cmp	[menu_data_1.click],dword 1
	jne	.menu_bar_2

	cmp	[menu_data_1.cursor_out],dword 0
	jne	select_disk.1	;analyse_out_menu_1
	jmp	.menu_bar_1
;--------------------------------------------
.menu_bar_2:
	push	dword menu_data_2
	call	[menu_bar_mouse]

	cmp	[menu_data_2.click],dword 1
	jne	.menu_bar_3

	cmp	[menu_data_2.cursor_out],dword 0
	jne	analyse_out_menu_2
	jmp	.menu_bar_1
;---------------------------------------------------
.menu_bar_3:
	push	dword menu_data_3
	call	[menu_bar_mouse]

	cmp	[menu_data_3.click],dword 1
	jne	.check_editboxes

	cmp	[menu_data_3.cursor_out],dword 0
	jne	analyse_out_menu_3
	jmp	.menu_bar_1
;---------------------------------------------------
.check_editboxes:
	cmp	[open_dialog_type],1
	jne	.check_scroll_event
	mov	eax,[edit1+44]
	and	eax,10b
	push	dword name_editboxes
	call	[edit_box_mouse]
	mov	ebx,[edit1+44]
	and	ebx,10b
	cmp	eax,ebx
	je	.check_scroll_event
	mov	al,[focus_pointer]
	test	al,al
	jnz	.check_scroll_event
	xor	eax,eax
	test	ebx,10b
	jz	@f
	inc	eax
@@:
	mov	[focus_pointer],al
	jmp	change_focus_area.1
;---------------------------------------------------
.check_scroll_event:
	mov	eax,[mouse_position]
	xor	ebx,ebx
	mov	bx,ax	; EBX mouse y
	shr	eax,16	; EAX mouse x
	
	mov	cx,[file_browser_data_1.start_x]
	mov	dx,[file_browser_data_1.start_y]

	cmp	ax,cx
	jb	.mouse_next	; min x

	cmp	bx,dx
	jb	.mouse_next	; min y

	add	cx,[file_browser_data_1.size_x]
	cmp	ax,cx	
	ja	.mouse_next	; max x

	add	dx,[file_browser_data_1.size_y]
	cmp	bx,dx
	ja	.mouse_next	; max y

	xor	ecx,ecx
	xor	ebx,ebx
	mov	eax,[mouse_scroll_data]
	test	eax,eax
	jz	.mouse_next
	test	ax,0x8000
	jnz	.decr
	shr	eax,16
	test	ax,0x8000
	jnz	.decr_1

	mov	cx,[mouse_scroll_data.vertical]
	test	ecx,ecx
	jnz	@f
	mov	cx,[mouse_scroll_data.horizontal]
	test	ecx,ecx
	jz	.mouse_next
@@:
	mov	ebx,1
@@:
	push	ebx ecx
	call	key.key_action
	pop	ecx ebx
	dec	ecx
	jnz	@r
	jmp	still
;----------------------------------------
.decr:
	mov	bx,[mouse_scroll_data.vertical]
	jmp	@f
.decr_1:
	mov	bx,[mouse_scroll_data.horizontal]
@@:
	mov	ecx,0xffff
	sub	ecx,ebx
	inc	ecx
	mov	ebx,2
@@:
	push	ebx ecx
	call	key.key_action
	pop	ecx ebx
	dec	ecx
	jnz	@r
	jmp	still
;---------------------------------------------------
.mouse_next:
	jmp	still
;---------------------------------------------------------------------
.set_mouse_flag:
	xor	eax,eax
	inc	eax
	mov	[menu_data_1.get_mouse_flag],eax
	mov	[menu_data_2.get_mouse_flag],eax
	ret
;---------------------------------------------------------------------
analyse_out_menu_1:
; Available disks
	mov	eax,[menu_data_1.cursor_out]
	dec	eax
	imul	esi,eax,10
	add	esi,retrieved_devices_table
	mov	edi,dir_path
	call	copy_dir_name
	call	load_next_dir.1
	jmp	still
;---------------------------------------------------------------------
analyse_out_menu_2:
; Sort
	mov	eax,[menu_data_2.cursor_out]
	xor	ebx,ebx
	cmp	eax,dword 1
	je	.1
	cmp	eax,dword 2
	je	.2
	cmp	eax,dword 3
	je	.3
	cmp	eax,dword 4
	je	.4
	jmp	still
.4:
	add	ebx,2
.3:
	add	ebx,2
.2:
	add	ebx,2
.1:
	mov	[sort_type],ebx
	call	sort_directory
	call	draw_draw_file_browser1
	jmp	still
;---------------------------------------------------------------------
analyse_out_menu_3:
; Filter
	mov	eax,[menu_data_3.cursor_out]
	cmp	eax,dword 1
	jne	@f
	mov	[filter_flag],0
	call	load_next_dir.1
	jmp	still
@@:
	cmp	eax,dword 2
	jne	still
	mov	[filter_flag],1
	call	load_next_dir.1
	jmp	still	
;---------------------------------------------------------------------
get_communication_area:
	xor	eax,eax
	mov	al,[param]
	test	eax,eax
	jz	.exit
	mcall	68,22,param,,0x01
	mov	[communication_area],eax
	movzx	ebx,word [eax+2]
	mov	[open_dialog_type],ebx
	cmp	ebx,1
	jne	@f
	pushad
	mov	[focus_pointer],bl
	mov	edi,edit1
	mov	[file_browser_data_1.select_panel_counter],0
	or	[edi+44],dword ed_focus
	mov	[edi+12],dword 0xffffb0 ; color yellow
	mcall	66,1,0
	popad
@@:
	mov	ebx,[eax+4]
	cmp	bx,word x_minimal_size ;300
	jb	@f
	mov	[window_x],ebx
	mov	ebx,[eax+8]
	cmp	bx,word y_minimal_size ;200
	jb	@f
	mov	[window_y],ebx
.exit:
	ret
;---------------------------------------------------------------------
load_start_directory:
	mov	eax,[communication_area]	
	test	eax,eax
	jz	.1
	movzx	ebx,word [eax]
	test	eax,eax
	jz	.1
	add	eax,16	;12 ;4
	mov	esi,eax
	push	esi
	mov	esi,[communication_area]
	add	esi,3840 ;4096-256
	mov	eax,[esi]
	test	al,al
	jnz	@f
	mov	esi,example_name_temp
@@:
	mov	edi,user_selected_name
	call	copy_dir_name
	pop	esi
	jmp	.2
.1:
	mov	esi,start_pach
.2:
	mov	edi,dir_path
	call	copy_dir_name
	
;	call	load_directory
;	mov	eax,[N_error]
;	test	eax,eax
;	jnz	button.exit
.3:
	call	load_directory
	mov	eax,[N_error]
	test	eax,eax
	jz	@f
	call	error_handler
	jmp	.3
@@:
	ret
;---------------------------------------------------------------------
load_next_dir:
	mov	ebx,[file_browser_data_1.folder_block]
	test	ebx,ebx
	jz	.exit

	mov	ebx,[file_browser_data_1.selected_BDVK_adress]
	add	ebx,40
	test	[ebx-40],byte 0x10
	jz	file_no_folder
	cmp	[ebx],word '..'
	jne	@f
	cmp	[ebx+2],byte 0
	je	.exit_dir
@@:
	mov	esi,dir_path
	call	copy_dir_path

@@:
.1:
	call	load_directory
	mov	eax,[N_error]
	test	eax,eax
	jz	@f
	call	error_handler
	jmp	.1
@@:
	call	sort_directory

	mov	ebx,[scroll_bar_data_vertical.x]
	inc	ebx
	mov	ecx,[scroll_bar_data_vertical.y]
	inc	ecx
	mcall	13,,,0xcccccc
	mov	edi,edit1
	xor	eax,eax
	mov	[edi+44],eax
	mov	[edi+12],dword 0xffffff ; color white
	call	draw_draw_file_browser1
.exit:
	ret
.exit_dir:
	mov	esi,dir_path
	call	copy_exit_dir
	jmp	.1
;---------------------------------------------------------------------
error_handler:
	mcall	66,2
	mov	[error_handler_store_input_mode],eax
	mcall	66,1,1
.red:
	call	.draw_window
;------------------------------------
.still:
	mcall	10
	cmp	eax,1
	je	.red
	cmp	eax,2
	je	.key
	cmp	eax,3
	je	.button
	jmp	.still
;------------------------------------
.draw_window:
	xor	eax,eax
	inc	eax
	mov	[error_window],al
	call	control_minimal_window_size
	call	draw_window
	xor	eax,eax
	mov	[error_window],al
	ret
;------------------------------------
.key:
	mcall	2
	xor	ebx,ebx
	cmp	[extended_key],1
	je	.extended_key
	test	al,al
	jnz	.still
	cmp	ah,0xE0
	jne	@f
	mov	[extended_key],1
	jmp	.still
@@:
	cmp	ah,129	; Esc
	je	.exit
	jmp	.still
.extended_key:
	jmp	.still
;------------------------------------
.button:
	mcall	17
	cmp	ah,5
	je	.exit
	cmp	ah,1
	jne	.still
	xor	eax,eax
	mov	[N_error],eax
	jmp	button.exit
;------------------------------------
.exit:
	cmp	[open_dialog_type],1
	jne	@f

	mov	esi,root_pach
	mov	edi,dir_path
	call	copy_dir_name.1
	mov	esi,root_pach
	mov	edi,previous_dir_path
	call	copy_dir_name.1
	jmp	.restore_input_mode
@@:
	mov	esi,previous_dir_path
	mov	edi,dir_path
	call	copy_dir_name.1
	mov	esi,start_pach
	mov	edi,previous_dir_path
	call	copy_dir_name.1
.restore_input_mode:
	mcall	66,1,[error_handler_store_input_mode]
	ret
;---------------------------------------------------------------------
file_no_folder:
	mov	esi,dir_path
	mov	edi,file_name
	call	copy_dir_name
	push	ebx
	mov	al,[focus_pointer]
	test	al,al
	je	@f
	mov	ebx,user_selected_name
	xor	eax,eax
	cmp	[ebx],al
	je	.exit
@@:
	cmp	[open_dialog_type],2
	je	@f
	mov	esi,file_name
	call	copy_dir_path
@@:
	mov	eax,[communication_area]
	test	eax,eax
	jnz	@f
	call	control_minimal_window_size
	call	draw_window
	pop	ebx
	ret
@@:
	mov	edi,eax
	add	edi,16	;12
	mov	esi,file_name	
	call	copy_dir_name
	
	pop	esi
	mov	al,[focus_pointer]
	test	al,al
	jz	@f
	mov	esi,user_selected_name
@@:
	xor	eax,eax
	cmp	[esi],al
	je	.exit
	mov	edi,[communication_area]
	add	edi,3840 ;4096-256
	call	copy_dir_name
.exit:
	mov	eax,[communication_area]
	mov	[eax],word 1
	jmp	button.exit
;---------------------------------------------------------------------
load_root_directory:
	mov	[dirinfo.name],dword dir_path_temp
	mov	eax,[dirinfo.return]
	push	eax
	mov	eax,[file_browser_data_1.folder_data]
	push	eax
	xor	eax,eax
	mov	[dirinfo.return],eax
	mov	[file_browser_data_1.folder_data],eax
	mov	esi,root_pach
	mov	edi,dir_path_temp
	call	copy_dir_name
	call	load_directory
	mov	eax,[N_error]
	test	eax,eax
	jnz	button.exit

	mov	eax,[dirinfo.return]
	mov	[root_folder_area],eax
	mov	eax,[eax+4]
	mov	[root_folder_block],eax

	xor	eax,eax
	mov	[dirinfo.return],eax
	mov	[file_browser_data_1.folder_data],eax
	mov	[temp_counter_1],eax	;0

	mov	[retrieved_devices_table_counter],eax	;0
.start_temp_counter_1:
	imul	esi,[temp_counter_1],304
	add	esi,[root_folder_area]
	add	esi,32+40
	mov	edi,dir_path_temp+1
	mov	[edi-1],byte '/'
	call	copy_dir_name
	call	load_directory
	mov	eax,[N_error]
	test	eax,eax
	jnz	button.exit

	mov	eax,[dirinfo.return]
	mov	[root1_folder_area],eax
	mov	eax,[eax+4]
	test	eax,eax
	jz	.continue
	mov	[root1_folder_block],eax
	
	mov	ebp,0
.start_copy_device_patch:
	imul	edi,[retrieved_devices_table_counter],10
	add	edi,retrieved_devices_table
	mov	[edi],byte '/'
	inc	edi
	imul	esi,[temp_counter_1],304
	add	esi,[root_folder_area]
	add	esi,32+40

	call	copy_dir_name

	imul	esi,ebp,304
	add	esi,[root1_folder_area]
	add	esi,32+40
	mov	[edi-1],byte '/'

	call	copy_dir_name

	inc	[retrieved_devices_table_counter]
	inc	ebp
	cmp	ebp,[root1_folder_block]
	jb	.start_copy_device_patch
.continue:
	inc	[temp_counter_1]
	mov	eax,[temp_counter_1]
	cmp	eax,[root_folder_block]
	jb	.start_temp_counter_1

	cmp	[root_folder_area],dword 0
	je	@f
	mcall	68,13,[root_folder_area]
	test	eax,eax
	jz	memory_free_error
@@:

	xor	ecx,ecx
	mov	edi,menu_text_area_1_1	;.1
@@:
	imul	esi,ecx,10
	add	esi,retrieved_devices_table
	call	copy_dir_name
	inc	ecx
	cmp	ecx,[retrieved_devices_table_counter]
	jb	@b
	mov	[menu_data_1.text_end],edi
	xor	eax,eax
	mov	[edi],eax
	pop	eax
	mov	[file_browser_data_1.folder_data],eax
	pop	eax
	mov	[dirinfo.return],eax
	mov	[dirinfo.name],dword dir_path
	ret
;---------------------------------------------------------------------
memory_free_error:
	mov	[N_error],3
	jmp	button.exit
;---------------------------------------------------------------------
memory_get_error:
	mov	[N_error],4
	jmp	button.exit
;---------------------------------------------------------------------
type_title:
	mov	ecx,[open_dialog_type]
	shl	ecx,2
	add	ecx,open_dialog_title_pointer
	mov	ecx,[ecx]
	test	ecx,ecx
	jz	@f
	mcall	71,1,; title ;;param ;file_name ;dir_path
@@:
	ret
;---------------------------------------------------------------------
draw_window:

	mcall	12,1
	call	prepare_system_colors
	xor	esi,esi
	mcall	0,[window_x],[window_y],0x63AABBCC
	call	type_title
	call	get_window_param
	mov	eax,[procinfo+70] ;status of window
	test	eax,100b
	jne	.end

	mov	eax,[window_high]
	sub	eax,25+45
	mov	[file_browser_data_1.size_y],ax
	mov	[scroll_bar_data_vertical.size_y],ax
	mov	eax,[window_width]
	sub	eax,10+20
	mov	[file_browser_data_1.size_x],ax
	add	ax,10
	mov	[scroll_bar_data_vertical.start_x],ax
	mov	edx,[w_work]	; color of work area RRGGBB,8->color
	or	edx,0x63000000
	mcall	13,[window_width],45	;,0xcccccc

	push	ecx
	rol	ecx,16
	add	cx,[file_browser_data_1.size_y]
	add	cx,45
	ror	ecx,16
	mov	cx,25
	mcall
	pop	ecx
	add	ecx,45 shl 16
	mov	cx,[file_browser_data_1.size_y]
	mov	bx,10
	mcall
	mov	bx,[file_browser_data_1.size_x]
	add	bx,10
	shl	ebx,16
	mov	bx,20
	mcall

	cmp	[error_window],0
	je	@f
	call	draw_for_fs_errors
	jmp	.1
@@:
	mov	[do_not_draw_open_button_label],1
	call	draw_draw_file_browser1
	mov	[do_not_draw_open_button_label],0
.1:
	push	dword menu_data_1
	call	[menu_bar_draw]
	push	dword menu_data_2
	call	[menu_bar_draw]
	push	dword menu_data_3
	call	[menu_bar_draw]

	mov	ebx,[file_browser_data_1.x]
	mov	ax,bx
	shl	eax,16
	add	ebx,eax
	mov	eax,50
	mov	bx,ax
	shl	eax,16
	sub	ebx,eax
	mov	ecx,25 shl 16 + 16
	mcall	8,,,2,[w_work_button]	;0xffffff

	pusha
	shr	ecx,16
	mov	bx,cx
	add	ebx,21 shl 16
	mov	ecx,[w_work_button_text]
	or	ecx,0x90000000
	mcall	4,,,message_ExitDir_button
	add	ebx,4
	mcall
	add	ebx,4
	mcall
	popa

	push	ebx
	sub	ebx,70 shl 16
	mov	bx,60
	mcall	8,,,6

	shr	ecx,16
	mov	bx,cx
	add	ebx,2 shl 16
	mov	ecx,[w_work_button_text]
	or	ecx,0x90000000
	mcall	4,,,message_ReloadDir_button
	pop	ebx

	mov	ebx,[file_browser_data_1.x]
	mov	ax,bx
	shl	eax,16
	add	ebx,eax
	mov	eax,55
	mov	bx,ax
	shl	eax,16
	sub	ebx,eax
	mov	ecx,[file_browser_data_1.y]
	mov	ax,cx
	add	eax,3
	shl	eax,16
	add	ecx,eax
	mov	cx,16
	mcall	8,,,3

	pusha
	shr	ecx,16
	mov	bx,cx
	add	ebx,4 shl 16
	mov	ecx,[w_work_button_text]
	or	ecx,0x90000000
	mcall	4,,,message_cancel_button
	popa

	sub	ebx,65 shl 16
	mcall	8,,,4

	shr	ecx,16
	mov	bx,cx
	add	ebx,4 shl 16
	mov	edx,[open_dialog_type]
	shl	edx,2
	add	edx,message_open_dialog_button
	mov	edx,[edx]
;-------------------------------
	cmp	[open_dialog_type],1
	jne	@f

	cmp	[focus_pointer],1
	je	@f

	cmp	[error_window],0
	jne	@f

	mov	eax,[file_browser_data_1.folder_block]
	test	eax,eax
	jz	@f

	mov	eax,[file_browser_data_1.selected_BDVK_adress]
	test	[eax],byte 0x10
	jz	@f

	mov	edx,message_0	; Open Dir
@@:
;--------------------------------------
	mov	[open_button_coordinates],ebx
	mov	ecx,[w_work_button_text]
	or	ecx,0x90000000
	mcall	4	;message_open_button
.end:
	mcall	12,2
	ret
;---------------------------------------------------------------------
draw_open_button_label:
	cmp	[do_not_draw_open_button_label],1
	je	.exit_1 

	cmp	[open_dialog_type],1
	jne	.exit_1

	cmp	[focus_pointer],1
	je	draw_save_button_label
	
	pusha
	mov	ebx,[open_button_coordinates]
	test	ebx,ebx
	jz	.exit

	mov	edx,[open_dialog_type]
	shl	edx,2
	add	edx,message_open_dialog_button
	mov	edx,[edx]
	
	mov	eax,[file_browser_data_1.folder_block]
	test	eax,eax
	jz	.1
	
	mov	eax,[file_browser_data_1.selected_BDVK_adress]
	test	[eax],byte 0x10
	jz	@f
	
	mov	edx,message_0	; Open Dir
	jmp	.1
@@:
	call	copy_new_file_name
.1:
	mov	ecx,[w_work_button_text]
	or	ecx,0xd0000000
	mov	edi,[w_work_button]
	mcall	4	;message_open_button
.exit:
	popa
.exit_1:
	ret
;---------------------------------------------------------------------
draw_save_button_label:
	pusha
	mov	ebx,[open_button_coordinates]

	mov	edx,message_1	; Save

	mov	ecx,[w_work_button_text]
	or	ecx,0xd0000000
	mov	edi,[w_work_button]
	mcall	4	;message_open_button
	popa
	ret
;---------------------------------------------------------------------
copy_new_file_name:
	mov	esi,[file_browser_data_1.selected_BDVK_adress]
	add	esi,40
	mov	edi,user_selected_name
	cld
	lodsb
	test	al,al
	jnz	.1
	ret
@@:
	lodsb
.1:
	stosb
	test	al,al
	jnz	@r
	
	sub	edi,user_selected_name
	dec	edi
	
	mov	esi,edit1
	mov	[esi+48],edi ;ed_size
	mov	[esi+52],edi ;ed_pos

	push	dword name_editboxes
	call	[edit_box_draw]
	ret
;---------------------------------------------------------------------
prepare_system_colors:
	mcall	48,3,app_colours,10*4

	mov	eax,[w_work]
	mov	[menu_data_1.bckg_col],eax
	mov	[menu_data_2.bckg_col],eax
	mov	[menu_data_3.bckg_col],eax

	mov	[menu_data_1.menu_col],eax
	mov	[menu_data_2.menu_col],eax
	mov	[menu_data_3.menu_col],eax
	
	mov	[scroll_bar_data_vertical.bckg_col],eax 

	mov	eax,[w_work_button]
	mov	[menu_data_1.frnt_col],eax
	mov	[menu_data_2.frnt_col],eax
	mov	[menu_data_3.frnt_col],eax

	mov	[scroll_bar_data_vertical.frnt_col],eax 

	mov	eax,[w_work_button]
	mov	[menu_data_1.menu_sel_col],eax
	mov	[menu_data_2.menu_sel_col],eax
	mov	[menu_data_3.menu_sel_col],eax

	mov	eax,[w_work_text]
	mov	[menu_data_1.bckg_text_col],eax
	mov	[menu_data_2.bckg_text_col],eax
	mov	[menu_data_3.bckg_text_col],eax
	
	mov	eax,[w_work_button_text]
	mov	[menu_data_1.frnt_text_col],eax
	mov	[menu_data_2.frnt_text_col],eax
	mov	[menu_data_3.frnt_text_col],eax
	
	mov	[scroll_bar_data_vertical.line_col],eax 
	ret
;---------------------------------------------------------------------
draw_for_fs_errors:
	call	draw_dir_path

	mov	ebx,[file_browser_data_1.x]
	mov	ecx,[file_browser_data_1.y]
	mcall	13,,,[file_browser_data_1.background_color]
	push	ebx ecx
	add	ebx,10 shl 16
	sub	ebx,20
	add	ecx,10 shl 16
	sub	ecx,20

	shr	ecx,16
	mov	bx,cx
	add	ebx,5 shl 16+15
	mcall	4,,0x90000000,load_directory_error_type

	add	ebx,20
	mcall	4,,,dir_path	

	mov	eax,[error_type]
	shl	eax,2
	add	eax,error_fs_text_pointers
	mov	edx,[eax]
	add	ebx,20
	mcall	4
	
	add	ebx,20
	mcall	,,,error_help_text

	pop	ecx ebx

	mov	ebx,[file_browser_data_1.x]
	mov	ax,bx
	shr	eax,1
	shl	eax,16
	add	ebx,eax
	mov	eax,50
	mov	bx,ax
	shr	eax,1
	shl	eax,16
	sub	ebx,eax

	mov	ecx,[file_browser_data_1.y]
	mov	ax,cx
	sub	eax,40
	shl	eax,16
	add	ecx,eax
	mov	cx,15

	mcall	8,,,5,[w_work_button]	;0xffffff

	shr	ecx,16
	mov	bx,cx
	add	ebx,4 shl 16
	mov	ecx,[w_work_button_text]
	add	ecx,0x90000000
	mcall	4,,,message_cancel_button

	ret
;---------------------------------------------------------------------	
draw_file_name:
	mov	esi,user_selected_name
	cld
@@:
	lodsb
	test	al,al
	jne	@r
	sub	esi,user_selected_name
	mov	eax,esi
	dec	eax
	
	mov	edi,edit1
	mov	[edi+48],eax ;ed_size
	mov	[edi+52],eax ;ed_pos
;--------------------------------------
	mov	eax,[file_browser_data_1.x]
	mov	ebx,eax
	shr	ebx,16
	and	eax,0xffff
	sub	eax,200
	mov	[edi],eax
	add	ebx,70
	mov	[edi+4],ebx
	
	mov	eax,[file_browser_data_1.y]
	mov	ebx,eax
	shr	ebx,16
	and	eax,0xffff
	add	eax,ebx
	add	eax,5
	mov	[edi+8],eax
	
	push	dword name_editboxes
	call	[edit_box_draw] 
	
	mov	bx,[file_browser_data_1.start_x]
	add	bx,5
	shl	ebx,16
	mov	bx,[file_browser_data_1.start_y]
	add	bx,[file_browser_data_1.size_y]
	add	bx,9
	mcall	4,,0x80000000,message_file_name
	ret
;---------------------------------------------------------------------
draw_dir_path:
	mov	eax,[file_browser_data_1.x]
	mov	ebx,eax
	shr	ebx,16
	add	ebx,3
	and	eax,0xffff
	sub	eax,5
	
	mov	[PathShow_data_1.area_size_x],ax
	mov	[PathShow_data_1.start_x],bx
;--------------------------------------
;; top line
;	mov	ebx,[file_browser_data_1.x]
;	mcall	13,,<7,1>,0x0
; down line
;	push	ebx ecx
;	mcall	,,<21,1>,
;	pop	ecx ebx
; left line	
;	push	ebx
;	mov	bx,1
;	mov	cx,15
;	mcall
;	pop	ebx
; right line
;	mov	ax,bx
;	shr	ebx,16
;	add	bx,ax
;	dec	ebx
;	shl	ebx,16
;	mov	bx,1
;	mcall	13
;-------------------------------------- 
	mov	ebx,[file_browser_data_1.x]
	sub	ebx,2
	add	ebx,1 shl 16
	mcall	13,,<8,13>,0xffffcc
;--------------------------------------
; prepare for PathShow
	push	dword PathShow_data_1
	call	[PathShow_prepare]
	
; draw for PathShow
	push	dword PathShow_data_1
	call	[PathShow_draw]
	
	ret
;---------------------------------------------------------------------
draw_draw_file_browser1:
	call	draw_dir_path
	cmp	[open_dialog_type],1
	jne	@f	
	call	draw_file_name
@@:
	xor	eax,eax
	inc	eax
	mov	[file_browser_data_1.all_redraw],eax
	mov	[scroll_bar_data_vertical.all_redraw],eax
	
	push	dword file_browser_data_1
	call	[FileBrowser_draw]

	call	draw_open_button_label
	
	call	prepare_scrollbar_data

	call	draw_scrollbar

	xor	eax,eax
	mov	[file_browser_data_1.all_redraw],eax
	mov	[scroll_bar_data_vertical.all_redraw],eax
	ret
;---------------------------------------------------------------------
draw_draw_file_browser2:
	mov	eax,2
	mov	[file_browser_data_1.all_redraw],eax

	call	get_scrollbar_data

	push	dword file_browser_data_1
	call	[FileBrowser_draw]

	call	draw_open_button_label

	xor	eax,eax
	mov	[file_browser_data_1.all_redraw],eax
	ret
;---------------------------------------------------------------------
draw_scrollbar1:
	mov	eax,[file_browser_data_1.start_draw_line]
	mov	[scroll_bar_data_vertical.position],eax

	call	draw_scrollbar

	ret
;---------------------------------------------------------------------
draw_scrollbar:
	mov	eax,[scroll_bar_data_vertical.max_area]
	cmp	eax,[scroll_bar_data_vertical.cur_area]
	jbe	@f
	cmp	[scroll_bar_data_vertical.cur_area],0
	je	@f
	push	dword scroll_bar_data_vertical
	call	[scrollbar_ver_draw]
@@:
	ret
;---------------------------------------------------------------------
get_scrollbar_data:
	mov	eax,[scroll_bar_data_vertical.position]
	mov	[file_browser_data_1.start_draw_line],eax
	ret
;---------------------------------------------------------------------
prepare_scrollbar_data:
	mov	eax,[file_browser_data_1.folder_block]
	mov	[scroll_bar_data_vertical.max_area],eax
	mov	eax,[file_browser_data_1.max_panel_line]
	mov	[scroll_bar_data_vertical.cur_area],eax
	ret
;---------------------------------------------------------------------
get_active_pocess:
	mcall	9,procinfo,-1
	mov	ecx,[ebx+30]	; PID
	mcall	18,21
	mov	[active_process],eax	; WINDOW SLOT
	mov	ebx,[communication_area]	
	test	ebx,ebx
	jz	.1
	mov	[ebx+12],eax	; WINDOW SLOT to com. area
.1:
	ret
;---------------------------------------------------------------------
get_window_param:
	mcall	9,procinfo,-1
	mov	eax,[ebx+66]
	inc	eax
	mov	[window_high],eax
	mov	eax,[ebx+62]
	inc	eax
	mov	[window_width],eax
	mov	eax,[ebx+70]
	mov	[window_status],eax
	ret
;---------------------------------------------------------------------
convert_icons:
	xor	eax,eax
	mov	[return_code],eax
;	mov	eax,image_file
	push	image_file
	call	[cnv_png_import.Start]

	mov	ecx,[image_file]
	mcall	68,13,
	test	eax,eax
	jz	memory_free_error

	cmp	[return_code],dword 0
	je	@f
	mov	[N_error],6
	jmp	button.exit
@@:

	mov	ebx,[raw_pointer]
	mov	eax,[ebx+4]
; set of icon size x
	mov	[file_browser_data_1.icon_size_x],ax
; mov eax,[ebx+8]
; set of icon size y
	mov	[file_browser_data_1.icon_size_y],ax
	inc	ax
	mov	[file_browser_data_1.line_size_y],ax
	mov	eax,[ebx+12]
; set of RAW resolution to pixel
	mov	[file_browser_data_1.resolution_raw],eax

	mov	eax,[ebx+20]
	add	eax,ebx
; set RAW palette,use else resolution 8bit or less
	mov	[file_browser_data_1.palette_raw],eax

	mov	eax,[ebx+28]
	add	eax,ebx
; set RAW area for icon
	mov	[file_browser_data_1.icon_raw_area],eax
	ret
;---------------------------------------------------------------------
calc_ini:
	mov	eax,[image_file]
	mov	[file_browser_data_1.ini_file_start],eax
	add	eax,[img_size]
	mov	[file_browser_data_1.ini_file_end],eax
	ret
;---------------------------------------------------------------------
load_ini:
	mov	ebx,ini_file_name
	mov	esi,path
	mov	edi,file_name
	call	copy_file_path

	mov	[fileinfo.subfunction],dword 5
	mov	[fileinfo.size],dword 0
	mov	[fileinfo.return],dword file_info
	mcall	70,fileinfo
	test	eax,eax
	jnz	.error

	mov	[fileinfo.subfunction],dword 0

	mov	ecx,[file_info+32]
	mov	[fileinfo.size],ecx
	mov	[img_size],ecx
	
	mcall	68,12
	test	eax,eax
	jz	memory_get_error

	mov	[fileinfo.return],eax
	mov	[image_file],eax

	mcall	70,fileinfo
	test	eax,eax
	jnz	.error
	ret
.error:
	mov	[N_error],1
	mov	[error_type],eax
	jmp	button.exit
;---------------------------------------------------------------------
load_icons:
	mov	ebx,icons_file_name_2
	mov	esi,path
	mov	edi,file_name
	call	copy_file_path

	mov	[fileinfo.subfunction],dword 5
	mov	[fileinfo.size],dword 0
	mov	[fileinfo.return],dword file_info
	mcall	70,fileinfo
	test	eax,eax
	jz	@f
	
	mov	ebx,icons_file_name
	mov	esi,path
	mov	edi,file_name
	call	copy_file_path

	mov	[fileinfo.subfunction],dword 5
	mov	[fileinfo.size],dword 0
	mov	[fileinfo.return],dword file_info
	mcall	70,fileinfo
	test	eax,eax
	jnz	.error
@@:
	mov	[fileinfo.subfunction],dword 0

	mov	ecx,[file_info+32]
	mov	[fileinfo.size],ecx
	mov	[img_size],ecx
	
	mcall	68,12
	test	eax,eax
	jz	memory_get_error

	mov	[fileinfo.return],eax
	mov	[image_file],eax

	mcall	70,fileinfo
	test	eax,eax
	jnz	.error
	ret
.error:
	mov	[N_error],2
	mov	[error_type],eax
	jmp	button.exit
;---------------------------------------------------------------------
sort_directory:
	mov	eax,[file_browser_data_1.folder_data]
	mov	ebx,[eax+4]	; number of files
	add	eax,32
	cmp	[eax+40],word '..'
	jne	@f
	cmp	[eax+40+2],byte 0
	jne	@f
	dec	ebx
	add	eax,304
@@:
	push	dword [sort_type]	; sort mode
	push	ebx	; number of files
	push	eax	; data files
	call	[sort_dir]
	ret
;--------------------------------------------------------------------
load_directory:
	xor	eax,eax
	mov	[N_error],eax
	cmp	[file_browser_data_1.folder_data],eax
	je	@f
	mcall	68,13,[file_browser_data_1.folder_data]
	test	eax,eax
	jz	memory_free_error

@@:
	mov	[dirinfo.size],dword 0
	mov	[dirinfo.return],dir_header
	mcall	70,dirinfo
	test	eax,eax
	jz	@f
;	mov	esi,previous_dir_path
;	mov	edi,dir_path
;	call	copy_dir_name.1
;	mcall	70,dirinfo
;	test	eax,eax
;	jz	@f	
	xor	ebx,ebx
	mov	[file_browser_data_1.folder_data],ebx
	jmp	.error
@@:
	
	mov	ecx,[dir_header.totl_blocks]
	mov	[dirinfo.size],ecx
	imul	ecx,304
	add	ecx,32
	mcall	68,12
	test	eax,eax
	jz	memory_get_error

	mov	[dirinfo.return],eax
	mov	[file_browser_data_1.folder_data],eax

	mcall	70,dirinfo
	test	eax,eax
	jnz	.error
	
; test for empty directory
	mov	eax,[dirinfo.return]
	mov	eax,[eax+4]
	test	eax,eax
	jz	@f
	
	call	delete_point_dir
;	call	files_name_normalize
	call	check_filter
	call	prepare_extension_and_mark
	call	clear_data_fb_and_sb
@@:
	ret

.error:
	mov	[N_error],5
	mov	[error_type],eax
	ret
;---------------------------------------------------------------------
clear_data_fb_and_sb:
	xor	eax,eax
	mov	[file_browser_data_1.start_draw_cursor_line],ax
	mov	[file_browser_data_1.start_draw_line],eax
	mov	[scroll_bar_data_vertical.position],eax 
	ret
;---------------------------------------------------------------------
check_filter:
	cmp [open_dialog_type],2	; Select dir
	je	.1
	xor	eax,eax
	mov	al,[filter_flag]
	test	eax,eax
	jz	@f

	mov	eax,[communication_area]
	test	eax,eax
	jz	@f
	mov	eax,[eax+4096]
	test	eax,eax
	jz	@f
.1:
	call	delete_unsupported_BDFE
@@:
	ret
;---------------------------------------------------------------------
delete_unsupported_BDFE:
	mov	ebx,[file_browser_data_1.folder_data]
	add	ebx,4
	xor	ecx,ecx
	dec	ecx
	
	mov	eax,[file_browser_data_1.folder_data]
	add	eax,32+40
	sub	eax,304
.start:
	inc	ecx
	add	eax,304
.1:
	cmp	[ebx],ecx
	je	.end
	cmp	[eax],byte '.'
	jne	@f
	cmp	[eax+1],byte 0
	je	.delete
@@:
	test	[eax-40],byte 0x10
	jnz	.start
	
	cmp	[open_dialog_type],2	; Select dir
	je	.delete
	
	push	eax ebx
	mov	esi,eax
	call	search_expansion
	test	eax,eax
	pop	ebx eax
	jnz	.delete
	
	push	eax ebx ecx esi
	mov	edi,[communication_area]
	add	edi,4100
	call	compare_expansion
	test	eax,eax
	pop	esi ecx ebx eax
	jz	.start
	
;-------------------------------------------
.delete:
	dec	dword [ebx]
	mov	esi,[ebx]
	sub	esi,ecx

	push	ecx
	mov	ecx,esi
	imul	ecx,304/4
	mov	edi,eax
	sub	edi,40
	mov	esi,edi
	add	esi,304
	cld
	rep	movsd
	pop	ecx
	
	jmp	.1
.end:
	ret
;---------------------------------------------------------------------
search_expansion:
	mov	edi,esi
	xor	eax,eax
@@:
	cld
	lodsb
	test	eax,eax
	jnz	@b
	mov	ebx,esi
	dec	esi
@@:
	std
	lodsb
	cmp	esi,edi
	jb	.end_err
	cmp	al,'.'
	jne	@b
	
	add	esi,2
	sub	ebx,esi
	mov	[expansion_length],ebx
	cld
	xor	eax,eax
	ret
	
.end_err:
	cld
	xor	eax,eax
	inc	eax
	ret
;---------------------------------------------------------------------
compare_expansion:
	mov	ebx,[edi]
	add	ebx,edi
	add	edi,3
.start:
	cmp	ebx,edi
	jb	.end_err
	mov	ecx,[expansion_length]
	inc	edi
	
	push	esi edi
@@:
	cld
	lodsb
	xchg	esi,edi
	shl	eax,8
	lodsb
	xchg	esi,edi
	call	char_todown
	xchg	al,ah
	call	char_todown
	cmp	al,ah
	jne	@f
	dec	ecx
	jnz	@b
	jmp	.end
@@:
	pop	edi esi
	jmp	.start
.end:
	pop	edi esi
	xor	eax,eax
	ret
	
.end_err:
	xor	eax,eax
	inc	eax
	ret
;---------------------------------------------------------------------
prepare_extension_and_mark:
	mov	esi,[dirinfo.return]
	mov	ebp,[esi+4]
	test	ebp,ebp
	jz	.end

	add	esi,32+40
.start:
	push	esi
	call	search_extension_start
	mov	eax,esi
	pop	esi
	sub	eax,esi
	sub	ebx,esi
	shl	eax,16
	mov	ax,bx
	mov	[esi+300-40],eax
	mov	[esi+299-40],byte 0
	add	esi,304
	dec	ebp
	jnz	.start
.end:
	ret
;---------------------------------------------------------------------
search_extension_start:
	mov	edx,esi
	xor	eax,eax
	cld
@@:
	lodsb
	test	eax,eax
	jnz	@b
	dec	esi
	dec	edx
	push	esi
	std
@@:
	lodsb
	cmp	esi,edx
	je	.end
	cmp	al,'.'
	jnz	@b
	add	esi,2
	cld
	pop	ebx
	ret
.end:
	cld
	pop	esi
	mov	ebx,esi
	ret
;---------------------------------------------------------------------
delete_point_dir:
	mov	eax,[dirinfo.return]
	cmp	[eax+32+40],byte '.'
	jne	@f
	cmp	[eax+32+40+1],byte 0
	jne	@f
	mov	edi,eax
	add	edi,32
	mov	esi,edi
	add	esi,304
	mov	ecx,[eax+4]
	dec	ecx
	mov	[eax+4],ecx
	imul	ecx,304
	shr	ecx,2
	cld
	rep	movsd
@@:
	ret
;---------------------------------------------------------------------
;files_name_normalize:
;	mov	esi,[dirinfo.return]
;	mov	ebp,[esi+4]
;	add	esi,32+40
;.start:
;	push	esi
;	mov	al,[esi]
;	call	char_toupper
;	mov	[esi],al
;@@:
;	inc	esi
;	mov	al,[esi]
;	test	al,al
;	jz	@f
;	call	char_todown
;	mov	[esi],al
;	jmp	@b
;@@:
;	pop	esi
;	add	esi,304
;	dec	ebp
;	jnz	.start
;	ret
;---------------------------------------------------------------------
char_toupper:
; convert character to uppercase,using cp866 encoding
; in: al=symbol
; out: al=converted symbol
	cmp	al,'a'
	jb	.ret
	cmp	al,'z'
	jbe	.az
	cmp	al,'�'
	jb	.ret
	cmp	al,'�'
	jb	.rus1
	cmp	al,'�'
	ja	.ret
; 0xE0-0xEF -> 0x90-0x9F
	sub	al,'�'-'�'
.ret:
	ret
.rus1:
; 0xA0-0xAF -> 0x80-0x8F
.az:
	and	al,not	0x20
	ret
;---------------------------------------------------------------------
char_todown:
; convert character to uppercase,using cp866 encoding
; in: al=symbol
; out: al=converted symbol
	cmp	al,'A'
	jb	.ret
	cmp	al,'Z'
	jbe	.az
	cmp	al,'�'
	jb	.ret
	cmp	al,'�'
	jb	.rus1
	cmp	al,'�'
	ja	.ret
; 0x90-0x9F -> 0xE0-0xEF
	add	al,'�'-'�'
.ret:
	ret
.rus1:
; 0x80-0x8F -> 0xA0-0xAF
.az:
	add	al,0x20
	ret
;---------------------------------------------------------------------
copy_file_path:
	xor	eax,eax
	cld
@@:
	lodsb
	stosb
	test	eax,eax
	jnz	@b
	mov	esi,edi
	dec	esi
	std
@@:
	lodsb
	cmp	al,'/'
	jnz	@b
	mov	edi,esi
	add	edi,2
	mov	esi,ebx
	cld
@@:
	lodsb
	stosb
	test	eax,eax
	jnz	@b
	ret
;---------------------------------------------------------------------
copy_dir_path:
	mov	ecx,esi
	inc	ecx
	inc	ecx
	xor	eax,eax
	cld
@@:
	lodsb
	test	eax,eax
	jnz	@b

	cmp	ecx,esi
	jb	@f
	dec	esi
@@:
	mov	[esi-1],byte '/'
	mov	edi,esi
	mov	esi,ebx
@@:
	lodsb
	stosb
	test	eax,eax
	jnz	@b
	ret
;---------------------------------------------------------------------
copy_exit_dir:
	mov	ebx,esi
	inc	ebx
	xor	eax,eax
	cld
@@:
	lodsb
	test	eax,eax
	jnz	@b
	sub	esi,2
	std
@@:
	lodsb
	cmp	al,'/'
	jnz	@b
	xor	eax,eax
	cmp	ebx,esi
	jb	@f
	inc	esi
@@:
	mov	[esi+1],al
	cld
	ret
;---------------------------------------------------------------------
copy_dir_name:
	push	esi edi
	mov	esi,edi
	mov	edi,previous_dir_path
	call	.1
	pop	edi esi
.1:
	xor	eax,eax
	cmp	[esi],al
	je	.exit
	cld
@@:
	lodsb
	stosb
	test	eax,eax
	jnz	@b
.exit:
	ret
;---------------------------------------------------------------------
;---------------------------------------------------------------------

;plugins_directory	db 'plugins/',0
plugins_directory	db 0

system_dir_Boxlib	db '/sys/lib/box_lib.obj',0
system_dir_CnvPNG	db '/sys/lib/cnv_png.obj',0
system_dir_Sort 	db '/sys/lib/sort.obj',0
system_dir_UNPACK	db '/sys/lib/archiver.obj',0

ihead_f_i:
ihead_f_l	db 'System      error',0

er_message_found_lib	db 'box_lib.obj - Not found!',0
er_message_import	db 'box_lib.obj - Wrong import!',0

er_message_found_lib2	db 'cnv_png.obj - Not found!',0
er_message_import2	db 'cnv_png.obj - Wrong import!',0

err_message_found_lib3	db 'sort.obj - Not found!',0
err_message_import3	db 'sort.obj - Wrong import!',0

err_message_found_lib4	db 'archiver.obj - Not found!',0
err_message_import4	db 'archiver.obj - Wrong import!',0

align	4
l_libs_start:
library01	l_libs	system_dir_Boxlib+9,path,file_name,system_dir_Boxlib,\
er_message_found_lib,ihead_f_l,Box_lib_import,er_message_import,ihead_f_i,plugins_directory

library02	l_libs	system_dir_CnvPNG+9,path,file_name,system_dir_CnvPNG,\
er_message_found_lib2,ihead_f_l,cnv_png_import,er_message_import2,ihead_f_i,plugins_directory

library03	l_libs	system_dir_Sort+9,path,file_name,system_dir_Sort,\
err_message_found_lib3,ihead_f_l,Sort_import,err_message_import3,ihead_f_i,plugins_directory

library04	l_libs	system_dir_UNPACK+9,path,file_name,system_dir_UNPACK,\
err_message_found_lib4,ihead_f_l,UNPACK_import,err_message_import4,ihead_f_i,plugins_directory

end_l_libs:

;---------------------------------------------------------------------
align	4
UNPACK_import:
;unpack_Version 		dd aUnpack_Version
;unpack_PluginLoad		dd aUnpack_PluginLoad	
;unpack_OpenFilePlugin		dd aUnpack_OpenFilePlugin
;unpack_ClosePlugin		dd aUnpack_ClosePlugin
;unpack_ReadFolder		dd aUnpack_ReadFolder	
;unpack_SetFolder		dd aUnpack_SetFolder
;unpack_GetFiles		dd aUnpack_GetFiles
;unpack_GetOpenPluginInfo	dd aUnpack_GetOpenPluginInfo
;unpack_Getattr 		dd aUnpack_Getattr
;unpack_Open			dd aUnpack_Open
;unpack_Read			dd aUnpack_Read
;unpack_Setpos			dd aUnpack_Setpos
;unpack_Close			dd aUnpack_Close
;unpack_DeflateUnpack		dd aUnpack_DeflateUnpack
unpack_DeflateUnpack2		dd aUnpack_DeflateUnpack2
	dd 0
	dd 0

;aUnpack_Version		db 'version',0
;aUnpack_PluginLoad		db 'plugin_load',0
;aUnpack_OpenFilePlugin 	db 'OpenFilePlugin',0
;aUnpack_ClosePlugin		db 'ClosePlugin',0
;aUnpack_ReadFolder		db 'ReadFolder',0
;aUnpack_SetFolder		db 'SetFolder',0
;aUnpack_GetFiles		db 'GetFiles',0
;aUnpack_GetOpenPluginInfo	db 'GetOpenPluginInfo',0
;aUnpack_Getattr		db 'getattr',0
;aUnpack_Open			db 'open',0
;aUnpack_Read			db 'read',0
;aUnpack_Setpos 		db 'setpos',0
;aUnpack_Close			db 'close',0
;aUnpack_DeflateUnpack		db 'deflate_unpack',0
aUnpack_DeflateUnpack2		db 'deflate_unpack2',0

;---------------------------------------------------------------------
;---------------------------------------------------------------------
align	4
Sort_import:
sort_init	dd aSort_init
sort_version	dd aSort_version
sort_dir	dd aSort_SortDir
sort_strcmpi	dd aSort_strcmpi
	dd 0
	dd 0

aSort_init	db 'START',0
aSort_version	db 'version',0
aSort_SortDir	db 'SortDir',0
aSort_strcmpi	db 'strcmpi',0

;---------------------------------------------------------------------
align	4
cnv_png_import:
.Start		dd aCP_Start
.Version	dd aCP_Version
.Check		dd aCP_Check
.Assoc		dd aCP_Assoc
	dd 0
	dd 0
aCP_Start	db 'START',0
aCP_Version	db 'version',0
aCP_Check	db 'Check_Header',0
aCP_Assoc	db 'Associations',0
;---------------------------------------------------------------------
align	4
Box_lib_import: 
;init_lib	dd a_init
;version_lib	dd a_version


edit_box_draw		dd aEdit_box_draw
edit_box_key		dd aEdit_box_key
edit_box_mouse		dd aEdit_box_mouse
;version_ed		dd aVersion_ed

;check_box_draw dd aCheck_box_draw
;check_box_mouse	dd aCheck_box_mouse
;version_ch		dd aVersion_ch

;option_box_draw	dd aOption_box_draw
;option_box_mouse	dd aOption_box_mouse
;version_op		dd aVersion_op

scrollbar_ver_draw	dd aScrollbar_ver_draw
scrollbar_ver_mouse	dd aScrollbar_ver_mouse
;scrollbar_hor_draw	dd aScrollbar_hor_draw
;scrollbar_hor_mouse	dd aScrollbar_hor_mouse
;version_scrollbar	dd aVersion_scrollbar

;dinamic_button_draw	dd aDbutton_draw
;dinamic_button_mouse	dd aDbutton_mouse
;version_dbutton	dd aVersion_dbutton

menu_bar_draw		dd aMenu_bar_draw
menu_bar_mouse		dd aMenu_bar_mouse
menu_bar_activate	dd aMenu_bar_activate
;version_menu_bar	dd aVersion_menu_bar

FileBrowser_draw	dd aFileBrowser_draw
FileBrowser_mouse	dd aFileBrowser_mouse
FileBrowser_key 	dd aFileBrowser_key
;Version_FileBrowser	dd aVersion_FileBrowser

PathShow_prepare	dd sz_PathShow_prepare
PathShow_draw		dd sz_PathShow_draw
;Version_path_show	dd szVersion_path_show
	dd 0
	dd 0

;a_init 		db 'lib_init',0
;a_version		db 'version',0

aEdit_box_draw		db 'edit_box',0
aEdit_box_key		db 'edit_box_key',0
aEdit_box_mouse 	db 'edit_box_mouse',0
;aVersion_ed		db 'version_ed',0

;aCheck_box_draw	db 'check_box_draw',0
;aCheck_box_mouse	db 'check_box_mouse',0
;aVersion_ch		db 'version_ch',0

;aOption_box_draw	db 'option_box_draw',0
;aOption_box_mouse	db 'option_box_mouse',0
;aVersion_op		db 'version_op',0

aScrollbar_ver_draw	db 'scrollbar_v_draw',0
aScrollbar_ver_mouse	db 'scrollbar_v_mouse',0
;aScrollbar_hor_draw	db 'scrollbar_h_draw',0
;aScrollbar_hor_mouse	db 'scrollbar_h_mouse',0
;aVersion_scrollbar	db 'version_scrollbar',0

;aDbutton_draw		db 'dbutton_draw',0
;aDbutton_mouse 	db 'dbutton_mouse',0
;aVersion_dbutton	db 'version_dbutton',0

aMenu_bar_draw		db 'menu_bar_draw',0
aMenu_bar_mouse 	db 'menu_bar_mouse',0
aMenu_bar_activate	db 'menu_bar_activate',0
;aVersion_menu_bar	db 'version_menu_bar',0

aFileBrowser_draw	db 'FileBrowser_draw',0
aFileBrowser_mouse	db 'FileBrowser_mouse',0
aFileBrowser_key	db 'FileBrowser_key',0
;aVersion_FileBrowser	db 'version_FileBrowser',0

sz_PathShow_prepare	db 'PathShow_prepare',0
sz_PathShow_draw	db 'PathShow_draw',0
;szVersion_path_show	db 'version_PathShow',0
;---------------------------------------------------------------------
;---------------------------------------------------------------------
align	4
window_high			dd 0
window_width			dd 0
window_status			dd 0

active_process			dd 0
PID				dd 0
sort_type			dd 2
root_folder_area		dd 0
root_folder_block		dd 0
root1_folder_area		dd 0
root1_folder_block		dd 0
temp_counter_1			dd 0
retrieved_devices_table_counter dd 0
communication_area		dd 0
open_dialog_type		dd 0

open_dialog_title_pointer:
	dd title_0
	dd title_1
	dd title_2
	dd 0
	
message_open_dialog_button:
	dd message_0
	dd message_1
	dd message_2
	dd 0
;---------------------------------------------------------------------
expansion_length	dd 0
;---------------------------------------------------------------------
N_error 		dd 0
error_type		dd 0
error_path		dd 0
error_window_x: 	dd 100 shl 16+250
error_window_y: 	dd 100 shl 16+120
;---------------------------------------------------------------------
mouse_scroll_data:
.vertical	dw 0
.horizontal	dw 0

mouse_position:
.y	dw 0
.x	dw 0
;---------------------------------------------------------------------
; not	change	this	section!!!
; start section
;---------------------------------------------------------------------
align	4
image_file	dd 0
raw_pointer	dd 0
return_code	dd 0
img_size	dd 0
deflate_unpack	dd 0
raw_pointer_2	dd 0	;+20
;---------------------------------------------------------------------
; end	section
;---------------------------------------------------------------------
align	4
fileinfo:
.subfunction	dd 5
.Offset 	dd 0
.Offset_1	dd 0
.size		dd 0
.return 	dd file_info
		db 0
.name:		dd file_name
;---------------------------------------------------------------------
align	4
dirinfo:
.subfunction	dd 1
.start		dd 0
.flags		dd 0
.size		dd 0
.return 	dd 0
		db 0
.name:		dd dir_path
;---------------------------------------------------------------------
align	4
dir_header:
.version	dd 0	;+0
.curn_blocks	dd 0	;+4
.totl_blocks	dd 0	;+8
.other	rb	20
;---------------------------------------------------------------------
load_ini_error_type:
	db 'Error loading INI file',0

load_icons_error_type:
	db 'Error loading of icons file',0

memory_free_error_type:
	db 'Error of free memory',0

memory_get_error_type:
	db 'Memory allocation error',0

load_directory_error_type:
	db 'Error loading directory',0

convert_icons_error_type:
	db 'Unsupported or corrupt data for icons file',0
;---------------------------------------------------------------------
error_help_text:
	db 'For continue press <Esc> key or <Cancel>',0
;---------------------------------------------------------------------
align	4
error_fs_text_pointers:
	dd error_fs_text_0
	dd error_fs_text_1
	dd error_fs_text_2
	dd error_fs_text_3
	dd error_fs_text_4
	dd error_fs_text_5
	dd error_fs_text_6
	dd error_fs_text_7
	dd error_fs_text_8
	dd error_fs_text_9
	dd error_fs_text_10
	dd error_fs_text_11

error_fs_text_0:	db '0 - Success full',0
error_fs_text_1:	db '1 - Base and/or partition of a hard disk is not defined',0
error_fs_text_2:	db '2 - Function is not supported for the given file system',0
error_fs_text_3:	db '3 - Unknown file system',0
error_fs_text_4:	db '4 - Reserved, is never returned in the current implementation',0
error_fs_text_5:	db '5 - File not found',0
error_fs_text_6:	db '6 - End of file, EOF',0
error_fs_text_7:	db '7 - Pointer lies outside of application memory',0
error_fs_text_8:	db '8 - Disk is full',0
error_fs_text_9:	db '9 - FAT table is destroyed',0
error_fs_text_10:	db '10 - Access denied',0
error_fs_text_11:	db '11 - Device error',0
;---------------------------------------------------------------------

extended_key	db 0

shift_flag	db 0
ctrl_flag	db 0
alt_flag	db 0

error_window	db 0

Tab_key 	db 0
Tab_key_block	db 0

filter_flag	db 1

focus_pointer	db 0
;---------------------------------------------------------------------
start_pach:
	db '/rd/1',0

root_pach:
	db '/',0

icons_file_name_2	db 'buttons/'
icons_file_name 	db 'z_icons.png',0
ini_file_name		db 'icons.ini',0
;---------------------------------------------------------------------

message:
	db 'Press any key...',0

message_cancel_button:
	db 'Cancel',0

message_ReloadDir_button:
	db 'Refresh',0

message_ExitDir_button:
	db '^',0

message_file_name:
	db 'File name:',0
	
message_0:
	db ' Open ',0
message_1:
	db ' Save ',0
message_2:
	db 'Select',0
	
title_0:
	db 'Open Dialog',0
title_1:
	db 'Save Dialog',0
title_2:
	db 'Select Dir',0
;---------------------------------------------------------------------
align 4
menu_data_1:
.type:		dd 1   ;+0
.x:
.size_x 	dw 80  ;+4
.start_x	dw 10	;+6
.y:
.size_y 	dw 15	;+8
.start_y	dw 26  ;+10
.text_pointer:	dd menu_text_area_1  ;0 ;+12
.pos_pointer:	dd menu_text_area_1_1 ;0 ;+16
.text_end	dd menu_text_area_1_1 ;0 ;+20
.ret_key	dd 0  ;+24
.mouse_keys	dd 0  ;+28
.x1:
.size_x1	dw 80  ;+32
.start_x1	dw 10	;+34
.y1:
.size_y1	dw 100	 ;+36
.start_y1	dw 41  ;+38
.bckg_col	dd 0xffffff  ;0xe5e5e5 ;+40
.frnt_col	dd 0xff ;+44
.menu_col	dd 0xeef0ff ;0xffffff ;+48
.select 	dd 0 ;+52
.out_select	dd 0 ;+56
.buf_adress	dd 0 ;+60
.procinfo	dd procinfo ;+64
.click		dd 0 ;+68
.cursor 	dd 0 ;+72
.cursor_old	dd 0 ;+76
.interval	dd 16 ;+80
.cursor_max	dd 0 ;+84
.extended_key	dd 0 ;+88
.menu_sel_col	dd 0x00cc00 ;+92
.bckg_text_col	dd 0 ; +96
.frnt_text_col	dd 0xffffff ;+100
.mouse_keys_old dd 0 ;+104
.font_height	dd 8 ;+108
.cursor_out	dd 0 ;+112
.get_mouse_flag dd 0 ;+116
;---------------------------------------------------------------------
menu_text_area_1:
db 'Select Disk',0
;---------------------------------------------------------------------
align 4
menu_data_2:
.type:		dd 0   ;+0
.x:
.size_x 	dw 30  ;+4
.start_x	dw 95	;+6
.y:
.size_y 	dw 15	;+8
.start_y	dw 26  ;+10
.text_pointer:	dd menu_text_area_2  ;0 ;+12
.pos_pointer:	dd menu_text_area_2.1 ;0 ;+16
.text_end	dd menu_text_area_2.end ;0 ;+20
.ret_key	dd 0  ;+24
.mouse_keys	dd 0  ;+28
.x1:
.size_x1	dw 30  ;+32
.start_x1	dw 95	;+34
.y1:
.size_y1	dw 100	 ;+36
.start_y1	dw 41  ;+38
.bckg_col	dd 0xffffff ; 0xe5e5e5 ;+40
.frnt_col	dd 0xff ;+44
.menu_col	dd 0xeef0ff  ;0xffffff ;+48
.select 	dd 0 ;+52
.out_select	dd 0 ;+56
.buf_adress	dd 0 ;+60
.procinfo	dd procinfo ;+64
.click		dd 0 ;+68
.cursor 	dd 0 ;+72
.cursor_old	dd 0 ;+76
.interval	dd 16 ;+80
.cursor_max	dd 0 ;+84
.extended_key	dd 0 ;+88
.menu_sel_col	dd 0x00cc00 ;+92
.bckg_text_col	dd 0 ; +96
.frnt_text_col	dd 0xffffff ;+100
.mouse_keys_old dd 0 ;+104
.font_height	dd 8 ;+108
.cursor_out	dd 0 ;+112
.get_mouse_flag dd 0 ;+116
;---------------------------------------------------------------------
menu_text_area_2:
db 'Sort',0
.1:
db 'Name',0
db 'Type',0
db 'Date',0
db 'Size',0
.end:
db 0
;---------------------------------------------------------------------
align 4
menu_data_3:
.type:		dd 0   ;+0
.x:
.size_x 	dw 45  ;+4
.start_x	dw 130	 ;+6
.y:
.size_y 	dw 15	;+8
.start_y	dw 26  ;+10
.text_pointer:	dd menu_text_area_3  ;0 ;+12
.pos_pointer:	dd menu_text_area_3.1 ;0 ;+16
.text_end	dd menu_text_area_3.end ;0 ;+20
.ret_key	dd 0  ;+24
.mouse_keys	dd 0  ;+28
.x1:
.size_x1	dw 95  ;+32
.start_x1	dw 130	 ;+34
.y1:
.size_y1	dw 100	 ;+36
.start_y1	dw 41  ;+38
.bckg_col	dd 0xffffff ; 0xe5e5e5 ;+40
.frnt_col	dd 0xff ;+44
.menu_col	dd 0xeef0ff  ;0xffffff ;+48
.select 	dd 0 ;+52
.out_select	dd 0 ;+56
.buf_adress	dd 0 ;+60
.procinfo	dd procinfo ;+64
.click		dd 0 ;+68
.cursor 	dd 0 ;+72
.cursor_old	dd 0 ;+76
.interval	dd 16 ;+80
.cursor_max	dd 0 ;+84
.extended_key	dd 0 ;+88
.menu_sel_col	dd 0x00cc00 ;+92
.bckg_text_col	dd 0 ; +96
.frnt_text_col	dd 0xffffff ;+100
.mouse_keys_old dd 0 ;+104
.font_height	dd 8 ;+108
.cursor_out	dd 0 ;+112
.get_mouse_flag dd 0 ;+116
;---------------------------------------------------------------------
menu_text_area_3:
db 'Filter',0
.1:
db '*.* - show all',0
db 'Only supported',0
.end:
db 0
;---------------------------------------------------------------------

align 4
scroll_bar_data_vertical:
.x:
.size_x 	dw 15 ;+0
.start_x	dw 500 ;+2
.y:
.size_y 	dw 300 ;+4
.start_y	dw 45 ;+6
.btn_high	dd 15 ;+8
.type		dd 2  ;+12
.max_area	dd 10  ;+16
.cur_area	dd 2  ;+20
.position	dd 0  ;+24
.bckg_col	dd 0xeeeeee ;+28
.frnt_col	dd 0xbbddff ;+32 ;0x8aeaa0
.line_col	dd 0  ;+36
.redraw 	dd 0  ;+40
.delta		dw 0  ;+44
.delta2 	dw 0  ;+46
.run_x:
.r_size_x	dw 0  ;+48
.r_start_x	dw 0  ;+50
.run_y:
.r_size_y	dw 0 ;+52
.r_start_y	dw 0 ;+54
.m_pos		dd 0 ;+56
.m_pos_2	dd 0 ;+60
.m_keys 	dd 0 ;+64
.run_size	dd 0 ;+68
.position2	dd 0 ;+72
.work_size	dd 0 ;+76
.all_redraw	dd 0 ;+80
.ar_offset	dd 1 ;+84
;---------------------------------------------------------------------
align 4
file_browser_data_1:
.type				dd 0 ;+0
.x:
.size_x 			dw 400 ;+4
.start_x			dw 10 ;+6
.y:
.size_y 			dw 550 ;+8
.start_y			dw 45 ;+10
.icon_size_y			dw 16 ; +12
.icon_size_x			dw 16 ; +14
.line_size_x			dw 0 ; +16
.line_size_y			dw 18 ; +18
.type_size_x			dw 0 ; +20
.size_size_x			dw 0 ; +22
.date_size_x			dw 0 ; +24
.attributes_size_x		dw 0 ; +26
.icon_assoc_area		dd 0 ; +28
.icon_raw_area			dd 0 ; +32
.resolution_raw 		dd 0 ; +36
.palette_raw			dd 0 ; +40
.directory_path_area		dd 0 ; +44
.file_name_area 		dd 0 ; +48
.select_flag			dd 0 ; +52
.background_color		dd 0xffffff ; +56
.select_color			dd 0xbbddff ; +60
.seclect_text_color		dd 0 ; +64
.text_color			dd 0 ; +68
.reduct_text_color		dd 0xff0000 ; +72
.marked_text_color		dd 0 ; +76
.max_panel_line 		dd 0 ; +80
.select_panel_counter		dd 1 ; +84
.folder_block			dd 0 ; +88
.start_draw_line		dd 0 ; +92
.start_draw_cursor_line 	dw 0 ; +96 ; pixels
.folder_data			dd 0 ; +98
.temp_counter			dd 0 ; +102
.file_name_length		dd 0 ; +106
.marked_file			dd 0 ; +110
.extension_size 		dd 0 ; +114
.extension_start		dd 0 ; +118
.type_table			dd features_table ; +122
.ini_file_start 		dd 0 ; +126
.ini_file_end			dd 0 ; +130
.draw_scroll_bar		dd 0 ; +134
.font_size_y			dw 9 ; +138
.font_size_x			dw 6 ; +140
.mouse_keys			dd 0 ; +142
.mouse_keys_old 		dd 0 ; +146
.mouse_pos			dd 0 ; +150
.mouse_keys_delta		dd 0 ; +154
.mouse_key_delay		dd 50 ; +158
.mouse_keys_tick		dd 0 ; +162
.start_draw_cursor_line_2	dw 0 ;+166
.all_redraw			dd 0 ;+168
.selected_BDVK_adress		dd 0 ;+172
.key_action			dw 0 ;+176
.key_action_num 		dw 0 ;+178
.name_temp_area 		dd name_temp_area ;+180
.max_name_temp_size		dd 0 ;+184
.display_name_max_length	dd 0 ;+188
.draw_panel_selection_flag	dd 0 ;+192
.mouse_pos_old			dd 0 ;+196
.marked_counter 		dd 0 ;+200
.keymap_pointer 		dd keymap_area ;+204
;---------------------------------------------------------------------
PathShow_data_1:
.type			dd 0	;+0
.start_y		dw 11	;+4
.start_x		dw 10	;+6
.font_size_x		dw 6	;+8	; 6 - for font 0, 8 - for font 1
.area_size_x		dw 200	;+10
.font_number		dd 0	;+12	; 0 - monospace, 1 - variable
.background_flag	dd 0	;+16
.font_color		dd 0x0	;+20
.background_color	dd 0x0	;+24
.text_pointer		dd dir_path	;+28
.work_area_pointer	dd text_work_area	;+32
.temp_text_length	dd 0	;+36
;---------------------------------------------------------------------
; for EDITBOX
align	4
name_editboxes:
edit1	edit_box 200,10,7,0xffffff,0xbbddff,0,0,0,4095,user_selected_name,mouse_dd,,0
name_editboxes_end:

;mouse_flag:	dd 0x0

mouse_dd rd	1
;---------------------------------------------------------------------
window_x:
.x_size 	dw 420
.x_start	dw 10
window_y:
.y_size 	dw 320
.y_start	dw 10
;---------------------------------------------------------------------
features_table:
.type_table:
	db '<DIR> '
;---------------------------------------------------------------------
.size_table:
	db '1023b '
;---------------------------------------------------------------------
.date_table:
	db '00.00.00 00:00 '
;---------------------------------------------------------------------
.year_table:
	db '    '
;---------------------------------------------------------------------
example_name_temp:	
	db 'temp1.asm',0
;---------------------------------------------------------------------
IM_END:
;---------------------------------------------------------------------
do_not_draw_open_button_label	rb 1
;---------------------------------------------------------------------
;include_debug_strings
;---------------------------------------------------------------------
align 4
app_colours:

w_frame 		rd 1
w_grab			rd 1
w_grab_button		rd 1
w_grab_button_text	rd 1
w_grab_text		rd 1
w_work			rd 1
w_work_button		rd 1
w_work_button_text	rd 1
w_work_text		rd 1
w_work_graph		rd 1
;---------------------------------------------------------------------
open_button_coordinates rd 1
;---------------------------------------------------------------------
error_handler_store_input_mode rd 1
;---------------------------------------------------------------------
menu_text_area_1_1:
rb 256
;---------------------------------------------------------------------
	rb 1024
stacktop:
;---------------------------------------------------------------------
; window error message
	rb 1024
thread_stack:
;---------------------------------------------------------------------
retrieved_devices_table:
	rb 200
;---------------------------------------------------------------------
keymap_area:
	rb 128
;---------------------------------------------------------------------
name_temp_area:
	rb 256
;---------------------------------------------------------------------
user_selected_name:
	rb 256
;---------------------------------------------------------------------
param:
	rb 256
;---------------------------------------------------------------------
path:
	rb 4096
;---------------------------------------------------------------------
file_name:
	rb 4096
;---------------------------------------------------------------------
previous_dir_path:
	rb 4096
;---------------------------------------------------------------------
dir_path:
	rb 4096
;---------------------------------------------------------------------
dir_path_temp:
	rb 4096
;---------------------------------------------------------------------
text_work_area:
	rb 1024
;---------------------------------------------------------------------
procinfo:
process_info:
	rb 1024
;----------------------
file_info:
	rb 40
I_END: