forked from KolibriOS/kolibrios
2402 lines
42 KiB
PHP
2402 lines
42 KiB
PHP
|
;-----------------------------------------------------------
|
||
|
;-----instruments of panel(icon's instruments)--------------
|
||
|
;-----------------------------------------------------------
|
||
|
TakeButtonInstruments:
|
||
|
|
||
|
mov eax,[Current_instrument]
|
||
|
|
||
|
;*************************brush 1***********************
|
||
|
cmp eax,40
|
||
|
jne no_brush1
|
||
|
|
||
|
mov [Brush_SizeX],4
|
||
|
mov [Brush_SizeY],4
|
||
|
mov [Number_Brush],0
|
||
|
mov ebx,[Last_instrument]
|
||
|
mov [Current_instrument],ebx
|
||
|
|
||
|
mov [line_width],1
|
||
|
|
||
|
jmp still
|
||
|
no_brush1:
|
||
|
|
||
|
;*************************brush 2***********************
|
||
|
cmp eax,41
|
||
|
jne no_brush2
|
||
|
|
||
|
mov [Brush_SizeX],6
|
||
|
mov [Brush_SizeY],4
|
||
|
mov [Number_Brush],1
|
||
|
mov ebx,[Last_instrument]
|
||
|
mov [Current_instrument],ebx
|
||
|
|
||
|
mov [line_width],2
|
||
|
|
||
|
jmp still
|
||
|
no_brush2:
|
||
|
|
||
|
;*************************brush 3***********************
|
||
|
cmp eax,42
|
||
|
jne no_brush3
|
||
|
|
||
|
mov [Brush_SizeX],8
|
||
|
mov [Brush_SizeY],7
|
||
|
mov [Number_Brush],2
|
||
|
mov ebx,[Last_instrument]
|
||
|
mov [Current_instrument],ebx
|
||
|
|
||
|
mov [line_width],3
|
||
|
|
||
|
jmp still
|
||
|
no_brush3:
|
||
|
|
||
|
;************************brush 4************************
|
||
|
cmp eax,43
|
||
|
jne no_brush4
|
||
|
|
||
|
mov [Brush_SizeX],14
|
||
|
mov [Brush_SizeY],14
|
||
|
mov [Number_Brush],3
|
||
|
mov ebx,[Last_instrument]
|
||
|
mov [Current_instrument],ebx
|
||
|
|
||
|
mov [line_width],4
|
||
|
|
||
|
jmp still
|
||
|
no_brush4:
|
||
|
|
||
|
;************************brush 5************************
|
||
|
cmp eax,44
|
||
|
jne no_brush5
|
||
|
|
||
|
mov [Brush_SizeX],6
|
||
|
mov [Brush_SizeY],6
|
||
|
mov [Number_Brush],4
|
||
|
mov ebx,[Last_instrument]
|
||
|
mov [Current_instrument],ebx
|
||
|
|
||
|
mov [line_width],5
|
||
|
|
||
|
jmp still
|
||
|
no_brush5:
|
||
|
|
||
|
;*************************pensil************************
|
||
|
cmp eax,10
|
||
|
jne no_pensil
|
||
|
|
||
|
mov al,[exit_from_work_arrea]
|
||
|
|
||
|
test al,al
|
||
|
jz no_exit_from_work_arrea
|
||
|
|
||
|
and [Activate_instrument],0
|
||
|
and [exit_from_work_arrea],0
|
||
|
|
||
|
no_exit_from_work_arrea:
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
|
||
|
test al,al
|
||
|
jnz no_activated_later
|
||
|
|
||
|
call GetScreenCordinats
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
|
||
|
no_activated_later:
|
||
|
|
||
|
mov eax,[MaxWorkScreen_SizeX]
|
||
|
mov ebx,[MaxWorkScreen_SizeY]
|
||
|
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[OldX]
|
||
|
shl edx,16
|
||
|
add edx,[OldY]
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
call calculate_line
|
||
|
|
||
|
mov ecx,eax
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
xor ebx,ebx
|
||
|
mov eax,[ReserveArray]
|
||
|
|
||
|
pensil_next_pixel_draw:
|
||
|
|
||
|
mov ebx,[eax]
|
||
|
mov [ebx],si
|
||
|
mov [ebx+2],dl
|
||
|
add eax,4
|
||
|
|
||
|
dec ecx
|
||
|
jnz pensil_next_pixel_draw
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
mov [Activate_instrument],1
|
||
|
jmp still
|
||
|
no_pensil:
|
||
|
|
||
|
;**********************pipetka**************************
|
||
|
cmp eax,15
|
||
|
jne no_pipetka
|
||
|
|
||
|
mov eax,[ScreenY]
|
||
|
mov ebx,[Picture_SizeX]
|
||
|
add eax,[PosY]
|
||
|
imul eax,ebx
|
||
|
add eax,[ScreenX]
|
||
|
add eax,[PosX]
|
||
|
lea eax,[eax+eax*2]
|
||
|
add eax,[PointerToPicture]
|
||
|
mov ebx,[eax]
|
||
|
and ebx,0xffffff
|
||
|
mov [Color],ebx
|
||
|
|
||
|
mov eax,13
|
||
|
mov ebx,136*65536+20
|
||
|
mov ecx,65*65536+21
|
||
|
mov edx,[Color]
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
no_pipetka:
|
||
|
|
||
|
;**********************draw brush***********************
|
||
|
cmp eax,11
|
||
|
jne no_brush
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
jmp no_lastik_
|
||
|
|
||
|
lastik_in:
|
||
|
mov eax,[Color]
|
||
|
mov [SColor],eax
|
||
|
mov [Color],0xffffff
|
||
|
no_lastik_:
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
mov ecx,[Brush_SizeX]
|
||
|
mov edx,[Brush_SizeY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
add eax,ecx
|
||
|
add ebx,edx
|
||
|
|
||
|
cmp eax,[Picture_SizeX]
|
||
|
jl no_max_pos_x
|
||
|
mov eax,[Picture_SizeX]
|
||
|
no_max_pos_x:
|
||
|
|
||
|
cmp ebx,[Picture_SizeY]
|
||
|
jl no_max_pos_y
|
||
|
mov ebx,[Picture_SizeY]
|
||
|
no_max_pos_y:
|
||
|
|
||
|
cmp eax,ecx
|
||
|
ja no_min_pos_x
|
||
|
mov eax,[Brush_SizeX]
|
||
|
no_min_pos_x:
|
||
|
|
||
|
cmp ebx,edx
|
||
|
ja no_min_pos_y
|
||
|
mov ebx,[Brush_SizeY]
|
||
|
no_min_pos_y:
|
||
|
|
||
|
sub eax,[Brush_SizeX]
|
||
|
sub ebx,[Brush_SizeY]
|
||
|
|
||
|
mov [x],eax
|
||
|
mov [y],ebx
|
||
|
|
||
|
mov al,[exit_from_work_arrea]
|
||
|
test al,al
|
||
|
jz no_exit_from_work_arrea_brush
|
||
|
and [Activate_instrument],0
|
||
|
and [exit_from_work_arrea],0
|
||
|
no_exit_from_work_arrea_brush:
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_brush_xy
|
||
|
mov eax,[x]
|
||
|
mov ebx,[y]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
mov [Activate_instrument],1
|
||
|
no_new_brush_xy:
|
||
|
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[OldX]
|
||
|
shl edx,16
|
||
|
add edx,[OldY]
|
||
|
mov esi,[x]
|
||
|
mov edi,[y]
|
||
|
|
||
|
call calculate_line
|
||
|
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
;procedure drawing of brush
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
add ebx,4
|
||
|
mov edi,[Number_Brush]
|
||
|
imul edi,20*20
|
||
|
|
||
|
next_pixel_put_brush:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
push eax
|
||
|
push ecx
|
||
|
xor ebp,ebp
|
||
|
and [counter2],0
|
||
|
|
||
|
vertical_width_brush:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_brush:
|
||
|
xor ecx,ecx
|
||
|
mov cl,byte[Brush_color+edi+ebp]
|
||
|
test cl,cl
|
||
|
jz no_draw_pixel_brush
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
no_draw_pixel_brush:
|
||
|
add eax,3
|
||
|
inc ebp
|
||
|
inc [counter]
|
||
|
cmp [counter],20
|
||
|
jne horizontal_width_brush
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,20
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add eax,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],20
|
||
|
jne vertical_width_brush
|
||
|
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_brush
|
||
|
|
||
|
mov eax,[x]
|
||
|
mov ebx,[y]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
|
||
|
mov al,[lastik_is_active]
|
||
|
test al,al
|
||
|
jz no_lastik_active
|
||
|
|
||
|
mov eax,[SColor]
|
||
|
mov [Color],eax
|
||
|
and [lastik_is_active],0
|
||
|
no_lastik_active:
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
mov eax,[Current_instrument]
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
jmp still
|
||
|
no_brush:
|
||
|
|
||
|
;************************Flood Fill*******************
|
||
|
cmp eax,14
|
||
|
jne no_FloodFill
|
||
|
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ebx,[PointerToEditBufer]
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
imul ecx,[Picture_SizeY]
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
shl ecx,1
|
||
|
|
||
|
cmp ecx,500000
|
||
|
ja normal_size_of_bufer
|
||
|
|
||
|
mov ebx,[ReserveArray]
|
||
|
|
||
|
normal_size_of_bufer:
|
||
|
|
||
|
add ebx,4
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[ScreenX]
|
||
|
add edx,[PosX]
|
||
|
shl edx,16
|
||
|
add edx,[ScreenY]
|
||
|
add edx,[PosY]
|
||
|
mov esi,[Picture_SizeX]
|
||
|
dec esi
|
||
|
shl esi,16
|
||
|
add esi,[Picture_SizeY]
|
||
|
dec esi
|
||
|
mov edi,[Color]
|
||
|
|
||
|
call flood_fill
|
||
|
call MovePictureToWorkScreen
|
||
|
|
||
|
jmp still
|
||
|
no_FloodFill:
|
||
|
|
||
|
;************************lastik*************************
|
||
|
cmp eax,13
|
||
|
jne no_lastik
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
mov [lastik_is_active],1
|
||
|
jmp lastik_in
|
||
|
|
||
|
no_lastik:
|
||
|
|
||
|
;******************************************************
|
||
|
cmp eax,12
|
||
|
jne no_spray
|
||
|
|
||
|
cmp [Activate_instrument],0
|
||
|
jne no_null_spray
|
||
|
mov [Activate_instrument],1
|
||
|
jmp still
|
||
|
no_null_spray:
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
mov ecx,[Brush_SizeX]
|
||
|
mov edx,[Brush_SizeY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
add eax,ecx
|
||
|
add ebx,edx
|
||
|
|
||
|
cmp eax,[Picture_SizeX]
|
||
|
jl no_max_pos_x_spray
|
||
|
mov eax,[Picture_SizeX]
|
||
|
no_max_pos_x_spray:
|
||
|
|
||
|
cmp ebx,[Picture_SizeY]
|
||
|
jl no_max_pos_y_spray
|
||
|
mov ebx,[Picture_SizeY]
|
||
|
no_max_pos_y_spray:
|
||
|
|
||
|
cmp eax,ecx
|
||
|
ja no_min_pos_x_spray
|
||
|
mov eax,[Brush_SizeX]
|
||
|
no_min_pos_x_spray:
|
||
|
|
||
|
cmp ebx,edx
|
||
|
ja no_min_pos_y_spray
|
||
|
mov ebx,[Brush_SizeY]
|
||
|
no_min_pos_y_spray:
|
||
|
|
||
|
sub eax,[Brush_SizeX]
|
||
|
sub ebx,[Brush_SizeY]
|
||
|
mov edi,0;[Number_Brush]
|
||
|
imul edi,20*20
|
||
|
|
||
|
mov [x],eax
|
||
|
mov [y],ebx
|
||
|
mov ebp,[Picture_SizeX]
|
||
|
xor edx,edx
|
||
|
brush_y_spray:
|
||
|
xor ecx,ecx
|
||
|
brush_x_spray:
|
||
|
;calculate position in array of spray
|
||
|
mov esi,edx
|
||
|
lea esi,[esi+esi*4] ;esi=esi*5
|
||
|
shl esi,2 ;esi=(esi*3)*4
|
||
|
add esi,ecx
|
||
|
add esi,edi
|
||
|
;read byte from array
|
||
|
xor eax,eax
|
||
|
mov al,[Spray_color+esi]
|
||
|
test eax,eax
|
||
|
jz no_color_spray
|
||
|
mov eax,[x]
|
||
|
mov ebx,[y]
|
||
|
add eax,ecx
|
||
|
add ebx,edx
|
||
|
imul ebx,ebp; ebp=[Picture_SizeX]
|
||
|
add eax,ebx
|
||
|
lea eax,[eax+eax*2]
|
||
|
add eax,[PointerToPicture]
|
||
|
mov ebx,[Color]
|
||
|
mov [eax],bx
|
||
|
shr ebx,16
|
||
|
mov [eax+2],bl
|
||
|
no_color_spray:
|
||
|
inc ecx
|
||
|
cmp ecx,20
|
||
|
jl brush_x_spray
|
||
|
inc edx
|
||
|
cmp edx,20
|
||
|
jl brush_y_spray
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
|
||
|
no_spray:
|
||
|
|
||
|
;***********************palette*************************
|
||
|
cmp eax,51
|
||
|
jne no_palette
|
||
|
|
||
|
mov eax,20
|
||
|
mov ebx,100
|
||
|
mov ecx,32*10+32*5+7
|
||
|
mov edx,8*10+7*10
|
||
|
mov esi,1
|
||
|
call draw_volume_rectangle
|
||
|
mov [x],20+5
|
||
|
mov [y],100+10
|
||
|
mov edi,256
|
||
|
xor esi,esi
|
||
|
next_rectangle:
|
||
|
mov eax,13
|
||
|
mov ebx,[x]
|
||
|
mov ecx,[y]
|
||
|
mov edx,[palitra+esi]
|
||
|
and edx,0xffffff
|
||
|
shl ebx,16
|
||
|
shl ecx,16
|
||
|
add ebx,13
|
||
|
add ecx,13
|
||
|
int 0x40
|
||
|
add [x],15
|
||
|
cmp [x],20+15*32
|
||
|
jl no_new_line
|
||
|
mov [x],20+5
|
||
|
add [y],15
|
||
|
no_new_line:
|
||
|
add esi,4
|
||
|
dec edi
|
||
|
jnz next_rectangle
|
||
|
|
||
|
wait_events:
|
||
|
call event
|
||
|
|
||
|
cmp eax,1
|
||
|
je still
|
||
|
|
||
|
cmp eax,2
|
||
|
jne no_keys
|
||
|
|
||
|
mov eax,2
|
||
|
int 0x40
|
||
|
|
||
|
no_keys:
|
||
|
|
||
|
cmp eax,3
|
||
|
jne no_buttons
|
||
|
mov eax,17
|
||
|
int 0x40
|
||
|
|
||
|
no_buttons:
|
||
|
|
||
|
cmp eax,6
|
||
|
jne wait_events
|
||
|
|
||
|
call GetMouseClick
|
||
|
|
||
|
test eax,eax
|
||
|
jz wait_events
|
||
|
call GetMouseCoordinats
|
||
|
mov [x],20+5
|
||
|
mov [y],100+10
|
||
|
mov [counter],0
|
||
|
next_rectangle_column:
|
||
|
mov eax,[x]
|
||
|
mov ebx,[y]
|
||
|
mov ecx,[MouseX]
|
||
|
mov edx,[MouseY]
|
||
|
mov esi,13
|
||
|
mov edi,13
|
||
|
call columnus
|
||
|
test eax,eax
|
||
|
jz no_columnus_color
|
||
|
|
||
|
mov eax,[counter]
|
||
|
shl eax,2
|
||
|
mov ebx,[palitra+eax]
|
||
|
and ebx,0xffffff
|
||
|
mov [Color],ebx
|
||
|
no_columnus_color:
|
||
|
|
||
|
add [x],15
|
||
|
|
||
|
cmp [x],20+15*32
|
||
|
jl no_new_line_column
|
||
|
|
||
|
mov [x],20+5
|
||
|
add [y],15
|
||
|
no_new_line_column:
|
||
|
|
||
|
inc [counter]
|
||
|
|
||
|
cmp [counter],257
|
||
|
jne next_rectangle_column
|
||
|
|
||
|
mov eax,5
|
||
|
mov ebx,10
|
||
|
int 0x40
|
||
|
|
||
|
call drawwin
|
||
|
|
||
|
mov eax,[Last_instrument]
|
||
|
mov [Current_instrument],eax
|
||
|
|
||
|
jmp still
|
||
|
no_palette:
|
||
|
|
||
|
;************************draw line**********************
|
||
|
cmp eax,16
|
||
|
jne no_line
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_line_xy
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
mov [Activate_instrument],1
|
||
|
mov eax,[ReserveArray]
|
||
|
mov ecx,60000
|
||
|
clear_array_line:
|
||
|
mov [eax],dword 0
|
||
|
add eax,4
|
||
|
dec ecx
|
||
|
jnz clear_array_line
|
||
|
jmp still
|
||
|
no_new_line_xy:
|
||
|
|
||
|
;put saved pixels
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov eax,[ebx]
|
||
|
test eax,eax
|
||
|
jz no_put_line_to_screen_line
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
xor ebp,ebp
|
||
|
next_color_put_line:
|
||
|
;put saved pixels in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
push edi
|
||
|
vertical_width_put:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_put:
|
||
|
mov edx,[ebx+4807*4+ebp]
|
||
|
and edx,0xffffff
|
||
|
mov [edi],dx
|
||
|
shr edx,16
|
||
|
mov [edi+2],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_put
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_put
|
||
|
pop edi
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_put_line
|
||
|
|
||
|
no_put_line_to_screen_line:
|
||
|
|
||
|
;calculate line
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[OldX]
|
||
|
shl edx,16
|
||
|
add edx,[OldY]
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
mov ebp,[Picture_SizeX]
|
||
|
sub ebp,[line_width]
|
||
|
cmp esi,ebp
|
||
|
jl no_minimum_x_line
|
||
|
mov esi,ebp
|
||
|
no_minimum_x_line:
|
||
|
|
||
|
mov ebp,[Picture_SizeY]
|
||
|
sub ebp,[line_width]
|
||
|
cmp edi,ebp
|
||
|
jl no_minimum_y_line
|
||
|
mov edi,ebp
|
||
|
no_minimum_y_line:
|
||
|
|
||
|
call calculate_line
|
||
|
;call calculate_rectangle
|
||
|
mov [counter],eax
|
||
|
|
||
|
;save color pixels in ReserveArray
|
||
|
mov eax,[counter]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
|
||
|
xor ebp,ebp
|
||
|
next_color_save_line:
|
||
|
;save color of pixel in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
vertical_width_save:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_save:
|
||
|
mov eax,edi
|
||
|
mov edx,[eax]
|
||
|
and edx,0xffffff
|
||
|
mov [ebx+4807*4+ebp],dx
|
||
|
shr edx,16
|
||
|
mov [ebx+4807*4+2+ebp],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_save
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_save
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_save_line
|
||
|
|
||
|
;draw calculated pixels on work arrea
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
add ebx,4
|
||
|
mov edi,[line_width]
|
||
|
dec edi
|
||
|
imul edi,25
|
||
|
next_pixel_put_line:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
push eax
|
||
|
push ecx
|
||
|
xor ebp,ebp
|
||
|
and [counter2],0
|
||
|
|
||
|
vertical_width:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width:
|
||
|
xor ecx,ecx
|
||
|
mov cl,byte[width_pixels+edi+ebp]
|
||
|
test cl,cl
|
||
|
jz no_draw_pixel_line
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
no_draw_pixel_line:
|
||
|
add eax,3
|
||
|
inc ebp
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add eax,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width
|
||
|
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_line
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
|
||
|
jmp still
|
||
|
no_line:
|
||
|
|
||
|
;*********************************DRAW RECTANGLE****************************
|
||
|
cmp eax,17
|
||
|
jne no_rectangle
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_rectangle_xy
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
mov [Activate_instrument],1
|
||
|
mov eax,[ReserveArray]
|
||
|
mov ecx,60000
|
||
|
clear_array_rectangle:
|
||
|
mov [eax],dword 0
|
||
|
add eax,4
|
||
|
dec ecx
|
||
|
jnz clear_array_rectangle
|
||
|
jmp still
|
||
|
no_new_rectangle_xy:
|
||
|
|
||
|
;put saved pixels
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov eax,[ebx]
|
||
|
test eax,eax
|
||
|
jz no_put_rectangle_to_screen_line
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
xor ebp,ebp
|
||
|
next_color_put_rectangle:
|
||
|
;put saved pixels in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
push edi
|
||
|
vertical_width_put_rectangle:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_put_rectangle:
|
||
|
mov edx,[ebx+4807*4+ebp]
|
||
|
and edx,0xffffff
|
||
|
mov [edi],dx
|
||
|
shr edx,16
|
||
|
mov [edi+2],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_put_rectangle
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_put_rectangle
|
||
|
pop edi
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_put_rectangle
|
||
|
|
||
|
no_put_rectangle_to_screen_line:
|
||
|
|
||
|
;calculate line
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[OldX]
|
||
|
shl edx,16
|
||
|
add edx,[OldY]
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
mov ebp,[Picture_SizeX]
|
||
|
sub ebp,[line_width]
|
||
|
cmp esi,ebp
|
||
|
jl no_minimum_x_rectangle
|
||
|
mov esi,ebp
|
||
|
no_minimum_x_rectangle:
|
||
|
|
||
|
mov ebp,[Picture_SizeY]
|
||
|
sub ebp,[line_width]
|
||
|
cmp edi,ebp
|
||
|
jl no_minimum_y_rectangle
|
||
|
mov edi,ebp
|
||
|
no_minimum_y_rectangle:
|
||
|
|
||
|
call calculate_rectangle
|
||
|
mov [counter],eax
|
||
|
|
||
|
;save color pixels in ReserveArray
|
||
|
mov eax,[counter]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
|
||
|
xor ebp,ebp
|
||
|
next_color_save_rectangle:
|
||
|
;save color of pixel in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
vertical_width_save_rectangle:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_save_rectangle:
|
||
|
mov eax,edi
|
||
|
mov edx,[eax]
|
||
|
and edx,0xffffff
|
||
|
mov [ebx+4807*4+ebp],dx
|
||
|
shr edx,16
|
||
|
mov [ebx+4807*4+2+ebp],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_save_rectangle
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_save_rectangle
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_save_rectangle
|
||
|
|
||
|
;draw calculated pixels on work arrea
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
add ebx,4
|
||
|
mov edi,[line_width]
|
||
|
dec edi
|
||
|
imul edi,25
|
||
|
next_pixel_put_rectangle:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
push eax
|
||
|
push ecx
|
||
|
xor ebp,ebp
|
||
|
and [counter2],0
|
||
|
|
||
|
vertical_width_rectangle:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_rectangle:
|
||
|
xor ecx,ecx
|
||
|
mov cl,byte[width_pixels_rectangle+edi+ebp]
|
||
|
test cl,cl
|
||
|
jz no_draw_pixel_rectangle
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
no_draw_pixel_rectangle:
|
||
|
add eax,3
|
||
|
inc ebp
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_rectangle
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add eax,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_rectangle
|
||
|
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_rectangle
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
no_rectangle:
|
||
|
|
||
|
;*********************************DRAW CIRCLE****************************
|
||
|
cmp eax,18
|
||
|
jne no_circle
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_circle_xy
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
mov [Activate_instrument],1
|
||
|
mov eax,[ReserveArray]
|
||
|
mov ecx,60000
|
||
|
clear_array_circle:
|
||
|
mov [eax],dword 0
|
||
|
add eax,4
|
||
|
dec ecx
|
||
|
jnz clear_array_circle
|
||
|
jmp still
|
||
|
no_new_circle_xy:
|
||
|
|
||
|
;put saved pixels
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov eax,[ebx]
|
||
|
test eax,eax
|
||
|
jz no_put_line_to_screen_circle
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
xor ebp,ebp
|
||
|
next_color_put_circle:
|
||
|
;put saved pixels in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
push edi
|
||
|
vertical_width_put_circle:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_put_circle:
|
||
|
mov edx,[ebx+4807*4+ebp]
|
||
|
and edx,0xffffff
|
||
|
mov [edi],dx
|
||
|
shr edx,16
|
||
|
mov [edi+2],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_put_circle
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_put_circle
|
||
|
pop edi
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_put_circle
|
||
|
|
||
|
no_put_line_to_screen_circle:
|
||
|
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
sub esi,[OldX]
|
||
|
jns no_sign_x_circle
|
||
|
neg esi
|
||
|
shr esi,1
|
||
|
neg esi
|
||
|
add esi,[OldX]
|
||
|
jmp no_plus_sign_x_circle
|
||
|
no_sign_x_circle:
|
||
|
|
||
|
shr esi,1
|
||
|
add esi,[OldX]
|
||
|
no_plus_sign_x_circle:
|
||
|
|
||
|
sub edi,[OldY]
|
||
|
jns no_sign_y_circle
|
||
|
neg edi
|
||
|
shr edi,1
|
||
|
neg edi
|
||
|
add edi,[OldY]
|
||
|
jmp no_plus_sign_y_circle
|
||
|
no_sign_y_circle:
|
||
|
|
||
|
shr edi,1
|
||
|
add edi,[OldY]
|
||
|
no_plus_sign_y_circle:
|
||
|
|
||
|
mov [x],esi
|
||
|
mov [y],edi
|
||
|
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
sub esi,[OldX]
|
||
|
jns no_sign_x_circle_r
|
||
|
neg esi
|
||
|
no_sign_x_circle_r:
|
||
|
|
||
|
sub edi,[OldY]
|
||
|
jns no_sign_y_circle_r
|
||
|
neg edi
|
||
|
no_sign_y_circle_r:
|
||
|
|
||
|
mov [Dx_],esi
|
||
|
mov [Dy_],edi
|
||
|
|
||
|
;finit
|
||
|
fild [Dx_]
|
||
|
fmul st0,st0
|
||
|
fild [Dy_]
|
||
|
fmul st0,st0
|
||
|
fadd st0,st1
|
||
|
fsqrt
|
||
|
fistp [Radius]
|
||
|
fistp [Icon_X]
|
||
|
mov esi,[Radius]
|
||
|
shr esi,1
|
||
|
cmp esi,0
|
||
|
jne no_null_radius
|
||
|
mov [Radius],1
|
||
|
no_null_radius:
|
||
|
|
||
|
mov [Radius],esi
|
||
|
|
||
|
mov edi,[x]
|
||
|
mov ebp,[y]
|
||
|
add edi,esi
|
||
|
add ebp,esi
|
||
|
|
||
|
mov edx,[Picture_SizeX]
|
||
|
sub edx,[line_width]
|
||
|
cmp edi,edx
|
||
|
jl no_limit_x_circle
|
||
|
sub edi,edx
|
||
|
sub [Radius],edi
|
||
|
no_limit_x_circle:
|
||
|
|
||
|
mov edx,[Picture_SizeY]
|
||
|
sub edx,[line_width]
|
||
|
cmp ebp,edx
|
||
|
jl no_limit_y_circle
|
||
|
sub ebp,edx
|
||
|
sub [Radius],ebp
|
||
|
no_limit_y_circle:
|
||
|
|
||
|
|
||
|
mov edi,[x]
|
||
|
mov ebp,[y]
|
||
|
|
||
|
sub edi,[Radius]
|
||
|
jns no_minimum_x_circle
|
||
|
add [Radius],edi
|
||
|
no_minimum_x_circle:
|
||
|
|
||
|
sub ebp,[Radius]
|
||
|
jns no_minimum_y_circle
|
||
|
add [Radius],ebp
|
||
|
no_minimum_y_circle:
|
||
|
|
||
|
;calculate circle
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[x]
|
||
|
shl edx,16
|
||
|
add edx,[y]
|
||
|
mov esi,[Radius]
|
||
|
call calculate_circle
|
||
|
|
||
|
mov [counter],eax
|
||
|
|
||
|
;save color pixels in ReserveArray
|
||
|
mov eax,[counter]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
|
||
|
xor ebp,ebp
|
||
|
next_color_save_circle:
|
||
|
;save color of pixel in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
vertical_width_save_circle:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_save_circle:
|
||
|
mov eax,edi
|
||
|
mov edx,[eax]
|
||
|
and edx,0xffffff
|
||
|
mov [ebx+4807*4+ebp],dx
|
||
|
shr edx,16
|
||
|
mov [ebx+4807*4+2+ebp],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_save_circle
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_save_circle
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_save_circle
|
||
|
|
||
|
;draw calculated pixels on work arrea
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
add ebx,4
|
||
|
mov edi,[line_width]
|
||
|
dec edi
|
||
|
imul edi,25
|
||
|
next_pixel_put_circle:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
push eax
|
||
|
push ecx
|
||
|
xor ebp,ebp
|
||
|
and [counter2],0
|
||
|
|
||
|
vertical_width_circle:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_circle:
|
||
|
xor ecx,ecx
|
||
|
mov cl,byte[width_pixels+edi+ebp]
|
||
|
test cl,cl
|
||
|
jz no_draw_pixel_circle
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
no_draw_pixel_circle:
|
||
|
add eax,3
|
||
|
inc ebp
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_circle
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add eax,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_circle
|
||
|
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_circle
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
no_circle:
|
||
|
|
||
|
;************************zoom 1*************************
|
||
|
cmp eax,45
|
||
|
jne no_1_
|
||
|
mov [k],1
|
||
|
mov [Scroll1CoordinatX],9
|
||
|
mov [Scroll2CoordinatY],89
|
||
|
and [Current_instrument],0
|
||
|
call drawwin
|
||
|
jmp still
|
||
|
no_1_:
|
||
|
|
||
|
;*************************zoom 2************************
|
||
|
cmp eax,46
|
||
|
jne no_2_
|
||
|
mov [k],2
|
||
|
call drawwin
|
||
|
mov [Scroll1CoordinatX],9
|
||
|
mov [Scroll2CoordinatY],89
|
||
|
and [Current_instrument],0
|
||
|
jmp still
|
||
|
no_2_:
|
||
|
|
||
|
|
||
|
;*************************zoom 3************************
|
||
|
cmp eax,47
|
||
|
jne no_3_
|
||
|
mov [k],3
|
||
|
call drawwin
|
||
|
mov [Scroll1CoordinatX],9
|
||
|
mov [Scroll2CoordinatY],89
|
||
|
and [Current_instrument],0
|
||
|
jmp still
|
||
|
no_3_:
|
||
|
|
||
|
;*************************zoom 4************************
|
||
|
cmp eax,48
|
||
|
jne no_4_
|
||
|
mov [k],4
|
||
|
call drawwin
|
||
|
mov [Scroll1CoordinatX],9
|
||
|
mov [Scroll2CoordinatY],89
|
||
|
and [Current_instrument],0
|
||
|
jmp still
|
||
|
no_4_:
|
||
|
|
||
|
;************************zoom 8*************************
|
||
|
cmp eax,49
|
||
|
jne no_8_
|
||
|
mov [k],8
|
||
|
call drawwin
|
||
|
mov [Scroll1CoordinatX],9
|
||
|
mov [Scroll2CoordinatY],89
|
||
|
and [Current_instrument],0
|
||
|
jmp still
|
||
|
no_8_:
|
||
|
|
||
|
;************************zoom 16************************
|
||
|
cmp eax,50
|
||
|
jne no_16_
|
||
|
mov [k],16
|
||
|
call drawwin
|
||
|
mov [Scroll1CoordinatX],9
|
||
|
mov [Scroll2CoordinatY],89
|
||
|
and [Current_instrument],0
|
||
|
jmp still
|
||
|
no_16_:
|
||
|
|
||
|
;***************allocation of a countour*********************
|
||
|
cmp eax,21
|
||
|
jne no_allocation
|
||
|
|
||
|
cmp [instrument_used],0
|
||
|
jnz instrument_not_finished_work
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_allocation_xy
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
inc eax
|
||
|
inc ebx
|
||
|
mov [rectangular_shade_x],eax
|
||
|
mov [rectangular_shade_y],ebx
|
||
|
mov [Activate_instrument],1
|
||
|
mov [instrument_used],1
|
||
|
and [crossing],0
|
||
|
and [finishing_crossing],0
|
||
|
mov eax,[ReserveArray]
|
||
|
mov ecx,60000
|
||
|
clear_array_allocation:
|
||
|
mov [eax],dword 0
|
||
|
add eax,4
|
||
|
dec ecx
|
||
|
jnz clear_array_allocation
|
||
|
jmp still
|
||
|
no_new_allocation_xy:
|
||
|
instrument_not_finished_work:
|
||
|
|
||
|
mov al,[instrument_used]
|
||
|
test al,al
|
||
|
jz no_change_coordinats
|
||
|
|
||
|
cmp [Activate_instrument],0
|
||
|
jnz no_change_coordinats
|
||
|
|
||
|
;save coordinates as old if crossing=0
|
||
|
cmp [crossing],0
|
||
|
jnz no_save_coordinate_of_crossing
|
||
|
|
||
|
mov eax,[OldX]
|
||
|
mov ebx,[OldY]
|
||
|
|
||
|
cmp eax,[rectangular_shade_x]
|
||
|
jl no_remove_x
|
||
|
mov ecx,[rectangular_shade_x]
|
||
|
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x
|
||
|
mov [rectangular_shade_x],eax
|
||
|
no_remove_x:
|
||
|
|
||
|
cmp ebx,[rectangular_shade_y]
|
||
|
jl no_remove_y
|
||
|
mov ecx,[rectangular_shade_y]
|
||
|
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y
|
||
|
mov [rectangular_shade_y],ebx
|
||
|
no_remove_y:
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [crossing_old_x],eax
|
||
|
mov [crossing_old_y],ebx
|
||
|
mov [crossing],1
|
||
|
|
||
|
|
||
|
mov eax,[OldX]
|
||
|
mov ebx,[OldY]
|
||
|
inc eax
|
||
|
inc ebx
|
||
|
mov [SpriteCoordinatX],eax
|
||
|
mov [SpriteCoordinatY],ebx
|
||
|
mov [SpriteOldCoordinatX],eax
|
||
|
mov [SpriteOldCoordinatY],ebx
|
||
|
mov esi,[rectangular_shade_x]
|
||
|
mov edi,[rectangular_shade_y]
|
||
|
|
||
|
sub esi,eax
|
||
|
jns no_sign_sprite_size_x
|
||
|
neg esi
|
||
|
no_sign_sprite_size_x:
|
||
|
|
||
|
sub edi,ebx
|
||
|
jns no_sign_sprite_size_y
|
||
|
neg edi
|
||
|
no_sign_sprite_size_y:
|
||
|
|
||
|
test esi,esi
|
||
|
jnz no_null_sprite_x
|
||
|
mov esi,1
|
||
|
no_null_sprite_x:
|
||
|
|
||
|
test edi,edi
|
||
|
jnz no_null_sprite_y
|
||
|
mov edi,1
|
||
|
no_null_sprite_y:
|
||
|
|
||
|
mov [SpriteSizeX],esi
|
||
|
mov [SpriteSizeY],edi
|
||
|
|
||
|
call SaveFonForSprite
|
||
|
|
||
|
no_save_coordinate_of_crossing:
|
||
|
|
||
|
cmp [crossing],0
|
||
|
je no_test_crossing_with_work_arrea
|
||
|
;if mouse situatad after allocation than exit
|
||
|
push [ScreenX]
|
||
|
push [ScreenY]
|
||
|
|
||
|
call GetScreenCordinats
|
||
|
|
||
|
mov eax,[OldX]
|
||
|
mov ebx,[OldY]
|
||
|
mov ecx,[ScreenX]
|
||
|
mov edx,[ScreenY]
|
||
|
mov esi,[SpriteSizeX]
|
||
|
mov edi,[SpriteSizeY]
|
||
|
add ecx,[PosX]
|
||
|
add edx,[PosY]
|
||
|
inc esi;eax
|
||
|
inc edi;ebx
|
||
|
call columnus
|
||
|
|
||
|
test eax,eax
|
||
|
jnz crossing_with_work_area
|
||
|
mov [finishing_crossing],1
|
||
|
mov [register],1
|
||
|
crossing_with_work_area:
|
||
|
|
||
|
pop [ScreenY]
|
||
|
pop [ScreenX]
|
||
|
|
||
|
no_test_crossing_with_work_arrea:
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov ecx,eax
|
||
|
mov edx,ebx
|
||
|
sub eax,[crossing_old_x] ;dx=(x-oldx)
|
||
|
sub ebx,[crossing_old_y] ;dy=(y-oldy)
|
||
|
mov [crossing_old_x],ecx
|
||
|
mov [crossing_old_y],edx
|
||
|
|
||
|
add [OldX],eax ;x1=x1+dx
|
||
|
add [OldY],ebx ;y1=y1+dy
|
||
|
add [rectangular_shade_x],eax ;x2=x2+dx
|
||
|
add [rectangular_shade_y],ebx ;y2+y2+dy
|
||
|
|
||
|
mov eax,[OldX]
|
||
|
mov ebx,[OldY]
|
||
|
inc eax
|
||
|
inc ebx
|
||
|
mov [SpriteCoordinatX],eax
|
||
|
mov [SpriteCoordinatY],ebx
|
||
|
|
||
|
cmp [SpriteCoordinatX],0
|
||
|
jns no_null_sprite_coordinat_x
|
||
|
mov [SpriteCoordinatX],1
|
||
|
no_null_sprite_coordinat_x:
|
||
|
|
||
|
cmp [SpriteCoordinatY],0
|
||
|
jns no_null_sprite_coordinat_y
|
||
|
mov [SpriteCoordinatY],1
|
||
|
no_null_sprite_coordinat_y:
|
||
|
|
||
|
mov esi,[rectangular_shade_x]
|
||
|
mov edi,[rectangular_shade_y]
|
||
|
|
||
|
sub esi,[OldX]
|
||
|
jns no_znak_size_of_rectangulare_crossing_x
|
||
|
neg esi
|
||
|
no_znak_size_of_rectangulare_crossing_x:
|
||
|
|
||
|
sub edi,[OldY]
|
||
|
jns no_znak_size_of_rectangulare_crossing_y
|
||
|
neg edi
|
||
|
no_znak_size_of_rectangulare_crossing_y:
|
||
|
|
||
|
mov ecx,[OldX]
|
||
|
mov edx,[OldY]
|
||
|
|
||
|
sub ecx,[PosX]
|
||
|
jns no_minimum_x_crossing
|
||
|
mov ecx,0
|
||
|
add ecx,[PosX]
|
||
|
mov [OldX],ecx
|
||
|
add ecx,esi
|
||
|
mov [rectangular_shade_x],ecx
|
||
|
no_minimum_x_crossing:
|
||
|
|
||
|
sub edx,[PosY]
|
||
|
jns no_minimum_y_crossing
|
||
|
mov edx,0
|
||
|
add edx,[PosY]
|
||
|
mov [OldY],edx
|
||
|
add edx,edi
|
||
|
mov [rectangular_shade_y],edx
|
||
|
no_minimum_y_crossing:
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,esi
|
||
|
cmp [OldX],ecx
|
||
|
jl no_maximum_x_crossing
|
||
|
dec ecx
|
||
|
mov [OldX],ecx
|
||
|
add ecx,esi
|
||
|
mov [rectangular_shade_x],ecx
|
||
|
no_maximum_x_crossing:
|
||
|
|
||
|
mov edx,[Picture_SizeY]
|
||
|
sub edx,edi
|
||
|
cmp [OldY],edx
|
||
|
jl no_maximum_y_crossing
|
||
|
dec edx
|
||
|
mov [OldY],edx
|
||
|
add edx,edi
|
||
|
mov [rectangular_shade_y],edx
|
||
|
no_maximum_y_crossing:
|
||
|
|
||
|
mov eax,[rectangular_shade_x]
|
||
|
mov ebx,[rectangular_shade_y]
|
||
|
sub eax,[PosX]
|
||
|
sub ebx,[PosY]
|
||
|
mov [ScreenX],eax
|
||
|
mov [ScreenY],ebx
|
||
|
no_change_coordinats:
|
||
|
|
||
|
;put saved pixels
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov eax,[ebx]
|
||
|
test eax,eax
|
||
|
jz no_put_line_to_screen_allocation
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
xor ebp,ebp
|
||
|
next_color_put_allocation:
|
||
|
;put saved pixels in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
push edi
|
||
|
vertical_width_put_allocation:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_put_allocation:
|
||
|
mov edx,[ebx+4807*4+ebp]
|
||
|
and edx,0xffffff
|
||
|
mov [edi],dx
|
||
|
shr edx,16
|
||
|
mov [edi+2],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],1;5
|
||
|
jne horizontal_width_put_allocation
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,1;5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],1;5
|
||
|
jne vertical_width_put_allocation
|
||
|
pop edi
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_put_allocation
|
||
|
|
||
|
no_put_line_to_screen_allocation:
|
||
|
|
||
|
cmp [DrawSprite_flag],1
|
||
|
jne no_activate_put_fon_
|
||
|
|
||
|
cmp [Paste_flag],1
|
||
|
je no_put_fon___
|
||
|
call PutFonForSprite
|
||
|
no_put_fon___:
|
||
|
and [Paste_flag],0
|
||
|
no_activate_put_fon_:
|
||
|
|
||
|
cmp [finishing_crossing],0
|
||
|
jz not_finish_from_instrument_crossing
|
||
|
and [Activate_instrument],0
|
||
|
and [crossing],0
|
||
|
and [instrument_used],0
|
||
|
and [DrawSprite_flag],0
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
not_finish_from_instrument_crossing:
|
||
|
|
||
|
;calculate line
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[OldX]
|
||
|
shl edx,16
|
||
|
add edx,[OldY]
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
mov ebp,[Picture_SizeX]
|
||
|
dec ebp
|
||
|
cmp esi,ebp
|
||
|
jl no_minimum_x_allocation
|
||
|
mov esi,ebp
|
||
|
no_minimum_x_allocation:
|
||
|
|
||
|
mov ebp,[Picture_SizeY]
|
||
|
dec ebp
|
||
|
cmp edi,ebp
|
||
|
jl no_minimum_y_allocation
|
||
|
mov edi,ebp
|
||
|
no_minimum_y_allocation:
|
||
|
|
||
|
call calculate_rectangle
|
||
|
mov [counter],eax
|
||
|
|
||
|
;save color pixels in ReserveArray
|
||
|
mov eax,[counter]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
|
||
|
xor ebp,ebp
|
||
|
next_color_save_allocation:
|
||
|
;save color of pixel in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
vertical_width_save_allocation:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_save_allocation:
|
||
|
mov eax,edi
|
||
|
mov edx,[eax]
|
||
|
and edx,0xffffff
|
||
|
mov [ebx+4807*4+ebp],dx
|
||
|
shr edx,16
|
||
|
mov [ebx+4807*4+2+ebp],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],1;5
|
||
|
jne horizontal_width_save_allocation
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,1;5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],1;5
|
||
|
jne vertical_width_save_allocation
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_save_allocation
|
||
|
|
||
|
cmp [DrawSprite_flag],1
|
||
|
jne no_save_fon_for_sprite_
|
||
|
;save current coordinats as old
|
||
|
mov eax,[SpriteCoordinatX]
|
||
|
mov ebx,[SpriteCoordinatY]
|
||
|
mov [SpriteOldCoordinatX],eax
|
||
|
mov [SpriteOldCoordinatY],ebx
|
||
|
|
||
|
call SaveFonForSprite
|
||
|
|
||
|
no_save_fon_for_sprite_:
|
||
|
|
||
|
;draw calculated pixels on work arrea
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
next_pixel_put_allocation:
|
||
|
|
||
|
mov edx,0x1f3fff
|
||
|
mov esi,edx
|
||
|
shr edx,16
|
||
|
|
||
|
mov ebp,ecx
|
||
|
and ebp,8
|
||
|
cmp ebp,8
|
||
|
jne black_color
|
||
|
mov si,0xffff
|
||
|
mov dl,0xff
|
||
|
black_color:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_allocation
|
||
|
|
||
|
cmp [DrawSprite_flag],1
|
||
|
jne no_activate_draw_sprite_
|
||
|
|
||
|
call DrawSprite
|
||
|
|
||
|
no_activate_draw_sprite_:
|
||
|
|
||
|
mov al,[instrument_used]
|
||
|
test al,al
|
||
|
jz no_change_coordinats
|
||
|
cmp [Activate_instrument],0
|
||
|
jz no_save_shades
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [rectangular_shade_x],eax
|
||
|
mov [rectangular_shade_y],ebx
|
||
|
no_save_shades:
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
no_allocation:
|
||
|
|
||
|
;*************reflection from left to right******************
|
||
|
cmp eax,23
|
||
|
jne no_reflection_from_left_to_right
|
||
|
|
||
|
mov ebp,[PointerToPicture]
|
||
|
mov edx,[ReserveArray]
|
||
|
mov esi,[Picture_SizeX]
|
||
|
mov ebx,[Picture_SizeX]
|
||
|
lea ebx,[ebx+ebx*2]
|
||
|
shr esi,1
|
||
|
next_line_reflection_x:
|
||
|
;copy vertical line to array
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
shr ecx,1
|
||
|
sub ecx,esi
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add ecx,[PointerToPicture]
|
||
|
mov edx,[ReserveArray]
|
||
|
and edi,0
|
||
|
copy_to_array_line_reflection_y:
|
||
|
xor eax,eax
|
||
|
mov eax,[ecx]
|
||
|
mov ebp,edi
|
||
|
lea ebp,[ebp+ebp*2]
|
||
|
mov [edx+ebp],ax
|
||
|
shr eax,16
|
||
|
mov [edx+ebp+2],al
|
||
|
add ecx,ebx
|
||
|
inc edi
|
||
|
cmp edi,[Picture_SizeY]
|
||
|
jne copy_to_array_line_reflection_y
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
shr ecx,1
|
||
|
mov ebp,ecx
|
||
|
add ecx,esi
|
||
|
dec ecx
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add ecx,[PointerToPicture]
|
||
|
sub ebp,esi
|
||
|
lea ebp,[ebp+ebp*2]
|
||
|
add ebp,[PointerToPicture]
|
||
|
and edi,0
|
||
|
next_line_reflection_y:
|
||
|
mov eax,[ecx]
|
||
|
and eax,0xffffff
|
||
|
mov [ebp],ax
|
||
|
shr eax,16
|
||
|
mov [ebp+2],al
|
||
|
add ebp,ebx
|
||
|
add ecx,ebx
|
||
|
inc edi
|
||
|
cmp edi,[Picture_SizeY]
|
||
|
jnz next_line_reflection_y
|
||
|
|
||
|
;copy vertical line from array to screen
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
shr ecx,1
|
||
|
add ecx,esi
|
||
|
dec ecx
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add ecx,[PointerToPicture]
|
||
|
mov edx,[ReserveArray]
|
||
|
and edi,0
|
||
|
copy_from_array_to_screen_reflection_y:
|
||
|
mov ebp,edi
|
||
|
lea ebp,[ebp+ebp*2]
|
||
|
xor eax,eax
|
||
|
mov eax,[edx+ebp]
|
||
|
mov [ecx],ax
|
||
|
shr eax,16
|
||
|
mov [ecx+2],al
|
||
|
add ecx,ebx
|
||
|
inc edi
|
||
|
cmp edi,[Picture_SizeY]
|
||
|
jne copy_from_array_to_screen_reflection_y
|
||
|
|
||
|
dec esi
|
||
|
jnz next_line_reflection_x
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
no_reflection_from_left_to_right:
|
||
|
|
||
|
;*************reflection from up to down******************
|
||
|
cmp eax,24
|
||
|
jne no_reflection_from_up_to_down
|
||
|
mov esi,[Picture_SizeX]
|
||
|
mov edi,esi
|
||
|
lea esi,[esi+esi*2]
|
||
|
lea edi,[edi+edi*2]
|
||
|
imul edi,[Picture_SizeY]
|
||
|
mov edx,[ReserveArray]
|
||
|
mov ecx,[Picture_SizeY]
|
||
|
shr ecx,1
|
||
|
add edi,[PointerToPicture]
|
||
|
sub edi,esi
|
||
|
mov ebp,[PointerToPicture]
|
||
|
next_lines_reflection:
|
||
|
;copy line
|
||
|
xor ebx,ebx
|
||
|
copy_line_1:
|
||
|
xor eax,eax
|
||
|
mov al,[edi+ebx]
|
||
|
mov [edx+ebx],al
|
||
|
inc ebx
|
||
|
cmp ebx,esi
|
||
|
jne copy_line_1
|
||
|
|
||
|
xor ebx,ebx
|
||
|
copy_line_2:
|
||
|
xor eax,eax
|
||
|
mov al,[ebp+ebx]
|
||
|
mov [edi+ebx],al
|
||
|
inc ebx
|
||
|
cmp ebx,esi
|
||
|
jne copy_line_2
|
||
|
|
||
|
xor ebx,ebx
|
||
|
copy_line_3:
|
||
|
xor eax,eax
|
||
|
mov al,[edx+ebx]
|
||
|
mov [ebp+ebx],al
|
||
|
inc ebx
|
||
|
cmp ebx,esi
|
||
|
jne copy_line_3
|
||
|
|
||
|
add ebp,esi
|
||
|
sub edi,esi
|
||
|
dec ecx
|
||
|
jnz next_lines_reflection
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
no_reflection_from_up_to_down:
|
||
|
|
||
|
;*********************draw hard contour*******************
|
||
|
cmp eax,20
|
||
|
jne no_kontur_
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_konture_xy
|
||
|
|
||
|
mov al,[instrument_used]
|
||
|
test al,al
|
||
|
jz instrument_not_used
|
||
|
mov eax,[used_OldX]
|
||
|
mov ebx,[used_OldY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
jmp exit_used_instrument
|
||
|
instrument_not_used:
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
exit_used_instrument:
|
||
|
|
||
|
mov al,[instrument_used]
|
||
|
test al,al
|
||
|
jnz instrument_used_true
|
||
|
mov [instrument_used],byte 1
|
||
|
instrument_used_true:
|
||
|
|
||
|
mov [Activate_instrument],1
|
||
|
mov eax,[ReserveArray]
|
||
|
mov ecx,60000
|
||
|
clear_array_konture:
|
||
|
mov [eax],dword 0
|
||
|
add eax,4
|
||
|
dec ecx
|
||
|
jnz clear_array_line
|
||
|
|
||
|
no_new_konture_xy:
|
||
|
|
||
|
;put saved pixels
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov eax,[ebx]
|
||
|
test eax,eax
|
||
|
jz no_put_line_to_screen_konture
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
xor ebp,ebp
|
||
|
next_color_put_konture:
|
||
|
;put saved pixels in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
push edi
|
||
|
vertical_width_put_konture:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_put_konture:
|
||
|
mov edx,[ebx+4807*4+ebp]
|
||
|
and edx,0xffffff
|
||
|
mov [edi],dx
|
||
|
shr edx,16
|
||
|
mov [edi+2],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_put_konture
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_put_konture
|
||
|
pop edi
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_put_konture
|
||
|
|
||
|
no_put_line_to_screen_konture:
|
||
|
|
||
|
;calculate line
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[OldX]
|
||
|
shl edx,16
|
||
|
add edx,[OldY]
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
mov ebp,[Picture_SizeX]
|
||
|
sub ebp,[line_width]
|
||
|
cmp esi,ebp
|
||
|
jl no_minimum_x_konture
|
||
|
mov esi,ebp
|
||
|
no_minimum_x_konture:
|
||
|
|
||
|
mov ebp,[Picture_SizeY]
|
||
|
sub ebp,[line_width]
|
||
|
cmp edi,ebp
|
||
|
jl no_minimum_y_konture
|
||
|
mov edi,ebp
|
||
|
no_minimum_y_konture:
|
||
|
|
||
|
call calculate_line
|
||
|
;call calculate_rectangle
|
||
|
mov [counter],eax
|
||
|
|
||
|
;save color pixels in ReserveArray
|
||
|
mov eax,[counter]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
|
||
|
xor ebp,ebp
|
||
|
next_color_save_konture:
|
||
|
;save color of pixel in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
vertical_width_save_konture:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_save_konture:
|
||
|
mov eax,edi
|
||
|
mov edx,[eax]
|
||
|
and edx,0xffffff
|
||
|
mov [ebx+4807*4+ebp],dx
|
||
|
shr edx,16
|
||
|
mov [ebx+4807*4+2+ebp],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_save_konture
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_save_konture
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_save_konture
|
||
|
|
||
|
;draw calculated pixels on work arrea
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
add ebx,4
|
||
|
mov edi,[line_width]
|
||
|
dec edi
|
||
|
imul edi,25
|
||
|
next_pixel_put_konture:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
push eax
|
||
|
push ecx
|
||
|
xor ebp,ebp
|
||
|
and [counter2],0
|
||
|
|
||
|
vertical_width_konture:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_konture:
|
||
|
xor ecx,ecx
|
||
|
mov cl,byte[width_pixels+edi+ebp]
|
||
|
test cl,cl
|
||
|
jz no_draw_pixel_konture
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
no_draw_pixel_konture:
|
||
|
add eax,3
|
||
|
inc ebp
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_konture
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add eax,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_konture
|
||
|
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_konture
|
||
|
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [used_OldX],eax
|
||
|
mov [used_OldY],ebx
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
no_kontur_:
|
||
|
;************************Draw ellips***********************
|
||
|
cmp eax,19
|
||
|
jne no_ellips
|
||
|
|
||
|
mov [Last_instrument],eax
|
||
|
|
||
|
mov al,[Activate_instrument]
|
||
|
test al,al
|
||
|
jnz no_new_ellips_xy
|
||
|
mov eax,[ScreenX]
|
||
|
mov ebx,[ScreenY]
|
||
|
add eax,[PosX]
|
||
|
add ebx,[PosY]
|
||
|
mov [OldX],eax
|
||
|
mov [OldY],ebx
|
||
|
mov [Activate_instrument],1
|
||
|
mov eax,[ReserveArray]
|
||
|
mov ecx,60000
|
||
|
clear_array_ellips:
|
||
|
mov [eax],dword 0
|
||
|
add eax,4
|
||
|
dec ecx
|
||
|
jnz clear_array_ellips
|
||
|
jmp still
|
||
|
no_new_ellips_xy:
|
||
|
|
||
|
;put saved pixels
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov eax,[ebx]
|
||
|
test eax,eax
|
||
|
jz no_put_line_to_screen_ellips
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
xor ebp,ebp
|
||
|
next_color_put_ellips:
|
||
|
;put saved pixels in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
push edi
|
||
|
vertical_width_put_ellips:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_put_ellips:
|
||
|
mov edx,[ebx+4807*4+ebp]
|
||
|
and edx,0xffffff
|
||
|
mov [edi],dx
|
||
|
shr edx,16
|
||
|
mov [edi+2],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_put_ellips
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_put_ellips
|
||
|
pop edi
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_put_ellips
|
||
|
|
||
|
no_put_line_to_screen_ellips:
|
||
|
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
sub esi,[OldX]
|
||
|
jns no_sign_x_ellips
|
||
|
neg esi
|
||
|
shr esi,1
|
||
|
neg esi
|
||
|
add esi,[OldX]
|
||
|
jmp no_plus_sign_x_ellips
|
||
|
no_sign_x_ellips:
|
||
|
|
||
|
shr esi,1
|
||
|
add esi,[OldX]
|
||
|
no_plus_sign_x_ellips:
|
||
|
|
||
|
sub edi,[OldY]
|
||
|
jns no_sign_y_ellips
|
||
|
neg edi
|
||
|
shr edi,1
|
||
|
neg edi
|
||
|
add edi,[OldY]
|
||
|
jmp no_plus_sign_y_ellips
|
||
|
no_sign_y_ellips:
|
||
|
|
||
|
shr edi,1
|
||
|
add edi,[OldY]
|
||
|
no_plus_sign_y_ellips:
|
||
|
|
||
|
mov [x],esi
|
||
|
mov [y],edi
|
||
|
|
||
|
mov esi,[ScreenX]
|
||
|
mov edi,[ScreenY]
|
||
|
add esi,[PosX]
|
||
|
add edi,[PosY]
|
||
|
|
||
|
sub esi,[OldX]
|
||
|
jns no_sign_x_ellips_r
|
||
|
neg esi
|
||
|
no_sign_x_ellips_r:
|
||
|
|
||
|
sub edi,[OldY]
|
||
|
jns no_sign_y_ellips_r
|
||
|
neg edi
|
||
|
no_sign_y_ellips_r:
|
||
|
|
||
|
cmp edi,0
|
||
|
jnz no_null_a_ellips
|
||
|
mov edi,1
|
||
|
no_null_a_ellips:
|
||
|
|
||
|
shr esi,1
|
||
|
shr edi,1
|
||
|
mov [a_ellips],esi
|
||
|
mov [b_ellips],edi
|
||
|
|
||
|
mov edi,[x]
|
||
|
mov ebp,[y]
|
||
|
add edi,esi
|
||
|
add ebp,esi
|
||
|
|
||
|
mov edx,[Picture_SizeX]
|
||
|
sub edx,[line_width]
|
||
|
cmp edi,edx
|
||
|
jl no_limit_x_ellips
|
||
|
sub edi,edx
|
||
|
sub [a_ellips],edi
|
||
|
no_limit_x_ellips:
|
||
|
|
||
|
mov edx,[Picture_SizeY]
|
||
|
sub edx,[line_width]
|
||
|
cmp ebp,edx
|
||
|
jl no_limit_y_ellips
|
||
|
sub ebp,edx
|
||
|
sub [b_ellips],ebp
|
||
|
no_limit_y_ellips:
|
||
|
|
||
|
|
||
|
mov edi,[x]
|
||
|
mov ebp,[y]
|
||
|
|
||
|
sub edi,[a_ellips]
|
||
|
jns no_minimum_x_ellips
|
||
|
add [a_ellips],edi
|
||
|
no_minimum_x_ellips:
|
||
|
|
||
|
sub ebp,[b_ellips]
|
||
|
jns no_minimum_y_ellips
|
||
|
add [b_ellips],ebp
|
||
|
no_minimum_y_ellips:
|
||
|
|
||
|
;calculate circle
|
||
|
mov ebx,[ReserveArray]
|
||
|
add ebx,4
|
||
|
mov eax,[PointerToPicture]
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
mov edx,[x]
|
||
|
shl edx,16
|
||
|
add edx,[y]
|
||
|
mov esi,[a_ellips]
|
||
|
shl esi,16
|
||
|
add esi,[b_ellips]
|
||
|
call calculate_ellips
|
||
|
|
||
|
mov [counter],eax
|
||
|
|
||
|
;save color pixels in ReserveArray
|
||
|
mov eax,[counter]
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov [ebx],eax
|
||
|
|
||
|
mov ecx,[ebx]
|
||
|
add ebx,4
|
||
|
|
||
|
xor ebp,ebp
|
||
|
next_color_save_ellips:
|
||
|
;save color of pixel in ReserveArray
|
||
|
push ecx
|
||
|
and [counter2],0
|
||
|
mov edi,[ebx]
|
||
|
vertical_width_save_ellips:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_save_ellips:
|
||
|
mov eax,edi
|
||
|
mov edx,[eax]
|
||
|
and edx,0xffffff
|
||
|
mov [ebx+4807*4+ebp],dx
|
||
|
shr edx,16
|
||
|
mov [ebx+4807*4+2+ebp],dl
|
||
|
|
||
|
add edi,3
|
||
|
add ebp,4
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_save_ellips
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add edi,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_save_ellips
|
||
|
pop ecx
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_color_save_ellips
|
||
|
|
||
|
;draw calculated pixels on work arrea
|
||
|
mov ebx,[ReserveArray]
|
||
|
mov ecx,[ebx]
|
||
|
mov edx,[Color]
|
||
|
mov esi,[Color]
|
||
|
shr edx,16
|
||
|
add ebx,4
|
||
|
mov edi,[line_width]
|
||
|
dec edi
|
||
|
imul edi,25
|
||
|
next_pixel_put_ellips:
|
||
|
|
||
|
mov eax,[ebx]
|
||
|
push eax
|
||
|
push ecx
|
||
|
xor ebp,ebp
|
||
|
and [counter2],0
|
||
|
|
||
|
vertical_width_ellips:
|
||
|
and [counter],0
|
||
|
|
||
|
horizontal_width_ellips:
|
||
|
xor ecx,ecx
|
||
|
mov cl,byte[width_pixels+edi+ebp]
|
||
|
test cl,cl
|
||
|
jz no_draw_pixel_ellips
|
||
|
mov [eax],si
|
||
|
mov [eax+2],dl
|
||
|
no_draw_pixel_ellips:
|
||
|
add eax,3
|
||
|
inc ebp
|
||
|
inc [counter]
|
||
|
cmp [counter],5
|
||
|
jne horizontal_width_ellips
|
||
|
|
||
|
mov ecx,[Picture_SizeX]
|
||
|
sub ecx,5
|
||
|
lea ecx,[ecx+ecx*2]
|
||
|
add eax,ecx
|
||
|
inc [counter2]
|
||
|
cmp [counter2],5
|
||
|
jne vertical_width_ellips
|
||
|
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
add ebx,4
|
||
|
dec ecx
|
||
|
jnz next_pixel_put_ellips
|
||
|
|
||
|
call MovePictureToWorkScreen
|
||
|
jmp still
|
||
|
no_ellips:
|
||
|
|
||
|
|
||
|
jmp still
|
||
|
ret
|