0,0 → 1,149 |
format MS COFF |
|
public _get_moviefile |
|
section '.text' align 16 |
|
align 4 |
getprocaddress: |
mov edx, [esp + 8] ; hlib |
xor eax, eax |
test edx, edx ; If hlib = 0 then goto .end |
jz .end |
|
.next: |
cmp [edx], dword 0 ; If end of export table then goto .end |
jz .end |
|
xor eax, eax |
mov esi, [edx] |
mov edi, [esp + 4] ; name |
|
.next_: |
lodsb |
scasb |
jne .fail |
or al, al |
jnz .next_ |
jmp .ok |
.fail: |
add edx, 8 |
jmp .next |
|
.ok: ; return address |
mov eax, [edx + 4] |
.end: |
ret 8 |
|
|
|
align 8 |
_get_moviefile: |
|
pushad |
mov eax, 68 |
mov ebx, 19 |
mov ecx, sz_proc_lib |
int 0x40 |
mov [proclib], eax |
test eax, eax |
jz .fail |
|
push [proclib] |
push sz_OpenDialog_init |
call getprocaddress |
mov [opendialog_init], eax |
|
push dword[proclib] |
push sz_OpenDialog_start |
call getprocaddress |
mov [opendialog_start], eax |
|
mov eax, 68 |
mov ebx, 12 |
mov ecx, 4096*3 |
int 0x40 |
|
mov [od.procinfo], eax |
|
add eax, 1024 |
mov [od.filename_area], eax |
|
add eax, 3072 |
mov [od.opendir_path], eax |
|
add eax, 4096 |
mov [od.openfile_path], eax |
|
push od |
call [opendialog_init] |
|
mov eax, [od.openfile_path] |
mov [eax], byte 0 ; end of ASCIIZ-string(may be don't need?) |
|
push od |
call [opendialog_start] |
|
popad |
mov eax, [od.openfile_path]; selected filePath |
|
ret |
.fail: |
xor eax, eax |
ret |
|
align 4 |
fake_on_redraw: |
ret |
|
section '.rdata' align 16 |
|
sz_proc_lib db "/rd/1/lib/proc_lib.obj",0 |
sz_OpenDialog_init db "OpenDialog_init",0 |
sz_OpenDialog_start db "OpenDialog_start",0 |
sz_com_area_name db "FFFFFFFF_open_dialog",0 |
sz_dir_default_path db "/rd/1",0 |
sz_start_path db "/rd/1/File managers/opendial",0 |
|
|
section '.data' align 16 |
|
od: |
.mode dd 0 |
.procinfo dd 0 |
.com_area_name dd sz_com_area_name |
.com_area dd 0 |
.opendir_path dd 0 |
.dir_default_path dd sz_dir_default_path |
.start_path dd sz_start_path |
.draw_window dd fake_on_redraw |
.status dd 0 |
.openfile_path dd 0 |
.filename_area dd 0 |
.filter_area dd filefilter |
.x_size dw 512 |
.x_start dw 512 |
.y_size dw 512 |
.y_start dw 512 |
|
filefilter: |
dd filefilter.end - filefilter |
db 'avi',0 |
db 'flv',0 |
db 'mov',0 |
db 'mpg',0 |
db 'mpeg',0 |
db 'mkv',0 |
db 'mp4',0 |
db 'webm',0 |
db 'wmv',0 |
.end: |
db 0 |
|
|
section '.bss' align 16 |
|
proclib dd ? |
opendialog_init dd ? |
opendialog_start dd ? |
|