From 4c3f814d33252f0e8abce7131d90c8cf5b39f458 Mon Sep 17 00:00:00 2001 From: IgorA Date: Wed, 17 Aug 2011 19:32:25 +0000 Subject: [PATCH] info3ds: 1) fixed a bug with the definition of block size 2) some improvements git-svn-id: svn://kolibrios.org@2052 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/info3ds/build_en.bat | 2 +- programs/develop/info3ds/build_ru.bat | 2 +- programs/develop/info3ds/info3ds.asm | 92 +++++++++++++++++--------- programs/develop/info3ds/objects.png | Bin 1253 -> 1757 bytes 4 files changed, 63 insertions(+), 33 deletions(-) diff --git a/programs/develop/info3ds/build_en.bat b/programs/develop/info3ds/build_en.bat index 2b93439619..d101ae311f 100644 --- a/programs/develop/info3ds/build_en.bat +++ b/programs/develop/info3ds/build_en.bat @@ -1,7 +1,7 @@ if not exist bin mkdir bin @erase lang.inc @echo lang fix en >lang.inc -if not exist bin\objects.png @copy objects.png bin\objects.png +@copy objects.png bin\objects.png if not exist bin\tl_sys_16.png @copy tl_sys_16.png bin\tl_sys_16.png if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png if not exist bin\font8x9.bmp @copy ..\..\fs\kfar\trunk\font8x9.bmp bin\font8x9.bmp diff --git a/programs/develop/info3ds/build_ru.bat b/programs/develop/info3ds/build_ru.bat index 7efeee9f31..04705fbbd0 100644 --- a/programs/develop/info3ds/build_ru.bat +++ b/programs/develop/info3ds/build_ru.bat @@ -1,7 +1,7 @@ if not exist bin mkdir bin @erase lang.inc @echo lang fix ru >lang.inc -if not exist bin\objects.png @copy objects.png bin\objects.png +@copy objects.png bin\objects.png if not exist bin\tl_sys_16.png @copy tl_sys_16.png bin\tl_sys_16.png if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png if not exist bin\font8x9.bmp @copy ..\..\fs\kfar\trunk\font8x9.bmp bin\font8x9.bmp diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index 0bf207e223..4ac66c22e2 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -20,7 +20,7 @@ include 'lang.inc' debug equ 0 @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -capt db 'info 3ds 17.08.11',0 ;подпись окна +capt db 'info 3ds 18.08.11',0 ;подпись окна struct FileInfoBlock Function dd ? @@ -45,7 +45,7 @@ image_data_toolbar dd 0 TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;размер bmp файла с системными иконками icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок icon_toolbar dd 0 ;указатеель на память для хранения иконок объектов -TOOLBAR_ICON_BMP_SIZE equ 256*5 ;размер bmp файла с иконками объектов +TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*6+54 ;размер bmp файла с иконками объектов ; IMAGE_FILE1_SIZE equ 128*144*3 ;размер файла с изображением 640 x 480 @@ -101,7 +101,6 @@ macro block_3ds id,icon,par CHUNK_MAIN equ 0x4D4D ; [-] сцена CHUNK_color_1 equ 0x0011 ; [+] цвет rgb (byte format) CHUNK_ambient_color equ 0x2100 ; [-] ambient color -CHUNK_VERSIONF equ 0x0002 ; [+] информация о версии файла CHUNK_OBJMESH equ 0x3D3D ; [-] всяческие объекты CHUNK_OBJBLOCK equ 0x4000 ; [+] объект CHUNK_TRIMESH equ 0x4100 ; [-] trimesh-объект @@ -134,15 +133,21 @@ MAX_FILE_SIZE equ 150*0x400 ; level_stack dd 0 offs_last_timer dd 0 ;последний сдвиг показаный в функции таймера -ID_ICON_CHUNK_MAIN equ 0 -ID_ICON_CHUNK_NOT_FOUND equ 1 -ID_ICON_DATA equ 2 +ID_ICON_CHUNK_MAIN equ 0 ;иконка главного блока +ID_ICON_CHUNK_NOT_FOUND equ 1 ;иконка не известного блока +ID_ICON_DATA equ 2 ;иконка для данных блока, не определенной структуры + +FILE_ERROR_CHUNK_SIZE equ -3 ;ошибка в размере блока align 4 type_bloks: +block_3ds 0x0002,5,1 ;информация о версии файла +block_3ds 0x3d3e,5,1 ;mesh version +block_3ds 0xA010,4,0 ;material ambient color +block_3ds 0xA020,4,0 ;material diffuse color +block_3ds 0xA030,4,0 ;material specular color block_3ds CHUNK_color_1, 4,1 ; [+] цвет rgb (byte format) block_3ds CHUNK_ambient_color,3,0 ; [-] ambient color -block_3ds CHUNK_VERSIONF, 3,1 ; [+] Информация о версии файла block_3ds CHUNK_OBJMESH, 3,0 ; [-] всяческие объекты block_3ds CHUNK_OBJBLOCK, 3,1 ; [+] объект block_3ds CHUNK_TRIMESH, 3,0 ; [-] trimesh-объект @@ -181,6 +186,7 @@ if lang eq ru txt_open_3ds db 'Открыт файл:',0 txt_no_3ds db 'Открытый файл не в формате *.3ds',0 txt_3ds_big_file db 'Размер файла больше MAX_FILE_SIZE',0 +txt_3ds_err_sizes db 'Возможно файл поврежден',0 txt_3ds_offs: db 'Смещение: ' .dig: rb 8 @@ -189,6 +195,7 @@ else txt_open_3ds db 'Open file:',0 txt_no_3ds db 'Открытый файл не в формате *.3ds',0 txt_3ds_big_file db 'Размер файла больше MAX_FILE_SIZE',0 +txt_3ds_err_sizes db 'Возможно файл поврежден',0 txt_3ds_offs: db 'Offset: ' .dig: rb 8 @@ -311,6 +318,10 @@ buf_draw_beg: stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер stdcall [buf2d_draw_text], buf_0, buf_1,txt_open_3ds,5,5,0xff stdcall [buf2d_draw_text], buf_0, buf_1,openfile_path,5,15,0xff + cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;возможна ошибка файла + jne @f + stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_err_sizes,5,25,0xff0000 + @@: ret align 4 @@ -321,7 +332,6 @@ proc buf_draw_hex_table, offs:dword, size_line:dword endl mov esi,dword[offs] mov edi,dword[open_file_lif] - add edi,6 add edi,dword[file_3ds+4] ;edi - указатель на конец файла в памяти mov dword[txt_3ds_offs.dig],0 cld @@ -375,7 +385,7 @@ draw_window: pushad mcall 12,1 xor eax,eax - mov ebx,(20 shl 16)+510 + mov ebx,(20 shl 16)+560 mov ecx,(20 shl 16)+315 mov edx,[sc.work] or edx,(3 shl 24)+0x10000000+0x20000000 @@ -394,10 +404,10 @@ pushad mov edx,4 int 0x40 - mov ebx,(55 shl 16)+20 - mov ecx,(5 shl 16)+20 - mov edx,5 - int 0x40 + ;mov ebx,(55 shl 16)+20 + ;mov ecx,(5 shl 16)+20 + ;mov edx,5 + ;int 0x40 mov eax,7 @@ -410,9 +420,9 @@ pushad mov edx,(32 shl 16)+7 ;open int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - mov edx,(57 shl 16)+7 ;open - int 0x40 + ;add ebx,IMAGE_TOOLBAR_ICON_SIZE + ;mov edx,(57 shl 16)+7 ;save + ;int 0x40 mov dword[w_scr_t1.all_redraw],1 stdcall [tl_draw],dword tree1 @@ -518,13 +528,17 @@ but_open_file: stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2] call block_children ;вход в дочерний блок + mov edi,dword[file_3ds.offs] + add edi,dword[file_3ds.size] .cycle_main: cmp dword[level_stack],0 - je .end_cycle + jle .end_cycle + + cmp esi,edi ;если конец файла + jge .end_cycle call block_analiz - mov edx,dword[esi+2] ;размер блока без заголовка - add edx,6 ;размер блока вместе с заголовком + mov edx,dword[esi+2] ;размер блока cmp dword[eax],0 jne @f @@ -564,7 +578,8 @@ align 4 block_analiz_data: pushad mov ax,word[esi] - mov ecx,dword[esi+2] ;размер блока + mov ecx,dword[esi+2] + sub ecx,6 ;размер данных в блоке add esi,6 mov ebx,dword[level_stack] inc ebx @@ -583,15 +598,32 @@ block_analiz_data: popad ret -;вход в дочерний блок +;вход в 1-й дочерний блок +;output: +; edx - destroy align 4 block_children: - mov dword[eax],esi ;указатель на начало блока - mov ebx,dword[esi+2] - mov dword[eax+4],ebx ;размер блока - add esi,6 ;переходим к данным блока - inc dword[level_stack] - add eax,8 + push ecx + ;проверка правильности размеров дочернего блока + mov ebx,esi ;смещение начала родительского блока + add ebx,6 ;переход на начало дочернего блока + add ebx,dword[ebx+2] ;добавляем размер дочернего блока + mov ecx,esi ;смещение начала родительского блока + add ecx,dword[esi+2] ;добавляем размер родительского блока + cmp ebx,ecx ;учитывать заголовки не нужно, т. к. сравниваются только данные блоков + jle @f + ;диагностировали ошибку файла, дочерний блок выходит за пределы родительского + mov dword[level_stack],FILE_ERROR_CHUNK_SIZE + jmp .end_f + @@: + mov dword[eax],esi ;указатель на начало блока + mov ebx,dword[esi+2] + mov dword[eax+4],ebx ;размер блока + add esi,6 ;переходим к данным блока + inc dword[level_stack] + add eax,8 + .end_f: + pop ecx ret ;переход к следущему блоку текущего уровня @@ -599,12 +631,10 @@ align 4 block_next: push ebx add esi,dword[esi+2] ;пропускаем данные блока - add esi,6 ;проверка размеров родительского блока, для возможного выхода на верхний уровень если конец блока mov ebx,dword[eax-8] add ebx,dword[eax-4] - add ebx,6 cmp esi,ebx jl @f dec dword[level_stack] @@ -1080,7 +1110,7 @@ procinfo process_information align 4 buf_0: dd 0 ;указатель на буфер изображения - dw 155 ;+4 left + dw 205 ;+4 left dw 35 ;+6 top .w: dd 340 ;+8 w .h: dd 250 ;+12 h @@ -1099,7 +1129,7 @@ buf_1: el_focus dd tree1 tree1 tree_list size_one_list,100+2, tl_key_no_edit+tl_draw_par_line,\ - 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,145-16,250, 0,8,0, el_focus,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 0,8,0, el_focus,\ w_scr_t1,0 align 4 diff --git a/programs/develop/info3ds/objects.png b/programs/develop/info3ds/objects.png index 00f288b50d7c2ef0e785b1c2f745156a632fd23a..8dc21ceb90bc5b2fe431c74cd339b5dd461060a5 100644 GIT binary patch delta 1754 zcmV<01||9B3Ed5l7k^*~0ssI2o3my200004XF*Lt006O%3;baP000J*NklR!Y`s8Z`TGEPNktyUBeP$~g*M1@gNS%t7ERjU<53!_3b zY-ZfSD1=m+fWZaaq9_m`VkCqF$ewq4@I6Bk69S!%)A7!k41e$4|L>i1&pr1ZTmXPJ zu7SX~1`XA>QYP9ksR6_9EeAK5(on#KT@%dH+3RVFdx^}z5$0n21X}?5$_lr*Ad|;% zQ9L?WU$RR2SM+aT!*5vICJ?Prb^v4wqFnUdrzQNo=%IzP_KkpXBGSe1bhAAmK3>=U zr{?8J`JGHn+kbJ0kMD1advd{FAqX83h2o>F2N9i)fTAgf1n`jrx~o?rfRA=UlHboI zf%})YVn_m3013$ILTy8;N|^YpYG-d_CJEfFV4U3JReSOW66oQsdwgZb^?ep;Eo4j} zx=yPf9w7m7)ppEMLy12LDC<@mnnO`T=6yKXiGD6k<$qDNg+bhcfa}LsvCa>&P^r)^^7%MrC!|&T_6_Luy@P|Vl*+c=UU5&) zBdPRZcQ@KSxk)9XdKjPk(qg-am^h9ZAN|r86GYP1y;b)&71WmlUlDw zW@=XT?Bd60Q?jbbC1Dy+UJR)sfXtq~Q+VXrxT$Kms(SK1)HwvtPc_AStg1AMetHT*+;uZdTxZksT zBhYqU_g3lkD6j(Pfq?|T6*|3RhIi|vS;DFAF&E~h)h|MeV0qvcp}-25vt|uG^CBb5 z==4%L{j#55M6nlBxCCu|fya=+Kng~xb=tdqAqc`~GGPM3|L|YI^z=>l++7@@Hh&n* z0&1tf@b)%uKE{UY!5kolxyJp`5rkPl0iU|LeKKp-D24*7kj8!_tp4rSD`kpWw(MAf zbUQ=J*eXjr($B6j$dvX^++atIv@%-G*{|haApYhNHGD1mraY-s8eKkE({5YdD%p)r z{(4<&IW(65I~mgBATAk_is4kFE`R@FXHf0Hjn^YUu&W-JZQ87!m#dy=rCMqq9(5gkCXF-_r(hr!IuAfg5!@<=ifTA>9}cy{Zly8Z z^lXh(eDoCsREk$VAIj~5Jqp-wG!}uP3SKmVNDSOw(^zO*CS4cNqgFS8lmm|sgJ1{LMw?QnizpyO;96zMJ_j*ZA?G%fJ_Ml@ z-n>@Ale-|`!1cqx-T_4+rVXwF3J4PUWT~PKz_uf>{|ub10%0Tcij=^;3oJGq%Y=+A z5VK4b?DNh;MoY$0@%&iW7Jmy#2jE;0+$o3N3Kg7r0Ea4IHxo97f!EjKjEtw02T8xg zz0Q55a$^MK#6f8qh;l)ms{&>-?Bc-299Xhe={CDgA{iJdZ+1KTEAE`7isT@ujDV)C zAm6Hj$Yuz-2#Zq`u3lU=TVh*$?B}I!m3}jYdl$&6eGNUna>K$J*?+7Qq1(@u?6Owd z(jcEDeVrM%3VhC|x#nlP=H~lkp3f-cNxBsFi*Jk-PL=n^aNYaw+=+Jy-u3Ud2y82O z-J`&2AISc|@8Tmksa%FUdY+ z8JolYpfwoCo?^o|>{Ac*U3_Htopm!$PqJhj_J?VOpC1-w<1hMo(bvZni5^HK*8~EG w{Q>XoDW^Wu8I3lv+364OU-y>S|NOfD2Rla9#Py;d_y7O^07*qoM6N<$g0>P`1^@s6 delta 1246 zcmV<41R?v~4dn@t7k^L)0ssI2pUGlc00004XF*Lt006O%3;baP000D>Nkl!wU9X{PoqwDk?z!jtInO!I%ej{Y z09a5B0YNnksk@7IFqq;5_j`I%6jB-rXwM1rOjjJk%zx$!j(VBfxnWEIUfvR)WFh7X zhh={F{XkjOYc9hbE_dtKju4p|tL9eJVRTuo;=9)IHt$jx1u z{_*uxz3G1W>wjmLAvbqX%O7u#HLH@BHOXkmw4jNKLV#IYNdjm{0<)cQ2tY$0TQUuc zNMQJG2HKKJnm_`^zGUW>Pm8WPaSPa`k=(HKhtmcGM|kz}MH{qA;l{vnpOg@3CQvlVp-9hc*!W&4l?ao+AG z!TvinvAvQ+G@JLC+r<=+_5lm#rHKpI=kZx(GV+p5o8lb*I&C)% zU`Jv{BeBGHv6Lt*?L#bm560W;?wpUXuinR!-op}iVMyb(5Onf|1i&yv(M^p*l! z2pH@Qsj+^62kxOPpklv`QIGB%NBXU*lw68F>jlsR@+LX$5s`8_vkeOfpfTI9KszB- zqJGXm-#sbY(gOWF>(xh{B)}Q|?-l~y;TzoQKY#x`vs4@cuFXuopn>hwC-b`Bj*$)b zk_T{S@_OIgd;lJ`PlgFF)SH>m1MU*p*qIj${VVz}z2rX{zT@DB2{EwE{0mt=%-rw%}z1P*#Z^wTz6*LpPmRCK~ z9)E`VSF{?tX8Mnz?6^u%ty9HW1p9ecj1PfI1|1gw&jLx3^LV(50@#|E^Hy#ZWY$1Q1Kf~r#`VJ#{6SJI4V4#`#2jiv!S30nj~<)1r}PZ(C`4NTj7iVQd1!MZJki~n6jW> z)JOJ3##vHNKqViVOF<(7lgJ8!5y+82Y9;JHVu^UCPp@C{CLcbHzoFQ5z+A|NwiBSu z08@q)(no-O8}=2M!=n{AuJ;Cxd{@GsG)J@@dQ*LFkFoQhWA32IvA4(gR*^d5^EUj} zBr`S0vHs