2010-07-30 01:20:45 +04:00
format MS COFF
public EXPORTS
section '.flat' code readable al ign 16
include '../../../../macros.inc'
include '../../../../proc32.inc'
;-----------------------------------------------------------------------------
mem.alloc dd ? ;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mem.free dd ? ;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> <EFBFBD> <E1A2AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mem.realloc dd ? ;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
dll.load dd ?
BUF_STRUCT_SIZE equ 21
buf2d_data equ dword [ edi ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
buf2d_w equ dword [ edi + 8 ] ;<3B> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
buf2d_h equ dword [ edi + 12 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-07-30 21:42:39 +04:00
buf2d_l equ word [ edi + 4 ]
2010-07-30 01:20:45 +04:00
buf2d_t equ word [ edi + 6 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᢥ<> <E1A2A5> <EFBFBD>
buf2d_size_lt equ dword [ edi + 4 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <> <E1ABA5> <20> <20> <> ࠢ<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
buf2d_color equ dword [ edi + 16 ] ;梥<> 䮭<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
buf2d_bits equ byte [ edi + 20 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <20> 1-<2D> <20> <> 窥 <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
struc t buf_2d_header
img_data dd ?
left dw ? ;+4 left
top dw ? ;+6 top
size_x dd ? ;+8 w
size_y dd ? ;+12 h
color dd ? ;+16 color
bit_pp db ? ;+21 bit in pixel
ends
macro swap v1 , v2 {
push v1
push v2
pop v1
pop v2
}
;䫠<> <E4ABA0> , <20> <> <EFBFBD> <20> 㭪樨 <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
BUF2D_OPT_CROP_TOP equ 1 ;<3B> <> १<EFBFBD> <E0A5A7> ᢥ<> <E1A2A5> <EFBFBD>
BUF2D_OPT_CROP_LEFT equ 2 ;<3B> <> १<EFBFBD> <E0A5A7> <> <E1ABA5>
BUF2D_OPT_CROP_BOTTOM equ 4 ;<3B> <> १<EFBFBD> <E0A5A7> ᭨<> <E1ADA8>
BUF2D_OPT_CROP_RIGHT equ 8 ;<3B> <> १<EFBFBD> <E0A5A7> <20> <> ࠢ<EFBFBD>
BUF2D_BIT_OPT_CROP_TOP equ 0
BUF2D_BIT_OPT_CROP_LEFT equ 1
BUF2D_BIT_OPT_CROP_BOTTOM equ 2
BUF2D_BIT_OPT_CROP_RIGHT equ 3
;input:
; eax = 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; ebx = ... <20> <EFBFBD> <E1A2AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; ecx = ... <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; edx = ... <20> <> <EFBFBD> <EFBFBD> 㧪<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <20> <> <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
align 16
lib_init:
mov dword [ mem.alloc ], eax
mov dword [ mem.free ], ebx
mov dword [ mem.realloc ], ecx
mov dword [ dl l.load ], edx
ret
;input:
; ebx = coord x
; ecx = coord y
; edx = pixel color
; edi = pointer to buffer struct
align 4
draw_pixel:
;cmp buf2d_bits,24
;jne @f
bt ebx , 31
jc @ f
bt ecx , 31
jc @ f
cmp ebx , buf2d_w
jge @ f
cmp ecx , buf2d_h
jge @ f
push esi
mov esi , buf2d_w ;size x
imul esi , ecx ;size_x*y
add esi , ebx ;size_x*y+x
lea esi ,[ esi + esi * 2 ] ;(size_x*y+x)*3
add esi , buf2d_data ;ptr+(size_x*y+x)*3
2010-11-02 22:34:57 +03:00
2010-07-30 01:20:45 +04:00
mov word [ esi ], dx ;copy pixel color
ror edx , 16
mov byte [ esi + 2 ], dl
ror edx , 16
pop esi
@ @ :
ret
2010-11-02 22:34:57 +03:00
;input:
; ebx = coord x
; ecx = coord y
; edi = pointer to buffer struct
;output:
; eax = 梥<> <20> <> 窨
; <20> <20> <> <EFBFBD> 砥 <20> 訡<EFBFBD> <E8A8A1> eax = 0xffffffff
align 4
get_pixel_24:
mov eax , 0xffffffff
bt ebx , 31
jc @ f
bt ecx , 31
jc @ f
cmp ebx , buf2d_w
jge @ f
cmp ecx , buf2d_h
jge @ f
push esi
mov esi , buf2d_w ;size x
imul esi , ecx ;size_x*y
add esi , ebx ;size_x*y+x
lea esi ,[ esi + esi * 2 ] ;(size_x*y+x)*3
add esi , buf2d_data ;ptr+(size_x*y+x)*3
xor eax , eax
mov ax , word [ esi ] ;copy pixel color
ror eax , 16
mov al , byte [ esi + 2 ]
ror eax , 16
pop esi
@ @ :
ret
2011-09-22 19:38:57 +04:00
;input:
; ebx = coord x
; ecx = coord y
; edx = pixel color + transparent
; edi = pointer to buffer struct
; t_prop, m_prop - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 樥<EFBFBD> <E6A8A5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 室<EFBFBD> <E5AEA4> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E1ABA5> <EFBFBD> <20> ⥯<EFBFBD> <E2A5AF> <EFBFBD> <20> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD>
align 4
transp_32 dd 0 ;梥<> <20> <> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> 窨 + <20> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD>
align 4
proc draw_pixel_transp , t_prop : dword , m_prop : dword
;cmp buf2d_bits,24
;jne @f
bt ebx , 31
jc @ f
bt ecx , 31
jc @ f
cmp ebx , buf2d_w
jge @ f
cmp ecx , buf2d_h
jge @ f
push eax ebx edx edi esi
mov esi , buf2d_w ;size x
imul esi , ecx ;size_x*y
add esi , ebx ;size_x*y+x
lea esi ,[ esi + esi * 2 ] ;(size_x*y+x)*3
add esi , buf2d_data ;ptr+(size_x*y+x)*3
mov edi , esi ;㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> 梥<> 䮭<>
mov dword [ transp_32 ], edx ;梥<> <20> <> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> 窨
xor edx , edx
mov eax ,[ t_prop ]
shl eax , 8 ;*=256
mov ebx ,[ m_prop ]
div ebx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> . <20> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> 0 <20> <> 255)
bt ax , 8
jnc .over_255
;<3B> <20> <> <EFBFBD> <EFBFBD> . <20> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD> >=256 <20> <> 㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <20> <> 255
mov al , 0xff
.over_255:
mov byte [ transp_32 + 3 ], al ;<3B> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD> <20> <> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> 窨
mov esi , dword transp_32 ;㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> 梥<> <20> <> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> 窨
call combine_colors
pop esi edi edx ebx eax
@ @ :
ret
endp
2010-07-30 01:20:45 +04:00
;ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc buf_create , buf_struc : dword
pushad
mov edi , dword [ buf_struc ]
mov ecx , buf2d_w
mov ebx , buf2d_h
imul ecx , ebx
cmp buf2d_bits , 24
jne @ f
lea ecx ,[ ecx + ecx * 2 ] ; 24 bit = 3
;;;inc ecx ;<3B> <> <EFBFBD> <EFBFBD> ᭮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> -<2D> <> <20> <> <20> <> <EFBFBD> 稫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨 <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4<>
@ @ :
cmp buf2d_bits , 32
jne @ f
shl ecx , 2 ; 32 bit = 4
@ @ :
invoke mem.alloc , ecx
mov buf2d_data , eax
stdcall buf_clear , edi , buf2d_color ;<3B> <> <EFBFBD> <EFBFBD> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䮭<> <E4AEAD> <EFBFBD> <EFBFBD> 梥⮬
popad
ret
endp
;ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ᭮<EFBFBD> <E1ADAE> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> rgb
align 4
proc buf_create_f_img , buf_struc : dword , rgb_data : dword
pushad
mov edi , dword [ buf_struc ]
mov ecx , buf2d_w
mov ebx , buf2d_h
imul ecx , ebx
cmp buf2d_bits , 24
jne @ f
lea ecx ,[ ecx + ecx * 2 ] ; 24 bit = 3
;;;inc ecx ;<3B> <> <EFBFBD> <EFBFBD> ᭮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> -<2D> <> <20> <> <20> <> <EFBFBD> 稫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨 <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4<>
@ @ :
cmp buf2d_bits , 32
jne @ f
shl ecx , 2 ; 32 bit = 4
@ @ :
invoke mem.alloc , ecx
mov buf2d_data , eax
cmp buf2d_bits , 24
jne @ f
cld
mov esi ,[ rgb_data ]
mov edi , eax ;eax=buf2d_data
rep movsb ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
jmp .end_create
@ @ :
stdcall buf_clear , edi , buf2d_color ;<3B> <> <EFBFBD> <EFBFBD> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䮭<> <E4AEAD> <EFBFBD> <EFBFBD> 梥⮬
.end_create:
popad
ret
endp
align 4
proc buf_clear , buf_struc : dword , color : dword ;<3B> <> <EFBFBD> <EFBFBD> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮬
pushad
mov edi , dword [ buf_struc ]
mov ecx , buf2d_w
mov ebx , buf2d_h
imul ecx , ebx
cld
cmp buf2d_bits , 8
jne .end_clear_8
mov edi , buf2d_data
mov al , byte [ color ]
rep stosb
jmp .end_clear_32
.end_clear_8:
cmp buf2d_bits , 24
jne .end_clear_24
mov edi , buf2d_data
mov eax , dword [ color ]
mov ebx , eax
shr ebx , 16
@ @ :
stosw
mov byte [ edi ], bl
inc edi
loop @ b
jmp .end_clear_32
.end_clear_24:
cmp buf2d_bits , 32
jne .end_clear_32
mov edi , buf2d_data
mov eax , dword [ color ]
rep stosd
;jmp .end_clear_32
.end_clear_32:
popad
ret
endp
2010-07-30 21:42:39 +04:00
;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 8 <20> 24 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <E6A2A5> .
;<3B> <> ࠬ<EFBFBD> <E0A0AC> <EFBFBD> opt <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 樥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> :
; BUF2D_OPT_CROP_TOP - <20> <> १<EFBFBD> <E0A5A7> ᢥ<> <E1A2A5> <EFBFBD>
; BUF2D_OPT_CROP_LEFT - <20> <> १<EFBFBD> <E0A5A7> <> <E1ABA5>
; BUF2D_OPT_CROP_BOTTOM - <20> <> १<EFBFBD> <E0A5A7> ᭨<> <E1ADA8>
; BUF2D_OPT_CROP_RIGHT - <20> <> १<EFBFBD> <E0A5A7> <20> <> ࠢ<EFBFBD>
2010-07-30 01:20:45 +04:00
align 4
2010-07-30 21:42:39 +04:00
proc buf_crop_color , buf_struc : dword , color : dword , opt : dword
2010-07-30 01:20:45 +04:00
locals
crop_r dd ?
endl
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .24end_f
bt dword [ opt ], BUF2D_BIT_OPT_CROP_BOTTOM
jae .24no_crop_bottom
mov eax , dword [ color ]
mov edx , eax ;ax = colors - r,g
shr edx , 16 ;dl = color - b
mov ecx , buf2d_h
2010-08-04 15:40:19 +04:00
cmp ecx , 1
jle .24no_crop_bottom ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 01:20:45 +04:00
mov ebx , buf2d_w
imul ecx , ebx
lea esi ,[ ecx + ecx * 2 ] ;esi=3*ecx
add esi , buf2d_data
cld
@ @ :
sub esi , 3
cmp word [ esi ], ax
jne @ f
cmp byte [ esi + 2 ], dl
jne @ f
loop @ b
@ @ :
lea ebx ,[ ebx + ebx * 2 ]
xor edx , edx
mov eax , buf2d_h
imul eax , ebx
add eax , buf2d_data ;eax - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
@ @ :
add esi , ebx
cmp esi , eax
jge @ f
inc edx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப <20> <> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD>
loop @ b
@ @ :
cmp edx , 0
je .24no_crop_bottom
cmp edx , buf2d_h
jge .24no_crop_bottom ;<3B> <> <EFBFBD> -<2D> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⮩ <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
sub buf2d_h , edx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h
imul ecx , ebx ;ecx = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.24no_crop_bottom:
bt dword [ opt ], BUF2D_BIT_OPT_CROP_TOP
jae .24no_crop_top
mov eax , dword [ color ]
mov edx , eax ;ax = colors - r,g
shr edx , 16 ;dl = color - b
mov esi , buf2d_data
mov ecx , buf2d_h
2010-08-04 15:40:19 +04:00
cmp ecx , 1
jle .24no_crop_top ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 01:20:45 +04:00
dec ecx ;<3B> <> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1-<2D> <> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
mov ebx , buf2d_w
imul ecx , ebx
cld
@ @ :
cmp word [ esi ], ax
jne @ f
cmp byte [ esi + 2 ], dl
jne @ f
add esi , 3
loop @ b
@ @ :
lea ebx ,[ ebx + ebx * 2 ]
xor edx , edx
@ @ :
sub esi , ebx
cmp esi , buf2d_data
jl @ f
inc edx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப <20> <> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD>
loop @ b
@ @ :
cmp edx , 0
je .24no_crop_top
xor eax , eax
sub eax , edx
mov ebx , buf2d_h
sub ebx , edx
stdcall buf_offset_h , edi , eax , edx , ebx ;ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> (eax<0)
sub buf2d_h , edx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h
add buf2d_t , dx ;ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <20> <> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப
mov ebx , buf2d_w
imul ecx , ebx
lea ecx ,[ ecx + ecx * 2 ]
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.24no_crop_top:
bt dword [ opt ], BUF2D_BIT_OPT_CROP_RIGHT
jae .24no_crop_right
mov eax , dword [ color ]
mov edx , eax ;ax = colors - r,g
shr edx , 16 ;dl = color - b
mov ebx , buf2d_w
2010-08-04 15:40:19 +04:00
cmp ebx , 1
jle .24no_crop_right ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 01:20:45 +04:00
lea ebx ,[ ebx + ebx * 2 ]
mov esi , ebx
imul esi , buf2d_h
add esi , buf2d_data ;esi - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
mov dword [ crop_r ], 0
cld
2010-07-30 21:42:39 +04:00
.24found_beg_right:
2010-07-30 01:20:45 +04:00
sub esi , 3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
cmp word [ esi ], ax
2010-07-30 21:42:39 +04:00
jne .24found_right
2010-07-30 01:20:45 +04:00
cmp byte [ esi + 2 ], dl
2010-07-30 21:42:39 +04:00
jne .24found_right
2010-07-30 01:20:45 +04:00
sub esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
loop @ b
inc dword [ crop_r ]
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp dword [ crop_r ], ecx
2010-07-30 21:42:39 +04:00
jge .24found_right
2010-07-30 01:20:45 +04:00
sub esi , 3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
add esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
cmp word [ esi ], ax
2010-07-30 21:42:39 +04:00
jne .24found_right
2010-07-30 01:20:45 +04:00
cmp byte [ esi + 2 ], dl
2010-07-30 21:42:39 +04:00
jne .24found_right
2010-07-30 01:20:45 +04:00
loop @ b
inc dword [ crop_r ]
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp dword [ crop_r ], ecx
2010-07-30 21:42:39 +04:00
jl .24found_beg_right
2010-07-30 01:20:45 +04:00
2010-07-30 21:42:39 +04:00
.24found_right:
2010-07-30 01:20:45 +04:00
cmp dword [ crop_r ], 0
je .24no_crop_right
mov ecx , buf2d_w
sub ecx , dword [ crop_r ]
2010-07-30 21:42:39 +04:00
stdcall img_rgb_crop_r , buf2d_data , buf2d_w , ecx , buf2d_h ;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
mov buf2d_w , ecx ;<3B> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , buf2d_h
imul ecx , ebx
lea ecx ,[ ecx + ecx * 2 ]
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.24no_crop_right:
2010-07-30 21:42:39 +04:00
bt dword [ opt ], BUF2D_BIT_OPT_CROP_LEFT
jae .24no_crop_left
mov eax , dword [ color ]
mov edx , eax ;ax = colors - r,g
shr edx , 16 ;dl = color - b
mov ebx , buf2d_w
2010-08-04 15:40:19 +04:00
cmp ebx , 1
jle .24no_crop_left ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 21:42:39 +04:00
lea ebx ,[ ebx + ebx * 2 ]
mov esi , buf2d_data ;esi - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> 箫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
mov dword [ crop_r ], 0
cld
.24found_beg_left:
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
cmp word [ esi ], ax
jne .24found_left
cmp byte [ esi + 2 ], dl
jne .24found_left
add esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
loop @ b
inc dword [ crop_r ]
add esi , 3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠢ<EFBFBD>
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp dword [ crop_r ], ecx
jge .24found_left
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
sub esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
cmp word [ esi ], ax
jne .24found_left
cmp byte [ esi + 2 ], dl
jne .24found_left
loop @ b
inc dword [ crop_r ]
add esi , 3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠢ<EFBFBD>
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp dword [ crop_r ], ecx
jl .24found_beg_left
.24found_left:
cmp dword [ crop_r ], 0
je .24no_crop_left
mov ecx , buf2d_w
sub ecx , dword [ crop_r ]
stdcall img_rgb_crop_l , buf2d_data , buf2d_w , ecx , buf2d_h ;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
mov buf2d_w , ecx ;<3B> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , buf2d_h
imul ecx , ebx
lea ecx ,[ ecx + ecx * 2 ]
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov eax , dword [ crop_r ]
add buf2d_l , ax
.24no_crop_left:
2010-07-30 01:20:45 +04:00
.24end_f:
cmp buf2d_bits , 8
jne .8end_f
bt dword [ opt ], BUF2D_BIT_OPT_CROP_BOTTOM
jae .8no_crop_bottom
mov eax , dword [ color ]
mov esi , buf2d_data
mov ecx , buf2d_h
2010-08-04 15:40:19 +04:00
cmp ecx , 1
jle .8no_crop_bottom ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 01:20:45 +04:00
mov ebx , buf2d_w
imul ecx , ebx
mov esi , ecx
add esi , buf2d_data
cld
@ @ :
dec esi
cmp byte [ esi ], al
jne @ f
loop @ b
@ @ :
xor edx , edx
mov eax , buf2d_h
imul eax , ebx
add eax , buf2d_data ;eax - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
@ @ :
add esi , ebx
cmp esi , eax
jge @ f
inc edx
loop @ b
@ @ :
cmp edx , 0
je .8no_crop_bottom
cmp edx , buf2d_h
jge .8no_crop_bottom ;<3B> <> <EFBFBD> -<2D> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⮩ <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
sub buf2d_h , edx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h
imul ecx , ebx ;ecx = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.8no_crop_bottom:
bt dword [ opt ], BUF2D_BIT_OPT_CROP_TOP
jae .8no_crop_top
mov eax , dword [ color ]
mov esi , buf2d_data
mov ecx , buf2d_h
2010-08-04 15:40:19 +04:00
cmp ecx , 1
jle .8no_crop_top ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 01:20:45 +04:00
dec ecx ;<3B> <> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1-<2D> <> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
mov ebx , buf2d_w
imul ecx , ebx
cld
@ @ :
cmp byte [ esi ], al
jne @ f
inc esi
loop @ b
@ @ :
xor edx , edx
@ @ :
sub esi , ebx
cmp esi , buf2d_data
jl @ f
inc edx
loop @ b
@ @ :
cmp edx , 0
je .8no_crop_top
xor eax , eax
sub eax , edx
mov ebx , buf2d_h
sub ebx , edx
stdcall buf_offset_h , edi , eax , edx , ebx
mov ecx , buf2d_h
sub ecx , edx
mov buf2d_h , ecx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add buf2d_t , dx ;ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <20> <> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப
mov ebx , buf2d_w
imul ecx , ebx
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.8no_crop_top:
bt dword [ opt ], BUF2D_BIT_OPT_CROP_RIGHT
jae .8no_crop_right
mov eax , dword [ color ]
mov ebx , buf2d_w
2010-08-04 15:40:19 +04:00
cmp ebx , 1
jle .8no_crop_right ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 01:20:45 +04:00
mov esi , ebx
imul esi , buf2d_h
add esi , buf2d_data ;esi - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
xor edx , edx
cld
.8found_beg:
dec esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
cmp byte [ esi ], al
jne .8found
sub esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
loop @ b
inc edx
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp edx , ecx
jge .8found
dec esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
add esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
cmp byte [ esi ], al
jne .8found
loop @ b
inc edx
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp edx , ecx
jl .8found_beg
.8found:
cmp edx , 0
je .8no_crop_right
mov ecx , buf2d_w
sub ecx , edx
2010-07-30 21:42:39 +04:00
stdcall img_gray_crop_r , buf2d_data , buf2d_w , ecx , buf2d_h ;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
mov buf2d_w , ecx ;<3B> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , buf2d_h
imul ecx , ebx
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.8no_crop_right:
2010-07-30 21:42:39 +04:00
bt dword [ opt ], BUF2D_BIT_OPT_CROP_LEFT
jae .8no_crop_left
mov eax , dword [ color ]
mov ebx , buf2d_w
2010-08-04 15:40:19 +04:00
cmp ebx , 1
jle .8no_crop_left ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-07-30 21:42:39 +04:00
mov esi , buf2d_data ;esi - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> 箫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
mov edx , 0
cld
.8found_beg_left:
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
cmp word [ esi ], ax
jne .8found_left
add esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
loop @ b
inc edx
inc esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠢ<EFBFBD>
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp edx , ecx
jge .8found_left
mov ecx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 横<> <E6A8AA>
@ @ :
sub esi , ebx ;<3B> <> 룠<EFBFBD> <EBA3A0> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
cmp word [ esi ], ax
jne .8found_left
loop @ b
inc edx
inc esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1-<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠢ<EFBFBD>
mov ecx , buf2d_w
dec ecx ;1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp edx , ecx
jl .8found_beg_left
.8found_left:
cmp edx , 0
je .8no_crop_left
mov ecx , buf2d_w
sub ecx , edx
stdcall img_gray_crop_l , buf2d_data , buf2d_w , ecx , buf2d_h ;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
mov buf2d_w , ecx ;<3B> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , buf2d_h
imul ecx , ebx
invoke mem.realloc , buf2d_data , ecx
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov eax , edx
add buf2d_l , ax
.8no_crop_left:
2010-07-30 01:20:45 +04:00
.8end_f:
popad
ret
endp
2010-07-30 21:42:39 +04:00
;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> 梥⭮<E6A2A5> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
;input:
;data_rgb - pointer to rgb data
;size_w_old - width img in pixels
;size_w_new - new width img in pixels
;size_h - height img in pixels
align 4
2010-07-30 21:42:39 +04:00
proc img_rgb_crop_r , data_rgb : dword , si ze_w_old : dword , si ze_w_new : dword , si ze_h : dword
2010-07-30 01:20:45 +04:00
pushad
mov eax , dword [ si ze_w_old ]
lea eax , dword [ eax + eax * 2 ] ;eax = width(old) * 3(rgb)
mov ebx , dword [ si ze_w_new ]
lea ebx , dword [ ebx + ebx * 2 ] ;ebx = width(new) * 3(rgb)
mov edx , dword [ si ze_h ]
mov edi , dword [ data_rgb ] ;edi - <20> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov esi , edi
add edi , ebx
add esi , eax
cld
@ @ :
dec edx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 稪 <20> <> ⠢<EFBFBD> <E2A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப <20> <> 1
cmp edx , 0
jle @ f
mov ecx , ebx
rep movsb ;<3B> <> ७<EFBFBD> <E0A5AD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> ) <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
add esi , eax ;<3B> <> <EFBFBD> <EFBFBD> 室 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
sub esi , ebx
jmp @ b
@ @ :
popad
ret
endp
2010-07-30 21:42:39 +04:00
;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
;input:
;data_gray - pointer to gray data
;size_w_old - width img in pixels
;size_w_new - new width img in pixels
;size_h - height img in pixels
align 4
2010-07-30 21:42:39 +04:00
proc img_gray_crop_r , data_gray : dword , si ze_w_old : dword , si ze_w_new : dword , si ze_h : dword
2010-07-30 01:20:45 +04:00
pushad
mov eax , dword [ si ze_w_old ]
mov ebx , dword [ si ze_w_new ]
mov edx , dword [ si ze_h ]
mov edi , dword [ data_gray ] ;edi - <20> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov esi , edi
add edi , ebx
add esi , eax
cld
@ @ :
dec edx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 稪 <20> <> ⠢<EFBFBD> <E2A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப <20> <> 1
cmp edx , 0
jle @ f
mov ecx , ebx
rep movsb ;<3B> <> ७<EFBFBD> <E0A5AD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> ) <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
add esi , eax ;<3B> <> <EFBFBD> <EFBFBD> 室 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
sub esi , ebx
jmp @ b
@ @ :
popad
ret
endp
2010-07-30 21:42:39 +04:00
;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> 梥⭮<E6A2A5> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
;input:
;data_rgb - pointer to rgb data
;size_w_old - width img in pixels
;size_w_new - new width img in pixels
;size_h - height img in pixels
align 4
proc img_rgb_crop_l , data_rgb : dword , si ze_w_old : dword , si ze_w_new : dword , si ze_h : dword
pushad
mov edi , dword [ data_rgb ]
mov esi , edi
mov eax , dword [ si ze_w_old ]
mov ebx , dword [ si ze_w_new ]
cmp eax , ebx
jle .end_f ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <20> <EFBFBD> <E1ABAE> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> )
lea eax ,[ eax + eax * 2 ]
lea ebx ,[ ebx + ebx * 2 ]
sub eax , ebx
mov edx , dword [ si ze_h ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
cld
@ @ :
add esi , eax
mov ecx , ebx
rep movsb
dec edx
cmp edx , 0
jg @ b
.end_f:
popad
ret
endp
;<3B> <> १<EFBFBD> <E0A5A7> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
;input:
;data_gray - pointer to gray data
;size_w_old - width img in pixels
;size_w_new - new width img in pixels
;size_h - height img in pixels
align 4
proc img_gray_crop_l , data_gray : dword , si ze_w_old : dword , si ze_w_new : dword , si ze_h : dword
pushad
mov edi , dword [ data_gray ]
mov esi , edi
mov eax , dword [ si ze_w_old ]
mov ebx , dword [ si ze_w_new ]
cmp eax , ebx
jle .end_f ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <20> <EFBFBD> <E1ABAE> <EFBFBD> <20> <> १<EFBFBD> <E0A5A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> )
sub eax , ebx
mov edx , dword [ si ze_h ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
cld
@ @ :
add esi , eax
mov ecx , ebx
rep movsb
dec edx
cmp edx , 0
jg @ b
.end_f:
popad
ret
endp
2010-07-30 01:20:45 +04:00
;hoffs - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> /<2F> <> <EFBFBD> ᪠<EFBFBD> <E1AAA0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
;img_t - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> ன <20> <> 稭<EFBFBD> <E7A8AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
align 4
proc buf_offset_h , buf_struc : dword , hoffs : dword , img_t : dword , img_h : dword ;ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .end_move_24
mov eax ,[ hoffs ]
cmp eax , 0
je .end_move_24
mov ebx , buf2d_w
mov edx , dword [ img_t ]
mov ecx , dword [ img_h ] ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp ecx , buf2d_h
jge .end_f ;<3B> 訡<EFBFBD> 筮<EFBFBD> <20> <EFBFBD> <E1ABAE> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
imul ecx , ebx ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
lea ecx ,[ ecx + ecx * 2 ]
imul ebx , edx
lea ebx ,[ ebx + ebx * 2 ]
mov esi , buf2d_data
add esi , ebx
add edx , eax ;edx = img_t+hoffs (hoffs<0)
mov ebx , buf2d_w
imul ebx , edx
lea ebx ,[ ebx + ebx * 2 ]
mov edi , buf2d_data ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㤠 <20> 㤥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
add edi , ebx
cmp eax , 0
jg .move_down_24
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cld
rep movsb
jmp .end_f
.move_down_24:
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
add esi , ecx
dec esi
add edi , ecx
dec edi
std
rep movsb
jmp .end_f
.end_move_24:
;stdcall print_err,sz_buf2d_offset_h,txt_err_n24b
cmp buf2d_bits , 8
jne .end_move_8
mov eax ,[ hoffs ]
cmp eax , 0
je .end_move_8
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , buf2d_w
mov edx , dword [ img_t ]
mov ecx , dword [ img_h ] ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp ecx , buf2d_h
jge .end_f ;<3B> 訡<EFBFBD> 筮<EFBFBD> <20> <EFBFBD> <E1ABAE> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
imul ecx , ebx ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
imul ebx , edx
mov esi , buf2d_data
add esi , ebx
add edx , eax ;edx = img_t+hoffs (hoffs<0)
mov ebx , buf2d_w
imul ebx , edx
mov edi , buf2d_data ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㤠 <20> 㤥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
add edi , ebx
cmp eax , 0
jg .move_down_8
cld
rep movsb
jmp .end_f
.move_down_8:
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
add esi , ecx
dec esi
add edi , ecx
dec edi
std
rep movsb
jmp .end_f
.end_move_8:
.end_f:
popad
ret
endp
align 4
proc buf_draw_buf , buf_struc : dword
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .error
mov eax , 7
mov ebx , buf2d_data
mov ecx , buf2d_w
ror ecx , 16
mov edx , buf2d_h
mov cx , dx
mov edx , buf2d_size_lt
ror edx , 16
int 0x40
jmp .end_draw_24
.error:
stdcall print_err , sz_buf2d_draw , txt_err_n24b
.end_draw_24:
popad
ret
endp
align 4
proc buf_delete , buf_struc : dword
2011-08-30 15:10:56 +04:00
push eax edi
2010-07-30 01:20:45 +04:00
mov edi , dword [ buf_struc ]
invoke mem.free , buf2d_data
2011-08-30 15:10:56 +04:00
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.24bit:
popad
2010-07-30 01:20:45 +04:00
ret
endp
align 4
proc buf_line_brs , buf_struc : dword , coord_x0 : dword , coord_y0 : dword , coord_x1 : dword , coord_y1 : dword , color : dword
locals
loc_1 dd ?
loc_2 dd ?
napravl db ?
endl
pushad
mov eax , dword [ coord_x1 ]
sub eax , dword [ coord_x0 ]
bt eax , 31
jae @ f
neg eax
inc eax
@ @ :
mov ebx , dword [ coord_y1 ]
sub ebx , dword [ coord_y0 ]
2011-09-22 19:38:57 +04:00
jnz @ f
;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਧ<EFBFBD> <E0A8A7> ⠫쭠<E2A0AB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> y0=y1
stdcall buf_line_h , [ buf_struc ], [ coord_x0 ], [ coord_y0 ], [ coord_x1 ], [ color ]
jmp .coord_end
@ @ :
2010-07-30 01:20:45 +04:00
bt ebx , 31
jae @ f
neg ebx
inc ebx
@ @ :
2011-09-22 19:38:57 +04:00
mov edx , dword [ color ]
2010-07-30 01:20:45 +04:00
mov [ napravl ], byte 0 ;bool steep=false
cmp eax , ebx
jle @ f
mov [ napravl ], byte 1 ;bool steep=true
swap dword [ coord_x0 ], dword [ coord_y0 ] ;swap(x0, y0);
swap dword [ coord_x1 ], dword [ coord_y1 ] ;swap(x1, y1);
@ @ :
mov eax , dword [ coord_y0 ] ;x0
cmp eax , dword [ coord_y1 ] ;if(x0>x1)
jle @ f
swap dword [ coord_y0 ], dword [ coord_y1 ] ;swap(x0, x1);
swap dword [ coord_x0 ], dword [ coord_x1 ] ;swap(y0, y1);
@ @ :
; int deltax esi
; int deltay edi
; int error ebp-6
; int ystep ebp-8
mov eax , dword [ coord_y0 ]
mov esi , dword [ coord_y1 ]
sub esi , eax ;deltax = y1-y0
mov ebx , esi
shr ebx , 1
mov [ loc_1 ], ebx ;error = deltax/2
mov eax , dword [ coord_x0 ]
mov edi , dword [ coord_x1 ]
mov [ loc_2 ], dword - 1 ;ystep = -1
cmp eax , edi ;if (x0<x1) ystep = 1;
jge @ f
mov [ loc_2 ], dword 1 ;ystep = 1
@ @ :
sub edi , eax ;x1-x0
bts edi , 31
jae @ f
neg edi
inc edi
@ @ :
and edi , 0x7fffffff ;deltay = abs(x1-x0)
mov eax , edi
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
jne .coord_end
cmp [ napravl ], 0
jne .coord_yx
mov ebx , dword [ coord_x0 ]
mov ecx , dword [ coord_y0 ]
@ @ : ;for (x=x0 ; x<x1; x++) ;------------------------------------
cmp ecx , dword [ coord_y1 ]
jg @ f ;jge ???
call draw_pixel
sub dword [ loc_1 ], eax ;error -= deltay
cmp dword [ loc_1 ], 0 ;if(error<0)
jge .if0
add ebx ,[ loc_2 ] ;y += ystep
add [ loc_1 ], esi ;error += deltax
.if0:
inc ecx
jmp @ b
@ @ :
jmp .coord_end
.coord_yx:
mov ebx , dword [ coord_y0 ]
mov ecx , dword [ coord_x0 ]
@ @ : ;for (x=x0 ; x<x1; x++) ;------------------------------------
cmp ebx , dword [ coord_y1 ]
jg @ f ;jge ???
call draw_pixel
sub dword [ loc_1 ], eax ;error -= deltay
cmp dword [ loc_1 ], 0 ;if(error<0)
jge .if1
add ecx ,[ loc_2 ] ;y += ystep
add [ loc_1 ], esi ;error += deltax
.if1:
inc ebx
jmp @ b
@ @ :
.coord_end:
popad
ret
endp
2011-09-22 19:38:57 +04:00
;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> ᣫ<> <E1A3AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc buf_line_brs_sm , buf_struc : dword , coord_x0 : dword , coord_y0 : dword , coord_x1 : dword , coord_y1 : dword , color : dword
locals
loc_1 dd ?
loc_2 dd ?
napravl db ?
endl
pushad
mov eax , dword [ coord_x1 ]
sub eax , dword [ coord_x0 ]
bt eax , 31
jae @ f
neg eax
inc eax
@ @ :
mov ebx , dword [ coord_y1 ]
sub ebx , dword [ coord_y0 ]
jnz @ f
;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਧ<EFBFBD> <E0A8A7> ⠫쭠<E2A0AB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> y0=y1
stdcall buf_line_h , [ buf_struc ], [ coord_x0 ], [ coord_y0 ], [ coord_x1 ], [ color ]
jmp .coord_end
@ @ :
bt ebx , 31
jae @ f
neg ebx
inc ebx
@ @ :
mov edx , dword [ color ]
mov [ napravl ], byte 0 ;bool steep=false
cmp eax , ebx
jle @ f
mov [ napravl ], byte 1 ;bool steep=true
swap dword [ coord_x0 ], dword [ coord_y0 ] ;swap(x0, y0);
swap dword [ coord_x1 ], dword [ coord_y1 ] ;swap(x1, y1);
@ @ :
mov eax , dword [ coord_y0 ] ;x0
cmp eax , dword [ coord_y1 ] ;if(x0>x1)
jle @ f
swap dword [ coord_y0 ], dword [ coord_y1 ] ;swap(x0, x1);
swap dword [ coord_x0 ], dword [ coord_x1 ] ;swap(y0, y1);
@ @ :
; int deltax esi
; int deltay edi
; int error ebp-6
; int ystep ebp-8
mov eax , dword [ coord_y0 ]
mov esi , dword [ coord_y1 ]
sub esi , eax ;deltax = y1-y0
mov ebx , esi
shr ebx , 1
mov [ loc_1 ], ebx ;error = deltax/2
mov eax , dword [ coord_x0 ]
mov edi , dword [ coord_x1 ]
mov [ loc_2 ], dword - 1 ;ystep = -1
cmp eax , edi ;if (x0<x1) ystep = 1;
jge @ f
mov [ loc_2 ], dword 1 ;ystep = 1
@ @ :
sub edi , eax ;x1-x0
bts edi , 31
jae @ f
neg edi
inc edi
@ @ :
and edi , 0x7fffffff ;deltay = abs(x1-x0)
mov eax , edi
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
jne .coord_end
cmp [ napravl ], 0
jne .coord_yx
mov ebx , dword [ coord_x0 ]
mov ecx , dword [ coord_y0 ]
@ @ : ;for (x=x0 ; x<x1; x++) ;------------------------------------
cmp ecx , dword [ coord_y1 ]
jg @ f ;jge ???
push eax
mov eax , esi
sub eax ,[ loc_1 ]
stdcall draw_pixel_transp , eax , esi
pop eax
add ebx ,[ loc_2 ]
stdcall draw_pixel_transp , [ loc_1 ], esi
sub ebx ,[ loc_2 ]
sub dword [ loc_1 ], eax ;error -= deltay
cmp dword [ loc_1 ], 0 ;if(error<0)
jge .if0
add ebx ,[ loc_2 ] ;y += ystep
add [ loc_1 ], esi ;error += deltax
.if0:
inc ecx
jmp @ b
@ @ :
jmp .coord_end
.coord_yx:
mov ebx , dword [ coord_y0 ]
mov ecx , dword [ coord_x0 ]
@ @ : ;for (x=x0 ; x<x1; x++) ;------------------------------------
cmp ebx , dword [ coord_y1 ]
jg @ f ;jge ???
push eax
mov eax , esi
sub eax ,[ loc_1 ]
stdcall draw_pixel_transp , eax , esi
pop eax
add ecx ,[ loc_2 ]
stdcall draw_pixel_transp , [ loc_1 ], esi
sub ecx ,[ loc_2 ]
sub dword [ loc_1 ], eax ;error -= deltay
cmp dword [ loc_1 ], 0 ;if(error<0)
jge .if1
add ecx ,[ loc_2 ] ;y += ystep
add [ loc_1 ], esi ;error += deltax
.if1:
inc ebx
jmp @ b
@ @ :
.coord_end:
popad
ret
endp
2010-10-11 16:07:55 +04:00
;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> ਧ<EFBFBD> <E0A8A7> ⠫쭮<E2A0AB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> ⮬<EFBFBD> <20> <> <EFBFBD> <20> <> ࠬ<EFBFBD> <E0A0AC> <EFBFBD> <EFBFBD> coord_y1
2010-10-01 01:07:09 +04:00
align 4
proc buf_line_h , buf_struc : dword , coord_x0 : dword , coord_y0 : dword , coord_x1 : dword , color : dword
pushad
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
2010-11-02 22:34:57 +03:00
jne .end24
2010-10-01 01:07:09 +04:00
mov ecx , dword [ coord_y0 ]
2011-09-13 02:34:41 +04:00
bt ecx , 31
jc .end24 ;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> y0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥫쭠<E2A5AB>
cmp ecx , buf2d_h
jge .end24 ;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> y0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , dword [ coord_x0 ]
2010-10-01 01:07:09 +04:00
mov esi , dword [ coord_x1 ]
2010-12-13 18:21:52 +03:00
cmp ebx , esi
jle @ f
xchg ebx , esi ;<3B> x0 > x1 <20> <> <20> <> <EFBFBD> 塞 <20> <> <EFBFBD> ⠬<EFBFBD> x0 <20> x1
2011-09-13 02:34:41 +04:00
@ @ :
2011-09-14 00:27:29 +04:00
bt ebx , 31
jae @ f
;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> x0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥫쭠<E2A5AB>
xor ebx , ebx
@ @ :
2011-09-13 02:34:41 +04:00
cmp esi , buf2d_w
jl @ f
2011-09-14 00:27:29 +04:00
;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> x0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2011-09-13 02:34:41 +04:00
mov esi , buf2d_w
;dec esi
@ @ :
2011-09-14 00:27:29 +04:00
cmp ebx , esi
jge .end24 ;<3B> x0 >= x1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> x0, x1 <20> <> 室<EFBFBD> <E5AEA4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2011-09-13 02:34:41 +04:00
;<3B> eax <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> 砫<EFBFBD> 1-<2D> <20> <> 窨 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD>
mov eax , buf2d_w ;size x
imul eax , ecx ;size_x*y
add eax , ebx ;size_x*y+x
lea eax ,[ eax + eax * 2 ] ;(size_x*y+x)*3
add eax , buf2d_data ;ptr+(size_x*y+x)*3
2010-12-13 18:21:52 +03:00
2011-09-14 00:27:29 +04:00
mov ecx , esi
sub ecx , ebx ;<3B> ecx <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> 祪 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뢮<EFBFBD> <EBA2AE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2011-09-13 02:34:41 +04:00
mov edx , dword [ color ]
2011-09-14 00:27:29 +04:00
mov ebx , edx ;<3B> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> x0 <20> ebx 㦥 <20> <> <20> 㦭<EFBFBD>
ror edx , 16 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> ॣ<> <E0A5A3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> 3-<2D> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> dl
cld
2010-12-13 18:21:52 +03:00
@ @ : ;横<> <20> <> <20> <> <EFBFBD> x <20> <> x0 <20> <> x1
2011-09-14 00:27:29 +04:00
mov word [ eax ], bx ;copy pixel color
mov byte [ eax + 2 ], dl
add eax , 3
loop @ b
2010-11-02 22:34:57 +03:00
.end24:
2010-10-01 01:07:09 +04:00
popad
ret
endp
align 4
proc buf_rect_by_size , buf_struc : dword , coord_x : dword , coord_y : dword , w : dword , h : dword , color : dword
pushad
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
jne .coord_end
mov eax ,[ coord_x ]
mov ebx ,[ coord_y ]
mov ecx ,[ w ]
2010-10-04 15:51:03 +04:00
cmp ecx , 1
jl .coord_end
2010-10-01 01:07:09 +04:00
add ecx , eax
2010-10-04 15:51:03 +04:00
dec ecx
2010-10-01 01:07:09 +04:00
mov edx ,[ h ]
2010-10-04 15:51:03 +04:00
cmp edx , 1
jl .coord_end
2010-10-01 01:07:09 +04:00
add edx , ebx
2010-10-04 15:51:03 +04:00
dec edx
2010-10-01 01:07:09 +04:00
mov esi , dword [ color ]
stdcall buf_line_h , edi , eax , ebx , ecx , esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> -
stdcall buf_line_brs , edi , eax , ebx , eax , edx , esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> |
stdcall buf_line_h , edi , eax , edx , ecx , esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> -
stdcall buf_line_brs , edi , ecx , ebx , ecx , edx , esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> |
.coord_end:
popad
ret
endp
2010-10-04 15:51:03 +04:00
align 4
proc buf_filled_rect_by_size , buf_struc : dword , coord_x : dword , coord_y : dword , w : dword , h : dword , color : dword
pushad
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
jne .coord_end
mov eax ,[ coord_x ]
mov ebx ,[ coord_y ]
mov edx ,[ w ]
add edx , eax
mov ecx ,[ h ]
2010-12-13 18:21:52 +03:00
cmp ecx , 1 ;<3B> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쭮 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⮩
jl .coord_end ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1-<2D> <> <20> <> <EFBFBD> ᥫ<EFBFBD>
2010-10-04 15:51:03 +04:00
mov esi , dword [ color ]
cld
@ @ :
stdcall buf_line_h , edi , eax , ebx , edx , esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> -
inc ebx
loop @ b
.coord_end:
popad
ret
endp
2010-07-30 01:20:45 +04:00
align 4
proc buf_circle , buf_struc : dword , coord_x : dword , coord_y : dword , r : dword , color : dword
locals
po_x dd ?
po_y dd ?
endl
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .error
mov edx , dword [ color ]
finit
fild dword [ coord_x ]
fild dword [ coord_y ]
fild dword [ r ]
fldz ;px=0
fld st1 ;py=r
fldpi
fmul st0 , st3
fistp dword [ po_x ]
mov esi , dword [ po_x ] ;esi=pi*r
shl esi , 1 ;esi=2*pi*r
;st0 = py
;st1 = px
;st2 = r
;st3 = y
;st4 = x
@ @ :
;Point(px + x, y - py)
fld st1 ;st0=px
fadd st0 , st5 ;st0=px+x
fistp dword [ po_x ]
mov ebx , dword [ po_x ]
fld st3 ;st0=y
fsub st0 , st1 ;st0=y-py
fistp dword [ po_y ]
mov ecx , dword [ po_y ]
call draw_pixel
;px += py/r
fld st0 ;st0=py
fdiv st0 , st3 ;st0=py/r
faddp st2 , st0 ;st3+=st0
;py -= px/r
fld st1 ;st0=px
fdiv st0 , st3 ;st0=px/r
fsubp st1 , st0 ;st2-=st0
dec esi
cmp esi , 0
jge @ b
jmp .exit_fun
.error:
stdcall print_err , sz_buf2d_circle , txt_err_n24b
.exit_fun:
popad
ret
endp
2010-11-02 22:34:57 +03:00
;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> 梥⮬
align 4
proc buf_flood_fill , buf_struc : dword , coord_x : dword , coord_y : dword , mode : dword , color_f : dword , color_b : dword
pushad
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
jne .end24
mov ebx , dword [ coord_x ]
mov ecx , dword [ coord_y ]
mov edx , dword [ color_f ]
mov esi , dword [ color_b ]
cmp dword [ mode ], 1 ;<3B> <20> <> <EFBFBD> <EFBFBD> ᨬ<EFBFBD> <E1A8AC> <EFBFBD> <EFBFBD> <20> <> 'mode' <20> <> ।<EFBFBD> <E0A5A4> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⬮<EFBFBD> <20> 㤥<EFBFBD> <20> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
je @ f
call buf_flood_fill_recurs_0 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> 梥<> <E6A2A5> esi
jmp .end24
@ @ :
call buf_flood_fill_recurs_1 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 騥 梥<> esi
.end24:
popad
ret
endp
;input:
; ebx = coord_x
; ecx = coord_y
; edx = 梥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; esi = 梥<> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> ன <20> 㤥<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; edi = buf_struc
;output:
; eax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
buf_flood_fill_recurs_0:
call get_pixel_24
cmp eax , 0xffffffff ;if error coords
je .end_fun
cmp eax , edx ;<3B> 梥<> <20> <> <EFBFBD> ᥫ<EFBFBD> ᮢ<> <E1AEA2> <EFBFBD> <20> 梥⮬ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⮩ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㦥 <20> 뫠 ᤥ<> <E1A4A5> <EFBFBD> <EFBFBD>
je .end_fun
call draw_pixel
dec ebx
call get_pixel_24
cmp eax , esi
je @ f
call buf_flood_fill_recurs_0
@ @ :
inc ebx
inc ebx
call get_pixel_24
cmp eax , esi
je @ f
call buf_flood_fill_recurs_0
@ @ :
dec ebx
dec ecx
call get_pixel_24
cmp eax , esi
je @ f
call buf_flood_fill_recurs_0
@ @ :
inc ecx
inc ecx
call get_pixel_24
cmp eax , esi
je @ f
call buf_flood_fill_recurs_0
@ @ :
dec ecx
.end_fun:
ret
;input:
; ebx = coord_x
; ecx = coord_y
; edx = 梥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; esi = 梥<> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㤥<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; edi = buf_struc
;output:
; eax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
buf_flood_fill_recurs_1:
call get_pixel_24
cmp eax , 0xffffffff ;if error coords
je .end_fun
cmp eax , edx ;<3B> 梥<> <20> <> <EFBFBD> ᥫ<EFBFBD> ᮢ<> <E1AEA2> <EFBFBD> <20> 梥⮬ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⮩ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㦥 <20> 뫠 ᤥ<> <E1A4A5> <EFBFBD> <EFBFBD>
je .end_fun
cmp eax , esi ;<3B> 梥<> <20> <> <EFBFBD> ᥫ<EFBFBD> <20> <> ᮢ<> <E1AEA2> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮬ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> ४<EFBFBD> <E0A5AA> 頥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jne .end_fun
call draw_pixel
dec ebx
call get_pixel_24
cmp eax , esi
jne @ f
call buf_flood_fill_recurs_1
@ @ :
inc ebx
inc ebx
call get_pixel_24
cmp eax , esi
jne @ f
call buf_flood_fill_recurs_1
@ @ :
dec ebx
dec ecx
call get_pixel_24
cmp eax , esi
jne @ f
call buf_flood_fill_recurs_1
@ @ :
inc ecx
inc ecx
call get_pixel_24
cmp eax , esi
jne @ f
call buf_flood_fill_recurs_1
@ @ :
dec ecx
.end_fun:
ret
2011-03-25 18:57:37 +03:00
;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> 窨
align 4
proc buf_set_pixel , buf_struc : dword , coord_x : dword , coord_y : dword , color : dword
pushad
mov edi ,[ buf_struc ]
cmp buf2d_bits , 24
jne .end24
mov ebx , dword [ coord_x ]
mov ecx , dword [ coord_y ]
mov edx , dword [ color ]
call draw_pixel
.end24:
popad
ret
endp
2010-07-30 01:20:45 +04:00
align 4
proc buf_img_wdiv2 , buf_struc : dword
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .end_draw_24
mov eax , buf2d_w
mov ecx , buf2d_h
imul ecx , eax
stdcall img_rgb24_wdiv2 , buf2d_data , ecx
.end_draw_24:
popad
ret
endp
;input:
;data_rgb - pointer to rgb data
;size - count img pixels (size img data / 3(rgb) )
align 4
proc img_rgb24_wdiv2 data_rgb : dword , si ze : dword
;push eax ebx ecx edx
mov eax , dword [ data_rgb ]
mov ecx , dword [ si ze ] ;ecx = size
lea ecx ,[ ecx + ecx * 2 ]
cld
@ @ : ;<3B> <> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <E6A2A5> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
2010-07-30 21:42:39 +04:00
shr byte [ eax ], 1
inc eax
loop @ b
2010-07-30 01:20:45 +04:00
mov eax , dword [ data_rgb ]
mov ecx , dword [ si ze ] ;ecx = size
shr ecx , 1
@ @ : ;<> <E1ABAE> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮢ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
2010-07-30 21:42:39 +04:00
mov bx , word [ eax + 3 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 梥<> <20> <> ᥤ<EFBFBD> <E1A5A4> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD>
add word [ eax ], bx
mov bl , byte [ eax + 5 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 梥<> <20> <> ᥤ<EFBFBD> <E1A5A4> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD>
add byte [ eax + 2 ], bl
add eax , 6 ;=2*3
loop @ b
2010-07-30 01:20:45 +04:00
mov eax , dword [ data_rgb ]
add eax , 3
mov ebx , eax
add ebx , 3
mov ecx , dword [ si ze ] ;ecx = size
shr ecx , 1
dec ecx ;<3B> <> 譨<EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD>
@ @ : ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨥ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
2010-07-30 21:42:39 +04:00
mov edx , dword [ ebx ]
mov word [ eax ], dx
shr edx , 16
mov byte [ eax + 2 ], dl
add eax , 3
add ebx , 6
loop @ b
2010-07-30 01:20:45 +04:00
;pop edx ecx ebx eax
ret
endp
align 4
proc buf_img_hdiv2 , buf_struc : dword
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .end_draw_24
mov eax , buf2d_w
mov ecx , buf2d_h
imul ecx , eax
stdcall img_rgb24_hdiv2 , buf2d_data , ecx , eax
.end_draw_24:
popad
ret
endp
;input:
;data_rgb - pointer to rgb data
;size - count img pixels (size img data / 3(rgb) )
;size_w - width img in pixels
align 4
proc img_rgb24_hdiv2 , data_rgb : dword , si ze : dword , si ze_w : dword
;pushad
mov eax , dword [ data_rgb ] ;eax =
mov ecx , dword [ si ze ] ;ecx = size
lea ecx ,[ ecx + ecx * 2 ]
cld
@ @ : ;<3B> <> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <E6A2A5> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
shr byte [ eax ], 1
inc eax
loop @ b
mov eax , dword [ data_rgb ] ;eax =
mov edi , dword [ si ze_w ]
lea esi ,[ edi + edi * 2 ] ;esi = width*3(rgb)
mov ebx , esi
add ebx , eax
mov ecx , dword [ si ze ] ;ecx = size
shr ecx , 1
xor edi , edi
@ @ : ;<> <E1ABAE> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮢ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
mov dx , word [ ebx ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 梥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD>
add word [ eax ], dx
mov dl , byte [ ebx + 2 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 梥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD>
add byte [ eax + 2 ], dl
add eax , 3
add ebx , 3
inc edi
cmp edi , dword [ si ze_w ]
jl .old_line
add eax , esi
add ebx , esi
xor edi , edi
.old_line:
loop @ b
mov eax , dword [ data_rgb ] ;eax =
add eax , esi ;esi = width*3(rgb)
mov ebx , esi
add ebx , eax
mov ecx , dword [ si ze ] ;ecx = size
shr ecx , 1
sub ecx , dword [ si ze_w ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
xor edi , edi
@ @ : ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨥ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB>
mov edx , dword [ ebx ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 梥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᥫ<EFBFBD>
mov word [ eax ], dx
shr edx , 16
mov byte [ eax + 2 ], dl
add eax , 3
add ebx , 3
inc edi
cmp edi , dword [ si ze_w ]
jl .old_line_2
add ebx , esi
xor edi , edi
.old_line_2:
loop @ b
;popad
ret
endp
;<3B> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 24-<2D> <> ⭮<EFBFBD> <E2ADAE> <20> 8-<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; spectr - <20> <> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᯥ<> <E1AFA5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 0-ᨭ<> <E1A8AD> , 1-<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , 2-<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc buf_conv_24_to_8 , buf_struc : dword , sp ectr : dword
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .error
mov eax , buf2d_w
mov ecx , buf2d_h
imul ecx , eax
mov esi , ecx
;ebx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ன <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;edx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㤠 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov edx , buf2d_data
mov ebx , edx
cmp [ sp ectr ], 3
jge @ f
add ebx ,[ sp ectr ]
@ @ :
mov al , byte [ ebx ]
mov byte [ edx ], al
add ebx , 3
inc edx
loop @ b
mov buf2d_bits , 8
invoke mem.realloc , buf2d_data , esi ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
jmp .end_conv
.error:
stdcall print_err , sz_buf2d_conv_24_to_8 , txt_err_n24b
.end_conv:
popad
ret
endp
;<3B> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 24-<2D> <> ⭮<EFBFBD> <E2ADAE> <20> 32-<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc buf_conv_24_to_32 , buf_struc : dword , buf_str8 : dword
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .error1
mov ecx , buf2d_w
mov ebx , buf2d_h
imul ebx , ecx
mov ecx , ebx ;ecx = size 8 b
shl ebx , 2 ;ebx = size 32 b
invoke mem.realloc , buf2d_data , ebx ;㢥<> <E3A2A5> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
mov buf2d_data , eax ;<3B> <> <20> <> <EFBFBD> 砩 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov buf2d_bits , 32
mov edx , ebx ;edx = size 32 b
sub ebx , ecx ;ebx = size 24 b
mov eax , ecx
;eax - ࠧ<> <E0A0A7> <EFBFBD> 8 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;ebx - ࠧ<> <E0A0A7> <EFBFBD> 24 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;edx - ࠧ<> <E0A0A7> <EFBFBD> 32 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add ebx , buf2d_data
add edx , buf2d_data
mov edi , dword [ buf_str8 ]
cmp buf2d_bits , 8
jne .error2
add eax , buf2d_data
mov edi , edx
;eax - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 8 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;ebx - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 24 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;edi - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 32 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@ @ :
sub edi , 4 ;<3B> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> <20> <20> <> 砫<EFBFBD> 横<> <E6A8AA> ,
sub ebx , 3 ; <20> <> ⮬<EFBFBD> , <20> <> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
dec eax ; <20> <> <20> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
mov edx , dword [ ebx ]
mov dword [ edi ], edx
mov dl , byte [ eax ]
mov byte [ edi + 3 ], dl
loop @ b
jmp .end_conv
.error1:
stdcall print_err , sz_buf2d_conv_24_to_32 , txt_err_n24b
jmp .end_conv
.error2:
stdcall print_err , sz_buf2d_conv_24_to_32 , txt_err_n8b
.end_conv:
popad
ret
endp
;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_source (24b|32b) <20> buf_destination (24b)
; 㪠<> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_source <20> ⭮<EFBFBD> <E2ADAE> ⥫쭮 buf_destination
; <20> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD>
align 4
proc buf_bit_blt , buf_destination : dword , coord_x : dword , coord_y : dword , buf_source : dword
locals
right_bytes dd ?
endl
pushad
mov edi ,[ buf_source ]
cmp buf2d_bits , 24
je .sou24
cmp buf2d_bits , 32
je .sou32
jmp .copy_end ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-10-07 21:00:40 +04:00
.sou24: ;<3B> <20> <> <EFBFBD> <EFBFBD> 筨<EFBFBD> <E7ADA8> 24 <20> <> ⭠<EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
2010-07-30 01:20:45 +04:00
mov eax , buf2d_w
mov edx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov esi , buf2d_data ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov edi ,[ buf_destination ]
cmp buf2d_bits , 24
jne .copy_end ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-10-07 21:00:40 +04:00
mov ebx ,[ coord_x ] ;<3B> ebx <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <20> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <20> <EFBFBD> ન)
cmp ebx , buf2d_w ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> ਭ<EFBFBD>
jge .copy_end ;<3B> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
mov ebx , buf2d_h ;ebx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ᭮<EFBFBD> <E1ADAE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx ,[ coord_y ]
cmp ecx , ebx
jge .copy_end ;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> 'y' <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add ecx , edx ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cmp ecx , ebx
jle @ f
sub ecx , ebx
sub edx , ecx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
@ @ :
mov ebx , buf2d_w
mov ecx , ebx ;ecx <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> 㥬 <20> <> <EFBFBD> <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> 楫<> <E6A5AB>
imul ecx ,[ coord_y ]
add ecx ,[ coord_x ]
lea ecx ,[ ecx + ecx * 2 ]
add ecx , buf2d_data
sub ebx , eax
mov edi , ecx ;edi 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㤠 <20> 㤥<EFBFBD> <20> ந<EFBFBD> <E0AEA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov [ right_bytes ], 0
mov ecx ,[ coord_x ]
cmp ecx , ebx
jl @ f
sub ecx , ebx
sub eax , ecx ;㪮<> <E3AAAE> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> ப<EFBFBD>
add ebx , ecx ;㤫<> <E3A4AB> <EFBFBD> 塞 <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
lea ecx ,[ ecx + ecx * 2 ] ;ecx - <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
mov [ right_bytes ], ecx
@ @ :
lea eax ,[ eax + eax * 2 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
lea ebx ,[ ebx + ebx * 2 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cld
cmp [ right_bytes ], 0
jg .copy_1
.copy_0: ;<3B> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov ecx , eax
rep movsb
add edi , ebx
dec edx
cmp edx , 0
jg .copy_0
jmp .copy_end
.copy_1: ;<3B> <> <20> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD> )
mov ecx , eax
rep movsb
add edi , ebx
add esi ,[ right_bytes ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
dec edx
cmp edx , 0
jg .copy_1
jmp .copy_end
.sou32: ;<3B> <20> <> <EFBFBD> <EFBFBD> 筨<EFBFBD> <E7ADA8> 32 <20> <> ⭠<EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov eax , buf2d_w
mov edx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov esi , buf2d_data ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov edi ,[ buf_destination ]
cmp buf2d_bits , 24
jne .copy_end ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-10-07 21:00:40 +04:00
mov ebx ,[ coord_x ] ;<3B> ebx <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <20> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <20> <EFBFBD> ન)
cmp ebx , buf2d_w ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> ਭ<EFBFBD>
jge .copy_end ;<3B> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
mov ebx , buf2d_h ;ebx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ᭮<EFBFBD> <E1ADAE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx ,[ coord_y ]
cmp ecx , ebx
jge .copy_end ;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> 'y' <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add ecx , edx ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cmp ecx , ebx
jle @ f
sub ecx , ebx
sub edx , ecx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
@ @ :
mov ebx , buf2d_w
mov ecx , ebx ;ecx <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> 㥬 <20> <> <EFBFBD> <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> 楫<> <E6A5AB>
imul ecx ,[ coord_y ]
add ecx ,[ coord_x ]
lea ecx ,[ ecx + ecx * 2 ]
add ecx , buf2d_data
sub ebx , eax
mov edi , ecx ;edi 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㤠 <20> 㤥<EFBFBD> <20> ந<EFBFBD> <E0AEA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov [ right_bytes ], 0
mov ecx ,[ coord_x ]
cmp ecx , ebx
jl @ f
sub ecx , ebx
sub eax , ecx ;㪮<> <E3AAAE> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> ப<EFBFBD>
add ebx , ecx ;㤫<> <E3A4AB> <EFBFBD> 塞 <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
shl ecx , 2 ;ecx - <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
mov [ right_bytes ], ecx
@ @ :
;eax - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
lea ebx ,[ ebx + ebx * 2 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cld
cmp [ right_bytes ], 0
jg .copy_3
.copy_2: ;<3B> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov ecx , eax
@ @ :
movsw
movsb
inc esi
loop @ b
add edi , ebx
dec edx
cmp edx , 0
jg .copy_2
jmp .copy_end
.copy_3: ;<3B> <> <20> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD> )
mov ecx , eax
@ @ :
movsw
movsb
inc esi
loop @ b
add edi , ebx
add esi ,[ right_bytes ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
dec edx
cmp edx , 0
jg .copy_3
.copy_end:
popad
ret
endp
;input:
; esi = pointer to color1 + transparent
; edi = pointer to background color2
;output:
; [edi] = combine color
align 4
combine_colors:
push ax bx cx dx
mov bx , 0x00ff ;---get transparent---
mov cl , byte [ esi + 3 ] ;pro
xor ch , ch
sub bx , cx ;256-pro
2010-10-11 16:07:55 +04:00
;---blye---
2010-07-30 01:20:45 +04:00
xor ah , ah
2010-10-11 16:07:55 +04:00
mov al , byte [ esi ]
2010-07-30 01:20:45 +04:00
imul ax , bx
xor dh , dh
2010-10-11 16:07:55 +04:00
mov dl , byte [ edi ]
2010-07-30 01:20:45 +04:00
imul dx , cx
add ax , dx
2010-10-11 16:07:55 +04:00
mov byte [ edi ], ah
2010-07-30 01:20:45 +04:00
;---green---
xor ah , ah
mov al , byte [ esi + 1 ]
imul ax , bx
xor dh , dh
mov dl , byte [ edi + 1 ]
imul dx , cx
add ax , dx
mov byte [ edi + 1 ], ah
2010-10-11 16:07:55 +04:00
;---red---
2010-07-30 01:20:45 +04:00
xor ah , ah
2010-10-11 16:07:55 +04:00
mov al , byte [ esi + 2 ]
2010-07-30 01:20:45 +04:00
imul ax , bx
xor dh , dh
2010-10-11 16:07:55 +04:00
mov dl , byte [ edi + 2 ]
2010-07-30 01:20:45 +04:00
imul dx , cx
add ax , dx
2010-10-11 16:07:55 +04:00
mov byte [ edi + 2 ], ah
2010-07-30 01:20:45 +04:00
pop dx cx bx ax
ret
;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_source (32b) <20> buf_destination (24b)
; 㪠<> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_source <20> ⭮<EFBFBD> <E2ADAE> ⥫쭮 buf_destination
; <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <EFBFBD> <E0AEA7> 筮<EFBFBD> <E7ADAE> <EFBFBD>
align 4
proc buf_bit_blt_transp , buf_destination : dword , coord_x : dword , coord_y : dword , buf_source : dword
locals
right_bytes dd ?
endl
pushad
mov edi ,[ buf_source ]
cmp buf2d_bits , 32
jne .copy_end ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov eax , buf2d_w
mov edx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov esi , buf2d_data ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov edi ,[ buf_destination ]
cmp buf2d_bits , 24
jne .copy_end ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx , buf2d_h ;ebx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ᭮<EFBFBD> <E1ADAE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx ,[ coord_y ]
cmp ecx , ebx
jge .copy_end ;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> 'y' <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add ecx , edx ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cmp ecx , ebx
jle @ f
sub ecx , ebx
sub edx , ecx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
@ @ :
mov ebx , buf2d_w
mov ecx , ebx ;ecx <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> 㥬 <20> <> <EFBFBD> <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> 楫<> <E6A5AB>
imul ecx ,[ coord_y ]
add ecx ,[ coord_x ]
lea ecx ,[ ecx + ecx * 2 ]
add ecx , buf2d_data
sub ebx , eax
mov edi , ecx ;edi 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㤠 <20> 㤥<EFBFBD> <20> ந<EFBFBD> <E0AEA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov [ right_bytes ], 0
mov ecx ,[ coord_x ]
cmp ecx , ebx
jl @ f
sub ecx , ebx
sub eax , ecx ;㪮<> <E3AAAE> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> ப<EFBFBD>
add ebx , ecx ;㤫<> <E3A4AB> <EFBFBD> 塞 <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
shl ecx , 2 ;ecx - <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
mov [ right_bytes ], ecx
@ @ :
lea ebx ,[ ebx + ebx * 2 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cld
cmp [ right_bytes ], 0
jg .copy_1
.copy_0: ;<3B> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov ecx , eax
@ @ :
call combine_colors
add edi , 3
add esi , 4
loop @ b
add edi , ebx
dec edx
cmp edx , 0
jg .copy_0
jmp .copy_end
.copy_1: ;<3B> <> <20> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD> )
mov ecx , eax
@ @ :
call combine_colors
add edi , 3
add esi , 4
loop @ b
add edi , ebx
add esi ,[ right_bytes ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
dec edx
cmp edx , 0
jg .copy_1
.copy_end:
popad
ret
endp
;input:
; ebx - color1
; esi = pointer to transparent
; edi = pointer to background color2
;output:
; [edi] = combine color
align 4
combine_colors_2:
push ax ebx cx dx si
mov cl , byte [ esi ] ;pro
xor ch , ch
mov si , 0x00ff ;---get transparent---
sub si , cx ;256-pro
2010-10-11 16:07:55 +04:00
;---blye---
2010-07-30 01:20:45 +04:00
mov al , bl
xor ah , ah
shr ebx , 8
imul ax , si
xor dh , dh
2010-10-11 16:07:55 +04:00
mov dl , byte [ edi ]
2010-07-30 01:20:45 +04:00
imul dx , cx
add ax , dx
2010-10-11 16:07:55 +04:00
mov byte [ edi ], ah
2010-07-30 01:20:45 +04:00
;---green---
mov al , bl
xor ah , ah
shr ebx , 8
imul ax , si
xor dh , dh
mov dl , byte [ edi + 1 ]
imul dx , cx
add ax , dx
mov byte [ edi + 1 ], ah
;---red---
mov al , bl
xor ah , ah
imul ax , si
xor dh , dh
2010-10-11 16:07:55 +04:00
mov dl , byte [ edi + 2 ]
2010-07-30 01:20:45 +04:00
imul dx , cx
add ax , dx
2010-10-11 16:07:55 +04:00
mov byte [ edi + 2 ], ah
2010-07-30 01:20:45 +04:00
pop si dx cx ebx ax
ret
;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_source (8b) <20> buf_destination (24b)
; 㪠<> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_source <20> ⭮<EFBFBD> <E2ADAE> ⥫쭮 buf_destination
align 4
proc buf_bit_blt_alpha , buf_destination : dword , coord_x : dword , coord_y : dword , buf_source : dword , color : dword
locals
right_bytes dd ?
dest_w_bytes dd ? ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ਥ<EFBFBD> <E0A8A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ਭ<EFBFBD> - <20> <> ਭ<EFBFBD> <20> <> ⠢<EFBFBD> 塞<EFBFBD> <EFA5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
endl
pushad
mov edi ,[ buf_source ]
cmp buf2d_bits , 8
jne .error1 ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov eax , buf2d_w
mov edx , buf2d_h ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov esi , buf2d_data ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov edi ,[ buf_destination ]
cmp buf2d_bits , 24
jne .error2 ;<3B> <> ଠ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-10-04 15:51:03 +04:00
mov ebx ,[ coord_x ] ;<3B> ebx <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <20> ⠢<EFBFBD> <E2A0A2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <20> <EFBFBD> ન)
cmp ebx , buf2d_w ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> ਭ<EFBFBD>
jge .copy_end ;<3B> <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
mov ebx , buf2d_h ;ebx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ᭮<EFBFBD> <E1ADAE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx ,[ coord_y ]
cmp ecx , ebx
jge .copy_end ;<3B> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> 'y' <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add ecx , edx ;ecx - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
cmp ecx , ebx
jle @ f
sub ecx , ebx
sub edx , ecx ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
@ @ :
mov ebx , buf2d_w
mov ecx , ebx ;ecx <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> 㥬 <20> <> <EFBFBD> <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> 楫<> <E6A5AB>
imul ecx ,[ coord_y ]
add ecx ,[ coord_x ]
lea ecx ,[ ecx + ecx * 2 ]
add ecx , buf2d_data
sub ebx , eax
mov edi , ecx ;edi 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㤠 <20> 㤥<EFBFBD> <20> ந<EFBFBD> <E0AEA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov [ right_bytes ], 0
mov ecx ,[ coord_x ]
cmp ecx , ebx
jl @ f
sub ecx , ebx
sub eax , ecx ;㪮<> <E3AAAE> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> ப<EFBFBD>
add ebx , ecx ;㤫<> <E3A4AB> <EFBFBD> 塞 <20> <> ப<EFBFBD> <20> <> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;ecx - <20> <> <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD>
mov [ right_bytes ], ecx
@ @ :
lea ebx ,[ ebx + ebx * 2 ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> 1-<2D> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD>
mov [ dest_w_bytes ], ebx
mov ebx ,[ color ]
cld
cmp [ right_bytes ], 0
jg .copy_1
.copy_0: ;<3B> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD>
mov ecx , eax
@ @ :
call combine_colors_2
add edi , 3
inc esi
loop @ b
add edi ,[ dest_w_bytes ]
dec edx
cmp edx , 0
jg .copy_0
jmp .copy_end
.copy_1: ;<3B> <> <20> <> <EFBFBD> <EFBFBD> ⮥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> <> <EFBFBD> <EFBFBD> )
mov ecx , eax
@ @ :
call combine_colors_2
add edi , 3
inc esi
loop @ b
add edi ,[ dest_w_bytes ]
add esi ,[ right_bytes ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뫠<EFBFBD> <EBABA0> <EFBFBD> <20> <> <20> ࠢ<EFBFBD> <E0A0A2> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
dec edx
cmp edx , 0
jg .copy_1
jmp .copy_end
.error1:
stdcall print_err , sz_buf2d_bit_blt_alpha , txt_err_n8b
jmp .copy_end
.error2:
stdcall print_err , sz_buf2d_bit_blt_alpha , txt_err_n24b
.copy_end:
popad
ret
endp
;<3B> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 8-<2D> <> ⭮<EFBFBD> <E2ADAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> 16*16 <20> ࠧ<> <E0A0A7> <EFBFBD> 1*256 ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc buf_convert_text_matrix , buf_struc : dword
locals
tmp_mem dd ?
c1 dw ?
c2 dd ?
c3 dw ?
endl
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 8
jne .error
mov ecx , buf2d_h
mov ebx , ecx
shr ebx , 4 ;<3B> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 16 <20> <> ப <20> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> ⮬<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 2^4
mov edx , buf2d_w
imul ecx , edx ;ecx = size 8 b
invoke mem.alloc , ecx ;<3B> 뤥<EFBFBD> 塞 <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov [ tmp_mem ], eax ;eax - new memory
shr edx , 4 ;<3B> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 16 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> ⮬<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 2^4
mov eax , ebx
imul ebx , edx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> <> 1 ᨬ<> <E1A8AC> <EFBFBD>
;eax = bhe - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㪢<EFBFBD>
;ebx = bwi*bhe - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> ᥫ<EFBFBD> <E1A5AB> <20> 1-<2D> <20> 㪢<EFBFBD>
;edx = bwi - <20> <> ਭ<EFBFBD> <20> 㪢<EFBFBD>
;ecx,esi,edi - <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 横<> <E6A8AA> .c_0
shr buf2d_w , 4
shl buf2d_h , 4 ;<3B> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> 뢠<EFBFBD> <EBA2A0> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cld
mov esi , buf2d_data
mov edi ,[ tmp_mem ]
mov word [ c3 ], 16
.c_3:
mov dword [ c2 ], eax
.c_2:
mov word [ c1 ], 16
.c_1:
mov ecx , edx ;.c_0:
rep movsb
add edi , ebx
sub edi , edx ;edi+=(bwi*bhe-bwi)
dec word [ c1 ]
cmp word [ c1 ], 0
jg .c_1
add edi , edx
shl ebx , 4
sub edi , ebx ;edi-=(16*bwi*bhe-bwi)
shr ebx , 4
dec dword [ c2 ]
cmp dword [ c2 ], 0
jg .c_2
sub edi , ebx
shl ebx , 4
add edi , ebx ;edi+=(15*bwi*bhe)
shr ebx , 4
dec word [ c3 ]
cmp word [ c3 ], 0
jg .c_3
mov edi , dword [ buf_struc ] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ᭮<EFBFBD> <E1ADAE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov edi , buf2d_data
mov esi ,[ tmp_mem ]
mov ecx , ebx
shl ecx , 8
rep movsb
invoke mem.free ,[ tmp_mem ] ;<3B> <> <EFBFBD> ⨬ <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jmp .end_conv
.error:
stdcall print_err , sz_buf2d_convert_text_matrix , txt_err_n8b
.end_conv:
popad
ret
endp
align 4
buf_s_matr buf_2d_header ? ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 쭠<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
align 4
proc buf_draw_text , buf_struc : dword , buf_t_matr : dword , text : dword , coord_x : dword , coord_y : dword , color : dword
locals
buf_t_matr_offs dd ?
endl
pushad
mov edi , dword [ buf_struc ]
cmp buf2d_bits , 24
jne .error2
mov edi , dword [ buf_t_matr ]
cmp buf2d_bits , 8
jne .error1
mov edx , buf2d_data
mov [ buf_t_matr_offs ], edx
mov ecx , BUF_STRUCT_SIZE ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> ⮢<EFBFBD> <E2AEA2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov esi , edi
lea edi ,[ buf_s_matr ]
cld
rep movsb
lea edi ,[ buf_s_matr ]
shr buf2d_h , 8 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> 쭮<EFBFBD> <ECADAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 256, <20> <> <EFBFBD> <20> <> 宦<EFBFBD> <E5AEA6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1-<2D> <> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
mov ebx , buf2d_h ;<3B> <> ६ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
mov ecx , buf2d_w ;<3B> <> ६ <20> <> ਭ<EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
mov eax ,[ coord_x ]
mov esi ,[ text ]
cmp byte [ esi ], 0
je .end_draw ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
@ @ :
xor edx , edx
mov dl , byte [ esi ] ;<3B> <> ६ <20> <> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
imul edx , ebx ;㬭<> <E3ACAD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
imul edx , ecx ;㬭<> <E3ACAD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ਭ<EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
add edx ,[ buf_t_matr_offs ] ;<3B> ਡ<EFBFBD> <E0A8A1> <EFBFBD> 塞 ᬥ饭<E1ACA5> <E9A5AD> 0-<2D> <> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> , <20> . <20> . <20> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> <E7A0A5> <EFBFBD> ᬥ饭<E1ACA5> <E9A5AD> <20> 뢮<EFBFBD> <EBA2AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
mov buf2d_data , edx ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> , <20> ⠢<EFBFBD> <E2A0A2> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 㦭<EFBFBD> <E3A6AD> ᨬ<> <E1A8AC> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> buf_t_matr
stdcall buf_bit_blt_alpha , [ buf_struc ], eax ,[ coord_y ], edi ,[ color ]
add eax , ecx
.new_s:
inc esi
cmp byte [ esi ], 13
jne .no_13
mov eax ,[ coord_x ]
add [ coord_y ], ebx
jmp .new_s
.no_13:
cmp byte [ esi ], 0
jne @ b
jmp .end_draw
.error1:
stdcall print_err , sz_buf2d_draw_text , txt_err_n8b
jmp .end_draw
.error2:
stdcall print_err , sz_buf2d_draw_text , txt_err_n24b
.end_draw:
popad
ret
endp
align 4
proc print_err , fun : dword , mes : dword ;<3B> 뢮<EFBFBD> <EBA2AE> <EFBFBD> ᮮ<> 饭<EFBFBD> <E9A5AD> <20> <> 訡<> <E8A8A1> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⫠<EFBFBD> <E2ABA0> <EFBFBD>
pushad
mov eax , 63
mov ebx , 1
mov esi ,[ fun ]
@ @ :
mov cl , byte [ esi ]
int 0x40
inc esi
cmp byte [ esi ], 0
jne @ b
mov cl , ':'
int 0x40
mov cl , ' '
int 0x40
mov esi ,[ mes ]
@ @ :
mov cl , byte [ esi ]
int 0x40
inc esi
cmp byte [ esi ], 0
jne @ b
popad
ret
endp
;input:
; ebp+8 = p0
; ebp+12 = p1
align 4
line_len4i:
push ebp
mov ebp , esp
finit
fild word [ ebp + 8 ]
fisub word [ ebp + 12 ]
fmul st0 , st0 ;st0=x^2
fild word [ ebp + 10 ]
fisub word [ ebp + 14 ]
fmul st0 , st0 ;st0=y^2
fadd st0 , st1
fsqrt
fstp dword [ ebp + 12 ]
pop ebp
ret 4 ;8
align 4
2010-12-22 20:03:22 +03:00
proc buf_curve_bezier , buffer : dword , coord_p0 : dword , coord_p1 : dword , coord_p2 : dword , color : dword
2010-07-30 01:20:45 +04:00
locals
delt_t dd ?
opr_param dd ?
v_poi_0 dd ?
endl
pushad
;float t, xt,yt;
;for(t=.0;t<1.;t+=.005){
; xt=pow(1.-t,2)*x0+2*t*(1.-t)*x1+pow(t,2)*x2;
; yt=pow(1.-t,2)*y0+2*t*(1.-t)*y1+pow(t,2)*y2;
; dc.SetPixel(xt,yt,255L);
;}
2010-12-22 20:03:22 +03:00
mov edx ,[ color ] ;set curve color
2010-07-30 01:20:45 +04:00
mov edi ,[ buffer ]
xor ebx , ebx
xor ecx , ecx
finit
; calculate delta t
stdcall line_len4i , dword [ coord_p1 ], dword [ coord_p0 ]
fadd dword [ esp ]
add esp , 4 ;pop ...
stdcall line_len4i , dword [ coord_p2 ], dword [ coord_p1 ]
fadd dword [ esp ]
add esp , 4 ;pop ...
fadd st0 , st0 ; len*=2
ftst
fstsw ax
fld1
sahf
jle @ f ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 0
fdiv st0 , st1
@ @ :
fstp dword [ delt_t ]
finit
;fild word[coord_p2+2] ;y2
fild word [ coord_p1 + 2 ] ;y1
fild word [ coord_p0 + 2 ] ;y0
fild word [ coord_p2 ] ;x2
fild word [ coord_p1 ] ;x1
fild word [ coord_p0 ] ;x0
fld dword [ delt_t ]
fldz ;t=.0
@ @ :
fld1
fsub st0 , st1 ;1.-t
fmul st0 , st0 ;pow(1.-t,2)
fmul st0 , st3 ;...*x0
fstp dword [ opr_param ]
fld1
fsub st0 , st1 ;1.-t
fmul st0 , st1 ;(1.-t)*t
fadd st0 , st0
fmul st0 , st4 ;...*x1
mov esi , dword [ opr_param ]
fstp dword [ opr_param ]
fldz
fadd st0 , st1 ;0+t
fmul st0 , st0 ;t*t
fmul st0 , st5 ;...*x2
fadd dword [ opr_param ]
mov dword [ opr_param ], esi
fadd dword [ opr_param ]
fistp word [ v_poi_0 ] ;x
fld1
fsub st0 , st1 ;1.-t
fmul st0 , st0 ;pow(1.-t,2)
fmul st0 , st6 ;...*y0
fstp dword [ opr_param ]
fld1
fsub st0 , st1 ;1.-t
fmul st0 , st1 ;(1.-t)*t
fadd st0 , st0
fmul st0 , st7 ;...*y1
mov esi , dword [ opr_param ]
fstp dword [ opr_param ]
fldz
fadd st0 , st1 ;0+t
fmul st0 , st0 ;t*t
fimul word [ coord_p2 + 2 ] ;...*y2
fadd dword [ opr_param ]
mov dword [ opr_param ], esi
fadd dword [ opr_param ]
fistp word [ v_poi_0 + 2 ] ;y
mov eax , 1
mov bx , word [ v_poi_0 + 2 ]
mov cx , word [ v_poi_0 ]
call draw_pixel
fadd st0 , st1 ;t+dt
fld1
fcomp
fstsw ax
sahf
jae @ b
popad
ret
endp
txt_err_n8b db 'need buffer 8 bit' , 13 , 10 , 0
txt_err_n24b db 'need buffer 24 bit' , 13 , 10 , 0
align 16
EXPORTS:
dd sz_lib_init , lib_init
dd sz_buf2d_create , buf_create
dd sz_buf2d_create_f_img , buf_create_f_img
dd sz_buf2d_clear , buf_clear
dd sz_buf2d_draw , buf_draw_buf
dd sz_buf2d_delete , buf_delete
2011-08-30 15:10:56 +04:00
dd sz_buf2d_resize , buf_resize
2010-07-30 01:20:45 +04:00
dd sz_buf2d_line , buf_line_brs
2011-09-22 19:38:57 +04:00
dd sz_buf2d_line_sm , buf_line_brs_sm
2010-10-01 01:07:09 +04:00
dd sz_buf2d_rect_by_size , buf_rect_by_size
2010-10-04 15:51:03 +04:00
dd sz_buf2d_filled_rect_by_size , buf_filled_rect_by_size
2010-07-30 01:20:45 +04:00
dd sz_buf2d_circle , buf_circle
dd sz_buf2d_img_hdiv2 , buf_img_hdiv2
dd sz_buf2d_img_wdiv2 , buf_img_wdiv2
dd sz_buf2d_conv_24_to_8 , buf_conv_24_to_8
dd sz_buf2d_conv_24_to_32 , buf_conv_24_to_32
dd sz_buf2d_bit_blt , buf_bit_blt
dd sz_buf2d_bit_blt_transp , buf_bit_blt_transp
dd sz_buf2d_bit_blt_alpha , buf_bit_blt_alpha
2010-12-22 20:03:22 +03:00
dd sz_buf2d_curve_bezier , buf_curve_bezier
2010-07-30 01:20:45 +04:00
dd sz_buf2d_convert_text_matrix , buf_convert_text_matrix
dd sz_buf2d_draw_text , buf_draw_text
dd sz_buf2d_crop_color , buf_crop_color
dd sz_buf2d_offset_h , buf_offset_h
2010-11-02 22:34:57 +03:00
dd sz_buf2d_flood_fill , buf_flood_fill
2011-03-25 18:57:37 +03:00
dd sz_buf2d_set_pixel , buf_set_pixel
2010-07-30 01:20:45 +04:00
dd 0 , 0
sz_lib_init db 'lib_init' , 0
sz_buf2d_create db 'buf2d_create' , 0
sz_buf2d_create_f_img db 'buf2d_create_f_img' , 0
sz_buf2d_clear db 'buf2d_clear' , 0 ;<3B> <> <EFBFBD> <EFBFBD> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮬
sz_buf2d_draw db 'buf2d_draw' , 0
sz_buf2d_delete db 'buf2d_delete' , 0
2011-08-30 15:10:56 +04:00
sz_buf2d_resize db 'buf2d_resize' , 0
2010-07-30 01:20:45 +04:00
sz_buf2d_line db 'buf2d_line' , 0 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2011-09-22 19:38:57 +04:00
sz_buf2d_line_sm db 'buf2d_line_sm' , 0 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> ᣫ<> <E1A3AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2010-10-04 15:51:03 +04:00
sz_buf2d_rect_by_size db 'buf2d_rect_by_size' , 0 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> ࠬ<> <E0A0AC> <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> <ECADA8> , 2-<2D> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size' , 0 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⮣<EFBFBD> <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> <ECADA8> , 2-<2D> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
2010-07-30 01:20:45 +04:00
sz_buf2d_circle db 'buf2d_circle' , 0 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㦭<EFBFBD> <E3A6AD> <EFBFBD> <EFBFBD>
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2' , 0 ;ᦠ⨥ <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 2 ࠧ<> (ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2' , 0 ;ᦠ⨥ <20> <> <EFBFBD> <EFBFBD> ࠦ<EFBFBD> <E0A0A6> <EFBFBD> <EFBFBD> <20> <> <20> <> ਭ<EFBFBD> <20> 2 ࠧ<> (ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8' , 0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32' , 0
sz_buf2d_bit_blt db 'buf2d_bit_blt' , 0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp' , 0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha' , 0
2010-12-22 20:03:22 +03:00
sz_buf2d_curve_bezier db 'buf2d_curve_bezier' , 0
2010-07-30 01:20:45 +04:00
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix' , 0
sz_buf2d_draw_text db 'buf2d_draw_text' , 0
sz_buf2d_crop_color db 'buf2d_crop_color' , 0
sz_buf2d_offset_h db 'buf2d_offset_h' , 0
2010-11-02 22:34:57 +03:00
sz_buf2d_flood_fill db 'buf2d_flood_fill' , 0
2011-03-25 18:57:37 +03:00
sz_buf2d_set_pixel db 'buf2d_set_pixel' , 0
2010-11-02 22:34:57 +03:00