Subversion Repositories Kolibri OS

Rev

Rev 1303 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1303 Rev 1309
Line 1... Line 1...
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
; ýëåìåíò TreeList äëÿ Kolibri OS
2
; ýëåìåíò TreeList äëÿ Kolibri OS
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 2.12.2009 IgorA
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 8.12.2009 IgorA
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
Line 5... Line 5...
5
 
5
 
6
 
6
 
Line 34... Line 34...
34
tl_capt_cy    equ  word[edi+74] ;âûñîòà ïîäïèñè
34
tl_capt_cy    equ  word[edi+74] ;âûñîòà ïîäïèñè
35
tl_info_capt_offs equ word[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
35
tl_info_capt_offs equ word[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
36
tl_info_capt_len equ word[edi+78] ;äëèííà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû)
36
tl_info_capt_len equ word[edi+78] ;äëèííà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû)
37
tl_el_focus   equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
37
tl_el_focus   equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
38
tl_p_scrol    equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
38
tl_p_scrol    equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
39
tl_sb_draw    equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
-
 
40
tl_on_press   equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
39
tl_on_press   equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
Line 41... Line 40...
41
 
40
 
42
;êîíñòàíòû ñòèëÿ
41
;êîíñòàíòû ñòèëÿ
43
tl_key_no_edit   equ   1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
42
tl_key_no_edit   equ   1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
Line 57... Line 56...
57
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
56
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
58
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
57
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
Line 59... Line 58...
59
 
58
 
60
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
59
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
61
    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
60
    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
62
    info_capt_len,el_focus, p_scrol,p_sb_draw,on_press {
61
    info_capt_len,el_focus, p_scrol,on_press {
63
  .data_info	dd 0
62
  .data_info	dd 0
64
  .info_size	dw info_size
63
  .info_size	dw info_size
65
  .info_max_count dd info_max_count
64
  .info_max_count dd info_max_count
66
  .style	    dd style
65
  .style	    dd style
Line 83... Line 82...
83
  .capt_cy	   dw capt_cy
82
  .capt_cy	   dw capt_cy
84
  .info_capt_offs dw info_capt_offs
83
  .info_capt_offs dw info_capt_offs
85
  .info_capt_len dw info_capt_len
84
  .info_capt_len dw info_capt_len
86
  .el_focus dd el_focus
85
  .el_focus dd el_focus
87
  .p_scrol  dd p_scrol
86
  .p_scrol  dd p_scrol
88
  .p_sb_draw dd p_sb_draw
87
  rb 4
89
  .on_activate dd 0
88
  .on_activate dd 0
90
  .on_press dd on_press
89
  .on_press dd on_press
91
}
90
}
Line 92... Line 91...
92
 
91
 
Line 339... Line 338...
339
 
338
 
340
    mov ebx,tl_box_left
339
    mov ebx,tl_box_left
341
    add ebx,tl_box_width
340
    add ebx,tl_box_width
342
    shl ebx,16
341
    shl ebx,16
343
    cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
342
    cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
Line 344... Line 343...
344
    jg .no_in_wnd
343
    jg .test_scroll ;.no_in_wnd
345
 
344
 
346
    mov ebx,tl_box_top
345
    mov ebx,tl_box_top
347
    add ebx,tl_box_height
346
    add ebx,tl_box_height
Line 419... Line 418...
419
      mov esi,tl_box_top
418
      mov esi,tl_box_top
420
      add esi,tl_box_height ;esi = coord bottom border
419
      add esi,tl_box_height ;esi = coord bottom border
421
      call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
420
      call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
422
      call tl_draw_caption_cur_pos
421
      call tl_draw_caption_cur_pos
423
      jmp .no_draw
422
      jmp .no_draw
-
 
423
;--- mouse event for children scrollbar ----------------------------------------
-
 
424
.test_scroll:
-
 
425
  mov edx,tl_p_scrol
-
 
426
  cmp edx,0
-
 
427
  je .no_in_wnd ;ïîëüçîâàòåëü íå ñîçäàë äî÷åðíåãî ñêðîëëèíãà
-
 
428
    shr ebx,16
-
 
429
    add bx,word[edx] ;+0 .size_x
-
 
430
    shl ebx,16
-
 
431
    cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
-
 
432
    jg .no_in_wnd
-
 
433
 
-
 
434
    mov eax,dword[edx+16] ;+16 .max_area
-
 
435
    cmp eax,dword[edx+20] ;+20 .cur_area
-
 
436
    jbe .no_in_wnd ;âñå óçëû ïîïàäàþò â îêíî ñêðîëëèíãà
-
 
437
      push dword edx
-
 
438
      call scroll_bar_vertical.mouse ;scrollbar_ver_mouse
-
 
439
 
-
 
440
      cmp dword[edx+40],0 ;+40 .redraw
-
 
441
      je  @f
-
 
442
        mov dword[edx+40],0 ;+40 .redraw
-
 
443
        push dword edi
-
 
444
        call tl_draw ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà
-
 
445
      @@:
-
 
446
      cmp dword[edx+46],0 ;+46 .delta2
-
 
447
      jne .no_draw ;ïîïàëè íà ñêðîëëèíã - íå ñíèìàåì ôîêóñ ñ TreeList
-
 
448
;-------------------------------------------------------------------------------
424
    .no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
449
    .no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
425
      mov ebx,tl_el_focus
450
      mov ebx,tl_el_focus
426
      cmp dword[ebx],edi
451
      cmp dword[ebx],edi
427
      jne .no_draw ;ýëåìåíò íå â ôîêóñå
452
      jne .no_draw ;ýëåìåíò íå â ôîêóñå
428
        mov dword[ebx],0 ;reset focus
453
        mov dword[ebx],0 ;reset focus
-
 
454
        mov esi,tl_box_top
-
 
455
        add esi,tl_box_height ;esi = coord bottom border
-
 
456
        call tl_draw_cursor ;ðèñóåì êóðñîð ñ ïîòåðÿíûì ôîêóñîì
429
    .no_draw:
457
    .no_draw:
Line 430... Line 458...
430
 
458
 
431
    pop esi edi edx ecx ebx eax
459
    pop esi edi edx ecx ebx eax
432
  pop ebp
460
  pop ebp
Line 556... Line 584...
556
    mov edx,tl_col_bkg
584
    mov edx,tl_col_bkg
557
    int 0x40 ;draw window client rect
585
    int 0x40 ;draw window client rect
Line 558... Line 586...
558
 
586
 
559
    cmp tl_capt_cy,9 ;9 - minimum caption height
587
    cmp tl_capt_cy,9 ;9 - minimum caption height
-
 
588
    jl @f
-
 
589
    mov ebx,edi ;calculate cursor position
-
 
590
    mov eax,tl_cur_pos
-
 
591
    inc eax
-
 
592
    lea edi,[txt_capt_cur]
-
 
593
    add edi,7
-
 
594
    call tl_convert_to_str
-
 
595
 
-
 
596
    mov edi,ebx
-
 
597
    mov eax,tl_tim_undo
-
 
598
    lea edi,[txt_capt_otm]
-
 
599
    add edi,7
-
 
600
    call tl_convert_to_str
-
 
601
    mov edi,ebx ;restore edi
560
    jl @f
602
 
561
    mov eax,4 ;draw text captions
603
    mov eax,4 ;draw text captions
562
    mov ebx,tl_box_left
604
    mov ebx,tl_box_left
563
    shl ebx,16
605
    shl ebx,16
564
    add ebx,5*65536+3
606
    add ebx,5*65536+3
Line 572... Line 614...
572
    shl ebx,16
614
    shl ebx,16
573
    add ebx,100*65536+3
615
    add ebx,100*65536+3
574
    add ebx,tl_box_top
616
    add ebx,tl_box_top
575
    lea edx,[txt_capt_otm]
617
    lea edx,[txt_capt_otm]
576
    int 0x40
618
    int 0x40
577
 
-
 
578
    mov eax,47 ;draw
-
 
579
    mov ebx,0x40000
-
 
580
    mov ecx,tl_cur_pos
-
 
581
  inc ecx
-
 
582
    mov edx,tl_box_left
-
 
583
    shl edx,16
-
 
584
    add edx,50*65536+3
-
 
585
    add edx,tl_box_top
-
 
586
    mov esi,tl_col_txt
-
 
587
    int 0x40
-
 
588
    mov ecx,tl_tim_undo
-
 
589
    mov edx,tl_box_left
-
 
590
    shl edx,16
-
 
591
    add edx,140*65536+3
-
 
592
    add edx,tl_box_top
-
 
593
    mov esi,tl_col_txt
-
 
594
    int 0x40
-
 
595
    @@:
619
    @@:
Line 596... Line -...
596
 
-
 
597
;---debug---
-
 
598
;mov ecx,0
-
 
599
;@@:
-
 
600
;call DebugSymb
-
 
601
;inc ecx
-
 
602
;cmp ecx,10
-
 
603
;jge @f
-
 
604
;jmp @b
-
 
605
;@@:
-
 
606
;---debug---
-
 
607
 
620
 
608
    ;cycle to nodes
621
    ;cycle to nodes
609
    xor eax,eax
622
    xor eax,eax
610
    mov edx,tl_data_nodes
623
    mov edx,tl_data_nodes
611
    mov ecx,edx
624
    mov ecx,edx
Line 723... Line 736...
723
; ecx = pointer to 1 node struct
736
; ecx = pointer to 1 node struct
724
; edx = pointer to some node struct
737
; edx = pointer to some node struct
725
; edi = pointer to 'TreeList' struct
738
; edi = pointer to 'TreeList' struct
726
align 4
739
align 4
727
tl_iterat_perv:
740
tl_iterat_perv:
728
  push bx
741
  push eax
729
  mov bl,0x7f
-
 
730
  cmp byte[edx+3],1
-
 
731
  jne @f
742
 
732
    mov bl,byte[edx+2]
743
;  mov bl,byte[edx+2]
733
  @@:
-
 
Line 734... Line 744...
734
 
744
 
735
  cmp tl_tim_undo,0
745
  cmp tl_tim_undo,0
Line 736... Line 746...
736
  je .else
746
  je .beg1
737
 
747
 
738
  push eax
748
  push eax
739
  .beg0:
749
  .beg0:
740
    call tl_move_perv
750
    call tl_move_perv
741
    cmp edx,ecx
751
    cmp edx,ecx
742
    jle @f
752
    jle @f
743
    call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
753
    call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
744
    cmp al,1
-
 
745
    je .beg0
-
 
746
    cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ
-
 
747
    jl .beg0
-
 
748
  @@:
-
 
749
  pop eax
-
 
Line 750... Line 754...
750
  pop bx
754
    cmp al,1
751
  ret
755
    je .beg0
752
 
756
 
753
  .else:
757
  .beg1:
754
    call tl_move_perv
758
    call tl_move_perv
755
    cmp edx,ecx
759
    cmp edx,ecx
-
 
760
    jle @f
-
 
761
    cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ
-
 
762
    jne .beg1
-
 
763
 
-
 
764
  @@:
-
 
765
    call tl_move_max_clo_par
-
 
766
  pop eax
-
 
767
  ret
-
 
768
 
-
 
769
 
-
 
770
;input:
-
 
771
; edx = pointer to some node struct
-
 
772
; edi = pointer to 'TreeList' struct
-
 
773
;output:
-
 
774
; edx = pointer closed parent node with maximum level
-
 
775
align 4
-
 
776
tl_move_max_clo_par: ;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ
-
 
777
  push eax ebx
-
 
778
  mov eax,edx
756
    jle .endif
779
  xor ebx,ebx
-
 
780
  .beg:
-
 
781
    call tl_move_par
-
 
782
    cmp byte[edx+3],1 ;ðîäèòåëüñêèé óçåë çàêðûò ?
-
 
783
    jne @f
757
    cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ
784
      mov eax,edx
-
 
785
    @@:
-
 
786
    cmp ebx,edx
758
    jne .else
787
    je .end_f
-
 
788
      mov ebx,edx
759
    cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ
789
    jmp .beg
760
    jl .else
790
  .end_f:
Line 761... Line 791...
761
  .endif:
791
  mov edx,eax
762
  pop bx
792
  pop ebx eax
763
  ret
793
  ret
Line 785... Line 815...
785
  imul edx,sizeof.TreeList
815
  imul edx,sizeof.TreeList
786
  add edx,tl_data_nodes
816
  add edx,tl_data_nodes
787
  ret
817
  ret
Line 788... Line 818...
788
 
818
 
-
 
819
;input:
-
 
820
; ecx =
-
 
821
; edx = pointer to some node struct
-
 
822
; edi = pointer to 'TreeList' struct
-
 
823
;output:
-
 
824
; edx = pointer to parent node struct
-
 
825
align 4
-
 
826
tl_move_par: ;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ
-
 
827
 cmp byte[edx+2],0
-
 
828
 je .end_f ;óçåë 0-ãî óðîâíÿ íå ìîæåò áûòü äî÷åðíèì
-
 
829
 push eax ebx esi
-
 
830
 mov esi,edx ;copy node pointer (edx)
-
 
831
 mov bl,byte[edx+2]
-
 
832
 @@:
-
 
833
   call tl_move_perv
-
 
834
   cmp edx,ecx
-
 
835
   jle @f ;âñå âûøå ñòîÿùèå óçëû íå ðîäèòåëüñêèå
-
 
836
   call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
-
 
837
   cmp al,1
-
 
838
   je @b
-
 
839
   cmp byte[edx+2],bl
-
 
840
   jl .end_0 ;óäà÷íî íàøëè ðîäèòåëüñêèé óçåë
-
 
841
   jmp @b
-
 
842
 @@:
-
 
843
   mov esi,ebx ;restore node pointer
-
 
844
 .end_0:
-
 
845
 pop esi ebx eax
-
 
846
 .end_f:
-
 
847
 ret
-
 
848
 
789
;input:
849
;input:
790
; edx = pointer to symbol struct
850
; edx = pointer to symbol struct
791
; edi = pointer to 'TreeList' struct
851
; edi = pointer to 'TreeList' struct
792
;output:
852
;output:
793
; al = 1 if sumbol not visible
853
; al = 1 if sumbol not visible
Line 853... Line 913...
853
      int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê
913
      int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê
854
      jmp .end_f
914
      jmp .end_f
855
    @@:
915
    @@:
856
      mov ebx,tl_data_img_sys
916
      mov ebx,tl_data_img_sys
857
      imul ax,tl_img_cy
917
      imul ax,tl_img_cy
858
      mov cx,tl_img_cx
-
 
859
      shl ecx,16
-
 
860
      mov cx,tl_img_cy
-
 
861
      mov edx,tl_box_left
918
      mov edx,tl_box_left
862
      shl edx,16
919
      shl edx,16
863
      mov dx,ax
920
      mov dx,ax
864
      add edx,tl_box_top
921
      add edx,tl_box_top
865
      add dx,tl_capt_cy
922
      add dx,tl_capt_cy
Line -... Line 923...
-
 
923
 
-
 
924
      mov ecx,tl_el_focus ;ïðîâåðÿåì â ôîêóñå ýëåìåíò èëè íåò
-
 
925
      cmp dword[ecx],edi
-
 
926
      je .focus
-
 
927
        xor eax,eax
-
 
928
        xor ecx,ecx
-
 
929
        mov cx,tl_img_cx
-
 
930
        mov ax,tl_img_cy
-
 
931
        imul eax,ecx
-
 
932
        imul eax,4*3 ;4=icon index 3=rgb
-
 
933
        add ebx,eax
-
 
934
      .focus:
-
 
935
 
-
 
936
      mov cx,tl_img_cx
-
 
937
      shl ecx,16
-
 
938
      mov cx,tl_img_cy
866
 
939
 
867
      ;crop image if on the border
940
      ;crop image if on the border
868
      cmp si,dx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
941
      cmp si,dx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
Line 869... Line 942...
869
      jl .end_f
942
      jl .end_f
Line 1018... Line 1091...
1018
 
1091
 
1019
    call tl_draw_node_icon_opn_clo
1092
    call tl_draw_node_icon_opn_clo
1020
    bt tl_style,1
1093
    bt tl_style,1
1021
    jae .end_draw
1094
    jae .end_draw
1022
      call tl_draw_node_icon_par_lin
-
 
-
 
1095
      call tl_draw_node_icon_par_lin
1023
 
1096
      call tl_draw_node_icon_par_lin_up
1024
    .end_draw:
1097
    .end_draw:
1025
  pop esi edx ecx ebx eax
1098
  pop esi edx ecx ebx eax
Line 1026... Line 1099...
1026
  ret
1099
  ret
Line 1066... Line 1139...
1066
    @@:
1139
    @@:
1067
  pop esi edx ecx ebx eax
1140
  pop esi edx ecx ebx eax
1068
  ret
1141
  ret
Line 1069... Line 1142...
1069
 
1142
 
-
 
1143
;input:
1070
;input:
1144
; al = óðîâåíü ýëåìåíòà
1071
;...
1145
;...
1072
align 4
1146
align 4
1073
tl_draw_node_icon_par_lin:
1147
tl_draw_node_icon_par_lin:
1074
  cmp byte[edx+3],1
1148
  cmp byte[edx+3],1
Line 1099... Line 1173...
1099
	mov edx,tl_col_txt
1173
	mov edx,tl_col_txt
1100
	mov eax,13
1174
	mov eax,13
1101
	int 0x40 ;draw minus rect, if not system icons
1175
	int 0x40 ;draw minus rect, if not system icons
1102
	jmp @f
1176
	jmp @f
1103
      .draw_img_s:
1177
      .draw_img_s:
1104
      mov ecx,esi ;load ecx
1178
;      mov ecx,esi ;load ecx
1105
      mov edx,ebx
1179
      mov edx,ebx
1106
      ror ecx,16
1180
      ror ecx,16
1107
      mov dx,cx
1181
      mov dx,cx
1108
      mov cx,bx
1182
      mov cx,bx
1109
      ror ecx,16
1183
      ror ecx,16
Line 1120... Line 1194...
1120
    @@:
1194
    @@:
1121
  pop esi edx ecx ebx eax
1195
  pop esi edx ecx ebx eax
1122
  .close:
1196
  .close:
1123
  ret
1197
  ret
Line -... Line 1198...
-
 
1198
 
-
 
1199
 
-
 
1200
 
-
 
1201
;icon:
-
 
1202
; al = óðîâåíü ýëåìåíòà
-
 
1203
;...
-
 
1204
align 4
-
 
1205
tl_draw_node_icon_par_lin_up:
-
 
1206
  push eax ebx ecx edx esi
-
 
1207
    cmp tl_data_img_sys,0 ;if not image
-
 
1208
    je @f
-
 
1209
    cmp al,0
-
 
1210
    je @f
-
 
1211
 
-
 
1212
;---------
-
 
1213
    xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè
-
 
1214
    .cycle0:
-
 
1215
      call tl_iterat_perv ;get perv visible item
-
 
1216
      cmp edx,ecx
-
 
1217
      jle .cycle1 ;if begin of list
-
 
1218
 
-
 
1219
      cmp byte[edx+2],al
-
 
1220
      jle .cycle1 ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè
-
 
1221
      inc si
-
 
1222
      jmp .cycle0
-
 
1223
    .cycle1:
-
 
1224
      cmp si,0 ;si = êîë-âî èêîíîê ëèíèè êîòîðûå íóæíî íàðèñîâàòü ñâåðõó
-
 
1225
      je @f
-
 
1226
      shl esi,16
-
 
1227
 
-
 
1228
      pop ecx ;esi->ecx
-
 
1229
      push ecx ;save esi
-
 
1230
 
-
 
1231
      ror ebx,16
-
 
1232
      sub bx,tl_img_cx
-
 
1233
      ror ebx,16
-
 
1234
 
-
 
1235
      mov edx,ebx
-
 
1236
      ror ecx,16
-
 
1237
      mov dx,cx
-
 
1238
      mov cx,bx
-
 
1239
      ror ecx,16
-
 
1240
      mov cx,tl_img_cy ;restore size y (if crop)
-
 
1241
      mov ebx,3 ;rgb = 3 bytes
-
 
1242
      imul bx,tl_img_cx
-
 
1243
      imul bx,tl_img_cy
-
 
1244
      ;imul ebx,1
-
 
1245
      add ebx,tl_data_img_sys
-
 
1246
 
-
 
1247
      add esi,tl_box_top
-
 
1248
      add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà
-
 
1249
      mov eax,7
-
 
1250
;---------
-
 
1251
      .cycle2:
-
 
1252
      sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ
-
 
1253
      cmp dx,si
-
 
1254
      jl @f
-
 
1255
;        int 0x40 ;draw line icon
-
 
1256
        cmp esi,0x10000
-
 
1257
        jl @f
-
 
1258
        int 0x40 ;draw line icon
-
 
1259
        sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê
-
 
1260
      jmp .cycle2
-
 
1261
    @@:
-
 
1262
  pop esi edx ecx ebx eax
-
 
1263
  ret
1124
 
1264
 
1125
;input:
1265
;input:
1126
; edi = pointer to TreeInfo struct
1266
; edi = pointer to TreeInfo struct
1127
;output:
1267
;output:
1128
; eax = rows
1268
; eax = rows
Line 1351... Line 1491...
1351
 
1491
 
1352
    mov edx,tl_p_scrol
1492
    mov edx,tl_p_scrol
1353
    mov dword[edx+20],eax ;+20 .cur_area
1493
    mov dword[edx+20],eax ;+20 .cur_area
1354
    mov dword[edx+16],ecx ;+16 .max_area
1494
    mov dword[edx+16],ecx ;+16 .max_area
1355
    push dword edx ;pointer to scroll struct
-
 
1356
    mov edx,tl_sb_draw ;pointer to scroll draw function
1495
    push dword edx ;pointer to scroll struct
1357
    call dword[edx]
1496
    call scroll_bar_vertical.draw
1358
  @@:
1497
  @@:
1359
  pop edx ecx eax
1498
  pop edx ecx eax
Line 1360... Line 1499...
1360
ret
1499
ret
Line 1585... Line 1724...
1585
    je @f
1724
    je @f
1586
      mov edi,tl_p_scrol
1725
      mov edi,tl_p_scrol
1587
      mov dword[edi+24],0
1726
      mov dword[edi+24],0
1588
      push dword edi
1727
      push dword edi
1589
      mov edi,dword[ebp+8]
1728
      mov edi,dword[ebp+8]
1590
      mov edi,tl_sb_draw
-
 
1591
      call dword[edi]
1729
      call scroll_bar_vertical.draw
1592
    @@:
1730
    @@:
1593
  pop edi
1731
  pop edi
Line 1594... Line 1732...
1594
 
1732
 
1595
  pop ebp
1733
  pop ebp
Line 1617... Line 1755...
1617
    add eax,dword[ebx+24] ;.position +24
1755
    add eax,dword[ebx+24] ;.position +24
1618
    cmp tl_cur_pos,eax
1756
    cmp tl_cur_pos,eax
1619
    jl @f
1757
    jl @f
1620
      inc dword[ebx+24] ;.position +24
1758
      inc dword[ebx+24] ;.position +24
1621
      push dword ebx
1759
      push dword ebx
1622
      mov edi,tl_sb_draw ;ïåðåðèñîâêà ñêðîëëèíãà
-
 
1623
      call dword[edi]
1760
      call scroll_bar_vertical.draw
Line 1624... Line 1761...
1624
 
1761
 
1625
      mov edi,dword[ebp+8] ;restore edi
1762
      mov edi,dword[ebp+8] ;restore edi
1626
      push dword edi
1763
      push dword edi
1627
      call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà
1764
      call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà
Line 1702... Line 1839...
1702
    cmp edi,dword[eax+24] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã
1839
    cmp edi,dword[eax+24] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã
1703
    jge @f
1840
    jge @f
1704
      dec dword[eax+24]
1841
      dec dword[eax+24]
1705
      push dword eax
1842
      push dword eax
1706
      mov edi,dword[ebp+8]
1843
      mov edi,dword[ebp+8]
1707
      mov edi,tl_sb_draw ;.redraw
1844
      call scroll_bar_vertical.draw
1708
      call dword[edi]
-
 
1709
      mov edi,dword[ebp+8] ;restore edi
1845
      mov edi,dword[ebp+8] ;restore edi
1710
      push dword edi
1846
      push dword edi
1711
      call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà
1847
      call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà
1712
      jmp .no_redraw
1848
      jmp .no_redraw
1713
    @@:
1849
    @@:
Line 1756... Line 1892...
1756
      .scroll:
1892
      .scroll:
1757
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
1893
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
1758
      push dword edi
1894
      push dword edi
1759
      call tl_draw ;draw window
1895
      call tl_draw ;draw window
1760
      push dword esi
1896
      push dword esi
1761
      mov eax,dword[ebp+8]
-
 
1762
      mov eax,tl_sb_draw ;.redraw
1897
      call scroll_bar_vertical.draw
1763
      call dword[eax]
-
 
1764
    .no_redraw:
1898
    .no_redraw:
1765
  pop esi edi eax
1899
  pop esi edi eax
1766
  pop ebp
1900
  pop ebp
1767
  ret 4
1901
  ret 4
Line 1815... Line 1949...
1815
 
1949
 
1816
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
1950
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
1817
      push dword edi
1951
      push dword edi
1818
      call tl_draw ;draw window
1952
      call tl_draw ;draw window
1819
      push dword esi
-
 
1820
      mov eax,dword[ebp+8]
1953
      push dword esi
1821
      mov eax,tl_sb_draw ;.redraw
-
 
1822
      call dword[eax]
1954
      call scroll_bar_vertical.draw
1823
    .no_redraw:
1955
    .no_redraw:
1824
  pop esi edi ecx ebx eax
1956
  pop esi edi ecx ebx eax
1825
  pop ebp
1957
  pop ebp
Line 2041... Line 2173...
2041
align 4
2173
align 4
2042
tl_draw_caption_cur_pos:
2174
tl_draw_caption_cur_pos:
2043
  cmp tl_capt_cy,9 ;9 - minimum caption height
2175
  cmp tl_capt_cy,9 ;9 - minimum caption height
2044
  jl @f
2176
  jl @f
2045
  push eax ebx ecx edx edi esi
2177
  push eax ebx ecx edx edi esi
-
 
2178
    mov ebx,edi ;calculate cursor position
2046
    mov eax,47 ;draw
2179
    mov eax,tl_cur_pos
2047
    mov ebx,0x40000
2180
    inc eax
2048
    mov ecx,tl_cur_pos
2181
    lea edi,[txt_capt_cur]
2049
    inc ecx
2182
    add edi,7
-
 
2183
    call tl_convert_to_str
-
 
2184
    mov edi,ebx
-
 
2185
 
-
 
2186
    mov eax,4 ;draw text captions
2050
    mov edx,tl_box_left
2187
    mov ebx,tl_box_left
2051
    shl edx,16
2188
    shl ebx,16
2052
    add edx,50*65536+3
2189
    add ebx,5*65536+3
2053
    add edx,tl_box_top
2190
    add ebx,tl_box_top
2054
    mov esi,tl_col_txt
2191
    mov ecx,tl_col_txt
2055
    or  esi,0x40000000 ;çàêðàøèâàòü ôîí öâåòîì edi
2192
    or	ecx,0xc0000000 ;0x40000000 çàêðàøèâàòü ôîí öâåòîì edi
-
 
2193
    lea edx,[txt_capt_cur]
2056
    mov edi,tl_col_zag
2194
    mov edi,tl_col_zag
2057
    int 0x40
2195
    int 0x40
-
 
2196
 
2058
  pop esi edi edx ecx ebx eax
2197
  pop esi edi edx ecx ebx eax
2059
  @@:
2198
  @@:
2060
  ret
2199
  ret
Line 2061... Line 2200...
2061
 
2200
 
Line 2098... Line 2237...
2098
    add ecx,esi  ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð)
2237
    add ecx,esi  ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð)
2099
    sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð)
2238
    sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð)
2100
    cmp ecx,dword[ebp+8]  ;ecx = element memory size
2239
    cmp ecx,dword[ebp+8]  ;ecx = element memory size
2101
    jg .err_mem_size
2240
    jg .err_mem_size
Line 2102... Line 2241...
2102
 
2241
 
2103
    ;save tree params
2242
    ;save tree params (in header)
2104
    mov dword[esi],0x65657274 ;0x65657274 = 'tree'
2243
    mov dword[esi],0x65657274 ;0x65657274 = 'tree'
2105
    mov word[esi+4],bx
2244
    mov word[esi+4],bx
2106
    mov dword[esi+6],eax ;element count
-
 
Line 2107... Line 2245...
2107
    add esi,10
2245
    mov dword[esi+6],eax ;element count
2108
 
2246
 
2109
    mov eax,tl_style
-
 
Line 2110... Line 2247...
2110
    mov dword[esi],eax
2247
    mov eax,tl_style
2111
    add esi,4
2248
    mov dword[esi+10],eax
2112
 
-
 
Line 2113... Line 2249...
2113
    mov eax,tl_cur_pos
2249
 
2114
    mov dword[esi],eax
2250
    mov eax,tl_cur_pos
2115
    add esi,4
-
 
Line 2116... Line 2251...
2116
 
2251
    mov dword[esi+14],eax
2117
    mov ax,tl_info_capt_offs
2252
 
-
 
2253
    mov ax,tl_info_capt_offs
-
 
2254
    mov word[esi+18],ax
-
 
2255
 
-
 
2256
    mov ax,tl_info_capt_len
2118
    mov word[esi],ax
2257
    mov word[esi+20],ax
-
 
2258
 
-
 
2259
    ;copy scroll position
Line 2119... Line 2260...
2119
    add esi,2
2260
    mov edx,tl_p_scrol
2120
 
2261
    mov eax,dword[edx+24] ;+24 .position
2121
    mov ax,tl_info_capt_len
2262
    mov dword[esi+22],eax
2122
    mov word[esi],ax
2263
 
Line 2137... Line 2278...
2137
add esi,4
2278
add esi,4
2138
mov eax,dword[edx] ;eax = (type; lev; clo)
2279
mov eax,dword[edx] ;eax = (type; lev; clo)
2139
mov dword[esi],eax
2280
mov dword[esi],eax
2140
add esi,4
2281
add esi,4
Line 2141... Line -...
2141
 
-
 
2142
;push dword edi
-
 
2143
;call tl_node_get_data
-
 
2144
;pop eax
2282
 
2145
push dword edi
2283
push dword edi
2146
push dword edx
2284
push dword edx
2147
call tl_node_poi_get_data
2285
call tl_node_poi_get_data
Line 2216... Line 2354...
2216
        or dword[ebp+20],tl_err_load_info_size
2354
        or dword[ebp+20],tl_err_load_info_size
2217
      @@:
2355
      @@:
2218
      mov ecx,dword[esi+6] ;count nodes
2356
      mov ecx,dword[esi+6] ;count nodes
2219
      cmp ecx,1
2357
      cmp ecx,1
2220
      jl .end_f
2358
      jl .end_f
-
 
2359
      mov edx,esi ;save header pointer
2221
      add esi,tl_save_load_heder_size
2360
      add esi,tl_save_load_heder_size
Line 2222... Line 2361...
2222
 
2361
 
2223
      @@:
2362
      @@:
2224
;load node params
2363
;load node params
Line 2234... Line 2373...
2234
call tl_cur_next
2373
call tl_cur_next
2235
;...
2374
;...
2236
add esi,ebx
2375
add esi,ebx
2237
        loop @b
2376
        loop @b
Line -... Line 2377...
-
 
2377
 
-
 
2378
      bt word[ebp+18],1 ;load in add mode
-
 
2379
      jc .no_tree
-
 
2380
        mov eax,dword[edx+14] ;set cursor pos
-
 
2381
        mov tl_cur_pos,eax
-
 
2382
        mov eax,dword[edx+22] ;set scroll pos
-
 
2383
        mov ebx,tl_p_scrol
-
 
2384
        cmp ebx,0
-
 
2385
        je .end_f
-
 
2386
          mov dword[ebx+24],eax ;+24 .position
-
 
2387
          push dword ebx ;pointer to scroll struct
-
 
2388
          call scroll_bar_vertical.draw
2238
 
2389
 
2239
      jmp .end_f
2390
      jmp .end_f
2240
    .no_tree:
2391
    .no_tree:
2241
      mov dword[ebp+20],tl_err_load_caption
2392
      mov dword[ebp+20],tl_err_load_caption
2242
    .end_f:
2393
    .end_f:
Line 2258... Line 2409...
2258
tl_key_ascii db 13,32,178,177,176,179,182,184,183
2409
tl_key_ascii db 13,32,178,177,176,179,182,184,183
2259
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
2410
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
Line 2260... Line 2411...
2260
 
2411
 
2261
txt_capt_cur db '‘âப ',0
2412
txt_capt_cur db '‘âப       ',0
-
 
2413
txt_capt_otm db 'Žâ¬¥­ë      ',0
-
 
2414
 
-
 
2415
;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó
-
 
2416
;input:
-
 
2417
; eax = value
-
 
2418
; edi = string buffer
-
 
2419
;output:
-
 
2420
; edi =
-
 
2421
align 4
-
 
2422
tl_convert_to_str:
-
 
2423
  pushad
-
 
2424
    mov dword[edi+1],0x20202020
-
 
2425
    call .str
-
 
2426
  popad
-
 
2427
  ret
-
 
2428
 
-
 
2429
align 4
-
 
2430
.str:
-
 
2431
  mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
-
 
2432
    ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âçîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé 
-
 
2433
  cmp eax,ecx  ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
-
 
2434
  jb @f
-
 
2435
  xor edx,edx  ;î÷èñòèòü edx
-
 
2436
  div ecx      ;ðàçäåëèòü - îñòàòîê â edx
-
 
2437
  push edx     ;ïîëîæèòü â ñòåê
-
 
2438
  ;dec edi             ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
-
 
2439
  call .str;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
-
 
2440
  pop eax
-
 
2441
  @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
-
 
2442
  ;sbb al,$69  ;- ÷åñòíî äàííàÿ èíñòðóêöèÿ ìåíÿ çàñòàâëÿåò çàäóìàòüñÿ ò.å. ÿ íå çíàþ êàê ýòî ðàáîòàåò
-
 
2443
  ;das        ;ïîñëå äàííîé êîìàíäû êàê áû ïðîèñõîäèò óìåíüøåíèå al íà 66h  (â êíèãå íàïèñàíî äðóãîå)
-
 
2444
  or al,0x30  ;äàííàÿ êîìàíäà êîðî÷å  ÷åì äâå âûøå 
-
 
2445
  stosb       ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
2262
txt_capt_otm db 'Žâ¬¥­ë',0
2446
  ret         ;âåðíóòüñÿ ÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ
2263
}
2447
}