Subversion Repositories Kolibri OS

Rev

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

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