Subversion Repositories Kolibri OS

Rev

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