kolibrios-fun/programs/other/t_edit_synt/te_work.inc
IgorA e74d295b71 buf2d.obj: update function 'buf2d_bit_blt'
git-svn-id: svn://kolibrios.org@7861 a494cfbc-eb01-0410-851d-a64ba20cac60
2020-05-04 11:55:42 +00:00

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_value,edi,[index]
@@:
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]
or ecx,ecx
jz .end_copy ;åñëè ñòðîêà ñî ñïðàâêîé ïóñòàß
.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