c6080c59e9
git-svn-id: svn://kolibrios.org@280 a494cfbc-eb01-0410-851d-a64ba20cac60
1344 lines
26 KiB
NASM
1344 lines
26 KiB
NASM
;-----------------------------------------------------------------------------
|
|
func drawwindow ;///// DRAW WINDOW ///////////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
|
|
cmp [just_from_popup],1
|
|
jne @f
|
|
ret
|
|
@@:
|
|
|
|
mcall 48,3,sc,sizeof.system_colors
|
|
call calc_3d_colors
|
|
|
|
mcall 12,1
|
|
|
|
push [color_tbl+4*5]
|
|
pop [sc.work]
|
|
|
|
mov edx,[sc.work]
|
|
add edx,0x33000000
|
|
mov ebx,[mainwnd_pos.x-2]
|
|
mov bx,word[mainwnd_pos.w]
|
|
mov ecx,[mainwnd_pos.y-2]
|
|
mov cx,word[mainwnd_pos.h]
|
|
mcall 0,,,,,s_title
|
|
|
|
mcall 9,p_info,-1
|
|
mov esi,p_info.box.left
|
|
mov edi,mainwnd_pos
|
|
mov ecx,4
|
|
cld
|
|
rep movsd
|
|
|
|
; mcall 9,p_info,-1
|
|
cmp [p_info.client_box.height],LINEH
|
|
jl .exit.2
|
|
|
|
;++ calculate editor bounds ++
|
|
mov [tab_bar.Bounds.Left],0
|
|
mov [tab_bar.Bounds.Top],ATOPH
|
|
mov eax,[p_info.client_box.width]
|
|
mov [tab_bar.Bounds.Right],eax
|
|
mov eax,[p_info.client_box.height]
|
|
sub eax,[bot_dlg_height]
|
|
add eax,-STATH-1
|
|
mov [tab_bar.Bounds.Bottom],eax
|
|
|
|
call align_editor_in_tab
|
|
|
|
mov [top_ofs],ATOPH;+1
|
|
|
|
;// --- columns.scr and lines.scr calculation ---
|
|
|
|
mov eax,[p_info.client_box.height]
|
|
add eax,-STATH+1;*3-2-2
|
|
sub eax,[bot_dlg_height]
|
|
mov [bot_ofs],eax
|
|
|
|
call draw_bottom_dialog
|
|
|
|
; mov [do_not_draw],1 ; do_not_draw = true
|
|
|
|
; mov ebx,eax
|
|
; sub ebx,[top_ofs]
|
|
; sub ebx,SCRLW*3+AMINS+5
|
|
; js .no_draw
|
|
|
|
; dec [do_not_draw] ; do_not_draw = false
|
|
; sub eax,SCRLW+3
|
|
; sub eax,[top_ofs]
|
|
; cdq
|
|
; mov ebx,LINEH
|
|
; div ebx
|
|
; mov [lines.scr],eax
|
|
|
|
;-- horizontal lines for menubar and statusbar --
|
|
;mov ebx,[p_info.client_box.width]
|
|
;mov ecx,[top_ofs-2]
|
|
;mov cx,word[top_ofs]
|
|
;sub ecx,1*65536+1
|
|
;mcall 38,,,[cl_3d_inset];[sc.work_text]
|
|
;mov ecx,[p_info.client_box.height]
|
|
;sub ecx,STATH+1
|
|
;push cx
|
|
;shl ecx,16
|
|
;pop cx
|
|
;mcall
|
|
|
|
inc [top_ofs]
|
|
|
|
call draw_main_menu
|
|
|
|
jmp .exit
|
|
|
|
.no_draw:
|
|
mov [top_ofs],2
|
|
mov eax,[p_info.client_box.height]
|
|
inc eax
|
|
mov [bot_ofs],eax
|
|
sub eax,2
|
|
push eax
|
|
add eax,-2-SCRLW
|
|
cdq
|
|
mov ebx,LINEH
|
|
idiv ebx
|
|
mov [lines.scr],eax
|
|
pop eax
|
|
|
|
mov ebx,[p_info.client_box.height]
|
|
sub ebx,SCRLW*3+AMINS+2
|
|
jns @f
|
|
|
|
inc [do_not_draw]
|
|
|
|
dec eax
|
|
cdq
|
|
mov ebx,LINEH
|
|
idiv ebx
|
|
mov [lines.scr],eax
|
|
|
|
mov eax,[p_info.client_box.width]
|
|
cdq
|
|
mov ebx,6
|
|
idiv ebx
|
|
mov [columns.scr],eax
|
|
@@:
|
|
|
|
.exit:
|
|
;-- draw file --
|
|
;call draw_file
|
|
;++ draw editor control ++
|
|
call draw_editor
|
|
call draw_tabctl
|
|
.exit.2:
|
|
mcall 12,2
|
|
ret
|
|
endf
|
|
|
|
;-----------------------------------------------------------------------------
|
|
func draw_bottom_dialog ;/////////////////////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
cmp [bot_dlg_height],0
|
|
je .exit
|
|
pushad
|
|
mov ebx,[p_info.client_box.width]
|
|
mov ecx,[bot_ofs]
|
|
dec ecx
|
|
push cx
|
|
shl ecx,16
|
|
pop cx
|
|
mcall 38,,,[cl_3d_inset]
|
|
mov ecx,[bot_ofs-2]
|
|
mov cx,word[bot_dlg_height]
|
|
dec ecx
|
|
mov ebx,[p_info.client_box.width]
|
|
inc ebx
|
|
mcall 13,,,[cl_3d_normal]
|
|
mov al,1
|
|
call [bot_dlg_handler]
|
|
popad
|
|
|
|
.exit:
|
|
ret
|
|
endf
|
|
|
|
mi_sel dd ?
|
|
mi_cur dd -1
|
|
|
|
;-----------------------------------------------------------------------------
|
|
func draw_main_menu ;/////////////////////////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
mov ebx,[p_info.client_box.width]
|
|
inc ebx
|
|
mcall 13,,ATOPH-1,[cl_3d_normal]
|
|
|
|
mcall 38,[p_info.client_box.width],<ATOPH-1,ATOPH-1>,[cl_3d_inset]
|
|
|
|
mov edx,main_menu
|
|
mov ebx,9*65536+ATOPH/2-3;4
|
|
;mov ecx,[sc.work_text]
|
|
mov [mi_sel],0
|
|
mov edi,[mi_cur]
|
|
@@: inc [mi_sel]
|
|
cmp [mi_sel],main_menu.cnt_item
|
|
ja .exit
|
|
mov ecx,[sc.work_text]
|
|
cmp edi,[mi_sel]
|
|
jne .lp1
|
|
pushad
|
|
push edx
|
|
;mov ebx,[edx+0]
|
|
mov ecx,[edx+4]
|
|
add ecx,2*65536-2
|
|
mcall 13,[edx+0],,[sc.work];[cl_3d_pushed]
|
|
mov edx,[esp]
|
|
mov cx,[edx+6]
|
|
add ecx,-1*65536+1
|
|
add bx,[edx+2]
|
|
mcall 38,,,[cl_3d_inset]
|
|
|
|
mov edx,[esp]
|
|
add cx,[edx+4]
|
|
add cx,-2
|
|
mov bx,[edx+2]
|
|
mcall 38,,,[cl_3d_inset]
|
|
pop edx
|
|
movzx eax,word[edx]
|
|
add ebx,eax
|
|
shl eax,16
|
|
add ebx,eax
|
|
mcall 38,,,[cl_3d_inset]
|
|
popad
|
|
mov ecx,[color_tbl+4*0]
|
|
.lp1: add edx,8+1
|
|
movzx esi,byte[edx-1]
|
|
mcall 4
|
|
add edx,esi
|
|
add esi,2
|
|
imul esi,6*65536
|
|
add ebx,esi
|
|
jmp @b
|
|
|
|
.exit:
|
|
ret
|
|
endf
|
|
|
|
;-----------------------------------------------------------------------------
|
|
func draw_file.ex ;///////////////////////////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
; Input:
|
|
; EAX = start line
|
|
; EBX = end line
|
|
;-----------------------------------------------------------------------------
|
|
call draw_editor;_text
|
|
ret
|
|
macro unused {
|
|
cmp [p_info.client_box.height],LINEH
|
|
jge @f
|
|
ret
|
|
@@:
|
|
call init_sel_vars
|
|
call check_bottom_right
|
|
|
|
pushad
|
|
|
|
cmp [lines.scr],0
|
|
jle draw_file.exit
|
|
|
|
cmp eax,ebx
|
|
jle @f
|
|
xchg eax,ebx
|
|
@@: cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
|
|
jge @f
|
|
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
|
|
@@: mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
|
|
add ecx,[lines.scr]
|
|
cmp ebx,ecx
|
|
jl @f
|
|
dec ecx
|
|
mov ebx,ecx
|
|
@@: cmp eax,ebx
|
|
jg draw_file.exit
|
|
|
|
mov ecx,eax
|
|
push eax
|
|
call get_line_offset
|
|
|
|
.start:
|
|
mov ecx,ebx
|
|
sub ecx,eax
|
|
inc ecx
|
|
|
|
mov ebx,[top_ofs]
|
|
add ebx,[left_ofs-2]
|
|
sub eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
|
|
imul eax,LINEH
|
|
add ebx,eax
|
|
|
|
imul ebp,[cur_editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536
|
|
or [draw_blines],-1
|
|
|
|
jmp draw_file.next_line
|
|
}
|
|
endf
|
|
|
|
;-----------------------------------------------------------------------------
|
|
func draw_file ;//////////////////////////////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
call draw_editor;_text
|
|
ret
|
|
macro unused {
|
|
cmp [p_info.client_box.height],LINEH
|
|
jge @f
|
|
ret
|
|
@@:
|
|
call init_sel_vars
|
|
call check_bottom_right
|
|
|
|
pushad
|
|
|
|
mov ebx,[top_ofs]
|
|
add ebx,[left_ofs-2]
|
|
|
|
mov ecx,[cur_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_editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536
|
|
mov eax,[lines.scr]
|
|
sub eax,[cur_editor.Lines] ;! eax,[lines]
|
|
mov [draw_blines],eax
|
|
|
|
.next_line:
|
|
|
|
push ecx ebx
|
|
|
|
mov ecx,ebx
|
|
shl ecx,16
|
|
mov cl,LINEH
|
|
mov ebx,[p_info.client_box.width]
|
|
add ebx,-SCRLW
|
|
add ebx,[left_ofs-2]
|
|
sub ebx,[left_ofs]
|
|
add ebx,-1*65536+1
|
|
|
|
; 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_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];OLEFT-1
|
|
dec ebx
|
|
rol ebx,16
|
|
mov edx,[color_tbl+4*7]
|
|
mcall 13
|
|
popad
|
|
; inc eax
|
|
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_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
|
|
dec eax
|
|
mov bx,ax
|
|
rol ebx,16
|
|
; inc ebx
|
|
mcall 13
|
|
popad
|
|
mov edx,[color_tbl+4*7]
|
|
mov bx,ax
|
|
mov [in_sel],3
|
|
jmp .lp6
|
|
.lp5: mov eax,[cur_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_editor.TopLeft.X] ;! eax,[left_col]
|
|
imul eax,6
|
|
pushad
|
|
mov ebx,[sel.end.x]
|
|
sub ebx,[sel.begin.x]
|
|
; inc ebx
|
|
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]
|
|
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,-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 .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_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_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_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_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_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_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
|
|
|
|
;------------------------------------------------
|
|
.draw_cursor:
|
|
|
|
;------------------------------------------------
|
|
mov ebx,[left_ofs]
|
|
cmp ebx,2+LCHGW
|
|
je .no_gutter
|
|
add esp,-4*8*2
|
|
sub ebx,3+LCHGW
|
|
mov ecx,[top_ofs]
|
|
dec ecx
|
|
shl ecx,16
|
|
add ecx,[bot_ofs]
|
|
sub ecx,[top_ofs]
|
|
sub ecx,SCRLW
|
|
mcall 13,,,[cl_3d_normal]
|
|
|
|
push bx
|
|
shl ebx,16
|
|
pop bx
|
|
add ecx,[top_ofs]
|
|
dec ecx
|
|
mcall 38,,,[cl_3d_inset]
|
|
|
|
mov ebx,[left_ofs]
|
|
add ebx,-3-LCHGW
|
|
shl ebx,16
|
|
add ebx,[top_ofs]
|
|
mov edi,[sc.work_text]
|
|
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
|
|
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_editor.Lines] ;! ecx,[lines]
|
|
jg @f
|
|
mov esi,ecx
|
|
sub esi,[cur_editor.TopLeft.Y] ;! esi,[top_line]
|
|
cmp esi,[lines.scr]
|
|
jbe @b
|
|
@@: add esp,4*8*2
|
|
|
|
.no_gutter:
|
|
;------------------------------------------------
|
|
|
|
mov ebx,[draw_blines]
|
|
or ebx,ebx
|
|
js @f
|
|
imul ebx,LINEH
|
|
mov ecx,[esp-8]
|
|
shl ecx,16
|
|
mov cx,bx
|
|
mov ebx,[p_info.client_box.width]
|
|
add ebx,[left_ofs-2]
|
|
sub ebx,[left_ofs]
|
|
add ebx,-1*65536-SCRLW+1 ; <OLEFT-1,LINE_WIDTH*6+2>
|
|
mcall 13,,,[color_tbl+4*5]
|
|
@@:
|
|
|
|
add esp,4
|
|
cmp [bot_mode],0
|
|
jne @f
|
|
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x]
|
|
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
|
|
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_editor.Caret.Y] ;! eax,[pos.y]
|
|
sub eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
|
|
js @f
|
|
cmp eax,[lines.scr]
|
|
jge @f
|
|
imul eax,LINEH
|
|
add eax,[top_ofs]
|
|
; inc eax
|
|
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
|
|
@@:
|
|
;------------------------------------------------
|
|
cmp [do_not_draw],2
|
|
je .exit
|
|
|
|
; mov ebx,[p_info.x_size]
|
|
; shl ebx,16
|
|
; add ebx,(-SCRLW-5+2)*65536+SCRLW-2
|
|
; mov ecx,[top_ofs-2]
|
|
; mov cx,SCRLW-1
|
|
; mcall 8,,,'UP',[sc.work_button]
|
|
;!!!!!!!!!!!!!!!!!!
|
|
mov ebx,[p_info.client_box.width]
|
|
shl ebx,16
|
|
add ebx,(-SCRLW)*65536+SCRLW
|
|
mov ecx,[top_ofs-2]
|
|
mov cx,SCRLW
|
|
sub ecx,0x00020000
|
|
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,[bot_ofs]
|
|
; shl ecx,16
|
|
; add ecx,(-SCRLW*2-1)*65536+SCRLW-1
|
|
; mcall ,,,'DN'
|
|
;!!!!!!!!!!!!!!!!!!
|
|
mov ecx,[bot_ofs]
|
|
shl ecx,16
|
|
add ecx,(-SCRLW*2-1)*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
|
|
; sub ebx,1*65536-2
|
|
|
|
push ebx
|
|
mov eax,[cur_editor.Lines] ;! eax,[lines]
|
|
mov ebx,[lines.scr]
|
|
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
|
|
mov edx,[bot_ofs]
|
|
sub edx,[top_ofs]
|
|
add edx,-SCRLW*3+1
|
|
call get_scroll_vars
|
|
mov [cur_editor.VScroll.Top],eax ;! [vscrl_top],eax
|
|
mov [cur_editor.VScroll.Size],ebx ;! [vscrl_size],ebx
|
|
pop ebx
|
|
|
|
mov ecx,eax
|
|
add ecx,[top_ofs]
|
|
add ecx,SCRLW-1
|
|
; shl ecx,16
|
|
; mov cx,word[vscrl_size]
|
|
|
|
; mcall 13,,,[sc.work_button]
|
|
;!!!!!!!!!!!!!!!!!!
|
|
pushad
|
|
sar ebx,16
|
|
; rol ecx,16
|
|
; movsx eax,cx
|
|
; sar ecx,16
|
|
push ebx ecx SCRLW [cur_editor.VScroll.Size] ;! ebx ecx SCRLW [vscrl_size]
|
|
dec dword[esp]
|
|
call draw_3d_panel
|
|
popad
|
|
mov eax,13
|
|
;!!!!!!!!!!!!!!!!!!
|
|
inc ebx
|
|
|
|
mov ecx,[top_ofs-2]
|
|
mov cx,word[cur_editor.VScroll.Top] ;! cx,word[vscrl_top]
|
|
add ecx,(SCRLW-1)*65536
|
|
mov edx,[sc.work];[color_tbl+4*5]
|
|
or cx,cx
|
|
jle @f
|
|
mcall 13
|
|
@@:
|
|
mov ecx,[top_ofs]
|
|
add ecx,[cur_editor.VScroll.Top] ;! ecx,[vscrl_top]
|
|
add ecx,[cur_editor.VScroll.Size] ;! ecx,[vscrl_size]
|
|
add ecx,SCRLW-1
|
|
mov di,cx
|
|
shl ecx,16
|
|
mov cx,word[bot_ofs]
|
|
sub cx,di
|
|
sub cx,SCRLW*2+1
|
|
jle @f
|
|
mcall
|
|
@@:
|
|
;-----------------------
|
|
; mov eax,ebx
|
|
; shr eax,16
|
|
; add bx,ax
|
|
; mov ecx,[top_ofs-2]
|
|
; mov cx,word[top_ofs]
|
|
; add ecx,SCRLW*65536+SCRLW
|
|
; mcall 38,,,[sc.work_graph];[sc.work_text]
|
|
; mov ecx,[bot_ofs-2]
|
|
; mov cx,word[bot_ofs]
|
|
; sub ecx,(SCRLW*2+2)*65536+(SCRLW*2+2)
|
|
; mcall
|
|
rol ebx,16
|
|
push bx
|
|
rol ebx,16
|
|
pop bx
|
|
mov ecx,[top_ofs-2]
|
|
mov cx,word[bot_ofs]
|
|
add ecx,(SCRLW-1)*65536-SCRLW*2-2
|
|
mcall 38,,,[cl_3d_inset]
|
|
;------------------------------------------------
|
|
; mov ebx,5*65536+SCRLW-1
|
|
; mov ecx,[bot_ofs]
|
|
; shl ecx,16
|
|
; add ecx,(-SCRLW)*65536+SCRLW-2
|
|
; mcall 8,,,'LT',[sc.work_button]
|
|
;!!!!!!!!!!!!!!!!!!
|
|
mov ebx,SCRLW
|
|
mov ecx,[bot_ofs]
|
|
shl ecx,16
|
|
add ecx,(-SCRLW-1)*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,[p_info.x_size]
|
|
; shl ebx,16
|
|
; add ebx,(-SCRLW*2-5)*65536+SCRLW
|
|
; mcall ,,,'RT'
|
|
;!!!!!!!!!!!!!!!!!!
|
|
mov ebx,[p_info.client_box.width]
|
|
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
|
|
; inc ecx
|
|
|
|
push ecx
|
|
mov eax,[cur_editor.Columns] ;! eax,[columns]
|
|
mov ebx,[columns.scr]
|
|
mov ecx,[cur_editor.TopLeft.X] ;! ecx,[left_col]
|
|
mov edx,[p_info.client_box.width]
|
|
add edx,-(SCRLW*3)
|
|
call get_scroll_vars
|
|
mov [cur_editor.HScroll.Top],eax ;! [hscrl_top],eax
|
|
mov [cur_editor.HScroll.Size],ebx ;! [hscrl_size],ebx
|
|
pop ecx
|
|
|
|
mov ebx,eax
|
|
add ebx,1+SCRLW
|
|
shl ebx,16
|
|
mov bx,word[cur_editor.HScroll.Size] ;! bx,word[hscrl_size]
|
|
|
|
; mcall 13,,,[sc.work_button]
|
|
;!!!!!!!!!!!!!!!!!!
|
|
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
|
|
;!!!!!!!!!!!!!!!!!!
|
|
|
|
mov ebx,(1+SCRLW)*65536
|
|
mov bx,word[cur_editor.HScroll.Top] ;! bx,word[hscrl_top]
|
|
mcall 13,,,[sc.work];[color_tbl+4*5]
|
|
mov ebx,1+SCRLW
|
|
add ebx,[cur_editor.HScroll.Top] ;! ebx,[hscrl_top]
|
|
add ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size]
|
|
mov di,bx
|
|
shl ebx,16
|
|
mov bx,word[p_info.client_box.width]
|
|
sub bx,di
|
|
sub bx,SCRLW*2
|
|
jle @f
|
|
mcall
|
|
@@:
|
|
; mov eax,ebx
|
|
; shr eax,16
|
|
; add bx,ax
|
|
; mov ecx,[bot_ofs-2]
|
|
; mov cx,word[bot_ofs]
|
|
; sub ecx,SCRLW*65536+2
|
|
; mcall 38,<OLEFT+SCRLW-1,OLEFT+SCRLW-1>,,[sc.work_graph];[sc.work_text]
|
|
; mov ebx,[p_info.x_size-2]
|
|
; mov bx,word[p_info.x_size]
|
|
; sub ebx,(SCRLW*2+6)*65536+(SCRLW*2+6)
|
|
; mcall
|
|
mov ebx,[p_info.client_box.width]
|
|
; add ebx,5*65536-5
|
|
mov ecx,[bot_ofs-2]
|
|
mov cx,word[bot_ofs]
|
|
sub ecx,(SCRLW+1)*65536+(SCRLW+1)
|
|
mcall 38,,,[cl_3d_inset]
|
|
;------------------------------------------------
|
|
.exit:
|
|
popad
|
|
ret
|
|
}
|
|
endf
|
|
|
|
;-----------------------------------------------------------------------------
|
|
func get_next_part ;//////////////////////////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
; Input:
|
|
; ECX = current letter
|
|
; ESI = string
|
|
; Output:
|
|
; ECX = color
|
|
; EDX = string
|
|
; ESI = length
|
|
;-----------------------------------------------------------------------------
|
|
cmp [cur_editor.AsmMode],0 ;! [asm_mode],0
|
|
je .plain.text
|
|
xor ebx,ebx
|
|
mov edx,ecx
|
|
add esi,ecx
|
|
mov edi,symbols
|
|
mov al,[esi]
|
|
cmp al,';'
|
|
je .comment
|
|
mov ecx,symbols.size
|
|
repne scasb
|
|
je .symbol
|
|
cmp al,'$'
|
|
jne @f
|
|
mov edi,symbols
|
|
mov al,[esi+1]
|
|
mov ecx,symbols.size
|
|
repne scasb
|
|
je .not_symbol
|
|
jmp .number
|
|
@@: cmp al,'0'
|
|
jb @f
|
|
cmp al,'9'
|
|
jbe .number
|
|
@@: cmp al,"'"
|
|
je .string
|
|
cmp al,'"'
|
|
je .string
|
|
.not_symbol:
|
|
inc ebx
|
|
inc edx
|
|
cmp edx,[cur_line_len];LINE_WIDTH
|
|
jge @f
|
|
mov edi,symbols
|
|
mov al,[esi+ebx]
|
|
cmp al,';'
|
|
je @f
|
|
mov ecx,symbols.size
|
|
repne scasb
|
|
jne .not_symbol
|
|
@@: mov ecx,edx
|
|
mov edx,esi
|
|
mov esi,ebx
|
|
mov eax,[color_tbl+4*0]
|
|
ret
|
|
.symbol:
|
|
inc ebx
|
|
inc edx
|
|
cmp edx,[cur_line_len];LINE_WIDTH
|
|
jge @f
|
|
mov edi,symbols
|
|
mov al,[esi+ebx]
|
|
mov ecx,symbols.size
|
|
repne scasb
|
|
je .symbol
|
|
@@: mov ecx,edx
|
|
mov edx,esi
|
|
mov esi,ebx
|
|
mov eax,[color_tbl+4*4]
|
|
ret
|
|
.comment:
|
|
neg edx
|
|
add edx,[cur_line_len];LINE_WIDTH
|
|
xchg edx,esi
|
|
mov ecx,[cur_line_len];LINE_WIDTH
|
|
mov eax,[color_tbl+4*3]
|
|
ret
|
|
.number:
|
|
inc ebx
|
|
inc edx
|
|
cmp edx,[cur_line_len];LINE_WIDTH
|
|
jge @f
|
|
mov edi,symbols
|
|
mov al,[esi+ebx]
|
|
cmp al,';'
|
|
je @f
|
|
mov ecx,symbols.size
|
|
repne scasb
|
|
jne .number
|
|
@@: mov ecx,edx
|
|
mov edx,esi
|
|
mov esi,ebx
|
|
mov eax,[color_tbl+4*1]
|
|
ret
|
|
.string:
|
|
inc ebx
|
|
inc edx
|
|
cmp edx,[cur_line_len];LINE_WIDTH
|
|
jge @f
|
|
cmp [esi+ebx],al
|
|
jne .string
|
|
inc ebx
|
|
inc edx
|
|
@@:
|
|
mov ecx,edx
|
|
mov edx,esi
|
|
mov esi,ebx
|
|
mov eax,[color_tbl+4*2]
|
|
ret
|
|
.plain.text:
|
|
mov edx,[cur_line_len];LINE_WIDTH
|
|
xchg edx,esi
|
|
mov ecx,[cur_line_len];LINE_WIDTH
|
|
mov eax,[color_tbl+4*0]
|
|
ret
|
|
endf
|
|
|
|
;-----------------------------------------------------------------------------
|
|
func draw_statusbar ;///// WRITE POSITION ////////////////////////////////////
|
|
;-----------------------------------------------------------------------------
|
|
cmp [do_not_draw],1 ; return if drawing is not permitted
|
|
jae .exit
|
|
pusha
|
|
|
|
mov ecx,[p_info.client_box.height-2]
|
|
mov cx,word[p_info.client_box.height]
|
|
sub ecx,STATH*65536+STATH
|
|
mcall 38,[p_info.client_box.width],,[cl_3d_inset]
|
|
|
|
; mcall 9,p_info,-1
|
|
|
|
mov ecx,[p_info.client_box.height-2]
|
|
mov cx,word[p_info.client_box.height]
|
|
sub ecx,STATH*65536
|
|
; mpack ebx,6*13,6*13
|
|
; add ebx,[left_ofs-2]
|
|
; add ebx,[left_ofs]
|
|
mcall 38,<6*13,6*13>,,[cl_3d_inset]
|
|
|
|
pushad
|
|
add ecx,1*65536
|
|
; sub ebx,(6*13+1)*65536-1
|
|
; sub ebx,[left_ofs]
|
|
mov cx,STATH
|
|
mcall 13,<0,6*13>,,[cl_3d_normal]
|
|
mcall ,<6*13+1,6*(s_modified.size+2)-1>
|
|
mov ebx,(6*(s_modified.size+15)+1)*65536
|
|
mov bx,word[p_info.client_box.width]
|
|
sub bx,6*(s_modified.size+15)
|
|
mcall
|
|
popad
|
|
|
|
add ebx,6*(s_modified.size+2)*65536+6*(s_modified.size+2)
|
|
mcall
|
|
|
|
and ecx,0x0000FFFF
|
|
push ecx
|
|
|
|
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
|
|
inc eax
|
|
mov ecx,10
|
|
mov edi,p_info+0x100;htext2.pos1
|
|
cld
|
|
call uint2str
|
|
mov al,','
|
|
stosb
|
|
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
|
|
inc eax
|
|
call uint2str
|
|
|
|
pop ebx
|
|
|
|
lea esi,[edi-p_info-0x100]
|
|
lea edi,[esi*3]
|
|
shl edi,16
|
|
|
|
; add ebx,[left_ofs-2]
|
|
add ebx,(1+6*6+3)*65536-STATH/2-3
|
|
sub ebx,edi
|
|
mcall 4,,[sc.work_text],p_info+0x100
|
|
|
|
cmp [cur_editor.Modified],0 ;! [modified],0
|
|
je @f
|
|
and ebx,0x0000FFFF
|
|
; add ebx,[left_ofs-2]
|
|
add ebx,(1+12*6+12+1)*65536
|
|
mcall ,,,s_modified,s_modified.size
|
|
|
|
@@: cmp [s_status],0
|
|
je @f
|
|
and ebx,0x0000FFFF
|
|
add ebx,6*(s_modified.size+16)*65536
|
|
or ecx, 80000000h
|
|
mcall ,,,[s_status]
|
|
|
|
@@: popa
|
|
|
|
.exit:
|
|
ret
|
|
endf
|
|
|
|
func draw_framerect ; ebx,ecx,edx
|
|
push ebx ecx
|
|
; x1 = esp+6
|
|
; x2 = esp+4 (width)
|
|
; y1 = esp+2
|
|
; y2 = esp+0 (height)
|
|
|
|
add bx,[esp+6]
|
|
mov cx,[esp+2]
|
|
dec ebx
|
|
mcall 38
|
|
add cx,[esp]
|
|
rol ecx,16
|
|
add cx,[esp]
|
|
sub ecx,0x00010001
|
|
mcall
|
|
|
|
mov ebx,[esp+4]
|
|
mov ecx,[esp]
|
|
mov bx,[esp+6]
|
|
add cx,[esp+2]
|
|
dec ecx
|
|
mcall
|
|
add bx,[esp+4]
|
|
rol ebx,16
|
|
add bx,[esp+4]
|
|
sub ebx,0x00010001
|
|
mcall
|
|
|
|
pop ecx ebx
|
|
ret
|
|
endf
|
|
|
|
func draw_check
|
|
push bx
|
|
shl ebx,16
|
|
pop bx
|
|
add ebx,0x00010000
|
|
push cx
|
|
shl ecx,16
|
|
pop cx
|
|
add ecx,0x00020001
|
|
|
|
; add ecx,0x00040003
|
|
; sub ebx,0x000A000B
|
|
mcall 38
|
|
add ecx,0x00010001
|
|
mcall
|
|
add ebx,4
|
|
sub ecx,2
|
|
mcall
|
|
sub ecx,0x00010001
|
|
mcall
|
|
ret
|
|
endf
|
|
|
|
func calc_middle
|
|
shr eax,1
|
|
shr ebx,1
|
|
and eax,0x007F7F7F
|
|
and ebx,0x007F7F7F
|
|
add eax,ebx
|
|
ret
|
|
endf
|
|
|
|
func calc_3d_colors
|
|
pushad
|
|
m2m [cl_3d_normal],[sc.work]
|
|
m2m [cl_3d_inset],[sc.work_graph]
|
|
push [cl_3d_normal]
|
|
add byte[esp],48
|
|
jnc @f
|
|
mov byte[esp],255
|
|
@@: add byte[esp+1],48
|
|
jnc @f
|
|
mov byte[esp+1],255
|
|
@@: add byte[esp+2],48
|
|
jnc @f
|
|
mov byte[esp+2],255
|
|
@@: pop [cl_3d_outset]
|
|
mov eax,[cl_3d_inset]
|
|
mov ebx,[cl_3d_outset]
|
|
call calc_middle
|
|
mov ebx,[cl_3d_normal]
|
|
call calc_middle
|
|
mov [cl_3d_pushed],eax
|
|
mov eax,[cl_3d_normal]
|
|
mov ebx,[sc.work_text]
|
|
call calc_middle
|
|
mov [cl_3d_grayed],eax
|
|
popad
|
|
ret
|
|
endf
|
|
|
|
func draw_3d_panel ; x,y,w,h
|
|
push eax ebx ecx edx
|
|
cmp dword[esp+16+8],4
|
|
jl .exit
|
|
cmp dword[esp+16+4],4
|
|
jl .exit
|
|
mov ebx,[esp+16+16-2]
|
|
mov bx,[esp+16+8]
|
|
inc ebx
|
|
mov ecx,[esp+16+12-2]
|
|
mov cx,[esp+16+4]
|
|
inc ecx
|
|
mcall 13,,,[cl_3d_normal]
|
|
dec ebx
|
|
add bx,[esp+16+16]
|
|
mov cx,[esp+16+12]
|
|
mcall 38,,,[cl_3d_inset]
|
|
add ecx,[esp+16+4-2]
|
|
add cx,[esp+16+4]
|
|
mcall
|
|
mov bx,[esp+16+16]
|
|
mov ecx,[esp+16+12-2]
|
|
mov cx,[esp+16+4]
|
|
add cx,[esp+16+12]
|
|
mcall
|
|
add ebx,[esp+16+8-2]
|
|
add bx,[esp+16+8]
|
|
mcall
|
|
mov ebx,[esp+16+16-2]
|
|
mov bx,[esp+16+8]
|
|
add bx,[esp+16+16]
|
|
add ebx,1*65536-1
|
|
mov ecx,[esp+16+12-2]
|
|
mov cx,[esp+16+12]
|
|
add ecx,0x00010001
|
|
mcall ,,,[cl_3d_outset]
|
|
mov bx,[esp+16+16]
|
|
inc ebx
|
|
mov ecx,[esp+16+12-2]
|
|
mov cx,[esp+16+4]
|
|
add cx,[esp+16+12]
|
|
add ecx,2*65536-1
|
|
mcall
|
|
.exit:
|
|
pop edx ecx ebx eax
|
|
ret 4*4
|
|
endf
|