Subversion Repositories Kolibri OS

Rev

Rev 2597 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. include "lang.inc"
  2. include "../../../macros.inc"
  3. include "../../../KOSfuncs.inc"
  4.  
  5. WND_SIZE_X              = 320
  6. WND_SIZE_Y              = 200
  7.  
  8. VC_DELTA = 1
  9. HC_DELTA = 2
  10.  
  11. MEOS_APP_START
  12. CODE
  13.     fninit
  14.     call init_sinus_table
  15.     call init_background
  16.     call init_palette
  17.     mcall SF_SET_EVENTS_MASK, 101b
  18.     jmp .paint_window
  19.  
  20. .event_loop:
  21.     mcall SF_WAIT_EVENT_TIMEOUT, 1
  22.  
  23.     test eax,eax
  24.     je .draw_screen
  25.     dec eax
  26.     je .paint_window
  27.  
  28.     mcall SF_TERMINATE_PROCESS
  29.  
  30. .draw_screen:
  31.     test [proc_info.wnd_state], 0x04
  32.     jnz .event_loop
  33.     add word [ver_counter],VC_DELTA
  34.     add word [hor_counter],HC_DELTA
  35.     call handle_animation
  36.     xor ebp,ebp
  37.     mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette
  38.     jmp .event_loop
  39.  
  40. .paint_window:
  41.     mcall SF_THREAD_INFO, proc_info,-1
  42.     mcall SF_REDRAW, SSF_BEGIN_DRAW
  43.  
  44.     mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
  45.     lea ecx,[eax + (100 shl 16) + WND_SIZE_Y+4]
  46.     mov edi,title
  47.     mcall SF_CREATE_WINDOW, <100,WND_SIZE_X+9>,,0x74000000
  48.  
  49.     test [proc_info.wnd_state], 0x04
  50.     jnz @f
  51.  
  52.     xor ebp,ebp
  53.     mcall SF_PUT_IMAGE_EXT, virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,<0,0>,8,_palette
  54.   @@:
  55.     mcall SF_REDRAW, SSF_END_DRAW
  56.  
  57.     jmp .event_loop
  58.  
  59. init_palette:
  60.     mov ecx,256
  61.     mov edi,_palette
  62.     xor eax,eax
  63. .next_pal:
  64.     mov al,ah
  65.     shr al,2
  66.     stosb
  67.     stosb
  68.     stosb
  69.     stosb
  70.     inc ah
  71.     loop .next_pal
  72.     ret
  73.  
  74. init_sinus_table:
  75.     sub esp,4
  76.     mov ecx,256
  77.     mov edi,sinetable
  78. .sin_loop:
  79.     fld dword [esp]
  80.     fld st0
  81.     fsin
  82.     fmul [scale_sin]
  83.     fistp word [edi]
  84.     fadd [delta_angle]
  85.     fstp dword [esp]
  86.     add edi,2
  87.     loop .sin_loop
  88.     add esp,4
  89.     ret
  90.  
  91. init_background:
  92.     mov edi,background
  93.     xor edx,edx
  94. .ib_vertical:
  95.     xor ecx,ecx
  96. .ib_horizontal:
  97.     mov eax,ecx
  98.     xor eax,edx
  99.     stosb
  100.     inc ecx
  101.     cmp ecx,256
  102.     jne .ib_horizontal
  103.     inc edx
  104.     cmp edx,256
  105.     jne .ib_vertical
  106.     ret
  107.  
  108. s_OFFX          = 0
  109. s_OFFY          = 2
  110.  
  111. handle_animation:
  112.     sub esp,4
  113.     mov ebx,[ver_counter]
  114.     and ebx,255
  115.     add ebx,ebx
  116.     mov ax,[sinetable+ebx]
  117.     mov [esp+s_OFFY],ax
  118.     mov ebx,[hor_counter]
  119.     and ebx,255
  120.     add ebx,ebx
  121.     mov ax,[sinetable+ebx]
  122.     mov [esp+s_OFFX],ax
  123.     mov edi,virtual_screen_8
  124.     mov edx,WND_SIZE_Y-1
  125. .a_ver:
  126.     mov ecx,WND_SIZE_X-1
  127.     mov bx,[esp+s_OFFY]
  128.     add bx,dx
  129.     and ebx,255
  130.     shl ebx,8
  131. .a_hor:
  132.     mov ax,[esp+s_OFFX]
  133.     add ax,cx
  134.     and eax,255
  135.     mov al,[background+ebx+eax]
  136.     stosb
  137.     dec ecx
  138.     jge .a_hor
  139.     dec edx
  140.     jge .a_ver
  141.     add esp,4
  142.     ret
  143.  
  144. DATA
  145.   delta_angle dd 0.0245436926066                ; pi/128
  146.   scale_sin dd 128.0
  147.  
  148.   title      db 'MoveBack',0
  149.  
  150. UDATA
  151.   ver_counter dd ?
  152.   hor_counter dd ?
  153.  
  154.   _palette:     rd 256
  155.  
  156.   virtual_screen_8:
  157.         rb WND_SIZE_X*WND_SIZE_Y
  158.  
  159.   background:
  160.         rb 256*256
  161.  
  162.   sinetable:
  163.         rw 256
  164.  
  165.   proc_info     process_information
  166.  
  167. MEOS_APP_END
  168.