Subversion Repositories Kolibri OS

Rev

Rev 8083 | Rev 8262 | 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
 
8255 IgorA 26
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
6060 IgorA 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
8083 IgorA 230
	call [gluNewQuadric]
6060 IgorA 231
	mov [qObj],eax
232
 
233
	mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
234
	mov eax,[eax] ;eax -> ZBuffer
8083 IgorA 235
	mov eax,[eax+ZBuffer.pbuf]
6060 IgorA 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
8083 IgorA 290
			mov ebx,[eax]
6081 IgorA 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
8083 IgorA 297
		sar ebx,16 ;mouse.x
6060 IgorA 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
		@@:
8083 IgorA 307
		movsx eax,ax ;mouse.y
6060 IgorA 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
8083 IgorA 349
		sar ebx,16 ;mouse.x
6060 IgorA 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
8083 IgorA 355
		movsx eax,ax ;mouse.y
6060 IgorA 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
 
8083 IgorA 366
	stdcall [tl_mouse], tree1
6060 IgorA 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
8083 IgorA 381
		lea edi,[eax+list_offs_obj3d]
6060 IgorA 382
		mov ebx,eax
8083 IgorA 383
		mov eax,[ebx]
384
		mov ecx,[ebx+4] ;размер блока
6060 IgorA 385
		stdcall hex_in_str, txt_3ds_offs.dig, eax,8
386
		stdcall hex_in_str, txt_3ds_offs.siz, ecx,8
387
 
8083 IgorA 388
		add eax,[open_file_data] ;получаем значение сдвига в памяти
389
		cmp [offs_last_timer],eax
6060 IgorA 390
		je .end_f
391
			;если выделенный блок данных не совпадает с последним запомненным
8083 IgorA 392
			mov [offs_last_timer],eax
6060 IgorA 393
 
394
			cmp word[eax],CHUNK_OBJBLOCK
395
			jne .end_oblo
6889 IgorA 396
			cmp dword[edi+obj_3d.poi_count],2
6060 IgorA 397
			jl .ini_oblo
398
				stdcall draw_3d,edi
399
				jmp .end_f
400
			.ini_oblo:
401
				stdcall obj_init,edi ;попытка настроить переменные объекта
6889 IgorA 402
				cmp dword[edi+obj_3d.poi_count],2
6060 IgorA 403
				jl .end_f
404
					call mnu_reset_settings ;сброс углов поворота и режимов рисования
405
				jmp .end_f
406
			.end_oblo:
6081 IgorA 407
 
408
			cmp word[eax],CHUNK_MATERIAL
409
			jne .end_mblo
6889 IgorA 410
			cmp dword[edi+material.name],0
6081 IgorA 411
			je .ini_mblo
412
				stdcall draw_material,edi
413
				jmp .end_f
414
			.ini_mblo:
6509 IgorA 415
				stdcall mat_init,edi,eax ;попытка настроить данные материала
6889 IgorA 416
				cmp dword[edi+material.name],0
6081 IgorA 417
				je .end_f
418
					stdcall draw_material,edi
419
				jmp .end_f
420
			.end_mblo:
421
 
422
			stdcall buf_draw_beg, buf_ogl
6060 IgorA 423
			stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_3ds_offs,5,35,0xb000
8083 IgorA 424
			mov edx,[ebx+list_offs_p_data]
7610 IgorA 425
			or edx,edx ;смотрим есть ли описание блока
426
			jz .no_info
6060 IgorA 427
				stdcall [buf2d_draw_text], buf_ogl, buf_1,edx,5,45,0xb000
428
			.no_info:
429
			stdcall [buf2d_draw], buf_ogl ;обновляем буфер на экране
430
	.end_f:
431
	popad
432
	jmp still
433
 
434
align 4
435
draw_window:
436
pushad
437
	mcall SF_REDRAW,SSF_BEGIN_DRAW
438
	mov edx,[sc.work]
439
	or  edx,0x33000000
440
	mcall SF_CREATE_WINDOW, (20 shl 16)+560, (20 shl 16)+main_wnd_height,,, capt
441
 
442
	mcall SF_THREAD_INFO,procinfo,-1
443
	mov eax,dword[procinfo.box.height]
444
	cmp eax,250
445
	jge @f
446
		mov eax,250
447
	@@:
448
	sub eax,30
449
	sub eax,[tree1.box_top]
450
	mov [tree1.box_height],eax
451
	mov word[w_scr_t1.y_size],ax ;новые размеры скроллинга
452
 
453
	stdcall [kmainmenu_draw], [main_menu]
454
 
455
	mov esi,[sc.work_button]
6130 leency 456
	mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(24 shl 16)+20,0x40000003
457
	mcall ,(30 shl 16)+20,,0x40000004 ;open
6509 IgorA 458
	mcall ,(3d_wnd_l shl 16)+20,,0x40000005 ;вершины вкл.
459
	mcall ,((3d_wnd_l+25) shl 16)+20,,0x40000006 ;каркасные грани вкл.
460
	mcall ,((3d_wnd_l+50) shl 16)+20,,0x40000007 ;заливка граней вкл.
461
	mcall ,((3d_wnd_l+75) shl 16)+20,,0x40000008 ;грани по материалам вкл.
462
	mcall ,((3d_wnd_l+100) shl 16)+20,,0x40000009 ;свет вкл./выкл.
6513 IgorA 463
	mcall ,((3d_wnd_l+125) shl 16)+20,,0x4000000a ;сглаживание
464
	mcall ,((3d_wnd_l+150) shl 16)+20,,0x4000000b ;сброс
6889 IgorA 465
	mcall ,((3d_wnd_l+175) shl 16)+20,,0x4000000c ;скрин из 3d окна
6060 IgorA 466
 
6130 leency 467
	mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+24 ;new
6060 IgorA 468
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6130 leency 469
	mcall ,,,(30 shl 16)+24 ;open
6060 IgorA 470
	add ebx,IMAGE_TOOLBAR_ICON_SIZE*6
6509 IgorA 471
	mcall ,,,((3d_wnd_l) shl 16)+24 ;вершины вкл.
6060 IgorA 472
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6509 IgorA 473
	mcall ,,,((3d_wnd_l+25) shl 16)+24 ;каркасные грани вкл.
6060 IgorA 474
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6509 IgorA 475
	mcall ,,,((3d_wnd_l+50) shl 16)+24 ;заливка граней вкл.
6060 IgorA 476
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6509 IgorA 477
	mcall ,,,((3d_wnd_l+100) shl 16)+24 ;свет вкл./выкл.
6060 IgorA 478
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
6513 IgorA 479
	mcall ,,,((3d_wnd_l+150) shl 16)+24 ;сброс
6509 IgorA 480
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
481
	mcall ,,,((3d_wnd_l+75) shl 16)+24 ;грани по материалам вкл.
6513 IgorA 482
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
483
	mcall ,,,((3d_wnd_l+125) shl 16)+24 ;сглаживание
6889 IgorA 484
	add ebx,IMAGE_TOOLBAR_ICON_SIZE
485
	mcall ,,,((3d_wnd_l+175) shl 16)+24 ;скрин из 3d окна
6060 IgorA 486
 
487
	mov dword[w_scr_t1.all_redraw],1
488
	stdcall [tl_draw], tree1
489
	stdcall [buf2d_draw], buf_ogl
490
 
491
	mcall SF_REDRAW,SSF_END_DRAW
492
popad
493
	ret
494
 
495
align 4
496
key:
497
	mcall SF_GET_KEY
498
 
499
	cmp dword[el_focus], tree1
500
	jne @f
501
		stdcall [tl_key], tree1
502
		jmp .end
503
	@@:
504
 
505
	cmp ah,178 ;Up
506
	jne @f
507
		fld dword[angle_x]
508
		fadd dword[delt_size]
509
		fstp dword[angle_x]
510
		stdcall [tl_node_get_data],tree1
7610 IgorA 511
		or eax,eax
512
		jz .end
6060 IgorA 513
		add eax,list_offs_obj3d
514
		stdcall draw_3d, eax
515
		jmp .end
516
	@@:
517
	cmp ah,177 ;Down
518
	jne @f
519
		fld dword[angle_x]
520
		fsub dword[delt_size]
521
		fstp dword[angle_x]
522
		stdcall [tl_node_get_data],tree1
7610 IgorA 523
		or eax,eax
524
		jz .end
6060 IgorA 525
		add eax,list_offs_obj3d
526
		stdcall draw_3d, eax
527
		jmp .end
528
	@@:
529
	cmp ah,176 ;Left
530
	jne @f
531
		fld dword[angle_y]
532
		fadd dword[delt_size]
533
		fstp dword[angle_y]
534
		stdcall [tl_node_get_data],tree1
7610 IgorA 535
		or eax,eax
536
		jz .end
6060 IgorA 537
		add eax,list_offs_obj3d
538
		stdcall draw_3d, eax
539
		jmp .end
540
	@@:
541
	cmp ah,179 ;Right
542
	jne @f
543
		fld dword[angle_y]
544
		fsub dword[delt_size]
545
		fstp dword[angle_y]
546
		stdcall [tl_node_get_data],tree1
7610 IgorA 547
		or eax,eax
548
		jz .end
6060 IgorA 549
		add eax,list_offs_obj3d
550
		stdcall draw_3d, eax
551
		;jmp .end
552
	@@:
553
 
554
	.end:
555
	jmp still
556
 
557
 
558
align 4
559
button:
560
	mcall SF_GET_BUTTON
561
	cmp ah,3
562
	jne @f
563
		call but_new_file
564
		jmp still
565
	@@:
566
	cmp ah,4
567
	jne @f
568
		call but_open_file
569
		jmp still
570
	@@:
571
 
572
	;menu functions
573
	cmp ah,5
574
	jne @f
575
		call mnu_vertexes_on
576
		jmp still
577
	@@:
578
	cmp ah,6
579
	jne @f
580
		call mnu_edges_on
581
		jmp still
582
	@@:
583
	cmp ah,7
584
	jne @f
585
		call mnu_faces_on
586
		jmp still
587
	@@:
588
	cmp ah,8
589
	jne @f
6509 IgorA 590
		call mnu_faces_mat
6060 IgorA 591
		jmp still
592
	@@:
593
	cmp ah,9
594
	jne @f
6509 IgorA 595
		call mnu_light_on_off
596
		jmp still
597
	@@:
598
	cmp ah,10
599
	jne @f
6513 IgorA 600
		call mnu_smooth_on_off
601
		jmp still
602
	@@:
603
	cmp ah,11
604
	jne @f
6060 IgorA 605
		call mnu_reset_settings
606
		jmp still
607
	@@:
6889 IgorA 608
	cmp ah,12
609
	jne @f
610
		call mnu_make_scrshot
611
		jmp still
612
	@@:
6060 IgorA 613
 
614
	cmp ah,1
615
	jne still
616
.exit:
617
	mov dword[tree1.data_img],0
618
	mov dword[tree1.data_img_sys],0
619
	stdcall [tl_data_clear], tree1
620
	stdcall [buf2d_delete],buf_1 ;удаляем буфер
621
	stdcall mem.Free,[image_data_toolbar]
622
	stdcall mem.Free,[open_file_data]
623
	stdcall [gluDeleteQuadric], [qObj]
624
	mcall SF_TERMINATE_PROCESS
625
 
626
 
627
align 4
628
but_new_file:
629
push eax ebx
7610 IgorA 630
	stdcall [tl_node_poi_get_info], tree1,0
6060 IgorA 631
	@@:
7610 IgorA 632
		or eax,eax
633
		jz @f
6060 IgorA 634
		mov ebx,eax
635
		stdcall [tl_node_poi_get_data], tree1,ebx
636
		add eax,list_offs_obj3d
637
		stdcall obj_clear_param, eax
7610 IgorA 638
		stdcall [tl_node_poi_get_next_info], tree1,ebx
639
		or eax,eax
640
		jnz @b
6060 IgorA 641
	@@:
642
pop ebx eax
643
	stdcall [tl_info_clear], tree1 ;очистка списка объектов
644
	stdcall [buf2d_clear], buf_ogl, [buf_ogl.color] ;чистим буфер
645
	stdcall [tl_draw], tree1
646
	stdcall [buf2d_draw], buf_ogl ;обновляем буфер на экране
647
	ret
648
 
649
align 4
650
but_open_file:
651
	copy_path open_dialog_name,communication_area_default_path,file_name,0
652
	pushad
653
	mov [OpenDialog_data.type],0
654
	stdcall [OpenDialog_Start],OpenDialog_data
655
	cmp [OpenDialog_data.status],2
656
	je .end_open_file
657
	;код при удачном открытии диалога
7616 IgorA 658
	jmp .end0
6060 IgorA 659
.no_dlg: ;если минуем диалог открытия файла
660
		pushad
7616 IgorA 661
		mov esi,openfile_path
662
		stdcall str_len,esi
663
		add esi,eax
664
		@@: ;цикл для поиска начала имени файла
665
			dec esi
666
			cmp byte[esi],'/'
667
			je @f
668
			cmp byte[esi],0x5c ;'\'
669
			je @f
670
			cmp esi,openfile_path
671
			jg @b
672
		@@:
673
		inc esi
674
		stdcall [OpenDialog_Set_file_name],OpenDialog_data,esi ;копируем имя файла в диалог сохранения
675
	.end0:
6060 IgorA 676
    mov [run_file_70.Function], SSF_GET_INFO
677
    mov [run_file_70.Position], 0
678
    mov [run_file_70.Flags], 0
679
    mov dword[run_file_70.Count], 0
680
    mov dword[run_file_70.Buffer], open_b
681
    mov byte[run_file_70+20], 0
682
    mov dword[run_file_70.FileName], openfile_path
683
    mcall SF_FILE,run_file_70
684
 
685
    mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
686
    stdcall mem.ReAlloc,[open_file_data],ecx
687
    mov [open_file_data],eax
688
 
689
    mov [run_file_70.Function], SSF_READ_FILE
690
    mov [run_file_70.Position], 0
691
    mov [run_file_70.Flags], 0
692
    mov dword[run_file_70.Count], ecx
693
    m2m dword[run_file_70.Buffer], dword[open_file_data]
694
    mov byte[run_file_70+20], 0
695
    mov dword[run_file_70.FileName], openfile_path
696
    mcall SF_FILE,run_file_70 ;загружаем файл 3ds
697
    cmp ebx,0xffffffff
698
    je .end_open_file
699
		mov [open_file_size],ebx
700
		;mcall SF_SET_CAPTION,1,openfile_path
701
 
702
		call init_tree
703
		stdcall [buf2d_draw], buf_ogl ;обновляем буфер на экране
704
	.end_open_file:
705
	popad
706
	ret
707
 
708
align 4
709
init_tree:
710
	;чистим память занятую объектами
7610 IgorA 711
	stdcall [tl_node_poi_get_info], tree1,0
6060 IgorA 712
	@@:
7610 IgorA 713
		or eax,eax
714
		jz @f
6060 IgorA 715
		mov ebx,eax
716
		stdcall [tl_node_poi_get_data], tree1,ebx
7610 IgorA 717
		or eax,eax
718
		jz @f
6060 IgorA 719
			add eax,list_offs_obj3d
720
			stdcall obj_clear_param, eax
7610 IgorA 721
			stdcall [tl_node_poi_get_next_info], tree1,ebx
722
			or eax,eax
723
			jnz @b
6060 IgorA 724
	@@:
725
	stdcall [tl_info_clear], tree1 ;очистка списка объектов
726
 
7610 IgorA 727
	mov esi,[open_file_data]
728
	stdcall convert_stl_3ds, esi,[open_file_size] ;проверяем файл формата *.stl ?
729
	or eax,eax
730
	jz @f
731
		;если файл в формате *.stl
732
		mov [open_file_size],ecx
733
		mov esi,eax
734
		stdcall mem.Free,[open_file_data]
735
		mov [open_file_data],esi
736
		mov byte[can_save],1
737
	@@:
6060 IgorA 738
	cmp word[esi],CHUNK_MAIN
739
	je @f
7610 IgorA 740
		mov eax,[esi]
741
		bswap eax
742
		stdcall hex_in_str, txt_no_3ds.zag, eax,8
6081 IgorA 743
		stdcall buf_draw_beg, buf_ogl
6060 IgorA 744
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_no_3ds,5,25,0xff0000 ;рисуем строку с текстом
745
		jmp .end_open
746
	@@:
747
	;--- обработка открытого *.3ds файла
748
	mov eax,file_3ds
749
	mov dword[level_stack],0 ;обнуляем уровень стека
750
	mov dword[offs_last_timer],0
751
	;--- добавление главного блока в список
752
	stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2],0
753
	call block_children ;вход в дочерний блок
754
 
7610 IgorA 755
	mov edi,[file_3ds.offs]
756
	add edi,[file_3ds.size]
6060 IgorA 757
	.cycle_main:
758
		cmp dword[level_stack],0
759
		jle .end_cycle
760
 
761
		cmp esi,edi ;если конец файла
762
		jge .end_cycle
763
 
7610 IgorA 764
		mov edx,[esi+2] ;размер блока
6060 IgorA 765
		call block_analiz
6081 IgorA 766
		cmp word[esi],CHUNK_MATERIAL
767
		je @f
768
		cmp word[esi],CHUNK_OBJMESH
769
		je @f
770
		cmp word[esi],CHUNK_OBJBLOCK
771
		je @f
772
			mov dword[bl_found],0
773
		@@:
6060 IgorA 774
		cmp dword[bl_found],0
775
		jne @f
776
			;объект не известного вида
777
			call block_next
778
			jmp .cycle_main
779
		@@:
780
			;объект известного вида
781
			mov ecx,dword[bl_found]
782
			mov bx,word[ecx+2] ;номер иконки для объекта
783
			cmp word[esi],CHUNK_OBJBLOCK
784
			jne .pod1
785
				add esi,6
786
				push esi
787
				sub esi,6
6081 IgorA 788
				jmp .pod3
6060 IgorA 789
			.pod1:
6081 IgorA 790
			cmp word[esi],CHUNK_MATERIAL
791
			jne .pod2
792
				cmp word[esi+6],CHUNK_MATNAME
793
				jne .pod2
794
				add esi,12
795
				push esi
796
				sub esi,12
797
				jmp .pod3
798
			.pod2:
6060 IgorA 799
				push dword[ecx+5] ;стандартное название блока
6081 IgorA 800
			.pod3:
6060 IgorA 801
			stdcall add_3ds_object, ebx,dword[level_stack],edx
802
			cmp byte[ecx+4],1
803
			je .bl_data
804
				;блок содержит дочерние блоки
805
				call block_children ;вход в дочерний блок
806
				jmp .cycle_main
807
			.bl_data:
808
				;блок содержит данные
809
				call block_analiz_data
810
				jmp .cycle_main
811
	.end_cycle:
812
		stdcall [tl_cur_beg], tree1
813
		stdcall [tl_draw], tree1
814
	.end_open:
815
	ret
816
 
817
;анализ данных блока
818
;input:
6081 IgorA 819
; eax - stack pointer
6060 IgorA 820
; esi - memory pointer
821
;output:
822
; eax - new stack pointer
823
; esi - new memory pointer
824
align 4
825
proc block_analiz_data uses ebx ecx edx edi
7610 IgorA 826
	mov dx,[esi]
827
	mov ecx,[esi+2]
6060 IgorA 828
	sub ecx,6 ;размер данных в блоке
829
	add esi,6
830
	mov ebx,dword[level_stack]
831
	inc ebx
832
	; *** анализ блоков с разными данными и выделением подблоков
833
	cmp dx,CHUNK_OBJBLOCK ;объект
834
	jne @f
835
		push ax
836
			cld
837
			xor al,al
838
			mov edi,esi
839
			repne scasb
840
		pop ax
841
		sub edi,esi ;edi - strlen
842
		add esi,edi
843
		;sub ecx,edi ;уже сделано в repne
844
		jmp .next_bl
845
	@@:
846
	cmp dx,CHUNK_VERTLIST ;список вершин
847
	je .vertexes
848
	cmp dx,0x4111 ;флаги вершин
849
	je .vertexes
850
	cmp dx,CHUNK_MAPLIST ;текстурные координаты
851
	je .vertexes
852
	jmp @f
853
	.vertexes: ;обработка блоков, содержащих данные вершин
854
		add esi,2
855
		sub ecx,2
856
		sub esi,8 ;восстановление esi
857
		call block_next
858
		jmp .end_f
859
	@@:
860
	cmp dx,CHUNK_FACELIST ;список граней
861
	jne @f
862
		push eax
863
		movzx eax,word[esi]
864
		shl eax,3
865
		add esi,2
866
		sub ecx,2
867
 
868
		sub ecx,eax
869
		cmp ecx,1
870
		jl .data_3 ;проверяем есть ли блок описывающий материал, применяемый к объекту
6081 IgorA 871
if 1
6060 IgorA 872
			add esi,eax
6081 IgorA 873
			mov ecx,dword[esi+2]
874
			stdcall add_3ds_object, 10,ebx,ecx,0 ;данные материала
875
			sub esi,eax
876
else
877
			add esi,eax
6060 IgorA 878
			pop eax
879
			jmp .next_bl
6081 IgorA 880
end if
6060 IgorA 881
		.data_3:
882
 
883
		sub esi,8 ;восстановление esi
884
		pop eax
885
		call block_next
886
		jmp .end_f
887
	@@:
888
	cmp dx,CHUNK_FACEMAT ;материалы граней
889
	jne @f
890
		push ax
891
			cld
892
			xor al,al
893
			mov edi,esi
894
			repne scasb
895
		pop ax
896
		sub edi,esi ;edi - strlen
897
		stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;название объекта
898
		add esi,edi
899
		add esi,2
900
		sub ecx,2
901
		sub esi,edi ;восстановление esi (1)
902
		sub esi,8   ;восстановление esi (2)
903
		call block_next
904
		jmp .end_f
905
	@@:
906
	; *** анализ блока с данными по умолчанию (без выделения подблоков)
907
		sub esi,6 ;восстановление esi
908
		call block_next
909
		jmp .end_f
910
	.next_bl:
911
	; *** настройки для анализа оставшихся подблоков
912
		mov dword[eax],esi ;указатель на начало блока
913
		mov ebx,dword[esi+2]
914
		mov dword[eax+4],ebx ;размер блока
915
		inc dword[level_stack]
916
		add eax,8
917
	.end_f:
918
	ret
919
endp
920
 
921
;вход в 1-й дочерний блок
922
;input:
923
; eax - указатель на временный стек файла file_3ds
924
; esi - начало родительского блока
925
;output:
926
; ebx - destroy
927
; esi - начало данных родительского блока
928
align 4
929
block_children:
930
	push ecx
931
		;проверка правильности размеров дочернего блока
7610 IgorA 932
		lea ebx,[esi+6] ;переход на начало дочернего блока
933
		add ebx,[ebx+2] ;добавляем размер дочернего блока
6060 IgorA 934
		mov ecx,esi
7610 IgorA 935
		add ecx,[esi+2] ;добавляем размер родительского блока
6060 IgorA 936
		cmp ebx,ecx ;учитывать заголовки не нужно, т. к. сравниваются только данные блоков
937
		jle @f
938
			;диагностировали ошибку файла, дочерний блок выходит за пределы родительского
939
			mov dword[level_stack],FILE_ERROR_CHUNK_SIZE
940
			jmp .end_f
941
		@@:
7610 IgorA 942
		mov [eax],esi ;указатель на начало блока
943
		mov ebx,[esi+2]
944
		mov [eax+4],ebx ;размер блока
6060 IgorA 945
		add esi,6 ;переходим к данным блока
946
		inc dword[level_stack]
947
		add eax,8
948
	.end_f:
949
	pop ecx
950
	ret
951
 
952
;переход к следущему блоку текущего уровня
953
;input:
954
; eax - адрес структуры с переменными
955
align 4
956
block_next:
957
push ebx
958
	add esi,dword[esi+2] ;пропускаем данные блока
959
 
960
	;проверка размеров родительского блока, для возможного выхода на верхний уровень если конец блока
961
	@@:
962
	mov ebx,dword[eax-8]
963
	add ebx,dword[eax-4]
964
	cmp esi,ebx
965
	jl @f
966
		dec dword[level_stack]
967
		sub eax,8
968
		cmp dword[level_stack],0
969
		jg @b
970
	@@:
971
pop ebx
972
	ret
973
 
974
;функция поиска структуры описывающей блок
975
;input:
976
;esi - memory pointer
977
;output:
978
;dword[bl_found] - pointer to chunk struct (= 0 if not found)
979
align 4
980
bl_found dd 0
981
block_analiz:
982
pushad
983
	mov dword[bl_found],0
984
	mov ecx,type_bloks
985
	@@:
986
		mov bx,word[ecx]
987
		cmp word[esi],bx
988
		je .found
989
		add ecx,sizeof.block_3ds
990
		cmp ecx,type_bloks.end
991
		jl @b
992
	jmp .no_found
993
	.found:
994
		mov dword[bl_found],ecx
995
	.no_found:
996
popad
997
	ret
998
 
999
;input:
1000
; esi - указатель на анализируемые данные
7610 IgorA 1001
; icon - номер иконки
6060 IgorA 1002
; level - уровень вложенности узла
1003
; size_bl - размер блока
7610 IgorA 1004
; info_bl - строка с описанием блока
6060 IgorA 1005
align 4
7610 IgorA 1006
proc add_3ds_object, icon:dword, level:dword, size_bl:dword, info_bl:dword
6060 IgorA 1007
	pushad
1008
		mov bx,word[icon]
1009
		shl ebx,16
1010
		mov bx,word[level]
1011
 
1012
		mov eax,esi
1013
		sub eax,dword[open_file_data]
1014
		mov dword[buffer],eax ;смещение блока
1015
		mov ecx,dword[size_bl]
1016
		mov dword[buffer+4],ecx ;размер блока (используется в функции buf_draw_hex_table для рисования линии)
1017
		mov ecx,dword[bl_found]
7610 IgorA 1018
		or ecx,ecx
1019
		jz @f
6060 IgorA 1020
			;... здесь нужен другой алгоритм защиты от удаления
1021
			mov cl,byte[ecx+4]
1022
		@@:
1023
		mov byte[buffer+list_offs_chunk_del],cl
1024
		mov ecx,[level]
1025
		mov byte[buffer+list_offs_chunk_lev],cl
1026
		mov ecx,dword[info_bl]
1027
		mov dword[buffer+list_offs_p_data],ecx
1028
		stdcall hex_in_str, buffer+list_offs_text,dword[esi+1],2
1029
		stdcall hex_in_str, buffer+list_offs_text+2,dword[esi],2 ;код 3ds блока
7610 IgorA 1030
		or ecx,ecx
1031
		jnz @f
6060 IgorA 1032
			mov byte[buffer+list_offs_text+4],0 ;0 - символ конца строки
1033
			jmp .no_capt
1034
		@@:
1035
			mov byte[buffer+list_offs_text+4],' '
1036
			mov esi,ecx
1037
			mov edi,buffer+list_offs_text+5
1038
			mov ecx,size_one_list-(list_offs_text+5)
1039
			cld
1040
			rep movsb
1041
			mov byte[buffer+size_one_list-1],0 ;0 - символ конца строки
1042
		.no_capt:
1043
		mov ecx,(sizeof.obj_3d)/4
1044
		xor eax,eax
8083 IgorA 1045
		mov edi,buffer+list_offs_obj3d
6060 IgorA 1046
		rep stosd
1047
		stdcall [tl_node_add], tree1, ebx, buffer
1048
		stdcall [tl_cur_next], tree1
1049
	popad
1050
	ret
1051
endp
1052
 
1053
;input:
1054
; eax - value
1055
; buf - string buffer
1056
; len - buffer len
1057
;output:
1058
align 4
1059
proc convert_int_to_str, buf:dword, len:dword
1060
pushad
1061
	mov edi,[buf]
1062
	mov esi,[len]
1063
	add esi,edi
1064
	dec esi
1065
	call .str
1066
popad
1067
	ret
1068
endp
1069
 
1070
align 4
1071
.str:
7610 IgorA 1072
	mov ecx,10
6060 IgorA 1073
	cmp eax,ecx
1074
	jb @f
1075
		xor edx,edx
1076
		div ecx
1077
		push edx
1078
		call .str
1079
		pop eax
1080
	@@:
1081
	cmp edi,esi
1082
	jge @f
1083
		or al,0x30
1084
		stosb
1085
		mov byte[edi],0
1086
	@@:
1087
	ret
1088
 
1089
;данные для диалога открытия файлов
1090
align 4
1091
OpenDialog_data:
1092
.type			dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию
1093
.procinfo		dd procinfo ;+4
1094
.com_area_name	dd communication_area_name ;+8
1095
.com_area		dd 0 ;+12
1096
.opendir_path	dd plugin_path ;+16
1097
.dir_default_path	dd default_dir ;+20
1098
.start_path		dd file_name ;+24 путь к диалогу открытия файлов
1099
.draw_window	dd draw_window ;+28
1100
.status 		dd 0 ;+32
1101
.openfile_path	dd openfile_path ;+36 путь к открываемому файлу
1102
.filename_area	dd filename_area ;+40
1103
.filter_area	dd Filter
1104
.x:
1105
.x_size 		dw 420 ;+48 ; Window X size
1106
.x_start		dw 10 ;+50 ; Window X position
1107
.y:
1108
.y_size 		dw 320 ;+52 ; Window y size
1109
.y_start		dw 10 ;+54 ; Window Y position
1110
 
1111
default_dir db '/rd/1',0
1112
 
1113
communication_area_name:
1114
	db 'FFFFFFFF_open_dialog',0
1115
open_dialog_name:
1116
	db 'opendial',0
1117
communication_area_default_path:
1118
	db '/rd/1/File managers/',0
1119
 
1120
Filter:
1121
dd Filter.end - Filter.1
1122
.1:
1123
db '3DS',0
7610 IgorA 1124
db 'STL',0
7616 IgorA 1125
.3:
6889 IgorA 1126
db 'PNG',0
6060 IgorA 1127
.end:
1128
db 0
1129
 
1130
 
1131
align 4
1132
system_dir_0 db '/sys/lib/'
1133
lib_name_0 db 'proc_lib.obj',0
1134
system_dir_1 db '/sys/lib/'
1135
lib_name_1 db 'libimg.obj',0
1136
system_dir_2 db '/sys/lib/'
1137
lib_name_2 db 'box_lib.obj',0
1138
system_dir_3 db '/sys/lib/'
1139
lib_name_3 db 'buf2d.obj',0
1140
system_dir_4 db '/sys/lib/'
1141
lib_name_4 db 'kmenu.obj',0
6889 IgorA 1142
system_dir_5 db '/sys/lib/'
6060 IgorA 1143
lib_name_5 db 'tinygl.obj',0
1144
system_dir_6 db '/sys/lib/'
1145
lib_name_6 db 'libini.obj',0
1146
 
1147
if lang eq ru
1148
	head_f_i:
7610 IgorA 1149
	head_f_l db '"Системная ошибка',0
1150
	err_msg_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,'" -tE',0
1151
	err_msg_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,'" -tW',0
1152
	err_msg_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,'" -tE',0
1153
	err_msg_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,'" -tW',0
1154
	err_msg_found_lib_2 db 'Не найдена библиотека ',39,'box_lib.obj',39,'" -tE',0
1155
	err_msg_import_2 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,'" -tW',0
1156
	err_msg_found_lib_3 db 'Не найдена библиотека ',39,'buf2d.obj',39,'" -tE',0
1157
	err_msg_import_3 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,'" -tW',0
1158
	err_msg_found_lib_4 db 'Не найдена библиотека ',39,'kmenu.obj',39,'" -tE',0
1159
	err_msg_import_4 db 'Ошибка при импорте библиотеки ',39,'kmenu',39,'" -tW',0
1160
	err_msg_found_lib_5 db 'Не найдена библиотека ',39,'tinygl.obj',39,'" -tE',0
1161
	err_msg_import_5 db 'Ошибка при импорте библиотеки ',39,'tinygl',39,'" -tW',0
1162
	err_msg_found_lib_6 db 'Не найдена библиотека ',39,'libini.obj',39,'" -tE',0
1163
	err_msg_import_6 db 'Ошибка при импорте библиотеки ',39,'libini',39,'" -tW',0
6060 IgorA 1164
else
1165
	head_f_i:
7610 IgorA 1166
	head_f_l db '"System error',0
1167
	err_msg_found_lib_0 db 'Sorry I cannot found library ',39,'proc_lib.obj',39,'" -tE',0
1168
	err_msg_import_0 db 'Error on load import library ',39,'proc_lib.obj',39,'" -tW',0
1169
	err_msg_found_lib_1 db 'Sorry I cannot found library ',39,'libimg.obj',39,'" -tE',0
1170
	err_msg_import_1 db 'Error on load import library ',39,'libimg.obj',39,'" -tW',0
1171
	err_msg_found_lib_2 db 'Sorry I cannot found library ',39,'box_lib.obj',39,'" -tE',0
1172
	err_msg_import_2 db 'Error on load import library ',39,'box_lib.obj',39,'" -tW',0
1173
	err_msg_found_lib_3 db 'Sorry I cannot found library ',39,'buf2d.obj',39,'" -tE',0
1174
	err_msg_import_3 db 'Error on load import library ',39,'buf2d.obj',39,'" -tW',0
1175
	err_msg_found_lib_4 db 'Sorry I cannot found library ',39,'kmenu.obj',39,'" -tE',0
1176
	err_msg_import_4 db 'Error on load import library ',39,'kmenu.obj',39,'" -tW',0
1177
	err_msg_found_lib_5 db 'Sorry I cannot found library ',39,'tinygl.obj',39,'" -tE',0
1178
	err_msg_import_5 db 'Error on load import library ',39,'tinygl',39,'" -tW',0
1179
	err_msg_found_lib_6 db 'Sorry I cannot found library ',39,'libini.obj',39,'" -tE',0
1180
	err_msg_import_6 db 'Error on load import library ',39,'libini',39,'" -tW',0
6060 IgorA 1181
end if
1182
 
1183
align 4
1184
l_libs_start:
1185
	lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
6245 IgorA 1186
		err_msg_found_lib_0, head_f_l, proclib_import,err_msg_import_0,head_f_i
6060 IgorA 1187
	lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
6245 IgorA 1188
		err_msg_found_lib_1, head_f_l, import_libimg, err_msg_import_1,head_f_i
6211 IgorA 1189
	lib_2 l_libs lib_name_2, sys_path, file_name,  system_dir_2,\
6060 IgorA 1190
		err_msg_found_lib_2, head_f_l, import_box_lib,err_msg_import_2,head_f_i
6211 IgorA 1191
	lib_3 l_libs lib_name_3, sys_path, file_name,  system_dir_3,\
6060 IgorA 1192
		err_msg_found_lib_3, head_f_l, import_buf2d,  err_msg_import_3,head_f_i
6211 IgorA 1193
	lib_4 l_libs lib_name_4, sys_path, file_name,  system_dir_4,\
6060 IgorA 1194
		err_msg_found_lib_4, head_f_l, import_libkmenu,err_msg_import_4,head_f_i
6211 IgorA 1195
	lib_5 l_libs lib_name_5, sys_path, file_name,  system_dir_5,\
6247 IgorA 1196
		err_msg_found_lib_5, head_f_l, import_lib_tinygl,err_msg_import_5,head_f_i
6211 IgorA 1197
	lib_6 l_libs lib_name_6, sys_path, file_name,  system_dir_6,\
6060 IgorA 1198
		err_msg_found_lib_6, head_f_l, import_libini, err_msg_import_6,head_f_i
1199
l_libs_end:
1200
 
1201
align 4
1202
import_libimg:
1203
	dd alib_init1
1204
	img_is_img  dd aimg_is_img
1205
	img_info    dd aimg_info
1206
	img_from_file dd aimg_from_file
1207
	img_to_file dd aimg_to_file
1208
	img_from_rgb dd aimg_from_rgb
1209
	img_to_rgb  dd aimg_to_rgb
1210
	img_to_rgb2 dd aimg_to_rgb2
1211
	img_decode  dd aimg_decode
1212
	img_encode  dd aimg_encode
1213
	img_create  dd aimg_create
1214
	img_destroy dd aimg_destroy
1215
	img_destroy_layer dd aimg_destroy_layer
1216
	img_count   dd aimg_count
1217
	img_lock_bits dd aimg_lock_bits
1218
	img_unlock_bits dd aimg_unlock_bits
1219
	img_flip    dd aimg_flip
1220
	img_flip_layer dd aimg_flip_layer
1221
	img_rotate  dd aimg_rotate
1222
	img_rotate_layer dd aimg_rotate_layer
1223
	img_draw    dd aimg_draw
1224
 
1225
	dd 0,0
1226
	alib_init1   db 'lib_init',0
1227
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
1228
	aimg_info    db 'img_info',0
1229
	aimg_from_file db 'img_from_file',0
1230
	aimg_to_file db 'img_to_file',0
1231
	aimg_from_rgb db 'img_from_rgb',0
1232
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
1233
	aimg_to_rgb2 db 'img_to_rgb2',0
1234
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
1235
	aimg_encode  db 'img_encode',0
1236
	aimg_create  db 'img_create',0
1237
	aimg_destroy db 'img_destroy',0
1238
	aimg_destroy_layer db 'img_destroy_layer',0
1239
	aimg_count   db 'img_count',0
1240
	aimg_lock_bits db 'img_lock_bits',0
1241
	aimg_unlock_bits db 'img_unlock_bits',0
1242
	aimg_flip    db 'img_flip',0
1243
	aimg_flip_layer db 'img_flip_layer',0
1244
	aimg_rotate  db 'img_rotate',0
1245
	aimg_rotate_layer db 'img_rotate_layer',0
1246
	aimg_draw    db 'img_draw',0
1247
 
1248
align 4
7616 IgorA 1249
proclib_import:
6060 IgorA 1250
	OpenDialog_Init dd aOpenDialog_Init
1251
	OpenDialog_Start dd aOpenDialog_Start
7616 IgorA 1252
	OpenDialog_Set_file_name dd aOpenDialog_Set_file_name
1253
	OpenDialog_Set_file_ext dd aOpenDialog_Set_file_ext
6060 IgorA 1254
dd 0,0
1255
	aOpenDialog_Init db 'OpenDialog_init',0
1256
	aOpenDialog_Start db 'OpenDialog_start',0
7616 IgorA 1257
	aOpenDialog_Set_file_name db 'OpenDialog_set_file_name',0
1258
	aOpenDialog_Set_file_ext db 'OpenDialog_set_file_ext',0
6060 IgorA 1259
 
1260
align 4
1261
import_buf2d:
1262
	dd sz_init0
1263
	buf2d_create dd sz_buf2d_create
1264
	buf2d_create_f_img dd sz_buf2d_create_f_img
1265
	buf2d_clear dd sz_buf2d_clear
1266
	buf2d_draw dd sz_buf2d_draw
1267
	buf2d_delete dd sz_buf2d_delete
1268
	buf2d_resize dd sz_buf2d_resize
1269
	buf2d_line dd sz_buf2d_line
1270
	buf2d_rect_by_size dd sz_buf2d_rect_by_size
1271
	buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
1272
	buf2d_circle dd sz_buf2d_circle
1273
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
1274
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
1275
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
1276
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
1277
	buf2d_bit_blt dd sz_buf2d_bit_blt
1278
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
1279
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
1280
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
1281
	buf2d_draw_text dd sz_buf2d_draw_text
1282
	buf2d_crop_color dd sz_buf2d_crop_color
1283
	buf2d_offset_h dd sz_buf2d_offset_h
1284
	buf2d_set_pixel dd sz_buf2d_set_pixel
1285
	dd 0,0
1286
	sz_init0 db 'lib_init',0
1287
	sz_buf2d_create db 'buf2d_create',0
1288
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
1289
	sz_buf2d_clear db 'buf2d_clear',0
1290
	sz_buf2d_draw db 'buf2d_draw',0
1291
	sz_buf2d_delete db 'buf2d_delete',0
1292
	sz_buf2d_resize db 'buf2d_resize',0
1293
	sz_buf2d_line db 'buf2d_line',0
1294
	sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
1295
	sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
1296
	sz_buf2d_circle db 'buf2d_circle',0
1297
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
1298
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
1299
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
1300
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
1301
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
1302
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
1303
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
1304
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
1305
	sz_buf2d_draw_text db 'buf2d_draw_text',0
1306
	sz_buf2d_crop_color db 'buf2d_crop_color',0
1307
	sz_buf2d_offset_h db 'buf2d_offset_h',0
1308
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
1309
 
1310
align 4
1311
import_box_lib:
1312
	dd sz_init1
1313
	edit_box_draw dd sz_edit_box_draw
1314
	edit_box_key dd sz_edit_box_key
1315
	edit_box_mouse dd sz_edit_box_mouse
1316
	edit_box_set_text dd sz_edit_box_set_text
1317
	scrollbar_ver_draw dd sz_scrollbar_ver_draw
1318
	scrollbar_hor_draw dd sz_scrollbar_hor_draw
1319
 
1320
	tl_data_init dd sz_tl_data_init
1321
	tl_data_clear dd sz_tl_data_clear
1322
	tl_info_clear dd sz_tl_info_clear
1323
	tl_key dd sz_tl_key
1324
	tl_mouse dd sz_tl_mouse
1325
	tl_draw dd sz_tl_draw
1326
	tl_info_undo dd sz_tl_info_undo
1327
	tl_info_redo dd sz_tl_info_redo
1328
	tl_node_add dd sz_tl_node_add
1329
	tl_node_set_data dd sz_tl_node_set_data
1330
	tl_node_get_data dd sz_tl_node_get_data
1331
	tl_node_delete dd sz_tl_node_delete
1332
	tl_node_move_up dd sz_tl_node_move_up
1333
	tl_node_move_down dd sz_tl_node_move_down
1334
	tl_cur_beg dd sz_tl_cur_beg
1335
	tl_cur_next dd sz_tl_cur_next
1336
	tl_cur_perv dd sz_tl_cur_perv
1337
	tl_node_close_open dd sz_tl_node_close_open
1338
	tl_node_lev_inc dd sz_tl_node_lev_inc
1339
	tl_node_lev_dec dd sz_tl_node_lev_dec
1340
	tl_node_poi_get_info dd sz_tl_node_poi_get_info
1341
	tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info
1342
	tl_node_poi_get_data dd sz_tl_node_poi_get_data
1343
 
1344
	dd 0,0
1345
	sz_init1 db 'lib_init',0
1346
	sz_edit_box_draw db 'edit_box',0
1347
	sz_edit_box_key db 'edit_box_key',0
1348
	sz_edit_box_mouse db 'edit_box_mouse',0
1349
	sz_edit_box_set_text db 'edit_box_set_text',0
1350
	sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
1351
	sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
1352
 
1353
	sz_tl_data_init db 'tl_data_init',0
1354
	sz_tl_data_clear db 'tl_data_clear',0
1355
	sz_tl_info_clear db 'tl_info_clear',0
1356
	sz_tl_key db 'tl_key',0
1357
	sz_tl_mouse db 'tl_mouse',0
1358
	sz_tl_draw db 'tl_draw',0
1359
	sz_tl_info_undo db 'tl_info_undo',0
1360
	sz_tl_info_redo db 'tl_info_redo',0
1361
	sz_tl_node_add db 'tl_node_add',0
1362
	sz_tl_node_set_data db 'tl_node_set_data',0
1363
	sz_tl_node_get_data db 'tl_node_get_data',0
1364
	sz_tl_node_delete db 'tl_node_delete',0
1365
	sz_tl_node_move_up db 'tl_node_move_up',0
1366
	sz_tl_node_move_down db 'tl_node_move_down',0
1367
	sz_tl_cur_beg db 'tl_cur_beg',0
1368
	sz_tl_cur_next db 'tl_cur_next',0
1369
	sz_tl_cur_perv db 'tl_cur_perv',0
1370
	sz_tl_node_close_open db 'tl_node_close_open',0
1371
	sz_tl_node_lev_inc db 'tl_node_lev_inc',0
1372
	sz_tl_node_lev_dec db 'tl_node_lev_dec',0
1373
	sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0
1374
	sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0
1375
	sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
1376
 
1377
align 4
1378
import_libkmenu:
1379
	kmenu_init		       dd akmenu_init
1380
	kmainmenu_draw		       dd akmainmenu_draw
1381
	kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
1382
	ksubmenu_new		       dd aksubmenu_new
1383
	ksubmenu_delete 	       dd aksubmenu_delete
1384
	ksubmenu_draw		       dd aksubmenu_draw
1385
	ksubmenu_add		       dd aksubmenu_add
1386
	kmenuitem_new		       dd akmenuitem_new
1387
	kmenuitem_delete	       dd akmenuitem_delete
1388
	kmenuitem_draw		       dd akmenuitem_draw
1389
dd 0,0
1390
	akmenu_init			db 'kmenu_init',0
1391
	akmainmenu_draw 		db 'kmainmenu_draw',0
1392
	akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
1393
	aksubmenu_new			db 'ksubmenu_new',0
1394
	aksubmenu_delete		db 'ksubmenu_delete',0
1395
	aksubmenu_draw			db 'ksubmenu_draw',0
1396
	aksubmenu_add			db 'ksubmenu_add',0
1397
	akmenuitem_new			db 'kmenuitem_new',0
1398
	akmenuitem_delete		db 'kmenuitem_delete',0
1399
	akmenuitem_draw 		db 'kmenuitem_draw',0
1400
 
1401
align 4
1402
import_lib_tinygl:
1403
macro E_LIB n
1404
{
1405
	n dd sz_#n
1406
}
1407
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
1408
	dd 0,0
1409
macro E_LIB n
1410
{
1411
	sz_#n db `n,0
1412
}
1413
include '../../develop/libraries/TinyGL/asm_fork/export.inc'
1414
 
1415
align 4
1416
import_libini:
1417
	dd alib_init0
1418
	ini_get_str   dd aini_get_str
1419
	ini_get_int   dd aini_get_int
1420
	ini_get_color dd aini_get_color
1421
dd 0,0
1422
	alib_init0     db 'lib_init',0
1423
	aini_get_str   db 'ini_get_str',0
1424
	aini_get_int   db 'ini_get_int',0
1425
	aini_get_color db 'ini_get_color',0
1426
 
1427
align 4
1428
mouse_dd dd 0
1429
last_time dd 0
1430
angle_dxm dd 1.9111 ;~ 3d_wnd_w/180 - прибавление углов поворота сцены при вращении мышей
1431
angle_dym dd 1.7333 ;~ 3d_wnd_h/180
1432
ratio dd 1.1025 ;~ 3d_wnd_w/3d_wnd_h
1433
 
1434
align 4
1435
buf_ogl:
1436
	dd 0 ;указатель на буфер изображения
1437
	dw 3d_wnd_l,3d_wnd_t ;+4 left,top
6889 IgorA 1438
.w: dd 3d_wnd_w
1439
.h: dd 3d_wnd_h
6060 IgorA 1440
.color: dd 0xffffd0
1441
	dd 24 ;+16 color,bit in pixel
1442
 
1443
align 4
1444
buf_1:
1445
	dd 0 ;указатель на буфер изображения
6211 IgorA 1446
	dw 0,0 ;+4 left,top
6060 IgorA 1447
	dd 128,144 ;+8 w,h
1448
	dd 0,24 ;+16 color,bit in pixel
1449
 
1450
align 4
1451
el_focus dd tree1
1452
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
1453
	16,16, 0xffffff,0xb0d0ff,0x400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\
1454
	w_scr_t1,0
1455
 
1456
align 4
1457
w_scr_t1 scrollbar 16,0, 3,0, 15, 100, 0,0, 0,0,0, 1
1458
 
1459
align 4
1460
qObj dd 0
1461
 
1462
light_position dd 0.0, 0.0, -2.0, 1.0 ; Расположение источника [0][1][2]
1463
	;[3] = (0.0 - бесконечно удаленный источник, 1.0 - источник света на определенном расстоянии)
1464
light_dir dd 0.0,0.0,0.0 ;направление лампы
1465
 
1466
mat_specular dd 0.3, 0.3, 0.3, 1.0 ; Цвет блика
1467
mat_shininess dd 3.0 ; Размер блика (обратная пропорция)
1468
white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность освещения, генерируемого источником
1469
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; Параметры фонового освещения
1470
 
1471
if lang eq ru
8083 IgorA 1472
capt db 'info 3ds [user] версия 29.09.20',0 ;подпись окна
6060 IgorA 1473
else
8083 IgorA 1474
capt db 'info 3ds [user] version 29.09.20',0 ;window caption
6060 IgorA 1475
end if
1476
 
1477
align 16
1478
i_end:
8083 IgorA 1479
	ctx1 rb 28 ;sizeof.TinyGLContext = 28
6060 IgorA 1480
	procinfo process_information
1481
	run_file_70 FileInfoBlock
1482
	sc system_colors
1483
	angle_x rd 1 ;углы поворота сцены
1484
	angle_y rd 1
1485
	angle_z rd 1
1486
	color_ox rd 1
1487
	color_oy rd 1
1488
	color_oz rd 1
1489
	color_bk rd 3
1490
	color_vert rd 1
1491
	color_face rd 1
1492
	color_select rd 1
1493
align 16
6509 IgorA 1494
	rb 4096
6060 IgorA 1495
stacktop:
1496
	sys_path rb 2048
6509 IgorA 1497
	file_name rb 4096
6060 IgorA 1498
	plugin_path rb 4096
1499
	openfile_path rb 4096
1500
	filename_area rb 256
1501
mem: