;***************************************************************************** ; 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 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 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 add eax,[img_size] mov [file_browser_data_1.ini_file_end],eax 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,'' 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 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 key or ',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_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 ' ' ;--------------------------------------------------------------------- .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_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: