forked from KolibriOS/kolibrios
757 lines
15 KiB
NASM
757 lines
15 KiB
NASM
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
func draw_editor ;////////////////////////////////////////////////////////////
|
||
|
;-----------------------------------------------------------------------------
|
||
|
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left-2]
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Right]
|
||
|
sub bx,word[cur_tab.Editor.Bounds.Left]
|
||
|
inc ebx
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top-2]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Bottom]
|
||
|
sub cx,word[cur_tab.Editor.Bounds.Top]
|
||
|
inc ecx
|
||
|
mov edx,[cl_3d_inset]
|
||
|
call draw_framerect
|
||
|
@^
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left-2]
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Right]
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top-2]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Top]
|
||
|
mcall 38,,,[cl_3d_inset]
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Bottom-2]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Bottom]
|
||
|
mcall
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Left]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Top]
|
||
|
mcall
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Right-2]
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Right]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Top]
|
||
|
mcall
|
||
|
^@
|
||
|
mov [cur_tab.Editor.Gutter.Visible],0
|
||
|
test [options],OPTS_LINENUMS
|
||
|
jnz @f
|
||
|
xor eax,eax ;! mov eax,2+LCHGW
|
||
|
jmp .lp1
|
||
|
@@: inc [cur_tab.Editor.Gutter.Visible]
|
||
|
mov edi,p_info+100
|
||
|
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
|
||
|
mov ecx,10
|
||
|
call uint2str
|
||
|
lea eax,[edi-p_info-100]
|
||
|
cmp eax,3
|
||
|
jae @f
|
||
|
mov eax,3
|
||
|
@@: imul eax,6
|
||
|
add eax,8
|
||
|
.lp1: mov [cur_tab.Editor.Gutter.Width],eax ;! [left_ofs],eax
|
||
|
mov [left_ofs],eax
|
||
|
|
||
|
call draw_editor_gutter
|
||
|
call draw_editor_vscroll
|
||
|
call draw_editor_hscroll
|
||
|
call draw_editor_text
|
||
|
call draw_editor_caret
|
||
|
|
||
|
ret
|
||
|
endf
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
func draw_editor_gutter ;/////////////////////////////////////////////////////
|
||
|
;-----------------------------------------------------------------------------
|
||
|
cmp [cur_tab.Editor.Gutter.Visible],0
|
||
|
je .exit
|
||
|
|
||
|
add esp,-4*8*2
|
||
|
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left-2]
|
||
|
mov bx,word[cur_tab.Editor.Gutter.Width]
|
||
|
add ebx,0x00010000
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top-2]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Bottom]
|
||
|
sub cx,word[cur_tab.Editor.Bounds.Top]
|
||
|
add cx,-SCRLW
|
||
|
add ecx,0x00010000
|
||
|
dec cx
|
||
|
mcall 13,,,[cl_3d_normal]
|
||
|
|
||
|
add bx,word[cur_tab.Editor.Bounds.Left]
|
||
|
push bx
|
||
|
shl ebx,16
|
||
|
pop bx
|
||
|
add ecx,[cur_tab.Editor.Bounds.Top]
|
||
|
mcall 38,,,[cl_3d_inset]
|
||
|
|
||
|
add ebx,-2*65536
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Top]
|
||
|
add bx,3
|
||
|
mov edi,[sc.work_text]
|
||
|
mov ecx,[cur_tab.Editor.TopLeft.Y]
|
||
|
inc ecx
|
||
|
mov edx,p_info+100
|
||
|
@@: pushad
|
||
|
push eax edx edi
|
||
|
mov eax,ecx
|
||
|
mov ecx,10
|
||
|
mov edi,edx
|
||
|
call uint2str
|
||
|
mov esi,edi
|
||
|
pop edi edx eax
|
||
|
sub esi,edx
|
||
|
imul eax,esi,6*65536
|
||
|
sub ebx,eax
|
||
|
mcall 4,,edi
|
||
|
popad
|
||
|
add ebx,LINEH
|
||
|
inc ecx
|
||
|
cmp ecx,[cur_tab.Editor.Lines]
|
||
|
jg @f
|
||
|
mov esi,ecx
|
||
|
sub esi,[cur_tab.Editor.TopLeft.Y]
|
||
|
cmp esi,[lines.scr]
|
||
|
jbe @b
|
||
|
@@: add esp,4*8*2
|
||
|
|
||
|
.exit:
|
||
|
ret
|
||
|
endf
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
func draw_editor_vscroll ;////////////////////////////////////////////////////
|
||
|
;-----------------------------------------------------------------------------
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Right]
|
||
|
shl ebx,16
|
||
|
add ebx,(-SCRLW)*65536+SCRLW
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top-2]
|
||
|
mov cx,SCRLW
|
||
|
mcall 8,,,'UP' or 0x40000000
|
||
|
pushad
|
||
|
sar ebx,16
|
||
|
sar ecx,16
|
||
|
push ebx ecx SCRLW SCRLW
|
||
|
call draw_3d_panel
|
||
|
popad
|
||
|
mov eax,8
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
|
||
|
pushad
|
||
|
push 0x18
|
||
|
shr ecx,16
|
||
|
mov bx,cx
|
||
|
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3
|
||
|
mcall 4,,[sc.work_text],esp,1
|
||
|
add esp,4
|
||
|
popad
|
||
|
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Bottom]
|
||
|
shl ecx,16
|
||
|
add ecx,(-SCRLW*2)*65536+SCRLW
|
||
|
mcall ,,,'DN' or 0x40000000
|
||
|
pushad
|
||
|
sar ebx,16
|
||
|
sar ecx,16
|
||
|
push ebx ecx SCRLW SCRLW
|
||
|
call draw_3d_panel
|
||
|
popad
|
||
|
mov eax,8
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
|
||
|
pushad
|
||
|
push 0x19
|
||
|
shr ecx,16
|
||
|
mov bx,cx
|
||
|
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3
|
||
|
mcall 4,,[sc.work_text],esp,1
|
||
|
add esp,4
|
||
|
popad
|
||
|
|
||
|
push ebx
|
||
|
mov eax,[cur_tab.Editor.Lines]
|
||
|
mov ebx,[lines.scr]
|
||
|
mov ecx,[cur_tab.Editor.TopLeft.Y]
|
||
|
mov edx,[cur_tab.Editor.Bounds.Bottom]
|
||
|
sub edx,[cur_tab.Editor.Bounds.Top]
|
||
|
add edx,-SCRLW*3+1
|
||
|
call get_scroll_vars
|
||
|
mov [cur_tab.Editor.VScroll.Top],eax
|
||
|
mov [cur_tab.Editor.VScroll.Size],ebx
|
||
|
pop ebx
|
||
|
|
||
|
mov ecx,eax
|
||
|
add ecx,[cur_tab.Editor.Bounds.Top]
|
||
|
add ecx,SCRLW+1
|
||
|
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
pushad
|
||
|
sar ebx,16
|
||
|
push ebx ecx SCRLW [cur_tab.Editor.VScroll.Size]
|
||
|
dec dword[esp]
|
||
|
call draw_3d_panel
|
||
|
popad
|
||
|
mov eax,13
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
add ebx,1*65536-1
|
||
|
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top-2]
|
||
|
mov cx,word[cur_tab.Editor.VScroll.Top]
|
||
|
add ecx,(SCRLW+1)*65536
|
||
|
mov edx,[sc.work]
|
||
|
or cx,cx
|
||
|
jle @f
|
||
|
mcall 13
|
||
|
@@:
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top]
|
||
|
add ecx,[cur_tab.Editor.VScroll.Top]
|
||
|
add ecx,[cur_tab.Editor.VScroll.Size]
|
||
|
add ecx,SCRLW+1
|
||
|
mov di,cx
|
||
|
shl ecx,16
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Bottom]
|
||
|
sub cx,di
|
||
|
sub cx,SCRLW*2;+1
|
||
|
jle @f
|
||
|
mcall
|
||
|
@@:
|
||
|
rol ebx,16
|
||
|
dec bx
|
||
|
push bx
|
||
|
rol ebx,16
|
||
|
pop bx
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Top-2]
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Bottom]
|
||
|
add ecx,(SCRLW)*65536-SCRLW*2-1
|
||
|
mcall 38,,,[cl_3d_inset]
|
||
|
|
||
|
ret
|
||
|
endf
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
func draw_editor_hscroll ;////////////////////////////////////////////////////
|
||
|
;-----------------------------------------------------------------------------
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left-2]
|
||
|
mov bx,SCRLW
|
||
|
mov ecx,[cur_tab.Editor.Bounds.Bottom]
|
||
|
shl ecx,16
|
||
|
add ecx,(-SCRLW)*65536+SCRLW
|
||
|
mcall 8,,,'LT' or 0x40000000
|
||
|
pushad
|
||
|
sar ebx,16
|
||
|
sar ecx,16
|
||
|
push ebx ecx SCRLW SCRLW
|
||
|
call draw_3d_panel
|
||
|
popad
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
|
||
|
pushad
|
||
|
push 0x1B
|
||
|
shr ecx,16
|
||
|
mov bx,cx
|
||
|
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3
|
||
|
mcall 4,,[sc.work_text],esp,1
|
||
|
add esp,4
|
||
|
popad
|
||
|
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Right]
|
||
|
shl ebx,16
|
||
|
add ebx,(-SCRLW*2)*65536+SCRLW
|
||
|
mcall 8,,,'RT' or 0x40000000
|
||
|
pushad
|
||
|
sar ebx,16
|
||
|
sar ecx,16
|
||
|
push ebx ecx SCRLW SCRLW
|
||
|
call draw_3d_panel
|
||
|
popad
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
|
||
|
pushad
|
||
|
push 0x1A
|
||
|
shr ecx,16
|
||
|
mov bx,cx
|
||
|
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3
|
||
|
mcall 4,,[sc.work_text],esp,1
|
||
|
add esp,4
|
||
|
popad
|
||
|
|
||
|
push ecx
|
||
|
mov eax,[cur_tab.Editor.Columns]
|
||
|
mov ebx,[columns.scr]
|
||
|
mov ecx,[cur_tab.Editor.TopLeft.X]
|
||
|
mov edx,[cur_tab.Editor.Bounds.Right]
|
||
|
add edx,-(SCRLW*3)
|
||
|
call get_scroll_vars
|
||
|
mov [cur_tab.Editor.HScroll.Top],eax
|
||
|
mov [cur_tab.Editor.HScroll.Size],ebx
|
||
|
pop ecx
|
||
|
|
||
|
mov ebx,eax
|
||
|
add ebx,[cur_tab.Editor.Bounds.Left]
|
||
|
add ebx,SCRLW+1
|
||
|
shl ebx,16
|
||
|
mov bx,word[cur_tab.Editor.HScroll.Size]
|
||
|
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
pushad
|
||
|
sar ecx,16
|
||
|
rol ebx,16
|
||
|
movsx eax,bx
|
||
|
sar ebx,16
|
||
|
dec ebx
|
||
|
push eax ecx ebx SCRLW
|
||
|
call draw_3d_panel
|
||
|
popad
|
||
|
;!!!!!!!!!!!!!!!!!!
|
||
|
add ecx,1*65536-1
|
||
|
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left-2]
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Left]
|
||
|
mov bx,word[cur_tab.Editor.HScroll.Top]
|
||
|
add ebx,(1+SCRLW)*65536
|
||
|
mcall 13,,,[sc.work]
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left]
|
||
|
add ebx,1+SCRLW
|
||
|
add ebx,[cur_tab.Editor.HScroll.Top]
|
||
|
add ebx,[cur_tab.Editor.HScroll.Size]
|
||
|
mov di,bx
|
||
|
shl ebx,16
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Right]
|
||
|
sub bx,di
|
||
|
sub bx,SCRLW*2
|
||
|
jle @f
|
||
|
mcall
|
||
|
@@:
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Left-2]
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Right]
|
||
|
add ebx,(SCRLW)*65536-SCRLW*2-1
|
||
|
rol ecx,16
|
||
|
dec cx
|
||
|
push cx
|
||
|
rol ecx,16
|
||
|
pop cx
|
||
|
mcall 38,,,[cl_3d_inset]
|
||
|
|
||
|
ret
|
||
|
endf
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
func draw_editor_text ;///////////////////////////////////////////////////////
|
||
|
;-----------------------------------------------------------------------------
|
||
|
mov eax,[cur_tab.Editor.Bounds.Bottom]
|
||
|
sub eax,[cur_tab.Editor.Bounds.Top]
|
||
|
cmp eax,LINEH
|
||
|
jge @f
|
||
|
ret
|
||
|
@@:
|
||
|
call init_sel_vars
|
||
|
call check_bottom_right
|
||
|
|
||
|
pushad
|
||
|
|
||
|
mov eax,[cur_tab.Editor.Bounds.Left]
|
||
|
add eax,[cur_tab.Editor.Gutter.Width]
|
||
|
add eax,LCHGW+3
|
||
|
mov [left_ofs],eax
|
||
|
mov eax,[cur_tab.Editor.Bounds.Top]
|
||
|
add eax,3
|
||
|
mov [top_ofs],eax
|
||
|
|
||
|
mov ebx,[top_ofs]
|
||
|
add ebx,[left_ofs-2]
|
||
|
|
||
|
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
|
||
|
push ecx
|
||
|
call get_line_offset
|
||
|
|
||
|
.start:
|
||
|
add esp,4
|
||
|
mov ecx,[lines.scr]
|
||
|
or ecx,ecx
|
||
|
jle .exit
|
||
|
add esp,-4
|
||
|
|
||
|
imul ebp,[cur_tab.Editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536
|
||
|
mov eax,[lines.scr]
|
||
|
sub eax,[cur_tab.Editor.Lines] ;! eax,[lines]
|
||
|
mov [draw_blines],eax
|
||
|
|
||
|
.next_line:
|
||
|
|
||
|
push ecx ebx
|
||
|
|
||
|
mov ecx,ebx
|
||
|
shl ecx,16
|
||
|
mov cl,LINEH
|
||
|
mov ebx,[cur_tab.Editor.Bounds.Right]
|
||
|
;sub ebx,[cur_tab.Editor.Bounds.Left]
|
||
|
add ebx,-SCRLW
|
||
|
add ebx,[left_ofs-2]
|
||
|
sub ebx,[left_ofs]
|
||
|
add ebx,-2*65536+2
|
||
|
|
||
|
; selection (text background)
|
||
|
mov [in_sel],0
|
||
|
mov edx,[color_tbl+4*5]
|
||
|
mov eax,[esp+4*2]
|
||
|
cmp eax,[sel.begin.y]
|
||
|
jl .lp6
|
||
|
je .lp1
|
||
|
cmp eax,[sel.end.y]
|
||
|
jg .lp6
|
||
|
je .lp3
|
||
|
jmp .lp6.2
|
||
|
.lp1: mov eax,[sel.begin.y]
|
||
|
cmp eax,[sel.end.y]
|
||
|
je .lp5
|
||
|
.lp2: mov eax,[sel.begin.x]
|
||
|
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
jle .lp6.2
|
||
|
cmp eax,[columns.scr]
|
||
|
jge .lp6
|
||
|
imul eax,6
|
||
|
pushad
|
||
|
sub bx,ax
|
||
|
rol ebx,16
|
||
|
mov bx,ax
|
||
|
add ebx,[left_ofs]
|
||
|
add ebx,-2
|
||
|
rol ebx,16
|
||
|
mov edx,[color_tbl+4*7]
|
||
|
mcall 13
|
||
|
popad
|
||
|
mov bx,ax
|
||
|
mov [in_sel],2
|
||
|
jmp .lp6
|
||
|
.lp3: mov eax,[sel.begin.y]
|
||
|
cmp eax,[sel.end.y]
|
||
|
je .lp5
|
||
|
.lp4: mov eax,[sel.end.x]
|
||
|
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
jle .lp6
|
||
|
cmp eax,[columns.scr]
|
||
|
jg .lp6.2
|
||
|
imul eax,6
|
||
|
pushad
|
||
|
sub bx,ax
|
||
|
rol ebx,16
|
||
|
add eax,[left_ofs];OLEFT-1
|
||
|
add eax,-2
|
||
|
mov bx,ax
|
||
|
rol ebx,16
|
||
|
mcall 13
|
||
|
popad
|
||
|
inc eax
|
||
|
mov edx,[color_tbl+4*7]
|
||
|
mov bx,ax
|
||
|
mov [in_sel],3
|
||
|
jmp .lp6
|
||
|
.lp5: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
cmp eax,[sel.begin.x]
|
||
|
jge .lp4
|
||
|
add eax,[columns.scr]
|
||
|
cmp eax,[sel.end.x]
|
||
|
jl .lp2
|
||
|
mov eax,[sel.begin.x]
|
||
|
cmp eax,[sel.end.x]
|
||
|
je .lp6
|
||
|
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
imul eax,6
|
||
|
pushad
|
||
|
mov ebx,[sel.end.x]
|
||
|
sub ebx,[sel.begin.x]
|
||
|
imul ebx,6
|
||
|
sal ebx,16
|
||
|
dec eax
|
||
|
add eax,[left_ofs]
|
||
|
mov bx,ax
|
||
|
rol ebx,16
|
||
|
mov edx,[color_tbl+4*7]
|
||
|
mcall 13
|
||
|
movzx eax,bx
|
||
|
sar ebx,16
|
||
|
add eax,ebx
|
||
|
mov ebx,eax
|
||
|
sal ebx,16
|
||
|
sub ax,[esp+4*4]
|
||
|
neg ax
|
||
|
add ax,word[left_ofs]
|
||
|
add ax,-2
|
||
|
mov bx,ax
|
||
|
mov edx,[color_tbl+4*5]
|
||
|
mcall 13
|
||
|
popad
|
||
|
mov bx,ax
|
||
|
mov [in_sel],4
|
||
|
jmp .lp6
|
||
|
|
||
|
.lp6.2:
|
||
|
mov edx,[color_tbl+4*7]
|
||
|
inc [in_sel]
|
||
|
.lp6:
|
||
|
mcall 13
|
||
|
|
||
|
lodsd
|
||
|
|
||
|
pushad
|
||
|
mov edx,[color_tbl+4*5]
|
||
|
test eax,0x00010000
|
||
|
jz @f
|
||
|
mov edx,[color_tbl+4*8]
|
||
|
test eax,0x00020000
|
||
|
jz @f
|
||
|
mov edx,[color_tbl+4*9]
|
||
|
@@: mov ebx,[left_ofs]
|
||
|
add ebx,-LCHGW-2;-4
|
||
|
shl ebx,16
|
||
|
mov bx,LCHGW
|
||
|
mcall 13
|
||
|
popad
|
||
|
|
||
|
xor ecx,ecx
|
||
|
and eax,0x0000FFFF
|
||
|
mov [cur_line_len],eax
|
||
|
|
||
|
or eax,eax
|
||
|
ja .next_block
|
||
|
add esp,4*2
|
||
|
jmp .exit ; .draw_cursor
|
||
|
|
||
|
.next_block:
|
||
|
|
||
|
push esi ecx
|
||
|
call get_next_part
|
||
|
pop ebx
|
||
|
|
||
|
push ecx
|
||
|
mov ecx,eax
|
||
|
|
||
|
push esi ebx
|
||
|
mov eax,ebx
|
||
|
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
|
||
|
cmp ebx,[columns.scr]
|
||
|
jge .skip_t
|
||
|
add ebx,esi
|
||
|
jle .skip_t
|
||
|
mov ebx,[esp+8+4*2] ;// 4*2=esi+ebx
|
||
|
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
jge .qqq
|
||
|
sub edx,eax
|
||
|
add esi,eax
|
||
|
; mov eax,OLEFT*65536
|
||
|
xor eax,eax
|
||
|
jmp .qqq2
|
||
|
.qqq:
|
||
|
; inc eax
|
||
|
imul eax,6*65536
|
||
|
.qqq2:
|
||
|
and ebx,0x0000FFFF
|
||
|
add eax,[left_ofs-2];OLEFT*65536
|
||
|
add ebx,eax
|
||
|
|
||
|
mov eax,[esp] ; ebx
|
||
|
add eax,[esp+4] ; esi
|
||
|
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
sub eax,[columns.scr]
|
||
|
jle .qweqwe
|
||
|
sub esi,eax
|
||
|
.qweqwe:
|
||
|
|
||
|
mov al,[in_sel]
|
||
|
cmp al,0
|
||
|
je .draw_t
|
||
|
dec al
|
||
|
jz .ya4
|
||
|
.nt1: dec al
|
||
|
jnz .nt2
|
||
|
mov eax,[esp]
|
||
|
cmp eax,[sel.begin.x]
|
||
|
jge .ya4
|
||
|
add eax,[esp+4]
|
||
|
cmp eax,[sel.begin.x]
|
||
|
jl .draw_t
|
||
|
;---[ selection crosses block from the right ]-(-
|
||
|
.ya1: mov eax,esi
|
||
|
mov esi,[sel.begin.x]
|
||
|
sub esi,[esp]
|
||
|
pushad
|
||
|
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col]
|
||
|
sub ecx,[esp+4*8]
|
||
|
jle @f
|
||
|
sub esi,ecx
|
||
|
sub [esp+4],ecx
|
||
|
@@: sub eax,esi
|
||
|
add edx,esi
|
||
|
imul esi,6
|
||
|
rol ebx,16
|
||
|
add bx,si
|
||
|
rol ebx,16
|
||
|
mov esi,eax
|
||
|
mov ecx,[color_tbl+4*6]
|
||
|
mcall 4
|
||
|
popad
|
||
|
jmp .draw_t
|
||
|
;----------------------------------------------)-
|
||
|
.nt2: dec al
|
||
|
jnz .nt3
|
||
|
mov eax,[esp]
|
||
|
cmp eax,[sel.end.x]
|
||
|
jge .draw_t
|
||
|
add eax,[esp+4]
|
||
|
cmp eax,[sel.end.x]
|
||
|
jl .ya4
|
||
|
;---[ selection crosses block from the left ]--(-
|
||
|
.ya2: mov eax,[sel.end.x]
|
||
|
sub eax,[esp]
|
||
|
push ebx
|
||
|
mov ebx,[esp+4]
|
||
|
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
|
||
|
jge .ya2.1
|
||
|
add eax,ebx
|
||
|
.ya2.1:
|
||
|
pop ebx
|
||
|
pushad
|
||
|
mov esi,eax
|
||
|
mov ecx,[color_tbl+4*6]
|
||
|
mcall 4
|
||
|
popad
|
||
|
sub esi,eax
|
||
|
add edx,eax
|
||
|
imul eax,6*65536
|
||
|
add ebx,eax
|
||
|
jmp .draw_t
|
||
|
;----------------------------------------------)-
|
||
|
.nt3: mov eax,[esp]
|
||
|
cmp eax,[sel.end.x]
|
||
|
jge .draw_t
|
||
|
cmp eax,[sel.begin.x]
|
||
|
jge @f
|
||
|
add eax,[esp+4]
|
||
|
cmp eax,[sel.begin.x]
|
||
|
jl .draw_t
|
||
|
cmp eax,[sel.end.x]
|
||
|
jl .ya1
|
||
|
;---[ selection inside block ]-----------------(-
|
||
|
mov eax,esi
|
||
|
mov esi,[sel.begin.x]
|
||
|
sub esi,[esp]
|
||
|
push eax
|
||
|
mov eax,[esp+4]
|
||
|
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
|
||
|
jge .nt3.1
|
||
|
add esi,eax
|
||
|
.nt3.1:
|
||
|
pop eax
|
||
|
sub eax,esi
|
||
|
pushad
|
||
|
add edx,esi
|
||
|
imul esi,6*65536
|
||
|
add ebx,esi
|
||
|
mov esi,[sel.end.x]
|
||
|
sub esi,[sel.begin.x]
|
||
|
mov ecx,[color_tbl+4*6]
|
||
|
sub eax,esi
|
||
|
push eax
|
||
|
mcall 4
|
||
|
add edx,esi
|
||
|
imul esi,6*65536
|
||
|
add ebx,esi
|
||
|
pop esi
|
||
|
mov ecx,[esp+4*6]
|
||
|
mcall 4
|
||
|
popad
|
||
|
jmp .draw_t
|
||
|
;----------------------------------------------)-
|
||
|
@@: add eax,esi
|
||
|
dec eax
|
||
|
cmp eax,[sel.end.x]
|
||
|
jge .ya2
|
||
|
;---[ block inside selection ]-----------------(-
|
||
|
.ya4: mov ecx,[color_tbl+4*6]
|
||
|
;----------------------------------------------)-
|
||
|
|
||
|
.draw_t:
|
||
|
mcall 4;[esp+8]
|
||
|
.skip_t:
|
||
|
pop eax eax ; ebx esi
|
||
|
imul eax,6
|
||
|
add [esp+4*2+2],ax
|
||
|
pop ecx esi
|
||
|
cmp ecx,[cur_line_len];LINE_WIDTH
|
||
|
jl .next_block
|
||
|
|
||
|
pop ebx ecx
|
||
|
and ebx,0x0000FFFF
|
||
|
add ebx,[left_ofs-2]
|
||
|
add ebx,LINEH
|
||
|
add esi,[cur_line_len];LINE_WIDTH
|
||
|
inc dword[esp]
|
||
|
dec ecx
|
||
|
jg .next_line
|
||
|
|
||
|
.exit:
|
||
|
|
||
|
cmp [draw_blines],0
|
||
|
jl @f
|
||
|
mov ecx,[esp-8]
|
||
|
shl ecx,16
|
||
|
mov cx,word[cur_tab.Editor.Bounds.Bottom]
|
||
|
sub cx,[esp-8]
|
||
|
add cx,-SCRLW
|
||
|
mov eax,[cur_tab.Editor.Bounds.Left]
|
||
|
add eax,[cur_tab.Editor.Gutter.Width]
|
||
|
inc eax
|
||
|
mov ebx,eax
|
||
|
shl ebx,16
|
||
|
mov bx,word[cur_tab.Editor.Bounds.Right]
|
||
|
sub bx,ax
|
||
|
add ebx,-SCRLW
|
||
|
mcall 13,,,[color_tbl+4*5]
|
||
|
@@:
|
||
|
|
||
|
popad
|
||
|
add esp,4
|
||
|
ret
|
||
|
endf
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
func draw_editor_caret ;//////////////////////////////////////////////////////
|
||
|
;-----------------------------------------------------------------------------
|
||
|
cmp [bot_mode],0
|
||
|
jne @f
|
||
|
mov ebx,[cur_tab.Editor.Caret.X]
|
||
|
sub ebx,[cur_tab.Editor.TopLeft.X]
|
||
|
js @f
|
||
|
cmp ebx,[columns.scr]
|
||
|
ja @f
|
||
|
imul ebx,6
|
||
|
add ebx,[left_ofs]
|
||
|
dec ebx
|
||
|
push bx
|
||
|
shl ebx,16
|
||
|
pop bx
|
||
|
mov eax,[cur_tab.Editor.Caret.Y]
|
||
|
sub eax,[cur_tab.Editor.TopLeft.Y]
|
||
|
js @f
|
||
|
cmp eax,[lines.scr]
|
||
|
jge @f
|
||
|
imul eax,LINEH
|
||
|
add eax,[top_ofs]
|
||
|
mov esi,eax
|
||
|
shl esi,16
|
||
|
add eax,LINEH-2
|
||
|
mov si,ax
|
||
|
mov ecx,2
|
||
|
cmp [ins_mode],0
|
||
|
jne .lp8
|
||
|
add cl,4
|
||
|
.lp8: push ecx
|
||
|
mcall 38,,esi,0x01000000
|
||
|
add ebx,0x00010001
|
||
|
pop ecx
|
||
|
loop .lp8
|
||
|
@@:
|
||
|
ret
|
||
|
endf
|