Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;------------------------------------------------------------------------------
  2. ;///// COPYING ////////////////////////////////////////////////////////////////
  3. ;------------------------------------------------------------------------------
  4.  
  5. func copy_file
  6.         pushad
  7.  
  8.         cmp     [active_panel],0
  9.         jne    ._00
  10.         push    f_path0
  11.         push    [f_plen0]
  12.         mov     eax,[d_lpos]
  13.         shl     eax,4
  14.         add     eax,lstart
  15.         push    eax
  16.         mov     esi,f_path1
  17.         mov     eax,[f_plen1]
  18.         jmp     @f
  19.    ._00:
  20.         push    f_path1
  21.         push    [f_plen1]
  22.         mov     eax,[d_rpos]
  23.         shl     eax,4
  24.         add     eax,rstart
  25.         push    eax
  26.         mov     esi,f_path0
  27.         mov     eax,[f_plen0]
  28.     @@:
  29.         mov     ebx,[esp]
  30.         test    byte[ebx+11],FA_FOLDER
  31.         jz      @f
  32.         add     esp,3*4
  33.         stc
  34.         jmp    .close
  35.     @@:
  36.         mov     edi,fc_info.path
  37.         call    get_normal_path
  38.         mov     eax,[len]
  39.         mov     byte[edi+eax-1],'/'
  40.         mov     [fc_len2],eax
  41.  
  42.         pop     esi
  43.         call    get_file_info
  44.         mov     eax,[f_size]
  45.         mov     [fc_size],eax
  46.  
  47.         pop     eax
  48.         pop     esi
  49.         mov     edi,f_info.path
  50.         call    get_normal_path
  51.         mov     eax,[len]
  52.         mov     byte[edi+eax-1],'/'
  53.         mov     [fc_len1],eax
  54.  
  55.         jmp     .redraw_copy
  56.  
  57.   .redraw:
  58.         call    draw_window_full
  59.   .redraw_copy:
  60.         call    draw_window_copy_main
  61.   .still:
  62.         mcall   MF_WAITEVENT
  63.         jmpe    al,.still,\
  64.           EV_REDRAW,.redraw,\
  65.           EV_KEY,.key,\
  66.           EV_BUTTON,.button
  67.  
  68.   .key:
  69.         mcall   MF_GETKEY
  70.  
  71.         jmpe    ah,.still,\
  72.           VK_ESCAPE,._close,\
  73.           VK_RETURN,.copy
  74.  
  75.   .button:
  76.         jmp    .still
  77.  
  78.   .copy:
  79.         mov     ecx,[fc_size]
  80.         shr     ecx,9
  81.         inc     ecx
  82.         push    ecx
  83.         shl     ecx,9
  84.         add     ecx,MEM_USED
  85.         mcall   MF_MEMRESIZE,MR_SETSIZE
  86.         or      eax,eax
  87.         jnz    .close
  88.  
  89.         mov     edi,file_info
  90.         mov     al,' '
  91.         mov     ecx,13
  92.         repne   scasb
  93.         sub     ecx,12
  94.         neg     ecx
  95.         push    ecx
  96.         mov     esi,file_info
  97.         mov     edi,f_info.path
  98.         add     edi,[fc_len1]
  99.         rep     movsb
  100.         mov     byte[edi],0
  101.         pop     ecx
  102.         mov     esi,file_info
  103.         mov     edi,fc_info.path
  104.         add     edi,[fc_len2]
  105.         rep     movsb
  106.         mov     byte[edi],0
  107.  
  108.         xor     eax,eax                 ; FS_READ
  109.         mov     [f_info],eax
  110.         mov     [f_info+4],eax
  111.         pop     eax
  112.         mov     [f_info+8],eax
  113.         mov     dword[f_info+12],MEM_USED
  114.         mcall   MF_FSACCESS,f_info
  115.         mov     eax,[fc_size]
  116.         mov     [fc_info+8],eax
  117.         mcall   MF_FSACCESS,fc_info
  118.  
  119.         mcall   MF_MEMRESIZE,MR_SETSIZE,MEM_USED
  120.   ._close:
  121.         clc
  122.   .close:
  123.         popad
  124.         ret
  125. endf
  126.  
  127. ;------------------------------------------------------------------------------
  128.  
  129. func draw_window_copy_main
  130.         mcall2  MF_FILLRECT,oX+tW*2,tW*76,oY+tH*7,tH*8,0x00C0C0C0
  131.  
  132.         mmov    esi,oX+tW*4+2,oX+tW*75+3
  133.         mmov    edi,oY+tH*8+3,oY+tH*13+5
  134.         xor     edx,edx
  135.         call    draw_frame
  136.         mmov    esi,oX+tW*4+4,oX+tW*75+1
  137.         mmov    edi,oY+tH*8+5,oY+tH*13+3
  138.         call    draw_frame
  139.  
  140.         mcall2  MF_DRAWLINE,oX+tW*4+4,oX+tW*75+1,oY+tH*11+3,oY+tH*11+3,0
  141.  
  142.         mcall2  MF_FILLRECT,oX+tW*40-(sz_copy.size-2)*tW/2-tW,sz_copy.size*tW,\
  143.                    oY+tH*8+3,3,0x00C0C0C0
  144.         mcall1  MF_DRAWTEXT,oX+tW*40-(sz_copy.size-2)*tW/2,oY+tH*8,\
  145.                    0x00000000,sz_copy,sz_copy.size-2
  146.  
  147.         mcall1  ,oX+tW*6,oY+tH*9,,,sz_copy.size
  148.  
  149.         mov     edi,file_info
  150.         mov     al,' '
  151.         mov     ecx,13
  152.         repne   scasb
  153.  
  154.         madd    ebx,(sz_copy.size)*tW,0
  155.         mov     esi,ecx
  156.         sub     esi,12
  157.         neg     esi
  158.         mcall   MF_DRAWTEXT,,,file_info
  159.         imul    esi,tW
  160.         shl     esi,16
  161.         add     ebx,esi
  162.         mcall   ,,,sz_copyto,sz_copyto.size
  163.  
  164.         call    draw_copy_input
  165.  
  166.         ret
  167. endf
  168.  
  169. ;------------------------------------------------------------------------------
  170.  
  171. func draw_copy_input
  172.         mcall2  MF_FILLRECT,oX+tW*6,tW*68,oY+tH*10,tH,0x00008080
  173.  
  174.         mov     edx,fc_info.path
  175.         mov     esi,[fc_len2]
  176.         cmp     esi,68
  177.         jb      @f
  178.         sub     esi,68
  179.         lea     edx,[edx+esi+1]
  180.         mov     esi,67
  181.     @@:
  182.         mcall1  MF_DRAWTEXT,oX+tW*6,oY+tH*10+1,0x00000000
  183.         ret
  184. endf
  185.  
  186. ;------------------------------------------------------------------------------
  187.  
  188. ;fc_pst  db 0
  189. ;fc_cur  db 0
  190.  
  191. align 4
  192.  
  193. fc_size dd ?
  194. fc_len1 dd 0
  195. fc_len2 dd 0
  196.  
  197. fc_info:
  198.  dd 1
  199.  dd 0
  200.  dd ?
  201.  dd MEM_USED
  202.  dd MEM_FOR_OS
  203. .path:
  204.  rb 200
  205.