1263,20 → 1263,12 |
cmp ted_increase_size,0 |
je @f |
push eax ebx ecx |
mov ecx,ted_increase_size |
add ecx,ted_max_chars |
mov ted_max_chars,ecx |
imul ecx,sizeof.symbol |
invoke mem.realloc, ted_tex,ecx |
mov ebx,ted_tex |
mov ted_tex,eax |
mov ted_tex_1,eax |
add ted_tex_1,sizeof.symbol |
mov ecx,ted_max_chars |
call ted_mem_resize.no_2 |
sub edx,ebx |
add edx,eax |
add edx,ted_tex |
mov ted_ptr_free_symb,edx |
add eax,ecx |
mov ted_tex_end,eax |
pop ecx ebx eax |
@@: |
ret |
2546,11 → 2538,39 |
ret |
endp |
|
;description: |
; ¨§¬¥ï¥¬ à §¬¥à ¯ ¬ï⨠¤«ï ⥪áâ (ãáâ ®¢ª ted_ptr_free_symb 1 ᨬ¢®«) |
;input: |
; ecx - ç¨á«® ᨬ¢®«®¢ ¢ ä ©«¥ |
; edi - pointer to tedit struct |
;output: |
; eax, ecx - à §àãè îâáï |
align 16 |
ted_mem_resize: |
add ecx,2 ;¯ ¬ïâì ¤«ï ⥪áâ + á«ã¦¥¡ë¥ ç «ìë© ¨ ª®¥çë© á¨¬¢®«ë |
.no_2: |
add ecx,ted_increase_size ;¯ ¬ïâì ¤«ï । ªâ¨à®¢ ¨ï ä ©« |
mov ted_max_chars,ecx |
imul ecx,sizeof.symbol |
invoke mem.realloc, ted_tex,ecx |
mov ted_tex,eax |
mov ted_tex_1,eax |
add ted_tex_1,sizeof.symbol |
add eax,ecx |
mov ted_tex_end,eax |
mov ecx,ted_tex_1 |
add ecx,sizeof.symbol |
mov ted_ptr_free_symb,ecx |
ret |
|
;output: |
; eax = ª®¤ ®è¨¡ª¨ |
; ebx = ª®««¨ç¥á⢮ ¯à®ç¨â ëå ¡ ©â |
align 16 |
proc ted_open_file uses ecx edx edi, edit:dword, file:dword, f_name:dword ;äãªæ¨ï ®âªàëâ¨ï ä ©« |
proc ted_open_file uses ecx edx edi esi, edit:dword, file:dword, f_name:dword ;äãªæ¨ï ®âªàëâ¨ï ä ©« |
locals |
unpac_mem dd ? |
endl |
mov edi,[edit] |
|
; *** ¯à®¢¥à塞 à §¬¥à ¯ ¬ï⨠¨ ¥á«¨ ¥ å¢ â ¥â ⮠㢥«¨ç¨¢ ¥¬ *** |
2580,21 → 2600,8 |
mov edx,[edx+32] ;+32 = +0x20: qword: à §¬¥à ä ©« ¢ ¡ ©â å |
cmp edx,ecx |
jl @f |
;㢥«¨ç¨¢ ¥¬ ¯ ¬ïâì ¥á«¨ ¥ å¢ â¨«® |
mov ecx,edx ;¯ ¬ïâì ¥®¡å®¤¨¬ ï ¤«ï ®âªàëâ¨ï ä ©« |
add ecx,2 ;¯ ¬ïâì ¤«ï á«ã¦¥¡ëå ç «ì®£® ¨ ª®¥ç®£® ᨬ¢®«®¢ |
add ecx,ted_increase_size ;¯ ¬ïâì ¤«ï । ªâ¨à®¢ ¨ï ä ©« |
mov ted_max_chars,ecx |
imul ecx,sizeof.symbol |
invoke mem.realloc, ted_tex,ecx |
mov ted_tex,eax |
mov ted_tex_1,eax |
add ted_tex_1,sizeof.symbol |
add eax,ecx |
mov ted_tex_end,eax |
mov ecx,ted_tex_1 |
add ecx,sizeof.symbol |
mov ted_ptr_free_symb,ecx |
mov ecx,edx |
call ted_mem_resize |
@@: |
|
; *** ¯à®¡ã¥¬ ®âªàëâì ä ©« *** |
2617,6 → 2624,32 |
cmp ebx,-1 |
je .ret_f |
;if open file |
push eax |
mov eax,ted_tex |
cmp dword[eax],'KPCK' |
jne .end_unpack |
;¢ë¤¥«¥¨¥ ¯ ¬ï⨠¤«ï à ᯠª®¢ª¨ ä ©« |
invoke mem.alloc,[eax+4] |
mov [unpac_mem],eax |
stdcall unpack,ted_tex,[unpac_mem] |
mov ecx,ted_max_chars |
sub ecx,2 ;ecx = ¬ ªá¨¬ «ì®¥ ç¨á«® ¡ ©â, ¤«ï ª®â®àëå ¡ë« ¢ë¤¥«¥ ¯ ¬ïâì |
mov eax,ted_tex |
mov ebx,[eax+4] |
cmp ebx,ecx |
jl @f ;¥á«¨ ¤«ï à ᯠª®¢ ®£® ä ©« ¥ å¢ â ¥â ¢ë¤¥«¥®© ¯ ¬ï⨠|
mov ecx,ebx |
call ted_mem_resize |
@@: |
mov edi,ted_tex |
mov esi,[unpac_mem] |
mov ecx,ebx |
cld |
rep movsb |
mov edi,[edit] |
invoke mem.free,[unpac_mem] |
.end_unpack: |
pop eax |
call ted_on_open_file |
.ret_f: |
ret |