Subversion Repositories Kolibri OS

Rev

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

  1. ; <--- description --->
  2. ; compiler:     FASM 1.67.23
  3. ; name:         Mouse Emulation For KolibriOS
  4. ;-----------------------------------------------------------------------------
  5. ; version:      1.1
  6. ; last update:  26/05/2012
  7. ; written by:   Lipatov Kirill aka Leency
  8. ; changes:      shows notify with instructions, while opening program
  9. ;-----------------------------------------------------------------------------
  10. ; version:      1.0
  11. ; last update:  04/09/2010
  12. ; written by:   Marat Zakiyanov aka Mario79, aka Mario
  13. ; changes:      total optimization of code,
  14. ;               different events for Up and Down of key Num 5
  15. ;               advansed acceleration mode
  16. ;-----------------------------------------------------------------------------
  17. ; version:      0.8
  18. ; last update:  03/10/2007
  19. ; written by:   Zlobny_Gluk
  20. ; e-mail:       umbrosia@land.ru
  21. ;-----------------------------------------------------------------------------
  22. ; <--- include all KolibriOS stuff --->
  23. include "lang.inc"
  24. include '../../../macros.inc'
  25.  
  26. ; <--- start of KolibriOS application --->
  27. MEOS_APP_START
  28.  
  29. ; <--- start of code --->
  30. CODE
  31. ;-----------------------------------------------------------------------------
  32. start:
  33.     mov eax,70
  34.     mov ebx,notifyapp
  35.     mcall
  36.        
  37. start1:
  38.         xor     ebx,ebx
  39.         mcall   40
  40. @@:
  41.         mcall   23,10  
  42.  
  43.         mcall   66,3
  44.         test    eax,0x80
  45.         jz      @r
  46.  
  47.         mov     ebx,4
  48.         call    hotkeys_common
  49.  
  50.         mcall   40,10b
  51. still:
  52.         mcall   10
  53.        
  54.         cmp     eax,2           ; if event == 2
  55.         jne     still
  56. ;-----------------------------------------------------------------------------
  57. key:                               ; key event handler
  58.         call    mouse_acceleration
  59.  
  60.         mcall   2                  ; get key code
  61.        
  62.         push    eax
  63.         mcall   66,3
  64.         test    eax,0x80
  65.         pop     eax
  66.         jnz     @f
  67.         mov     ebx,5
  68.         call    hotkeys_common 
  69.         jmp     start1
  70. @@:
  71.         cmp     al,2
  72.         jne     still
  73.  
  74.         xor     edx,edx
  75.  
  76.         cmp     ah,80   ; Down Num 2
  77.         je      keytwo
  78.         cmp     ah,81   ; Down Num 3
  79.         je      keythree
  80.         cmp     ah,75   ; Down Num 4
  81.         je      keyfour
  82.         cmp     ah,77   ; Down Num 6
  83.         je      keysix
  84.         cmp     ah,71   ; Down Num 7
  85.         je      keyseven
  86.         cmp     ah,72   ; Down Num 8
  87.         je      keyeight
  88.         cmp     ah,73   ; Down Num 9
  89.         je      keynine
  90.         cmp     ah,76   ; Down Num 5
  91.         je      keyfive
  92.         cmp     ah,204  ; Up Num 5
  93.         je      keyfive_1
  94.         cmp     ah,79   ; Down Num 1
  95.         jne     still
  96. ;-----------------------------------------------------------------------------
  97. keyone:
  98.         call    down
  99. keyfour:
  100.         call    left
  101.         jmp     mouseread
  102. ;-----------------------------------------------------------------------------
  103. keythree:
  104.         call    right
  105. keytwo:
  106.         call    down
  107.         jmp     mouseread
  108. ;-----------------------------------------------------------------------------
  109. keyseven:
  110.         call    left
  111. keyeight:
  112.         call    up
  113.         jmp     mouseread
  114. ;-----------------------------------------------------------------------------
  115. keynine:
  116.         call    up
  117. keysix:
  118.         call    right
  119.         jmp     mouseread
  120. ;-----------------------------------------------------------------------------
  121. keyfive:
  122.         inc     edx
  123. keyfive_1:
  124.         mcall   18,19,5
  125.         jmp     still
  126. ;-----------------------------------------------------------------------------
  127. left:
  128.         mov     eax,esi
  129.         shl     eax,16
  130.         sub     edx,eax
  131.         ret
  132. ;-----------------------------------------------------------------------------
  133. right:
  134.         mov     eax,esi
  135.         shl     eax,16
  136.         add     edx,eax
  137.         ret
  138. ;-----------------------------------------------------------------------------
  139. down:
  140.         add     edx,esi
  141.         ret
  142. ;-----------------------------------------------------------------------------
  143. up:
  144.         sub     edx,esi
  145.         ret
  146. ;-----------------------------------------------------------------------------
  147. mouseread:
  148.         xor     ebx,ebx
  149.         mcall   37
  150.         add     edx,eax
  151.  
  152. sravn:
  153.         xor     ebx,ebx
  154.         xor     edi,edi
  155.  
  156. real:
  157.         mov     ebx,edx
  158.         mov     edi,ebx
  159.         shr     ebx,16 ; get x1
  160. ;       shl     edi,16 ; get y1
  161. ;       shr     edi,16
  162.         and     edi,0xffff
  163.  
  164. nullli:
  165.         add     ebx,16
  166.         cmp     ebx,65535
  167.         jg      xmin
  168.         sub     ebx,15
  169.  
  170.         add     edi,16
  171.         cmp     edi,65535
  172.         jg      ymin
  173.         sub     edi,15
  174.  
  175. razr:
  176.         mcall   14
  177.  
  178.         mov     ecx,eax
  179.         shr     eax,16 ; get x2
  180. ;       shl     ecx,16 ; get y2
  181. ;       shr     ecx,16
  182.         and     ecx,0xffff
  183.  
  184. rightdownli:
  185.         cmp     eax,ebx
  186.         jl      xmax
  187.         cmp     ecx,edi
  188.         jl      ymax
  189.  
  190. mousewrite:
  191.         mcall   18,19,4
  192.         mcall   26,9
  193.         mov     [mouse_timer_ticks],eax
  194.         jmp     still
  195. ;-----------------------------------------------------------------------------
  196. mouse_acceleration:
  197.         xor     esi,esi
  198.         inc     esi
  199.         mcall   18,19,2
  200.         mov     ecx,eax
  201.         mcall   26,9
  202.         sub     eax,[mouse_timer_ticks]
  203.         cmp     eax,ecx  ; mouse_delay
  204.         ja      @f
  205.         xor     ecx,ecx
  206.         mcall   18,19   ; checkspeed
  207.         mov     esi,eax
  208.         shl     esi,2
  209. @@:
  210.         ret
  211. ;-----------------------------------------------------------------------------
  212. xmax:
  213.         dec     eax
  214.         dec     ebx
  215.         dec     edi
  216.         shl     eax,16
  217.         add     edi,eax
  218.         mov     edx,edi
  219.         jmp     sravn
  220. ;-----------------------------------------------------------------------------
  221. xmin:
  222.         mov     edx,edi
  223.         jmp     sravn
  224. ;-----------------------------------------------------------------------------
  225. ymax:
  226.         dec     ecx
  227.         dec     ebx
  228.  
  229.         shl     ebx,16
  230.         mov     edi,ebx
  231.         add     edi,ecx
  232.         mov     edx,edi
  233.         jmp     sravn
  234. ;-----------------------------------------------------------------------------
  235. ymin:
  236.         shl     ebx,16
  237.         mov     edx,ebx
  238.         shr     ebx,16
  239.         jmp     sravn
  240. ;-----------------------------------------------------------------------------
  241. hotkeys_common:
  242.         xor     ecx,ecx
  243.         xor     edx,edx
  244.         mov     cl,79   ; Down Num 1
  245.         mcall   66
  246.  
  247.         mov     cl,80   ; Down Num 2
  248.         mcall   66
  249.  
  250.         mov     cl,81   ; Down Num 3
  251.         mcall   66
  252.  
  253.         mov     cl,75   ; Down Num 4
  254.         mcall   66
  255.  
  256.         mov     cl,76   ; Down Num 5
  257.         mcall   66
  258.  
  259.         mov     cl,204 ; Up Num 5
  260.         mcall   66
  261.  
  262.         mov     cl,77   ; Down Num 6
  263.         mcall   66
  264.  
  265.         mov     cl,71   ; Down Num 7
  266.         mcall   66
  267.  
  268.         mov     cl,72   ; Down Num 8
  269.         mcall   66
  270.  
  271.         mov     cl,73   ; Down Num 9
  272.         mcall   66
  273.         ret
  274. ;-----------------------------------------------------------------------------
  275. ; <--- initialised data --->
  276. DATA
  277. ;-----------------------------------------------------------------------------
  278. ; <--- uninitialised data --->
  279. UDATA
  280. mouse_timer_ticks       dd 0
  281. ;-----------------------------------------------------------------------------
  282. if lang eq ru
  283. ud_user_message db 'NumLock ¢ª«/¢ëª« í¬ã«ïâ®à ¬ëè¨. “¯à ¢«¥­¨¥ Numpad',0 ;㤠«¨âì áâà®çªã ¨§ å®â_ª¥©§
  284. else
  285. ud_user_message db 'NumLock - on/off mouse emul. Numpad - move cursor',0
  286. end if
  287.  
  288. notifyapp:
  289.         dd      7
  290.         dd      0
  291.         dd      ud_user_message
  292.         dd      0
  293.         dd      0
  294.         db      '@notify',0
  295. ;-----------------------------------------------------------------------------
  296.  
  297.  
  298.  
  299. MEOS_APP_END
  300. ; <--- end of KolibriOS application --->
  301. ; ZG