Subversion Repositories Kolibri OS

Rev

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

Rev 4566 Rev 5579
Line 587... Line 587...
587
	cmp	[replace_mode],0
587
	cmp	[replace_mode],0
588
	jne	@f
588
	jne	@f
589
	call	get_from_clipboard
589
	call	get_from_clipboard
590
@@:
590
@@:
591
	cmp	[copy_size],0
591
	cmp	[copy_size],0
592
	je	.exit
592
	je	.exit_1
593
 
-
 
594
	call	delete_selection
593
	call	delete_selection
595
 
-
 
596
	mov	eax,[copy_size]
594
	mov	eax,[copy_size]
-
 
595
	sub	eax,sizeof.EDITOR_LINE_DATA
597
	call	editor_realloc_lines
596
	call	editor_realloc_lines
598
 
-
 
599
	mov	ebx,[cur_editor.Lines.Size]
-
 
600
	add	ebx,[copy_size]
-
 
601
	mov	[cur_editor.Lines.Size],ebx
-
 
602
	stdcall mem.ReAlloc,[cur_editor.Lines],ebx
-
 
603
	mov	[cur_editor.Lines],eax
-
 
604
 
-
 
605
	mov	ecx,[cur_editor.Caret.Y]
597
	mov	ecx,[cur_editor.Caret.Y]
606
	call	get_line_offset
598
	call	get_line_offset
607
	pushd	[esi+EDITOR_LINE_DATA.Size] esi
-
 
608
	mov	ecx,[cur_editor.Caret.X]
599
	mov	ecx,[cur_editor.Caret.X]
609
	call	line_add_spaces
600
	call	line_add_spaces
610
	add	[esp],eax
-
 
611
	add	esi,eax
-
 
612
	mov	ecx,[copy_size]
601
	pushd	[esi+EDITOR_LINE_DATA.Size]
613
	mov	edi,[copy_count]
-
 
614
	test	edi,edi
-
 
615
	dec	edi
602
	push	esi
616
	jnz	@f
-
 
617
	sub	ecx,sizeof.EDITOR_LINE_DATA
603
	lea	eax,[esi+ecx+sizeof.EDITOR_LINE_DATA]
618
@@:
-
 
619
	mov	edi,[cur_editor.Lines]
604
	mov	edi,[cur_editor.Lines]
620
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
605
	add	edi,[cur_editor.Lines.Size]
621
	dec	edi
606
	dec	edi
622
	mov	eax,esi
607
	mov	ecx,[copy_size]
-
 
608
	sub	ecx,sizeof.EDITOR_LINE_DATA
623
	mov	esi,edi
609
	mov	esi,edi
624
	sub	esi,ecx
610
	sub	esi,ecx
625
	lea	ecx,[eax+sizeof.EDITOR_LINE_DATA]
-
 
626
	add	ecx,[cur_editor.Caret.X]
-
 
627
	neg	ecx
611
	neg	eax
628
	lea	ecx,[esi+ecx+1]
612
	lea	ecx,[esi+eax+1]
629
	mov	[size_of_moving_area],ecx
-
 
630
	std
613
	std
631
	rep	movsb
614
	rep	movsb
632
 
-
 
633
	mov	ecx,[copy_count]
-
 
634
	dec	ecx
-
 
635
	jz	.single_line
-
 
636
 
-
 
637
	cld
615
	cld
638
	pop	edi
616
	pop	edi
639
	add	edi,sizeof.EDITOR_LINE_DATA
-
 
640
	mov	esi,[copy_buf]
617
	mov	esi,[copy_buf]
641
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
618
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
642
	add	esi,sizeof.EDITOR_LINE_DATA
619
	add	esi,sizeof.EDITOR_LINE_DATA
-
 
620
	mov	ecx,[copy_count]
-
 
621
	dec	ecx
-
 
622
	jz	.single_line
Line 643... Line 623...
643
 
623
 
644
	mov	ebx,[cur_editor.Caret.X]
-
 
645
	add	eax,ebx
624
	add	eax,[cur_editor.Caret.X]
646
	mov	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax
625
	mov	[edi+EDITOR_LINE_DATA.Size],eax
647
	mov	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
626
	mov	[edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
648
	sub	eax,ebx
627
	sub	eax,[cur_editor.Caret.X]
649
	call	.check_columns
628
	call	.check_columns
-
 
629
	add	edi,[cur_editor.Caret.X]
650
	add	edi,ebx
630
@@:
651
    @@: push	ecx
631
	push	ecx
-
 
632
	mov	ecx,eax
652
	mov	ecx,eax
633
	add	edi,sizeof.EDITOR_LINE_DATA
653
	rep	movsb
634
	rep	movsb
654
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
635
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
655
	add	esi,sizeof.EDITOR_LINE_DATA
636
	add	esi,sizeof.EDITOR_LINE_DATA
656
	mov	[edi+EDITOR_LINE_DATA.Size],eax
637
	mov	[edi+EDITOR_LINE_DATA.Size],eax
657
	mov	[edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
-
 
658
	add	edi,sizeof.EDITOR_LINE_DATA
638
	mov	[edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
659
	pop	ecx
639
	pop	ecx
Line 660... Line 640...
660
	loop	@b
640
	loop	@b
661
 
-
 
662
	pop	ecx
-
 
663
	sub	ecx,ebx
-
 
664
	ja	@f
-
 
665
 
-
 
666
	pusha
-
 
667
	mov	esi,edi
-
 
668
	sub	edi,sizeof.EDITOR_LINE_DATA
-
 
669
	mov	ecx,[size_of_moving_area]
-
 
670
	cld
-
 
671
	rep	movsb
641
 
672
	popa
-
 
673
	jmp	.save_cur_editor_values
642
	pop	ecx
674
@@:
643
	sub	ecx,[cur_editor.Caret.X]
-
 
644
	add	[edi+EDITOR_LINE_DATA.Size],ecx
675
	add	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],ecx
645
	call	.check_columns
676
	call	.check_columns
646
	add	edi,sizeof.EDITOR_LINE_DATA
677
	mov	ecx,eax
647
	mov	ecx,eax
678
	rep	movsb
648
	rep	movsb
679
.save_cur_editor_values:
649
.save_cur_editor_values:
680
	mov	[cur_editor.Caret.X],eax
650
	mov	[cur_editor.Caret.X],eax
681
	mov	[cur_editor.SelStart.X],eax
651
	mov	[cur_editor.SelStart.X],eax
682
	mov	eax,[copy_count]
652
	mov	eax,[copy_count]
683
	dec	eax
653
	dec	eax
684
	add	[cur_editor.Caret.Y],eax
654
	add	[cur_editor.Caret.Y],eax
685
	add	[cur_editor.SelStart.Y],eax
-
 
686
	add	[cur_editor.Lines.Count],eax
655
	add	[cur_editor.SelStart.Y],eax
687
 
656
	add	[cur_editor.Lines.Count],eax
Line 688... Line 657...
688
	mov	[cur_editor.Modified],1
657
	mov	[cur_editor.Modified],1
689
	jmp	.exit
-
 
690
 
-
 
691
  .single_line:
-
 
692
	cld
-
 
693
	pop	edi
658
	jmp	.exit
694
	add	edi,sizeof.EDITOR_LINE_DATA
-
 
695
	mov	esi,[copy_buf]
-
 
696
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
-
 
697
	add	esi,sizeof.EDITOR_LINE_DATA
659
 
698
	add	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax
660
.single_line:
-
 
661
	add	[edi+EDITOR_LINE_DATA.Size],eax
699
	and	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
662
	mov	[edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
700
	or	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
663
	call	.check_columns
701
	call	.check_columns
664
	add	edi,sizeof.EDITOR_LINE_DATA
702
	add	edi,[cur_editor.Caret.X]
665
	add	edi,[cur_editor.Caret.X]
703
	add	esp,4
-
 
704
	mov	ecx,eax
666
	pop	ecx
705
	rep	movsb
667
	mov	ecx,eax
706
 
-
 
707
	add	[cur_editor.Caret.X],eax
668
	rep	movsb
708
	add	[cur_editor.SelStart.X],eax
-
 
709
 
669
	add	[cur_editor.Caret.X],eax
710
	mov	[cur_editor.Modified],1
670
	add	[cur_editor.SelStart.X],eax
711
 
671
	mov	[cur_editor.Modified],1
712
  .exit:
-
 
713
	cmp	[replace_mode],0
672
.exit:
714
	jne	.exit_1
-
 
715
 
-
 
716
	cmp	[copy_size],0
673
	cmp	[replace_mode],0
-
 
674
	jne	.exit_1
717
	je	.exit_1
675
	stdcall	mem.Free,[copy_buf]
718
; remove unnecessary memory area
676
	xor	eax,eax
719
	xor	eax,eax
-
 
720
	mov	[copy_size],eax
-
 
721
        mov     [copy_count],eax
677
	mov	[copy_buf],eax
722
        stdcall mem.ReAlloc,[copy_buf],eax
678
	mov	[copy_size],eax
Line 723... Line 679...
723
        mov     [copy_buf],eax
679
	mov	[copy_count],eax
724
.exit_1:
680
.exit_1:
725
	ret
681
	ret
726
 
682
 
727
  .check_columns:
683
.check_columns:
728
	push	eax
684
	push	eax
-
 
685
	mov	eax,[edi+EDITOR_LINE_DATA.Size]
729
	mov	eax,[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size]
686
	cmp	eax,[cur_editor.Columns.Count]
730
	cmp	eax,[cur_editor.Columns.Count]
687
	jbe	@f
731
	jbe	@f
688
	mov	[cur_editor.Columns.Count],eax
732
	mov	[cur_editor.Columns.Count],eax
689
@@:
733
    @@: pop	eax
690
	pop	eax
734
	ret
691
	ret
Line 810... Line 767...
810
endp
767
endp
Line 811... Line 768...
811
 
768
 
812
;-----------------------------------------------------------------------------
769
;-----------------------------------------------------------------------------
813
proc key.up ;///// GO TO PREVIOUS LINE ///////////////////////////////////////
770
proc key.up ;///// GO TO PREVIOUS LINE ///////////////////////////////////////
-
 
771
;-----------------------------------------------------------------------------
814
;-----------------------------------------------------------------------------
772
	call	key.shift_up
815
	call	clear_selection
-
 
816
 
773
	jmp	clear_selection
817
;-----------------------------------------------------------------------------
774
;-----------------------------------------------------------------------------
818
     key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION ////////////////
775
     key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION ////////////////
819
;-----------------------------------------------------------------------------
776
;-----------------------------------------------------------------------------
820
	mov	eax,[cur_editor.Caret.Y]
-
 
821
	dec	eax
-
 
822
	jns	@f
-
 
823
	xor	eax,eax
-
 
824
    @@: mov	ecx,[cur_editor.TopLeft.Y]
-
 
825
	cmp	eax,ecx
-
 
826
	jae	@f
777
	mov	ecx,[cur_editor.Caret.Y]
827
	dec	ecx
778
	dec	ecx
828
	jns	@f
779
	js	.exit
829
	xor	ecx,ecx
780
	mov	[cur_editor.Caret.Y],ecx
830
    @@: test	[chr],KM_SHIFT
781
	call	get_line_offset
831
	jnz	@f
782
	mov	eax,[esi]
832
	mov	[cur_editor.SelStart.Y],eax
783
	cmp	eax,[cur_editor.Caret.X]
833
    @@: mov	[cur_editor.Caret.Y],eax
784
	jnc	.exit
834
	mov	[cur_editor.TopLeft.Y],ecx
-
 
835
 
785
	mov	[cur_editor.Caret.X],eax
836
  .exit:
786
.exit:
837
	ret
787
	ret
Line 838... Line 788...
838
endp
788
endp
839
 
789
 
840
;-----------------------------------------------------------------------------
790
;-----------------------------------------------------------------------------
-
 
791
proc key.down ;///// GO TO NEXT LINE /////////////////////////////////////////
841
proc key.down ;///// GO TO NEXT LINE /////////////////////////////////////////
792
;-----------------------------------------------------------------------------
842
;-----------------------------------------------------------------------------
-
 
843
	call	clear_selection
793
	call	key.shift_down
844
 
794
	jmp	clear_selection
845
;-----------------------------------------------------------------------------
795
;-----------------------------------------------------------------------------
846
     key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION //////////////////
-
 
847
;-----------------------------------------------------------------------------
796
     key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION //////////////////
848
 
-
 
849
	mov	eax,[cur_editor.Caret.Y]
-
 
850
	inc	eax
-
 
851
	cmp	eax,[cur_editor.Lines.Count]
-
 
852
	jb	@f
-
 
853
	dec	eax
-
 
854
    @@: mov	ecx,[cur_editor.TopLeft.Y]
-
 
855
	mov	edx,eax
-
 
856
	sub	edx,ecx
-
 
857
	cmp	edx,[lines.scr]
797
;-----------------------------------------------------------------------------
858
	jb	@f
798
	mov	ecx,[cur_editor.Caret.Y]
859
	inc	ecx
799
	inc	ecx
860
    @@: test	[chr],KM_SHIFT
800
	cmp	[cur_editor.Lines.Count],ecx
-
 
801
	jz	.exit
-
 
802
	mov	[cur_editor.Caret.Y],ecx
861
	jnz	@f
803
	call	get_line_offset
-
 
804
	mov	eax,[esi]
862
	mov	[cur_editor.SelStart.Y],eax
805
	cmp	eax,[cur_editor.Caret.X]
863
    @@: mov	[cur_editor.Caret.Y],eax
-
 
864
	mov	[cur_editor.TopLeft.Y],ecx
806
	jnc	.exit
865
 
807
	mov	[cur_editor.Caret.X],eax
866
  .exit:
808
.exit:
Line 867... Line 809...
867
	ret
809
	ret
868
endp
810
endp
869
 
811
 
-
 
812
;-----------------------------------------------------------------------------
870
;-----------------------------------------------------------------------------
813
proc key.left ;///// GO TO PREVIOUS CHAR /////////////////////////////////////
871
proc key.left ;///// GO TO PREVIOUS CHAR /////////////////////////////////////
-
 
872
;-----------------------------------------------------------------------------
814
;-----------------------------------------------------------------------------
873
	call	clear_selection
815
	call	key.shift_left
874
 
816
	jmp	clear_selection
875
;-----------------------------------------------------------------------------
817
;-----------------------------------------------------------------------------
876
     key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION //////////////
818
     key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION //////////////
877
;-----------------------------------------------------------------------------
819
;-----------------------------------------------------------------------------
-
 
820
	mov	eax,[cur_editor.Caret.X]
878
	mov	eax,[cur_editor.Caret.X]
821
	dec	eax
879
	dec	eax
-
 
880
	jns	@f
822
	jns	@f
881
	inc	eax
823
	mov	ecx,[cur_editor.Caret.Y]
-
 
824
	dec	ecx
-
 
825
	js	.exit
-
 
826
	mov	[cur_editor.Caret.Y],ecx
882
    @@: test	[chr],KM_SHIFT
827
	call	get_line_offset
883
	jnz	@f
-
 
884
	mov	[cur_editor.SelStart.X],eax
828
	mov	eax,[esi]
885
    @@: mov	[cur_editor.Caret.X],eax
829
@@:
886
 
830
	mov	[cur_editor.Caret.X],eax
Line 887... Line 831...
887
  .exit:
831
.exit:
888
	ret
832
	ret
889
endp
833
endp
-
 
834
 
890
 
835
;-----------------------------------------------------------------------------
891
;-----------------------------------------------------------------------------
-
 
892
proc key.right ;///// GO TO NEXT CHAR ////////////////////////////////////////
836
proc key.right ;///// GO TO NEXT CHAR ////////////////////////////////////////
893
;-----------------------------------------------------------------------------
837
;-----------------------------------------------------------------------------
894
	call	clear_selection
838
	call	key.shift_right
-
 
839
	jmp	clear_selection
-
 
840
;-----------------------------------------------------------------------------
895
 
841
     key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION /////////////////
896
;-----------------------------------------------------------------------------
842
;-----------------------------------------------------------------------------
897
     key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION /////////////////
843
	mov	ecx,[cur_editor.Caret.Y]
898
;-----------------------------------------------------------------------------
844
	call	get_line_offset
899
	mov	eax,[cur_editor.Caret.X]
845
	mov	eax,[cur_editor.Caret.X]
900
	inc	eax
846
	inc	eax
901
	cmp	eax,[cur_editor.Columns.Count]
847
	cmp	[esi],eax
-
 
848
	jnc	@f
902
	jbe	@f
849
	inc	ecx
-
 
850
	cmp	[cur_editor.Lines.Count],ecx
903
	dec	eax
851
	jz	.exit
904
    @@: test	[chr],KM_SHIFT
-
 
905
	jnz	@f
852
	xor	eax,eax
906
	mov	[cur_editor.SelStart.X],eax
853
	mov	[cur_editor.Caret.Y],ecx
907
    @@: mov	[cur_editor.Caret.X],eax
854
@@:
Line 908... Line 855...
908
 
855
	mov	[cur_editor.Caret.X],eax
Line 1629... Line 1576...
1629
endp
1576
endp
Line 1630... Line 1577...
1630
 
1577
 
1631
;-----------------------------------------------------------------------------
1578
;-----------------------------------------------------------------------------
1632
proc key.f3 ;///// FIND NEXT MATCH ///////////////////////////////////////////
1579
proc key.f3 ;///// FIND NEXT MATCH ///////////////////////////////////////////
1633
;-----------------------------------------------------------------------------
1580
;-----------------------------------------------------------------------------
1634
	call	search
-
 
1635
	jc	@f
-
 
1636
    @@: ret
1581
	jmp	search
Line 1637... Line 1582...
1637
endp
1582
endp
1638
 
1583
 
1639
;-----------------------------------------------------------------------------
1584
;-----------------------------------------------------------------------------
1640
proc key.f9 ;///// COMPILE AND RUN ///////////////////////////////////////////
1585
proc key.ctrl_f9 ;///// COMPILE //////////////////////////////////////////////
1641
;-----------------------------------------------------------------------------
1586
;-----------------------------------------------------------------------------
1642
	mov	bl,1
-
 
1643
	call	start_fasm
1587
	mov	bl,0
Line 1644... Line 1588...
1644
	ret
1588
	jmp	start_fasm
1645
endp
1589
endp
1646
 
1590
 
1647
;-----------------------------------------------------------------------------
1591
;-----------------------------------------------------------------------------
1648
proc key.f10 ;///// COMPILE AND RUN UNDER DEBUG //////////////////////////////
1592
proc key.f9 ;///// COMPILE AND RUN ///////////////////////////////////////////
1649
;-----------------------------------------------------------------------------
-
 
1650
	mov	bl,2
1593
;-----------------------------------------------------------------------------
Line 1651... Line 1594...
1651
	call	start_fasm
1594
	mov	bl,1
1652
	ret
1595
	jmp	start_fasm
1653
endp
1596
endp
1654
 
1597
 
1655
;-----------------------------------------------------------------------------
1598
;-----------------------------------------------------------------------------
1656
proc key.ctrl_f9 ;///// COMPILE //////////////////////////////////////////////
-
 
1657
;-----------------------------------------------------------------------------
1599
proc key.f10 ;///// COMPILE AND RUN UNDER DEBUG //////////////////////////////
Line 1658... Line 1600...
1658
	mov	bl,0
1600
;-----------------------------------------------------------------------------
1659
	call	start_fasm
1601
	mov	bl,2
1660
	ret
1602
	jmp	start_fasm