Subversion Repositories Kolibri OS

Rev

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

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