Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 1337 → Rev 1338

/programs/other/t_edit/t_draw.inc
0,0 → 1,1291
mouse_wnd_main:
push eax ebx ecx
mcall 37,2 ;get mouse buttons
 
cmp al,1
jne @f
mcall 37,1 ;get mouse coords
mov ebx,[wndMain.top]
add ebx,[recMain.top]
cmp ax,bx
jl @f ;y_mouse<y_wnd
 
sub ebx,[recMain.top]
add ebx,[wndMain.height]
cmp bx,ax
jl @f ;y_mouse>y_wnd
 
mov ebx,[wndMain.left]
add ebx,[recMain.left]
mov ecx,eax
shr ecx,16
cmp cx,bx
jl @f ;x_mouse<x_wnd
 
sub ebx,[recMain.left]
add ebx,[wndMain.width]
cmp bx,cx
jl @f ;x_mouse>x_wnd
 
call draw_cursor_sumb
call wnd_main_click
;call draw_main_cursor ;???
jmp .no_in_wnd
@@:
call wnd_main_mouse_scroll
cmp [dragm],0
je .no_in_wnd
mov [dragm],0
call draw_but_toolbar
call draw_main_win
.no_in_wnd:
pop ecx ebx eax
ret
 
; input:
; eax->(x,y)
wnd_main_click:
push ecx edx
 
push eax
shr eax,16
and eax,0xffff
sub eax,[wndMain.left]
sub eax,[recMain.left]
 
xor edx,edx
mov ecx,[recMain.width]
div cx
;inc eax
cmp eax,[hScr.cur_area]
jle @f
mov eax,[hScr.cur_area]
@@:
;dec eax
mov [cur_x],eax
pop eax
 
push eax
and eax,0xffff
sub eax,[wndMain.top]
sub eax,[recMain.top]
 
xor edx,edx
mov ecx,[recMain.height]
div cx
inc eax
cmp eax,[wScr.cur_area]
jle @f
mov eax,[wScr.cur_area]
@@:
dec eax
mov [cur_y],eax
pop eax
 
cmp [dragm],0
je @f
call SelMove
jmp .sel_move
@@:
mov [dragm],1
call SelStart
.sel_move:
pop edx ecx
ret
 
wnd_main_mouse_scroll:
push eax ebx
mcall 37,7
cmp ax,0
je .no_scroll
mov ebx,dword[wScr.position] ;copy old scroll position
and eax,0xffff
btr ax,15
jae @f
or eax,0xffff8000
@@:
add dword[wScr.position],eax
 
mov eax,[wScr.position]
cmp eax,[wScr.max_area]
jb @f
mov dword[wScr.position],ebx ;if scroll position out of range
jmp .no_scroll
@@:
call draw_main_win
.no_scroll:
pop ebx eax
ret
 
draw_but_toolbar:
 
push ebx ecx edx
mov ecx,0x40000000
; mov edx,5*65536+25
mov edx,85*65536+2
call draw_but_icon
 
inc cx
; mov edx,30*65536+25
mov edx,110*65536+2
call draw_but_icon
 
call CanSave
cmp al,1
je @f
and ecx,0xffff
@@:
inc cx
; mov edx,55*65536+25
mov edx,135*65536+2
call draw_but_icon
or ecx,0x40000000
 
inc cx
mov edx,85*65536+25
call draw_but_icon
 
call IsSel
cmp al,0
jne @f
and ecx,0xffff
@@:
inc cx ; Cut
mov edx,110*65536+25
call draw_but_icon
 
inc cx ; Copy
mov edx,135*65536+25
call draw_but_icon
 
mov cx,10 ; Upper
mov edx,265*65536+25
call draw_but_icon
 
inc cx ; Lower
mov edx,290*65536+25
call draw_but_icon
 
inc cx ; Reverse
mov edx,315*65536+25
call draw_but_icon
or ecx,0x40000000
 
cmp byte[buf],0
jne @f
and ecx,0xffff
@@:
mov cx,6 ; Paste
mov edx,160*65536+25
call draw_but_icon
or ecx,0x40000000
 
inc cx
mov edx,185*65536+25
call draw_but_icon
 
inc cx
mov edx,210*65536+25
call draw_but_icon
 
inc cx
mov edx,235*65536+25
call draw_but_icon
 
mov ebx,[tim_Undo]
cmp [ch_tim],ebx
jg @f
and ecx,0xffff
@@:
mov cx,13
mov edx,345*65536+25
call draw_but_icon
or ecx,0x40000000
 
cmp [tim_Undo],1
jge @f
and ecx,0xffff
@@:
inc cx
mov edx,370*65536+25
call draw_but_icon
or ecx,0x40000000
 
inc cx
mov edx,400*65536+25
call draw_but_icon
 
inc cx
mov edx,425*65536+25
call draw_but_icon
 
mov cx,17
mov edx,450*65536+25
call draw_but_icon
 
pop edx ecx ebx
ret
 
 
;input:
; ebx = x*2^16+y coords to left up point clear line
; esi = 0 clear all rows
; edi - number text line
clear_line_before_draw:
push eax ebx ecx edx
sub ebx,0x10001 ;îòíèìàåì îòñòóïû äëÿ âûðàâíèâàíèÿ áóêâû ïî öåíòðó
cmp esi,0
jne @f
add bx,word[recMain.height]
inc edi ; ???
ror ebx,16
mov bx,word[wndMain.left]
add bx,word[recMain.left]
ror ebx,16
@@:
 
mov ax,word[wndMain.height]
add ax,word[wndMain.top]
cmp ax,bx
jl .no_clear
sub ax,bx
 
mov cx,bx
shl ecx,16
 
mov bx,word[wndMain.width]
sub bx,word[recMain.left]
mov cx,word[recMain.height]
mov edx,[WND_WORK_COLOR]
 
cmp esi,0
je .pusto
cmp ax,cx
jge @f
.pusto:
mov cx,ax
@@:
 
call IsSel
cmp al,0
je @f
cmp [seln.y0],edi
jg @f
cmp [seln.y1],edi
jl @f
mov edx,[SELECT_COLOR] ;draw selected line
@@:
 
mov eax,13 ;rect
int 0x40
 
call IsSel
cmp al,0
je .no_clear
 
mov al,13 ;rect
mov cx,word[recMain.height]
cmp [seln.y0],edi
jne @f
push bx
mov edx,[seln.x0] ; âåðõíÿÿ ïîëîñà (çàòèðàåò ñëåâà)
cmp edx,[hScr.position]
jle .in_wnd
sub edx,[hScr.position]
imul edx,[recMain.width]
mov bx,dx
jmp .no_wnd
.in_wnd:
mov bx,0
.no_wnd:
mov edx,[WND_WORK_COLOR]
int 0x40
pop bx
@@:
cmp [seln.y1],edi
jne @f
mov edx,[seln.x1] ; íèæíÿÿ ïîëîñà (çàòèðàåò ñïðàâà)
cmp edx,[hScr.position]
jle .in_wnd2
sub edx,[hScr.position]
imul edx,[recMain.width]
sub bx,dx
shl edx,16
add ebx,edx
.in_wnd2:
 
mov edx,[WND_WORK_COLOR]
int 0x40
@@:
 
.no_clear:
pop edx ecx ebx eax
ret
 
;include 't_debug.inc'
draw_main_win:
push eax ebx ecx edx edi esi
;---debug---
;mov ecx,0
;@@:
;call DebugSymb
;inc ecx
;cmp ecx,10
;jge @f
;jmp @b
;@@:
;ret
;---debug---
 
mov eax,4 ;draw text
mov esi,1
mov ecx,[tex_colors]
push dword[ecx]
pop ecx
 
mov ebx,[wndMain.left]
add ebx,[recMain.left]
inc ebx
shl ebx,16
add ebx,[wndMain.top]
add ebx,[recMain.top]
inc ebx
 
call SelNormalize ;need before draw select
mov edi,[wScr.position]
 
call clear_line_before_draw
call GetFirstVisiblePos
cmp edx,0
je .no_draw_text
@@:
call IteratNext
cmp edx,[tex_1]
jle .no_draw_text
 
;--- debug
;cmp dword[edx+6],maxChars
;jge .no_draw_text
;--- debug
 
; *** öâåòîâàÿ ðàçìåòêà
cmp byte[mode_colored],0
je .no_col_change
cmp byte[edx+1],0
je .no_col_change
call GetSymbColor
.no_col_change:
 
cmp byte [edx],13
jne .no_13
cmp [invis],1
jne .no_invis
push edx
mov edx,symbol_new_line
int 0x40
pop edx
.no_invis:
add bx,word [recMain.height]
;optimized output \/
mov ax,word [wndMain.height]
add ax,word [wndMain.top]
cmp bx,ax
jg .no_draw_text
mov ax,4
;optimized output /\
ror ebx,16
mov bx,word [wndMain.left]
add bx,word [recMain.left]
inc ebx
ror ebx,16
inc edi ;increment line number
call clear_line_before_draw
call OptDrawLineLeft
jmp @b
.no_13:
 
int 0x40
ror ebx,16
add bx,word [recMain.width]
mov si,word [wndMain.left]
add si,word [wndMain.width]
cmp bx,si
jl .no_opt
call OptDrawLineRight
.no_opt:
mov si,1
ror ebx,16
jmp @b
.no_draw_text:
xor esi,esi
call clear_line_before_draw
 
 
mov eax,13
;top panel with caption
mov ebx,[wndMain.left]
; add ebx,[recMain.left]
shl ebx,16
add ebx,[wndMain.width]
; sub ebx,[recMain.left]
mov edx,[WND_WORK_COLOR]
mov ecx,[wndMain.top] ;draw caption
shl ecx,16
add ecx,[recMain.top]
mov edx,[WND_CAPT_COLOR]
int 0x40
;left panel with numbers
; mov ebx,[wndMain.left]
; shl ebx,16
; add ebx,[recMain.left]
;mov cx,word[wndMain.height]
; mov cx,word[recMain.top]
; int 0x40
 
call draw_line_numbers
call draw_main_cursor
 
;---------------------------------------------
; set all_redraw flag for draw all ScrollBar
; In some cases it is necessity to draw only the area
; of moving of a "runner", for acceleration of output -
; in this case the flag needs to be reset to 0 (zero).
xor eax,eax
inc eax
mov [wScr.all_redraw],eax
mov [hScr.all_redraw],eax
 
; draw for Vertical ScrollBar
push dword wScr
call [scrollbar_ver_draw]
push dword hScr
call [scrollbar_hor_draw]
; reset all_redraw flag
xor eax,eax
mov [wScr.all_redraw],eax
mov [hScr.all_redraw],eax
;---------------------------------------------
 
mov eax,13
;left-bottom square
mov bx,word[wndMain.left]
shl ebx,16
mov bx,word[recMain.left]
mov ecx,[wndMain.top]
add ecx,[wndMain.height]
shl ecx,16
mov cx,word[hScr.size_y]
inc cx
mov edx,[sc.work]
int 0x40
 
;right-bottom square
mov ebx,[wndMain.left]
add ebx,[wndMain.width]
shl ebx,16
mov bx,word[wScr.size_x]
inc bx
int 0x40
 
pop esi edi edx ecx ebx eax
call draw_panel_find
call draw_panel_syntax
ret
 
;txtBUp db 24
;txtBDn db 25
;txtBRi db 26
;txtBLe db 27
draw_panel_find:
cmp byte[panel_id],TE_PANEL_FIND ;if not panel
jne @f
push eax ebx ecx edx
 
mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
mov ebx,TE_PANEL_WIDTH
mov cx,word[wndMain.top]
shl ecx,16
mov cx,20
mov edx,[sc.work]
int 0x40
 
mov eax,4 ;ðèñîâàíèå òåêñòà
mov ebx,30*65536+5
add bx,word[wndMain.top]
mov ecx,[sc.work_text]
or ecx,0x80000000
mov edx,txtFindCapt
int 0x40
 
push dword edit2
call [edit_box_draw]
 
mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
mov ebx,TE_PANEL_WIDTH
mov cx,word[wndMain.top]
add cx,20+15 ; 15 - height text box
shl ecx,16
mov cx,word[wndMain.height]
add cx,word[hScr.size_y]
sub cx,20+15-1 ; 15 - height text box
mov edx,[sc.work]
int 0x40
 
mov eax,8 ;êíîïêà
mov ebx,5*65536+85
mov cx,word[wndMain.top]
add cx,20+15+5
shl ecx,16
mov cx,20
mov edx,201 ;button id
mov esi,[sc.work_button]
int 0x40
 
mov eax,4 ;ðèñîâàíèå òåêñòà
mov ebx,15*65536+(20+15+10)
add bx,word[wndMain.top]
mov ecx,[sc.work_text]
or ecx,0x80000000
mov edx,txtFindNext
int 0x40
 
pop edx ecx ebx eax
ret
@@:
push eax edx
mov eax,8
mov edx,201
or edx,0x80000000
int 0x40
pop edx eax
ret
 
draw_panel_syntax:
cmp byte[panel_id],TE_PANEL_SYNTAX ;if not panel
jne @f
push eax ebx ecx edx
 
mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
mov ebx,TE_PANEL_WIDTH
mov cx,word[wndMain.top]
shl ecx,16
mov cx,20
mov edx,[sc.work]
int 0x40
 
push dword tree1
call dword[tl_draw]
 
mov [ws_dir_lbox.all_redraw],1
push dword ws_dir_lbox
call dword[scrollbar_ver_draw]
 
ror ecx,16
add ecx,dword[tree1.box_height]
add ecx,20
ror ecx,16
mov cx,word[wndMain.height]
add cx,word[hScr.size_y]
sub cx,20
sub ecx,dword[tree1.box_height]
inc cx
int 0x40
 
mov eax,8 ;êíîïêà
mov ebx,5*65536+65
mov cx,word[wndMain.top]
add cx,25
add ecx,dword[tree1.box_height]
shl ecx,16
mov cx,20
mov edx,200 ;button id
mov esi,[sc.work_button]
int 0x40
 
mov eax,4 ;ðèñîâàíèå òåêñòà
mov ebx,30*65536+5
add bx,word[wndMain.top]
mov ecx,[sc.work_text]
or ecx,0x80000000
mov edx,txtFormatCapt
int 0x40
 
mov ebx,10*65536+30
add ebx,dword[tree1.box_height]
add bx,word[wndMain.top]
mov edx,txtFormatApply
int 0x40
 
pop edx ecx ebx eax
ret
@@:
push eax edx
mov eax,8
mov edx,200
or edx,0x80000000
int 0x40
pop edx eax
ret
 
draw_cur_line:
push eax ebx ecx edx esi edi
 
mov edi,[cur_y]
 
mov ebx,[wndMain.left]
add ebx,[recMain.left]
inc ebx
shl ebx,16
add ebx,edi
imul bx,word[recMain.height]
add ebx,[wndMain.top]
add ebx,[recMain.top]
inc ebx
 
add edi,[wScr.position]
mov esi,1
call SelNormalize ;need before draw select
call clear_line_before_draw
 
mov esi,[hScr.position]
mov ecx,edi
call GetPosByParam
 
cmp [gpOpt],2
jne .no_draw_text
; mov eax,4 ;draw text
call GetSymbColor
mov esi,1 ;draw 1 symbol
@@:
;call IteratNext
cmp edx,[tex_1]
jle .no_draw_text
 
; *** öâåòîâàÿ ðàçìåòêà
cmp byte[mode_colored],0
je .no_col_change
cmp byte[edx+1],0
je .no_col_change
call GetSymbColor
.no_col_change:
 
mov eax,4 ;draw text
cmp byte [edx],13
jne .no_13
cmp [invis],1
jne .no_draw_text
push edx
mov edx,symbol_new_line
int 0x40
pop edx
jmp .no_draw_text
.no_13:
 
int 0x40
ror ebx,16
add bx,word[recMain.width]
; cmp bx,word[wndMain.width]
mov ax,word[wndMain.width]
add ax,word[wndMain.left] ;ax = îòñòóï ïî îñè x
cmp bx,ax
jge .no_draw_text ;Opt
ror ebx,16
call IteratNext
jmp @b
.no_draw_text:
 
pop edi esi edx ecx ebx eax
call draw_main_cursor
ret
 
MIN_M_WND_H equ 100
MIN_W_SCRL_ARE equ 3
MIN_H_SCRL_ARE equ 3
EvSize:
push eax ecx edx edi
m2m [wndMain.width],[procinfo.client_box.width]
mov ax,word[wndMain.left]
sub word[wndMain.width],ax
mov eax,[wScr] ;+0 size_x
sub word[wndMain.width],ax
 
m2m [wndMain.height],[procinfo.client_box.height]
cmp [wndMain.height],MIN_M_WND_H
jg @f
mov [wndMain.height],MIN_M_WND_H
@@:
 
mov ax,word[hScr.size_y]
sub word[wndMain.height],ax
mov eax,[wndMain.height] ;.height = .top+.height
mov word[hScr.start_y],ax
mov eax,[wndMain.top]
sub word[wndMain.height],ax
 
m2m word[wScr.start_x],word[wndMain.width]
mov ax,word[wndMain.left]
add [wScr.start_x],ax
m2m word[wScr.size_y],word[wndMain.height]
 
m2m word[hScr.start_x],word[recMain.left]
add [hScr.start_x],ax ;ax=[wndMain.left]
mov eax,[wndMain.width]
sub ax,word[recMain.left]
mov word[hScr.size_x],ax
 
mov eax,[wndMain.height] ;calculate lines in page
sub eax,[recMain.top]
xor edx,edx
mov ecx,[recMain.height]
div ecx
cmp eax,MIN_W_SCRL_ARE
jg @f
mov eax,MIN_W_SCRL_ARE
@@:
mov [wScr.cur_area],eax
 
mov eax,[wndMain.width] ;calculate cols in page
sub eax,[recMain.left]
xor edx,edx
mov ecx,[recMain.width]
div ecx
cmp eax,MIN_H_SCRL_ARE
jg @f
mov eax,MIN_H_SCRL_ARE
@@:
dec eax ; ???
mov [hScr.cur_area],eax
 
mov edi,dword tree1
m2m tl_box_top,dword[wndMain.top]
add tl_box_top,20
 
m2m dword[edit2.top],dword[wndMain.top]
add dword[edit2.top],20
 
pop edi edx ecx eax
call OnInitialUpdate
ret
 
OnInitialUpdate:
mov [wScr.redraw],1
mov [hScr.redraw],1
ret
 
;output:
; edx = pointer to symbol
; edx = 0 if text not in screen
GetFirstVisiblePos:
push ecx
mov edx,[tex]
xor ecx,ecx
@@:
cmp ecx,[wScr.position]
je @f
call IteratNext
cmp edx,[tex_1]
jle @f
cmp byte [edx],13
jne @b
inc ecx
jmp @b
@@:
 
cmp ecx,[wScr.position]
je @f
xor edx,edx
@@:
cmp ecx,[wScr.max_area]
jle @f
mov [wScr.max_area],ecx
@@:
pop ecx
call OptDrawLineLeft
ret
 
 
 
;input:
; edx = pointer to symbol
;output:
; edx = pointer to first left symbol
OptDrawLineLeft:
push ecx
mov ecx,[hScr.position]
cmp ecx,0
je .ret_f
push eax
mov eax,edx
 
cmp edx,[tex]
jne @f
call IteratNext
jmp .beg_cycle
@@:
 
cmp ecx,0
je @f
 
cmp byte[edx],13
jne @f
call IteratNext
.beg_cycle:
@@:
cmp edx,[tex_1]
jle @f
cmp byte[edx],13
je @f
cmp ecx,0
je @f
mov eax,edx
call IteratNext
dec ecx
jmp @b
@@:
mov edx,eax
pop eax
.ret_f:
pop ecx
call GetSymbColor
ret
 
;input:
; edx = pointer to symbol
;output:
; edx = pointer to 13 symbol
OptDrawLineRight:
push eax
mov eax,edx
@@:
cmp edx,[tex_1]
jle @f
cmp byte[edx],13
je @f
mov eax,edx
call IteratNext
jmp @b
@@:
mov edx,eax ;perv sumbol
pop eax
call GetSymbColor
ret
 
txtRow db '‘âப ',0
txtCol db '‡­ ª',0
txtOtm db 'Žâ¬¥­ë',0
 
draw_main_cursor:
push eax ebx ecx edx edi esi
 
mov eax,13 ;draw cursor
mov ecx,[wndMain.top] ;calc rect -> y0,y1
add ecx,[recMain.top]
mov edx,[cur_y]
imul edx,[recMain.height]
add ecx,edx
 
cmp [curMod],1
jne @f
mov edx,[recMain.height]
inc edx ; 1->1, 3->2, 5->3, ...
shr edx,1
add ecx,edx
@@:
shl ecx,16
add ecx,[recMain.height]
cmp [curMod],1
jne @f
shr cx,1
@@:
 
mov ebx,[wndMain.left] ;calc rect -> x0,x1
add ebx,[recMain.left]
mov edx,[cur_x]
imul edx,[recMain.width]
add ebx,edx
shl ebx,16
add ebx,[recMain.width]
 
mov edx,[CURSOR_COLOR]
int 0x40
 
call GetPos
cmp [gpOpt],2
jne @f
mov eax,4 ;draw text
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
cmp [curMod],1
jne .no_up_tetx
mov cx,word[recMain.height]
inc cx ; 1->1, 3->2, 5->3, ...
shr cx,1
sub bx,cx
.no_up_tetx:
mov ecx,[CUR_TEXT_COLOR]
call ConvertInvisSymb
int 0x40
@@:
 
 
 
mov eax,4
mov ebx,[wndMain.left]
add ebx,[recMain.left]
shl ebx,16
add ebx,[wndMain.top]
add ebx,3
mov ecx,[WND_BORD_COLOR]
or ecx,0x80000000
mov edx,txtRow
int 0x40
 
add ebx,0x500000
mov edx,txtCol
int 0x40
 
cmp [tim_Undo],0
je @f
add ebx,0x500000
mov edx,txtOtm
int 0x40
sub ebx,0x500000
@@:
 
call draw_bufer
call draw_help_f1
 
mov eax,47 ;draw cursor coords
mov esi,[WND_BORD_COLOR]
or esi,0x40000000
mov edi,[WND_WORK_COLOR]
 
mov edx,ebx
ror edx,16
sub edx,35
ror edx,16
;add edx,3
mov ebx,0x40000 ;Row=...
mov ecx,[cur_y]
inc ecx
add ecx,[wScr.position]
int 0x40
 
;mov ebx,0x40000 ;Col=...
mov ecx,[cur_x]
inc ecx
add ecx,[hScr.position]
add edx,0x500000
int 0x40
 
cmp [tim_Undo],0
je @f
mov ecx,[tim_Undo]
add edx,0x500000
int 0x40
@@:
 
pop esi edi edx ecx ebx eax
ret
 
 
draw_bufer:
push eax ebx ecx edx esi edi
cmp byte[buf],0
je @f
mov ebx,[wndMain.left]
add ebx,[recMain.left]
add bx,250
shl ebx,16
add ebx,[wndMain.top]
add ebx,3
mov ecx,[WND_BORD_COLOR]
or ecx,0x40000000
mov edi,[WND_WORK_COLOR]
mov edx,txtBuf
mov esi,buf
call strlen
cmp eax,15
jle .crop_buf
mov eax,15
.crop_buf:
mov esi,7
add esi,eax
 
mov eax,4
int 0x40
@@:
pop edi esi edx ecx ebx eax
ret
 
draw_help_f1:
push eax ebx ecx edx edi
mov eax,13 ;clear place before draw help
mov ebx,[wndMain.left]
add ebx,[recMain.left]
shl ebx,16
add ebx,[wndMain.width]
sub ebx,[recMain.left]
mov ecx,[wndMain.top]
add ecx,13
shl ecx,16
add ecx,[recMain.height]
mov edx,[WND_CAPT_COLOR]
int 0x40
 
cmp [help_id],-1
je @f;.no_help
mov eax,[help_id]
ColToIndexOffset eax,edx
 
;SetCoordinates
mov ebx,[wndMain.left]
add ebx,[recMain.left]
shl ebx,16
add ebx,[wndMain.top]
add ebx,13 ;=3+10
 
;SetTextColor
xor eax,eax
mov al,byte[edx+MAX_COLOR_WORD_LEN+6]
shl ax,2
mov ecx,[tex_colors]
add ecx,eax
push dword[ecx]
pop ecx
or ecx,0xc0000000 ;SetTextStyles
mov edi,[WND_WORK_COLOR]
 
mov eax,4
int 0x40
 
;*** draw help string ***
mov ecx,[WND_BORD_COLOR]
or ecx,0x80000000
mov edi,dword[edx+MAX_COLOR_WORD_LEN]
cmp edi,0
je @f
add edi,dword[tex_help_f1]
mov edx,edi
add ebx,0x500000
int 0x40
@@:
;.no_help:
pop edi edx ecx ebx eax
ret
 
draw_line_numbers:
push eax ebx ecx edx esi ;edi
;line numbers
mov eax,47
mov esi,[WND_BORD_COLOR]
;or esi,0x40000000
;mov edi,[WND_WORK_COLOR]
mov ebx,0x40000 ;format
 
mov ecx,[wScr.position]
inc ecx
mov dx,3
add dx,word[wndMain.left]
shl edx,16
mov dx,word[wndMain.top]
add dx,word[recMain.top]
@@:
 
push eax ebx ecx edx
mov eax,13
;left panel with numbers
mov ebx,[wndMain.left]
shl ebx,16
add ebx,[recMain.left]
mov cx,dx
; mov ecx,[wndMain.top] ;draw caption
; add ecx,[recMain.top]
shl ecx,16
mov cx,word [recMain.height]
mov edx,[WND_CAPT_COLOR]
int 0x40
pop edx ecx ebx eax
 
int 0x40
inc ecx
add dx,word[recMain.height]
sub dx,word[wndMain.top]
cmp dx,word[wndMain.height]
jge @f
add dx,word[wndMain.top]
jmp @b
@@:
 
pop esi edx ecx ebx eax
ret
 
 
draw_cursor_sumb: ;this function need to optimize output
push eax ecx edx
mov eax,13 ;rect
mov ebx,[wndMain.left]
add ebx,[recMain.left]
mov edx,[cur_x]
imul edx,[recMain.width]
add ebx,edx
shl ebx,16
add ebx,[recMain.width]
 
mov ecx,[wndMain.top] ;calc rect -> y0,y1
add ecx,[recMain.top]
mov edx,[cur_y]
imul edx,[recMain.height]
add ecx,edx
shl ecx,16
add ecx,[recMain.height]
 
mov edx,[WND_WORK_COLOR]
push ecx
call SelNormalize
 
mov ecx,[wScr.position]
sub [seln.y0],ecx
sub [seln.y1],ecx
 
mov ecx,[cur_y]
cmp ecx,[seln.y0]
jl .no_cur_sel
cmp ecx,[seln.y1]
jg .no_cur_sel
mov edx,[SELECT_COLOR]
cmp ecx,[seln.y0]
jne @f
mov ecx,[cur_x]
add ecx,[hScr.position]
cmp ecx,[seln.x0]
jge @f
mov edx,[WND_WORK_COLOR]
@@:
 
mov ecx,[cur_y]
cmp ecx,[seln.y1]
jne .no_cur_sel
mov ecx,[cur_x]
add ecx,[hScr.position]
cmp ecx,[seln.x1]
jl .no_cur_sel
mov edx,[WND_WORK_COLOR]
 
.no_cur_sel:
pop ecx
int 0x40
 
call GetPos
cmp [gpOpt],2
jne @f
push esi
mov eax,4 ;draw text
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
;mov ecx,[WND_TEXT_COLOR]
call GetSymbColor
call ConvertInvisSymb
int 0x40
pop esi
@@:
 
pop edx ecx eax
ret
 
 
 
;input:
; edx = pointer to text
;output:
; ecx = color
; if mode_colored=0 then ecx=WND_TEXT_COLOR
GetSymbColor:
mov ecx,[WND_TEXT_COLOR]
 
push eax edx
cmp byte[mode_colored],0
je .exit
jmp .on_first
@@:
call IteratPerv
cmp edx,[tex_1]
jle .exit
.on_first:
xor eax,eax
mov al,byte[edx+1]
cmp al,0
je @b
 
;cmp al,0xff
;je .exit
cmp eax,[ColColor]
jge .exit
 
shl ax,2 ;*4
mov ecx,[tex_colors]
add ecx,eax
push dword[ecx]
pop ecx
.exit:
pop edx eax
ret
 
;input:
; edx = pointer to text
ConvertInvisSymb:
cmp [invis],1
jne @f
cmp byte [edx],13
jne @f
mov edx,symbol_new_line
@@:
ret
 
;input:
; ecx = 0x4000____
; cx = icon index
; edx = x*2^16+y
draw_but_icon:
push eax ebx
 
mov eax,8 ;êíîïêà
push ecx edx esi
mov ebx,edx
mov edx,ecx
add edx,3
mov cx,bx
shl ecx,16
mov cx,19 ;=20-1
mov bx,19 ;=20-1
mov esi,[sc.work_button]
int 0x40
pop esi edx ecx
 
mov ebx,ecx
ror ebx,16
cmp bx,0x4000
jne @f
 
mov eax,7 ;bmp
mov ebx,[bmp_icon]
push ecx
and ecx,0xffff
imul ecx,1200
add ebx,ecx
mov ecx,20
shl ecx,16
add ecx,20
int 0x40
pop ecx
 
@@:
pop ebx eax
ret