forked from KolibriOS/kolibrios
3810c9cbc8
t_edit_synt: update program, clean code git-svn-id: svn://kolibrios.org@7575 a494cfbc-eb01-0410-851d-a64ba20cac60
446 lines
8.6 KiB
PHP
446 lines
8.6 KiB
PHP
|
|
struct TexColViv
|
|
Text rb MAX_COLOR_WORD_LEN ; ñëîâî äëÿ ïîäñâåòêè
|
|
f1 dd 0 ; ñïðàâêà ïî ñëîâó
|
|
flags db ? ; f1+4 ôëàãè èñïîëüçóåìûå ïðè âûäåëåíèè
|
|
endc db ? ; f1+5 ñèìâîë êîíöà âûäåëåíèÿ (èñïîëüçóåòñÿ ïðè flags&4)
|
|
escc db ? ; f1+6 ýêðàíèðóþùèé ñèìâîë (èñïîëüçóåòñÿ ïðè flags&4)
|
|
color db ? ; f1+7 íîìåð öâåòà
|
|
ends
|
|
|
|
count_colors_text dd 1
|
|
ColWords dd 0
|
|
color_cursor dd ?
|
|
color_wnd_capt dd ?
|
|
color_wnd_work dd ?
|
|
color_wnd_bord dd ?
|
|
color_select dd ?
|
|
color_cur_text dd ?
|
|
color_wnd_text dd ?
|
|
|
|
options_file dd 0
|
|
open_file_size dd 0
|
|
unpac_mem dd 0
|
|
tex_colors dd 0
|
|
tex_help_f1 dd 0
|
|
|
|
Col dd 0 ;óêàçàòåëü íà ñòðóêòóðû êëþ÷åâûõ ñëîâ TexColViv
|
|
|
|
keyUpr dd 0
|
|
err_opn db 0 ;îøèáêà îòêðûòèÿ ôàéëà
|
|
err_sav db 0 ;îøèáêà ñîõðàíåíèÿ ôàéëà
|
|
|
|
sc system_colors
|
|
|
|
run_file_70 FileInfoBlock
|
|
|
|
align 4
|
|
InitColText:
|
|
pushad
|
|
|
|
mov ebx,[fn_col_option]
|
|
copy_path ebx,fn_syntax_dir,file_name_rez,0
|
|
copy_path file_name_rez,sys_path,file_name,0
|
|
|
|
;[fn_col_option] = '*.syn'
|
|
;fn_syntax_dir = 'info/'
|
|
;file_name_rez = 'info/*.syn'
|
|
|
|
mov [run_file_70.Function], SSF_GET_INFO
|
|
mov [run_file_70.Position], 0
|
|
mov [run_file_70.Flags], 0
|
|
mov dword[run_file_70.Count], 0
|
|
mov dword[run_file_70.Buffer], open_b
|
|
mov byte[run_file_70+20], 0
|
|
mov dword[run_file_70.FileName], file_name
|
|
mcall SF_FILE,run_file_70
|
|
|
|
mov ecx,dword[open_b+32] ;+32 qword: ðàçìåð ôàéëà â áàéòàõ
|
|
stdcall mem.ReAlloc,[options_file],ecx
|
|
mov [options_file],eax
|
|
mov [open_file_size],ecx
|
|
|
|
mov [run_file_70.Function], SSF_READ_FILE
|
|
mov [run_file_70.Position], 0
|
|
mov [run_file_70.Flags], 0
|
|
mov [run_file_70.Count], ecx
|
|
m2m dword[run_file_70.Buffer], dword[options_file]
|
|
mov byte[run_file_70+20], 0
|
|
mov dword[run_file_70.FileName], file_name
|
|
mcall SF_FILE,run_file_70 ;çàãðóæàåì ôàéë èçîáðàæåíèß
|
|
test eax,eax
|
|
jnz .no_colors
|
|
cmp ebx,0xffffffff
|
|
je .no_colors
|
|
|
|
mcall SF_SET_CAPTION,1,file_name
|
|
|
|
;init: count_colors_text, ColWords, ...
|
|
mov dword[count_colors_text],1
|
|
mov dword[ColWords],0
|
|
mov dword[tex_help_f1],0
|
|
|
|
mov edi,[options_file]
|
|
cmp dword[edi],'KPCK'
|
|
jne .end_unpack
|
|
;notify_window_run ...
|
|
mov ecx,[edi+4]
|
|
cmp [open_file_size],ecx
|
|
jge @f
|
|
;åñëè äëß ðàñïàêîâàíîãî ôàéëà íå õâàòàåò âûäåëåííîé ïàìßòè
|
|
stdcall mem.ReAlloc,edi,ecx
|
|
mov [options_file],eax
|
|
mov [open_file_size],ecx
|
|
@@:
|
|
;âûäåëåíèå ïàìßòè äëß ðàñïàêîâêè ôàéëà
|
|
stdcall mem.ReAlloc,[unpac_mem],ecx
|
|
mov [unpac_mem],eax
|
|
|
|
stdcall unpack,[options_file],eax
|
|
mov edi,[options_file]
|
|
mov esi,[unpac_mem]
|
|
mov ecx,[edi+4]
|
|
cld
|
|
rep movsb
|
|
.end_unpack:
|
|
mov esi,[options_file]
|
|
mov edi,count_colors_text
|
|
mov ecx,9
|
|
rep movsd
|
|
|
|
mov eax,[options_file]
|
|
add eax,32
|
|
mov [tex_colors],eax
|
|
|
|
mov eax,[count_colors_text] ;init: Col (offset to key words)
|
|
add eax,8
|
|
shl eax,2
|
|
add eax,[options_file]
|
|
mov [Col],eax
|
|
|
|
;init: tex_help_f1
|
|
mov ecx,[ColWords]
|
|
imul ecx,sizeof.TexColViv
|
|
add ecx,[Col]
|
|
mov [tex_help_f1],ecx
|
|
|
|
;ôîðìèðîâàíèå òåêñòà â îêíå òåêñòîâîãî ðåäàêòîðà
|
|
stdcall [ted_clear], tedit0,1
|
|
|
|
stdcall print_capt,capt_header
|
|
|
|
stdcall print_capt,col_1
|
|
stdcall print_color,[color_cursor]
|
|
stdcall print_capt,col_2
|
|
stdcall print_color,[color_wnd_capt]
|
|
stdcall print_capt,col_3
|
|
stdcall print_color,[color_wnd_work]
|
|
stdcall print_capt,col_4
|
|
stdcall print_color,[color_wnd_bord]
|
|
stdcall print_capt,col_5
|
|
stdcall print_color,[color_select]
|
|
stdcall print_capt,col_6
|
|
stdcall print_color,[color_cur_text]
|
|
|
|
stdcall print_capt,col_7
|
|
mov ecx,[count_colors_text] ;êîëè÷åñòâî öâåòîâ òåêñòà
|
|
mov eax,[tex_colors]
|
|
@@:
|
|
stdcall print_capt,capt_type_dd
|
|
stdcall print_color,[eax]
|
|
add eax,4
|
|
loop @b
|
|
|
|
stdcall print_capt,capt_lbl_wo
|
|
mov ecx,[ColWords]
|
|
mov eax,[Col]
|
|
xor ebx,ebx
|
|
@@: ;öèêë ïî ïîäñâå÷èâàåìûì ñëîâàì
|
|
inc ebx
|
|
stdcall print_word,eax,ebx
|
|
add eax,sizeof.TexColViv
|
|
loop @b
|
|
|
|
stdcall print_capt,capt_lbl_f1
|
|
mov ecx,[ColWords]
|
|
mov eax,[Col]
|
|
xor ebx,ebx
|
|
@@: ;öèêë ïî ñïðàâêàì ê ïîäñâ. ñëîâàì
|
|
inc ebx
|
|
stdcall print_word_f1,eax,ebx
|
|
add eax,sizeof.TexColViv
|
|
loop @b
|
|
|
|
; ïîäãîòîâêà äëß PathShow
|
|
stdcall [PathShow_prepare], PathShow_data_1
|
|
call draw_window
|
|
|
|
.no_colors:
|
|
popad
|
|
ret
|
|
|
|
align 4
|
|
proc print_color, color:dword
|
|
pushad
|
|
mov eax,dword[color]
|
|
|
|
mov ebx,eax ;ìåíÿåì ìåñòàìè red è blue
|
|
shr ebx,16
|
|
xchg al,bl
|
|
and eax,0xffff
|
|
and ebx,0xff
|
|
shl ebx,16
|
|
or eax,ebx
|
|
|
|
ror al,4
|
|
ror eax,8
|
|
ror al,4
|
|
ror eax,8
|
|
ror al,4
|
|
rol eax,16
|
|
mov edi,text_buffer
|
|
mov word[edi],'0x'
|
|
add edi,2
|
|
mov ecx,6
|
|
@@:
|
|
mov ebx,eax
|
|
and ebx,0xf
|
|
cmp bx,9
|
|
jle .cifra
|
|
add bx,39
|
|
.cifra:
|
|
add bx,48
|
|
mov byte[edi],bl
|
|
inc edi
|
|
shr eax,4
|
|
loop @b
|
|
mov byte[edi],13
|
|
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
|
|
stdcall [ted_text_add], tedit0,text_buffer,9,ebx
|
|
popad
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
proc print_capt, capt:dword
|
|
pushad
|
|
mov esi,[capt]
|
|
stdcall str_len,esi
|
|
stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
|
|
popad
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
proc print_word, text:dword, index:dword
|
|
pushad
|
|
mov edi,text_buffer
|
|
mov byte[edi],0
|
|
stdcall str_cat,edi,capt_beg_word
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
|
|
mov ecx,[text]
|
|
stdcall code_string,ecx,edi ;êîäèðóåì ñòðîêó ñ êëþ÷åâûì ñëîâîì
|
|
stdcall str_cat,edi,capt_end_word
|
|
|
|
cmp dword[ecx+TexColViv.f1],0
|
|
je @f
|
|
stdcall str_cat,edi,capt_calc_f1
|
|
stdcall str_cat_value,edi,[index]
|
|
stdcall str_cat,edi,capt_lbl_f1_use
|
|
@@:
|
|
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
mov word[edi],','
|
|
inc edi
|
|
movzx eax,byte[ecx+TexColViv.flags]
|
|
stdcall str_cat_value,edi,eax
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
mov word[edi],','
|
|
inc edi
|
|
|
|
movzx eax,word[ecx+TexColViv.endc] ;(escc shl 8)+endc
|
|
or eax,eax ;ïðîâåðßåì åñòü ëè çàâåðøàþùèé è ýêðàíèíóþùèé ñèìâîë
|
|
jz @f
|
|
stdcall str_cat_value,edi,eax
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
@@:
|
|
mov word[edi],','
|
|
inc edi
|
|
|
|
movzx eax,byte[ecx+TexColViv.color]
|
|
stdcall str_cat_value,edi,eax
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
mov word[edi],13
|
|
|
|
mov esi,text_buffer
|
|
stdcall str_len,esi
|
|
stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
|
|
|
|
popad
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
proc print_word_f1, text:dword, index:dword
|
|
pushad
|
|
mov edi,[text]
|
|
mov esi,[edi+TexColViv.f1]
|
|
cmp esi,0
|
|
je @f
|
|
mov ebx,text_buffer
|
|
mov byte[ebx],0
|
|
stdcall str_cat,ebx,capt_point
|
|
stdcall str_cat_value,ebx,[index]
|
|
stdcall str_cat,ebx,capt_beg_db
|
|
stdcall str_len,ebx
|
|
add ebx,eax
|
|
|
|
add esi,[tex_help_f1]
|
|
stdcall code_string,esi,ebx ;êîäèðóåì ñòðîêó
|
|
stdcall str_cat,ebx,capt_end_word_f1
|
|
|
|
mov ebx,text_buffer
|
|
stdcall str_len,ebx
|
|
stdcall [ted_text_add], tedit0,ebx,eax,ted_opt_ed_move_cursor
|
|
@@:
|
|
popad
|
|
ret
|
|
endp
|
|
|
|
;description:
|
|
; êîäèðîâêà ñòðîêè, çàìåíà íåïå÷àòàåìûõ ñèìâîëîâ íà ÷èñëîâûå êîäû
|
|
align 4
|
|
proc code_string, text:dword, out_text:dword
|
|
pushad
|
|
mov esi,[text]
|
|
stdcall str_len,esi
|
|
mov ecx,eax
|
|
mov edi,[out_text]
|
|
|
|
.copy:
|
|
mov al,byte[esi]
|
|
inc esi
|
|
cmp al,9
|
|
je @f
|
|
cmp al,13
|
|
je @f
|
|
cmp al,39
|
|
je @f
|
|
mov byte[edi],al
|
|
inc edi
|
|
loop .copy
|
|
jmp .end_copy
|
|
@@:
|
|
mov byte[edi],39
|
|
mov byte[edi+1],','
|
|
add edi,2
|
|
and eax,0xff
|
|
mov dword[edi],0
|
|
stdcall convert_int_to_str,4
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
mov byte[edi],','
|
|
mov byte[edi+1],39
|
|
add edi,2
|
|
loop .copy
|
|
.end_copy:
|
|
mov byte[edi],0
|
|
popad
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
proc mem_clear, mem:dword, len:dword
|
|
push eax ecx edi
|
|
cld
|
|
xor al,al
|
|
mov edi, dword[mem]
|
|
mov ecx, dword[len]
|
|
repne stosb
|
|
pop edi ecx eax
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
proc str_cat, str1:dword, str2:dword
|
|
push eax ecx edi esi
|
|
mov esi,dword[str2]
|
|
stdcall str_len,esi
|
|
mov ecx,eax
|
|
inc ecx
|
|
mov edi,dword[str1]
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
cld
|
|
repne movsb
|
|
pop esi edi ecx eax
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
proc str_cat_value, str1:dword, value:dword
|
|
pushad
|
|
mov edi,[str1]
|
|
stdcall str_len,edi
|
|
add edi,eax
|
|
mov eax,[value]
|
|
stdcall convert_int_to_str,12
|
|
popad
|
|
ret
|
|
endp
|
|
|
|
;output:
|
|
; eax = strlen
|
|
align 4
|
|
proc str_len, str1:dword
|
|
mov eax,[str1]
|
|
@@:
|
|
cmp byte[eax],0
|
|
je @f
|
|
inc eax
|
|
jmp @b
|
|
@@:
|
|
sub eax,[str1]
|
|
ret
|
|
endp
|
|
|
|
;input:
|
|
; eax - ÷èñëî
|
|
; edi - áóôåð äëß ñòðîêè
|
|
; len - äëèííà áóôåðà
|
|
;output:
|
|
align 4
|
|
proc convert_int_to_str uses eax ecx edx edi esi, len:dword
|
|
mov esi,[len]
|
|
add esi,edi
|
|
dec esi
|
|
call .str
|
|
ret
|
|
endp
|
|
|
|
align 4
|
|
.str:
|
|
mov ecx,10
|
|
cmp eax,ecx
|
|
jb @f
|
|
xor edx,edx
|
|
div ecx
|
|
push edx
|
|
;dec edi ;ñìåùåíèå íåîáõîäèìîå äëß çàïèñè ñ êîíöà ñòðîêè
|
|
call .str
|
|
pop eax
|
|
@@:
|
|
cmp edi,esi
|
|
jge @f
|
|
or al,0x30
|
|
stosb
|
|
mov byte[edi],0 ;â êîíåö ñòðîêè ñòàâèì 0, ÷òî-áû íå âûëàçèë ìóñîð
|
|
@@:
|
|
ret
|