Subversion Repositories Kolibri OS

Rev

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

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