Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 266 → Rev 267

/programs/develop/tinypad/trunk/tinypad.asm
3,7 → 3,7
; compiler: flat assembler 1.67.15
; memory to compile: 2.0/7.0 MBytes (without/with size optimizations)
; version: 4.0.4 pre
; last update: 2007-01-03 (Jan 3, 2007)
; last update: 2007-01-07 (Jan 7, 2007)
; minimal kernel: revision #138 (svn://kolibrios.org/kernel)
;-----------------------------------------------------------------------------
; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi
15,15 → 15,17
; - add vertical selection, undo, goto position, overwrite mode
; - improve window drawing with small dimensions
; - other bug-fixes and speed/size optimizations
; - save settings to ini file, not to executable
;
; TODO (FOR 4.0.4, PLANNED FOR 2007-01-21):
; - finish tabbed interface [critical]
; - finish tabbed interface (some bug with tab switching) [critical]
; - add memory reallocation to keys handler [critical]
; - rework save_file (memory manager) [critical]
; - reduce flickering (changes checker) [average]
; - incorrect saved/modified lines flags on copy/paste [normal]
; - case-insensitive file extensions comparison (.asm/.inc) [normal]
; - prompt to save file before closing/opening [low]
; - fix scrollbars dragging coordinates calculation [critical]
; - fix parameters parsing (incl. DOCPAK) [average]
; - reduce flickering (introduce changes checker) [normal]
; - fix incorrect saved/modified lines flags on copy/paste [normal]
; - add prompt to save file before closing/opening [low]
;
; HISTORY:
; 4.0.4 pre (mike.dld)
31,12 → 33,17
; - statusbar contained hint after dialog operation cancelled
; - small drawing fix for gutter and line saved/modified markers
; changes:
; - editor and other modifications to ease parts placement changing
; - modified/saved colors now match those in MSVS
; - function 70 for *all* file operations (including diamond's fixes)
; - use memory manager instead of statically allocated region
; - case-insensitive filenames input, to be able to open/save files with
; non-latin chars in name (russian etc.)
; - overall code cleanup
; new features:
; - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor)
; - tabbed interface, ability to open several files in one app instance
; (thanks IRC guys for ideas and testing)
; 4.0.3 (mike.dld)
; bug-fixes:
; - 1-char selection if pressing <BS> out of real line length
46,6 → 53,7
; - statusbar and textboxes drawing fixes (wrong colors)
; - perform no redraw while pressing Shift, Ctrl, Alt keys
; - data length from DOCPAK in string representation (fixed by diamond)
; - compare file extension case-insensitively (fixed by diamond)
; changes:
; - function 70 instead of 58 for files loading/saving
; - clientarea-relative drawing (less code)
168,12 → 176,6
STATH = 16 ; status bar height
TBARH = 18 ; tab bar height
 
MEV_LDOWN = 1
MEV_LUP = 2
MEV_RDOWN = 3
MEV_RUP = 4
MEV_MOVE = 5
 
;-----------------------------------------------------------------------------
section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------
180,13 → 182,13
 
label color_tbl dword
RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; text
RGB( 0,144, 0) ; RGB( 0,144, 0) ; RGB( 0,160, 0) ; numbers
RGB(176, 0, 0) ; RGB(160, 0, 0) ; RGB( 0,128,255) ; strings
RGB(128,128,128) ; RGB(144,144,144) ; RGB(160,160,160) ; comments
RGB( 48, 48,240) ; RGB( 48, 48,240) ; RGB(255, 0, 0) ; symbols
RGB(255,255,255) ; RGB(224,224,224) ; RGB(255,255,255) ; background
RGB( 0,144, 0) ; RGB( 0,160, 0) ; RGB( 0,144, 0) ; numbers
RGB(176, 0, 0) ; RGB( 0,128,255) ; RGB(160, 0, 0) ; strings
RGB(128,128,128) ; RGB(160,160,160) ; RGB(144,144,144) ; comments
RGB( 48, 48,240) ; RGB(255, 0, 0) ; RGB( 48, 48,240) ; symbols
RGB(255,255,255) ; RGB(255,255,255) ; RGB(224,224,224) ; background
RGB(255,255,255) ; RGB(255,255,255) ; RGB(255,255,255) ; selection text
RGB( 10, 36,106) ; RGB( 0, 0,128) ; RGB( 0, 64,128) ; selection background
RGB( 10, 36,106) ; RGB( 0, 64,128) ; RGB( 0, 0,128) ; selection background
RGB(255,238, 98) ; modified line marker
RGB(108,226,108) ; saved line marker
 
195,7 → 197,7
options db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
 
mainwnd_pos:
.x dd 100
.x dd 250
.y dd 75
.w dd 6*80+6+SCRLW+5
.h dd 402
235,7 → 237,7
 
mov eax,65536
call mem.Alloc
mov [cur_tab.Editor.Data],eax
mov [cur_editor.Lines],eax
 
inc [do_not_draw]
 
364,7 → 366,7
;-----------------------------------------------------------------------------
; BL = run after compile
;-----------------------------------------------------------------------------
cmp [cur_tab.Editor.AsmMode],0 ;! [asm_mode],0
cmp [cur_editor.AsmMode],0 ;! [asm_mode],0
jne @f
ret
@@: mov esi,f_info.path ; s_fname
560,7 → 562,7
0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x00
times 12*16 db 0x00
 
accel_table dd \
accel_table_main dd \
0x0000000E,key.bkspace ,\ ; BackSpace
0x0000000F,key.tab ,\ ; Tab
0x0000001C,key.return ,\ ; Return
599,6 → 601,7
0x0002002E,key.ctrl_c ,\ ; Ctrl+C
0x0002002F,key.ctrl_v ,\ ; Ctrl+V
0x00020031,key.ctrl_n ,\ ; Ctrl+N
0x0002003E,key.ctrl_f4 ,\ ; Ctrl+F4
0x00020043,key.ctrl_f9 ,\ ; Ctrl+F9
0x00020147,key.ctrl_home ,\ ; Ctrl+Home
\;0x00020148,key.ctrl_up ,\ ; Ctrl+Up
641,10 → 644,12
 
accel_table2 dd \
1,btn.close_main_window ,\
'UP',btn.scroll_up ,\
'DN',btn.scroll_down ,\
'LT',btn.scroll_left ,\
'RT',btn.scroll_right ,\
'VSL',btn.vscroll_up ,\
'VSG',btn.vscroll_down ,\
'HSL',btn.hscroll_up ,\
'HSG',btn.hscroll_down ,\
'TBL',btn.tabctl_right ,\
'TBG',btn.tabctl_left ,\
0
 
accel_table2_botdlg dd \
725,8 → 730,10
tab_bar TABCTL
virtual at tab_bar.Current
cur_tab TABITEM
;cur_tab_addr dd ?
end virtual
virtual at tab_bar.Current.Editor
cur_editor EDITOR
end virtual
 
lines.scr dd ? ; number of lines on the screen
columns.scr dd ? ; number of columns on the screen
/programs/develop/tinypad/trunk/tinypad.inc
19,12 → 19,12
struct EDITOR
FilePath db PATHL dup(?)
FileName dd ?
Data dd ?
Bounds RECT
Lines dd ?
Lines.Count dd ?
Columns.Count dd ?
Caret POINT
SelStart POINT
Lines dd ?
Columns dd ?
TopLeft POINT
VScroll SCROLLBAR
HScroll SCROLLBAR
43,8 → 43,11
Bounds RECT
Items dd ?
Items.Count dd ?
Items.Left dd ?
Current TABITEM
Current.Ptr dd ?
Buttons.First dd ?
Buttons.Last dd ?
Style db ?
db 3 dup(?)
ends
193,6 → 196,14
OPTS_OPTIMSAVE = 00010000b
OPTS_LINENUMS = 00100000b
 
;// MOUSE EVENTS
 
MEV_LDOWN = 1
MEV_LUP = 2
MEV_RDOWN = 3
MEV_RUP = 4
MEV_MOVE = 5
 
;// KEY MODIFIERS
 
KM_SHIFT = 0x00010000
/programs/develop/tinypad/trunk/tp-button.asm
20,46 → 20,79
cmp byte[esi],0
jne .acc
 
cmp eax,[tab_bar.Buttons.First]
jb @f
cmp eax,[tab_bar.Buttons.Last]
ja @f
 
;// TAB CONTROL BUTTONS
 
add eax,-1000
imul ebp,eax,sizeof.TABITEM
add ebp,[tab_bar.Items]
cmp ebp,[tab_bar.Current.Ptr]
je @f
call set_cur_tab
call align_editor_in_tab
call draw_editor
call draw_statusbar
call draw_tabctl
 
@@:
jmp still.skip_write
 
btn.scroll_up:
dec [cur_tab.Editor.TopLeft.Y] ;! [top_line]
btn.vscroll_up:
dec [cur_editor.TopLeft.Y] ;! [top_line]
jns @f
inc [cur_tab.Editor.TopLeft.Y] ;! [top_line]
inc [cur_editor.TopLeft.Y] ;! [top_line]
ret
@@: call check_inv_all.skip_check
ret
 
btn.scroll_down:
inc [cur_tab.Editor.TopLeft.Y] ;! [top_line]
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
btn.vscroll_down:
inc [cur_editor.TopLeft.Y] ;! [top_line]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
sub eax,[lines.scr]
cmp eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
jge @f
dec [cur_tab.Editor.TopLeft.Y] ;! [top_line]
dec [cur_editor.TopLeft.Y] ;! [top_line]
ret
@@: call check_inv_all.skip_check
ret
 
btn.scroll_left:
dec [cur_tab.Editor.TopLeft.X] ;! [left_col]
btn.hscroll_up:
dec [cur_editor.TopLeft.X] ;! [left_col]
jns @f
inc [cur_tab.Editor.TopLeft.X] ;! [left_col]
inc [cur_editor.TopLeft.X] ;! [left_col]
ret;jmp still.skip_write
@@: call check_inv_all.skip_check
ret
 
btn.scroll_right:
inc [cur_tab.Editor.TopLeft.X] ;! [left_col]
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns]
btn.hscroll_down:
inc [cur_editor.TopLeft.X] ;! [left_col]
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
sub eax,[columns.scr]
cmp eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jge @f
dec [cur_tab.Editor.TopLeft.X] ;! [left_col]
dec [cur_editor.TopLeft.X] ;! [left_col]
ret
@@: call check_inv_all.skip_check
ret
 
btn.tabctl_right:
call get_hidden_tabitems_number
or eax,eax
jz @f
inc [tab_bar.Items.Left]
call draw_tabctl
@@: ret
btn.tabctl_left:
dec [tab_bar.Items.Left]
jns @f
inc [tab_bar.Items.Left]
@@: call draw_tabctl
ret
 
btn.search:
key.f3:
call search
70,7 → 103,7
 
func search
cld
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
mov edx,ecx
call get_line_offset
cmp word[esi],0
80,9 → 113,9
or eax,eax
jz .end_line.2
mov ecx,eax
sub ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
sub ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
push esi
add esi,[cur_tab.Editor.Caret.X] ;! esi,[pos.x]
add esi,[cur_editor.Caret.X] ;! esi,[pos.x]
jmp @f
 
.next_line:
118,15 → 151,15
 
.found:
add esp,4
mov [cur_tab.Editor.Caret.Y],edx ;! [pos.y],edx
mov [cur_tab.Editor.SelStart.Y],edx ;! [sel.y],edx
mov [cur_editor.Caret.Y],edx ;! [pos.y],edx
mov [cur_editor.SelStart.Y],edx ;! [sel.y],edx
mov ecx,edx
lea eax,[esi-4]
call get_line_offset
sub eax,esi
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
add eax,[s_search.size]
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
mov [s_status],0
clc
ret
173,34 → 206,37
@@:
 
xor eax,eax
mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax
mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],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_tab.Editor.Modified],al ;! [modified],al
mov [cur_editor.Modified],al ;! [modified],al
 
; enable color syntax for ASM and INC files:
mov [cur_tab.Editor.AsmMode],al ;! [asm_mode],al
mov [cur_editor.AsmMode],al ;! [asm_mode],al
 
mov eax,[f_info.length]
add eax,f_info.path
mov byte[eax],0
mov ecx, dword [eax-3]
; 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_tab.Editor.AsmMode] ;! [asm_mode]
inc [cur_editor.AsmMode] ;! [asm_mode]
jmp .nocol
@@: cmp ecx, 'inc'
jne .nocol
inc [cur_tab.Editor.AsmMode] ;! [asm_mode]
inc [cur_editor.AsmMode] ;! [asm_mode]
.nocol:
 
update_caption:
lea esi,[cur_tab.Editor.FilePath] ;! mov esi,f_info.path
lea esi,[cur_editor.FilePath] ;! mov esi,f_info.path
mov edi,s_title
 
@@: lodsb
/programs/develop/tinypad/trunk/tp-common.asm
4,62 → 4,62
push eax ebx
xor bl,bl
.chk_y:
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
or eax,eax
jge @f
mov [cur_tab.Editor.Caret.Y],0 ;! [pos.y],0
mov [cur_editor.Caret.Y],0 ;! [pos.y],0
jmp .chk_dy
@@: cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines]
@@: cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jl .chk_dy
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
dec eax
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
.chk_dy:
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
cmp eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
cmp eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
jle @f
m2m [cur_tab.Editor.TopLeft.Y],[cur_tab.Editor.Caret.Y]
m2m [cur_editor.TopLeft.Y],[cur_editor.Caret.Y]
;! push [pos.y]
;! pop [top_line]
inc bl
@@: add eax,[lines.scr]
cmp eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
cmp eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
jg .chk_x
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
sub eax,[lines.scr]
inc eax
mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax
mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
inc bl
.chk_x:
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
or eax,eax
jge @f
mov [cur_tab.Editor.Caret.X],0 ;! [pos.x],0
mov [cur_editor.Caret.X],0 ;! [pos.x],0
jmp .chk_dx
@@: cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
@@: cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jl .chk_dx
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns]
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
.chk_dx:
mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jle @f
m2m [cur_tab.Editor.TopLeft.X],[cur_tab.Editor.Caret.X]
m2m [cur_editor.TopLeft.X],[cur_editor.Caret.X]
;! push [pos.x]
;! pop [left_col]
inc bl
@@: add eax,[columns.scr]
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jg @f
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
sub eax,[columns.scr]
inc eax
mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax
mov [cur_editor.TopLeft.X],eax ;! [left_col],eax
inc bl
@@: cmp [mev],MEV_LDOWN
jne .exit
push [cur_tab.Editor.Caret.X] [cur_tab.Editor.Caret.Y] ;! [pos.x] [pos.y]
pop [cur_tab.Editor.SelStart.Y] [cur_tab.Editor.SelStart.X] ;! [sel.y] [sel.x]
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
74,13 → 74,13
func clear_selection ;////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
push eax ebx
mov eax,[cur_tab.Editor.SelStart.Y] ;! eax,[sel.y]
mov ebx,[cur_tab.Editor.Caret.Y] ;! ebx,[pos.y]
mov eax,[cur_editor.SelStart.Y] ;! eax,[sel.y]
mov ebx,[cur_editor.Caret.Y] ;! ebx,[pos.y]
cmp eax,ebx
jle @f
xchg eax,ebx
@@: push [cur_tab.Editor.Caret.X] [cur_tab.Editor.Caret.Y] ;! [pos.x] [pos.y]
pop [cur_tab.Editor.SelStart.Y] [cur_tab.Editor.SelStart.X] ;! [sel.y] [sel.x]
@@: 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]
call draw_file.ex
pop ebx eax
ret
107,24 → 107,24
func check_bottom_right ;/////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
push eax
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
add eax,[lines.scr]
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines]
cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jbe .lp1
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
sub eax,[lines.scr]
jns @f
xor eax,eax
@@: mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax
.lp1: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
@@: mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
.lp1: mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
add eax,[columns.scr]
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jbe .exit
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns]
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
sub eax,[columns.scr]
jns @f
xor eax,eax
@@: mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax
@@: mov [cur_editor.TopLeft.X],eax ;! [left_col],eax
.exit:
pop eax
ret
150,12 → 150,12
;-----------------------------------------------------------------------------
func check_inv_all ;//////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
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_tab.Editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_tab.Editor.TopLeft.Y],ecx ;! [top_line],ecx
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
169,9 → 169,9
jb .low
mov edx,ecx
add edx,[lines.scr]
cmp edx,[cur_tab.Editor.Lines] ;! edx,[lines]
cmp edx,[cur_editor.Lines.Count] ;! edx,[lines]
jbe @f
mov edx,[cur_tab.Editor.Lines] ;! edx,[lines]
mov edx,[cur_editor.Lines.Count] ;! edx,[lines]
@@: cmp eax,edx
jb @f
lea ecx,[eax+1]
182,9 → 182,9
.low: mov ecx,eax
@@: mov edx,ecx
add edx,[lines.scr]
cmp edx,[cur_tab.Editor.Lines] ;! edx,[lines]
cmp edx,[cur_editor.Lines.Count] ;! edx,[lines]
jbe @f
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines]
mov ecx,[cur_editor.Lines.Count] ;! ecx,[lines]
sub ecx,[lines.scr]
jns @f
xor ecx,ecx
191,8 → 191,8
@@:;mov [top_line],ecx
 
pushad
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
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
203,10 → 203,10
sub ebx,[columns.scr]
jmp @f
.lp1: mov ebx,eax
@@: mov [cur_tab.Editor.TopLeft.X],ebx ;! [left_col],ebx
@@: mov [cur_editor.TopLeft.X],ebx ;! [left_col],ebx
 
.exit:
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
popad
 
ret
232,7 → 232,7
; ESI = line data offset
;-----------------------------------------------------------------------------
push eax ecx
mov esi,[cur_tab.Editor.Data] ;! AREA_EDIT
mov esi,[cur_editor.Lines] ;! AREA_EDIT
@@: dec ecx
js .exit
movzx eax,word[esi]
248,10 → 248,10
;-----------------------------------------------------------------------------
pushad
mov [sel.selected],1
mov eax,[cur_tab.Editor.SelStart.X] ;! eax,[sel.x]
mov ebx,[cur_tab.Editor.SelStart.Y] ;! ebx,[sel.y]
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
mov edx,[cur_tab.Editor.Caret.Y] ;! edx,[pos.y]
mov eax,[cur_editor.SelStart.X] ;! eax,[sel.x]
mov ebx,[cur_editor.SelStart.Y] ;! ebx,[sel.y]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
mov edx,[cur_editor.Caret.Y] ;! edx,[pos.y]
cmp ebx,edx
jl .lp2
jne @f
508,7 → 508,7
jbe .exit
sub ecx,edx
push ecx
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
add edi,[edi-4]
dec edi
mov eax,esi
563,7 → 563,7
mov [edi-4],bx
add edi,[sel.begin.x]
lea esi,[esi+eax+4]
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2
add ecx,[ecx-4]
sub ecx,esi
cld
570,7 → 570,7
rep movsb
mov eax,[sel.end.y]
sub eax,[sel.begin.y]
sub [cur_tab.Editor.Lines],eax ;! [lines],eax
sub [cur_editor.Lines.Count],eax ;! [lines],eax
jmp .exit
 
.single_line:
589,7 → 589,7
lea edi,[esi+4]
add edi,[sel.begin.x]
lea esi,[edi+ecx]
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2
add ecx,[ecx-4]
sub ecx,esi
cld
597,13 → 597,13
 
.exit:
mov eax,[sel.begin.x]
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
mov eax,[sel.begin.y]
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
popad
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
clc
ret
 
/programs/develop/tinypad/trunk/tp-defines.inc
3,6 → 3,7
define mm.File.Open key.ctrl_o
define mm.File.Save key.ctrl_s
define mm.File.SaveAs key.shift_ctrl_s
define mm.File.Close key.ctrl_f4
define mm.File.Exit key.alt_x
 
define mm.Edit.Cut key.ctrl_x
/programs/develop/tinypad/trunk/tp-dialog.asm
313,10 → 313,10
mov [copy_size],eax
mov [copy_count],1
 
push [cur_tab.Editor.SelStart.X] ;! [sel.x]
push [cur_editor.SelStart.X] ;! [sel.x]
call init_sel_vars
call key.ctrl_v
pop [cur_tab.Editor.SelStart.X] ;! [sel.x]
pop [cur_editor.SelStart.X] ;! [sel.x]
 
mov eax,[copy_buf]
call mem.Free
/programs/develop/tinypad/trunk/tp-draw.asm
48,9 → 48,9
 
mov [top_ofs],ATOPH;+1
 
mov eax,[cur_tab.Editor.Bounds.Right]
sub eax,[cur_tab.Editor.Bounds.Left]
sub eax,[cur_tab.Editor.Gutter.Width]
mov eax,[cur_editor.Bounds.Right]
sub eax,[cur_editor.Bounds.Left]
sub eax,[cur_editor.Gutter.Width]
sub eax,SCRLW+LCHGW+4
cdq
mov ebx,6
57,8 → 57,8
div ebx
mov [columns.scr],eax
 
mov eax,[cur_tab.Editor.Bounds.Bottom]
sub eax,[cur_tab.Editor.Bounds.Top]
mov eax,[cur_editor.Bounds.Bottom]
sub eax,[cur_editor.Bounds.Top]
sub eax,SCRLW+3
cdq
mov ebx,LINEH
250,10 → 250,10
cmp eax,ebx
jle @f
xchg eax,ebx
@@: cmp eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
@@: cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
jge @f
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
@@: mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
@@: mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
add ecx,[lines.scr]
cmp ebx,ecx
jl @f
273,11 → 273,11
 
mov ebx,[top_ofs]
add ebx,[left_ofs-2]
sub eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
sub eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
imul eax,LINEH
add ebx,eax
 
imul ebp,[cur_tab.Editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536
imul ebp,[cur_editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536
or [draw_blines],-1
 
jmp draw_file.next_line
302,7 → 302,7
mov ebx,[top_ofs]
add ebx,[left_ofs-2]
 
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
push ecx
call get_line_offset
 
313,9 → 313,9
jle .exit
add esp,-4
 
imul ebp,[cur_tab.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_tab.Editor.Lines] ;! eax,[lines]
sub eax,[cur_editor.Lines] ;! eax,[lines]
mov [draw_blines],eax
 
.next_line:
346,7 → 346,7
cmp eax,[sel.end.y]
je .lp5
.lp2: mov eax,[sel.begin.x]
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jle .lp6.2
cmp eax,[columns.scr]
jge .lp6
369,7 → 369,7
cmp eax,[sel.end.y]
je .lp5
.lp4: mov eax,[sel.end.x]
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jle .lp6
cmp eax,[columns.scr]
jg .lp6.2
388,7 → 388,7
mov bx,ax
mov [in_sel],3
jmp .lp6
.lp5: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
.lp5: mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[sel.begin.x]
jge .lp4
add eax,[columns.scr]
397,7 → 397,7
mov eax,[sel.begin.x]
cmp eax,[sel.end.x]
je .lp6
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
imul eax,6
pushad
mov ebx,[sel.end.x]
471,13 → 471,13
 
push esi ebx
mov eax,ebx
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
cmp ebx,[columns.scr]
jge .skip_t
add ebx,esi
jle .skip_t
mov ebx,[esp+8+4*2] ;// 4*2=esi+ebx
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jge .qqq
sub edx,eax
add esi,eax
494,7 → 494,7
 
mov eax,[esp] ; ebx
add eax,[esp+4] ; esi
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
sub eax,[columns.scr]
jle .qweqwe
sub esi,eax
518,7 → 518,7
mov esi,[sel.begin.x]
sub esi,[esp]
pushad
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col]
mov ecx,[cur_editor.TopLeft.X] ;! ecx,[left_col]
sub ecx,[esp+4*8]
jle @f
sub esi,ecx
548,7 → 548,7
sub eax,[esp]
push ebx
mov ebx,[esp+4]
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
jge .ya2.1
add eax,ebx
.ya2.1:
580,7 → 580,7
sub esi,[esp]
push eax
mov eax,[esp+4]
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jge .nt3.1
add esi,eax
.nt3.1:
661,7 → 661,7
shl ebx,16
add ebx,[top_ofs]
mov edi,[sc.work_text]
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
inc ecx
mov edx,p_info+100
@@: pushad
679,10 → 679,10
popad
add ebx,LINEH
inc ecx
cmp ecx,[cur_tab.Editor.Lines] ;! ecx,[lines]
cmp ecx,[cur_editor.Lines] ;! ecx,[lines]
jg @f
mov esi,ecx
sub esi,[cur_tab.Editor.TopLeft.Y] ;! esi,[top_line]
sub esi,[cur_editor.TopLeft.Y] ;! esi,[top_line]
cmp esi,[lines.scr]
jbe @b
@@: add esp,4*8*2
707,8 → 707,8
add esp,4
cmp [bot_mode],0
jne @f
mov ebx,[cur_tab.Editor.Caret.X] ;! ebx,[pos.x]
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x]
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
js @f
cmp ebx,[columns.scr]
ja @f
718,8 → 718,8
push bx
shl ebx,16
pop bx
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
sub eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
sub eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
js @f
cmp eax,[lines.scr]
jge @f
805,15 → 805,15
; sub ebx,1*65536-2
 
push ebx
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines] ;! eax,[lines]
mov ebx,[lines.scr]
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
mov edx,[bot_ofs]
sub edx,[top_ofs]
add edx,-SCRLW*3+1
call get_scroll_vars
mov [cur_tab.Editor.VScroll.Top],eax ;! [vscrl_top],eax
mov [cur_tab.Editor.VScroll.Size],ebx ;! [vscrl_size],ebx
mov [cur_editor.VScroll.Top],eax ;! [vscrl_top],eax
mov [cur_editor.VScroll.Size],ebx ;! [vscrl_size],ebx
pop ebx
 
mov ecx,eax
829,7 → 829,7
; rol ecx,16
; movsx eax,cx
; sar ecx,16
push ebx ecx SCRLW [cur_tab.Editor.VScroll.Size] ;! ebx ecx SCRLW [vscrl_size]
push ebx ecx SCRLW [cur_editor.VScroll.Size] ;! ebx ecx SCRLW [vscrl_size]
dec dword[esp]
call draw_3d_panel
popad
838,7 → 838,7
inc ebx
 
mov ecx,[top_ofs-2]
mov cx,word[cur_tab.Editor.VScroll.Top] ;! cx,word[vscrl_top]
mov cx,word[cur_editor.VScroll.Top] ;! cx,word[vscrl_top]
add ecx,(SCRLW-1)*65536
mov edx,[sc.work];[color_tbl+4*5]
or cx,cx
846,8 → 846,8
mcall 13
@@:
mov ecx,[top_ofs]
add ecx,[cur_tab.Editor.VScroll.Top] ;! ecx,[vscrl_top]
add ecx,[cur_tab.Editor.VScroll.Size] ;! ecx,[vscrl_size]
add ecx,[cur_editor.VScroll.Top] ;! ecx,[vscrl_top]
add ecx,[cur_editor.VScroll.Size] ;! ecx,[vscrl_size]
add ecx,SCRLW-1
mov di,cx
shl ecx,16
934,20 → 934,20
; inc ecx
 
push ecx
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns]
mov eax,[cur_editor.Columns] ;! eax,[columns]
mov ebx,[columns.scr]
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col]
mov ecx,[cur_editor.TopLeft.X] ;! ecx,[left_col]
mov edx,[p_info.client_box.width]
add edx,-(SCRLW*3)
call get_scroll_vars
mov [cur_tab.Editor.HScroll.Top],eax ;! [hscrl_top],eax
mov [cur_tab.Editor.HScroll.Size],ebx ;! [hscrl_size],ebx
mov [cur_editor.HScroll.Top],eax ;! [hscrl_top],eax
mov [cur_editor.HScroll.Size],ebx ;! [hscrl_size],ebx
pop ecx
 
mov ebx,eax
add ebx,1+SCRLW
shl ebx,16
mov bx,word[cur_tab.Editor.HScroll.Size] ;! bx,word[hscrl_size]
mov bx,word[cur_editor.HScroll.Size] ;! bx,word[hscrl_size]
 
; mcall 13,,,[sc.work_button]
;!!!!!!!!!!!!!!!!!!
963,11 → 963,11
;!!!!!!!!!!!!!!!!!!
 
mov ebx,(1+SCRLW)*65536
mov bx,word[cur_tab.Editor.HScroll.Top] ;! bx,word[hscrl_top]
mov bx,word[cur_editor.HScroll.Top] ;! bx,word[hscrl_top]
mcall 13,,,[sc.work];[color_tbl+4*5]
mov ebx,1+SCRLW
add ebx,[cur_tab.Editor.HScroll.Top] ;! ebx,[hscrl_top]
add ebx,[cur_tab.Editor.HScroll.Size] ;! ebx,[hscrl_size]
add ebx,[cur_editor.HScroll.Top] ;! ebx,[hscrl_top]
add ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size]
mov di,bx
shl ebx,16
mov bx,word[p_info.client_box.width]
1011,7 → 1011,7
; EDX = string
; ESI = length
;-----------------------------------------------------------------------------
cmp [cur_tab.Editor.AsmMode],0 ;! [asm_mode],0
cmp [cur_editor.AsmMode],0 ;! [asm_mode],0
je .plain.text
xor ebx,ebx
mov edx,ecx
1159,7 → 1159,7
and ecx,0x0000FFFF
push ecx
 
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
inc eax
mov ecx,10
mov edi,p_info+0x100;htext2.pos1
1167,7 → 1167,7
call uint2str
mov al,','
stosb
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
inc eax
call uint2str
 
1182,7 → 1182,7
sub ebx,edi
mcall 4,,[sc.work_text],p_info+0x100
 
cmp [cur_tab.Editor.Modified],0 ;! [modified],0
cmp [cur_editor.Modified],0 ;! [modified],0
je @f
and ebx,0x0000FFFF
; add ebx,[left_ofs-2]
1233,4 → 1233,88
 
pop ecx ebx
ret
endf
endf
 
func calc_middle
shr eax,1
shr ebx,1
and eax,0x007F7F7F
and ebx,0x007F7F7F
add eax,ebx
ret
endf
 
func calc_3d_colors
pushad
m2m [cl_3d_normal],[sc.work]
m2m [cl_3d_inset],[sc.work_graph]
push [cl_3d_normal]
add byte[esp],48
jnc @f
mov byte[esp],255
@@: add byte[esp+1],48
jnc @f
mov byte[esp+1],255
@@: add byte[esp+2],48
jnc @f
mov byte[esp+2],255
@@: pop [cl_3d_outset]
mov eax,[cl_3d_inset]
mov ebx,[cl_3d_outset]
call calc_middle
mov [cl_3d_pushed],eax
mov eax,[cl_3d_normal]
mov ebx,[sc.work_text]
call calc_middle
mov [cl_3d_grayed],eax
popad
ret
endf
 
func draw_3d_panel ; x,y,w,h
push eax ebx ecx edx
cmp dword[esp+16+8],4
jl .exit
cmp dword[esp+16+4],4
jl .exit
mov ebx,[esp+16+16-2]
mov bx,[esp+16+8]
inc ebx
mov ecx,[esp+16+12-2]
mov cx,[esp+16+4]
inc ecx
mcall 13,,,[cl_3d_normal]
dec ebx
add bx,[esp+16+16]
mov cx,[esp+16+12]
mcall 38,,,[cl_3d_inset]
add ecx,[esp+16+4-2]
add cx,[esp+16+4]
mcall
mov bx,[esp+16+16]
mov ecx,[esp+16+12-2]
mov cx,[esp+16+4]
add cx,[esp+16+12]
mcall
add ebx,[esp+16+8-2]
add bx,[esp+16+8]
mcall
mov ebx,[esp+16+16-2]
mov bx,[esp+16+8]
add bx,[esp+16+16]
add ebx,1*65536-1
mov ecx,[esp+16+12-2]
mov cx,[esp+16+12]
add ecx,0x00010001
mcall ,,,[cl_3d_outset]
mov bx,[esp+16+16]
inc ebx
mov ecx,[esp+16+12-2]
mov cx,[esp+16+4]
add cx,[esp+16+12]
add ecx,2*65536-1
mcall
.exit:
pop edx ecx ebx eax
ret 4*4
endf
/programs/develop/tinypad/trunk/tp-editor.asm
1,43 → 1,43
 
;-----------------------------------------------------------------------------
func draw_editor ;////////////////////////////////////////////////////////////
func draw_editor ;///// DRAW EDITOR //////////////////////////////////////////
;-----------------------------------------------------------------------------
 
mov ebx,[cur_tab.Editor.Bounds.Left-2]
mov bx,word[cur_tab.Editor.Bounds.Right]
sub bx,word[cur_tab.Editor.Bounds.Left]
mov ebx,[cur_editor.Bounds.Left-2]
mov bx,word[cur_editor.Bounds.Right]
sub bx,word[cur_editor.Bounds.Left]
inc ebx
mov ecx,[cur_tab.Editor.Bounds.Top-2]
mov cx,word[cur_tab.Editor.Bounds.Bottom]
sub cx,word[cur_tab.Editor.Bounds.Top]
mov ecx,[cur_editor.Bounds.Top-2]
mov cx,word[cur_editor.Bounds.Bottom]
sub cx,word[cur_editor.Bounds.Top]
inc ecx
mov edx,[cl_3d_inset]
call draw_framerect
@^
mov ebx,[cur_tab.Editor.Bounds.Left-2]
mov bx,word[cur_tab.Editor.Bounds.Right]
mov ecx,[cur_tab.Editor.Bounds.Top-2]
mov cx,word[cur_tab.Editor.Bounds.Top]
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_tab.Editor.Bounds.Bottom-2]
mov cx,word[cur_tab.Editor.Bounds.Bottom]
mov ecx,[cur_editor.Bounds.Bottom-2]
mov cx,word[cur_editor.Bounds.Bottom]
mcall
mov bx,word[cur_tab.Editor.Bounds.Left]
mov cx,word[cur_tab.Editor.Bounds.Top]
mov bx,word[cur_editor.Bounds.Left]
mov cx,word[cur_editor.Bounds.Top]
mcall
mov ebx,[cur_tab.Editor.Bounds.Right-2]
mov bx,word[cur_tab.Editor.Bounds.Right]
mov cx,word[cur_tab.Editor.Bounds.Top]
mov ebx,[cur_editor.Bounds.Right-2]
mov bx,word[cur_editor.Bounds.Right]
mov cx,word[cur_editor.Bounds.Top]
mcall
^@
mov [cur_tab.Editor.Gutter.Visible],0
mov [cur_editor.Gutter.Visible],0
test [options],OPTS_LINENUMS
jnz @f
xor eax,eax ;! mov eax,2+LCHGW
jmp .lp1
@@: inc [cur_tab.Editor.Gutter.Visible]
@@: inc [cur_editor.Gutter.Visible]
mov edi,p_info+100
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
mov ecx,10
call uint2str
lea eax,[edi-p_info-100]
46,7 → 46,7
mov eax,3
@@: imul eax,6
add eax,8
.lp1: mov [cur_tab.Editor.Gutter.Width],eax ;! [left_ofs],eax
.lp1: mov [cur_editor.Gutter.Width],eax ;! [left_ofs],eax
mov [left_ofs],eax
 
call draw_editor_gutter
59,36 → 59,36
endf
 
;-----------------------------------------------------------------------------
func draw_editor_gutter ;/////////////////////////////////////////////////////
func draw_editor_gutter ;///// DRAW EDITOR GUTTER (LEFT PANEL) ///////////////
;-----------------------------------------------------------------------------
cmp [cur_tab.Editor.Gutter.Visible],0
cmp [cur_editor.Gutter.Visible],0
je .exit
 
add esp,-4*8*2
 
mov ebx,[cur_tab.Editor.Bounds.Left-2]
mov bx,word[cur_tab.Editor.Gutter.Width]
mov ebx,[cur_editor.Bounds.Left-2]
mov bx,word[cur_editor.Gutter.Width]
add ebx,0x00010000
mov ecx,[cur_tab.Editor.Bounds.Top-2]
mov cx,word[cur_tab.Editor.Bounds.Bottom]
sub cx,word[cur_tab.Editor.Bounds.Top]
mov ecx,[cur_editor.Bounds.Top-2]
mov cx,word[cur_editor.Bounds.Bottom]
sub cx,word[cur_editor.Bounds.Top]
add cx,-SCRLW
add ecx,0x00010000
dec cx
mcall 13,,,[cl_3d_normal]
 
add bx,word[cur_tab.Editor.Bounds.Left]
add bx,word[cur_editor.Bounds.Left]
push bx
shl ebx,16
pop bx
add ecx,[cur_tab.Editor.Bounds.Top]
add ecx,[cur_editor.Bounds.Top]
mcall 38,,,[cl_3d_inset]
 
add ebx,-2*65536
mov bx,word[cur_tab.Editor.Bounds.Top]
mov bx,word[cur_editor.Bounds.Top]
add bx,3
mov edi,[sc.work_text]
mov ecx,[cur_tab.Editor.TopLeft.Y]
mov ecx,[cur_editor.TopLeft.Y]
inc ecx
mov edx,p_info+100
@@: pushad
106,10 → 106,10
popad
add ebx,LINEH
inc ecx
cmp ecx,[cur_tab.Editor.Lines]
cmp ecx,[cur_editor.Lines.Count]
jg @f
mov esi,ecx
sub esi,[cur_tab.Editor.TopLeft.Y]
sub esi,[cur_editor.TopLeft.Y]
cmp esi,[lines.scr]
jbe @b
@@: add esp,4*8*2
119,15 → 119,14
endf
 
;-----------------------------------------------------------------------------
func draw_editor_vscroll ;////////////////////////////////////////////////////
func draw_editor_vscroll ;///// DRAW EDITOR VERTICAL SCROLL BAR //////////////
;-----------------------------------------------------------------------------
;!!!!!!!!!!!!!!!!!!
mov ebx,[cur_tab.Editor.Bounds.Right]
mov ebx,[cur_editor.Bounds.Right]
shl ebx,16
add ebx,(-SCRLW)*65536+SCRLW
mov ecx,[cur_tab.Editor.Bounds.Top-2]
mov ecx,[cur_editor.Bounds.Top-2]
mov cx,SCRLW
mcall 8,,,'UP' or 0x40000000
mcall 8,,,'VSL' or 0x40000000
pushad
sar ebx,16
sar ecx,16
135,7 → 134,6
call draw_3d_panel
popad
mov eax,8
;!!!!!!!!!!!!!!!!!!
 
pushad
push 0x18
146,11 → 144,10
add esp,4
popad
 
;!!!!!!!!!!!!!!!!!!
mov ecx,[cur_tab.Editor.Bounds.Bottom]
mov ecx,[cur_editor.Bounds.Bottom]
shl ecx,16
add ecx,(-SCRLW*2)*65536+SCRLW
mcall ,,,'DN' or 0x40000000
mcall ,,,'VSG' or 0x40000000
pushad
sar ebx,16
sar ecx,16
158,7 → 155,6
call draw_3d_panel
popad
mov eax,8
;!!!!!!!!!!!!!!!!!!
 
pushad
push 0x19
170,34 → 166,32
popad
 
push ebx
mov eax,[cur_tab.Editor.Lines]
mov eax,[cur_editor.Lines.Count]
mov ebx,[lines.scr]
mov ecx,[cur_tab.Editor.TopLeft.Y]
mov edx,[cur_tab.Editor.Bounds.Bottom]
sub edx,[cur_tab.Editor.Bounds.Top]
mov ecx,[cur_editor.TopLeft.Y]
mov edx,[cur_editor.Bounds.Bottom]
sub edx,[cur_editor.Bounds.Top]
add edx,-SCRLW*3+1
call get_scroll_vars
mov [cur_tab.Editor.VScroll.Top],eax
mov [cur_tab.Editor.VScroll.Size],ebx
mov [cur_editor.VScroll.Top],eax
mov [cur_editor.VScroll.Size],ebx
pop ebx
 
mov ecx,eax
add ecx,[cur_tab.Editor.Bounds.Top]
add ecx,[cur_editor.Bounds.Top]
add ecx,SCRLW+1
 
;!!!!!!!!!!!!!!!!!!
pushad
sar ebx,16
push ebx ecx SCRLW [cur_tab.Editor.VScroll.Size]
push ebx ecx SCRLW [cur_editor.VScroll.Size]
dec dword[esp]
call draw_3d_panel
popad
mov eax,13
;!!!!!!!!!!!!!!!!!!
add ebx,1*65536-1
 
mov ecx,[cur_tab.Editor.Bounds.Top-2]
mov cx,word[cur_tab.Editor.VScroll.Top]
mov ecx,[cur_editor.Bounds.Top-2]
mov cx,word[cur_editor.VScroll.Top]
add ecx,(SCRLW+1)*65536
mov edx,[sc.work]
or cx,cx
204,13 → 198,13
jle @f
mcall 13
@@:
mov ecx,[cur_tab.Editor.Bounds.Top]
add ecx,[cur_tab.Editor.VScroll.Top]
add ecx,[cur_tab.Editor.VScroll.Size]
mov ecx,[cur_editor.Bounds.Top]
add ecx,[cur_editor.VScroll.Top]
add ecx,[cur_editor.VScroll.Size]
add ecx,SCRLW+1
mov di,cx
shl ecx,16
mov cx,word[cur_tab.Editor.Bounds.Bottom]
mov cx,word[cur_editor.Bounds.Bottom]
sub cx,di
sub cx,SCRLW*2;+1
jle @f
221,8 → 215,8
push bx
rol ebx,16
pop bx
mov ecx,[cur_tab.Editor.Bounds.Top-2]
mov cx,word[cur_tab.Editor.Bounds.Bottom]
mov ecx,[cur_editor.Bounds.Top-2]
mov cx,word[cur_editor.Bounds.Bottom]
add ecx,(SCRLW)*65536-SCRLW*2-1
mcall 38,,,[cl_3d_inset]
 
230,14 → 224,14
endf
 
;-----------------------------------------------------------------------------
func draw_editor_hscroll ;////////////////////////////////////////////////////
func draw_editor_hscroll ;///// DRAW EDITOR HORIZONTAL SCROLL BAR ////////////
;-----------------------------------------------------------------------------
mov ebx,[cur_tab.Editor.Bounds.Left-2]
mov ebx,[cur_editor.Bounds.Left-2]
mov bx,SCRLW
mov ecx,[cur_tab.Editor.Bounds.Bottom]
mov ecx,[cur_editor.Bounds.Bottom]
shl ecx,16
add ecx,(-SCRLW)*65536+SCRLW
mcall 8,,,'LT' or 0x40000000
mcall 8,,,'HSL' or 0x40000000
pushad
sar ebx,16
sar ecx,16
244,7 → 238,6
push ebx ecx SCRLW SCRLW
call draw_3d_panel
popad
;!!!!!!!!!!!!!!!!!!
 
pushad
push 0x1B
255,11 → 248,10
add esp,4
popad
 
;!!!!!!!!!!!!!!!!!!
mov ebx,[cur_tab.Editor.Bounds.Right]
mov ebx,[cur_editor.Bounds.Right]
shl ebx,16
add ebx,(-SCRLW*2)*65536+SCRLW
mcall 8,,,'RT' or 0x40000000
mcall 8,,,'HSG' or 0x40000000
pushad
sar ebx,16
sar ecx,16
266,7 → 258,6
push ebx ecx SCRLW SCRLW
call draw_3d_panel
popad
;!!!!!!!!!!!!!!!!!!
 
pushad
push 0x1A
278,23 → 269,22
popad
 
push ecx
mov eax,[cur_tab.Editor.Columns]
mov eax,[cur_editor.Columns.Count]
mov ebx,[columns.scr]
mov ecx,[cur_tab.Editor.TopLeft.X]
mov edx,[cur_tab.Editor.Bounds.Right]
mov ecx,[cur_editor.TopLeft.X]
mov edx,[cur_editor.Bounds.Right]
add edx,-(SCRLW*3)
call get_scroll_vars
mov [cur_tab.Editor.HScroll.Top],eax
mov [cur_tab.Editor.HScroll.Size],ebx
mov [cur_editor.HScroll.Top],eax
mov [cur_editor.HScroll.Size],ebx
pop ecx
 
mov ebx,eax
add ebx,[cur_tab.Editor.Bounds.Left]
add ebx,[cur_editor.Bounds.Left]
add ebx,SCRLW+1
shl ebx,16
mov bx,word[cur_tab.Editor.HScroll.Size]
mov bx,word[cur_editor.HScroll.Size]
 
;!!!!!!!!!!!!!!!!!!
pushad
sar ecx,16
rol ebx,16
304,28 → 294,27
push eax ecx ebx SCRLW
call draw_3d_panel
popad
;!!!!!!!!!!!!!!!!!!
add ecx,1*65536-1
 
mov ebx,[cur_tab.Editor.Bounds.Left-2]
mov bx,word[cur_tab.Editor.Bounds.Left]
mov bx,word[cur_tab.Editor.HScroll.Top]
mov ebx,[cur_editor.Bounds.Left-2]
mov bx,word[cur_editor.Bounds.Left]
mov bx,word[cur_editor.HScroll.Top]
add ebx,(1+SCRLW)*65536
mcall 13,,,[sc.work]
mov ebx,[cur_tab.Editor.Bounds.Left]
mov ebx,[cur_editor.Bounds.Left]
add ebx,1+SCRLW
add ebx,[cur_tab.Editor.HScroll.Top]
add ebx,[cur_tab.Editor.HScroll.Size]
add ebx,[cur_editor.HScroll.Top]
add ebx,[cur_editor.HScroll.Size]
mov di,bx
shl ebx,16
mov bx,word[cur_tab.Editor.Bounds.Right]
mov bx,word[cur_editor.Bounds.Right]
sub bx,di
sub bx,SCRLW*2
jle @f
mcall
@@:
mov ebx,[cur_tab.Editor.Bounds.Left-2]
mov bx,word[cur_tab.Editor.Bounds.Right]
mov ebx,[cur_editor.Bounds.Left-2]
mov bx,word[cur_editor.Bounds.Right]
add ebx,(SCRLW)*65536-SCRLW*2-1
rol ecx,16
dec cx
338,10 → 327,10
endf
 
;-----------------------------------------------------------------------------
func draw_editor_text ;///////////////////////////////////////////////////////
func draw_editor_text ;///// DRAW EDITOR TEXT ////////////////////////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Bounds.Bottom]
sub eax,[cur_tab.Editor.Bounds.Top]
mov eax,[cur_editor.Bounds.Bottom]
sub eax,[cur_editor.Bounds.Top]
cmp eax,LINEH
jge @f
ret
351,11 → 340,11
 
pushad
 
mov eax,[cur_tab.Editor.Bounds.Left]
add eax,[cur_tab.Editor.Gutter.Width]
mov eax,[cur_editor.Bounds.Left]
add eax,[cur_editor.Gutter.Width]
add eax,LCHGW+3
mov [left_ofs],eax
mov eax,[cur_tab.Editor.Bounds.Top]
mov eax,[cur_editor.Bounds.Top]
add eax,3
mov [top_ofs],eax
 
362,7 → 351,7
mov ebx,[top_ofs]
add ebx,[left_ofs-2]
 
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
push ecx
call get_line_offset
 
373,9 → 362,9
jle .exit
add esp,-4
 
imul ebp,[cur_tab.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_tab.Editor.Lines] ;! eax,[lines]
sub eax,[cur_editor.Lines.Count] ;! eax,[lines]
mov [draw_blines],eax
 
.next_line:
385,8 → 374,8
mov ecx,ebx
shl ecx,16
mov cl,LINEH
mov ebx,[cur_tab.Editor.Bounds.Right]
;sub ebx,[cur_tab.Editor.Bounds.Left]
mov ebx,[cur_editor.Bounds.Right]
;sub ebx,[cur_editor.Bounds.Left]
add ebx,-SCRLW
add ebx,[left_ofs-2]
sub ebx,[left_ofs]
407,7 → 396,7
cmp eax,[sel.end.y]
je .lp5
.lp2: mov eax,[sel.begin.x]
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jle .lp6.2
cmp eax,[columns.scr]
jge .lp6
429,7 → 418,7
cmp eax,[sel.end.y]
je .lp5
.lp4: mov eax,[sel.end.x]
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jle .lp6
cmp eax,[columns.scr]
jg .lp6.2
448,7 → 437,7
mov bx,ax
mov [in_sel],3
jmp .lp6
.lp5: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
.lp5: mov eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[sel.begin.x]
jge .lp4
add eax,[columns.scr]
457,7 → 446,7
mov eax,[sel.begin.x]
cmp eax,[sel.end.x]
je .lp6
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
imul eax,6
pushad
mov ebx,[sel.end.x]
504,6 → 493,7
jz @f
mov edx,[color_tbl+4*9]
@@: mov ebx,[left_ofs]
 
add ebx,-LCHGW-2;-4
shl ebx,16
mov bx,LCHGW
530,13 → 520,13
 
push esi ebx
mov eax,ebx
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
cmp ebx,[columns.scr]
jge .skip_t
add ebx,esi
jle .skip_t
mov ebx,[esp+8+4*2] ;// 4*2=esi+ebx
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jge .qqq
sub edx,eax
add esi,eax
553,7 → 543,7
 
mov eax,[esp] ; ebx
add eax,[esp+4] ; esi
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
sub eax,[columns.scr]
jle .qweqwe
sub esi,eax
577,7 → 567,7
mov esi,[sel.begin.x]
sub esi,[esp]
pushad
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col]
mov ecx,[cur_editor.TopLeft.X] ;! ecx,[left_col]
sub ecx,[esp+4*8]
jle @f
sub esi,ecx
607,7 → 597,7
sub eax,[esp]
push ebx
mov ebx,[esp+4]
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col]
sub ebx,[cur_editor.TopLeft.X] ;! ebx,[left_col]
jge .ya2.1
add eax,ebx
.ya2.1:
639,7 → 629,7
sub esi,[esp]
push eax
mov eax,[esp+4]
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
jge .nt3.1
add esi,eax
.nt3.1:
697,15 → 687,15
jl @f
mov ecx,[esp-8]
shl ecx,16
mov cx,word[cur_tab.Editor.Bounds.Bottom]
mov cx,word[cur_editor.Bounds.Bottom]
sub cx,[esp-8]
add cx,-SCRLW
mov eax,[cur_tab.Editor.Bounds.Left]
add eax,[cur_tab.Editor.Gutter.Width]
mov eax,[cur_editor.Bounds.Left]
add eax,[cur_editor.Gutter.Width]
inc eax
mov ebx,eax
shl ebx,16
mov bx,word[cur_tab.Editor.Bounds.Right]
mov bx,word[cur_editor.Bounds.Right]
sub bx,ax
add ebx,-SCRLW
mcall 13,,,[color_tbl+4*5]
717,12 → 707,12
endf
 
;-----------------------------------------------------------------------------
func draw_editor_caret ;//////////////////////////////////////////////////////
func draw_editor_caret ;///// DRAW EDITOR TEXT CARET /////////////////////////
;-----------------------------------------------------------------------------
cmp [bot_mode],0
jne @f
mov ebx,[cur_tab.Editor.Caret.X]
sub ebx,[cur_tab.Editor.TopLeft.X]
mov ebx,[cur_editor.Caret.X]
sub ebx,[cur_editor.TopLeft.X]
js @f
cmp ebx,[columns.scr]
ja @f
732,8 → 722,8
push bx
shl ebx,16
pop bx
mov eax,[cur_tab.Editor.Caret.Y]
sub eax,[cur_tab.Editor.TopLeft.Y]
mov eax,[cur_editor.Caret.Y]
sub eax,[cur_editor.TopLeft.Y]
js @f
cmp eax,[lines.scr]
jge @f
/programs/develop/tinypad/trunk/tp-files.asm
1,6 → 1,7
;-----------------------------------------------------------------------------
func save_file ;//////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
ret ; DISALLOW FOR NOW
 
mov esi,tb_opensave.text
mov edi,f_info.path
10,7 → 11,7
rep movsb
mov byte[edi],0
 
mov esi,[cur_tab.Editor.Data] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum)
mov esi,[cur_editor.Lines] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum)
mov edi,0 ;!!! AREA_TEMP
 
.new_string:
28,16 → 29,6
jmp .exit.2
 
.systree_save:
;! mov eax,[filelen]
; mov [f_info+8],edi ;! eax
; mov [f_info+0],1
; mov esi,s_fname
; mov edi,f_info.path
; mov ecx,PATHL
; cld
; rep movsb
;mcall 58,f_info
 
mov [f_info70+0],2
mov [f_info70+12],edi
mov [f_info70+16],0 ;!!! AREA_TEMP
51,7 → 42,7
jnz .exit.2
 
.exit:
mov [cur_tab.Editor.Modified],0 ;! [modified],0
mov [cur_editor.Modified],0 ;! [modified],0
clc
ret
 
197,7 → 188,6
push ecx esi edi
mov esi,tb_opensave.text
lea edi,[ebp+TABITEM.Editor.FilePath]
;mov ecx,[f_info.length]
movzx ecx,[tb_opensave.length]
rep movsb
mov byte[edi],0
225,14 → 215,15
; EBP = EDITOR*
;-----------------------------------------------------------------------------
call get_lines_in_file
mov [ebp+EDITOR.Lines],eax
inc eax
mov [ebp+EDITOR.Lines.Count],eax
imul ebx,eax,14
add ebx,ecx
mov eax,[ebp+EDITOR.Data]
mov eax,[ebp+EDITOR.Lines]
call mem.ReAlloc
mov [ebp+EDITOR.Data],eax
mov [ebp+EDITOR.Lines],eax
 
mov [ebp+EDITOR.Columns],0
mov [ebp+EDITOR.Columns.Count],0
mov edi,eax
mov edx,ecx
 
266,9 → 257,9
sub eax,10
jnz @f
inc eax
@@: cmp eax,[ebp+EDITOR.Columns] ;! eax,[columns]
@@: cmp eax,[ebp+EDITOR.Columns.Count] ;! eax,[columns]
jbe @f
mov [ebp+EDITOR.Columns],eax ;! [columns],eax
mov [ebp+EDITOR.Columns.Count],eax ;! [columns],eax
@@: mov [ebp+EDITOR.Modified],0 ;! [modified],0
ret
 
282,11 → 273,11
lea eax,[edi-4]
sub eax,ebx
mov [ebx],eax
;inc [cur_tab.Editor.Lines] ;! [lines]
; inc [cur_editor.Lines] ;! [lines]
add eax,-10
cmp eax,[ebp+EDITOR.Columns] ;! eax,[columns]
cmp eax,[ebp+EDITOR.Columns.Count] ;! eax,[columns]
jbe .next_line
mov [ebp+EDITOR.Columns],eax ;! [columns],eax
mov [ebp+EDITOR.Columns.Count],eax ;! [columns],eax
jmp .next_line
 
.TB: lea eax,[edi-4]
/programs/develop/tinypad/trunk/tp-key.asm
46,13 → 46,13
jmp still
@@:
 
mov esi,accel_table
mov esi,accel_table_main
.acc: cmp eax,[esi]
jne @f
test [options],OPTS_SECURESEL
jz .lp1
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
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]
.lp1: mov [s_status],0
call dword[esi+4]
jmp still
74,8 → 74,8
 
test [options],OPTS_SECURESEL
jz .lp2
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
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]
jmp .put
.lp2: call delete_selection
 
85,24 → 85,24
jne @f
mov al,']'
call .lp3
dec [cur_tab.Editor.Caret.X] ;! [pos.x]
dec [cur_editor.Caret.X] ;! [pos.x]
jmp .put
@@: cmp al,'('
jne @f
mov al,')'
call .lp3
dec [cur_tab.Editor.Caret.X] ;! [pos.x]
dec [cur_editor.Caret.X] ;! [pos.x]
jmp .put
@@: cmp al,'{'
jne .put
mov al,'}'
call .lp3
dec [cur_tab.Editor.Caret.X] ;! [pos.x]
dec [cur_editor.Caret.X] ;! [pos.x]
 
.put: pop eax
push still
inc [cur_tab.Editor.SelStart.X] ;! [sel.x]
.lp3: push [cur_tab.Editor.Caret.X] eax ;! [pos.x] eax
inc [cur_editor.SelStart.X] ;! [sel.x]
.lp3: push [cur_editor.Caret.X] eax ;! [pos.x] eax
inc dword[esp+4]
mov eax,1
jmp key.tab.direct
111,14 → 111,14
func key.ctrl_a ;///// SELECT ALL DOCUMENT ///////////////////////////////////
;-----------------------------------------------------------------------------
xor eax,eax
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines]
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
mov ecx,[cur_editor.Lines.Count] ;! ecx,[lines]
dec ecx
mov [cur_tab.Editor.Caret.Y],ecx ;! [pos.y],ecx
mov [cur_editor.Caret.Y],ecx ;! [pos.y],ecx
call get_line_offset
call get_real_length
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
call draw_file
ret
endf
147,7 → 147,7
@@: mov al,[tb_opensave.length]
mov [tb_opensave.pos.x],al
mov [tb_opensave.sel.x],0
mov [tb_casesen],1
mov [tb_casesen],0;1
call drawwindow
ret
endf
155,7 → 155,7
;-----------------------------------------------------------------------------
func key.ctrl_s ;///// ENTER SAVE FILENAME ///////////////////////////////////
;-----------------------------------------------------------------------------
cmp [cur_tab.Editor.Modified],0 ;! [modified],0
cmp [cur_editor.Modified],0 ;! [modified],0
je .exit
cmp [f_info.length],0
je key.shift_ctrl_s
170,7 → 170,7
endf
 
;-----------------------------------------------------------------------------
func key.ctrl_n ;///// ENTER SAVE FILENAME ///////////////////////////////////
func key.ctrl_n ;///// CREATE NEW FILE (TAB) /////////////////////////////////
;-----------------------------------------------------------------------------
call create_tab
ret
248,8 → 248,8
;-----------------------------------------------------------------------------
key.shift_ctrl_left: ;///// GO TO PREVIOUS WORD, WITH SELECTION /////////
;-----------------------------------------------------------------------------
mov ebx,[cur_tab.Editor.Caret.Y] ;! ebx,[pos.y]
mov edx,[cur_tab.Editor.Caret.X] ;! edx,[pos.x]
mov ebx,[cur_editor.Caret.Y] ;! ebx,[pos.y]
mov edx,[cur_editor.Caret.X] ;! edx,[pos.x]
cld
mov ecx,ebx
call get_line_offset
307,26 → 307,26
jmp .lp2
@@:
inc edx
mov [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx
mov [cur_tab.Editor.Caret.X],edx ;! [pos.x],edx
mov [cur_editor.Caret.Y],ebx ;! [pos.y],ebx
mov [cur_editor.Caret.X],edx ;! [pos.x],edx
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],ebx ;! [sel.y],ebx
mov [cur_tab.Editor.SelStart.X],edx ;! [sel.x],edx
@@: sub ebx,[cur_tab.Editor.TopLeft.Y] ;! ebx,[top_line]
mov [cur_editor.SelStart.Y],ebx ;! [sel.y],ebx
mov [cur_editor.SelStart.X],edx ;! [sel.x],edx
@@: sub ebx,[cur_editor.TopLeft.Y] ;! ebx,[top_line]
jge @f
add [cur_tab.Editor.TopLeft.Y],ebx ;! [top_line],ebx
add [cur_editor.TopLeft.Y],ebx ;! [top_line],ebx
@@: mov eax,edx
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[columns.scr]
jl @f
sub eax,[columns.scr]
inc eax
add [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax
add [cur_editor.TopLeft.X],eax ;! [left_col],eax
jmp .exit
@@: cmp edx,[cur_tab.Editor.TopLeft.X] ;! edx,[left_col]
@@: cmp edx,[cur_editor.TopLeft.X] ;! edx,[left_col]
jge .exit
mov [cur_tab.Editor.TopLeft.X],edx ;! [left_col],edx
mov [cur_editor.TopLeft.X],edx ;! [left_col],edx
.exit:
call draw_file
.exit.2:
341,8 → 341,8
;-----------------------------------------------------------------------------
key.shift_ctrl_right: ;///// GO TO NEXT WORD, WITH SELECTION ////////////
;-----------------------------------------------------------------------------
mov ebx,[cur_tab.Editor.Caret.Y] ;! ebx,[pos.y]
mov edx,[cur_tab.Editor.Caret.X] ;! edx,[pos.x]
mov ebx,[cur_editor.Caret.Y] ;! ebx,[pos.y]
mov edx,[cur_editor.Caret.X] ;! edx,[pos.x]
cld
.lp1: mov ecx,ebx
call get_line_offset
363,7 → 363,7
dec ecx
jnz @b
.nx1: inc ebx
cmp ebx,[cur_tab.Editor.Lines] ;! ebx,[lines]
cmp ebx,[cur_editor.Lines.Count] ;! ebx,[lines]
jge .exit.2
xor edx,edx
jmp .lp1
388,34 → 388,34
dec ecx
jnz @b
.nx2: inc ebx
cmp ebx,[cur_tab.Editor.Lines] ;! ebx,[lines]
cmp ebx,[cur_editor.Lines.Count] ;! ebx,[lines]
jge .exit.2
xor edx,edx
jmp .lp2
@@:
mov [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx
mov [cur_tab.Editor.Caret.X],edx ;! [pos.x],edx
mov [cur_editor.Caret.Y],ebx ;! [pos.y],ebx
mov [cur_editor.Caret.X],edx ;! [pos.x],edx
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],ebx ;! [sel.y],ebx
mov [cur_tab.Editor.SelStart.X],edx ;! [sel.x],edx
@@: sub ebx,[cur_tab.Editor.TopLeft.Y] ;! ebx,[top_line]
mov [cur_editor.SelStart.Y],ebx ;! [sel.y],ebx
mov [cur_editor.SelStart.X],edx ;! [sel.x],edx
@@: sub ebx,[cur_editor.TopLeft.Y] ;! ebx,[top_line]
cmp ebx,[lines.scr]
jl @f
sub ebx,[lines.scr]
inc ebx
add [cur_tab.Editor.TopLeft.Y],ebx ;! [top_line],ebx
add [cur_editor.TopLeft.Y],ebx ;! [top_line],ebx
@@: mov eax,edx
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
sub eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[columns.scr]
jl @f
sub eax,[columns.scr]
inc eax
add [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax
add [cur_editor.TopLeft.X],eax ;! [left_col],eax
jmp .exit
@@: cmp edx,[cur_tab.Editor.TopLeft.X] ;! edx,[left_col]
@@: cmp edx,[cur_editor.TopLeft.X] ;! edx,[left_col]
jge .exit
mov [cur_tab.Editor.TopLeft.X],edx ;! [left_col],edx
mov [cur_editor.TopLeft.X],edx ;! [left_col],edx
.exit:
call draw_file
.exit.2:
428,7 → 428,7
je @f
call key.ctrl_c
call key.del
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
@@: ret
endf
 
537,14 → 537,14
 
call delete_selection
 
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
pushd [esi] esi
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
call line_add_spaces
mov ecx,[copy_size]
sub ecx,4
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
add edi,[edi-4]
dec edi
mov eax,esi
551,7 → 551,7
mov esi,edi
sub esi,ecx
lea ecx,[eax+4]
add ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
add ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
neg ecx
lea ecx,[esi+ecx+1]
std
567,7 → 567,7
mov esi,[copy_buf] ;! AREA_CBUF
lodsd
 
mov ebx,[cur_tab.Editor.Caret.X] ;! ebx,[pos.x]
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x]
add eax,ebx
mov [edi-4],ax
sub eax,ebx
590,16 → 590,16
mov ecx,eax
rep movsb
 
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
mov eax,[copy_count]
dec eax
add [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
add [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
add [cur_tab.Editor.Lines],eax ;! [lines],eax
add [cur_editor.Caret.Y],eax ;! [pos.y],eax
add [cur_editor.SelStart.Y],eax ;! [sel.y],eax
add [cur_editor.Lines.Count],eax ;! [lines],eax
 
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
jmp .exit
 
.single_line:
612,16 → 612,16
and dword[edi-4],not 0x00020000
or dword[edi-4],0x00010000
call .check_columns
add edi,[cur_tab.Editor.Caret.X] ;! edi,[pos.x]
add edi,[cur_editor.Caret.X] ;! edi,[pos.x]
add esp,4
mov ecx,eax
rep movsb
 
add [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
add [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
add [cur_editor.Caret.X],eax ;! [pos.x],eax
add [cur_editor.SelStart.X],eax ;! [sel.x],eax
 
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
 
.exit:
ret
629,9 → 629,9
.check_columns:
push eax
movzx eax,word[edi-4]
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jbe @f
mov [cur_tab.Editor.Columns],eax ;! [columns],eax
mov [cur_editor.Columns.Count],eax ;! [columns],eax
@@: pop eax
ret
; push eax ebx esi
656,11 → 656,11
;-----------------------------------------------------------------------------
func key.ctrl_d ;///// INSERT SEPARATOR //////////////////////////////////////
;-----------------------------------------------------------------------------
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
mov ebx,esi
 
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines]
mov ecx,[cur_editor.Lines.Count] ;! ecx,[lines]
call get_line_offset
lea edi,[esi+90+4]
lea ecx,[esi+4]
679,12 → 679,12
rep stosb
mov byte[ebx+4],';'
 
inc [cur_tab.Editor.Lines] ;! [lines]
inc [cur_tab.Editor.Caret.Y] ;! [pos.y]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
inc [cur_editor.Lines.Count] ;! [lines]
inc [cur_editor.Caret.Y] ;! [pos.y]
m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] ;! [sel.y],[pos.y]
 
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
 
.exit:
ret
693,18 → 693,18
;-----------------------------------------------------------------------------
func key.ctrl_y ;///// DELETE CURRENT LINE ///////////////////////////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
inc eax
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines]
cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jge .exit
 
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
mov edi,esi
lodsd
add esi,eax
 
dec [cur_tab.Editor.Lines] ;! [lines]
dec [cur_editor.Lines.Count] ;! [lines]
mov ecx,[temp_buf] ;! AREA_TEMP2
sub ecx,esi
shr ecx,2 ;// fixed (was 4)
711,7 → 711,7
cld
rep movsd
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
 
.exit:
ret
725,11 → 725,11
;-----------------------------------------------------------------------------
key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION ////////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
dec eax
jns @f
xor eax,eax
@@: mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
@@: mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
cmp eax,ecx
jae @f
dec ecx
737,7 → 737,7
xor ecx,ecx
@@: test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_init
 
.exit:
753,12 → 753,12
key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION //////////////////
;-----------------------------------------------------------------------------
 
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
inc eax
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines]
cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jb @f
dec eax
@@: mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
@@: mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
mov edx,eax
sub edx,ecx
cmp edx,[lines.scr]
766,7 → 766,7
inc ecx
@@: test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_init
 
.exit:
781,14 → 781,14
;-----------------------------------------------------------------------------
key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION //////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
dec eax
jns @f
inc eax
@@: test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
@@: mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
@@: mov [cur_editor.Caret.X],eax ;! [pos.x],eax
call check_inv_all
 
.exit:
803,15 → 803,15
;-----------------------------------------------------------------------------
key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION /////////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
inc eax
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jbe @f
dec eax
@@: test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
@@: mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
@@: mov [cur_editor.Caret.X],eax ;! [pos.x],eax
call check_inv_all
 
.exit:
828,8 → 828,8
;-----------------------------------------------------------------------------
mov edx,[lines.scr]
dec edx
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
sub eax,edx
jns @f
xor eax,eax
838,7 → 838,7
xor ecx,ecx
@@: test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_init
 
.exit:
855,17 → 855,17
;-----------------------------------------------------------------------------
mov edx,[lines.scr]
dec edx
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
add eax,edx
add ecx,edx
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines]
cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jb @f
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
dec eax
@@: test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_init
 
.exit:
880,10 → 880,10
;-----------------------------------------------------------------------------
key.shift_home: ;///// GO TO LINE START, WITH SELECTION /////////////////
;-----------------------------------------------------------------------------
mov [cur_tab.Editor.Caret.X],0 ;! [pos.x],0
mov [cur_editor.Caret.X],0 ;! [pos.x],0
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.X],0 ;! [sel.x],0
mov [cur_editor.SelStart.X],0 ;! [sel.x],0
@@: call check_inv_all
 
.exit:
898,13 → 898,13
;-----------------------------------------------------------------------------
key.shift_end: ;///// GO TO LINE END, WITH SELECTION ////////////////////
;-----------------------------------------------------------------------------
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
call get_real_length
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax
mov [cur_editor.SelStart.X],eax ;! [sel.x],eax
@@: call check_inv_all
 
.exit:
919,11 → 919,11
;-----------------------------------------------------------------------------
key.shift_ctrl_home: ;///// GO TO PAGE START, WITH SELECTION ////////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
mov eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
mov ecx,eax
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_init
 
.exit:
938,16 → 938,16
;-----------------------------------------------------------------------------
key.shift_ctrl_end: ;///// GO TO PAGE END, WITH SELECTION ///////////////
;-----------------------------------------------------------------------------
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line]
mov ecx,[cur_editor.TopLeft.Y] ;! ecx,[top_line]
mov eax,[lines.scr]
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines]
cmp eax,[cur_editor.Lines.Count] ;! eax,[lines]
jle @f
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
@@: add eax,ecx
dec eax
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_init
 
.exit:
963,11 → 963,11
key.shift_ctrl_pgup: ;///// GO TO DOCUMENT START, WITH SELECTION ////////
;-----------------------------------------------------------------------------
xor eax,eax
mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
test byte[shi+2],0x01
jnz @f
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax
@@: call check_inv_all.skip_check
 
.exit:
982,16 → 982,16
;-----------------------------------------------------------------------------
key.shift_ctrl_pgdn: ;///// GO TO DOCUMENT END, WITH SELECTION //////////
;-----------------------------------------------------------------------------
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] ; eax = lines in the file
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
mov eax,[cur_editor.Lines.Count] ;! eax,[lines] ; eax = lines in the file
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
sub eax,[lines.scr] ; eax -= lines on the screen
jns @f
xor eax,eax
@@: mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax
dec [cur_tab.Editor.Caret.Y] ;! [pos.y]
@@: mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
dec [cur_editor.Caret.Y] ;! [pos.y]
test byte[shi+2],0x01
jnz @f
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y]
m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y]
;! push [pos.y]
;! pop [sel.y]
@@: call check_inv_all.skip_check
1006,7 → 1006,7
call delete_selection
jnc .exit.2
 
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
and dword[esi],not 0x00020000
or dword[esi],0x00010000
1017,7 → 1017,7
or eax,eax
je .line_up
 
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
cmp ecx,eax
jae .line_up
lea edi,[ebx+ecx]
1028,7 → 1028,7
je .line_up
 
mov edi,ebx
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
add edi,ecx
lea esi,[edi+1]
neg ecx
1038,23 → 1038,23
rep movsb
mov byte[edi],' '
 
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
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]
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
ret
 
.line_up:
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
dec eax
cmp eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
cmp eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
je .exit
mov edi,[temp_buf] ;! AREA_TEMP+4
add edi,4
mov esi,ebx
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
rep movsb
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
mov eax,[temp_buf]
mov [eax],ecx ;! [AREA_TEMP],ecx
cmp cx,[ebp]
1078,12 → 1078,12
 
mov esi,[temp_buf] ;! AREA_TEMP
call get_real_length
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jbe @f
mov [cur_tab.Editor.Columns],eax ;! [columns],eax
mov [cur_editor.Columns.Count],eax ;! [columns],eax
@@:
push ecx
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
add edi,[edi-4]
dec edi
lea esi,[edi+8]
1108,7 → 1108,7
add esi,eax;[esi-8]
movzx eax,word[esi-4]
add esi,eax;[esi-4]
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2
add ecx,[ecx-4]
sub ecx,esi
cld
1120,16 → 1120,16
rep movsb
 
.ok.dec.lines:
dec [cur_tab.Editor.Lines] ;! [lines]
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
cmp [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
dec [cur_editor.Lines.Count] ;! [lines]
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
cmp [cur_editor.Caret.Y],eax ;! [pos.y],eax
jb @f
dec eax
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax
@@: m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax
@@: 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]
 
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
.exit.2:
call check_inv_all
 
1152,12 → 1152,12
call delete_selection
jnc key.del.exit.2
 
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
dec eax
js .line_up
 
dec [cur_tab.Editor.Caret.X] ;! [pos.x]
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
dec [cur_editor.Caret.X] ;! [pos.x]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
and dword[esi],not 0x00020000
or dword[esi],0x00010000
1164,11 → 1164,11
 
mov ebx,eax
call get_real_length
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jae @f
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] ;! [sel.x],[pos.x]
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
ret
 
@@: lea edi,[esi+4+ebx]
1182,17 → 1182,17
rep movsb
mov byte[edi],' '
 
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
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]
call check_inv_str
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
ret
 
.line_up:
cmp [cur_tab.Editor.Caret.Y],0 ;! [pos.y],0
cmp [cur_editor.Caret.Y],0 ;! [pos.y],0
jne @f
ret
@@: mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
@@: mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
dec ecx
call get_line_offset
and dword[esi],not 0x00020000
1205,8 → 1205,8
jne @f
dec ecx
jg @b
@@: mov [cur_tab.Editor.Caret.X],ecx ;! [pos.x],ecx
dec [cur_tab.Editor.Caret.Y] ;! [pos.y]
@@: mov [cur_editor.Caret.X],ecx ;! [pos.x],ecx
dec [cur_editor.Caret.Y] ;! [pos.y]
cld
jmp key.del.line_up
endf
1215,7 → 1215,7
func key.tab ;///// TABULATE /////////////////////////////////////////////////
;-----------------------------------------------------------------------------
call delete_selection
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
 
mov ecx,eax
add eax,ATABW
1223,7 → 1223,7
push eax ' '
sub eax,ecx
.direct:
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
and dword[esi],not 0x00020000
or dword[esi],0x00010000
1231,15 → 1231,15
xchg eax,ecx
 
call get_real_length
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jae @f
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
@@: movzx edx,word[esi]
sub edx,eax
cmp ecx,edx
jl @f
pushad; esi ecx eax
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2-10+1
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2-10+1
add ecx,[ecx-4]
dec ecx
mov edi,ecx ;! AREA_TEMP2
1268,7 → 1268,7
sub esi,ecx
lea ecx,[esi+1]
sub ecx,ebx
sub ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x]
sub ecx,[cur_editor.Caret.X] ;! ecx,[pos.x]
std
rep movsb
.ok: pop ecx ;*******
1275,19 → 1275,19
pop eax
rep stosb
cld
pop [cur_tab.Editor.Caret.X] ;! [pos.x]
pop [cur_editor.Caret.X] ;! [pos.x]
lea esi,[ebx-4]
call get_real_length
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
cmp eax,[cur_editor.Caret.X] ;! eax,[pos.x]
jae @f
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x]
@@: cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
mov eax,[cur_editor.Caret.X] ;! eax,[pos.x]
@@: cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jbe @f
mov [cur_tab.Editor.Columns],eax ;! [columns],eax
@@: m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] ;! [sel.y],[pos.y]
mov [cur_editor.Columns.Count],eax ;! [columns],eax
@@: 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]
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
 
.exit:
ret
1298,10 → 1298,10
;-----------------------------------------------------------------------------
call delete_selection
 
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y]
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y]
call get_line_offset
 
mov ebx,[cur_tab.Editor.Caret.X] ;! ebx,[pos.x]
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x]
cmp bx,[esi]
jb @f
movzx ebx,word[esi]
1362,7 → 1362,7
.lp2: xor eax,eax
@@: mov edx,edi
add edi,4
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
jecxz @f
push ecx
mov ecx,eax
1384,7 → 1384,7
sub ecx,[temp_buf]
 
push ecx
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov edi,[cur_editor.Lines] ;! AREA_TEMP2
add edi,[edi-4]
dec edi
lea esi,[edi+4]
1402,7 → 1402,7
lea edi,[esi+eax-4]
movzx ecx,word[ebp]
add esi,ecx;[ebp]
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2
add ecx,[ecx-4]
sub ecx,esi
cld
1413,14 → 1413,14
cld
rep movsb
 
inc [cur_tab.Editor.Caret.Y] ;! [pos.y]
inc [cur_tab.Editor.SelStart.Y] ;! [sel.y]
inc [cur_tab.Editor.Lines] ;! [lines]
inc [cur_editor.Caret.Y] ;! [pos.y]
inc [cur_editor.SelStart.Y] ;! [sel.y]
inc [cur_editor.Lines.Count] ;! [lines]
 
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x]
m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] ;! [sel.x],[pos.x]
 
call check_inv_all
mov [cur_tab.Editor.Modified],1 ;! [modified],1
mov [cur_editor.Modified],1 ;! [modified],1
 
.exit:
ret
1444,6 → 1444,7
jb @f
mov ebp,[tab_bar.Items]
@@: call set_cur_tab
call make_tab_visible
call align_editor_in_tab
call draw_editor
call draw_tabctl
1470,6 → 1471,7
add eax,[tab_bar.Items]
lea ebp,[eax-sizeof.TABITEM]
@@: call set_cur_tab
call make_tab_visible
call align_editor_in_tab
call draw_editor
call draw_tabctl
1476,3 → 1478,14
.exit:
ret
endf
 
;-----------------------------------------------------------------------------
func key.ctrl_f4 ;///// CLOSE CURRENT TAB ////////////////////////////////////
;-----------------------------------------------------------------------------
mov ebp,[tab_bar.Current.Ptr]
call delete_tab
cmp [tab_bar.Items.Count],0
jne @f
call create_tab
@@: ret
endf
/programs/develop/tinypad/trunk/tp-locale.inc
22,6 → 22,8
ru,'‘®åà ­¨âì' ,'Ctrl+S' ,Save ,\
ru,'‘®åà ­¨âì ª ª...','Ctrl+Shift+S',SaveAs,\
ru,'-' ,'' , ,\
ru,'‡ ªàëâì' ,'Ctrl+F4' ,Close ,\
ru,'-' ,'' , ,\
ru,'‚ë室' ,'Alt+X' ,Exit ,\
\
en,'New' ,'Ctrl+N' ,New ,\
29,6 → 31,8
en,'Save' ,'Ctrl+S' ,Save ,\
en,'Save as...','Ctrl+Shift+S',SaveAs,\
en,'-' ,'' , ,\
en,'Close' ,'Ctrl+F4' ,Close ,\
en,'-' ,'' , ,\
en,'Exit' ,'Alt+X' ,Exit
 
popup_res mm.Edit,\
73,14 → 77,14
en,'System functions' ,'' ,SysFuncs
 
popup_res mm.Encoding,\
@!,'CP866 -> CP1251','',CP866.CP1251,\
@!,'CP1251 -> CP866' ,'',CP1251.CP866,\
@!,'-' ,'', ,\
@!,'CP866 -> KOI8-R','',CP866.KOI8R ,\
@!,'KOI8-R -> CP866' ,'',KOI8R.CP866 ,\
@!,'-' ,'', ,\
@!,'CP1251 -> KOI8-R','',CP1251.KOI8R,\
@!,'KOI8-R -> CP1251','',KOI8R.CP1251
@!,<'CP866 ',0x1A,' CP1251'>,'',CP866.CP1251,\
@!,<'CP1251 ',0x1A,' CP866' >,'',CP1251.CP866,\
@!,<'-' >,'', ,\
@!,<'CP866 ',0x1A,' KOI8-R'>,'',CP866.KOI8R ,\
@!,<'KOI8-R ',0x1A,' CP866' >,'',KOI8R.CP866 ,\
@!,<'-' >,'', ,\
@!,<'CP1251 ',0x1A,' KOI8-R'>,'',CP1251.KOI8R,\
@!,<'KOI8-R ',0x1A,' CP1251'>,'',KOI8R.CP1251
 
popup_res mm.Options,\
ru,'‚­¥è­¨© ¢¨¤...' ,'',Appearance ,\
/programs/develop/tinypad/trunk/tp-mouse.asm
157,31 → 157,31
cdq;xor edx,edx
mov ecx,LINEH
idiv ecx
@@: add eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
@@: add eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
mov ebx,eax
pop eax
cdq;xor edx,edx
mov ecx,6
idiv ecx
@@: add eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
@@: add eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
 
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns]
cmp eax,[cur_editor.Columns.Count] ;! eax,[columns]
jl @f
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns]
@@: cmp ebx,[cur_tab.Editor.Lines] ;! ebx,[lines]
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
@@: cmp ebx,[cur_editor.Lines.Count] ;! ebx,[lines]
jl @f
mov ebx,[cur_tab.Editor.Lines] ;! ebx,[lines]
mov ebx,[cur_editor.Lines.Count] ;! ebx,[lines]
dec ebx
@@:
cmp [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
cmp [cur_editor.Caret.X],eax ;! [pos.x],eax
jne .change_cur_pos
cmp [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx
cmp [cur_editor.Caret.Y],ebx ;! [pos.y],ebx
je still.skip_write
 
.change_cur_pos:
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y]
mov [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx
mov [cur_editor.Caret.X],eax ;! [pos.x],eax
mov eax,[cur_editor.Caret.Y] ;! eax,[pos.y]
mov [cur_editor.Caret.Y],ebx ;! [pos.y],ebx
call check_cur_vis_inv
jc .check_ldown
; cmp eax,ebx
213,20 → 213,20
; sub ebx,[__rc+0x4]
cmp [vscrl_capt],0
jge .vcaptured
mov eax,[cur_tab.Editor.VScroll.Top] ;! eax,[vscrl_top]
mov eax,[cur_editor.VScroll.Top] ;! eax,[vscrl_top]
cmp ebx,eax
jb .center_vcapture
add eax,[cur_tab.Editor.VScroll.Size] ;! eax,[vscrl_size]
add eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size]
cmp ebx,eax
jae .center_vcapture
mov eax,ebx
sub eax,[cur_tab.Editor.VScroll.Top] ;! eax,[vscrl_top]
sub eax,[cur_editor.VScroll.Top] ;! eax,[vscrl_top]
dec eax
mov [vscrl_capt],eax
dec ebx
jmp .vcaptured
.center_vcapture:
mov eax,[cur_tab.Editor.VScroll.Size] ;! eax,[vscrl_size]
mov eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size]
shr eax,1
mov [vscrl_capt],eax
.vcaptured:
236,24 → 236,24
@@: mov [mouse_captured],1
mov eax,[bot_ofs]
sub eax,[top_ofs]
sub eax,[cur_tab.Editor.VScroll.Size] ;! eax,[vscrl_size]
sub eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size]
sub eax,SCRLW*3-2
cmp eax,ebx
jge @f
mov ebx,eax
@@:
mov [cur_tab.Editor.VScroll.Top],ebx ;! [vscrl_top],ebx
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines]
mov [cur_editor.VScroll.Top],ebx ;! [vscrl_top],ebx
mov eax,[cur_editor.Lines.Count] ;! eax,[lines]
sub eax,[lines.scr]
imul ebx
mov ebx,[bot_ofs]
sub ebx,[top_ofs]
sub ebx,SCRLW*3-2 ;**
sub ebx,[cur_tab.Editor.VScroll.Size] ;! ebx,[vscrl_size]
sub ebx,[cur_editor.VScroll.Size] ;! ebx,[vscrl_size]
idiv ebx
cmp eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line]
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line]
je still.skip_write
mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax
mov [cur_editor.TopLeft.Y],eax ;! [top_line],eax
call check_bottom_right
call draw_file
jmp still.skip_write
274,20 → 274,20
; sub ebx,[__rc+0x0]
cmp [hscrl_capt],0
jge .hcaptured
mov eax,[cur_tab.Editor.HScroll.Top] ;! eax,[hscrl_top]
mov eax,[cur_editor.HScroll.Top] ;! eax,[hscrl_top]
cmp ebx,eax
jl .center_hcapture
add eax,[cur_tab.Editor.HScroll.Size] ;! eax,[hscrl_size]
add eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size]
cmp ebx,eax
jge .center_hcapture
mov eax,ebx
sub eax,[cur_tab.Editor.HScroll.Top] ;! eax,[hscrl_top]
sub eax,[cur_editor.HScroll.Top] ;! eax,[hscrl_top]
dec eax
mov [hscrl_capt],eax
dec ebx
jmp .hcaptured
.center_hcapture:
mov eax,[cur_tab.Editor.HScroll.Size] ;! eax,[hscrl_size]
mov eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size]
shr eax,1
mov [hscrl_capt],eax
.hcaptured:
296,23 → 296,23
xor ebx,ebx
@@: mov [mouse_captured],1
mov eax,[p_info.box.width]
sub eax,[cur_tab.Editor.HScroll.Size] ;! eax,[hscrl_size]
sub eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size]
sub eax,SCRLW*3+10+1
cmp eax,ebx
jge @f
mov ebx,eax
@@:
mov [cur_tab.Editor.HScroll.Top],ebx ;! [hscrl_top],ebx
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns]
mov [cur_editor.HScroll.Top],ebx ;! [hscrl_top],ebx
mov eax,[cur_editor.Columns.Count] ;! eax,[columns]
sub eax,[columns.scr]
imul ebx
mov ebx,[p_info.box.width]
sub ebx,SCRLW*3+10+1 ;**
sub ebx,[cur_tab.Editor.HScroll.Size] ;! ebx,[hscrl_size]
sub ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size]
idiv ebx
cmp eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col]
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col]
je still.skip_write
mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax
mov [cur_editor.TopLeft.X],eax ;! [left_col],eax
call check_bottom_right
call draw_file
jmp still.skip_write
347,78 → 347,3
mov [mouse_captured],0
mov [just_from_popup],0
jmp still.skip_write
 
 
func setup_main_menu_popup
mov ebx,[p_info.box.left]
add ebx,[p_info.client_box.left]
@@: dec ecx
jz @f
add edx,8+1
movzx esi,byte[edx-1]
add edx,esi
jmp @b
@@: movzx ecx,word[edx+2]
add ebx,ecx
 
mov [eax+POPUP.x],bx
mov ebx,[p_info.box.top]
add ebx,[p_info.client_box.top]
add ebx,ATOPH-1
mov [eax+POPUP.y],bx
mov [POPUP_STACK],eax
ret
endf
 
onshow:
 
.file:
or byte[mm.File+3],0x01
cmp [f_info.length],0
jne @f
and byte[mm.File+3],0xFE
@@: ret
 
.edit:
or byte[mm.Edit+2],0x01
cmp [copy_size],0
jne @f
and byte[mm.Edit+2],0xFE
@@: or dword[mm.Edit+0],0x01000101
cmp [sel.selected],0
jne @f
and dword[mm.Edit+0],0xFEFFFEFE
@@: ret
 
.search:
mov byte[mm.Search+0],0
;mov byte[mm.Search+4],0
ret
.run:
ret
.recode:
ret
.options:
mov word[mm.Options+0],0
mov byte[mm.Options+5],0
or byte[mm.Options+2],0x02
test [options],OPTS_SECURESEL
jnz @f
and byte[mm.Options+2],0xFD
@@: or byte[mm.Options+3],0x02
test [options],OPTS_AUTOBRACES
jnz @f
and byte[mm.Options+3],0xFD
@@: or byte[mm.Options+4],0x02
test [options],OPTS_AUTOINDENT
jnz @f
and byte[mm.Options+4],0xFD
@@: or byte[mm.Options+6],0x02
test [options],OPTS_OPTIMSAVE
jnz @f
and byte[mm.Options+6],0xFD
@@: or byte[mm.Options+8],0x02
test [options],OPTS_LINENUMS
jnz @f
and byte[mm.Options+8],0xFD
@@: ret
/programs/develop/tinypad/trunk/tp-popup.asm
2,88 → 2,6
POP_IHEIGHT = 16
;POP_HEIGHT = popup_text.cnt_item*POP_IHEIGHT+popup_text.cnt_sep*4+4
 
func calc_middle
shr eax,1
shr ebx,1
and eax,0x007F7F7F
and ebx,0x007F7F7F
add eax,ebx
ret
endf
 
func calc_3d_colors
pushad
m2m [cl_3d_normal],[sc.work]
m2m [cl_3d_inset],[sc.work_graph]
push [cl_3d_normal]
add byte[esp],48
jnc @f
mov byte[esp],255
@@: add byte[esp+1],48
jnc @f
mov byte[esp+1],255
@@: add byte[esp+2],48
jnc @f
mov byte[esp+2],255
@@: pop [cl_3d_outset]
mov eax,[cl_3d_inset]
mov ebx,[cl_3d_outset]
call calc_middle
mov [cl_3d_pushed],eax
mov eax,[cl_3d_normal]
mov ebx,[sc.work_text]
call calc_middle
mov [cl_3d_grayed],eax
popad
ret
endf
 
func draw_3d_panel ; x,y,w,h
cmp dword[esp+8],4
jl .exit
cmp dword[esp+4],4
jl .exit
mov ebx,[esp+16-2]
mov bx,[esp+8]
inc ebx
mov ecx,[esp+12-2]
mov cx,[esp+4]
inc ecx
mcall 13,,,[cl_3d_normal];0x00EEEEEE;[sc.work]
dec ebx
add bx,[esp+16]
mov cx,[esp+12]
mcall 38,,,[cl_3d_inset];0x006382BF;[sc.work_text]
add ecx,[esp+4-2]
add cx,[esp+4]
mcall
mov bx,[esp+16]
mov ecx,[esp+12-2]
mov cx,[esp+4]
add cx,[esp+12]
mcall
add ebx,[esp+8-2]
add bx,[esp+8]
mcall
mov ebx,[esp+16-2]
mov bx,[esp+8]
add bx,[esp+16]
add ebx,1*65536-1
mov ecx,[esp+12-2]
mov cx,[esp+12]
add ecx,0x00010001
mcall ,,,[cl_3d_outset]
mov bx,[esp+16]
inc ebx
mov ecx,[esp+12-2]
mov cx,[esp+4]
add cx,[esp+12]
add ecx,2*65536-1
mcall
.exit:
ret 4*4
endf
 
popup_thread_start:
mov [popup_active],1
mov [pi_cur],0
315,6 → 233,79
ret
endf
 
func setup_main_menu_popup
mov ebx,[p_info.box.left]
add ebx,[p_info.client_box.left]
@@: dec ecx
jz @f
add edx,8+1
movzx esi,byte[edx-1]
add edx,esi
jmp @b
@@: movzx ecx,word[edx+2]
add ebx,ecx
 
mov [eax+POPUP.x],bx
mov ebx,[p_info.box.top]
add ebx,[p_info.client_box.top]
add ebx,ATOPH-1
mov [eax+POPUP.y],bx
mov [POPUP_STACK],eax
ret
endf
 
onshow:
 
.file:
or byte[mm.File+3],0x01
cmp [f_info.length],0
jne @f
and byte[mm.File+3],0xFE
@@: ret
 
.edit:
or byte[mm.Edit+2],0x01
cmp [copy_size],0
jne @f
and byte[mm.Edit+2],0xFE
@@: or dword[mm.Edit+0],0x01000101
cmp [sel.selected],0
jne @f
and dword[mm.Edit+0],0xFEFFFEFE
@@: ret
 
.search:
mov byte[mm.Search+0],0
ret
.run:
ret
.recode:
ret
.options:
mov word[mm.Options+0],0
mov byte[mm.Options+5],0
or byte[mm.Options+2],0x02
test [options],OPTS_SECURESEL
jnz @f
and byte[mm.Options+2],0xFD
@@: or byte[mm.Options+3],0x02
test [options],OPTS_AUTOBRACES
jnz @f
and byte[mm.Options+3],0xFD
@@: or byte[mm.Options+4],0x02
test [options],OPTS_AUTOINDENT
jnz @f
and byte[mm.Options+4],0xFD
@@: or byte[mm.Options+6],0x02
test [options],OPTS_OPTIMSAVE
jnz @f
and byte[mm.Options+6],0xFD
@@: or byte[mm.Options+8],0x02
test [options],OPTS_LINENUMS
jnz @f
and byte[mm.Options+8],0xFD
@@: ret
 
pi_sel dd ?
pi_cur dd ?
p_pos dd ?
/programs/develop/tinypad/trunk/tp-recode.asm
19,8 → 19,8
mov edi,table.koi.1251
 
.main:
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines]
mov esi,[cur_tab.Editor.Data] ;! AREA_EDIT
mov ecx,[cur_editor.Lines.Count] ;! ecx,[lines]
mov esi,[cur_editor.Lines] ;! AREA_EDIT
jecxz .exit
xor eax,eax
.lp0: dec ecx
/programs/develop/tinypad/trunk/tp-tabctl.asm
2,7 → 2,7
sz s_defname,'Untitled',0
 
;-----------------------------------------------------------------------------
func flush_cur_tab ;//////////////////////////////////////////////////////////
func flush_cur_tab ;///// SAVE CURRENT TAB DATA TO CONTROL ///////////////////
;-----------------------------------------------------------------------------
; EBP = TABITEM*
;-----------------------------------------------------------------------------
17,7 → 17,7
endf
 
;-----------------------------------------------------------------------------
func set_cur_tab ;////////////////////////////////////////////////////////////
func set_cur_tab ;///// SET SPECIFIED TAB CURRENT (FOCUS IT) /////////////////
;-----------------------------------------------------------------------------
; EBP = TABITEM*
;-----------------------------------------------------------------------------
36,8 → 36,44
endf
 
;-----------------------------------------------------------------------------
func create_tab ;/////////////////////////////////////////////////////////////
func make_tab_visible ;///// MAKE SPECIFIED TAB VISIBLE IF IT'S OFFSCREEN ////
;-----------------------------------------------------------------------------
push ebp
imul eax,[tab_bar.Items.Left],sizeof.TABITEM
add eax,[tab_bar.Items]
cmp eax,ebp
jb .go_right
ja .go_left
add esp,4
ret
 
.go_right:
call get_hidden_tabitems_number
cmp ebp,[esp]
ja .lp1
@@: inc [tab_bar.Items.Left]
call get_hidden_tabitems_number
cmp ebp,[esp]
jbe @b
@@: inc [tab_bar.Items.Left]
.lp1: pop ebp
ret
 
.go_left:
mov eax,ebp
sub eax,[tab_bar.Items]
jz @f
cwde
mov ebx,sizeof.TABITEM
div ebx
@@: mov [tab_bar.Items.Left],eax
add esp,4
ret
endf
 
;-----------------------------------------------------------------------------
func create_tab ;///// ADD TAB TO THE END ////////////////////////////////////
;-----------------------------------------------------------------------------
push eax ecx esi edi
 
inc [tab_bar.Items.Count]
50,20 → 86,21
sub [tab_bar.Current.Ptr],ecx
lea ebp,[eax+ebx-sizeof.TABITEM]
call set_cur_tab
call make_tab_visible
 
mov eax,1024
call mem.Alloc
mov [cur_tab.Editor.Data],eax
mov [cur_tab.Editor.Lines],1
mov [cur_tab.Editor.Columns],1
mov [cur_editor.Lines],eax
mov [cur_editor.Lines.Count],1
mov [cur_editor.Columns.Count],1
xor eax,eax
mov [cur_tab.Editor.TopLeft.X],eax
mov [cur_tab.Editor.TopLeft.Y],eax
mov [cur_tab.Editor.Caret.X],eax
mov [cur_tab.Editor.Caret.Y],eax
mov [cur_tab.Editor.SelStart.X],eax
mov [cur_tab.Editor.SelStart.Y],eax
mov edi,[cur_tab.Editor.Data]
mov [cur_editor.TopLeft.X],eax
mov [cur_editor.TopLeft.Y],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 edi,[cur_editor.Lines]
add edi,4
mov ecx,10
mov [edi-4],ecx
73,14 → 110,14
rep stosb
 
mov esi,s_defname
mov edi,cur_tab.Editor.FilePath
mov edi,cur_editor.FilePath
mov ecx,s_defname.size
rep movsb
mov [cur_tab.Editor.FileName],0
mov [cur_editor.FileName],0
 
mov [f_info.length],0
mov [cur_tab.Editor.Modified],0
mov [cur_tab.Editor.AsmMode],0
mov [cur_editor.Modified],0
mov [cur_editor.AsmMode],0
 
call flush_cur_tab
call update_caption
92,36 → 129,82
endf
 
;-----------------------------------------------------------------------------
func delete_tab ;/////////////////////////////////////////////////////////////
func delete_tab ;///// DELETE SPECIFIED TAB //////////////////////////////////
;-----------------------------------------------------------------------------
mov eax,[ebp+TABITEM.Editor.Lines]
call mem.Free
imul ecx,[tab_bar.Items.Count],sizeof.TABITEM
add ecx,[tab_bar.Items]
sub ecx,ebp
sub ecx,sizeof.TABITEM
jle @f
cld
shr ecx,2
mov edi,ebp
lea esi,[edi+sizeof.TABITEM]
rep movsd
@@: dec [tab_bar.Items.Count]
jz .no_tabs
imul ebx,[tab_bar.Items.Count],sizeof.TABITEM
push ebx
mov eax,[tab_bar.Items]
mov ecx,eax
call mem.ReAlloc
mov [tab_bar.Items],eax
sub ecx,eax
sub ebp,ecx
 
pop ecx
add ecx,[tab_bar.Items]
sub ecx,ebp
ja @f
add ebp,-sizeof.TABITEM
 
@@: mov [tab_bar.Current.Ptr],0
call set_cur_tab
call make_tab_visible
call drawwindow
ret
endf
 
;-----------------------------------------------------------------------------
func get_tab_size ;///////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
; EBP = TABITEM*
;-----------------------------------------------------------------------------
push eax
cmp [tab_bar.Style],3
jae .lp1
lea eax,[ebp+TABITEM.Editor.FilePath]
add eax,[ebp+TABITEM.Editor.FileName]
call strlen
imul ebx,eax,6
add ebx,9
jmp .lp2
.lp1: call get_max_tab_width
mov ebx,eax
.lp2: mov ecx,TBARH-1
pop eax
.no_tabs:
mov eax,[tab_bar.Items]
call mem.Free
mov [tab_bar.Items],0
mov [tab_bar.Current.Ptr],0
ret
endf
 
;-----------------------------------------------------------------------------
func draw_tabctl ;////////////////////////////////////////////////////////////
func draw_tabctl ;///// DRAW TAB CONTROL /////////////////////////////////////
;-----------------------------------------------------------------------------
 
dec [tab_bar.Items.Left]
js .lp1
@@: call get_hidden_tabitems_number
or eax,eax
jnz .lp1
dec [tab_bar.Items.Left]
jns @b
.lp1: inc [tab_bar.Items.Left]
mov eax,[tab_bar.Items.Count]
cmp [tab_bar.Items.Left],eax
jb @f
dec eax
mov [tab_bar.Items.Left],eax
@@:
 
mov eax,8
mov edx,[tab_bar.Buttons.First]
@@: cmp edx,[tab_bar.Buttons.Last]
ja @f
push edx
or edx,0x80000000
mcall
pop edx
inc edx
jmp @b
@@:
 
mov ebx,[tab_bar.Bounds.Left-2]
mov bx,word[tab_bar.Bounds.Right]
sub bx,word[tab_bar.Bounds.Left]
150,9 → 233,18
xor cx,cx
add ecx,1*65536+TBARH
mcall 13
add ecx,(TBARH-2)*65536-(TBARH-3)
add ecx,(TBARH-1)*65536-(TBARH-1)
mcall ,,,[sc.work]
add ecx,-1*65536+2
mov edx,[cl_3d_inset]
call draw_framerect
 
mov esi,[tab_bar.Bounds.Left]
inc esi
mov edi,[tab_bar.Bounds.Top]
inc edi
push .curr_top .check_horz .next_horz
call .draw_tabs
ret
 
.tabs_on_bottom:
163,19 → 255,86
mcall 13
mov cx,1
mcall ,,,[sc.work]
add ecx,-1*65536+2;-(TBARH-3)
add ecx,-1*65536+2
mov edx,[cl_3d_inset]
call draw_framerect
 
mov ecx,[tab_bar.Items.Count]
mov ebp,[tab_bar.Items]
mov esi,[tab_bar.Bounds.Left]
inc esi
mov edi,[tab_bar.Bounds.Bottom]
add edi,-TBARH+1
push .curr_bottom .check_horz .next_horz
call .draw_tabs
ret
 
.tabs_on_left:
call get_max_tab_width
mov ebx,[tab_bar.Bounds.Left-2]
mov bx,ax
add ebx,1*65536-1
add ecx,1*65536-2
push eax
mcall 13
pop ebx
shl ebx,16
add ebx,1*65536+1
mcall ,,,[sc.work]
add ebx,-1*65536+2
mov edx,[cl_3d_inset]
call draw_framerect
 
mov esi,[tab_bar.Bounds.Left]
inc esi
mov edi,[tab_bar.Bounds.Top]
inc edi
push .curr_left .check_vert .next_vert
call .draw_tabs
ret
 
.tabs_on_right:
call get_max_tab_width
push eax
mov ebx,[tab_bar.Bounds.Right-2]
mov bx,ax
shl eax,16
sub ebx,eax
add ecx,1*65536-2
mcall 13
add ebx,-1*65536
mov bx,1
mcall ,,,[sc.work]
add ebx,-1*65536+2
mov edx,[cl_3d_inset]
call draw_framerect
 
mov esi,[tab_bar.Bounds.Right]
pop eax
sub esi,eax
mov edi,[tab_bar.Bounds.Top]
inc edi
push .curr_right .check_vert .next_vert
call .draw_tabs
ret
 
 
.draw_tabs:
mov ecx,[tab_bar.Items.Count]
mov ebx,[tab_bar.Items.Left]
imul ebp,ebx,sizeof.TABITEM
add ebp,[tab_bar.Items]
push ecx
sub [esp],ebx
add ebx,1000
mov [tab_bar.Buttons.First],ebx
dec ebx
mov [tab_bar.Buttons.Last],ebx
@@: push ecx
 
call get_tab_size
 
call dword[esp+(8+4)+4]
jc .draw_tabs.dontfit
 
rol ebx,16
mov bx,si
rol ebx,16
185,15 → 344,17
mov edx,[cl_3d_inset]
call draw_framerect
 
mov edx,[sc.work_text]
cmp ebp,[tab_bar.Current.Ptr]
jne .lp1
jne .draw_tabs.inactive
push ebx ecx
add ebx,1*65536-2
dec ecx
call dword[esp+(8+4)+8+8]
mcall 13,,,[sc.work]
pop ecx ebx
.lp1:
pushad
mov edx,[color_tbl+4*0]
.draw_tabs.inactive:
 
push ebx ecx esi edx
lea eax,[ebp+TABITEM.Editor.FilePath]
add eax,[ebp+TABITEM.Editor.FileName]
mov edx,eax
202,67 → 363,288
shr ecx,16
mov bx,cx
add ebx,0x00050005
mcall 4,,0x00000000
popad
pop ecx
mcall 4
pop esi ecx ebx
 
movzx ebx,bx
lea esi,[esi+ebx+1]
inc [tab_bar.Buttons.Last]
cmp ebp,[tab_bar.Current.Ptr]
je .draw_tabs.active
push ebx ecx
dec ebx
dec ecx
mov edx,[tab_bar.Buttons.Last]
or edx,0x40000000
mcall 8
pop ecx ebx
.draw_tabs.active:
 
call dword[esp+(8+4)+0]
add ebp,sizeof.TABITEM
 
pop ecx
dec ecx
dec dword[esp]
jnz @b
 
add esp,4
or ecx,ecx
jnz @f
 
ret 8
 
.draw_tabs.dontfit:
 
add esp,8
 
@@: mov ebx,[tab_bar.Bounds.Right]
shl ebx,16
mov ecx,[tab_bar.Bounds.Bottom]
shl ecx,16
add ecx,(-SCRLW-1)*65536+SCRLW
call get_max_tab_width
mov edx,eax
 
mov al,[tab_bar.Style]
dec al
jz .scroll_on_top
dec al
jz .scroll_on_bottom
dec al
jz .scroll_on_left
dec al
jz .scroll_on_right
ret
 
.tabs_on_left:
call get_max_tab_width
mov ebx,[tab_bar.Bounds.Left-2]
mov bx,ax
add ebx,1*65536
.scroll_on_top:
add ebx,(-SCRLW*2-1)*65536+SCRLW
mov ecx,[tab_bar.Bounds.Top]
shl ecx,16
add ecx,1*65536+SCRLW
jmp .draw_tabs.draw_scroll
.scroll_on_bottom:
add ebx,(-SCRLW*2-1)*65536+SCRLW
jmp .draw_tabs.draw_scroll
.scroll_on_left:
mov ebx,[tab_bar.Bounds.Left]
add ebx,edx
shl ebx,16
add ebx,(-SCRLW*2)*65536+SCRLW
jmp .draw_tabs.draw_scroll
.scroll_on_right:
shl edx,16
sub ebx,edx
add ebx,SCRLW
 
.draw_tabs.draw_scroll:
mcall 8,,,'TBG' or 0x40000000
push ebx
add ebx,SCRLW*65536
mcall 8,,,'TBL' or 0x40000000
pop ebx
push ebx ecx
sar ebx,16
sar ecx,16
push ebx ecx SCRLW SCRLW
call draw_3d_panel
add ebx,SCRLW
push ebx ecx SCRLW SCRLW
call draw_3d_panel
pop ecx ebx
 
push '<'
shr ecx,16
mov bx,cx
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3
mcall 4,,[sc.work_text],esp,1
add ebx,0x00020000
mcall
add ebx,(SCRLW-2)*65536
mov byte[esp],'>'
mcall
add ebx,0x00020000
mcall
add esp,4
 
ret 8
 
.curr_left:
add ebx,0x00010000
add ecx,1*65536-2
ret
.curr_top:
add ebx,1*65536-2
add ecx,0x00010000
ret
.curr_right:
dec ebx
add ecx,1*65536-2
ret
.curr_bottom:
add ebx,1*65536-2
dec ecx
ret
 
.check_horz:
lea eax,[ebx-1]
add eax,esi
sub eax,[tab_bar.Bounds.Right]
jge .check.dontfit
add eax,SCRLW*2+2
jl .check.fit
cmp dword[esp+4],1
jbe .check.fit
.check.dontfit:
stc
ret
.check_vert:
lea eax,[ecx-1]
add eax,edi
sub eax,[tab_bar.Bounds.Bottom]
jge .check.dontfit
add eax,SCRLW+2
jl .check.fit
cmp dword[esp+4],1
ja .check.dontfit
.check.fit:
clc
ret
 
.next_horz:
movzx ebx,bx
lea esi,[esi+ebx+1]
ret
.next_vert:
movzx ecx,cx
lea edi,[edi+ecx+1]
ret
endf
 
;-----------------------------------------------------------------------------
func get_tab_size ;///// GET TAB WIDTH ///////////////////////////////////////
;-----------------------------------------------------------------------------
; EBP = TABITEM*
;-----------------------------------------------------------------------------
push eax
mcall 13
cmp [tab_bar.Style],3
jae .lp1
lea eax,[ebp+TABITEM.Editor.FilePath]
add eax,[ebp+TABITEM.Editor.FileName]
call strlen
imul ebx,eax,6
add ebx,9
jmp .lp2
.lp1: call get_max_tab_width
mov ebx,eax
.lp2: mov ecx,TBARH-1
pop eax
add eax,-2
shl eax,16
add ebx,eax
mov bx,3
mov edx,[cl_3d_inset]
call draw_framerect
ret
endf
 
.tabs_on_right:
call get_max_tab_width
mov ebx,[tab_bar.Bounds.Right-2]
mov bx,ax
shl eax,16
sub ebx,eax
add ecx,1*65536-2
mcall 13
add ebx,-1*65536
mov bx,3
mov edx,[cl_3d_inset]
call draw_framerect
;-----------------------------------------------------------------------------
func get_max_tab_width ;///// GET WIDTH OF LONGEST TAB ///////////////////////
;-----------------------------------------------------------------------------
push ebx ecx ebp
mov ecx,[tab_bar.Items.Count]
mov ebp,[tab_bar.Items]
xor ebx,ebx
@@: dec ecx
js @f
 
lea eax,[ebp+TABITEM.Editor.FilePath]
add eax,[ebp+TABITEM.Editor.FileName]
call strlen
imul eax,6
add eax,9
 
add ebp,sizeof.TABITEM
cmp ebx,eax
jae @b
mov ebx,eax
jmp @b
@@: mov eax,ebx
cmp eax,SCRLW*2+2
jae @f
mov eax,SCRLW*2+2
@@: pop ebp ecx ebx
ret
endf
 
func get_max_tab_width
mov eax,100
;-----------------------------------------------------------------------------
func get_hidden_tabitems_number ;/////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov al,[tab_bar.Style]
dec al
dec al
jle .tabs_horz
dec al
dec al
jle .tabs_vert
ret
 
.tabs_horz:
push draw_tabctl.check_horz draw_tabctl.next_horz
call .calc_tabs
ret
 
.tabs_vert:
push draw_tabctl.check_vert draw_tabctl.next_vert
call .calc_tabs
ret
 
.calc_tabs:
mov esi,[tab_bar.Bounds.Left]
inc esi
mov edi,[tab_bar.Bounds.Top]
inc edi
mov ecx,[tab_bar.Items.Count]
mov ebp,[tab_bar.Items]
imul eax,[tab_bar.Items.Left],sizeof.TABITEM
add ebp,eax
mov eax,ecx
sub eax,[tab_bar.Items.Left]
push eax
@@: push ecx
 
call get_tab_size
 
call dword[esp+(8+4)+4]
jc .calc_tabs.dontfit
 
call dword[esp+(8+4)+0]
add ebp,sizeof.TABITEM
 
pop ecx
dec ecx
dec dword[esp]
jnz @b
 
jmp @f
 
.calc_tabs.dontfit:
 
add esp,4
@@: pop ecx
mov eax,ecx
ret 8
endf
 
func align_editor_in_tab
m2m [cur_tab.Editor.Bounds.Left],[tab_bar.Bounds.Left]
m2m [cur_tab.Editor.Bounds.Top],[tab_bar.Bounds.Top]
m2m [cur_tab.Editor.Bounds.Right],[tab_bar.Bounds.Right]
m2m [cur_tab.Editor.Bounds.Bottom],[tab_bar.Bounds.Bottom]
;-----------------------------------------------------------------------------
func align_editor_in_tab ;///// ADJUST EDITOR POSITION TO FIT IN TAB /////////
;-----------------------------------------------------------------------------
m2m [cur_editor.Bounds.Left],[tab_bar.Bounds.Left]
m2m [cur_editor.Bounds.Top],[tab_bar.Bounds.Top]
m2m [cur_editor.Bounds.Right],[tab_bar.Bounds.Right]
m2m [cur_editor.Bounds.Bottom],[tab_bar.Bounds.Bottom]
 
inc [cur_tab.Editor.Bounds.Left]
inc [cur_tab.Editor.Bounds.Top]
dec [cur_tab.Editor.Bounds.Right]
dec [cur_tab.Editor.Bounds.Bottom]
inc [cur_editor.Bounds.Left]
inc [cur_editor.Bounds.Top]
dec [cur_editor.Bounds.Right]
dec [cur_editor.Bounds.Bottom]
 
call get_max_tab_width
lea ebx,[eax+1]
 
mov al,[tab_bar.Style]
dec al
jz .tabs_on_top
275,20 → 657,18
ret
 
.tabs_on_top:
add [cur_tab.Editor.Bounds.Top],TBARH
add [cur_editor.Bounds.Top],TBARH
ret
 
.tabs_on_bottom:
sub [cur_tab.Editor.Bounds.Bottom],TBARH
sub [cur_editor.Bounds.Bottom],TBARH
ret
 
.tabs_on_left:
call get_max_tab_width
add [cur_tab.Editor.Bounds.Left],eax
add [cur_editor.Bounds.Left],ebx
ret
 
.tabs_on_right:
call get_max_tab_width
sub [cur_tab.Editor.Bounds.Right],eax
sub [cur_editor.Bounds.Right],ebx
ret
endf
endf