Subversion Repositories Kolibri OS

Rev

Rev 783 | 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, @PARAMS, 0x0
  6.  
  7. ;-----------------------------------------------------------------------------
  8.  
  9. FALSE = 0
  10. TRUE  = 1
  11.  
  12. include '../../../../../proc32.inc'
  13. include '../../../../../macros.inc'
  14. include '../dll.inc'
  15.  
  16. include '../../libio/libio.inc'
  17.  
  18. ;-----------------------------------------------------------------------------
  19.  
  20. START:
  21.         mcall   68, 11
  22.  
  23.         stdcall dll.Load, @IMPORT
  24.         or      eax, eax
  25.         jnz     exit
  26.  
  27.         invoke  file.open, @PARAMS, O_READ
  28.         or      eax, eax
  29.         jz      exit
  30.         mov     [fh], eax
  31.         invoke  file.size, @PARAMS
  32.         mov     [img_data_len], ebx
  33.         stdcall mem.Alloc, ebx
  34.         or      eax, eax
  35.         jz      exit
  36.         mov     [img_data], eax
  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.         invoke  file.close, [fh]
  43.         inc     eax
  44.         jz      exit
  45.        
  46.         invoke  img.is_img, [img_data], [img_data_len]
  47.         or      eax, eax
  48.         jz      exit
  49.         invoke  img.decode, [img_data], [img_data_len]
  50.         or      eax, eax
  51.         jz      exit
  52.         invoke  img.to_rgb, eax
  53.         or      eax, eax
  54.         jz      exit
  55.         mov     [rgb_img], eax
  56.  
  57. ;-----------------------------------------------------------------------------
  58.  
  59. red:
  60.         call    draw_window
  61.  
  62. still:
  63.         mcall   10
  64.         cmp     eax, 1
  65.         je      red
  66.         cmp     eax, 2
  67.         je      key
  68.         cmp     eax, 3
  69.         je      button
  70.         jmp     still
  71.  
  72.   key:
  73.         mcall   2
  74.         jmp     still
  75.  
  76.   button:
  77.         mcall   17
  78.         cmp     ah, 1
  79.         jne     still
  80.  
  81.   exit:
  82.         mcall   -1
  83.  
  84. draw_window:
  85.         invoke  gfx.open, TRUE
  86.         mov     [ctx], eax
  87.  
  88.         mov     edi, [rgb_img]
  89.         mov     ebx, 200 * 65536
  90.         mov     bx, [edi + 0]
  91.         add     bx, 9
  92.         mov     ecx, 200 * 65536
  93.         mov     cx, [edi + 4]
  94.         add     cx, 5 + 21
  95.         mcall   0, , , 0x33FF0000, , s_header
  96.  
  97.         mov     ebx, [rgb_img]
  98.         mov     ecx, [ebx + 0]
  99.         shl     ecx, 16
  100.         mov     cx, [ebx + 4]
  101.         add     ebx, 4 * 2
  102.         mcall   7, , , <0, 0>
  103.  
  104.         invoke  gfx.close, [ctx]
  105.         ret
  106.  
  107. ;-----------------------------------------------------------------------------
  108. proc mem.Alloc, size ;////////////////////////////////////////////////////////
  109. ;-----------------------------------------------------------------------------
  110.         push    ebx ecx
  111.         mov     ecx, [size]
  112.         add     ecx, 4
  113.         mcall   68, 12
  114.         add     ecx, -4
  115.         mov     [eax], ecx
  116.         add     eax, 4
  117.         pop     ecx ebx
  118.         ret
  119. endp
  120.  
  121. ;-----------------------------------------------------------------------------
  122. proc mem.ReAlloc, mptr, size ;////////////////////////////////////////////////
  123. ;-----------------------------------------------------------------------------
  124.         push    ebx ecx edx
  125.         mov     ecx, [size]
  126.         or      ecx, ecx
  127.         jz      @f
  128.         add     ecx, 4
  129.     @@: mov     edx, [mptr]
  130.         or      edx, edx
  131.         jz      @f
  132.         add     edx, -4
  133.     @@: mcall   68, 20
  134.         or      eax, eax
  135.         jz      @f
  136.         add     ecx, -4
  137.         mov     [eax], ecx
  138.         add     eax, 4
  139.     @@: pop     edx ecx ebx
  140.         ret
  141. endp
  142.  
  143. ;-----------------------------------------------------------------------------
  144. proc mem.Free, mptr ;/////////////////////////////////////////////////////////
  145. ;-----------------------------------------------------------------------------
  146.         push    ebx ecx
  147.         mov     ecx, [mptr]
  148.         or      ecx, ecx
  149.         jz      @f
  150.         add     ecx, -4
  151.     @@: mcall   68, 13
  152.         pop     ecx ebx
  153.         ret
  154. endp
  155.  
  156. ;-----------------------------------------------------------------------------
  157.  
  158. s_header db 'Image Viewer (test app)', 0
  159.  
  160. ;-----------------------------------------------------------------------------
  161.  
  162. align 16
  163. @IMPORT:
  164.  
  165. library                         \
  166.         libio  , 'libio.obj'  , \
  167.         libgfx , 'libgfx.obj' , \
  168.         libimg , 'libimg.obj'
  169.  
  170. import  libio                     , \
  171.         file.size  , 'file.size'  , \
  172.         file.open  , 'file.open'  , \
  173.         file.read  , 'file.read'  , \
  174.         file.close , 'file.close'
  175.  
  176. import  libgfx                  , \
  177.         gfx.open  , 'gfx.open'  , \
  178.         gfx.close , 'gfx.close'
  179.  
  180. import  libimg                    , \
  181.         img.is_img , 'img.is_img' , \
  182.         img.to_rgb , 'img.to_rgb' , \
  183.         img.decode , 'img.decode'
  184.  
  185. ;-----------------------------------------------------------------------------
  186.  
  187. I_END:
  188.  
  189. img_data     dd ?
  190. img_data_len dd ?
  191. fh           dd ?
  192. rgb_img      dd ?
  193.  
  194. ctx dd ?
  195.  
  196. @PARAMS rb 512
  197.