Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4994 IgorA 1
use32
8262 IgorA 2
	org 0
4994 IgorA 3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
6313 IgorA 4
	dd 1, start, i_end, mem, stacktop, 0, sys_path
4994 IgorA 5
 
6
include '../../../../macros.inc'
7
include '../../../../proc32.inc'
6313 IgorA 8
include '../../../../KOSfuncs.inc'
9
include '../../../../load_img.inc'
8262 IgorA 10
include '../../../../load_lib.mac'
4994 IgorA 11
include '../../../../develop/libraries/box_lib/trunk/box_lib.mac'
12
 
8262 IgorA 13
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
6322 IgorA 14
caption db 'Просмотр информации Exif 11.03.16',0 ;подпись окна
4994 IgorA 15
 
16
run_file_70 FileInfoBlock
17
 
18
fn_toolbar db 'toolbar.png',0
19
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
20
image_data_toolbar dd 0
21
 
22
memory_file_size dd 512*1024 ;размер памяти для открытия файлов (в начале 512 Kb, но может увеличиватся при необходимости)
23
 
24
align 4
25
start:
26
	load_libraries l_libs_start,l_libs_end
27
	;проверка на сколько удачно загузилась библиотека
28
	mov	ebp,lib_0
29
	cmp	dword [ebp+ll_struc_size-4],0
30
	jz	@f
6313 IgorA 31
		mcall SF_TERMINATE_PROCESS
4994 IgorA 32
	@@:
6313 IgorA 33
	mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
34
	mcall SF_SET_EVENTS_MASK,0xC0000027
4994 IgorA 35
	stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога
36
 
37
	stdcall [buf2d_create], buf_0 ;создание буфера
6313 IgorA 38
	stdcall [buf2d_create], buf_thumb
4994 IgorA 39
 
6313 IgorA 40
	load_image_file 'font8x9.bmp', image_data_toolbar
4994 IgorA 41
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
42
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
43
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
44
	stdcall [buf2d_convert_text_matrix], buf_1
45
 
6313 IgorA 46
	load_image_file fn_toolbar, image_data_toolbar
4994 IgorA 47
 
48
	stdcall mem.Alloc,[memory_file_size]
49
	mov dword[open_file],eax
50
 
51
	call but_new_file
52
 
53
align 4
54
red_win:
55
	call draw_window
56
 
57
align 4
58
still:
6313 IgorA 59
	mcall SF_WAIT_EVENT
4994 IgorA 60
 
61
	cmp al,1
62
	jz red_win
63
	cmp al,2
64
	jz key
65
	cmp al,3
66
	jz button
67
	cmp al,6 ;мышь
68
	jne @f
69
		jmp mouse
70
	@@:
71
	jmp still
72
 
73
align 4
74
draw_window:
75
pushad
6313 IgorA 76
	mcall SF_REDRAW,SSF_BEGIN_DRAW
4994 IgorA 77
 
78
	; *** рисование главного окна (выполняется 1 раз при запуске) ***
79
	mov edx,[sc.work]
5007 IgorA 80
	or  edx,(3 shl 24)+0x30000000
4994 IgorA 81
	mov edi,caption
6313 IgorA 82
	mcall SF_CREATE_WINDOW, (20 shl 16)+590, (20 shl 16)+540
4994 IgorA 83
 
84
	; *** создание кнопок на панель ***
85
	mov esi,[sc.work_button]
6313 IgorA 86
	mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3
4994 IgorA 87
 
88
	mov ebx,(30 shl 16)+20
89
	mov edx,4
90
	int 0x40
91
 
92
	mov ebx,(55 shl 16)+20
93
	mov edx,5
94
	int 0x40
95
 
96
	mov ebx,(85 shl 16)+20
97
	mov edx,6
98
	int 0x40
99
 
100
	mov ebx,(110 shl 16)+20
101
	mov edx,7
102
	int 0x40
103
 
5007 IgorA 104
	mov ebx,(135 shl 16)+20
105
	mov edx,8
106
	int 0x40
107
 
6313 IgorA 108
	mov ebx,(160 shl 16)+20
109
	mov edx,9
4994 IgorA 110
	int 0x40
111
 
6313 IgorA 112
	; *** рисование иконок на кнопках ***
113
	mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new
114
 
4994 IgorA 115
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
116
	add edx,(25 shl 16) ;icon open
117
	int 0x40
118
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
119
	add edx,(25 shl 16) ;icon save
120
	int 0x40
121
 
122
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6313 IgorA 123
	add edx,(30 shl 16) ;app1 text
4994 IgorA 124
	int 0x40
125
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6313 IgorA 126
	add edx,(25 shl 16) ;app1 gps
4994 IgorA 127
	int 0x40
6313 IgorA 128
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
129
	add edx,(25 shl 16) ;app2 text
130
	int 0x40
131
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
132
	add edx,(25 shl 16) ;app2 thumbnail
133
	int 0x40
4994 IgorA 134
 
135
	; *** рисование буфера ***
136
	stdcall [buf2d_draw], buf_0
137
 
6313 IgorA 138
	mcall SF_REDRAW,SSF_END_DRAW
4994 IgorA 139
popad
140
	ret
141
 
142
align 4
143
key:
6313 IgorA 144
	mcall SF_GET_KEY
4994 IgorA 145
	jmp still
146
 
147
align 4
148
mouse:
149
 
150
	jmp still
151
 
152
align 4
153
button:
6313 IgorA 154
	mcall SF_GET_BUTTON
4994 IgorA 155
	cmp ah,3
156
	jne @f
157
		call but_new_file
158
	@@:
159
	cmp ah,4
160
	jne @f
161
		call but_open_file
162
	@@:
163
	cmp ah,5
164
	jne @f
165
		call but_save_file
166
	@@:
167
	cmp ah,6
168
	jne @f
6314 IgorA 169
		call draw_file_1 ;основная информация
4994 IgorA 170
	@@:
171
	cmp ah,7
172
	jne @f
6314 IgorA 173
		call draw_file_2 ;информация по GPS
4994 IgorA 174
	@@:
5007 IgorA 175
	cmp ah,8
176
	jne @f
6314 IgorA 177
		call draw_file_3 ;информация app2
5007 IgorA 178
	@@:
6313 IgorA 179
	cmp ah,9
180
	jne @f
6314 IgorA 181
		call draw_file_4
6313 IgorA 182
	@@:
4994 IgorA 183
	cmp ah,1
184
	jne still
185
.exit:
186
	stdcall [buf2d_delete],buf_0
187
	stdcall [buf2d_delete],buf_1 ;удаляем буфер
6313 IgorA 188
	stdcall [buf2d_delete],buf_thumb
4994 IgorA 189
	stdcall mem.Free,[image_data_toolbar]
190
	stdcall mem.Free,[open_file]
6313 IgorA 191
	mcall SF_TERMINATE_PROCESS
4994 IgorA 192
 
193
 
194
align 4
195
but_new_file:
196
	mov dword[open_file_size],0
5007 IgorA 197
	call draw_file_1
4994 IgorA 198
	ret
199
 
200
align 4
201
open_file dd 0 ;указатель на память для открытия файлов
202
open_file_size dd 0 ;размер открытого файла (должен быть не больше memory_file_size)
203
 
204
align 4
205
but_open_file:
206
	pushad
207
	copy_path open_dialog_name,communication_area_default_path,file_name,0
208
	mov [OpenDialog_data.type],0
209
	stdcall [OpenDialog_Start],OpenDialog_data
210
	cmp [OpenDialog_data.status],2
211
	je .end_open_file
212
	;код при удачном открытии диалога
213
 
6313 IgorA 214
	mov [run_file_70.Function], SSF_GET_INFO
4994 IgorA 215
	mov [run_file_70.Position], 0
216
	mov [run_file_70.Flags], 0
217
	mov dword[run_file_70.Count], 0
218
	m2m [run_file_70.Buffer], [open_file]
219
	mov byte[run_file_70+20], 0
220
	mov dword[run_file_70.FileName], openfile_path
6313 IgorA 221
	mcall SF_FILE,run_file_70
4994 IgorA 222
	cmp eax,0
223
	jne .end_open_file
224
 
225
	mov eax,[open_file]
6314 IgorA 226
	mov ebx,[eax+32] ;dword[eax+32] - размер открываемого файла
227
	mov [open_file_size],ebx ;ebx - размер открываемого файла
4994 IgorA 228
	;memory_file_size - размер выделенной памяти для файла
6314 IgorA 229
	cmp [memory_file_size],ebx
4994 IgorA 230
	jge @f
231
		;увеличиваем память если не хватило
6314 IgorA 232
		mov [memory_file_size],ebx
233
		stdcall mem.ReAlloc, [open_file],ebx
234
		mov [open_file],eax
4994 IgorA 235
	@@:
236
 
6313 IgorA 237
	mov [run_file_70.Function], SSF_READ_FILE
4994 IgorA 238
	mov [run_file_70.Position], 0
239
	mov [run_file_70.Flags], 0
240
	m2m dword[run_file_70.Count], dword[open_file_size]
241
	m2m dword[run_file_70.Buffer],dword[open_file]
242
	mov byte[run_file_70+20], 0
243
	mov dword[run_file_70.FileName], openfile_path
6313 IgorA 244
	mcall SF_FILE,run_file_70 ;загружаем файл изображения
4994 IgorA 245
	cmp ebx,0xffffffff
246
	je .end_open_file
247
 
248
	mov [open_file_size],ebx
249
	;add ebx,dword[open_file]
250
	;mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом
251
	stdcall [exif_get_app1], [open_file],h_app1
6313 IgorA 252
	mcall SF_SET_CAPTION,1,openfile_path
4994 IgorA 253
 
5007 IgorA 254
	call draw_file_1
4994 IgorA 255
	.end_open_file:
256
	popad
257
	ret
258
 
6313 IgorA 259
;description:
260
; информация exif из app1
261
; текстовые и числовые данные
4994 IgorA 262
align 4
5007 IgorA 263
draw_file_1:
4994 IgorA 264
pushad
265
	stdcall [buf2d_clear], buf_0, [buf_0.color]
266
	cmp dword[open_file_size],0
267
	je .open_file
268
 
269
	mov eax,1
5002 IgorA 270
	mov ebx,1
4994 IgorA 271
	.cycle_0:
6322 IgorA 272
		stdcall [exif_get_tag], h_app1,eax,txt_buf,80
5002 IgorA 273
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
4994 IgorA 274
		inc eax
275
		add ebx,10
276
		cmp byte[txt_buf],0
277
		jne .cycle_0
278
 
5002 IgorA 279
	;считываем дочерние теги для 0x8769
6322 IgorA 280
	stdcall [exif_get_child], h_app1,h_child,0x8769
5002 IgorA 281
	cmp dword[h_child],0
5007 IgorA 282
	je .no_found_child
5002 IgorA 283
 
284
	mov eax,1
285
	sub ebx,5
286
	.cycle_1:
6322 IgorA 287
		stdcall [exif_get_tag], h_child,eax,txt_buf,80
5002 IgorA 288
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000
289
		inc eax
290
		add ebx,10
291
		cmp byte[txt_buf],0
292
		jne .cycle_1
293
 
4994 IgorA 294
	jmp @f
5007 IgorA 295
	.no_found_child:
296
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000
297
		jmp @f
4994 IgorA 298
	.open_file:
299
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000
300
	@@:
301
	stdcall [buf2d_draw], buf_0
302
popad
303
	ret
304
 
6313 IgorA 305
;description:
306
; информация exif из app1
307
; данные о gps
4994 IgorA 308
align 4
5007 IgorA 309
draw_file_2:
310
pushad
311
	stdcall [buf2d_clear], buf_0, [buf_0.color]
312
	cmp dword[open_file_size],0
313
	je .open_file
314
 
315
	mov eax,1
316
	mov ebx,1
317
	.cycle_0:
6322 IgorA 318
		stdcall [exif_get_tag], h_app1,eax,txt_buf,80
5007 IgorA 319
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
320
		inc eax
321
		add ebx,10
322
		cmp byte[txt_buf],0
323
		jne .cycle_0
324
 
325
	;считываем дочерние теги для 0x8825
6322 IgorA 326
	stdcall [exif_get_child], h_app1,h_child,0x8825
5007 IgorA 327
	cmp dword[h_child],0
328
	je .no_found_child
329
 
330
	mov eax,1
331
	sub ebx,5
332
	.cycle_1:
6322 IgorA 333
		stdcall [exif_get_tag], h_child,eax,txt_buf,80
5007 IgorA 334
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000
335
		inc eax
336
		add ebx,10
337
		cmp byte[txt_buf],0
338
		jne .cycle_1
339
 
340
	jmp @f
341
	.no_found_child:
342
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000
343
		jmp @f
344
	.open_file:
345
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000
346
	@@:
347
	stdcall [buf2d_draw], buf_0
348
popad
349
	ret
350
 
6313 IgorA 351
;description:
352
; информация exif из app2
353
; текстовые и числовые данные
5007 IgorA 354
align 4
355
draw_file_3:
356
pushad
357
	stdcall [buf2d_clear], buf_0, [buf_0.color]
358
	cmp dword[open_file_size],0
359
	je .open_file
360
 
361
	mov eax,1
362
	mov ebx,1
363
	.cycle_0:
6322 IgorA 364
		stdcall [exif_get_tag], h_app1,eax,txt_buf,80
5007 IgorA 365
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
366
		inc eax
367
		add ebx,10
368
		cmp byte[txt_buf],0
369
		jne .cycle_0
370
 
5010 IgorA 371
	;находим app2
5009 IgorA 372
	stdcall [exif_get_app2], h_app1,h_child
5007 IgorA 373
	cmp dword[h_child],0
374
	je .no_found_child
5010 IgorA 375
 
6313 IgorA 376
	mov eax,1 ;25
5007 IgorA 377
	sub ebx,5
378
	.cycle_1:
6322 IgorA 379
		stdcall [exif_get_tag], h_child,eax,txt_buf,80
5007 IgorA 380
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000
381
		inc eax
382
		add ebx,10
383
		cmp byte[txt_buf],0
384
		jne .cycle_1
385
 
386
	jmp @f
387
	.no_found_child:
388
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000
389
		jmp @f
390
	.open_file:
391
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000
392
	@@:
393
	stdcall [buf2d_draw], buf_0
394
popad
395
	ret
396
 
6313 IgorA 397
;description:
398
; информация exif из app2
399
; картинка для камер Nikon
5007 IgorA 400
align 4
6313 IgorA 401
draw_file_4:
402
pushad
403
	stdcall [buf2d_clear], buf_0, [buf_0.color]
404
	cmp dword[open_file_size],0
405
	je .open_file
406
 
6322 IgorA 407
	;выводим общую информацию по снимку:
408
	;0x010f - Manufacturer of digicam
409
	;0x0110 - Model
410
	;0x0132 - Modify date
411
	mov ebx,3
412
	stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80
413
	stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
414
	add ebx,10
415
	stdcall [exif_get_tag_id], h_app1,0x0110,txt_buf,80
416
	stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
417
	add ebx,10
418
	stdcall [exif_get_tag_id], h_app1,0x0132,txt_buf,80
419
	stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
420
	add ebx,20
6313 IgorA 421
 
422
	;находим app2
423
	stdcall [exif_get_app2], h_app1,h_child
424
	cmp dword[h_child],0
425
	je .no_found_child
6322 IgorA 426
 
6313 IgorA 427
	;считываем дочерние теги
6322 IgorA 428
	;0x0011 - Preview IFD
429
	stdcall [exif_get_child], h_child,h_child,0x0011
6313 IgorA 430
	cmp dword[h_child],0
431
	je .no_found_child
432
 
6322 IgorA 433
	;0x0202 - Preview Image Length
434
	stdcall [exif_get_child], h_child,h_child_siz,0x0202
6313 IgorA 435
	cmp dword[h_child_siz],0
436
	je .no_found_child
437
 
6322 IgorA 438
	;0x0201 - Preview Image Start
439
	stdcall [exif_get_child], h_child,h_child,0x0201
6313 IgorA 440
	cmp dword[h_child],0
441
	je .no_found_child
442
 
443
	stdcall [img_decode],dword[h_child],dword[h_child_siz],0
444
	cmp dword[eax+4],1
445
	jl .no_found_child
446
	cmp dword[eax+8],1
447
	jl .no_found_child
448
	mov ebx,eax
449
	stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1
450
	;преобразуем изображение к формату rgb
451
	stdcall [img_to_rgb2],ebx,[buf_thumb]
6322 IgorA 452
	stdcall [img_destroy],ebx ;удаляем временный буфер ebx
6313 IgorA 453
 
6322 IgorA 454
	mov ebx,43
455
	stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,ebx,0xb000
456
	add ebx,10
457
	stdcall [buf2d_bit_blt], buf_0, 0,ebx, buf_thumb ;рисуем изображение
6313 IgorA 458
	jmp @f
459
 
460
	.no_found_child:
6322 IgorA 461
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000
6313 IgorA 462
		jmp @f
463
	.open_file:
464
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000
465
	@@:
466
	stdcall [buf2d_draw], buf_0
467
popad
468
	ret
469
 
470
align 4
4994 IgorA 471
but_save_file:
472
	pushad
473
	copy_path open_dialog_name,communication_area_default_path,file_name,0
474
	mov [OpenDialog_data.type],1
475
	stdcall [OpenDialog_Start],OpenDialog_data
476
	cmp [OpenDialog_data.status],2
477
	je .end_save_file
478
	;код при удачном открытии диалога
479
 
6313 IgorA 480
	mov [run_file_70.Function], SSF_CREATE_FILE
4994 IgorA 481
	mov [run_file_70.Position], 0
482
	mov [run_file_70.Flags], 0
6313 IgorA 483
 
484
if 1 ;ставим 1 если сохраняется все изображение
4994 IgorA 485
	mov ebx, dword[open_file]
486
	mov [run_file_70.Buffer], ebx
487
	mov ebx,[open_file_size]
6313 IgorA 488
end if
489
if 0 ;ставим 1 если сохраняется эскиз изображения
490
	;находим app2
491
	stdcall [exif_get_app2], h_app1,h_child
492
	cmp dword[h_child],0
493
	je .end_save_file
494
	;считываем дочерние теги
6322 IgorA 495
	stdcall [exif_get_child], h_child,h_child,0x0011
6313 IgorA 496
	cmp dword[h_child],0
497
	je .end_save_file
6322 IgorA 498
	stdcall [exif_get_child], h_child,h_child,0x0201
6313 IgorA 499
	cmp dword[h_child],0
500
	je .end_save_file
501
 
502
	mov ebx,dword[h_child] ;dword[open_file]
503
	mov [run_file_70.Buffer], ebx
6314 IgorA 504
	mov ebx,dword[h_child_siz] ;размер эскиза изображения
6313 IgorA 505
end if
4994 IgorA 506
	mov dword[run_file_70.Count], ebx ;размер файла
507
	mov byte[run_file_70+20], 0
508
	mov dword[run_file_70.FileName], openfile_path
6313 IgorA 509
	mcall SF_FILE,run_file_70 ;сохраняем файл
4994 IgorA 510
	;cmp ebx,0xffffffff
511
	;je .end_save_file
512
	; ... сообщение о неудачном сохранении ...
513
 
514
	.end_save_file:
515
	popad
516
	ret
517
 
518
;данные для диалога открытия файлов
519
align 4
520
OpenDialog_data:
521
.type			dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию
522
.procinfo		dd procinfo	;+4
523
.com_area_name		dd communication_area_name	;+8
524
.com_area		dd 0	;+12
525
.opendir_path		dd plugin_path	;+16
526
.dir_default_path	dd default_dir ;+20
527
.start_path		dd file_name ;+24 путь к диалогу открытия файлов
528
.draw_window		dd draw_window	;+28
529
.status 		dd 0	;+32
530
.openfile_path		dd openfile_path	;+36 путь к открываемому файлу
531
.filename_area		dd filename_area	;+40
532
.filter_area		dd Filter
533
.x:
534
.x_size 		dw 420 ;+48 ; Window X size
535
.x_start		dw 10 ;+50 ; Window X position
536
.y:
537
.y_size 		dw 320 ;+52 ; Window y size
538
.y_start		dw 10 ;+54 ; Window Y position
539
 
540
default_dir db '/rd/1',0
541
 
542
communication_area_name:
543
	db 'FFFFFFFF_open_dialog',0
544
open_dialog_name:
545
	db 'opendial',0
546
communication_area_default_path:
547
	db '/rd/1/File managers/',0
548
 
549
Filter:
550
dd Filter.end - Filter ;.1
551
.1:
552
db 'JPG',0
553
db 'JPEG',0
554
.end:
555
db 0
556
 
557
 
558
 
559
system_dir_0 db '/sys/lib/'
560
lib_name_0 db 'proc_lib.obj',0
561
system_dir_1 db '/sys/lib/'
562
lib_name_1 db 'libimg.obj',0
563
system_dir_2 db '/sys/lib/'
564
lib_name_2 db 'buf2d.obj',0
565
system_dir_3 db '/sys/lib/'
566
lib_name_3 db 'exif.obj',0
567
 
568
l_libs_start:
8262 IgorA 569
	lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib
570
	lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg
571
	lib_2 l_libs lib_name_2, file_name, system_dir_2, import_buf2d
572
	lib_3 l_libs lib_name_3, file_name, system_dir_3, import_exif
4994 IgorA 573
l_libs_end:
574
 
575
align 4
576
import_libimg:
577
	dd alib_init1
578
	img_is_img  dd aimg_is_img
579
	img_info    dd aimg_info
580
	img_from_file dd aimg_from_file
581
	img_to_file dd aimg_to_file
582
	img_from_rgb dd aimg_from_rgb
583
	img_to_rgb  dd aimg_to_rgb
584
	img_to_rgb2 dd aimg_to_rgb2
585
	img_decode  dd aimg_decode
586
	img_encode  dd aimg_encode
587
	img_create  dd aimg_create
588
	img_destroy dd aimg_destroy
589
	img_destroy_layer dd aimg_destroy_layer
590
	img_count   dd aimg_count
591
	img_lock_bits dd aimg_lock_bits
592
	img_unlock_bits dd aimg_unlock_bits
593
	img_flip    dd aimg_flip
594
	img_flip_layer dd aimg_flip_layer
595
	img_rotate  dd aimg_rotate
596
	img_rotate_layer dd aimg_rotate_layer
597
	img_draw    dd aimg_draw
598
 
599
	dd 0,0
600
	alib_init1   db 'lib_init',0
601
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
602
	aimg_info    db 'img_info',0
603
	aimg_from_file db 'img_from_file',0
604
	aimg_to_file db 'img_to_file',0
605
	aimg_from_rgb db 'img_from_rgb',0
606
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
607
	aimg_to_rgb2 db 'img_to_rgb2',0
608
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
609
	aimg_encode  db 'img_encode',0
610
	aimg_create  db 'img_create',0
611
	aimg_destroy db 'img_destroy',0
612
	aimg_destroy_layer db 'img_destroy_layer',0
613
	aimg_count   db 'img_count',0
614
	aimg_lock_bits db 'img_lock_bits',0
615
	aimg_unlock_bits db 'img_unlock_bits',0
616
	aimg_flip    db 'img_flip',0
617
	aimg_flip_layer db 'img_flip_layer',0
618
	aimg_rotate  db 'img_rotate',0
619
	aimg_rotate_layer db 'img_rotate_layer',0
620
	aimg_draw    db 'img_draw',0
621
 
622
align 4
8262 IgorA 623
import_proclib: ;описание экспортируемых функций
4994 IgorA 624
	OpenDialog_Init dd aOpenDialog_Init
625
	OpenDialog_Start dd aOpenDialog_Start
626
dd 0,0
627
	aOpenDialog_Init db 'OpenDialog_init',0
628
	aOpenDialog_Start db 'OpenDialog_start',0
629
 
630
align 4
631
import_buf2d:
632
	init dd sz_init
633
	buf2d_create dd sz_buf2d_create
634
	buf2d_create_f_img dd sz_buf2d_create_f_img
635
	buf2d_clear dd sz_buf2d_clear
636
	buf2d_draw dd sz_buf2d_draw
637
	buf2d_delete dd sz_buf2d_delete
6313 IgorA 638
	buf2d_resize dd sz_buf2d_resize
4994 IgorA 639
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
6313 IgorA 640
	buf2d_bit_blt dd sz_buf2d_bit_blt
4994 IgorA 641
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
642
	buf2d_draw_text dd sz_buf2d_draw_text
643
	dd 0,0
644
	sz_init db 'lib_init',0
645
	sz_buf2d_create db 'buf2d_create',0
646
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
647
	sz_buf2d_clear db 'buf2d_clear',0
648
	sz_buf2d_draw db 'buf2d_draw',0
649
	sz_buf2d_delete db 'buf2d_delete',0
6313 IgorA 650
	sz_buf2d_resize db 'buf2d_resize',0
4994 IgorA 651
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
6313 IgorA 652
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
4994 IgorA 653
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
654
	sz_buf2d_draw_text db 'buf2d_draw_text',0
655
 
656
align 4
657
import_exif: ;описание экспортируемых функций
5002 IgorA 658
	exif_get_app1 dd sz_exif_get_app1
5009 IgorA 659
	exif_get_app2 dd sz_exif_get_app2
6322 IgorA 660
	exif_get_tag dd sz_exif_get_tag
661
	exif_get_tag_id dd sz_exif_get_tag_id
662
	exif_get_child dd sz_exif_get_child
663
 
4994 IgorA 664
dd 0,0
5002 IgorA 665
	sz_exif_get_app1 db 'exif_get_app1',0
5009 IgorA 666
	sz_exif_get_app2 db 'exif_get_app2',0
6322 IgorA 667
	sz_exif_get_tag db 'exif_get_tag',0
668
	sz_exif_get_tag_id db 'exif_get_tag_id',0
669
	sz_exif_get_child db 'exif_get_child',0
4994 IgorA 670
 
6322 IgorA 671
 
4994 IgorA 672
sc system_colors
673
 
674
align 16
675
procinfo process_information
676
 
677
align 4
678
buf_0: dd 0 ;указатель на буфер изображения
679
	dw 5 ;+4 left
680
	dw 31 ;+6 top
6313 IgorA 681
.w: dd 570 ;+8 w
5007 IgorA 682
.h: dd 480 ;+12 h
4994 IgorA 683
.color: dd 0xffffd0 ;+16 color
684
	db 24 ;+20 bit in pixel
685
 
686
align 4
687
buf_1:
688
	dd 0 ;указатель на буфер изображения
689
	dw 25 ;+4 left
690
	dw 25 ;+6 top
691
	dd 128 ;+8 w
692
	dd 144 ;+12 h
693
	dd 0 ;+16 color
694
	db 24 ;+20 bit in pixel
695
 
6313 IgorA 696
align 4
697
buf_thumb:
698
	dd 0 ;указатель на буфер изображения
699
	dw 0 ;+4 left
700
	dw 0 ;+6 top
701
	dd 120 ;+8 w
702
	dd 100 ;+12 h
703
	dd 0 ;+16 color
704
	db 24 ;+20 bit in pixel
705
 
706
h_app1	rb 14 ;структура для заголовка главных тегов
707
h_child rb 14 ;структура для заголовка дочерних тегов
708
h_child_siz rb 14
709
 
4994 IgorA 710
txt_openfile db 'Откройте файл изображения в формате *.jpg.',0
6313 IgorA 711
txt_thumb db 'Это эскиз изображения из данных app2.',0
5007 IgorA 712
txt_nochild  db 'Информация по этой кнопке не найдена.',0
4994 IgorA 713
txt_buf rb 80
714
 
6313 IgorA 715
align 16
4994 IgorA 716
i_end:
717
	rb 2048
718
stacktop:
719
	sys_path rb 1024
6313 IgorA 720
	file_name rb 4096
4994 IgorA 721
	plugin_path rb 4096
722
	openfile_path rb 4096
723
	filename_area rb 256
724
mem: