Subversion Repositories Kolibri OS

Rev

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

  1. ;------------------------------------------------------------------------------
  2. align 4
  3. START_mouse_thread:
  4.         mcall   40,100000b      ; only Event 6 - Mouse
  5. ;------------------------------------------------------------------------------
  6. align 4
  7. still_mouse:
  8.         mcall   10
  9. align 4
  10. mouse:
  11.         mcall   37,2
  12.         cmp     eax,1   ; åñëè íå ëåâàÿ, âîçâðàò
  13.         jne     still_mouse
  14. ; êîîðäèíàòû êóðñîðà   
  15.         xor     ebx,ebx
  16.         mcall   37
  17.  
  18.         mov     ebx,eax         ; eax = cursor_x
  19.         shr     eax,16          ; ebx = cursor_y
  20.         and     ebx,0xffff
  21.         mov     [curx1],eax     ; curx1 = cursor_x
  22.         mov     [cury1],ebx     ; cury1 = cursor_y
  23.        
  24. ; êîìó ïðèíàäëåæèò òî÷êà?
  25.         mcall   34,[curx1],[cury1]
  26.         cmp     al,1 ; 1 - ÿäðî
  27.         jne     still_mouse
  28. ;--------------------------------------
  29. align 4
  30. @@:             ; ïîäîæä¸ì, ïîêà ïîëüçîâàòåëü íå îòïóñòèë ïðàâóþ êíîïêó ìûøè
  31.         mcall   37,2    ;   íàæàòû ëè êíîïêè ìûøè?
  32.         test    eax,1   ; åñëè îòïóñòèë
  33.         jz      @f      ;   èä¸ì â íà÷àëî ãëàâíîãî öèêëà
  34.  
  35.         mcall   68,1    ; èíà÷å ïåðåêëþ÷èìñÿ íà ñëåäóþùèé ïîòîê ñèñòåìû è êîãäà
  36.         jmp     @b      ; âûïîëíåíèå âåðíåòñÿ ýòîìó ïîòîêó, ïðîâåðèì ìûøü îïÿòü
  37. ;--------------------------------------
  38. align 4
  39. @@:
  40. ; êîîðäèíàòû êóðñîðà   
  41.         xor     ebx,ebx
  42.         mcall   37
  43.  
  44.         mov     ebx,eax         ; eax = cursor_x
  45.         shr     eax,16          ; ebx = cursor_y
  46.         and     ebx,0xffff
  47.         mov     [curx2],eax     ; curx1 = cursor_x
  48.         mov     [cury2],ebx     ; cury1 = cursor_y
  49.        
  50. ; êîìó ïðèíàäëåæèò òî÷êà?
  51.         mcall   34,[curx2],[cury2]
  52.         cmp     al,1 ; 1 - ÿäðî
  53.         jne     still_mouse
  54. ; check for icon by click down
  55.         call    check_icons_position
  56.         mov     eax,[click_pos]
  57.         test    eax,eax
  58.         jz      still_mouse
  59.        
  60.         push    eax
  61.         mov     eax,[curx2]
  62.         mov     [curx1],eax
  63.         mov     eax,[cury2]
  64.         mov     [cury1],eax    
  65. ; check for icon by click up
  66.         call    check_icons_position   
  67.         pop     eax
  68.        
  69.         mov     ebx,[click_pos]
  70.        
  71.         test    ebx,ebx
  72.         jz      still_mouse
  73.        
  74.         cmp     eax,ebx
  75.         jne     still_mouse
  76. ;--------------------------------------
  77. align 4
  78. start_appl:
  79.         mov     esi,[adress_of_icon_data_2]     ;[ebp+8]
  80.         mov     ebx,1
  81.         mov     edi,finfo.path
  82.         call    fill_paths
  83.         inc     ebx
  84.         mov     edi,param_str
  85.         mov     dword[finfo_start+8],edi
  86.         call    fill_paths
  87.         cmp     byte[edi],0
  88.         jne     .no0
  89.         and     dword[finfo_start+8],0
  90. ;--------------------------------------
  91. align 4
  92. .no0:
  93.         mov     ebx,finfo_start
  94.         mcall   70
  95.         jmp     still_mouse
  96. ;------------------------------------------------------------------------------
  97. align 4
  98. fill_paths:
  99.         push    esi edi
  100.         movzx   ecx,byte[str_lens+ebx]
  101.         add     esi,[positions+ebx*4]
  102.         push    esi
  103.         add     esi,ecx
  104. ;--------------------------------------
  105. align 4
  106. .l1:
  107.         dec     esi
  108.         cmp     byte[esi],' '
  109.         jnz     .found
  110.         loop    .l1
  111.         pop     esi
  112.         jmp     .noms
  113. ;--------------------------------------
  114. align 4
  115. .found:
  116.         lea     ecx,[esi+1]
  117.         pop     esi
  118.         sub     ecx,esi
  119.         rep     movsb
  120. ;--------------------------------------
  121. align 4
  122. .noms:
  123.         and     byte[edi],0
  124.         pop     edi esi
  125.         ret
  126. ;------------------------------------------------------------------------------
  127. align 4
  128. check_icons_position:
  129.         mov     ecx,[icons]
  130.         mov     ebx,icon_data
  131. ;--------------------------------------
  132. align 4
  133. .loop:
  134.         push    ebx ecx
  135.         mov     [adress_of_icon_data_2],ebx
  136.         mov     eax,[ebx]
  137.         call    calc_icon_pos
  138.  
  139.         mov     [current_X_mouse_thread],ebx
  140.         mov     [current_Y_mouse_thread],eax
  141.         mov     eax,[curx1]
  142.         mov     ebx,[current_X_mouse_thread]
  143.         cmp     eax,ebx
  144.         jb      .next
  145.        
  146.         add     ebx,52
  147.         cmp     eax,ebx
  148.         ja      .next
  149.        
  150.         mov     eax,[cury1]
  151.         mov     ebx,[current_Y_mouse_thread]
  152.         cmp     eax,ebx
  153.         jb      .next
  154.        
  155.         add     ebx,52
  156.         cmp     eax,ebx
  157.         ja      .next
  158.  
  159.         pop     ecx ebx
  160.         mov     eax,[adress_of_icon_data_2]
  161.         mov     [click_pos],eax
  162.         ret
  163. ;--------------------------------------
  164. align 4
  165. .next:
  166.         pop     ecx ebx
  167.         add     ebx,REC_SIZE
  168.         dec     ecx
  169.         jnz     .loop
  170. ; all icons survived!
  171.         xor     eax,eax
  172.         mov     [click_pos],eax
  173.         ret
  174. ;------------------------------------------------------------------------------
  175.