Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7496 → Rev 7497

/programs/develop/libraries/box_lib/trunk/t_edit.asm
1,6 → 1,6
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
; í«¥¬¥­â TextEditor ¤«ï Kolibri OS
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 20.02.2016 IgorA
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 21.10.2018 IgorA
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
 
;input:
275,6 → 275,10
jne @f
stdcall ted_but_undo,edi
@@:
cmp ah,45 ;Ctrl+X
jne @f
stdcall ted_but_cut,edi
@@:
cmp ah,46 ;Ctrl+C
jne @f
stdcall ted_but_copy,edi
609,13 → 613,13
proc ted_sel_start uses eax ecx
mov eax,ted_scr_h
mov ecx,ted_cur_x
add ecx,dword[eax+sb_offs_position]
add ecx,[eax+sb_offs_position]
mov ted_sel_x0,ecx
mov ted_sel_x1,ecx
 
mov eax,ted_scr_w
mov ecx,ted_cur_y
add ecx,dword[eax+sb_offs_position]
add ecx,[eax+sb_offs_position]
mov ted_sel_y0,ecx
mov ted_sel_y1,ecx
ret
630,12 → 634,12
push eax ecx
mov ecx,ted_cur_x
mov eax,ted_scr_h
add ecx,dword[eax+sb_offs_position]
add ecx,[eax+sb_offs_position]
mov ted_sel_x1,ecx
 
mov eax,ted_scr_w
mov ecx,ted_cur_y
add ecx,dword[eax+sb_offs_position]
add ecx,[eax+sb_offs_position]
mov ted_sel_y1,ecx
pop ecx eax
cmp ted_fun_draw_panel_buttons,0 ;redraw toolbar (need to button Copy)
900,7 → 904,7
je .else
push ebx
@@:
mov edx,dword[edx+2]
mov edx,[edx+2]
cmp edx,0
je @f
imul edx,sizeof.symbol
917,7 → 921,7
pop ebx
ret
.else:
mov edx,dword[edx+2]
mov edx,[edx+2]
cmp edx,0
je @f
imul edx,sizeof.symbol
943,7 → 947,7
je .else
push ebx
@@:
mov edx,dword[edx+6]
mov edx,[edx+6]
cmp edx,1
jle @f
imul edx,sizeof.symbol
961,7 → 965,7
pop ebx
ret
.else:
mov edx,dword[edx+6]
mov edx,[edx+6]
cmp edx,1
jle @f
imul edx,sizeof.symbol
1088,7 → 1092,7
jl .no_add ;ª®£¤  ¤«¨­­  <1 ¯à룠¥¬ ­  ª®­¥æ ä㭪樨, ¢® ¨§¡¥¦ ­¨¥ £«îª®¢
 
mov edi,[edit]
mov esi,dword[text]
mov esi,[text]
 
call ted_get_pos_by_cursor
call ted_get_text_perv_pos
1099,19 → 1103,19
je @f
push eax ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos);
mov eax,ted_scr_h
mov eax,dword[eax+sb_offs_position]
mov eax,[eax+sb_offs_position]
add eax,ted_cur_x ;eax - ­®¬¥à ᨬ¢®« 
mov dword[new_spc],eax
mov [new_spc],eax
 
mov eax,ted_scr_w
mov eax,dword[eax+sb_offs_position]
mov eax,[eax+sb_offs_position]
add eax,ted_cur_y ;eax - ­®¬¥à áâப¨
call ted_strlen ;ebx = line len
sub dword[new_spc],ebx ;®â ¯®§¨æ¨¨ ªãàá®à  ®â­¨¬ ¥¬ ¤«¨­­ã áâப¨, 㧭 ¥¬ ª®««¨ç¥á⢮ ¤®¡ ¢«ï¥¬ëå ¯à®¡¥«®¢
sub [new_spc],ebx ;®â ¯®§¨æ¨¨ ªãàá®à  ®â­¨¬ ¥¬ ¤«¨­­ã áâப¨, 㧭 ¥¬ ª®««¨ç¥á⢮ ¤®¡ ¢«ï¥¬ëå ¯à®¡¥«®¢
pop eax
@@:
 
mov ebx,dword[t_len]
mov ebx,[t_len]
 
mov dword[new_lin],0
cmp ted_gp_opt,0
1118,16 → 1122,16
jne @f
push eax
mov eax,ted_scr_w
mov eax,dword[eax+sb_offs_position]
mov eax,[eax+sb_offs_position]
add eax,ted_cur_y
inc eax
mov dword[new_lin],eax
mov [new_lin],eax
 
call ted_get_num_lines
sub dword[new_lin],eax
sub [new_lin],eax
;㢥«¨ç¨¢ ¥¬ «¨­¨¨ ¢ áªà®««¨­£¥ ­  ç¨á«® ¤®¡ ¢«¥­­ëå ¤®¯®«­¨â¥«ì­ëå áâப
mov ecx,ted_scr_w
add dword[ecx+sb_offs_max_area],eax ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì­®£® áªà®««¨­£ 
add [ecx+sb_offs_max_area],eax ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì­®£® áªà®««¨­£ 
pop eax
@@:
 
1302,11 → 1306,11
align 16
proc ted_but_convert_by_table uses eax edx edi esi, edit:dword, table:dword
mov edi,[edit]
mov esi,dword[table]
mov esi,[table]
mov edx,ted_tex
.cycle:
;¯¥à¥å®¤¨¬ ­  á«¥¤ãî騩 ᨬ¢®«
mov edx,dword[edx+6]
mov edx,[edx+6]
cmp edx,1
jle .end_text
imul edx,sizeof.symbol
1402,7 → 1406,7
align 16
proc ted_text_del uses ecx edx edi, edit:dword, del_opt:dword
mov edi,[edit]
mov ebx,dword[del_opt]
mov ebx,[del_opt]
 
xor cl,cl
test ebx,ted_opt_ed_move_cursor
1578,8 → 1582,8
ted_cur_move_down:
push eax ebx
mov ebx,ted_scr_w
mov dl,0
mov eax,dword[ebx+sb_offs_cur_area]
xor dl,dl
mov eax,[ebx+sb_offs_cur_area]
dec eax
cmp ted_cur_y,eax
jge @f
1588,9 → 1592,9
jmp .ret_f
@@:
mov eax,ted_cur_y
add eax,dword[ebx+sb_offs_position]
add eax,[ebx+sb_offs_position]
inc eax
cmp dword[ebx+sb_offs_max_area],eax
cmp [ebx+sb_offs_max_area],eax
jle @f
inc dword[ebx+sb_offs_position]
mov dl,8
1609,11 → 1613,11
ted_cur_move_page_up:
push eax ebx
mov ebx,ted_scr_w
mov eax,dword[ebx+sb_offs_cur_area]
mov eax,[ebx+sb_offs_cur_area]
xor dl,dl
cmp eax,dword[ebx+sb_offs_position]
cmp eax,[ebx+sb_offs_position]
jg @f
sub dword[ebx+sb_offs_position],eax
sub [ebx+sb_offs_position],eax
mov dl,1
@@:
cmp dword[ebx+sb_offs_position],0
1634,17 → 1638,17
mov ecx,ted_scr_w
 
xor dl,dl
mov eax,dword[ecx+sb_offs_max_area]
sub eax,dword[ecx+sb_offs_cur_area]
cmp dword[ecx+sb_offs_position],eax
mov eax,[ecx+sb_offs_max_area]
sub eax,[ecx+sb_offs_cur_area]
cmp [ecx+sb_offs_position],eax
jge @f
mov ebx,dword[ecx+sb_offs_cur_area]
add dword[ecx+sb_offs_position],ebx
mov ebx,[ecx+sb_offs_cur_area]
add [ecx+sb_offs_position],ebx
mov dl,1
mov dword[ecx+sb_offs_redraw],1
cmp dword[ecx+sb_offs_position],eax
cmp [ecx+sb_offs_position],eax
jle @f
mov dword[ecx+sb_offs_position],eax
mov [ecx+sb_offs_position],eax
@@:
pop ecx ebx eax
ret
1705,7 → 1709,7
push eax ebx
mov eax,ted_scr_h
xor dl,dl
mov ebx,dword[eax+sb_offs_cur_area]
mov ebx,[eax+sb_offs_cur_area]
cmp ted_cur_x,ebx
jge @f
inc ted_cur_x
1728,23 → 1732,23
push eax ebx ecx
mov eax,ted_cur_y
mov ecx,ted_scr_w
add eax,dword[ecx+sb_offs_position]
add eax,[ecx+sb_offs_position]
call ted_strlen
xor dl,dl
 
mov ecx,ted_scr_h
cmp ebx,dword[ecx+sb_offs_position]
cmp ebx,[ecx+sb_offs_position]
jge @f
mov dl,8
mov dword[ecx+sb_offs_position],ebx
mov [ecx+sb_offs_position],ebx
@@:
sub ebx,dword[ecx+sb_offs_position]
sub ebx,[ecx+sb_offs_position]
 
cmp ebx,dword[ecx+sb_offs_cur_area]
cmp ebx,[ecx+sb_offs_cur_area]
jle @f ; b---[---]---e
add dword[ecx+sb_offs_position],ebx
mov ebx,dword[ecx+sb_offs_cur_area]
sub dword[ecx+sb_offs_position],ebx
add [ecx+sb_offs_position],ebx
mov ebx,[ecx+sb_offs_cur_area]
sub [ecx+sb_offs_position],ebx
mov dl,8
@@:
mov ted_cur_x,ebx
1798,7 → 1802,7
; edx = pointer to 'perv' struct
align 16
ted_get_text_perv_pos:
mov edx,dword[edx+2]
mov edx,[edx+2]
imul edx,sizeof.symbol
add edx,ted_tex
ret
1809,7 → 1813,7
; edx = pointer to 'next' symbol struct
align 16
ted_get_text_next_pos:
mov edx,dword[edx+6]
mov edx,[edx+6]
imul edx,sizeof.symbol
add edx,ted_tex
ret
1826,10 → 1830,10
push eax ecx esi
mov esi,ted_cur_x
mov eax,ted_scr_h
add esi,dword[eax+sb_offs_position]
add esi,[eax+sb_offs_position]
mov ecx,ted_cur_y
mov eax,ted_scr_w
add ecx,dword[eax+sb_offs_position]
add ecx,[eax+sb_offs_position]
call ted_get_pos_by_coords
pop esi ecx eax
ret
2053,15 → 2057,15
push eax
mov eax,ted_scr_w
mov ted_cur_x,ecx
sub edx,dword[eax+sb_offs_position]
sub edx,[eax+sb_offs_position]
 
cmp edx,dword[eax+sb_offs_cur_area] ;ted_cur_y > [.cur_area]
cmp edx,[eax+sb_offs_cur_area] ;ted_cur_y > [.cur_area]
jl @f
push ebx
mov ebx,edx
sub ebx,dword[eax+sb_offs_cur_area]
sub ebx,[eax+sb_offs_cur_area]
inc ebx
add dword[eax+sb_offs_position],ebx
add [eax+sb_offs_position],ebx
sub edx,ebx
pop ebx
; ??? redrav
2132,7 → 2136,7
mov al,byte[edx]
shl ax,2 ;eax*=4
add eax,ted_arr_key_pos
mov eax,dword[eax]
mov eax,[eax]
cmp eax,0
jl @b ;if( (word_n=ted_arr_key_pos[(unsigned char)tex[i].c])>-1 ){
 
2150,7 → 2154,7
jmp .wh_1b
.wh_1e:
 
mov dword[begPos],edx ;bP=i;
mov [begPos],edx ;bP=i;
mov esi,1
align 4
.wh_2b: ;while(1){
2174,18 → 2178,18
ColToIndexOffset eax,ebx
cmp byte[ebx+esi],0
jne .if_0 ;if(Col[word_n].Text[pos]==0){
mov dword[endPos],edx ;eP=i;
mov [endPos],edx ;eP=i;
ColToIndexOffset eax,ebx
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+7]
mov byte[f_color],bl ;f_color=Col[word_n].color;
mov bl,[ebx+MAX_COLOR_WORD_LEN+7]
mov [f_color],bl ;f_color=Col[word_n].color;
 
mov byte[find],1
ColToIndexOffset eax,ebx ;... ebx = Col[word_n]
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+4]
mov bl,[ebx+MAX_COLOR_WORD_LEN+4]
cmp bl,0 ;if(Col[word_n].wwo)
je .if_2n
push edx
mov edx,dword[begPos]
mov edx,[begPos]
call ted_iterat_perv
 
btr bx,0 ;1-1
2205,7 → 2209,7
mov byte[find],0
.if_4e:
 
mov edx,dword[endPos]
mov edx,[endPos]
;call ted_iterat_next
 
btr bx,1 ;2-1
2271,7 → 2275,7
 
cmp byte[find],1 ;if(fnd)break;
je @f
mov edx,dword[begPos];i=bP;
mov edx,[begPos];i=bP;
jmp @b
@@:
 
2278,13 → 2282,13
cmp byte[find],1
jne .if_1e ;if(fnd){ // ¢ë¤¥«¥­¨¥ ­ ©¤¥­®£® ⥪áâ 
;if(!mode_sf1 || (mode_sf1 && strlen(Col[word_n].f1->c_str())>0)){
mov eax,dword[begPos]
mov bl,byte[f_color]
mov byte[eax+1],bl ;tex[bP].col=f_color;
mov eax,dword[endPos]
mov eax,[begPos]
mov bl,[f_color]
mov [eax+1],bl ;tex[bP].col=f_color;
mov eax,[endPos]
mov byte[eax+1],0xff ;tex[eP].col=255;
;return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
mov edx,dword[endPos]
mov edx,[endPos]
call ted_get_text_perv_pos
jmp @f
.if_1e:
2366,10 → 2370,10
 
push ebx ecx
xor ebx,ebx
mov bl,byte[edx]
mov bl,[edx]
shl bx,2 ;ebx*=4
add ebx,ted_arr_key_pos
mov ecx,dword[ebx]
mov ecx,[ebx]
cmp ecx,0
jl .if_0e ;if( (word_n=ted_arr_key_pos[(unsigned char)tf[0]])>-1 ){
push esi eax
2376,13 → 2380,13
mov ebx,ecx ;l_pos=word_n;
ColToIndexOffset ecx,esi
push cx
mov cl,byte[esi]
mov cl,[esi]
@@:
cmp ebx,ted_key_words_count ;while(l_pos<ted_key_words_count)
jge @f
;ColToIndexOffset ecx,esi
ColToIndexOffset ebx,eax
cmp cl,byte[eax] ;&& Col[l_pos].Text[0]==Col[word_n].Text[0])
cmp cl,[eax] ;&& Col[l_pos].Text[0]==Col[word_n].Text[0])
jne @f
inc ebx ;l_pos++;
jmp @b
2420,7 → 2424,7
cmp ecx,ebx ;if(word_n==l_pos) break;
je @f
call ted_iterat_next ;pos++;
cmp edx,dword[end_pos] ;for(...;i<strlen;...)
cmp edx,[end_pos] ;for(...;i<strlen;...)
je @f ;jge
inc esi
jmp @b
2544,6 → 2548,8
ret
endp
 
;output:
; al = 1 if delete
align 16
proc ted_but_cut uses edi, edit:dword
mov edi,[edit]
2562,8 → 2568,6
ret
endp
 
;output:
; al = 1 if copy text
align 16
proc ted_but_copy, edit:dword
pushad
2644,7 → 2648,7
je .no_buf_r
cmp eax,-1
je .no_buf_r
mov ecx,dword[eax]
mov ecx,[eax]
cmp ecx,1 ;size
jl .no_buf_r
cmp dword[eax+4],0 ;text
2863,12 → 2867,12
push eax ebx
call ted_get_num_lines
mov ebx,ted_scr_w
mov dword[ebx+sb_offs_position],eax ;áâ ¢¨¬ ¯®«§ã­®ª ­  ¯®á«¥¤­îî áâப㠤®ªã¬¥­â 
cmp eax,dword[ebx+sb_offs_cur_area]
mov [ebx+sb_offs_position],eax ;áâ ¢¨¬ ¯®«§ã­®ª ­  ¯®á«¥¤­îî áâப㠤®ªã¬¥­â 
cmp eax,[ebx+sb_offs_cur_area]
jle @f
mov eax,dword[ebx+sb_offs_cur_area] ;¯®«ãç ¥¬ ç¨á«® áâப ¢« §ïé¨å ¢ ®ª­®
mov eax,[ebx+sb_offs_cur_area] ;¯®«ãç ¥¬ ç¨á«® áâப ¢« §ïé¨å ¢ ®ª­®
@@:
sub dword[ebx+sb_offs_position],eax ;®â­¨¬ ¥¬ ®â ¯®«§ã­ª  ç¨á«® áâப ¢« §ïé¨å ¢ ®ª­® (­® ­¥ ¡®«ìè¥ â¥å, çâ® ¥áâì ¢ ¤®ªã¬¥­â¥)
sub [ebx+sb_offs_position],eax ;®â­¨¬ ¥¬ ®â ¯®«§ã­ª  ç¨á«® áâப ¢« §ïé¨å ¢ ®ª­® (­® ­¥ ¡®«ìè¥ â¥å, çâ® ¥áâì ¢ ¤®ªã¬¥­â¥)
dec eax
mov ted_cur_y,eax ;áâ ¢¨¬ ªãàá®à ­  ¯®á«¥¤­îî áâப㠤®ªã¬¥­â 
pop ebx eax
3080,7 → 3084,7
shl ax,2 ;㬭®¦ ¥¬ ¨­¤¥ªá æ¢¥â  ­  4 ¡ ©â 
mov ecx,ted_text_colors ;¯à¨¡ ¢«ï¥¬ ᬥ饭¨¥ 1-£® 梥â 
add ecx,eax
mov ecx,dword[ecx] ;ãáâ ­ ¢«¨¢ ¥¬ ⥪ã騩 梥â ⥪áâ  ¯® ᬥ饭¨î
mov ecx,[ecx] ;ãáâ ­ ¢«¨¢ ¥¬ ⥪ã騩 梥â ⥪áâ  ¯® ᬥ饭¨î
.exit:
or ecx,ted_font_size
pop edx eax
3141,7 → 3145,7
 
mov eax,SF_DRAW_TEXT
mov ecx,ted_text_colors
mov ecx,dword[ecx]
mov ecx,[ecx]
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
3772,7 → 3776,7
mov bx,dx
jmp .no_wnd
.in_wnd:
mov bx,0
xor bx,bx
.no_wnd:
mov edx,ted_color_wnd_work
int 0x40