Subversion Repositories Kolibri OS

Rev

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

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