Tinypad 4.0.4 (final release)

git-svn-id: svn://kolibrios.org@297 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Mihail Semenyako (mike.dld) 2007-01-27 23:36:07 +00:00
parent c3a36dffbc
commit b542bfb588
17 changed files with 1639 additions and 2023 deletions

View File

@ -110,6 +110,7 @@ macro szc name,elsz,[data] { ; from MFAR [mike.dld]
m = 0 m = 0
if used name if used name
label name label name
forward
virtual at 0 virtual at 0
db data db data
s = $ s = $
@ -119,6 +120,7 @@ macro szc name,elsz,[data] { ; from MFAR [mike.dld]
m = s m = s
end if end if
db data db data
common
.size = $-name .size = $-name
.maxl = m .maxl = m
end if end if
@ -210,7 +212,7 @@ macro section name { align 16
label name } label name }
macro func name { macro func name {
if ~used name if ~used name
;display 'FUNC NOT USED: ',`name,13,10 display 'FUNC NOT USED: ',`name,13,10
else else
align 4 align 4
name: name:

View File

@ -1,35 +1,29 @@
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; project name: TINYPAD ; project name: TINYPAD
; compiler: flat assembler 1.67.15 ; compiler: flat assembler 1.67.18
; memory to compile: 2.0/7.0 MBytes (without/with size optimizations) ; memory to compile: 3.0/9.0 MBytes (without/with size optimizations)
; version: 4.0.4 pre ; version: 4.0.4
; last update: 2007-01-18 (Jan 18, 2007) ; last update: 2007-01-28 (Jan 28, 2007)
; minimal kernel: revision #270 (svn://kolibrios.org/kernel) ; minimal kernel: revision #270 (svn://kolibrios.org/kernel)
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi ; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi
; maintained by: Mike Semenyako >> mike.dld@gmail.com ; maintained by: Mike Semenyako >> mike.dld@gmail.com
; Ivan Poddubny >> ivan-yar@bk.ru ; Ivan Poddubny >> ivan-yar@bk.ru
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; TODO (FOR 4.1.0): ; TODO (4.1.0):
; - optimize drawing (reduce flickering) ; - optimize drawing (reduce flickering)
; - add vertical selection, undo, goto position, overwrite mode ; - add vertical selection, undo, goto position, overwrite mode
; - improve window drawing with small dimensions ; - improve window drawing with small dimensions
; - other bug-fixes and speed/size optimizations
; - save settings to ini file, not to executable ; - save settings to ini file, not to executable
; ; - add prompt to save file before closing/opening
; TODO (4.0.4, PLANNED FOR 2007-01-21): ; - other bug-fixes and speed/size optimizations
; normal:
; - finish tabbed interface (tab switching, Ctrl+F4)
; - reduce flickering (introduce changes checker)
; - compile default file if selected
; low:
; - add prompt to save file before closing/opening
; ;
; HISTORY: ; HISTORY:
; 4.0.4 pre (mike.dld) ; 4.0.4 (mike.dld)
; bug-fixes: ; bug-fixes:
; - statusbar contained hint after dialog operation cancelled ; - statusbar contained hint after dialog operation cancelled
; - small drawing fix for gutter and line saved/modified markers ; - small drawing fix for gutter and line saved/modified markers
; (incorrect calculations)
; - incorrect lines marking on Ctrl+V ; - incorrect lines marking on Ctrl+V
; changes: ; changes:
; - editor and other modifications to ease parts placement changing, ; - editor and other modifications to ease parts placement changing,
@ -39,12 +33,14 @@
; - use memory manager instead of statically allocated region ; - use memory manager instead of statically allocated region
; - case-insensitive filenames input, to be able to open/save files with ; - case-insensitive filenames input, to be able to open/save files with
; non-latin chars in name (russian etc.) ; non-latin chars in name (russian etc.)
; - reduced flickering (changes checker)
; - overall code cleanup ; - overall code cleanup
; new features: ; new features:
; - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor) ; - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor)
; - tabbed interface, ability to open several files in one app instance ; - tabbed interface, ability to open several files in one app instance
; (thanks IRC guys for ideas and testing ; (thanks IRC guys for ideas and testing)
; - make any tab default to compile it disregarding currently active tab ; - make any tab default to compile it disregarding currently active tab
; - configuration dialog (colors, tabs positioning)
; 4.0.3 (mike.dld) ; 4.0.3 (mike.dld)
; bug-fixes: ; bug-fixes:
; - 1-char selection if pressing <BS> out of real line length ; - 1-char selection if pressing <BS> out of real line length
@ -157,11 +153,11 @@ include 'lang.inc'
include 'macros.inc' ; useful stuff include 'macros.inc' ; useful stuff
;include 'proc32.inc' ;include 'proc32.inc'
include 'tinypad.inc' include 'tinypad.inc'
purge mov,add,sub ;  SPEED ;purge mov,add,sub ;  SPEED
header '01',1,@CODE,TINYPAD_END,STATIC_MEM_END,MAIN_STACK,@PARAMS,self_path header '01',1,@CODE,TINYPAD_END,STATIC_MEM_END,MAIN_STACK,@PARAMS,self_path
APP_VERSION equ '4.0.4 pre' APP_VERSION equ '4.0.4'
;include 'debug.inc' ;include 'debug.inc'
;define __DEBUG__ 1 ;define __DEBUG__ 1
@ -185,18 +181,19 @@ section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
label color_tbl dword label color_tbl dword
RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; text .text: RGB( 0, 0, 0)
RGB( 0,144, 0) ; RGB( 0,160, 0) ; RGB( 0,144, 0) ; numbers .back: RGB(255,255,255)
RGB(176, 0, 0) ; RGB( 0,128,255) ; RGB(160, 0, 0) ; strings .text.sel: RGB(255,255,255)
RGB(128,128,128) ; RGB(160,160,160) ; RGB(144,144,144) ; comments .back.sel: RGB( 10, 36,106)
RGB( 48, 48,240) ; RGB(255, 0, 0) ; RGB( 48, 48,240) ; symbols .symbol: RGB( 48, 48,240)
RGB(255,255,255) ; RGB(255,255,255) ; RGB(224,224,224) ; background .number: RGB( 0,144, 0)
RGB(255,255,255) ; RGB(255,255,255) ; RGB(255,255,255) ; selection text .string: RGB(176, 0, 0)
RGB( 10, 36,106) ; RGB( 0, 64,128) ; RGB( 0, 0,128) ; selection background .comment: RGB(128,128,128)
RGB(255,238, 98) ; modified line marker .line.moded: RGB(255,238, 98)
RGB(108,226,108) ; saved line marker .line.saved: RGB(108,226,108)
ins_mode db 1 ins_mode db 1
tab_pos db 2
options db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB options db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
@ -229,7 +226,8 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mov al,0 mov al,0
rep stosb rep stosb
mov [tab_bar.Style],2 mov al,[tab_pos]
mov [tab_bar.Style],al
mcall 68,11 mcall 68,11
or eax,eax or eax,eax
@ -241,6 +239,8 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
inc [do_not_draw] inc [do_not_draw]
mov dword[app_start],7
mov esi,s_example mov esi,s_example
mov edi,tb_opensave.text mov edi,tb_opensave.text
mov ecx,s_example.size mov ecx,s_example.size
@ -253,8 +253,6 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mov [s_search.size],ecx mov [s_search.size],ecx
rep movsb rep movsb
; DEBUGF 1,"params: '%s'\n",@PARAMS
cmp byte[@PARAMS],0 cmp byte[@PARAMS],0
jz no_params jz no_params
@ -263,8 +261,6 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
cmp byte[@PARAMS],'*' cmp byte[@PARAMS],'*'
jne .noipc jne .noipc
; DEBUGF 1," started by DOCPAK\n"
;// diamond [ (convert size from decimal representation to dword) ;// diamond [ (convert size from decimal representation to dword)
;-- mov edx,dword[@PARAMS+1] ;-- mov edx,dword[@PARAMS+1]
mov esi,@PARAMS+1 mov esi,@PARAMS+1
@ -281,37 +277,21 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
add edx,20 add edx,20
; DEBUGF 1," data size (+20) = %d\n",edx
mov eax,edx mov eax,edx
call mem.Alloc call mem.Alloc
mov ebp,eax mov ebp,eax
push eax push eax
; DEBUGF 1," mem.Alloc() returned 0x%x, allocated size = %d\n",eax,[eax-4]
;! mcall 60,1,AREA_TEMP-16 ; 0x10000-16
;! mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8
mov dword[ebp+0],0 mov dword[ebp+0],0
mov dword[ebp+4],8 mov dword[ebp+4],8
mcall 60,1,ebp mcall 60,1,ebp
mcall 40,1000000b mcall 40,1000000b
; DEBUGF 1," got IPC message within 2 secs? "
mcall 23,200 mcall 23,200
; DEBUGF 1,"%b\n",eax == 7
cmp eax,7 cmp eax,7
jne key.alt_x.close jne key.alt_x.close
;! mov esi,AREA_TEMP-16 ; 0x10000-16
;! mov byte[esi],1
;! mov eax,[esi+12]
mov byte[ebp],1 mov byte[ebp],1
;! mov eax,[ebp+12]
;! inc eax
;! call load_file.file_found
; DEBUGF 1," creating new document\n"
mov ecx,[ebp+12] mov ecx,[ebp+12]
lea esi,[ebp+16] lea esi,[ebp+16]
@ -322,14 +302,11 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mov eax,ebp mov eax,ebp
call mem.Free call mem.Free
; DEBUGF 1," mem.Free(0x%x) returned %d\n",ebp,eax
jmp @f jmp @f
.noipc: .noipc:
;// Willow's code to support DOCPAK ] ;// Willow's code to support DOCPAK ]
; parameters are at @PARAMS
mov esi,@PARAMS mov esi,@PARAMS
mov edi,tb_opensave.text mov edi,tb_opensave.text
mov ecx,PATHL mov ecx,PATHL
@ -341,7 +318,7 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
jne key.alt_x.close jne key.alt_x.close
lea eax,[edi-tb_opensave.text-1] lea eax,[edi-tb_opensave.text-1]
mov [tb_opensave.length],al mov [tb_opensave.length],al
call btn.load_file call load_file
jnc @f jnc @f
no_params: no_params:
@ -354,15 +331,14 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
mcall 40,00100111b mcall 40,00100111b
red: red:
call drawwindow call drawwindow
call check_inv_all.skip_check
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
still: still:
call draw_statusbar ; write current position & number of strings call draw_statusbar ; write current position & number of strings
.skip_write: .skip_write:
mcall 10;23,50; wait here until event mcall 10 ; wait here until event
cmp [main_closed],0 cmp [main_closed],0
jne key.alt_x jne key.alt_x
dec eax ; redraw ? dec eax ; redraw ?
@ -381,137 +357,112 @@ func start_fasm ;/////////////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; BL = run after compile ; BL = run after compile
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
cmp [cur_editor.AsmMode],0 ;! [asm_mode],0 ; FASM infile,outfile,/path/to/files[,run]
;-----------------------------------------------------------------------------
cmp [cur_editor.AsmMode],0
jne @f jne @f
ret ret
@@: mov esi,f_info.path ; s_fname @@:
mov edi,fasm_parameters mov eax,[tab_bar.Default.Ptr]
or eax,eax
cmp byte[esi],'/' jnz @f
je .yes_systree mov eax,[tab_bar.Current.Ptr]
@@: cmp byte[eax+TABITEM.Editor.FilePath],'/'
mov ecx,[f_info.length] ; [s_fname.size]
rep movsb
mov al,','
stosb
mov ecx,[f_info.length] ; [s_fname.size]
add ecx,-4
mov esi,f_info.path ; s_fname
rep movsb
mov al,','
stosb
mov dword[edi],'/RD/'
mov word[edi+4],'1/'
add edi,6
mov al,0
stosb
jmp .run
.yes_systree:
mov eax,[f_info.length]
add esi,eax ; [s_fname.size]
dec esi
xor ecx,ecx
mov al,'/'
@@: cmp [esi],al
je @f je @f
dec esi ret
inc ecx @@:
mov edi,fasm_parameters
push eax
cld
lea esi,[eax+TABITEM.Editor.FilePath]
add esi,[eax+TABITEM.Editor.FileName]
push esi esi
@@: lodsb
cmp al,0
je @f
stosb
cmp al,'.'
jne @b
mov ecx,esi
jmp @b jmp @b
@@: inc esi @@:
mov al,','
push esi esi ecx stosb
pop esi
sub ecx,esi
dec ecx
jz @f
rep movsb rep movsb
@@:
mov al,',' mov al,','
stosb stosb
pop ecx esi pop ecx esi
add esi,TABITEM.Editor.FilePath
add ecx,-4 sub ecx,esi
rep movsb
mov al,','
stosb
pop ecx
sub ecx,f_info.path ; s_fname
mov esi,f_info.path ; s_fname
rep movsb rep movsb
cmp bl,0 ; run outfile ?
je @f
mov dword[edi],',run'
add edi,4
@@:
mov al,0 mov al,0
stosb stosb
.run: mov [app_start.filename],app_fasm
cmp bl,0 ; run outfile ? mov [app_start.params],fasm_parameters
je @f
mov dword[edi-1],',run'
mov byte[edi+3],0
@@:
mov ebx, fasm_start
start_ret: start_ret:
mov eax, 70 mcall 70,app_start
int 0x40
ret ret
endf endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func open_debug_board ;/////////////////////////////////////////////////////// func open_debug_board ;///////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
mov ebx, board_start mov [app_start.filename],app_board
mov [app_start.params],0
jmp start_ret jmp start_ret
endf endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func open_sysfuncs_txt ;////////////////////////////////////////////////////// func open_sysfuncs_txt ;//////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
mov ebx, docpak_start mov [app_start.filename],app_docpak
mov [app_start.params],sysfuncs_param
call start_ret call start_ret
cmp eax,0xfffffff0 cmp eax,0xfffffff0
jb @f jb @f
mov ebx, tinypad_start mov [app_start.filename],app_tinypad
mov dword [ebx+8], sysfuncs_filename mov [app_start.params],sysfuncs_filename
call start_ret call start_ret
@@: ret @@: ret
endf endf
;-----------------------------------------------------------------------------
;func layout ;///// change keyboard layout ///////////////////////////////////
;-----------------------------------------------------------------------------
; mcall 19,setup,param_setup
; mcall 5,eax
;; call activate_me
;; ret
;;endf
;;func activate_me
; mcall 9,p_info,-1
; inc eax
; inc eax
; mov ecx,eax
; mov edi,[p_info.PID]
; mov ebx,p_info
; @@: dec ecx
; jz @f ; counter=0 => not found? => return
; mcall 9
; cmp edi,[p_info.PID]
; jne @b
; mcall 18,3
; mcall 5,eax
; @@: ret
;endf
set_opt: set_opt:
.dialog:
mov [bot_mode],1
mov [bot_dlg_height],128
mov [bot_dlg_handler],optsdlg_handler
mov [focused_tb],tb_color
mov al,[tb_color.length]
mov [tb_color.pos.x],al
mov [tb_color.sel.x],0
mov [tb_casesen],1
mov [cur_part],0
m2m [cur_color],dword[color_tbl.text]
mov esi,color_tbl
mov edi,cur_colors
mov ecx,10
cld
rep movsd
call drawwindow
ret
.line_numbers: .line_numbers:
mov al,OPTS_LINENUMS mov al,OPTS_LINENUMS
jmp .main jmp .main
@ -554,8 +505,6 @@ include 'tp-recode.asm'
section @DATA ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: section @DATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
;addr dd s_fname ; address of input string
;temp dd 0xABCD ; used in read_string
vscrl_capt dd -1 vscrl_capt dd -1
hscrl_capt dd -1 hscrl_capt dd -1
body_capt dd -1 body_capt dd -1
@ -652,8 +601,8 @@ accel_table_textbox dd \
0x00010153,key.tb.del ,\ ; Shift+Del 0x00010153,key.tb.del ,\ ; Shift+Del
0 0
accel_table2 dd \ accel_table2 dd \
1,btn.close_main_window ,\ 1 ,key.alt_x ,\
'VSL',btn.vscroll_up ,\ 'VSL',btn.vscroll_up ,\
'VSG',btn.vscroll_down ,\ 'VSG',btn.vscroll_down ,\
'HSL',btn.hscroll_up ,\ 'HSL',btn.hscroll_up ,\
@ -663,10 +612,12 @@ accel_table2 dd \
0 0
accel_table2_botdlg dd \ accel_table2_botdlg dd \
1,btn.close_main_window ,\ 1 ,key.alt_x ,\
20001,btn.bot.cancel ,\ 20001,btn.bot.cancel ,\
20002,btn.bot.opensave ,\ 20002,btn.bot.opensave ,\
20003,btn.bot.find ,\ 20003,btn.bot.find ,\
20004,btn.bot.appearance,\
21001,btn.bot.tabpos ,\
0 0
add_table: add_table:
@ -680,6 +631,7 @@ add_table:
s_status dd 0 s_status dd 0
@^
fasm_start: fasm_start:
dd 7 dd 7
dd 0 dd 0
@ -708,11 +660,78 @@ docpak_start:
dd 0 dd 0
dd 0 dd 0
db '/RD/1/DOCPAK',0 db '/RD/1/DOCPAK',0
^@
sz app_fasm ,'/RD/1/DEVELOP/FASM',0
sz app_board ,'/RD/1/BOARD',0
sz app_tinypad ,'/RD/1/TINYPAD',0
sz app_docpak ,'/RD/1/DOCPAK',0
sz sysfuncs_param,'g',0 sz sysfuncs_param,'g',0
include 'tp-locale.inc' include 'tp-locale.inc'
;// options dialog data [
label optsdlg_editor at $-EDITOR.Bounds
; rb PATHL ; FilePath db PATHL dup(?)
; dd 0 ; FileName dd ?
dd ?,?,?,? ; Bounds RECT
dd @f ; Lines dd ?
dd ? ; Lines.Size dd ?
dd 9 ; Lines.Count dd ?
dd 21 ; Columns.Count dd ?
dd 0,4 ; Caret POINT
dd 100,4 ; SelStart POINT
dd 0,0 ; TopLeft POINT
dd 0,0 ; VScroll SCROLLBAR
dd 0,0 ; HScroll SCROLLBAR
dd 0 ; Gutter.Width dd ?
db 0 ; Gutter.Visible db ?
db 1 ; AsmMode db ?
db 0 ; Modified db ?
@@:
dd 0x00000000+1
db ' '
dd 0x00010000+9
db ' org 100h'
dd 0x00000000+1
db ' '
dd 0x00000000+20
db ' mov ah,09h ; write'
dd 0x00000000+12
db ' mov dx,text'
dd 0x00000000+8
db ' int 21h'
dd 0x00030000+8
db ' int 20h'
dd 0x00000000+1
db ' '
dd 0x00000000+21
db ' text db "Hello!",24h'
dd 0
optsdlg_editor_parts: ; left,top,right,bottom,type
db 0, 12, 13, 29, 22
db 0, 12, 33, 47, 42
db 0, 12, 53, 29, 72
db 0, 12, 83, 53, 92
db 2, 12, 43, 77, 52
db 3, 4, 43,148, 52
db 4, 48, 33, 53, 42
db 4,108, 83,113, 92
db 5, 36, 13, 59, 22
db 5, 54, 33, 71, 42
db 5, 36, 53, 53, 72
db 5,114, 83,131, 92
db 6, 60, 83,107, 92
db 7, 84, 33,125, 42
db 8, 1, 13, 5, 22
db 9, 1, 63, 5, 72
db 1, 1, 1,148,105
db -1
;// ]
sz symbols_ex,';?.%"',"'" sz symbols_ex,';?.%"',"'"
sz symbols ,'#&*\:/<>|{}()[]=+-, ' sz symbols ,'#&*\:/<>|{}()[]=+-, '
@ -722,8 +741,6 @@ sz ini_window_left ,'Left',0
sz ini_window_right ,'Right',0 sz ini_window_right ,'Right',0
sz ini_window_bottom,'Bottom',0 sz ini_window_bottom,'Bottom',0
;include_debug_strings
TINYPAD_END: ; end of file TINYPAD_END: ; end of file
self_path rb PATHL self_path rb PATHL
@ -732,6 +749,13 @@ self_path rb PATHL
section @UDATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: section @UDATA ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
app_start:
dd ?,?
.params dd ?
dd ?,?
db ?
.filename dd ?
f_info.length dd ? f_info.length dd ?
f_info.path: f_info.path:
times PATHL+1 db ? times PATHL+1 db ?
@ -739,6 +763,8 @@ f_info70 rd 7
file_info FILEINFO file_info FILEINFO
checker_ed EDITOR
tab_bar TABCTL tab_bar TABCTL
virtual at tab_bar.Current virtual at tab_bar.Current
cur_tab TABITEM cur_tab TABITEM
@ -774,6 +800,8 @@ do_not_draw db ? ; draw top and bottom buttons?
main_closed db ? ; main window closed? main_closed db ? ; main window closed?
tb_casesen db ? ; focused textbox is case-sensitive? tb_casesen db ? ; focused textbox is case-sensitive?
draw_blines db ?
align 4 align 4
s_fname.size dd ? s_fname.size dd ?
s_fname rb PATHL+1 s_fname rb PATHL+1
@ -794,6 +822,7 @@ cl_3d_outset dd ?
cl_3d_inset dd ? cl_3d_inset dd ?
cl_3d_grayed dd ? cl_3d_grayed dd ?
tb_color TBOX
tb_opensave TBOX tb_opensave TBOX
tb_find TBOX tb_find TBOX
tb_replace TBOX tb_replace TBOX
@ -830,15 +859,6 @@ p_info process_information
p_info2 process_information p_info2 process_information
sc system_colors sc system_colors
;store dword '/hd/' at tb_opensave.text+4*0
;store dword '1/tp' at tb_opensave.text+4*1
;store dword 'ad4/' at tb_opensave.text+4*2
;store dword 'tiny' at tb_opensave.text+4*3
;store dword 'pad.' at tb_opensave.text+4*4
;store dword 'asm' at tb_opensave.text+4*5
;store byte 23 at tb_opensave.length
;rb 1024*36
rb 1024*4 rb 1024*4
MAIN_STACK: MAIN_STACK:
rb 1024*4 rb 1024*4

View File

@ -11,6 +11,18 @@ struct RECT
Bottom dd ? Bottom dd ?
ends ends
struct TBOX
width dw ?
x dw ?
height dw ?
y dw ?
sel.x db ?
pos.x db ?
ofs.x db ?
length db ?
text rb 255
ends
struct SCROLLBAR struct SCROLLBAR
Top dd ? Top dd ?
Size dd ? Size dd ?

View File

@ -37,46 +37,47 @@ button:
call draw_editor call draw_editor
call draw_statusbar call draw_statusbar
call draw_tabctl call draw_tabctl
call update_caption
@@: @@:
jmp still.skip_write jmp still.skip_write
btn.vscroll_up: btn.vscroll_up:
dec [cur_editor.TopLeft.Y] ;! [top_line] dec [cur_editor.TopLeft.Y]
jns @f jns @f
inc [cur_editor.TopLeft.Y] ;! [top_line] inc [cur_editor.TopLeft.Y]
ret ret
@@: call check_inv_all.skip_check @@: call editor_check_for_changes
ret ret
btn.vscroll_down: btn.vscroll_down:
inc [cur_editor.TopLeft.Y] ;! [top_line] inc [cur_editor.TopLeft.Y]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines] mov eax,[cur_editor.Lines.Count]
sub eax,[lines.scr] sub eax,[lines.scr]
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line] cmp eax,[cur_editor.TopLeft.Y]
jge @f jge @f
dec [cur_editor.TopLeft.Y] ;! [top_line] dec [cur_editor.TopLeft.Y]
ret ret
@@: call check_inv_all.skip_check @@: call editor_check_for_changes
ret ret
btn.hscroll_up: btn.hscroll_up:
dec [cur_editor.TopLeft.X] ;! [left_col] dec [cur_editor.TopLeft.X]
jns @f jns @f
inc [cur_editor.TopLeft.X] ;! [left_col] inc [cur_editor.TopLeft.X]
ret;jmp still.skip_write ret
@@: call check_inv_all.skip_check @@: call editor_check_for_changes
ret ret
btn.hscroll_down: btn.hscroll_down:
inc [cur_editor.TopLeft.X] ;! [left_col] inc [cur_editor.TopLeft.X]
mov eax,[cur_editor.Columns.Count] ;! eax,[columns] mov eax,[cur_editor.Columns.Count]
sub eax,[columns.scr] sub eax,[columns.scr]
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col] cmp eax,[cur_editor.TopLeft.X]
jge @f jge @f
dec [cur_editor.TopLeft.X] ;! [left_col] dec [cur_editor.TopLeft.X]
ret ret
@@: call check_inv_all.skip_check @@: call editor_check_for_changes
ret ret
btn.tabctl_right: btn.tabctl_right:
@ -93,17 +94,16 @@ button:
@@: call draw_tabctl @@: call draw_tabctl
ret ret
btn.search: btn.debug_board:
key.f3: call open_debug_board
call search ret
jc @f btn.sysfuncs_txt:
call check_inv_all call open_sysfuncs_txt
@@: ret ret
func search func search
cld cld
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y] mov ecx,[cur_editor.Caret.Y]
mov edx,ecx mov edx,ecx
call get_line_offset call get_line_offset
cmp word[esi],0 cmp word[esi],0
@ -113,9 +113,9 @@ func search
or eax,eax or eax,eax
jz .end_line.2 jz .end_line.2
mov ecx,eax mov ecx,eax
sub ecx,[cur_editor.Caret.X] ;! ecx,[pos.x] sub ecx,[cur_editor.Caret.X]
push esi push esi
add esi,[cur_editor.Caret.X] ;! esi,[pos.x] add esi,[cur_editor.Caret.X]
jmp @f jmp @f
.next_line: .next_line:
@ -151,15 +151,15 @@ func search
.found: .found:
add esp,4 add esp,4
mov [cur_editor.Caret.Y],edx ;! [pos.y],edx mov [cur_editor.Caret.Y],edx
mov [cur_editor.SelStart.Y],edx ;! [sel.y],edx mov [cur_editor.SelStart.Y],edx
mov ecx,edx mov ecx,edx
lea eax,[esi-4] lea eax,[esi-4]
call get_line_offset call get_line_offset
sub eax,esi sub eax,esi
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax mov [cur_editor.SelStart.X],eax
add eax,[s_search.size] add eax,[s_search.size]
mov [cur_editor.Caret.X],eax ;! [pos.x],eax mov [cur_editor.Caret.X],eax
mov [s_status],0 mov [s_status],0
clc clc
ret ret
@ -168,7 +168,7 @@ func search
pop esi pop esi
.end_line.2: .end_line.2:
movzx eax,word[esi-4] movzx eax,word[esi-4]
add esi,eax;[esi-4] add esi,eax
inc edx inc edx
call get_real_length call get_real_length
mov ecx,eax mov ecx,eax
@ -180,111 +180,3 @@ func search
stc stc
ret ret
endf endf
btn.compile:
key.ctrl_f9:
mov bl,0
call start_fasm
ret
btn.compile_run:
key.f9:
mov bl,1
call start_fasm
ret
btn.debug_board:
call open_debug_board
ret
btn.sysfuncs_txt:
call open_sysfuncs_txt
ret
btn.load_file:
key.ctrl_l:
call load_file
jnc @f
ret
@@:
xor eax,eax
mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
mov [cur_editor.TopLeft.X],eax ;! [left_col],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.Modified],al ;! [modified],al
; enable color syntax for ASM and INC files:
mov [cur_editor.AsmMode],al ;! [asm_mode],al
; mov eax,[f_info.length]
; add eax,f_info.path
; mov byte[eax],0
lea ebx,[cur_editor.FilePath]
mov eax,ebx
call strlen
mov ecx,dword[ebx+eax-3]
or ecx,0x202020
cmp ecx,'asm'
jne @f
inc [cur_editor.AsmMode] ;! [asm_mode]
jmp .nocol
@@: cmp ecx,'inc'
jne .nocol
inc [cur_editor.AsmMode] ;! [asm_mode]
.nocol:
update_caption:
lea esi,[cur_editor.FilePath] ;! mov esi,f_info.path
mov edi,s_title
@@: lodsb
cmp al,0
je @f
stosb
jmp @b
@@:
;cld
;mov ecx,[f_info.length]
;jecxz @f
;rep movsb
mov dword[edi],' - '
add edi,3
@@: mov esi,htext
mov ecx,htext.size
cld
rep movsb
mov al,0
stosb
mcall 71,1,s_title
clc
ret
btn.close_main_window:
key.alt_x:
mov esi,self_path
mov byte[esi+PATHL-1],0
mov edi,f_info.path
cld
@@: lodsb
stosb
or al,al
jnz @b
mov [f_info70+0],2
mov [f_info70+4],0
mov [f_info70+8],0
mov [f_info70+12],TINYPAD_END
mov [f_info70+16],0
mov byte[f_info70+20],0
mov [f_info70+21],f_info.path
mcall 70,f_info70
.close:
mov [main_closed],1
mcall -1

View File

@ -1,87 +1,14 @@
;-----------------------------------------------------------------------------
func check_cur_vis_inv ;//////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
push eax ebx
xor bl,bl
.chk_y:
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
or eax,eax
jge @f
mov [cur_editor.Caret.Y],0 ;! [pos.y],0
jmp .chk_dy
@@: cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jl .chk_dy
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
dec eax
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
.chk_dy:
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
cmp eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
jle @f
m2m [cur_editor.TopLeft.Y],[cur_editor.Caret.Y]
;! push [pos.y]
;! pop [top_line]
inc bl
@@: add eax,[lines.scr]
cmp eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
jg .chk_x
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
sub eax,[lines.scr]
inc eax
mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
inc bl
.chk_x:
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
or eax,eax
jge @f
mov [cur_editor.Caret.X],0 ;! [pos.x],0
jmp .chk_dx
@@: cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jl .chk_dx
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
.chk_dx:
mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jle @f
m2m [cur_editor.TopLeft.X],[cur_editor.Caret.X]
;! push [pos.x]
;! pop [left_col]
inc bl
@@: add eax,[columns.scr]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jg @f
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
sub eax,[columns.scr]
inc eax
mov [cur_editor.TopLeft.X],eax ;! [left_col],eax
inc bl
@@: cmp [mev],MEV_LDOWN
jne .exit
push [cur_editor.Caret.X] [cur_editor.Caret.Y] ;! [pos.x] [pos.y]
pop [cur_editor.SelStart.Y] [cur_editor.SelStart.X] ;! [sel.y] [sel.x]
.exit:
or bl,bl
clc
jz @f
call draw_file
stc
@@: pop ebx eax
ret
endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func clear_selection ;//////////////////////////////////////////////////////// func clear_selection ;////////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
push eax ebx push eax ebx
mov eax,[cur_editor.SelStart.Y] ;! eax,[sel.y] mov eax,[cur_editor.SelStart.Y]
mov ebx,[cur_editor.Caret.Y] ;! ebx,[pos.y] mov ebx,[cur_editor.Caret.Y]
cmp eax,ebx cmp eax,ebx
jle @f jle @f
xchg eax,ebx xchg eax,ebx
@@: push [cur_editor.Caret.X] [cur_editor.Caret.Y] ;! [pos.x] [pos.y] @@: push [cur_editor.Caret.X] [cur_editor.Caret.Y]
pop [cur_editor.SelStart.Y] [cur_editor.SelStart.X] ;! [sel.y] [sel.x] pop [cur_editor.SelStart.Y] [cur_editor.SelStart.X]
call draw_file.ex
pop ebx eax pop ebx eax
ret ret
endf endf
@ -107,111 +34,29 @@ endf
func check_bottom_right ;///////////////////////////////////////////////////// func check_bottom_right ;/////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
push eax push eax
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line] mov eax,[cur_editor.TopLeft.Y]
add eax,[lines.scr] add eax,[lines.scr]
cmp eax,[cur_editor.Lines.Count] ;! eax,[lines] cmp eax,[cur_editor.Lines.Count]
jbe .lp1 jbe .lp1
mov eax,[cur_editor.Lines.Count] ;! eax,[lines] mov eax,[cur_editor.Lines.Count]
sub eax,[lines.scr] sub eax,[lines.scr]
jns @f jns @f
xor eax,eax xor eax,eax
@@: mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax @@: mov [cur_editor.TopLeft.Y],eax
.lp1: mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col] .lp1: mov eax,[cur_editor.TopLeft.X]
add eax,[columns.scr] add eax,[columns.scr]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns] cmp eax,[cur_editor.Columns.Count]
jbe .exit jbe .exit
mov eax,[cur_editor.Columns.Count] ;! eax,[columns] mov eax,[cur_editor.Columns.Count]
sub eax,[columns.scr] sub eax,[columns.scr]
jns @f jns @f
xor eax,eax xor eax,eax
@@: mov [cur_editor.TopLeft.X],eax ;! [left_col],eax @@: mov [cur_editor.TopLeft.X],eax
.exit: .exit:
pop eax pop eax
ret ret
endf endf
;-----------------------------------------------------------------------------
func check_inv_str ;//////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
@^
mov eax,[pos.y]
mov ecx,[top_line]
.skip_init:
call check_cur_vis
mov [pos.y],eax
mov [top_line],ecx
.skip_check:
; call invalidate_string
call drawfile
ret
^@
endf
;-----------------------------------------------------------------------------
func check_inv_all ;//////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
.skip_init:
call check_cur_vis
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_editor.TopLeft.Y],ecx ;! [top_line],ecx
.skip_check:
; call clear_screen
call draw_file
ret
endf
;-----------------------------------------------------------------------------
func check_cur_vis ;//////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
cmp eax,ecx
jb .low
mov edx,ecx
add edx,[lines.scr]
cmp edx,[cur_editor.Lines.Count] ;! edx,[lines]
jbe @f
mov edx,[cur_editor.Lines.Count] ;! edx,[lines]
@@: cmp eax,edx
jb @f
lea ecx,[eax+1]
sub ecx,[lines.scr]
jns @f
xor ecx,ecx
jmp @f
.low: mov ecx,eax
@@: mov edx,ecx
add edx,[lines.scr]
cmp edx,[cur_editor.Lines.Count] ;! edx,[lines]
jbe @f
mov ecx,[cur_editor.Lines.Count] ;! ecx,[lines]
sub ecx,[lines.scr]
jns @f
xor ecx,ecx
@@:;mov [top_line],ecx
pushad
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
mov ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
mov ecx,ebx
add ecx,[columns.scr]
cmp eax,ebx
jb .lp1
cmp eax,ecx
jb .exit
lea ebx,[eax]
sub ebx,[columns.scr]
jmp @f
.lp1: mov ebx,eax
@@: mov [cur_editor.TopLeft.X],ebx ;! [left_col],ebx
.exit:
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
popad
ret
endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func get_real_length ;//////////////////////////////////////////////////////// func get_real_length ;////////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -232,7 +77,7 @@ func get_line_offset ;////////////////////////////////////////////////////////
; ESI = line data offset ; ESI = line data offset
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
push eax ecx push eax ecx
mov esi,[cur_editor.Lines] ;! AREA_EDIT mov esi,[cur_editor.Lines]
@@: dec ecx @@: dec ecx
js .exit js .exit
movzx eax,word[esi] movzx eax,word[esi]
@ -248,10 +93,10 @@ func init_sel_vars ;//////////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
pushad pushad
mov [sel.selected],1 mov [sel.selected],1
mov eax,[cur_editor.SelStart.X] ;! eax,[sel.x] mov eax,[ebp+EDITOR.SelStart.X]
mov ebx,[cur_editor.SelStart.Y] ;! ebx,[sel.y] mov ebx,[ebp+EDITOR.SelStart.Y]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x] mov ecx,[ebp+EDITOR.Caret.X]
mov edx,[cur_editor.Caret.Y] ;! edx,[pos.y] mov edx,[ebp+EDITOR.Caret.Y]
cmp ebx,edx cmp ebx,edx
jl .lp2 jl .lp2
jne @f jne @f
@ -303,14 +148,10 @@ func get_scroll_vars ;////////////////////////////////////////////////////////
or eax,eax or eax,eax
jns @f jns @f
xor eax,eax xor eax,eax
@@: mov [esp+8],eax ; scroller offset @@: mov [esp+8],eax ; scroller offset
add eax,[esp+4] add eax,[esp+4]
cmp eax,[esp] cmp eax,[esp]
jle @f jle @f
; mov eax,[esp]
; sub eax,[esp+4]
; js @f
; mov [esp+8],eax
@@: @@:
pop edx ebx eax pop edx ebx eax
ret ret
@ -449,16 +290,16 @@ func get_active_popup_item ;//////////////////////////////////////////////////
mov dword[ecx+0x0],0 mov dword[ecx+0x0],0
mov dword[ecx+0x4],0 mov dword[ecx+0x4],0
movzx edx,[ebp+POPUP.width] movzx edx,[ebp+POPUP.width]
mov dword[ecx+0x8],edx;POP_WIDTH mov dword[ecx+0x8],edx
movzx edx,[ebp+POPUP.height] movzx edx,[ebp+POPUP.height]
mov dword[ecx+0xC],edx;POP_HEIGHT mov dword[ecx+0xC],edx
call pt_in_rect call pt_in_rect
jnc .outside_window jnc .outside_window
inc dword[ecx+0x0] inc dword[ecx+0x0]
mov dword[ecx+0x4],3 mov dword[ecx+0x4],3
dec dword[ecx+0x8] dec dword[ecx+0x8]
mov dword[ecx+0xC],3+POP_IHEIGHT-1 mov dword[ecx+0xC],3+POP_IHEIGHT-1
mov edx,[ebp+POPUP.data];popup_text.data mov edx,[ebp+POPUP.data]
@@: inc [pi_cur] @@: inc [pi_cur]
inc edx inc edx
movzx esi,byte[edx-1] movzx esi,byte[edx-1]
@ -475,7 +316,7 @@ func get_active_popup_item ;//////////////////////////////////////////////////
.lp1: call pt_in_rect .lp1: call pt_in_rect
jnc .lp2 jnc .lp2
mov eax,[pi_cur] mov eax,[pi_cur]
test byte[ebp+eax-1],1;byte[popup_text+eax-1],1 test byte[ebp+eax-1],1
jnz .exit jnz .exit
jmp .separator jmp .separator
.lp2: add dword[ecx+0x4],POP_IHEIGHT .lp2: add dword[ecx+0x4],POP_IHEIGHT
@ -516,14 +357,14 @@ func line_add_spaces ;////////////////////////////////////////////////////////
mov [esp+4*7],eax mov [esp+4*7],eax
add esi,eax add esi,eax
push ecx push ecx
mov edi,[cur_editor.Lines] ;! AREA_TEMP2 mov edi,[cur_editor.Lines]
add edi,[edi-4] add edi,[edi-4]
dec edi dec edi
mov eax,esi mov eax,esi
mov esi,edi mov esi,edi
sub esi,ecx sub esi,ecx
lea ecx,[eax+4] lea ecx,[eax+4]
add ecx,edx;[eax] add ecx,edx
push ecx push ecx
neg ecx neg ecx
lea ecx,[esi+ecx+1] lea ecx,[esi+ecx+1]
@ -571,14 +412,14 @@ func delete_selection ;///////////////////////////////////////////////////////
mov [edi-4],bx mov [edi-4],bx
add edi,[sel.begin.x] add edi,[sel.begin.x]
lea esi,[esi+eax+4] lea esi,[esi+eax+4]
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2 mov ecx,[cur_editor.Lines]
add ecx,[ecx-4] add ecx,[ecx-4]
sub ecx,esi sub ecx,esi
cld cld
rep movsb rep movsb
mov eax,[sel.end.y] mov eax,[sel.end.y]
sub eax,[sel.begin.y] sub eax,[sel.begin.y]
sub [cur_editor.Lines.Count],eax ;! [lines],eax sub [cur_editor.Lines.Count],eax
jmp .exit jmp .exit
.single_line: .single_line:
@ -597,7 +438,7 @@ func delete_selection ;///////////////////////////////////////////////////////
lea edi,[esi+4] lea edi,[esi+4]
add edi,[sel.begin.x] add edi,[sel.begin.x]
lea esi,[edi+ecx] lea esi,[edi+ecx]
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2 mov ecx,[cur_editor.Lines]
add ecx,[ecx-4] add ecx,[ecx-4]
sub ecx,esi sub ecx,esi
cld cld
@ -605,11 +446,11 @@ func delete_selection ;///////////////////////////////////////////////////////
.exit: .exit:
mov eax,[sel.begin.x] mov eax,[sel.begin.x]
mov [cur_editor.Caret.X],eax ;! [pos.x],eax mov [cur_editor.Caret.X],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax mov [cur_editor.SelStart.X],eax
mov eax,[sel.begin.y] mov eax,[sel.begin.y]
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax mov [cur_editor.Caret.Y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax mov [cur_editor.SelStart.Y],eax
mov ecx,[cur_editor.Lines.Count] mov ecx,[cur_editor.Lines.Count]
call get_line_offset call get_line_offset
@ -622,7 +463,7 @@ func delete_selection ;///////////////////////////////////////////////////////
call editor_realloc_lines call editor_realloc_lines
popad popad
mov [cur_editor.Modified],1 ;! [modified],1 mov [cur_editor.Modified],1
clc clc
ret ret
@ -689,6 +530,34 @@ func get_lines_in_file ;//////////////////////////////////////////////////////
jmp .lp1 jmp .lp1
endf endf
;-----------------------------------------------------------------------------
func update_caption ;/////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
lea esi,[cur_editor.FilePath]
mov edi,s_title
@@: lodsb
cmp al,0
je @f
stosb
jmp @b
@@:
mov dword[edi],' - '
add edi,3
@@: mov esi,htext
mov ecx,htext.size
cld
rep movsb
mov al,0
stosb
mcall 71,1,s_title
clc
ret
endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func mem.Alloc ;////////////////////////////////////////////////////////////// func mem.Alloc ;//////////////////////////////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------

View File

@ -29,7 +29,7 @@ define mm.Encoding.KOI8R.CP866 recode.koi.866
define mm.Encoding.CP1251.KOI8R recode.1251.koi define mm.Encoding.CP1251.KOI8R recode.1251.koi
define mm.Encoding.KOI8R.CP1251 recode.koi.1251 define mm.Encoding.KOI8R.CP1251 recode.koi.1251
define mm.Options.Appearance 0 define mm.Options.Appearance set_opt.dialog
define mm.Options.SecureSel set_opt.secure_sel define mm.Options.SecureSel set_opt.secure_sel
define mm.Options.AutoBrackets set_opt.auto_braces define mm.Options.AutoBrackets set_opt.auto_braces
define mm.Options.AutoIndents set_opt.auto_indents define mm.Options.AutoIndents set_opt.auto_indents

View File

@ -80,9 +80,9 @@ finddlg_handler:
mov eax,[p_info.client_box.width] mov eax,[p_info.client_box.width]
sub eax,6*(s_2find.size+2)+1 sub eax,6*(s_2find.size+2)+1
add eax,6*(s_2find.size+2)*65536 add eax,6*(s_2find.size+2)*65536
mov dword[tbox.x],eax mov dword[tbox.width],eax
add ecx,-18*65536+1 add ecx,-18*65536+1
mov dword[tbox.y],ecx mov dword[tbox.height],ecx
call textbox.draw call textbox.draw
pop ecx pop ecx
@ -93,9 +93,9 @@ finddlg_handler:
mov eax,[p_info.client_box.width] mov eax,[p_info.client_box.width]
sub eax,6*(s_2replace.size+2)+1 sub eax,6*(s_2replace.size+2)+1
add eax,6*(s_2replace.size+2)*65536 add eax,6*(s_2replace.size+2)*65536
mov dword[tbox.x],eax mov dword[tbox.width],eax
inc ecx inc ecx
mov dword[tbox.y],ecx mov dword[tbox.height],ecx
call textbox.draw call textbox.draw
@@: @@:
@ -164,9 +164,9 @@ osdlg_handler:
mov eax,[p_info.client_box.width] mov eax,[p_info.client_box.width]
sub eax,6*(s_2filename.size+1)+1 sub eax,6*(s_2filename.size+1)+1
add eax,6*(s_2filename.size+1)*65536 add eax,6*(s_2filename.size+1)*65536
mov dword[tbox.x],eax mov dword[tbox.width],eax
add ecx,-18*65536+1 add ecx,-18*65536+1
mov dword[tbox.y],ecx mov dword[tbox.height],ecx
call textbox.draw call textbox.draw
ret ret
@ -220,11 +220,16 @@ gotodlg_handler:
mov eax,[p_info.box.width] mov eax,[p_info.box.width]
sub eax,6*(s_2filename.size+3) sub eax,6*(s_2filename.size+3)
add eax,6*(s_2filename.size+2)*65536 add eax,6*(s_2filename.size+2)*65536
mov dword[tbox.x],eax mov dword[tbox.width],eax
add ecx,-18*65536+1 add ecx,-18*65536+1
mov dword[tbox.y],ecx mov dword[tbox.height],ecx
call textbox.draw call textbox.draw
sub ebx,(6*(s_2cancel.size+2)+3)*65536
mov bx,6*(s_2cancel.size+2)
push 20010 s_2cancel s_2cancel.size
call define_3d_button
ret ret
.key: .key:
@ -237,6 +242,332 @@ gotodlg_handler:
call textbox.key call textbox.key
ret ret
cur_part dd ?
cur_color dd ?
cur_colors rd 10
optsdlg_handler:
cmp al,1
je .draw
cmp al,2
je .key
cmp al,3
je botdlg.button
cmp al,4
je .mouse
ret
.xchg_colors:
mov ecx,10
mov esi,color_tbl
mov edi,cur_colors
@@: lodsd
xchg eax,[edi]
mov [esi-4],eax
add edi,4
loop @b
ret
.draw:
call .draw_editor
mov ecx,[bot_ofs-2]
mov cx,word[bot_ofs]
push ecx
add ecx,128
mcall 38,<2+3+165,2+3+165>,,[cl_3d_inset]
mov bx,word[p_info.client_box.width]
pop ecx
add ecx,35*65536+35
mcall
add ecx,0x00240024
mcall
shr ecx,16
mov bx,cx
add ebx,38*65536-21
mcall 4,,[sc.work_text],s_tabpos,s_tabpos.size
call .draw_tabpos
mov ebx,[bot_ofs]
add ebx,(2+6+165+35)*65536+5+16
mcall 4,,[sc.work_text],s_color,s_color.size
mov dword[tb_color.width],(2+6+6*s_color.size+165+35)*65536+(6*6+8)
mov eax,ebx
add ax,-3
shl eax,16
mov ax,14
mov dword[tb_color.height],eax
call .draw_color
mov ebx,[p_info.client_box.width]
shl ebx,16
mov ecx,[p_info.client_box.height]
shl ecx,16
add ecx,(-34)*65536+15
add ebx,-(2+6*(s_2save.size+2))*65536+6*(s_2save.size+2)
push 20004 s_2save s_2save.size
call define_3d_button
sub ebx,(6*(s_2cancel.size+2)+3)*65536
mov bx,6*(s_2cancel.size+2)
push 20001 s_2cancel s_2cancel.size
call define_3d_button
ret
.get_color:
movzx ecx,[tb_color.length]
mov esi,tb_color.text
xor eax,eax
xor ebx,ebx
jecxz .lp2
.lp1: lodsb
cmp al,'9'
mov dl,-'0'
jbe @f
mov dl,-'A'+10
@@: add al,dl
shl ebx,4
add bl,al
loop .lp1
.lp2: mov eax,[cur_part]
mov [cur_colors+eax*4],ebx
mov [cur_color],ebx
jmp .draw_color.2
.draw_editor:
push dword[options] [tab_bar.Current.Ptr]
mov [options],0
mov ebp,optsdlg_editor
call set_cur_tab
call .xchg_colors
mov [cur_editor.Bounds.Left],2
mov [cur_editor.Bounds.Right],2+165
mov eax,[p_info.client_box.height]
add eax,-125-STATH
mov [cur_editor.Bounds.Top],eax
add eax,122
mov [cur_editor.Bounds.Bottom],eax
call draw_editor
call .xchg_colors
pop ebp eax
mov [options],al
call set_cur_tab
ret
.draw_tabpos:
mov ecx,[bot_ofs-2]
xor cx,cx
mov ebx,(2+3+165+3)*65536+31
add ecx,38*65536+31
mov edx,[cl_3d_inset]
mov esi,[sc.work]
call draw_fillrect
dec ebx
dec ecx
mcall 8,,,0x40000000+21001
mov esi,[cl_3d_normal]
mov al,[tab_pos]
TPOSH = 6
TPOSW = 10
dec al
jnz @f
;// top
inc ebx
mov cx,TPOSH
call draw_fillrect
add ecx,2*65536-2
jmp .lp3
@@: dec al
jnz @f
;// bottom
inc ebx
mov cx,TPOSH
add ecx,(31-TPOSH)*65536
call draw_fillrect
add ecx,-2
jmp .lp3
@@: dec al
jnz @f
;// left
inc ecx
mov bx,TPOSW
call draw_fillrect
add ebx,2*65536-2
jmp .lp4
@@: dec al
jnz @f
;// right
inc ecx
mov bx,TPOSW
add ebx,(31-TPOSW)*65536
call draw_fillrect
add ebx,-2
jmp .lp4
.lp3:
add ebx,(2+TPOSW-2+1)*65536-31+TPOSW-2
call draw_fillrect
add ebx,-(TPOSW-2+1)*65536
mov esi,[sc.work]
call draw_fillrect
ret
.lp4:
add ecx,7*65536-31+4
call draw_fillrect
add ecx,-5*65536
mov esi,[sc.work]
call draw_fillrect
ret
.draw_color:
mov ecx,[cur_part]
mov edx,s_appearance+1
@@: dec ecx
js @f
movzx eax,byte[edx-1]
lea edx,[edx+eax+1]
jmp @b
@@:
movzx esi,byte[edx-1]
mov ebx,[bot_ofs]
add ebx,(2+6+165+35)*65536+8
push ebx ecx edx
mov ecx,ebx
shl ecx,16
mov bx,s_appearance.maxl*6
mov cx,10
mcall 13,,,[cl_3d_normal]
pop edx ecx ebx
mcall 4,,[sc.work_text]
mov eax,[cur_color]
mov edi,tb_color.text
mov ebx,6
mov ecx,16
call uint2strz
mov [tb_color.length],6
mov [tb_color.sel.x],0
mov [tb_color.pos.x],6
mov ebp,tb_color
call textbox.draw
.draw_color.2:
mov ecx,[p_info.client_box.height]
sub ecx,[bot_dlg_height]
add ecx,-STATH
shl ecx,16
add ecx,3*65536+31
mov ebx,(2+6+165)*65536+31
mov edx,[cl_3d_inset]
mov esi,[cur_color]
call draw_fillrect
ret
.key:
cmp ebx,KEY_ESCAPE
je btn.bot.cancel
cmp ebx,KEY_RETURN
je btn.bot.appearance
cmp ebx,KEY_NUMRETURN
je btn.bot.appearance
cmp ebx,KEY_BACKSPACE
je .key.tb.2
cmp ebx,KEY_TAB
je .key.tb.2
cmp bx,0x00FF
ja .key.tb.2
;cmp ebx,KEY_LSHIFT
;je .key.tb.2
;cmp ebx,KEY_RSHIFT
;je .key.tb.2
;cmp ebx,0x00000147
;jb .key.exit
;cmp ebx,0x00000153
;jbe .key.tb.2
test dword[shi],KM_CTRLALT
jnz .key.exit
movzx eax,[chr]
movzx eax,[eax+key0]
or al,al
jz .key.exit
movzx eax,[eax+key1]
cmp al,'0'
jb @f
cmp al,'9'
jbe .key.tb
@@: cmp al,'A'
jb @f
cmp al,'F'
jbe .key.tb
@@: cmp al,'a'
jb @f
cmp al,'f'
jbe .key.tb
@@: ret
.key.tb:
cmp [tb_color.length],6
jb @f
mov al,[tb_color.sel.x]
cmp al,[tb_color.pos.x]
jne @f
ret
.key.tb.2:
@@: call textbox.key
call .get_color
call .draw_editor
.key.exit:
ret
.mouse:
cmp ah,MEV_LDOWN
jne .mouse.exit
mcall 37,1
movsx ebx,ax
sar eax,16
cmp eax,[optsdlg_editor+EDITOR.Bounds.Right]
jg .mouse.exit
cmp ebx,[optsdlg_editor+EDITOR.Bounds.Bottom]
jg .mouse.exit
sub eax,[optsdlg_editor+EDITOR.Bounds.Left]
js .mouse.exit
sub ebx,[optsdlg_editor+EDITOR.Bounds.Top]
js .mouse.exit
mov esi,optsdlg_editor_parts-5
@@: add esi,5
cmp byte[esi+0],-1
je .mouse.exit
cmp al,byte[esi+1]
jb @b
cmp bl,byte[esi+2]
jb @b
cmp al,byte[esi+3]
ja @b
cmp bl,byte[esi+4]
ja @b
movzx ebp,byte[esi+0]
mov [cur_part],ebp
m2m [cur_color],[cur_colors+ebp*4]
;mcall 13,<200,30>,<250,30>,[color_tbl+ebp*4]
;call .draw_color
call .draw
.mouse.exit:
ret
botdlg.button: botdlg.button:
mov esi,accel_table2_botdlg mov esi,accel_table2_botdlg
.acc: cmp ebx,[esi] .acc: cmp ebx,[esi]
@ -262,7 +593,7 @@ botdlg.button:
call save_file call save_file
jnc @f jnc @f
jmp .lp2 jmp .lp2
.lp1: call btn.load_file .lp1: call load_file
jnc @f jnc @f
.lp2: .lp2:
ret ret
@ -285,18 +616,12 @@ botdlg.button:
je @f je @f
call search call search
jnc .found jnc .found
call check_inv_all call editor_check_for_changes
ret ret
.found: .found:
;---------------------------------------
push [copy_size] [copy_count] [copy_buf] push [copy_size] [copy_count] [copy_buf]
; mov esi,0 ;! AREA_CBUF
; mov edi,0 ;! AREA_CBUF-304
; mov ecx,300/4
; rep movsd
movzx eax,[tb_replace.length] movzx eax,[tb_replace.length]
add eax,10 add eax,10
call mem.Alloc call mem.Alloc
@ -304,7 +629,7 @@ botdlg.button:
movzx eax,[tb_replace.length] movzx eax,[tb_replace.length]
mov esi,tb_replace.text mov esi,tb_replace.text
mov edi,[copy_buf] ;! AREA_CBUF mov edi,[copy_buf]
stosd stosd
mov ecx,eax mov ecx,eax
jecxz .lp1 jecxz .lp1
@ -313,27 +638,41 @@ botdlg.button:
mov [copy_size],eax mov [copy_size],eax
mov [copy_count],1 mov [copy_count],1
push [cur_editor.SelStart.X] ;! [sel.x] push [cur_editor.SelStart.X]
mov ebp,cur_editor
call init_sel_vars call init_sel_vars
call key.ctrl_v call key.ctrl_v
pop [cur_editor.SelStart.X] ;! [sel.x] pop [cur_editor.SelStart.X]
mov eax,[copy_buf] mov eax,[copy_buf]
call mem.Free call mem.Free
; mov esi,0 ;! AREA_CBUF-304
; mov edi,0 ;! AREA_CBUF
; mov ecx,300/4
; rep movsd
pop [copy_buf] [copy_count] [copy_size] pop [copy_buf] [copy_count] [copy_size]
;---------------------------------------
call check_inv_all call editor_check_for_changes
ret ret
@@: xor eax,eax @@: xor eax,eax
mov [bot_mode],al mov [bot_mode],al
mov [bot_dlg_height],eax mov [bot_dlg_height],eax
call btn.search call key.f3
call drawwindow call drawwindow
ret ret
btn.bot.appearance:
@@: xor eax,eax
mov [bot_mode],al
mov [bot_dlg_height],eax
call optsdlg_handler.xchg_colors
mov al,[tab_pos]
mov [tab_bar.Style],al
call drawwindow
ret
tabpos_round db 4,3,1,2
btn.bot.tabpos:
movzx eax,[tab_pos]
mov al,[tabpos_round+eax-1]
mov [tab_pos],al
@@: call optsdlg_handler.draw_tabpos
ret

File diff suppressed because it is too large Load Diff

View File

@ -17,11 +17,11 @@ func draw_editor ;///// DRAW EDITOR //////////////////////////////////////////
mov [cur_editor.Gutter.Visible],0 mov [cur_editor.Gutter.Visible],0
test [options],OPTS_LINENUMS test [options],OPTS_LINENUMS
jnz @f jnz @f
xor eax,eax ;! mov eax,2+LCHGW xor eax,eax
jmp .lp1 jmp .lp1
@@: inc [cur_editor.Gutter.Visible] @@: inc [cur_editor.Gutter.Visible]
mov edi,p_info+100 mov edi,p_info+100
mov eax,[cur_editor.Lines.Count] ;! eax,[lines] mov eax,[cur_editor.Lines.Count]
mov ecx,10 mov ecx,10
call uint2str call uint2str
lea eax,[edi-p_info-100] lea eax,[edi-p_info-100]
@ -30,7 +30,7 @@ func draw_editor ;///// DRAW EDITOR //////////////////////////////////////////
mov eax,3 mov eax,3
@@: imul eax,6 @@: imul eax,6
add eax,8 add eax,8
.lp1: mov [cur_editor.Gutter.Width],eax ;! [left_ofs],eax .lp1: mov [cur_editor.Gutter.Width],eax
mov [left_ofs],eax mov [left_ofs],eax
mov eax,[cur_editor.Bounds.Right] mov eax,[cur_editor.Bounds.Right]
@ -131,8 +131,10 @@ func draw_editor_vscroll ;///// DRAW EDITOR VERTICAL SCROLL BAR //////////////
add ebx,(-SCRLW)*65536+SCRLW add ebx,(-SCRLW)*65536+SCRLW
mov ecx,[cur_editor.Bounds.Top-2] mov ecx,[cur_editor.Bounds.Top-2]
mov cx,SCRLW mov cx,SCRLW
cmp [bot_mode],0
jne @f
mcall 8,,,'VSL' or 0x40000000 mcall 8,,,'VSL' or 0x40000000
pushad @@: pushad
sar ebx,16 sar ebx,16
sar ecx,16 sar ecx,16
push ebx ecx SCRLW SCRLW push ebx ecx SCRLW SCRLW
@ -152,8 +154,10 @@ func draw_editor_vscroll ;///// DRAW EDITOR VERTICAL SCROLL BAR //////////////
mov ecx,[cur_editor.Bounds.Bottom] mov ecx,[cur_editor.Bounds.Bottom]
shl ecx,16 shl ecx,16
add ecx,(-SCRLW*2)*65536+SCRLW add ecx,(-SCRLW*2)*65536+SCRLW
cmp [bot_mode],0
jne @f
mcall ,,,'VSG' or 0x40000000 mcall ,,,'VSG' or 0x40000000
pushad @@: pushad
sar ebx,16 sar ebx,16
sar ecx,16 sar ecx,16
push ebx ecx SCRLW SCRLW push ebx ecx SCRLW SCRLW
@ -236,8 +240,10 @@ func draw_editor_hscroll ;///// DRAW EDITOR HORIZONTAL SCROLL BAR ////////////
mov ecx,[cur_editor.Bounds.Bottom] mov ecx,[cur_editor.Bounds.Bottom]
shl ecx,16 shl ecx,16
add ecx,(-SCRLW)*65536+SCRLW add ecx,(-SCRLW)*65536+SCRLW
cmp [bot_mode],0
jne @f
mcall 8,,,'HSL' or 0x40000000 mcall 8,,,'HSL' or 0x40000000
pushad @@: pushad
sar ebx,16 sar ebx,16
sar ecx,16 sar ecx,16
push ebx ecx SCRLW SCRLW push ebx ecx SCRLW SCRLW
@ -256,8 +262,10 @@ func draw_editor_hscroll ;///// DRAW EDITOR HORIZONTAL SCROLL BAR ////////////
mov ebx,[cur_editor.Bounds.Right] mov ebx,[cur_editor.Bounds.Right]
shl ebx,16 shl ebx,16
add ebx,(-SCRLW*2)*65536+SCRLW add ebx,(-SCRLW*2)*65536+SCRLW
cmp [bot_mode],0
jne @f
mcall 8,,,'HSG' or 0x40000000 mcall 8,,,'HSG' or 0x40000000
pushad @@: pushad
sar ebx,16 sar ebx,16
sar ecx,16 sar ecx,16
push ebx ecx SCRLW SCRLW push ebx ecx SCRLW SCRLW
@ -332,6 +340,82 @@ func draw_editor_hscroll ;///// DRAW EDITOR HORIZONTAL SCROLL BAR ////////////
ret ret
endf endf
;-----------------------------------------------------------------------------
func draw_editor_text.part ;///// DRAW EDITOR TEXT (PARTLY) //////////////////
;-----------------------------------------------------------------------------
; EAX = start line
; EBX = end line
;-----------------------------------------------------------------------------
cmp [cur_editor.Lines],0
jne @f
ret
@@: push eax
mov eax,[cur_editor.Bounds.Bottom]
sub eax,[cur_editor.Bounds.Top]
cmp eax,LINEH
pop eax
jge @f
ret
@@:
mov ebp,cur_editor
call init_sel_vars
call check_bottom_right
pushad
push eax
mov eax,[cur_editor.Bounds.Left]
add eax,[cur_editor.Gutter.Width]
add eax,LCHGW+3
mov [left_ofs],eax
mov eax,[cur_editor.Bounds.Top]
add eax,3
mov [top_ofs],eax
pop eax
cmp [lines.scr],0
jle .exit
cmp eax,ebx
jle @f
xchg eax,ebx
@@: cmp eax,[cur_editor.TopLeft.Y]
jge @f
mov eax,[cur_editor.TopLeft.Y]
@@: mov ecx,[cur_editor.TopLeft.Y]
add ecx,[lines.scr]
cmp ebx,ecx
jl @f
dec ecx
mov ebx,ecx
@@: cmp eax,ebx
jg .exit
mov ecx,eax
push eax
call get_line_offset
.start:
mov ecx,ebx
sub ecx,eax
inc ecx
mov ebx,[top_ofs]
add ebx,[left_ofs-2]
sub eax,[cur_editor.TopLeft.Y]
imul eax,LINEH
add ebx,eax
imul ebp,[cur_editor.TopLeft.X],6*65536
mov [draw_blines],0
jmp draw_editor_text.next_line
.exit:
popad
ret
endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func draw_editor_text ;///// DRAW EDITOR TEXT //////////////////////////////// func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -344,6 +428,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
jge @f jge @f
ret ret
@@: @@:
mov ebp,cur_editor
call init_sel_vars call init_sel_vars
call check_bottom_right call check_bottom_right
@ -360,7 +445,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
mov ebx,[top_ofs] mov ebx,[top_ofs]
add ebx,[left_ofs-2] add ebx,[left_ofs-2]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line] mov ecx,[cur_editor.TopLeft.Y]
push ecx push ecx
call get_line_offset call get_line_offset
@ -371,7 +456,8 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
jle .exit jle .exit
add esp,-4 add esp,-4
imul ebp,[cur_editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536 imul ebp,[cur_editor.TopLeft.X],6*65536
mov [draw_blines],1
.next_line: .next_line:
@ -381,7 +467,6 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
shl ecx,16 shl ecx,16
mov cl,LINEH mov cl,LINEH
mov ebx,[cur_editor.Bounds.Right] mov ebx,[cur_editor.Bounds.Right]
;sub ebx,[cur_editor.Bounds.Left]
add ebx,-SCRLW add ebx,-SCRLW
add ebx,[left_ofs-2] add ebx,[left_ofs-2]
sub ebx,[left_ofs] sub ebx,[left_ofs]
@ -389,7 +474,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
; selection (text background) ; selection (text background)
mov [in_sel],0 mov [in_sel],0
mov edx,[color_tbl+4*5] mov edx,[color_tbl.back]
mov eax,[esp+4*2] mov eax,[esp+4*2]
cmp eax,[sel.begin.y] cmp eax,[sel.begin.y]
jl .lp6 jl .lp6
@ -402,7 +487,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
cmp eax,[sel.end.y] cmp eax,[sel.end.y]
je .lp5 je .lp5
.lp2: mov eax,[sel.begin.x] .lp2: mov eax,[sel.begin.x]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col] sub eax,[cur_editor.TopLeft.X]
jle .lp6.2 jle .lp6.2
cmp eax,[columns.scr] cmp eax,[columns.scr]
jge .lp6 jge .lp6
@ -414,7 +499,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
add ebx,[left_ofs] add ebx,[left_ofs]
add ebx,-2 add ebx,-2
rol ebx,16 rol ebx,16
mov edx,[color_tbl+4*7] mov edx,[color_tbl.back.sel]
mcall 13 mcall 13
popad popad
mov bx,ax mov bx,ax
@ -424,7 +509,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
cmp eax,[sel.end.y] cmp eax,[sel.end.y]
je .lp5 je .lp5
.lp4: mov eax,[sel.end.x] .lp4: mov eax,[sel.end.x]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col] sub eax,[cur_editor.TopLeft.X]
jle .lp6 jle .lp6
cmp eax,[columns.scr] cmp eax,[columns.scr]
jg .lp6.2 jg .lp6.2
@ -432,18 +517,18 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
pushad pushad
sub bx,ax sub bx,ax
rol ebx,16 rol ebx,16
add eax,[left_ofs];OLEFT-1 add eax,[left_ofs]
add eax,-2 add eax,-2
mov bx,ax mov bx,ax
rol ebx,16 rol ebx,16
mcall 13 mcall 13
popad popad
inc eax inc eax
mov edx,[color_tbl+4*7] mov edx,[color_tbl.back.sel]
mov bx,ax mov bx,ax
mov [in_sel],3 mov [in_sel],3
jmp .lp6 jmp .lp6
.lp5: mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col] .lp5: mov eax,[cur_editor.TopLeft.X]
cmp eax,[sel.begin.x] cmp eax,[sel.begin.x]
jge .lp4 jge .lp4
add eax,[columns.scr] add eax,[columns.scr]
@ -452,7 +537,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
mov eax,[sel.begin.x] mov eax,[sel.begin.x]
cmp eax,[sel.end.x] cmp eax,[sel.end.x]
je .lp6 je .lp6
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col] sub eax,[cur_editor.TopLeft.X]
imul eax,6 imul eax,6
pushad pushad
mov ebx,[sel.end.x] mov ebx,[sel.end.x]
@ -463,7 +548,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
add eax,[left_ofs] add eax,[left_ofs]
mov bx,ax mov bx,ax
rol ebx,16 rol ebx,16
mov edx,[color_tbl+4*7] mov edx,[color_tbl.back.sel]
mcall 13 mcall 13
movzx eax,bx movzx eax,bx
sar ebx,16 sar ebx,16
@ -475,7 +560,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
add ax,word[left_ofs] add ax,word[left_ofs]
add ax,-2 add ax,-2
mov bx,ax mov bx,ax
mov edx,[color_tbl+4*5] mov edx,[color_tbl.back]
mcall 13 mcall 13
popad popad
mov bx,ax mov bx,ax
@ -483,7 +568,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
jmp .lp6 jmp .lp6
.lp6.2: .lp6.2:
mov edx,[color_tbl+4*7] mov edx,[color_tbl.back.sel]
inc [in_sel] inc [in_sel]
.lp6: .lp6:
mcall 13 mcall 13
@ -491,13 +576,13 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
lodsd lodsd
pushad pushad
mov edx,[color_tbl+4*5] mov edx,[color_tbl.back]
test eax,0x00010000 test eax,0x00010000
jz @f jz @f
mov edx,[color_tbl+4*8] mov edx,[color_tbl.line.moded]
test eax,0x00020000 test eax,0x00020000
jz @f jz @f
mov edx,[color_tbl+4*9] mov edx,[color_tbl.line.saved]
@@: mov ebx,[left_ofs] @@: mov ebx,[left_ofs]
add ebx,-LCHGW-2;-4 add ebx,-LCHGW-2;-4
@ -513,12 +598,12 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
or eax,eax or eax,eax
ja .next_block ja .next_block
add esp,4*2 add esp,4*2
jmp .exit ; .draw_cursor jmp .exit
.next_block: .next_block:
push esi ecx push esi ecx
call get_next_part call .get_next_part
pop ebx pop ebx
push ecx push ecx
@ -526,30 +611,28 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
push esi ebx push esi ebx
mov eax,ebx mov eax,ebx
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col] sub ebx,[cur_editor.TopLeft.X]
cmp ebx,[columns.scr] cmp ebx,[columns.scr]
jge .skip_t jge .skip_t
add ebx,esi add ebx,esi
jle .skip_t jle .skip_t
mov ebx,[esp+8+4*2] ;// 4*2=esi+ebx mov ebx,[esp+8+4*2] ;// 4*2=esi+ebx
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col] sub eax,[cur_editor.TopLeft.X]
jge .qqq jge .qqq
sub edx,eax sub edx,eax
add esi,eax add esi,eax
; mov eax,OLEFT*65536
xor eax,eax xor eax,eax
jmp .qqq2 jmp .qqq2
.qqq: .qqq:
; inc eax
imul eax,6*65536 imul eax,6*65536
.qqq2: .qqq2:
and ebx,0x0000FFFF and ebx,0x0000FFFF
add eax,[left_ofs-2];OLEFT*65536 add eax,[left_ofs-2]
add ebx,eax add ebx,eax
mov eax,[esp] ; ebx mov eax,[esp] ; ebx
add eax,[esp+4] ; esi add eax,[esp+4] ; esi
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col] sub eax,[cur_editor.TopLeft.X]
sub eax,[columns.scr] sub eax,[columns.scr]
jle .qweqwe jle .qweqwe
sub esi,eax sub esi,eax
@ -573,7 +656,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
mov esi,[sel.begin.x] mov esi,[sel.begin.x]
sub esi,[esp] sub esi,[esp]
pushad pushad
mov ecx,[cur_editor.TopLeft.X] ;! ecx,[left_col] mov ecx,[cur_editor.TopLeft.X]
sub ecx,[esp+4*8] sub ecx,[esp+4*8]
jle @f jle @f
sub esi,ecx sub esi,ecx
@ -585,7 +668,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
add bx,si add bx,si
rol ebx,16 rol ebx,16
mov esi,eax mov esi,eax
mov ecx,[color_tbl+4*6] mov ecx,[color_tbl.text.sel]
mcall 4 mcall 4
popad popad
jmp .draw_t jmp .draw_t
@ -603,14 +686,14 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
sub eax,[esp] sub eax,[esp]
push ebx push ebx
mov ebx,[esp+4] mov ebx,[esp+4]
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col] sub ebx,[cur_editor.TopLeft.X]
jge .ya2.1 jge .ya2.1
add eax,ebx add eax,ebx
.ya2.1: .ya2.1:
pop ebx pop ebx
pushad pushad
mov esi,eax mov esi,eax
mov ecx,[color_tbl+4*6] mov ecx,[color_tbl.text.sel]
mcall 4 mcall 4
popad popad
sub esi,eax sub esi,eax
@ -635,7 +718,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
sub esi,[esp] sub esi,[esp]
push eax push eax
mov eax,[esp+4] mov eax,[esp+4]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col] sub eax,[cur_editor.TopLeft.X]
jge .nt3.1 jge .nt3.1
add esi,eax add esi,eax
.nt3.1: .nt3.1:
@ -647,7 +730,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
add ebx,esi add ebx,esi
mov esi,[sel.end.x] mov esi,[sel.end.x]
sub esi,[sel.begin.x] sub esi,[sel.begin.x]
mov ecx,[color_tbl+4*6] mov ecx,[color_tbl.text.sel]
sub eax,esi sub eax,esi
push eax push eax
mcall 4 mcall 4
@ -665,30 +748,32 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
cmp eax,[sel.end.x] cmp eax,[sel.end.x]
jge .ya2 jge .ya2
;---[ block inside selection ]-----------------(- ;---[ block inside selection ]-----------------(-
.ya4: mov ecx,[color_tbl+4*6] .ya4: mov ecx,[color_tbl.text.sel]
;----------------------------------------------)- ;----------------------------------------------)-
.draw_t: .draw_t:
mcall 4;[esp+8] mcall 4
.skip_t: .skip_t:
pop eax eax ; ebx esi pop eax eax ; ebx esi
imul eax,6 imul eax,6
add [esp+4*2+2],ax add [esp+4*2+2],ax
pop ecx esi pop ecx esi
cmp ecx,[cur_line_len];LINE_WIDTH cmp ecx,[cur_line_len]
jl .next_block jl .next_block
pop ebx ecx pop ebx ecx
and ebx,0x0000FFFF and ebx,0x0000FFFF
add ebx,[left_ofs-2] add ebx,[left_ofs-2]
add ebx,LINEH add ebx,LINEH
add esi,[cur_line_len];LINE_WIDTH add esi,[cur_line_len]
inc dword[esp] inc dword[esp]
dec ecx dec ecx
jg .next_line jg .next_line
.exit: .exit:
cmp [draw_blines],0
je .exit.2
mov eax,[cur_editor.Bounds.Left] mov eax,[cur_editor.Bounds.Left]
add eax,[cur_editor.Gutter.Width] add eax,[cur_editor.Gutter.Width]
inc eax inc eax
@ -697,7 +782,7 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
mov bx,word[cur_editor.Bounds.Right] mov bx,word[cur_editor.Bounds.Right]
sub bx,ax sub bx,ax
add ebx,-SCRLW add ebx,-SCRLW
mov edx,[color_tbl+4*5] mov edx,[color_tbl.back]
mov eax,13 mov eax,13
mov ecx,[esp-8] mov ecx,[esp-8]
add ecx,LINEH add ecx,LINEH
@ -719,11 +804,130 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
add ecx,-(SCRLW-1)*65536+SCRLW-1 add ecx,-(SCRLW-1)*65536+SCRLW-1
mcall mcall
.exit.2:
popad popad
add esp,4 add esp,4
ret ret
endf endf
;-----------------------------------------------------------------------------
func draw_editor_text.get_next_part ;/////////////////////////////////////////
;-----------------------------------------------------------------------------
; Input:
; ECX = current letter
; ESI = string
; Output:
; ECX = color
; EDX = string
; ESI = length
;-----------------------------------------------------------------------------
cmp [cur_editor.AsmMode],0
je .plain.text
xor ebx,ebx
mov edx,ecx
add esi,ecx
mov edi,symbols
mov al,[esi]
cmp al,';'
je .comment
mov ecx,symbols.size
repne scasb
je .symbol
cmp al,'$'
jne @f
mov edi,symbols
mov al,[esi+1]
mov ecx,symbols.size
repne scasb
je .not_symbol
jmp .number
@@: cmp al,'0'
jb @f
cmp al,'9'
jbe .number
@@: cmp al,"'"
je .string
cmp al,'"'
je .string
.not_symbol:
inc ebx
inc edx
cmp edx,[cur_line_len]
jge @f
mov edi,symbols
mov al,[esi+ebx]
cmp al,';'
je @f
mov ecx,symbols.size
repne scasb
jne .not_symbol
@@: mov ecx,edx
mov edx,esi
mov esi,ebx
mov eax,[color_tbl.text]
ret
.symbol:
inc ebx
inc edx
cmp edx,[cur_line_len]
jge @f
mov edi,symbols
mov al,[esi+ebx]
mov ecx,symbols.size
repne scasb
je .symbol
@@: mov ecx,edx
mov edx,esi
mov esi,ebx
mov eax,[color_tbl.symbol]
ret
.comment:
neg edx
add edx,[cur_line_len]
xchg edx,esi
mov ecx,[cur_line_len]
mov eax,[color_tbl.comment]
ret
.number:
inc ebx
inc edx
cmp edx,[cur_line_len]
jge @f
mov edi,symbols
mov al,[esi+ebx]
cmp al,';'
je @f
mov ecx,symbols.size
repne scasb
jne .number
@@: mov ecx,edx
mov edx,esi
mov esi,ebx
mov eax,[color_tbl.number]
ret
.string:
inc ebx
inc edx
cmp edx,[cur_line_len]
jge @f
cmp [esi+ebx],al
jne .string
inc ebx
inc edx
@@:
mov ecx,edx
mov edx,esi
mov esi,ebx
mov eax,[color_tbl.string]
ret
.plain.text:
mov edx,[cur_line_len]
xchg edx,esi
mov ecx,[cur_line_len]
mov eax,[color_tbl.text]
ret
endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func draw_editor_caret ;///// DRAW EDITOR TEXT CARET ///////////////////////// func draw_editor_caret ;///// DRAW EDITOR TEXT CARET /////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -781,3 +985,188 @@ func editor_realloc_lines ;///// ADD $DELTA$ TO LINES SIZE ///////////////////
pop ecx ebx pop ecx ebx
ret ret
endf endf
REDRAW_TEXT = 00000001b
REDRAW_HSCROLL = 00000010b
REDRAW_VSCROLL = 00000100b
REDRAW_ONELINE = 00001000b
REDRAW_TWOLINES = 00010000b
;-----------------------------------------------------------------------------
func editor_check_for_changes ;///// EDITOR CHANGES CHECKER //////////////////
;-----------------------------------------------------------------------------
call .check_cursor_visibility
xor edx,edx
mov eax,[cur_editor.TopLeft.Y]
cmp eax,[checker_ed.TopLeft.Y]
je @f
or dl,REDRAW_TEXT+REDRAW_VSCROLL
@@: mov eax,[cur_editor.TopLeft.X]
cmp eax,[checker_ed.TopLeft.X]
je @f
or dl,REDRAW_TEXT+REDRAW_HSCROLL
@@: or dl,dl
jnz .redraw
mov eax,[cur_editor.Caret.Y]
cmp eax,[checker_ed.Caret.Y]
je @f
or dl,REDRAW_TWOLINES
@@: mov eax,[cur_editor.Caret.X]
cmp eax,[checker_ed.Caret.X]
je @f
or dl,REDRAW_ONELINE
@@: mov ebp,cur_editor
call init_sel_vars
mov al,[sel.selected]
mov ebp,checker_ed
call init_sel_vars
cmp al,[sel.selected]
je @f
cmp al,0
je .clear_sel
jmp .draw_sel
@@: cmp al,0
jne .redraw_sel
or dl,dl
jz .exit
test dl,REDRAW_TWOLINES
jz .one_line
push edx
mov eax,[checker_ed.Caret.Y]
mov ebx,eax
call draw_editor_text.part
pop edx
.one_line:
mov eax,[cur_editor.Caret.Y]
mov ebx,eax
call draw_editor_text.part
call draw_editor_caret
jmp .exit
.clear_sel:
;// use checker_ed
mov eax,[sel.begin.y]
mov ebx,[sel.end.y]
push eax ebx
call draw_editor_text.part
pop edx ecx
mov eax,[cur_editor.Caret.Y]
cmp eax,ecx
jb @f
cmp eax,edx
jbe .lp1
@@: mov ebx,eax
call draw_editor_text.part
.lp1: call draw_editor_caret
jmp .exit
.draw_sel:
;// use cur_editor
mov ebp,cur_editor
call init_sel_vars
mov eax,[sel.begin.y]
mov ebx,[sel.end.y]
push eax ebx
call draw_editor_text.part
pop edx ecx
mov eax,[checker_ed.Caret.Y]
cmp eax,ecx
jb @f
cmp eax,edx
jbe .lp2
@@: mov ebx,eax
call draw_editor_text.part
.lp2: call draw_editor_caret
jmp .exit
.redraw_sel:
;// use checker_ed and cur_editor
mov eax,[checker_ed.Caret.Y]
mov ebx,[cur_editor.Caret.Y]
cmp eax,ebx
jb @f
xchg eax,ebx
@@: call draw_editor_text.part
call draw_editor_caret
jmp .exit
.redraw:
push edx
call draw_editor_gutter
call draw_editor_text
call draw_editor_caret
test byte[esp],REDRAW_VSCROLL
jz @f
call draw_editor_vscroll
@@: pop edx
test dl,REDRAW_HSCROLL
jz @f
call draw_editor_hscroll
@@: jmp .exit
.exit:
mov esi,cur_editor
mov edi,checker_ed
mov ecx,sizeof.EDITOR/4
cld
rep movsd
ret
.check_cursor_visibility:
push eax ebx
.chk_y:
mov eax,[cur_editor.Caret.Y]
or eax,eax
jge @f
mov [cur_editor.Caret.Y],0
jmp .chk_dy
@@: cmp eax,[cur_editor.Lines.Count]
jl .chk_dy
mov eax,[cur_editor.Lines.Count]
dec eax
mov [cur_editor.Caret.Y],eax
.chk_dy:
mov eax,[cur_editor.TopLeft.Y]
cmp eax,[cur_editor.Caret.Y]
jle @f
m2m [cur_editor.TopLeft.Y],[cur_editor.Caret.Y]
@@: add eax,[lines.scr]
cmp eax,[cur_editor.Caret.Y]
jg .chk_x
mov eax,[cur_editor.Caret.Y]
sub eax,[lines.scr]
inc eax
mov [cur_editor.TopLeft.Y],eax
.chk_x:
mov eax,[cur_editor.Caret.X]
or eax,eax
jge @f
mov [cur_editor.Caret.X],0
jmp .chk_dx
@@: cmp eax,[cur_editor.Columns.Count]
jl .chk_dx
mov eax,[cur_editor.Columns.Count]
mov [cur_editor.Caret.X],eax
.chk_dx:
mov eax,[cur_editor.TopLeft.X]
cmp eax,[cur_editor.Caret.X]
jle @f
m2m [cur_editor.TopLeft.X],[cur_editor.Caret.X]
@@: add eax,[columns.scr]
cmp eax,[cur_editor.Caret.X]
jg @f
mov eax,[cur_editor.Caret.X]
sub eax,[columns.scr]
inc eax
mov [cur_editor.TopLeft.X],eax
@@: cmp [mev],MEV_LDOWN
jne @f
push [cur_editor.Caret.X] [cur_editor.Caret.Y]
pop [cur_editor.SelStart.Y] [cur_editor.SelStart.X]
@@: pop ebx eax
ret
endf

View File

@ -9,7 +9,7 @@ func save_file ;//////////////////////////////////////////////////////////////
rep movsb rep movsb
mov byte[edi],0 mov byte[edi],0
mov esi,[cur_editor.Lines] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum) mov esi,[cur_editor.Lines]
xor ebx,ebx xor ebx,ebx
mov ecx,[cur_editor.Lines.Count] mov ecx,[cur_editor.Lines.Count]
@ -24,31 +24,20 @@ func save_file ;//////////////////////////////////////////////////////////////
call mem.Alloc call mem.Alloc
push eax push eax
mov esi,[cur_editor.Lines] mov esi,[cur_editor.Lines]
mov edi,eax ;!!! AREA_TEMP mov edi,eax
; pop eax
; ret ; DISALLOW FOR NOW
.new_string: .new_string:
call save_string call save_string
cmp dword[esi],0 cmp dword[esi],0
jne .new_string jne .new_string
pop eax pop eax
sub edi,eax ;!!! AREA_TEMP+2 ; minus last CRLF sub edi,eax
add edi,-2 add edi,-2 ; minus last CRLF
;! mov [filelen],edi
; cmp byte[f_info.path],'/'
; je .systree_save
; mcall 33,f_info.path,0,edi,0 ;!!! AREA_TEMP,edi,0;[filelen],0
; or eax,eax
; jz .exit
; call file_not_found
; jmp .exit.2
.systree_save: .systree_save:
mov [f_info70+0],2 mov [f_info70+0],2
mov [f_info70+12],edi mov [f_info70+12],edi
mov [f_info70+16],eax ;!!! AREA_TEMP mov [f_info70+16],eax
mov byte[f_info70+20],0 mov byte[f_info70+20],0
mov [f_info70+21],f_info.path mov [f_info70+21],f_info.path
mcall 70,f_info70 mcall 70,f_info70
@ -59,7 +48,7 @@ func save_file ;//////////////////////////////////////////////////////////////
jnz .exit.2 jnz .exit.2
.exit: .exit:
mov [cur_editor.Modified],0 ;! [modified],0 mov [cur_editor.Modified],0
clc clc
ret ret
@ -76,7 +65,6 @@ func save_string ;////////////////////////////////////////////////////////////
jz @f jz @f
or dword[esi],0x00020000 or dword[esi],0x00020000
@@: add esi,4 @@: add esi,4
; mov ecx,eax
@@: cmp byte[esi+ecx-1],' ' @@: cmp byte[esi+ecx-1],' '
jne @f jne @f
@ -89,8 +77,6 @@ func save_string ;////////////////////////////////////////////////////////////
.next_char: .next_char:
mov al,[esi+ebx] mov al,[esi+ebx]
inc ebx inc ebx
; cmp [asm_mode],0
; je .put
test [options],OPTS_OPTIMSAVE test [options],OPTS_OPTIMSAVE
jz .put jz .put
test ah,00000001b test ah,00000001b
@ -206,8 +192,16 @@ func load_file ;//////////////////////////////////////////////////////////////
.file_found: .file_found:
mov ecx,eax mov ecx,eax
call create_tab cmp [tab_bar.Items.Count],1
push ecx esi edi jne @f
cmp [cur_editor.FilePath],'/'
je @f
cmp [cur_editor.Modified],0
jne @f
mov ebp,cur_editor
jmp .lp1
@@: call create_tab
.lp1: push ecx esi edi
mov esi,tb_opensave.text mov esi,tb_opensave.text
lea edi,[ebp+TABITEM.Editor.FilePath] lea edi,[ebp+TABITEM.Editor.FilePath]
movzx ecx,[tb_opensave.length] movzx ecx,[tb_opensave.length]
@ -225,6 +219,32 @@ func load_file ;//////////////////////////////////////////////////////////////
call load_from_memory call load_from_memory
mov eax,[f_info70+16] mov eax,[f_info70+16]
call mem.Free call mem.Free
xor eax,eax
mov [cur_editor.TopLeft.Y],eax
mov [cur_editor.TopLeft.X],eax
mov [cur_editor.Caret.X],eax
mov [cur_editor.Caret.Y],eax
mov [cur_editor.SelStart.X],eax
mov [cur_editor.SelStart.Y],eax
mov [cur_editor.Modified],al
mov [cur_editor.AsmMode],al
lea ebx,[cur_editor.FilePath]
mov eax,ebx
call strlen
mov ecx,dword[ebx+eax-3]
or ecx,0x202020
cmp ecx,'asm'
jne @f
inc [cur_editor.AsmMode]
jmp .nocol
@@: cmp ecx,'inc'
jne .nocol
inc [cur_editor.AsmMode]
.nocol:
call update_caption
clc clc
ret ret
endf endf
@ -236,22 +256,14 @@ func load_from_memory ;///////////////////////////////////////////////////////
; ESI = data pointer ; ESI = data pointer
; EBP = EDITOR* ; EBP = EDITOR*
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; DEBUGF 1,<">>> load_from_memory\n" # \
; " data length = %d\n" # \
; " data pointer = 0x%x\n" # \
; " EDITOR* = 0x%x\n">,ecx,esi,ebp
call get_lines_in_file call get_lines_in_file
; DEBUGF 1,"lines in file: %d\n",eax
mov [ebp+EDITOR.Lines.Count],eax mov [ebp+EDITOR.Lines.Count],eax
lea edx,[ebx+ecx] lea edx,[ebx+ecx]
imul ebx,eax,14 imul ebx,eax,14
add ebx,edx add ebx,edx
; DEBUGF 1,"36522: %d\n",ebx
mov eax,[ebp+EDITOR.Lines] mov eax,[ebp+EDITOR.Lines]
mov [ebp+EDITOR.Lines.Size],ebx mov [ebp+EDITOR.Lines.Size],ebx
call mem.ReAlloc call mem.ReAlloc
; DEBUGF 1,"mem.ReAlloc: 0x%x\n",eax
mov [ebp+EDITOR.Lines],eax mov [ebp+EDITOR.Lines],eax
mov [ebp+EDITOR.Columns.Count],0 mov [ebp+EDITOR.Columns.Count],0
@ -288,10 +300,10 @@ func load_from_memory ;///////////////////////////////////////////////////////
sub eax,10 sub eax,10
jnz @f jnz @f
inc eax inc eax
@@: cmp eax,[ebp+EDITOR.Columns.Count] ;! eax,[columns] @@: cmp eax,[ebp+EDITOR.Columns.Count]
jbe @f jbe @f
mov [ebp+EDITOR.Columns.Count],eax ;! [columns],eax mov [ebp+EDITOR.Columns.Count],eax
@@: mov [ebp+EDITOR.Modified],0 ;! [modified],0 @@: mov [ebp+EDITOR.Modified],0
ret ret
.CR: cmp byte[esi],10 .CR: cmp byte[esi],10
@ -304,11 +316,10 @@ func load_from_memory ;///////////////////////////////////////////////////////
lea eax,[edi-4] lea eax,[edi-4]
sub eax,ebx sub eax,ebx
mov [ebx],eax mov [ebx],eax
; inc [cur_editor.Lines] ;! [lines]
add eax,-10 add eax,-10
cmp eax,[ebp+EDITOR.Columns.Count] ;! eax,[columns] cmp eax,[ebp+EDITOR.Columns.Count]
jbe .next_line jbe .next_line
mov [ebp+EDITOR.Columns.Count],eax ;! [columns],eax mov [ebp+EDITOR.Columns.Count],eax
jmp .next_line jmp .next_line
.TB: lea eax,[edi-4] .TB: lea eax,[edi-4]

File diff suppressed because it is too large Load Diff

View File

@ -17,9 +17,9 @@ menubar_res main_menu,\
en,'Options' ,mm.Options ,onshow.options,\ en,'Options' ,mm.Options ,onshow.options,\
\ \
et,'Fail' ,mm.File ,onshow.file ,\ et,'Fail' ,mm.File ,onshow.file ,\
et,'Muuda' ,mm.Edit ,onshow.edit ,\ et,'Muuda' ,mm.Edit ,onshow.edit ,\
et,'Otsi' ,mm.Search ,onshow.search ,\ et,'Otsi' ,mm.Search ,onshow.search ,\
et,'Käivita' ,mm.Run ,onshow.run ,\ et,'Käivita' ,mm.Run ,onshow.run ,\
et,'Kodeering',mm.Encoding,onshow.recode ,\ et,'Kodeering',mm.Encoding,onshow.recode ,\
et,'Seaded' ,mm.Options ,onshow.options et,'Seaded' ,mm.Options ,onshow.options
@ -42,14 +42,14 @@ popup_res mm.File,\
en,'-' ,'' , ,\ en,'-' ,'' , ,\
en,'Exit' ,'Alt+X' ,Exit,\ en,'Exit' ,'Alt+X' ,Exit,\
\ \
et,'Uus' ,'Ctrl+N' ,New ,\ et,'Uus' ,'Ctrl+N' ,New ,\
et,'Ava...' ,'Ctrl+O' ,Open ,\ et,'Ava...' ,'Ctrl+O' ,Open ,\
et,'Salvesta' ,'Ctrl+S' ,Save ,\ et,'Salvesta' ,'Ctrl+S' ,Save ,\
et,'Salvesta nimega...','Ctrl+Shift+S',SaveAs,\ et,'Salvesta nimega...','Ctrl+Shift+S',SaveAs,\
et,'-' ,'' , ,\ et,'-' ,'' , ,\
et,'Sulge' ,'Ctrl+F4' ,Close ,\ et,'Sulge' ,'Ctrl+F4' ,Close ,\
et,'-' ,'' , ,\ et,'-' ,'' , ,\
et,'Välju' ,'Alt+X' ,Exit et,'Välju' ,'Alt+X' ,Exit
popup_res mm.Edit,\ popup_res mm.Edit,\
ru,'‚ë१ âì' ,'Ctrl+X',Cut ,\ ru,'‚ë१ âì' ,'Ctrl+X',Cut ,\
@ -87,7 +87,7 @@ popup_res mm.Search,\
en,'Replace...' ,'Ctrl+H',Replace ,\ en,'Replace...' ,'Ctrl+H',Replace ,\
\ \
et,'Positsioon...','Ctrl+G',Position,\ et,'Positsioon...','Ctrl+G',Position,\
et,'-' ,'' , ,\ et,'-' ,'' , ,\
et,'Leia...' ,'Ctrl+F',Find ,\ et,'Leia...' ,'Ctrl+F',Find ,\
et,'Leia järgmine','F3' ,FindNext,\ et,'Leia järgmine','F3' ,FindNext,\
et,'Asenda...' ,'Ctrl+H',Replace et,'Asenda...' ,'Ctrl+H',Replace
@ -152,6 +152,11 @@ popup_res mm.Options,\
et,'-' ,'', ,\ et,'-' ,'', ,\
et,'Rea numbrid' ,'',LineNumbers et,'Rea numbrid' ,'',LineNumbers
lsz s_defname,\
en,<'Untitled',0>,\
ru,<'<27>¥§ë¬ï­­ë©',0>,\
et,<'Nimetu',0>
lsz s_modified,\ lsz s_modified,\
ru,'ˆ§¬¥­¥­®',\ ru,'ˆ§¬¥­¥­®',\
en,'Modified',\ en,'Modified',\
@ -183,6 +188,14 @@ lsz s_2cancel,\
ru,'Žâ¬¥­ ',\ ru,'Žâ¬¥­ ',\
en,'Cancel',\ en,'Cancel',\
et,'Tühista' et,'Tühista'
lsz s_color,\
ru,'–¢¥â: 0x',\
en,'Color: 0x',\
et,'Color: 0x'
lsz s_tabpos,\
ru,'<27> á¯®«®¦¥­¨¥ § ª« ¤®ª',\
en,'Tabs placement',\
et,'Tabs placement'
lsz s_enter_filename,\ lsz s_enter_filename,\
ru,<'‚¢¥¤¨â¥ ¨¬ï ä ©« ',0>,\ ru,<'‚¢¥¤¨â¥ ¨¬ï ä ©« ',0>,\
@ -244,6 +257,28 @@ lszc s_fs_error,b,\
et,<'Juurdepääs keelatud (10)',0>,\ et,<'Juurdepääs keelatud (10)',0>,\
et,<'Seadme viga (11)',0> et,<'Seadme viga (11)',0>
lszc s_appearance,b,\
ru,'’¥ªáâ',\
ru,'”®­',\
ru,'’¥ªá⠢뤥«¥­¨ï',\
ru,'”®­ ¢ë¤¥«¥­¨ï',\
ru,'‘¨¬¢®«ë',\
ru,'—¨á« ',\
ru,'‘âப¨',\
ru,'Š®¬¬¥­â à¨¨',\
ru,'ˆ§¬¥­ñ­ë¥ áâப¨',\
ru,'‘®åà ­ñ­­ë¥ áâப¨',\
\
en,'Text',\
en,'Background',\
en,'Selection text',\
en,'Selection background',\
en,'Symbols',\
en,'Numbers',\
en,'Strings',\
en,'Comments',\
en,'Modified lines',\
en,'Saved lines'
lsz sysfuncs_filename,\ lsz sysfuncs_filename,\
ru,<'SYSFUNCR.TXT',0>,\ ru,<'SYSFUNCR.TXT',0>,\

View File

@ -3,9 +3,9 @@ func check_mouse_in_edit_area
mov ebx,eax mov ebx,eax
and ebx,0x0000FFFF and ebx,0x0000FFFF
shr eax,16 shr eax,16
mov ecx,[cur_editor.Bounds.Top] ; ecx,[top_ofs] mov ecx,[cur_editor.Bounds.Top]
inc ecx inc ecx
pushd [cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx ; [left_ofs] ATOPH [p_info.client_box.width] ATOPH pushd [cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0] popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
sub [__rc+0x8],SCRLW+6 sub [__rc+0x8],SCRLW+6
mov ecx,[cur_editor.Gutter.Width] mov ecx,[cur_editor.Gutter.Width]
@ -69,10 +69,10 @@ mouse:
pop eax pop eax
jne still.skip_write jne still.skip_write
@@: @@:
cmp [just_from_popup],0 ;!!! cmp [just_from_popup],0
je @f ;!!! je @f
cmp al,MEV_LUP ;!!! cmp al,MEV_LUP
jne still.skip_write ;!!! jne still.skip_write
@@: mov [mev],al @@: mov [mev],al
jmp [mouse_ev+eax*4-4] jmp [mouse_ev+eax*4-4]
@ -101,7 +101,6 @@ mouse:
pop [mi_cur] pop [mi_cur]
cmp [popup_active],0 cmp [popup_active],0
je still.skip_write je still.skip_write
; mcall 18,2,[h_popup]
mov ecx,[mi_cur] mov ecx,[mi_cur]
or ecx,ecx or ecx,ecx
js still.skip_write js still.skip_write
@ -110,7 +109,6 @@ mouse:
call dword[main_menu.onshow+ecx*4-4] call dword[main_menu.onshow+ecx*4-4]
call setup_main_menu_popup call setup_main_menu_popup
mcall 60,2,[h_popup],POPUP_STACK,4 mcall 60,2,[h_popup],POPUP_STACK,4
; mcall 51,1,popup_thread_start,POPUP_STACK
jmp still.skip_write jmp still.skip_write
@ -150,88 +148,76 @@ mouse:
call clear_selection call clear_selection
.check_body.2: .check_body.2:
sub eax,[cur_editor.Bounds.Left] ; eax,[left_ofs] sub eax,[cur_editor.Bounds.Left]
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs] sub ebx,[cur_editor.Bounds.Top]
sub eax,[cur_editor.Gutter.Width] sub eax,[cur_editor.Gutter.Width]
sub eax,LCHGW sub eax,LCHGW
sub ebx,2 sub ebx,2
; sub ebx,[__rc+0x4]
push eax push eax
mov eax,ebx mov eax,ebx
cdq;xor edx,edx cdq
mov ecx,LINEH mov ecx,LINEH
idiv ecx idiv ecx
@@: add eax,[cur_editor.TopLeft.Y] ;! eax,[top_line] @@: add eax,[cur_editor.TopLeft.Y]
mov ebx,eax mov ebx,eax
pop eax pop eax
cdq;xor edx,edx cdq
mov ecx,6 mov ecx,6
idiv ecx idiv ecx
@@: add eax,[cur_editor.TopLeft.X] ;! eax,[left_col] @@: add eax,[cur_editor.TopLeft.X]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns] cmp eax,[cur_editor.Columns.Count]
jl @f jl @f
mov eax,[cur_editor.Columns.Count] ;! eax,[columns] mov eax,[cur_editor.Columns.Count]
@@: cmp ebx,[cur_editor.Lines.Count] ;! ebx,[lines] @@: cmp ebx,[cur_editor.Lines.Count]
jl @f jl @f
mov ebx,[cur_editor.Lines.Count] ;! ebx,[lines] mov ebx,[cur_editor.Lines.Count]
dec ebx dec ebx
@@: @@:
cmp [cur_editor.Caret.X],eax ;! [pos.x],eax cmp [cur_editor.Caret.X],eax
jne .change_cur_pos jne .change_cur_pos
cmp [cur_editor.Caret.Y],ebx ;! [pos.y],ebx cmp [cur_editor.Caret.Y],ebx
je still.skip_write jne .change_cur_pos
call editor_check_for_changes
jmp still.skip_write
.change_cur_pos: .change_cur_pos:
mov [cur_editor.Caret.X],eax ;! [pos.x],eax mov [cur_editor.Caret.X],eax
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y] mov [cur_editor.Caret.Y],ebx
mov [cur_editor.Caret.Y],ebx ;! [pos.y],ebx call editor_check_for_changes
call check_cur_vis_inv
jc .check_ldown
; cmp eax,ebx
; je @f
; push ebx
; mov ebx,eax
; call drawfile.ex
; pop eax
; @@: mov ebx,eax
call draw_file.ex
.check_ldown:
jmp still jmp still
.check_vscroll: .check_vscroll:
;mov ecx,[p_info.client_box.width]
mov ecx,[cur_editor.Bounds.Right] mov ecx,[cur_editor.Bounds.Right]
sub ecx,SCRLW-1;2 sub ecx,SCRLW-1
pushd ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom] ;ecx [top_ofs] ecx [bot_ofs] pushd ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom]
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0] popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
add [__rc+0x8],SCRLW-2;!!!!!!!!!!!!!!-2 add [__rc+0x8],SCRLW-2
add [__rc+0x4],SCRLW-1;!!!!!!!!!!!!!!+1 add [__rc+0x4],SCRLW-1
sub [__rc+0xC],SCRLW*2+1;3 sub [__rc+0xC],SCRLW*2+1
mov ecx,__rc mov ecx,__rc
call pt_in_rect call pt_in_rect
jnc .check_hscroll jnc .check_hscroll
.check_vscroll.2: .check_vscroll.2:
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs] sub ebx,[cur_editor.Bounds.Top]
sub ebx,SCRLW;!!!!!!!!!!!!!!+1 sub ebx,SCRLW
; sub ebx,[__rc+0x4]
cmp [vscrl_capt],0 cmp [vscrl_capt],0
jge .vcaptured jge .vcaptured
mov eax,[cur_editor.VScroll.Top] ;! eax,[vscrl_top] mov eax,[cur_editor.VScroll.Top]
cmp ebx,eax cmp ebx,eax
jb .center_vcapture jb .center_vcapture
add eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size] add eax,[cur_editor.VScroll.Size]
cmp ebx,eax cmp ebx,eax
jae .center_vcapture jae .center_vcapture
mov eax,ebx mov eax,ebx
sub eax,[cur_editor.VScroll.Top] ;! eax,[vscrl_top] sub eax,[cur_editor.VScroll.Top]
dec eax dec eax
mov [vscrl_capt],eax mov [vscrl_capt],eax
dec ebx dec ebx
jmp .vcaptured jmp .vcaptured
.center_vcapture: .center_vcapture:
mov eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size] mov eax,[cur_editor.VScroll.Size]
shr eax,1 shr eax,1
mov [vscrl_capt],eax mov [vscrl_capt],eax
.vcaptured: .vcaptured:
@ -239,32 +225,32 @@ mouse:
jns @f jns @f
xor ebx,ebx xor ebx,ebx
@@: mov [mouse_captured],1 @@: mov [mouse_captured],1
mov eax,[cur_editor.Bounds.Bottom] ; eax,[bot_ofs] mov eax,[cur_editor.Bounds.Bottom]
sub eax,[cur_editor.Bounds.Top] ; eax,[top_ofs] sub eax,[cur_editor.Bounds.Top]
sub eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size] sub eax,[cur_editor.VScroll.Size]
sub eax,SCRLW*3;-2 sub eax,SCRLW*3
cmp eax,ebx cmp eax,ebx
jge @f jge @f
mov ebx,eax mov ebx,eax
@@: @@:
mov [cur_editor.VScroll.Top],ebx ;! [vscrl_top],ebx mov [cur_editor.VScroll.Top],ebx
mov eax,[cur_editor.Lines.Count] ;! eax,[lines] mov eax,[cur_editor.Lines.Count]
sub eax,[lines.scr] sub eax,[lines.scr]
imul ebx imul ebx
mov ebx,[cur_editor.Bounds.Bottom] ; ebx,[bot_ofs] mov ebx,[cur_editor.Bounds.Bottom]
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs] sub ebx,[cur_editor.Bounds.Top]
sub ebx,SCRLW*3;-2 ;** sub ebx,SCRLW*3
sub ebx,[cur_editor.VScroll.Size] ;! ebx,[vscrl_size] sub ebx,[cur_editor.VScroll.Size]
idiv ebx idiv ebx
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line] cmp eax,[cur_editor.TopLeft.Y]
je still.skip_write je still.skip_write
mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax mov [cur_editor.TopLeft.Y],eax
call check_bottom_right call check_bottom_right
call draw_file call draw_editor
jmp still.skip_write jmp still.skip_write
.check_hscroll: .check_hscroll:
pushd [cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom] ; (5+SCRLW+1) [bot_ofs] [p_info.box.width] [bot_ofs] pushd [cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom]
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0] popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
add [__rc+0x8],-SCRLW*2-1 add [__rc+0x8],-SCRLW*2-1
add [__rc+0x4],-SCRLW+1 add [__rc+0x4],-SCRLW+1
@ -276,26 +262,24 @@ mouse:
.check_hscroll.2: .check_hscroll.2:
mov ebx,eax mov ebx,eax
;sub ebx,(5+SCRLW+1)
sub ebx,SCRLW+1 sub ebx,SCRLW+1
sub ebx,[cur_editor.Bounds.Left] sub ebx,[cur_editor.Bounds.Left]
; sub ebx,[__rc+0x0]
cmp [hscrl_capt],0 cmp [hscrl_capt],0
jge .hcaptured jge .hcaptured
mov eax,[cur_editor.HScroll.Top] ;! eax,[hscrl_top] mov eax,[cur_editor.HScroll.Top]
cmp ebx,eax cmp ebx,eax
jl .center_hcapture jl .center_hcapture
add eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size] add eax,[cur_editor.HScroll.Size]
cmp ebx,eax cmp ebx,eax
jge .center_hcapture jge .center_hcapture
mov eax,ebx mov eax,ebx
sub eax,[cur_editor.HScroll.Top] ;! eax,[hscrl_top] sub eax,[cur_editor.HScroll.Top]
dec eax dec eax
mov [hscrl_capt],eax mov [hscrl_capt],eax
dec ebx dec ebx
jmp .hcaptured jmp .hcaptured
.center_hcapture: .center_hcapture:
mov eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size] mov eax,[cur_editor.HScroll.Size]
shr eax,1 shr eax,1
mov [hscrl_capt],eax mov [hscrl_capt],eax
.hcaptured: .hcaptured:
@ -303,26 +287,26 @@ mouse:
jns @f jns @f
xor ebx,ebx xor ebx,ebx
@@: mov [mouse_captured],1 @@: mov [mouse_captured],1
mov eax,[cur_editor.Bounds.Right] ; eax,[p_info.box.width] mov eax,[cur_editor.Bounds.Right]
sub eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size] sub eax,[cur_editor.HScroll.Size]
sub eax,SCRLW*3+1 ; eax,SCRLW*3+10+1 sub eax,SCRLW*3+1
cmp eax,ebx cmp eax,ebx
jge @f jge @f
mov ebx,eax mov ebx,eax
@@: @@:
mov [cur_editor.HScroll.Top],ebx ;! [hscrl_top],ebx mov [cur_editor.HScroll.Top],ebx
mov eax,[cur_editor.Columns.Count] ;! eax,[columns] mov eax,[cur_editor.Columns.Count]
sub eax,[columns.scr] sub eax,[columns.scr]
imul ebx imul ebx
mov ebx,[cur_editor.Bounds.Right] ; ebx,[p_info.box.width] mov ebx,[cur_editor.Bounds.Right]
sub ebx,SCRLW*3+1 ; ebx,SCRLW*3+10+1 ;** sub ebx,SCRLW*3+1
sub ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size] sub ebx,[cur_editor.HScroll.Size]
idiv ebx idiv ebx
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col] cmp eax,[cur_editor.TopLeft.X]
je still.skip_write je still.skip_write
mov [cur_editor.TopLeft.X],eax ;! [left_col],eax mov [cur_editor.TopLeft.X],eax
call check_bottom_right call check_bottom_right
call draw_file call draw_editor
jmp still.skip_write jmp still.skip_write
.check_main_menu: .check_main_menu:
@ -353,5 +337,5 @@ mouse:
mov [hscrl_capt],eax mov [hscrl_capt],eax
mov [body_capt],eax mov [body_capt],eax
mov [mouse_captured],0 mov [mouse_captured],0
mov [just_from_popup],0 ;!!! mov [just_from_popup],0
jmp still.skip_write jmp still.skip_write

View File

@ -1,3 +1,4 @@
;POP_WIDTH = (popup_text.max_title+popup_text.max_accel+6)*6 ;POP_WIDTH = (popup_text.max_title+popup_text.max_accel+6)*6
POP_IHEIGHT = 16 POP_IHEIGHT = 16
;POP_HEIGHT = popup_text.cnt_item*POP_IHEIGHT+popup_text.cnt_sep*4+4 ;POP_HEIGHT = popup_text.cnt_item*POP_IHEIGHT+popup_text.cnt_sep*4+4
@ -44,14 +45,13 @@ popup_thread_start:
cmp eax,7 cmp eax,7
jne still_popup jne still_popup
mov ebp,[POPUP_STACK];-32+12+4] mov ebp,[POPUP_STACK]
mov dword[POPUP_STACK-32+4],8 mov dword[POPUP_STACK-32+4],8
movzx ebx,[ebp+POPUP.x] movzx ebx,[ebp+POPUP.x]
movzx ecx,[ebp+POPUP.y] movzx ecx,[ebp+POPUP.y]
movzx edx,[ebp+POPUP.width] movzx edx,[ebp+POPUP.width]
movzx esi,[ebp+POPUP.height] movzx esi,[ebp+POPUP.height]
mcall 67 mcall 67
; call draw_popup_wnd
jmp still_popup jmp still_popup
mouse_popup: mouse_popup:
@ -75,7 +75,7 @@ popup_thread_start:
jz still_popup jz still_popup
mov ebx,[ebp+POPUP.actions] mov ebx,[ebp+POPUP.actions]
mov [just_from_popup],1 mov [just_from_popup],1
call dword[ebx+eax*4-4];dword[popup_text.actions+eax*4-4] call dword[ebx+eax*4-4]
inc [just_from_popup] inc [just_from_popup]
jmp close_popup jmp close_popup
@ -98,18 +98,12 @@ popup_thread_start:
close_popup: close_popup:
mcall 18,3,[p_info.PID] mcall 18,3,[p_info.PID]
mov [popup_active],0 mov [popup_active],0
mov [mi_cur],0
mcall -1 mcall -1
func draw_popup_wnd func draw_popup_wnd
mcall 12,1 mcall 12,1
; mcall 48,3,sc,sizeof.system_colors
; call calc_3d_colors
; mov ebx,[p_pos]
; mov ecx,[p_pos-2]
; mov bx,POP_WIDTH
; mov cx,POP_HEIGHT
mov ebx,dword[ebp+POPUP.x-2] mov ebx,dword[ebp+POPUP.x-2]
mov bx,[ebp+POPUP.width] mov bx,[ebp+POPUP.width]
mov ecx,dword[ebp+POPUP.y-2] mov ecx,dword[ebp+POPUP.y-2]
@ -118,20 +112,14 @@ func draw_popup_wnd
movzx ebx,bx movzx ebx,bx
movzx ecx,cx movzx ecx,cx
pushd 0 0 ebx ecx ;POP_WIDTH POP_HEIGHT pushd 0 0 ebx ecx
call draw_3d_panel call draw_3d_panel
mov [pi_sel],0 mov [pi_sel],0
; mcall 37,1
; movsx ebx,ax
; sar eax,16
; mov [c_pos.x],eax
; mov [c_pos.y],ebx
mov eax,4 mov eax,4
mpack ebx,3*6,3 mpack ebx,3*6,3
mov ecx,[sc.work_text] mov ecx,[sc.work_text]
mov edx,[ebp+POPUP.data];popup_text.data mov edx,[ebp+POPUP.data]
@@: inc [pi_sel] @@: inc [pi_sel]
inc edx inc edx
movzx esi,byte[edx-1] movzx esi,byte[edx-1]
@ -143,18 +131,17 @@ func draw_popup_wnd
mov cx,bx mov cx,bx
movzx ebx,[ebp+POPUP.width] movzx ebx,[ebp+POPUP.width]
add ebx,0x00010000-1 add ebx,0x00010000-1
; mpack ebx,1,POP_WIDTH-1
add ecx,0x00010001 add ecx,0x00010001
mcall 38,,,[cl_3d_inset];0x006382BF;[sc.work_text] mcall 38,,,[cl_3d_inset]
add ecx,0x00010001 add ecx,0x00010001
mcall ,,,[cl_3d_outset];0x00FFFFFF mcall ,,,[cl_3d_outset]
popad popad
add ebx,4 add ebx,4
jmp .lp2 jmp .lp2
.lp1: mov edi,[pi_sel] .lp1: mov edi,[pi_sel]
cmp edi,[pi_cur] cmp edi,[pi_cur]
jne .lp3 jne .lp3
test byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01 test byte[ebp+edi-1],0x01
jz .lp3 jz .lp3
pushad pushad
movzx ecx,bx movzx ecx,bx
@ -162,15 +149,14 @@ func draw_popup_wnd
mov cl,POP_IHEIGHT-1 mov cl,POP_IHEIGHT-1
movzx ebx,[ebp+POPUP.width] movzx ebx,[ebp+POPUP.width]
add ebx,0x00010000-1 add ebx,0x00010000-1
; mpack ebx,1,POP_WIDTH-1 mcall 13,,,[cl_3d_pushed]
mcall 13,,,[cl_3d_pushed];0x00A3B8CC
rol ecx,16 rol ecx,16
mov ax,cx mov ax,cx
rol ecx,16 rol ecx,16
mov cx,ax mov cx,ax
mcall 38,,,[cl_3d_inset];0x006382BF mcall 38,,,[cl_3d_inset]
add ecx,(POP_IHEIGHT-1)*65536+POP_IHEIGHT-1 add ecx,(POP_IHEIGHT-1)*65536+POP_IHEIGHT-1
mcall ,,,[cl_3d_outset];0x00FFFFFF mcall ,,,[cl_3d_outset]
popad popad
.lp3: add ebx,(POP_IHEIGHT-7)/2 .lp3: add ebx,(POP_IHEIGHT-7)/2
@ -185,32 +171,30 @@ func draw_popup_wnd
call draw_check call draw_check
.lp8: popad .lp8: popad
mov ecx,[sc.work_text];0x00000000 mov ecx,[sc.work_text]
test byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01 test byte[ebp+edi-1],0x01
jnz .lp5 jnz .lp5
add ebx,0x00010001 add ebx,0x00010001
mov ecx,[cl_3d_outset] mov ecx,[cl_3d_outset]
mcall mcall
sub ebx,0x00010001 sub ebx,0x00010001
mov ecx,[cl_3d_inset] mov ecx,[cl_3d_inset]
;mov ecx,[sc.grab_text];0x007F7F7F
.lp5: mcall .lp5: mcall
push ebx push ebx
add edx,esi add edx,esi
inc edx inc edx
movzx esi,byte[edx-1] movzx esi,byte[edx-1]
add ebx,[ebp+POPUP.acc_ofs] ; ((popup_text.max_title+2)*6-1)*65536 add ebx,[ebp+POPUP.acc_ofs]
cmp edi,[pi_cur] cmp edi,[pi_cur]
je .lp4 je .lp4
mov ecx,[cl_3d_inset];0x006382BF mov ecx,[cl_3d_inset]
.lp4: test byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01 .lp4: test byte[ebp+edi-1],0x01
jnz .lp6 jnz .lp6
add ebx,0x00010001 add ebx,0x00010001
mov ecx,[cl_3d_outset] mov ecx,[cl_3d_outset]
mcall mcall
sub ebx,0x00010001 sub ebx,0x00010001
mov ecx,[cl_3d_inset] mov ecx,[cl_3d_inset]
;mov ecx,[sc.grab_text];0x007F7F7F
.lp6: mcall .lp6: mcall
pop ebx pop ebx
add ebx,POP_IHEIGHT-(POP_IHEIGHT-7)/2 add ebx,POP_IHEIGHT-(POP_IHEIGHT-7)/2
@ -271,7 +255,7 @@ onshow:
.recode: .recode:
ret ret
.options: .options:
mov word[mm.Options+0],0 ;mov word[mm.Options+0],0
mov byte[mm.Options+5],0 mov byte[mm.Options+5],0
or byte[mm.Options+2],0x02 or byte[mm.Options+2],0x02
test [options],OPTS_SECURESEL test [options],OPTS_SECURESEL
@ -298,4 +282,4 @@ onshow:
pi_sel dd ? pi_sel dd ?
pi_cur dd ? pi_cur dd ?
p_pos dd ? p_pos dd ?
popup_active db 0 popup_active db 0

View File

@ -19,8 +19,8 @@ recode:
mov edi,table.koi.1251 mov edi,table.koi.1251
.main: .main:
mov ecx,[cur_editor.Lines.Count] ;! ecx,[lines] mov ecx,[cur_editor.Lines.Count]
mov esi,[cur_editor.Lines] ;! AREA_EDIT mov esi,[cur_editor.Lines]
jecxz .exit jecxz .exit
xor eax,eax xor eax,eax
.lp0: dec ecx .lp0: dec ecx

View File

@ -1,9 +1,3 @@
lsz s_defname,\
en,<'Untitled',0>,\
ru,<'Untitled',0>,\
et,<'Nimetu',0>
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func flush_cur_tab ;///// SAVE CURRENT TAB DATA TO CONTROL /////////////////// func flush_cur_tab ;///// SAVE CURRENT TAB DATA TO CONTROL ///////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -33,7 +27,7 @@ func set_cur_tab ;///// SET SPECIFIED TAB CURRENT (FOCUS IT) /////////////////
mov ecx,sizeof.TABITEM/4 mov ecx,sizeof.TABITEM/4
rep movsd rep movsd
mov [tab_bar.Current.Ptr],ebp mov [tab_bar.Current.Ptr],ebp
call update_caption ; call update_caption
pop edi esi ecx pop edi esi ecx
ret ret
endf endf
@ -41,6 +35,7 @@ endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func make_tab_visible ;///// MAKE SPECIFIED TAB VISIBLE IF IT'S OFFSCREEN //// func make_tab_visible ;///// MAKE SPECIFIED TAB VISIBLE IF IT'S OFFSCREEN ////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
call flush_cur_tab
imul eax,[tab_bar.Items.Left],sizeof.TABITEM imul eax,[tab_bar.Items.Left],sizeof.TABITEM
add eax,[tab_bar.Items] add eax,[tab_bar.Items]
cmp eax,ebp cmp eax,ebp
@ -52,20 +47,19 @@ func make_tab_visible ;///// MAKE SPECIFIED TAB VISIBLE IF IT'S OFFSCREEN ////
push ebp push ebp
call get_hidden_tabitems_number call get_hidden_tabitems_number
cmp ebp,[esp] cmp ebp,[esp]
ja .lp1 ja @f
@@: inc [tab_bar.Items.Left] @@: inc [tab_bar.Items.Left]
call get_hidden_tabitems_number call get_hidden_tabitems_number
cmp ebp,[esp] cmp ebp,[esp]
jbe @b jbe @b
@@: inc [tab_bar.Items.Left] @@: pop ebp
.lp1: pop ebp
ret ret
.go_left: .go_left:
mov eax,ebp mov eax,ebp
sub eax,[tab_bar.Items] sub eax,[tab_bar.Items]
jz @f jz @f
cwde cdq
mov ebx,sizeof.TABITEM mov ebx,sizeof.TABITEM
div ebx div ebx
@@: mov [tab_bar.Items.Left],eax @@: mov [tab_bar.Items.Left],eax
@ -75,7 +69,6 @@ endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func create_tab ;///// ADD TAB TO THE END //////////////////////////////////// func create_tab ;///// ADD TAB TO THE END ////////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; DEBUGF 1,"items count before addition: %d\n",[tab_bar.Items.Count]
push eax ecx esi edi push eax ecx esi edi
inc [tab_bar.Items.Count] inc [tab_bar.Items.Count]
@ -91,7 +84,6 @@ func create_tab ;///// ADD TAB TO THE END ////////////////////////////////////
sub [tab_bar.Default.Ptr],ecx sub [tab_bar.Default.Ptr],ecx
@@: lea ebp,[eax+ebx-sizeof.TABITEM] @@: lea ebp,[eax+ebx-sizeof.TABITEM]
call set_cur_tab call set_cur_tab
call make_tab_visible
mov eax,1024 mov eax,1024
mov [cur_editor.Lines.Size],eax mov [cur_editor.Lines.Size],eax
@ -125,14 +117,16 @@ func create_tab ;///// ADD TAB TO THE END ////////////////////////////////////
mov [cur_editor.AsmMode],0 mov [cur_editor.AsmMode],0
call flush_cur_tab call flush_cur_tab
mov ebp,[tab_bar.Current.Ptr]
call make_tab_visible
call update_caption call update_caption
;call drawwindow
cmp [do_not_draw],0 cmp [do_not_draw],0
jne @f jne @f
call align_editor_in_tab call align_editor_in_tab
call draw_editor call draw_editor
call draw_tabctl call draw_tabctl
call draw_statusbar call draw_statusbar
call update_caption
@@: @@:
mov ebp,cur_tab mov ebp,cur_tab
pop edi esi ecx eax pop edi esi ecx eax
@ -142,7 +136,6 @@ endf
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
func delete_tab ;///// DELETE SPECIFIED TAB ////////////////////////////////// func delete_tab ;///// DELETE SPECIFIED TAB //////////////////////////////////
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; DEBUGF 1,"items count before deletion: %d\n",[tab_bar.Items.Count]
cmp [tab_bar.Default.Ptr],0 cmp [tab_bar.Default.Ptr],0
je @f je @f
cmp ebp,[tab_bar.Default.Ptr] cmp ebp,[tab_bar.Default.Ptr]
@ -188,7 +181,6 @@ func delete_tab ;///// DELETE SPECIFIED TAB //////////////////////////////////
@@: mov [tab_bar.Current.Ptr],0 @@: mov [tab_bar.Current.Ptr],0
call set_cur_tab call set_cur_tab
call make_tab_visible call make_tab_visible
;call drawwindow
call align_editor_in_tab call align_editor_in_tab
call draw_editor call draw_editor
call draw_tabctl call draw_tabctl
@ -382,7 +374,7 @@ func draw_tabctl ;///// DRAW TAB CONTROL /////////////////////////////////////
call dword[esp+(8+4)+8+8] call dword[esp+(8+4)+8+8]
mcall 13,,,[sc.work] mcall 13,,,[sc.work]
pop ecx ebx pop ecx ebx
mov edx,[color_tbl+4*0] mov edx,[color_tbl.text]
.draw_tabs.inactive: .draw_tabs.inactive:
cmp ebp,[tab_bar.Default.Ptr] cmp ebp,[tab_bar.Default.Ptr]
@ -540,8 +532,7 @@ func draw_tabctl ;///// DRAW TAB CONTROL /////////////////////////////////////
ret ret
.check_horz: .check_horz:
lea eax,[ebx-1] lea eax,[esi+ebx-1]
add eax,esi
sub eax,[tab_bar.Bounds.Right] sub eax,[tab_bar.Bounds.Right]
jge .check.dontfit jge .check.dontfit
add eax,SCRLW*2+2 add eax,SCRLW*2+2
@ -552,8 +543,7 @@ func draw_tabctl ;///// DRAW TAB CONTROL /////////////////////////////////////
stc stc
ret ret
.check_vert: .check_vert:
lea eax,[ecx-1] lea eax,[edi+ecx-1]
add eax,edi
sub eax,[tab_bar.Bounds.Bottom] sub eax,[tab_bar.Bounds.Bottom]
jge .check.dontfit jge .check.dontfit
add eax,SCRLW+2 add eax,SCRLW+2
@ -584,6 +574,10 @@ func get_tab_size ;///// GET TAB WIDTH ///////////////////////////////////////
jae .lp1 jae .lp1
lea eax,[ebp+TABITEM.Editor.FilePath] lea eax,[ebp+TABITEM.Editor.FilePath]
add eax,[ebp+TABITEM.Editor.FileName] add eax,[ebp+TABITEM.Editor.FileName]
cmp byte[eax],0
jne @f
int3
@@:
call strlen call strlen
imul ebx,eax,6 imul ebx,eax,6
add ebx,9 add ebx,9
@ -658,11 +652,11 @@ func get_hidden_tabitems_number ;/////////////////////////////////////////////
mov edi,[tab_bar.Bounds.Top] mov edi,[tab_bar.Bounds.Top]
inc edi inc edi
mov ecx,[tab_bar.Items.Count] mov ecx,[tab_bar.Items.Count]
imul ebp,[tab_bar.Items.Left],sizeof.TABITEM mov ebx,[tab_bar.Items.Left]
imul ebp,ebx,sizeof.TABITEM
add ebp,[tab_bar.Items] add ebp,[tab_bar.Items]
mov eax,ecx push ecx
sub eax,[tab_bar.Items.Left] sub [esp],ebx
push eax
@@: push ecx @@: push ecx
call get_tab_size call get_tab_size

View File

@ -1,15 +1,3 @@
struct TBOX
x dw ?
width dw ?
y dw ?
height dw ?
sel.x db ?
pos.x db ?
ofs.x db ?
length db ?
text rb 255
ends
virtual at ebp virtual at ebp
tbox TBOX tbox TBOX
end virtual end virtual
@ -20,7 +8,7 @@ tb.sel.selected db ?
func textbox.get_width func textbox.get_width
push ebx edx push ebx edx
movzx eax,[tbox.width-2] movzx eax,[tbox.width]
add eax,-6 add eax,-6
xor edx,edx xor edx,edx
mov ebx,6 mov ebx,6
@ -84,7 +72,7 @@ func textbox.draw ; TBOX* ebp
@@: mov [tb.pos.x],al @@: mov [tb.pos.x],al
mov [tb.sel.x],ah mov [tb.sel.x],ah
mcall 13,dword[tbox.x],dword[tbox.y],[color_tbl+4*5];[sc.work] mcall 13,dword[tbox.width],dword[tbox.height],[color_tbl.back]
mov edx,[cl_3d_inset] mov edx,[cl_3d_inset]
call draw_framerect call draw_framerect
@ -94,15 +82,14 @@ func textbox.draw ; TBOX* ebp
cmp ebp,[focused_tb] cmp ebp,[focused_tb]
je @f je @f
mov ebx,dword[tbox.x] mov ebx,dword[tbox.x-2]
mov bx,[tbox.y+2] mov bx,[tbox.y]
movzx eax,[tbox.height-2] movzx eax,[tbox.height]
shr eax,1 shr eax,1
add eax,4*65536-4 add eax,4*65536-4
add ebx,eax add ebx,eax
lea edx,[tbox.text] lea edx,[tbox.text]
; movzx esi,[tbox.length] mcall 4,,[color_tbl.text]
mcall 4,,[color_tbl+4*0];[sc.work_text]
ret ret
@@: movzx eax,[tb.pos.x] @@: movzx eax,[tb.pos.x]
@ -123,33 +110,32 @@ func textbox.draw ; TBOX* ebp
mov eax,ecx mov eax,ecx
.lp2: imul eax,6 .lp2: imul eax,6
imul ebx,6 imul ebx,6
movzx ecx,[tbox.x+2] movzx ecx,[tbox.x]
add ecx,3 add ecx,3
; sub eax,ebx
add ebx,ecx add ebx,ecx
shl ebx,16 shl ebx,16
add ebx,eax add ebx,eax
movzx ecx,[tbox.height-2] movzx ecx,[tbox.height]
shr ecx,1 shr ecx,1
add cx,[tbox.y+2] add cx,[tbox.y]
shl ecx,16 shl ecx,16
add ecx,-5*65536+10 add ecx,-5*65536+10
mcall 13,,,[color_tbl+4*7];0x0000007F mcall 13,,,[color_tbl.back.sel]
mov esi,[esp] mov esi,[esp]
lea edx,[tbox.text] lea edx,[tbox.text]
movzx eax,[tbox.ofs.x] movzx eax,[tbox.ofs.x]
add edx,eax add edx,eax
mov ebx,dword[tbox.x] mov ebx,dword[tbox.x-2]
mov bx,[tbox.y+2] mov bx,[tbox.y]
movzx eax,[tbox.height-2] movzx eax,[tbox.height]
shr eax,1 shr eax,1
add eax,4*65536-4 add eax,4*65536-4
add ebx,eax add ebx,eax
mov eax,4 mov eax,4
or esi,esi or esi,esi
jz .lp3 jz .lp3
mcall ,,[color_tbl+4*0];[sc.work_text] mcall ,,[color_tbl.text]
.lp3: sub edi,esi .lp3: sub edi,esi
jnz .lp4 jnz .lp4
add esp,8 add esp,8
@ -164,46 +150,44 @@ func textbox.draw ; TBOX* ebp
jbe .lp5 jbe .lp5
mov esi,edi mov esi,edi
.lp5: .lp5:
mcall ,,[color_tbl+4*6];0x00FFFFFF mcall ,,[color_tbl.text.sel]
sub edi,esi sub edi,esi
jz .exit jz .exit
add edx,esi add edx,esi
imul esi,6*65536 imul esi,6*65536
add ebx,esi add ebx,esi
lea ecx,[tbox.text] lea ecx,[tbox.text]
; sub ecx,edx mcall ,,[color_tbl.text],,edi
; add edi,ecx
mcall ,,[color_tbl+4*0],,edi;[sc.work_text],,edi
jmp .exit jmp .exit
@@: lea edx,[tbox.text] @@: lea edx,[tbox.text]
movzx eax,[tbox.ofs.x] movzx eax,[tbox.ofs.x]
add edx,eax add edx,eax
mov ebx,dword[tbox.x] mov ebx,dword[tbox.x-2]
mov bx,[tbox.y+2] mov bx,[tbox.y]
movzx eax,[tbox.height-2] movzx eax,[tbox.height]
shr eax,1 shr eax,1
add eax,4*65536-4 add eax,4*65536-4
add ebx,eax add ebx,eax
movzx eax,[tbox.ofs.x] movzx eax,[tbox.ofs.x]
call textbox.get_width call textbox.get_width
mov esi,eax mov esi,eax
mcall 4,,[color_tbl+4*0];[sc.work_text] mcall 4,,[color_tbl.text]
.exit: .exit:
movzx ebx,[tbox.pos.x] movzx ebx,[tbox.pos.x]
movzx eax,[tbox.ofs.x] movzx eax,[tbox.ofs.x]
sub ebx,eax sub ebx,eax
imul ebx,6 imul ebx,6
movzx eax,[tbox.x+2] movzx eax,[tbox.x]
add eax,3 add eax,3
add ebx,eax add ebx,eax
push bx push bx
shl ebx,16 shl ebx,16
pop bx pop bx
movzx ecx,[tbox.height-2] movzx ecx,[tbox.height]
shr ecx,1 shr ecx,1
add cx,[tbox.y+2] add cx,[tbox.y]
push cx push cx
shl ecx,16 shl ecx,16
pop cx pop cx