1) fixed detection of levels of blocks
2) added a signature to some units

git-svn-id: svn://kolibrios.org@2080 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2011-08-20 09:48:05 +00:00
parent a157945fec
commit 337ce7e86b
2 changed files with 165 additions and 84 deletions

View File

@ -20,7 +20,7 @@ include 'lang.inc'
debug equ 0 debug equ 0
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
capt db 'info 3ds 18.08.11',0 ;¯®¤¯¨áì ®ª­  capt db 'info 3ds 20.08.11',0 ;¯®¤¯¨áì ®ª­ 
struct FileInfoBlock struct FileInfoBlock
Function dd ? Function dd ?
@ -45,9 +45,9 @@ image_data_toolbar dd 0
TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;à §¬¥à bmp ä ©«  á á¨á⥬­ë¬¨ ¨ª®­ª ¬¨ TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;à §¬¥à bmp ä ©«  á á¨á⥬­ë¬¨ ¨ª®­ª ¬¨
icon_tl_sys dd 0 ;㪠§ â¥¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï á¨á⥬­ëå ¨ª®­®ª icon_tl_sys dd 0 ;㪠§ â¥¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï á¨á⥬­ëå ¨ª®­®ª
icon_toolbar dd 0 ;㪠§ â¥¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï ¨ª®­®ª ®¡ê¥ªâ®¢ icon_toolbar dd 0 ;㪠§ â¥¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï ¨ª®­®ª ®¡ê¥ªâ®¢
TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*6+54 ;à §¬¥à bmp ä ©«  á ¨ª®­ª ¬¨ ®¡ê¥ªâ®¢ TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*7+54 ;à §¬¥à bmp ä ©«  á ¨ª®­ª ¬¨ ®¡ê¥ªâ®¢
; ;
IMAGE_FILE1_SIZE equ 128*144*3 ;à §¬¥à ä ©«  á ¨§®¡à ¦¥­¨¥¬ 640 x 480 IMAGE_FILE1_SIZE equ 128*144*3+54 ;à §¬¥à ä ©«  á ¨§®¡à ¦¥­¨¥¬
macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨© macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬ ;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
@ -89,41 +89,42 @@ macro load_image_file path,buf,size { ;
} }
;-------------------------------------- ;--------------------------------------
sizeof.block_3ds equ 5 sizeof.block_3ds equ 9
macro block_3ds id,icon,par macro block_3ds id,icon,par,caption
{ {
dw id ;¨¤¥­â¨ä¨ª â®à ¡«®ª  ¢ ä ©«¥ 3ds dw id ;+0 ¨¤¥­â¨ä¨ª â®à ¡«®ª  ¢ ä ©«¥ 3ds
dw icon ;­®¬¥à ¨ª®­ª¨ ¤«ï ¡«®ª  dw icon ;+2 ­®¬¥à ¨ª®­ª¨ ¤«ï ¡«®ª 
db par ;ᮤ¥à¦¨â «¨ ¡«®ª ¯®¤¡«®ª¨ (0-¤  1-­¥â) db par ;+4 ᮤ¥à¦¨â «¨ ¡«®ª ¯®¤¡«®ª¨ (0-¤  1-­¥â)
dd caption+0 ;+5 ®¯¨á ­¨¥ ¡«®ª 
} }
CHUNK_MAIN equ 0x4D4D ; [-] á業  CHUNK_MAIN equ 0x4D4D ; [-] á業 
CHUNK_color_1 equ 0x0011 ; [+] 梥â rgb (byte format) CHUNK_color_1 equ 0x0011 ; [+] 梥â rgb (byte format)
CHUNK_ambient_color equ 0x2100 ; [-] ambient color CHUNK_ambient_color equ 0x2100 ; [-] ambient color
CHUNK_OBJMESH equ 0x3D3D ; [-] ¢áïç¥áª¨¥ ®¡ê¥ªâë CHUNK_OBJMESH equ 0x3D3D ; [-] ¢áïç¥áª¨¥ ®¡ê¥ªâë
CHUNK_OBJBLOCK equ 0x4000 ; [+] ®¡ê¥ªâ CHUNK_OBJBLOCK equ 0x4000 ; [+] ®¡ê¥ªâ
CHUNK_TRIMESH equ 0x4100 ; [-] trimesh-®¡ê¥ªâ CHUNK_TRIMESH equ 0x4100 ; [-] trimesh-®¡ê¥ªâ
CHUNK_VERTLIST equ 0x4110 ; [+] ᯨ᮪ ¢¥à設 CHUNK_VERTLIST equ 0x4110 ; [+] ᯨ᮪ ¢¥à設
CHUNK_FACELIST equ 0x4120 ; [+] ᯨ᮪ £à ­¥© CHUNK_FACELIST equ 0x4120 ; [+] ᯨ᮪ £à ­¥©
CHUNK_FACEMAT equ 0x4130 ; [+] ¬ â¥à¨ «ë £à ­¥© CHUNK_FACEMAT equ 0x4130 ; [+] ¬ â¥à¨ «ë £à ­¥©
CHUNK_MAPLIST equ 0x4140 ; [+] ⥪áâãà­ë¥ ª®®à¤¨­ âë CHUNK_MAPLIST equ 0x4140 ; [+] ⥪áâãà­ë¥ ª®®à¤¨­ âë
CHUNK_TRMATRIX equ 0x4160 ; [+] ¬ âà¨æ  ¯¥à¥¢®¤  CHUNK_TRMATRIX equ 0x4160 ; [+] ¬ âà¨æ  ¯¥à¥¢®¤ 
CHUNK_CAMERA equ 0x4700 ; [+] ®¡ê¥ªâ-ª ¬¥à  CHUNK_CAMERA equ 0x4700 ; [+] ®¡ê¥ªâ-ª ¬¥à 
CHUNK_MATERIAL equ 0xAFFF ; [-] ¬ â¥à¨ « CHUNK_MATERIAL equ 0xAFFF ; [-] ¬ â¥à¨ «
CHUNK_MATNAME equ 0xA000 ; [+] ­ §¢ ­¨¥ ¬ â¥à¨ «  CHUNK_MATNAME equ 0xA000 ; [+] ­ §¢ ­¨¥ ¬ â¥à¨ « 
CHUNK_TEXTURE equ 0xA200 ; [-] ⥪áâãà  ¬ â¥à¨ «  CHUNK_TEXTURE equ 0xA200 ; [-] ⥪áâãà  ¬ â¥à¨ « 
CHUNK_MAPFILE equ 0xA300 ; [+] ¨¬ï ä ©«  ⥪áâãàë CHUNK_MAPFILE equ 0xA300 ; [+] ¨¬ï ä ©«  ⥪áâãàë
CHUNK_KEYFRAMER equ 0xB000 ; [-] ¨­ä®à¬ æ¨ï ®¡  ­¨¬ æ¨¨ CHUNK_KEYFRAMER equ 0xB000 ; [-] ¨­ä®à¬ æ¨ï ®¡  ­¨¬ æ¨¨
CHUNK_TRACKINFO equ 0xB002 ; [-] ¯®¢¥¤¥­¨¥ ®¡ê¥ªâ  CHUNK_TRACKINFO equ 0xB002 ; [-] ¯®¢¥¤¥­¨¥ ®¡ê¥ªâ 
CHUNK_TRACKOBJNAME equ 0xB010 ; [+] ­ §¢ ­¨¥ í⮣® ®¡ê¥ªâ  CHUNK_TRACKOBJNAME equ 0xB010 ; [+] ­ §¢ ­¨¥ í⮣® ®¡ê¥ªâ 
CHUNK_TRACKPIVOT equ 0xB013 ; [+] 業âà ¢à é¥­¨ï ®¡ê¥ªâ  CHUNK_TRACKPIVOT equ 0xB013 ; [+] 業âà ¢à é¥­¨ï ®¡ê¥ªâ 
CHUNK_TRACKPOS equ 0xB020 ; [+] âà ¥ªâ®à¨ï ®¡ê¥ªâ  CHUNK_TRACKPOS equ 0xB020 ; [+] âà ¥ªâ®à¨ï ®¡ê¥ªâ 
CHUNK_TRACKROTATE equ 0xB021 ; [+] âà ¥ªâ®à¨ï ¢à é¥­¨ï ®¡ê¥ªâ  CHUNK_TRACKROTATE equ 0xB021 ; [+] âà ¥ªâ®à¨ï ¢à é¥­¨ï ®¡ê¥ªâ 
CHUNK_TRACKCAMERA equ 0xB003 ; [-] ¯®¢¥¤¥­¨¥ ª ¬¥àë CHUNK_TRACKCAMERA equ 0xB003 ; [-] ¯®¢¥¤¥­¨¥ ª ¬¥àë
CHUNK_TRACKFOV equ 0xB023 ; [+] ¯®¢¥¤¥­¨¥ FOV ª ¬¥àë CHUNK_TRACKFOV equ 0xB023 ; [+] ¯®¢¥¤¥­¨¥ FOV ª ¬¥àë
CHUNK_TRACKROLL equ 0xB024 ; [+] ¯®¢¥¤¥­¨¥ roll ª ¬¥àë CHUNK_TRACKROLL equ 0xB024 ; [+] ¯®¢¥¤¥­¨¥ roll ª ¬¥àë
CHUNK_TRACKCAMTGT equ 0xB004 ; [-] ¯®¢¥¤¥­¨¥ "楫¨" ª ¬¥àë CHUNK_TRACKCAMTGT equ 0xB004 ; [-] ¯®¢¥¤¥­¨¥ "楫¨" ª ¬¥àë
;¤ ­­ë¥ ᮤ¥à¦ â «¨èì ¡«®ª¨, ®â¬¥ç¥­­ë¥ ¯«îᮬ, ®áâ «ì­ë¥ ¡«®ª¨ ;¤ ­­ë¥ ᮤ¥à¦ â «¨èì ¡«®ª¨, ®â¬¥ç¥­­ë¥ ¯«îᮬ, ®áâ «ì­ë¥ ¡«®ª¨
; á®áâ®ïâ «¨èì ¨§ ¯®¤¡«®ª®¢ ; á®áâ®ïâ «¨èì ¨§ ¯®¤¡«®ª®¢
@ -141,7 +142,7 @@ FILE_ERROR_CHUNK_SIZE equ -3 ;
align 4 align 4
type_bloks: type_bloks:
block_3ds 0x0002,5,1 ;¨­ä®à¬ æ¨ï ® ¢¥àᨨ ä ©«  block_3ds 0x0002,5,1,txt_0002
block_3ds 0x3d3e,5,1 ;mesh version block_3ds 0x3d3e,5,1 ;mesh version
block_3ds 0xA010,4,0 ;material ambient color block_3ds 0xA010,4,0 ;material ambient color
block_3ds 0xA020,4,0 ;material diffuse color block_3ds 0xA020,4,0 ;material diffuse color
@ -149,22 +150,23 @@ block_3ds 0xA030,4,0 ;material specular color
block_3ds CHUNK_color_1, 4,1 ; [+] 梥â rgb (byte format) block_3ds CHUNK_color_1, 4,1 ; [+] 梥â rgb (byte format)
block_3ds CHUNK_ambient_color,3,0 ; [-] ambient color block_3ds CHUNK_ambient_color,3,0 ; [-] ambient color
block_3ds CHUNK_OBJMESH, 3,0 ; [-] ¢áïç¥áª¨¥ ®¡ê¥ªâë block_3ds CHUNK_OBJMESH, 3,0 ; [-] ¢áïç¥áª¨¥ ®¡ê¥ªâë
block_3ds CHUNK_OBJBLOCK, 3,1 ; [+] ®¡ê¥ªâ block_3ds CHUNK_OBJBLOCK, 3,1,txt_4000
block_3ds CHUNK_TRIMESH, 3,0 ; [-] trimesh-®¡ê¥ªâ block_3ds CHUNK_TRIMESH, 3,0 ; [-] trimesh-®¡ê¥ªâ
block_3ds CHUNK_VERTLIST, 3,1 ; [+] ᯨ᮪ ¢¥à設 block_3ds CHUNK_VERTLIST, 3,1,txt_4110
block_3ds CHUNK_FACELIST, 3,1 ; [+] ᯨ᮪ £à ­¥© block_3ds CHUNK_FACELIST, 3,1,txt_4120
block_3ds CHUNK_FACEMAT, 3,1 ; [+] ¬ â¥à¨ «ë £à ­¥© block_3ds CHUNK_FACEMAT, 3,1 ; [+] ¬ â¥à¨ «ë £à ­¥©
block_3ds CHUNK_MAPLIST, 3,1 ; [+] ⥪áâãà­ë¥ ª®®à¤¨­ âë block_3ds CHUNK_MAPLIST, 3,1 ; [+] ⥪áâãà­ë¥ ª®®à¤¨­ âë
block_3ds CHUNK_TRMATRIX, 3,1 ; [+] ¬ âà¨æ  ¯¥à¥¢®¤  block_3ds CHUNK_TRMATRIX, 3,1 ; [+] ¬ âà¨æ  ¯¥à¥¢®¤ 
block_3ds CHUNK_CAMERA, 3,1 ; [+] ®¡ê¥ªâ-ª ¬¥à  block_3ds CHUNK_CAMERA, 3,1 ; [+] ®¡ê¥ªâ-ª ¬¥à 
block_3ds CHUNK_MATERIAL, 3,0 ; [-] ¬ â¥à¨ « block_3ds 0x4600,3,1,txt_4600
block_3ds CHUNK_MATNAME, 3,1 ; [+] ­ §¢ ­¨¥ ¬ â¥à¨ «  block_3ds CHUNK_MATERIAL, 3,0,txt_afff
block_3ds CHUNK_TEXTURE, 3,0 ; [-] ⥪áâãà  ¬ â¥à¨ «  block_3ds CHUNK_MATNAME, 3,1,txt_a000
block_3ds CHUNK_MAPFILE, 3,1 ; [+] ¨¬ï ä ©«  ⥪áâãàë block_3ds CHUNK_TEXTURE, 3,0,txt_a200
block_3ds CHUNK_KEYFRAMER, 3,0 ; [-] ¨­ä®à¬ æ¨ï ®¡  ­¨¬ æ¨¨ block_3ds CHUNK_MAPFILE, 6,1,txt_a300
block_3ds CHUNK_TRACKINFO, 3,0 ; [-] ¯®¢¥¤¥­¨¥ ®¡ê¥ªâ  block_3ds CHUNK_KEYFRAMER, 3,0,txt_b000
block_3ds CHUNK_TRACKOBJNAME,3,1 ; [+] ­ §¢ ­¨¥ í⮣® ®¡ê¥ªâ  block_3ds CHUNK_TRACKINFO, 3,0,txt_b002
block_3ds CHUNK_TRACKPIVOT, 3,1 ; [+] 業âà ¢à é¥­¨ï ®¡ê¥ªâ  block_3ds CHUNK_TRACKOBJNAME,3,1,txt_b010
block_3ds CHUNK_TRACKPIVOT, 3,1,txt_b013
block_3ds CHUNK_TRACKPOS, 3,1 ; [+] âà ¥ªâ®à¨ï ®¡ê¥ªâ  block_3ds CHUNK_TRACKPOS, 3,1 ; [+] âà ¥ªâ®à¨ï ®¡ê¥ªâ 
block_3ds CHUNK_TRACKROTATE, 3,1 ; [+] âà ¥ªâ®à¨ï ¢à é¥­¨ï ®¡ê¥ªâ  block_3ds CHUNK_TRACKROTATE, 3,1 ; [+] âà ¥ªâ®à¨ï ¢à é¥­¨ï ®¡ê¥ªâ 
block_3ds CHUNK_TRACKCAMERA, 3,0 ; [-] ¯®¢¥¤¥­¨¥ ª ¬¥àë block_3ds CHUNK_TRACKCAMERA, 3,0 ; [-] ¯®¢¥¤¥­¨¥ ª ¬¥àë
@ -173,13 +175,44 @@ block_3ds CHUNK_TRACKROLL, 3,1 ; [+]
block_3ds CHUNK_TRACKCAMTGT, 3,0 ; [-] ¯®¢¥¤¥­¨¥ "楫¨" ª ¬¥àë block_3ds CHUNK_TRACKCAMTGT, 3,0 ; [-] ¯®¢¥¤¥­¨¥ "楫¨" ª ¬¥àë
.end: .end:
if lang eq ru
txt_0002 db '3ds ¢¥àá¨ï',0
txt_4000 db 'Ž¡ê¥ªâ (á ¨¬¥­¥¬)',0
txt_4110 db '‘¯¨á®ª ¢¥à設',0
txt_4120 db '‘¯¨á®ª £à ­¥©',0
txt_4600 db '‘¢¥â',0
txt_a000 db '<27> §¢ ­¨¥ ¬ â¥à¨ « ',0
txt_a200 db '’¥ªáâãà  ¬ â¥à¨ «  1',0
txt_a300 db 'ˆ¬ï ä ©«  ⥪áâãàë',0
txt_afff db 'Œ â¥à¨ «',0
txt_b000 db 'ˆ­ä®à¬ æ¨ï ®¡  ­¨¬ æ¨¨',0
txt_b002 db '<27>®¢¥¤¥­¨¥ ®¡ê¥ªâ ',0
txt_b010 db '<27> §¢ ­¨¥ ®¡ê¥ªâ ',0
txt_b013 db '–¥­âà ¢à é¥­¨ï ®¡ê¥ªâ ',0
else
txt_0002 db '3ds version',0
txt_4000 db 'Object (with name)',0
txt_4110 db 'Vertices list',0
txt_4120 db 'Faces description',0
txt_4600 db 'Light',0
txt_a000 db 'Material name',0
txt_a200 db 'Texture map 1',0
txt_a300 db 'Mapping filename',0
txt_afff db 'Meterial',0
txt_b000 db 'Keyframer',0
txt_b002 db 'Mesh information',0
txt_b010 db 'Object name',0
txt_b013 db 'Object pivot point',0
end if
align 4 align 4
file_3ds: file_3ds:
.offs: dd 0 ;+0 㪠§ â¥«ì ­  ­ ç «® ¡«®ª  .offs: dd 0 ;+0 㪠§ â¥«ì ­  ­ ç «® ¡«®ª 
.size: dd 0 ;+4 à §¬¥à ¡«®ª  (¤«ï 1-£® ¯ à ¬¥âà  = à §¬¥à ä ©«  3ds) .size: dd 0 ;+4 à §¬¥à ¡«®ª  (¤«ï 1-£® ¯ à ¬¥âà  = à §¬¥à ä ©«  3ds)
rb 8*MAX_FILE_LEVEL+4 rb 8*MAX_FILE_LEVEL
size_one_list equ 14 size_one_list equ 40
list_offs_text equ 12 ;ᤢ¨£ ­ ç «  ⥪áâ  ¢ «¨áâ¥
buffer rb size_one_list ;¡ãä¥à ¤«ï ¤®¡ ¢«¥­¨ï áâàãªâãà ¢ ᯨ᮪ tree1 buffer rb size_one_list ;¡ãä¥à ¤«ï ¤®¡ ¢«¥­¨ï áâàãªâãà ¢ ᯨ᮪ tree1
if lang eq ru if lang eq ru
@ -288,6 +321,13 @@ mouse:
align 4 align 4
timer_funct: timer_funct:
pushad pushad
if debug
mov eax,4
mov ebx,(5 shl 16)+8
mov ecx,0xff+0x80000000
mov edx,txt_0002
int 0x40
end if
mcall 26,9 mcall 26,9
mov [last_time],eax mov [last_time],eax
@ -305,7 +345,12 @@ timer_funct:
je @f je @f
mov dword[offs_last_timer],eax mov dword[offs_last_timer],eax
call buf_draw_beg call buf_draw_beg
stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xd000 stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000
mov edx,dword[ebx+8]
cmp edx,0 ;ᬮâਬ ¥áâì «¨ ®¯¨á ­¨¥ ¡«®ª 
je .no_info
stdcall [buf2d_draw_text], buf_0, buf_1,edx,5,45,0xb000
.no_info:
add ecx,eax ;¯®«ãç ¥¬ à §¬¥à ¡«®ª  add ecx,eax ;¯®«ãç ¥¬ à §¬¥à ¡«®ª 
stdcall buf_draw_hex_table,eax,ecx ;¤®¡ ¢«¥­¨¥ 16-à¨ç­ëå ¤ ­­ëå stdcall buf_draw_hex_table,eax,ecx ;¤®¡ ¢«¥­¨¥ 16-à¨ç­ëå ¤ ­­ëå
stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥ stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
@ -328,11 +373,11 @@ align 4
proc buf_draw_hex_table, offs:dword, size_line:dword proc buf_draw_hex_table, offs:dword, size_line:dword
pushad pushad
locals locals
coord_y dd 45 coord_y dd 55 ;ª®®à¤¨­ â  y ¤«ï ­ ç «  ¢ë¢®¤  â ¡«¨æë
endl endl
mov esi,dword[offs] mov esi,dword[offs]
mov edi,dword[open_file_lif] mov edi,dword[open_file_lif]
add edi,dword[file_3ds+4] ;edi - 㪠§ â¥«ì ­  ª®­¥æ ä ©«  ¢ ¯ ¬ï⨠add edi,dword[file_3ds.size] ;edi - 㪠§ â¥«ì ­  ª®­¥æ ä ©«  ¢ ¯ ¬ïâ¨
mov dword[txt_3ds_offs.dig],0 mov dword[txt_3ds_offs.dig],0
cld cld
.cycle_rows: .cycle_rows:
@ -525,7 +570,7 @@ but_open_file:
mov dword[level_stack],0 ;®¡­ã«ï¥¬ ã஢¥­ì á⥪  mov dword[level_stack],0 ;®¡­ã«ï¥¬ ã஢¥­ì á⥪ 
mov dword[offs_last_timer],0 mov dword[offs_last_timer],0
;--- ¤®¡ ¢«¥­¨¥ £« ¢­®£® ¡«®ª  ¢ ᯨ᮪ ;--- ¤®¡ ¢«¥­¨¥ £« ¢­®£® ¡«®ª  ¢ ᯨ᮪
stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2] stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2],0
call block_children ;¢å®¤ ¢ ¤®ç¥à­¨© ¡«®ª call block_children ;¢å®¤ ¢ ¤®ç¥à­¨© ¡«®ª
mov edi,dword[file_3ds.offs] mov edi,dword[file_3ds.offs]
@ -537,20 +582,19 @@ but_open_file:
cmp esi,edi ;¥á«¨ ª®­¥æ ä ©«  cmp esi,edi ;¥á«¨ ª®­¥æ ä ©« 
jge .end_cycle jge .end_cycle
call block_analiz
mov edx,dword[esi+2] ;à §¬¥à ¡«®ª  mov edx,dword[esi+2] ;à §¬¥à ¡«®ª 
call block_analiz
cmp dword[eax],0 cmp dword[bl_found],0
jne @f jne @f
;®¡ê¥ªâ ­¥ ¨§¢¥áâ­®£® ¢¨¤  ;®¡ê¥ªâ ­¥ ¨§¢¥áâ­®£® ¢¨¤ 
stdcall add_3ds_object, ID_ICON_CHUNK_NOT_FOUND,dword[level_stack],edx stdcall add_3ds_object, ID_ICON_CHUNK_NOT_FOUND,dword[level_stack],edx,0
call block_next call block_next
jmp .cycle_main jmp .cycle_main
@@: @@:
;®¡ê¥ªâ ¨§¢¥áâ­®£® ¢¨¤  ;®¡ê¥ªâ ¨§¢¥áâ­®£® ¢¨¤ 
mov ecx,dword[eax] mov ecx,dword[bl_found]
mov bx,word[ecx+2] ;­®¬¥à ¨ª®­ª¨ ¤«ï ®¡ê¥ªâ  mov bx,word[ecx+2] ;­®¬¥à ¨ª®­ª¨ ¤«ï ®¡ê¥ªâ 
stdcall add_3ds_object, ebx,dword[level_stack],edx stdcall add_3ds_object, ebx,dword[level_stack],edx,dword[ecx+5]
cmp byte[ecx+4],1 cmp byte[ecx+4],1
je .bl_data je .bl_data
;¡«®ª ᮤ¥à¦¨â ¤®ç¥à­¨¥ ¡«®ª¨ ;¡«®ª ᮤ¥à¦¨â ¤®ç¥à­¨¥ ¡«®ª¨
@ -559,7 +603,6 @@ but_open_file:
.bl_data: .bl_data:
;¡«®ª ᮤ¥à¦¨â ¤ ­­ë¥ ;¡«®ª ᮤ¥à¦¨â ¤ ­­ë¥
call block_analiz_data call block_analiz_data
call block_next
jmp .cycle_main jmp .cycle_main
.end_cycle: .end_cycle:
stdcall [tl_cur_beg], tree1 stdcall [tl_cur_beg], tree1
@ -574,28 +617,48 @@ but_open_file:
; ­ «¨§ ¤ ­­ëå ¡«®ª  ; ­ «¨§ ¤ ­­ëå ¡«®ª 
;input: ;input:
; esi - memory pointer ; esi - memory pointer
;output:
; eax - new stack pointer
; esi - new memory pointer
align 4 align 4
block_analiz_data: block_analiz_data:
pushad push ebx ecx edx edi
mov ax,word[esi] mov dx,word[esi]
mov ecx,dword[esi+2] mov ecx,dword[esi+2]
sub ecx,6 ;à §¬¥à ¤ ­­ëå ¢ ¡«®ª¥ sub ecx,6 ;à §¬¥à ¤ ­­ëå ¢ ¡«®ª¥
add esi,6 add esi,6
mov ebx,dword[level_stack] mov ebx,dword[level_stack]
inc ebx inc ebx
;cmp ax,CHUNK_color_1 ; ***  ­ «¨§ ¡«®ª®¢ á à §­ë¬¨ ¤ ­­ë¬¨ ¨ ¢ë¤¥«¥­¨¥¬ ¯®¤¡«®ª®¢
;jne @f cmp dx,CHUNK_OBJBLOCK ;®¡ê¥ªâ
; .cycle_0: jne @f
; stdcall add_3ds_object, ID_ICON_DATA,ebx,3 .cycle_0:
; add esi,3 push ax
; sub ecx,3 cld
; cmp ecx,0 xor al,al
; jg .cycle_0 mov edi,esi
; jmp .end_f repne scasb
;@@: pop ax
stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx sub edi,esi ;edi - strlen
stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;­ §¢ ­¨¥ ®¡ê¥ªâ 
add esi,edi
sub ecx,edi
jmp .next_bl
@@:
; ***  ­ «¨§ ¡«®ª  á ¤ ­­ë¬¨ ¯® 㬮«ç ­¨î (¡¥§ ¢ë¤¥«¥­¨ï ¯®¤¡«®ª®¢)
stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0
sub esi,6 ;¢®ááâ ­®¢«¥­¨¥ esi
call block_next
jmp .end_f
.next_bl:
; *** ­ áâனª¨ ¤«ï  ­ «¨§  ®áâ ¢è¨åáï ¯®¤¡«®ª®¢
mov dword[eax],esi ;㪠§ â¥«ì ­  ­ ç «® ¡«®ª 
mov ebx,dword[esi+2]
mov dword[eax+4],ebx ;à §¬¥à ¡«®ª 
inc dword[level_stack]
add eax,8
.end_f: .end_f:
popad pop edi edx ecx ebx
ret ret
;¢å®¤ ¢ 1-© ¤®ç¥à­¨© ¡«®ª ;¢å®¤ ¢ 1-© ¤®ç¥à­¨© ¡«®ª
@ -633,25 +696,29 @@ push ebx
add esi,dword[esi+2] ;¯à®¯ã᪠¥¬ ¤ ­­ë¥ ¡«®ª  add esi,dword[esi+2] ;¯à®¯ã᪠¥¬ ¤ ­­ë¥ ¡«®ª 
;¯à®¢¥àª  à §¬¥à®¢ த¨â¥«ì᪮£® ¡«®ª , ¤«ï ¢®§¬®¦­®£® ¢ë室  ­  ¢¥àå­¨© ã஢¥­ì ¥á«¨ ª®­¥æ ¡«®ª  ;¯à®¢¥àª  à §¬¥à®¢ த¨â¥«ì᪮£® ¡«®ª , ¤«ï ¢®§¬®¦­®£® ¢ë室  ­  ¢¥àå­¨© ã஢¥­ì ¥á«¨ ª®­¥æ ¡«®ª 
@@:
mov ebx,dword[eax-8] mov ebx,dword[eax-8]
add ebx,dword[eax-4] add ebx,dword[eax-4]
cmp esi,ebx cmp esi,ebx
jl @f jl @f
dec dword[level_stack] dec dword[level_stack]
sub eax,8 sub eax,8
cmp dword[level_stack],0
jg @b
@@: @@:
pop ebx pop ebx
ret ret
;äã­ªæ¨ï ¯®¨áª  áâàãªâãàë ®¯¨á뢠î饩 ¡«®ª
;input: ;input:
;eax - pointer to stack
;esi - memory pointer ;esi - memory pointer
;output: ;output:
;dword[eax] - pointer to chunk struct (= 0 if not found) ;dword[bl_found] - pointer to chunk struct (= 0 if not found)
align 4 align 4
bl_found dd 0
block_analiz: block_analiz:
pushad pushad
mov dword[eax],0 mov dword[bl_found],0
mov ecx,type_bloks mov ecx,type_bloks
@@: @@:
mov bx,word[ecx] mov bx,word[ecx]
@ -662,7 +729,7 @@ pushad
jl @b jl @b
jmp .no_found jmp .no_found
.found: .found:
mov dword[eax],ecx mov dword[bl_found],ecx
.no_found: .no_found:
popad popad
ret ret
@ -670,7 +737,7 @@ popad
;input: ;input:
; esi - 㪠§ â¥«ì ­   ­ «¨§¨àã¥¬ë¥ ¤ ­­ë¥ ; esi - 㪠§ â¥«ì ­   ­ «¨§¨àã¥¬ë¥ ¤ ­­ë¥
align 4 align 4
proc add_3ds_object, icon:dword,level:dword,size_bl:dword proc add_3ds_object, icon:dword,level:dword,size_bl:dword,info_bl:dword
pushad pushad
mov bx,word[icon] mov bx,word[icon]
shl ebx,16 shl ebx,16
@ -681,13 +748,27 @@ proc add_3ds_object, icon:dword,level:dword,size_bl:dword
mov dword[buffer],eax ;ᬥ饭¨¥ ¡«®ª  mov dword[buffer],eax ;ᬥ饭¨¥ ¡«®ª 
mov ecx,dword[size_bl] mov ecx,dword[size_bl]
mov dword[buffer+4],ecx ;à §¬¥à ¡«®ª  (¨á¯®«ì§ã¥âáï ¢ ä㭪樨 buf_draw_hex_table ¤«ï à¨á®¢ ­¨ï «¨­¨¨) mov dword[buffer+4],ecx ;à §¬¥à ¡«®ª  (¨á¯®«ì§ã¥âáï ¢ ä㭪樨 buf_draw_hex_table ¤«ï à¨á®¢ ­¨ï «¨­¨¨)
stdcall hex_in_str, buffer+8,dword[esi+1],2 mov ecx,dword[info_bl]
stdcall hex_in_str, buffer+10,dword[esi],2 ;ª®¤ 3ds ¡«®ª  mov dword[buffer+8],ecx
mov byte[buffer+12],0 stdcall hex_in_str, buffer+list_offs_text,dword[esi+1],2
stdcall hex_in_str, buffer+list_offs_text+2,dword[esi],2 ;ª®¤ 3ds ¡«®ª 
cmp ecx,0
jne @f
mov byte[buffer+list_offs_text+4],0 ;0 - ᨬ¢®« ª®­¥æ  áâப¨
jmp .no_capt
@@:
mov byte[buffer+list_offs_text+4],' '
mov esi,ecx
mov edi,buffer+list_offs_text+5
mov ecx,size_one_list-(list_offs_text+5)
cld
rep movsb
mov byte[buffer+size_one_list-1],0 ;0 - ᨬ¢®« ª®­¥æ  áâப¨
.no_capt:
stdcall [tl_node_add], buffer, ebx, tree1 stdcall [tl_node_add], buffer, ebx, tree1
stdcall [tl_cur_next], tree1 stdcall [tl_cur_next], tree1
if debug if debug
stdcall print_err,sz_add_3ds_object,buffer+8 stdcall print_err,sz_add_3ds_object,buffer+list_offs_text
end if end if
popad popad
ret ret
@ -1128,8 +1209,8 @@ buf_1:
db 24 ;+20 bit in pixel db 24 ;+20 bit in pixel
el_focus dd tree1 el_focus dd tree1
tree1 tree_list size_one_list,100+2, tl_key_no_edit+tl_draw_par_line,\ tree1 tree_list size_one_list,200+2, tl_key_no_edit+tl_draw_par_line,\
16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 0,8,0, el_focus,\ 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 16,list_offs_text,0, el_focus,\
w_scr_t1,0 w_scr_t1,0
align 4 align 4

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB