forked from KolibriOS/kolibrios
OpenDialog:
1) Use component PathShow 2) Edit and restore the file name in the Save Dialog 3) Small general optimization of code git-svn-id: svn://kolibrios.org@1435 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
2e1f635004
commit
4631e5997c
File diff suppressed because it is too large
Load Diff
@ -28,232 +28,240 @@
|
||||
; import_boxlib procedure written by <Lrz>
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
use32
|
||||
org 0x0
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 0x01
|
||||
dd START
|
||||
dd IM_END
|
||||
dd I_END
|
||||
dd stacktop
|
||||
dd 0x0
|
||||
dd path
|
||||
db 'MENUET01'
|
||||
dd 0x01
|
||||
dd START
|
||||
dd IM_END
|
||||
dd I_END
|
||||
dd stacktop
|
||||
dd 0x0
|
||||
dd path
|
||||
|
||||
include '../../../../../macros.inc'
|
||||
include '../../load_lib.mac'
|
||||
;include 'macros.inc'
|
||||
;include 'load_lib.mac'
|
||||
@use_library
|
||||
@use_library
|
||||
include 'opendial.mac'
|
||||
use_OpenDialog
|
||||
use_OpenDialog
|
||||
;---------------------------------------------------------------------
|
||||
;--- Start of program ----------------------------------------------
|
||||
;--- Start of program ----------------------------------------------
|
||||
;---------------------------------------------------------------------
|
||||
START:
|
||||
mcall 68, 11
|
||||
mcall 66, 1, 1
|
||||
mcall 40, 0x27
|
||||
;---------------------------------------------------------------------
|
||||
mcall 68,11
|
||||
mcall 66,1,1
|
||||
mcall 40,0x27
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
load_libraries l_libs_start,end_l_libs
|
||||
load_libraries l_libs_start,end_l_libs
|
||||
|
||||
test eax,eax
|
||||
jnz button.exit
|
||||
test eax,eax
|
||||
jnz button.exit
|
||||
|
||||
; unpack deflate
|
||||
mov eax,[unpack_DeflateUnpack2]
|
||||
mov [deflate_unpack],eax
|
||||
mov eax,[unpack_DeflateUnpack2]
|
||||
mov [deflate_unpack],eax
|
||||
|
||||
;OpenDialog initialisation
|
||||
; OpenDialog initialisation
|
||||
init_OpenDialog OpenDialog_data
|
||||
|
||||
mov edi,filename_area
|
||||
mov esi,start_temp_file_name
|
||||
xor eax,eax
|
||||
cld
|
||||
@@:
|
||||
lodsb
|
||||
stosb
|
||||
test eax,eax
|
||||
jnz @b
|
||||
|
||||
|
||||
; mov ebx,icons_file_name
|
||||
; mov esi,path
|
||||
; mov edi,file_name
|
||||
|
||||
; mov ebx,icons_file_name
|
||||
; mov esi,path
|
||||
; mov edi,file_name
|
||||
copy_path icons_file_name,path,library_path,0
|
||||
|
||||
mcall 70,fileinfo
|
||||
|
||||
copy_path icons_file_name,path,library_path,0
|
||||
|
||||
mcall 70, fileinfo
|
||||
mov [fileinfo+0],dword 0
|
||||
|
||||
mov [fileinfo+0],dword 0
|
||||
mov ecx,[file_info+32]
|
||||
mov [fileinfo+12],ecx
|
||||
mov [img_size],ecx
|
||||
|
||||
|
||||
mov ecx,[file_info+32]
|
||||
mov [fileinfo+12],ecx
|
||||
mov [img_size],ecx
|
||||
|
||||
|
||||
mcall 68, 12
|
||||
mcall 68,12
|
||||
|
||||
|
||||
mov [fileinfo+16],eax
|
||||
mov [image_file],eax
|
||||
mov [fileinfo+16],eax
|
||||
mov [image_file],eax
|
||||
|
||||
|
||||
mcall 70, fileinfo
|
||||
|
||||
xor eax,eax
|
||||
mov [return_code],eax
|
||||
mov eax,image_file
|
||||
mcall 70,fileinfo
|
||||
|
||||
xor eax,eax
|
||||
mov [return_code],eax
|
||||
mov eax,image_file
|
||||
call [cnv_png_import.Start]
|
||||
|
||||
mov ecx,[image_file]
|
||||
mcall 68, 13,
|
||||
|
||||
cmp [return_code],dword 0
|
||||
jne button.exit
|
||||
|
||||
mov ebx,[raw_pointer]
|
||||
mov eax,[ebx+4]
|
||||
; set of button size
|
||||
mov [dinamic_button_data_1.size_x],ax
|
||||
mov [dinamic_button_data_1.size_y],ax
|
||||
mov [dinamic_button_data_2.size_x],ax
|
||||
mov [dinamic_button_data_2.size_y],ax
|
||||
mov eax,[ebx+12]
|
||||
; set of RAW resolution to pixel
|
||||
mov [dinamic_button_data_1.resolution_raw],eax
|
||||
mov [dinamic_button_data_2.resolution_raw],eax
|
||||
mov eax,[ebx+20]
|
||||
add eax,ebx
|
||||
; set RAW palette, use else resolution 8bit or less
|
||||
mov [dinamic_button_data_1.palette_raw],eax
|
||||
mov [dinamic_button_data_2.palette_raw],eax
|
||||
mov eax,[ebx+28]
|
||||
add eax,ebx
|
||||
; set RAW area for passive button
|
||||
mov [dinamic_button_data_1.passive_raw],eax
|
||||
mov [dinamic_button_data_2.passive_raw],eax
|
||||
mov ecx,[ebx+4]
|
||||
imul ecx,[ebx+4]
|
||||
imul ecx,[ebx+12]
|
||||
shr ecx,3
|
||||
add eax,ecx
|
||||
; set RAW area for active button
|
||||
mov [dinamic_button_data_1.active_raw],eax
|
||||
mov [dinamic_button_data_2.active_raw],eax
|
||||
add eax,ecx
|
||||
; RAW area for click button
|
||||
mov [dinamic_button_data_1.click_raw],eax
|
||||
mov [dinamic_button_data_2.click_raw],eax
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
mov ecx,[image_file]
|
||||
mcall 68,13,
|
||||
|
||||
cmp [return_code],dword 0
|
||||
jne button.exit
|
||||
|
||||
mov ebx,[raw_pointer]
|
||||
mov eax,[ebx+4]
|
||||
; set of button size
|
||||
mov [dinamic_button_data_1.size_x],ax
|
||||
mov [dinamic_button_data_1.size_y],ax
|
||||
mov [dinamic_button_data_2.size_x],ax
|
||||
mov [dinamic_button_data_2.size_y],ax
|
||||
mov eax,[ebx+12]
|
||||
; set of RAW resolution to pixel
|
||||
mov [dinamic_button_data_1.resolution_raw],eax
|
||||
mov [dinamic_button_data_2.resolution_raw],eax
|
||||
mov eax,[ebx+20]
|
||||
add eax,ebx
|
||||
; set RAW palette, use else resolution 8bit or less
|
||||
mov [dinamic_button_data_1.palette_raw],eax
|
||||
mov [dinamic_button_data_2.palette_raw],eax
|
||||
mov eax,[ebx+28]
|
||||
add eax,ebx
|
||||
; set RAW area for passive button
|
||||
mov [dinamic_button_data_1.passive_raw],eax
|
||||
mov [dinamic_button_data_2.passive_raw],eax
|
||||
mov ecx,[ebx+4]
|
||||
imul ecx,[ebx+4]
|
||||
imul ecx,[ebx+12]
|
||||
shr ecx,3
|
||||
add eax,ecx
|
||||
; set RAW area for active button
|
||||
mov [dinamic_button_data_1.active_raw],eax
|
||||
mov [dinamic_button_data_2.active_raw],eax
|
||||
add eax,ecx
|
||||
; RAW area for click button
|
||||
mov [dinamic_button_data_1.click_raw],eax
|
||||
mov [dinamic_button_data_2.click_raw],eax
|
||||
;---------------------------------------------------------------------
|
||||
red:
|
||||
call draw_window
|
||||
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
|
||||
|
||||
mcall 10
|
||||
|
||||
cmp eax,1
|
||||
je red
|
||||
cmp eax,2
|
||||
je key
|
||||
cmp eax,3
|
||||
je button
|
||||
cmp eax,6
|
||||
je mouse
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
key:
|
||||
mcall 2
|
||||
jmp still
|
||||
key:
|
||||
mcall 2
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
button:
|
||||
mcall 17
|
||||
cmp ah, 1
|
||||
jne still
|
||||
.exit:
|
||||
mcall -1
|
||||
button:
|
||||
mcall 17
|
||||
cmp ah,1
|
||||
jne still
|
||||
.exit:
|
||||
mcall -1
|
||||
;---------------------------------------------------------------------
|
||||
mouse:
|
||||
;-----------------------------------------------
|
||||
cmp [scroll_bar_data_horizontal.delta2],0
|
||||
jne .horizontal
|
||||
cmp [scroll_bar_data_horizontal.delta2],0
|
||||
jne .horizontal
|
||||
.vertical:
|
||||
mov eax,[scroll_bar_data_vertical.max_area]
|
||||
cmp eax,[scroll_bar_data_vertical.cur_area]
|
||||
jbe .horizontal
|
||||
mov eax,[scroll_bar_data_vertical.max_area]
|
||||
cmp eax,[scroll_bar_data_vertical.cur_area]
|
||||
jbe .horizontal
|
||||
; mouse event for Vertical ScrollBar
|
||||
push dword scroll_bar_data_vertical
|
||||
call [scrollbar_ver_mouse]
|
||||
mov eax,scroll_bar_data_vertical.redraw
|
||||
xor ebx,ebx
|
||||
cmp [eax],ebx
|
||||
je @f
|
||||
mov [eax],ebx
|
||||
jmp .draw_cube
|
||||
push dword scroll_bar_data_vertical
|
||||
call [scrollbar_ver_mouse]
|
||||
mov eax,scroll_bar_data_vertical.redraw
|
||||
xor ebx,ebx
|
||||
cmp [eax],ebx
|
||||
je @f
|
||||
mov [eax],ebx
|
||||
jmp .draw_cube
|
||||
@@:
|
||||
cmp [scroll_bar_data_vertical.delta2],0
|
||||
jne still
|
||||
cmp [scroll_bar_data_vertical.delta2],0
|
||||
jne still
|
||||
.horizontal:
|
||||
mov eax,[scroll_bar_data_horizontal.max_area]
|
||||
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
||||
jbe .other
|
||||
mov eax,[scroll_bar_data_horizontal.max_area]
|
||||
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
||||
jbe .other
|
||||
; mouse event for Horizontal ScrollBar
|
||||
push dword scroll_bar_data_horizontal
|
||||
call [scrollbar_hor_mouse]
|
||||
mov eax,scroll_bar_data_horizontal.redraw
|
||||
xor ebx,ebx
|
||||
cmp [eax],ebx
|
||||
je .other
|
||||
mov [eax],ebx
|
||||
push dword scroll_bar_data_horizontal
|
||||
call [scrollbar_hor_mouse]
|
||||
mov eax,scroll_bar_data_horizontal.redraw
|
||||
xor ebx,ebx
|
||||
cmp [eax],ebx
|
||||
je .other
|
||||
mov [eax],ebx
|
||||
.draw_cube:
|
||||
call draw_cube
|
||||
jmp still
|
||||
call draw_cube
|
||||
jmp still
|
||||
.other:
|
||||
cmp [scroll_bar_data_vertical.delta2],0
|
||||
jne still
|
||||
cmp [scroll_bar_data_horizontal.delta2],0
|
||||
jne still
|
||||
cmp [scroll_bar_data_vertical.delta2],0
|
||||
jne still
|
||||
cmp [scroll_bar_data_horizontal.delta2],0
|
||||
jne still
|
||||
;-----------------------------------------------
|
||||
.menu_bar_1:
|
||||
call .set_mouse_flag
|
||||
call .set_mouse_flag
|
||||
@@:
|
||||
; mouse event for Menu 1
|
||||
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 analyse_out_menu_1
|
||||
jmp .menu_bar_1
|
||||
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 analyse_out_menu_1
|
||||
jmp .menu_bar_1
|
||||
;--------------------------------------------
|
||||
.menu_bar_2:
|
||||
; mouse event for Menu 2
|
||||
push dword menu_data_2
|
||||
call [menu_bar_mouse]
|
||||
cmp [menu_data_2.click],dword 1
|
||||
jne .mouse_dinamic_button
|
||||
cmp [menu_data_2.cursor_out],dword 0
|
||||
jne analyse_out_menu_2
|
||||
jmp .menu_bar_1
|
||||
push dword menu_data_2
|
||||
call [menu_bar_mouse]
|
||||
cmp [menu_data_2.click],dword 1
|
||||
jne .mouse_dinamic_button
|
||||
cmp [menu_data_2.cursor_out],dword 0
|
||||
jne analyse_out_menu_2
|
||||
jmp .menu_bar_1
|
||||
;--------------------------------------------
|
||||
.mouse_dinamic_button:
|
||||
; mouse event for Dinamic Button 1
|
||||
push dword dinamic_button_data_1
|
||||
call [dinamic_button_mouse]
|
||||
mov eax,dinamic_button_data_1.click
|
||||
cmp [eax],dword 1
|
||||
jne @f
|
||||
mov [eax],dword 0
|
||||
jmp about
|
||||
push dword dinamic_button_data_1
|
||||
call [dinamic_button_mouse]
|
||||
mov eax,dinamic_button_data_1.click
|
||||
cmp [eax],dword 1
|
||||
jne @f
|
||||
mov [eax],dword 0
|
||||
jmp about
|
||||
@@:
|
||||
; mouse event for Dinamic Button 2
|
||||
push dword dinamic_button_data_2
|
||||
call [dinamic_button_mouse]
|
||||
mov eax,dinamic_button_data_2.click
|
||||
cmp [eax],dword 1
|
||||
jne still ;@f
|
||||
mov [eax],dword 0
|
||||
jmp button.exit
|
||||
push dword dinamic_button_data_2
|
||||
call [dinamic_button_mouse]
|
||||
mov eax,dinamic_button_data_2.click
|
||||
cmp [eax],dword 1
|
||||
jne still ;@f
|
||||
mov [eax],dword 0
|
||||
jmp button.exit
|
||||
;---------------------------------------------------------------------
|
||||
.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
|
||||
.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:
|
||||
; analyse result of Menu 1
|
||||
@ -264,19 +272,19 @@ analyse_out_menu_1:
|
||||
je OpenDialog_start_1
|
||||
cmp eax,dword 3
|
||||
je OpenDialog_start_2
|
||||
cmp eax,dword 4
|
||||
je button.exit
|
||||
jmp still
|
||||
|
||||
cmp eax,dword 4
|
||||
je button.exit
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
analyse_out_menu_2:
|
||||
; analyse result of Menu 2
|
||||
cmp [menu_data_2.cursor_out],dword 2
|
||||
je about
|
||||
jmp still
|
||||
cmp [menu_data_2.cursor_out],dword 2
|
||||
je about
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
about:
|
||||
mcall 51,1,thread3,thread
|
||||
jmp still
|
||||
about:
|
||||
mcall 51,1,thread3,thread
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
OpenDialog_start_0:
|
||||
mov [OpenDialog_data.type],0
|
||||
@ -291,138 +299,124 @@ OpenDialog_start:
|
||||
; mov esi,path
|
||||
; mov edi,library_path
|
||||
; call copy_file_path
|
||||
call get_filter_data
|
||||
|
||||
copy_path open_dialog_name,path,library_path,0
|
||||
|
||||
|
||||
start_OpenDialog OpenDialog_data
|
||||
|
||||
cmp [OpenDialog_data.status],2 ; OpenDialog does not start
|
||||
je still ; some kind of alternative, instead OpenDialog
|
||||
cmp [OpenDialog_data.status],2 ; OpenDialog does not start
|
||||
je still ; some kind of alternative, instead OpenDialog
|
||||
cmp [OpenDialog_data.status],1
|
||||
jne still ; OpenDialog user say cancel
|
||||
; copy path
|
||||
; prepare path - PathShow
|
||||
push dword PathShow_data_1
|
||||
call [PathShow_prepare]
|
||||
jne still ; OpenDialog user say cancel
|
||||
; copy path
|
||||
; prepare path - PathShow
|
||||
push dword PathShow_data_1
|
||||
call [PathShow_prepare]
|
||||
|
||||
call draw_window
|
||||
jmp still ; OpenDialog user selected the target file
|
||||
; [OpenDialog_data.openfile_pach] pointer of area the target file
|
||||
jmp still ; OpenDialog user selected the target file
|
||||
; [OpenDialog_data.openfile_pach] pointer of area the target file
|
||||
;---------------------------------------------------------------------
|
||||
get_filter_data:
|
||||
mov edi,[OpenDialog_data.com_area]
|
||||
test edi,edi
|
||||
jnz @f
|
||||
add esp,4
|
||||
jmp still
|
||||
@@:
|
||||
add edi,4096+4
|
||||
mov esi,Filter
|
||||
mov ecx,[esi]
|
||||
inc ecx
|
||||
cld
|
||||
rep movsb
|
||||
mov edi,[OpenDialog_data.com_area]
|
||||
mov [edi+4096],dword 1
|
||||
ret
|
||||
;---------------------------------------------------------------------
|
||||
draw_window:
|
||||
mcall 12, 1
|
||||
mcall 0, <0,400>, <0,400>, 0x03AABBCC, 0x805080D0, 0x005080D0
|
||||
mcall 71, 1, header_1
|
||||
mcall 12,1
|
||||
mcall 0,<0,400>,<0,400>,0x03AABBCC,0x805080D0,0x005080D0
|
||||
mcall 71,1,header_1
|
||||
;---------------------------------------------
|
||||
; draw for Menu 1
|
||||
push dword menu_data_1
|
||||
call [menu_bar_draw]
|
||||
push dword menu_data_1
|
||||
call [menu_bar_draw]
|
||||
; draw for Menu 2
|
||||
push dword menu_data_2
|
||||
call [menu_bar_draw]
|
||||
push dword menu_data_2
|
||||
call [menu_bar_draw]
|
||||
;---------------------------------------------
|
||||
; draw for Dinamic Button 1
|
||||
push dword dinamic_button_data_1
|
||||
call [dinamic_button_draw]
|
||||
; draw for Dinamic Button 1
|
||||
push dword dinamic_button_data_1
|
||||
call [dinamic_button_draw]
|
||||
; draw for Dinamic Button 2
|
||||
push dword dinamic_button_data_2
|
||||
call [dinamic_button_draw]
|
||||
push dword dinamic_button_data_2
|
||||
call [dinamic_button_draw]
|
||||
;---------------------------------------------
|
||||
mcall 13,<170,200>,<25,15>,0xffffb0
|
||||
; mov bx,28
|
||||
; add ebx,2 shl 16
|
||||
; mcall 4,,0xC0000000,text_work_area,,0xffffb0
|
||||
; draw for PathShow
|
||||
push dword PathShow_data_1
|
||||
call [PathShow_draw]
|
||||
push dword PathShow_data_1
|
||||
call [PathShow_draw]
|
||||
;---------------------------------------------
|
||||
; set all_redraw flag for draw all ScrollBar
|
||||
; In some cases it is necessity to draw only the area
|
||||
; of moving of a "runner", for acceleration of output -
|
||||
; of moving of a "runner", for acceleration of output -
|
||||
; in this case the flag needs to be reset to 0 (zero).
|
||||
xor eax,eax
|
||||
inc eax
|
||||
mov [scroll_bar_data_vertical.all_redraw],eax
|
||||
mov [scroll_bar_data_horizontal.all_redraw],eax
|
||||
|
||||
xor eax,eax
|
||||
inc eax
|
||||
mov [scroll_bar_data_vertical.all_redraw],eax
|
||||
mov [scroll_bar_data_horizontal.all_redraw],eax
|
||||
|
||||
; draw for Vertical ScrollBar
|
||||
push dword scroll_bar_data_vertical
|
||||
call [scrollbar_ver_draw]
|
||||
push dword scroll_bar_data_vertical
|
||||
call [scrollbar_ver_draw]
|
||||
; draw for Horizontal ScrollBar
|
||||
push dword scroll_bar_data_horizontal
|
||||
call [scrollbar_hor_draw]
|
||||
; reset all_redraw flag
|
||||
xor eax,eax
|
||||
mov [scroll_bar_data_vertical.all_redraw],eax
|
||||
mov [scroll_bar_data_horizontal.all_redraw],eax
|
||||
push dword scroll_bar_data_horizontal
|
||||
call [scrollbar_hor_draw]
|
||||
; reset all_redraw flag
|
||||
xor eax,eax
|
||||
mov [scroll_bar_data_vertical.all_redraw],eax
|
||||
mov [scroll_bar_data_horizontal.all_redraw],eax
|
||||
;---------------------------------------------
|
||||
call draw_cube
|
||||
mcall 12, 2
|
||||
ret
|
||||
call draw_cube
|
||||
mcall 12,2
|
||||
ret
|
||||
;---------------------------------------------------------------------
|
||||
draw_cube:
|
||||
mcall 13,<30,301>,<50,301>,0xafafaf
|
||||
mov ecx,[scroll_bar_data_vertical.position]
|
||||
add ecx,50
|
||||
shl ecx,16
|
||||
mov cx,30
|
||||
mov ebx,[scroll_bar_data_horizontal.position]
|
||||
add ebx,30
|
||||
shl ebx,16
|
||||
mov bx,30
|
||||
mcall 13, , , 0x0
|
||||
ret
|
||||
mcall 13,<30,301>,<50,301>,0xafafaf
|
||||
mov ecx,[scroll_bar_data_vertical.position]
|
||||
add ecx,50
|
||||
shl ecx,16
|
||||
mov cx,30
|
||||
mov ebx,[scroll_bar_data_horizontal.position]
|
||||
add ebx,30
|
||||
shl ebx,16
|
||||
mov bx,30
|
||||
mcall 13,,,0x0
|
||||
ret
|
||||
;---------------------------------------------------------------------
|
||||
include 'data.inc'
|
||||
include 'w_about.inc'
|
||||
;---------------------------------------------------------------------
|
||||
IM_END:
|
||||
rb 1024
|
||||
rb 1024
|
||||
thread:
|
||||
;---------------------------------------------------------------------
|
||||
rb 1024
|
||||
rb 1024
|
||||
stacktop:
|
||||
;---------------------------------------------------------------------
|
||||
path:
|
||||
rb 4096
|
||||
rb 4096
|
||||
;---------------------------------------------------------------------
|
||||
openfile_pach:
|
||||
rb 4096
|
||||
rb 4096
|
||||
;---------------------------------------------------------------------
|
||||
file_name:
|
||||
library_path:
|
||||
rb 4096
|
||||
rb 4096
|
||||
;---------------------------------------------------------------------
|
||||
plugin_pach:
|
||||
rb 4096
|
||||
rb 4096
|
||||
;---------------------------------------------------------------------
|
||||
text_work_area:
|
||||
rb 4096
|
||||
rb 4096
|
||||
;---------------------------------------------------------------------
|
||||
filename_area:
|
||||
rb 256
|
||||
;---------------------------------------------------------------------
|
||||
file_info:
|
||||
rb 40
|
||||
rb 40
|
||||
;---------------------------------------------------------------------
|
||||
procinfo:
|
||||
rb 1024
|
||||
rb 1024
|
||||
;---------------------------------------------------------------------
|
||||
I_END:
|
||||
|
||||
|
@ -7,6 +7,7 @@ ok_btn db 'Ok',0
|
||||
|
||||
labelt3 db 'About program',0
|
||||
;---------------------------------------------------------------------
|
||||
start_temp_file_name: db 'ctrldemo_test',0
|
||||
icons_file_name: db 'reload_16x16_8b.png',0
|
||||
system_dir1 db '/sys/lib/'
|
||||
plugin_BMP_name db 'cnv_bmp.obj',0
|
||||
@ -166,8 +167,8 @@ menu_bar_activate dd aMenu_bar_activate
|
||||
;Version_FileBrowser dd aVersion_FileBrowser
|
||||
|
||||
PathShow_prepare dd sz_PathShow_prepare
|
||||
PathShow_draw dd sz_PathShow_draw
|
||||
|
||||
PathShow_draw dd sz_PathShow_draw
|
||||
;Version_path_show dd szVersion_path_show
|
||||
dd 0
|
||||
dd 0
|
||||
|
||||
@ -435,6 +436,8 @@ OpenDialog_data:
|
||||
.draw_window dd draw_window ;+28
|
||||
.status dd 0 ;+32
|
||||
.openfile_pach dd openfile_pach ;+36
|
||||
.filename_area dd filename_area ;+40
|
||||
.filter_area dd Filter
|
||||
|
||||
communication_area_name:
|
||||
db 'FFFFFFFF_open_dialog',0
|
||||
@ -444,7 +447,8 @@ communication_area_default_pach:
|
||||
db '/rd/1',0
|
||||
|
||||
Filter:
|
||||
dd Filter.end - Filter
|
||||
dd Filter.end - Filter.1
|
||||
.1:
|
||||
db 'JPEG',0
|
||||
db 'JPG',0
|
||||
db 'JPE',0
|
||||
@ -452,6 +456,8 @@ db 'PNG',0
|
||||
db 'GIF',0
|
||||
db 'BMP',0
|
||||
db 'KEX',0
|
||||
db 'DAT',0
|
||||
db 'INI',0
|
||||
.end:
|
||||
db 0
|
||||
;---------------------------------------------------------------------
|
||||
|
@ -26,29 +26,31 @@
|
||||
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
;*****************************************************************************
|
||||
;*****************************************************************************
|
||||
macro OpenDialog_exit
|
||||
macro OpenDialog_exit
|
||||
{
|
||||
popa
|
||||
popa
|
||||
ret
|
||||
}
|
||||
;*****************************************************************************
|
||||
macro use_OpenDialog
|
||||
{
|
||||
OpenDialog:
|
||||
od_type equ dword [ebp] ; 0-Open, 1-Save, 2-Dir
|
||||
od_type equ dword [ebp] ; 0-Open, 1-Save, 2-Dir
|
||||
od_procinfo equ dword [ebp+4] ; Process info area for function 9
|
||||
od_com_area_name equ dword [ebp+8] ; Name for shared area
|
||||
od_com_area equ dword [ebp+12] ; Adress of shared area
|
||||
od_opendir_pach equ dword [ebp+16] ; Temp area the directory for show
|
||||
od_dir_default_pach equ dword [ebp+20] ; Default path of directory,
|
||||
od_dir_default_pach equ dword [ebp+20] ; Default path of directory,
|
||||
od_start_path equ dword [ebp+24] ; Location path to OpenDialog
|
||||
od_draw_window equ dword [ebp+28] ; Adress of procedure - draw_window
|
||||
od_draw_window equ dword [ebp+28] ; Adress of procedure - draw_window
|
||||
od_status equ dword [ebp+32] ; 0-Cancel, 1-Get path OK, 2-Use alternatives
|
||||
od_openfile_pach equ dword [ebp+36] ; Getting path to file
|
||||
od_filename_area equ dword [ebp+40] ; Adress of file name area
|
||||
od_filter_area equ dword [ebp+44] ; Adress of filter area
|
||||
;*****************************************************************************
|
||||
.init:
|
||||
pusha
|
||||
mcall 9, od_procinfo, -1
|
||||
mcall 9,od_procinfo,-1
|
||||
mov ebx,[ebx+30]
|
||||
mov edi,od_com_area_name
|
||||
add edi,7
|
||||
@ -72,8 +74,8 @@ od_openfile_pach equ dword [ebp+36] ; Getting path to file
|
||||
mcall 68,22,od_com_area_name,8192,0x09
|
||||
mov od_com_area,eax
|
||||
|
||||
mov esi,od_openfile_pach
|
||||
mov edi,od_opendir_pach
|
||||
mov esi,od_openfile_pach
|
||||
mov edi,od_opendir_pach
|
||||
call .copy_dir_path
|
||||
|
||||
OpenDialog_exit
|
||||
@ -84,10 +86,10 @@ OpenDialog_exit
|
||||
mov eax,od_com_area
|
||||
test eax,eax
|
||||
jz .1
|
||||
mov ebx,od_type
|
||||
mov [eax+2],bx
|
||||
mov ebx,od_type
|
||||
mov [eax+2],bx
|
||||
|
||||
mov [eax],word 2 ; folder for open
|
||||
mov [eax],word 2 ; folder for open
|
||||
mov edi,eax
|
||||
add edi,4
|
||||
|
||||
@ -96,17 +98,39 @@ OpenDialog_exit
|
||||
mov al,[esi]
|
||||
test eax,eax
|
||||
jnz @f
|
||||
mov esi,od_dir_default_pach ;communication_area_default_pach
|
||||
mov esi,od_dir_default_pach ;communication_area_default_pach
|
||||
@@:
|
||||
call .copy
|
||||
;----------------------------------------------
|
||||
; copy file name to shared area
|
||||
cmp od_type,dword 1
|
||||
jne .4
|
||||
mov edi,od_com_area
|
||||
add edi,4096-256
|
||||
|
||||
mov esi,od_filename_area
|
||||
; xor eax,eax
|
||||
; mov al,[esi]
|
||||
; test eax,eax
|
||||
test esi,esi
|
||||
jnz @f
|
||||
mov esi,.null
|
||||
@@:
|
||||
call .copy
|
||||
.4:
|
||||
;----------------------------------------------
|
||||
cmp od_type,dword 2
|
||||
je @f
|
||||
call .get_filter_data
|
||||
@@:
|
||||
;----------------------------------------------
|
||||
mov eax,od_com_area_name
|
||||
mov [start_open_dialog.parameter],eax
|
||||
|
||||
mov eax,od_start_path
|
||||
mov [start_open_dialog.name],eax
|
||||
|
||||
mcall 70, start_open_dialog
|
||||
mcall 70,start_open_dialog
|
||||
shr eax,31
|
||||
test eax,eax
|
||||
jnz .1
|
||||
@ -116,7 +140,7 @@ OpenDialog_exit
|
||||
call od_draw_window
|
||||
popa
|
||||
.still:
|
||||
mcall 23, 50
|
||||
mcall 23,50
|
||||
cmp eax,1
|
||||
je .red
|
||||
mov eax,od_com_area
|
||||
@ -124,27 +148,69 @@ OpenDialog_exit
|
||||
test ebx,ebx
|
||||
jz .still
|
||||
cmp ebx,3
|
||||
je .2 ;still
|
||||
je .2
|
||||
cmp ebx,1
|
||||
jne .still
|
||||
|
||||
mov esi,od_com_area
|
||||
add esi,4
|
||||
mov edi,od_openfile_pach ;string
|
||||
mov edi,od_openfile_pach
|
||||
call .copy
|
||||
mov od_status,1
|
||||
mov esi,od_openfile_pach
|
||||
mov edi,od_opendir_pach
|
||||
mov esi,od_openfile_pach
|
||||
mov edi,od_opendir_pach
|
||||
call .copy_dir_path
|
||||
jmp .3 ;kopen_1
|
||||
;----------------------------------------------
|
||||
; copy file name from shared area
|
||||
cmp od_type,dword 1
|
||||
jne @f
|
||||
mov esi,od_com_area
|
||||
add esi,4096-256
|
||||
mov edi,od_filename_area
|
||||
; xor eax,eax
|
||||
; mov al,[edi]
|
||||
; test eax,eax
|
||||
test edi,edi
|
||||
jz @f
|
||||
call .copy
|
||||
@@:
|
||||
;----------------------------------------------
|
||||
jmp .3
|
||||
.2:
|
||||
mov od_status,0
|
||||
jmp .3 ; still
|
||||
jmp .3
|
||||
.1:
|
||||
mov od_status,2 ; thread1
|
||||
mov od_status,2
|
||||
.3:
|
||||
OpenDialog_exit
|
||||
;----------------------------------------------
|
||||
.null:
|
||||
dd 0
|
||||
;----------------------------------------------
|
||||
.get_filter_data:
|
||||
mov edi,od_com_area
|
||||
test edi,edi
|
||||
jnz @f
|
||||
; add esp,4
|
||||
; jmp still
|
||||
ret
|
||||
@@:
|
||||
add edi,4096+4
|
||||
mov esi,od_filter_area
|
||||
mov ecx,[esi]
|
||||
test ecx,ecx
|
||||
jnz @f
|
||||
mov edi,od_com_area
|
||||
mov [edi+4096],dword 0
|
||||
ret
|
||||
@@:
|
||||
inc ecx
|
||||
cld
|
||||
rep movsb
|
||||
mov edi,od_com_area
|
||||
mov [edi+4096],dword 1
|
||||
ret
|
||||
;----------------------------------------------
|
||||
.copy:
|
||||
xor eax,eax
|
||||
cld
|
||||
@ -156,54 +222,45 @@ OpenDialog_exit
|
||||
ret
|
||||
;----------------------------------------------
|
||||
.copy_dir_path:
|
||||
xor eax,eax
|
||||
cmp [esi],al
|
||||
jne @f
|
||||
mov [edi],al
|
||||
mov [ebx],al
|
||||
xor ebx,ebx
|
||||
inc ebx
|
||||
xor eax,eax
|
||||
cmp [esi],al
|
||||
jne @f
|
||||
mov [edi],al
|
||||
mov [ebx],al
|
||||
xor ebx,ebx
|
||||
inc ebx
|
||||
ret
|
||||
@@:
|
||||
cld
|
||||
lodsb
|
||||
stosb
|
||||
test eax,eax
|
||||
jnz @b
|
||||
mov esi,edi
|
||||
dec esi
|
||||
cld
|
||||
lodsb
|
||||
stosb
|
||||
test eax,eax
|
||||
jnz @b
|
||||
cmp od_type,dword 2
|
||||
jne @f
|
||||
ret
|
||||
@@:
|
||||
std
|
||||
lodsb
|
||||
cmp al,'/'
|
||||
jnz @b
|
||||
mov esi,edi
|
||||
dec esi
|
||||
@@:
|
||||
std
|
||||
lodsb
|
||||
cmp al,'/'
|
||||
jnz @b
|
||||
|
||||
; push esi
|
||||
; add esi,2
|
||||
;; mov edi,ebx ;file_name
|
||||
;; xor ebx,ebx
|
||||
;@@:
|
||||
; cld
|
||||
; lodsb
|
||||
;; stosb
|
||||
; inc ebx
|
||||
; test eax,eax
|
||||
; jnz @b
|
||||
; pop esi
|
||||
|
||||
mov [esi+1], byte 0
|
||||
cld
|
||||
mov [esi+1],byte 0
|
||||
cld
|
||||
ret
|
||||
;----------------------------------------------
|
||||
align 4
|
||||
align 4
|
||||
start_open_dialog:
|
||||
.subfunction dd 7
|
||||
.flags dd 0
|
||||
.parameter dd 0 ;od_com_area_name
|
||||
.parameter dd 0 ;od_com_area_name
|
||||
.reserved1 dd 0
|
||||
.reserved2 dd 0
|
||||
db 0
|
||||
.name: dd 0 ;od_start_path
|
||||
.name: dd 0 ;od_start_path
|
||||
}
|
||||
;*****************************************************************************
|
||||
macro init_OpenDialog od_ptr
|
||||
|
Loading…
Reference in New Issue
Block a user