Subversion Repositories Kolibri OS

Rev

Rev 648 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. zk_redraw_all_Bookmark       = 00100000b
  3. zk_redraw_all_Bookmark_off   = 11011111b
  4. zk_init_Bookmark             = 10000000b
  5. zk_init_Bookmark_off         = 01111111b
  6. zk_child_button_type         = 10001001b
  7.  
  8. ;****************************************************
  9. ;******************craete Bookmark********************
  10. ;****************************************************
  11. ;IN
  12. ;pointer to parend
  13. ;pointer to Bookmark's structure
  14. ;OUT
  15. ;pointer to initialized Bookmark's structure
  16. align 4
  17.  
  18. craete_Bookmark:
  19.  
  20.       mov ebx,[esp+4]
  21.       mov eax,[esp+8]
  22.  
  23.       mov [PointerToStructureForBookmark],eax
  24.       mov [ParendForBookmark],ebx
  25.  
  26.       mov ebx,eax
  27.  
  28.       ;calculate size of memory for control
  29.  
  30.       ;number of strings
  31.       mov ecx,[ebx+30]
  32.       add ebx,30+4
  33.       xor edx,edx
  34.       ;calculate total number of Bookmarks
  35.       next_string_add:
  36.  
  37.         add edx,[ebx]
  38.         add ebx,4
  39.  
  40.       dec ecx
  41.       jnz next_string_add
  42.       ;edx=chislo zakladok
  43.       mov [ChisloZakladok],edx
  44.  
  45.       ;save addres
  46.       mov edi,ebx
  47.  
  48.       xor esi,esi
  49.       next_Bookmark_calculate:
  50.  
  51.         ;total number of controls on Bookmark
  52.         mov ecx,[ebx+4]
  53.         shl ecx,3
  54.         add esi,ecx
  55.  
  56.         add ebx,8
  57.         add ebx,ecx
  58.  
  59.       dec edx
  60.       jnz next_Bookmark_calculate
  61.  
  62.       mov ecx,ebx
  63.       sub ebx,eax
  64.       mov eax,ebx
  65.       add eax,control_header_size+(44*4)
  66.  
  67.       ;eax= size of memory for control
  68.       push ebx
  69.       push edi
  70.  
  71.       mov ebx,[ParendForBookmark]
  72.       call craete_control
  73.  
  74.       pop edi
  75.       pop ebx
  76.  
  77.  
  78.       ;set all button's parameters in control
  79.       mov [eax],dword Bookmark_
  80.  
  81.       push edi
  82.  
  83.       mov ecx,ebx
  84.       mov esi,[PointerToStructureForBookmark]
  85.       mov edi,eax
  86.       add edi,control_header_size
  87.       rep movsb
  88.  
  89.       pop edi
  90.  
  91.       mov [eax+control_header_size+22],ebx
  92.  
  93.       ;craete child controls for parend(Bookmark)
  94.  
  95.       call get_skin_height
  96.  
  97.       ;set coordinats and size of control
  98.       mov ebx,[PointerToStructureForBookmark]
  99.       mov ecx,[ebx+2]   ;x
  100.       mov edx,[ebx+6]   ;y
  101.       mov esi,[ebx+10]  ;size x
  102.       mov edi,[ebx+14]  ;size y
  103.       add ecx,border_width
  104.       add edx,[skin_height]
  105.       ;mov [ebx+2],ecx
  106.       ;mov [ebx+6],edx
  107.       ;copy information to control
  108.       mov [eax+24],ecx
  109.       mov [eax+28],edx
  110.       mov [eax+32],esi
  111.       mov [eax+36],edi
  112.  
  113.       ;load addres
  114.       mov ebx,eax
  115.       add ebx,control_header_size
  116.       mov edx,[ebx+30]
  117.       mov ecx,edx
  118.       mov esi,[ChisloZakladok]
  119.       mov [Bookmark.counter1],esi
  120.       ;sizex*17
  121.       shl ecx,4
  122.       add ecx,edx
  123.       mov [Bookmark.sizey],ecx
  124.  
  125.       mov ecx,edx
  126.       shl ecx,2
  127.  
  128.       add ebx,30+4
  129.       add ebx,ecx       ;pointer to information for first Bookmark
  130.  
  131.       next_Bookmark_craete_childs:
  132.  
  133.         ;total number of controls on Bookmark
  134.          mov ecx,[ebx+4]
  135.          mov [Bookmark.counter2],ecx
  136.          add ebx,8
  137.  
  138.          test ecx,ecx
  139.          jz no_controls_for_current_Bookmark
  140.  
  141.          next_child_for_Bookmark:
  142.  
  143.            ;is child button ?
  144.            cmp [ebx],dword 1
  145.            jnz no_child_button_for_Bookmark
  146.  
  147.              mov esi,eax      ;parend
  148.              mov edi,[ebx+4]  ;information for child
  149.  
  150.              push eax
  151.              push ebx
  152.  
  153.               push edi
  154.               push esi
  155.  
  156.               call craete_button
  157.  
  158.               mov esi,eax
  159.  
  160.              pop ebx
  161.              pop eax
  162.  
  163.               ;save addres of new control
  164.               mov [ebx+4],esi
  165.  
  166.               mov edi,[eax+24]
  167.               sub edi,border_width
  168.               add [esi+24],edi
  169.               mov edi,[eax+28]
  170.               sub edi,[skin_height]
  171.               add edi,[Bookmark.sizey]
  172.               add [esi+28],edi
  173.             jmp exit_child_for_Bookmark
  174.            no_child_button_for_Bookmark:
  175.  
  176.            ;is child scroler ?
  177.            cmp [ebx],dword 2
  178.            jnz no_child_scroler_for_Bookmark
  179.  
  180.              mov esi,eax      ;parend
  181.              mov edi,[ebx+4]  ;information for child
  182.  
  183.              push eax
  184.              push ebx
  185.  
  186.               push edi
  187.               push esi
  188.  
  189.               call craete_scroller
  190.  
  191.               mov esi,eax
  192.  
  193.              pop ebx
  194.              pop eax
  195.  
  196.              mov [ebx+4],esi
  197.  
  198.              mov edi,[eax+24]
  199.              sub edi,border_width
  200.              add [esi+24],edi
  201.              mov edi,[eax+28]
  202.              sub edi,[skin_height]
  203.              add edi,[Bookmark.sizey]
  204.              add [esi+28],edi
  205.             jmp exit_child_for_Bookmark
  206.            no_child_scroler_for_Bookmark:
  207.  
  208.  
  209.            ;is child image ?
  210.            cmp [ebx],dword 4
  211.            jnz no_child_image_for_Bookmark
  212.  
  213.              mov esi,eax      ;parend
  214.              mov edi,[ebx+4]  ;information for child
  215.  
  216.              push eax
  217.              push ebx
  218.  
  219.               push edi
  220.               push esi
  221.  
  222.               call craete_image
  223.  
  224.               mov esi,eax
  225.  
  226.              pop ebx
  227.              pop eax
  228.  
  229.              mov [ebx+4],esi
  230.  
  231.              mov edi,[eax+24]
  232.              sub edi,border_width
  233.              add [esi+24],edi
  234.              mov edi,[eax+28]
  235.              sub edi,[skin_height]
  236.              add edi,[Bookmark.sizey]
  237.              add [esi+28],edi
  238.             jmp exit_child_for_Bookmark
  239.  
  240.            no_child_image_for_Bookmark:
  241.  
  242.            ;is child text ?
  243.            cmp [ebx],dword 5
  244.            jnz no_child_text_for_Bookmark
  245.  
  246.              mov esi,eax      ;parend
  247.              mov edi,[ebx+4]  ;information for child
  248.  
  249.              push eax
  250.              push ebx
  251.  
  252.               push edi
  253.               push esi
  254.  
  255.               call craete_text
  256.  
  257.               mov esi,eax
  258.  
  259.              pop ebx
  260.              pop eax
  261.  
  262.              mov [ebx+4],esi
  263.  
  264.              mov edi,[eax+24]
  265.              sub edi,border_width
  266.              add [esi+24],edi
  267.              mov edi,[eax+28]
  268.              sub edi,[skin_height]
  269.              add edi,[Bookmark.sizey]
  270.              add [esi+28],edi
  271.             jmp exit_child_for_Bookmark
  272.  
  273.            no_child_text_for_Bookmark:
  274.  
  275.            ;is child number ?
  276.            cmp [ebx],dword 6
  277.            jnz no_child_number_for_Bookmark
  278.  
  279.              mov esi,eax      ;parend
  280.              mov edi,[ebx+4]  ;information for child
  281.  
  282.              push eax
  283.              push ebx
  284.  
  285.               push edi
  286.               push esi
  287.  
  288.               call craete_number
  289.  
  290.               mov esi,eax
  291.  
  292.              pop ebx
  293.              pop eax
  294.  
  295.              mov [ebx+4],esi
  296.  
  297.              mov edi,[eax+24]
  298.              sub edi,border_width
  299.              add [esi+24],edi
  300.              mov edi,[eax+28]
  301.              sub edi,[skin_height]
  302.              add edi,[Bookmark.sizey]
  303.              add [esi+28],edi
  304.             jmp exit_child_for_Bookmark
  305.  
  306.            no_child_number_for_Bookmark:
  307.  
  308.            ;is child CheckBox ?
  309.            cmp [ebx],dword 7
  310.            jnz no_child_check_box_for_Bookmark
  311.  
  312.              mov esi,eax      ;parend
  313.              mov edi,[ebx+4]  ;information for child
  314.  
  315.              push eax
  316.              push ebx
  317.  
  318.               push edi
  319.               push esi
  320.  
  321.               call craete_check_box
  322.  
  323.               mov esi,eax
  324.  
  325.              pop ebx
  326.              pop eax
  327.  
  328.              mov [ebx+4],esi
  329.  
  330.              mov edi,[eax+24]
  331.              sub edi,border_width
  332.              add [esi+24],edi
  333.              mov edi,[eax+28]
  334.              sub edi,[skin_height]
  335.              add edi,[Bookmark.sizey]
  336.              add [esi+28],edi
  337.             jmp exit_child_for_Bookmark
  338.  
  339.            no_child_check_box_for_Bookmark:
  340.  
  341.            ;is child EditBox ?
  342.            cmp [ebx],dword 8
  343.            jnz no_child_edit_box_for_Bookmark
  344.  
  345.              mov esi,eax      ;parend
  346.              mov edi,[ebx+4]  ;information for child
  347.  
  348.              push eax
  349.              push ebx
  350.  
  351.               push edi
  352.               push esi
  353.  
  354.               call craete_edit_box
  355.  
  356.               mov esi,eax
  357.  
  358.              pop ebx
  359.              pop eax
  360.  
  361.              mov [ebx+4],esi
  362.  
  363.              mov edi,[eax+24]
  364.              sub edi,border_width
  365.              add [esi+24],edi
  366.              mov edi,[eax+28]
  367.              sub edi,[skin_height]
  368.              add edi,[Bookmark.sizey]
  369.              add [esi+28],edi
  370.             jmp exit_child_for_Bookmark
  371.  
  372.            no_child_edit_box_for_Bookmark:
  373.  
  374.            ;is child ProgresBar ?
  375.            cmp [ebx],dword 9
  376.            jnz no_child_progres_bar_for_Bookmark
  377.  
  378.              mov esi,eax      ;parend
  379.              mov edi,[ebx+4]  ;information for child
  380.  
  381.              push eax
  382.              push ebx
  383.  
  384.               push edi
  385.               push esi
  386.  
  387.               call craete_progress_bar
  388.  
  389.               mov esi,eax
  390.  
  391.              pop ebx
  392.              pop eax
  393.  
  394.              mov [ebx+4],esi
  395.  
  396.              mov edi,[eax+24]
  397.              sub edi,border_width
  398.              add [esi+24],edi
  399.              mov edi,[eax+28]
  400.              sub edi,[skin_height]
  401.              add edi,[Bookmark.sizey]
  402.              add [esi+28],edi
  403.             jmp exit_child_for_Bookmark
  404.  
  405.            no_child_progres_bar_for_Bookmark:
  406.  
  407.           exit_child_for_Bookmark:
  408.  
  409.           add ebx,8
  410.  
  411.          dec [Bookmark.counter2]
  412.          jnz next_child_for_Bookmark
  413.  
  414.         no_controls_for_current_Bookmark:
  415.  
  416.       dec [Bookmark.counter1]
  417.       jnz next_Bookmark_craete_childs
  418.  
  419.       ret 8
  420.  
  421. ;****************************************************
  422. ;******************Draw Bookmark*********************
  423. ;****************************************************
  424. ;IN
  425. ;pointer to control of Bookmark
  426. ;message
  427. ;OUT
  428. ;not returned value
  429. align 4
  430.  
  431. Bookmark_:
  432.  
  433.       ;get message
  434.       mov eax,[esp+8]
  435.  
  436.       ;get pointer to control of Bookmark
  437.       mov esi,[esp+4]
  438.       mov [PointerForBookmark],esi
  439.  
  440.       push esi
  441.        mov ebx,[esi+control_header_size+22]  ;size of data's structure
  442.        mov edi,dword Bookmark
  443.        mov ecx,(43*4)+2+4
  444.        add esi,control_header_size
  445.        add esi,ebx
  446.        rep movsb
  447.       pop esi
  448.  
  449.       cmp [eax],dword 1
  450.       jne no_redraw_all_Bookmark
  451.  
  452.        or [esi+control_header_size],byte zk_redraw_all_Bookmark
  453.       no_redraw_all_Bookmark:
  454.  
  455.       cmp [eax],dword 6
  456.       jne no_mouse_Bookmark
  457.  
  458.         mov esi,[eax+4]
  459.         mov edi,[eax+8]
  460.         mov ecx,[eax+12]
  461.         mov [Bookmark.MouseX],esi
  462.         mov [Bookmark.MouseY],edi
  463.         mov [ButtonsOfMouse],ecx
  464.       no_mouse_Bookmark:
  465.  
  466.       ;save message for child buttons
  467.       mov esi,eax
  468.       mov edi,dword Bookmark.MessageForChildButton
  469.       mov ecx,4
  470.       rep movsd
  471.  
  472.       ;no_mouse_Bookmark:
  473.  
  474.  
  475.       ;load coordinats and size from control
  476.       mov eax,[PointerForBookmark]
  477.       mov ebx,[eax+24]           ;x
  478.       mov ecx,[eax+28]           ;y
  479.       mov edx,[eax+32]           ;size x
  480.       mov esi,[eax+36]           ;size y
  481.       mov edi,[eax+control_header_size+18]        ;color1
  482.  
  483.       ;set current coordinats and sizes in Bookmark
  484.       mov [Bookmark.x],ebx
  485.       mov [Bookmark.y],ecx
  486.       mov [Bookmark.sizex],edx
  487.       mov [Bookmark.sizey],esi
  488.       mov [Bookmark.color1],edi
  489.  
  490.       mov ebx,[PointerForBookmark]
  491.       add ebx,control_header_size
  492.       xor eax,eax
  493.       mov al,[ebx]
  494.       and al,zk_init_Bookmark
  495.       test al,al
  496.       jz  no_redraw_Bookmark
  497.  
  498.       and [ebx],byte zk_init_Bookmark_off
  499.  
  500.       ;generate colors tables
  501.  
  502.       mov eax,[Bookmark.color1]
  503.       mov ebx,0xffffff
  504.       mov ecx,20
  505.       mov edx,dword colors_table1
  506.       call gradient
  507.  
  508.       xor eax,eax
  509.       mov ebx,[Bookmark.color1]
  510.       mov ecx,20
  511.       mov edx,dword colors_table2
  512.       call gradient
  513.  
  514.       ;get memory for child buttons of Bookmark
  515.       mov eax,50*4
  516.       call malloc
  517.       mov [Bookmark.ChildButtonsForBookmark],eax
  518.  
  519.       mov ebx,[PointerForBookmark]
  520.       add ebx,control_header_size
  521.       mov ecx,[ebx+30]
  522.       mov edx,ecx
  523.       add ebx,30+4
  524.       shl edx,2
  525.       mov esi,ebx
  526.       add esi,edx ;esi= pointer to information for first child
  527.       mov [Bookmark.PointerToTextForBookmark],esi
  528.  
  529.       mov edi,[Bookmark.y]
  530.       mov [Bookmark.BookmarkY],edi
  531.  
  532.       mov edi,[Bookmark.sizex]
  533.       sub edi,3
  534.       mov [Bookmark.FullBookmarkSizeX],edi
  535.       mov [Bookmark.ChisloStrokeZakladok],ecx
  536.  
  537.       and [Bookmark.CounterChildButtons],0
  538.  
  539.       ;craete child buttons for Bookmarks
  540.  
  541.       next_string_of_Bookmarks:
  542.  
  543.         mov edi,[Bookmark.x]
  544.         add edi,2
  545.         mov [Bookmark.BookmarkX],edi
  546.         mov [Bookmark.WorkPlace_windowx],edi
  547.  
  548.         ;total number of Bookmarks in string
  549.  
  550.         mov edx,[ebx]
  551.         mov edi,edx
  552.         mov [Bookmark.NumberBookmarksInEndString],edx
  553.  
  554.         push eax
  555.         mov eax,[Bookmark.ChildButtonsForBookmark]
  556.         add eax,[Bookmark.CounterChildButtons]
  557.         mov [Bookmark.PointerToEndBookmarks],eax
  558.         pop eax
  559.  
  560.         ;calculate size of Bookmark
  561.         ;size=(full_size/number_zakladok)
  562.         push eax
  563.         push edx
  564.  
  565.         mov eax,[Bookmark.FullBookmarkSizeX]
  566.         cdq
  567.         idiv edi
  568.  
  569.         mov [Bookmark.BookmarkSizeX],eax
  570.         mov [Bookmark.WorkPlace_windowsizex],eax
  571.  
  572.         imul eax,edi
  573.         mov edx,[Bookmark.FullBookmarkSizeX]
  574.         sub edx,eax
  575.         mov [Bookmark.DefectSizeX],edx
  576.  
  577.         pop edx
  578.         pop eax
  579.  
  580.         next_child_button_craete_for_string:
  581.  
  582.           cmp edx,1
  583.           jne no_disactivate_defect_size_x
  584.  
  585.           mov esi,[Bookmark.DefectSizeX]
  586.           add [Bookmark.BookmarkSizeX],esi
  587.           no_disactivate_defect_size_x:
  588.  
  589.  
  590.           ;craete control button for Bookmark
  591.           ;load info to structure
  592.           mov esi,[PointerForBookmark]
  593.           add esi,control_header_size+26
  594.           mov edi,[esi]
  595.           mov [ChildButton.type],zk_child_button_type
  596.           mov [ChildButton.textcolor],edi
  597.  
  598.           mov esi,[Bookmark.BookmarkX]
  599.           mov edi,[Bookmark.BookmarkY]
  600.           sub esi,border_width
  601.           sub edi,[skin_height]
  602.           mov [ChildButton.x],si
  603.           mov [ChildButton.y],di
  604.           mov esi,[Bookmark.BookmarkSizeX]
  605.           mov [ChildButton.width],si
  606.           mov [ChildButton.height],word 16
  607.  
  608.           mov esi,[Bookmark.PointerToTextForBookmark]
  609.           mov edi,[esi]
  610.           mov [ChildButton.text],edi
  611.  
  612.           ;save child controls for this child button
  613.           mov edi,[Bookmark.ChildButtonsForBookmark]
  614.           add edi,[Bookmark.CounterChildButtons]
  615.           add edi,4
  616.           mov [edi],esi
  617.  
  618.           ;calculate new pointer for text of zakldka
  619.           ;get total number of controls for current Bookmark
  620.           mov edi,[esi+4]
  621.           shl edi,3
  622.           add esi,edi
  623.           add esi,8
  624.           mov [Bookmark.PointerToTextForBookmark],esi
  625.  
  626.           pushad
  627.  
  628.            push ChildButton
  629.            push [PointerForBookmark]
  630.            call craete_button
  631.  
  632.            ;save control of child button
  633.            mov esi,eax
  634.            mov edi,[Bookmark.ChildButtonsForBookmark]
  635.            add edi,[Bookmark.CounterChildButtons]
  636.            mov [edi],esi
  637.  
  638.            call DrawBookmark
  639.  
  640.            ;load obrabotchik for child button
  641.            mov edi,[Bookmark.ChildButtonsForBookmark]
  642.            add edi,[Bookmark.CounterChildButtons]
  643.            mov esi,[edi]
  644.  
  645.            mov [Bookmark.MessageForChildButton],dword 1
  646.            push Bookmark.MessageForChildButton
  647.            push esi
  648.            call button
  649.  
  650.            add [Bookmark.CounterChildButtons],8
  651.           popad
  652.  
  653.           mov esi,[Bookmark.BookmarkSizeX]
  654.           add [Bookmark.BookmarkX],esi
  655.  
  656.         dec edx
  657.         jnz  next_child_button_craete_for_string
  658.  
  659.         add ebx,4
  660.         add [Bookmark.BookmarkY],17  ;Bookmark size y
  661.  
  662.       dec ecx
  663.       jnz next_string_of_Bookmarks
  664.  
  665.       ;calculate chislo zakladok
  666.       mov eax,[Bookmark.CounterChildButtons]
  667.       shr eax,3
  668.       mov [Bookmark.ChisloZakladok],eax
  669.  
  670.       ;draw work place for Bookmark
  671.       mov ebx,[Bookmark.ChisloStrokeZakladok]  ;chislo strok
  672.       mov ecx,[Bookmark.x]   ;x for Bookmark work place
  673.       shl ebx,4
  674.       mov edx,ebx
  675.       add ebx,[Bookmark.y]   ;y for Bookmark work place
  676.       add ebx,[Bookmark.ChisloStrokeZakladok]
  677.       mov esi,[Bookmark.sizey]  ;size y
  678.       mov edi,[Bookmark.sizex]  ;size x
  679.       sub esi,edx       ;size x Bookmark work place
  680.       sub esi,1
  681.  
  682.       mov [Bookmark.WorkPlace_x],ecx
  683.       mov [Bookmark.WorkPlace_y],ebx
  684.       mov [Bookmark.WorkPlace_sizex],edi
  685.       mov [Bookmark.WorkPlace_sizey],esi
  686.  
  687.       call DrawBookmarkWorkPlace
  688.  
  689.       mov edi,1
  690.       mov [Bookmark.NumberActiveControl],edi
  691.  
  692.       call SendMessageChildControlsOfBookmark
  693.  
  694.       jmp exit_Bookmark
  695.       no_redraw_Bookmark:
  696.  
  697.  
  698.  
  699.       ;check crosing arrea of child buttons
  700.       mov eax,[Bookmark.x]
  701.       mov ebx,[Bookmark.y]
  702.       mov ecx,[Bookmark.sizex]
  703.       mov edx,[Bookmark.ChisloStrokeZakladok]
  704.       shl edx,4
  705.       mov esi,[Bookmark.MouseX]
  706.       mov edi,[Bookmark.MouseY]
  707.  
  708.       call CheckCrossingBox
  709.  
  710.       cmp eax,0xffffff
  711.       jne no_crosing_child_buttons_Bookmark
  712.  
  713.         mov eax,[PointerForBookmark]
  714.         mov ecx,[eax+control_header_size+30]           ;chislo zakladok in stroke
  715.         add eax,control_header_size+30+4
  716.  
  717.         and [Bookmark.CounterChildButtons],0
  718.         mov [Bookmark.BookmarkFlag],0
  719.  
  720.         next_stroke_Bookmark_check_crossing:
  721.  
  722.            mov edx,[eax]              ;number zakladok in string
  723.            mov [Bookmark.NumberBookmarksInActiveString],edx
  724.  
  725.            mov esi,[Bookmark.ChildButtonsForBookmark]
  726.            add esi,[Bookmark.CounterChildButtons]
  727.            mov [Bookmark.PointerToActiveBookmarks],esi
  728.  
  729.            next_Bookmark_in_string_check:
  730.  
  731.              pushad
  732.  
  733.                mov eax,[Bookmark.ChildButtonsForBookmark]
  734.                add eax,[Bookmark.CounterChildButtons]
  735.                mov ebx,[eax]
  736.                mov [Bookmark.ChildControlForBookmark],ebx
  737.  
  738.                push Bookmark.MessageForChildButton
  739.                push ebx
  740.                call button
  741.  
  742.                add [Bookmark.CounterChildButtons],8
  743.              popad
  744.  
  745.                mov esi,[Bookmark.ChildControlForBookmark]
  746.                xor ebx,ebx
  747.                mov bl,byte[esi+control_header_size+1]
  748.                and bl,1b
  749.                cmp bl,1b
  750.                jne no_crossing_Bookmark___
  751.  
  752.                 cmp [ButtonsOfMouse],1
  753.                 jne no_crossing_Bookmark___
  754.  
  755.                 mov [Bookmark.BookmarkFlag],byte 1
  756.                 jmp exit_check_crossing_with_Bookmark
  757.  
  758.                no_crossing_Bookmark___:
  759.  
  760.            dec edx
  761.            jnz next_Bookmark_in_string_check
  762.  
  763.            add eax,4
  764.  
  765.         dec ecx
  766.         jnz next_stroke_Bookmark_check_crossing
  767.  
  768.         exit_check_crossing_with_Bookmark:
  769.  
  770.  
  771.         cmp [Bookmark.BookmarkFlag],1
  772.         jne no_crosing_with_Bookmarks
  773.  
  774.           mov [Bookmark.BookmarkFlag],byte 0
  775.  
  776.           mov eax,[Bookmark.PointerToEndBookmarks]
  777.           mov ebx,[eax]
  778.           mov ecx,[ebx+28]      ;y for string of end Bookmarks
  779.  
  780.           mov edx,[Bookmark.PointerToActiveBookmarks]
  781.           mov esi,[edx]
  782.           mov edi,[esi+28]      ;y for string of active Bookmarks
  783.  
  784.           cmp ecx,edi
  785.           je no_change_Y_coordinats_in_Bookmarks
  786.  
  787.              mov [Bookmark.y_end_stroke],ecx
  788.              mov [y],edi        ;save y coordinate of active Bookmark
  789.  
  790.              mov eax,[Bookmark.PointerToActiveBookmarks]
  791.              mov ecx,[Bookmark.NumberBookmarksInActiveString]
  792.              ;y_active_string=y_end_string
  793.              next_Bookmark_change_y_active:
  794.  
  795.                 mov edx,[Bookmark.y_end_stroke]
  796.                 mov ebx,[eax]   ;ebx = pointer to Bookmark
  797.                 mov [ebx+28],edx
  798.  
  799.                 add eax,8
  800.  
  801.              dec ecx
  802.              jnz next_Bookmark_change_y_active
  803.  
  804.             mov eax,[Bookmark.PointerToEndBookmarks]
  805.             mov ecx,[Bookmark.NumberBookmarksInEndString]
  806.             ;y_end_string=y_active_string
  807.             next_Bookmark_change_y_end:
  808.  
  809.                 mov edx,[y]
  810.                 mov ebx,[eax]
  811.                 mov [ebx+28],edx
  812.  
  813.                 add eax,8
  814.  
  815.             dec ecx
  816.             jnz next_Bookmark_change_y_end
  817.  
  818.           mov eax,[Bookmark.PointerToActiveBookmarks]
  819.           mov ebx,[Bookmark.PointerToEndBookmarks]
  820.           mov ecx,[Bookmark.NumberBookmarksInActiveString]
  821.           mov edx,[Bookmark.NumberBookmarksInEndString]
  822.  
  823.           mov esi,eax
  824.           mov edi,ecx
  825.  
  826.           mov [Bookmark.PointerToActiveBookmarks],ebx
  827.           mov [Bookmark.NumberBookmarksInActiveString],edx
  828.  
  829.           mov [Bookmark.PointerToEndBookmarks],esi
  830.           mov [Bookmark.NumberBookmarksInEndString],edi
  831.  
  832.           no_change_Y_coordinats_in_Bookmarks:
  833.  
  834.           mov eax,[Bookmark.ChildButtonsForBookmark]
  835.           mov ecx,[Bookmark.ChisloZakladok]
  836.           mov [Bookmark.MessageForChildButton],dword 1
  837.           next_Bookmark_redraw:
  838.  
  839.              mov ebx,[eax]
  840.              mov edx,[ebx+24] ;x
  841.              mov esi,[ebx+28] ;y
  842.              mov edi,[ebx+32] ;size x
  843.              mov [Bookmark.BookmarkX],edx
  844.              mov [Bookmark.BookmarkY],esi
  845.              mov [Bookmark.BookmarkSizeX],edi
  846.              mov [Bookmark.ControlAddres],ebx
  847.  
  848.              pushad
  849.  
  850.                 call DrawBookmark
  851.  
  852.                 ;mov [Bookmark.MessageForChildButton],dword 1
  853.                 push Bookmark.MessageForChildButton
  854.                 push [Bookmark.ControlAddres]
  855.                 call button
  856.  
  857.              popad
  858.  
  859.              add eax,8
  860.           dec ecx
  861.           jnz next_Bookmark_redraw
  862.  
  863.  
  864.           mov eax,[Bookmark.ChildControlForBookmark]
  865.           mov ebx,[eax+24]    ;x coordinat of Bookmark
  866.           mov ecx,[eax+32]    ;size x of Bookmark
  867.           mov [Bookmark.WorkPlace_windowx],ebx
  868.           mov [Bookmark.WorkPlace_windowsizex],ecx
  869.  
  870.           ;draw work place for Bookmark
  871.           mov ebx,[Bookmark.ChisloStrokeZakladok]  ;chislo strok
  872.           mov ecx,[Bookmark.x]   ;x for Bookmark work place
  873.           shl ebx,4
  874.           mov edx,ebx
  875.           add ebx,[Bookmark.y]   ;y for Bookmark work place
  876.           add ebx,[Bookmark.ChisloStrokeZakladok]
  877.           mov esi,[Bookmark.sizey]  ;size y
  878.           mov edi,[Bookmark.sizex]  ;size x
  879.           sub esi,edx       ;size x Bookmark work place
  880.           sub esi,1
  881.  
  882.           mov [Bookmark.WorkPlace_x],ecx
  883.           mov [Bookmark.WorkPlace_y],ebx
  884.           mov [Bookmark.WorkPlace_sizex],edi
  885.           mov [Bookmark.WorkPlace_sizey],esi
  886.  
  887.           call DrawBookmarkWorkPlace
  888.  
  889.           mov edi,[Bookmark.CounterChildButtons]
  890.           shr edi,3
  891.           mov [Bookmark.NumberActiveControl],edi
  892.  
  893.           call SendMessageChildControlsOfBookmark
  894.  
  895.           ;delay mouse click
  896.         mcall   5,7
  897.  
  898.         no_crosing_with_Bookmarks:
  899.  
  900.         jmp exit_Bookmark
  901.       no_crosing_child_buttons_Bookmark:
  902.  
  903.  
  904.        ;check for redraw all Bookmark
  905.        mov ebx,[PointerForBookmark]
  906.        add ebx,control_header_size
  907.        xor eax,eax
  908.        mov al,[ebx]
  909.        and al,zk_redraw_all_Bookmark
  910.        test al,al
  911.        jz  no_redraw_all_Bookmark__
  912.  
  913.           and [ebx],byte zk_redraw_all_Bookmark_off
  914.  
  915.           mov ebx,[PointerForBookmark]
  916.           add ebx,control_header_size
  917.           mov ecx,[ebx+30]
  918.           mov edx,ecx
  919.           add ebx,30+4
  920.           shl edx,2
  921.           mov esi,ebx
  922.           add esi,edx ;esi= pointer to information for first child
  923.           mov [Bookmark.PointerToTextForBookmark],esi
  924.  
  925.           mov edi,[Bookmark.y]
  926.           mov [Bookmark.BookmarkY],edi
  927.  
  928.           mov edi,[Bookmark.sizex]
  929.           sub edi,3
  930.           mov [Bookmark.FullBookmarkSizeX],edi
  931.           mov [Bookmark.ChisloStrokeZakladok],ecx
  932.  
  933.           and [Bookmark.CounterChildButtons],0
  934.           mov [Bookmark.MessageForChildButton],dword 1
  935.           ;craete child buttons for Bookmarks
  936.  
  937.           next_string_of_Bookmarks_resize:
  938.  
  939.             mov edi,[Bookmark.x]
  940.             add edi,2
  941.             mov [Bookmark.BookmarkX],edi
  942.             mov [Bookmark.WorkPlace_windowx],edi
  943.  
  944.             ;total number of Bookmarks in string
  945.  
  946.             mov edx,[ebx]
  947.             mov edi,edx
  948.             mov [Bookmark.NumberBookmarksInEndString],edx
  949.  
  950.             push eax
  951.             mov eax,[Bookmark.ChildButtonsForBookmark]
  952.             add eax,[Bookmark.CounterChildButtons]
  953.             mov [Bookmark.PointerToEndBookmarks],eax
  954.             pop eax
  955.  
  956.             ;calculate size of Bookmark
  957.             ;size=(full_size/number_zakladok)
  958.             push eax
  959.             push edx
  960.  
  961.             mov eax,[Bookmark.FullBookmarkSizeX]
  962.             cdq
  963.             idiv edi
  964.  
  965.             mov [Bookmark.BookmarkSizeX],eax
  966.             mov [Bookmark.WorkPlace_windowsizex],eax
  967.  
  968.             imul eax,edi
  969.             mov edx,[Bookmark.FullBookmarkSizeX]
  970.             sub edx,eax
  971.             mov [Bookmark.DefectSizeX],edx
  972.  
  973.             pop edx
  974.             pop eax
  975.  
  976.             next_child_button_resize:
  977.  
  978.                cmp edx,1
  979.                jne no_disactivate_defect_size_x_resize
  980.  
  981.                mov esi,[Bookmark.DefectSizeX]
  982.                add [Bookmark.BookmarkSizeX],esi
  983.                no_disactivate_defect_size_x_resize:
  984.  
  985.                  pushad
  986.  
  987.                  mov edi,[Bookmark.ChildButtonsForBookmark]
  988.                  add edi,[Bookmark.CounterChildButtons]
  989.                  mov esi,[edi]
  990.  
  991.                  mov eax,[Bookmark.BookmarkX]
  992.                  mov ebx,[Bookmark.BookmarkY]
  993.                  mov ecx,[Bookmark.BookmarkSizeX]
  994.                  mov [Bookmark.ControlAddres],esi
  995.                  mov [esi+24],eax  ;x
  996.                  mov [esi+28],ebx  ;y
  997.                  mov [esi+32],ecx  ;size x
  998.  
  999.                  call DrawBookmark
  1000.  
  1001.                  push Bookmark.MessageForChildButton
  1002.                  push [Bookmark.ControlAddres]
  1003.                  call button
  1004.  
  1005.                  add [Bookmark.CounterChildButtons],8
  1006.  
  1007.                  popad
  1008.  
  1009.                  mov esi,[Bookmark.BookmarkSizeX]
  1010.                  add [Bookmark.BookmarkX],esi
  1011.  
  1012.               dec edx
  1013.               jnz  next_child_button_resize
  1014.  
  1015.             add ebx,4
  1016.             add [Bookmark.BookmarkY],17  ;Bookmark size y
  1017.  
  1018.           dec ecx
  1019.           jnz next_string_of_Bookmarks_resize
  1020.  
  1021.            ;calculate chislo zakladok
  1022.           mov eax,[Bookmark.CounterChildButtons]
  1023.           shr eax,3
  1024.           mov [Bookmark.ChisloZakladok],eax
  1025.  
  1026.           ;draw work place for Bookmark
  1027.           mov ebx,[Bookmark.ChisloStrokeZakladok]  ;chislo strok
  1028.           mov ecx,[Bookmark.x]   ;x for Bookmark work place
  1029.           shl ebx,4
  1030.           mov edx,ebx
  1031.           add ebx,[Bookmark.y]   ;y for Bookmark work place
  1032.           add ebx,[Bookmark.ChisloStrokeZakladok]
  1033.           mov esi,[Bookmark.sizey]  ;size y
  1034.           mov edi,[Bookmark.sizex]  ;size x
  1035.           sub esi,edx       ;size x Bookmark work place
  1036.           sub esi,1
  1037.  
  1038.           mov [Bookmark.WorkPlace_x],ecx
  1039.           mov [Bookmark.WorkPlace_y],ebx
  1040.           mov [Bookmark.WorkPlace_sizex],edi
  1041.           mov [Bookmark.WorkPlace_sizey],esi
  1042.  
  1043.           call DrawBookmarkWorkPlace
  1044.  
  1045.           mov edi,[Bookmark.NumberActiveControl]
  1046.           call SendMessageChildControlsOfBookmark
  1047.  
  1048.           jmp exit_Bookmark
  1049.  
  1050.        no_redraw_all_Bookmark__:
  1051.  
  1052.  
  1053.        ;send events to controls of active Bookmark
  1054.        mov edi,[Bookmark.NumberActiveControl]
  1055.        call SendMessageChildControlsOfBookmark
  1056.  
  1057.        exit_Bookmark:
  1058.  
  1059.        ;save work data in control
  1060.        mov esi,[PointerForBookmark]
  1061.        mov ebx,[esi+control_header_size+22]  ;size of data's structure
  1062.        mov esi,dword Bookmark
  1063.        mov ecx,(43*4)+2+4
  1064.        mov edi,[PointerForBookmark]
  1065.        add edi,control_header_size
  1066.        add edi,ebx
  1067.        rep movsb
  1068.  
  1069.       ret 8
  1070.  
  1071. ;edi - number child Bookmark
  1072. ;SendMessageForChildButton    - message
  1073.  
  1074. SendMessageChildControlsOfBookmark:
  1075.  
  1076.         ;edi - number child Bookmark
  1077.  
  1078.        mov eax,[PointerForBookmark]
  1079.        add eax,control_header_size+30
  1080.        mov ecx,[eax]   ;number Bookmarks
  1081.        shl ecx,2
  1082.        add eax,4
  1083.        add eax,ecx     ;pointer to first child Bookmark
  1084.  
  1085.        dec edi
  1086.        jz addres_find_
  1087.  
  1088.          next_child_control_find:
  1089.  
  1090.             mov ebx,[eax+4]   ;number controls
  1091.             shl ebx,3
  1092.             add eax,8
  1093.             add eax,ebx       ;pointer to next control
  1094.          dec edi
  1095.          jnz next_child_control_find
  1096.  
  1097.        addres_find_:
  1098.  
  1099.        mov ecx,[eax+4]   ;number child controls for active Bookmark
  1100.        mov [Bookmark.CounterChildControls],ecx
  1101.        add eax,4+4+4       ;eax=pointer to child controls for Bookmark
  1102.        mov [Bookmark.AddresOfActiveChildControl],eax
  1103.  
  1104.        send_message_to_next_child_control_of_active_Bookmark:
  1105.  
  1106.          mov eax,[Bookmark.AddresOfActiveChildControl]
  1107.  
  1108.          ;redraw control ?
  1109.  
  1110.          cmp [Bookmark.MessageForChildButton],1
  1111.          jne no_redraw_child_control_Bookmark
  1112.  
  1113.  
  1114.            mov ebx,[eax]
  1115.            mov ecx,[ebx]
  1116.            push Bookmark.MessageForChildButton
  1117.            push ebx
  1118.            call ecx
  1119.  
  1120.          jmp exit_send_message_to_child_control_Bookmark
  1121.          no_redraw_child_control_Bookmark:
  1122.  
  1123.          ;send message of keys ?
  1124.  
  1125.          cmp [Bookmark.MessageForChildButton],2
  1126.          jne no_keys_child_control_Bookmark
  1127.  
  1128.            ;mov esi,[Bookmark.ActiveChildControl]
  1129.            ;test esi,esi
  1130.            ;jz exit_send_message_to_child_control_Bookmark
  1131.  
  1132.              ;mov eax,[Bookmark.ActiveChildControl]
  1133.              mov ebx,[eax]
  1134.              mov ecx,[ebx]
  1135.              push Bookmark.MessageForChildButton
  1136.              push ebx
  1137.              call ecx
  1138.  
  1139.            jmp exit_send_message_to_child_control_Bookmark
  1140.          no_keys_child_control_Bookmark:
  1141.  
  1142.          ;send special message ?
  1143.  
  1144.          cmp [Bookmark.MessageForChildButton],3
  1145.          jne no_send_special_message_child_control_Bookmark
  1146.  
  1147.  
  1148.            mov ebx,[eax]
  1149.            mov ecx,[ebx]
  1150.            push Bookmark.MessageForChildButton
  1151.            push ebx
  1152.            call ecx
  1153.  
  1154.            jmp exit_send_message_to_child_control_Bookmark
  1155.          no_send_special_message_child_control_Bookmark:
  1156.  
  1157.          ;Check mouse state ?
  1158.          ;------------------------------------------------------
  1159.          cmp [Bookmark.MessageForChildButton],6
  1160.          jne no_mouse_child_control_Bookmark
  1161.  
  1162.            mov ebx,[eax]
  1163.            mov eax,ebx
  1164.  
  1165.            mov ebx,[Bookmark.MessageForChildButton+12]
  1166.            test ebx,ebx
  1167.            jz bookmark_left_button_of_mouse_not_pressed
  1168.  
  1169.               mov ebx,[Bookmark.ActiveChildControl]
  1170.               test ebx,ebx
  1171.               jz bookmark_havent_active_control
  1172.  
  1173.                  mov eax,[Bookmark.ActiveChildControl]
  1174.                  mov ebx,[eax]
  1175.                  push Bookmark.MessageForChildButton
  1176.                  push eax
  1177.                  call ebx
  1178.  
  1179.                  jmp exit_send_message_to_child_control_Bookmark
  1180.               bookmark_havent_active_control:
  1181.  
  1182.            jmp bookmark_exit_if_left_button_of_mouse_pressed
  1183.            bookmark_left_button_of_mouse_not_pressed:
  1184.  
  1185.                mov ebx,[Bookmark.ActiveChildControl]
  1186.                test ebx,ebx
  1187.                jz bookmark_havent_active_control_
  1188.  
  1189.                  mov [Bookmark.ActiveChildControl],dword 0
  1190.  
  1191.                bookmark_havent_active_control_:
  1192.  
  1193.            bookmark_exit_if_left_button_of_mouse_pressed:
  1194.  
  1195.           ;send message to all child controls of active Bookmark
  1196.            mov esi,[eax+24]      ;x
  1197.            mov edi,[eax+28]      ;y
  1198.            mov ecx,[eax+32]      ;size x
  1199.            mov edx,[eax+36]      ;size y
  1200.            mov [x],esi
  1201.            mov [y],edi
  1202.            mov eax,[x]
  1203.            mov ebx,[y]
  1204.            mov esi,[Bookmark.MouseX]
  1205.            mov edi,[Bookmark.MouseY]
  1206.  
  1207.            call CheckCrossingBox
  1208.  
  1209.            cmp eax,0xffffff
  1210.            jne no_crossing_123
  1211.  
  1212.               cmp [Bookmark.MessageForChildButton+12],1
  1213.               jne button_not_pressed_123
  1214.  
  1215.                  ;save addres of activated control
  1216.                  mov eax,[Bookmark.AddresOfActiveChildControl]
  1217.                  mov ebx,[eax]
  1218.                  mov [Bookmark.ActiveChildControl],ebx
  1219.  
  1220.               button_not_pressed_123:
  1221.             no_crossing_123:
  1222.  
  1223.            ;send message to control
  1224.            mov eax,[Bookmark.AddresOfActiveChildControl]
  1225.            mov ebx,[eax]
  1226.            mov ecx,[ebx]
  1227.            push Bookmark.MessageForChildButton
  1228.            push ebx
  1229.            call ecx
  1230.  
  1231.            no_mouse_child_control_Bookmark:
  1232.         ;------------------------------------------------------
  1233.  
  1234.        ;destroy child controls ?
  1235.        ;--------------------------------------------------------
  1236.        cmp [Bookmark.MessageForChildButton],dword -1
  1237.        jne no_delete_Bookmark_
  1238.  
  1239.           and [Bookmark.CounterChildButtons],0
  1240.  
  1241.          next_Bookmark_delete:
  1242.  
  1243.           mov eax,[Bookmark.ChildButtonsForBookmark]
  1244.           add eax,[Bookmark.CounterChildButtons]
  1245.  
  1246.           ;destroy child button
  1247.           mov ebx,[eax]   ;control child button
  1248.  
  1249.           ;pushad
  1250.  
  1251.           push ebx
  1252.           call destroy_control
  1253.  
  1254.           ;popad
  1255.  
  1256.           ;destroy child controls for CURRENT Bookmark
  1257.           mov edi,[Bookmark.CounterChildButtons]
  1258.           shr edi,3
  1259.           inc edi
  1260.  
  1261.           mov eax,[PointerForBookmark]
  1262.           add eax,control_header_size+30
  1263.           mov ecx,[eax]   ;number Bookmarks
  1264.           shl ecx,2
  1265.           add eax,4
  1266.           add eax,ecx     ;pointer to first child Bookmark
  1267.  
  1268.           dec edi
  1269.           jz addres_find___
  1270.  
  1271.             next_child_control_find__:
  1272.  
  1273.                mov ebx,[eax+4]   ;number controls
  1274.                shl ebx,3
  1275.                add eax,8
  1276.                add eax,ebx       ;pointer to next control
  1277.             dec edi
  1278.             jnz next_child_control_find__
  1279.  
  1280.           addres_find___:
  1281.  
  1282.           mov ecx,[eax+4]   ;number child controls for active Bookmark
  1283.           mov [Bookmark.CounterChildControls],ecx
  1284.           add eax,4+4+4       ;eax=pointer to child controls for Bookmark
  1285.           mov [Bookmark.AddresOfActiveChildControl],eax
  1286.  
  1287.              next_child_control_of_Bookmark_delete:
  1288.  
  1289.                mov eax,[Bookmark.AddresOfActiveChildControl]
  1290.                mov ebx,[eax]
  1291.  
  1292.                push ebx
  1293.                call destroy_control
  1294.  
  1295.                add [Bookmark.AddresOfActiveChildControl],8
  1296.  
  1297.              dec [Bookmark.CounterChildControls]
  1298.              jnz next_child_control_of_Bookmark_delete
  1299.  
  1300.           add [Bookmark.CounterChildButtons],8
  1301.  
  1302.          dec [Bookmark.ChisloZakladok]
  1303.          jnz next_Bookmark_delete
  1304.  
  1305.          ;free memory from array
  1306.          mov eax,[Bookmark.ChildButtonsForBookmark]
  1307.          call free
  1308.  
  1309.        no_delete_Bookmark_:
  1310.        ;----------------------------------------------------------------
  1311.  
  1312.        exit_send_message_to_child_control_Bookmark:
  1313.  
  1314.        add [Bookmark.AddresOfActiveChildControl],4+4
  1315.  
  1316.       dec [Bookmark.CounterChildControls]
  1317.       jnz  send_message_to_next_child_control_of_active_Bookmark
  1318.  
  1319.       ret
  1320.  
  1321. ;BookmarkX
  1322. ;BookmarkY
  1323. ;BookmarkSizeX
  1324. ;BookmarkSizeY
  1325. DrawBookmark:
  1326.  
  1327.       mov eax,[Bookmark.BookmarkX]
  1328.       mov ebx,[Bookmark.BookmarkY]
  1329.       mov [x],eax
  1330.       mov [y],ebx
  1331.  
  1332.       ;draw rectangle(x+1,y+1,sizex-2,sizey-2)
  1333.       mov edx,[colors_table1]
  1334.       mov esi,[Bookmark.BookmarkSizeX]
  1335.       sub esi,2
  1336.  
  1337.       mov eax,13
  1338.       mov ebx,[x]
  1339.       mov ecx,[y]
  1340.       add ebx,1
  1341.       add ecx,1
  1342.       shl ebx,16
  1343.       shl ecx,16
  1344.       add ebx,esi
  1345.       add ecx,(16)
  1346.       and edx,0xffffff
  1347.       mcall
  1348.  
  1349.       mov eax,[colors_table1+15*3]
  1350.       and eax,0xffffff
  1351.       mov [Line.color],eax
  1352.       mov [Pixel.color],eax
  1353.       ;draw white line(x+2,y,x+sizex-3,y)
  1354.  
  1355.       mov eax,[x]
  1356.       mov ebx,[y]
  1357.       mov ecx,eax
  1358.       add eax,2
  1359.       add ecx,[Bookmark.BookmarkSizeX]
  1360.       sub ecx,3
  1361.       mov [Line.x1],eax
  1362.       mov [Line.x2],ecx
  1363.       mov [Line.y1],ebx
  1364.       mov [Line.y2],ebx
  1365.       call DrawLine
  1366.  
  1367.       ;draw white line(x,y+2,x,y+sizey)
  1368.       mov eax,[x]
  1369.       mov ebx,[y]
  1370.       mov ecx,ebx
  1371.       add ebx,2
  1372.       add ecx,(16)
  1373.       mov [Line.x1],eax
  1374.       mov [Line.x2],eax
  1375.       mov [Line.y1],ebx
  1376.       mov [Line.y2],ecx
  1377.       call DrawLine
  1378.  
  1379.       mov eax,[x]
  1380.       mov ebx,[y]
  1381.       add eax,1
  1382.       add ebx,1
  1383.       mov [Pixel.x],eax
  1384.       mov [Pixel.y],ebx
  1385.       call DrawPixel
  1386.  
  1387.       mov eax,[colors_table1+6*3]
  1388.       and eax,0xffffff
  1389.       mov [Line.color],eax
  1390.       ;draw light line(x+2,y+1,x+sizex-2,y+1)
  1391.  
  1392.       mov eax,[x]
  1393.       mov ebx,[y]
  1394.       mov ecx,eax
  1395.       add eax,2
  1396.       add ebx,1
  1397.       add ecx,[Bookmark.BookmarkSizeX]
  1398.       sub ecx,2
  1399.       mov [Line.x1],eax
  1400.       mov [Line.x2],ecx
  1401.       mov [Line.y1],ebx
  1402.       mov [Line.y2],ebx
  1403.       call DrawLine
  1404.  
  1405.       ;draw light line(x+1,y+2,x+1,y+sizey-1)
  1406.       mov eax,[x]
  1407.       mov ebx,[y]
  1408.       mov ecx,ebx
  1409.       add eax,1
  1410.       add ebx,2
  1411.       add ecx,(16)
  1412.       mov [Line.x1],eax
  1413.       mov [Line.x2],eax
  1414.       mov [Line.y1],ebx
  1415.       mov [Line.y2],ecx
  1416.       call DrawLine
  1417.  
  1418.       mov eax,[colors_table2+9*3]
  1419.       and eax,0xffffff
  1420.       mov [Line.color],eax
  1421.       mov [Pixel.color],eax
  1422.  
  1423.       ;draw dark line(x+sizex-1,y+2,x+sizex-1,y+sizey)
  1424.       mov eax,[x]
  1425.       mov ebx,[y]
  1426.       add eax,[Bookmark.BookmarkSizeX]
  1427.       mov edx,ebx
  1428.       add ebx,2
  1429.       add edx,(16)
  1430.       sub eax,1
  1431.       mov [Line.x1],eax
  1432.       mov [Line.x2],eax
  1433.       mov [Line.y1],ebx
  1434.       mov [Line.y2],edx
  1435.       call DrawLine
  1436.  
  1437.       mov eax,[x]
  1438.       mov ebx,[y]
  1439.       add eax,[Bookmark.BookmarkSizeX]
  1440.       add ebx,1
  1441.       sub eax,2
  1442.       mov [Pixel.x],eax
  1443.       mov [Pixel.y],ebx
  1444.       call DrawPixel
  1445.  
  1446.       mov eax,[colors_table2+16*3]
  1447.       and eax,0xffffff
  1448.       mov [Line.color],eax
  1449.  
  1450.       ;draw light dark line(x+sizex-2,y+2,x+sizex-2,y+sizey)
  1451.       mov eax,[x]
  1452.       mov ebx,[y]
  1453.       add eax,[Bookmark.BookmarkSizeX]
  1454.       sub eax,2
  1455.       mov edx,ebx
  1456.       add ebx,2
  1457.       add edx,(16)
  1458.       mov [Line.x1],eax
  1459.       mov [Line.x2],eax
  1460.       mov [Line.y1],ebx
  1461.       mov [Line.y2],edx
  1462.       call DrawLine
  1463.  
  1464.  
  1465.       ret
  1466.  
  1467. DrawBookmarkWorkPlace:
  1468.  
  1469.       mov esi,[Bookmark.WorkPlace_sizex]
  1470.       sub esi,1
  1471.  
  1472.       mov eax,13
  1473.       mov ebx,[Bookmark.WorkPlace_x]
  1474.       mov ecx,[Bookmark.WorkPlace_y]
  1475.       add ebx,1
  1476.       shl ebx,16
  1477.       shl ecx,16
  1478.       add ebx,esi
  1479.       add ecx,[Bookmark.WorkPlace_sizey]
  1480.       mov edx,[colors_table1]
  1481.       and edx,0xffffff
  1482.       mcall
  1483.  
  1484.       mov eax,[colors_table1+15*3]
  1485.       and eax,0xffffff
  1486.       mov [Line.color],eax
  1487.  
  1488.       ;draw vertical light line(x,y,x,y+sizey)
  1489.       mov eax,[Bookmark.WorkPlace_x]
  1490.       mov ebx,[Bookmark.WorkPlace_y]
  1491.       mov ecx,ebx
  1492.       add ecx,[Bookmark.WorkPlace_sizey]
  1493.       mov [Line.x1],eax
  1494.       mov [Line.x2],eax
  1495.       mov [Line.y1],ebx
  1496.       mov [Line.y2],ecx
  1497.       call DrawLine
  1498.  
  1499.       ;draw first horizontal light line
  1500.       ;(x,y,x+windowx,y)
  1501.       mov eax,[Bookmark.WorkPlace_x]
  1502.       mov ebx,[Bookmark.WorkPlace_y]
  1503.       mov ecx,[Bookmark.WorkPlace_windowx]
  1504.  
  1505.       cmp eax,ecx
  1506.       je no_draw_line_00
  1507.  
  1508.       mov [Line.x1],eax
  1509.       mov [Line.x2],ecx
  1510.       mov [Line.y1],ebx
  1511.       mov [Line.y2],ebx
  1512.       call DrawLine
  1513.  
  1514.       no_draw_line_00:
  1515.  
  1516.       ;draw second horizontal light line
  1517.       ;(x,y,x+windowx,y)
  1518.       mov eax,[Bookmark.WorkPlace_windowx]
  1519.       add eax,[Bookmark.WorkPlace_windowsizex]
  1520.       mov ebx,[Bookmark.WorkPlace_y]
  1521.       mov ecx,[Bookmark.WorkPlace_x]
  1522.       add ecx,[Bookmark.WorkPlace_sizex]
  1523.       mov [Line.x1],eax
  1524.       mov [Line.x2],ecx
  1525.       mov [Line.y1],ebx
  1526.       mov [Line.y2],ebx
  1527.       call DrawLine
  1528.  
  1529.       ;draw next light lines
  1530.  
  1531.       mov eax,[colors_table1+4*3]
  1532.       and eax,0xffffff
  1533.       mov [Line.color],eax
  1534.  
  1535.       ;draw vertical light line(x+1,y+1,x+1,y+sizey-1)
  1536.       mov eax,[Bookmark.WorkPlace_x]
  1537.       mov ebx,[Bookmark.WorkPlace_y]
  1538.       mov ecx,ebx
  1539.       add ecx,[Bookmark.WorkPlace_sizey]
  1540.       add eax,1
  1541.       add ebx,1
  1542.       sub ecx,1
  1543.       mov [Line.x1],eax
  1544.       mov [Line.x2],eax
  1545.       mov [Line.y1],ebx
  1546.       mov [Line.y2],ecx
  1547.       call DrawLine
  1548.  
  1549.       ;draw first horizontal light line
  1550.       ;(x+1,y+1,x+windowx,y+1)
  1551.       mov eax,[Bookmark.WorkPlace_x]
  1552.       mov ebx,[Bookmark.WorkPlace_y]
  1553.       mov ecx,[Bookmark.WorkPlace_windowx]
  1554.       add ebx,1
  1555.  
  1556.       cmp eax,ecx
  1557.       je no_draw_line_01
  1558.  
  1559.       mov [Line.x1],eax
  1560.       mov [Line.x2],ecx
  1561.       mov [Line.y1],ebx
  1562.       mov [Line.y2],ebx
  1563.       ;call DrawLine
  1564.  
  1565.       no_draw_line_01:
  1566.  
  1567.       ;draw second horizontal light line
  1568.       ;(x+1,y+1,x+windowx-2,y+1)
  1569.       mov eax,[Bookmark.WorkPlace_windowx]
  1570.       mov ecx,[Bookmark.WorkPlace_x]
  1571.       mov ebx,[Bookmark.WorkPlace_y]
  1572.       add eax,[Bookmark.WorkPlace_windowsizex]
  1573.       add ecx,[Bookmark.WorkPlace_sizex]
  1574.       add eax,1
  1575.       add ebx,1
  1576.       sub ecx,2
  1577.       mov [Line.x1],eax
  1578.       mov [Line.x2],ecx
  1579.       mov [Line.y1],ebx
  1580.       mov [Line.y2],ebx
  1581.       call DrawLine
  1582.  
  1583.  
  1584.       mov eax,[colors_table2+9*3]
  1585.       and eax,0xffffff
  1586.       mov [Line.color],eax
  1587.  
  1588.       ;draw vertical dark line(x+sizex,y,x+sizex,y+sizey)
  1589.       mov eax,[Bookmark.WorkPlace_x]
  1590.       mov ebx,[Bookmark.WorkPlace_y]
  1591.       mov ecx,ebx
  1592.       add eax,[Bookmark.WorkPlace_sizex]
  1593.       add ecx,[Bookmark.WorkPlace_sizey]
  1594.       mov [Line.x1],eax
  1595.       mov [Line.x2],eax
  1596.       mov [Line.y1],ebx
  1597.       mov [Line.y2],ecx
  1598.       call DrawLine
  1599.  
  1600.       ;draw horizontal dark line(x+1,y+sizey,x+sizex,y+sizey)
  1601.       mov eax,[Bookmark.WorkPlace_x]
  1602.       mov ebx,[Bookmark.WorkPlace_y]
  1603.       mov ecx,eax
  1604.       add ecx,[Bookmark.WorkPlace_sizex]
  1605.       add ebx,[Bookmark.WorkPlace_sizey]
  1606.       add eax,1
  1607.       mov [Line.x1],eax
  1608.       mov [Line.x2],ecx
  1609.       mov [Line.y1],ebx
  1610.       mov [Line.y2],ebx
  1611.       call DrawLine
  1612.  
  1613.       mov eax,[colors_table2+16*3]
  1614.       and eax,0xffffff
  1615.       mov [Line.color],eax
  1616.  
  1617.       ;draw vertical dark line(x+sizex-1,y+1,x+sizex-1,y+sizey-1)
  1618.       mov eax,[Bookmark.WorkPlace_x]
  1619.       mov ebx,[Bookmark.WorkPlace_y]
  1620.       mov ecx,ebx
  1621.       add eax,[Bookmark.WorkPlace_sizex]
  1622.       add ecx,[Bookmark.WorkPlace_sizey]
  1623.       sub eax,1
  1624.       sub ecx,1
  1625.       ;add ebx,1
  1626.       mov [Line.x1],eax
  1627.       mov [Line.x2],eax
  1628.       mov [Line.y1],ebx
  1629.       mov [Line.y2],ecx
  1630.       call DrawLine
  1631.  
  1632.       ;draw horizontal dark line(x+1,y+sizey-1,x+sizex-1,y+sizey-1)
  1633.       mov eax,[Bookmark.WorkPlace_x]
  1634.       mov ebx,[Bookmark.WorkPlace_y]
  1635.       mov ecx,eax
  1636.       add ecx,[Bookmark.WorkPlace_sizex]
  1637.       add ebx,[Bookmark.WorkPlace_sizey]
  1638.       add eax,1
  1639.       sub ecx,1
  1640.       sub ebx,1
  1641.       mov [Line.x1],eax
  1642.       mov [Line.x2],ecx
  1643.       mov [Line.y1],ebx
  1644.       mov [Line.y2],ebx
  1645.       call DrawLine
  1646.  
  1647.       ret
  1648.