Subversion Repositories Kolibri OS

Rev

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

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