Subversion Repositories Kolibri OS

Rev

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