Subversion Repositories Kolibri OS

Rev

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

  1. use32
  2. org 0x0
  3.  
  4. db 'MENUET01'
  5. dd 0x01, START, I_END, 0x1000, 0x1000, 0, 0
  6.  
  7. ;-----------------------------------------------------------------------------
  8.  
  9. include '../../../../../proc32.inc'
  10. include '../../../../../macros.inc'
  11. include '../dll.inc'
  12.  
  13. include '../../libio/libio.inc'
  14. include '../../libimg/libimg.inc'
  15.  
  16. ;-----------------------------------------------------------------------------
  17.  
  18. START:
  19.         mcall   68, 11
  20.  
  21.         stdcall dll.Load, @IMPORT
  22.         or      eax, eax
  23.         jnz     exit
  24.  
  25.         invoke  file.open, input_file, O_READ
  26.         or      eax, eax
  27.         jz      exit
  28.         mov     [fh], eax
  29.  
  30.         invoke  file.size, input_file
  31.         mov     [img_data_len], ebx
  32.         stdcall mem.Alloc, ebx
  33.         or      eax, eax
  34.         jz      exit
  35.         mov     [img_data], eax
  36.  
  37.         invoke  file.read, [fh], eax, [img_data_len]
  38.         cmp     eax, -1
  39.         je      exit
  40.         cmp     eax, [img_data_len]
  41.         jne     exit
  42.  
  43.         invoke  file.close, [fh]
  44.         inc     eax
  45.         jz      exit
  46.        
  47.         invoke  img.decode, [img_data], [img_data_len], 0
  48.         or      eax, eax
  49.         jz      exit
  50.         mov     [image_initial], eax
  51.  
  52.         stdcall mem.Free, [img_data]
  53.         test    eax, eax
  54.         jz      exit
  55.  
  56. ;-----------------------------------------------------------------------------
  57.  
  58.         mov     eax, [image_initial]
  59.         stdcall [img.create], [eax + Image.Width], [eax + Image.Height], Image.bpp24
  60.         test    eax, eax
  61.         jz      exit
  62.         mov     [image_to_rgb2] ,eax
  63.         stdcall [img.to_rgb2], [image_initial], [eax + Image.Data]
  64.  
  65.         mov     eax, [image_to_rgb2]
  66.         mov     esi, [eax + Image.Data]
  67.         mov     edi, esi
  68.         mov     ecx, [eax + Image.Width]
  69.         imul    ecx, [eax + Image.Height]
  70.         lea     ecx, [ecx*3]
  71.     @@:
  72.         lodsb
  73.         not     al
  74.         stosb
  75.         dec     ecx
  76.         jnz     @b
  77. ;-----------------------------------------------------------------------------
  78.  
  79. redraw:
  80.         call    draw_window
  81.  
  82. still:
  83.         mcall   10
  84.         cmp     eax, 1
  85.         je      redraw
  86.         cmp     eax, 2
  87.         je      key
  88.         cmp     eax, 3
  89.         je      button
  90.         jmp     still
  91.  
  92.   key:
  93.         mcall   2
  94.         jmp     still
  95.  
  96.   button:
  97.         mcall   17
  98.         shr     eax, 8
  99.  
  100.         cmp     eax, 1
  101.         jne     still
  102.  
  103.   exit:
  104.         cmp     [image_initial], 0
  105.         je      @f
  106.         stdcall [img.destroy], [image_initial]
  107.     @@:
  108.         cmp     [image_to_rgb2], 0
  109.         je      @f
  110.         stdcall [img.destroy], [image_to_rgb2]
  111.     @@:
  112.         mcall   -1
  113.  
  114.  
  115. draw_window:
  116.         mcall   12, 1
  117.         mcall   0, <100, 388>, <100, 350>, 0x33FFFFFF, , window_title
  118.  
  119.         mov     eax, [image_initial]
  120.         stdcall [img.draw], eax, 0, 0, [eax + Image.Width], [eax + Image.Height], 0, 0
  121.  
  122.         mov     eax, [image_to_rgb2]
  123.         stdcall [img.draw], eax, 0, [eax + Image.Height], [eax + Image.Width], [eax + Image.Height], 0, 0
  124.  
  125.         mcall   12, 2
  126.         ret
  127.  
  128. ;-----------------------------------------------------------------------------
  129. proc mem.Alloc, size ;////////////////////////////////////////////////////////
  130. ;-----------------------------------------------------------------------------
  131.         push    ebx ecx
  132.         mov     ecx, [size]
  133.         add     ecx, 4
  134.         mcall   68, 12
  135.         add     ecx, -4
  136.         mov     [eax], ecx
  137.         add     eax, 4
  138.         pop     ecx ebx
  139.         ret
  140. endp
  141.  
  142. ;-----------------------------------------------------------------------------
  143. proc mem.ReAlloc, mptr, size ;////////////////////////////////////////////////
  144. ;-----------------------------------------------------------------------------
  145.         push    ebx ecx edx
  146.         mov     ecx, [size]
  147.         or      ecx, ecx
  148.         jz      @f
  149.         add     ecx, 4
  150.     @@: mov     edx, [mptr]
  151.         or      edx, edx
  152.         jz      @f
  153.         add     edx, -4
  154.     @@: mcall   68, 20
  155.         or      eax, eax
  156.         jz      @f
  157.         add     ecx, -4
  158.         mov     [eax], ecx
  159.         add     eax, 4
  160.     @@: pop     edx ecx ebx
  161.         ret
  162. endp
  163.  
  164. ;-----------------------------------------------------------------------------
  165. proc mem.Free, mptr ;/////////////////////////////////////////////////////////
  166. ;-----------------------------------------------------------------------------
  167.         push    ebx ecx
  168.         mov     ecx, [mptr]
  169.         or      ecx, ecx
  170.         jz      @f
  171.         add     ecx, -4
  172.     @@: mcall   68, 13
  173.         pop     ecx ebx
  174.         ret
  175. endp
  176.  
  177. ;-----------------------------------------------------------------------------
  178.  
  179. window_title    db 'img.to_rgb2 test app',0
  180.  
  181. input_file      db '/hd0/1/in_32bpp.png',0
  182. ;-----------------------------------------------------------------------------
  183.  
  184. align 16
  185. @IMPORT:
  186.  
  187. library                         \
  188.         libio  , 'libio.obj'  , \
  189.         libimg , 'libimg.obj'
  190.  
  191. import  libio                     , \
  192.         libio.init , 'lib_init'   , \
  193.         file.size  , 'file_size'  , \
  194.         file.open  , 'file_open'  , \
  195.         file.read  , 'file_read'  , \
  196.         file.close , 'file_close'
  197.  
  198. import  libimg                     , \
  199.         libimg.init , 'lib_init'   , \
  200.         img.draw    , 'img_draw'   , \
  201.         img.decode  , 'img_decode' , \
  202.         img.create  , 'img_create' , \
  203.         img.destroy , 'img_destroy', \
  204.         img.to_rgb2 , 'img_to_rgb2'
  205.  
  206. ;-----------------------------------------------------------------------------
  207.  
  208. I_END:
  209.  
  210. img_data        dd ?
  211. img_data_len    dd ?
  212. fh              dd ?
  213.  
  214. image_initial   dd ?
  215. image_to_rgb2   dd ?
  216.