0,0 → 1,757 |
|
;----------------------------------------------------------------------------- |
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 |