Subversion Repositories Kolibri OS

Rev

Rev 3105 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3105 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
4
	dd 0x1
5
	dd start
6
	dd i_end ;размер приложения
7
	dd mem,stacktop
8
	dd 0,sys_path
9
 
10
include '../../../../../macros.inc'
11
include '../../../../../proc32.inc'
12
include '../../../../../develop/libraries/box_lib/load_lib.mac'
13
include '../../../../../dll.inc'
14
 
15
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
16
 
17
struct FileInfoBlock
18
	Function dd ?
19
	Position dd ?
20
	Flags	 dd ?
21
	Count	 dd ?
22
	Buffer	 dd ?
23
		db ?
24
	FileName dd ?
25
ends
26
 
27
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
28
 
29
BUF_STRUCT_SIZE equ 21
30
buf2d_data equ dword[edi] ;данные буфера изображения
31
buf2d_w equ dword[edi+8] ;ширина буфера
32
buf2d_h equ dword[edi+12] ;высота буфера
33
buf2d_l equ word[edi+4]
34
buf2d_t equ word[edi+6] ;отступ сверху
35
buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера
36
buf2d_color equ dword[edi+16] ;цвет фона буфера
37
buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения
38
vox_offs_tree_table equ 4
39
 
40
macro load_image_file path,buf,size { ;макрос для загрузки изображений
41
	;path - может быть переменной или строковым параметром
42
	if path eqtype '' ;проверяем задан ли строкой параметр path
43
		jmp @f
44
			local .path_str
45
			.path_str db path ;формируем локальную переменную
46
			db 0
47
		@@:
48
		;32 - стандартный адрес по которому должен быть буфер с системным путем
49
		copy_path .path_str,[32],file_name,0x0
50
	else
51
		copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
52
	end if
53
 
54
	stdcall mem.Alloc, dword size ;выделяем память для изображения
55
	mov [buf],eax
56
 
57
	mov eax,70 ;70-я функция работа с файлами
58
	mov [run_file_70.Function], 0
59
	mov [run_file_70.Position], 0
60
	mov [run_file_70.Flags], 0
61
	mov [run_file_70.Count], dword size
62
	m2m [run_file_70.Buffer], [buf]
63
	mov byte[run_file_70+20], 0
64
	mov [run_file_70.FileName], file_name
65
	mov ebx,run_file_70
66
	int 0x40 ;загружаем файл изображения
67
	cmp ebx,0xffffffff
68
	je @f
69
		;определяем вид изображения и переводим его во временный буфер image_data
70
		stdcall dword[img_decode], dword[buf],ebx,0
71
		mov dword[image_data],eax
72
		;преобразуем изображение к формату rgb
73
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
74
		;удаляем временный буфер image_data
75
		stdcall dword[img_destroy], dword[image_data]
76
	@@:
77
}
78
 
79
align 4
80
start:
81
	load_libraries l_libs_start,load_lib_end
82
 
83
	;проверка на сколько удачно загузилась наша либа
84
	mov	ebp,lib0
85
	cmp	dword [ebp+ll_struc_size-4],0
86
	jz	@f
87
		mcall -1 ;exit not correct
88
	@@:
89
	mov	ebp,lib1
90
	cmp	dword [ebp+ll_struc_size-4],0
91
	jz	@f
92
		mcall -1 ;exit not correct
93
	@@:
94
 
95
	mcall 40,0x27
96
	mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
97
 
98
	load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
99
	stdcall [buf2d_create_f_img], buf_0,[image_data_rgb] ;создаем буфер
100
	stdcall [buf2d_create_f_img], buf_1,[image_data_rgb] ;создаем буфер
101
	stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
102
	stdcall mem.Free,[image_data_rgb] ;освобождаем память
103
 
3138 heavyiron 104
	stdcall [buf2d_filter_dither], buf_1,2
105
	stdcall [buf2d_filter_dither], buf_2,3
3105 IgorA 106
 
107
align 4
108
red_win:
109
	call draw_window
110
 
111
align 4
112
still: ;главный цикл
113
	mcall 10
114
 
115
	cmp al,0x1 ;изменилось положение окна
116
	jz red_win
117
	cmp al,0x2
118
	jz key
119
	cmp al,0x3
120
	jz button
121
 
122
	jmp still
123
 
124
align 4
125
key:
126
	push eax ebx
127
	mcall 2
128
;...
129
	pop ebx eax
130
	jmp still
131
 
132
 
133
align 4
134
draw_window:
135
	pushad
136
	mcall 12,1
137
 
138
	mov edx,[sc.work]
139
	or  edx,0x33000000
140
	mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
141
 
142
	stdcall [buf2d_draw], buf_0
143
	stdcall [buf2d_draw], buf_1
144
	stdcall [buf2d_draw], buf_2
145
 
146
	mcall 12,2
147
	popad
148
	ret
149
 
150
head_f_i:
151
head_f_l  db 'Системная ошибка',0
152
 
153
system_dir0 db '/sys/lib/'
154
name_buf2d db 'buf2d.obj',0
155
err_message_found_lib0 db 'Не удалось найти библиотеку buf2d.obj',0
156
err_message_import0 db 'Ошибка при импорте библиотеки buf2d.obj',0
157
 
158
system_dir1 db '/sys/lib/'
159
name_libimg db 'libimg.obj',0
160
err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0
161
err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0
162
 
163
;library structures
164
l_libs_start:
165
	lib0 l_libs name_buf2d,  sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i
166
	lib1 l_libs name_libimg, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i
167
load_lib_end:
168
 
169
align 4
170
button:
171
	mcall 17 ;получить код нажатой кнопки
172
	cmp ah,1
173
	jne still
174
.exit:
175
	stdcall [buf2d_delete],buf_0 ;удаляем буфер
176
	stdcall [buf2d_delete],buf_1 ;удаляем буфер
177
	stdcall [buf2d_delete],buf_2 ;удаляем буфер
178
	mcall -1 ;выход из программы
179
 
180
image_data dd 0 ;память для преобразования картинки функциями libimg
181
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
182
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
183
image_data_foto dd 0
184
 
185
run_file_70 FileInfoBlock
186
caption db 'Draw images 13.09.11',0 ;подпись окна
187
sc system_colors  ;системные цвета
188
 
189
align 4
190
buf_0:
191
	dd 0 ;указатель на буфер изображения
192
	dw 5 ;+4 left
193
	dw 5 ;+6 top
194
	dd 200 ;+8 w
195
	dd 186 ;+12 h
196
	dd 0xffffff ;+16 color
197
	db 24 ;+20 bit in pixel
198
 
199
align 4
200
buf_1:
201
	dd 0 ;указатель на буфер изображения
202
	dw 5 ;+4 left
203
	dw 200 ;+6 top
204
	dd 200 ;+8 w
205
	dd 186 ;+12 h
206
	dd 0 ;+16 color
207
	db 24 ;+20 bit in pixel
208
 
209
align 4
210
buf_2:
211
	dd 0 ;указатель на буфер изображения
212
	dw 210 ;+4 left
213
	dw 200 ;+6 top
214
	dd 200 ;+8 w
215
	dd 186 ;+12 h
216
	dd 0 ;+16 color
217
	db 24 ;+20 bit in pixel
218
 
219
align 4
220
import_libimg:
221
	dd alib_init1
222
	img_is_img  dd aimg_is_img
223
	img_info    dd aimg_info
224
	img_from_file dd aimg_from_file
225
	img_to_file dd aimg_to_file
226
	img_from_rgb dd aimg_from_rgb
227
	img_to_rgb  dd aimg_to_rgb
228
	img_to_rgb2 dd aimg_to_rgb2
229
	img_decode  dd aimg_decode
230
	img_encode  dd aimg_encode
231
	img_create  dd aimg_create
232
	img_destroy dd aimg_destroy
233
	img_destroy_layer dd aimg_destroy_layer
234
	img_count   dd aimg_count
235
	img_lock_bits dd aimg_lock_bits
236
	img_unlock_bits dd aimg_unlock_bits
237
	img_flip    dd aimg_flip
238
	img_flip_layer dd aimg_flip_layer
239
	img_rotate  dd aimg_rotate
240
	img_rotate_layer dd aimg_rotate_layer
241
	img_draw    dd aimg_draw
242
 
243
	dd 0,0
244
	alib_init1   db 'lib_init',0
245
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
246
	aimg_info    db 'img_info',0
247
	aimg_from_file db 'img_from_file',0
248
	aimg_to_file db 'img_to_file',0
249
	aimg_from_rgb db 'img_from_rgb',0
250
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
251
	aimg_to_rgb2 db 'img_to_rgb2',0
252
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
253
	aimg_encode  db 'img_encode',0
254
	aimg_create  db 'img_create',0
255
	aimg_destroy db 'img_destroy',0
256
	aimg_destroy_layer db 'img_destroy_layer',0
257
	aimg_count   db 'img_count',0
258
	aimg_lock_bits db 'img_lock_bits',0
259
	aimg_unlock_bits db 'img_unlock_bits',0
260
	aimg_flip    db 'img_flip',0
261
	aimg_flip_layer db 'img_flip_layer',0
262
	aimg_rotate  db 'img_rotate',0
263
	aimg_rotate_layer db 'img_rotate_layer',0
264
	aimg_draw    db 'img_draw',0
265
 
266
align 4
267
import_buf2d_lib:
268
	dd sz_lib_init
269
	buf2d_create dd sz_buf2d_create
270
	buf2d_create_f_img dd sz_buf2d_create_f_img
271
	buf2d_clear dd sz_buf2d_clear
272
	buf2d_draw dd sz_buf2d_draw
273
	buf2d_delete dd sz_buf2d_delete
274
	buf2d_filter_dither dd sz_buf2d_filter_dither
275
	dd 0,0
276
	sz_lib_init db 'lib_init',0
277
	sz_buf2d_create db 'buf2d_create',0
278
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
279
	sz_buf2d_clear db 'buf2d_clear',0
280
	sz_buf2d_draw db 'buf2d_draw',0
281
	sz_buf2d_delete db 'buf2d_delete',0
282
	sz_buf2d_filter_dither db 'buf2d_filter_dither',0
283
 
284
i_end:
285
	rb 1024
286
stacktop:
287
	sys_path rb 4096
288
	file_name:
289
		rb 4096
290
	plugin_path:
291
		rb 4096
292
	openfile_path:
293
		rb 4096
294
	filename_area:
295
		rb 256
296
mem: