Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. format MS COFF
  2.  
  3. public _get_moviefile
  4.  
  5. section '.text' align 16
  6.  
  7. align 4
  8. getprocaddress:
  9.         mov     edx, [esp + 8] ; hlib
  10.         xor     eax, eax
  11.         test    edx, edx ; If hlib = 0 then goto .end
  12.         jz      .end
  13.  
  14. .next:
  15.         cmp     [edx], dword 0 ; If end of export table then goto .end
  16.         jz      .end
  17.  
  18.         xor     eax, eax
  19.         mov     esi, [edx]
  20.         mov     edi, [esp + 4] ; name
  21.  
  22. .next_:
  23.         lodsb
  24.         scasb
  25.         jne     .fail
  26.         or      al, al
  27.         jnz     .next_
  28.         jmp     .ok
  29. .fail:
  30.         add     edx, 8
  31.         jmp     .next
  32.  
  33. .ok:                  ; return address
  34.         mov eax, [edx + 4]
  35. .end:
  36.         ret 8
  37.  
  38.  
  39.  
  40. align 8
  41. _get_moviefile:
  42.  
  43.         pushad
  44.         mov     eax, 68
  45.         mov     ebx, 19
  46.         mov     ecx, sz_proc_lib
  47.         int     0x40
  48.         mov     [proclib], eax
  49.         test    eax, eax
  50.         jz      .fail
  51.  
  52.         push    [proclib]
  53.         push    sz_OpenDialog_init
  54.         call    getprocaddress
  55.         mov     [opendialog_init], eax
  56.  
  57.         push    dword[proclib]
  58.         push    sz_OpenDialog_start
  59.         call    getprocaddress
  60.         mov     [opendialog_start], eax
  61.  
  62.         mov     eax, 68
  63.         mov     ebx, 12
  64.         mov     ecx, 4096*3
  65.         int     0x40
  66.  
  67.         mov     [od.procinfo], eax
  68.  
  69.         add     eax, 1024
  70.         mov     [od.filename_area], eax
  71.  
  72.         add     eax, 3072
  73.         mov     [od.opendir_path], eax
  74.  
  75.         add     eax, 4096
  76.         mov     [od.openfile_path], eax
  77.  
  78.         push    od
  79.         call    [opendialog_init]
  80.  
  81.         mov     eax, [od.openfile_path]
  82.         mov     [eax], byte 0          ; end of ASCIIZ-string(may be don't need?)
  83.  
  84.         push    od
  85.         call    [opendialog_start]
  86.  
  87.         popad
  88.         mov     eax, [od.openfile_path]; selected filePath
  89.  
  90.         ret
  91. .fail:
  92.         xor     eax, eax
  93.         ret
  94.  
  95. align 4
  96. fake_on_redraw:
  97.         ret
  98.  
  99. section '.rdata' align 16
  100.  
  101. sz_proc_lib         db "/rd/1/lib/proc_lib.obj",0
  102. sz_OpenDialog_init  db "OpenDialog_init",0
  103. sz_OpenDialog_start db "OpenDialog_start",0
  104. sz_com_area_name    db "FFFFFFFF_open_dialog",0
  105. sz_dir_default_path db "/rd/1",0
  106. sz_start_path       db "/rd/1/File managers/opendial",0
  107.  
  108.  
  109. section '.data' align 16
  110.  
  111. od:
  112.     .mode             dd 0
  113.     .procinfo         dd 0
  114.     .com_area_name    dd sz_com_area_name
  115.     .com_area         dd 0
  116.     .opendir_path     dd 0
  117.     .dir_default_path dd sz_dir_default_path
  118.     .start_path       dd sz_start_path
  119.     .draw_window      dd fake_on_redraw
  120.     .status           dd 0
  121.     .openfile_path    dd 0
  122.     .filename_area    dd 0
  123.     .filter_area      dd filefilter
  124.     .x_size           dw 512
  125.     .x_start          dw 512
  126.     .y_size           dw 512
  127.     .y_start          dw 512
  128.  
  129. filefilter:
  130. dd filefilter.end - filefilter
  131.     db 'avi',0
  132.     db 'flv',0
  133.     db 'mov',0
  134.     db 'mpg',0
  135.     db 'mpeg',0
  136.     db 'mkv',0
  137.     db 'mp4',0
  138.     db 'webm',0
  139.     db 'wmv',0
  140. .end:
  141.     db 0
  142.  
  143.  
  144. section '.bss' align 16
  145.  
  146. proclib          dd ?
  147. opendialog_init  dd ?
  148. opendialog_start dd ?
  149.  
  150.