Subversion Repositories Kolibri OS

Rev

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

Rev 826 Rev 987
Line 76... Line 76...
76
    @@:
76
    @@:
Line 77... Line 77...
77
 
77
 
78
	mov	esi,accel_table_main
78
	mov	esi,accel_table_main
79
  .acc: cmp	eax,[esi]
79
  .acc: cmp	eax,[esi]
80
	jne	@f
80
	jne	@f
81
	test	[options],OPTS_SECURESEL
81
	test	[secure_sel],1
82
	jz	.lp1
82
	jz	.lp1
83
	m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
83
	m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
84
	m2m	[cur_editor.SelStart.Y],[cur_editor.Caret.Y]
84
	m2m	[cur_editor.SelStart.Y],[cur_editor.Caret.Y]
85
  .lp1: mov	[s_status],0
85
  .lp1: mov	[s_status],0
Line 100... Line 100...
100
	or	al,al
100
	or	al,al
101
	jz	still.skip_write
101
	jz	still.skip_write
102
	movzx	eax,[eax+key1]
102
	movzx	eax,[eax+key1]
103
	push	eax
103
	push	eax
Line 104... Line 104...
104
 
104
 
105
	test	[options],OPTS_SECURESEL
105
	test	[secure_sel],1
106
	jz	.lp2
106
	jz	.lp2
107
	m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
107
	m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
108
	m2m	[cur_editor.SelStart.Y],[cur_editor.Caret.Y]
108
	m2m	[cur_editor.SelStart.Y],[cur_editor.Caret.Y]
109
	jmp	.put
109
	jmp	.put
Line 110... Line 110...
110
  .lp2: call	delete_selection
110
  .lp2: call	delete_selection
111
 
111
 
112
	test	[options],OPTS_AUTOBRACES
112
	test	[auto_braces],1
113
	jz	.put
113
	jz	.put
114
	cmp	al,'['
114
	cmp	al,'['
115
	jne	@f
115
	jne	@f
Line 272... Line 272...
272
	mov	ebx,[cur_editor.Caret.Y]
272
	mov	ebx,[cur_editor.Caret.Y]
273
	mov	edx,[cur_editor.Caret.X]
273
	mov	edx,[cur_editor.Caret.X]
274
	cld
274
	cld
275
	mov	ecx,ebx
275
	mov	ecx,ebx
276
	call	get_line_offset
276
	call	get_line_offset
277
  .lp1: cmp	dx,[esi]
277
  .lp1: cmp	edx,[esi+EDITOR_LINE_DATA.Size]
278
	jle	@f
278
	jle	@f
279
	movzx	edx,word[esi]
279
	mov	edx,[esi+EDITOR_LINE_DATA.Size]
280
    @@: dec	edx
280
    @@: dec	edx
281
	jl	.nx1
281
	jl	.nx1
282
	add	esi,4
282
	add	esi,sizeof.EDITOR_LINE_DATA
283
	add	esi,edx
283
	add	esi,edx
284
	mov	ecx,edx
284
	mov	ecx,edx
285
    @@: push	ecx
285
    @@: push	ecx
286
	mov	edi,symbols_ex
286
	mov	edi,symbols_ex
287
	mov	ecx,symbols_ex.size+symbols.size
287
	mov	ecx,symbols_ex.size+symbols.size
Line 295... Line 295...
295
	jnz	@b
295
	jnz	@b
296
  .nx1: dec	ebx
296
  .nx1: dec	ebx
297
	js	.exit.2
297
	js	.exit.2
298
	mov	ecx,ebx
298
	mov	ecx,ebx
299
	call	get_line_offset
299
	call	get_line_offset
300
	movzx	edx,word[esi]
300
	mov	edx,[esi+EDITOR_LINE_DATA.Size]
301
	dec	edx
301
	dec	edx
302
	jmp	.lp1
302
	jmp	.lp1
303
    @@:
303
    @@:
304
	mov	ecx,ebx
304
	mov	ecx,ebx
305
	call	get_line_offset
305
	call	get_line_offset
306
  .lp2: cmp	dx,[esi]
306
  .lp2: cmp	edx,[esi+EDITOR_LINE_DATA.Size]
307
	jle	@f
307
	jle	@f
308
	movzx	edx,word[esi]
308
	mov	edx,[esi+EDITOR_LINE_DATA.Size]
309
    @@: or	edx,edx
309
    @@: or	edx,edx
310
	jl	.nx2
310
	jl	.nx2
311
	add	esi,4
311
	add	esi,sizeof.EDITOR_LINE_DATA
312
	add	esi,edx
312
	add	esi,edx
313
    @@: mov	edi,symbols_ex
313
    @@: mov	edi,symbols_ex
314
	mov	ecx,symbols_ex.size+symbols.size
314
	mov	ecx,symbols_ex.size+symbols.size
315
	mov	al,[esi]
315
	mov	al,[esi]
316
	dec	esi
316
	dec	esi
Line 321... Line 321...
321
	jmp	@f
321
	jmp	@f
322
  .nx2: dec	ebx
322
  .nx2: dec	ebx
323
	js	.exit.2
323
	js	.exit.2
324
	mov	ecx,ebx
324
	mov	ecx,ebx
325
	call	get_line_offset
325
	call	get_line_offset
326
	movzx	edx,word[esi]
326
	mov	edx,[esi+EDITOR_LINE_DATA.Size]
327
	dec	edx
327
	dec	edx
328
	jmp	.lp2
328
	jmp	.lp2
329
    @@:
329
    @@:
330
	inc	edx
330
	inc	edx
331
	mov	[cur_editor.Caret.Y],ebx
331
	mov	[cur_editor.Caret.Y],ebx
Line 365... Line 365...
365
	mov	ebx,[cur_editor.Caret.Y]
365
	mov	ebx,[cur_editor.Caret.Y]
366
	mov	edx,[cur_editor.Caret.X]
366
	mov	edx,[cur_editor.Caret.X]
367
	cld
367
	cld
368
  .lp1: mov	ecx,ebx
368
  .lp1: mov	ecx,ebx
369
	call	get_line_offset
369
	call	get_line_offset
370
	movzx	ecx,word[esi]
370
	mov	ecx,[esi+EDITOR_LINE_DATA.Size]
371
	cmp	edx,ecx
371
	cmp	edx,ecx
372
	jge	.nx1
372
	jge	.nx1
373
	add	esi,4
373
	add	esi,sizeof.EDITOR_LINE_DATA
374
	add	esi,edx
374
	add	esi,edx
375
	sub	ecx,edx
375
	sub	ecx,edx
376
    @@: push	ecx
376
    @@: push	ecx
377
	mov	edi,symbols_ex
377
	mov	edi,symbols_ex
378
	mov	ecx,symbols_ex.size+symbols.size
378
	mov	ecx,symbols_ex.size+symbols.size
Line 390... Line 390...
390
	jmp	.lp1
390
	jmp	.lp1
391
    @@:
391
    @@:
Line 392... Line 392...
392
 
392
 
393
  .lp2: mov	ecx,ebx
393
  .lp2: mov	ecx,ebx
394
	call	get_line_offset
394
	call	get_line_offset
395
	movzx	ecx,word[esi]
395
	mov	ecx,[esi+EDITOR_LINE_DATA.Size]
396
	cmp	edx,ecx
396
	cmp	edx,ecx
397
	jge	.nx2
397
	jge	.nx2
398
	add	esi,4
398
	add	esi,sizeof.EDITOR_LINE_DATA
399
	add	esi,edx
399
	add	esi,edx
400
	sub	ecx,edx
400
	sub	ecx,edx
401
    @@: push	ecx
401
    @@: push	ecx
402
	mov	edi,symbols_ex
402
	mov	edi,symbols_ex
Line 475... Line 475...
475
	call	get_real_length
475
	call	get_real_length
476
	sub	eax,[sel.begin.x]
476
	sub	eax,[sel.begin.x]
477
	jge	@f
477
	jge	@f
478
	xor	eax,eax
478
	xor	eax,eax
479
    @@: add	esi,[sel.begin.x]
479
    @@: add	esi,[sel.begin.x]
480
	add	esi,4
480
	add	esi,sizeof.EDITOR_LINE_DATA
-
 
481
	mov	[edi+EDITOR_LINE_DATA.Size],eax
481
	stosd
482
	add	edi,sizeof.EDITOR_LINE_DATA
482
	mov	ecx,eax
483
	mov	ecx,eax
483
	jecxz	@f
484
	jecxz	@f
484
	rep	movsb
485
	rep	movsb
485
    @@: mov	ecx,[sel.end.y]
486
    @@: mov	ecx,[sel.end.y]
486
	call	get_line_offset
487
	call	get_line_offset
Line 492... Line 493...
492
	sub	eax,esi
493
	sub	eax,esi
493
	mov	ecx,eax
494
	mov	ecx,eax
494
	rep	movsb
495
	rep	movsb
495
	mov	ecx,[sel.end.y]
496
	mov	ecx,[sel.end.y]
496
    @@: call	get_line_offset
497
    @@: call	get_line_offset
497
	movzx	eax,word[esi]
498
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
498
	add	esi,4
499
	add	esi,sizeof.EDITOR_LINE_DATA
499
	cmp	eax,[sel.end.x]
500
	cmp	eax,[sel.end.x]
500
	jle	@f
501
	jle	@f
501
	mov	eax,[sel.end.x]
502
	mov	eax,[sel.end.x]
502
    @@: mov	ebx,edi
503
    @@: mov	ebx,edi
-
 
504
	mov	[edi+EDITOR_LINE_DATA.Size],eax
503
	stosd
505
	add	edi,sizeof.EDITOR_LINE_DATA
504
	mov	ecx,eax
506
	mov	ecx,eax
505
	jecxz	@f
507
	jecxz	@f
506
	rep	movsb
508
	rep	movsb
507
	sub	eax,[sel.end.x]
509
	sub	eax,[sel.end.x]
508
	jz	@f
510
	jz	@f
Line 522... Line 524...
522
 
524
 
523
  .single_line:
525
  .single_line:
524
	mov	eax,[sel.end.x]
526
	mov	eax,[sel.end.x]
525
	sub	eax,[sel.begin.x]
527
	sub	eax,[sel.begin.x]
-
 
528
	mov	edi,[copy_buf]
526
	mov	edi,[copy_buf]
529
	mov	[edi+EDITOR_LINE_DATA.Size],eax
527
	stosd
530
	add	edi,sizeof.EDITOR_LINE_DATA
528
	mov	ecx,[sel.begin.y]
531
	mov	ecx,[sel.begin.y]
529
	call	get_line_offset
532
	call	get_line_offset
530
	mov	ebx,[sel.begin.x]
533
	mov	ebx,[sel.begin.x]
531
	mov	ecx,[sel.end.x]
534
	mov	ecx,[sel.end.x]
532
	cmp	ebx,[esi]
535
	cmp	ebx,[esi+EDITOR_LINE_DATA.Size]
533
	jge	.add_spaces
536
	jge	.add_spaces
534
	cmp	ecx,[esi]
537
	cmp	ecx,[esi+EDITOR_LINE_DATA.Size]
535
	jle	.lp1
538
	jle	.lp1
536
	mov	ecx,[esi]
539
	mov	ecx,[esi+EDITOR_LINE_DATA.Size]
537
  .lp1: sub	ecx,[sel.begin.x]
540
  .lp1: sub	ecx,[sel.begin.x]
538
	sub	eax,ecx
541
	sub	eax,ecx
539
	lea	esi,[esi+ebx+4]
542
	lea	esi,[esi+ebx+sizeof.EDITOR_LINE_DATA]
Line 540... Line 543...
540
	rep	movsb
543
	rep	movsb
541
 
544
 
542
  .add_spaces:
545
  .add_spaces:
Line 563... Line 566...
563
	stdcall mem.ReAlloc,[cur_editor.Lines],ebx
566
	stdcall mem.ReAlloc,[cur_editor.Lines],ebx
564
	mov	[cur_editor.Lines],eax
567
	mov	[cur_editor.Lines],eax
Line 565... Line 568...
565
 
568
 
566
	mov	ecx,[cur_editor.Caret.Y]
569
	mov	ecx,[cur_editor.Caret.Y]
567
	call	get_line_offset
570
	call	get_line_offset
568
	pushd	[esi] esi
571
	pushd	[esi+EDITOR_LINE_DATA.Size] esi
569
	mov	ecx,[cur_editor.Caret.X]
572
	mov	ecx,[cur_editor.Caret.X]
570
	call	line_add_spaces
573
	call	line_add_spaces
571
	add	[esp],eax
574
	add	[esp],eax
572
	add	esi,eax
575
	add	esi,eax
573
	mov	ecx,[copy_size]
576
	mov	ecx,[copy_size]
574
	sub	ecx,4
577
	sub	ecx,sizeof.EDITOR_LINE_DATA
575
	mov	edi,[cur_editor.Lines]
578
	mov	edi,[cur_editor.Lines]
576
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
579
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
577
	dec	edi
580
	dec	edi
578
	mov	eax,esi
581
	mov	eax,esi
579
	mov	esi,edi
582
	mov	esi,edi
580
	sub	esi,ecx
583
	sub	esi,ecx
581
	lea	ecx,[eax+4]
584
	lea	ecx,[eax+sizeof.EDITOR_LINE_DATA]
582
	add	ecx,[cur_editor.Caret.X]
585
	add	ecx,[cur_editor.Caret.X]
583
	neg	ecx
586
	neg	ecx
584
	lea	ecx,[esi+ecx+1]
587
	lea	ecx,[esi+ecx+1]
585
	std
588
	std
Line 589... Line 592...
589
	dec	ecx
592
	dec	ecx
590
	jz	.single_line
593
	jz	.single_line
Line 591... Line 594...
591
 
594
 
592
	cld
595
	cld
593
	pop	edi
596
	pop	edi
594
	add	edi,4
597
	add	edi,sizeof.EDITOR_LINE_DATA
-
 
598
	mov	esi,[copy_buf]
595
	mov	esi,[copy_buf]
599
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
Line 596... Line 600...
596
	lodsd
600
	add	esi,sizeof.EDITOR_LINE_DATA
597
 
601
 
598
	mov	ebx,[cur_editor.Caret.X]
602
	mov	ebx,[cur_editor.Caret.X]
599
	add	eax,ebx
603
	add	eax,ebx
600
	mov	[edi-4],ax
604
	mov	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax
601
	mov	byte[edi-4+2],0x0001
605
	mov	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
602
	sub	eax,ebx
606
	sub	eax,ebx
603
	call	.check_columns
607
	call	.check_columns
604
	add	edi,ebx
608
	add	edi,ebx
605
    @@: push	ecx
609
    @@: push	ecx
606
	mov	ecx,eax
610
	mov	ecx,eax
607
	rep	movsb
611
	rep	movsb
608
	lodsd
612
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
-
 
613
	add	esi,sizeof.EDITOR_LINE_DATA
609
	and	eax,0x0000FFFF
614
	mov	[edi+EDITOR_LINE_DATA.Size],eax
610
	stosd
615
	mov	[edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
611
	mov	byte[edi-4+2],0x0001
616
	add	edi,sizeof.EDITOR_LINE_DATA
Line 612... Line 617...
612
	pop	ecx
617
	pop	ecx
613
	loop	@b
618
	loop	@b
614
 
619
 
615
	pop	ecx
620
	pop	ecx
616
	sub	ecx,ebx
621
	sub	ecx,ebx
617
	add	[edi-4],cx
622
	add	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],ecx
Line 618... Line 623...
618
	call	.check_columns
623
	call	.check_columns
Line 631... Line 636...
631
	jmp	.exit
636
	jmp	.exit
Line 632... Line 637...
632
 
637
 
633
  .single_line:
638
  .single_line:
634
	cld
639
	cld
635
	pop	edi
640
	pop	edi
636
	add	edi,4
641
	add	edi,sizeof.EDITOR_LINE_DATA
637
	mov	esi,[copy_buf]
-
 
638
	lodsd
642
	mov	esi,[copy_buf]
639
	add	[edi-4],ax
643
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
640
	and	dword[edi-4],not 0x00020000
644
	add	esi,sizeof.EDITOR_LINE_DATA
-
 
645
	add	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax
-
 
646
	and	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
641
	or	dword[edi-4],0x00010000
647
	or	[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
642
	call	.check_columns
648
	call	.check_columns
643
	add	edi,[cur_editor.Caret.X]
649
	add	edi,[cur_editor.Caret.X]
644
	add	esp,4
650
	add	esp,4
645
	mov	ecx,eax
651
	mov	ecx,eax
Line 653... Line 659...
653
  .exit:
659
  .exit:
654
	ret
660
	ret
Line 655... Line 661...
655
 
661
 
656
  .check_columns:
662
  .check_columns:
657
	push	eax
663
	push	eax
658
	movzx	eax,word[edi-4]
664
	mov	eax,[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size]
659
	cmp	eax,[cur_editor.Columns.Count]
665
	cmp	eax,[cur_editor.Columns.Count]
660
	jbe	@f
666
	jbe	@f
661
	mov	[cur_editor.Columns.Count],eax
667
	mov	[cur_editor.Columns.Count],eax
662
    @@: pop	eax
668
    @@: pop	eax
663
	ret
669
	ret
Line 664... Line 670...
664
endp
670
endp
665
 
671
 
666
;-----------------------------------------------------------------------------
672
;-----------------------------------------------------------------------------
667
proc key.ctrl_d ;///// INSERT SEPARATOR //////////////////////////////////////
673
proc key.ctrl_d ;///// INSERT SEPARATOR //////////////////////////////////////
668
;-----------------------------------------------------------------------------
674
;-----------------------------------------------------------------------------
Line 669... Line 675...
669
	mov	eax,94
675
	mov	eax,90+sizeof.EDITOR_LINE_DATA
670
	call	editor_realloc_lines
676
	call	editor_realloc_lines
671
 
677
 
Line 672... Line 678...
672
	mov	ecx,[cur_editor.Caret.Y]
678
	mov	ecx,[cur_editor.Caret.Y]
673
	call	get_line_offset
679
	call	get_line_offset
674
	mov	ebx,esi
680
	mov	ebx,esi
675
 
681
 
676
	mov	ecx,[cur_editor.Lines.Count]
682
	mov	ecx,[cur_editor.Lines.Count]
677
	call	get_line_offset
683
	call	get_line_offset
678
	lea	edi,[esi+90+4]
684
	lea	edi,[esi+90+sizeof.EDITOR_LINE_DATA]
Line 679... Line 685...
679
	lea	ecx,[esi+4]
685
	lea	ecx,[esi+sizeof.EDITOR_LINE_DATA]
680
	sub	ecx,ebx
686
	sub	ecx,ebx
681
	std
687
	std
682
	rep	movsb
688
	rep	movsb
683
 
689
 
684
	lea	edi,[ebx+5]
690
	lea	edi,[ebx+sizeof.EDITOR_LINE_DATA+1]
685
	mov	word[ebx],90
691
	mov	[ebx+EDITOR_LINE_DATA.Size],90
686
	mov	al,ASEPC
692
	mov	al,ASEPC
687
	mov	ecx,79
693
	mov	ecx,79
688
	cld
694
	cld
Line 689... Line 695...
689
	rep	stosb
695
	rep	stosb
690
	mov	al,' '
696
	mov	al,' '
691
	mov	ecx,10
697
	mov	ecx,10
Line 711... Line 717...
711
	jge	.exit
717
	jge	.exit
Line 712... Line 718...
712
 
718
 
713
	mov	ecx,[cur_editor.Caret.Y]
719
	mov	ecx,[cur_editor.Caret.Y]
714
	call	get_line_offset
720
	call	get_line_offset
715
	mov	edi,esi
-
 
716
	lodsd
721
	mov	edi,esi
717
	and	eax,0x0000FFFF
722
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
718
	add	esi,eax
723
	lea	esi,[esi+eax+sizeof.EDITOR_LINE_DATA]
Line 719... Line 724...
719
	push	eax
724
	push	eax
720
 
725
 
721
	dec	[cur_editor.Lines.Count]
726
	dec	[cur_editor.Lines.Count]
Line 725... Line 730...
725
	shr	ecx,2
730
	shr	ecx,2
726
	cld
731
	cld
727
	rep	movsd
732
	rep	movsd
Line 728... Line 733...
728
 
733
 
729
	pop	eax
734
	pop	eax
730
	add	eax,4
735
	add	eax,sizeof.EDITOR_LINE_DATA
731
	neg	eax
736
	neg	eax
Line 732... Line 737...
732
	call	editor_realloc_lines
737
	call	editor_realloc_lines
733
 
738
 
Line 1031... Line 1036...
1031
	call	delete_selection
1036
	call	delete_selection
1032
	jnc	.exit
1037
	jnc	.exit
Line 1033... Line 1038...
1033
 
1038
 
1034
	mov	ecx,[cur_editor.Caret.Y]
1039
	mov	ecx,[cur_editor.Caret.Y]
1035
	call	get_line_offset
1040
	call	get_line_offset
1036
	and	dword[esi],not 0x00020000
1041
	and	[esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
1037
	or	dword[esi],0x00010000
1042
	or	[esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
1038
	lea	ebx,[esi+4]
1043
	lea	ebx,[esi+sizeof.EDITOR_LINE_DATA]
Line 1039... Line 1044...
1039
	mov	ebp,esi
1044
	mov	ebp,esi
1040
 
1045
 
1041
	call	get_real_length
1046
	call	get_real_length
Line 1045... Line 1050...
1045
	mov	ecx,[cur_editor.Caret.X]
1050
	mov	ecx,[cur_editor.Caret.X]
1046
	cmp	ecx,eax
1051
	cmp	ecx,eax
1047
	jae	.line_up
1052
	jae	.line_up
1048
	lea	edi,[ebx+ecx]
1053
	lea	edi,[ebx+ecx]
1049
	neg	ecx
1054
	neg	ecx
1050
	movzx	eax,word[ebp]
1055
	mov	eax,[ebp+EDITOR_LINE_DATA.Size]
1051
	add	ecx,eax;[ebp]
1056
	add	ecx,eax;[ebp]
1052
	repe	scasb
1057
	repe	scasb
1053
	je	.line_up
1058
	je	.line_up
Line 1054... Line 1059...
1054
 
1059
 
1055
	mov	edi,ebx
1060
	mov	edi,ebx
1056
	mov	ecx,[cur_editor.Caret.X]
1061
	mov	ecx,[cur_editor.Caret.X]
1057
	add	edi,ecx
1062
	add	edi,ecx
1058
	lea	esi,[edi+1]
1063
	lea	esi,[edi+1]
1059
	neg	ecx
1064
	neg	ecx
1060
	movzx	eax,word[ebp]
1065
	mov	eax,[ebp+EDITOR_LINE_DATA.Size]
1061
	add	ecx,eax;[ebp]
1066
	add	ecx,eax;[ebp]
1062
	dec	ecx
1067
	dec	ecx
1063
	rep	movsb
1068
	rep	movsb
Line 1072... Line 1077...
1072
	mov	eax,[cur_editor.Lines.Count]
1077
	mov	eax,[cur_editor.Lines.Count]
1073
	dec	eax
1078
	dec	eax
1074
	cmp	eax,[cur_editor.Caret.Y]
1079
	cmp	eax,[cur_editor.Caret.Y]
1075
	je	.exit
1080
	je	.exit
1076
	mov	edi,[temp_buf]
1081
	mov	edi,[temp_buf]
1077
	add	edi,4
1082
	add	edi,sizeof.EDITOR_LINE_DATA
1078
	mov	esi,ebx
1083
	mov	esi,ebx
1079
	mov	ecx,[cur_editor.Caret.X]
1084
	mov	ecx,[cur_editor.Caret.X]
1080
	rep	movsb
1085
	rep	movsb
1081
	mov	ecx,[cur_editor.Caret.X]
1086
	mov	ecx,[cur_editor.Caret.X]
1082
	mov	eax,[temp_buf]
1087
	mov	eax,[temp_buf]
1083
	mov	[eax],ecx
1088
	mov	[eax+EDITOR_LINE_DATA.Size],ecx
1084
	cmp	cx,[ebp]
1089
	cmp	ecx,[ebp+EDITOR_LINE_DATA.Size]
1085
	jbe	@f
1090
	jbe	@f
1086
	movzx	eax,word[ebp]
1091
	mov	eax,[ebp+EDITOR_LINE_DATA.Size]
1087
	sub	ecx,eax
1092
	sub	ecx,eax
1088
	sub	edi,ecx
1093
	sub	edi,ecx
1089
	mov	al,' '
1094
	mov	al,' '
1090
	rep	stosb
1095
	rep	stosb
1091
    @@: lea	esi,[ebx+4]
1096
    @@: lea	esi,[ebx+sizeof.EDITOR_LINE_DATA]
1092
	movzx	eax,word[ebp]
1097
	mov	eax,[ebp+EDITOR_LINE_DATA.Size]
1093
	add	esi,eax
1098
	add	esi,eax
1094
	movzx	ecx,word[esi-4]
1099
	mov	ecx,[esi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size]
1095
	mov	eax,[temp_buf]
1100
	mov	eax,[temp_buf]
1096
	add	[eax],ecx
1101
	add	[eax+EDITOR_LINE_DATA.Size],ecx
1097
	or	dword[eax],0x00010000
1102
	or	[eax+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
1098
	rep	movsb
1103
	rep	movsb
Line 1099... Line 1104...
1099
 
1104
 
1100
	mov	ecx,edi
1105
	mov	ecx,edi
Line 1108... Line 1113...
1108
    @@:
1113
    @@:
1109
	push	ecx
1114
	push	ecx
1110
	mov	edi,[cur_editor.Lines]
1115
	mov	edi,[cur_editor.Lines]
1111
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
1116
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
1112
	dec	edi
1117
	dec	edi
1113
	lea	esi,[edi+8]
1118
	lea	esi,[edi+sizeof.EDITOR_LINE_DATA*2] ; !!! CHECK THIS !!!
1114
	sub	esi,ecx
1119
	sub	esi,ecx
1115
	movzx	eax,word[ebp]
1120
	mov	eax,[ebp+EDITOR_LINE_DATA.Size]
1116
	add	esi,eax
1121
	add	esi,eax
1117
	movzx	eax,word[ebp]
-
 
1118
	movzx	eax,word[ebp+eax+4]
1122
	mov	eax,[ebp+eax+sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size]
1119
	add	esi,eax
1123
	add	esi,eax
1120
	lea	ecx,[esi-4]
1124
	lea	ecx,[esi-sizeof.EDITOR_LINE_DATA]
1121
	sub	ecx,ebp
1125
	sub	ecx,ebp
1122
	std
1126
	std
1123
	cmp	esi,edi
1127
	cmp	esi,edi
1124
	jb	@f
1128
	jb	@f
1125
	jz	.lp1
1129
	jz	.lp1
1126
	mov	edi,ebp
1130
	mov	edi,ebp
1127
	add	edi,[esp]
1131
	add	edi,[esp]
1128
	lea	esi,[ebp+8]
1132
	lea	esi,[ebp+sizeof.EDITOR_LINE_DATA*2] ; !!! CHECK THIS !!!
1129
	movzx	eax,word[esi-8]
1133
	mov	eax,[esi-sizeof.EDITOR_LINE_DATA*2+EDITOR_LINE_DATA.Size] ; !!! CHECK THIS !!!
1130
	add	esi,eax
1134
	add	esi,eax
1131
	movzx	eax,word[esi-4]
1135
	mov	eax,[esi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] ; !!! CHECK THIS !!!
1132
	add	esi,eax
1136
	add	esi,eax
1133
	mov	ecx,[cur_editor.Lines]
1137
	mov	ecx,[cur_editor.Lines]
1134
	add	ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4]
1138
	add	ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4]
1135
	sub	ecx,esi
1139
	sub	ecx,esi
1136
	cld
1140
	cld
Line 1151... Line 1155...
1151
    @@: m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
1155
    @@: m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
1152
	m2m	[cur_editor.SelStart.Y],[cur_editor.Caret.Y]
1156
	m2m	[cur_editor.SelStart.Y],[cur_editor.Caret.Y]
Line 1153... Line 1157...
1153
 
1157
 
1154
	mov	ecx,[cur_editor.Lines.Count]
1158
	mov	ecx,[cur_editor.Lines.Count]
1155
	call	get_line_offset
1159
	call	get_line_offset
1156
	movzx	eax,word[esi]
1160
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
1157
	lea	esi,[esi+eax+4]
1161
	lea	esi,[esi+eax+sizeof.EDITOR_LINE_DATA]
1158
	mov	eax,[cur_editor.Lines]
1162
	mov	eax,[cur_editor.Lines]
1159
	add	eax,[cur_editor.Lines.Size] ;*** add eax,[eax-4]
1163
	add	eax,[cur_editor.Lines.Size] ;*** add eax,[eax-4]
1160
	sub	esi,eax
1164
	sub	esi,eax
1161
	lea	eax,[esi+4096]
1165
	lea	eax,[esi+4096]
Line 1189... Line 1193...
1189
	js	.line_up
1193
	js	.line_up
Line 1190... Line 1194...
1190
 
1194
 
1191
	dec	[cur_editor.Caret.X]
1195
	dec	[cur_editor.Caret.X]
1192
	mov	ecx,[cur_editor.Caret.Y]
1196
	mov	ecx,[cur_editor.Caret.Y]
1193
	call	get_line_offset
1197
	call	get_line_offset
1194
	and	dword[esi],not 0x00020000
1198
	and	[esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
Line 1195... Line 1199...
1195
	or	dword[esi],0x00010000
1199
	or	[esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
1196
 
1200
 
1197
	mov	ebx,eax
1201
	mov	ebx,eax
1198
	call	get_real_length
1202
	call	get_real_length
1199
	cmp	eax,[cur_editor.Caret.X]
1203
	cmp	eax,[cur_editor.Caret.X]
1200
	jae	@f
1204
	jae	@f
1201
	m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
1205
	m2m	[cur_editor.SelStart.X],[cur_editor.Caret.X]
Line 1202... Line 1206...
1202
	mov	[cur_editor.Modified],1
1206
	mov	[cur_editor.Modified],1
1203
	ret
1207
	ret
1204
 
1208
 
1205
    @@: lea	edi,[esi+4+ebx]
1209
    @@: lea	edi,[esi+sizeof.EDITOR_LINE_DATA+ebx]
1206
	mov	ecx,ebx
1210
	mov	ecx,ebx
1207
	neg	ecx
1211
	neg	ecx
1208
	movzx	eax,word[esi]
1212
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
1209
	add	ecx,eax
1213
	add	ecx,eax
1210
	dec	ecx
1214
	dec	ecx
Line 1223... Line 1227...
1223
	jne	@f
1227
	jne	@f
1224
	ret
1228
	ret
1225
    @@: mov	ecx,[cur_editor.Caret.Y]
1229
    @@: mov	ecx,[cur_editor.Caret.Y]
1226
	dec	ecx
1230
	dec	ecx
1227
	call	get_line_offset
1231
	call	get_line_offset
1228
	and	dword[esi],not 0x00020000
1232
	and	[esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
1229
	or	dword[esi],0x00010000
1233
	or	[esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
Line 1230... Line 1234...
1230
 
1234
 
1231
	mov	ebp,esi
1235
	mov	ebp,esi
1232
	lea	ebx,[esi+4]
1236
	lea	ebx,[esi+sizeof.EDITOR_LINE_DATA]
1233
	movzx	ecx,word[ebp]
1237
	mov	ecx,[ebp+EDITOR_LINE_DATA.Size]
1234
    @@: cmp	byte[ebx+ecx-1],' '
1238
    @@: cmp	byte[ebx+ecx-1],' '
1235
	jne	@f
1239
	jne	@f
1236
	dec	ecx
1240
	dec	ecx
1237
	jg	@b
1241
	jg	@b
Line 1256... Line 1260...
1256
	push	eax
1260
	push	eax
1257
	call	editor_realloc_lines
1261
	call	editor_realloc_lines
1258
	pop	eax
1262
	pop	eax
1259
	mov	ecx,[cur_editor.Caret.Y]
1263
	mov	ecx,[cur_editor.Caret.Y]
1260
	call	get_line_offset
1264
	call	get_line_offset
1261
	and	dword[esi],not 0x00020000
1265
	and	[esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
1262
	or	dword[esi],0x00010000
1266
	or	[esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
Line 1263... Line 1267...
1263
 
1267
 
Line 1264... Line 1268...
1264
	xchg	eax,ecx
1268
	xchg	eax,ecx
1265
 
1269
 
1266
	call	get_real_length
1270
	call	get_real_length
1267
	cmp	eax,[cur_editor.Caret.X]
1271
	cmp	eax,[cur_editor.Caret.X]
1268
	jae	@f
1272
	jae	@f
1269
	mov	eax,[cur_editor.Caret.X]
1273
	mov	eax,[cur_editor.Caret.X]
1270
    @@: movzx	edx,word[esi]
1274
    @@: mov	edx,[esi+EDITOR_LINE_DATA.Size]
1271
	sub	edx,eax
1275
	sub	edx,eax
1272
	cmp	ecx,edx
1276
	cmp	ecx,edx
1273
	jl	@f
1277
	jl	@f
Line 1280... Line 1284...
1280
	mov	ecx,[cur_editor.Lines]
1284
	mov	ecx,[cur_editor.Lines]
1281
	add	ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4]
1285
	add	ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4]
1282
	dec	ecx
1286
	dec	ecx
1283
	mov	edi,ecx
1287
	mov	edi,ecx
1284
	add	ecx,-10+1
1288
	add	ecx,-10+1
1285
	movzx	eax,word[esi]
1289
	mov	eax,[esi+EDITOR_LINE_DATA.Size]
1286
	lea	eax,[esi+eax+4]
1290
	lea	eax,[esi+eax+sizeof.EDITOR_LINE_DATA]
1287
	sub	ecx,eax
1291
	sub	ecx,eax
1288
	lea	esi,[edi-10]
1292
	lea	esi,[edi-10]
1289
	std
1293
	std
1290
	rep	movsb
1294
	rep	movsb
1291
	mov	ecx,10
1295
	mov	ecx,10
1292
	mov	al,' '
1296
	mov	al,' '
1293
	rep	stosb
1297
	rep	stosb
1294
	popad
1298
	popad
1295
	add	word[esi],10
1299
	add	[esi+EDITOR_LINE_DATA.Size],10
1296
	jmp	@b
1300
	jmp	@b
1297
    @@: lea	ebx,[esi+4]
1301
    @@: lea	ebx,[esi+sizeof.EDITOR_LINE_DATA]
1298
	push	ecx
1302
	push	ecx
1299
	movzx	edi,word[esi]
1303
	mov	edi,[esi+EDITOR_LINE_DATA.Size]
1300
	lea	edi,[ebx+edi-1]
1304
	lea	edi,[ebx+edi-1]
1301
	mov	esi,edi
1305
	mov	esi,edi
1302
	sub	esi,ecx
1306
	sub	esi,ecx
1303
	lea	ecx,[esi+1]
1307
	lea	ecx,[esi+1]
1304
	sub	ecx,ebx
1308
	sub	ecx,ebx
Line 1308... Line 1312...
1308
  .ok:	pop	ecx
1312
  .ok:	pop	ecx
1309
	pop	eax
1313
	pop	eax
1310
	rep	stosb
1314
	rep	stosb
1311
	cld
1315
	cld
1312
	pop	[cur_editor.Caret.X]
1316
	pop	[cur_editor.Caret.X]
1313
	lea	esi,[ebx-4]
1317
	lea	esi,[ebx-sizeof.EDITOR_LINE_DATA]
1314
	call	get_real_length
1318
	call	get_real_length
1315
	cmp	eax,[cur_editor.Caret.X]
1319
	cmp	eax,[cur_editor.Caret.X]
1316
	jae	@f
1320
	jae	@f
1317
	mov	eax,[cur_editor.Caret.X]
1321
	mov	eax,[cur_editor.Caret.X]
1318
    @@: cmp	eax,[cur_editor.Columns.Count]
1322
    @@: cmp	eax,[cur_editor.Columns.Count]
Line 1336... Line 1340...
1336
 
1340
 
1337
	mov	ecx,[cur_editor.Caret.Y]
1341
	mov	ecx,[cur_editor.Caret.Y]
Line 1338... Line 1342...
1338
	call	get_line_offset
1342
	call	get_line_offset
1339
 
1343
 
1340
	mov	ebx,[cur_editor.Caret.X]
1344
	mov	ebx,[cur_editor.Caret.X]
1341
	cmp	bx,[esi]
1345
	cmp	ebx,[esi+EDITOR_LINE_DATA.Size]
1342
	jb	@f
1346
	jb	@f
1343
	movzx	ebx,word[esi]
1347
	mov	ebx,[esi+EDITOR_LINE_DATA.Size]
1344
	dec	ebx
1348
	dec	ebx
1345
	jns	@f
1349
	jns	@f
1346
	xor	ebx,ebx
1350
	xor	ebx,ebx
Line 1350... Line 1354...
1350
	mov	edi,[temp_buf]
1354
	mov	edi,[temp_buf]
1351
	mov	ebp,esi
1355
	mov	ebp,esi
1352
	lea	ecx,[ebx+1]
1356
	lea	ecx,[ebx+1]
1353
    @@: dec	ecx
1357
    @@: dec	ecx
1354
	jz	@f
1358
	jz	@f
1355
	cmp	byte[esi+ecx+4-1],' '
1359
	cmp	byte[esi+ecx+sizeof.EDITOR_LINE_DATA-1],' '
1356
	je	@b
1360
	je	@b
1357
    @@: lea	eax,[ecx+10]
1361
    @@: lea	eax,[ecx+10]
1358
	or	eax,0x00010000
1362
	mov	[edi+EDITOR_LINE_DATA.Size],eax
-
 
1363
	mov	[edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
1359
	stosd
1364
	add	edi,sizeof.EDITOR_LINE_DATA
1360
	jecxz	@f
1365
	jecxz	@f
1361
	push	esi
1366
	push	esi
1362
	add	esi,4
1367
	add	esi,sizeof.EDITOR_LINE_DATA
1363
	rep	movsb
1368
	rep	movsb
1364
	pop	esi
1369
	pop	esi
1365
    @@: mov	al,' '
1370
    @@: mov	al,' '
1366
	mov	ecx,10
1371
	mov	ecx,10
1367
	rep	stosb
1372
	rep	stosb
Line 1368... Line 1373...
1368
 
1373
 
1369
	movzx	ecx,word[esi]
1374
	mov	ecx,[esi+EDITOR_LINE_DATA.Size]
1370
	sub	ecx,ebx
1375
	sub	ecx,ebx
1371
	add	esi,ebx
1376
	add	esi,ebx
1372
	add	esi,4
1377
	add	esi,sizeof.EDITOR_LINE_DATA
1373
	inc	ecx
1378
	inc	ecx
1374
    @@: dec	ecx
1379
    @@: dec	ecx
1375
	jz	@f
1380
	jz	@f
1376
	cmp	byte[esi+ecx-1],' '
1381
	cmp	byte[esi+ecx-1],' '
1377
	je	@b
1382
	je	@b
1378
    @@: jz	.lp1
1383
    @@: jz	.lp1
1379
    @@: cmp	byte[esi],' '
1384
    @@: cmp	byte[esi],' '
1380
	jne	.lp1
1385
	jne	.lp1
1381
	inc	esi
1386
	inc	esi
1382
	loop	@b
1387
	loop	@b
1383
  .lp1: test	[options],OPTS_AUTOINDENT
1388
  .lp1: test	[auto_indent],1
1384
	jz	.lp2
1389
	jz	.lp2
1385
	push	edi ecx
1390
	push	edi ecx
1386
	movzx	ecx,word[ebp]
1391
	mov	ecx,[ebp+EDITOR_LINE_DATA.Size]
1387
	lea	edi,[ebp+4]
1392
	lea	edi,[ebp+sizeof.EDITOR_LINE_DATA]
1388
	mov	al,' '
1393
	mov	al,' '
1389
	repe	scasb
1394
	repe	scasb
1390
	mov	eax,ecx
1395
	mov	eax,ecx
1391
	pop	ecx edi
1396
	pop	ecx edi
1392
	je	.lp2
1397
	je	.lp2
1393
	neg	eax
1398
	neg	eax
1394
	movzx	edx,word[ebp]
1399
	mov	edx,[ebp+EDITOR_LINE_DATA.Size]
1395
	add	eax,edx;[ebp]
1400
	add	eax,edx;[ebp]
1396
	dec	eax
1401
	dec	eax
1397
	jmp	@f
1402
	jmp	@f
1398
  .lp2: xor	eax,eax
1403
  .lp2: xor	eax,eax
1399
    @@: mov	edx,edi
1404
    @@: mov	edx,edi
1400
	add	edi,4
1405
	add	edi,sizeof.EDITOR_LINE_DATA
1401
	mov	[cur_editor.Caret.X],eax
1406
	mov	[cur_editor.Caret.X],eax
1402
	jecxz	@f
1407
	jecxz	@f
1403
	push	ecx
1408
	push	ecx
1404
	mov	ecx,eax
1409
	mov	ecx,eax
Line 1409... Line 1414...
1409
	rep	movsb
1414
	rep	movsb
1410
    @@: mov	ecx,10
1415
    @@: mov	ecx,10
1411
	mov	al,' '
1416
	mov	al,' '
1412
	rep	stosb
1417
	rep	stosb
Line 1413... Line 1418...
1413
 
1418
 
1414
	lea	eax,[edi-4]
1419
	lea	eax,[edi-sizeof.EDITOR_LINE_DATA]
1415
	sub	eax,edx
1420
	sub	eax,edx
1416
	or	eax,0x00010000
1421
	mov	[edx+EDITOR_LINE_DATA.Size],eax
Line 1417... Line 1422...
1417
	mov	[edx],eax
1422
	mov	[edx+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
1418
 
1423
 
Line 1419... Line 1424...
1419
	mov	ecx,edi
1424
	mov	ecx,edi
1420
	sub	ecx,[temp_buf]
1425
	sub	ecx,[temp_buf]
1421
 
1426
 
1422
	push	ecx
1427
	push	ecx
1423
	mov	edi,[cur_editor.Lines]
1428
	mov	edi,[cur_editor.Lines]
1424
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
1429
	add	edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
1425
	dec	edi
1430
	dec	edi
1426
	lea	esi,[edi+4]
1431
	lea	esi,[edi+sizeof.EDITOR_LINE_DATA]
1427
	sub	esi,ecx
1432
	sub	esi,ecx
1428
	movzx	ecx,word[ebp]
1433
	mov	ecx,[ebp+EDITOR_LINE_DATA.Size]
1429
	add	esi,ecx
1434
	add	esi,ecx
1430
	lea	ecx,[esi-4]
1435
	lea	ecx,[esi-sizeof.EDITOR_LINE_DATA]
1431
	sub	ecx,ebp
1436
	sub	ecx,ebp
1432
	std
1437
	std
1433
	cmp	esi,edi
1438
	cmp	esi,edi
1434
	jb	@f
1439
	jb	@f
1435
	je	.lp3
1440
	je	.lp3
1436
	lea	esi,[ebp+4]
1441
	lea	esi,[ebp+sizeof.EDITOR_LINE_DATA]
1437
	mov	eax,[esp]
1442
	mov	eax,[esp]
1438
	lea	edi,[esi+eax-4]
1443
	lea	edi,[esi+eax-sizeof.EDITOR_LINE_DATA]
1439
	movzx	ecx,word[ebp]
1444
	mov	ecx,[ebp+EDITOR_LINE_DATA.Size]
1440
	add	esi,ecx
1445
	add	esi,ecx
1441
	mov	ecx,[cur_editor.Lines]
1446
	mov	ecx,[cur_editor.Lines]
Line 1591... Line 1596...
1591
	mov	eax,[tab_bar.Items.Count]
1596
	mov	eax,[tab_bar.Items.Count]
1592
	mov	[exit_tab_num],eax
1597
	mov	[exit_tab_num],eax
1593
  .direct:
1598
  .direct:
1594
	call	try_to_close_tabs
1599
	call	try_to_close_tabs
1595
	or	eax,eax
1600
	or	eax,eax
1596
	jz	.close
1601
	jz	@f
1597
	mov	[bot_mode2],2
1602
	mov	[bot_mode2],2
1598
	jmp	key.ctrl_o.direct
1603
	jmp	key.ctrl_o.direct
Line 1599... Line -...
1599
 
-
 
1600
  .close:
-
 
1601
	mov	esi,self_path
-
 
1602
	mov	byte[esi+PATHL-1],0
-
 
1603
	mov	edi,f_info.path
-
 
1604
	cld
1604
 
1605
    @@: lodsb
-
 
1606
	stosb
-
 
1607
	or	al,al
-
 
1608
	jnz	@b
-
 
1609
 
-
 
1610
	mov	[f_info70+0],2
-
 
1611
	mov	[f_info70+4],0
-
 
1612
	mov	[f_info70+8],0
-
 
1613
	mov	[f_info70+12],TINYPAD_END
-
 
1614
	mov	[f_info70+16],0
-
 
1615
	mov	byte[f_info70+20],0
-
 
1616
	mov	[f_info70+21],f_info.path
-
 
Line -... Line 1605...
-
 
1605
    @@: stdcall save_settings
1617
	mcall	70,f_info70
1606
 
1618
 
1607
  .close:
1619
	mov	[main_closed],1
1608
	mov	[main_closed],1
Line 1620... Line 1609...
1620
	mcall	-1
1609
	mcall	-1