Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3921 mario79 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