Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 6085 → Rev 6086

/programs/develop/libraries/box_lib/trunk/t_edit.mac
1,6 → 1,6
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
; í«¥¬¥­â TextEditor ¤«ï Kolibri OS
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 28.06.2014 IgorA
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 20.01.2016 IgorA
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
 
;input:
2124,190 → 2124,190
;description:
; ”ã­ªæ¨ï ¤«ï ¯®¨áª  ¨ ¢ë¤¥«¥­¨ï ¯®¤á¢¥ç¥­ëå á«®¢
align 4
proc ted_text_find_sel_color
proc ted_text_find_sel_color uses eax ebx ecx esi
locals
begPos dd ? ;­ ç «ì­ ï ¯®§¨æ¨ï
endPos dd ? ;ª®­¥ç­ ï ¯®§¨æ¨ï
find db ? ;­ ©¤¥­® / ­¥ ­ ©¤¥­®
f_color db ? ;¨­¤¥ªá æ¢¥â  ­ ©¤¥­®£® á«®¢ 
begPos dd ? ;­ ç «ì­ ï ¯®§¨æ¨ï
endPos dd ? ;ª®­¥ç­ ï ¯®§¨æ¨ï
find db ? ;­ ©¤¥­® / ­¥ ­ ©¤¥­®
f_color db ? ;¨­¤¥ªá æ¢¥â  ­ ©¤¥­®£® á«®¢ 
endl
push eax ebx ecx esi
;eax = word_n ⥪ã騩 ­®¬¥à (¯®§¨æ¨ï) ¯à®¢¥à塞®£® á«®¢  ¢ ᯨ᪥
;ebx = ¤«ï à §­ëå 楫¥©
;ecx = l_pos ¯®á«¥¤­¨© ­®¬¥à (¯®§¨æ¨ï) ¯®¤å®¤ï饣® á«®¢  ¢ ᯨ᪥
;esi = ¤«ï à §­ëå 楫¥©, ­®¬¥à ¯à®¢¥à塞®£® ᨬ¢®«  ¢ á«®¢¥
mov dword[begPos],1
mov dword[endPos],1
mov byte[find],0
mov byte[f_color],1
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
mov dword[begPos],1
mov dword[endPos],1
mov byte[find],0
mov byte[f_color],1
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
 
xor eax,eax
mov al,byte[edx]
shl ax,2 ;eax*=4
add eax,ted_arr_key_pos
mov eax,dword[eax]
cmp eax,0
jl @b ;if( (word_n=ted_arr_key_pos[(unsigned char)tex[i].c])>-1 ){
xor eax,eax
mov al,byte[edx]
shl ax,2 ;eax*=4
add eax,ted_arr_key_pos
mov eax,dword[eax]
cmp eax,0
jl @b ;if( (word_n=ted_arr_key_pos[(unsigned char)tex[i].c])>-1 ){
 
mov ecx,eax
;while(l_pos<ted_key_words_count && Col[l_pos].Text[0]==Col[word_n].Text[0])
.wh_1b:
cmp ecx,ted_key_words_count
jge .wh_1e
ColToIndexOffset ecx,esi
mov bl,byte[esi]
ColToIndexOffset eax,esi
cmp bl,byte[esi]
jne .wh_1e
inc ecx
jmp .wh_1b
.wh_1e:
mov ecx,eax
;while(l_pos<ted_key_words_count && Col[l_pos].Text[0]==Col[word_n].Text[0])
.wh_1b:
cmp ecx,ted_key_words_count
jge .wh_1e
ColToIndexOffset ecx,esi
mov bl,byte[esi]
ColToIndexOffset eax,esi
cmp bl,byte[esi]
jne .wh_1e
inc ecx
jmp .wh_1b
.wh_1e:
 
mov dword[begPos],edx ;bP=i;
mov esi,1
mov dword[begPos],edx ;bP=i;
mov esi,1
align 4
.wh_2b: ;while(1){
call ted_iterat_next
 
.wh_2b: ;while(1){
call ted_iterat_next
;while(l_pos>word_n && Col[l_pos-1].Text[pos]!=tex[i].c)
.wh_3b:
cmp ecx,eax
jle .wh_3e
dec ecx
ColToIndexOffset ecx,ebx
inc ecx
;cmp byte[ebx+esi],byte[edx]
mov bl,byte[ebx+esi]
cmp bl,byte[edx]
je .wh_3e
dec ecx
jmp .wh_3b
.wh_3e:
 
;while(l_pos>word_n && Col[l_pos-1].Text[pos]!=tex[i].c)
.wh_3b:
cmp ecx,eax
jle .wh_3e
dec ecx
ColToIndexOffset ecx,ebx
inc ecx
;cmp byte[ebx+esi],byte[edx]
mov bl,byte[ebx+esi]
cmp bl,byte[edx]
je .wh_3e
dec ecx
jmp .wh_3b
.wh_3e:
ColToIndexOffset eax,ebx
cmp byte[ebx+esi],0
jne .if_0 ;if(Col[word_n].Text[pos]==0){
mov dword[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;
 
ColToIndexOffset eax,ebx
cmp byte[ebx+esi],0
jne .if_0 ;if(Col[word_n].Text[pos]==0){
mov dword[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 byte[find],1
ColToIndexOffset eax,ebx ;... ebx = Col[word_n]
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+4]
cmp bl,0 ;if(Col[word_n].wwo)
je .if_2n
push edx
mov edx,dword[begPos]
call ted_iterat_perv
 
mov byte[find],1
ColToIndexOffset eax,ebx ;... ebx = Col[word_n]
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+4]
cmp bl,0 ;if(Col[word_n].wwo)
je .if_2n
push edx
mov edx,dword[begPos]
call ted_iterat_perv
btr bx,0 ;1-1
jae .if_3e ;if(Col[word_n].wwo&1)
;u1= !(isalnum(cont_s)||cont_s=='_')
call isalnum
jae .if_3e
mov byte[find],0
jmp .if_4e
.if_3e:
 
btr bx,0 ;1-1
jae .if_3e ;if(Col[word_n].wwo&1)
;u1= !(isalnum(cont_s)||cont_s=='_')
call isalnum
jae .if_3e
mov byte[find],0
.if_3e:
btr bx,3 ;4-1
jae .if_4e ;if(Col[word_n].wwo&8)
;u1= !isalpha(cont_s);
call isalpha
jae .if_4e
mov byte[find],0
.if_4e:
 
btr bx,3 ;4-1
jae .if_4e ;if(Col[word_n].wwo&8)
;u1= !isalpha(cont_s);
call isalpha
jae .if_4e
mov byte[find],0
.if_4e:
mov edx,dword[endPos]
;call ted_iterat_next
 
mov edx,dword[endPos]
; call ted_iterat_next
btr bx,1 ;2-1
jae .if_5e ;if(Col[word_n].wwo&2)
;u1= !(isalnum(cont_s)||cont_s=='_')
call isalnum
jae .if_5e
mov byte[find],0
jmp .if_6e
.if_5e:
 
btr bx,1 ;2-1
jae .if_5e ;if(Col[word_n].wwo&2)
;u1= !(isalnum(cont_s)||cont_s=='_')
call isalnum
jae .if_5e
mov byte[find],0
.if_5e:
btr bx,4 ;5-1
jae .if_6e ;if(Col[word_n].wwo&16)
;u1= !isalpha(cont_s);
call isalpha
jae .if_6e
mov byte[find],0
.if_6e:
 
btr bx,4 ;5-1
jae .if_6e ;if(Col[word_n].wwo&16)
;u1= !isalpha(cont_s);
call isalpha
jae .if_6e
mov byte[find],0
.if_6e:
btr bx,2 ;3-1
jae .if_7e ;if(Col[word_n].wwo&4)
ColToIndexOffset eax,ebx
mov bx,word[ebx+MAX_COLOR_WORD_LEN+5]
call ted_iterat_next_pos_char
cmp edx,ted_tex_1
jle .if_7e
mov dword[endPos],edx
.if_7e:
 
btr bx,2 ;3-1
jae .if_7e ;if(Col[word_n].wwo&4)
ColToIndexOffset eax,ebx
mov bx,word[ebx+MAX_COLOR_WORD_LEN+5]
call ted_iterat_next_pos_char
cmp edx,ted_tex_1
jle .if_7e
mov dword[endPos],edx
.if_7e:
pop edx
.if_2n:
;if(i!=1){ // ­¥ ª®­¥æ ¤®ªã¬¥­â 
; cont_s=tex[eP].c;
; if(Col[word_n].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_'); // ­¥ ¡ãª¢.-ç¨á«. ᨬ¢®«
; if(u2 && Col[word_n].wwo&16) u2= !isalpha(cont_s); // ­¥ ç¨á«. ᨬ¢®«
; if(Col[word_n].wwo&4) eP=ted_iterat_next_pos_char(eP,Col[word_n].endc);
 
pop edx
.if_2n:
; if(i!=1){ // ­¥ ª®­¥æ ¤®ªã¬¥­â 
; cont_s=tex[eP].c;
; if(Col[word_n].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_'); // ­¥ ¡ãª¢.-ç¨á«. ᨬ¢®«
; if(u2 && Col[word_n].wwo&16) u2= !isalpha(cont_s); // ­¥ ç¨á«. ᨬ¢®«
; if(Col[word_n].wwo&4) eP=ted_iterat_next_pos_char(eP,Col[word_n].endc);
cmp eax,ecx
je .wh_2e ;if(word_n==l_pos) break; // do double - ¥á«¨ á«®¢® â®ç­® ¯®á«¥¤­¥¥
.if_0:
 
cmp eax,ecx
je .wh_2e ;if(word_n==l_pos) break; // do double - ¥á«¨ á«®¢® â®ç­® ¯®á«¥¤­¥¥
.if_0:
cmp edx,ted_tex_1
jle .wh_2e ;if(i==1) break;
 
cmp edx,ted_tex_1
jle .wh_2e ;if(i==1) break;
;while(l_pos>word_n && Col[word_n].Text[pos]!=tex[i].c)
.wh_4b:
cmp ecx,eax
jle .wh_4e
ColToIndexOffset eax,ebx
;cmp byte[ebx+esi],byte[edx]
mov bl,byte[ebx+esi]
cmp bl,byte[edx]
je .wh_4e
inc eax
jmp .wh_4b
.wh_4e:
 
;while(l_pos>word_n && Col[word_n].Text[pos]!=tex[i].c)
.wh_4b:
cmp ecx,eax
jle .wh_4e
ColToIndexOffset eax,ebx
;cmp byte[ebx+esi],byte[edx]
mov bl,byte[ebx+esi]
cmp bl,byte[edx]
je .wh_4e
inc eax
jmp .wh_4b
.wh_4e:
cmp eax,ecx
je .wh_2e;if(word_n==l_pos) break;
inc esi ;pos++;
jmp .wh_2b
.wh_2e:
 
cmp eax,ecx
je .wh_2e;if(word_n==l_pos) break;
inc esi ;pos++;
jmp .wh_2b
.wh_2e:
cmp byte[find],1 ;if(fnd)break;
je @f
mov edx,dword[begPos];i=bP;
jmp @b
@@:
 
cmp byte[find],1 ;if(fnd)break;
je @f
mov edx,dword[begPos];i=bP;
jmp @b
@@:
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 byte[eax+1],0xff ;tex[eP].col=255;
;return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
mov edx,dword[endPos]
call ted_get_text_perv_pos
jmp @f
.if_1e:
mov edx,ted_tex
@@:
 
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 byte[eax+1],0xff ;tex[eP].col=255;
; return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
mov edx,dword[endPos]
call ted_get_text_perv_pos
jmp @f
.if_1e:
mov edx,ted_tex
@@:
 
pop esi ecx ebx eax
ret
ret
endp
 
;input:
2315,62 → 2315,59
;output:
; cf=1 if symbol is...
align 4
tab_all_num db 0,0,0,0,0,0,11111111b,11b,11111110b,0xff,0xff,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0;,0,0,0,0,0,0,0,0 - tab_alpha_0,0,0,0,0,0,0,0
tab_alpha db 0,0,0,0,0,0,0,0,11111110b,0xff,0xff,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
tab_all_num db 0,0,0,0,0,0,0xff,11b,11111110b,0xff,0xff,10000111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0;,0,0,0,0,0,0,0,0 - tab_alpha_0,0,0,0,0,0,0,0
tab_alpha db 0,0,0,0,0,0,0,0,11111110b,0xff,0xff,10000111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
;output:
; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢ , æ¨äà  ¨«¨ '_'
align 4
isalnum:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
lea ebx,[tab_all_num]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
pop ebx eax
ret
push eax ebx
movzx eax,byte[edx] ;al=offset
shr eax,3
lea ebx,[tab_all_num]
add ebx,eax
movzx ax,byte[edx] ;al=bit
and ax,111b
bt word[ebx],ax
pop ebx eax
ret
 
;output:
; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢  ¨«¨ '_'
align 4
isalpha:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
lea ebx,[tab_alpha]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
pop ebx eax
ret
push eax ebx
movzx eax,byte[edx] ;al=offset
shr eax,3
lea ebx,[tab_alpha]
add ebx,eax
movzx ax,byte[edx] ;al=bit
and ax,111b
bt word[ebx],ax
pop ebx eax
ret
 
align 4
proc ted_show_help_f1, edit:dword
push eax edx edi
mov edi,dword[edit]
proc ted_show_help_f1 uses eax edx edi, edit:dword
mov edi,dword[edit]
 
call ted_get_pos_by_cursor
push edx
call ted_iterat_next_color_tag
mov eax,edx
pop edx
call ted_iterat_perv_color_tag
call ted_get_pos_by_cursor
push edx
call ted_iterat_next_color_tag
mov eax,edx
pop edx
call ted_iterat_perv_color_tag
 
cmp eax,ted_tex
jle @f
cmp edx,ted_tex_1
jle @f
stdcall ted_find_help_id,eax
@@:
;call ted_draw_main_cursor
call ted_draw_help_f1
pop edi edx eax
ret
cmp eax,ted_tex
jle @f
cmp edx,ted_tex_1
jle @f
stdcall ted_find_help_id,eax
@@:
;call ted_draw_main_cursor
call ted_draw_help_f1
ret
endp
 
;input: