Subversion Repositories Kolibri OS

Rev

Rev 6352 | Rev 6355 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. macro square_width_put
  2. {
  3. local .no_put_to_screen
  4. local .next_color_put
  5. local .vertical_width_put
  6. local .horizontal_width_put
  7.  
  8.         mov ebx,[ReserveArray]
  9.         mov eax,[ebx]
  10.         test eax,eax
  11.         jz .no_put_to_screen
  12.         mov ecx,[ebx]
  13.         add ebx,4
  14.         xor ebp,ebp
  15.  
  16.         .next_color_put:
  17.         ;put saved pixels in ReserveArray
  18.         push ecx
  19.         mov [counter2],5
  20.         mov edi,[ebx]
  21.         push edi
  22.         .vertical_width_put:
  23.                 mov [counter],5
  24.  
  25.                 .horizontal_width_put:
  26.                         mov edx,[ebx+4807*4+ebp]
  27.                         ;and edx,0xffffff
  28.                         mov [edi],dx
  29.                         shr edx,16
  30.                         mov [edi+2],dl
  31.  
  32.                 add edi,3
  33.                 add ebp,4
  34.                 dec [counter]
  35.                 jnz .horizontal_width_put
  36.  
  37.                 mov ecx,[Picture_SizeX]
  38.                 sub ecx,5
  39.                 lea ecx,[ecx+ecx*2]
  40.                 add edi,ecx
  41.         dec [counter2]
  42.         jnz .vertical_width_put
  43.         pop edi
  44.         pop ecx
  45.  
  46.         add ebx,4
  47.         dec ecx
  48.         jnz .next_color_put
  49.  
  50.         .no_put_to_screen:
  51. }
  52.  
  53. macro square_width_save
  54. {
  55. local .next_color_save
  56. local .vertical_width_save
  57. local .horizontal_width_save
  58.         mov ebx,[ReserveArray]
  59.         mov [ebx],eax
  60.         mov ecx,eax
  61.         add ebx,4
  62.         xor ebp,ebp
  63.  
  64.         .next_color_save:
  65.         ;save color of pixel in ReserveArray
  66.         push ecx
  67.         mov [counter2],5
  68.         mov edi,[ebx]
  69.         .vertical_width_save:
  70.                 mov [counter],5
  71.  
  72.                 .horizontal_width_save:
  73.                         mov eax,edi
  74.                         mov edx,[eax]
  75.                         ;and edx,0xffffff
  76.                         mov [ebx+4807*4+ebp],dx
  77.                         shr edx,16
  78.                         mov [ebx+4807*4+2+ebp],dl
  79.  
  80.                 add edi,3
  81.                 add ebp,4
  82.                 dec [counter]
  83.                 jnz .horizontal_width_save
  84.  
  85.                 mov ecx,[Picture_SizeX]
  86.                 sub ecx,5
  87.                 lea ecx,[ecx+ecx*2]
  88.                 add edi,ecx
  89.         dec [counter2]
  90.         jnz .vertical_width_save
  91.         pop ecx
  92.  
  93.         add ebx,4
  94.         dec ecx
  95.         jnz .next_color_save
  96. }
  97.  
  98. ;-----------------------------------------------------------
  99. ;-----instruments of panel(icon's instruments)--------------
  100. ;-----------------------------------------------------------
  101. TakeButtonInstruments:
  102.  
  103.         mov eax,[Current_instrument]
  104.  
  105.         ;*************************brush 1***********************
  106.         cmp eax,40
  107.         jne no_brush1
  108.  
  109.         mov [Brush_SizeX],4
  110.         mov [Brush_SizeY],4
  111.         mov [Number_Brush],0
  112.         mov ebx,[Last_instrument]
  113.         mov [Current_instrument],ebx
  114.  
  115.         mov [line_width],1
  116.  
  117.         jmp still
  118.         no_brush1:
  119.  
  120.         ;*************************brush 2***********************
  121.         cmp eax,41
  122.         jne no_brush2
  123.  
  124.         mov [Brush_SizeX],6
  125.         mov [Brush_SizeY],4
  126.         mov [Number_Brush],1
  127.         mov ebx,[Last_instrument]
  128.         mov [Current_instrument],ebx
  129.  
  130.         mov [line_width],2
  131.  
  132.         jmp still
  133.         no_brush2:
  134.  
  135.         ;*************************brush 3***********************
  136.         cmp eax,42
  137.         jne no_brush3
  138.  
  139.         mov [Brush_SizeX],8
  140.         mov [Brush_SizeY],7
  141.         mov [Number_Brush],2
  142.         mov ebx,[Last_instrument]
  143.         mov [Current_instrument],ebx
  144.  
  145.         mov [line_width],3
  146.  
  147.         jmp still
  148.         no_brush3:
  149.  
  150.         ;*************************brush 4***********************
  151.         cmp eax,43
  152.         jne no_brush4
  153.  
  154.         mov [Brush_SizeX],14
  155.         mov [Brush_SizeY],14
  156.         mov [Number_Brush],3
  157.         mov ebx,[Last_instrument]
  158.         mov [Current_instrument],ebx
  159.  
  160.         mov [line_width],4
  161.  
  162.         jmp still
  163.         no_brush4:
  164.  
  165.         ;*************************brush 5***********************
  166.         cmp eax,44
  167.         jne no_brush5
  168.  
  169.         mov [Brush_SizeX],6
  170.         mov [Brush_SizeY],6
  171.         mov [Number_Brush],4
  172.         mov ebx,[Last_instrument]
  173.         mov [Current_instrument],ebx
  174.  
  175.         mov [line_width],5
  176.  
  177.         jmp still
  178.         no_brush5:
  179.  
  180.         ;*************************pensil************************
  181.         cmp eax,10
  182.         jne no_pensil
  183.  
  184.         mov al,[exit_from_work_arrea]
  185.  
  186.         test al,al
  187.         jz no_exit_from_work_arrea
  188.  
  189.         and [Activate_instrument],0
  190.         and [exit_from_work_arrea],0
  191.  
  192.         no_exit_from_work_arrea:
  193.  
  194.         mov al,[Activate_instrument]
  195.  
  196.         test al,al
  197.         jnz no_activated_later
  198.  
  199.         call GetScreenCordinats
  200.         mov eax,[ScreenX]
  201.         mov ebx,[ScreenY]
  202.         add eax,[PosX]
  203.         add ebx,[PosY]
  204.         mov [OldX],eax
  205.         mov [OldY],ebx
  206.  
  207.         no_activated_later:
  208.  
  209. ;       mov eax,[MaxWorkScreen_SizeX] ???
  210. ;       mov ebx,[MaxWorkScreen_SizeY] ???
  211.  
  212.         mov eax,[PointerToPicture]
  213.         mov ebx,[ReserveArray]
  214.         mov ecx,[Picture_SizeX]
  215.         mov edx,[OldX]
  216.         shl edx,16
  217.         add edx,[OldY]
  218.         mov esi,[ScreenX]
  219.         mov edi,[ScreenY]
  220.         add esi,[PosX]
  221.         add edi,[PosY]
  222.         call calculate_line
  223.  
  224.         mov ecx,eax
  225.         mov edx,[Color]
  226.         mov esi,[Color]
  227.         shr edx,16
  228.         xor ebx,ebx
  229.         mov eax,[ReserveArray]
  230.  
  231.         pensil_next_pixel_draw:
  232.  
  233.           mov ebx,[eax]
  234.           mov [ebx],si
  235.           mov [ebx+2],dl
  236.           add eax,4
  237.  
  238.         dec ecx
  239.         jnz pensil_next_pixel_draw
  240.  
  241.         mov eax,[ScreenX]
  242.         mov ebx,[ScreenY]
  243.         add eax,[PosX]
  244.         add ebx,[PosY]
  245.         mov [OldX],eax
  246.         mov [OldY],ebx
  247.  
  248.         call MovePictureToWorkScreen
  249.         mov [Activate_instrument],1
  250.         jmp still
  251.         no_pensil:
  252.  
  253.         ;*************************pipetka***********************
  254.         cmp eax,15
  255.         jne no_pipetka
  256.  
  257.         mov eax,[ScreenY]
  258.         mov ebx,[Picture_SizeX]
  259.         add eax,[PosY]
  260.         imul eax,ebx
  261.         add eax,[ScreenX]
  262.         add eax,[PosX]
  263.         lea eax,[eax+eax*2]
  264.         add eax,[PointerToPicture]
  265.         mov ebx,[eax]
  266.         and ebx,0xffffff
  267.         mov [Color],ebx
  268.  
  269.         mcall SF_DRAW_RECT, 136*65536+20, 65*65536+21, [Color]
  270.  
  271.         jmp still
  272.         no_pipetka:
  273.  
  274.         ;*************************draw brush********************
  275.         cmp eax,11
  276.         jne no_brush
  277.  
  278.         mov [Last_instrument],eax
  279.  
  280.         jmp no_lastik_
  281.  
  282.         lastik_in:
  283.         mov eax,[Color]
  284.         mov [SColor],eax
  285.         mov [Color],0xffffff
  286.         no_lastik_:
  287.  
  288.         mov eax,[ScreenX]
  289.         mov ebx,[ScreenY]
  290.         mov ecx,[Brush_SizeX]
  291.         mov edx,[Brush_SizeY]
  292.         add eax,[PosX]
  293.         add ebx,[PosY]
  294.         add eax,ecx
  295.         add ebx,edx
  296.  
  297.         cmp eax,[Picture_SizeX]
  298.         jl no_max_pos_x
  299.         mov eax,[Picture_SizeX]
  300.         no_max_pos_x:
  301.  
  302.         cmp ebx,[Picture_SizeY]
  303.         jl no_max_pos_y
  304.         mov ebx,[Picture_SizeY]
  305.         no_max_pos_y:
  306.  
  307.         cmp eax,ecx
  308.         ja no_min_pos_x
  309.         mov eax,[Brush_SizeX]
  310.         no_min_pos_x:
  311.  
  312.         cmp ebx,edx
  313.         ja no_min_pos_y
  314.         mov ebx,[Brush_SizeY]
  315.         no_min_pos_y:
  316.  
  317.         sub eax,[Brush_SizeX]
  318.         sub ebx,[Brush_SizeY]
  319.  
  320.         mov [x],eax
  321.         mov [y],ebx
  322.  
  323.         mov al,[exit_from_work_arrea]
  324.         test al,al
  325.         jz no_exit_from_work_arrea_brush
  326.         and [Activate_instrument],0
  327.         and [exit_from_work_arrea],0
  328.         no_exit_from_work_arrea_brush:
  329.  
  330.         mov al,[Activate_instrument]
  331.         test al,al
  332.         jnz no_new_brush_xy
  333.         mov eax,[x]
  334.         mov ebx,[y]
  335.         mov [OldX],eax
  336.         mov [OldY],ebx
  337.         mov [Activate_instrument],1
  338.         no_new_brush_xy:
  339.  
  340.         mov eax,[PointerToPicture]
  341.         mov ebx,[ReserveArray]
  342.         add ebx,4
  343.         mov ecx,[Picture_SizeX]
  344.         mov edx,[OldX]
  345.         shl edx,16
  346.         add edx,[OldY]
  347.         mov esi,[x]
  348.         mov edi,[y]
  349.  
  350.         call calculate_line
  351.  
  352.         mov ebx,[ReserveArray]
  353.         mov [ebx],eax
  354.  
  355.         ;procedure drawing of brush
  356.         mov ebx,[ReserveArray]
  357.         mov ecx,[ebx]
  358.         mov edx,[Color]
  359.         mov esi,[Color]
  360.         shr edx,16
  361.         add ebx,4
  362.         mov edi,[Number_Brush]
  363.         imul edi,20*20
  364.  
  365.         next_pixel_put_brush:
  366.  
  367.         mov eax,[ebx]
  368.         push eax
  369.         push ecx
  370.         xor ebp,ebp
  371.         and [counter2],0
  372.  
  373.         vertical_width_brush:
  374.            and [counter],0
  375.  
  376.            horizontal_width_brush:
  377.            xor ecx,ecx
  378.            mov cl,byte[Brush_color+edi+ebp]
  379.            test cl,cl
  380.              jz no_draw_pixel_brush
  381.               mov [eax],si
  382.               mov [eax+2],dl
  383.              no_draw_pixel_brush:
  384.            add eax,3
  385.            inc ebp
  386.            inc [counter]
  387.            cmp [counter],20
  388.            jne horizontal_width_brush
  389.  
  390.            mov ecx,[Picture_SizeX]
  391.            sub ecx,20
  392.            lea ecx,[ecx+ecx*2]
  393.            add eax,ecx
  394.         inc [counter2]
  395.         cmp [counter2],20
  396.         jne vertical_width_brush
  397.  
  398.         pop ecx
  399.         pop eax
  400.         add ebx,4
  401.         dec ecx
  402.         jnz next_pixel_put_brush
  403.  
  404.         mov eax,[x]
  405.         mov ebx,[y]
  406.         mov [OldX],eax
  407.         mov [OldY],ebx
  408.  
  409.         mov al,[lastik_is_active]
  410.         test al,al
  411.         jz no_lastik_active
  412.  
  413.         mov eax,[SColor]
  414.         mov [Color],eax
  415.         and [lastik_is_active],0
  416.         no_lastik_active:
  417.  
  418.         call MovePictureToWorkScreen
  419.         mov eax,[Current_instrument]
  420.         mov [Last_instrument],eax
  421.  
  422.         jmp still
  423.         no_brush:
  424.  
  425.         ;************************Flood Fill*********************
  426.         cmp eax,14
  427.         jne no_FloodFill
  428.  
  429.         mov eax,[PointerToPicture]
  430.         mov ebx,[PointerToEditBufer]
  431.  
  432.         mov ecx,[Picture_SizeX]
  433.         imul ecx,[Picture_SizeY]
  434.         lea ecx,[ecx+ecx*2]
  435.         shl ecx,1
  436.  
  437.         cmp ecx,mem_flood_f
  438.         ja normal_size_of_bufer
  439.  
  440.         mov ebx,[ReserveArray]
  441.  
  442.         normal_size_of_bufer:
  443.  
  444.         add ebx,4
  445.         mov ecx,[Picture_SizeX]
  446.         mov edx,[ScreenX]
  447.         add edx,[PosX]
  448.         shl edx,16
  449.         add edx,[ScreenY]
  450.         add edx,[PosY]
  451.         mov esi,[Picture_SizeX]
  452.         dec esi
  453.         shl esi,16
  454.         add esi,[Picture_SizeY]
  455.         dec esi
  456.         mov edi,[Color]
  457.  
  458.         call flood_fill
  459.         call MovePictureToWorkScreen
  460.  
  461.         jmp still
  462.         no_FloodFill:
  463.  
  464.         ;************************lastik*************************
  465.         cmp eax,13
  466.         jne no_lastik
  467.  
  468.          mov [Last_instrument],eax
  469.          mov [lastik_is_active],1
  470.         jmp lastik_in
  471.  
  472.         no_lastik:
  473.  
  474.         ;*******************************************************
  475.         cmp eax,12
  476.         jne  no_spray
  477.  
  478.         cmp [Activate_instrument],0
  479.         jne no_null_spray
  480.         mov [Activate_instrument],1
  481.         jmp still
  482.         no_null_spray:
  483.  
  484.         mov eax,[ScreenX]
  485.         mov ebx,[ScreenY]
  486.         mov ecx,[Brush_SizeX]
  487.         mov edx,[Brush_SizeY]
  488.         add eax,[PosX]
  489.         add ebx,[PosY]
  490.         add eax,ecx
  491.         add ebx,edx
  492.  
  493.         cmp eax,[Picture_SizeX]
  494.         jl no_max_pos_x_spray
  495.         mov eax,[Picture_SizeX]
  496.         no_max_pos_x_spray:
  497.  
  498.         cmp ebx,[Picture_SizeY]
  499.         jl no_max_pos_y_spray
  500.         mov ebx,[Picture_SizeY]
  501.         no_max_pos_y_spray:
  502.  
  503.         cmp eax,ecx
  504.         ja no_min_pos_x_spray
  505.         mov eax,[Brush_SizeX]
  506.         no_min_pos_x_spray:
  507.  
  508.         cmp ebx,edx
  509.         ja no_min_pos_y_spray
  510.         mov ebx,[Brush_SizeY]
  511.         no_min_pos_y_spray:
  512.  
  513.         sub eax,[Brush_SizeX]
  514.         sub ebx,[Brush_SizeY]
  515.         mov edi,0;[Number_Brush]
  516.         imul edi,20*20
  517.  
  518.         mov [x],eax
  519.         mov [y],ebx
  520.         mov ebp,[Picture_SizeX]
  521.         xor edx,edx
  522.         brush_y_spray:
  523.           xor ecx,ecx
  524.           brush_x_spray:
  525.            ;calculate position in array of spray
  526.            mov esi,edx
  527.            lea esi,[esi+esi*4] ;esi=esi*5
  528.            shl esi,2           ;esi=(esi*3)*4
  529.            add esi,ecx
  530.            add esi,edi
  531.            ;read byte from array
  532.            xor eax,eax
  533.            mov al,[Spray_color+esi]
  534.            test eax,eax
  535.            jz no_color_spray
  536.            mov eax,[x]
  537.            mov ebx,[y]
  538.            add eax,ecx
  539.            add ebx,edx
  540.            imul ebx,ebp; ebp=[Picture_SizeX]
  541.            add eax,ebx
  542.            lea eax,[eax+eax*2]
  543.            add eax,[PointerToPicture]
  544.            mov ebx,[Color]
  545.            mov [eax],bx
  546.            shr ebx,16
  547.            mov [eax+2],bl
  548.            no_color_spray:
  549.            inc ecx
  550.            cmp ecx,20
  551.           jl brush_x_spray
  552.         inc edx
  553.         cmp edx,20
  554.         jl brush_y_spray
  555.  
  556.         call MovePictureToWorkScreen
  557.         jmp still
  558.  
  559.         no_spray:
  560.  
  561.         ;************************palette************************
  562.         cmp eax,51
  563.         jne no_palette
  564.  
  565.         mov eax,20
  566.         mov ebx,100
  567.         mov ecx,32*10+32*5+7
  568.         mov edx,8*10+7*10
  569.         mov  esi,1
  570.         call draw_volume_rectangle
  571.         mov [x],20+5
  572.         mov [y],100+10
  573.         mov edi,256
  574.         xor esi,esi
  575.         next_rectangle:
  576.         mov ebx,[x]
  577.         mov ecx,[y]
  578.         mov edx,[palitra+esi]
  579.         and edx,0xffffff
  580.         shl ebx,16
  581.         shl ecx,16
  582.         add ebx,13
  583.         add ecx,13
  584.         mcall SF_DRAW_RECT
  585.         add [x],15
  586.         cmp [x],20+15*32
  587.         jl no_new_line
  588.         mov [x],20+5
  589.         add [y],15
  590.         no_new_line:
  591.         add esi,4
  592.         dec edi
  593.         jnz next_rectangle
  594.  
  595.         wait_events:
  596.         call event
  597.  
  598.         cmp eax,1
  599.         je still
  600.  
  601.         cmp eax,2
  602.         jne no_keys
  603.  
  604.         mcall SF_GET_KEY
  605.  
  606.         no_keys:
  607.  
  608.         cmp eax,3
  609.         jne no_buttons
  610.         mcall SF_GET_BUTTON
  611.  
  612.         no_buttons:
  613.  
  614.         cmp eax,6
  615.         jne wait_events
  616.  
  617.         call GetMouseClick
  618.  
  619.         test eax,eax
  620.         jz wait_events
  621.         call GetMouseCoordinats
  622.         mov [x],20+5
  623.         mov [y],100+10
  624.         mov [counter],0
  625.         next_rectangle_column:
  626.         mov eax,[x]
  627.         mov ebx,[y]
  628.         mov ecx,[MouseX]
  629.         mov edx,[MouseY]
  630.         mov esi,13
  631.         mov edi,13
  632.         call columnus
  633.         test eax,eax
  634.         jz no_columnus_color
  635.  
  636.         mov eax,[counter]
  637.         shl eax,2
  638.         mov ebx,[palitra+eax]
  639.         and ebx,0xffffff
  640.         mov [Color],ebx
  641.         no_columnus_color:
  642.  
  643.         add [x],15
  644.  
  645.         cmp [x],20+15*32
  646.         jl no_new_line_column
  647.  
  648.         mov [x],20+5
  649.         add [y],15
  650.         no_new_line_column:
  651.  
  652.         inc [counter]
  653.  
  654.         cmp [counter],257
  655.         jne next_rectangle_column
  656.  
  657.         mcall SF_SLEEP,10
  658.  
  659.         call drawwin
  660.  
  661.         mov eax,[Last_instrument]
  662.         mov [Current_instrument],eax
  663.  
  664.         jmp still
  665.         no_palette:
  666.  
  667.         ;************************draw line**********************
  668.         cmp eax,16
  669.         jne no_line
  670.  
  671.         mov [Last_instrument],eax
  672.  
  673.         mov al,[Activate_instrument]
  674.         test al,al
  675.         jnz no_new_line_xy
  676.         mov eax,[ScreenX]
  677.         mov ebx,[ScreenY]
  678.         add eax,[PosX]
  679.         add ebx,[PosY]
  680.         mov [OldX],eax
  681.         mov [OldY],ebx
  682.         mov [Activate_instrument],1
  683.         xor eax,eax
  684.         mov ecx,mem_flood_f/4
  685.         mov edi,[ReserveArray]
  686.         rep stosd
  687.         jmp still
  688.         no_new_line_xy:
  689.  
  690.         ;put saved pixels
  691.         square_width_put
  692.  
  693.         ;calculate line
  694.         mov ebx,[ReserveArray]
  695.         add ebx,4
  696.         mov eax,[PointerToPicture]
  697.         mov ecx,[Picture_SizeX]
  698.         mov edx,[OldX]
  699.         shl edx,16
  700.         add edx,[OldY]
  701.         mov esi,[ScreenX]
  702.         mov edi,[ScreenY]
  703.         add esi,[PosX]
  704.         add edi,[PosY]
  705.  
  706.         mov ebp,[Picture_SizeX]
  707.         sub ebp,[line_width]
  708.         cmp esi,ebp
  709.         jl no_minimum_x_line
  710.         mov esi,ebp
  711.         no_minimum_x_line:
  712.  
  713.         mov ebp,[Picture_SizeY]
  714.         sub ebp,[line_width]
  715.         cmp edi,ebp
  716.         jl no_minimum_y_line
  717.         mov edi,ebp
  718.         no_minimum_y_line:
  719.  
  720.         call calculate_line
  721.  
  722.         ;save color pixels in ReserveArray
  723.         square_width_save
  724.  
  725.         ;draw calculated pixels on work arrea
  726.         mov ebx,[ReserveArray]
  727.         mov ecx,[ebx]
  728.         mov edx,[Color]
  729.         mov esi,[Color]
  730.         shr edx,16
  731.         add ebx,4
  732.         mov edi,[line_width]
  733.         dec edi
  734.         imul edi,25
  735.         next_pixel_put_line:
  736.  
  737.         mov eax,[ebx]
  738.         push eax
  739.         push ecx
  740.         xor ebp,ebp
  741.         and [counter2],0
  742.  
  743.         vertical_width:
  744.            and [counter],0
  745.  
  746.            horizontal_width:
  747.            xor ecx,ecx
  748.            mov cl,byte[width_pixels+edi+ebp]
  749.            test cl,cl
  750.              jz no_draw_pixel_line
  751.               mov [eax],si
  752.               mov [eax+2],dl
  753.              no_draw_pixel_line:
  754.            add eax,3
  755.            inc ebp
  756.            inc [counter]
  757.            cmp [counter],5
  758.            jne horizontal_width
  759.  
  760.            mov ecx,[Picture_SizeX]
  761.            sub ecx,5
  762.            lea ecx,[ecx+ecx*2]
  763.            add eax,ecx
  764.         inc [counter2]
  765.         cmp [counter2],5
  766.         jne vertical_width
  767.  
  768.         pop ecx
  769.         pop eax
  770.         add ebx,4
  771.         dec ecx
  772.         jnz next_pixel_put_line
  773.  
  774.         call MovePictureToWorkScreen
  775.  
  776.         jmp still
  777.         no_line:
  778.  
  779.         ;************************draw rectangle*****************
  780.         cmp eax,17
  781.         jne no_rectangle
  782.  
  783.         mov [Last_instrument],eax
  784.  
  785.         mov al,[Activate_instrument]
  786.         test al,al
  787.         jnz no_new_rectangle_xy
  788.         mov eax,[ScreenX]
  789.         mov ebx,[ScreenY]
  790.         add eax,[PosX]
  791.         add ebx,[PosY]
  792.         mov [OldX],eax
  793.         mov [OldY],ebx
  794.         mov [Activate_instrument],1
  795.         xor eax,eax
  796.         mov ecx,mem_flood_f/4
  797.         mov edi,[ReserveArray]
  798.         rep stosd
  799.         jmp still
  800.         no_new_rectangle_xy:
  801.  
  802.         ;put saved pixels
  803.         square_width_put
  804.  
  805.         ;calculate line
  806.         mov ebx,[ReserveArray]
  807.         add ebx,4
  808.         mov eax,[PointerToPicture]
  809.         mov ecx,[Picture_SizeX]
  810.         mov edx,[OldX]
  811.         shl edx,16
  812.         add edx,[OldY]
  813.         mov esi,[ScreenX]
  814.         mov edi,[ScreenY]
  815.         add esi,[PosX]
  816.         add edi,[PosY]
  817.  
  818.         mov ebp,[Picture_SizeX]
  819.         sub ebp,[line_width]
  820.         cmp esi,ebp
  821.         jl no_minimum_x_rectangle
  822.         mov esi,ebp
  823.         no_minimum_x_rectangle:
  824.  
  825.         mov ebp,[Picture_SizeY]
  826.         sub ebp,[line_width]
  827.         cmp edi,ebp
  828.         jl no_minimum_y_rectangle
  829.         mov edi,ebp
  830.         no_minimum_y_rectangle:
  831.  
  832.         call calculate_rectangle
  833.  
  834.         ;save color pixels in ReserveArray
  835.         square_width_save
  836.  
  837.         ;draw calculated pixels on work arrea
  838.         mov ebx,[ReserveArray]
  839.         mov ecx,[ebx]
  840.         mov edx,[Color]
  841.         mov esi,[Color]
  842.         shr edx,16
  843.         add ebx,4
  844.         mov edi,[line_width]
  845.         dec edi
  846.         imul edi,25
  847.         next_pixel_put_rectangle:
  848.  
  849.         mov eax,[ebx]
  850.         push eax
  851.         push ecx
  852.         xor ebp,ebp
  853.         and [counter2],0
  854.  
  855.         vertical_width_rectangle:
  856.            and [counter],0
  857.  
  858.            horizontal_width_rectangle:
  859.            xor ecx,ecx
  860.            mov cl,byte[width_pixels_rectangle+edi+ebp]
  861.            test cl,cl
  862.              jz no_draw_pixel_rectangle
  863.               mov [eax],si
  864.               mov [eax+2],dl
  865.              no_draw_pixel_rectangle:
  866.            add eax,3
  867.            inc ebp
  868.            inc [counter]
  869.            cmp [counter],5
  870.            jne horizontal_width_rectangle
  871.  
  872.            mov ecx,[Picture_SizeX]
  873.            sub ecx,5
  874.            lea ecx,[ecx+ecx*2]
  875.            add eax,ecx
  876.         inc [counter2]
  877.         cmp [counter2],5
  878.         jne vertical_width_rectangle
  879.  
  880.         pop ecx
  881.         pop eax
  882.         add ebx,4
  883.         dec ecx
  884.         jnz next_pixel_put_rectangle
  885.  
  886.         call MovePictureToWorkScreen
  887.         jmp still
  888.         no_rectangle:
  889.  
  890.         ;************************draw circle********************
  891.         cmp eax,18
  892.         jne no_circle
  893.  
  894.         mov [Last_instrument],eax
  895.  
  896.         mov al,[Activate_instrument]
  897.         test al,al
  898.         jnz no_new_circle_xy
  899.         mov eax,[ScreenX]
  900.         mov ebx,[ScreenY]
  901.         add eax,[PosX]
  902.         add ebx,[PosY]
  903.         mov [OldX],eax
  904.         mov [OldY],ebx
  905.         mov [Activate_instrument],1
  906.         xor eax,eax
  907.         mov ecx,mem_flood_f/4
  908.         mov edi,[ReserveArray]
  909.         rep stosd
  910.         jmp still
  911.         no_new_circle_xy:
  912.  
  913.         ;put saved pixels
  914.         square_width_put
  915.  
  916.         mov esi,[ScreenX]
  917.         mov edi,[ScreenY]
  918.         add esi,[PosX]
  919.         add edi,[PosY]
  920.  
  921.         sub esi,[OldX]
  922.         jns no_sign_x_circle
  923.         neg esi
  924.         shr esi,1
  925.         neg esi
  926.         add esi,[OldX]
  927.         jmp no_plus_sign_x_circle
  928.         no_sign_x_circle:
  929.  
  930.         shr esi,1
  931.         add esi,[OldX]
  932.         no_plus_sign_x_circle:
  933.  
  934.         sub edi,[OldY]
  935.         jns no_sign_y_circle
  936.         neg edi
  937.         shr edi,1
  938.         neg edi
  939.         add edi,[OldY]
  940.         jmp no_plus_sign_y_circle
  941.         no_sign_y_circle:
  942.  
  943.         shr edi,1
  944.         add edi,[OldY]
  945.         no_plus_sign_y_circle:
  946.  
  947.         mov [x],esi
  948.         mov [y],edi
  949.  
  950.         mov esi,[ScreenX]
  951.         mov edi,[ScreenY]
  952.         add esi,[PosX]
  953.         add edi,[PosY]
  954.  
  955.         sub esi,[OldX]
  956.         jns no_sign_x_circle_r
  957.         neg esi
  958.         no_sign_x_circle_r:
  959.  
  960.         sub edi,[OldY]
  961.         jns no_sign_y_circle_r
  962.         neg edi
  963.         no_sign_y_circle_r:
  964.  
  965.         mov [Dx_],esi
  966.         mov [Dy_],edi
  967.  
  968.         ;finit
  969.         fild [Dx_]
  970.         fmul st0,st0
  971.         fild [Dy_]
  972.         fmul st0,st0
  973.         fadd st0,st1
  974.         fsqrt
  975.         fistp [Radius]
  976.         fistp [Icon_X]
  977.         mov esi,[Radius]
  978.         shr esi,1
  979.         cmp esi,0
  980.         jne no_null_radius
  981.         mov [Radius],1
  982.         no_null_radius:
  983.  
  984.         mov [Radius],esi
  985.  
  986.         mov edi,[x]
  987.         mov ebp,[y]
  988.         add edi,esi
  989.         add ebp,esi
  990.  
  991.         mov edx,[Picture_SizeX]
  992.         sub edx,[line_width]
  993.         cmp edi,edx
  994.         jl no_limit_x_circle
  995.         sub edi,edx
  996.         sub [Radius],edi
  997.         no_limit_x_circle:
  998.  
  999.         mov edx,[Picture_SizeY]
  1000.         sub edx,[line_width]
  1001.         cmp ebp,edx
  1002.         jl no_limit_y_circle
  1003.         sub ebp,edx
  1004.         sub [Radius],ebp
  1005.         no_limit_y_circle:
  1006.  
  1007.  
  1008.         mov edi,[x]
  1009.         mov ebp,[y]
  1010.  
  1011.         sub edi,[Radius]
  1012.         jns no_minimum_x_circle
  1013.         add [Radius],edi
  1014.         no_minimum_x_circle:
  1015.  
  1016.         sub ebp,[Radius]
  1017.         jns no_minimum_y_circle
  1018.         add [Radius],ebp
  1019.         no_minimum_y_circle:
  1020.  
  1021.         ;calculate circle
  1022.         mov ebx,[ReserveArray]
  1023.         add ebx,4
  1024.         mov eax,[PointerToPicture]
  1025.         mov ecx,[Picture_SizeX]
  1026.         mov edx,[x]
  1027.         shl edx,16
  1028.         add edx,[y]
  1029.         mov esi,[Radius]
  1030.         call calculate_circle
  1031.  
  1032.         ;save color pixels in ReserveArray
  1033.         square_width_save
  1034.  
  1035.         ;draw calculated pixels on work arrea
  1036.         mov ebx,[ReserveArray]
  1037.         mov ecx,[ebx]
  1038.         mov edx,[Color]
  1039.         mov esi,[Color]
  1040.         shr edx,16
  1041.         add ebx,4
  1042.         mov edi,[line_width]
  1043.         dec edi
  1044.         imul edi,25
  1045.         next_pixel_put_circle:
  1046.  
  1047.         mov eax,[ebx]
  1048.         push eax
  1049.         push ecx
  1050.         xor ebp,ebp
  1051.         and [counter2],0
  1052.  
  1053.         vertical_width_circle:
  1054.            and [counter],0
  1055.  
  1056.            horizontal_width_circle:
  1057.            xor ecx,ecx
  1058.            mov cl,byte[width_pixels+edi+ebp]
  1059.            test cl,cl
  1060.              jz no_draw_pixel_circle
  1061.               mov [eax],si
  1062.               mov [eax+2],dl
  1063.              no_draw_pixel_circle:
  1064.            add eax,3
  1065.            inc ebp
  1066.            inc [counter]
  1067.            cmp [counter],5
  1068.            jne horizontal_width_circle
  1069.  
  1070.            mov ecx,[Picture_SizeX]
  1071.            sub ecx,5
  1072.            lea ecx,[ecx+ecx*2]
  1073.            add eax,ecx
  1074.         inc [counter2]
  1075.         cmp [counter2],5
  1076.         jne vertical_width_circle
  1077.  
  1078.         pop ecx
  1079.         pop eax
  1080.         add ebx,4
  1081.         dec ecx
  1082.         jnz next_pixel_put_circle
  1083.  
  1084.         call MovePictureToWorkScreen
  1085.         jmp still
  1086.         no_circle:
  1087.  
  1088.         ;************************zoom 1*************************
  1089.         cmp eax,45
  1090.         jne no_1_
  1091.         mov [k],1
  1092.         mov [Scroll1CoordinatX],9
  1093.         mov [Scroll2CoordinatY],89
  1094.         and [Current_instrument],0
  1095.         call drawwin
  1096.         jmp still
  1097.         no_1_:
  1098.  
  1099.         ;************************zoom 2*************************
  1100.         cmp eax,46
  1101.         jne no_2_
  1102.         mov [k],2
  1103.         call drawwin
  1104.         mov [Scroll1CoordinatX],9
  1105.         mov [Scroll2CoordinatY],89
  1106.         and [Current_instrument],0
  1107.         jmp still
  1108.         no_2_:
  1109.  
  1110.  
  1111.         ;************************zoom 3*************************
  1112.         cmp eax,47
  1113.         jne no_3_
  1114.         mov [k],3
  1115.         call drawwin
  1116.         mov [Scroll1CoordinatX],9
  1117.         mov [Scroll2CoordinatY],89
  1118.         and [Current_instrument],0
  1119.         jmp still
  1120.         no_3_:
  1121.  
  1122.         ;************************zoom 4*************************
  1123.         cmp eax,48
  1124.         jne no_4_
  1125.         mov [k],4
  1126.         call drawwin
  1127.         mov [Scroll1CoordinatX],9
  1128.         mov [Scroll2CoordinatY],89
  1129.         and [Current_instrument],0
  1130.         jmp still
  1131.         no_4_:
  1132.  
  1133.         ;************************zoom 8*************************
  1134.         cmp eax,49
  1135.         jne no_8_
  1136.         mov [k],8
  1137.         call drawwin
  1138.         mov [Scroll1CoordinatX],9
  1139.         mov [Scroll2CoordinatY],89
  1140.         and [Current_instrument],0
  1141.         jmp still
  1142.         no_8_:
  1143.  
  1144.         ;************************zoom 16************************
  1145.         cmp eax,50
  1146.         jne no_16_
  1147.         mov [k],16
  1148.         call drawwin
  1149.         mov [Scroll1CoordinatX],9
  1150.         mov [Scroll2CoordinatY],89
  1151.         and [Current_instrument],0
  1152.         jmp still
  1153.         no_16_:
  1154.  
  1155.         ;***************allocation of a countour****************
  1156.         cmp eax,21
  1157.         jne no_allocation
  1158.  
  1159.         cmp [instrument_used],0
  1160.         jnz instrument_not_finished_work
  1161.  
  1162.         mov al,[Activate_instrument]
  1163.         test al,al
  1164.         jnz no_new_allocation_xy
  1165.         mov eax,[ScreenX]
  1166.         mov ebx,[ScreenY]
  1167.         add eax,[PosX]
  1168.         add ebx,[PosY]
  1169.         mov [OldX],eax
  1170.         mov [OldY],ebx
  1171.         inc eax
  1172.         inc ebx
  1173.         mov [rectangular_shade_x],eax
  1174.         mov [rectangular_shade_y],ebx
  1175.         mov [Activate_instrument],1
  1176.         mov [instrument_used],1
  1177.         and [crossing],0
  1178.         and [finishing_crossing],0
  1179.         xor eax,eax
  1180.         mov ecx,mem_flood_f/4
  1181.         mov edi,[ReserveArray]
  1182.         rep stosd
  1183.         jmp still
  1184.         no_new_allocation_xy:
  1185.         instrument_not_finished_work:
  1186.  
  1187.         mov al,[instrument_used]
  1188.         test al,al
  1189.         jz no_change_coordinats
  1190.  
  1191.         cmp [Activate_instrument],0
  1192.         jnz no_change_coordinats
  1193.  
  1194.         ;save coordinates as old if crossing=0
  1195.         cmp [crossing],0
  1196.         jnz no_save_coordinate_of_crossing
  1197.  
  1198.         mov eax,[OldX]
  1199.         mov ebx,[OldY]
  1200.  
  1201.         cmp eax,[rectangular_shade_x]
  1202.         jl no_remove_x
  1203.         mov ecx,[rectangular_shade_x]
  1204.         mov [OldX],ecx                    ; OldX <-----> rectangulare_shade_x
  1205.         mov [rectangular_shade_x],eax
  1206.         no_remove_x:
  1207.  
  1208.         cmp ebx,[rectangular_shade_y]
  1209.         jl no_remove_y
  1210.         mov ecx,[rectangular_shade_y]
  1211.         mov [OldY],ecx                    ; OldY <-----> rectangulare_shade_y
  1212.         mov [rectangular_shade_y],ebx
  1213.         no_remove_y:
  1214.  
  1215.         mov eax,[ScreenX]
  1216.         mov ebx,[ScreenY]
  1217.         add eax,[PosX]
  1218.         add ebx,[PosY]
  1219.         mov [crossing_old_x],eax
  1220.         mov [crossing_old_y],ebx
  1221.         mov [crossing],1
  1222.  
  1223.  
  1224.         mov eax,[OldX]
  1225.         mov ebx,[OldY]
  1226.         inc eax
  1227.         inc ebx
  1228.         mov [SpriteCoordinatX],eax
  1229.         mov [SpriteCoordinatY],ebx
  1230.         mov [SpriteOldCoordinatX],eax
  1231.         mov [SpriteOldCoordinatY],ebx
  1232.         mov esi,[rectangular_shade_x]
  1233.         mov edi,[rectangular_shade_y]
  1234.  
  1235.         sub esi,eax
  1236.         jns no_sign_sprite_size_x
  1237.         neg esi
  1238.         no_sign_sprite_size_x:
  1239.  
  1240.         sub edi,ebx
  1241.         jns no_sign_sprite_size_y
  1242.         neg edi
  1243.         no_sign_sprite_size_y:
  1244.  
  1245.         test esi,esi
  1246.         jnz no_null_sprite_x
  1247.         mov esi,1
  1248.         no_null_sprite_x:
  1249.  
  1250.         test edi,edi
  1251.         jnz no_null_sprite_y
  1252.         mov edi,1
  1253.         no_null_sprite_y:
  1254.  
  1255.         mov [SpriteSizeX],esi
  1256.         mov [SpriteSizeY],edi
  1257.  
  1258.         call SaveFonForSprite
  1259.  
  1260.         no_save_coordinate_of_crossing:
  1261.  
  1262.         cmp [crossing],0
  1263.         je no_test_crossing_with_work_arrea
  1264.         ;if mouse situatad after allocation than exit
  1265.         push [ScreenX]
  1266.         push [ScreenY]
  1267.  
  1268.         call GetScreenCordinats
  1269.  
  1270.         mov eax,[OldX]
  1271.         mov ebx,[OldY]
  1272.         mov ecx,[ScreenX]
  1273.         mov edx,[ScreenY]
  1274.         mov esi,[SpriteSizeX]
  1275.         mov edi,[SpriteSizeY]
  1276.         add ecx,[PosX]
  1277.         add edx,[PosY]
  1278.         inc esi;eax
  1279.         inc edi;ebx
  1280.         call columnus
  1281.  
  1282.         test eax,eax
  1283.         jnz crossing_with_work_area
  1284.         mov [finishing_crossing],1
  1285.         mov [register],1
  1286.         crossing_with_work_area:
  1287.  
  1288.         pop [ScreenY]
  1289.         pop [ScreenX]
  1290.  
  1291.         no_test_crossing_with_work_arrea:
  1292.  
  1293.         mov eax,[ScreenX]
  1294.         mov ebx,[ScreenY]
  1295.         add eax,[PosX]
  1296.         add ebx,[PosY]
  1297.         mov ecx,eax
  1298.         mov edx,ebx
  1299.         sub eax,[crossing_old_x]  ;dx=(x-oldx)
  1300.         sub ebx,[crossing_old_y]  ;dy=(y-oldy)
  1301.         mov [crossing_old_x],ecx
  1302.         mov [crossing_old_y],edx
  1303.  
  1304.         add [OldX],eax                 ;x1=x1+dx
  1305.         add [OldY],ebx                 ;y1=y1+dy
  1306.         add [rectangular_shade_x],eax  ;x2=x2+dx
  1307.         add [rectangular_shade_y],ebx  ;y2+y2+dy
  1308.  
  1309.         mov eax,[OldX]
  1310.         mov ebx,[OldY]
  1311.         inc eax
  1312.         inc ebx
  1313.         mov [SpriteCoordinatX],eax
  1314.         mov [SpriteCoordinatY],ebx
  1315.  
  1316.         cmp [SpriteCoordinatX],0
  1317.         jns no_null_sprite_coordinat_x
  1318.         mov [SpriteCoordinatX],1
  1319.         no_null_sprite_coordinat_x:
  1320.  
  1321.         cmp [SpriteCoordinatY],0
  1322.         jns no_null_sprite_coordinat_y
  1323.         mov [SpriteCoordinatY],1
  1324.         no_null_sprite_coordinat_y:
  1325.  
  1326.         mov esi,[rectangular_shade_x]
  1327.         mov edi,[rectangular_shade_y]
  1328.  
  1329.         sub esi,[OldX]
  1330.         jns no_znak_size_of_rectangulare_crossing_x
  1331.         neg esi
  1332.         no_znak_size_of_rectangulare_crossing_x:
  1333.  
  1334.         sub edi,[OldY]
  1335.         jns no_znak_size_of_rectangulare_crossing_y
  1336.         neg edi
  1337.         no_znak_size_of_rectangulare_crossing_y:
  1338.  
  1339.         mov ecx,[OldX]
  1340.         mov edx,[OldY]
  1341.  
  1342.         sub ecx,[PosX]
  1343.         jns no_minimum_x_crossing
  1344.         mov ecx,0
  1345.         add ecx,[PosX]
  1346.         mov [OldX],ecx
  1347.         add ecx,esi
  1348.         mov [rectangular_shade_x],ecx
  1349.         no_minimum_x_crossing:
  1350.  
  1351.         sub edx,[PosY]
  1352.         jns no_minimum_y_crossing
  1353.         mov edx,0
  1354.         add edx,[PosY]
  1355.         mov [OldY],edx
  1356.         add edx,edi
  1357.         mov [rectangular_shade_y],edx
  1358.         no_minimum_y_crossing:
  1359.  
  1360.         mov ecx,[Picture_SizeX]
  1361.         sub ecx,esi
  1362.         cmp [OldX],ecx
  1363.         jl no_maximum_x_crossing
  1364.         dec ecx
  1365.         mov [OldX],ecx
  1366.         add ecx,esi
  1367.         mov [rectangular_shade_x],ecx
  1368.         no_maximum_x_crossing:
  1369.  
  1370.         mov edx,[Picture_SizeY]
  1371.         sub edx,edi
  1372.         cmp [OldY],edx
  1373.         jl no_maximum_y_crossing
  1374.         dec edx
  1375.         mov [OldY],edx
  1376.         add edx,edi
  1377.         mov [rectangular_shade_y],edx
  1378.         no_maximum_y_crossing:
  1379.  
  1380.         mov eax,[rectangular_shade_x]
  1381.         mov ebx,[rectangular_shade_y]
  1382.         sub eax,[PosX]
  1383.         sub ebx,[PosY]
  1384.         mov [ScreenX],eax
  1385.         mov [ScreenY],ebx
  1386.         no_change_coordinats:
  1387.  
  1388.         ;put saved pixels
  1389.         square_width_put
  1390.  
  1391.         cmp [DrawSprite_flag],1
  1392.         jne no_activate_put_fon_
  1393.  
  1394.         cmp [Paste_flag],1
  1395.         je no_put_fon___
  1396.         call PutFonForSprite
  1397.         no_put_fon___:
  1398.         and [Paste_flag],0
  1399.         no_activate_put_fon_:
  1400.  
  1401.         cmp [finishing_crossing],0
  1402.         jz not_finish_from_instrument_crossing
  1403.         and [Activate_instrument],0
  1404.         and [crossing],0
  1405.         and [instrument_used],0
  1406.         and [DrawSprite_flag],0
  1407.         call MovePictureToWorkScreen
  1408.         jmp still
  1409.         not_finish_from_instrument_crossing:
  1410.  
  1411.         ;calculate line
  1412.         mov ebx,[ReserveArray]
  1413.         add ebx,4
  1414.         mov eax,[PointerToPicture]
  1415.         mov ecx,[Picture_SizeX]
  1416.         mov edx,[OldX]
  1417.         shl edx,16
  1418.         add edx,[OldY]
  1419.         mov esi,[ScreenX]
  1420.         mov edi,[ScreenY]
  1421.         add esi,[PosX]
  1422.         add edi,[PosY]
  1423.  
  1424.         mov ebp,[Picture_SizeX]
  1425.         dec ebp
  1426.         cmp esi,ebp
  1427.         jl no_minimum_x_allocation
  1428.         mov esi,ebp
  1429.         no_minimum_x_allocation:
  1430.  
  1431.         mov ebp,[Picture_SizeY]
  1432.         dec ebp
  1433.         cmp edi,ebp
  1434.         jl no_minimum_y_allocation
  1435.         mov edi,ebp
  1436.         no_minimum_y_allocation:
  1437.  
  1438.         call calculate_rectangle
  1439.  
  1440.         ;save color pixels in ReserveArray
  1441.         square_width_save
  1442.  
  1443.         cmp [DrawSprite_flag],1
  1444.         jne no_save_fon_for_sprite_
  1445.         ;save current coordinats as old
  1446.         mov eax,[SpriteCoordinatX]
  1447.         mov ebx,[SpriteCoordinatY]
  1448.         mov [SpriteOldCoordinatX],eax
  1449.         mov [SpriteOldCoordinatY],ebx
  1450.  
  1451.         call SaveFonForSprite
  1452.  
  1453.         no_save_fon_for_sprite_:
  1454.  
  1455.         ;draw calculated pixels on work arrea
  1456.         mov ebx,[ReserveArray]
  1457.         mov ecx,[ebx]
  1458.         add ebx,4
  1459.         next_pixel_put_allocation:
  1460.  
  1461.         mov edx,0x1f3fff
  1462.         mov esi,edx
  1463.         shr edx,16
  1464.  
  1465.         mov ebp,ecx
  1466.         and ebp,8
  1467.         cmp ebp,8
  1468.         jne black_color
  1469.         mov si,0xffff
  1470.         mov dl,0xff
  1471.         black_color:
  1472.  
  1473.         mov eax,[ebx]
  1474.         mov [eax],si
  1475.         mov [eax+2],dl
  1476.  
  1477.         add ebx,4
  1478.         dec ecx
  1479.         jnz next_pixel_put_allocation
  1480.  
  1481.         cmp [DrawSprite_flag],1
  1482.         jne no_activate_draw_sprite_
  1483.  
  1484.         call DrawSprite
  1485.  
  1486.         no_activate_draw_sprite_:
  1487.  
  1488.         mov al,[instrument_used]
  1489.         test al,al
  1490.         jz no_change_coordinats
  1491.         cmp [Activate_instrument],0
  1492.         jz no_save_shades
  1493.         mov eax,[ScreenX]
  1494.         mov ebx,[ScreenY]
  1495.         add eax,[PosX]
  1496.         add ebx,[PosY]
  1497.         mov [rectangular_shade_x],eax
  1498.         mov [rectangular_shade_y],ebx
  1499.         no_save_shades:
  1500.  
  1501.         call MovePictureToWorkScreen
  1502.         jmp still
  1503.         no_allocation:
  1504.  
  1505.         ;*************reflection from left to right*************
  1506.         cmp eax,23
  1507.         jne no_reflection_from_left_to_right
  1508.  
  1509.         mov ebp,[PointerToPicture]
  1510.         mov edx,[ReserveArray]
  1511.         mov esi,[Picture_SizeX]
  1512.         mov ebx,[Picture_SizeX]
  1513.         lea ebx,[ebx+ebx*2]
  1514.         shr esi,1
  1515.         next_line_reflection_x:
  1516.         ;copy vertical line to array
  1517.         mov ecx,[Picture_SizeX]
  1518.         shr ecx,1
  1519.         sub ecx,esi
  1520.         lea ecx,[ecx+ecx*2]
  1521.         add ecx,[PointerToPicture]
  1522.         mov edx,[ReserveArray]
  1523.         and edi,0
  1524.         copy_to_array_line_reflection_y:
  1525.         mov eax,[ecx]
  1526.         mov ebp,edi
  1527.         lea ebp,[ebp+ebp*2]
  1528.         mov [edx+ebp],ax
  1529.         shr eax,16
  1530.         mov [edx+ebp+2],al
  1531.         add ecx,ebx
  1532.         inc edi
  1533.         cmp edi,[Picture_SizeY]
  1534.         jne copy_to_array_line_reflection_y
  1535.  
  1536.         mov ecx,[Picture_SizeX]
  1537.         shr ecx,1
  1538.         mov ebp,ecx
  1539.         add ecx,esi
  1540.         dec ecx
  1541.         lea ecx,[ecx+ecx*2]
  1542.         add ecx,[PointerToPicture]
  1543.         sub ebp,esi
  1544.         lea ebp,[ebp+ebp*2]
  1545.         add ebp,[PointerToPicture]
  1546.         and edi,0
  1547.         next_line_reflection_y:
  1548.         mov eax,[ecx]
  1549.         and eax,0xffffff
  1550.         mov [ebp],ax
  1551.         shr eax,16
  1552.         mov [ebp+2],al
  1553.         add ebp,ebx
  1554.         add ecx,ebx
  1555.         inc edi
  1556.         cmp edi,[Picture_SizeY]
  1557.         jnz next_line_reflection_y
  1558.  
  1559.         ;copy vertical line  from array to screen
  1560.         mov ecx,[Picture_SizeX]
  1561.         shr ecx,1
  1562.         add ecx,esi
  1563.         dec ecx
  1564.         lea ecx,[ecx+ecx*2]
  1565.         add ecx,[PointerToPicture]
  1566.         mov edx,[ReserveArray]
  1567.         and edi,0
  1568.         copy_from_array_to_screen_reflection_y:
  1569.         mov ebp,edi
  1570.         lea ebp,[ebp+ebp*2]
  1571.         xor eax,eax
  1572.         mov eax,[edx+ebp]
  1573.         mov [ecx],ax
  1574.         shr eax,16
  1575.         mov [ecx+2],al
  1576.         add ecx,ebx
  1577.         inc edi
  1578.         cmp edi,[Picture_SizeY]
  1579.         jne copy_from_array_to_screen_reflection_y
  1580.  
  1581.         dec esi
  1582.         jnz next_line_reflection_x
  1583.  
  1584.         call MovePictureToWorkScreen
  1585.         jmp still
  1586.         no_reflection_from_left_to_right:
  1587.  
  1588.         ;*************reflection from up to down****************
  1589.         cmp eax,24
  1590.         jne no_reflection_from_up_to_down
  1591.         mov esi,[Picture_SizeX]
  1592.         mov edi,esi
  1593.         lea esi,[esi+esi*2]
  1594.         lea edi,[edi+edi*2]
  1595.         imul edi,[Picture_SizeY]
  1596.         mov edx,[ReserveArray]
  1597.         mov ecx,[Picture_SizeY]
  1598.         shr ecx,1
  1599.         add edi,[PointerToPicture]
  1600.         sub edi,esi
  1601.         mov ebp,[PointerToPicture]
  1602.         next_lines_reflection:
  1603.         ;copy line
  1604.         xor ebx,ebx
  1605.         copy_line_1:
  1606.         xor eax,eax
  1607.         mov al,[edi+ebx]
  1608.         mov [edx+ebx],al
  1609.         inc ebx
  1610.         cmp ebx,esi
  1611.         jne copy_line_1
  1612.  
  1613.         xor ebx,ebx
  1614.         copy_line_2:
  1615.         xor eax,eax
  1616.         mov al,[ebp+ebx]
  1617.         mov [edi+ebx],al
  1618.         inc ebx
  1619.         cmp ebx,esi
  1620.         jne copy_line_2
  1621.  
  1622.         xor ebx,ebx
  1623.         copy_line_3:
  1624.         xor eax,eax
  1625.         mov al,[edx+ebx]
  1626.         mov [ebp+ebx],al
  1627.         inc ebx
  1628.         cmp ebx,esi
  1629.         jne copy_line_3
  1630.  
  1631.         add ebp,esi
  1632.         sub edi,esi
  1633.         dec ecx
  1634.         jnz next_lines_reflection
  1635.  
  1636.         call MovePictureToWorkScreen
  1637.         jmp still
  1638.         no_reflection_from_up_to_down:
  1639.  
  1640.         ;*********************draw hard contour*****************
  1641.         cmp eax,20
  1642.         jne no_kontur_
  1643.  
  1644.         mov [Last_instrument],eax
  1645.  
  1646.         mov al,[Activate_instrument]
  1647.         test al,al
  1648.         jnz no_new_konture_xy
  1649.  
  1650.         mov al,[instrument_used]
  1651.         test al,al
  1652.         jz instrument_not_used
  1653.         mov eax,[used_OldX]
  1654.         mov ebx,[used_OldY]
  1655.         mov [OldX],eax
  1656.         mov [OldY],ebx
  1657.         jmp exit_used_instrument
  1658.         instrument_not_used:
  1659.  
  1660.         mov eax,[ScreenX]
  1661.         mov ebx,[ScreenY]
  1662.         add eax,[PosX]
  1663.         add ebx,[PosY]
  1664.         mov [OldX],eax
  1665.         mov [OldY],ebx
  1666.         exit_used_instrument:
  1667.  
  1668.         mov al,[instrument_used]
  1669.         test al,al
  1670.         jnz instrument_used_true
  1671.         mov [instrument_used],byte 1
  1672.         instrument_used_true:
  1673.  
  1674.         mov [Activate_instrument],1
  1675.         xor eax,eax
  1676.         mov ecx,mem_flood_f/4
  1677.         mov edi,[ReserveArray]
  1678.         rep stosd
  1679.  
  1680.         no_new_konture_xy:
  1681.  
  1682.         ;put saved pixels
  1683.         square_width_put
  1684.  
  1685.         ;calculate line
  1686.         mov ebx,[ReserveArray]
  1687.         add ebx,4
  1688.         mov eax,[PointerToPicture]
  1689.         mov ecx,[Picture_SizeX]
  1690.         mov edx,[OldX]
  1691.         shl edx,16
  1692.         add edx,[OldY]
  1693.         mov esi,[ScreenX]
  1694.         mov edi,[ScreenY]
  1695.         add esi,[PosX]
  1696.         add edi,[PosY]
  1697.  
  1698.         mov ebp,[Picture_SizeX]
  1699.         sub ebp,[line_width]
  1700.         cmp esi,ebp
  1701.         jl no_minimum_x_konture
  1702.         mov esi,ebp
  1703.         no_minimum_x_konture:
  1704.  
  1705.         mov ebp,[Picture_SizeY]
  1706.         sub ebp,[line_width]
  1707.         cmp edi,ebp
  1708.         jl no_minimum_y_konture
  1709.         mov edi,ebp
  1710.         no_minimum_y_konture:
  1711.  
  1712.         call calculate_line
  1713.  
  1714.         ;save color pixels in ReserveArray
  1715.         square_width_save
  1716.  
  1717.         ;draw calculated pixels on work arrea
  1718.         mov ebx,[ReserveArray]
  1719.         mov ecx,[ebx]
  1720.         mov edx,[Color]
  1721.         mov esi,[Color]
  1722.         shr edx,16
  1723.         add ebx,4
  1724.         mov edi,[line_width]
  1725.         dec edi
  1726.         imul edi,25
  1727.         next_pixel_put_konture:
  1728.  
  1729.         mov eax,[ebx]
  1730.         push eax
  1731.         push ecx
  1732.         xor ebp,ebp
  1733.         and [counter2],0
  1734.  
  1735.         vertical_width_konture:
  1736.            and [counter],0
  1737.  
  1738.            horizontal_width_konture:
  1739.            xor ecx,ecx
  1740.            mov cl,byte[width_pixels+edi+ebp]
  1741.            test cl,cl
  1742.              jz no_draw_pixel_konture
  1743.               mov [eax],si
  1744.               mov [eax+2],dl
  1745.              no_draw_pixel_konture:
  1746.            add eax,3
  1747.            inc ebp
  1748.            inc [counter]
  1749.            cmp [counter],5
  1750.            jne horizontal_width_konture
  1751.  
  1752.            mov ecx,[Picture_SizeX]
  1753.            sub ecx,5
  1754.            lea ecx,[ecx+ecx*2]
  1755.            add eax,ecx
  1756.         inc [counter2]
  1757.         cmp [counter2],5
  1758.         jne vertical_width_konture
  1759.  
  1760.         pop ecx
  1761.         pop eax
  1762.         add ebx,4
  1763.         dec ecx
  1764.         jnz next_pixel_put_konture
  1765.  
  1766.         mov eax,[ScreenX]
  1767.         mov ebx,[ScreenY]
  1768.         add eax,[PosX]
  1769.         add ebx,[PosY]
  1770.         mov [used_OldX],eax
  1771.         mov [used_OldY],ebx
  1772.  
  1773.         call MovePictureToWorkScreen
  1774.  
  1775.         jmp still
  1776.  
  1777.         no_kontur_:
  1778.         ;************************draw ellips********************
  1779.         cmp eax,19
  1780.         jne no_ellips
  1781.  
  1782.         mov [Last_instrument],eax
  1783.  
  1784.         mov al,[Activate_instrument]
  1785.         test al,al
  1786.         jnz no_new_ellips_xy
  1787.         mov eax,[ScreenX]
  1788.         mov ebx,[ScreenY]
  1789.         add eax,[PosX]
  1790.         add ebx,[PosY]
  1791.         mov [OldX],eax
  1792.         mov [OldY],ebx
  1793.         mov [Activate_instrument],1
  1794.         xor eax,eax
  1795.         mov ecx,mem_flood_f/4
  1796.         mov edi,[ReserveArray]
  1797.         rep stosd
  1798.         jmp still
  1799.         no_new_ellips_xy:
  1800.  
  1801.         ;put saved pixels
  1802.         square_width_put
  1803.  
  1804.  
  1805.         mov esi,[ScreenX]
  1806.         mov edi,[ScreenY]
  1807.         add esi,[PosX]
  1808.         add edi,[PosY]
  1809.  
  1810.         sub esi,[OldX]
  1811.         jns no_sign_x_ellips
  1812.         neg esi
  1813.         shr esi,1
  1814.         neg esi
  1815.         add esi,[OldX]
  1816.         jmp no_plus_sign_x_ellips
  1817.         no_sign_x_ellips:
  1818.  
  1819.         shr esi,1
  1820.         add esi,[OldX]
  1821.         no_plus_sign_x_ellips:
  1822.  
  1823.         sub edi,[OldY]
  1824.         jns no_sign_y_ellips
  1825.         neg edi
  1826.         shr edi,1
  1827.         neg edi
  1828.         add edi,[OldY]
  1829.         jmp no_plus_sign_y_ellips
  1830.         no_sign_y_ellips:
  1831.  
  1832.         shr edi,1
  1833.         add edi,[OldY]
  1834.         no_plus_sign_y_ellips:
  1835.  
  1836.         mov [x],esi
  1837.         mov [y],edi
  1838.  
  1839.         mov esi,[ScreenX]
  1840.         mov edi,[ScreenY]
  1841.         add esi,[PosX]
  1842.         add edi,[PosY]
  1843.  
  1844.         sub esi,[OldX]
  1845.         jns no_sign_x_ellips_r
  1846.         neg esi
  1847.         no_sign_x_ellips_r:
  1848.  
  1849.         sub edi,[OldY]
  1850.         jns no_sign_y_ellips_r
  1851.         neg edi
  1852.         no_sign_y_ellips_r:
  1853.  
  1854.         cmp edi,0
  1855.         jnz no_null_a_ellips
  1856.         mov edi,1
  1857.         no_null_a_ellips:
  1858.  
  1859.         shr esi,1
  1860.         shr edi,1
  1861.         mov [a_ellips],esi
  1862.         mov [b_ellips],edi
  1863.  
  1864.         mov edi,[x]
  1865.         mov ebp,[y]
  1866.         add edi,esi
  1867.         add ebp,esi
  1868.  
  1869.         mov edx,[Picture_SizeX]
  1870.         sub edx,[line_width]
  1871.         cmp edi,edx
  1872.         jl no_limit_x_ellips
  1873.         sub edi,edx
  1874.         sub [a_ellips],edi
  1875.         no_limit_x_ellips:
  1876.  
  1877.         mov edx,[Picture_SizeY]
  1878.         sub edx,[line_width]
  1879.         cmp ebp,edx
  1880.         jl no_limit_y_ellips
  1881.         sub ebp,edx
  1882.         sub [b_ellips],ebp
  1883.         no_limit_y_ellips:
  1884.  
  1885.  
  1886.         mov edi,[x]
  1887.         mov ebp,[y]
  1888.  
  1889.         sub edi,[a_ellips]
  1890.         jns no_minimum_x_ellips
  1891.         add [a_ellips],edi
  1892.         no_minimum_x_ellips:
  1893.  
  1894.         sub ebp,[b_ellips]
  1895.         jns no_minimum_y_ellips
  1896.         add [b_ellips],ebp
  1897.         no_minimum_y_ellips:
  1898.  
  1899.         ;calculate circle
  1900.         mov ebx,[ReserveArray]
  1901.         add ebx,4
  1902.         mov eax,[PointerToPicture]
  1903.         mov ecx,[Picture_SizeX]
  1904.         mov edx,[x]
  1905.         shl edx,16
  1906.         add edx,[y]
  1907.         mov esi,[a_ellips]
  1908.         shl esi,16
  1909.         add esi,[b_ellips]
  1910.         call calculate_ellips
  1911.  
  1912.         ;save color pixels in ReserveArray
  1913.         square_width_save
  1914.  
  1915.         ;draw calculated pixels on work arrea
  1916.         mov ebx,[ReserveArray]
  1917.         mov ecx,[ebx]
  1918.         mov edx,[Color]
  1919.         mov esi,[Color]
  1920.         shr edx,16
  1921.         add ebx,4
  1922.         mov edi,[line_width]
  1923.         dec edi
  1924.         imul edi,25
  1925.         next_pixel_put_ellips:
  1926.  
  1927.         mov eax,[ebx]
  1928.         push eax
  1929.         push ecx
  1930.         xor ebp,ebp
  1931.         and [counter2],0
  1932.  
  1933.         vertical_width_ellips:
  1934.            and [counter],0
  1935.  
  1936.            horizontal_width_ellips:
  1937.            xor ecx,ecx
  1938.            mov cl,byte[width_pixels+edi+ebp]
  1939.            test cl,cl
  1940.              jz no_draw_pixel_ellips
  1941.               mov [eax],si
  1942.               mov [eax+2],dl
  1943.              no_draw_pixel_ellips:
  1944.            add eax,3
  1945.            inc ebp
  1946.            inc [counter]
  1947.            cmp [counter],5
  1948.            jne horizontal_width_ellips
  1949.  
  1950.            mov ecx,[Picture_SizeX]
  1951.            sub ecx,5
  1952.            lea ecx,[ecx+ecx*2]
  1953.            add eax,ecx
  1954.         inc [counter2]
  1955.         cmp [counter2],5
  1956.         jne vertical_width_ellips
  1957.  
  1958.         pop ecx
  1959.         pop eax
  1960.         add ebx,4
  1961.         dec ecx
  1962.         jnz next_pixel_put_ellips
  1963.  
  1964.         call MovePictureToWorkScreen
  1965.         jmp still
  1966.         no_ellips:
  1967.  
  1968.  
  1969.         jmp still
  1970.         ret