;****************************************************** ;***GRAPHICS EDIT ANIMAGE creted by andrew_programmer** ;****************************************************** use32 org 0x0 db 'MENUET01' dd 0x1 dd START dd I_END dd 0x19000;100 kb dd 0x19000; dd 0x0 dd 0x0 include 'giflib.inc' include 'bmplib.inc' include 'dialog.inc' include 'dialog2.inc' include 'design.inc' include 'graphlib.inc' START: ;-------------------------------------------------------- ;---------------set events mask-------------------------- ;-------------------------------------------------------- mov eax,40 mov ebx,1100111b int 0x40 ;--------------------------------------------------------- ;--------initializate data and params of program---------- ;--------------------------------------------------------- mov [Scroll1CoordinatX],8+1 mov [Scroll2CoordinatY],20+15+1+46+3 mov [Window_SizeX],640 mov [Window_SizeY],400 mov [Window_CordinatX],50 mov [Window_CordinatY],50 mov [WorkScreen_SizeX],100 mov [WorkScreen_SizeY],100 mov [MaxWorkScreen_SizeX],100 mov [MaxWorkScreen_SizeY],100 mov [ScreenPointer],0x19000 and [PosX],0 and [PosY],0 mov [Picture_SizeX],640;400 mov [Picture_SizeY],400;280 mov [k],1 mov [PointerToPicture],0x19000+(1200*1000*3)+30*(20*20*3)+500000 mov [PointerToCopyPicture],0x19000+(1200*1000*3)+30*(20*20*3)+500000+(640*400*3) mov [PointerToCopyPicture2],0x19000+(1200*1000*3)+30*(20*20*3)+500000+(640*400*3)*2 mov [PointerToEditBufer],0x19000+(1200*1000*3)+30*(20*20*3)+500000+(640*400*3)*3 mov [PointerToSpriteBufer],0x19000+(1200*1000*3)+30*(20*20*3)+500000+(640*400*3)*4 mov [PointerToPalette],0x19000+(1200*100*3)+30*(20*20*3)+1 mov [ReserveArray],0x19000+(1200*1000)*3+30*(20*20*3)+8 and [save_flag],0 mov [line_width],1 mov [lastik_is_active],0 and [crossing],0 and [finishing_crossing],0 and [number_undo],0 and [instrument_used],0 and [DrawSprite_flag],0 and [extended_memory],0 finit ;---------------------------------------------------------- ;--------get memory and draw window of program------------- ;---------------------------------------------------------- call GetMemory call cleare_work_arrea call load_icons call drawwin ;---------------------------------------------------------- ;---------------------MAIN LOOP---------------------------- ;---------------------------------------------------------- main_loop: still: call event cmp eax,1 jne no_redraw_window call drawwin call drawwin jmp still no_redraw_window: cmp eax,3 je buttons cmp eax,6 je mouse cmp eax,2 je keys jmp main_loop ;------------------------------------------ ;-------------KEYS------------------------- ;------------------------------------------ keys: mov eax,2 int 0x40 shr eax,8 cmp eax,176 jne key2 sub [PosX],20 jmp change_screen key2: cmp eax,179 jne key3 add [PosX],20 jmp change_screen key3: cmp eax,177 jne key4 add [PosY],20 jmp change_screen key4: cmp eax,178 jne key5 sub [PosY],20 jmp change_screen key5: cmp eax,49 jne key6 mov [k],1 mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 call drawwin jmp change_screen key6: cmp eax,50 jne key7 mov [k],2 mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 call drawwin jmp change_screen key7: cmp eax,52 jne key8 mov [k],4 mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 call drawwin jmp change_screen key8: cmp eax,56 jne key9 mov [k],8 mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 call drawwin jmp change_screen key9: cmp eax,48 jne key10 mov [k],16 mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 call drawwin jmp change_screen key10: cmp eax,255 jne key11 call analizing_picture_to_palette call drawwin jmp change_screen key11: cmp eax,27 jne still mov eax,-1 int 0x40 jmp still change_screen: call CalculatePositionScreen call MovePictureToWorkScreen call draw_scrollers call PrintMousePos jmp still ;--------------------------------------------- ;-----------panel BUTTONS--------------------- ;--------------------------------------------- buttons: cmp [Current_instrument],30 jne no_finish_instrument_button cmp [instrument_used],1 jne no_finish_instrument_button cmp [Activate_instrument],0 jne no_finish_instrument_button cmp [crossing],1 jne no_finish_instrument_button mov [finishing_crossing],1 call TakeButtonInstruments no_finish_instrument_button: mov eax,17 int 0x40 shr eax,8 cmp eax,1 jne no_exit mov eax,-1 int 0x40 no_exit: mov [Current_instrument],eax cmp eax,10 jl still cmp eax,15 je still cmp eax,17 je still cmp eax,18 je still cmp eax,19 je still cmp eax,20 je still cmp eax,21 jne no_palette_ call TakeButtonInstruments jmp still no_palette_: cmp eax,23 je still cmp eax,30 jne no_allocation__ and [Activate_instrument],0 jmp still no_allocation__: cmp eax,38 jne no_kontur__ and [instrument_used],0 jmp still no_kontur__: call TakeButtonInstruments jmp still ;--------------------------------------------- ;-------------interraction MOUSE-------------- ;--------------------------------------------- mouse: call GetMouseCoordinats ;panel mov edx,[Window_SizeX] sub edx,5 cmp ebx,20 jle no_panel cmp ebx,20+15 jae no_panel cmp eax,5 jle no_panel cmp eax,edx ;585 jae no_panel call GetMouseCoordinats mov [counter],7 mov edi,panel_text call panel_interraction jmp still no_panel: cmp [Panel_flag],0 jz no_redraw_panel mov [counter],7 mov edi,panel_text call panel_interraction no_redraw_panel: call GetMouseCoordinats mov eax,[MouseX] mov ebx,[MouseY] mov ecx,[WorkScreen_SizeX] mov edx,[WorkScreen_SizeY] add ecx,9 add edx,85 cmp eax,ecx jae mouse_scroll cmp ebx,edx jae mouse_scroll jmp no_scrollers mouse_scroll: mov [exit_from_work_arrea],1 ;mouse situated after work arrea ;scrollers call GetMouseClick cmp eax,1 jne no_click call GetMouseCoordinats ;interraction with horizontal scroller mov eax,[Scroll1CoordinatX] mov ebx,[Scroll1CoordinatY] mov ecx,[MouseX] mov edx,[MouseY] mov esi,[Scroll1MaxSizeX] mov edi,[Scroll1MaxSizeY] call columnus test eax,eax jz no_horizontal mov eax,9 mov ebx,[Scroll1CoordinatY] mov ecx,[Scroll1MaxSizeX] mov edx,14+10 mov esi,7 inc ecx call draw_volume_rectangle mov eax,[MouseX] mov ebx,[Scroll1SizeX] shr ebx,1 sub eax,ebx mov ecx,[MouseX] add ecx,ebx mov edx,8+1 add edx,[Scroll1MaxSizeX] mov [Scroll1CoordinatX],eax sub eax,9 jns no_min_scroll mov [Scroll1CoordinatX],9 no_min_scroll: cmp ecx,edx jl no_max_scroll sub edx,ebx sub edx,ebx mov [Scroll1CoordinatX],edx no_max_scroll: ; mov eax,[Scroll1CoordinatX] sub eax,9 mov ebx,[Picture_SizeX] imul eax,ebx mov ebx,[Scroll1MaxSizeX] cdq idiv ebx mov [PosX],eax jmp no_vertical no_horizontal: mov eax,[Scroll2CoordinatX] mov ebx,[Scroll2CoordinatY] mov ecx,[MouseX] mov edx,[MouseY] mov esi,[Scroll2MaxSizeX] mov edi,[Scroll2MaxSizeY] call columnus test eax,eax jz no_vertical mov eax,[Scroll2CoordinatX] mov ebx,85 mov ecx,14+10 mov edx,[Scroll2MaxSizeY] mov esi,7 inc edx call draw_volume_rectangle mov eax,[MouseY] mov ebx,[Scroll2SizeY] shr ebx,1 sub eax,ebx mov ecx,[MouseY] add ecx,ebx mov edx,85 add edx,[Scroll2MaxSizeY] mov [Scroll2CoordinatY],eax sub eax,85 jns no_min_scroll2 mov [Scroll2CoordinatY],85 no_min_scroll2: cmp ecx,edx jl no_max_scroll2 sub edx,ebx sub edx,ebx mov [Scroll2CoordinatY],edx no_max_scroll2: ; mov eax,[Scroll2CoordinatY] sub eax,85 mov ebx,[Picture_SizeY] imul eax,ebx mov ebx,[Scroll2MaxSizeY] cdq idiv ebx mov [PosY],eax no_vertical: call CalculatePositionScreen call draw_scrollers call MovePictureToWorkScreen no_click: jmp still no_scrollers: mov eax,[MouseX] mov ebx,[MouseY] mov ecx,[Window_SizeX] mov edx,[Window_SizeY] sub ecx,36 sub edx,35 cmp eax,9 jle not_work_arrea cmp eax,ecx jae not_work_arrea cmp ebx,20+15+1+46 jle not_work_arrea cmp ebx,edx jae not_work_arrea jmp mouse_in_work_arrea not_work_arrea: mov [exit_from_work_arrea],1 jmp still mouse_in_work_arrea: call GetScreenCordinats call PrintMousePos call GetMouseClick test eax,eax jz no_use_instruments cmp [Activate_instrument],0 jnz no_undo___ ;------------begin copy for undo------------- inc [number_undo] cmp [number_undo],1 jne no_one__ mov edi,[PointerToCopyPicture] no_one__: cmp [number_undo],2 jne no_two__ mov edi,[PointerToCopyPicture2] no_two__: cmp [number_undo],3 jne no_three__ ;copy bufer number two to bufer number one mov esi,[PointerToCopyPicture2] mov edi,[PointerToCopyPicture] mov ecx,[Picture_SizeX] imul ecx,[Picture_SizeY] lea ecx,[ecx+ecx*2] add ecx,4 shr ecx,2 inc ecx cld rep movsd ;end copy dec [number_undo] mov edi,[PointerToCopyPicture2] no_three__: mov esi,[PointerToPicture] mov ecx,[Picture_SizeX] imul ecx,[Picture_SizeY] lea ecx,[ecx+ecx*2] add ecx,4 shr ecx,2 inc ecx cld rep movsd ;--------------end copy for undo------------- no_undo___: call TakeButtonInstruments no_use_instruments: mov eax,[Current_instrument] and [Activate_instrument],0 jmp still ;----------------------------------------------- ;---------get mouse cordinats------------------- ;----------------------------------------------- GetMouseCoordinats: mov eax,37 mov ebx,1 int 0x40 mov ebx,eax shr eax,16 and ebx,0xffff mov [MouseX],eax mov [MouseY],ebx ret ;------------------------------------------------ ;-------get mouse attributs---------------------- ;------------------------------------------------ GetMouseClick: mov eax,37 mov ebx,2 int 0x40 ret ;------------------------------------------------- ;-----interraction panel with user---------------- ;------------------------------------------------- panel_interraction: ;>>>>>>>>>>>>>>>>>>>>>>>>>> mov eax,18 mov ebx,14 int 0x40 and [Panel_flag],0 ;collision with text on panel next_columnus_text: mov eax,[edi] mov ebx,[edi+4] sub eax,10 sub ebx,3 mov [Icon_text_x],eax mov [Icon_text_y],ebx mov esi,[edi+8] add edi,esi add edi,3*4 mov ecx,[MouseX] mov edx,[MouseY] push edi mov edi,13 mov esi,80 call columnus pop edi mov esi,7 test eax,eax jz no_columnus_text mov esi,1 mov [Panel_flag],1 call GetMouseClick test eax,eax jz no_mouse_pressed call print_panel_menu no_mouse_pressed: no_columnus_text: mov eax,[Icon_text_x] mov ebx,[Icon_text_y] mov ecx,79 mov edx,13 call draw_volume_rectangle push [counter] push edi mov [counter],7 mov edi,panel_text call print_panel_text pop edi pop [counter] dec [counter] jnz next_columnus_text ret ;--------------------------------------------------------- ;-----draw panel menu(main engin of panel)---------------- ;--------------------------------------------------------- print_panel_menu: push [counter] ;delit icon buttons(some time) mov [counter],10 next_icon_delit: mov eax,8 mov edx,[counter] add edx,11100000000000000000000000000000b int 0x40 inc [counter] cmp [counter],30 jl next_icon_delit pop [counter] push esi mov esi,[counter] dec esi shl esi,4 mov eax,[menu_rectangles+esi] mov ebx,[menu_rectangles+esi+4] mov ecx,[menu_rectangles+esi+8] mov edx,[menu_rectangles+esi+12] mov esi,1 mov [menu_coordinat_x],eax mov [menu_size_x],ecx call draw_volume_rectangle pop esi calculate_counter_menu: ;calculate menu counter mov eax,[counter] dec eax shl eax,2 mov ebx,[menu_counters+eax] mov [counter_menu],ebx call GetMouseCoordinats and [menu_counter],0 push esi push edi ;сглаживание анимации >>>>>>>>>>>>>>>>>> mov eax,18 mov ebx,14 int 0x40 menu_loop: mov eax,[menu_coordinat_x] mov ebx,36 mov ecx,[MouseX] mov edx,[MouseY] mov esi,[menu_size_x] mov edi,18 add ebx,[menu_counter] add eax,2 sub esi,3 inc ebx call columnus mov esi,7 test eax,eax jz no_columnus_menu_text mov esi,1 no_columnus_menu_text: mov eax,[menu_coordinat_x] mov ebx,36 mov ecx,[menu_size_x] mov edx,18 add ebx,[menu_counter] add eax,2 sub ecx,3 inc ebx call draw_volume_rectangle add [menu_counter],20 dec [counter_menu] jnz menu_loop ;print menu text push [counter] mov esi,[counter] dec esi shl esi,2 mov edi,[menu_text_en+esi] mov eax,[menu_counters+esi] mov [counter],eax call print_panel_text pop [counter] pop edi pop esi menu_still: mov eax,10 int 0x40 mov eax,2 int 0x40 mov eax,17 int 0x40 call GetMouseClick test eax,eax jz calculate_counter_menu call GetMouseCoordinats ;calculate menu counter mov eax,[counter] dec eax shl eax,2 mov ebx,[menu_counters+eax] mov [counter_menu],ebx and [menu_counter],0 and [counter_11],0 push esi push edi menu_loop2: mov eax,[menu_coordinat_x] mov ebx,36 mov ecx,[MouseX] mov edx,[MouseY] mov esi,[menu_size_x] mov edi,18 add ebx,[menu_counter] add eax,2 sub esi,3 inc ebx call columnus inc [counter_11] test eax,eax jz no_columnus_menu_text2 mov esi,[counter_11] mov [number_menu],esi no_columnus_menu_text2: add [menu_counter],20 dec [counter_menu] jnz menu_loop2 pop edi pop esi mov eax,5 mov ebx,15 int 0x40 push [counter] pushad call drawwin popad pop [counter] mov eax,[counter] mov [number_panel],eax call TakeInstruments jmp still ;--------------------------------------------------------- ;------print mouse position on panel---------------------- ;--------------------------------------------------------- PrintMousePos: pushad mov eax,385 mov ebx,20+15+6 mov ecx,52 mov edx,18 mov esi,4 call draw_volume_rectangle mov eax,385 mov ebx,20+15+6+18+1 mov ecx,52 mov edx,18 mov esi,4 call draw_volume_rectangle mov eax,390 mov ebx,20+15+6+6 and ecx,0 mov edx,mouse_pos_x mov esi,2 call print_text mov eax,390 mov ebx,20+15+6+6+18+1 and ecx,0 mov edx,mouse_pos_y mov esi,2 call print_text mov eax,47 mov ebx,4*65536 mov ecx,[ScreenX] add ecx,[PosX] mov edx,405*65536+20+15+6+6 and esi,0 int 0x40 mov eax,47 mov ebx,4*65536 mov ecx,[ScreenY] add ecx,[PosY] mov edx,405*65536+20+15+6+18+1+6 and esi,0 int 0x40 popad ret ;--------------------------------------------------------- ;---------- get time in 1/100 secunds--------------------- ;--------------------------------------------------------- Clock: mov eax,26 mov ebx,9 int 0x40 mov [time],eax ret ;---------------------------------------------------------- ;-------------draw window of program----------------------- ;---------------------------------------------------------- drawwin: mov eax,12 mov ebx,1 int 0x40 and eax,0 mov ebx,[Window_CordinatX] mov ecx,[Window_CordinatY] shl ebx,16 shl ecx,16 add ebx,[Window_SizeX] add ecx,[Window_SizeY] mov edx,0x03aabbcc mov esi,0x805080d0 mov edi,0x005080d0 int 0x40 call draw_panel call PrintMousePos mov [counter],7 mov edi,panel_text call print_panel_text mov eax,10 mov ebx,5 mov ecx,0xffffff mov edx,name_of_program mov esi,34 call print_text mov eax,13 mov ebx,447*65536+35 mov ecx,42*65536+36 mov edx,[Color] int 0x40 mov eax,12 mov ebx,2 int 0x40 mov eax,9 mov ebx,IPC_table or ecx,-1 int 0x40 mov eax,[IPC_table+34] mov ebx,[IPC_table+38] mov ecx,[IPC_table+42] mov edx,[IPC_table+46] mov [Window_CordinatX],eax mov [Window_CordinatY],ebx mov [Window_SizeX],ecx mov [Window_SizeY],edx cmp [Window_SizeX],585 jae no_minimum_size_x mov [Window_SizeX],585 mov ecx,[Window_SizeX] no_minimum_size_x: cmp [Window_SizeY],320 jae no_minimum_size_y mov [Window_SizeY],320 mov edx,[Window_SizeY] no_minimum_size_y: mov [MaxWorkScreen_SizeX],ecx mov [MaxWorkScreen_SizeY],edx sub [MaxWorkScreen_SizeX],20+10+5+10 sub [MaxWorkScreen_SizeY],20+10+15+1+45+20+10 cmp [MaxWorkScreen_SizeX],0 jns no_znak1 mov [MaxWorkScreen_SizeX],ecx no_znak1: cmp [MaxWorkScreen_SizeY],0 jns no_znak2 mov [MaxWorkScreen_SizeY],ecx no_znak2: mov ecx,[k] and [PosX],0 and [PosY],0 call MovePictureToWorkScreen call draw_scrollers call draw_icons ret ;---------------------------------------------------------- ;---------------draw panel in window of program------------ ;---------------------------------------------------------- draw_panel: mov eax,5 mov ebx,20 mov ecx,[Window_SizeX] mov edx,15 mov esi,6 sub ecx,10 call draw_volume_rectangle mov eax,5 mov ebx,20 mov ecx,[Window_SizeX] mov edx,15 mov esi,6 sub ecx,10 call draw_volume_rectangle mov eax,5 mov ebx,20+15+1 mov ecx,[Window_SizeX] mov edx,46 mov esi,1 sub ecx,10 call draw_volume_rectangle mov eax,5 mov ebx,20+15+1+46+1 mov ecx,[Window_SizeX] mov edx,[Window_SizeY] mov esi,1 sub ecx,10+20 sub edx,20+15+1+46+1+5+20 call draw_volume_rectangle mov eax,5 mov ebx,[Window_SizeY] mov ecx,[Window_SizeX] mov edx,20+10 mov esi,3 sub ecx,30 sub ebx,25+10 call draw_volume_rectangle mov eax,[Window_SizeX] mov ebx,20+15+1+45+2 mov ecx,20+10 mov edx,[Window_SizeY] mov esi,3 sub eax,25+10 sub edx,20+15+1+45+5+20 call draw_volume_rectangle mov eax,[Window_SizeX] mov ebx,[Window_SizeY] mov ecx,20+10 mov edx,20+10 mov esi,6 sub eax,25+10 sub ebx,25+10 call draw_volume_rectangle mov eax,445 mov ebx,20+15+6 mov ecx,37 mov edx,37 mov esi,4 call draw_volume_rectangle ret ;---------------------------------------------------------- ;---------------------system events------------------------ ;---------------------------------------------------------- event: mov eax,10 int 0x40 ret ;---------------------------------------------------------- ;----------print text on the panel and menu---------------- ;---------------------------------------------------------- print_panel_text: next_panel_text: mov eax,[edi] mov ebx,[edi+4] xor ecx,ecx mov edx,edi add edx,12 mov esi,[edi+8] add edi,esi add edi,3*4 push edi call print_text pop edi dec [counter] jnz next_panel_text ret ;---------------------------------------------------------- ;--------Move picture from array to work screeen----------- ;---------------------------------------------------------- MovePictureToWorkScreen: call cleare_screen mov eax,[Picture_SizeX] mov ebx,[Picture_SizeY] mov ecx,[MaxWorkScreen_SizeX] mov edx,[MaxWorkScreen_SizeY] mov esi,[k] imul eax,esi imul ebx,esi cmp eax,ecx jle lab1 mov eax,[MaxWorkScreen_SizeX] mov [WorkScreen_SizeX],eax jmp lab2 lab1: mov [WorkScreen_SizeX],eax lab2: cmp ebx,edx jle lab3 mov ebx,[MaxWorkScreen_SizeY] mov [WorkScreen_SizeY],ebx jmp lab4 lab3: mov [WorkScreen_SizeY],ebx lab4: mov eax,[WorkScreen_SizeX] mov ebx,[k] cdq idiv ebx mov [CounterX],eax mov eax,[WorkScreen_SizeY] cdq idiv ebx mov [CounterY],eax mov eax,[WorkScreen_SizeX] mov ecx,eax mov ebx,[k] cdq idiv ebx imul eax,ebx sub ecx,eax lea ecx,[ecx+ecx*2] ; mov eax,[WorkScreen_SizeX] mov ebx,[k] dec ebx imul eax,ebx lea eax,[eax+eax*2] add eax,ecx mov [OffsetYWorkScreen],eax mov ebx,[Picture_SizeX] mov eax,[CounterX] sub ebx,eax lea ebx,[ebx+ebx*2] mov [OffsetYPicture],ebx mov eax,[WorkScreen_SizeX] mov ebx,[k] sub eax,ebx lea eax,[eax+eax*2] mov [OffsetYBigPixel],eax mov eax,[PosX] mov ebx,[PosY] mov ecx,[Picture_SizeX] imul ecx,ebx add eax,ecx lea eax,[eax+eax*2] add eax,[PointerToPicture] mov ebx,[ScreenPointer] mov edi,[CounterY] ;if size of picture natural(mastab is 1) than move picture to work screen cmp [k],1 jne no_zoom_1_ screen_y_1: mov esi,[CounterX] screen_x_1: mov ecx,[eax] and ecx,0xffffff mov ebp,ecx shr ecx,16 mov [ebx],bp mov [ebx+2],cl add ebx,3; add eax,3 dec esi jnz screen_x_1 add eax,[OffsetYPicture] add ebx,[OffsetYWorkScreen] dec edi jnz screen_y_1 jmp fps no_zoom_1_: cmp [k],2 jne no_zoom_2 screen_y_2: mov esi,[CounterX] screen_x_2: mov ecx,[eax] and ecx,0xffffff mov ebp,ecx shr ecx,16 mov edx,ebx mov [edx],bp mov [edx+2],cl mov [edx+3],bp mov [edx+3+2],cl add edx,3*2 add edx,[OffsetYBigPixel] mov [edx],bp mov [edx+2],cl mov [edx+3],bp mov [edx+3+2],cl add edx,3*2 add edx,[OffsetYBigPixel] add ebx,3*2 add eax,3 dec esi jnz screen_x_2 add eax,[OffsetYPicture] add ebx,[OffsetYWorkScreen] dec edi jnz screen_y_2 jmp fps no_zoom_2: cmp [k],4 jne no_zoom_4 screen_y_4: mov esi,[CounterX] screen_x_4: mov ecx,[eax] and ecx,0xffffff mov ebp,ecx shr ecx,16 mov edx,ebx mov [edx],bp mov [edx+2],cl mov [edx+3],bp mov [edx+3+2],cl mov [edx+6],bp mov [edx+6+2],cl mov [edx+9],bp mov [edx+9+2],cl add edx,3*4 add edx,[OffsetYBigPixel] mov [edx],bp mov [edx+2],cl mov [edx+3],bp mov [edx+3+2],cl mov [edx+6],bp mov [edx+6+2],cl mov [edx+9],bp mov [edx+9+2],cl add edx,3*4 add edx,[OffsetYBigPixel] mov [edx],bp mov [edx+2],cl mov [edx+3],bp mov [edx+3+2],cl mov [edx+6],bp mov [edx+6+2],cl mov [edx+9],bp mov [edx+9+2],cl add edx,3*4 add edx,[OffsetYBigPixel] mov [edx],bp mov [edx+2],cl mov [edx+3],bp mov [edx+3+2],cl mov [edx+6],bp mov [edx+6+2],cl mov [edx+9],bp mov [edx+9+2],cl add edx,3*4 add edx,[OffsetYBigPixel] add ebx,4*3 add eax,3 dec esi jnz screen_x_4 add eax,[OffsetYPicture] add ebx,[OffsetYWorkScreen] dec edi jnz screen_y_4 jmp fps no_zoom_4: ;if zoom more than 4 screen_y: mov esi,[CounterX] screen_x: mov ecx,[eax] and ecx,0xffffff mov ebp,ecx shr ecx,16 push ebx push eax mov edx,[k] big_pixel_y: mov eax,[k] big_pixel_x: mov [ebx],bp mov [ebx+2],cl add ebx,3 dec eax jnz big_pixel_x add ebx,[OffsetYBigPixel] dec edx jnz big_pixel_y pop eax pop ebx mov edx,[k] lea edx,[edx+edx*2] add ebx,edx add eax,3 dec esi jnz screen_x add eax,[OffsetYPicture] add ebx,[OffsetYWorkScreen] dec edi jnz screen_y fps: mov eax,18 mov ebx,14 int 0x40 mov eax,7 mov ebx,[ScreenPointer] mov ecx,[WorkScreen_SizeX] mov edx,[WorkScreen_SizeY] shl ecx,16 add ecx,edx mov edx,8*65536+20+15+45+5 int 0x40 ret ;---------------------------------------------------------- ;--------------------clear screen-------------------------- ;---------------------------------------------------------- cleare_screen: mov eax,[ScreenPointer] mov ebx,[WorkScreen_SizeX] imul ebx,[WorkScreen_SizeY] lea ebx,[ebx+ebx*2] shr ebx,3 inc ebx mov esi,0xffffff clear_screen_loop: mov [eax],esi mov [eax+3],esi mov [eax+6],si add eax,4+4 dec ebx jnz clear_screen_loop ret ;---------------------------------------------------------- ;-------------cleare work arrea(work screen)--------------- ;---------------------------------------------------------- cleare_work_arrea: mov eax,[PointerToPicture] mov ebx,[Picture_SizeX] imul ebx,[Picture_SizeY] lea ebx,[ebx+ebx*2] shr ebx,3 inc ebx mov esi,0xffffff clear_work_arrea_loop: mov [eax],esi mov [eax+3],esi mov [eax+6],si add eax,4+4 dec ebx jnz clear_work_arrea_loop ret ;---------------------------------------------------------- ;------------draw lines of scoll--------------------------- ;---------------------------------------------------------- draw_scrollers: mov edi,[CounterX] mov eax,[Scroll1CoordinatX] mov ebx,[Window_SizeY] sub ebx,22+10 mov ecx,[Window_SizeX] sub ecx,10+5+20+10+1 mov edx,14+10 mov esi,1 mov [Scroll1CoordinatX],eax mov [Scroll1CoordinatY],ebx mov [Scroll1MaxSizeY],edx mov [Scroll1MaxSizeX],ecx imul ecx,edi push eax push ebx push edx mov eax,ecx mov ebx,[Picture_SizeX] cdq idiv ebx mov ecx,eax pop edx pop ebx pop eax mov [Scroll1SizeX],ecx mov edi,[Scroll1MaxSizeX] sub edi,ecx mov [Scroll1FreeX],edi call draw_volume_rectangle mov eax,[Window_SizeX] sub eax,22+10 mov ebx,[Scroll2CoordinatY] mov ecx,14+10 mov edx,[Window_SizeY] sub edx,20+15+1+46+10+20+11 mov esi,1 mov [Scroll2CoordinatX],eax mov [Scroll2CoordinatY],ebx mov [Scroll2MaxSizeX],ecx mov [Scroll2MaxSizeY],edx imul edx,[CounterY] push eax push ebx mov eax,edx mov ebx,[Picture_SizeY] cdq idiv ebx mov edx,eax pop ebx pop eax mov [Scroll2SizeY],edx mov edi,[Scroll2MaxSizeY] sub edi,edx mov [Scroll2FreeY],edi call draw_volume_rectangle ret ;---------------------------------------------------------- ;--------change size of memory which use program----------- ;---------------------------------------------------------- GetMemory: pushad mov eax,64 mov ebx,1 mov ecx,[Picture_SizeX] mov edx,[Picture_SizeY] imul ecx,edx lea ecx,[ecx+ecx*2] lea ecx,[ecx+ecx*4] ;(Picture_SizeX*Picture_SizeY*3)*5 add ecx,[ScreenPointer] add ecx,(1200*1000)*3+30*(20*20*3)+500000+16000+0x4000 add ecx,[extended_memory] int 0x40 test eax,eax jz have_new_memory mov esi,sound_havent_memory call sound jmp still have_new_memory: popad ret ;----------------------------------------------------------- ;-----------instruments of menu----------------------------- ;----------------------------------------------------------- TakeInstruments: ;|||||||||||||||||||FILE|||||||||||||||||||||| cmp [number_panel],7 jne no_file ;<<<<>>>>>> 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)+30*(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: ;<<<<>>>>>> 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,[ScreenPointer] add eax,0x10000 mov [file_info],dword 0 mov [file_info+8],dword 1 mov [file_info+12],eax mov eax,58 mov ebx,file_info int 0x40 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_gif_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)+30*(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,[PointerToCopyPicture] mov ebx,[ScreenPointer] add eax,1000 mov [file_info],dword 0 mov [file_info+8],dword 1 mov [file_info+12],dword eax mov [file_info+16],dword ebx 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 no_unpakcing_bmp_file: cmp [type],'GI' jne no_unpakcing_gif_file ;GIF DECODER sub edi,12 call ReadGIF no_unpakcing_gif_file: mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 call load_icons call drawwin and [number_panel],0 and [number_menu],0 mov [save_flag],1 open_2: jmp still no_open: ;<<<<<<<<<<>>>>>>>>>>> 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_: ;<<<<<<<<>>>>>>>>>> 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 edi,[PointerToEditBufer] mov [file_info],dword 1 mov [file_info+8],dword ebx mov [file_info+12],edi mov eax,58 mov ebx,file_info int 0x40 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: ;<<<<<>>>>>> cmp [number_menu],5 jne no_exit_program mov eax,-1 int 0x40 no_exit_program: no_file: ;|||||||||||||||||||||||||||||EDIT||||||||||||||||||||||||| ;<<<<<<<<<>>>>>>>>> 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: ;<<<<<<<<<>>>>>>>>> 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: ;<<<<<<<<<>>>>>>> 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: ;<<<<<<<<<>>>>>>>>> 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: ;<<<<<>>>>> 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: ;<<<<<>>>>> 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 ;----------------------------------------------------------- ;-----instruments of panel(icon's instruments)-------------- ;----------------------------------------------------------- TakeButtonInstruments: mov eax,[Current_instrument] ;*************************brush 1*********************** cmp eax,10 jne no_brush1 mov [Brush_SizeX],4 mov [Brush_SizeY],4 mov [Number_Brush],0 mov [Current_instrument],18 jmp still no_brush1: ;*************************brush 2*********************** cmp eax,11 jne no_brush2 mov [Brush_SizeX],6 mov [Brush_SizeY],4 mov [Number_Brush],1 mov [Current_instrument],18 jmp still no_brush2: ;*************************brush 3*********************** cmp eax,12 jne no_brush3 mov [Brush_SizeX],8 mov [Brush_SizeY],7 mov [Number_Brush],2 mov [Current_instrument],18 jmp still no_brush3: ;************************brush 4************************ cmp eax,13 jne no_brush4 mov [Brush_SizeX],14 mov [Brush_SizeY],14 mov [Number_Brush],3 mov [Current_instrument],18 jmp still no_brush4: ;************************brush 5************************ cmp eax,14 jne no_brush5 mov [Brush_SizeX],6 mov [Brush_SizeY],6 mov [Number_Brush],4 mov [Current_instrument],18 jmp still no_brush5: ;*************************pensil************************ cmp eax,15 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,16 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,447*65536+35 mov ecx,42*65536+36 mov edx,[Color] int 0x40 jmp still no_pipetka: ;**********************draw brush*********************** cmp eax,18 jne no_brush 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 jmp still no_brush: ;************************Flood Fill******************* cmp eax,17 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,19 jne no_lastik mov [lastik_is_active],1 jmp lastik_in no_lastik: ;****************************************************** cmp eax,20 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,21 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 and [Current_instrument],0 jmp still no_palette: ;************************draw line********************** cmp eax,22 jne no_line 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,23 jne no_rectangle 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,24 jne no_circle 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,25 jne no_1_ mov [k],1 mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 and [Current_instrument],0 call drawwin jmp still no_1_: ;*************************zoom 2************************ cmp eax,26 jne no_2_ mov [k],2 call drawwin mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 and [Current_instrument],0 jmp still no_2_: ;*************************zoom 4************************ cmp eax,27 jne no_4_ mov [k],4 call drawwin mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 and [Current_instrument],0 jmp still no_4_: ;************************zoom 8************************* cmp eax,28 jne no_8_ mov [k],8 call drawwin mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 and [Current_instrument],0 jmp still no_8_: ;************************zoom 16************************ cmp eax,29 jne no_16_ mov [k],16 call drawwin mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],85 and [Current_instrument],0 jmp still no_16_: ;***************allocation of a countour********************* cmp eax,30 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,35 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,36 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,38 jne no_kontur_ 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,39 jne no_ellips 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: ;*************************Line width 1********************* cmp eax,41 jne no_line_width_1 mov [line_width],1 jmp still no_line_width_1: ;*************************Line width 2********************* cmp eax,42 jne no_line_width_2 mov [line_width],2 jmp still no_line_width_2: ;*************************Line width 3********************* cmp eax,43 jne no_line_width_3 mov [line_width],3 jmp still no_line_width_3: ;*************************Line width 4********************* cmp eax,44 jne no_line_width_4 mov [line_width],4 jmp still no_line_width_4: ;*************************Line width 5********************* cmp eax,45 jne no_line_width_5 mov [line_width],5 jmp still no_line_width_5: jmp still ret ;----------------------------------------------------------- ;-----------calculate cordinats on work picture-------------- ;----------------------------------------------------------- GetScreenCordinats: mov eax,[MouseX] mov ebx,[MouseY] sub eax,9 sub ebx,83 mov ecx,[k] cdq idiv ecx mov [ScreenX],eax mov eax,ebx cdq idiv ecx mov [ScreenY],eax ret ;----------------------------------------------------------- ;------------------SaveFonForSprite------------------------- ;----------------------------------------------------------- SaveFonForSprite: mov edi,[PointerToSpriteBufer] mov ecx,[SpriteSizeX] mov edx,[Picture_SizeX] sub edx,[SpriteSizeX] mov esi,[SpriteCoordinatY] imul esi,[Picture_SizeX] add esi,[SpriteCoordinatX] lea edx,[edx+edx*2] lea esi,[esi+esi*2] add esi,[PointerToPicture] mov ebx,[SpriteSizeY] mov [counter],ecx next_line_sprite_save: mov ecx,[counter] next_pixel_sprite_save: mov eax,[esi] and eax,0xffffff mov [edi],ax shr eax,16 mov [edi+2],al add esi,3 add edi,3 dec ecx jnz next_pixel_sprite_save add esi,edx dec ebx jnz next_line_sprite_save ret ;----------------------------------------------------------- ;-------------------PutFonForSprite------------------------- ;----------------------------------------------------------- PutFonForSprite: mov esi,[PointerToSpriteBufer] mov ecx,[SpriteSizeX] mov edx,[Picture_SizeX] sub edx,[SpriteSizeX] mov edi,[SpriteOldCoordinatY] imul edi,[Picture_SizeX] add edi,[SpriteOldCoordinatX] lea edx,[edx+edx*2] lea edi,[edi+edi*2] add edi,[PointerToPicture] mov ebx,[SpriteSizeY] mov [counter],ecx next_line_sprite_put: mov ecx,[counter] next_pixel_sprite_put: mov eax,[esi] and eax,0xffffff mov [edi],ax shr eax,16 mov [edi+2],al add esi,3 add edi,3 dec ecx jnz next_pixel_sprite_put add edi,edx dec ebx jnz next_line_sprite_put ret ;----------------------------------------------------------- ;------------------DrawFonForSprite------------------------- ;----------------------------------------------------------- DrawSprite: mov esi,[PointerToEditBufer] mov ecx,[SpriteSizeX] mov edx,[Picture_SizeX] sub edx,[SpriteSizeX] mov edi,[SpriteCoordinatY] imul edi,[Picture_SizeX] add edi,[SpriteCoordinatX] lea edx,[edx+edx*2] lea edi,[edi+edi*2] add edi,[PointerToPicture] mov ebx,[SpriteSizeY] mov [counter],ecx next_line_sprite_draw: mov ecx,[counter] next_pixel_sprite_draw: mov eax,[esi] and eax,0xffffff mov [edi],ax shr eax,16 mov [edi+2],al add esi,3 add edi,3 dec ecx jnz next_pixel_sprite_draw add edi,edx dec ebx jnz next_line_sprite_draw ret ;----------------------------------------------------------- ;-------find simvole in string------------------------------ ;----------------------------------------------------------- find_symvol: ;eax,string ;ebx,symvol mov esi,eax next_symvol: xor ecx,ecx mov cl,[eax] cmp cl,bl je symvol_fined inc eax jmp next_symvol symvol_fined: sub eax,esi ret ;----------------------------------------------------------- ;--------load file in memory-------------------------------- ;----------------------------------------------------------- load_file: mov eax,58 mov ebx,file_info int 0x40 test eax,eax jnz no_open_ mov [length_file],ebx shr ebx,9 inc ebx mov [file_info+8],ebx mov eax,58 mov ebx,file_info int 0x40 no_open_: ret ;----------------------------------------------------------- ;---load icons in memory and draw icons on panel----------- ;----------------------------------------------------------- load_icons: mov esi,panel_picture mov edi,[ScreenPointer] mov eax,edi add edi,(1200*1000*3) call ReadGIF ret draw_icons: mov [Icon_X],10 mov [Icon_Y],20+15+4 and [counter],0 next_icon: mov eax,8 mov ebx,[Icon_X] mov ecx,[Icon_Y] dec ebx dec ecx shl ebx,16 shl ecx,16 add ebx,20 add ecx,20 mov edx,[counter] add edx,10 add edx,1000000000000000000000000000000b int 0x40 mov edx,[Icon_X] shl edx,16 add edx,[Icon_Y] mov ebx,[counter] imul ebx,20*20*3 add ebx,[ScreenPointer] add ebx,(1200*1000*3)+12 mov eax,7 mov ecx,20*65536+20 int 0x40 add [Icon_X],25 cmp [Icon_X],10+25*15 jl no_next_line_icons mov [Icon_X],10 mov [Icon_Y],20+15+4+22 no_next_line_icons: inc [counter] cmp [counter],30 jl next_icon and [counter],0 mov [Icon_X],475 mov [Icon_Y],20+15+7 next_button_line: mov eax,8 mov ebx,[Icon_X] mov ecx,[Icon_Y] dec ebx dec ecx shl ebx,16 shl ecx,16 add ebx,10 add ecx,35 mov edx,[counter] add edx,40 add edx,1000000000000000000000000000000b int 0x40 mov eax,13 mov ebx,[Icon_X] mov ecx,[Icon_Y] add ebx,4 shl ebx,16 shl ecx,16 add ebx,[counter] add ecx,35 ;xor edx,edx mov edx,0xb1d8ff int 0x40 add [Icon_X],15 inc [counter] cmp [counter],5 jle next_button_line ret ;----------------------------------------------------------- ;calculate position work screen on a picture ;----------------------------------------------------------- CalculatePositionScreen: mov eax,[Picture_SizeX] mov ebx,[Picture_SizeY] mov ecx,[CounterX] mov edx,[CounterY] sub eax,ecx sub ebx,edx cmp [PosX],eax jle no_limit_screen_x mov [PosX],eax no_limit_screen_x: cmp [PosY],ebx jle no_limit_screen_y mov [PosY],ebx no_limit_screen_y: cmp [PosX],0 jns no_minimum_screen_x mov [PosX],0 no_minimum_screen_x: cmp [PosY],0 jns no_minimum_screen_y mov [PosY],0 no_minimum_screen_y: ret ;----------------------------------------------------------- ;-------analizing picture to palette------------------------ ;----------------------------------------------------------- analizing_picture_to_palette: mov eax,[Picture_SizeX] mov ebx,[Picture_SizeY] imul eax,ebx mov ecx,eax mov edx,[PointerToPicture] mov esi,1 ;counter colors in palette ;put firs color of picture how one color in palette mov ebp,[PointerToPalette] mov eax,[edx] and eax,0xffffff mov [ebp],eax analizing_to_palette: mov eax,[edx] and eax,0xffffff mov edi,esi mov ebp,[PointerToPalette] next_color_in_palette: mov ebx,[ebp] and ebx,0xffffff cmp ebx,eax ;this is color have in palette je exit_loop_palette add ebp,4 dec edi jnz next_color_in_palette inc esi cmp esi,256 ;256 colors ja more_than_256_colors mov ebp,[PointerToPalette] mov ebx,esi dec ebx shl ebx,2 add ebp,ebx mov [ebp],ax shr eax,16 mov [ebp+2],al exit_loop_palette: add edx,3 dec ecx jnz analizing_to_palette more_than_256_colors: mov eax,esi ret ;--------------------------------------------------------- ;---------------SOUND of EVENTS--------------------------- ;--------------------------------------------------------- sound: mov eax,55 mov ebx,eax int 0x40 ret ;---------------------------------------------------------- ;-------------file info structure-------------------------- ;---------------------------------------------------------- file_info: dd 0 dd 0 dd 1 dd 0x19000+0x10000 dd 0x19000 file_path: times 256 db 0 ;----------------------------------------------------------- ;------------variables and data of program------------------ ;----------------------------------------------------------- length_file dd 0 time dd 0 sound_havent_memory db 150,64,0 PosX dd 0 PosY dd 0 ScreenPointer dd 0 PointerToPicture dd 0 PointerToCopyPicture dd 0 PointerToCopyPicture2 dd 0 PointerToEditBufer dd 0 PointerToSpriteBufer dd 0 PointerToPalette dd 0 Color dd 0 Number_Brush dd 0 Brush_SizeX dd 0 Brush_SizeY dd 0 Current_instrument dd 0 Activate_instrument db 0 SColor dd 0 OldX dd 0 OldY dd 0 MouseX dd 0 MouseY dd 0 Window_SizeX dd 0 Window_SizeY dd 0 Window_CordinatX dd 0 Window_CordinatY dd 0 Picture_SizeX dd 0 Picture_SizeY dd 0 ScreenX dd 0 ScreenY dd 0 WorkScreen_SizeX dd 0 WorkScreen_SizeY dd 0 MaxWorkScreen_SizeX dd 0 MaxWorkScreen_SizeY dd 0 k dd 0 IPC_table rd 256 ReserveArray dd 0 register dd 0 CounterX dd 0 CounterY dd 0 OffsetYPicture dd 0 OffsetYWorkScreen dd 0 OffsetYBigPixel dd 0 Icon_X dd 0 Icon_Y dd 0 counter dd 0 counter2 dd 0 Icon_text_x dd 0 Icon_text_y dd 0 Panel_flag db 0 counter_menu dd 0 menu_coordinat_x dd 0 menu_size_x dd 0 menu_counter dd 0 counter_11 dd 0 number_panel dd 0 number_menu dd 0 Scroll1CoordinatX dd 0 Scroll1CoordinatY dd 0 Scroll1MaxSizeX dd 0 Scroll1MaxSizeY dd 0 Scroll1SizeX dd 0 Scroll1FreeX dd 0 Scroll2CoordinatX dd 0 Scroll2CoordinatY dd 0 Scroll2MaxSizeX dd 0 Scroll2MaxSizeY dd 0 Scroll2SizeY dd 0 Scroll2FreeY dd 0 extended_memory dd 0 type dw 0 x dd 0 y dd 0 save_flag db 0 exit_from_work_arrea db 0 Radius dd 0 Dx_ dd 0 Dy_ dd 0 line_width dd 0 lastik_is_active db 0 a_ellips dd 0 b_ellips dd 0 instrument_used db 0 used_OldX dd 0 used_OldY dd 0 rectangular_shade_x dd 0 rectangular_shade_y dd 0 crossing_old_x dd 0 crossing_old_y dd 0 crossing dd 0 finishing_crossing dd 0 number_undo dd 0 DrawSprite_flag db 0 Paste_flag db 0 SpriteSizeX dd 0 SpriteSizeY dd 0 SpriteCoordinatX dd 0 SpriteCoordinatY dd 0 SpriteOldCoordinatX dd 0 SpriteOldCoordinatY dd 0 ;********************************************************** ;------------------TEXT DATA------------------------------- ;********************************************************** name_of_program db 'Graphics editor <> V1.00 ' mouse_pos_x db 'X=' mouse_pos_y db 'Y=' new_text1 db 'PICTURE SIZE X' new_text2 db 'PICTURE SIZE Y' ok_text db 'OK' panel_text dd 15,24,4 db 'FILE' dd 95,24,4 db 'EDIT' dd 175,24,11 db 'INSTRUMENTS' dd 255,24,7 db 'PALETTE' dd 335,24,7 db 'FILTERS' dd 415,24,9 db 'ANIMATION' dd 495,24,4 db 'HELP' menu_text_en: dd menu_text7 dd menu_text6 dd menu_text5 dd menu_text4 dd menu_text3 dd menu_text2 dd menu_text1 dd 0,0,0 menu_rectangles dd 485,36,100,100 dd 405,36,100,100 dd 325,36,100,100 dd 245,36,100,100 dd 165,36,100,100 dd 85,36,100,100;20 dd 5,36,100,100 menu_text1: dd 15,45,3 db 'NEW' dd 15,65,4 db 'OPEN' dd 15,85,4 db 'SAVE' dd 15,105,7 db 'SAVE AS' dd 15,125,4 db 'EXIT' menu_text2: dd 95,45,4 db 'UNDO' dd 95,65,4 db 'COPY' dd 95,85,5 db 'PASTE' dd 95,105,3 db 'CUT' dd 95,125,13 db 'CLEARE SCREEN' ;dd 95,145,12 ;db 'ALLOCATE ALL' menu_text3: dd 175,45,3 db 0,0,0;'PENCIL' dd 175,65,3 db 0,0,0;'BRUSHES' dd 175,85,3 db 0,0,0;'COLORS' dd 175,105,3 db 0,0,0;'PIPETKA' menu_text4: dd 255,45,1 db 0,0,0 menu_text5: dd 335,45,1 db 0,0,0 menu_text6: dd 415,45,1 db 0,0,0 menu_text7: dd 495,45,1 db 0,0,0,0 menu_counters: dd 1,1,1,1,1,5,5 ;---------------------------------------------------------- palitra: ;three bytes for one color db 0,0,0,0,0,0,128,0 db 0,128,0,0,0,128,128,0 db 128,0,0,0,128,0,128,0 db 128,128,0,0,128,128,128,0 db 192,220,192,0,240,202,166,0 db 170,63,42,0,255,63,42,0 db 0,95,42,0,85,95,42,0 db 170,95,42,0,255,95,42,0 db 0,127,42,0,85,127,42,0 db 170,127,42,0,255,127,42,0 db 0,159,42,0,85,159,42,0 db 170,159,42,0,255,159,42,0 db 0,191,42,0,85,191,42,0 db 170,191,42,0,255,191,42,0 db 0,223,42,0,85,223,42,0 db 170,223,42,0,255,223,42,0 db 0,255,42,0,85,255,42,0 db 170,255,42,0,255,255,42,0 db 0,0,85,0,85,0,85,0 db 170,0,85,0,255,0,85,0 db 0,31,85,0,85,31,85,0 db 170,31,85,0,255,31,85,0 db 0,63,85,0,85,63,85,0 db 170,63,85,0,255,63,85,0 db 0,95,85,0,85,95,85,0 db 170,95,85,0,255,95,85,0 db 0,127,85,0,85,127,85,0 db 170,127,85,0,255,127,85,0 db 0,159,85,0,85,159,85,0 db 170,159,85,0,255,159,85,0 db 0,191,85,0,85,191,85,0 db 170,191,85,0,255,191,85,0 db 0,223,85,0,85,223,85,0 db 170,223,85,0,255,223,85,0 db 0,255,85,0,85,255,85,0 db 170,255,85,0,255,255,85,0 db 0,0,127,0,85,0,127,0 db 170,0,127,0,255,0,127,0 db 0,31,127,0,85,31,127,0 db 170,31,127,0,255,31,127,0 db 0,63,127,0,85,63,127,0 db 170,63,127,0,255,63,127,0 db 0,95,127,0,85,95,127,0 db 170,95,127,0,255,95,127,0 db 0,127,127,0,85,127,127,0 db 170,127,127,0,255,127,127,0 db 0,159,127,0,85,159,127,0 db 170,159,127,0,255,159,127,0 db 0,191,127,0,85,191,127,0 db 170,191,127,0,255,191,127,0 db 0,223,127,0,85,223,127,0 db 170,223,127,0,255,223,127,0 db 0,255,127,0,85,255,127,0 db 170,255,127,0,255,255,127,0 db 0,0,170,0,85,0,170,0 db 170,0,170,0,255,0,170,0 db 0,31,170,0,85,31,170,0 db 170,31,170,0,255,31,170,0 db 0,63,170,0,85,63,170,0 db 170,63,170,0,255,63,170,0 db 0,95,170,0,85,95,170,0 db 170,95,170,0,255,95,170,0 db 0,127,170,0,85,127,170,0 db 170,127,170,0,255,127,170,0 db 0,159,170,0,85,159,170,0 db 170,159,170,0,255,159,170,0 db 0,191,170,0,85,191,170,0 db 170,191,170,0,255,191,170,0 db 0,223,170,0,85,223,170,0 db 170,223,170,0,255,223,170,0 db 0,255,170,0,85,255,170,0 db 170,255,170,0,255,255,170,0 db 0,0,212,0,85,0,212,0 db 170,0,212,0,255,0,212,0 db 0,31,212,0,85,31,212,0 db 170,31,212,0,255,31,212,0 db 0,63,212,0,85,63,212,0 db 170,63,212,0,255,63,212,0 db 0,95,212,0,85,95,212,0 db 170,95,212,0,255,95,212,0 db 0,127,212,0,85,127,212,0 db 170,127,212,0,255,127,212,0 db 0,159,212,0,85,159,212,0 db 170,159,212,0,255,159,212,0 db 0,191,212,0,85,191,212,0 db 170,191,212,0,255,191,212,0 db 0,223,212,0,85,223,212,0 db 170,223,212,0,255,223,212,0 db 0,255,212,0,85,255,212,0 db 170,255,212,0,255,255,212,0 db 85,0,255,0,170,0,255,0 db 0,31,255,0,85,31,255,0 db 170,31,255,0,255,31,255,0 db 0,63,255,0,85,63,255,0 db 170,63,255,0,255,63,255,0 db 0,95,255,0,85,95,255,0 db 170,95,255,0,255,95,255,0 db 0,127,255,0,85,127,255,0 db 170,127,255,0,255,127,255,0 db 0,159,255,0,85,159,255,0 db 170,159,255,0,255,159,255,0 db 0,191,255,0,85,191,255,0 db 170,191,255,0,255,191,255,0 db 0,223,255,0,85,223,255,0 db 170,223,255,0,255,223,255,0 db 85,255,255,0,170,255,255,0 db 255,204,204,0,255,204,255,0 db 255,255,51,0,255,255,102,0 db 255,255,153,0,255,255,204,0 db 0,127,0,0,85,127,0,0 db 170,127,0,0,255,127,0,0 db 0,159,0,0,85,159,0,0 db 170,159,0,0,255,159,0,0 db 0,191,0,0,85,191,0,0 db 170,191,0,0,255,191,0,0 db 0,223,0,0,85,223,0,0 db 170,223,0,0,255,223,0,0 db 85,255,0,0,170,255,0,0 db 0,0,42,0,85,0,42,0 db 170,0,42,0,255,0,42,0 db 0,31,42,0,85,31,42,0 db 170,31,42,0,255,31,42,0 db 0,63,42,0,170,174,160,0 db 240,251,255,0,164,160,160,0 db 128,128,128,0,0,0,255,0 db 0,255,0,0,0,255,255,0 db 255,0,0,0,255,0,255,0 db 255,255,0,0xff,0xff,0xff,0xff ;---------------------------------------------------------- ;--------------------COLOR BRUSHES------------------------- ;---------------------------------------------------------- Brush_color: ; db 0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 db 0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0 ;------------------------------------------ Spray_color: ; db 0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 db 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 db 0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0 db 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 db 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0 db 0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 db 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0 db 0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 db 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 db 0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 db 0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;------------------------------------------ width_pixels: db 1,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 ; db 1,1,0,0,0 db 1,1,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 ; db 0,1,0,0,0 db 1,1,1,0,0 db 0,1,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 ; db 0,1,1,0,0 db 1,1,1,1,0 db 1,1,1,1,0 db 0,1,1,0,0 db 0,0,0,0,0 ; db 0,0,1,0,0 db 0,1,1,1,0 db 1,1,1,1,1 db 0,1,1,1,0 db 0,0,1,0,0 ;----------------------------------------- width_pixels_rectangle: db 1,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 ; db 1,1,0,0,0 db 1,1,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 db 0,0,0,0,0 ; db 1,1,1,0,0 db 1,1,1,0,0 db 1,1,1,0,0 db 0,0,0,0,0 db 0,0,0,0,0 ; db 1,1,1,1,0 db 1,1,1,1,0 db 1,1,1,1,0 db 1,1,1,1,0 db 0,0,0,0,0 ; db 1,1,1,1,1 db 1,1,1,1,1 db 1,1,1,1,1 db 1,1,1,1,1 db 1,1,1,1,1 ;---------------------------------------------------------- ;-------------------ICON"S picture------------------------- ;---------------------------------------------------------- panel_picture: file 'worktab1.gif' ;---------------------------------------------------------- I_END: