Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
717 mikedld 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