kolibrios-gitea/programs/fs/opendial/opendial.asm
Marat Zakiyanov 267e818f50 Opendial and File Browser control
1) Now shows the full value for the year
2) For ".." dir is not shown unnecessary data
3) Finding the end of section [icons16] for r7241

git-svn-id: svn://kolibrios.org@9728 a494cfbc-eb01-0410-851d-a64ba20cac60
2022-02-23 14:36:48 +00:00

3270 lines
69 KiB
NASM
Raw Blame History

;*****************************************************************************
; 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 '../../KOSfuncs.inc'
include '../../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
mov ecx,[w_work_text]
add ecx,0x80000000
mcall 4,,,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
mov edi,eax
add edi,[img_size]
dec edi
mov esi,eax
add esi,9 ; after [icons16]
cld
@@:
lodsb
cmp esi,edi
je @f
cmp al,byte '['
jne @r
@@:
mov [file_browser_data_1.ini_file_end],esi
ret
;---------------------------------------------------------------------
load_ini:
mov edi,ini_file_name
mov [fileinfo.name],edi
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 edi,icons_path
mov [fileinfo.name],edi
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,'<27>'
jb .ret
cmp al,'<27>'
jb .rus1
cmp al,'<27>'
ja .ret
; 0xE0-0xEF -> 0x90-0x9F
sub al,'<27>'-'<27>'
.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,'<27>'
jb .ret
cmp al,'<27>'
jb .rus1
cmp al,'<27>'
ja .ret
; 0x90-0x9F -> 0xE0-0xEF
add al,'<27>'-'<27>'
.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
align 4
l_libs_start:
library01 l_libs system_dir_Boxlib+9,file_name,system_dir_Boxlib,\
Box_lib_import,plugins_directory
library02 l_libs system_dir_CnvPNG+9,file_name,system_dir_CnvPNG,\
cnv_png_import,plugins_directory
library03 l_libs system_dir_Sort+9,file_name,system_dir_Sort,\
Sort_import,plugins_directory
library04 l_libs system_dir_UNPACK+9,file_name,system_dir_UNPACK,\
UNPACK_import,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_draw',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 '/sys',0
root_pach:
db '/',0
icons_file_name_2 db 'buttons/'
icons_path db '/sys/icons16.png',0
ini_file_name db '/sys/File managers/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.0000 00:00 '
;---------------------------------------------------------------------
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_work_dark rd 1
w_work_light 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: