0,0 → 1,848 |
;----------------------------------------------------------- |
;-----------instruments of menu----------------------------- |
;----------------------------------------------------------- |
TakeInstruments: |
|
;|||||||||||||||||||FILE|||||||||||||||||||||| |
cmp [number_panel],7 |
jne no_file |
|
;<<<<<NEW>>>>>>> |
cmp [number_menu],1 |
jne no_new |
|
mov eax,80 |
mov ebx,100 |
mov ecx,150 |
mov edx,90 |
mov esi,1 |
call draw_volume_rectangle |
|
mov eax,177 |
mov ebx,115 |
mov ecx,40 |
mov edx,14 |
mov esi,4 |
call draw_volume_rectangle |
|
mov eax,177 |
mov ebx,115+24 |
mov ecx,40 |
mov edx,14 |
mov esi,4 |
call draw_volume_rectangle |
|
mov eax,175 |
mov ebx,170 |
mov ecx,40 |
mov edx,15 |
mov esi,1 |
call draw_volume_rectangle |
|
mov eax,90 |
mov ebx,118 |
mov ecx,0xffffff |
mov edx,new_text1 |
mov esi,14 |
call print_text |
|
mov eax,90 |
mov ebx,118+24 |
mov ecx,0xffffff |
mov edx,new_text2 |
mov esi,14 |
call print_text |
|
mov eax,185 |
mov ebx,175 |
mov ecx,0xffffff |
mov edx,ok_text |
mov esi,2 |
call print_text |
|
mov eax,8 |
mov ebx,177*65536+40 |
mov ecx,115*65536+14 |
mov edx,1000000000000000000000000000000b |
add edx,1000 |
int 0x40 |
|
mov eax,8 |
mov ebx,177*65536+40 |
mov ecx,139*65536+14 |
mov edx,1000000000000000000000000000000b |
add edx,1001 |
int 0x40 |
|
mov eax,8 |
mov ebx,175*65536+40 |
mov ecx,170*65536+15 |
mov edx,1000000000000000000000000000000b |
add edx,1002 |
int 0x40 |
|
no_activate_space: |
|
mov eax,10 |
int 0x40 |
|
cmp eax,1 |
je exit_new |
|
cmp eax,3 |
jne no_activate_space |
|
mov eax,17 |
int 0x40 |
shr eax,8 |
|
cmp eax,1000 |
jl no_activate_space |
|
cmp eax,1000 |
jne no_picture_size_x |
|
mov eax,180 |
mov ebx,119 |
mov ecx,5 |
call dialog_line |
|
mov eax,string_ |
mov ebx,13 |
call find_symvol |
|
dec eax |
mov [length_number],eax |
mov eax,string_ |
call value |
|
mov [Picture_SizeX],eax |
|
jmp no_activate_space |
|
no_picture_size_x: |
|
cmp eax,1001 |
jne no_picture_size_y |
|
mov eax,180 |
mov ebx,119+24 |
mov ecx,5 |
call dialog_line |
|
mov eax,string_ |
mov ebx,13 |
call find_symvol |
|
dec eax |
mov [length_number],eax |
mov eax,string_ |
call value |
|
mov [Picture_SizeY],eax |
|
jmp no_activate_space |
|
no_picture_size_y: |
|
cmp eax,1002 |
jne no_activate_space |
|
exit_new: |
|
mov eax,8 |
mov ebx,175*65536+40 |
mov ecx,170*65536+15 |
mov edx,11100000000000000000000000000000b |
add edx,1002 |
int 0x40 |
|
mov eax,8 |
mov ebx,177*65536+40 |
mov ecx,139*65536+14 |
mov edx,11100000000000000000000000000000b |
add edx,1001 |
int 0x40 |
|
mov eax,8 |
mov ebx,177*65536+40 |
mov ecx,115*65536+14 |
mov edx,11100000000000000000000000000000b |
add edx,1000 |
int 0x40 |
|
;get memory for new picture |
mov eax,[Picture_SizeX] |
mov ebx,[Picture_SizeY] |
|
imul eax,ebx |
lea eax,[eax+eax*2] |
|
mov ebx,[ScreenPointer] |
add ebx,(1200*1000*3)+50*(20*20*3)+500000 |
|
mov [PointerToPicture],ebx |
mov [PointerToCopyPicture],ebx |
mov [PointerToCopyPicture2],ebx |
mov [PointerToEditBufer],ebx |
mov [PointerToSpriteBufer],ebx |
|
add [PointerToCopyPicture],eax |
|
add [PointerToCopyPicture2],eax |
add [PointerToCopyPicture2],eax |
|
add [PointerToEditBufer],eax |
add [PointerToEditBufer],eax |
add [PointerToEditBufer],eax |
|
add [PointerToSpriteBufer],eax |
add [PointerToSpriteBufer],eax |
add [PointerToSpriteBufer],eax |
add [PointerToSpriteBufer],eax |
|
call GetMemory |
|
and [save_flag],0 |
and [number_panel],0 |
and [number_menu],0 |
|
call cleare_work_arrea |
call drawwin |
|
jmp still |
no_new: |
|
;<<<<<OPEN>>>>>>> |
cmp [number_menu],2 |
jne no_open |
|
opendialog drawwin,open_1,open_2,file_path |
open_1: |
|
mov eax,40 |
mov ebx,100111b |
int 0x40 |
|
mov eax,file_path |
mov ebx,[ScreenPointer] |
add ebx,0x10000 |
|
call load_heading_of_file |
|
mov esi,[ScreenPointer] |
add esi,0x10000 |
;-------------is this BMP file ?---------------- |
xor eax,eax |
mov ax,[esi] |
mov [type],ax |
|
cmp [type],word 'BM' |
jne no_bmp_file |
|
xor eax,eax |
xor ebx,ebx |
mov eax,[esi+18] |
mov ebx,[esi+22] |
mov [Picture_SizeX],eax |
mov [Picture_SizeY],ebx |
|
jmp exit_type |
|
no_bmp_file: |
|
;-------------is this GIF file ?---------------- |
xor eax,eax |
mov ax,[esi] |
mov [type],ax |
|
cmp [type],'GI' |
jne no_gif_file |
|
add esi,6 |
xor eax,eax |
xor ebx,ebx |
mov ax,word[esi] |
mov bx,word[esi+2] |
mov [Picture_SizeX],eax |
mov [Picture_SizeY],ebx |
|
jmp exit_type |
|
no_gif_file: |
|
jmp no_unpakcing_file |
|
exit_type: |
|
;---------------------------------------------------------- |
;Get momory for unpacking picture and for picture's bufers |
;---------------------------------------------------------- |
mov eax,[Picture_SizeX] |
mov ebx,[Picture_SizeY] |
|
imul eax,ebx |
lea eax,[eax+eax*2] |
|
mov ebx,[ScreenPointer] |
add ebx,(1200*1000*3)+50*(20*20*3)+500000 |
|
mov [PointerToPicture],ebx |
mov [PointerToCopyPicture],ebx |
mov [PointerToCopyPicture2],ebx |
mov [PointerToEditBufer],ebx |
mov [PointerToSpriteBufer],ebx |
|
add [PointerToCopyPicture],eax |
|
add [PointerToCopyPicture2],eax |
add [PointerToCopyPicture2],eax |
|
add [PointerToEditBufer],eax |
add [PointerToEditBufer],eax |
add [PointerToEditBufer],eax |
|
add [PointerToSpriteBufer],eax |
add [PointerToSpriteBufer],eax |
add [PointerToSpriteBufer],eax |
add [PointerToSpriteBufer],eax |
|
call GetMemory |
;---------------------------------------------------------- |
;--------------------Load file in memory------------------- |
;---------------------------------------------------------- |
|
mov eax,file_path |
mov ebx,[PointerToCopyPicture] |
add ebx,1000 |
|
call load_file |
|
;---------------------------------------------------------- |
;-------------------Unpacking picture---------------------- |
;---------------------------------------------------------- |
mov esi,[PointerToCopyPicture] |
add esi,1000 |
mov edi,[PointerToPicture] |
mov eax,[ScreenPointer] |
|
cmp [type],'BM' |
jne no_unpakcing_bmp_file |
;BMP DECODER |
call bmptoimg |
mov [save_flag],1 |
no_unpakcing_bmp_file: |
|
|
cmp [type],'GI' |
jne no_unpakcing_file |
;GIF DECODER |
sub edi,12 |
call ReadGIF |
mov [save_flag],1 |
no_unpakcing_file: |
|
call load_icons |
call drawwin |
|
open_2: |
|
mov [Scroll1CoordinatX],9 |
mov [Scroll2CoordinatY],89 |
and [number_panel],0 |
and [number_menu],0 |
|
jmp still |
|
no_open: |
|
;<<<<<<<<<<<SAVE>>>>>>>>>>>> |
cmp [number_menu],3 |
jne no_save_ |
|
mov al,[save_flag] |
|
test al,al |
jz no_save_file |
|
jmp save_enter |
|
no_save_file: |
|
and [number_panel],0 |
and [number_menu],0 |
|
jmp still |
|
no_save_: |
|
;<<<<<<<<<SAVE AS>>>>>>>>>>> |
cmp [number_menu],4 |
jne no_save |
|
savedialog drawwin,save1,save2,file_path |
|
save1: |
|
save_enter: |
mov eax,40 |
mov ebx,100111b |
int 0x40 |
|
call analizing_picture_to_palette |
;eax => number of colors in picture |
mov ebx,[PointerToPicture] |
mov ecx,[PointerToEditBufer] |
mov edx,[PointerToPalette] |
mov esi,[Picture_SizeX] |
mov edi,[Picture_SizeY] |
|
call coding_bmp |
|
mov eax,file_path |
mov ecx,ebx |
mov ebx,[PointerToEditBufer] |
push eax |
push ebx |
push ecx |
|
call save_file |
|
mov [save_flag],1 |
and [number_panel],0 |
and [number_menu],0 |
call drawwin |
|
jmp still |
|
save2: |
|
and [number_panel],0 |
and [number_menu],0 |
|
jmp still |
no_save: |
|
;<<<<<<EXIT>>>>>>> |
cmp [number_menu],5 |
jne no_exit_program |
|
mov eax,-1 |
int 0x40 |
|
no_exit_program: |
|
no_file: |
|
;|||||||||||||||||||||||||||||EDIT||||||||||||||||||||||||| |
|
;<<<<<<<<<<UNDO>>>>>>>>>> |
cmp [number_panel],6 |
jne no_edit |
|
cmp [number_menu],1 |
jne no_undo |
|
cmp [number_undo],1 |
jne no_one____ |
|
mov esi,[PointerToCopyPicture] |
|
no_one____: |
|
cmp [number_undo],2 |
jne no_two____ |
|
mov esi,[PointerToCopyPicture2] |
|
no_two____: |
|
mov edi,[PointerToPicture] |
mov ecx,[Picture_SizeX] |
imul ecx,[Picture_SizeY] |
lea ecx,[ecx+ecx*2] |
add ecx,4 |
shr ecx,2 |
cld |
rep movsd |
call MovePictureToWorkScreen |
|
dec [number_undo] |
jnz no_null_undo |
|
mov [number_undo],1 |
|
no_null_undo: |
|
and [number_panel],0 |
and [number_menu],0 |
jmp still |
no_undo: |
|
;<<<<<<<<<<COPY>>>>>>>>>> |
|
cmp [number_menu],2 |
jne no_copy |
|
cmp [instrument_used],1 |
jne no_copy |
cmp [Activate_instrument],0 |
jne no_copy |
|
mov eax,[OldX] |
mov ebx,[OldY] |
|
cmp eax,[rectangular_shade_x] |
jl no_remove_x_copy |
|
mov ecx,[rectangular_shade_x] |
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x |
mov [rectangular_shade_x],eax |
|
no_remove_x_copy: |
|
cmp ebx,[rectangular_shade_y] |
jl no_remove_y_copy |
|
mov ecx,[rectangular_shade_y] |
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y |
mov [rectangular_shade_y],ebx |
|
no_remove_y_copy: |
|
mov eax,[OldX] |
mov ebx,[OldY] |
mov ecx,[rectangular_shade_x] |
mov edx,[rectangular_shade_y] |
inc eax |
inc ebx |
dec ecx |
dec edx |
|
mov [x],eax |
mov [y],ebx |
mov esi,eax |
mov edi,ebx |
mov [Dx_],1 |
mov [Dy_],1 |
|
sub ecx,eax |
jnz no_signum_fill_r_x_copy |
|
mov [Dx_],-1 |
|
no_signum_fill_r_x_copy: |
|
sub edx,ebx |
jnz no_signum_fill_r_y_copy |
|
mov [Dy_],-1 |
|
no_signum_fill_r_y_copy: |
|
mov ebx,[rectangular_shade_y] |
sub ebx,edi |
|
mov edx,[PointerToEditBufer] |
mov [y],edi |
loop_fill_rectangle_y_copy: |
|
mov [x],esi |
loop_fill_rectangle_x_copy: |
|
push esi |
push edi |
|
mov eax,[PointerToPicture] |
mov ebx,[Picture_SizeX] |
mov esi,[x] |
mov edi,[y] |
call GetColorOfPixel |
|
mov [edx],ax |
shr eax,16 |
mov [edx+2],al |
|
pop edi |
pop esi |
|
add edx,3 |
|
mov eax,[x] |
add eax,[Dx_] |
mov [x],eax |
|
cmp eax,[rectangular_shade_x] |
jl loop_fill_rectangle_x_copy |
|
mov eax,[y] |
add eax,[Dy_] |
mov [y],eax |
|
cmp eax,[rectangular_shade_y] |
jl loop_fill_rectangle_y_copy |
|
call MovePictureToWorkScreen |
|
and [number_panel],0 |
and [number_menu],0 |
mov [DrawSprite_flag],1 |
|
jmp still |
|
no_copy: |
|
;<<<<<<<<<<PASTE>>>>>>>> |
cmp [number_menu],3 |
jne no_paste |
|
cmp [instrument_used],1 |
jne no_paste |
|
cmp [Activate_instrument],0 |
jne no_paste |
|
mov eax,[OldX] |
mov ebx,[OldY] |
|
cmp eax,[rectangular_shade_x] |
jl no_remove_x_paste |
|
mov ecx,[rectangular_shade_x] |
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x |
mov [rectangular_shade_x],eax |
|
no_remove_x_paste: |
|
cmp ebx,[rectangular_shade_y] |
jl no_remove_y_paste |
|
mov ecx,[rectangular_shade_y] |
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y |
mov [rectangular_shade_y],ebx |
|
no_remove_y_paste: |
|
mov eax,[OldX] |
mov ebx,[OldY] |
mov ecx,[rectangular_shade_x] |
mov edx,[rectangular_shade_y] |
inc eax |
inc ebx |
dec ecx |
dec edx |
|
mov [x],eax |
mov [y],ebx |
mov esi,eax |
mov edi,ebx |
mov [Dx_],1 |
mov [Dy_],1 |
|
sub ecx,eax |
jnz no_signum_fill_r_x_paste |
|
mov [Dx_],-1 |
|
no_signum_fill_r_x_paste: |
|
sub edx,ebx |
jnz no_signum_fill_r_y_paste |
|
mov [Dy_],-1 |
|
no_signum_fill_r_y_paste: |
|
mov edx,[PointerToEditBufer] |
mov [y],edi |
|
loop_fill_rectangle_y_paste: |
|
mov [x],esi |
loop_fill_rectangle_x_paste: |
|
push esi |
push edi |
|
mov ecx,[edx] |
and ecx,0xffffff ;color |
|
mov eax,[PointerToPicture] |
mov ebx,[Picture_SizeX] |
mov esi,[x] |
mov edi,[y] |
call PutPixel |
|
pop edi |
pop esi |
|
add edx,3 |
|
mov eax,[x] |
add eax,[Dx_] |
mov [x],eax |
cmp eax,[rectangular_shade_x] |
jl loop_fill_rectangle_x_paste |
|
mov eax,[y] |
add eax,[Dy_] |
mov [y],eax |
cmp eax,[rectangular_shade_y] |
|
jl loop_fill_rectangle_y_paste |
|
call MovePictureToWorkScreen |
and [number_panel],0 |
and [number_menu],0 |
mov [Paste_flag],1 |
|
jmp still |
|
no_paste: |
|
;<<<<<<<<<<CUT>>>>>>>>>> |
cmp [number_menu],4 |
jne no_cut |
|
cmp [instrument_used],1 |
jne no_cut |
|
cmp [Activate_instrument],0 |
jne no_cut |
|
mov eax,[OldX] |
mov ebx,[OldY] |
|
cmp eax,[rectangular_shade_x] |
jl no_remove_x_cut |
|
mov ecx,[rectangular_shade_x] |
mov [OldX],ecx ; OldX <-----> rectangulare_shade_x |
mov [rectangular_shade_x],eax |
|
no_remove_x_cut: |
|
cmp ebx,[rectangular_shade_y] |
jl no_remove_y_cut |
|
mov ecx,[rectangular_shade_y] |
mov [OldY],ecx ; OldY <-----> rectangulare_shade_y |
mov [rectangular_shade_y],ebx |
|
no_remove_y_cut: |
|
mov eax,[OldX] |
mov ebx,[OldY] |
mov ecx,[rectangular_shade_x] |
mov edx,[rectangular_shade_y] |
inc eax |
inc ebx |
dec ecx |
dec edx |
|
mov [x],eax |
mov [y],ebx |
mov esi,eax |
mov edi,ebx |
mov [Dx_],1 |
mov [Dy_],1 |
|
sub ecx,eax |
jnz no_signum_fill_r_x |
|
mov [Dx_],-1 |
|
no_signum_fill_r_x: |
|
sub edx,ebx |
jnz no_signum_fill_r_y |
|
mov [Dy_],-1 |
|
no_signum_fill_r_y: |
|
mov [y],edi |
loop_fill_rectangle_y: |
|
mov [x],esi |
loop_fill_rectangle_x: |
|
push esi |
push edi |
|
mov eax,[PointerToPicture] |
mov ebx,[Picture_SizeX] |
mov ecx,dword 0xffffff |
mov esi,[x] |
mov edi,[y] |
call PutPixel |
|
pop edi |
pop esi |
|
mov eax,[x] |
add eax,[Dx_] |
mov [x],eax |
|
cmp eax,[rectangular_shade_x] |
jl loop_fill_rectangle_x |
|
mov eax,[y] |
add eax,[Dy_] |
mov [y],eax |
|
cmp eax,[rectangular_shade_y] |
jl loop_fill_rectangle_y |
|
call MovePictureToWorkScreen |
|
and [number_panel],0 |
and [number_menu],0 |
|
jmp still |
no_cut: |
|
;<<<<<<CLEARE ALL>>>>>> |
cmp [number_menu],5 |
jne no_cleare_all |
|
call cleare_work_arrea |
|
call MovePictureToWorkScreen |
|
and [number_panel],0 |
and [number_menu],0 |
|
jmp still |
no_cleare_all: |
;<<<<<<TO ALLOCATE ALL>>>>>> |
|
cmp [number_menu],6 |
jne no_to_allocate_all |
|
mov [OldX],1 |
mov [OldY],1 |
mov eax,[Picture_SizeX] |
mov ebx,[Picture_SizeY] |
dec eax |
dec ebx |
mov [rectangular_shade_x],eax |
mov [rectangular_shade_y],ebx |
mov [instrument_used],1 |
mov [Activate_instrument],1 |
mov [Current_instrument],30 |
mov [crossing],0 |
and [number_panel],0 |
and [number_menu],0 |
;call TakeButtonInstruments |
;call MovePictureToWorkScreen |
jmp still |
|
no_to_allocate_all: |
|
no_edit: |
|
|
jmp still |
|
ret |