0,0 → 1,1871 |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
|
include '../../../../macros.inc' |
include '../../../../proc32.inc' |
|
;----------------------------------------------------------------------------- |
mem.alloc dd ? ;äãªæ¨ï ¤«ï ¢ë¤¥«¥¨ï ¯ ¬ï⨠|
mem.free dd ? ;äãªæ¨ï ¤«ï ®á¢®¡®¦¤¥¨ï ¯ ¬ï⨠|
mem.realloc dd ? ;äãªæ¨ï ¤«ï ¯¥à¥à á¯à¥¤¥«¥¨ï ¯ ¬ï⨠|
dll.load dd ? |
|
BUF_STRUCT_SIZE equ 21 |
buf2d_data equ dword[edi] ;¤ ë¥ ¡ãä¥à ¨§®¡à ¦¥¨ï |
buf2d_w equ dword[edi+8] ;è¨à¨ ¡ãä¥à |
buf2d_h equ dword[edi+12] ;¢ëá®â ¡ãä¥à |
buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã |
buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢ ¨ á¯à ¢ ¤«ï ¡ãä¥à |
buf2d_color equ dword[edi+16] ;梥â ä® ¡ãä¥à |
buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥¨ï |
|
struct 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 |
} |
|
;ä« £¨, ¤«ï äãªæ¨¨ ®¡à¥§ ¨ï ¡ãä¥à |
BUF2D_OPT_CROP_TOP equ 1 ;®¡à¥§ª ᢥàåã |
BUF2D_OPT_CROP_LEFT equ 2 ;®¡à¥§ª á«¥¢ |
BUF2D_OPT_CROP_BOTTOM equ 4 ;®¡à¥§ª ᨧã |
BUF2D_OPT_CROP_RIGHT equ 8 ;®¡à¥§ª á¯à ¢ |
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 = 㪠§ ⥫ì äãªæ¨î ¢ë¤¥«¥¨ï ¯ ¬ï⨠|
; ebx = ... ®á¢®¡®¦¤¥¨ï ¯ ¬ï⨠|
; ecx = ... ¯¥à¥à á¯à¥¤¥«¥¨ï ¯ ¬ï⨠|
; edx = ... § £à㧪¨ ¡¨¡«¨®â¥ª¨ (¯®ª ¥ ¨á¯®«ì§ã¥âáï) |
align 16 |
lib_init: |
mov dword[mem.alloc], eax |
mov dword[mem.free], ebx |
mov dword[mem.realloc], ecx |
mov dword[dll.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 |
|
mov word[esi],dx ;copy pixel color |
ror edx,16 |
mov byte[esi+2],dl |
ror edx,16 |
pop esi |
@@: |
ret |
;endp |
|
;ᮧ¤ ¨¥ ¡ãä¥à |
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 ;§ ¯ ᮩ ¡ ©â ¢ ª®æ¥ ¡ãä¥à , çâ®-¡ë ¥ £«î稫¨ ¥ª®â®àë¥ äãªæ¨¨ ¨§®¡à ¦¥¨ïå ªà âëå 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 ;®ç¨á⪠¡ãä¥à ä®®¢ë¬ 梥⮬ |
popad |
ret |
endp |
|
;ᮧ¤ ¨¥ ¡ãä¥à ®á®¢¥ ¨§®¡à ¦¥¨ï 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 ;§ ¯ ᮩ ¡ ©â ¢ ª®æ¥ ¡ãä¥à , çâ®-¡ë ¥ £«î稫¨ ¥ª®â®àë¥ äãªæ¨¨ ¨§®¡à ¦¥¨ïå ªà âëå 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 ;ª®¯¨à㥬 ¡¨âë ¨§®¡à ¦¥¨ï ¢ ¡ãä¥à |
jmp .end_create |
@@: |
stdcall buf_clear,edi,buf2d_color ;®ç¨á⪠¡ãä¥à ä®®¢ë¬ 梥⮬ |
.end_create: |
popad |
ret |
endp |
|
align 4 |
proc buf_clear, buf_struc:dword, color:dword ;®ç¨á⪠¡ãä¥à § ¤ ë¬ æ¢¥â®¬ |
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 |
|
align 4 |
proc buf_crop_color, buf_struc:dword, color:dword, opt:dword ;®¡à¥§ª ¡ãä¥à ¯® § ¤ ®¬ã 梥⮬ 梥âã |
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 |
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 - 㪠§ â¥«ì ª®¥æ ¡ãä¥à ¨§®¡à ¦¥¨ï |
@@: |
add esi,ebx |
cmp esi,eax |
jge @f |
inc edx ;¢ëç¨á«ï¥¬ ç¨á«® ¯®«ëå áâப ¤«ï ®¡à¥§ ¨ï |
loop @b |
@@: |
cmp edx,0 |
je .24no_crop_bottom |
cmp edx,buf2d_h |
jge .24no_crop_bottom ;çâ®-¡ë ¥ ¯®«ãç¨âì ¯ãá⮩ ¡ãä¥à |
sub buf2d_h,edx ;㬥ìè ¥¬ ¢ëá®âã ¡ãä¥à |
mov ecx,buf2d_h |
imul ecx,ebx ;ecx = ®¢ë© à §¬¥à ¨§®¡à ¦¥¨ï |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.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 |
dec ecx ;¯à¨ ®¡à¥§ ¨¨ ¤®«¦ ®áâ âìáï ¬¨¨¬ã¬ 1- áâப ¯¨ªá¥«¥© |
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 ;¢ëç¨á«ï¥¬ ç¨á«® ¯®«ëå áâப ¤«ï ®¡à¥§ ¨ï |
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 ;ᤢ¨£ ¥¬ ¨§®¡à ¦¥¨¥ ¢ ¡ãä¥à¥ ¢¢¥àå (eax<0) |
sub buf2d_h,edx ;㬥ìè ¥¬ ¢ëá®âã ¡ãä¥à |
mov ecx,buf2d_h |
add buf2d_t,dx ;ᤢ¨£ ¥¬ ®âáâ㯠¢¨§, ç¨á«® ®¡à¥§ ëå áâப |
mov ebx,buf2d_w |
imul ecx,ebx |
lea ecx,[ecx+ecx*2] |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.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 |
lea ebx,[ebx+ebx*2] |
mov esi,ebx |
imul esi,buf2d_h |
add esi,buf2d_data ;esi - 㪠§ â¥«ì ª®¥æ ¡ãä¥à ¨§®¡à ¦¥¨ï |
mov dword[crop_r],0 |
cld |
.found_beg: |
sub esi,3 ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢«¥¢® |
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
cmp word[esi],ax |
jne .found |
cmp byte[esi+2],dl |
jne .found |
sub esi,ebx ;¯àë£ ¥¬ ¢¥àåîî áâபã |
loop @b |
inc dword[crop_r] |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp dword[crop_r],ecx |
jge .found |
|
sub esi,3 ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢«¥¢® |
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
add esi,ebx ;¯àë£ ¥¬ ¨¦îî áâபã |
cmp word[esi],ax |
jne .found |
cmp byte[esi+2],dl |
jne .found |
loop @b |
inc dword[crop_r] |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp dword[crop_r],ecx |
jl .found_beg |
|
.found: |
cmp dword[crop_r],0 |
je .24no_crop_right |
mov ecx,buf2d_w |
sub ecx,dword[crop_r] |
stdcall img_rgb_wcrop, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
mov buf2d_w,ecx ;áâ ¢¨¬ ®¢ãî è¨à¨ã ¤«ï ¡ãä¥à |
mov ebx,buf2d_h |
imul ecx,ebx |
lea ecx,[ecx+ecx*2] |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.24no_crop_right: |
|
.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 |
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 - 㪠§ â¥«ì ª®¥æ ¡ãä¥à ¨§®¡à ¦¥¨ï |
@@: |
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 ;çâ®-¡ë ¥ ¯®«ãç¨âì ¯ãá⮩ ¡ãä¥à |
sub buf2d_h,edx ;㬥ìè ¥¬ ¢ëá®âã ¡ãä¥à |
mov ecx,buf2d_h |
imul ecx,ebx ;ecx = ®¢ë© à §¬¥à ¨§®¡à ¦¥¨ï |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.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 |
dec ecx ;¯à¨ ®¡à¥§ ¨¨ ¤®«¦ ®áâ âìáï ¬¨¨¬ã¬ 1- áâப ¯¨ªá¥«¥© |
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 ;㬥ìè ¥¬ ¢ëá®âã ¡ãä¥à |
add buf2d_t,dx ;ᤢ¨£ ¥¬ ®âáâ㯠¢¨§, ç¨á«® ®¡à¥§ ëå áâப |
mov ebx,buf2d_w |
imul ecx,ebx |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.8no_crop_top: |
|
bt dword[opt],BUF2D_BIT_OPT_CROP_RIGHT |
jae .8no_crop_right |
mov eax,dword[color] |
mov ebx,buf2d_w |
mov esi,ebx |
imul esi,buf2d_h |
add esi,buf2d_data ;esi - 㪠§ â¥«ì ª®¥æ ¡ãä¥à ¨§®¡à ¦¥¨ï |
xor edx,edx |
cld |
|
.8found_beg: |
dec esi ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢«¥¢® |
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
cmp byte[esi],al |
jne .8found |
sub esi,ebx ;¯àë£ ¥¬ ¢¥àåîî áâபã |
loop @b |
inc edx |
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp edx,ecx |
jge .8found |
|
dec esi ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢«¥¢® |
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
add esi,ebx ;¯àë£ ¥¬ ¨¦îî áâபã |
cmp byte[esi],al |
jne .8found |
loop @b |
inc edx |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp edx,ecx |
jl .8found_beg |
|
.8found: |
cmp edx,0 |
je .8no_crop_right |
mov ecx,buf2d_w |
sub ecx,edx |
stdcall img_gray_wcrop, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
mov buf2d_w,ecx ;áâ ¢¨¬ ®¢ãî è¨à¨ã ¤«ï ¡ãä¥à |
mov ebx,buf2d_h |
imul ecx,ebx |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.8no_crop_right: |
|
.8end_f: |
|
popad |
ret |
endp |
|
;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_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
pushad |
mov eax, dword[size_w_old] |
lea eax, dword[eax+eax*2] ;eax = width(old) * 3(rgb) |
mov ebx, dword[size_w_new] |
lea ebx, dword[ebx+ebx*2] ;ebx = width(new) * 3(rgb) |
mov edx, dword[size_h] |
mov edi, dword[data_rgb] ;edi - ¯®«ãç ¥â ¤ ë¥ |
mov esi, edi |
add edi, ebx |
add esi, eax |
cld |
@@: |
dec edx ;㬥ìè ¥¬ áç¥â稪 ®áâ ¢è¨åáï áâப 1 |
cmp edx,0 |
jle @f |
mov ecx, ebx |
rep movsb ;¯¥à¥®á (ª®¯¨à®¢ ¨¥) áâப¨ ¯¨ªá¥«¥© |
add esi,eax ;¯¥à¥å®¤ ®¢ãî áâà®çªã ¨§®¡à ¦¥¨ï |
sub esi,ebx |
jmp @b |
@@: |
popad |
ret |
endp |
|
;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_wcrop, data_gray:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
pushad |
mov eax, dword[size_w_old] |
mov ebx, dword[size_w_new] |
mov edx, dword[size_h] |
mov edi, dword[data_gray] ;edi - ¯®«ãç ¥â ¤ ë¥ |
mov esi, edi |
add edi, ebx |
add esi, eax |
cld |
@@: |
dec edx ;㬥ìè ¥¬ áç¥â稪 ®áâ ¢è¨åáï áâப 1 |
cmp edx,0 |
jle @f |
mov ecx, ebx |
rep movsb ;¯¥à¥®á (ª®¯¨à®¢ ¨¥) áâப¨ ¯¨ªá¥«¥© |
add esi,eax ;¯¥à¥å®¤ ®¢ãî áâà®çªã ¨§®¡à ¦¥¨ï |
sub esi,ebx |
jmp @b |
@@: |
popad |
ret |
endp |
|
;hoffs - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ª®âàë¥ ¯®¤¨¬ ¥âáï/®¯ã᪠¥âáï ¨§®¡à ¦¥¨¥ |
;img_t - ¢ëá®â , á ª®â®à®© ç¨ ¥âáï ¤¢¨£ îé ïáï ç áâì ¨§®¡à ¦¥¨ï |
align 4 |
proc buf_offset_h, buf_struc:dword, hoffs:dword, img_t:dword, img_h:dword ;ᤢ¨£ ¥â ¨§®¡à ¦¥¨¥ ¯® ¢ëá®â¥ |
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 - ¢ëá®â ᤢ¨£ ¥¬ëå ¤ ëå |
cmp ecx,buf2d_h |
jge .end_f ;®è¨¡®ç®¥ ãá«®¢¨¥, ¢ëá®â ¨§®¡à ¦¥¨ï ¬¥ìè¥ ç¥¬ ¢ëá®â ᤢ¨£ ¥¬®£® ¨§®¡à ¦¥¨ï |
imul ecx,ebx ;ecx - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ¢ ᤢ¨£ ¥¬ëå ¤ ëå |
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 ;¯®§¨æ¨ï, ªã¤ ¡ã¤¥â ¤¢¨£ âìáï ¨§®¡à ¦¥¨¥ |
add edi,ebx |
|
cmp eax,0 |
jg .move_down_24 |
;¤¢¨£ ¥¬ ¨§®¡à ¦¥¨¥ ¢¢¥àå |
cld |
rep movsb |
jmp .end_f |
.move_down_24: |
;¤¢¨£ ¥¬ ¨§®¡à ¦¥¨¥ ¢¨§ |
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 |
;¤¢¨£ ¥¬ ¨§®¡à ¦¥¨¥ ¢¢¥àå |
mov ebx,buf2d_w |
mov edx,dword[img_t] |
mov ecx,dword[img_h] ;ecx - ¢ëá®â ᤢ¨£ ¥¬ëå ¤ ëå |
cmp ecx,buf2d_h |
jge .end_f ;®è¨¡®ç®¥ ãá«®¢¨¥, ¢ëá®â ¨§®¡à ¦¥¨ï ¬¥ìè¥ ç¥¬ ¢ëá®â ᤢ¨£ ¥¬®£® ¨§®¡à ¦¥¨ï |
imul ecx,ebx ;ecx - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ¢ ᤢ¨£ ¥¬ëå ¤ ëå |
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 ;¯®§¨æ¨ï, ªã¤ ¡ã¤¥â ¤¢¨£ âìáï ¨§®¡à ¦¥¨¥ |
add edi,ebx |
|
cmp eax,0 |
jg .move_down_8 |
cld |
rep movsb |
jmp .end_f |
.move_down_8: |
;¤¢¨£ ¥¬ ¨§®¡à ¦¥¨¥ ¢¨§ |
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 |
push edi |
mov edi,dword[buf_struc] |
invoke mem.free,buf2d_data |
pop edi |
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 edx,dword[color] |
|
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] |
bt ebx,31 |
jae @f |
neg ebx |
inc ebx |
@@: |
|
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 |
|
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 |
|
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, size:dword |
;push eax ebx ecx edx |
mov eax,dword[data_rgb] |
mov ecx,dword[size] ;ecx = size |
lea ecx,[ecx+ecx*2] |
cld |
@@: ;§ ⥬¥¨¥ 梥⠯¨ªá¥«¥© |
shr byte[eax],1 |
inc eax |
loop @b |
|
mov eax,dword[data_rgb] |
mov ecx,dword[size] ;ecx = size |
shr ecx,1 |
@@: ;á«®¦¥¨¥ 梥⮢ ¯¨ªá¥«¥© |
mov bx,word[eax+3] ;ª®¯¨à㥬 梥â á®á¥¤¥£® ¯¨ªá¥«ï |
add word[eax],bx |
mov bl,byte[eax+5] ;ª®¯¨à㥬 梥â á®á¥¤¥£® ¯¨ªá¥«ï |
add byte[eax+2],bl |
add eax,6 ;=2*3 |
loop @b |
|
mov eax,dword[data_rgb] |
add eax,3 |
mov ebx,eax |
add ebx,3 |
mov ecx,dword[size] ;ecx = size |
shr ecx,1 |
dec ecx ;«¨è¨© ¯¨ªá¥«ì |
@@: ;¯®¤¦ ⨥ ¯¨ªá¥«¥© |
mov edx,dword[ebx] |
mov word[eax],dx |
shr edx,16 |
mov byte[eax+2],dl |
|
add eax,3 |
add ebx,6 |
loop @b |
;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, size:dword, size_w:dword |
;pushad |
|
mov eax,dword[data_rgb] ;eax = |
mov ecx,dword[size] ;ecx = size |
lea ecx,[ecx+ecx*2] |
cld |
@@: ;§ ⥬¥¨¥ 梥⠯¨ªá¥«¥© |
shr byte[eax],1 |
inc eax |
loop @b |
|
mov eax,dword[data_rgb] ;eax = |
mov edi,dword[size_w] |
lea esi,[edi+edi*2] ;esi = width*3(rgb) |
mov ebx,esi |
add ebx,eax |
mov ecx,dword[size] ;ecx = size |
shr ecx,1 |
xor edi,edi |
@@: ;á«®¦¥¨¥ 梥⮢ ¯¨ªá¥«¥© |
mov dx,word[ebx] ;ª®¯¨à㥬 梥⠨¦¥£® ¯¨ªá¥«ï |
add word[eax],dx |
mov dl,byte[ebx+2] ;ª®¯¨à㥬 梥⠨¦¥£® ¯¨ªá¥«ï |
add byte[eax+2],dl |
|
add eax,3 |
add ebx,3 |
inc edi |
cmp edi,dword[size_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[size] ;ecx = size |
shr ecx,1 |
sub ecx,dword[size_w] ;«¨èïï áâப ¯¨ªá¥«¥© |
xor edi,edi |
@@: ;¯®¤¦ ⨥ ¯¨ªá¥«¥© |
mov edx,dword[ebx] ;ª®¯¨à㥬 梥⠨¦¥£® ¯¨ªá¥«ï |
mov word[eax],dx |
shr edx,16 |
mov byte[eax+2],dl |
|
add eax,3 |
add ebx,3 |
inc edi |
cmp edi,dword[size_w] |
jl .old_line_2 |
add ebx,esi |
xor edi,edi |
.old_line_2: |
loop @b |
|
;popad |
ret |
endp |
|
;¯à¥®¡à §®¢ ¨¥ ¡ãä¥à ¨§ 24-¡¨â®£® ¢ 8-¡¨âë© |
; spectr - ®¯à¥¤¥«ï¥â ª ª®© ᯥªâà ¡à âì ¯à¨ ¯à¥®¡à §®¢ ¨¨ 0-ᨨ©, 1-§¥«¥ë©, 2-ªà áë© |
align 4 |
proc buf_conv_24_to_8, buf_struc:dword, spectr: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 - ¯ ¬ïâì ¨§ ª®â®à®© ª®¯¨àã¥âáï |
;edx - ¯ ¬ïâì ªã¤ ª®¯¨àã¥âáï |
mov edx,buf2d_data |
mov ebx,edx |
cmp [spectr],3 |
jge @f |
add ebx,[spectr] |
@@: |
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 ;㬥ìè ¥¬ ¯ ¬ïâì § ¨¬ ¥¬ãî ¡ãä¥à®¬ |
jmp .end_conv |
.error: |
stdcall print_err,sz_buf2d_conv_24_to_8,txt_err_n24b |
.end_conv: |
popad |
ret |
endp |
|
;¯à¥®¡à §®¢ ¨¥ ¡ãä¥à ¨§ 24-¡¨â®£® ¢ 32-¡¨âë© |
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 ;㢥«¨ç¨¢ ¥¬ ¯ ¬ïâì § ¨¬ ¥¬ãî ¡ãä¥à®¬ |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
mov buf2d_bits,32 |
mov edx,ebx ;edx = size 32 b |
sub ebx,ecx ;ebx = size 24 b |
mov eax,ecx |
;eax - à §¬¥à 8 ¡¨âëå ¤ ëå |
;ebx - à §¬¥à 24 ¡¨âëå ¤ ëå |
;edx - à §¬¥à 32 ¡¨âëå ¤ ëå |
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 - 㪠§ â¥«ì ª®¥æ 8 ¡¨âëå ¤ ëå |
;ebx - 㪠§ â¥«ì ª®¥æ 24 ¡¨âëå ¤ ëå |
;edi - 㪠§ â¥«ì ª®¥æ 32 ¡¨âëå ¤ ëå |
@@: |
sub edi,4 ;®â¨¬ ¥¬ ¢ ç «¥ 横« , |
sub ebx,3 ; ¯®â®¬ã, ç⮠㪠§ ⥫¨ áâ®ïâ |
dec eax ; § ¯à¥¤¥« ¬¨ ¡ãä¥à®¢ |
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 |
|
;äãªæ¨ï ª®¯¨àã¥â ¨§®¡à ¦¥¨¥ ¨§ ¡ãä¥à buf_source (24b|32b) ¢ buf_destination (24b) |
; 㪠§ë¢ îâáï ª®®à¤¨ âë ¢áâ ¢ª¨ ¡ãä¥à buf_source ®â®á¨â¥«ì® buf_destination |
; ¯à®§à ç®áâì ¯à¨ ª®¯¨à®¢ ¨¨ ¥ ãç¨âë¢ ¥âáï |
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 ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
|
.sou24: ;¢ ¨áâ®ç¨ª¥ 32 ¡¨â ï ª à⨪ |
mov eax,buf2d_w |
mov edx,buf2d_h ;¢ëá®â ª®¯¨à㥬®© ª à⨪¨ |
mov esi,buf2d_data ;¤ ë¥ ª®¯¨à㥬®© ª à⨪¨ |
|
mov edi,[buf_destination] |
cmp buf2d_bits,24 |
jne .copy_end ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov ebx,buf2d_h ;ebx - ¢ëá®â ®á®¢®£® ¡ãä¥à |
mov ecx,[coord_y] |
cmp ecx,ebx |
jge .copy_end ;¥á«¨ ª®®à¤¨ â 'y' ¡®«ìè¥ ¢ëá®âë ¡ãä¥à |
add ecx,edx ;ecx - ¨¦ïï ª®®à¤¨ â ª®¯¨à㥬®© ª à⨪¨ |
cmp ecx,ebx |
jle @f |
sub ecx,ebx |
sub edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨, ¢ á«ãç¥ ª®£¤ ® ¢ë« §¨â § ¨¦îî £à ¨æã |
@@: |
mov ebx,buf2d_w |
mov ecx,ebx ;ecx ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥© |
imul ecx,[coord_y] |
add ecx,[coord_x] |
lea ecx,[ecx+ecx*2] |
add ecx,buf2d_data |
sub ebx,eax |
mov edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥ |
|
mov [right_bytes],0 |
mov ecx,[coord_x] |
cmp ecx,ebx |
jl @f |
sub ecx,ebx |
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã |
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à |
lea ecx,[ecx+ecx*2] ;ecx - ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª à⨪¨, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî áâ®à®ã |
mov [right_bytes],ecx |
@@: |
|
lea eax,[eax+eax*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
|
cld |
cmp [right_bytes],0 |
jg .copy_1 |
.copy_0: ;¯à®á⮥ ª®¯¨à®¢ ¨¥ |
mov ecx,eax |
rep movsb |
add edi,ebx |
dec edx |
cmp edx,0 |
jg .copy_0 |
jmp .copy_end |
.copy_1: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § ¯à ¢ãî áâ®à®ã) |
mov ecx,eax |
rep movsb |
add edi,ebx |
add esi,[right_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã |
dec edx |
cmp edx,0 |
jg .copy_1 |
jmp .copy_end |
|
.sou32: ;¢ ¨áâ®ç¨ª¥ 32 ¡¨â ï ª à⨪ |
mov eax,buf2d_w |
mov edx,buf2d_h ;¢ëá®â ª®¯¨à㥬®© ª à⨪¨ |
mov esi,buf2d_data ;¤ ë¥ ª®¯¨à㥬®© ª à⨪¨ |
|
mov edi,[buf_destination] |
cmp buf2d_bits,24 |
jne .copy_end ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov ebx,buf2d_h ;ebx - ¢ëá®â ®á®¢®£® ¡ãä¥à |
mov ecx,[coord_y] |
cmp ecx,ebx |
jge .copy_end ;¥á«¨ ª®®à¤¨ â 'y' ¡®«ìè¥ ¢ëá®âë ¡ãä¥à |
add ecx,edx ;ecx - ¨¦ïï ª®®à¤¨ â ª®¯¨à㥬®© ª à⨪¨ |
cmp ecx,ebx |
jle @f |
sub ecx,ebx |
sub edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨, ¢ á«ãç¥ ª®£¤ ® ¢ë« §¨â § ¨¦îî £à ¨æã |
@@: |
mov ebx,buf2d_w |
mov ecx,ebx ;ecx ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥© |
imul ecx,[coord_y] |
add ecx,[coord_x] |
lea ecx,[ecx+ecx*2] |
add ecx,buf2d_data |
sub ebx,eax |
mov edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥ |
|
mov [right_bytes],0 |
mov ecx,[coord_x] |
cmp ecx,ebx |
jl @f |
sub ecx,ebx |
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã |
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à |
shl ecx,2 ;ecx - ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª à⨪¨, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî áâ®à®ã |
mov [right_bytes],ecx |
@@: |
|
;eax - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
|
cld |
cmp [right_bytes],0 |
jg .copy_3 |
.copy_2: ;¯à®á⮥ ª®¯¨à®¢ ¨¥ |
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: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § ¯à ¢ãî áâ®à®ã) |
mov ecx,eax |
@@: |
movsw |
movsb |
inc esi |
loop @b |
add edi,ebx |
add esi,[right_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã |
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 |
;---red--- |
xor ah,ah |
mov al,byte[esi+2] |
imul ax,bx |
xor dh,dh |
mov dl,byte[edi+2] |
imul dx,cx |
add ax,dx |
mov byte[edi+2],ah |
;---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 |
;---blye--- |
xor ah,ah |
mov al,byte[esi] |
imul ax,bx |
xor dh,dh |
mov dl,byte[edi] |
imul dx,cx |
add ax,dx |
mov byte[edi],ah |
|
pop dx cx bx ax |
ret |
|
;äãªæ¨ï ª®¯¨àã¥â ¨§®¡à ¦¥¨¥ ¨§ ¡ãä¥à buf_source (32b) ¢ buf_destination (24b) |
; 㪠§ë¢ îâáï ª®®à¤¨ âë ¢áâ ¢ª¨ ¡ãä¥à buf_source ®â®á¨â¥«ì® buf_destination |
; ¯à¨ ª®¯¨à®¢ ¨¨ ãç¨âë¢ ¥âáï ¯à®§à ç®áâì |
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 ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov eax,buf2d_w |
mov edx,buf2d_h ;¢ëá®â ª®¯¨à㥬®© ª à⨪¨ |
mov esi,buf2d_data ;¤ ë¥ ª®¯¨à㥬®© ª à⨪¨ |
|
mov edi,[buf_destination] |
cmp buf2d_bits,24 |
jne .copy_end ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov ebx,buf2d_h ;ebx - ¢ëá®â ®á®¢®£® ¡ãä¥à |
mov ecx,[coord_y] |
cmp ecx,ebx |
jge .copy_end ;¥á«¨ ª®®à¤¨ â 'y' ¡®«ìè¥ ¢ëá®âë ¡ãä¥à |
add ecx,edx ;ecx - ¨¦ïï ª®®à¤¨ â ª®¯¨à㥬®© ª à⨪¨ |
cmp ecx,ebx |
jle @f |
sub ecx,ebx |
sub edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨, ¢ á«ãç¥ ª®£¤ ® ¢ë« §¨â § ¨¦îî £à ¨æã |
@@: |
mov ebx,buf2d_w |
mov ecx,ebx ;ecx ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥© |
imul ecx,[coord_y] |
add ecx,[coord_x] |
lea ecx,[ecx+ecx*2] |
add ecx,buf2d_data |
sub ebx,eax |
mov edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥ |
|
mov [right_bytes],0 |
mov ecx,[coord_x] |
cmp ecx,ebx |
jl @f |
sub ecx,ebx |
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã |
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à |
shl ecx,2 ;ecx - ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª à⨪¨, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî áâ®à®ã |
mov [right_bytes],ecx |
@@: |
|
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
|
cld |
cmp [right_bytes],0 |
jg .copy_1 |
.copy_0: ;¯à®á⮥ ª®¯¨à®¢ ¨¥ |
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: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § ¯à ¢ãî áâ®à®ã) |
mov ecx,eax |
@@: |
call combine_colors |
add edi,3 |
add esi,4 |
loop @b |
add edi,ebx |
add esi,[right_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã |
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 |
|
;---blye--- |
mov al,bl |
xor ah,ah |
shr ebx,8 |
imul ax,si |
xor dh,dh |
mov dl,byte[edi+2] |
imul dx,cx |
add ax,dx |
mov byte[edi+2],ah |
;---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 |
mov dl,byte[edi] |
imul dx,cx |
add ax,dx |
mov byte[edi],ah |
|
pop si dx cx ebx ax |
ret |
|
;äãªæ¨ï ª®¯¨àã¥â ¨§®¡à ¦¥¨¥ ¨§ ¡ãä¥à buf_source (8b) ¢ buf_destination (24b) |
; 㪠§ë¢ îâáï ª®®à¤¨ âë ¢áâ ¢ª¨ ¡ãä¥à buf_source ®â®á¨â¥«ì® 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 ? ;ª®««¨ç¥á⢮ ¡ ©â ¢ ¡ãä¥à¥ ¯à¨¥¬¨ª¥ ¯® è¨à¨¥ - è¨à¨ ¢áâ ¢«ï¥¬®© ª à⨪¨ |
endl |
pushad |
|
mov edi,[buf_source] |
cmp buf2d_bits,8 |
jne .error1 ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov eax,buf2d_w |
mov edx,buf2d_h ;¢ëá®â ª®¯¨à㥬®© ª à⨪¨ |
mov esi,buf2d_data ;¤ ë¥ ª®¯¨à㥬®© ª à⨪¨ |
|
mov edi,[buf_destination] |
cmp buf2d_bits,24 |
jne .error2 ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov ebx,buf2d_h ;ebx - ¢ëá®â ®á®¢®£® ¡ãä¥à |
mov ecx,[coord_y] |
cmp ecx,ebx |
jge .copy_end ;¥á«¨ ª®®à¤¨ â 'y' ¡®«ìè¥ ¢ëá®âë ¡ãä¥à |
add ecx,edx ;ecx - ¨¦ïï ª®®à¤¨ â ª®¯¨à㥬®© ª à⨪¨ |
cmp ecx,ebx |
jle @f |
sub ecx,ebx |
sub edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨, ¢ á«ãç¥ ª®£¤ ® ¢ë« §¨â § ¨¦îî £à ¨æã |
@@: |
mov ebx,buf2d_w |
mov ecx,ebx ;ecx ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥© |
imul ecx,[coord_y] |
add ecx,[coord_x] |
lea ecx,[ecx+ecx*2] |
add ecx,buf2d_data |
sub ebx,eax |
mov edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥ |
|
mov [right_bytes],0 |
mov ecx,[coord_x] |
cmp ecx,ebx |
jl @f |
sub ecx,ebx |
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã |
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à |
;ecx - ç¨á«® ¯¨ªá¥«¥© ¢ 1-© áâப¥ ª à⨪¨, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî áâ®à®ã |
mov [right_bytes],ecx |
@@: |
|
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
mov [dest_w_bytes],ebx |
mov ebx,[color] |
|
cld |
cmp [right_bytes],0 |
jg .copy_1 |
.copy_0: ;¯à®á⮥ ª®¯¨à®¢ ¨¥ |
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: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § ¯à ¢ãî áâ®à®ã) |
mov ecx,eax |
@@: |
call combine_colors_2 |
add edi,3 |
inc esi |
loop @b |
add edi,[dest_w_bytes] |
add esi,[right_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã |
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 |
|
;¯à¥®¡à §®¢ ¨¥ 8-¡¨â®£® ¡ãä¥à à §¬¥à®¬ 16*16 ¢ à §¬¥à 1*256 ᨬ¢®«®¢ |
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 ;¯à¥¤¯®« £ ¥¬ çâ® ¢ ¡ãä¥à¥ 16 áâப á ᨬ¢®« ¬¨, ¯®â®¬ã ¤¥«¨¬ 2^4 |
mov edx,buf2d_w |
imul ecx,edx ;ecx = size 8 b |
invoke mem.alloc,ecx ;¢ë¤¥«ï¥¬ ¢à¥¬¥ãî ¯ ¬ïâì |
mov [tmp_mem],eax ;eax - new memory |
|
shr edx,4 ;¯à¥¤¯®« £ ¥¬ çâ® ¢ ¡ãä¥à¥ 16 ª®«®®ª á ᨬ¢®« ¬¨, ¯®â®¬ã ¤¥«¨¬ 2^4 |
mov eax,ebx |
imul ebx,edx ;¢ëç¨á«ï¥¬ ª®®«¨ç¥á⢮ ¯¨ªá¥«¥© 1 ᨬ¢®« |
;eax = bhe - ¢ëá®â ¡ãª¢ë |
;ebx = bwi*bhe - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ¢ 1-© ¡ãª¢¥ |
;edx = bwi - è¨à¨ ¡ãª¢ë |
;ecx,esi,edi - ¨á¯®«ì§ãîâáï ¢ 横«¥ .c_0 |
shr buf2d_w,4 |
shl buf2d_h,4 ;¯à¥®¡à §®¢ë¢ ¥¬ à §¬¥àë ¡ãä¥à |
|
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] ;ª®¯¨à®¢ ¨¥ ®¢®© ¬ âà¨æë ¢ ®á®¢®© ¡ãä¥à |
mov edi,buf2d_data |
mov esi,[tmp_mem] |
mov ecx,ebx |
shl ecx,8 |
rep movsb |
invoke mem.free,[tmp_mem] ;ç¨á⨬ ¢à¥¬¥ãî ¯ ¬ïâì |
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 ? ;«®ª «ì ï ¬ âà¨æ ᨬ¢®« |
|
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 ;ª®¯¨à㥬 áâàãªâãàã ⥪á⮢®© ¬ âà¨æë |
mov esi,edi |
lea edi,[buf_s_matr] |
cld |
rep movsb |
lea edi,[buf_s_matr] |
shr buf2d_h,8 ;¤¥«¨¬ ¢ëá®âã ᨬ¢®«ì®£® ¡ãä¥à 256, ¤«ï 宦¤¥¨ï ¢ëá®âë 1-£® ᨬ¢®« |
mov ebx,buf2d_h ;¡¥à¥¬ ¢ëá®âã ᨬ¢®« |
mov ecx,buf2d_w ;¡¥à¥¬ è¨à¨ã ᨬ¢®« |
|
mov eax,[coord_x] |
mov esi,[text] |
cmp byte[esi],0 |
je .end_draw ;¥á«¨ ¯ãáâ ï áâப |
@@: |
xor edx,edx |
mov dl,byte[esi] ;¡¥à¥¬ ª®¤ ᨬ¢®« |
imul edx,ebx ;㬮¦ ¥¬ ¥£® ¢ëá®âã ᨬ¢®« |
imul edx,ecx ;㬮¦ ¥¬ è¨à¨ã ᨬ¢®« |
add edx,[buf_t_matr_offs] ;¯à¨¡ ¢«ï¥¬ ᬥ饨¥ 0-£® ᨬ¢®« , â. ¥. ¯®«ãç ¥âáï ᬥ饨¥ ¢ë¢®¤¨¬®£® ᨬ¢®« |
mov buf2d_data,edx ;¢ «®ª «ìë© ¡ãä¥à ᨬ¢®« , áâ ¢¨¬ 㪠§ ⥫ì ã¦ë© ᨬ¢®« ¨§ ¡ãä¥à 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 ;¢ë¢®¤¨¬ á®®¡é¥¨¥ ®¡ 訡ª¥ ¤®áªã ®â« ¤ª¨ |
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 |
proc buf_cruve_bezier, buffer:dword, coord_p0:dword,coord_p1:dword,coord_p2:dword, color:dword |
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); |
;} |
|
mov edx,[color] ;set cruve color |
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 ;¨§¡¥£ ¥¬ ¤¥«¥¨ï 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 |
dd sz_buf2d_line, buf_line_brs |
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 |
dd sz_buf2d_cruve_bezier, buf_cruve_bezier |
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 |
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 ;®ç¨á⪠¡ãä¥à 㪠§ ë¬ æ¢¥â®¬ |
sz_buf2d_draw db 'buf2d_draw',0 |
sz_buf2d_delete db 'buf2d_delete',0 |
sz_buf2d_line db 'buf2d_line',0 ;à¨á®¢ ¨¥ «¨¨¨ |
sz_buf2d_circle db 'buf2d_circle',0 ;à¨á®¢ ¨¥ ®ªà㦮á⨠|
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 ;ᦠ⨥ ¨§®¡à ¦¥¨ï ¯® ¢ëá®â¥ ¢ 2 à § (à §¬¥à ¡ãä¥à ¥ ¬¥ï¥âáï) |
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 ;ᦠ⨥ ¨§®¡à ¦¥¨ï ¯® è¨à¨¥ ¢ 2 à § (à §¬¥à ¡ãä¥à ¥ ¬¥ï¥âáï) |
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 |
sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0 |
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 |