kolibrios/programs/other/t_edit/t_edit.asm
IgorA f751f0881f t_edit:
1) small update
2) code change

git-svn-id: svn://kolibrios.org@1456 a494cfbc-eb01-0410-851d-a64ba20cac60
2010-04-22 19:39:39 +00:00

584 lines
12 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;Ž£à®¬­ ï ¡« £®¤ à­®áâì Maxxxx32, Diamond, Heavyiron
;¨ ¤à㣨¬ ¯à®£à ¬¬¨áâ ¬,   â ª¦¥
;’¥¯«®¢ã €«¥ªá¥î (<Lrz> www.lrz.land.ru)
use32
org 0x0
db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
dd 0x01
dd start
dd i_end ; à §¬¥à ¯à¨«®¦¥­¨ï
dd mem
dd stacktop
dd file_name ; command line
dd sys_path
MAX_COLOR_WORD_LEN equ 40
maxChars equ 100002 ;(...+2)
BUF_SIZE equ 1000 ;bufer for copy|paste
maxColWords equ 10000
include '../../proc32.inc'
include '../../macros.inc'
include '../../develop/libraries/box_lib/load_lib.mac'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include 'lang.inc'
include 't_data.inc'
include 'strlen.inc'
include 't_work.inc' ;text work functions
include 't_draw.inc' ;draw main window functions
include 't_button.inc'
@use_library
align 4
start:
mcall 48,3,sc,sizeof.system_colors
m2m [wScr.bckg_col],[sc.work]
m2m [wScr.frnt_col],[sc.work_button]
m2m [wScr.line_col],[sc.work_button_text]
m2m [hScr.bckg_col],[sc.work]
m2m [hScr.frnt_col],[sc.work_button]
m2m [hScr.line_col],[sc.work_button_text]
mcall 68,11
or eax,eax
jz button.exit
mcall 66,1,1 ;scan code
;mcall 26,2,1,conv_tabl
mcall 40,0x27
mov esi,file_name
call strlen
mov ecx,eax
mov edi,buf_cmd_lin
rep movsb ;ª®¯¨à㥬 ¨¬ï ä ©«  ¢ ¡ãä¥à edit1
load_libraries l_libs_start,load_lib_end
;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  «¨¡ 
mov ebp,lib0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mov ebp,lib1 ;
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
;---------------------------------------------------------------------
stdcall ted_init, tedit0
stdcall dword[tl_data_init], tree1
;---------------------------------------------------------------------
; init bmp file
mov ecx,1200*18
call mem_Alloc
mov [bmp_icon],eax
copy_path fn_icon,sys_path,file_name,0x0
mov eax,70 ;load icon file
mov [run_file_70.func_n], 0
mov [run_file_70.param1], 54
mov [run_file_70.param2], 0
mov [run_file_70.param3], 1200*18
m2m [run_file_70.param4], [bmp_icon]
mov [run_file_70.rezerv], 0
mov [run_file_70.name], file_name
mov ebx,run_file_70
int 0x40
cmp ebx,-1
mov [err_ini0],1
je @f ;if open file
mov [err_ini0],0
@@:
;---------------------------------------------------------------------
; ç¨â ¥¬ bmp ä ©« á ªãàá®à ¬¨ ¨ «¨­¨ï¬¨
copy_path fn_icon_tl_sys,sys_path,file_name,0x0
mov ecx,3*256*13
call mem_Alloc
mov dword[tree1.data_img_sys],eax
;mov [run_file_70.func_n], 0
;mov [run_file_70.param1], 54
;mov [run_file_70.param2], 0
mov [run_file_70.param3], 3*256*13
mov [run_file_70.param4], eax
;mov [run_file_70.rezerv], 0
;mov [run_file_70.name], file_name
mov eax,70 ;load icon file
mov ebx,run_file_70
int 0x40
cmp ebx,0
jg @f
mov dword[tree1.data_img_sys],0
@@:
;---------------------------------------------------------------------
; ç¨â ¥¬ bmp ä ©« á ¨ª®­ª ¬¨ 㧫®¢
copy_path fn_icon_tl_nod,sys_path,file_name,0x0
mov ecx,3*256*2
call mem_Alloc
mov dword[tree1.data_img],eax
; mov [run_file_70.func_n], 0
; mov [run_file_70.param1], 54
; mov [run_file_70.param2], 0
mov [run_file_70.param3], 3*256*2
mov [run_file_70.param4], eax
; mov [run_file_70.rezerv], 0
; mov [run_file_70.name], file_name
mov eax,70 ;load icon file
mov ebx,run_file_70
int 0x40
cmp ebx,0
jg @f
mov dword[tree1.data_img],0
@@:
;------------------------------------------------------------------------------
copy_path fn_syntax_dir,sys_path,file_name,0x0 ;¡¥à¥¬ ¯ãâì ª ¯ ¯ª¥ á ä ©« ¬¨ ᨭ⠪á¨á 
mov eax,70
mov ebx,tree_file_struct
int 0x40
cmp ebx,-1
je .end_dir_init
mov eax,dir_mem
add eax,32+4+1+3+4*6+8
mov ecx,ebx
@@:
cmp byte[eax],'.' ;䨫ìâà㥬 ä ©«ë á ¨¬¥­ ¬¨ '.' ¨ '..'
je .filter
;0x10000 ;1*2^16 - £¤¥ 1 ­®¬¥à ¨ª®­ª¨ á ª­¨£®©
stdcall dword[tl_node_add], eax,0x10000, tree1
stdcall dword[tl_cur_next], tree1
.filter:
add eax,304
loop @b
.end_dir_init:
;--- load color option file ---
stdcall InitColText, tedit0
;--- get cmd line ---
cmp byte[buf_cmd_lin+3],0 ;buf_cmd_lin
je @f ;if file names exist
mov esi,buf_cmd_lin
call strlen ;eax=strlen
mov [edit1.size],eax
call but_no_msg_OpenFile
@@:
align 4
red_win:
mcall 12,1
xor eax,eax
mov ebx,10*65536+485
mov ecx,10*65536+280
mov edx,[sc.work]
or edx,0x73000000
mov edi,hed
int 0x40
mov edi,tedit0
mcall 9,procinfo,-1
stdcall EvSize,edi
mov eax,13 ;âåðõíèé ïðÿìîóãîëüíèê, äëÿ î÷èñòêè âåðõíåé ïàíåëè
xor ebx,ebx
mov ecx,ted_wnd_t
mov bx,word [procinfo.client_box.width]
inc bx
int 0x40
stdcall [edit_box_draw], dword edit1
stdcall [menu_bar_draw], dword menu_data_1
call draw_but_toolbar
cmp [err_ini0],1
jne @f
mov eax,4
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,ted_rec_t
mov ecx,0x80ff0000
mov edx,txtErrIni0
int 0x40
add ebx,10 ;move <--y-->
mov ecx,0x80ff0080
mov edx,file_name
int 0x40
@@:
cmp [err_ini0],1
je @f
stdcall draw_main_win, tedit0
@@:
mcall 12,2
align 4
still:
mov eax,10
mcall
cmp al,1 ;¨§¬. ¯®«®¦¥­¨¥ ®ª­ 
jz red_win
cmp al,2
jz key
cmp al,3
jz button
cmp al,6
jz mouse
jmp still
align 4
mouse:
stdcall [edit_box_mouse], dword edit1
test word [edit1.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
jne still
;-----------------------------------------------
cmp [hScr.delta2],0
jne .horizontal
.vertical:
mov eax,[wScr.max_area]
cmp eax,[wScr.cur_area]
jbe .horizontal
; mouse event for Vertical ScrollBar
stdcall [scrollbar_ver_mouse], dword wScr
mov eax,wScr.redraw
xor ebx,ebx
cmp [eax],ebx
je @f
mov [eax],ebx
stdcall draw_main_win, tedit0
jmp still
@@:
cmp [wScr.delta2],0
jne still
.horizontal:
mov eax,[hScr.max_area]
cmp eax,[hScr.cur_area]
jbe .other
; mouse event for Horizontal ScrollBar
push dword hScr
call [scrollbar_hor_mouse]
mov eax,hScr.redraw
xor ebx,ebx
cmp [eax],ebx
je .other
mov [eax],ebx
stdcall draw_main_win, tedit0
jmp still
.other:
cmp [wScr.delta2],0
jne still
cmp [hScr.delta2],0
jne still
stdcall mouse_wnd_main, tedit0
cmp byte[tedit0.panel_id],TE_PANEL_FIND ;if not panel
jne @f
stdcall [edit_box_mouse], dword edit2
@@:
cmp byte[tedit0.panel_id],TE_PANEL_SYNTAX ;if not panel
jne .menu_bar_1 ;@f
stdcall [tl_mouse], tree1
;-----------------------------------------------
.menu_bar_1:
mov [menu_data_1.get_mouse_flag],1
; mouse event for Menu 1
push dword menu_data_1
call [menu_bar_mouse]
cmp [menu_data_1.click],dword 1
jne .mnu_1
cmp [menu_data_1.cursor_out],dword 4
je button.exit
cmp [menu_data_1.cursor_out],dword 3
jne @f
stdcall but_SaveFile, tedit0
@@:
cmp [menu_data_1.cursor_out],dword 2
jne @f
call but_OpenFile
@@:
cmp [menu_data_1.cursor_out],dword 1
jne @f
call but_NewFile
@@:
;cmp [menu_data_1.cursor_out],dword 0
;jne @f
.mnu_1:
jmp still
;---------------------------------------------------------------------
;output:
; ah = symbol
align 4
proc KeyConvertToASCII, table:dword
push ebx
mov ebx,dword[table] ;convert scan to ascii
ror ax,8
xor ah,ah
add bx,ax
mov ah,byte[ebx]
pop ebx
ret
endp
align 4
key:
mcall 66,3 ;66.3 ¯®«ãç¨âì á®áâ®ï­¨¥ ã¯à ¢«ïîé¨å ª« ¢¨è
xor ebx,ebx
mov ecx,1
test al,0x03 ;[Shift]
jz @f
mov cl,2
or ebx,KM_SHIFT
@@:
test al,0x0c ;[Ctrl]
jz @f
or ebx,KM_CTRL
@@:
test al,0x30 ;[Alt]
jz @f
mov cl,3
or ebx,KM_ALT
@@:
test al,0x80 ;[NumLock]
jz @f
or ebx,KM_NUMLOCK
@@:
mcall 26,2,,conv_tabl ;26.2 ¯®«ãç¨âì à áª« ¤ªã ª« ¢¨ âãàë
mcall 2 ;¯®«ãç ¥¬ ª®¤ ­ ¦ â®© ª« ¢¨è¨
;stdcall [tl_key], tree1 ;???
test word [edit1.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
je @f
cmp ah,0x80 ;if key up
ja still
cmp ah,42 ;[Shift] (left)
je still
cmp ah,54 ;[Shift] (right)
je still
cmp ah,56 ;[Alt]
je still
cmp ah,29 ;[Ctrl]
je still
cmp ah,69 ;[Pause Break]
je still
stdcall KeyConvertToASCII, dword conv_tabl
stdcall [edit_box_key], dword edit1
jmp still
@@:
test word [edit2.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
je @f
cmp ah,0x80 ;if key up
ja still
cmp ah,42 ;[Shift] (left)
je still
cmp ah,54 ;[Shift] (right)
je still
cmp ah,56 ;[Alt]
je still
cmp ah,29 ;[Ctrl]
je still
cmp ah,69 ;[Pause Break]
je still
stdcall KeyConvertToASCII, dword conv_tabl
stdcall [edit_box_key], dword edit2
jmp still
@@:
stdcall ted_key, tedit0, conv_tabl
jmp still
button:
; cmp [menu_active],1 ;¥á«¨ ­ ¦ «¨ ¬¥­î, â® á­ ç «  ॠªæ¨ï ­  ¬¥­î
; jne @f ;mouse.menu_bar_1
; mov [menu_active],0
; jmp still
; @@:
mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
cmp ah,3
jne @f
call but_NewFile
@@:
cmp ah,4
jne @f
call but_OpenFile
@@:
cmp ah,5
jne @f
stdcall but_SaveFile, tedit0
@@:
cmp ah,6
jne @f
stdcall ted_but_select_word, tedit0
@@:
cmp ah,7
jne @f
stdcall ted_but_cut, tedit0
@@:
cmp ah,8
jne @f
stdcall ted_but_copy, tedit0
@@:
cmp ah,9
jne @f
stdcall ted_but_paste, tedit0
@@:
cmp ah,10
jne @f
stdcall but_find, tedit0
@@:
cmp ah,11
jne @f
call but_replace
@@:
cmp ah,12
jne @f
call but_find_key_w
@@:
cmp ah,13
jne @f
stdcall but_sumb_upper, tedit0
@@:
cmp ah,14
jne @f
stdcall but_sumb_lover, tedit0
@@:
cmp ah,15
jne @f
stdcall but_reverse, tedit0
@@:
cmp ah,16
jne @f
stdcall ted_but_undo, tedit0
@@:
cmp ah,17
jne @f
stdcall ted_but_redo, tedit0
@@:
cmp ah,18
jne @f
stdcall but_sumb_invis, tedit0
@@:
cmp ah,19
jne @f
stdcall but_k_words_show, tedit0
@@:
cmp ah,20
jne @f
stdcall but_synt_show, tedit0
@@:
cmp ah,200
jne @f
stdcall ted_but_open_syntax, tedit0
@@:
cmp ah,201
jne @f
stdcall but_FindText, tedit0
@@:
cmp ah,1
jne still
.exit:
stdcall ted_can_save, tedit0
cmp al,1
jne @f
stdcall [mb_create],msgbox_8,thread ;message: save changes in file?
jmp still
@@:
mov ecx,[bmp_icon]
call mem_Free
stdcall ted_delete, tedit0
stdcall dword[tl_data_clear], tree1
mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
txtErrIni0 db '<27>¥ ®âªàë«áï ä ©« á ¨ª®­ª ¬¨',0
err_ini0 db 0
edit1 edit_box 250, 220, 5, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_cmd_lin, mouse_dd, 0
edit2 edit_box TE_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
buf_cmd_lin db 302 dup(0)
buf_find db 302 dup(0)
if lang eq ru
err_message_found_lib0 db 'ˆ§¢¨­¨â¥ ­¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã box_lib.obj',0
head_f_i0:
head_f_l0 db '‘¨á⥬­ ï ®è¨¡ª ',0
err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ box_lib.obj',0
err_message_found_lib1 db 'ˆ§¢¨­¨â¥ ­¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã msgbox.obj',0
err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ msgbox.obj',0
else
err_message_found_lib0 db 'Sorry I cannot found library box_lib.obj',0
head_f_i0:
head_f_l0 db 'System error',0
err_message_import0 db 'Error on load import library box_lib.obj',0
err_message_found_lib1 db 'Sorry I cannot found library msgbox.obj',0
;head_f_i1:
;head_f_l1 db 'System error',0
err_message_import1 db 'Error on load import library msgbox.obj',0
end if
;library structures
l_libs_start:
lib0 l_libs boxlib_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l0, myimport,err_message_import0, head_f_i0
lib1 l_libs msgbox_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l0, msgbox_lib_import, err_message_import1, head_f_i0
load_lib_end:
i_end:
align 16
procinfo process_information
thread:
rb 1024
stacktop:
sys_path:
rb 4096
file_name:
rb 4096
file_name_rez:
rb 4096
file_info:
rb 40
mem: