Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. include 'libimg/libimg.asm'
  2.  
  3.  
  4. ;¢®§¢à é ¥â 㪠§ â¥«ì ­  ¯ ¬ïâì «¨¡® 0
  5. LoadIcon:
  6. path    equ ebp+8
  7. BuffR   equ ebp-16
  8. BuffH   equ ebp-22
  9. endTablI equ ebp-26
  10.  
  11.         push    ebp
  12.         mov     ebp,esp
  13.         add     esp,-26
  14.  
  15.         push    ebx edi esi
  16.  
  17. ;--------------------------- ¯à®¢¥à塞 - § £à㦥­  «¨ íâ®â ä ©« á ¨ª®­ª®© ------
  18.         xor     ebx,ebx
  19.    .SearchIco:
  20.         mov     edi,[path]
  21.         mov     esi,[IcoTable+ebx]
  22.     @@: lodsb
  23.         scasb
  24.         jne     @f
  25.         test    al,al
  26.         jnz     @b
  27.  
  28.         mov     eax,[IcoTable+ebx+4]
  29.         pop     esi edi ebx
  30.         leave
  31.         ret     4
  32.     @@:
  33.         add     ebx,8
  34.         cmp     ebx,50*8
  35.         jne     @f
  36.  
  37.         xor     eax,eax
  38.         pop     esi edi ebx
  39.         leave
  40.         ret     4
  41.     @@:
  42.         cmp     [IcoTable+ebx],0
  43.         jnz     .SearchIco
  44.  
  45. ;-------------------------------------------------------------------------------
  46.         mov     [endTablI],ebx
  47.  
  48.         m2m     dword[fiIcon.path],dword[path]
  49.         mcall   70,fiIcon
  50.         test    eax,eax
  51.         jz      @f
  52.  
  53.         xor     eax,eax
  54.         pop     esi edi ebx
  55.         leave
  56.         ret     4
  57.  
  58.      @@:
  59.         xor     ecx,ecx
  60.         mov     cx,[BuffH+4]
  61.         xor     edi,edi
  62.      .TestRecord:
  63.         cmp     word[BuffR],2020h
  64.         jne     .NextRec
  65.         cmp     byte[BuffR+2],0
  66.         jne     .NextRec
  67.  
  68.         lea     eax,[BuffR]
  69.         stdcall LoadIco32b, [path],eax
  70.  
  71.  
  72.         pop     esi edi ebx
  73.         leave
  74.         ret     4
  75.  
  76.      .NextRec:
  77.         inc     edi
  78.  
  79.         mov     eax,edi
  80.         shl     eax,4
  81.         add     eax,6
  82.         mov     dword[fiIcon.pos],eax
  83.         mcall   70,fiIcon
  84.  
  85.         loop    .TestRecord
  86.  
  87.         xor     eax,eax
  88.         pop     esi edi ebx
  89.         leave
  90.         ret     4
  91. restore path
  92. restore BuffH
  93. restore BuffR
  94.  
  95. proc LoadIco32b, path,bufHeader
  96. local ImgBuff:DWORD
  97.         mov     edi,[bufHeader]
  98.         cmp     dword[edi+8],10A8h
  99.         je      @f
  100.  
  101.         xor     eax,eax
  102.         ret
  103.  
  104.      @@:
  105.         mcall   68,12,32*32*4*2
  106.         mov     ebx,[endTablI]
  107.         mov     [IcoTable+ebx],eax
  108.         add     eax,4096
  109.         mov     [IcoTable+ebx+4],eax
  110.         mov     [ImgBuff],eax
  111.         m2m     dword[fiIcon.pos],dword[edi+12]
  112.         mov     dword[fiIcon.size],32*32*4
  113.         mcall   70,fiIcon
  114.  
  115.         mov     eax,[ImgBuff]
  116.         ret
  117. endp
  118.  
  119.  
  120.  
  121. fiIcon:
  122.         dd 0
  123.  .pos   dd 0
  124.         dd 0
  125.  .size  dd 22
  126.  .point dd 0
  127.         db 0
  128.  .path  dd 0
  129.  
  130.  
  131. IcoTable rd 2*50       ;(name(4), data(4)). End - dword 0