/programs/develop/tinypad/trunk/tinypad.asm |
---|
3,8 → 3,8 |
; 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-07 (Jan 7, 2007) |
; minimal kernel: revision #138 (svn://kolibrios.org/kernel) |
; last update: 2007-01-18 (Jan 18, 2007) |
; minimal kernel: revision #270 (svn://kolibrios.org/kernel) |
;----------------------------------------------------------------------------- |
; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi |
; maintained by: Mike Semenyako >> mike.dld@gmail.com |
17,15 → 17,13 |
; - 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 (some bug with tab switching) [critical] |
; - add memory reallocation to keys handler [critical] |
; - rework save_file (memory manager) [critical] |
; - 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] |
; TODO (4.0.4, PLANNED FOR 2007-01-21): |
; normal: |
; - finish tabbed interface (tab switching, Ctrl+F4) |
; - reduce flickering (introduce changes checker) |
; - compile default file if selected |
; low: |
; - add prompt to save file before closing/opening |
; |
; HISTORY: |
; 4.0.4 pre (mike.dld) |
32,8 → 30,10 |
; bug-fixes: |
; - statusbar contained hint after dialog operation cancelled |
; - small drawing fix for gutter and line saved/modified markers |
; - incorrect lines marking on Ctrl+V |
; changes: |
; - editor and other modifications to ease parts placement changing |
; - editor and other modifications to ease parts placement changing, |
; including changes in look |
; - modified/saved colors now match those in MSVS |
; - function 70 for *all* file operations (including diamond's fixes) |
; - use memory manager instead of statically allocated region |
43,7 → 43,8 |
; 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) |
; (thanks IRC guys for ideas and testing |
; - make any tab default to compile it disregarding currently active tab |
; 4.0.3 (mike.dld) |
; bug-fixes: |
; - 1-char selection if pressing <BS> out of real line length |
163,18 → 164,21 |
APP_VERSION equ '4.0.4 pre' |
;include 'debug.inc' |
;define __DEBUG__ 1 |
;define __DEBUG_LEVEL__ 1 |
;include 'debug-fdo.inc' |
ASEPC = '-' ; separator character (char) |
ATOPH = POP_IHEIGHT+2 ; menu bar height (pixels) |
ATOPH = 19 ; menu bar height (pixels) |
SCRLW = 16 ; scrollbar widht/height (pixels) |
ATABW = 8 ; tab width (chars) |
ATABW = 8 ; tab key indent width (chars) |
LINEH = 10 ; line height (pixels) |
PATHL = 256 ; maximum path length (chars) !!! don't change !!! |
AMINS = 8 ; minimal scroll thumb size (pixels) |
LCHGW = 3 ; changed/saved marker width |
LCHGW = 3 ; changed/saved marker width (pixels) |
STATH = 16 ; status bar height |
TBARH = 18 ; tab bar height |
STATH = 16 ; status bar height (pixels) |
TBARH = 18 ; tab bar height (pixels) |
;----------------------------------------------------------------------------- |
section @OPTIONS ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
199,8 → 203,8 |
mainwnd_pos: |
.x dd 250 |
.y dd 75 |
.w dd 6*80+6+SCRLW+5 |
.h dd 402 |
.w dd 6*80+6+SCRLW+5 ;- 220 |
.h dd 402 ;- 220 |
;----------------------------------------------------------------------------- |
section @CODE ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
235,17 → 239,8 |
call mem.Alloc |
mov [temp_buf],eax |
mov eax,65536 |
call mem.Alloc |
mov [cur_editor.Lines],eax |
inc [do_not_draw] |
mov [left_ofs],40+1 |
; mov [f_info+4],0 |
; mov [f_info+12],AREA_TEMP |
; mov [f_info+16],AREA_EDIT-AREA_TEMP |
mov esi,s_example |
mov edi,tb_opensave.text |
mov ecx,s_example.size |
258,6 → 253,8 |
mov [s_search.size],ecx |
rep movsb |
; DEBUGF 1,"params: '%s'\n",@PARAMS |
cmp byte[@PARAMS],0 |
jz no_params |
266,6 → 263,8 |
cmp byte[@PARAMS],'*' |
jne .noipc |
; DEBUGF 1," started by DOCPAK\n" |
;// diamond [ (convert size from decimal representation to dword) |
;-- mov edx,dword[@PARAMS+1] |
mov esi,@PARAMS+1 |
282,16 → 281,26 |
add edx,20 |
; DEBUGF 1," data size (+20) = %d\n",edx |
mov eax,edx |
call mem.Alloc |
mov ebp,eax |
push eax |
; DEBUGF 1," mem.Alloc() returned 0x%x, allocated size = %d\n",eax,[eax-4] |
;! mcall 60,1,AREA_TEMP-16 ; 0x10000-16 |
;! mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8 |
mov dword[ebp+0],0 |
mov dword[ebp+4],8 |
mcall 60,1,ebp |
mov dword[ebp+4],8 |
mcall 40,1000000b |
; DEBUGF 1," got IPC message within 2 secs? " |
mcall 23,200 |
; DEBUGF 1,"%b\n",eax == 7 |
cmp eax,7 |
jne key.alt_x.close |
;! mov esi,AREA_TEMP-16 ; 0x10000-16 |
302,14 → 311,19 |
;! inc eax |
;! call load_file.file_found |
; DEBUGF 1," creating new document\n" |
mov ecx,[ebp+12] |
mov esi,ebp |
lea esi,[ebp+16] |
call create_tab |
call load_from_memory |
pop ebp |
mov eax,ebp |
call mem.Free |
; DEBUGF 1," mem.Free(0x%x) returned %d\n",ebp,eax |
jmp @f |
.noipc: |
327,13 → 341,14 |
jne key.alt_x.close |
lea eax,[edi-tb_opensave.text-1] |
mov [tb_opensave.length],al |
call btn.load_file |
jnc @f |
no_params: |
;call btn.load_file;do_load_file |
;jnc @f |
call create_tab |
@@: |
mov [s_status],0 |
dec [do_not_draw] |
mcall 66,1,1 |
mcall 40,00100111b |
514,12 → 529,6 |
.main: |
xor [options],al |
; test [options],al |
; je @f |
; not al |
; and [options],al |
; ret |
; @@: or [options],al |
ret |
;----------------------------------------------------------------------------- |
578,6 → 587,7 |
0x00000151,key.pgdn ,\ ; PageDown |
0x00000152,key.ins ,\ ; Insert |
0x00000153,key.del ,\ ; Delete |
0x00010043,key.shift_f9 ,\ ; Shift+F9 |
0x00010147,key.shift_home ,\ ; Shift+Home |
0x00010148,key.shift_up ,\ ; Shift+Up |
0x00010149,key.shift_pgup ,\ ; Shift+PageUp |
712,6 → 722,8 |
sz ini_window_right ,'Right',0 |
sz ini_window_bottom,'Bottom',0 |
;include_debug_strings |
TINYPAD_END: ; end of file |
self_path rb PATHL |
746,8 → 758,6 |
copy_size dd ? ; size of data to copy |
s_title.size dd ? ; caption length |
draw_blines dd ? ; last line to draw |
cur_line_len dd ? |
h_popup dd ? |
bot_dlg_handler dd ? |
/programs/develop/tinypad/trunk/tinypad.inc |
---|
21,6 → 21,7 |
FileName dd ? |
Bounds RECT |
Lines dd ? |
Lines.Size dd ? |
Lines.Count dd ? |
Columns.Count dd ? |
Caret POINT |
46,6 → 47,7 |
Items.Left dd ? |
Current TABITEM |
Current.Ptr dd ? |
Default.Ptr dd ? |
Buttons.First dd ? |
Buttons.Last dd ? |
Style db ? |
/programs/develop/tinypad/trunk/tp-common.asm |
---|
499,14 → 499,22 |
;----------------------------------------------------------------------------- |
func line_add_spaces ;//////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; esi = line offset |
; ecx = needed line length |
; Input: |
; ESI = line offset |
; ECX = needed line length |
; Output: |
; EAX = delta |
;----------------------------------------------------------------------------- |
xor eax,eax |
pushad |
movzx edx,word[esi] |
cmp ecx,edx |
jbe .exit |
sub ecx,edx |
lea eax,[ecx+4] |
call editor_realloc_lines |
mov [esp+4*7],eax |
add esi,eax |
push ecx |
mov edi,[cur_editor.Lines] ;! AREA_TEMP2 |
add edi,[edi-4] |
520,7 → 528,6 |
neg ecx |
lea ecx,[esi+ecx+1] |
std |
diff16 '32DC',0,$ |
rep movsb |
pop edi ecx |
add [eax],cx |
549,6 → 556,7 |
or dword[esi],0x00010000 |
mov ecx,[sel.begin.x] |
call line_add_spaces |
add esi,eax |
lea edi,[esi+4] |
mov ecx,[sel.end.y] |
call get_line_offset |
602,6 → 610,17 |
mov eax,[sel.begin.y] |
mov [cur_editor.Caret.Y],eax ;! [pos.y],eax |
mov [cur_editor.SelStart.Y],eax ;! [sel.y],eax |
mov ecx,[cur_editor.Lines.Count] |
call get_line_offset |
movzx eax,word[esi] |
lea esi,[esi+eax+4] |
mov eax,[cur_editor.Lines] |
add eax,[eax-4] |
sub esi,eax |
lea eax,[esi+4096] |
call editor_realloc_lines |
popad |
mov [cur_editor.Modified],1 ;! [modified],1 |
clc |
630,28 → 649,44 |
;----------------------------------------------------------------------------- |
func get_lines_in_file ;////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; Input: |
; ESI = data pointer |
; ECX = data length |
; Output: |
; EAX = lines number |
; EBX = extra length after tabs expansion |
;----------------------------------------------------------------------------- |
push ebx ecx esi |
push ecx edx esi 0 |
or ebx,-1 |
xor edx,edx |
.lp0: inc ebx |
.lp1: dec ecx |
jle .lp2 |
lodsb |
cmp al,0 |
je .lp2 |
cmp al,9 |
je .TB |
cmp al,10 |
je .LF |
cmp al,13 |
je .CR |
inc edx |
jmp .lp1 |
.lp2: mov eax,ebx |
pop esi ecx ebx |
.lp2: lea eax,[ebx+1] |
pop ebx esi edx ecx |
ret |
.CR: cmp byte[esi],10 |
jne .lp0 |
jne .LF |
lodsb |
.LF: jmp .lp0 |
.LF: xor edx,edx |
jmp .lp0 |
.TB: and edx,00000111b |
add dword[esp],ATABW |
sub [esp],edx |
xor edx,edx |
jmp .lp1 |
endf |
;----------------------------------------------------------------------------- |
/programs/develop/tinypad/trunk/tp-draw.asm |
---|
48,23 → 48,8 |
mov [top_ofs],ATOPH;+1 |
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 |
div ebx |
mov [columns.scr],eax |
;// --- columns.scr and lines.scr calculation --- |
mov eax,[cur_editor.Bounds.Bottom] |
sub eax,[cur_editor.Bounds.Top] |
sub eax,SCRLW+3 |
cdq |
mov ebx,LINEH |
div ebx |
mov [lines.scr],eax |
mov eax,[p_info.client_box.height] |
add eax,-STATH+1;*3-2-2 |
sub eax,[bot_dlg_height] |
187,22 → 172,34 |
inc ebx |
mcall 13,,ATOPH-1,[cl_3d_normal] |
mcall 38,[p_info.client_box.width],<ATOPH-1,ATOPH-1>,[sc.frame];[cl_3d_pushed] |
mcall 38,[p_info.client_box.width],<ATOPH-1,ATOPH-1>,[cl_3d_inset] |
mov edx,main_menu |
mov ebx,9*65536+ATOPH/2-4 |
mov ecx,[sc.work_text] |
mov ebx,9*65536+ATOPH/2-3;4 |
;mov ecx,[sc.work_text] |
mov [mi_sel],0 |
mov edi,[mi_cur] |
@@: inc [mi_sel] |
cmp [mi_sel],main_menu.cnt_item |
ja .exit |
mov ecx,[sc.work_text] |
cmp edi,[mi_sel] |
jne .lp1 |
pushad |
push edx |
mcall 13,[edx+0],[edx+4],[cl_3d_pushed] |
;mov ebx,[edx+0] |
mov ecx,[edx+4] |
add ecx,2*65536-2 |
mcall 13,[edx+0],,[sc.work];[cl_3d_pushed] |
mov edx,[esp] |
mov cx,[edx+6] |
add ecx,-1*65536+1 |
add bx,[edx+2] |
mcall 38,,,[cl_3d_inset] |
mov edx,[esp] |
add cx,[edx+4] |
add cx,-2 |
mov bx,[edx+2] |
mcall 38,,,[cl_3d_inset] |
pop edx |
212,6 → 209,7 |
add ebx,eax |
mcall 38,,,[cl_3d_inset] |
popad |
mov ecx,[color_tbl+4*0] |
.lp1: add edx,8+1 |
movzx esi,byte[edx-1] |
mcall 4 |
1128,7 → 1126,7 |
mov ecx,[p_info.client_box.height-2] |
mov cx,word[p_info.client_box.height] |
sub ecx,STATH*65536+STATH |
mcall 38,[p_info.client_box.width],,[sc.frame];[cl_3d_pushed] |
mcall 38,[p_info.client_box.width],,[cl_3d_inset] |
; mcall 9,p_info,-1 |
1235,6 → 1233,29 |
ret |
endf |
func draw_check |
push bx |
shl ebx,16 |
pop bx |
add ebx,0x00010000 |
push cx |
shl ecx,16 |
pop cx |
add ecx,0x00020001 |
; add ecx,0x00040003 |
; sub ebx,0x000A000B |
mcall 38 |
add ecx,0x00010001 |
mcall |
add ebx,4 |
sub ecx,2 |
mcall |
sub ecx,0x00010001 |
mcall |
ret |
endf |
func calc_middle |
shr eax,1 |
shr ebx,1 |
1262,6 → 1283,8 |
mov eax,[cl_3d_inset] |
mov ebx,[cl_3d_outset] |
call calc_middle |
mov ebx,[cl_3d_normal] |
call calc_middle |
mov [cl_3d_pushed],eax |
mov eax,[cl_3d_normal] |
mov ebx,[sc.work_text] |
/programs/develop/tinypad/trunk/tp-editor.asm |
---|
13,23 → 13,7 |
inc ecx |
mov edx,[cl_3d_inset] |
call draw_framerect |
@^ |
mov ebx,[cur_editor.Bounds.Left-2] |
mov bx,word[cur_editor.Bounds.Right] |
mov ecx,[cur_editor.Bounds.Top-2] |
mov cx,word[cur_editor.Bounds.Top] |
mcall 38,,,[cl_3d_inset] |
mov ecx,[cur_editor.Bounds.Bottom-2] |
mov cx,word[cur_editor.Bounds.Bottom] |
mcall |
mov bx,word[cur_editor.Bounds.Left] |
mov cx,word[cur_editor.Bounds.Top] |
mcall |
mov ebx,[cur_editor.Bounds.Right-2] |
mov bx,word[cur_editor.Bounds.Right] |
mov cx,word[cur_editor.Bounds.Top] |
mcall |
^@ |
mov [cur_editor.Gutter.Visible],0 |
test [options],OPTS_LINENUMS |
jnz @f |
49,6 → 33,26 |
.lp1: mov [cur_editor.Gutter.Width],eax ;! [left_ofs],eax |
mov [left_ofs],eax |
mov eax,[cur_editor.Bounds.Right] |
sub eax,[cur_editor.Bounds.Left] |
sub eax,[cur_editor.Gutter.Width] |
sub eax,SCRLW+LCHGW+4 |
js .exit |
cdq |
mov ebx,6 |
div ebx |
mov [columns.scr],eax |
mov eax,[cur_editor.Bounds.Bottom] |
sub eax,[cur_editor.Bounds.Top] |
sub eax,SCRLW+3 |
js .exit |
cdq |
mov ebx,LINEH |
div ebx |
mov [lines.scr],eax |
call draw_editor_gutter |
call draw_editor_vscroll |
call draw_editor_hscroll |
55,6 → 59,7 |
call draw_editor_text |
call draw_editor_caret |
.exit: |
ret |
endf |
171,7 → 176,7 |
mov ecx,[cur_editor.TopLeft.Y] |
mov edx,[cur_editor.Bounds.Bottom] |
sub edx,[cur_editor.Bounds.Top] |
add edx,-SCRLW*3+1 |
add edx,-SCRLW*3;+1 |
call get_scroll_vars |
mov [cur_editor.VScroll.Top],eax |
mov [cur_editor.VScroll.Size],ebx |
273,6 → 278,7 |
mov ebx,[columns.scr] |
mov ecx,[cur_editor.TopLeft.X] |
mov edx,[cur_editor.Bounds.Right] |
sub edx,[cur_editor.Bounds.Left] |
add edx,-(SCRLW*3) |
call get_scroll_vars |
mov [cur_editor.HScroll.Top],eax |
329,7 → 335,10 |
;----------------------------------------------------------------------------- |
func draw_editor_text ;///// DRAW EDITOR TEXT //////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[cur_editor.Bounds.Bottom] |
cmp [cur_editor.Lines],0 |
jne @f |
ret |
@@: mov eax,[cur_editor.Bounds.Bottom] |
sub eax,[cur_editor.Bounds.Top] |
cmp eax,LINEH |
jge @f |
363,9 → 372,6 |
add esp,-4 |
imul ebp,[cur_editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536 |
mov eax,[lines.scr] |
sub eax,[cur_editor.Lines.Count] ;! eax,[lines] |
mov [draw_blines],eax |
.next_line: |
683,13 → 689,6 |
.exit: |
cmp [draw_blines],0 |
jl @f |
mov ecx,[esp-8] |
shl ecx,16 |
mov cx,word[cur_editor.Bounds.Bottom] |
sub cx,[esp-8] |
add cx,-SCRLW |
mov eax,[cur_editor.Bounds.Left] |
add eax,[cur_editor.Gutter.Width] |
inc eax |
698,8 → 697,27 |
mov bx,word[cur_editor.Bounds.Right] |
sub bx,ax |
add ebx,-SCRLW |
mcall 13,,,[color_tbl+4*5] |
@@: |
mov edx,[color_tbl+4*5] |
mov eax,13 |
mov ecx,[esp-8] |
add ecx,LINEH |
shl ecx,16 |
mov cx,word[cur_editor.Bounds.Bottom] |
sub cx,[esp-8] |
add cx,-SCRLW-LINEH |
jle @f |
mcall |
@@: mov ecx,[cur_editor.Bounds.Top-2] |
mov cx,2 |
add ecx,0x00010000 |
mcall |
mov ebx,[cur_editor.Bounds.Right] |
mov ecx,[cur_editor.Bounds.Bottom] |
shl ebx,16 |
shl ecx,16 |
add ebx,-(SCRLW-1)*65536+SCRLW-1 |
add ecx,-(SCRLW-1)*65536+SCRLW-1 |
mcall |
popad |
add esp,4 |
744,4 → 762,22 |
loop .lp8 |
@@: |
ret |
endf |
endf |
;----------------------------------------------------------------------------- |
func editor_realloc_lines ;///// ADD $DELTA$ TO LINES SIZE /////////////////// |
;----------------------------------------------------------------------------- |
; EAX = delta |
;----------------------------------------------------------------------------- |
push ebx ecx |
mov ebx,[cur_editor.Lines.Size] |
add ebx,eax |
mov eax,[cur_editor.Lines] |
mov [cur_editor.Lines.Size],ebx |
mov ecx,eax |
call mem.ReAlloc |
mov [cur_editor.Lines],eax |
sub eax,ecx |
pop ecx ebx |
ret |
endf |
/programs/develop/tinypad/trunk/tp-files.asm |
---|
1,8 → 1,6 |
;----------------------------------------------------------------------------- |
func save_file ;////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
ret ; DISALLOW FOR NOW |
mov esi,tb_opensave.text |
mov edi,f_info.path |
movzx ecx,[tb_opensave.length] |
12,26 → 10,45 |
mov byte[edi],0 |
mov esi,[cur_editor.Lines] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum) |
mov edi,0 ;!!! AREA_TEMP |
xor ebx,ebx |
mov ecx,[cur_editor.Lines.Count] |
@@: call get_real_length |
add ebx,eax |
movzx eax,word[esi] |
lea esi,[esi+eax+4] |
loop @b |
mov eax,[cur_editor.Lines.Count] |
shl eax,1 |
lea eax,[eax+ebx+1024] |
call mem.Alloc |
push eax |
mov esi,[cur_editor.Lines] |
mov edi,eax ;!!! AREA_TEMP |
; pop eax |
; ret ; DISALLOW FOR NOW |
.new_string: |
call save_string |
cmp dword[esi],0 |
jne .new_string |
sub edi,0 ;!!! AREA_TEMP+2 ; minus last CRLF |
pop eax |
sub edi,eax ;!!! AREA_TEMP+2 ; minus last CRLF |
add edi,-2 |
;! mov [filelen],edi |
cmp byte[f_info.path],'/' |
je .systree_save |
mcall 33,f_info.path,0,edi,0 ;!!! AREA_TEMP,edi,0;[filelen],0 |
or eax,eax |
jz .exit |
; cmp byte[f_info.path],'/' |
; je .systree_save |
; mcall 33,f_info.path,0,edi,0 ;!!! AREA_TEMP,edi,0;[filelen],0 |
; or eax,eax |
; jz .exit |
; call file_not_found |
jmp .exit.2 |
; jmp .exit.2 |
.systree_save: |
mov [f_info70+0],2 |
mov [f_info70+12],edi |
mov [f_info70+16],0 ;!!! AREA_TEMP |
mov [f_info70+16],eax ;!!! AREA_TEMP |
mov byte[f_info70+20],0 |
mov [f_info70+21],f_info.path |
mcall 70,f_info70 |
143,7 → 160,12 |
;----------------------------------------------------------------------------- |
func load_file ;////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov esi,tb_opensave.text |
cmp [tb_opensave.text],0 |
jne @f |
stc |
ret |
@@: mov esi,tb_opensave.text |
mov edi,f_info.path |
movzx ecx,[tb_opensave.length] |
mov [f_info.length],ecx |
214,13 → 236,22 |
; ESI = data pointer |
; EBP = EDITOR* |
;----------------------------------------------------------------------------- |
; DEBUGF 1,<">>> load_from_memory\n" # \ |
; " data length = %d\n" # \ |
; " data pointer = 0x%x\n" # \ |
; " EDITOR* = 0x%x\n">,ecx,esi,ebp |
call get_lines_in_file |
inc eax |
; DEBUGF 1,"lines in file: %d\n",eax |
mov [ebp+EDITOR.Lines.Count],eax |
lea edx,[ebx+ecx] |
imul ebx,eax,14 |
add ebx,ecx |
add ebx,edx |
; DEBUGF 1,"36522: %d\n",ebx |
mov eax,[ebp+EDITOR.Lines] |
mov [ebp+EDITOR.Lines.Size],ebx |
call mem.ReAlloc |
; DEBUGF 1,"mem.ReAlloc: 0x%x\n",eax |
mov [ebp+EDITOR.Lines],eax |
mov [ebp+EDITOR.Columns.Count],0 |
/programs/develop/tinypad/trunk/tp-key.asm |
---|
155,10 → 155,12 |
;----------------------------------------------------------------------------- |
func key.ctrl_s ;///// ENTER SAVE FILENAME /////////////////////////////////// |
;----------------------------------------------------------------------------- |
cmp [cur_editor.FilePath],'/' |
jne key.shift_ctrl_s |
cmp [cur_editor.Modified],0 ;! [modified],0 |
je .exit |
cmp [f_info.length],0 |
je key.shift_ctrl_s |
;cmp [f_info.length],0 |
;je key.shift_ctrl_s |
call save_file |
call drawwindow |
.exit: |
537,11 → 539,23 |
call delete_selection |
mov eax,[copy_size] |
call editor_realloc_lines |
mov eax,[cur_editor.Lines] |
mov ebx,[cur_editor.Lines.Size] |
add ebx,[copy_size] |
mov [cur_editor.Lines.Size],ebx |
call mem.ReAlloc |
mov [cur_editor.Lines],eax |
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
pushd [esi] esi |
mov ecx,[cur_editor.Caret.X] ;! ecx,[pos.x] |
call line_add_spaces |
add [esp],eax ;!!! |
add esi,eax ;!!! |
mov ecx,[copy_size] |
sub ecx,4 |
mov edi,[cur_editor.Lines] ;! AREA_TEMP2 |
570,6 → 584,7 |
mov ebx,[cur_editor.Caret.X] ;! ebx,[pos.x] |
add eax,ebx |
mov [edi-4],ax |
mov byte[edi-4+2],0x0001 |
sub eax,ebx |
call .check_columns |
add edi,ebx |
579,7 → 594,7 |
lodsd |
and eax,0x0000FFFF |
stosd |
or dword[edi-4],0x00010000 |
mov byte[edi-4+2],0x0001 |
pop ecx |
loop @b |
656,6 → 671,9 |
;----------------------------------------------------------------------------- |
func key.ctrl_d ;///// INSERT SEPARATOR ////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,94 |
call editor_realloc_lines |
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
mov ebx,esi |
702,14 → 720,27 |
call get_line_offset |
mov edi,esi |
lodsd |
and eax,0x0000FFFF |
add esi,eax |
push eax |
dec [cur_editor.Lines.Count] ;! [lines] |
mov ecx,[temp_buf] ;! AREA_TEMP2 |
;mov ecx,[temp_buf] ;! AREA_TEMP2 |
mov ecx,[cur_editor.Lines] |
add ecx,[ecx-4] |
sub ecx,esi |
shr ecx,2 ;// fixed (was 4) |
cld |
rep movsd |
pop eax |
add eax,4 |
neg eax |
call editor_realloc_lines |
m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
call check_inv_all |
mov [cur_editor.Modified],1 ;! [modified],1 |
1129,6 → 1160,16 |
@@: 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 ecx,[cur_editor.Lines.Count] |
call get_line_offset |
movzx eax,word[esi] |
lea esi,[esi+eax+4] |
mov eax,[cur_editor.Lines] |
add eax,[eax-4] |
sub esi,eax |
lea eax,[esi+4096] |
call editor_realloc_lines |
mov [cur_editor.Modified],1 ;! [modified],1 |
.exit.2: |
call check_inv_all |
1223,6 → 1264,9 |
push eax ' ' |
sub eax,ecx |
.direct: |
push eax |
call editor_realloc_lines |
pop eax |
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
and dword[esi],not 0x00020000 |
1238,6 → 1282,11 |
sub edx,eax |
cmp ecx,edx |
jl @f |
push eax |
mov eax,10 |
call editor_realloc_lines |
add esi,eax |
pop eax |
pushad; esi ecx eax |
mov ecx,[cur_editor.Lines] ;! AREA_TEMP2-10+1 |
add ecx,[ecx-4] |
1247,7 → 1296,7 |
; lea eax,[esi+4] |
; add eax,[esi] |
movzx eax,word[esi] |
lea eax,word[esi+eax+4] |
lea eax,[esi+eax+4] |
sub ecx,eax |
lea esi,[edi-10] ;! AREA_TEMP2-10 |
std |
1298,6 → 1347,9 |
;----------------------------------------------------------------------------- |
call delete_selection |
mov eax,14 |
call editor_realloc_lines |
mov ecx,[cur_editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
1489,3 → 1541,21 |
call create_tab |
@@: ret |
endf |
;----------------------------------------------------------------------------- |
func key.shift_f9 ;///// SET DEFAULT TAB ///////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[tab_bar.Current.Ptr] |
cmp eax,[tab_bar.Default.Ptr] |
jne @f |
xor eax,eax |
@@: mov [tab_bar.Default.Ptr],eax |
mov ebp,[tab_bar.Current.Ptr] |
call make_tab_visible |
cmp [tab_bar.Style],2 |
jbe @f |
call align_editor_in_tab |
call draw_editor |
@@: call draw_tabctl |
ret |
endf |
/programs/develop/tinypad/trunk/tp-mouse.asm |
---|
3,11 → 3,13 |
mov ebx,eax |
and ebx,0x0000FFFF |
shr eax,16 |
mov ecx,[top_ofs] |
mov ecx,[cur_editor.Bounds.Top] ; ecx,[top_ofs] |
inc ecx |
pushd [left_ofs] ATOPH [p_info.client_box.width] ATOPH |
pushd [cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx ; [left_ofs] ATOPH [p_info.client_box.width] ATOPH |
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0] |
sub [__rc+0x8],SCRLW+6 |
mov ecx,[cur_editor.Gutter.Width] |
add [__rc+0x0],ecx |
imul ecx,[lines.scr],LINEH |
dec ecx |
add [__rc+0xC],ecx |
148,9 → 150,11 |
call clear_selection |
.check_body.2: |
sub eax,[left_ofs] |
sub ebx,[top_ofs] |
dec ebx |
sub eax,[cur_editor.Bounds.Left] ; eax,[left_ofs] |
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs] |
sub eax,[cur_editor.Gutter.Width] |
sub eax,LCHGW |
sub ebx,2 |
; sub ebx,[__rc+0x4] |
push eax |
mov eax,ebx |
196,19 → 200,20 |
jmp still |
.check_vscroll: |
mov ecx,[p_info.client_box.width] |
sub ecx,SCRLW-2 |
pushd ecx [top_ofs] ecx [bot_ofs] |
;mov ecx,[p_info.client_box.width] |
mov ecx,[cur_editor.Bounds.Right] |
sub ecx,SCRLW-1;2 |
pushd ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom] ;ecx [top_ofs] ecx [bot_ofs] |
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0] |
add [__rc+0x8],SCRLW-1;!!!!!!!!!!!!!!-2 |
add [__rc+0x4],SCRLW;!!!!!!!!!!!!!!+1 |
sub [__rc+0xC],SCRLW*2+3 |
add [__rc+0x8],SCRLW-2;!!!!!!!!!!!!!!-2 |
add [__rc+0x4],SCRLW-1;!!!!!!!!!!!!!!+1 |
sub [__rc+0xC],SCRLW*2+1;3 |
mov ecx,__rc |
call pt_in_rect |
jnc .check_hscroll |
.check_vscroll.2: |
sub ebx,[top_ofs] |
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs] |
sub ebx,SCRLW;!!!!!!!!!!!!!!+1 |
; sub ebx,[__rc+0x4] |
cmp [vscrl_capt],0 |
234,10 → 239,10 |
jns @f |
xor ebx,ebx |
@@: mov [mouse_captured],1 |
mov eax,[bot_ofs] |
sub eax,[top_ofs] |
mov eax,[cur_editor.Bounds.Bottom] ; eax,[bot_ofs] |
sub eax,[cur_editor.Bounds.Top] ; eax,[top_ofs] |
sub eax,[cur_editor.VScroll.Size] ;! eax,[vscrl_size] |
sub eax,SCRLW*3-2 |
sub eax,SCRLW*3;-2 |
cmp eax,ebx |
jge @f |
mov ebx,eax |
246,9 → 251,9 |
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 ;** |
mov ebx,[cur_editor.Bounds.Bottom] ; ebx,[bot_ofs] |
sub ebx,[cur_editor.Bounds.Top] ; ebx,[top_ofs] |
sub ebx,SCRLW*3;-2 ;** |
sub ebx,[cur_editor.VScroll.Size] ;! ebx,[vscrl_size] |
idiv ebx |
cmp eax,[cur_editor.TopLeft.Y] ;! eax,[top_line] |
259,11 → 264,12 |
jmp still.skip_write |
.check_hscroll: |
pushd (5+SCRLW+1) [bot_ofs] [p_info.box.width] [bot_ofs] |
pushd [cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom] ; (5+SCRLW+1) [bot_ofs] [p_info.box.width] [bot_ofs] |
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0] |
add [__rc+0x8],-SCRLW*2-10-1 |
add [__rc+0x4],-SCRLW |
add [__rc+0xC],-2 |
add [__rc+0x8],-SCRLW*2-1 |
add [__rc+0x4],-SCRLW+1 |
add [__rc+0xC],-1 |
add [__rc+0x0],SCRLW+1 |
mov ecx,__rc |
call pt_in_rect |
jnc .check_main_menu |
270,7 → 276,9 |
.check_hscroll.2: |
mov ebx,eax |
sub ebx,(5+SCRLW+1) |
;sub ebx,(5+SCRLW+1) |
sub ebx,SCRLW+1 |
sub ebx,[cur_editor.Bounds.Left] |
; sub ebx,[__rc+0x0] |
cmp [hscrl_capt],0 |
jge .hcaptured |
295,9 → 303,9 |
jns @f |
xor ebx,ebx |
@@: mov [mouse_captured],1 |
mov eax,[p_info.box.width] |
mov eax,[cur_editor.Bounds.Right] ; eax,[p_info.box.width] |
sub eax,[cur_editor.HScroll.Size] ;! eax,[hscrl_size] |
sub eax,SCRLW*3+10+1 |
sub eax,SCRLW*3+1 ; eax,SCRLW*3+10+1 |
cmp eax,ebx |
jge @f |
mov ebx,eax |
306,8 → 314,8 |
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 ;** |
mov ebx,[cur_editor.Bounds.Right] ; ebx,[p_info.box.width] |
sub ebx,SCRLW*3+1 ; ebx,SCRLW*3+10+1 ;** |
sub ebx,[cur_editor.HScroll.Size] ;! ebx,[hscrl_size] |
idiv ebx |
cmp eax,[cur_editor.TopLeft.X] ;! eax,[left_col] |
/programs/develop/tinypad/trunk/tp-popup.asm |
---|
178,22 → 178,11 |
test byte[ebp+edi-1],0x02 |
jz .lp8 |
movzx ecx,bx |
shl ecx,16 |
mov cx,bx |
shr ebx,16 |
push bx |
shl ebx,16 |
pop bx |
add ecx,0x00040003 |
sub ebx,0x000A000B |
mcall 38,,,[sc.work_text] |
add ecx,0x00010001 |
mcall |
add ebx,4 |
sub ecx,2 |
mcall |
sub ecx,0x00010001 |
mcall |
add ebx,-11 |
add ecx,2 |
mov edx,[sc.work_text] |
call draw_check |
.lp8: popad |
mov ecx,[sc.work_text];0x00000000 |
/programs/develop/tinypad/trunk/tp-tabctl.asm |
---|
38,16 → 38,15 |
;----------------------------------------------------------------------------- |
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: |
push ebp |
call get_hidden_tabitems_number |
cmp ebp,[esp] |
ja .lp1 |
67,7 → 66,6 |
mov ebx,sizeof.TABITEM |
div ebx |
@@: mov [tab_bar.Items.Left],eax |
add esp,4 |
ret |
endf |
74,6 → 72,7 |
;----------------------------------------------------------------------------- |
func create_tab ;///// ADD TAB TO THE END //////////////////////////////////// |
;----------------------------------------------------------------------------- |
; DEBUGF 1,"items count before addition: %d\n",[tab_bar.Items.Count] |
push eax ecx esi edi |
inc [tab_bar.Items.Count] |
84,11 → 83,15 |
mov [tab_bar.Items],eax |
sub ecx,eax |
sub [tab_bar.Current.Ptr],ecx |
lea ebp,[eax+ebx-sizeof.TABITEM] |
cmp [tab_bar.Default.Ptr],0 |
je @f |
sub [tab_bar.Default.Ptr],ecx |
@@: lea ebp,[eax+ebx-sizeof.TABITEM] |
call set_cur_tab |
call make_tab_visible |
mov eax,1024 |
mov [cur_editor.Lines.Size],eax |
call mem.Alloc |
mov [cur_editor.Lines],eax |
mov [cur_editor.Lines.Count],1 |
115,14 → 118,19 |
rep movsb |
mov [cur_editor.FileName],0 |
mov [f_info.length],0 |
mov [cur_editor.Modified],0 |
mov [cur_editor.AsmMode],0 |
call flush_cur_tab |
call update_caption |
call drawwindow |
;call drawwindow |
cmp [do_not_draw],0 |
jne @f |
call align_editor_in_tab |
call draw_editor |
call draw_tabctl |
call draw_statusbar |
@@: |
mov ebp,cur_tab |
pop edi esi ecx eax |
ret |
131,7 → 139,18 |
;----------------------------------------------------------------------------- |
func delete_tab ;///// DELETE SPECIFIED TAB ////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[ebp+TABITEM.Editor.Lines] |
; DEBUGF 1,"items count before deletion: %d\n",[tab_bar.Items.Count] |
cmp [tab_bar.Default.Ptr],0 |
je @f |
cmp ebp,[tab_bar.Default.Ptr] |
je .lp1 |
ja @f |
sub [tab_bar.Default.Ptr],sizeof.TABITEM |
jmp @f |
.lp1: |
mov [tab_bar.Default.Ptr],0 |
@@: mov eax,[ebp+TABITEM.Editor.Lines] |
call mem.Free |
imul ecx,[tab_bar.Items.Count],sizeof.TABITEM |
add ecx,[tab_bar.Items] |
153,7 → 172,10 |
mov [tab_bar.Items],eax |
sub ecx,eax |
sub ebp,ecx |
cmp [tab_bar.Default.Ptr],0 |
je @f |
sub [tab_bar.Default.Ptr],ecx |
@@: |
pop ecx |
add ecx,[tab_bar.Items] |
sub ecx,ebp |
163,14 → 185,20 |
@@: mov [tab_bar.Current.Ptr],0 |
call set_cur_tab |
call make_tab_visible |
call drawwindow |
;call drawwindow |
call align_editor_in_tab |
call draw_editor |
call draw_tabctl |
call draw_statusbar |
ret |
.no_tabs: |
mov eax,[tab_bar.Items] |
call mem.Free |
mov [tab_bar.Items],0 |
mov [tab_bar.Current.Ptr],0 |
xor eax,eax |
mov [tab_bar.Items],eax |
mov [tab_bar.Current.Ptr],eax |
mov [tab_bar.Default.Ptr],eax |
ret |
endf |
354,6 → 382,26 |
mov edx,[color_tbl+4*0] |
.draw_tabs.inactive: |
cmp ebp,[tab_bar.Default.Ptr] |
jne .draw_tabs.notdefault |
push ebx ecx edx |
add ebx,3*65536 |
add ecx,(TBARH/2-6)*65536 |
mov bx,11 |
mov cx,bx |
call draw_framerect |
add ebx,1*65536-2 |
add ecx,1*65536-2 |
mcall 13,,,[sc.work] |
shr ebx,16 |
shr ecx,16 |
add ebx,2 |
add ecx,3 |
mov edx,[esp] |
call draw_check |
pop edx ecx ebx |
.draw_tabs.notdefault: |
push ebx ecx esi edx |
lea eax,[ebp+TABITEM.Editor.FilePath] |
add eax,[ebp+TABITEM.Editor.FileName] |
362,9 → 410,12 |
mov esi,eax |
shr ecx,16 |
mov bx,cx |
add ebx,0x00050005 |
add ebx,5*65536+TBARH/2-4 |
pop ecx |
mcall 4 |
cmp ebp,[tab_bar.Default.Ptr] |
jne .lp2 |
add ebx,13*65536 |
.lp2: mcall 4 |
pop esi ecx ebx |
inc [tab_bar.Buttons.Last] |
533,6 → 584,9 |
call strlen |
imul ebx,eax,6 |
add ebx,9 |
cmp ebp,[tab_bar.Default.Ptr] |
jne .lp2 |
add ebx,13 |
jmp .lp2 |
.lp1: call get_max_tab_width |
mov ebx,eax |
566,6 → 620,9 |
cmp eax,SCRLW*2+2 |
jae @f |
mov eax,SCRLW*2+2 |
@@: cmp [tab_bar.Default.Ptr],0 |
je @f |
add eax,13 |
@@: pop ebp ecx ebx |
ret |
endf |
598,9 → 655,8 |
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 |
imul ebp,[tab_bar.Items.Left],sizeof.TABITEM |
add ebp,[tab_bar.Items] |
mov eax,ecx |
sub eax,[tab_bar.Items.Left] |
push eax |