Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2680 dunkaist 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 ?