Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2051 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
4
	dd 0x1
5
	dd start
6
	dd i_end ;размер приложения
7
	dd mem
8
	dd stacktop
9
	dd 0
10
	dd sys_path
11
 
12
include '../../macros.inc'
13
include '../../proc32.inc'
14
include '../../develop/libraries/box_lib/load_lib.mac'
15
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
3014 dunkaist 16
include '../../dll.inc'
2051 IgorA 17
include 'lang.inc'
2165 IgorA 18
include 'info_fun_float.inc'
2051 IgorA 19
 
20
debug equ 0
21
 
22
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
23
 
24
struct FileInfoBlock
25
	Function dd ?
26
	Position dd ?
27
	Flags	 dd ?
28
	Count	 dd ?
29
	Buffer	 dd ?
30
		db ?
31
	FileName dd ?
32
ends
33
 
34
run_file_70 FileInfoBlock
5881 IgorA 35
image_data dd 0 ;указатель на временную память, нужен для преобразования изображения
2051 IgorA 36
open_file_lif dd 0 ;указатель на память для открытия файлов 3ds
4332 IgorA 37
open_file_size dd 0 ;размер открытого файла
2051 IgorA 38
 
39
;
40
fn_toolbar db 'toolbar.png',0
41
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
42
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*7
43
image_data_toolbar dd 0
44
;
45
TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;размер bmp файла с системными иконками
46
icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок
47
icon_toolbar dd 0 ;указатеель на память для хранения иконок объектов
4332 IgorA 48
TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*8+54 ;размер bmp файла с иконками объектов
2051 IgorA 49
;
2080 IgorA 50
IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением
2051 IgorA 51
 
52
macro load_image_file path,buf,size { ;макрос для загрузки изображений
53
	;path - может быть переменной или строковым параметром
54
	if path eqtype '' ;проверяем задан ли строкой параметр path
55
		jmp @f
56
			local .path_str
57
			.path_str db path ;формируем локальную переменную
58
			db 0
59
		@@:
60
		;32 - стандартный адрес по которому должен быть буфер с системным путем
5881 IgorA 61
		copy_path .path_str,[32],file_name,0
2051 IgorA 62
	else
5881 IgorA 63
		copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
2051 IgorA 64
	end if
65
 
66
	stdcall mem.Alloc, dword size ;выделяем память для изображения
67
	mov [buf],eax
68
 
69
	mov [run_file_70.Function], 0
70
	mov [run_file_70.Position], 0
71
	mov [run_file_70.Flags], 0
72
	mov [run_file_70.Count], dword size
5911 IgorA 73
	m2m [run_file_70.Buffer], eax
2051 IgorA 74
	mov byte[run_file_70+20], 0
75
	mov [run_file_70.FileName], file_name
5911 IgorA 76
	mcall 70,run_file_70 ;загружаем файл изображения
2051 IgorA 77
	cmp ebx,0xffffffff
78
	je @f
79
		;определяем вид изображения и переводим его во временный буфер image_data
80
		stdcall dword[img_decode], dword[buf],ebx,0
81
		mov dword[image_data],eax
82
		;преобразуем изображение к формату rgb
83
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
84
		;удаляем временный буфер image_data
85
		stdcall dword[img_destroy], dword[image_data]
86
	@@:
87
}
88
 
89
;--------------------------------------
2107 IgorA 90
include 'data.inc'
2051 IgorA 91
 
92
level_stack dd 0
93
offs_last_timer dd 0 ;последний сдвиг показаный в функции таймера
94
 
2052 IgorA 95
ID_ICON_CHUNK_MAIN equ 0 ;иконка главного блока
96
ID_ICON_CHUNK_NOT_FOUND equ 1 ;иконка не известного блока
97
ID_ICON_DATA equ 2 ;иконка для данных блока, не определенной структуры
2051 IgorA 98
 
2052 IgorA 99
FILE_ERROR_CHUNK_SIZE equ -3 ;ошибка в размере блока
100
 
2051 IgorA 101
align 4
4332 IgorA 102
file_3ds: ;переменные используемые при открытии файла
2051 IgorA 103
.offs: dd 0 ;+0 указатель на начало блока
104
.size: dd 0 ;+4 размер блока (для 1-го параметра = размер файла 3ds)
2080 IgorA 105
rb 8*MAX_FILE_LEVEL
2051 IgorA 106
 
4332 IgorA 107
size_one_list equ 42
108
list_offs_chunk_del equ 8 ;может ли блок удалятся
109
list_offs_chunk_lev equ 9 ;уровень блока (прописан в данные узла)
110
list_offs_p_data equ 10 ;указатель на подпись блока
111
list_offs_text equ 14 ;сдвиг начала текста в листе
2051 IgorA 112
buffer rb size_one_list ;буфер для добавления структур в список tree1
113
 
114
txt_3ds_symb db 0,0
115
;--------------------------------------
116
 
2165 IgorA 117
include 'info_wnd_coords.inc'
2051 IgorA 118
 
119
align 4
120
start:
121
	load_libraries l_libs_start,l_libs_end
5881 IgorA 122
	;проверка на сколько удачно загузились библиотеки
5911 IgorA 123
	cmp	dword [lib_0+ll_struc_size-4],0
124
	jnz @f
125
	cmp	dword [lib_1+ll_struc_size-4],0
126
	jnz @f
127
	cmp	dword [lib_2+ll_struc_size-4],0
128
	jnz @f
129
	cmp	dword [lib_3+ll_struc_size-4],0
130
	jnz @f
131
	jmp .lib
132
	@@:
2051 IgorA 133
		mcall -1 ;exit not correct
5911 IgorA 134
	.lib:
2051 IgorA 135
	mcall 48,3,sc,sizeof.system_colors
136
	mcall 40,0x27
137
	stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога
138
 
5911 IgorA 139
	mov dword[w_scr_t1.type],1
2051 IgorA 140
	stdcall dword[tl_data_init], tree1
141
	;системные иконки 16*16 для tree_list
142
	load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE
143
	;если изображение не открылось, то в icon_tl_sys будут
144
	;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера
145
	mov eax,dword[icon_tl_sys]
146
	mov dword[tree1.data_img_sys],eax
147
 
148
	load_image_file 'objects.png', icon_toolbar,TOOLBAR_ICON_BMP_SIZE
149
	mov eax,dword[icon_toolbar]
150
	mov dword[tree1.data_img],eax
151
 
152
	stdcall [buf2d_create], buf_0 ;создание буфера
153
 
154
	load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE
155
	stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
156
	stdcall mem.Free,[image_data_toolbar] ;освобождаем память
157
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
158
	stdcall [buf2d_convert_text_matrix], buf_1
159
 
160
	load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE
161
 
162
	stdcall mem.Alloc,MAX_FILE_SIZE
163
	mov dword[open_file_lif],eax
164
 
165
	mcall 26,9
166
	mov [last_time],eax
167
 
168
align 4
169
red_win:
170
	call draw_window
171
 
172
align 4
173
still:
174
	mcall 26,9
175
	mov ebx,[last_time]
176
	add ebx,10 ;задержка
177
	cmp ebx,eax
178
	jge @f
179
		mov ebx,eax
180
	@@:
181
	sub ebx,eax
182
	;cmp ebx,10 ;задержка
183
	;ja timer_funct
184
	;test ebx,ebx
185
	;jz timer_funct
186
	mcall 23
187
	cmp eax,0
188
	je timer_funct
189
 
190
	cmp al,1
191
	jz red_win
192
	cmp al,2
193
	jz key
194
	cmp al,3
195
	jz button
196
	cmp al,6
2125 IgorA 197
	jne @f
198
		mcall 9,procinfo,-1
199
		cmp ax,word[procinfo+4]
200
		jne @f ;окно не активно
2051 IgorA 201
		call mouse
202
	@@:
203
	jmp still
204
 
205
align 4
206
mouse:
207
	stdcall [tl_mouse], dword tree1
208
	ret
209
 
210
align 4
211
timer_funct:
212
	pushad
2080 IgorA 213
if debug
5881 IgorA 214
	mcall 4, (5 shl 16)+8, 0xff+0x80000000, txt_0002
2080 IgorA 215
end if
2051 IgorA 216
	mcall 26,9
217
	mov [last_time],eax
218
 
219
	;
220
	stdcall [tl_node_get_data],tree1
5911 IgorA 221
	cmp eax,0
2051 IgorA 222
	je @f
5911 IgorA 223
		mov ebx,eax
2051 IgorA 224
		mov eax,dword[ebx] ;получаем значение сдвига выбранного блока относительно начала файла
2125 IgorA 225
		mov ecx,dword[ebx+4] ;размер блока
2051 IgorA 226
		stdcall hex_in_str, txt_3ds_offs.dig, eax,8
2125 IgorA 227
		stdcall hex_in_str, txt_3ds_offs.siz, ecx,8
2051 IgorA 228
 
229
		add eax,dword[open_file_lif] ;получаем значение сдвига в памяти
230
		cmp dword[offs_last_timer],eax
231
		je @f
232
			mov dword[offs_last_timer],eax
233
			call buf_draw_beg
2080 IgorA 234
			stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000
4332 IgorA 235
			mov edx,dword[ebx+list_offs_p_data]
2080 IgorA 236
			cmp edx,0 ;смотрим есть ли описание блока
237
			je .no_info
238
				stdcall [buf2d_draw_text], buf_0, buf_1,edx,5,45,0xb000
239
			.no_info:
2051 IgorA 240
			add ecx,eax ;получаем размер блока
241
			stdcall buf_draw_hex_table,eax,ecx ;добавление 16-ричных данных
242
			stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
243
	@@:
244
	popad
245
	jmp still
246
 
247
align 4
248
buf_draw_beg:
249
	stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер
250
	stdcall [buf2d_draw_text], buf_0, buf_1,txt_open_3ds,5,5,0xff
251
	stdcall [buf2d_draw_text], buf_0, buf_1,openfile_path,5,15,0xff
2052 IgorA 252
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;возможна ошибка файла
253
	jne @f
254
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_err_sizes,5,25,0xff0000
255
	@@:
2051 IgorA 256
	ret
257
 
258
align 4
259
proc buf_draw_hex_table, offs:dword, size_line:dword
260
	pushad
261
	locals
2080 IgorA 262
		coord_y dd 55 ;координата y для начала вывода таблицы
2051 IgorA 263
	endl
264
		mov esi,dword[offs]
265
		mov edi,dword[open_file_lif]
2080 IgorA 266
		add edi,dword[file_3ds.size] ;edi - указатель на конец файла в памяти
2051 IgorA 267
		mov dword[txt_3ds_offs.dig],0
268
		cld
269
		.cycle_rows:
270
			mov ebx,5 ;отступ слева для цифр
271
			mov edx,5+10*24 ;отступ слева для текста
272
			mov ecx,10
273
			@@:
274
				stdcall hex_in_str, txt_3ds_offs.dig, dword[esi],2
275
				stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs.dig,ebx,[coord_y],0
276
 
277
				mov al,byte[esi]
278
				mov byte[txt_3ds_symb],al
279
				stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_symb,edx,[coord_y],0x808080
280
				inc esi
281
				cmp esi,dword[size_line]
282
				jne .end_block
283
					stdcall draw_block_end_line, dword[coord_y]
284
				.end_block:
285
				cmp esi,edi
286
				jge @f ;jg ???
287
				add ebx,24
288
				add edx,9 ;ширина 1-го символа +1pix
289
				loop @b
290
			add dword[coord_y],10 ;высота 1-го символа (или интервал между строками)
291
			mov ebx,dword[buf_0.h]
292
			cmp dword[coord_y],ebx
293
			jl .cycle_rows
294
		@@:
295
	popad
296
	ret
297
endp
298
 
299
align 4
300
proc draw_block_end_line, coord_y:dword
301
	push eax ebx ecx
302
		add ebx,20 ;20 = width 2.5 symbols
303
		mov eax,[coord_y]
304
		sub eax,2
305
		mov ecx,eax
306
		add ecx,10
307
		stdcall [buf2d_line], buf_0, 0,ecx,ebx,ecx ,0xff
308
		stdcall [buf2d_line], buf_0, ebx,ecx,ebx,eax ,0xff
309
		stdcall [buf2d_line], buf_0, ebx,eax,5+10*24-4,eax ,0xff
310
	pop ecx ebx eax
311
	ret
312
endp
313
 
314
align 4
315
draw_window:
316
pushad
317
	mcall 12,1
318
	xor eax,eax
2052 IgorA 319
	mov ebx,(20 shl 16)+560
2051 IgorA 320
	mov ecx,(20 shl 16)+315
321
	mov edx,[sc.work]
322
	or  edx,(3 shl 24)+0x10000000+0x20000000
323
	mov edi,capt
324
	int 0x40
325
 
2125 IgorA 326
	mcall 9,procinfo,-1
327
	mov eax,dword[procinfo.box.height]
328
	cmp eax,250
329
	jge @f
330
		mov eax,250
331
	@@:
332
	sub eax,65
333
	mov dword[tree1.box_height],eax
334
	mov word[w_scr_t1+4],ax ;новые размеры скроллинга
2136 IgorA 335
	cmp eax,dword[buf_0.h] ;увеличиваем высоту буфера
336
	jle @f
337
		stdcall [buf2d_resize],buf_0,0,eax
338
		mov dword[offs_last_timer],0 ;для обновления буфера в таймере
339
	@@:
2125 IgorA 340
 
2136 IgorA 341
	mov eax,dword[procinfo.box.width]
342
	cmp eax,400
343
	jge @f
344
		mov eax,400
345
	@@:
346
	sub eax,[buf_0.w]
347
	sub eax,41
348
	mov dword[tree1.box_width],eax
349
	add ax,word[tree1.box_left]
5911 IgorA 350
	mov word[w_scr_t1+sb_offs_start_x],ax
2136 IgorA 351
	add ax,16+5
352
	mov word[buf_0.l],ax
353
 
2051 IgorA 354
	mov esi,[sc.work_button]
5911 IgorA 355
	mcall 8,(5 shl 16)+20,(5 shl 16)+20,3
2051 IgorA 356
 
357
	mov ebx,(30 shl 16)+20
358
	mov edx,4
359
	int 0x40
360
 
2173 IgorA 361
	cmp byte[can_save],0
362
	je @f
363
		mov ebx,(55 shl 16)+20
364
		mov edx,5
365
		int 0x40
366
	@@:
2051 IgorA 367
 
5911 IgorA 368
	mcall ,(85 shl 16)+20,,6 ;окно с координатами
369
	mcall ,(110 shl 16)+20,,7 ;удаление блока
2051 IgorA 370
 
5911 IgorA 371
	mcall 7,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new
4332 IgorA 372
 
2051 IgorA 373
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
374
	mov edx,(32 shl 16)+7 ;open
375
	int 0x40
376
 
2173 IgorA 377
	cmp byte[can_save],0
378
	je @f
379
		add ebx,IMAGE_TOOLBAR_ICON_SIZE
380
		mov edx,(57 shl 16)+7 ;save
381
		int 0x40
4332 IgorA 382
		sub ebx,IMAGE_TOOLBAR_ICON_SIZE
2173 IgorA 383
	@@:
2051 IgorA 384
 
4332 IgorA 385
	add ebx,4*IMAGE_TOOLBAR_ICON_SIZE
386
	mov edx,(87 shl 16)+7
387
	int 0x40
388
 
389
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
390
	mov edx,(112 shl 16)+7
391
	int 0x40
392
 
2051 IgorA 393
	mov dword[w_scr_t1.all_redraw],1
394
	stdcall [tl_draw],dword tree1
395
 
396
	stdcall [buf2d_draw], buf_0
397
 
398
	mcall 12,2
399
popad
400
	ret
401
 
402
align 4
403
key:
404
	mcall 2
405
	stdcall [tl_key], dword tree1
406
	jmp still
407
 
408
 
409
align 4
410
button:
411
	mcall 17
412
	cmp ah,3
413
	jne @f
414
		call but_new_file
5881 IgorA 415
		jmp still
2051 IgorA 416
	@@:
417
	cmp ah,4
418
	jne @f
419
		call but_open_file
5881 IgorA 420
		jmp still
2051 IgorA 421
	@@:
422
	cmp ah,5
423
	jne @f
424
		call but_save_file
5881 IgorA 425
		jmp still
2051 IgorA 426
	@@:
2165 IgorA 427
	cmp ah,6
428
	jne @f
429
		call but_wnd_coords
5881 IgorA 430
		jmp still
2165 IgorA 431
	@@:
4332 IgorA 432
	cmp ah,7
433
	jne @f
434
		call but_delete_chunk
5881 IgorA 435
		jmp still
4332 IgorA 436
	@@:
2051 IgorA 437
 
438
	cmp ah,1
439
	jne still
440
.exit:
441
	mov dword[tree1.data_img],0
442
	mov dword[tree1.data_img_sys],0
5911 IgorA 443
	stdcall [tl_data_clear], tree1
2051 IgorA 444
	stdcall [buf2d_delete],buf_0
445
	stdcall [buf2d_delete],buf_1 ;удаляем буфер
446
	stdcall mem.Free,[image_data_toolbar]
447
	stdcall mem.Free,[open_file_lif]
448
	mcall -1
449
 
450
 
451
align 4
452
but_new_file:
2173 IgorA 453
	mov byte[can_save],0
2051 IgorA 454
	stdcall [tl_info_clear], tree1 ;очистка списка объектов
455
	stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер
456
	stdcall [tl_draw], tree1
457
	stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
458
	ret
459
 
460
align 4
461
but_open_file:
5881 IgorA 462
	copy_path open_dialog_name,communication_area_default_path,file_name,0
2051 IgorA 463
	pushad
464
	mov [OpenDialog_data.type],0
465
	stdcall [OpenDialog_Start],OpenDialog_data
466
	cmp [OpenDialog_data.status],2
467
	je .end_open_file
468
	;код при удачном открытии диалога
469
 
470
	mov eax,70 ;70-я функция работа с файлами
471
	mov [run_file_70.Function], 0
472
	mov [run_file_70.Position], 0
473
	mov [run_file_70.Flags], 0
474
	mov dword[run_file_70.Count], MAX_FILE_SIZE
475
	m2m [run_file_70.Buffer], dword[open_file_lif]
476
	mov byte[run_file_70+20], 0
477
	mov dword[run_file_70.FileName], openfile_path
478
	mov ebx,run_file_70
479
	int 0x40 ;загружаем файл изображения
480
	cmp ebx,0xffffffff
481
	je .end_open_file
482
 
4332 IgorA 483
	mov [open_file_size],ebx
2051 IgorA 484
	;mcall 71,1,openfile_path
485
 
2173 IgorA 486
	mov byte[can_save],0
4332 IgorA 487
	call init_tree
488
	stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
489
 
490
	.end_open_file:
491
	popad
492
	ret
493
 
494
align 4
495
init_tree:
2051 IgorA 496
	stdcall [tl_info_clear], tree1 ;очистка списка объектов
497
 
498
	mov esi,dword[open_file_lif]
499
	cmp word[esi],CHUNK_MAIN
500
	je @f
501
		call buf_draw_beg
502
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_no_3ds,5,25,0xff0000 ;рисуем строку с текстом
503
		jmp .end_open
504
	@@:
505
	cmp dword[esi+2],MAX_FILE_SIZE
506
	jle @f
507
		call buf_draw_beg
508
		stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_big_file,5,25,0xff0000 ;рисуем строку с текстом
509
		jmp .end_open
510
	@@:
511
	;--- обработка открытого *.3ds файла
512
	mov eax,file_3ds
513
	mov dword[level_stack],0 ;обнуляем уровень стека
514
	mov dword[offs_last_timer],0
515
	;--- добавление главного блока в список
2080 IgorA 516
	stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2],0
2051 IgorA 517
	call block_children ;вход в дочерний блок
518
 
2052 IgorA 519
	mov edi,dword[file_3ds.offs]
520
	add edi,dword[file_3ds.size]
2051 IgorA 521
	.cycle_main:
522
		cmp dword[level_stack],0
2052 IgorA 523
		jle .end_cycle
524
 
525
		cmp esi,edi ;если конец файла
526
		jge .end_cycle
2051 IgorA 527
 
2080 IgorA 528
		mov edx,dword[esi+2] ;размер блока
2051 IgorA 529
		call block_analiz
2080 IgorA 530
		cmp dword[bl_found],0
2051 IgorA 531
		jne @f
532
			;объект не известного вида
2080 IgorA 533
			stdcall add_3ds_object, ID_ICON_CHUNK_NOT_FOUND,dword[level_stack],edx,0
2051 IgorA 534
			call block_next
535
			jmp .cycle_main
536
		@@:
537
			;объект известного вида
2080 IgorA 538
			mov ecx,dword[bl_found]
2051 IgorA 539
			mov bx,word[ecx+2] ;номер иконки для объекта
2080 IgorA 540
			stdcall add_3ds_object, ebx,dword[level_stack],edx,dword[ecx+5]
2051 IgorA 541
			cmp byte[ecx+4],1
542
			je .bl_data
543
				;блок содержит дочерние блоки
544
				call block_children ;вход в дочерний блок
545
				jmp .cycle_main
546
			.bl_data:
547
				;блок содержит данные
548
				call block_analiz_data
549
				jmp .cycle_main
550
	.end_cycle:
551
		stdcall [tl_cur_beg], tree1
552
		stdcall [tl_draw], tree1
553
	.end_open:
554
	ret
555
 
556
;анализ данных блока
557
;input:
558
; esi - memory pointer
2080 IgorA 559
;output:
560
; eax - new stack pointer
561
; esi - new memory pointer
2051 IgorA 562
align 4
563
block_analiz_data:
2080 IgorA 564
	push ebx ecx edx edi
565
		mov dx,word[esi]
2052 IgorA 566
		mov ecx,dword[esi+2]
567
		sub ecx,6 ;размер данных в блоке
2051 IgorA 568
		add esi,6
569
		mov ebx,dword[level_stack]
570
		inc ebx
2080 IgorA 571
		; *** анализ блоков с разными данными и выделением подблоков
572
		cmp dx,CHUNK_OBJBLOCK ;объект
573
		jne @f
2136 IgorA 574
			push ax
575
				cld
576
				xor al,al
577
				mov edi,esi
578
				repne scasb
579
			pop ax
580
			sub edi,esi ;edi - strlen
581
			stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;название объекта
582
			add esi,edi
583
			;sub ecx,edi ;уже сделано в repne
2080 IgorA 584
			jmp .next_bl
585
		@@:
2125 IgorA 586
		cmp dx,CHUNK_VERTLIST ;список вершин
587
		je .vertexes
588
		cmp dx,0x4111 ;флаги вершин
589
		je .vertexes
2136 IgorA 590
		cmp dx,CHUNK_MAPLIST ;текстурные координаты
2125 IgorA 591
		je .vertexes
592
		jmp @f
593
		.vertexes: ;обработка блоков, содержащих данные вершин
2136 IgorA 594
			stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число вершин
2125 IgorA 595
			add esi,2
596
			sub ecx,2
597
			stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;данные вершин
598
			sub esi,8 ;восстановление esi
599
			call block_next
600
			jmp .end_f
601
		@@:
2136 IgorA 602
		cmp dx,CHUNK_FACELIST ;список граней
603
		jne @f
604
			stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число граней
605
			push eax
606
			xor eax,eax
607
			mov ax,[esi]
608
			shl eax,3
609
			add esi,2
610
			sub ecx,2
611
			stdcall add_3ds_object, ID_ICON_DATA,ebx,eax,0 ;данные вершин
612
 
613
			sub ecx,eax
614
			cmp ecx,1
615
			jl .data_3 ;проверяем есть ли блок описывающий материал, применяемый к объекту
616
				add esi,eax
617
				pop eax
618
				jmp .next_bl
619
				;stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;данные материала
620
				;sub esi,eax ;восстановление esi
621
			.data_3:
622
 
623
			sub esi,8 ;восстановление esi
624
			pop eax
625
			call block_next
626
			jmp .end_f
627
		@@:
628
		cmp dx,CHUNK_FACEMAT ;материалы граней
629
		jne @f
630
			push ax
631
				cld
632
				xor al,al
633
				mov edi,esi
634
				repne scasb
635
			pop ax
636
			sub edi,esi ;edi - strlen
637
			stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;название объекта
638
			add esi,edi
639
			;sub ecx,edi ;уже сделано в repne
640
			stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число граней
641
			add esi,2
642
			sub ecx,2
643
			stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;номера граней, к которым применен материал
644
			sub esi,edi ;восстановление esi (1)
645
			sub esi,8   ;восстановление esi (2)
646
			call block_next
647
			jmp .end_f
648
		@@:
2080 IgorA 649
		; *** анализ блока с данными по умолчанию (без выделения подблоков)
650
			stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0
651
			sub esi,6 ;восстановление esi
652
			call block_next
653
			jmp .end_f
654
		.next_bl:
655
		; *** настройки для анализа оставшихся подблоков
656
			mov dword[eax],esi ;указатель на начало блока
657
			mov ebx,dword[esi+2]
658
			mov dword[eax+4],ebx ;размер блока
659
			inc dword[level_stack]
660
			add eax,8
2051 IgorA 661
		.end_f:
2080 IgorA 662
	pop edi edx ecx ebx
2051 IgorA 663
	ret
664
 
2052 IgorA 665
;вход в 1-й дочерний блок
666
;output:
667
; edx - destroy
2051 IgorA 668
align 4
669
block_children:
2052 IgorA 670
	push ecx
671
		;проверка правильности размеров дочернего блока
672
		mov ebx,esi ;смещение начала родительского блока
673
		add ebx,6 ;переход на начало дочернего блока
674
		add ebx,dword[ebx+2] ;добавляем размер дочернего блока
675
		mov ecx,esi ;смещение начала родительского блока
676
		add ecx,dword[esi+2] ;добавляем размер родительского блока
677
		cmp ebx,ecx ;учитывать заголовки не нужно, т. к. сравниваются только данные блоков
678
		jle @f
679
			;диагностировали ошибку файла, дочерний блок выходит за пределы родительского
680
			mov dword[level_stack],FILE_ERROR_CHUNK_SIZE
681
			jmp .end_f
682
		@@:
683
		mov dword[eax],esi ;указатель на начало блока
684
		mov ebx,dword[esi+2]
685
		mov dword[eax+4],ebx ;размер блока
686
		add esi,6 ;переходим к данным блока
687
		inc dword[level_stack]
688
		add eax,8
689
	.end_f:
690
	pop ecx
2051 IgorA 691
	ret
692
 
693
;переход к следущему блоку текущего уровня
4332 IgorA 694
;input:
695
; eax - адрес структуры с переменными
2051 IgorA 696
align 4
697
block_next:
698
push ebx
699
	add esi,dword[esi+2] ;пропускаем данные блока
700
 
701
	;проверка размеров родительского блока, для возможного выхода на верхний уровень если конец блока
2080 IgorA 702
	@@:
2051 IgorA 703
	mov ebx,dword[eax-8]
704
	add ebx,dword[eax-4]
705
	cmp esi,ebx
706
	jl @f
707
		dec dword[level_stack]
708
		sub eax,8
2080 IgorA 709
		cmp dword[level_stack],0
710
		jg @b
2051 IgorA 711
	@@:
712
pop ebx
713
	ret
714
 
2080 IgorA 715
;функция поиска структуры описывающей блок
2051 IgorA 716
;input:
717
;esi - memory pointer
718
;output:
2080 IgorA 719
;dword[bl_found] - pointer to chunk struct (= 0 if not found)
2051 IgorA 720
align 4
2080 IgorA 721
bl_found dd 0
2051 IgorA 722
block_analiz:
723
pushad
2080 IgorA 724
	mov dword[bl_found],0
2051 IgorA 725
	mov ecx,type_bloks
726
	@@:
727
		mov bx,word[ecx]
728
		cmp word[esi],bx
729
		je .found
730
		add ecx,sizeof.block_3ds
731
		cmp ecx,type_bloks.end
732
		jl @b
733
	jmp .no_found
734
	.found:
2080 IgorA 735
		mov dword[bl_found],ecx
2051 IgorA 736
	.no_found:
737
popad
738
	ret
739
 
740
;input:
741
; esi - указатель на анализируемые данные
4332 IgorA 742
; level - уровень вложенности узла
743
; size_bl - размер блока
2051 IgorA 744
align 4
2080 IgorA 745
proc add_3ds_object, icon:dword,level:dword,size_bl:dword,info_bl:dword
2051 IgorA 746
	pushad
747
		mov bx,word[icon]
748
		shl ebx,16
749
		mov bx,word[level]
750
 
751
		mov eax,esi
752
		sub eax,dword[open_file_lif]
753
		mov dword[buffer],eax ;смещение блока
754
		mov ecx,dword[size_bl]
755
		mov dword[buffer+4],ecx ;размер блока (используется в функции buf_draw_hex_table для рисования линии)
4332 IgorA 756
		mov ecx,dword[bl_found]
757
		cmp ecx,0
758
		je @f
759
			;... здесь нужен другой алгоритм защиты от удаления
760
			mov cl,byte[ecx+4]
761
		@@:
762
		mov byte[buffer+list_offs_chunk_del],cl
763
		mov ecx,[level]
764
		mov byte[buffer+list_offs_chunk_lev],cl
2080 IgorA 765
		mov ecx,dword[info_bl]
4332 IgorA 766
		mov dword[buffer+list_offs_p_data],ecx
2080 IgorA 767
		stdcall hex_in_str, buffer+list_offs_text,dword[esi+1],2
768
		stdcall hex_in_str, buffer+list_offs_text+2,dword[esi],2 ;код 3ds блока
769
		cmp ecx,0
770
		jne @f
4332 IgorA 771
			mov byte[buffer+list_offs_text+4],0 ;0 - символ конца строки
2080 IgorA 772
			jmp .no_capt
773
		@@:
774
			mov byte[buffer+list_offs_text+4],' '
775
			mov esi,ecx
776
			mov edi,buffer+list_offs_text+5
777
			mov ecx,size_one_list-(list_offs_text+5)
778
			cld
779
			rep movsb
780
			mov byte[buffer+size_one_list-1],0 ;0 - символ конеца строки
781
		.no_capt:
5911 IgorA 782
		stdcall [tl_node_add], tree1, ebx, buffer
2051 IgorA 783
		stdcall [tl_cur_next], tree1
784
		if debug
2080 IgorA 785
			stdcall print_err,sz_add_3ds_object,buffer+list_offs_text
2051 IgorA 786
		end if
787
	popad
788
	ret
789
endp
790
 
791
if debug
792
sz_add_3ds_object db 13,10,'3ds_object',0
793
 
794
align 4
795
proc print_err, fun:dword, mes:dword ;выводим сообщение об шибке на доску отладки
796
	pushad
797
	mov eax,63
798
	mov ebx,1
799
 
800
	mov esi,[fun]
801
	@@:
802
		mov cl,byte[esi]
803
		int 0x40
804
		inc esi
805
		cmp byte[esi],0
806
		jne @b
807
	mov cl,':'
808
	int 0x40
809
	mov cl,' '
810
	int 0x40
811
	mov esi,[mes]
812
	@@:
813
		mov cl,byte[esi]
814
		int 0x40
815
		inc esi
816
		cmp byte[esi],0
817
		jne @b
818
	popad
819
	ret
820
endp
821
end if
822
 
823
align 4
824
proc hex_in_str, buf:dword,val:dword,zif:dword
825
	pushad
826
		mov edi,dword[buf]
827
		mov ecx,dword[zif]
828
		add edi,ecx
829
		dec edi
830
		mov ebx,dword[val]
831
 
832
		.cycle:
833
			mov al,bl
834
			and al,0xf
835
			cmp al,10
836
			jl @f
837
				add al,'a'-'0'-10
838
			@@:
839
			add al,'0'
840
			mov byte[edi],al
841
			dec edi
842
			shr ebx,4
843
		loop .cycle
844
 
845
	popad
846
	ret
847
endp
848
 
849
align 4
850
but_save_file:
2173 IgorA 851
	pushad
852
	copy_path open_dialog_name,communication_area_default_path,file_name,0
853
	mov [OpenDialog_data.type],1
854
	stdcall [OpenDialog_Start],OpenDialog_data
855
	cmp [OpenDialog_data.status],2
856
	je .end_save_file
857
	;код при удачном открытии диалога
858
 
859
	mov eax,70 ;70-я функция работа с файлами
860
	mov [run_file_70.Function], 2
861
	mov [run_file_70.Position], 0
862
	mov [run_file_70.Flags], 0
863
	mov ebx, dword[open_file_lif]
864
	mov [run_file_70.Buffer], ebx
865
	mov ebx,dword[ebx+2]
866
	mov dword[run_file_70.Count], ebx ;размер файла
867
	mov byte[run_file_70+20], 0
868
	mov dword[run_file_70.FileName], openfile_path
869
	mov ebx,run_file_70
870
	int 0x40 ;загружаем файл изображения
871
	cmp ebx,0xffffffff
872
	je .end_save_file
873
 
874
	.end_save_file:
875
	popad
2051 IgorA 876
	ret
877
 
2165 IgorA 878
align 4
879
but_wnd_coords:
880
	cmp byte[prop_wnd_run],0
881
	jne @f
882
		pushad
883
		mcall 51,1,prop_start,thread_coords
884
		popad
885
	@@:
886
	ret
2051 IgorA 887
 
4332 IgorA 888
;description:
889
; удаление выбранного блока из открытого файла
890
align 4
891
but_delete_chunk:
892
	pushad
893
	stdcall [tl_node_get_data],tree1
5911 IgorA 894
	cmp eax,0
4332 IgorA 895
	je .end_f
5911 IgorA 896
	cmp byte[eax+list_offs_chunk_del],0 ;если блок защищен от удаления
4332 IgorA 897
	jne .notify
2051 IgorA 898
 
4332 IgorA 899
	;(1) копирование нижней части файла
5911 IgorA 900
	mov edx,dword[eax+4] ;размер блока
4332 IgorA 901
	sub [open_file_size],edx ;изменение размеров файла
902
	mov ecx,[open_file_size]
5911 IgorA 903
	mov ebx,dword[eax] ;получаем значение сдвига выбранного блока относительно начала файла
904
	sub ecx,ebx ;ecx - размер нижней сдвигаемой части файла
905
	add ebx,dword[open_file_lif] ;получаем значение сдвига в памяти
906
	mov edi,ebx
907
	mov esi,ebx
4332 IgorA 908
	add esi,edx
5911 IgorA 909
	mov bl,byte[eax+list_offs_chunk_lev] ;берем уровень текущего узла
4332 IgorA 910
	rep movsb
911
	mov byte[can_save],1
912
 
913
	;(2) изменение размеров родительских блоков
5911 IgorA 914
	cmp bl,0
4332 IgorA 915
	je .end_2
916
	.cycle_2:
917
	stdcall [tl_cur_perv], tree1
918
	stdcall [tl_node_get_data],tree1
5911 IgorA 919
	cmp eax,0
4332 IgorA 920
	je .end_2
5911 IgorA 921
		cmp byte[eax+list_offs_chunk_lev],bl
4332 IgorA 922
		jge .cycle_2
5911 IgorA 923
		mov bl,byte[eax+list_offs_chunk_lev]
924
		mov ecx,[eax]
4332 IgorA 925
		add ecx,[open_file_lif]
926
		sub dword[ecx+2],edx
5911 IgorA 927
		cmp bl,0 ;если самый верхний узел, то bl=0
4332 IgorA 928
		jne .cycle_2
929
	.end_2:
930
 
931
	;(3) обновление списка tree1
932
	call init_tree
933
	call draw_window
934
 
935
	jmp .end_f
936
	.notify:
937
	notify_window_run txt_not_delete
938
	.end_f:
939
	popad
940
	ret
941
 
2051 IgorA 942
;input:
943
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
944
;output:
945
; eax - число
946
align 4
5881 IgorA 947
proc conv_str_to_int uses ebx ecx esi, buf:dword
2051 IgorA 948
	xor eax,eax
949
	xor ebx,ebx
950
	mov esi,[buf]
951
	;определение отрицательных чисел
952
	xor ecx,ecx
953
	inc ecx
954
	cmp byte[esi],'-'
955
	jne @f
956
		dec ecx
957
		inc esi
958
	@@:
959
 
960
	cmp word[esi],'0x'
961
	je .load_digit_16
962
 
963
	.load_digit_10: ;считывание 10-тичных цифр
964
		mov bl,byte[esi]
965
		cmp bl,'0'
966
		jl @f
967
		cmp bl,'9'
968
		jg @f
969
			sub bl,'0'
970
			imul eax,10
971
			add eax,ebx
972
			inc esi
973
			jmp .load_digit_10
974
	jmp @f
975
 
976
	.load_digit_16: ;считывание 16-ричных цифр
977
		add esi,2
978
	.cycle_16:
979
		mov bl,byte[esi]
980
		cmp bl,'0'
981
		jl @f
982
		cmp bl,'f'
983
		jg @f
984
		cmp bl,'9'
985
		jle .us1
986
			cmp bl,'A'
987
			jl @f ;отсеиваем символы >'9' и <'A'
988
		.us1: ;составное условие
989
		cmp bl,'F'
990
		jle .us2
991
			cmp bl,'a'
992
			jl @f ;отсеиваем символы >'F' и <'a'
993
			sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
994
		.us2: ;составное условие
995
			sub bl,'0'
996
			cmp bl,9
997
			jle .cor1
998
				sub bl,7 ;convert 'A' to '10'
999
			.cor1:
1000
			shl eax,4
1001
			add eax,ebx
1002
			inc esi
1003
			jmp .cycle_16
1004
	@@:
1005
	cmp ecx,0 ;если число отрицательное
1006
	jne @f
1007
		sub ecx,eax
1008
		mov eax,ecx
1009
	@@:
1010
	ret
1011
endp
1012
 
1013
;данные для диалога открытия файлов
1014
align 4
1015
OpenDialog_data:
1016
.type			dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию
1017
.procinfo		dd procinfo	;+4
1018
.com_area_name		dd communication_area_name	;+8
1019
.com_area		dd 0	;+12
1020
.opendir_path		dd plugin_path	;+16
1021
.dir_default_path	dd default_dir ;+20
1022
.start_path		dd file_name ;+24 путь к диалогу открытия файлов
1023
.draw_window		dd draw_window	;+28
1024
.status 		dd 0	;+32
1025
.openfile_path		dd openfile_path	;+36 путь к открываемому файлу
1026
.filename_area		dd filename_area	;+40
1027
.filter_area		dd Filter
1028
.x:
1029
.x_size 		dw 420 ;+48 ; Window X size
1030
.x_start		dw 10 ;+50 ; Window X position
1031
.y:
1032
.y_size 		dw 320 ;+52 ; Window y size
1033
.y_start		dw 10 ;+54 ; Window Y position
1034
 
1035
default_dir db '/rd/1',0
1036
 
1037
communication_area_name:
1038
	db 'FFFFFFFF_open_dialog',0
1039
open_dialog_name:
1040
	db 'opendial',0
1041
communication_area_default_path:
1042
	db '/rd/1/File managers/',0
1043
 
1044
Filter:
1045
dd Filter.end - Filter.1
1046
.1:
1047
db '3DS',0
1048
db 'TXT',0
1049
.end:
1050
db 0
1051
 
1052
 
1053
 
1054
head_f_i:
1055
head_f_l db 'Системная ошибка',0
1056
 
1057
system_dir_0 db '/sys/lib/'
1058
lib_name_0 db 'proc_lib.obj',0
1059
err_message_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0
1060
err_message_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0
1061
 
1062
system_dir_1 db '/sys/lib/'
1063
lib_name_1 db 'libimg.obj',0
1064
err_message_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,0
1065
err_message_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0
1066
 
1067
system_dir_2 db '/sys/lib/'
1068
lib_name_2 db 'box_lib.obj',0
1069
err_msg_found_lib_2 db 'Не найдена библиотека ',39,'box_lib.obj',39,0
1070
err_msg_import_2 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,0
1071
 
5881 IgorA 1072
system_dir_3 db '/sys/lib/'
1073
lib_name_3 db 'buf2d.obj',0
1074
err_msg_found_lib_3 db 'Не найдена библиотека ',39,'buf2d.obj',39,0
1075
err_msg_import_3 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,0
2051 IgorA 1076
 
1077
l_libs_start:
5881 IgorA 1078
	lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
2051 IgorA 1079
		err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
5881 IgorA 1080
	lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
2051 IgorA 1081
		err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
1082
	lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
1083
		err_msg_found_lib_2,head_f_l,import_box_lib,err_msg_import_2,head_f_i
5881 IgorA 1084
	lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\
1085
		err_msg_found_lib_3,head_f_l,import_buf2d,err_msg_import_3,head_f_i
2051 IgorA 1086
l_libs_end:
1087
 
1088
align 4
1089
import_libimg:
1090
	dd alib_init1
1091
	img_is_img  dd aimg_is_img
1092
	img_info    dd aimg_info
1093
	img_from_file dd aimg_from_file
1094
	img_to_file dd aimg_to_file
1095
	img_from_rgb dd aimg_from_rgb
1096
	img_to_rgb  dd aimg_to_rgb
1097
	img_to_rgb2 dd aimg_to_rgb2
1098
	img_decode  dd aimg_decode
1099
	img_encode  dd aimg_encode
1100
	img_create  dd aimg_create
1101
	img_destroy dd aimg_destroy
1102
	img_destroy_layer dd aimg_destroy_layer
1103
	img_count   dd aimg_count
1104
	img_lock_bits dd aimg_lock_bits
1105
	img_unlock_bits dd aimg_unlock_bits
1106
	img_flip    dd aimg_flip
1107
	img_flip_layer dd aimg_flip_layer
1108
	img_rotate  dd aimg_rotate
1109
	img_rotate_layer dd aimg_rotate_layer
1110
	img_draw    dd aimg_draw
1111
 
1112
	dd 0,0
1113
	alib_init1   db 'lib_init',0
1114
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
1115
	aimg_info    db 'img_info',0
1116
	aimg_from_file db 'img_from_file',0
1117
	aimg_to_file db 'img_to_file',0
1118
	aimg_from_rgb db 'img_from_rgb',0
1119
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
1120
	aimg_to_rgb2 db 'img_to_rgb2',0
1121
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
1122
	aimg_encode  db 'img_encode',0
1123
	aimg_create  db 'img_create',0
1124
	aimg_destroy db 'img_destroy',0
1125
	aimg_destroy_layer db 'img_destroy_layer',0
1126
	aimg_count   db 'img_count',0
1127
	aimg_lock_bits db 'img_lock_bits',0
1128
	aimg_unlock_bits db 'img_unlock_bits',0
1129
	aimg_flip    db 'img_flip',0
1130
	aimg_flip_layer db 'img_flip_layer',0
1131
	aimg_rotate  db 'img_rotate',0
1132
	aimg_rotate_layer db 'img_rotate_layer',0
1133
	aimg_draw    db 'img_draw',0
1134
 
1135
align 4
1136
proclib_import: ;описание экспортируемых функций
1137
	OpenDialog_Init dd aOpenDialog_Init
1138
	OpenDialog_Start dd aOpenDialog_Start
1139
dd 0,0
1140
	aOpenDialog_Init db 'OpenDialog_init',0
1141
	aOpenDialog_Start db 'OpenDialog_start',0
1142
 
1143
align 4
1144
import_buf2d:
1145
	dd sz_init0
1146
	buf2d_create dd sz_buf2d_create
1147
	buf2d_create_f_img dd sz_buf2d_create_f_img
1148
	buf2d_clear dd sz_buf2d_clear
1149
	buf2d_draw dd sz_buf2d_draw
1150
	buf2d_delete dd sz_buf2d_delete
2136 IgorA 1151
	buf2d_resize dd sz_buf2d_resize
2051 IgorA 1152
	buf2d_line dd sz_buf2d_line
1153
	buf2d_rect_by_size dd sz_buf2d_rect_by_size
1154
	buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
1155
	buf2d_circle dd sz_buf2d_circle
1156
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
1157
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
1158
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
1159
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
1160
	buf2d_bit_blt dd sz_buf2d_bit_blt
1161
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
1162
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
1163
	buf2d_curve_bezier dd sz_buf2d_curve_bezier
1164
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
1165
	buf2d_draw_text dd sz_buf2d_draw_text
1166
	buf2d_crop_color dd sz_buf2d_crop_color
1167
	buf2d_offset_h dd sz_buf2d_offset_h
1168
	buf2d_flood_fill dd sz_buf2d_flood_fill
1169
	buf2d_set_pixel dd sz_buf2d_set_pixel
1170
	dd 0,0
1171
	sz_init0 db 'lib_init',0
1172
	sz_buf2d_create db 'buf2d_create',0
1173
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
1174
	sz_buf2d_clear db 'buf2d_clear',0
1175
	sz_buf2d_draw db 'buf2d_draw',0
1176
	sz_buf2d_delete db 'buf2d_delete',0
2136 IgorA 1177
	sz_buf2d_resize db 'buf2d_resize',0
2051 IgorA 1178
	sz_buf2d_line db 'buf2d_line',0
1179
	sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
1180
	sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
1181
	sz_buf2d_circle db 'buf2d_circle',0
1182
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
1183
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
1184
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
1185
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
1186
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
1187
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
1188
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
1189
	sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
1190
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
1191
	sz_buf2d_draw_text db 'buf2d_draw_text',0
1192
	sz_buf2d_crop_color db 'buf2d_crop_color',0
1193
	sz_buf2d_offset_h db 'buf2d_offset_h',0
1194
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
1195
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
1196
 
1197
align 4
1198
import_box_lib:
1199
	dd sz_init1
1200
	init_checkbox dd sz_init_checkbox
1201
	check_box_draw dd sz_check_box_draw
1202
	edit_box_draw dd sz_edit_box_draw
1203
	edit_box_key dd sz_edit_box_key
1204
	edit_box_mouse dd sz_edit_box_mouse
1205
	edit_box_set_text dd sz_edit_box_set_text
1206
	scrollbar_ver_draw dd sz_scrollbar_ver_draw
1207
	scrollbar_hor_draw dd sz_scrollbar_hor_draw
1208
 
1209
	tl_data_init dd sz_tl_data_init
1210
	tl_data_clear dd sz_tl_data_clear
1211
	tl_info_clear dd sz_tl_info_clear
1212
	tl_key dd sz_tl_key
1213
	tl_mouse dd sz_tl_mouse
1214
	tl_draw dd sz_tl_draw
1215
	tl_info_undo dd sz_tl_info_undo
1216
	tl_info_redo dd sz_tl_info_redo
1217
	tl_node_add dd sz_tl_node_add
1218
	tl_node_set_data dd sz_tl_node_set_data
1219
	tl_node_get_data dd sz_tl_node_get_data
1220
	tl_node_delete dd sz_tl_node_delete
1221
	tl_node_move_up dd sz_tl_node_move_up
1222
	tl_node_move_down dd sz_tl_node_move_down
1223
	tl_cur_beg dd sz_tl_cur_beg
1224
	tl_cur_next dd sz_tl_cur_next
1225
	tl_cur_perv dd sz_tl_cur_perv
1226
	tl_node_close_open dd sz_tl_node_close_open
1227
	tl_node_lev_inc dd sz_tl_node_lev_inc
1228
	tl_node_lev_dec dd sz_tl_node_lev_dec
1229
	tl_node_poi_get_info dd sz_tl_node_poi_get_info
1230
	tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info
1231
	tl_node_poi_get_data dd sz_tl_node_poi_get_data
1232
 
1233
	dd 0,0
1234
	sz_init1 db 'lib_init',0
1235
	sz_init_checkbox db 'init_checkbox2',0
1236
	sz_check_box_draw db 'check_box_draw2',0
1237
	sz_edit_box_draw db 'edit_box',0
1238
	sz_edit_box_key db 'edit_box_key',0
1239
	sz_edit_box_mouse db 'edit_box_mouse',0
1240
	sz_edit_box_set_text db 'edit_box_set_text',0
1241
	sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
1242
	sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
1243
 
1244
	sz_tl_data_init db 'tl_data_init',0
1245
	sz_tl_data_clear db 'tl_data_clear',0
1246
	sz_tl_info_clear db 'tl_info_clear',0
1247
	sz_tl_key db 'tl_key',0
1248
	sz_tl_mouse db 'tl_mouse',0
1249
	sz_tl_draw db 'tl_draw',0
1250
	sz_tl_info_undo db 'tl_info_undo',0
1251
	sz_tl_info_redo db 'tl_info_redo',0
1252
	sz_tl_node_add db 'tl_node_add',0
1253
	sz_tl_node_set_data db 'tl_node_set_data',0
1254
	sz_tl_node_get_data db 'tl_node_get_data',0
1255
	sz_tl_node_delete db 'tl_node_delete',0
1256
	sz_tl_node_move_up db 'tl_node_move_up',0
1257
	sz_tl_node_move_down db 'tl_node_move_down',0
1258
	sz_tl_cur_beg db 'tl_cur_beg',0
1259
	sz_tl_cur_next db 'tl_cur_next',0
1260
	sz_tl_cur_perv db 'tl_cur_perv',0
1261
	sz_tl_node_close_open db 'tl_node_close_open',0
1262
	sz_tl_node_lev_inc db 'tl_node_lev_inc',0
1263
	sz_tl_node_lev_dec db 'tl_node_lev_dec',0
1264
	sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0
1265
	sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0
1266
	sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
1267
 
1268
 
5911 IgorA 1269
align 4
2051 IgorA 1270
mouse_dd dd 0x0
1271
sc system_colors
1272
last_time dd 0
1273
 
1274
align 4
1275
buf_0: dd 0 ;указатель на буфер изображения
2136 IgorA 1276
.l: dw 205 ;+4 left
2173 IgorA 1277
.t: dw 35 ;+6 top
2051 IgorA 1278
.w: dd 340 ;+8 w
1279
.h: dd 250 ;+12 h
1280
.color: dd 0xffffd0 ;+16 color
1281
	db 24 ;+20 bit in pixel
1282
 
1283
align 4
1284
buf_1:
1285
	dd 0 ;указатель на буфер изображения
1286
	dw 25 ;+4 left
1287
	dw 25 ;+6 top
1288
	dd 128 ;+8 w
1289
	dd 144 ;+12 h
1290
	dd 0 ;+16 color
1291
	db 24 ;+20 bit in pixel
1292
 
5911 IgorA 1293
align 4
2051 IgorA 1294
el_focus dd tree1
4332 IgorA 1295
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
2080 IgorA 1296
	16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 16,list_offs_text,0, el_focus,\
2051 IgorA 1297
	w_scr_t1,0
1298
 
1299
align 4
5911 IgorA 1300
w_scr_t1 scrollbar 16,0, 3,0, 15, 100, 0,0, 0xeeeeee, 0xbbddff, 0, 1
2051 IgorA 1301
 
5911 IgorA 1302
align 16
2051 IgorA 1303
i_end:
5911 IgorA 1304
	procinfo process_information
2051 IgorA 1305
	rb 1024
2165 IgorA 1306
thread_coords:
1307
	rb 1024
2051 IgorA 1308
stacktop:
1309
	sys_path rb 1024
1310
	file_name:
5881 IgorA 1311
		rb 4096
2051 IgorA 1312
	library_path rb 1024
1313
	plugin_path rb 4096
1314
	openfile_path rb 4096
1315
	filename_area rb 256
1316
mem: