forked from KolibriOS/kolibrios
Tinypad 4.0.4 in progress (further fixing)
git-svn-id: svn://kolibrios.org@280 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
14256358ea
commit
c6080c59e9
@ -3,8 +3,8 @@
|
|||||||
; compiler: flat assembler 1.67.15
|
; compiler: flat assembler 1.67.15
|
||||||
; memory to compile: 2.0/7.0 MBytes (without/with size optimizations)
|
; memory to compile: 2.0/7.0 MBytes (without/with size optimizations)
|
||||||
; version: 4.0.4 pre
|
; version: 4.0.4 pre
|
||||||
; last update: 2007-01-07 (Jan 7, 2007)
|
; last update: 2007-01-18 (Jan 18, 2007)
|
||||||
; minimal kernel: revision #138 (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
|
||||||
@ -17,23 +17,23 @@
|
|||||||
; - other bug-fixes and speed/size optimizations
|
; - other bug-fixes and speed/size optimizations
|
||||||
; - save settings to ini file, not to executable
|
; - save settings to ini file, not to executable
|
||||||
;
|
;
|
||||||
; TODO (FOR 4.0.4, PLANNED FOR 2007-01-21):
|
; TODO (4.0.4, PLANNED FOR 2007-01-21):
|
||||||
; - finish tabbed interface (some bug with tab switching) [critical]
|
; normal:
|
||||||
; - add memory reallocation to keys handler [critical]
|
; - finish tabbed interface (tab switching, Ctrl+F4)
|
||||||
; - rework save_file (memory manager) [critical]
|
; - reduce flickering (introduce changes checker)
|
||||||
; - fix scrollbars dragging coordinates calculation [critical]
|
; - compile default file if selected
|
||||||
; - fix parameters parsing (incl. DOCPAK) [average]
|
; low:
|
||||||
; - reduce flickering (introduce changes checker) [normal]
|
; - add prompt to save file before closing/opening
|
||||||
; - fix incorrect saved/modified lines flags on copy/paste [normal]
|
|
||||||
; - add prompt to save file before closing/opening [low]
|
|
||||||
;
|
;
|
||||||
; HISTORY:
|
; HISTORY:
|
||||||
; 4.0.4 pre (mike.dld)
|
; 4.0.4 pre (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 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,
|
||||||
|
; including changes in look
|
||||||
; - modified/saved colors now match those in MSVS
|
; - modified/saved colors now match those in MSVS
|
||||||
; - function 70 for *all* file operations (including diamond's fixes)
|
; - function 70 for *all* file operations (including diamond's fixes)
|
||||||
; - use memory manager instead of statically allocated region
|
; - use memory manager instead of statically allocated region
|
||||||
@ -43,7 +43,8 @@
|
|||||||
; 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
|
||||||
; 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
|
||||||
@ -163,18 +164,21 @@ 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 pre'
|
||||||
|
|
||||||
;include 'debug.inc'
|
;include 'debug.inc'
|
||||||
|
;define __DEBUG__ 1
|
||||||
|
;define __DEBUG_LEVEL__ 1
|
||||||
|
;include 'debug-fdo.inc'
|
||||||
|
|
||||||
ASEPC = '-' ; separator character (char)
|
ASEPC = '-' ; separator character (char)
|
||||||
ATOPH = POP_IHEIGHT+2 ; menu bar height (pixels)
|
ATOPH = 19 ; menu bar height (pixels)
|
||||||
SCRLW = 16 ; scrollbar widht/height (pixels)
|
SCRLW = 16 ; scrollbar widht/height (pixels)
|
||||||
ATABW = 8 ; tab width (chars)
|
ATABW = 8 ; tab key indent width (chars)
|
||||||
LINEH = 10 ; line height (pixels)
|
LINEH = 10 ; line height (pixels)
|
||||||
PATHL = 256 ; maximum path length (chars) !!! don't change !!!
|
PATHL = 256 ; maximum path length (chars) !!! don't change !!!
|
||||||
AMINS = 8 ; minimal scroll thumb size (pixels)
|
AMINS = 8 ; minimal scroll thumb size (pixels)
|
||||||
LCHGW = 3 ; changed/saved marker width
|
LCHGW = 3 ; changed/saved marker width (pixels)
|
||||||
|
|
||||||
STATH = 16 ; status bar height
|
STATH = 16 ; status bar height (pixels)
|
||||||
TBARH = 18 ; tab bar height
|
TBARH = 18 ; tab bar height (pixels)
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
@ -199,8 +203,8 @@ options db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
|
|||||||
mainwnd_pos:
|
mainwnd_pos:
|
||||||
.x dd 250
|
.x dd 250
|
||||||
.y dd 75
|
.y dd 75
|
||||||
.w dd 6*80+6+SCRLW+5
|
.w dd 6*80+6+SCRLW+5 ;- 220
|
||||||
.h dd 402
|
.h dd 402 ;- 220
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
@ -235,17 +239,8 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|||||||
call mem.Alloc
|
call mem.Alloc
|
||||||
mov [temp_buf],eax
|
mov [temp_buf],eax
|
||||||
|
|
||||||
mov eax,65536
|
|
||||||
call mem.Alloc
|
|
||||||
mov [cur_editor.Lines],eax
|
|
||||||
|
|
||||||
inc [do_not_draw]
|
inc [do_not_draw]
|
||||||
|
|
||||||
mov [left_ofs],40+1
|
|
||||||
; mov [f_info+4],0
|
|
||||||
; mov [f_info+12],AREA_TEMP
|
|
||||||
; mov [f_info+16],AREA_EDIT-AREA_TEMP
|
|
||||||
|
|
||||||
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
|
||||||
@ -258,6 +253,8 @@ 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
|
||||||
|
|
||||||
@ -266,6 +263,8 @@ 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
|
||||||
@ -282,16 +281,26 @@ 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
|
||||||
|
|
||||||
|
; DEBUGF 1," mem.Alloc() returned 0x%x, allocated size = %d\n",eax,[eax-4]
|
||||||
|
|
||||||
;! mcall 60,1,AREA_TEMP-16 ; 0x10000-16
|
;! mcall 60,1,AREA_TEMP-16 ; 0x10000-16
|
||||||
;! mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8
|
;! mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8
|
||||||
mcall 60,1,ebp
|
mov dword[ebp+0],0
|
||||||
mov dword[ebp+4],8
|
mov dword[ebp+4],8
|
||||||
|
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 esi,AREA_TEMP-16 ; 0x10000-16
|
||||||
@ -302,14 +311,19 @@ section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|||||||
;! inc eax
|
;! inc eax
|
||||||
;! call load_file.file_found
|
;! call load_file.file_found
|
||||||
|
|
||||||
|
; DEBUGF 1," creating new document\n"
|
||||||
|
|
||||||
mov ecx,[ebp+12]
|
mov ecx,[ebp+12]
|
||||||
mov esi,ebp
|
lea esi,[ebp+16]
|
||||||
call create_tab
|
call create_tab
|
||||||
call load_from_memory
|
call load_from_memory
|
||||||
|
|
||||||
|
pop ebp
|
||||||
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:
|
||||||
|
|
||||||
@ -327,13 +341,14 @@ 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
|
||||||
|
jnc @f
|
||||||
|
|
||||||
no_params:
|
no_params:
|
||||||
;call btn.load_file;do_load_file
|
|
||||||
;jnc @f
|
|
||||||
call create_tab
|
call create_tab
|
||||||
|
|
||||||
@@:
|
@@:
|
||||||
|
mov [s_status],0
|
||||||
dec [do_not_draw]
|
dec [do_not_draw]
|
||||||
mcall 66,1,1
|
mcall 66,1,1
|
||||||
mcall 40,00100111b
|
mcall 40,00100111b
|
||||||
@ -514,12 +529,6 @@ set_opt:
|
|||||||
|
|
||||||
.main:
|
.main:
|
||||||
xor [options],al
|
xor [options],al
|
||||||
; test [options],al
|
|
||||||
; je @f
|
|
||||||
; not al
|
|
||||||
; and [options],al
|
|
||||||
; ret
|
|
||||||
; @@: or [options],al
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
@ -578,6 +587,7 @@ accel_table_main dd \
|
|||||||
0x00000151,key.pgdn ,\ ; PageDown
|
0x00000151,key.pgdn ,\ ; PageDown
|
||||||
0x00000152,key.ins ,\ ; Insert
|
0x00000152,key.ins ,\ ; Insert
|
||||||
0x00000153,key.del ,\ ; Delete
|
0x00000153,key.del ,\ ; Delete
|
||||||
|
0x00010043,key.shift_f9 ,\ ; Shift+F9
|
||||||
0x00010147,key.shift_home ,\ ; Shift+Home
|
0x00010147,key.shift_home ,\ ; Shift+Home
|
||||||
0x00010148,key.shift_up ,\ ; Shift+Up
|
0x00010148,key.shift_up ,\ ; Shift+Up
|
||||||
0x00010149,key.shift_pgup ,\ ; Shift+PageUp
|
0x00010149,key.shift_pgup ,\ ; Shift+PageUp
|
||||||
@ -712,6 +722,8 @@ 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
|
||||||
@ -746,8 +758,6 @@ copy_count dd ? ; number of lines for copying (Ctrl+E)
|
|||||||
copy_size dd ? ; size of data to copy
|
copy_size dd ? ; size of data to copy
|
||||||
s_title.size dd ? ; caption length
|
s_title.size dd ? ; caption length
|
||||||
|
|
||||||
draw_blines dd ? ; last line to draw
|
|
||||||
|
|
||||||
cur_line_len dd ?
|
cur_line_len dd ?
|
||||||
h_popup dd ?
|
h_popup dd ?
|
||||||
bot_dlg_handler dd ?
|
bot_dlg_handler dd ?
|
||||||
|
@ -21,6 +21,7 @@ struct EDITOR
|
|||||||
FileName dd ?
|
FileName dd ?
|
||||||
Bounds RECT
|
Bounds RECT
|
||||||
Lines dd ?
|
Lines dd ?
|
||||||
|
Lines.Size dd ?
|
||||||
Lines.Count dd ?
|
Lines.Count dd ?
|
||||||
Columns.Count dd ?
|
Columns.Count dd ?
|
||||||
Caret POINT
|
Caret POINT
|
||||||
@ -46,6 +47,7 @@ struct TABCTL
|
|||||||
Items.Left dd ?
|
Items.Left dd ?
|
||||||
Current TABITEM
|
Current TABITEM
|
||||||
Current.Ptr dd ?
|
Current.Ptr dd ?
|
||||||
|
Default.Ptr dd ?
|
||||||
Buttons.First dd ?
|
Buttons.First dd ?
|
||||||
Buttons.Last dd ?
|
Buttons.Last dd ?
|
||||||
Style db ?
|
Style db ?
|
||||||
|
@ -499,14 +499,22 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func line_add_spaces ;////////////////////////////////////////////////////////
|
func line_add_spaces ;////////////////////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; esi = line offset
|
; Input:
|
||||||
; ecx = needed line length
|
; ESI = line offset
|
||||||
|
; ECX = needed line length
|
||||||
|
; Output:
|
||||||
|
; EAX = delta
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
xor eax,eax
|
||||||
pushad
|
pushad
|
||||||
movzx edx,word[esi]
|
movzx edx,word[esi]
|
||||||
cmp ecx,edx
|
cmp ecx,edx
|
||||||
jbe .exit
|
jbe .exit
|
||||||
sub ecx,edx
|
sub ecx,edx
|
||||||
|
lea eax,[ecx+4]
|
||||||
|
call editor_realloc_lines
|
||||||
|
mov [esp+4*7],eax
|
||||||
|
add esi,eax
|
||||||
push ecx
|
push ecx
|
||||||
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
|
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
|
||||||
add edi,[edi-4]
|
add edi,[edi-4]
|
||||||
@ -520,7 +528,6 @@ func line_add_spaces ;////////////////////////////////////////////////////////
|
|||||||
neg ecx
|
neg ecx
|
||||||
lea ecx,[esi+ecx+1]
|
lea ecx,[esi+ecx+1]
|
||||||
std
|
std
|
||||||
diff16 '32DC',0,$
|
|
||||||
rep movsb
|
rep movsb
|
||||||
pop edi ecx
|
pop edi ecx
|
||||||
add [eax],cx
|
add [eax],cx
|
||||||
@ -549,6 +556,7 @@ func delete_selection ;///////////////////////////////////////////////////////
|
|||||||
or dword[esi],0x00010000
|
or dword[esi],0x00010000
|
||||||
mov ecx,[sel.begin.x]
|
mov ecx,[sel.begin.x]
|
||||||
call line_add_spaces
|
call line_add_spaces
|
||||||
|
add esi,eax
|
||||||
lea edi,[esi+4]
|
lea edi,[esi+4]
|
||||||
mov ecx,[sel.end.y]
|
mov ecx,[sel.end.y]
|
||||||
call get_line_offset
|
call get_line_offset
|
||||||
@ -602,6 +610,17 @@ func delete_selection ;///////////////////////////////////////////////////////
|
|||||||
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 ;! [pos.y],eax
|
||||||
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
|
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
|
||||||
|
|
||||||
|
mov ecx,[cur_editor.Lines.Count]
|
||||||
|
call get_line_offset
|
||||||
|
movzx eax,word[esi]
|
||||||
|
lea esi,[esi+eax+4]
|
||||||
|
mov eax,[cur_editor.Lines]
|
||||||
|
add eax,[eax-4]
|
||||||
|
sub esi,eax
|
||||||
|
lea eax,[esi+4096]
|
||||||
|
call editor_realloc_lines
|
||||||
|
|
||||||
popad
|
popad
|
||||||
mov [cur_editor.Modified],1 ;! [modified],1
|
mov [cur_editor.Modified],1 ;! [modified],1
|
||||||
clc
|
clc
|
||||||
@ -630,28 +649,44 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func get_lines_in_file ;//////////////////////////////////////////////////////
|
func get_lines_in_file ;//////////////////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
; Input:
|
||||||
; ESI = data pointer
|
; ESI = data pointer
|
||||||
; ECX = data length
|
; ECX = data length
|
||||||
|
; Output:
|
||||||
|
; EAX = lines number
|
||||||
|
; EBX = extra length after tabs expansion
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
push ebx ecx esi
|
push ecx edx esi 0
|
||||||
or ebx,-1
|
or ebx,-1
|
||||||
|
xor edx,edx
|
||||||
.lp0: inc ebx
|
.lp0: inc ebx
|
||||||
.lp1: dec ecx
|
.lp1: dec ecx
|
||||||
jle .lp2
|
jle .lp2
|
||||||
lodsb
|
lodsb
|
||||||
|
cmp al,0
|
||||||
|
je .lp2
|
||||||
|
cmp al,9
|
||||||
|
je .TB
|
||||||
cmp al,10
|
cmp al,10
|
||||||
je .LF
|
je .LF
|
||||||
cmp al,13
|
cmp al,13
|
||||||
je .CR
|
je .CR
|
||||||
|
inc edx
|
||||||
jmp .lp1
|
jmp .lp1
|
||||||
.lp2: mov eax,ebx
|
.lp2: lea eax,[ebx+1]
|
||||||
pop esi ecx ebx
|
pop ebx esi edx ecx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.CR: cmp byte[esi],10
|
.CR: cmp byte[esi],10
|
||||||
jne .lp0
|
jne .LF
|
||||||
lodsb
|
lodsb
|
||||||
.LF: jmp .lp0
|
.LF: xor edx,edx
|
||||||
|
jmp .lp0
|
||||||
|
.TB: and edx,00000111b
|
||||||
|
add dword[esp],ATABW
|
||||||
|
sub [esp],edx
|
||||||
|
xor edx,edx
|
||||||
|
jmp .lp1
|
||||||
endf
|
endf
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
@ -48,22 +48,7 @@ func drawwindow ;///// DRAW WINDOW ///////////////////////////////////////////
|
|||||||
|
|
||||||
mov [top_ofs],ATOPH;+1
|
mov [top_ofs],ATOPH;+1
|
||||||
|
|
||||||
mov eax,[cur_editor.Bounds.Right]
|
;// --- columns.scr and lines.scr calculation ---
|
||||||
sub eax,[cur_editor.Bounds.Left]
|
|
||||||
sub eax,[cur_editor.Gutter.Width]
|
|
||||||
sub eax,SCRLW+LCHGW+4
|
|
||||||
cdq
|
|
||||||
mov ebx,6
|
|
||||||
div ebx
|
|
||||||
mov [columns.scr],eax
|
|
||||||
|
|
||||||
mov eax,[cur_editor.Bounds.Bottom]
|
|
||||||
sub eax,[cur_editor.Bounds.Top]
|
|
||||||
sub eax,SCRLW+3
|
|
||||||
cdq
|
|
||||||
mov ebx,LINEH
|
|
||||||
div ebx
|
|
||||||
mov [lines.scr],eax
|
|
||||||
|
|
||||||
mov eax,[p_info.client_box.height]
|
mov eax,[p_info.client_box.height]
|
||||||
add eax,-STATH+1;*3-2-2
|
add eax,-STATH+1;*3-2-2
|
||||||
@ -187,22 +172,34 @@ func draw_main_menu ;/////////////////////////////////////////////////////////
|
|||||||
inc ebx
|
inc ebx
|
||||||
mcall 13,,ATOPH-1,[cl_3d_normal]
|
mcall 13,,ATOPH-1,[cl_3d_normal]
|
||||||
|
|
||||||
mcall 38,[p_info.client_box.width],<ATOPH-1,ATOPH-1>,[sc.frame];[cl_3d_pushed]
|
mcall 38,[p_info.client_box.width],<ATOPH-1,ATOPH-1>,[cl_3d_inset]
|
||||||
|
|
||||||
mov edx,main_menu
|
mov edx,main_menu
|
||||||
mov ebx,9*65536+ATOPH/2-4
|
mov ebx,9*65536+ATOPH/2-3;4
|
||||||
mov ecx,[sc.work_text]
|
;mov ecx,[sc.work_text]
|
||||||
mov [mi_sel],0
|
mov [mi_sel],0
|
||||||
mov edi,[mi_cur]
|
mov edi,[mi_cur]
|
||||||
@@: inc [mi_sel]
|
@@: inc [mi_sel]
|
||||||
cmp [mi_sel],main_menu.cnt_item
|
cmp [mi_sel],main_menu.cnt_item
|
||||||
ja .exit
|
ja .exit
|
||||||
|
mov ecx,[sc.work_text]
|
||||||
cmp edi,[mi_sel]
|
cmp edi,[mi_sel]
|
||||||
jne .lp1
|
jne .lp1
|
||||||
pushad
|
pushad
|
||||||
push edx
|
push edx
|
||||||
mcall 13,[edx+0],[edx+4],[cl_3d_pushed]
|
;mov ebx,[edx+0]
|
||||||
|
mov ecx,[edx+4]
|
||||||
|
add ecx,2*65536-2
|
||||||
|
mcall 13,[edx+0],,[sc.work];[cl_3d_pushed]
|
||||||
mov edx,[esp]
|
mov edx,[esp]
|
||||||
|
mov cx,[edx+6]
|
||||||
|
add ecx,-1*65536+1
|
||||||
|
add bx,[edx+2]
|
||||||
|
mcall 38,,,[cl_3d_inset]
|
||||||
|
|
||||||
|
mov edx,[esp]
|
||||||
|
add cx,[edx+4]
|
||||||
|
add cx,-2
|
||||||
mov bx,[edx+2]
|
mov bx,[edx+2]
|
||||||
mcall 38,,,[cl_3d_inset]
|
mcall 38,,,[cl_3d_inset]
|
||||||
pop edx
|
pop edx
|
||||||
@ -212,6 +209,7 @@ func draw_main_menu ;/////////////////////////////////////////////////////////
|
|||||||
add ebx,eax
|
add ebx,eax
|
||||||
mcall 38,,,[cl_3d_inset]
|
mcall 38,,,[cl_3d_inset]
|
||||||
popad
|
popad
|
||||||
|
mov ecx,[color_tbl+4*0]
|
||||||
.lp1: add edx,8+1
|
.lp1: add edx,8+1
|
||||||
movzx esi,byte[edx-1]
|
movzx esi,byte[edx-1]
|
||||||
mcall 4
|
mcall 4
|
||||||
@ -1128,7 +1126,7 @@ func draw_statusbar ;///// WRITE POSITION ////////////////////////////////////
|
|||||||
mov ecx,[p_info.client_box.height-2]
|
mov ecx,[p_info.client_box.height-2]
|
||||||
mov cx,word[p_info.client_box.height]
|
mov cx,word[p_info.client_box.height]
|
||||||
sub ecx,STATH*65536+STATH
|
sub ecx,STATH*65536+STATH
|
||||||
mcall 38,[p_info.client_box.width],,[sc.frame];[cl_3d_pushed]
|
mcall 38,[p_info.client_box.width],,[cl_3d_inset]
|
||||||
|
|
||||||
; mcall 9,p_info,-1
|
; mcall 9,p_info,-1
|
||||||
|
|
||||||
@ -1235,6 +1233,29 @@ func draw_framerect ; ebx,ecx,edx
|
|||||||
ret
|
ret
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
func draw_check
|
||||||
|
push bx
|
||||||
|
shl ebx,16
|
||||||
|
pop bx
|
||||||
|
add ebx,0x00010000
|
||||||
|
push cx
|
||||||
|
shl ecx,16
|
||||||
|
pop cx
|
||||||
|
add ecx,0x00020001
|
||||||
|
|
||||||
|
; add ecx,0x00040003
|
||||||
|
; sub ebx,0x000A000B
|
||||||
|
mcall 38
|
||||||
|
add ecx,0x00010001
|
||||||
|
mcall
|
||||||
|
add ebx,4
|
||||||
|
sub ecx,2
|
||||||
|
mcall
|
||||||
|
sub ecx,0x00010001
|
||||||
|
mcall
|
||||||
|
ret
|
||||||
|
endf
|
||||||
|
|
||||||
func calc_middle
|
func calc_middle
|
||||||
shr eax,1
|
shr eax,1
|
||||||
shr ebx,1
|
shr ebx,1
|
||||||
@ -1262,6 +1283,8 @@ func calc_3d_colors
|
|||||||
mov eax,[cl_3d_inset]
|
mov eax,[cl_3d_inset]
|
||||||
mov ebx,[cl_3d_outset]
|
mov ebx,[cl_3d_outset]
|
||||||
call calc_middle
|
call calc_middle
|
||||||
|
mov ebx,[cl_3d_normal]
|
||||||
|
call calc_middle
|
||||||
mov [cl_3d_pushed],eax
|
mov [cl_3d_pushed],eax
|
||||||
mov eax,[cl_3d_normal]
|
mov eax,[cl_3d_normal]
|
||||||
mov ebx,[sc.work_text]
|
mov ebx,[sc.work_text]
|
||||||
|
@ -13,23 +13,7 @@ func draw_editor ;///// DRAW EDITOR //////////////////////////////////////////
|
|||||||
inc ecx
|
inc ecx
|
||||||
mov edx,[cl_3d_inset]
|
mov edx,[cl_3d_inset]
|
||||||
call draw_framerect
|
call draw_framerect
|
||||||
@^
|
|
||||||
mov ebx,[cur_editor.Bounds.Left-2]
|
|
||||||
mov bx,word[cur_editor.Bounds.Right]
|
|
||||||
mov ecx,[cur_editor.Bounds.Top-2]
|
|
||||||
mov cx,word[cur_editor.Bounds.Top]
|
|
||||||
mcall 38,,,[cl_3d_inset]
|
|
||||||
mov ecx,[cur_editor.Bounds.Bottom-2]
|
|
||||||
mov cx,word[cur_editor.Bounds.Bottom]
|
|
||||||
mcall
|
|
||||||
mov bx,word[cur_editor.Bounds.Left]
|
|
||||||
mov cx,word[cur_editor.Bounds.Top]
|
|
||||||
mcall
|
|
||||||
mov ebx,[cur_editor.Bounds.Right-2]
|
|
||||||
mov bx,word[cur_editor.Bounds.Right]
|
|
||||||
mov cx,word[cur_editor.Bounds.Top]
|
|
||||||
mcall
|
|
||||||
^@
|
|
||||||
mov [cur_editor.Gutter.Visible],0
|
mov [cur_editor.Gutter.Visible],0
|
||||||
test [options],OPTS_LINENUMS
|
test [options],OPTS_LINENUMS
|
||||||
jnz @f
|
jnz @f
|
||||||
@ -49,12 +33,33 @@ func draw_editor ;///// DRAW EDITOR //////////////////////////////////////////
|
|||||||
.lp1: mov [cur_editor.Gutter.Width],eax ;! [left_ofs],eax
|
.lp1: mov [cur_editor.Gutter.Width],eax ;! [left_ofs],eax
|
||||||
mov [left_ofs],eax
|
mov [left_ofs],eax
|
||||||
|
|
||||||
|
mov eax,[cur_editor.Bounds.Right]
|
||||||
|
sub eax,[cur_editor.Bounds.Left]
|
||||||
|
sub eax,[cur_editor.Gutter.Width]
|
||||||
|
sub eax,SCRLW+LCHGW+4
|
||||||
|
js .exit
|
||||||
|
cdq
|
||||||
|
mov ebx,6
|
||||||
|
div ebx
|
||||||
|
mov [columns.scr],eax
|
||||||
|
|
||||||
|
mov eax,[cur_editor.Bounds.Bottom]
|
||||||
|
sub eax,[cur_editor.Bounds.Top]
|
||||||
|
|
||||||
|
sub eax,SCRLW+3
|
||||||
|
js .exit
|
||||||
|
cdq
|
||||||
|
mov ebx,LINEH
|
||||||
|
div ebx
|
||||||
|
mov [lines.scr],eax
|
||||||
|
|
||||||
call draw_editor_gutter
|
call draw_editor_gutter
|
||||||
call draw_editor_vscroll
|
call draw_editor_vscroll
|
||||||
call draw_editor_hscroll
|
call draw_editor_hscroll
|
||||||
call draw_editor_text
|
call draw_editor_text
|
||||||
call draw_editor_caret
|
call draw_editor_caret
|
||||||
|
|
||||||
|
.exit:
|
||||||
ret
|
ret
|
||||||
endf
|
endf
|
||||||
|
|
||||||
@ -171,7 +176,7 @@ func draw_editor_vscroll ;///// DRAW EDITOR VERTICAL SCROLL BAR //////////////
|
|||||||
mov ecx,[cur_editor.TopLeft.Y]
|
mov ecx,[cur_editor.TopLeft.Y]
|
||||||
mov edx,[cur_editor.Bounds.Bottom]
|
mov edx,[cur_editor.Bounds.Bottom]
|
||||||
sub edx,[cur_editor.Bounds.Top]
|
sub edx,[cur_editor.Bounds.Top]
|
||||||
add edx,-SCRLW*3+1
|
add edx,-SCRLW*3;+1
|
||||||
call get_scroll_vars
|
call get_scroll_vars
|
||||||
mov [cur_editor.VScroll.Top],eax
|
mov [cur_editor.VScroll.Top],eax
|
||||||
mov [cur_editor.VScroll.Size],ebx
|
mov [cur_editor.VScroll.Size],ebx
|
||||||
@ -273,6 +278,7 @@ func draw_editor_hscroll ;///// DRAW EDITOR HORIZONTAL SCROLL BAR ////////////
|
|||||||
mov ebx,[columns.scr]
|
mov ebx,[columns.scr]
|
||||||
mov ecx,[cur_editor.TopLeft.X]
|
mov ecx,[cur_editor.TopLeft.X]
|
||||||
mov edx,[cur_editor.Bounds.Right]
|
mov edx,[cur_editor.Bounds.Right]
|
||||||
|
sub edx,[cur_editor.Bounds.Left]
|
||||||
add edx,-(SCRLW*3)
|
add edx,-(SCRLW*3)
|
||||||
call get_scroll_vars
|
call get_scroll_vars
|
||||||
mov [cur_editor.HScroll.Top],eax
|
mov [cur_editor.HScroll.Top],eax
|
||||||
@ -329,7 +335,10 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
|
func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
mov eax,[cur_editor.Bounds.Bottom]
|
cmp [cur_editor.Lines],0
|
||||||
|
jne @f
|
||||||
|
ret
|
||||||
|
@@: mov eax,[cur_editor.Bounds.Bottom]
|
||||||
sub eax,[cur_editor.Bounds.Top]
|
sub eax,[cur_editor.Bounds.Top]
|
||||||
cmp eax,LINEH
|
cmp eax,LINEH
|
||||||
jge @f
|
jge @f
|
||||||
@ -363,9 +372,6 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
|
|||||||
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 ;! ebp,[left_col],6*65536
|
||||||
mov eax,[lines.scr]
|
|
||||||
sub eax,[cur_editor.Lines.Count] ;! eax,[lines]
|
|
||||||
mov [draw_blines],eax
|
|
||||||
|
|
||||||
.next_line:
|
.next_line:
|
||||||
|
|
||||||
@ -683,13 +689,6 @@ func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
|
|||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
|
|
||||||
cmp [draw_blines],0
|
|
||||||
jl @f
|
|
||||||
mov ecx,[esp-8]
|
|
||||||
shl ecx,16
|
|
||||||
mov cx,word[cur_editor.Bounds.Bottom]
|
|
||||||
sub cx,[esp-8]
|
|
||||||
add cx,-SCRLW
|
|
||||||
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
|
||||||
@ -698,8 +697,27 @@ 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
|
||||||
mcall 13,,,[color_tbl+4*5]
|
mov edx,[color_tbl+4*5]
|
||||||
@@:
|
mov eax,13
|
||||||
|
mov ecx,[esp-8]
|
||||||
|
add ecx,LINEH
|
||||||
|
shl ecx,16
|
||||||
|
mov cx,word[cur_editor.Bounds.Bottom]
|
||||||
|
sub cx,[esp-8]
|
||||||
|
add cx,-SCRLW-LINEH
|
||||||
|
jle @f
|
||||||
|
mcall
|
||||||
|
@@: mov ecx,[cur_editor.Bounds.Top-2]
|
||||||
|
mov cx,2
|
||||||
|
add ecx,0x00010000
|
||||||
|
mcall
|
||||||
|
mov ebx,[cur_editor.Bounds.Right]
|
||||||
|
mov ecx,[cur_editor.Bounds.Bottom]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,-(SCRLW-1)*65536+SCRLW-1
|
||||||
|
add ecx,-(SCRLW-1)*65536+SCRLW-1
|
||||||
|
mcall
|
||||||
|
|
||||||
popad
|
popad
|
||||||
add esp,4
|
add esp,4
|
||||||
@ -745,3 +763,21 @@ func draw_editor_caret ;///// DRAW EDITOR TEXT CARET /////////////////////////
|
|||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
func editor_realloc_lines ;///// ADD $DELTA$ TO LINES SIZE ///////////////////
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; EAX = delta
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
push ebx ecx
|
||||||
|
mov ebx,[cur_editor.Lines.Size]
|
||||||
|
add ebx,eax
|
||||||
|
mov eax,[cur_editor.Lines]
|
||||||
|
mov [cur_editor.Lines.Size],ebx
|
||||||
|
mov ecx,eax
|
||||||
|
call mem.ReAlloc
|
||||||
|
mov [cur_editor.Lines],eax
|
||||||
|
sub eax,ecx
|
||||||
|
pop ecx ebx
|
||||||
|
ret
|
||||||
|
endf
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func save_file ;//////////////////////////////////////////////////////////////
|
func save_file ;//////////////////////////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
ret ; DISALLOW FOR NOW
|
|
||||||
|
|
||||||
mov esi,tb_opensave.text
|
mov esi,tb_opensave.text
|
||||||
mov edi,f_info.path
|
mov edi,f_info.path
|
||||||
movzx ecx,[tb_opensave.length]
|
movzx ecx,[tb_opensave.length]
|
||||||
@ -12,26 +10,45 @@ func save_file ;//////////////////////////////////////////////////////////////
|
|||||||
mov byte[edi],0
|
mov byte[edi],0
|
||||||
|
|
||||||
mov esi,[cur_editor.Lines] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum)
|
mov esi,[cur_editor.Lines] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum)
|
||||||
mov edi,0 ;!!! AREA_TEMP
|
|
||||||
|
xor ebx,ebx
|
||||||
|
mov ecx,[cur_editor.Lines.Count]
|
||||||
|
@@: call get_real_length
|
||||||
|
add ebx,eax
|
||||||
|
movzx eax,word[esi]
|
||||||
|
lea esi,[esi+eax+4]
|
||||||
|
loop @b
|
||||||
|
mov eax,[cur_editor.Lines.Count]
|
||||||
|
shl eax,1
|
||||||
|
lea eax,[eax+ebx+1024]
|
||||||
|
call mem.Alloc
|
||||||
|
push eax
|
||||||
|
mov esi,[cur_editor.Lines]
|
||||||
|
mov edi,eax ;!!! AREA_TEMP
|
||||||
|
|
||||||
|
; 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
|
||||||
sub edi,0 ;!!! AREA_TEMP+2 ; minus last CRLF
|
pop eax
|
||||||
|
sub edi,eax ;!!! AREA_TEMP+2 ; minus last CRLF
|
||||||
|
add edi,-2
|
||||||
;! mov [filelen],edi
|
;! mov [filelen],edi
|
||||||
cmp byte[f_info.path],'/'
|
; cmp byte[f_info.path],'/'
|
||||||
je .systree_save
|
; je .systree_save
|
||||||
mcall 33,f_info.path,0,edi,0 ;!!! AREA_TEMP,edi,0;[filelen],0
|
; mcall 33,f_info.path,0,edi,0 ;!!! AREA_TEMP,edi,0;[filelen],0
|
||||||
or eax,eax
|
; or eax,eax
|
||||||
jz .exit
|
; jz .exit
|
||||||
; call file_not_found
|
; call file_not_found
|
||||||
jmp .exit.2
|
; 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],0 ;!!! AREA_TEMP
|
mov [f_info70+16],eax ;!!! AREA_TEMP
|
||||||
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
|
||||||
@ -143,7 +160,12 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func load_file ;//////////////////////////////////////////////////////////////
|
func load_file ;//////////////////////////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
mov esi,tb_opensave.text
|
cmp [tb_opensave.text],0
|
||||||
|
jne @f
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
|
||||||
|
@@: mov esi,tb_opensave.text
|
||||||
mov edi,f_info.path
|
mov edi,f_info.path
|
||||||
movzx ecx,[tb_opensave.length]
|
movzx ecx,[tb_opensave.length]
|
||||||
mov [f_info.length],ecx
|
mov [f_info.length],ecx
|
||||||
@ -214,13 +236,22 @@ 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
|
||||||
inc eax
|
; DEBUGF 1,"lines in file: %d\n",eax
|
||||||
mov [ebp+EDITOR.Lines.Count],eax
|
mov [ebp+EDITOR.Lines.Count],eax
|
||||||
|
lea edx,[ebx+ecx]
|
||||||
imul ebx,eax,14
|
imul ebx,eax,14
|
||||||
add ebx,ecx
|
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
|
||||||
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
|
||||||
|
@ -155,10 +155,12 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func key.ctrl_s ;///// ENTER SAVE FILENAME ///////////////////////////////////
|
func key.ctrl_s ;///// ENTER SAVE FILENAME ///////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
cmp [cur_editor.FilePath],'/'
|
||||||
|
jne key.shift_ctrl_s
|
||||||
cmp [cur_editor.Modified],0 ;! [modified],0
|
cmp [cur_editor.Modified],0 ;! [modified],0
|
||||||
je .exit
|
je .exit
|
||||||
cmp [f_info.length],0
|
;cmp [f_info.length],0
|
||||||
je key.shift_ctrl_s
|
;je key.shift_ctrl_s
|
||||||
call save_file
|
call save_file
|
||||||
call drawwindow
|
call drawwindow
|
||||||
.exit:
|
.exit:
|
||||||
@ -537,11 +539,23 @@ func key.ctrl_v
|
|||||||
|
|
||||||
call delete_selection
|
call delete_selection
|
||||||
|
|
||||||
|
mov eax,[copy_size]
|
||||||
|
call editor_realloc_lines
|
||||||
|
|
||||||
|
mov eax,[cur_editor.Lines]
|
||||||
|
mov ebx,[cur_editor.Lines.Size]
|
||||||
|
add ebx,[copy_size]
|
||||||
|
mov [cur_editor.Lines.Size],ebx
|
||||||
|
call mem.ReAlloc
|
||||||
|
mov [cur_editor.Lines],eax
|
||||||
|
|
||||||
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
||||||
call get_line_offset
|
call get_line_offset
|
||||||
pushd [esi] esi
|
pushd [esi] esi
|
||||||
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
|
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
|
||||||
call line_add_spaces
|
call line_add_spaces
|
||||||
|
add [esp],eax ;!!!
|
||||||
|
add esi,eax ;!!!
|
||||||
mov ecx,[copy_size]
|
mov ecx,[copy_size]
|
||||||
sub ecx,4
|
sub ecx,4
|
||||||
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
|
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
|
||||||
@ -570,6 +584,7 @@ func key.ctrl_v
|
|||||||
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x]
|
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x]
|
||||||
add eax,ebx
|
add eax,ebx
|
||||||
mov [edi-4],ax
|
mov [edi-4],ax
|
||||||
|
mov byte[edi-4+2],0x0001
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
call .check_columns
|
call .check_columns
|
||||||
add edi,ebx
|
add edi,ebx
|
||||||
@ -579,7 +594,7 @@ func key.ctrl_v
|
|||||||
lodsd
|
lodsd
|
||||||
and eax,0x0000FFFF
|
and eax,0x0000FFFF
|
||||||
stosd
|
stosd
|
||||||
or dword[edi-4],0x00010000
|
mov byte[edi-4+2],0x0001
|
||||||
pop ecx
|
pop ecx
|
||||||
loop @b
|
loop @b
|
||||||
|
|
||||||
@ -656,6 +671,9 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func key.ctrl_d ;///// INSERT SEPARATOR //////////////////////////////////////
|
func key.ctrl_d ;///// INSERT SEPARATOR //////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
mov eax,94
|
||||||
|
call editor_realloc_lines
|
||||||
|
|
||||||
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
||||||
call get_line_offset
|
call get_line_offset
|
||||||
mov ebx,esi
|
mov ebx,esi
|
||||||
@ -702,14 +720,27 @@ func key.ctrl_y ;///// DELETE CURRENT LINE ///////////////////////////////////
|
|||||||
call get_line_offset
|
call get_line_offset
|
||||||
mov edi,esi
|
mov edi,esi
|
||||||
lodsd
|
lodsd
|
||||||
|
and eax,0x0000FFFF
|
||||||
add esi,eax
|
add esi,eax
|
||||||
|
push eax
|
||||||
|
|
||||||
dec [cur_editor.Lines.Count] ;! [lines]
|
dec [cur_editor.Lines.Count] ;! [lines]
|
||||||
mov ecx,[temp_buf] ;! AREA_TEMP2
|
;mov ecx,[temp_buf] ;! AREA_TEMP2
|
||||||
|
mov ecx,[cur_editor.Lines]
|
||||||
|
add ecx,[ecx-4]
|
||||||
sub ecx,esi
|
sub ecx,esi
|
||||||
shr ecx,2 ;// fixed (was 4)
|
shr ecx,2 ;// fixed (was 4)
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
|
|
||||||
|
pop eax
|
||||||
|
add eax,4
|
||||||
|
neg eax
|
||||||
|
call editor_realloc_lines
|
||||||
|
|
||||||
|
m2m [cur_editor.SelStart.X],[cur_editor.Caret.X]
|
||||||
|
m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y]
|
||||||
|
|
||||||
call check_inv_all
|
call check_inv_all
|
||||||
mov [cur_editor.Modified],1 ;! [modified],1
|
mov [cur_editor.Modified],1 ;! [modified],1
|
||||||
|
|
||||||
@ -1129,6 +1160,16 @@ func key.del ;///// DELETE NEXT CHAR OR SELECTION ////////////////////////////
|
|||||||
@@: m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] ;! [sel.x],[pos.x]
|
@@: m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] ;! [sel.x],[pos.x]
|
||||||
m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] ;! [sel.y],[pos.y]
|
m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] ;! [sel.y],[pos.y]
|
||||||
|
|
||||||
|
mov ecx,[cur_editor.Lines.Count]
|
||||||
|
call get_line_offset
|
||||||
|
movzx eax,word[esi]
|
||||||
|
lea esi,[esi+eax+4]
|
||||||
|
mov eax,[cur_editor.Lines]
|
||||||
|
add eax,[eax-4]
|
||||||
|
sub esi,eax
|
||||||
|
lea eax,[esi+4096]
|
||||||
|
call editor_realloc_lines
|
||||||
|
|
||||||
mov [cur_editor.Modified],1 ;! [modified],1
|
mov [cur_editor.Modified],1 ;! [modified],1
|
||||||
.exit.2:
|
.exit.2:
|
||||||
call check_inv_all
|
call check_inv_all
|
||||||
@ -1223,6 +1264,9 @@ func key.tab ;///// TABULATE /////////////////////////////////////////////////
|
|||||||
push eax ' '
|
push eax ' '
|
||||||
sub eax,ecx
|
sub eax,ecx
|
||||||
.direct:
|
.direct:
|
||||||
|
push eax
|
||||||
|
call editor_realloc_lines
|
||||||
|
pop eax
|
||||||
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
||||||
call get_line_offset
|
call get_line_offset
|
||||||
and dword[esi],not 0x00020000
|
and dword[esi],not 0x00020000
|
||||||
@ -1238,6 +1282,11 @@ func key.tab ;///// TABULATE /////////////////////////////////////////////////
|
|||||||
sub edx,eax
|
sub edx,eax
|
||||||
cmp ecx,edx
|
cmp ecx,edx
|
||||||
jl @f
|
jl @f
|
||||||
|
push eax
|
||||||
|
mov eax,10
|
||||||
|
call editor_realloc_lines
|
||||||
|
add esi,eax
|
||||||
|
pop eax
|
||||||
pushad; esi ecx eax
|
pushad; esi ecx eax
|
||||||
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2-10+1
|
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2-10+1
|
||||||
add ecx,[ecx-4]
|
add ecx,[ecx-4]
|
||||||
@ -1247,7 +1296,7 @@ func key.tab ;///// TABULATE /////////////////////////////////////////////////
|
|||||||
; lea eax,[esi+4]
|
; lea eax,[esi+4]
|
||||||
; add eax,[esi]
|
; add eax,[esi]
|
||||||
movzx eax,word[esi]
|
movzx eax,word[esi]
|
||||||
lea eax,word[esi+eax+4]
|
lea eax,[esi+eax+4]
|
||||||
sub ecx,eax
|
sub ecx,eax
|
||||||
lea esi,[edi-10] ;! AREA_TEMP2-10
|
lea esi,[edi-10] ;! AREA_TEMP2-10
|
||||||
std
|
std
|
||||||
@ -1298,6 +1347,9 @@ func key.return ;///// CARRIAGE RETURN ///////////////////////////////////////
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
call delete_selection
|
call delete_selection
|
||||||
|
|
||||||
|
mov eax,14
|
||||||
|
call editor_realloc_lines
|
||||||
|
|
||||||
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
|
||||||
call get_line_offset
|
call get_line_offset
|
||||||
|
|
||||||
@ -1489,3 +1541,21 @@ func key.ctrl_f4 ;///// CLOSE CURRENT TAB ////////////////////////////////////
|
|||||||
call create_tab
|
call create_tab
|
||||||
@@: ret
|
@@: ret
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
func key.shift_f9 ;///// SET DEFAULT TAB /////////////////////////////////////
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov eax,[tab_bar.Current.Ptr]
|
||||||
|
cmp eax,[tab_bar.Default.Ptr]
|
||||||
|
jne @f
|
||||||
|
xor eax,eax
|
||||||
|
@@: mov [tab_bar.Default.Ptr],eax
|
||||||
|
mov ebp,[tab_bar.Current.Ptr]
|
||||||
|
call make_tab_visible
|
||||||
|
cmp [tab_bar.Style],2
|
||||||
|
jbe @f
|
||||||
|
call align_editor_in_tab
|
||||||
|
call draw_editor
|
||||||
|
@@: call draw_tabctl
|
||||||
|
ret
|
||||||
|
endf
|
||||||
|
@ -3,11 +3,13 @@ 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,[top_ofs]
|
mov ecx,[cur_editor.Bounds.Top] ; ecx,[top_ofs]
|
||||||
inc ecx
|
inc ecx
|
||||||
pushd [left_ofs] ATOPH [p_info.client_box.width] ATOPH
|
pushd [cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx ; [left_ofs] ATOPH [p_info.client_box.width] ATOPH
|
||||||
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]
|
||||||
|
add [__rc+0x0],ecx
|
||||||
imul ecx,[lines.scr],LINEH
|
imul ecx,[lines.scr],LINEH
|
||||||
dec ecx
|
dec ecx
|
||||||
add [__rc+0xC],ecx
|
add [__rc+0xC],ecx
|
||||||
@ -148,9 +150,11 @@ mouse:
|
|||||||
call clear_selection
|
call clear_selection
|
||||||
|
|
||||||
.check_body.2:
|
.check_body.2:
|
||||||
sub eax,[left_ofs]
|
sub eax,[cur_editor.Bounds.Left] ; eax,[left_ofs]
|
||||||
sub ebx,[top_ofs]
|
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs]
|
||||||
dec ebx
|
sub eax,[cur_editor.Gutter.Width]
|
||||||
|
sub eax,LCHGW
|
||||||
|
sub ebx,2
|
||||||
; sub ebx,[__rc+0x4]
|
; sub ebx,[__rc+0x4]
|
||||||
push eax
|
push eax
|
||||||
mov eax,ebx
|
mov eax,ebx
|
||||||
@ -196,19 +200,20 @@ mouse:
|
|||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
.check_vscroll:
|
.check_vscroll:
|
||||||
mov ecx,[p_info.client_box.width]
|
;mov ecx,[p_info.client_box.width]
|
||||||
sub ecx,SCRLW-2
|
mov ecx,[cur_editor.Bounds.Right]
|
||||||
pushd ecx [top_ofs] ecx [bot_ofs]
|
sub ecx,SCRLW-1;2
|
||||||
|
pushd ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom] ;ecx [top_ofs] ecx [bot_ofs]
|
||||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||||
add [__rc+0x8],SCRLW-1;!!!!!!!!!!!!!!-2
|
add [__rc+0x8],SCRLW-2;!!!!!!!!!!!!!!-2
|
||||||
add [__rc+0x4],SCRLW;!!!!!!!!!!!!!!+1
|
add [__rc+0x4],SCRLW-1;!!!!!!!!!!!!!!+1
|
||||||
sub [__rc+0xC],SCRLW*2+3
|
sub [__rc+0xC],SCRLW*2+1;3
|
||||||
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,[top_ofs]
|
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs]
|
||||||
sub ebx,SCRLW;!!!!!!!!!!!!!!+1
|
sub ebx,SCRLW;!!!!!!!!!!!!!!+1
|
||||||
; sub ebx,[__rc+0x4]
|
; sub ebx,[__rc+0x4]
|
||||||
cmp [vscrl_capt],0
|
cmp [vscrl_capt],0
|
||||||
@ -234,10 +239,10 @@ mouse:
|
|||||||
jns @f
|
jns @f
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
@@: mov [mouse_captured],1
|
@@: mov [mouse_captured],1
|
||||||
mov eax,[bot_ofs]
|
mov eax,[cur_editor.Bounds.Bottom] ; eax,[bot_ofs]
|
||||||
sub eax,[top_ofs]
|
sub eax,[cur_editor.Bounds.Top] ; eax,[top_ofs]
|
||||||
sub eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size]
|
sub eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size]
|
||||||
sub eax,SCRLW*3-2
|
sub eax,SCRLW*3;-2
|
||||||
cmp eax,ebx
|
cmp eax,ebx
|
||||||
jge @f
|
jge @f
|
||||||
mov ebx,eax
|
mov ebx,eax
|
||||||
@ -246,9 +251,9 @@ mouse:
|
|||||||
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
|
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
|
||||||
sub eax,[lines.scr]
|
sub eax,[lines.scr]
|
||||||
imul ebx
|
imul ebx
|
||||||
mov ebx,[bot_ofs]
|
mov ebx,[cur_editor.Bounds.Bottom] ; ebx,[bot_ofs]
|
||||||
sub ebx,[top_ofs]
|
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs]
|
||||||
sub ebx,SCRLW*3-2 ;**
|
sub ebx,SCRLW*3;-2 ;**
|
||||||
sub ebx,[cur_editor.VScroll.Size] ;! ebx,[vscrl_size]
|
sub ebx,[cur_editor.VScroll.Size] ;! ebx,[vscrl_size]
|
||||||
idiv ebx
|
idiv ebx
|
||||||
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
|
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
|
||||||
@ -259,18 +264,21 @@ mouse:
|
|||||||
jmp still.skip_write
|
jmp still.skip_write
|
||||||
|
|
||||||
.check_hscroll:
|
.check_hscroll:
|
||||||
pushd (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] ; (5+SCRLW+1) [bot_ofs] [p_info.box.width] [bot_ofs]
|
||||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||||
add [__rc+0x8],-SCRLW*2-10-1
|
add [__rc+0x8],-SCRLW*2-1
|
||||||
add [__rc+0x4],-SCRLW
|
add [__rc+0x4],-SCRLW+1
|
||||||
add [__rc+0xC],-2
|
add [__rc+0xC],-1
|
||||||
|
add [__rc+0x0],SCRLW+1
|
||||||
mov ecx,__rc
|
mov ecx,__rc
|
||||||
call pt_in_rect
|
call pt_in_rect
|
||||||
jnc .check_main_menu
|
jnc .check_main_menu
|
||||||
|
|
||||||
.check_hscroll.2:
|
.check_hscroll.2:
|
||||||
mov ebx,eax
|
mov ebx,eax
|
||||||
sub ebx,(5+SCRLW+1)
|
;sub ebx,(5+SCRLW+1)
|
||||||
|
sub ebx,SCRLW+1
|
||||||
|
sub ebx,[cur_editor.Bounds.Left]
|
||||||
; sub ebx,[__rc+0x0]
|
; sub ebx,[__rc+0x0]
|
||||||
cmp [hscrl_capt],0
|
cmp [hscrl_capt],0
|
||||||
jge .hcaptured
|
jge .hcaptured
|
||||||
@ -295,9 +303,9 @@ mouse:
|
|||||||
jns @f
|
jns @f
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
@@: mov [mouse_captured],1
|
@@: mov [mouse_captured],1
|
||||||
mov eax,[p_info.box.width]
|
mov eax,[cur_editor.Bounds.Right] ; eax,[p_info.box.width]
|
||||||
sub eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size]
|
sub eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size]
|
||||||
sub eax,SCRLW*3+10+1
|
sub eax,SCRLW*3+1 ; eax,SCRLW*3+10+1
|
||||||
cmp eax,ebx
|
cmp eax,ebx
|
||||||
jge @f
|
jge @f
|
||||||
mov ebx,eax
|
mov ebx,eax
|
||||||
@ -306,8 +314,8 @@ mouse:
|
|||||||
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
|
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
|
||||||
sub eax,[columns.scr]
|
sub eax,[columns.scr]
|
||||||
imul ebx
|
imul ebx
|
||||||
mov ebx,[p_info.box.width]
|
mov ebx,[cur_editor.Bounds.Right] ; ebx,[p_info.box.width]
|
||||||
sub ebx,SCRLW*3+10+1 ;**
|
sub ebx,SCRLW*3+1 ; ebx,SCRLW*3+10+1 ;**
|
||||||
sub ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size]
|
sub ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size]
|
||||||
idiv ebx
|
idiv ebx
|
||||||
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
|
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
|
||||||
|
@ -178,22 +178,11 @@ func draw_popup_wnd
|
|||||||
test byte[ebp+edi-1],0x02
|
test byte[ebp+edi-1],0x02
|
||||||
jz .lp8
|
jz .lp8
|
||||||
movzx ecx,bx
|
movzx ecx,bx
|
||||||
shl ecx,16
|
|
||||||
mov cx,bx
|
|
||||||
shr ebx,16
|
shr ebx,16
|
||||||
push bx
|
add ebx,-11
|
||||||
shl ebx,16
|
add ecx,2
|
||||||
pop bx
|
mov edx,[sc.work_text]
|
||||||
add ecx,0x00040003
|
call draw_check
|
||||||
sub ebx,0x000A000B
|
|
||||||
mcall 38,,,[sc.work_text]
|
|
||||||
add ecx,0x00010001
|
|
||||||
mcall
|
|
||||||
add ebx,4
|
|
||||||
sub ecx,2
|
|
||||||
mcall
|
|
||||||
sub ecx,0x00010001
|
|
||||||
mcall
|
|
||||||
.lp8: popad
|
.lp8: popad
|
||||||
|
|
||||||
mov ecx,[sc.work_text];0x00000000
|
mov ecx,[sc.work_text];0x00000000
|
||||||
|
@ -38,16 +38,15 @@ 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 ////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
push ebp
|
|
||||||
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
|
||||||
jb .go_right
|
jb .go_right
|
||||||
ja .go_left
|
ja .go_left
|
||||||
add esp,4
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.go_right:
|
.go_right:
|
||||||
|
push ebp
|
||||||
call get_hidden_tabitems_number
|
call get_hidden_tabitems_number
|
||||||
cmp ebp,[esp]
|
cmp ebp,[esp]
|
||||||
ja .lp1
|
ja .lp1
|
||||||
@ -67,13 +66,13 @@ func make_tab_visible ;///// MAKE SPECIFIED TAB VISIBLE IF IT'S OFFSCREEN ////
|
|||||||
mov ebx,sizeof.TABITEM
|
mov ebx,sizeof.TABITEM
|
||||||
div ebx
|
div ebx
|
||||||
@@: mov [tab_bar.Items.Left],eax
|
@@: mov [tab_bar.Items.Left],eax
|
||||||
add esp,4
|
|
||||||
ret
|
ret
|
||||||
endf
|
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]
|
||||||
@ -84,11 +83,15 @@ func create_tab ;///// ADD TAB TO THE END ////////////////////////////////////
|
|||||||
mov [tab_bar.Items],eax
|
mov [tab_bar.Items],eax
|
||||||
sub ecx,eax
|
sub ecx,eax
|
||||||
sub [tab_bar.Current.Ptr],ecx
|
sub [tab_bar.Current.Ptr],ecx
|
||||||
lea ebp,[eax+ebx-sizeof.TABITEM]
|
cmp [tab_bar.Default.Ptr],0
|
||||||
|
je @f
|
||||||
|
sub [tab_bar.Default.Ptr],ecx
|
||||||
|
@@: lea ebp,[eax+ebx-sizeof.TABITEM]
|
||||||
call set_cur_tab
|
call set_cur_tab
|
||||||
call make_tab_visible
|
call make_tab_visible
|
||||||
|
|
||||||
mov eax,1024
|
mov eax,1024
|
||||||
|
mov [cur_editor.Lines.Size],eax
|
||||||
call mem.Alloc
|
call mem.Alloc
|
||||||
mov [cur_editor.Lines],eax
|
mov [cur_editor.Lines],eax
|
||||||
mov [cur_editor.Lines.Count],1
|
mov [cur_editor.Lines.Count],1
|
||||||
@ -115,14 +118,19 @@ func create_tab ;///// ADD TAB TO THE END ////////////////////////////////////
|
|||||||
rep movsb
|
rep movsb
|
||||||
mov [cur_editor.FileName],0
|
mov [cur_editor.FileName],0
|
||||||
|
|
||||||
mov [f_info.length],0
|
|
||||||
mov [cur_editor.Modified],0
|
mov [cur_editor.Modified],0
|
||||||
mov [cur_editor.AsmMode],0
|
mov [cur_editor.AsmMode],0
|
||||||
|
|
||||||
call flush_cur_tab
|
call flush_cur_tab
|
||||||
call update_caption
|
call update_caption
|
||||||
call drawwindow
|
;call drawwindow
|
||||||
|
cmp [do_not_draw],0
|
||||||
|
jne @f
|
||||||
|
call align_editor_in_tab
|
||||||
|
call draw_editor
|
||||||
|
call draw_tabctl
|
||||||
|
call draw_statusbar
|
||||||
|
@@:
|
||||||
mov ebp,cur_tab
|
mov ebp,cur_tab
|
||||||
pop edi esi ecx eax
|
pop edi esi ecx eax
|
||||||
ret
|
ret
|
||||||
@ -131,7 +139,18 @@ endf
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
func delete_tab ;///// DELETE SPECIFIED TAB //////////////////////////////////
|
func delete_tab ;///// DELETE SPECIFIED TAB //////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
mov eax,[ebp+TABITEM.Editor.Lines]
|
; DEBUGF 1,"items count before deletion: %d\n",[tab_bar.Items.Count]
|
||||||
|
cmp [tab_bar.Default.Ptr],0
|
||||||
|
je @f
|
||||||
|
cmp ebp,[tab_bar.Default.Ptr]
|
||||||
|
je .lp1
|
||||||
|
ja @f
|
||||||
|
sub [tab_bar.Default.Ptr],sizeof.TABITEM
|
||||||
|
jmp @f
|
||||||
|
.lp1:
|
||||||
|
mov [tab_bar.Default.Ptr],0
|
||||||
|
|
||||||
|
@@: mov eax,[ebp+TABITEM.Editor.Lines]
|
||||||
call mem.Free
|
call mem.Free
|
||||||
imul ecx,[tab_bar.Items.Count],sizeof.TABITEM
|
imul ecx,[tab_bar.Items.Count],sizeof.TABITEM
|
||||||
add ecx,[tab_bar.Items]
|
add ecx,[tab_bar.Items]
|
||||||
@ -153,7 +172,10 @@ func delete_tab ;///// DELETE SPECIFIED TAB //////////////////////////////////
|
|||||||
mov [tab_bar.Items],eax
|
mov [tab_bar.Items],eax
|
||||||
sub ecx,eax
|
sub ecx,eax
|
||||||
sub ebp,ecx
|
sub ebp,ecx
|
||||||
|
cmp [tab_bar.Default.Ptr],0
|
||||||
|
je @f
|
||||||
|
sub [tab_bar.Default.Ptr],ecx
|
||||||
|
@@:
|
||||||
pop ecx
|
pop ecx
|
||||||
add ecx,[tab_bar.Items]
|
add ecx,[tab_bar.Items]
|
||||||
sub ecx,ebp
|
sub ecx,ebp
|
||||||
@ -163,14 +185,20 @@ 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 drawwindow
|
||||||
|
call align_editor_in_tab
|
||||||
|
call draw_editor
|
||||||
|
call draw_tabctl
|
||||||
|
call draw_statusbar
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.no_tabs:
|
.no_tabs:
|
||||||
mov eax,[tab_bar.Items]
|
mov eax,[tab_bar.Items]
|
||||||
call mem.Free
|
call mem.Free
|
||||||
mov [tab_bar.Items],0
|
xor eax,eax
|
||||||
mov [tab_bar.Current.Ptr],0
|
mov [tab_bar.Items],eax
|
||||||
|
mov [tab_bar.Current.Ptr],eax
|
||||||
|
mov [tab_bar.Default.Ptr],eax
|
||||||
ret
|
ret
|
||||||
endf
|
endf
|
||||||
|
|
||||||
@ -354,6 +382,26 @@ func draw_tabctl ;///// DRAW TAB CONTROL /////////////////////////////////////
|
|||||||
mov edx,[color_tbl+4*0]
|
mov edx,[color_tbl+4*0]
|
||||||
.draw_tabs.inactive:
|
.draw_tabs.inactive:
|
||||||
|
|
||||||
|
cmp ebp,[tab_bar.Default.Ptr]
|
||||||
|
jne .draw_tabs.notdefault
|
||||||
|
push ebx ecx edx
|
||||||
|
add ebx,3*65536
|
||||||
|
add ecx,(TBARH/2-6)*65536
|
||||||
|
mov bx,11
|
||||||
|
mov cx,bx
|
||||||
|
call draw_framerect
|
||||||
|
add ebx,1*65536-2
|
||||||
|
add ecx,1*65536-2
|
||||||
|
mcall 13,,,[sc.work]
|
||||||
|
shr ebx,16
|
||||||
|
shr ecx,16
|
||||||
|
add ebx,2
|
||||||
|
add ecx,3
|
||||||
|
mov edx,[esp]
|
||||||
|
call draw_check
|
||||||
|
pop edx ecx ebx
|
||||||
|
.draw_tabs.notdefault:
|
||||||
|
|
||||||
push ebx ecx esi edx
|
push ebx ecx esi edx
|
||||||
lea eax,[ebp+TABITEM.Editor.FilePath]
|
lea eax,[ebp+TABITEM.Editor.FilePath]
|
||||||
add eax,[ebp+TABITEM.Editor.FileName]
|
add eax,[ebp+TABITEM.Editor.FileName]
|
||||||
@ -362,9 +410,12 @@ func draw_tabctl ;///// DRAW TAB CONTROL /////////////////////////////////////
|
|||||||
mov esi,eax
|
mov esi,eax
|
||||||
shr ecx,16
|
shr ecx,16
|
||||||
mov bx,cx
|
mov bx,cx
|
||||||
add ebx,0x00050005
|
add ebx,5*65536+TBARH/2-4
|
||||||
pop ecx
|
pop ecx
|
||||||
mcall 4
|
cmp ebp,[tab_bar.Default.Ptr]
|
||||||
|
jne .lp2
|
||||||
|
add ebx,13*65536
|
||||||
|
.lp2: mcall 4
|
||||||
pop esi ecx ebx
|
pop esi ecx ebx
|
||||||
|
|
||||||
inc [tab_bar.Buttons.Last]
|
inc [tab_bar.Buttons.Last]
|
||||||
@ -533,6 +584,9 @@ func get_tab_size ;///// GET TAB WIDTH ///////////////////////////////////////
|
|||||||
call strlen
|
call strlen
|
||||||
imul ebx,eax,6
|
imul ebx,eax,6
|
||||||
add ebx,9
|
add ebx,9
|
||||||
|
cmp ebp,[tab_bar.Default.Ptr]
|
||||||
|
jne .lp2
|
||||||
|
add ebx,13
|
||||||
jmp .lp2
|
jmp .lp2
|
||||||
.lp1: call get_max_tab_width
|
.lp1: call get_max_tab_width
|
||||||
mov ebx,eax
|
mov ebx,eax
|
||||||
@ -566,6 +620,9 @@ func get_max_tab_width ;///// GET WIDTH OF LONGEST TAB ///////////////////////
|
|||||||
cmp eax,SCRLW*2+2
|
cmp eax,SCRLW*2+2
|
||||||
jae @f
|
jae @f
|
||||||
mov eax,SCRLW*2+2
|
mov eax,SCRLW*2+2
|
||||||
|
@@: cmp [tab_bar.Default.Ptr],0
|
||||||
|
je @f
|
||||||
|
add eax,13
|
||||||
@@: pop ebp ecx ebx
|
@@: pop ebp ecx ebx
|
||||||
ret
|
ret
|
||||||
endf
|
endf
|
||||||
@ -598,9 +655,8 @@ 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]
|
||||||
mov ebp,[tab_bar.Items]
|
imul ebp,[tab_bar.Items.Left],sizeof.TABITEM
|
||||||
imul eax,[tab_bar.Items.Left],sizeof.TABITEM
|
add ebp,[tab_bar.Items]
|
||||||
add ebp,eax
|
|
||||||
mov eax,ecx
|
mov eax,ecx
|
||||||
sub eax,[tab_bar.Items.Left]
|
sub eax,[tab_bar.Items.Left]
|
||||||
push eax
|
push eax
|
||||||
|
Loading…
Reference in New Issue
Block a user