Subversion Repositories Kolibri OS

Rev

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