From e251af9421d783ef6d325858147ca68e8047e343 Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 30 Aug 2011 11:10:56 +0000 Subject: [PATCH] buf2d.obj: - new function 'buf2d_resize' info3ds: - update resize window - update function 'block_analiz_data' git-svn-id: svn://kolibrios.org@2136 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/info3ds/data.inc | 4 +- programs/develop/info3ds/info3ds.asm | 110 +++++++++++++----- .../develop/libraries/buf2d/trunk/about.htm | 8 ++ .../develop/libraries/buf2d/trunk/buf2d.asm | 33 +++++- 4 files changed, 123 insertions(+), 32 deletions(-) diff --git a/programs/develop/info3ds/data.inc b/programs/develop/info3ds/data.inc index 1837b968bf..613c239f39 100644 --- a/programs/develop/info3ds/data.inc +++ b/programs/develop/info3ds/data.inc @@ -1,7 +1,7 @@ if lang eq ru -capt db 'info 3ds версия 26.08.11',0 ;подпись окна +capt db 'info 3ds версия 30.08.11',0 ;подпись окна else -capt db 'info 3ds version 26.08.11',0 ;window caption +capt db 'info 3ds version 30.08.11',0 ;window caption end if MAX_FILE_LEVEL equ 20 ;максимальный уровень вложенности блоков для анализа diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index eea72c9a59..71cba6ad31 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -325,6 +325,24 @@ pushad sub eax,65 mov dword[tree1.box_height],eax mov word[w_scr_t1+4],ax ;новые размеры скроллинга + cmp eax,dword[buf_0.h] ;увеличиваем высоту буфера + jle @f + stdcall [buf2d_resize],buf_0,0,eax + mov dword[offs_last_timer],0 ;для обновления буфера в таймере + @@: + + mov eax,dword[procinfo.box.width] + cmp eax,400 + jge @f + mov eax,400 + @@: + sub eax,[buf_0.w] + sub eax,41 + mov dword[tree1.box_width],eax + add ax,word[tree1.box_left] + mov word[w_scr_t1.start_x],ax + add ax,16+5 + mov word[buf_0.l],ax mov eax,8 mov ebx,(5 shl 16)+20 @@ -521,28 +539,27 @@ block_analiz_data: ; *** анализ блоков с разными данными и выделением подблоков cmp dx,CHUNK_OBJBLOCK ;объект jne @f - .cycle_0: - push ax - cld - xor al,al - mov edi,esi - repne scasb - pop ax - sub edi,esi ;edi - strlen - stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;название объекта - add esi,edi - sub ecx,edi + push ax + cld + xor al,al + mov edi,esi + repne scasb + pop ax + sub edi,esi ;edi - strlen + stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;название объекта + add esi,edi + ;sub ecx,edi ;уже сделано в repne jmp .next_bl @@: cmp dx,CHUNK_VERTLIST ;список вершин je .vertexes cmp dx,0x4111 ;флаги вершин je .vertexes - cmp dx,CHUNK_FACELIST ;список граней + cmp dx,CHUNK_MAPLIST ;текстурные координаты je .vertexes jmp @f .vertexes: ;обработка блоков, содержащих данные вершин - stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число вершин или граней + stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число вершин add esi,2 sub ecx,2 stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;данные вершин @@ -550,6 +567,53 @@ block_analiz_data: call block_next jmp .end_f @@: + cmp dx,CHUNK_FACELIST ;список граней + jne @f + stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число граней + push eax + xor eax,eax + mov ax,[esi] + shl eax,3 + add esi,2 + sub ecx,2 + stdcall add_3ds_object, ID_ICON_DATA,ebx,eax,0 ;данные вершин + + sub ecx,eax + cmp ecx,1 + jl .data_3 ;проверяем есть ли блок описывающий материал, применяемый к объекту + add esi,eax + pop eax + jmp .next_bl + ;stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;данные материала + ;sub esi,eax ;восстановление esi + .data_3: + + sub esi,8 ;восстановление esi + pop eax + call block_next + jmp .end_f + @@: + cmp dx,CHUNK_FACEMAT ;материалы граней + jne @f + push ax + cld + xor al,al + mov edi,esi + repne scasb + pop ax + sub edi,esi ;edi - strlen + stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;название объекта + add esi,edi + ;sub ecx,edi ;уже сделано в repne + stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;число граней + add esi,2 + sub ecx,2 + stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;номера граней, к которым применен материал + sub esi,edi ;восстановление esi (1) + sub esi,8 ;восстановление esi (2) + call block_next + jmp .end_f + @@: ; *** анализ блока с данными по умолчанию (без выделения подблоков) stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 sub esi,6 ;восстановление esi @@ -949,19 +1013,6 @@ dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 -; file.find_first db 'file_find_first',0 -; file.find_next db 'file_find_next',0 -; file.find_close db 'file_find_close',0 -; file.size db 'file_size',0 -; file.open db 'file_open',0 -; file.read db 'file_read',0 -; file.write db 'file_write',0 -; file.seek db 'file_seek',0 -; file.tell db 'file_tell',0 -; file.eof? db 'file_iseof',0 -; file.truncate db 'file_truncate',0 -; file.close db 'file_close',0 - align 4 import_buf2d: dd sz_init0 @@ -970,6 +1021,7 @@ import_buf2d: buf2d_clear dd sz_buf2d_clear buf2d_draw dd sz_buf2d_draw buf2d_delete dd sz_buf2d_delete + buf2d_resize dd sz_buf2d_resize buf2d_line dd sz_buf2d_line buf2d_rect_by_size dd sz_buf2d_rect_by_size buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size @@ -995,6 +1047,7 @@ import_buf2d: sz_buf2d_clear db 'buf2d_clear',0 sz_buf2d_draw db 'buf2d_draw',0 sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_resize db 'buf2d_resize',0 sz_buf2d_line db 'buf2d_line',0 sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 @@ -1096,7 +1149,7 @@ procinfo process_information align 4 buf_0: dd 0 ;указатель на буфер изображения - dw 205 ;+4 left +.l: dw 205 ;+4 left dw 35 ;+6 top .w: dd 340 ;+8 w .h: dd 250 ;+12 h @@ -1121,7 +1174,8 @@ tree1 tree_list size_one_list,200+2, tl_key_no_edit+tl_draw_par_line,\ align 4 w_scr_t1: .size_x dw 16 ;+0 -rb 2+2+2 +.start_x dw 0 +rb 2+2 .btn_high dd 15 ;+8 .type dd 1 ;+12 .max_area dd 100 ;+16 diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index a70223c749..02bf7c31ee 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -108,6 +108,11 @@ buf_0:

buf2d_delete

╬ётюсюцфрхЄ ярь Є№ чрэ Єє■ шчюсЁрцхэшхь сєЇхЁр.

+

buf2d_resize

+

╚чьхэ хЄ ЁрчьхЁ√ сєЇхЁр. ╧юър яюффхЁцштр■Єё  сєЇхЁр ё уыєсшэющ ЎтхЄр 24 сшЄр. ╧ЁшьхЁ:

+
stdcall [buf2d_resize], buf_0, 0,300 ;шчьхэ хь т√ёюЄє сєЇхЁр
+

уфх buf_0 - ёЄЁєъЄєЁр сєЇхЁр т ъюЄюЁюь сєфхЄ ЁшёютрЄ№ё  ышэш ; 0 - эютр  °шЁшэр сєЇхЁр (0 ючэрўрхЄ эх шчьхэ Є№ ЁрчьхЁ); 300 - эютр  т√ёюЄр сєЇхЁр.

+

buf2d_line

╨шёєхЄ т сєЇхЁх ышэш■ ё чрфрээ√ь ЎтхЄюь ш ъююЁфшэрЄрьш. ╧ЁшьхЁ:

stdcall [buf2d_line], buf_0, 30,10, 110,70, 0xffff00 ;Ёшёєхь ышэш■
@@ -225,6 +230,7 @@ import_buf2d_lib: buf2d_clear dd sz_buf2d_clear buf2d_draw dd sz_buf2d_draw buf2d_delete dd sz_buf2d_delete + buf2d_resize dd sz_buf2d_resize buf2d_line dd sz_buf2d_line buf2d_rect_by_size dd sz_buf2d_rect_by_size buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size @@ -251,6 +257,7 @@ import_buf2d_lib: sz_buf2d_clear db 'buf2d_clear',0 sz_buf2d_draw db 'buf2d_draw',0 sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_resize db 'buf2d_resize',0 sz_buf2d_line db 'buf2d_line',0 sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 @@ -285,5 +292,6 @@ import_buf2d_lib:

02.11.10 - фюсртыхэр ЇєэъЎш  buf2d_flood_fill.

22.12.10 - шчьхэхэю шь  ЇєэъЎшш buf2d_cruve_bezier эр buf2d_curve_bezier.

25.03.11 - фюсртыхэр ЇєэъЎш  Ёшёютрэш  фы  Єюўъш buf2d_set_pixel.

+

30.08.11 - фюсртыхэр ЇєэъЎш  шчьхэхэш  ЁрчьхЁют сєЇхЁр buf2d_resize.

\ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index 90795a8bf6..7d9c61f41a 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -911,10 +911,37 @@ endp align 4 proc buf_delete, buf_struc:dword - push edi + push eax edi mov edi,dword[buf_struc] invoke mem.free,buf2d_data - pop edi + pop edi eax + ret +endp + +align 4 +proc buf_resize, buf_struc:dword, new_w:dword, new_h:dword + pushad + mov edi,dword[buf_struc] + cmp buf2d_bits,24 + jne .24bit + mov eax,dword[new_w] + cmp eax,1 + jl @f + mov buf2d_w,eax + @@: + mov ecx,buf2d_w + mov eax,dword[new_h] + cmp eax,1 + jl @f + mov buf2d_h,eax + @@: + mov ebx,buf2d_h + imul ecx,ebx + lea ecx,[ecx+ecx*2] ; 24 bit = 3 + invoke mem.realloc,buf2d_data,ecx ;изменяем память занимаемую буфером + mov buf2d_data,eax ;на случай если изменился указатель на данные + .24bit: + popad ret endp @@ -2310,6 +2337,7 @@ EXPORTS: dd sz_buf2d_clear, buf_clear dd sz_buf2d_draw, buf_draw_buf dd sz_buf2d_delete, buf_delete + dd sz_buf2d_resize, buf_resize dd sz_buf2d_line, buf_line_brs dd sz_buf2d_rect_by_size, buf_rect_by_size dd sz_buf2d_filled_rect_by_size, buf_filled_rect_by_size @@ -2335,6 +2363,7 @@ EXPORTS: sz_buf2d_clear db 'buf2d_clear',0 ;очистка буфера указанным цветом sz_buf2d_draw db 'buf2d_draw',0 sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_resize db 'buf2d_resize',0 sz_buf2d_line db 'buf2d_line',0 ;рисование линии sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование рамки прямоугольника, 2-я координата задана по размеру sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 ;рисование залитого прямоугольника, 2-я координата задана по размеру