Subversion Repositories Kolibri OS

Rev

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

  1. sys_getevent:
  2.  
  3.      call   get_event_for_app
  4.      mov    [esp+36],eax
  5.      ret
  6.  
  7.  
  8. align 4
  9.  
  10. sys_wait_event_timeout:
  11.  
  12.      mov   ebx,[timer_ticks]
  13.      add   ebx,eax
  14.      cmp   ebx,[timer_ticks]
  15.      jna   .swfet2
  16.    .swfet1:
  17.      call  get_event_for_app
  18.      test  eax,eax
  19.      jne   .eventoccur_time
  20.      call  change_task
  21.      cmp   ebx,[timer_ticks]
  22.      jg    .swfet1
  23.    .swfet2:
  24.      xor   eax,eax
  25.    .eventoccur_time:
  26.      mov   [esp+36],eax
  27.      ret
  28.  
  29.  
  30. align 4
  31.  
  32. sys_waitforevent:
  33.  
  34.      call  get_event_for_app
  35.      test  eax,eax
  36.      jne   eventoccur
  37.    newwait:
  38.  
  39.      mov   eax, [0x3010]
  40.      mov   [eax+TASKDATA.state], byte 5
  41.      call  change_task
  42.  
  43.      mov eax, [event_sched]
  44.  
  45.    eventoccur:
  46.      mov   [esp+36],eax
  47.      ret
  48.  
  49.  
  50. get_event_for_app:
  51.  
  52.      pushad
  53.  
  54.      mov   edi,[0x3010]              ; WINDOW REDRAW
  55.      test  [edi+TASKDATA.event_mask],dword 1
  56.      jz    no_eventoccur1
  57.      ;mov   edi,[0x3010]
  58.      cmp   [edi-twdw+WDATA.fl_redraw],byte 0
  59.      je    no_eventoccur1
  60.      popad
  61.      mov   eax,1
  62.      ret
  63.    no_eventoccur1:
  64.  
  65.      ;mov   edi,[0x3010]              ; KEY IN BUFFER
  66.      test  [edi+TASKDATA.event_mask],dword 2
  67.      jz    no_eventoccur2
  68.      mov   ecx, [0x3000]
  69.      movzx edx,word [0xC000+ecx*2]
  70.      mov   eax, [0x3004]
  71.      cmp   eax,edx
  72.      jne   no_eventoccur2x
  73.      cmp   [0xf400],byte 0
  74.      je    no_eventoccur2x
  75.    eventoccur2:
  76.      popad
  77.      mov   eax,2
  78.      ret
  79.    no_eventoccur2x:
  80.         mov     eax, hotkey_buffer
  81. @@:
  82.         cmp     [eax], ecx
  83.         jz      eventoccur2
  84.         add     eax, 8
  85.         cmp     eax, hotkey_buffer+120*8
  86.         jb      @b
  87.    no_eventoccur2:
  88.  
  89.      ;mov   edi,[0x3010]              ; BUTTON IN BUFFER
  90.      test  [edi+TASKDATA.event_mask],dword 4
  91.      jz    no_eventoccur3
  92.      cmp   [0xf500],byte 0
  93.      je    no_eventoccur3
  94.      mov   ecx, [0x3000]
  95.      movzx edx, word [0xC000+ecx*2]
  96.      mov   eax, [0x3004]
  97.      cmp   eax,edx
  98.      jnz   no_eventoccur3
  99.      popad
  100.      mov   eax,[0xf501]
  101.      cmp   eax,65535
  102.      je    no_event_1
  103.      mov   eax,3
  104.      ret
  105.  
  106.     no_event_1:
  107.      mov   [window_minimize],1
  108.      mov   [0xf500],byte 0
  109.      xor   eax, eax
  110.      ret
  111.  
  112.    no_eventoccur3:
  113.    
  114.    
  115.      ;mov   edi,[0x3010]              ; mouse event
  116.      test  [edi+TASKDATA.event_mask],dword 00100000b
  117.      jz    no_mouse_event
  118.      mov   eax,[0x3000]
  119.      shl   eax,8
  120.      test  [eax+0x80000+APPDATA.event_mask],dword 00100000b
  121.      jz    no_mouse_event
  122.      and   [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-00100000b
  123.      popad
  124.      mov   eax,6
  125.      ret
  126.    no_mouse_event:
  127.    
  128.  
  129.      ;mov   edi,[0x3010]              ; DESKTOP BACKGROUND REDRAW
  130.      test  [edi+TASKDATA.event_mask],dword 16
  131.      jz    no_eventoccur5
  132.      cmp   [0xfff0],byte 2
  133.      jnz   no_eventoccur5
  134.      popad
  135.      mov   eax,5
  136.      ret
  137.    no_eventoccur5:
  138.  
  139.      ;mov   edi,[0x3010]              ; IPC
  140.      test  [edi+TASKDATA.event_mask],dword 01000000b
  141.      jz    no_ipc
  142.      mov   eax,[0x3000]
  143.      shl   eax,8
  144.      test  [eax+0x80000+APPDATA.event_mask],dword 01000000b
  145.      jz    no_ipc
  146.      and   [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-01000000b
  147.      popad
  148.      mov   eax,7
  149.      ret
  150.    no_ipc:
  151.  
  152.  
  153.      ;mov   edi,[0x3010]              ; STACK
  154.      test  [edi+TASKDATA.event_mask],dword 10000000b
  155.      jz    no_stack_event
  156.      mov   eax,[0x3000]
  157.      shl   eax,8
  158.      test  [eax+0x80000+APPDATA.event_mask],dword 10000000b
  159.      jz    no_stack_event
  160.      and   [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-10000000b
  161.      popad
  162.      mov   eax,8
  163.      ret
  164.    no_stack_event:
  165.  
  166.      test  byte [edi+TASKDATA.event_mask+1], 1          ; DEBUG
  167.      jz    no_debug_event
  168.      mov   eax, [0x3000]
  169.      shl   eax, 8
  170.      test  byte [eax+0x80000+APPDATA.event_mask+1], byte 1
  171.      jz    no_debug_event
  172.      and   byte [eax+0x80000+APPDATA.event_mask+1], not 1
  173.      popad
  174.      mov   eax, 9
  175.      ret
  176.    no_debug_event:
  177.  
  178.      cmp   dword [edi+TASKDATA.event_mask], 0xFFFF
  179.      jbe   no_events
  180.  
  181.      mov   esi,0x2e0000              ; IRQ'S AND DATA
  182.      mov   ebx,0x00010000
  183.      xor   ecx, ecx
  184.    irq_event_test:
  185.      mov   edi,[0x3010]
  186.      test  [edi+TASKDATA.event_mask],ebx
  187.      jz    no_irq_event
  188.      mov   edi,ecx
  189.      shl   edi,2
  190.      add   edi,irq_owner
  191.      mov   edx,[edi]
  192.      mov   eax,[0x3010]
  193.      mov   eax,[eax+TASKDATA.pid]
  194.      cmp   edx,eax
  195.      jne   no_irq_event
  196.      cmp   [esi],dword 0
  197.      jz    no_irq_event
  198.      mov   eax,ecx
  199.      add   eax,16
  200.      mov   [esp+28],eax
  201.      popad
  202.      ret
  203.     no_irq_event:
  204.      add   esi,0x1000
  205.      shl   ebx,1
  206.      inc   ecx
  207.      cmp   ecx,16
  208.      jb    irq_event_test
  209.  
  210.    no_events:
  211.      popad
  212.      xor   eax, eax
  213.      ret
  214.  
  215.  
  216.