/programs/develop/tinypad/trunk/macros.inc |
---|
210,7 → 210,7 |
label name } |
macro func name { |
if ~used name |
display 'FUNC NOT USED: ',`name,13,10 |
;display 'FUNC NOT USED: ',`name,13,10 |
else |
align 4 |
name: |
372,7 → 372,26 |
work_graph dd ? |
ends |
struct FILEDATE |
Second db ? |
Minute db ? |
Hour db ? |
db ? |
Day db ? |
Month db ? |
Year dw ? |
ends |
struct FILEINFO |
Attributes dd ? |
IsUnicode db ? |
db 3 dup(?) |
DateCreate FILEDATE |
DateAccess FILEDATE |
DateModify FILEDATE |
Size dq ? |
ends |
; constants |
; events |
/programs/develop/tinypad/trunk/tinypad.asm |
---|
1,9 → 1,9 |
;----------------------------------------------------------------------------- |
; project name: TINYPAD |
; compiler: flat assembler 1.67.1 |
; 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: 2006-12-30 (Dec 30, 2006) |
; last update: 2007-01-03 (Jan 3, 2007) |
; minimal kernel: revision #138 (svn://kolibrios.org/kernel) |
;----------------------------------------------------------------------------- |
; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi |
10,22 → 10,33 |
; maintained by: Mike Semenyako >> mike.dld@gmail.com |
; Ivan Poddubny >> ivan-yar@bk.ru |
;----------------------------------------------------------------------------- |
; TODO: |
; TODO (FOR 4.1.0): |
; - optimize drawing (reduce flickering) |
; - optimize memory usage (allocate only needed amount, not static 3 Mbytes) |
; - add block selection ability, undo action, goto position |
; - working with multiple files (add tabs) |
; - add vertical selection, undo, goto position, overwrite mode |
; - improve window drawing with small dimensions |
; - other bugfixes and speed/size optimizations |
; - other bug-fixes and speed/size optimizations |
; |
; TODO (FOR 4.0.4, PLANNED FOR 2007-01-21): |
; - finish tabbed interface [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] |
; |
; HISTORY: |
; 4.0.4 pre (mike.dld) |
; bug-fixes: |
; - clear statusbar text if dialog operation cancelled |
; - statusbar contained hint after dialog operation cancelled |
; - small drawing fix for gutter and line saved/modified markers |
; changes: |
; - 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 |
; new features: |
; - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor) |
; - tabbed interface, ability to open several files in one app instance |
; 4.0.3 (mike.dld) |
; bug-fixes: |
; - 1-char selection if pressing <BS> out of real line length |
132,22 → 143,14 |
; auto-indent |
; Ctrl+L - insert comment string |
;----------------------------------------------------------------------------- |
; Memory 0x300000: |
; stack for popup 0x00dff0 - |
; stack for help 0x00eff0 - |
; stack 0x00fff0 - |
; load position 0x010000 + |
; edit area 0x080000 + |
; copy/paste area 0x2f0000 + |
;----------------------------------------------------------------------------- |
include 'lang.inc' |
include 'macros.inc' ; useful stuff |
;include 'proc32.inc' |
include 'tinypad.inc' |
;purge mov,add,sub ; SPEED |
purge mov,add,sub ; SPEED |
header '01',1,@CODE,TINYPAD_END,AREA_ENDMEM,MAIN_STACK,@PARAMS,self_path |
header '01',1,@CODE,TINYPAD_END,STATIC_MEM_END,MAIN_STACK,@PARAMS,self_path |
APP_VERSION equ '4.0.4 pre' |
155,15 → 158,15 |
ASEPC = '-' ; separator character (char) |
ATOPH = POP_IHEIGHT+2 ; menu bar height (pixels) |
;OLEFT = 50+1 ; left offset (pixels) !!! don't change !!! |
SCRLW = 16 ; scrollbar widht/height (pixels) |
ATABW = 8 ; tab width (chars) |
LINEH = 10 ; line height (pixels) |
PATHL = 255 ; maximum path length (chars) !!! don't change !!! |
PATHL = 256 ; maximum path length (chars) !!! don't change !!! |
AMINS = 8 ; minimal scroll thumb size (pixels) |
LCHGW = 2 ; changed/saved marker width |
LCHGW = 3 ; changed/saved marker width |
STATH = 14 ; status bar height |
STATH = 16 ; status bar height |
TBARH = 18 ; tab bar height |
MEV_LDOWN = 1 |
MEV_LUP = 2 |
184,8 → 187,8 |
RGB(255,255,255) ; RGB(224,224,224) ; RGB(255,255,255) ; 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(255,255, 0) ; modified line marker |
RGB( 0,255, 0) ; saved line marker |
RGB(255,238, 98) ; modified line marker |
RGB(108,226,108) ; saved line marker |
ins_mode db 1 |
220,12 → 223,26 |
mov al,0 |
rep stosb |
mov [tab_bar.Style],2 |
mcall 68,11 |
or eax,eax |
jz key.alt_x.close |
mov eax,65536 |
call mem.Alloc |
mov [temp_buf],eax |
mov eax,65536 |
call mem.Alloc |
mov [cur_tab.Editor.Data],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 [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 |
262,17 → 279,35 |
;// diamond ] |
add edx,20 |
mcall 60,1,AREA_TEMP-16 ; 0x10000-16 |
mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8 |
mov eax,edx |
call mem.Alloc |
mov ebp,eax |
;! mcall 60,1,AREA_TEMP-16 ; 0x10000-16 |
;! mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8 |
mcall 60,1,ebp |
mov dword[ebp+4],8 |
mcall 40,1000000b |
mcall 23,200 |
cmp eax,7 |
jne key.alt_x.close ; ýòî íà mcall -1 ìåòêà |
mov esi,AREA_TEMP-16 ; 0x10000-16 |
mov byte[esi],1 |
mov eax,[esi+12] |
inc eax |
call load_file.file_found |
jne key.alt_x.close |
;! mov esi,AREA_TEMP-16 ; 0x10000-16 |
;! mov byte[esi],1 |
;! mov eax,[esi+12] |
mov byte[ebp],1 |
;! mov eax,[ebp+12] |
;! inc eax |
;! call load_file.file_found |
mov ecx,[ebp+12] |
mov esi,ebp |
call create_tab |
call load_from_memory |
mov eax,ebp |
call mem.Free |
jmp @f |
.noipc: |
292,9 → 327,9 |
mov [tb_opensave.length],al |
no_params: |
call btn.load_file;do_load_file |
jnc @f |
call new_file |
;call btn.load_file;do_load_file |
;jnc @f |
call create_tab |
@@: |
dec [do_not_draw] |
307,7 → 342,7 |
;----------------------------------------------------------------------------- |
still: |
call writepos ; write current position & number of strings |
call draw_statusbar ; write current position & number of strings |
.skip_write: |
mcall 10;23,50; wait here until event |
329,7 → 364,7 |
;----------------------------------------------------------------------------- |
; BL = run after compile |
;----------------------------------------------------------------------------- |
cmp [asm_mode],0 |
cmp [cur_tab.Editor.AsmMode],0 ;! [asm_mode],0 |
jne @f |
ret |
@@: mov esi,f_info.path ; s_fname |
458,48 → 493,37 |
; @@: ret |
;endf |
func set_opt |
test [options],al |
je @f |
not al |
and [options],al |
ret |
@@: or [options],al |
ret |
endf |
set_opt: |
func set_line_numbers |
.line_numbers: |
mov al,OPTS_LINENUMS |
call set_opt |
ret |
endf |
func set_optimal_fill |
jmp .main |
.optimal_fill: |
mov al,OPTS_OPTIMSAVE |
call set_opt |
ret |
endf |
func set_auto_indents |
jmp .main |
.auto_indents: |
mov al,OPTS_AUTOINDENT |
call set_opt |
ret |
endf |
func set_auto_braces |
jmp .main |
.auto_braces: |
mov al,OPTS_AUTOBRACES |
call set_opt |
ret |
endf |
jmp .main |
.secure_sel: |
mov al,OPTS_SECURESEL |
func set_secure_sel |
mov al,OPTS_SECURESEL |
call set_opt |
.main: |
xor [options],al |
; test [options],al |
; je @f |
; not al |
; and [options],al |
; ret |
; @@: or [options],al |
ret |
endf |
;----------------------------------------------------------------------------- |
include 'tp-defines.inc' |
include 'tp-draw.asm' |
include 'tp-key.asm' |
include 'tp-button.asm' |
509,6 → 533,8 |
include 'tp-dialog.asm' |
include 'tp-popup.asm' |
include 'tp-tbox.asm' |
include 'tp-tabctl.asm' |
include 'tp-editor.asm' |
include 'tp-recode.asm' |
;include 'lib-ini.asm' |
559,6 → 585,7 |
0x00010150,key.shift_down ,\ ; Shift+Down |
0x00010151,key.shift_pgdn ,\ ; Shift+PageDown |
0x00010153,key.del ,\ ; Shift+Delete |
0x0002000F,key.ctrl_tab ,\ ; Ctrl+Tab |
0x00020015,key.ctrl_y ,\ ; Ctrl+Y |
0x00020018,key.ctrl_o ,\ ; Ctrl+O |
0x0002001E,key.ctrl_a ,\ ; Ctrl+A |
582,6 → 609,7 |
\;0x00020150,key.ctrl_down ,\ ; Ctrl+Down |
0x00020151,key.ctrl_pgdn ,\ ; Ctrl+PageDown |
0x00020153,key.del ,\ ; Ctrl+Del |
0x0003000F,key.shift_ctrl_tab ,\ ; Shift+Ctrl+Tab |
0x0003001F,key.shift_ctrl_s ,\ ; Shift+Ctrl+S |
0x00030147,key.shift_ctrl_home ,\ ; Shift+Ctrl+Home |
\;0x00030148,key.shift_ctrl_up ,\ ; Shift+Ctrl+Up |
613,15 → 641,10 |
accel_table2 dd \ |
1,btn.close_main_window ,\ |
\;10000,btn.compile ,\ |
\;10001,btn.compile_run ,\ |
\;10002,btn.debug_board ,\ |
\;10003,btn.sysfuncs_txt ,\ |
'UP',btn.scroll_up ,\ |
'DN',btn.scroll_down ,\ |
'LT',btn.scroll_left ,\ |
'RT',btn.scroll_right ,\ |
\;5,key.ctrl_o ,\ |
0 |
accel_table2_botdlg dd \ |
632,7 → 655,6 |
0 |
add_table: |
; times $61 db -$00 |
times $1A db -$20 |
times $25 db -$00 |
times $10 db -$20 |
641,15 → 663,8 |
times $04 db -$00,-$01 |
times $08 db -$00 |
;error_beep db 0xA0,0x30,0 |
s_status dd 0 |
sz s_example,'EXAMPLE.ASM' |
sz s_still ,'still' |
;sz param_setup,'LANG',0 ; parameter for SETUP |
fasm_start: |
dd 7 |
dd 0 |
679,247 → 694,19 |
dd 0 |
db '/RD/1/DOCPAK',0 |
;sz setup ,'SETUP ' ; to change keyboard layout |
sz sysfuncs_param,'g',0 |
lsz sysfuncs_filename,\ |
ru,<'SYSFUNCR.TXT',0>,\ |
en,<'SYSFUNCS.TXT',0> |
include 'tp-locale.inc' |
sz htext,'TINYPAD ',APP_VERSION |
lszc help_text,b,\ |
ru,':',\ |
ru,' ',\ |
ru,' CTRL+F1 : â® ®ª®',\ |
ru,' CTRL+S : ¥à¢ ï áâப ¤«ï ª®¯¨à®¢ ¨ï',\ |
ru,' CTRL+E : ®á«¥¤ïï áâப ¤«ï ª®¯¨à®¢ ¨ï',\ |
ru,' CTRL+P : áâ ¢¨âì ¢ë¡à ®¥ ⥪ãéãî ¯®§¨æ¨î',\ |
ru,' CTRL+D : ¤ «¨âì áâபã',\ |
ru,' CTRL+L : áâ ¢¨âì áâபã-à §¤¥«¨â¥«ì',\ |
ru,' CTRL+[ : ¥à¥©â¨ ¢ ç «® ä ©« ',\ |
ru,' CTRL+] : ¥à¥©â¨ ¢ ª®¥æ ä ©« ',\ |
ru,' CTRL+F2 : £à㧨âì ä ©«',\ |
ru,' CTRL+F3 : ®¨áª',\ |
ru,' CTRL+F4 : ®åà ¨âì ä ©«',\ |
ru,' CTRL+F5 : ¢¥á⨠¨¬ï ä ©« ',\ |
ru,' CTRL+F6 : ¢¥á⨠áâப㠤«ï ¯®¨áª ',\ |
ru,' CTRL+F8 : ¬¥¨âì à ᪫ ¤ªã ª« ¢¨ âãàë',\ |
\ |
en,'COMMANDS:',\ |
en,' ',\ |
en,' CTRL+F1 : SHOW THIS WINDOW',\ |
en,' CTRL+S : SELECT FIRST STRING TO COPY',\ |
en,' CTRL+E : SELECT LAST STRING TO COPY',\ |
en,' CTRL+P : PASTE SELECTED TO CURRENT POSITION',\ |
en,' CTRL+D : DELETE CURRENT LINE',\ |
en,' CTRL+L : INSERT SEPARATOR LINE',\ |
en,' CTRL+[ : GO TO THE BEGINNING OF FILE',\ |
en,' CTRL+] : GO TO THE END OF FILE',\ |
en,' CTRL+F2 : LOAD FILE',\ |
en,' CTRL+F3 : SEARCH',\ |
en,' CTRL+F4 : SAVE FILE',\ |
en,' CTRL+F5 : ENTER FILENAME',\ |
en,' CTRL+F6 : ENTER SEARCH STRING',\ |
en,' CTRL+F8 : CHANGE KEYBOARD LAYOUT' |
db 0 |
menubar_res main_menu,\ |
ru,' ©«' ,popup_file ,onshow.file ,\ |
ru,'à ¢ª ' ,popup_edit ,onshow.edit ,\ |
ru,'®¨áª' ,popup_search ,onshow.search ,\ |
ru,' ¯ãáª' ,popup_run ,onshow.run ,\ |
ru,'®¤¨à®¢ª ',popup_recode ,onshow.recode ,\ |
ru,'¯æ¨¨' ,popup_options,onshow.options,\ |
\ |
en,'File' ,popup_file ,onshow.file ,\ |
en,'Edit' ,popup_edit ,onshow.edit ,\ |
en,'Search' ,popup_search ,onshow.search ,\ |
en,'Run' ,popup_run ,onshow.run ,\ |
en,'Encoding',popup_recode ,onshow.recode ,\ |
en,'Options' ,popup_options,onshow.options |
popup_res popup_file,\ |
ru,'®¢ë©' ,'Ctrl+N' ,key.ctrl_n ,\ |
ru,'âªàëâì...' ,'Ctrl+O' ,key.ctrl_o ,\ |
ru,'®åà ¨âì' ,'Ctrl+S' ,key.ctrl_s ,\ |
ru,'®åà ¨âì ª ª...','Ctrl+Shift+S',key.shift_ctrl_s,\ |
ru,'-' ,'' ,0 ,\ |
ru,'ë室' ,'Alt+X' ,key.alt_x ,\ |
\ |
en,'New' ,'Ctrl+N' ,key.ctrl_n ,\ |
en,'Open...' ,'Ctrl+O' ,key.ctrl_o ,\ |
en,'Save' ,'Ctrl+S' ,key.ctrl_s ,\ |
en,'Save as...','Ctrl+Shift+S',key.shift_ctrl_s,\ |
en,'-' ,'' ,0 ,\ |
en,'Exit' ,'Alt+X' ,key.alt_x |
popup_res popup_edit,\ |
ru,'ë१ âì' ,'Ctrl+X',key.ctrl_x,\ |
ru,'®¯¨à®¢ âì' ,'Ctrl+C',key.ctrl_c,\ |
ru,'áâ ¢¨âì' ,'Ctrl+V',key.ctrl_v,\ |
ru,'¤ «¨âì' ,'' ,key.del ,\ |
ru,'-' ,'' ,0 ,\ |
ru,'뤥«¨âì ¢áñ','Ctrl+A',key.ctrl_a,\ |
\; ru,'-' ,'' ,0 ,\ |
\; ru,'¥à⨪ «ì®¥ ¢ë¤¥«¥¨¥','Alt+Ins',0 ,\ |
\ |
en,'Cut' ,'Ctrl+X',key.ctrl_x,\ |
en,'Copy' ,'Ctrl+C',key.ctrl_c,\ |
en,'Paste' ,'Ctrl+V',key.ctrl_v,\ |
en,'Delete' ,'' ,key.del ,\ |
en,'-' ,'' ,0 ,\ |
en,'Select all','Ctrl+A',key.ctrl_a;,\ |
; en,'-' ,'' ,0 ,\ |
; en,'Vertical selection','Alt+Ins',0 |
popup_res popup_search,\ |
ru,'¥à¥©â¨...' ,'Ctrl+G',key.ctrl_g,\ |
ru,'-' ,'' ,0 ,\ |
ru,' ©â¨...' ,'Ctrl+F',key.ctrl_f,\ |
ru,' ©â¨ ¤ «¥¥','F3' ,key.f3 ,\ |
ru,' ¬¥¨âì...','Ctrl+H',key.ctrl_h,\ |
\ |
en,'Position...','Ctrl+G',key.ctrl_g,\ |
en,'-' ,'' ,0 ,\ |
en,'Find...' ,'Ctrl+F',key.ctrl_f,\ |
en,'Find next' ,'F3' ,key.f3 ,\ |
en,'Replace...' ,'Ctrl+H',key.ctrl_h |
popup_res popup_run,\ |
ru,' ¯ãáâ¨âì' ,'F9' ,key.f9 ,\ |
ru,'®¬¯¨«¨à®¢ âì' ,'Ctrl+F9',key.ctrl_f9 ,\ |
ru,'-' ,'' ,0 ,\ |
ru,'®áª ®â« ¤ª¨' ,'' ,open_debug_board ,\ |
ru,'¨áâ¥¬ë¥ äãªæ¨¨','' ,open_sysfuncs_txt,\ |
\ |
en,'Run' ,'F9' ,key.f9 ,\ |
en,'Compile' ,'Ctrl+F9',key.ctrl_f9 ,\ |
en,'-' ,'' ,0 ,\ |
en,'Debug board' ,'' ,open_debug_board ,\ |
en,'System functions' ,'' ,open_sysfuncs_txt |
popup_res popup_recode,\ |
ru,'CP866 -> CP1251' ,'',recode.866.1251,\ |
ru,'CP1251 -> CP866' ,'',recode.1251.866,\ |
ru,'-' ,'',0,\ |
ru,'CP866 -> KOI8-R' ,'',recode.866.koi,\ |
ru,'KOI8-R -> CP866' ,'',recode.koi.866,\ |
ru,'-' ,'',0,\ |
ru,'CP1251 -> KOI8-R' ,'',recode.1251.koi,\ |
ru,'KOI8-R -> CP1251' ,'',recode.koi.1251,\ |
\ |
en,'CP866 -> CP1251' ,'',recode.866.1251,\ |
en,'CP1251 -> CP866' ,'',recode.1251.866,\ |
en,'-' ,'',0,\ |
en,'CP866 -> KOI8-R' ,'',recode.866.koi,\ |
en,'KOI8-R -> CP866' ,'',recode.koi.866,\ |
en,'-' ,'',0,\ |
en,'CP1251 -> KOI8-R' ,'',recode.1251.koi,\ |
en,'KOI8-R -> CP1251' ,'',recode.koi.1251 |
popup_res popup_options,\ |
ru,'¥è¨© ¢¨¤...' ,'',0,\ |
ru,'-' ,'',0,\ |
ru,'¥§®¯ ᮥ ¢ë¤¥«¥¨¥' ,'',set_secure_sel,\ |
ru,'¢â®¬ â¨ç¥áª¨¥ ᪮¡ª¨' ,'',set_auto_braces,\ |
ru,'¢â®¬ â¨ç¥áª¨© ®âáâã¯' ,'',set_auto_indents,\ |
ru,'¬ ï â ¡ã«ïæ¨ï' ,'',0,\ |
ru,'¯â¨¬ «ì®¥ á®åà ¥¨¥','',set_optimal_fill,\ |
ru,'-' ,'',0,\ |
ru,'®¬¥à áâப' ,'',set_line_numbers,\ |
\ |
en,'Appearance...' ,'',0,\ |
en,'-' ,'',0,\ |
en,'Secure selection' ,'',set_secure_sel,\ |
en,'Automatic brackets' ,'',set_auto_braces,\ |
en,'Automatic indents' ,'',set_auto_indents,\ |
en,'Smart tabulation' ,'',0,\ |
en,'Optimal fill on saving','',set_optimal_fill,\ |
en,'-' ,'',0,\ |
en,'Line numbers' ,'',set_line_numbers |
lsz s_modified,\ |
ru,'§¬¥¥®',\ |
en,'Modified' |
lsz s_2filename,\ |
ru,'¬ï ä ©« :',\ |
en,'Filename:' |
lsz s_2open,\ |
ru,'âªàëâì',\ |
en,'Open' |
lsz s_2save,\ |
ru,'®åà ¨âì',\ |
en,'Save' |
lsz s_2find,\ |
ru,' ©â¨',\ |
en,'Find' |
db ':' |
lsz s_2replace,\ |
ru,' ¬¥¨âì',\ |
en,'Replace' |
db ':' |
lsz s_2cancel,\ |
ru,'⬥ ',\ |
en,'Cancel' |
lsz s_enter_filename,\ |
ru,<'¢¥¤¨â¥ ¨¬ï ä ©« ',0>,\ |
en,<'Enter filename',0> |
lsz s_enter_text_to_find,\ |
ru,<'¢¥¤¨â¥ ⥪áâ ¤«ï ¯®¨áª ',0>,\ |
en,<'Enter text to find',0> |
lsz s_enter_text_to_replace,\ |
ru,<'¢¥¤¨â¥ ⥪áâ ¤«ï § ¬¥ë',0>,\ |
en,<'Enter text to replace',0> |
lsz s_text_not_found,\ |
ru,<'®á⨣ãâ ª®¥æ ä ©« , ⥪áâ ¥ ©¤¥',0>,\ |
en,<'Reached end of file, text not found',0> |
lszc s_fs_error,b,\ |
ru,<'¯¥à æ¨ï § ¢¥àè¥ ãá¯¥è® (0)',0>,\ |
ru,<'',0>,\ |
ru,<'ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ®© ä ©«®¢®© á¨á⥬ë (2)',0>,\ |
ru,<'¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ (3)',0>,\ |
ru,<'',0>,\ |
ru,<'¥¢®§¬®¦® ®âªàëâì ä ©« (5)',0>,\ |
ru,<'¯¥à æ¨ï § ¢¥àè¥ ãá¯¥è® (6)',0>,\ |
ru,<'¤à¥á 室¨âáï § £à ¨æ ¬¨ ¯ ¬ï⨠¯à®£à ¬¬ë (7)',0>,\ |
ru,<' ¤¨áª¥ ¥â ᢮¡®¤®£® ¬¥áâ (8)',0>,\ |
ru,<' ¡«¨æ FAT ã¨ç⮦¥ (9)',0>,\ |
ru,<'®áâ㯠§ ¯à¥éñ (10)',0>,\ |
ru,<'訡ª ãáâனá⢠(11)',0>,\ |
\ |
en,<'Operation executed successfully (0)',0>,\ |
en,<'',0>,\ |
en,<'Function is not supported for the given filesystem (2)',0>,\ |
en,<'Unknown filesystem (3)',0>,\ |
en,<'',0>,\ |
en,<'Unable to open file (5)',0>,\ |
en,<'Operation executed successfully (6)',0>,\ |
en,<'Pointer lies outside of application memory (7)',0>,\ |
en,<'Disk is full (8)',0>,\ |
en,<'FAT table is destroyed (9)',0>,\ |
en,<'Access denied (10)',0>,\ |
en,<'Device error (11)',0> |
sz symbols_ex,';?.%"',"'" |
sz symbols ,'#&*\:/<>|{}()[]=+-, ' |
ini_sec_window db 'Window',0 |
ini_window_top db 'Top',0 |
ini_window_left db 'Left',0 |
ini_window_right db 'Right',0 |
ini_window_bottom db 'Bottom',0 |
sz ini_sec_window ,'Window',0 |
sz ini_window_top ,'Top',0 |
sz ini_window_left ,'Left',0 |
sz ini_window_right ,'Right',0 |
sz ini_window_bottom,'Bottom',0 |
finfo_ini dd ?,?,?,AREA_TEMP,AREA_EDIT-AREA_TEMP |
db '/rd/1/tinypad.ini',0 |
TINYPAD_END: ; end of file |
self_path rb PATHL |
928,38 → 715,26 |
section @UDATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
;----------------------------------------------------------------------------- |
f_info70 rd 7 |
f_info.length dd ? |
f_info dd ?,?,?,?,?;?,0,?,AREA_TEMP,AREA_EDIT-AREA_TEMP |
f_info.path: |
times PATHL+1 db ? |
f_info70 rd 7 |
pos.x dd ? ; global X position (cursor) |
pos.y dd ? ; global Y position (cursor) |
sel.x dd ? ; global X position (selection start) |
sel.y dd ? ; global Y position (selection start) |
lines dd ? ; number of lines in file |
file_info FILEINFO |
tab_bar TABCTL |
virtual at tab_bar.Current |
cur_tab TABITEM |
;cur_tab_addr dd ? |
end virtual |
lines.scr dd ? ; number of lines on the screen |
columns dd ? ; number of columns in file |
columns.scr dd ? ; number of columns on the screen |
top_ofs dd ? ; height occupied by top buttons |
bot_ofs dd ? ; height occupied by bottom buttons |
dw ? |
left_ofs dd ? ; |
top_line dd ? ; topmost visible line on screen |
left_col dd ? ; leftmost visible char on line |
vscrl_top dd ? |
vscrl_size dd ? |
hscrl_top dd ? |
hscrl_size dd ? |
;skinh dd ? ; skin height |
__rc dd ?,?,?,? |
;filelen dd ? ; file size (on save) ??? |
filesize dd ? ; file size (on load) ??? |
ya dd ? ; for read_string |
;copy_start dd ? ; first line for copying (Ctrl+S) |
copy_count dd ? ; number of lines for copying (Ctrl+E) |
copy_size dd ? ; size of data to copy |
s_title.size dd ? ; caption length |
978,7 → 753,6 |
in_sel db ? |
asm_mode db ? ; ASM highlight? |
do_not_draw db ? ; draw top and bottom buttons? |
main_closed db ? ; main window closed? |
tb_casesen db ? ; focused textbox is case-sensitive? |
1021,13 → 795,14 |
bot_mode db ? |
modified db ? |
align 4 |
bot_dlg_height dd ? |
bot_dlg_mode2 db ? |
temp_buf dd ? |
copy_buf dd ? |
;----------------------------------------------------------------------------- |
section @PARAMS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
;----------------------------------------------------------------------------- |
1038,22 → 813,6 |
p_info2 process_information |
sc system_colors |
diff16 'Main memory size',0,$ |
MAIN_STACK = 0x0000FFF0 |
POPUP_STACK = 0x0000EFF0 |
AREA_TEMP = 0x00010000 ; 0x00010000 |
AREA_EDIT = 0x000C0000 ; 0x00080000 |
AREA_TEMP2 = 0x00190000 ; 0x002E0000 |
AREA_CBUF = 0x001A0000 ; 0x002F0000 |
AREA_ENDMEM = 0x001B0000 ; 0x00300000 |
diff10 'Header+options size',0,@CODE |
diff10 'Load area size',AREA_TEMP,AREA_EDIT |
diff10 'Edit area size',AREA_EDIT,AREA_TEMP2 |
diff10 'Total memory usage',0,AREA_ENDMEM |
;store dword '/hd/' at tb_opensave.text+4*0 |
;store dword '1/tp' at tb_opensave.text+4*1 |
;store dword 'ad4/' at tb_opensave.text+4*2 |
1061,3 → 820,13 |
;store dword 'pad.' at tb_opensave.text+4*4 |
;store dword 'asm' at tb_opensave.text+4*5 |
;store byte 23 at tb_opensave.length |
;rb 1024*36 |
rb 1024*4 |
MAIN_STACK: |
rb 1024*4 |
POPUP_STACK: |
STATIC_MEM_END: |
diff10 'Main memory size',0,$ |
/programs/develop/tinypad/trunk/tinypad.inc |
---|
1,3 → 1,56 |
struct POINT |
X dd ? |
Y dd ? |
ends |
struct RECT |
Left dd ? |
Top dd ? |
Right dd ? |
Bottom dd ? |
ends |
struct SCROLLBAR |
Top dd ? |
Size dd ? |
ends |
struct EDITOR |
FilePath db PATHL dup(?) |
FileName dd ? |
Data dd ? |
Bounds RECT |
Caret POINT |
SelStart POINT |
Lines dd ? |
Columns dd ? |
TopLeft POINT |
VScroll SCROLLBAR |
HScroll SCROLLBAR |
Gutter.Width dd ? |
Gutter.Visible db ? |
AsmMode db ? |
Modified db ? |
db ? |
ends |
struct TABITEM |
Editor EDITOR |
ends |
struct TABCTL |
Bounds RECT |
Items dd ? |
Items.Count dd ? |
Current TABITEM |
Current.Ptr dd ? |
Style db ? |
db 3 dup(?) |
ends |
virtual at -20 |
POPUP: |
.actions dd ? |
29,13 → 82,13 |
dw ? ; x |
_name: |
forward |
if (lang eq _lang) |
if (lang eq _lang) | (_lang eq @!) |
db 1 |
end if |
common |
.data: |
forward |
if lang eq _lang |
if (lang eq _lang) | (_lang eq @!) |
if _title eq '-' |
db 1,'-' |
c2 = c2+1 |
63,9 → 116,13 |
align 4 |
.actions: |
forward |
if lang eq _lang |
dd _action |
if (lang eq _lang) | (_lang eq @!) |
if (_action eq ) |
dd 0 |
else |
dd _name#.#_action |
end if |
end if |
common |
.size = $-_name+20 |
.max_title = m1 |
/programs/develop/tinypad/trunk/tp-button.asm |
---|
22,64 → 22,44 |
jmp still.skip_write |
; cmp eax,BUTTON_SCRLUP |
; jne not_up |
btn.scroll_up: |
dec [top_line] |
dec [cur_tab.Editor.TopLeft.Y] ;! [top_line] |
jns @f |
inc [top_line] |
ret;jmp still.skip_write |
inc [cur_tab.Editor.TopLeft.Y] ;! [top_line] |
ret |
@@: call check_inv_all.skip_check |
ret |
; not_up: |
; cmp eax,BUTTON_SCRLDN |
; jne not_down |
btn.scroll_down: |
inc [top_line] |
mov eax,[lines] |
inc [cur_tab.Editor.TopLeft.Y] ;! [top_line] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
sub eax,[lines.scr] |
cmp eax,[top_line] |
cmp eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
jge @f |
dec [top_line] |
;dec eax |
;mov [top_line],eax |
ret;jmp still.skip_write |
dec [cur_tab.Editor.TopLeft.Y] ;! [top_line] |
ret |
@@: call check_inv_all.skip_check |
ret |
; not_down: |
; cmp eax,BUTTON_SCRLLT |
; jne not_left |
btn.scroll_left: |
dec [left_col] |
dec [cur_tab.Editor.TopLeft.X] ;! [left_col] |
jns @f |
inc [left_col] |
inc [cur_tab.Editor.TopLeft.X] ;! [left_col] |
ret;jmp still.skip_write |
@@: call check_inv_all.skip_check |
ret |
; not_left: |
; cmp eax,BUTTON_SCRLRT |
; jne not_right |
btn.scroll_right: |
inc [left_col] |
mov eax,[columns] |
inc [cur_tab.Editor.TopLeft.X] ;! [left_col] |
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
sub eax,[columns.scr] |
cmp eax,[left_col] |
cmp eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jge @f |
dec [left_col] |
;dec eax |
;mov [left_col],eax |
ret;jmp still.skip_write |
dec [cur_tab.Editor.TopLeft.X] ;! [left_col] |
ret |
@@: call check_inv_all.skip_check |
ret |
; not_right: |
; SEARCH { |
; search: |
; cmp al,BUTTON_SEARCH |
; jne no_search |
btn.search: |
key.f3: |
call search |
90,7 → 70,7 |
func search |
cld |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
mov edx,ecx |
call get_line_offset |
cmp word[esi],0 |
100,11 → 80,9 |
or eax,eax |
jz .end_line.2 |
mov ecx,eax |
sub ecx,[pos.x] |
sub ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
push esi |
add esi,[pos.x] |
;dec ecx |
;inc esi |
add esi,[cur_tab.Editor.Caret.X] ;! esi,[pos.x] |
jmp @f |
.next_line: |
140,15 → 118,15 |
.found: |
add esp,4 |
mov [pos.y],edx |
mov [sel.y],edx |
mov [cur_tab.Editor.Caret.Y],edx ;! [pos.y],edx |
mov [cur_tab.Editor.SelStart.Y],edx ;! [sel.y],edx |
mov ecx,edx |
lea eax,[esi-4] |
call get_line_offset |
sub eax,esi |
mov [sel.x],eax |
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
add eax,[s_search.size] |
mov [pos.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
mov [s_status],0 |
clc |
ret |
170,136 → 148,87 |
ret |
endf |
; SEARCH } |
; no_search: |
; TOOLBAR { |
; cmp eax,10000 |
; jb no_toolbar |
; add eax,-10000 |
; jnz @f |
btn.compile: |
key.ctrl_f9: |
mov bl,0;[run_outfile],0 |
mov bl,0 |
call start_fasm |
ret;jmp still |
; @@: dec eax |
; jnz @f |
ret |
btn.compile_run: |
key.f9: |
mov bl,1;[run_outfile],1 |
mov bl,1 |
call start_fasm |
ret;jmp still |
; @@: dec eax |
; jnz @f |
ret |
btn.debug_board: |
call open_debug_board |
ret;jmp still |
; @@: dec eax |
; jnz still |
ret |
btn.sysfuncs_txt: |
call open_sysfuncs_txt |
ret;jmp still |
; TOOLBAR } |
ret |
; no_toolbar: |
; cmp al,4 |
; jne noid4 |
; LOAD_FILE { |
; do_load_file: |
btn.load_file: |
key.ctrl_l: |
; cmp [s_fname],'/' |
; jne @f |
; call load_hd_file |
; jmp .restorecursor |
; @@: call load_file |
call load_file |
jnc @f |
ret |
; .restorecursor: |
@@: |
xor eax,eax |
mov [top_line],eax |
mov [left_col],eax |
mov [pos.x],eax |
mov [pos.y],eax |
mov [sel.x],eax |
mov [sel.y],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 [modified],al |
mov [cur_tab.Editor.Modified],al ;! [modified],al |
; enable color syntax for ASM and INC files: |
mov [asm_mode],al |
mov [cur_tab.Editor.AsmMode],al ;! [asm_mode],al |
mov eax,[f_info.length] ; [s_fname.size] |
add eax,f_info.path ; s_fname |
mov eax,[f_info.length] |
add eax,f_info.path |
mov byte[eax],0 |
mov ecx, dword [eax-3] |
or ecx, 0x202020 |
cmp ecx, 'asm' |
jne @f |
inc [asm_mode] |
inc [cur_tab.Editor.AsmMode] ;! [asm_mode] |
jmp .nocol |
@@: cmp ecx, 'inc' |
jne .nocol |
inc [asm_mode] |
inc [cur_tab.Editor.AsmMode] ;! [asm_mode] |
.nocol: |
update_caption: |
macro unused { |
movzx ecx,[f_info.length] ; [s_fname.size] |
add ecx,10 ; strlen(" - TINYPAD"); |
cmp ecx,[s_title.size] |
jne @f |
add ecx,-10 |
mov esi,f_info.path ; s_fname ; strcmp(s_fname,header); |
lea esi,[cur_tab.Editor.FilePath] ;! mov esi,f_info.path |
mov edi,s_title |
repe cmpsb |
jne @f |
; call draw_file |
clc |
ret;jmp still |
@@: lodsb |
cmp al,0 |
je @f |
stosb |
jmp @b |
@@: |
} |
; set window title: |
mov esi,f_info.path ; s_fname |
mov edi,s_title |
cld |
mov ecx,[f_info.length] ; [s_fname.size] |
jecxz @f |
;lea eax,[ecx+10] |
;mov [s_title.size],eax |
;cld |
rep movsb |
;mov ecx,[f_info.length] |
;jecxz @f |
;rep movsb |
mov dword[edi],' - ' |
add edi,3 |
@@: mov esi,htext |
mov ecx,htext.size |
cld |
rep movsb |
mov al,0 |
stosb |
; call drawwindow |
mcall 71,1,s_title |
clc |
ret;jmp still |
; LOAD_FILE } |
ret |
; noid4: |
; cmp al, 2 |
; jz yessave |
; dec al ; close if butid == 1 |
; jnz nosave |
; EXIT: |
btn.close_main_window: |
key.alt_x: |
mov esi,self_path |
310,11 → 239,6 |
stosb |
or al,al |
jnz @b |
; mov ebx,f_info |
; mov dword[ebx+0],1 |
; mov dword[ebx+8],self_path |
; mov dword[ebx+12],0 |
; mcall 58 |
mov [f_info70+0],2 |
mov [f_info70+4],0 |
325,31 → 249,6 |
mov [f_info70+21],f_info.path |
mcall 70,f_info70 |
; test eax,eax |
; je .close |
; cmp eax,6 |
; je .close |
; ret |
.close: |
mov [main_closed],1 |
mcall -1 |
; SAVE_FILE { |
; yessave: |
; btn.save_file: |
; key.ctrl_s: |
; mov [bot_mode],1 |
; mov [bot_save_mode],1 |
; mov [bot_dlg_height],16*2+4*2-1 |
; mov [bot_dlg_handler],osdlg_handler |
; call drawwindow |
; call save_file |
; ret;jmp still |
; SAVE_FILE } |
; nosave: |
; btn.save_enter_name: |
; inc al |
; call read_string |
; ret;jmp still |
/programs/develop/tinypad/trunk/tp-common.asm |
---|
4,60 → 4,62 |
push eax ebx |
xor bl,bl |
.chk_y: |
mov eax,[pos.y] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
or eax,eax |
jge @f |
mov [pos.y],0 |
mov [cur_tab.Editor.Caret.Y],0 ;! [pos.y],0 |
jmp .chk_dy |
@@: cmp eax,[lines] |
@@: cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
jl .chk_dy |
mov eax,[lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
dec eax |
mov [pos.y],eax |
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax |
.chk_dy: |
mov eax,[top_line] |
cmp eax,[pos.y] |
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
cmp eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
jle @f |
push [pos.y] |
pop [top_line] |
m2m [cur_tab.Editor.TopLeft.Y],[cur_tab.Editor.Caret.Y] |
;! push [pos.y] |
;! pop [top_line] |
inc bl |
@@: add eax,[lines.scr] |
cmp eax,[pos.y] |
cmp eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
jg .chk_x |
mov eax,[pos.y] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
sub eax,[lines.scr] |
inc eax |
mov [top_line],eax |
mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax |
inc bl |
.chk_x: |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
or eax,eax |
jge @f |
mov [pos.x],0 |
mov [cur_tab.Editor.Caret.X],0 ;! [pos.x],0 |
jmp .chk_dx |
@@: cmp eax,[columns] |
@@: cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jl .chk_dx |
mov eax,[columns] |
mov [pos.x],eax |
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
.chk_dx: |
mov eax,[left_col] |
cmp eax,[pos.x] |
mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
jle @f |
push [pos.x] |
pop [left_col] |
m2m [cur_tab.Editor.TopLeft.X],[cur_tab.Editor.Caret.X] |
;! push [pos.x] |
;! pop [left_col] |
inc bl |
@@: add eax,[columns.scr] |
cmp eax,[pos.x] |
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
jg @f |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
sub eax,[columns.scr] |
inc eax |
mov [left_col],eax |
mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax |
inc bl |
@@: cmp [mev],MEV_LDOWN |
jne .exit |
push [pos.x] [pos.y] |
pop [sel.y] [sel.x] |
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] |
.exit: |
or bl,bl |
clc |
72,13 → 74,13 |
func clear_selection ;//////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push eax ebx |
mov eax,[sel.y] |
mov ebx,[pos.y] |
mov eax,[cur_tab.Editor.SelStart.Y] ;! eax,[sel.y] |
mov ebx,[cur_tab.Editor.Caret.Y] ;! ebx,[pos.y] |
cmp eax,ebx |
jle @f |
xchg eax,ebx |
@@: push [pos.x] [pos.y] |
pop [sel.y] [sel.x] |
@@: 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] |
call draw_file.ex |
pop ebx eax |
ret |
105,24 → 107,24 |
func check_bottom_right ;///////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push eax |
mov eax,[top_line] |
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
add eax,[lines.scr] |
cmp eax,[lines] |
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
jbe .lp1 |
mov eax,[lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
sub eax,[lines.scr] |
jns @f |
xor eax,eax |
@@: mov [top_line],eax |
.lp1: mov eax,[left_col] |
@@: mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax |
.lp1: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
add eax,[columns.scr] |
cmp eax,[columns] |
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jbe .exit |
mov eax,[columns] |
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
sub eax,[columns.scr] |
jns @f |
xor eax,eax |
@@: mov [left_col],eax |
@@: mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax |
.exit: |
pop eax |
ret |
148,12 → 150,12 |
;----------------------------------------------------------------------------- |
func check_inv_all ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[pos.y] |
mov ecx,[top_line] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
.skip_init: |
call check_cur_vis |
mov [pos.y],eax |
mov [top_line],ecx |
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax |
mov [cur_tab.Editor.TopLeft.Y],ecx ;! [top_line],ecx |
.skip_check: |
; call clear_screen |
call draw_file |
167,9 → 169,9 |
jb .low |
mov edx,ecx |
add edx,[lines.scr] |
cmp edx,[lines] |
cmp edx,[cur_tab.Editor.Lines] ;! edx,[lines] |
jbe @f |
mov edx,[lines] |
mov edx,[cur_tab.Editor.Lines] ;! edx,[lines] |
@@: cmp eax,edx |
jb @f |
lea ecx,[eax+1] |
180,9 → 182,9 |
.low: mov ecx,eax |
@@: mov edx,ecx |
add edx,[lines.scr] |
cmp edx,[lines] |
cmp edx,[cur_tab.Editor.Lines] ;! edx,[lines] |
jbe @f |
mov ecx,[lines] |
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines] |
sub ecx,[lines.scr] |
jns @f |
xor ecx,ecx |
189,8 → 191,8 |
@@:;mov [top_line],ecx |
pushad |
mov eax,[pos.x] |
mov ebx,[left_col] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
mov ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col] |
mov ecx,ebx |
add ecx,[columns.scr] |
cmp eax,ebx |
201,10 → 203,10 |
sub ebx,[columns.scr] |
jmp @f |
.lp1: mov ebx,eax |
@@: mov [left_col],ebx |
@@: mov [cur_tab.Editor.TopLeft.X],ebx ;! [left_col],ebx |
.exit: |
mov [pos.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
popad |
ret |
230,12 → 232,12 |
; ESI = line data offset |
;----------------------------------------------------------------------------- |
push eax ecx |
mov esi,AREA_EDIT |
jecxz .exit |
@@: movzx eax,word[esi] |
dec ecx |
mov esi,[cur_tab.Editor.Data] ;! AREA_EDIT |
@@: dec ecx |
js .exit |
movzx eax,word[esi] |
lea esi,[esi+eax+4] |
jnz @b |
jmp @b |
.exit: |
pop ecx eax |
ret |
246,10 → 248,10 |
;----------------------------------------------------------------------------- |
pushad |
mov [sel.selected],1 |
mov eax,[sel.x] |
mov ebx,[sel.y] |
mov ecx,[pos.x] |
mov edx,[pos.y] |
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] |
cmp ebx,edx |
jl .lp2 |
jne @f |
353,6 → 355,20 |
endf |
;----------------------------------------------------------------------------- |
func strlen ;///////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx |
mov ebx,eax |
xor eax,eax |
@@: cmp byte[ebx+eax],0 |
je @f |
inc eax |
jmp @b |
@@: pop ebx |
ret |
endf |
;----------------------------------------------------------------------------- |
func rgb_to_gray ;//////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push 0 eax |
492,7 → 508,9 |
jbe .exit |
sub ecx,edx |
push ecx |
mov edi,AREA_TEMP2 |
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add edi,[edi-4] |
dec edi |
mov eax,esi |
mov esi,edi |
sub esi,ecx |
502,6 → 520,7 |
neg ecx |
lea ecx,[esi+ecx+1] |
std |
diff16 '32DC',0,$ |
rep movsb |
pop edi ecx |
add [eax],cx |
516,6 → 535,8 |
;----------------------------------------------------------------------------- |
func delete_selection ;/////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; call init_sel_vars |
cmp [sel.selected],0 |
je .exit.2 |
542,13 → 563,14 |
mov [edi-4],bx |
add edi,[sel.begin.x] |
lea esi,[esi+eax+4] |
mov ecx,AREA_TEMP2 |
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add ecx,[ecx-4] |
sub ecx,esi |
cld |
rep movsb |
mov eax,[sel.end.y] |
sub eax,[sel.begin.y] |
sub [lines],eax |
sub [cur_tab.Editor.Lines],eax ;! [lines],eax |
jmp .exit |
.single_line: |
567,7 → 589,8 |
lea edi,[esi+4] |
add edi,[sel.begin.x] |
lea esi,[edi+ecx] |
mov ecx,AREA_TEMP2 |
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add ecx,[ecx-4] |
sub ecx,esi |
cld |
rep movsb |
574,13 → 597,13 |
.exit: |
mov eax,[sel.begin.x] |
mov [pos.x],eax |
mov [sel.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
mov eax,[sel.begin.y] |
mov [pos.y],eax |
mov [sel.y],eax |
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
popad |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
clc |
ret |
588,3 → 611,103 |
stc |
ret |
endf |
;----------------------------------------------------------------------------- |
func get_selection_size ;///////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ecx esi |
mov ecx,[sel.end.y] |
inc ecx |
call get_line_offset |
mov eax,esi |
mov ecx,[sel.begin.y] |
call get_line_offset |
sub eax,esi |
pop esi ecx |
ret |
endf |
;----------------------------------------------------------------------------- |
func get_lines_in_file ;////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; ESI = data pointer |
; ECX = data length |
;----------------------------------------------------------------------------- |
push ebx ecx esi |
or ebx,-1 |
.lp0: inc ebx |
.lp1: dec ecx |
jle .lp2 |
lodsb |
cmp al,10 |
je .LF |
cmp al,13 |
je .CR |
jmp .lp1 |
.lp2: mov eax,ebx |
pop esi ecx ebx |
ret |
.CR: cmp byte[esi],10 |
jne .lp0 |
lodsb |
.LF: jmp .lp0 |
endf |
;----------------------------------------------------------------------------- |
func mem.Alloc ;////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
lea ecx,[eax+4+4095] |
and ecx,not 4095 |
mcall 68,12 |
add ecx,-4 |
mov [eax],ecx |
add eax,4 |
pop ecx ebx |
ret |
endf |
;----------------------------------------------------------------------------- |
func mem.ReAlloc ;//////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx esi edi eax |
or eax,eax |
jz @f |
lea ecx,[ebx+4+4095] |
and ecx,not 4095 |
add ecx,-4 |
cmp ecx,[eax-4] |
je .exit |
@@: mov eax,ebx |
call mem.Alloc |
xchg eax,[esp] |
or eax,eax |
jz .exit |
mov esi,eax |
xchg eax,[esp] |
mov edi,eax |
mov ecx,[esi-4] |
cmp ecx,[edi-4] |
jbe @f |
mov ecx,[edi-4] |
@@: add ecx,3 |
shr ecx,2 |
cld |
rep movsd |
xchg eax,[esp] |
call mem.Free |
.exit: |
pop eax edi esi ecx ebx |
ret |
endf |
;----------------------------------------------------------------------------- |
func mem.Free ;/////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
lea ecx,[eax-4] |
mcall 68,13 |
pop ecx ebx |
ret |
endf |
/programs/develop/tinypad/trunk/tp-defines.inc |
---|
0,0 → 1,37 |
define mm.File.New key.ctrl_n |
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.Exit key.alt_x |
define mm.Edit.Cut key.ctrl_x |
define mm.Edit.Copy key.ctrl_c |
define mm.Edit.Insert key.ctrl_d |
define mm.Edit.Delete key.del |
define mm.Edit.SelAll key.ctrl_a |
define mm.Search.Position key.ctrl_g |
define mm.Search.Find key.ctrl_f |
define mm.Search.FindNext key.f3 |
define mm.Search.Replace key.ctrl_h |
define mm.Run.Run key.f9 |
define mm.Run.Compile key.ctrl_f9 |
define mm.Run.DbgBoard open_debug_board |
define mm.Run.SysFuncs open_sysfuncs_txt |
define mm.Encoding.CP866.CP1251 recode.866.1251 |
define mm.Encoding.CP1251.CP866 recode.1251.866 |
define mm.Encoding.CP866.KOI8R recode.866.koi |
define mm.Encoding.KOI8R.CP866 recode.koi.866 |
define mm.Encoding.CP1251.KOI8R recode.1251.koi |
define mm.Encoding.KOI8R.CP1251 recode.koi.1251 |
define mm.Options.Appearance 0 |
define mm.Options.SecureSel set_opt.secure_sel |
define mm.Options.AutoBrackets set_opt.auto_braces |
define mm.Options.AutoIndents set_opt.auto_indents |
define mm.Options.SmartTabs 0 |
define mm.Options.OptimalFill set_opt.optimal_fill |
define mm.Options.LineNumbers set_opt.line_numbers |
/programs/develop/tinypad/trunk/tp-dialog.asm |
---|
266,7 → 266,7 |
jnc @f |
.lp2: |
ret |
@@: call update_caption |
@@: ;call update_caption |
xor eax,eax |
mov [bot_mode],al |
mov [bot_dlg_height],eax |
290,16 → 290,21 |
.found: |
;--------------------------------------- |
push [copy_size] [copy_count] |
push [copy_size] [copy_count] [copy_buf] |
mov esi,AREA_CBUF |
mov edi,AREA_CBUF-304 |
mov ecx,300/4 |
rep movsd |
; mov esi,0 ;! AREA_CBUF |
; mov edi,0 ;! AREA_CBUF-304 |
; mov ecx,300/4 |
; rep movsd |
movzx eax,[tb_replace.length] |
add eax,10 |
call mem.Alloc |
mov [copy_buf],eax |
movzx eax,[tb_replace.length] |
mov esi,tb_replace.text |
mov edi,AREA_CBUF |
mov edi,[copy_buf] ;! AREA_CBUF |
stosd |
mov ecx,eax |
jecxz .lp1 |
308,17 → 313,20 |
mov [copy_size],eax |
mov [copy_count],1 |
push [sel.x] |
push [cur_tab.Editor.SelStart.X] ;! [sel.x] |
call init_sel_vars |
call key.ctrl_v |
pop [sel.x] |
pop [cur_tab.Editor.SelStart.X] ;! [sel.x] |
mov esi,AREA_CBUF-304 |
mov edi,AREA_CBUF |
mov ecx,300/4 |
rep movsd |
mov eax,[copy_buf] |
call mem.Free |
pop [copy_count] [copy_size] |
; mov esi,0 ;! AREA_CBUF-304 |
; mov edi,0 ;! AREA_CBUF |
; mov ecx,300/4 |
; rep movsd |
pop [copy_buf] [copy_count] [copy_size] |
;--------------------------------------- |
call check_inv_all |
/programs/develop/tinypad/trunk/tp-draw.asm |
---|
10,22 → 10,6 |
mcall 48,3,sc,sizeof.system_colors |
call calc_3d_colors |
test [options],OPTS_LINENUMS |
jnz @f |
mov eax,2+LCHGW |
jmp .lp1 |
@@: mov edi,p_info+100 |
mov eax,[lines] |
mov ecx,10 |
call uint2str |
lea eax,[edi-p_info-100] |
cmp eax,3 |
jae @f |
mov eax,3 |
@@: imul eax,6 |
add eax,2+4+LCHGW |
.lp1: mov [left_ofs],eax |
mcall 12,1 |
push [color_tbl+4*5] |
50,49 → 34,71 |
cmp [p_info.client_box.height],LINEH |
jl .exit.2 |
;++ calculate editor bounds ++ |
mov [tab_bar.Bounds.Left],0 |
mov [tab_bar.Bounds.Top],ATOPH |
mov eax,[p_info.client_box.width] |
mov [tab_bar.Bounds.Right],eax |
mov eax,[p_info.client_box.height] |
sub eax,[bot_dlg_height] |
add eax,-STATH-1 |
mov [tab_bar.Bounds.Bottom],eax |
call align_editor_in_tab |
mov [top_ofs],ATOPH;+1 |
mov eax,[p_info.client_box.width] |
sub eax,SCRLW+1 |
sub eax,[left_ofs] |
mov eax,[cur_tab.Editor.Bounds.Right] |
sub eax,[cur_tab.Editor.Bounds.Left] |
sub eax,[cur_tab.Editor.Gutter.Width] |
sub eax,SCRLW+LCHGW+4 |
cdq |
mov ebx,6 |
div ebx |
mov [columns.scr],eax |
mov eax,[p_info.client_box.height] ; calculate buttons position |
add eax,-STATH;*3-2-2 |
mov eax,[cur_tab.Editor.Bounds.Bottom] |
sub eax,[cur_tab.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] |
mov [bot_ofs],eax |
call draw_bottom_dialog |
mov [do_not_draw],1 ; do_not_draw = true |
; mov [do_not_draw],1 ; do_not_draw = true |
mov ebx,eax |
sub ebx,[top_ofs] |
sub ebx,SCRLW*3+AMINS+5 |
js .no_draw |
; mov ebx,eax |
; sub ebx,[top_ofs] |
; sub ebx,SCRLW*3+AMINS+5 |
; js .no_draw |
dec [do_not_draw] ; do_not_draw = false |
sub eax,SCRLW+3 |
sub eax,[top_ofs] |
cdq |
mov ebx,LINEH |
div ebx |
mov [lines.scr],eax |
; dec [do_not_draw] ; do_not_draw = false |
; sub eax,SCRLW+3 |
; sub eax,[top_ofs] |
; cdq |
; mov ebx,LINEH |
; div ebx |
; mov [lines.scr],eax |
mov ebx,[p_info.client_box.width] |
mov ecx,[top_ofs-2] |
mov cx,word[top_ofs] |
sub ecx,1*65536+1 |
mcall 38,,,[cl_3d_inset];[sc.work_text] |
mov ecx,[p_info.client_box.height] |
sub ecx,STATH+1 |
push cx |
shl ecx,16 |
pop cx |
mcall |
;-- horizontal lines for menubar and statusbar -- |
;mov ebx,[p_info.client_box.width] |
;mov ecx,[top_ofs-2] |
;mov cx,word[top_ofs] |
;sub ecx,1*65536+1 |
;mcall 38,,,[cl_3d_inset];[sc.work_text] |
;mov ecx,[p_info.client_box.height] |
;sub ecx,STATH+1 |
;push cx |
;shl ecx,16 |
;pop cx |
;mcall |
inc [top_ofs] |
134,7 → 140,11 |
@@: |
.exit: |
call draw_file |
;-- draw file -- |
;call draw_file |
;++ draw editor control ++ |
call draw_editor |
call draw_tabctl |
.exit.2: |
mcall 12,2 |
ret |
177,6 → 187,8 |
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] |
mov edx,main_menu |
mov ebx,9*65536+ATOPH/2-4 |
mov ecx,[sc.work_text] |
220,6 → 232,9 |
; EAX = start line |
; EBX = end line |
;----------------------------------------------------------------------------- |
call draw_editor;_text |
ret |
macro unused { |
cmp [p_info.client_box.height],LINEH |
jge @f |
ret |
235,10 → 250,10 |
cmp eax,ebx |
jle @f |
xchg eax,ebx |
@@: cmp eax,[top_line] |
@@: cmp eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
jge @f |
mov eax,[top_line] |
@@: mov ecx,[top_line] |
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
@@: mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
add ecx,[lines.scr] |
cmp ebx,ecx |
jl @f |
258,19 → 273,23 |
mov ebx,[top_ofs] |
add ebx,[left_ofs-2] |
sub eax,[top_line] |
sub eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
imul eax,LINEH |
add ebx,eax |
imul ebp,[left_col],6*65536 |
imul ebp,[cur_tab.Editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536 |
or [draw_blines],-1 |
jmp draw_file.next_line |
} |
endf |
;----------------------------------------------------------------------------- |
func draw_file ;////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
call draw_editor;_text |
ret |
macro unused { |
cmp [p_info.client_box.height],LINEH |
jge @f |
ret |
283,7 → 302,7 |
mov ebx,[top_ofs] |
add ebx,[left_ofs-2] |
mov ecx,[top_line] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
push ecx |
call get_line_offset |
294,9 → 313,9 |
jle .exit |
add esp,-4 |
imul ebp,[left_col],6*65536 |
imul ebp,[cur_tab.Editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536 |
mov eax,[lines.scr] |
sub eax,[lines] |
sub eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
mov [draw_blines],eax |
.next_line: |
327,7 → 346,7 |
cmp eax,[sel.end.y] |
je .lp5 |
.lp2: mov eax,[sel.begin.x] |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jle .lp6.2 |
cmp eax,[columns.scr] |
jge .lp6 |
350,7 → 369,7 |
cmp eax,[sel.end.y] |
je .lp5 |
.lp4: mov eax,[sel.end.x] |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jle .lp6 |
cmp eax,[columns.scr] |
jg .lp6.2 |
369,7 → 388,7 |
mov bx,ax |
mov [in_sel],3 |
jmp .lp6 |
.lp5: mov eax,[left_col] |
.lp5: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
cmp eax,[sel.begin.x] |
jge .lp4 |
add eax,[columns.scr] |
378,7 → 397,7 |
mov eax,[sel.begin.x] |
cmp eax,[sel.end.x] |
je .lp6 |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
imul eax,6 |
pushad |
mov ebx,[sel.end.x] |
452,13 → 471,13 |
push esi ebx |
mov eax,ebx |
sub ebx,[left_col] |
sub ebx,[cur_tab.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,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jge .qqq |
sub edx,eax |
add esi,eax |
475,7 → 494,7 |
mov eax,[esp] ; ebx |
add eax,[esp+4] ; esi |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
sub eax,[columns.scr] |
jle .qweqwe |
sub esi,eax |
499,7 → 518,7 |
mov esi,[sel.begin.x] |
sub esi,[esp] |
pushad |
mov ecx,[left_col] |
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col] |
sub ecx,[esp+4*8] |
jle @f |
sub esi,ecx |
529,7 → 548,7 |
sub eax,[esp] |
push ebx |
mov ebx,[esp+4] |
sub ebx,[left_col] |
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col] |
jge .ya2.1 |
add eax,ebx |
.ya2.1: |
561,7 → 580,7 |
sub esi,[esp] |
push eax |
mov eax,[esp+4] |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jge .nt3.1 |
add esi,eax |
.nt3.1: |
642,7 → 661,7 |
shl ebx,16 |
add ebx,[top_ofs] |
mov edi,[sc.work_text] |
mov ecx,[top_line] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
inc ecx |
mov edx,p_info+100 |
@@: pushad |
660,10 → 679,10 |
popad |
add ebx,LINEH |
inc ecx |
cmp ecx,[lines] |
cmp ecx,[cur_tab.Editor.Lines] ;! ecx,[lines] |
jg @f |
mov esi,ecx |
sub esi,[top_line] |
sub esi,[cur_tab.Editor.TopLeft.Y] ;! esi,[top_line] |
cmp esi,[lines.scr] |
jbe @b |
@@: add esp,4*8*2 |
688,8 → 707,8 |
add esp,4 |
cmp [bot_mode],0 |
jne @f |
mov ebx,[pos.x] |
sub ebx,[left_col] |
mov ebx,[cur_tab.Editor.Caret.X] ;! ebx,[pos.x] |
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col] |
js @f |
cmp ebx,[columns.scr] |
ja @f |
699,8 → 718,8 |
push bx |
shl ebx,16 |
pop bx |
mov eax,[pos.y] |
sub eax,[top_line] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
sub eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
js @f |
cmp eax,[lines.scr] |
jge @f |
786,15 → 805,15 |
; sub ebx,1*65536-2 |
push ebx |
mov eax,[lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
mov ebx,[lines.scr] |
mov ecx,[top_line] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
mov edx,[bot_ofs] |
sub edx,[top_ofs] |
add edx,-SCRLW*3+1 |
call get_scroll_vars |
mov [vscrl_top],eax |
mov [vscrl_size],ebx |
mov [cur_tab.Editor.VScroll.Top],eax ;! [vscrl_top],eax |
mov [cur_tab.Editor.VScroll.Size],ebx ;! [vscrl_size],ebx |
pop ebx |
mov ecx,eax |
810,7 → 829,7 |
; rol ecx,16 |
; movsx eax,cx |
; sar ecx,16 |
push ebx ecx SCRLW [vscrl_size] |
push ebx ecx SCRLW [cur_tab.Editor.VScroll.Size] ;! ebx ecx SCRLW [vscrl_size] |
dec dword[esp] |
call draw_3d_panel |
popad |
819,7 → 838,7 |
inc ebx |
mov ecx,[top_ofs-2] |
mov cx,word[vscrl_top] |
mov cx,word[cur_tab.Editor.VScroll.Top] ;! cx,word[vscrl_top] |
add ecx,(SCRLW-1)*65536 |
mov edx,[sc.work];[color_tbl+4*5] |
or cx,cx |
827,8 → 846,8 |
mcall 13 |
@@: |
mov ecx,[top_ofs] |
add ecx,[vscrl_top] |
add ecx,[vscrl_size] |
add ecx,[cur_tab.Editor.VScroll.Top] ;! ecx,[vscrl_top] |
add ecx,[cur_tab.Editor.VScroll.Size] ;! ecx,[vscrl_size] |
add ecx,SCRLW-1 |
mov di,cx |
shl ecx,16 |
915,20 → 934,20 |
; inc ecx |
push ecx |
mov eax,[columns] |
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
mov ebx,[columns.scr] |
mov ecx,[left_col] |
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col] |
mov edx,[p_info.client_box.width] |
add edx,-(SCRLW*3) |
call get_scroll_vars |
mov [hscrl_top],eax |
mov [hscrl_size],ebx |
mov [cur_tab.Editor.HScroll.Top],eax ;! [hscrl_top],eax |
mov [cur_tab.Editor.HScroll.Size],ebx ;! [hscrl_size],ebx |
pop ecx |
mov ebx,eax |
add ebx,1+SCRLW |
shl ebx,16 |
mov bx,word[hscrl_size] |
mov bx,word[cur_tab.Editor.HScroll.Size] ;! bx,word[hscrl_size] |
; mcall 13,,,[sc.work_button] |
;!!!!!!!!!!!!!!!!!! |
944,11 → 963,11 |
;!!!!!!!!!!!!!!!!!! |
mov ebx,(1+SCRLW)*65536 |
mov bx,word[hscrl_top] |
mov bx,word[cur_tab.Editor.HScroll.Top] ;! bx,word[hscrl_top] |
mcall 13,,,[sc.work];[color_tbl+4*5] |
mov ebx,1+SCRLW |
add ebx,[hscrl_top] |
add ebx,[hscrl_size] |
add ebx,[cur_tab.Editor.HScroll.Top] ;! ebx,[hscrl_top] |
add ebx,[cur_tab.Editor.HScroll.Size] ;! ebx,[hscrl_size] |
mov di,bx |
shl ebx,16 |
mov bx,word[p_info.client_box.width] |
978,6 → 997,7 |
.exit: |
popad |
ret |
} |
endf |
;----------------------------------------------------------------------------- |
991,7 → 1011,7 |
; EDX = string |
; ESI = length |
;----------------------------------------------------------------------------- |
cmp [asm_mode],0 |
cmp [cur_tab.Editor.AsmMode],0 ;! [asm_mode],0 |
je .plain.text |
xor ebx,ebx |
mov edx,ecx |
1099,12 → 1119,17 |
endf |
;----------------------------------------------------------------------------- |
func writepos ;///// WRITE POSITION ////////////////////////////////////////// |
func draw_statusbar ;///// WRITE POSITION //////////////////////////////////// |
;----------------------------------------------------------------------------- |
cmp [do_not_draw],1 ; return if drawing is not permitted |
jae .exit |
pusha |
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 9,p_info,-1 |
mov ecx,[p_info.client_box.height-2] |
1116,9 → 1141,10 |
mcall 38,<6*13,6*13>,,[cl_3d_inset] |
pushad |
add ecx,1*65536 |
; sub ebx,(6*13+1)*65536-1 |
; sub ebx,[left_ofs] |
mov cx,STATH+1 |
mov cx,STATH |
mcall 13,<0,6*13>,,[cl_3d_normal] |
mcall ,<6*13+1,6*(s_modified.size+2)-1> |
mov ebx,(6*(s_modified.size+15)+1)*65536 |
1133,7 → 1159,7 |
and ecx,0x0000FFFF |
push ecx |
mov eax,[pos.y] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
inc eax |
mov ecx,10 |
mov edi,p_info+0x100;htext2.pos1 |
1141,7 → 1167,7 |
call uint2str |
mov al,',' |
stosb |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
inc eax |
call uint2str |
1156,7 → 1182,7 |
sub ebx,edi |
mcall 4,,[sc.work_text],p_info+0x100 |
cmp [modified],0 |
cmp [cur_tab.Editor.Modified],0 ;! [modified],0 |
je @f |
and ebx,0x0000FFFF |
; add ebx,[left_ofs-2] |
1176,58 → 1202,17 |
ret |
endf |
;----------------------------------------------------------------------------- |
func print_text ;///////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
pusha |
; mov ebx,(LBTNW+5+2)*65536 |
mov bx,word[p_info.box.width] |
; sub bx,LBTNW+RBTNW+10+3 |
mov ecx,[ya-2] |
; mov cx,ABTNH+1 |
mcall 13,,,[sc.work] |
; mov ebx,(LBTNW+5+2+4)*65536+ABTNH/2-3 |
add ebx,[ya] |
mov eax,[p_info.box.width] |
; sub eax,LBTNW+RBTNW+10+8 |
push eax |
cdq |
mov ecx,6 |
div ecx |
cmp eax,PATHL |
jbe @f |
mov eax,PATHL |
@@: mov esi,eax |
mcall 4,,[color_tbl+0],[addr] |
mov eax,[ya] |
mov ebx,eax |
; add eax,ABTNH/2-6 |
shl eax,16 |
add eax,ebx |
; add eax,ABTNH/2-6+11 |
mov ecx,eax |
imul eax,[temp],6 |
pop ebx |
cmp eax,ebx |
jae @f |
; add eax,LBTNW+5+2+4 |
mov ebx,eax |
shl eax,16 |
add ebx,eax |
mcall 38,,,[color_tbl+0] |
@@: popa |
ret |
endf |
func draw_framerect ; ebx,ecx |
func draw_framerect ; ebx,ecx,edx |
push ebx ecx |
; x1 = esp+6 |
; x2 = esp+4 (width) |
; y1 = esp+2 |
; y2 = esp+0 (height) |
add bx,[esp+6] |
mov cx,[esp+2] |
dec ebx |
mcall 38,,,[cl_3d_inset] |
mcall 38 |
add cx,[esp] |
rol ecx,16 |
add cx,[esp] |
1246,6 → 1231,6 |
sub ebx,0x00010001 |
mcall |
add esp,8 |
pop ecx ebx |
ret |
endf |
/programs/develop/tinypad/trunk/tp-editor.asm |
---|
0,0 → 1,757 |
;----------------------------------------------------------------------------- |
func 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] |
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] |
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] |
mcall 38,,,[cl_3d_inset] |
mov ecx,[cur_tab.Editor.Bounds.Bottom-2] |
mov cx,word[cur_tab.Editor.Bounds.Bottom] |
mcall |
mov bx,word[cur_tab.Editor.Bounds.Left] |
mov cx,word[cur_tab.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] |
mcall |
^@ |
mov [cur_tab.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] |
mov edi,p_info+100 |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
mov ecx,10 |
call uint2str |
lea eax,[edi-p_info-100] |
cmp eax,3 |
jae @f |
mov eax,3 |
@@: imul eax,6 |
add eax,8 |
.lp1: mov [cur_tab.Editor.Gutter.Width],eax ;! [left_ofs],eax |
mov [left_ofs],eax |
call draw_editor_gutter |
call draw_editor_vscroll |
call draw_editor_hscroll |
call draw_editor_text |
call draw_editor_caret |
ret |
endf |
;----------------------------------------------------------------------------- |
func draw_editor_gutter ;///////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
cmp [cur_tab.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] |
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] |
add cx,-SCRLW |
add ecx,0x00010000 |
dec cx |
mcall 13,,,[cl_3d_normal] |
add bx,word[cur_tab.Editor.Bounds.Left] |
push bx |
shl ebx,16 |
pop bx |
add ecx,[cur_tab.Editor.Bounds.Top] |
mcall 38,,,[cl_3d_inset] |
add ebx,-2*65536 |
mov bx,word[cur_tab.Editor.Bounds.Top] |
add bx,3 |
mov edi,[sc.work_text] |
mov ecx,[cur_tab.Editor.TopLeft.Y] |
inc ecx |
mov edx,p_info+100 |
@@: pushad |
push eax edx edi |
mov eax,ecx |
mov ecx,10 |
mov edi,edx |
call uint2str |
mov esi,edi |
pop edi edx eax |
sub esi,edx |
imul eax,esi,6*65536 |
sub ebx,eax |
mcall 4,,edi |
popad |
add ebx,LINEH |
inc ecx |
cmp ecx,[cur_tab.Editor.Lines] |
jg @f |
mov esi,ecx |
sub esi,[cur_tab.Editor.TopLeft.Y] |
cmp esi,[lines.scr] |
jbe @b |
@@: add esp,4*8*2 |
.exit: |
ret |
endf |
;----------------------------------------------------------------------------- |
func draw_editor_vscroll ;//////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
;!!!!!!!!!!!!!!!!!! |
mov ebx,[cur_tab.Editor.Bounds.Right] |
shl ebx,16 |
add ebx,(-SCRLW)*65536+SCRLW |
mov ecx,[cur_tab.Editor.Bounds.Top-2] |
mov cx,SCRLW |
mcall 8,,,'UP' or 0x40000000 |
pushad |
sar ebx,16 |
sar ecx,16 |
push ebx ecx SCRLW SCRLW |
call draw_3d_panel |
popad |
mov eax,8 |
;!!!!!!!!!!!!!!!!!! |
pushad |
push 0x18 |
shr ecx,16 |
mov bx,cx |
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3 |
mcall 4,,[sc.work_text],esp,1 |
add esp,4 |
popad |
;!!!!!!!!!!!!!!!!!! |
mov ecx,[cur_tab.Editor.Bounds.Bottom] |
shl ecx,16 |
add ecx,(-SCRLW*2)*65536+SCRLW |
mcall ,,,'DN' or 0x40000000 |
pushad |
sar ebx,16 |
sar ecx,16 |
push ebx ecx SCRLW SCRLW |
call draw_3d_panel |
popad |
mov eax,8 |
;!!!!!!!!!!!!!!!!!! |
pushad |
push 0x19 |
shr ecx,16 |
mov bx,cx |
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3 |
mcall 4,,[sc.work_text],esp,1 |
add esp,4 |
popad |
push ebx |
mov eax,[cur_tab.Editor.Lines] |
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] |
add edx,-SCRLW*3+1 |
call get_scroll_vars |
mov [cur_tab.Editor.VScroll.Top],eax |
mov [cur_tab.Editor.VScroll.Size],ebx |
pop ebx |
mov ecx,eax |
add ecx,[cur_tab.Editor.Bounds.Top] |
add ecx,SCRLW+1 |
;!!!!!!!!!!!!!!!!!! |
pushad |
sar ebx,16 |
push ebx ecx SCRLW [cur_tab.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] |
add ecx,(SCRLW+1)*65536 |
mov edx,[sc.work] |
or cx,cx |
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] |
add ecx,SCRLW+1 |
mov di,cx |
shl ecx,16 |
mov cx,word[cur_tab.Editor.Bounds.Bottom] |
sub cx,di |
sub cx,SCRLW*2;+1 |
jle @f |
mcall |
@@: |
rol ebx,16 |
dec bx |
push bx |
rol ebx,16 |
pop bx |
mov ecx,[cur_tab.Editor.Bounds.Top-2] |
mov cx,word[cur_tab.Editor.Bounds.Bottom] |
add ecx,(SCRLW)*65536-SCRLW*2-1 |
mcall 38,,,[cl_3d_inset] |
ret |
endf |
;----------------------------------------------------------------------------- |
func draw_editor_hscroll ;//////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov ebx,[cur_tab.Editor.Bounds.Left-2] |
mov bx,SCRLW |
mov ecx,[cur_tab.Editor.Bounds.Bottom] |
shl ecx,16 |
add ecx,(-SCRLW)*65536+SCRLW |
mcall 8,,,'LT' or 0x40000000 |
pushad |
sar ebx,16 |
sar ecx,16 |
push ebx ecx SCRLW SCRLW |
call draw_3d_panel |
popad |
;!!!!!!!!!!!!!!!!!! |
pushad |
push 0x1B |
shr ecx,16 |
mov bx,cx |
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3 |
mcall 4,,[sc.work_text],esp,1 |
add esp,4 |
popad |
;!!!!!!!!!!!!!!!!!! |
mov ebx,[cur_tab.Editor.Bounds.Right] |
shl ebx,16 |
add ebx,(-SCRLW*2)*65536+SCRLW |
mcall 8,,,'RT' or 0x40000000 |
pushad |
sar ebx,16 |
sar ecx,16 |
push ebx ecx SCRLW SCRLW |
call draw_3d_panel |
popad |
;!!!!!!!!!!!!!!!!!! |
pushad |
push 0x1A |
shr ecx,16 |
mov bx,cx |
add ebx,(SCRLW/2-2)*65536+SCRLW/2-3 |
mcall 4,,[sc.work_text],esp,1 |
add esp,4 |
popad |
push ecx |
mov eax,[cur_tab.Editor.Columns] |
mov ebx,[columns.scr] |
mov ecx,[cur_tab.Editor.TopLeft.X] |
mov edx,[cur_tab.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 |
pop ecx |
mov ebx,eax |
add ebx,[cur_tab.Editor.Bounds.Left] |
add ebx,SCRLW+1 |
shl ebx,16 |
mov bx,word[cur_tab.Editor.HScroll.Size] |
;!!!!!!!!!!!!!!!!!! |
pushad |
sar ecx,16 |
rol ebx,16 |
movsx eax,bx |
sar ebx,16 |
dec ebx |
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] |
add ebx,(1+SCRLW)*65536 |
mcall 13,,,[sc.work] |
mov ebx,[cur_tab.Editor.Bounds.Left] |
add ebx,1+SCRLW |
add ebx,[cur_tab.Editor.HScroll.Top] |
add ebx,[cur_tab.Editor.HScroll.Size] |
mov di,bx |
shl ebx,16 |
mov bx,word[cur_tab.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] |
add ebx,(SCRLW)*65536-SCRLW*2-1 |
rol ecx,16 |
dec cx |
push cx |
rol ecx,16 |
pop cx |
mcall 38,,,[cl_3d_inset] |
ret |
endf |
;----------------------------------------------------------------------------- |
func draw_editor_text ;/////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[cur_tab.Editor.Bounds.Bottom] |
sub eax,[cur_tab.Editor.Bounds.Top] |
cmp eax,LINEH |
jge @f |
ret |
@@: |
call init_sel_vars |
call check_bottom_right |
pushad |
mov eax,[cur_tab.Editor.Bounds.Left] |
add eax,[cur_tab.Editor.Gutter.Width] |
add eax,LCHGW+3 |
mov [left_ofs],eax |
mov eax,[cur_tab.Editor.Bounds.Top] |
add eax,3 |
mov [top_ofs],eax |
mov ebx,[top_ofs] |
add ebx,[left_ofs-2] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
push ecx |
call get_line_offset |
.start: |
add esp,4 |
mov ecx,[lines.scr] |
or ecx,ecx |
jle .exit |
add esp,-4 |
imul ebp,[cur_tab.Editor.TopLeft.X],6*65536 ;! ebp,[left_col],6*65536 |
mov eax,[lines.scr] |
sub eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
mov [draw_blines],eax |
.next_line: |
push ecx ebx |
mov ecx,ebx |
shl ecx,16 |
mov cl,LINEH |
mov ebx,[cur_tab.Editor.Bounds.Right] |
;sub ebx,[cur_tab.Editor.Bounds.Left] |
add ebx,-SCRLW |
add ebx,[left_ofs-2] |
sub ebx,[left_ofs] |
add ebx,-2*65536+2 |
; selection (text background) |
mov [in_sel],0 |
mov edx,[color_tbl+4*5] |
mov eax,[esp+4*2] |
cmp eax,[sel.begin.y] |
jl .lp6 |
je .lp1 |
cmp eax,[sel.end.y] |
jg .lp6 |
je .lp3 |
jmp .lp6.2 |
.lp1: mov eax,[sel.begin.y] |
cmp eax,[sel.end.y] |
je .lp5 |
.lp2: mov eax,[sel.begin.x] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jle .lp6.2 |
cmp eax,[columns.scr] |
jge .lp6 |
imul eax,6 |
pushad |
sub bx,ax |
rol ebx,16 |
mov bx,ax |
add ebx,[left_ofs] |
add ebx,-2 |
rol ebx,16 |
mov edx,[color_tbl+4*7] |
mcall 13 |
popad |
mov bx,ax |
mov [in_sel],2 |
jmp .lp6 |
.lp3: mov eax,[sel.begin.y] |
cmp eax,[sel.end.y] |
je .lp5 |
.lp4: mov eax,[sel.end.x] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jle .lp6 |
cmp eax,[columns.scr] |
jg .lp6.2 |
imul eax,6 |
pushad |
sub bx,ax |
rol ebx,16 |
add eax,[left_ofs];OLEFT-1 |
add eax,-2 |
mov bx,ax |
rol ebx,16 |
mcall 13 |
popad |
inc eax |
mov edx,[color_tbl+4*7] |
mov bx,ax |
mov [in_sel],3 |
jmp .lp6 |
.lp5: mov eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
cmp eax,[sel.begin.x] |
jge .lp4 |
add eax,[columns.scr] |
cmp eax,[sel.end.x] |
jl .lp2 |
mov eax,[sel.begin.x] |
cmp eax,[sel.end.x] |
je .lp6 |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
imul eax,6 |
pushad |
mov ebx,[sel.end.x] |
sub ebx,[sel.begin.x] |
imul ebx,6 |
sal ebx,16 |
dec eax |
add eax,[left_ofs] |
mov bx,ax |
rol ebx,16 |
mov edx,[color_tbl+4*7] |
mcall 13 |
movzx eax,bx |
sar ebx,16 |
add eax,ebx |
mov ebx,eax |
sal ebx,16 |
sub ax,[esp+4*4] |
neg ax |
add ax,word[left_ofs] |
add ax,-2 |
mov bx,ax |
mov edx,[color_tbl+4*5] |
mcall 13 |
popad |
mov bx,ax |
mov [in_sel],4 |
jmp .lp6 |
.lp6.2: |
mov edx,[color_tbl+4*7] |
inc [in_sel] |
.lp6: |
mcall 13 |
lodsd |
pushad |
mov edx,[color_tbl+4*5] |
test eax,0x00010000 |
jz @f |
mov edx,[color_tbl+4*8] |
test eax,0x00020000 |
jz @f |
mov edx,[color_tbl+4*9] |
@@: mov ebx,[left_ofs] |
add ebx,-LCHGW-2;-4 |
shl ebx,16 |
mov bx,LCHGW |
mcall 13 |
popad |
xor ecx,ecx |
and eax,0x0000FFFF |
mov [cur_line_len],eax |
or eax,eax |
ja .next_block |
add esp,4*2 |
jmp .exit ; .draw_cursor |
.next_block: |
push esi ecx |
call get_next_part |
pop ebx |
push ecx |
mov ecx,eax |
push esi ebx |
mov eax,ebx |
sub ebx,[cur_tab.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] |
jge .qqq |
sub edx,eax |
add esi,eax |
; mov eax,OLEFT*65536 |
xor eax,eax |
jmp .qqq2 |
.qqq: |
; inc eax |
imul eax,6*65536 |
.qqq2: |
and ebx,0x0000FFFF |
add eax,[left_ofs-2];OLEFT*65536 |
add ebx,eax |
mov eax,[esp] ; ebx |
add eax,[esp+4] ; esi |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
sub eax,[columns.scr] |
jle .qweqwe |
sub esi,eax |
.qweqwe: |
mov al,[in_sel] |
cmp al,0 |
je .draw_t |
dec al |
jz .ya4 |
.nt1: dec al |
jnz .nt2 |
mov eax,[esp] |
cmp eax,[sel.begin.x] |
jge .ya4 |
add eax,[esp+4] |
cmp eax,[sel.begin.x] |
jl .draw_t |
;---[ selection crosses block from the right ]-(- |
.ya1: mov eax,esi |
mov esi,[sel.begin.x] |
sub esi,[esp] |
pushad |
mov ecx,[cur_tab.Editor.TopLeft.X] ;! ecx,[left_col] |
sub ecx,[esp+4*8] |
jle @f |
sub esi,ecx |
sub [esp+4],ecx |
@@: sub eax,esi |
add edx,esi |
imul esi,6 |
rol ebx,16 |
add bx,si |
rol ebx,16 |
mov esi,eax |
mov ecx,[color_tbl+4*6] |
mcall 4 |
popad |
jmp .draw_t |
;----------------------------------------------)- |
.nt2: dec al |
jnz .nt3 |
mov eax,[esp] |
cmp eax,[sel.end.x] |
jge .draw_t |
add eax,[esp+4] |
cmp eax,[sel.end.x] |
jl .ya4 |
;---[ selection crosses block from the left ]--(- |
.ya2: mov eax,[sel.end.x] |
sub eax,[esp] |
push ebx |
mov ebx,[esp+4] |
sub ebx,[cur_tab.Editor.TopLeft.X] ;! ebx,[left_col] |
jge .ya2.1 |
add eax,ebx |
.ya2.1: |
pop ebx |
pushad |
mov esi,eax |
mov ecx,[color_tbl+4*6] |
mcall 4 |
popad |
sub esi,eax |
add edx,eax |
imul eax,6*65536 |
add ebx,eax |
jmp .draw_t |
;----------------------------------------------)- |
.nt3: mov eax,[esp] |
cmp eax,[sel.end.x] |
jge .draw_t |
cmp eax,[sel.begin.x] |
jge @f |
add eax,[esp+4] |
cmp eax,[sel.begin.x] |
jl .draw_t |
cmp eax,[sel.end.x] |
jl .ya1 |
;---[ selection inside block ]-----------------(- |
mov eax,esi |
mov esi,[sel.begin.x] |
sub esi,[esp] |
push eax |
mov eax,[esp+4] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
jge .nt3.1 |
add esi,eax |
.nt3.1: |
pop eax |
sub eax,esi |
pushad |
add edx,esi |
imul esi,6*65536 |
add ebx,esi |
mov esi,[sel.end.x] |
sub esi,[sel.begin.x] |
mov ecx,[color_tbl+4*6] |
sub eax,esi |
push eax |
mcall 4 |
add edx,esi |
imul esi,6*65536 |
add ebx,esi |
pop esi |
mov ecx,[esp+4*6] |
mcall 4 |
popad |
jmp .draw_t |
;----------------------------------------------)- |
@@: add eax,esi |
dec eax |
cmp eax,[sel.end.x] |
jge .ya2 |
;---[ block inside selection ]-----------------(- |
.ya4: mov ecx,[color_tbl+4*6] |
;----------------------------------------------)- |
.draw_t: |
mcall 4;[esp+8] |
.skip_t: |
pop eax eax ; ebx esi |
imul eax,6 |
add [esp+4*2+2],ax |
pop ecx esi |
cmp ecx,[cur_line_len];LINE_WIDTH |
jl .next_block |
pop ebx ecx |
and ebx,0x0000FFFF |
add ebx,[left_ofs-2] |
add ebx,LINEH |
add esi,[cur_line_len];LINE_WIDTH |
inc dword[esp] |
dec ecx |
jg .next_line |
.exit: |
cmp [draw_blines],0 |
jl @f |
mov ecx,[esp-8] |
shl ecx,16 |
mov cx,word[cur_tab.Editor.Bounds.Bottom] |
sub cx,[esp-8] |
add cx,-SCRLW |
mov eax,[cur_tab.Editor.Bounds.Left] |
add eax,[cur_tab.Editor.Gutter.Width] |
inc eax |
mov ebx,eax |
shl ebx,16 |
mov bx,word[cur_tab.Editor.Bounds.Right] |
sub bx,ax |
add ebx,-SCRLW |
mcall 13,,,[color_tbl+4*5] |
@@: |
popad |
add esp,4 |
ret |
endf |
;----------------------------------------------------------------------------- |
func draw_editor_caret ;////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
cmp [bot_mode],0 |
jne @f |
mov ebx,[cur_tab.Editor.Caret.X] |
sub ebx,[cur_tab.Editor.TopLeft.X] |
js @f |
cmp ebx,[columns.scr] |
ja @f |
imul ebx,6 |
add ebx,[left_ofs] |
dec ebx |
push bx |
shl ebx,16 |
pop bx |
mov eax,[cur_tab.Editor.Caret.Y] |
sub eax,[cur_tab.Editor.TopLeft.Y] |
js @f |
cmp eax,[lines.scr] |
jge @f |
imul eax,LINEH |
add eax,[top_ofs] |
mov esi,eax |
shl esi,16 |
add eax,LINEH-2 |
mov si,ax |
mov ecx,2 |
cmp [ins_mode],0 |
jne .lp8 |
add cl,4 |
.lp8: push ecx |
mcall 38,,esi,0x01000000 |
add ebx,0x00010001 |
pop ecx |
loop .lp8 |
@@: |
ret |
endf |
/programs/develop/tinypad/trunk/tp-files.asm |
---|
10,18 → 10,18 |
rep movsb |
mov byte[edi],0 |
mov esi,AREA_EDIT ; 0x70000 = 448 Kbytes (maximum) |
mov edi,AREA_TEMP |
mov esi,[cur_tab.Editor.Data] ;! AREA_EDIT ; 0x70000 = 448 Kbytes (maximum) |
mov edi,0 ;!!! AREA_TEMP |
.new_string: |
call save_string |
cmp dword[esi],0 |
jne .new_string |
sub edi,AREA_TEMP+2 ; minus last CRLF |
sub edi,0 ;!!! AREA_TEMP+2 ; minus last CRLF |
;! mov [filelen],edi |
cmp byte[f_info.path],'/' |
je .systree_save |
mcall 33,f_info.path,AREA_TEMP,edi,0;[filelen],0 |
mcall 33,f_info.path,0,edi,0 ;!!! AREA_TEMP,edi,0;[filelen],0 |
or eax,eax |
jz .exit |
; call file_not_found |
40,7 → 40,7 |
mov [f_info70+0],2 |
mov [f_info70+12],edi |
mov [f_info70+16],AREA_TEMP |
mov [f_info70+16],0 ;!!! AREA_TEMP |
mov byte[f_info70+20],0 |
mov [f_info70+21],f_info.path |
mcall 70,f_info70 |
51,7 → 51,7 |
jnz .exit.2 |
.exit: |
mov [modified],0 |
mov [cur_tab.Editor.Modified],0 ;! [modified],0 |
clc |
ret |
145,75 → 145,97 |
@@: inc esi |
mov [s_status],esi |
pop eax |
call writepos |
call draw_statusbar |
ret |
endf |
;----------------------------------------------------------------------------- |
func load_hd_file ;/////////////////////////////////////////////////////////// |
func load_file ;////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov [f_info+0],0 |
mov [f_info+8],300000/512 |
; mov esi,s_fname |
; mov edi,f_info.path;pathfile_read |
; mov ecx,PATHL |
; cld |
; rep movsb |
;mcall 58,f_info ; fileinfo_read |
mov esi,tb_opensave.text |
mov edi,f_info.path |
movzx ecx,[tb_opensave.length] |
mov [f_info.length],ecx |
cld |
rep movsb |
mov byte[edi],0 |
mov [f_info70+0],0 |
mov [f_info70+4],0 |
mov [f_info70+8],0 |
mov [f_info70+12],300000;/512 |
mov [f_info70+16],AREA_TEMP |
mov byte[f_info70+20],0 |
xor eax,eax |
mov [f_info70+0],5 |
mov [f_info70+4],eax |
mov [f_info70+8],eax |
mov [f_info70+12],eax |
mov [f_info70+16],file_info |
mov byte[f_info70+20],al |
mov [f_info70+21],f_info.path |
mcall 70,f_info70 |
mov [f_info70+0],0 |
mov eax,dword[file_info.Size] |
mov [f_info70+12],eax |
call mem.Alloc |
mov [f_info70+16],eax |
mcall 70,f_info70 |
call set_status_fs_error |
mov esi,[f_info70+16] |
xchg eax,ebx |
inc eax |
test ebx,ebx |
je load_file.file_found |
je .file_found |
cmp ebx,6 ;// ATV driver fix (6 instead of 5) |
je load_file.file_found |
; jmp file_not_found |
je .file_found |
mov eax,[f_info70+16] |
call mem.Free |
stc |
ret |
endf |
;----------------------------------------------------------------------------- |
func load_file ;////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
.file_found: |
mov ecx,eax |
call create_tab |
push ecx esi edi |
mov esi,tb_opensave.text |
mov edi,f_info.path |
lea edi,[ebp+TABITEM.Editor.FilePath] |
;mov ecx,[f_info.length] |
movzx ecx,[tb_opensave.length] |
mov [f_info.length],ecx |
cld |
rep movsb |
mov byte[edi],0 |
lea edi,[ebp+TABITEM.Editor.FilePath] |
movzx ecx,[tb_opensave.length] |
@@: cmp byte[edi+ecx-1],'/' |
je @f |
dec ecx |
jmp @b |
@@: mov [ebp+TABITEM.Editor.FileName],ecx |
call flush_cur_tab |
pop edi esi ecx |
call load_from_memory |
mov eax,[f_info70+16] |
call mem.Free |
clc |
ret |
endf |
cmp byte[f_info.path],'/' |
je load_hd_file |
;----------------------------------------------------------------------------- |
func load_from_memory ;/////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; ECX = data length |
; ESI = data pointer |
; EBP = EDITOR* |
;----------------------------------------------------------------------------- |
call get_lines_in_file |
mov [ebp+EDITOR.Lines],eax |
imul ebx,eax,14 |
add ebx,ecx |
mov eax,[ebp+EDITOR.Data] |
call mem.ReAlloc |
mov [ebp+EDITOR.Data],eax |
mcall 6,f_info.path,0,16800,AREA_TEMP ; 6 = open file |
inc eax ; eax = -1 -> file not found |
jnz .file_found |
; jmp file_not_found |
stc |
ret |
mov [ebp+EDITOR.Columns],0 |
mov edi,eax |
mov edx,ecx |
.file_found: |
dec eax |
mov [filesize],eax |
mov [lines],1 |
mov [columns],0 |
mov esi,AREA_TEMP |
mov edi,AREA_EDIT |
mov edx,eax |
.next_line: |
mov ebx,edi |
add edi,4 |
244,11 → 266,10 |
sub eax,10 |
jnz @f |
inc eax |
@@: cmp eax,[columns] |
@@: cmp eax,[ebp+EDITOR.Columns] ;! eax,[columns] |
jbe @f |
mov [columns],eax |
@@: mov [modified],0 |
clc |
mov [ebp+EDITOR.Columns],eax ;! [columns],eax |
@@: mov [ebp+EDITOR.Modified],0 ;! [modified],0 |
ret |
.CR: cmp byte[esi],10 |
261,11 → 282,11 |
lea eax,[edi-4] |
sub eax,ebx |
mov [ebx],eax |
inc [lines] |
;inc [cur_tab.Editor.Lines] ;! [lines] |
add eax,-10 |
cmp eax,[columns] |
cmp eax,[ebp+EDITOR.Columns] ;! eax,[columns] |
jbe .next_line |
mov [columns],eax |
mov [ebp+EDITOR.Columns],eax ;! [columns],eax |
jmp .next_line |
.TB: lea eax,[edi-4] |
278,30 → 299,3 |
rep stosb |
jmp .next_char |
endf |
;----------------------------------------------------------------------------- |
func new_file ;/////////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; mcall 55,eax,error_beep ; beep |
mov [lines],1 ; open empty document |
mov [columns],1 |
xor eax,eax |
mov [top_line],eax |
mov [pos.x],eax |
mov [pos.y],eax |
mov edi,AREA_EDIT+4 |
mov ecx,10 |
mov [edi-4],ecx |
mov [edi+10],eax |
mov al,' ' |
cld |
rep stosb |
mov [f_info.length],0 |
mov [modified],0 |
mov [asm_mode],0 |
call update_caption |
call drawwindow |
ret |
endf |
/programs/develop/tinypad/trunk/tp-key.asm |
---|
51,8 → 51,8 |
jne @f |
test [options],OPTS_SECURESEL |
jz .lp1 |
m2m [sel.x],[pos.x] |
m2m [sel.y],[pos.y] |
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] |
.lp1: mov [s_status],0 |
call dword[esi+4] |
jmp still |
74,8 → 74,8 |
test [options],OPTS_SECURESEL |
jz .lp2 |
m2m [sel.x],[pos.x] |
m2m [sel.y],[pos.y] |
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] |
jmp .put |
.lp2: call delete_selection |
85,24 → 85,24 |
jne @f |
mov al,']' |
call .lp3 |
dec [pos.x] |
dec [cur_tab.Editor.Caret.X] ;! [pos.x] |
jmp .put |
@@: cmp al,'(' |
jne @f |
mov al,')' |
call .lp3 |
dec [pos.x] |
dec [cur_tab.Editor.Caret.X] ;! [pos.x] |
jmp .put |
@@: cmp al,'{' |
jne .put |
mov al,'}' |
call .lp3 |
dec [pos.x] |
dec [cur_tab.Editor.Caret.X] ;! [pos.x] |
.put: pop eax |
push still |
inc [sel.x] |
.lp3: push [pos.x] eax |
inc [cur_tab.Editor.SelStart.X] ;! [sel.x] |
.lp3: push [cur_tab.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 [sel.x],eax |
mov [sel.y],eax |
mov ecx,[lines] |
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] |
dec ecx |
mov [pos.y],ecx |
mov [cur_tab.Editor.Caret.Y],ecx ;! [pos.y],ecx |
call get_line_offset |
call get_real_length |
mov [pos.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
call draw_file |
ret |
endf |
155,7 → 155,7 |
;----------------------------------------------------------------------------- |
func key.ctrl_s ;///// ENTER SAVE FILENAME /////////////////////////////////// |
;----------------------------------------------------------------------------- |
cmp [modified],0 |
cmp [cur_tab.Editor.Modified],0 ;! [modified],0 |
je .exit |
cmp [f_info.length],0 |
je key.shift_ctrl_s |
172,7 → 172,7 |
;----------------------------------------------------------------------------- |
func key.ctrl_n ;///// ENTER SAVE FILENAME /////////////////////////////////// |
;----------------------------------------------------------------------------- |
call new_file |
call create_tab |
ret |
endf |
248,8 → 248,8 |
;----------------------------------------------------------------------------- |
key.shift_ctrl_left: ;///// GO TO PREVIOUS WORD, WITH SELECTION ///////// |
;----------------------------------------------------------------------------- |
mov ebx,[pos.y] |
mov edx,[pos.x] |
mov ebx,[cur_tab.Editor.Caret.Y] ;! ebx,[pos.y] |
mov edx,[cur_tab.Editor.Caret.X] ;! edx,[pos.x] |
cld |
mov ecx,ebx |
call get_line_offset |
307,26 → 307,26 |
jmp .lp2 |
@@: |
inc edx |
mov [pos.y],ebx |
mov [pos.x],edx |
mov [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx |
mov [cur_tab.Editor.Caret.X],edx ;! [pos.x],edx |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],ebx |
mov [sel.x],edx |
@@: sub ebx,[top_line] |
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] |
jge @f |
add [top_line],ebx |
add [cur_tab.Editor.TopLeft.Y],ebx ;! [top_line],ebx |
@@: mov eax,edx |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
cmp eax,[columns.scr] |
jl @f |
sub eax,[columns.scr] |
inc eax |
add [left_col],eax |
add [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax |
jmp .exit |
@@: cmp edx,[left_col] |
@@: cmp edx,[cur_tab.Editor.TopLeft.X] ;! edx,[left_col] |
jge .exit |
mov [left_col],edx |
mov [cur_tab.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,[pos.y] |
mov edx,[pos.x] |
mov ebx,[cur_tab.Editor.Caret.Y] ;! ebx,[pos.y] |
mov edx,[cur_tab.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,[lines] |
cmp ebx,[cur_tab.Editor.Lines] ;! ebx,[lines] |
jge .exit.2 |
xor edx,edx |
jmp .lp1 |
388,34 → 388,34 |
dec ecx |
jnz @b |
.nx2: inc ebx |
cmp ebx,[lines] |
cmp ebx,[cur_tab.Editor.Lines] ;! ebx,[lines] |
jge .exit.2 |
xor edx,edx |
jmp .lp2 |
@@: |
mov [pos.y],ebx |
mov [pos.x],edx |
mov [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx |
mov [cur_tab.Editor.Caret.X],edx ;! [pos.x],edx |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],ebx |
mov [sel.x],edx |
@@: sub ebx,[top_line] |
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] |
cmp ebx,[lines.scr] |
jl @f |
sub ebx,[lines.scr] |
inc ebx |
add [top_line],ebx |
add [cur_tab.Editor.TopLeft.Y],ebx ;! [top_line],ebx |
@@: mov eax,edx |
sub eax,[left_col] |
sub eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
cmp eax,[columns.scr] |
jl @f |
sub eax,[columns.scr] |
inc eax |
add [left_col],eax |
add [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax |
jmp .exit |
@@: cmp edx,[left_col] |
@@: cmp edx,[cur_tab.Editor.TopLeft.X] ;! edx,[left_col] |
jge .exit |
mov [left_col],edx |
mov [cur_tab.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 [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
@@: ret |
endf |
437,6 → 437,13 |
mov [copy_size],0 |
cmp [sel.selected],0 |
je .exit |
call get_selection_size |
mov ebx,eax |
mov eax,[copy_buf] |
call mem.ReAlloc |
mov [copy_buf],eax |
cld |
mov eax,[sel.begin.y] |
cmp eax,[sel.end.y] |
445,7 → 452,7 |
call get_line_offset |
inc ecx |
push ecx |
mov edi,AREA_CBUF |
mov edi,[copy_buf] ;! AREA_CBUF |
call get_real_length |
sub eax,[sel.begin.x] |
jge @f |
487,7 → 494,7 |
add [ebx],eax |
mov al,' ' |
rep stosb |
@@: sub edi,AREA_CBUF |
@@: sub edi,[copy_buf] ;! AREA_CBUF |
mov [copy_size],edi |
mov eax,[sel.end.y] |
sub eax,[sel.begin.y] |
499,7 → 506,7 |
.single_line: |
mov eax,[sel.end.x] |
sub eax,[sel.begin.x] |
mov edi,AREA_CBUF |
mov edi,[copy_buf] ;! AREA_CBUF |
stosd |
mov ecx,[sel.begin.y] |
call get_line_offset |
530,19 → 537,21 |
call delete_selection |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
pushd [esi] esi |
mov ecx,[pos.x] |
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
call line_add_spaces |
mov ecx,[copy_size] |
sub ecx,4 |
mov edi,AREA_TEMP2 |
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add edi,[edi-4] |
dec edi |
mov eax,esi |
mov esi,edi |
sub esi,ecx |
lea ecx,[eax+4] |
add ecx,[pos.x] |
add ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
neg ecx |
lea ecx,[esi+ecx+1] |
std |
555,10 → 564,10 |
cld |
pop edi |
add edi,4 |
mov esi,AREA_CBUF |
mov esi,[copy_buf] ;! AREA_CBUF |
lodsd |
mov ebx,[pos.x] |
mov ebx,[cur_tab.Editor.Caret.X] ;! ebx,[pos.x] |
add eax,ebx |
mov [edi-4],ax |
sub eax,ebx |
581,16 → 590,16 |
mov ecx,eax |
rep movsb |
mov [pos.x],eax |
mov [sel.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
mov eax,[copy_count] |
dec eax |
add [pos.y],eax |
add [sel.y],eax |
add [lines],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 |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
jmp .exit |
.single_line: |
597,22 → 606,22 |
cld |
pop edi |
add edi,4 |
mov esi,AREA_CBUF |
mov esi,[copy_buf] ;! AREA_CBUF |
lodsd |
add [edi-4],ax |
and dword[edi-4],not 0x00020000 |
or dword[edi-4],0x00010000 |
call .check_columns |
add edi,[pos.x] |
add edi,[cur_tab.Editor.Caret.X] ;! edi,[pos.x] |
add esp,4 |
mov ecx,eax |
rep movsb |
add [pos.x],eax |
add [sel.x],eax |
add [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
add [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
.exit: |
ret |
620,9 → 629,9 |
.check_columns: |
push eax |
movzx eax,word[edi-4] |
cmp eax,[columns] |
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jbe @f |
mov [columns],eax |
mov [cur_tab.Editor.Columns],eax ;! [columns],eax |
@@: pop eax |
ret |
; push eax ebx esi |
647,11 → 656,11 |
;----------------------------------------------------------------------------- |
func key.ctrl_d ;///// INSERT SEPARATOR ////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
mov ebx,esi |
mov ecx,[lines] |
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines] |
call get_line_offset |
lea edi,[esi+90+4] |
lea ecx,[esi+4] |
670,12 → 679,12 |
rep stosb |
mov byte[ebx+4],';' |
inc [lines] |
inc [pos.y] |
m2m [sel.y],[pos.y] |
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] |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
.exit: |
ret |
684,25 → 693,25 |
;----------------------------------------------------------------------------- |
func key.ctrl_y ;///// DELETE CURRENT LINE /////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[pos.y] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
inc eax |
cmp eax,[lines] |
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
jge .exit |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
mov edi,esi |
lodsd |
add esi,eax |
dec [lines] |
mov ecx,AREA_TEMP2 |
dec [cur_tab.Editor.Lines] ;! [lines] |
mov ecx,[temp_buf] ;! AREA_TEMP2 |
sub ecx,esi |
shr ecx,2 ;// fixed (was 4) |
cld |
rep movsd |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
.exit: |
ret |
716,11 → 725,11 |
;----------------------------------------------------------------------------- |
key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION //////////////// |
;----------------------------------------------------------------------------- |
mov eax,[pos.y] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
dec eax |
jns @f |
xor eax,eax |
@@: mov ecx,[top_line] |
@@: mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
cmp eax,ecx |
jae @f |
dec ecx |
728,7 → 737,7 |
xor ecx,ecx |
@@: test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_init |
.exit: |
744,12 → 753,12 |
key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION ////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[pos.y] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
inc eax |
cmp eax,[lines] |
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
jb @f |
dec eax |
@@: mov ecx,[top_line] |
@@: mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
mov edx,eax |
sub edx,ecx |
cmp edx,[lines.scr] |
757,7 → 766,7 |
inc ecx |
@@: test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_init |
.exit: |
772,14 → 781,14 |
;----------------------------------------------------------------------------- |
key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION ////////////// |
;----------------------------------------------------------------------------- |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
dec eax |
jns @f |
inc eax |
@@: test byte[shi+2],0x01 |
jnz @f |
mov [sel.x],eax |
@@: mov [pos.x],eax |
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
@@: mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
call check_inv_all |
.exit: |
794,15 → 803,15 |
;----------------------------------------------------------------------------- |
key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION ///////////////// |
;----------------------------------------------------------------------------- |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
inc eax |
cmp eax,[columns] |
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jbe @f |
dec eax |
@@: test byte[shi+2],0x01 |
jnz @f |
mov [sel.x],eax |
@@: mov [pos.x],eax |
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
@@: mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
call check_inv_all |
.exit: |
819,8 → 828,8 |
;----------------------------------------------------------------------------- |
mov edx,[lines.scr] |
dec edx |
mov eax,[pos.y] |
mov ecx,[top_line] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
sub eax,edx |
jns @f |
xor eax,eax |
829,7 → 838,7 |
xor ecx,ecx |
@@: test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_init |
.exit: |
846,17 → 855,17 |
;----------------------------------------------------------------------------- |
mov edx,[lines.scr] |
dec edx |
mov eax,[pos.y] |
mov ecx,[top_line] |
mov eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
add eax,edx |
add ecx,edx |
cmp eax,[lines] |
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
jb @f |
mov eax,[lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
dec eax |
@@: test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_init |
.exit: |
871,10 → 880,10 |
;----------------------------------------------------------------------------- |
key.shift_home: ;///// GO TO LINE START, WITH SELECTION ///////////////// |
;----------------------------------------------------------------------------- |
mov [pos.x],0 |
mov [cur_tab.Editor.Caret.X],0 ;! [pos.x],0 |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.x],0 |
mov [cur_tab.Editor.SelStart.X],0 ;! [sel.x],0 |
@@: call check_inv_all |
.exit: |
889,13 → 898,13 |
;----------------------------------------------------------------------------- |
key.shift_end: ;///// GO TO LINE END, WITH SELECTION //////////////////// |
;----------------------------------------------------------------------------- |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
call get_real_length |
mov [pos.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.x],eax |
mov [cur_tab.Editor.SelStart.X],eax ;! [sel.x],eax |
@@: call check_inv_all |
.exit: |
910,11 → 919,11 |
;----------------------------------------------------------------------------- |
key.shift_ctrl_home: ;///// GO TO PAGE START, WITH SELECTION //////////// |
;----------------------------------------------------------------------------- |
mov eax,[top_line] |
mov eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
mov ecx,eax |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_init |
.exit: |
929,16 → 938,16 |
;----------------------------------------------------------------------------- |
key.shift_ctrl_end: ;///// GO TO PAGE END, WITH SELECTION /////////////// |
;----------------------------------------------------------------------------- |
mov ecx,[top_line] |
mov ecx,[cur_tab.Editor.TopLeft.Y] ;! ecx,[top_line] |
mov eax,[lines.scr] |
cmp eax,[lines] |
cmp eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
jle @f |
mov eax,[lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
@@: add eax,ecx |
dec eax |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_init |
.exit: |
954,11 → 963,11 |
key.shift_ctrl_pgup: ;///// GO TO DOCUMENT START, WITH SELECTION //////// |
;----------------------------------------------------------------------------- |
xor eax,eax |
mov [top_line],eax |
mov [pos.y],eax |
mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax |
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax |
test byte[shi+2],0x01 |
jnz @f |
mov [sel.y],eax |
mov [cur_tab.Editor.SelStart.Y],eax ;! [sel.y],eax |
@@: call check_inv_all.skip_check |
.exit: |
973,17 → 982,18 |
;----------------------------------------------------------------------------- |
key.shift_ctrl_pgdn: ;///// GO TO DOCUMENT END, WITH SELECTION ////////// |
;----------------------------------------------------------------------------- |
mov eax,[lines] ; eax = lines in the file |
mov [pos.y],eax |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] ; eax = lines in the file |
mov [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax |
sub eax,[lines.scr] ; eax -= lines on the screen |
jns @f |
xor eax,eax |
@@: mov [top_line],eax |
dec [pos.y] |
@@: mov [cur_tab.Editor.TopLeft.Y],eax ;! [top_line],eax |
dec [cur_tab.Editor.Caret.Y] ;! [pos.y] |
test byte[shi+2],0x01 |
jnz @f |
push [pos.y] |
pop [sel.y] |
m2m [cur_tab.Editor.SelStart.Y],[cur_tab.Editor.Caret.Y] |
;! push [pos.y] |
;! pop [sel.y] |
@@: call check_inv_all.skip_check |
.exit: |
996,7 → 1006,7 |
call delete_selection |
jnc .exit.2 |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
and dword[esi],not 0x00020000 |
or dword[esi],0x00010000 |
1007,7 → 1017,7 |
or eax,eax |
je .line_up |
mov ecx,[pos.x] |
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
cmp ecx,eax |
jae .line_up |
lea edi,[ebx+ecx] |
1018,7 → 1028,7 |
je .line_up |
mov edi,ebx |
mov ecx,[pos.x] |
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
add edi,ecx |
lea esi,[edi+1] |
neg ecx |
1028,23 → 1038,25 |
rep movsb |
mov byte[edi],' ' |
m2m [sel.x],[pos.x] |
m2m [sel.y],[pos.y] |
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] |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
ret |
.line_up: |
mov eax,[lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
dec eax |
cmp eax,[pos.y] |
cmp eax,[cur_tab.Editor.Caret.Y] ;! eax,[pos.y] |
je .exit |
mov edi,AREA_TEMP+4 |
mov edi,[temp_buf] ;! AREA_TEMP+4 |
add edi,4 |
mov esi,ebx |
mov ecx,[pos.x] |
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
rep movsb |
mov ecx,[pos.x] |
mov [AREA_TEMP],ecx |
mov ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
mov eax,[temp_buf] |
mov [eax],ecx ;! [AREA_TEMP],ecx |
cmp cx,[ebp] |
jbe @f |
movzx eax,word[ebp] |
1056,20 → 1068,24 |
movzx eax,word[ebp] |
add esi,eax;[ebp] |
movzx ecx,word[esi-4] |
add [AREA_TEMP],ecx |
or dword[AREA_TEMP],0x00010000 |
mov eax,[temp_buf] |
add [eax],ecx ;! [AREA_TEMP],ecx |
or dword[eax],0x00010000 ;! dword[AREA_TEMP],0x00010000 |
rep movsb |
lea ecx,[edi-AREA_TEMP] |
mov ecx,edi ;! [edi-AREA_TEMP] |
sub ecx,[temp_buf] |
mov esi,AREA_TEMP |
mov esi,[temp_buf] ;! AREA_TEMP |
call get_real_length |
cmp eax,[columns] |
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jbe @f |
mov [columns],eax |
mov [cur_tab.Editor.Columns],eax ;! [columns],eax |
@@: |
push ecx |
mov edi,AREA_TEMP2 |
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add edi,[edi-4] |
dec edi |
lea esi,[edi+8] |
sub esi,ecx |
movzx eax,word[ebp] |
1092,27 → 1108,28 |
add esi,eax;[esi-8] |
movzx eax,word[esi-4] |
add esi,eax;[esi-4] |
mov ecx,AREA_TEMP2 |
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add ecx,[ecx-4] |
sub ecx,esi |
cld |
@@: rep movsb |
.lp1: pop ecx |
mov esi,AREA_TEMP |
mov esi,[temp_buf] ;! AREA_TEMP |
mov edi,ebp |
cld |
rep movsb |
.ok.dec.lines: |
dec [lines] |
mov eax,[lines] |
cmp [pos.y],eax |
dec [cur_tab.Editor.Lines] ;! [lines] |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
cmp [cur_tab.Editor.Caret.Y],eax ;! [pos.y],eax |
jb @f |
dec eax |
mov [pos.y],eax |
@@: m2m [sel.x],[pos.x] |
m2m [sel.y],[pos.y] |
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 [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
.exit.2: |
call check_inv_all |
1135,12 → 1152,12 |
call delete_selection |
jnc key.del.exit.2 |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
dec eax |
js .line_up |
dec [pos.x] |
mov ecx,[pos.y] |
dec [cur_tab.Editor.Caret.X] ;! [pos.x] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
and dword[esi],not 0x00020000 |
or dword[esi],0x00010000 |
1147,11 → 1164,11 |
mov ebx,eax |
call get_real_length |
cmp eax,[pos.x] |
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
jae @f |
m2m [sel.x],[pos.x] |
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x] |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
ret |
@@: lea edi,[esi+4+ebx] |
1165,17 → 1182,17 |
rep movsb |
mov byte[edi],' ' |
m2m [sel.x],[pos.x] |
m2m [sel.y],[pos.y] |
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] |
call check_inv_str |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
ret |
.line_up: |
cmp [pos.y],0 |
cmp [cur_tab.Editor.Caret.Y],0 ;! [pos.y],0 |
jne @f |
ret |
@@: mov ecx,[pos.y] |
@@: mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
dec ecx |
call get_line_offset |
and dword[esi],not 0x00020000 |
1188,8 → 1205,8 |
jne @f |
dec ecx |
jg @b |
@@: mov [pos.x],ecx |
dec [pos.y] |
@@: mov [cur_tab.Editor.Caret.X],ecx ;! [pos.x],ecx |
dec [cur_tab.Editor.Caret.Y] ;! [pos.y] |
cld |
jmp key.del.line_up |
endf |
1198,7 → 1215,7 |
func key.tab ;///// TABULATE ///////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
call delete_selection |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
mov ecx,eax |
add eax,ATABW |
1206,7 → 1223,7 |
push eax ' ' |
sub eax,ecx |
.direct: |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
and dword[esi],not 0x00020000 |
or dword[esi],0x00010000 |
1214,22 → 1231,25 |
xchg eax,ecx |
call get_real_length |
cmp eax,[pos.x] |
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
jae @f |
mov eax,[pos.x] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
@@: movzx edx,word[esi] |
sub edx,eax |
cmp ecx,edx |
jl @f |
pushad; esi ecx eax |
mov ecx,AREA_TEMP2-10+1 |
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2-10+1 |
add ecx,[ecx-4] |
dec ecx |
mov edi,ecx ;! AREA_TEMP2 |
add ecx,-10+1 |
; lea eax,[esi+4] |
; add eax,[esi] |
movzx eax,word[esi] |
lea eax,word[esi+eax+4] |
sub ecx,eax |
mov edi,AREA_TEMP2 |
mov esi,AREA_TEMP2-10 |
lea esi,[edi-10] ;! AREA_TEMP2-10 |
std |
rep movsb |
mov ecx,10 |
1248,7 → 1268,7 |
sub esi,ecx |
lea ecx,[esi+1] |
sub ecx,ebx |
sub ecx,[pos.x] |
sub ecx,[cur_tab.Editor.Caret.X] ;! ecx,[pos.x] |
std |
rep movsb |
.ok: pop ecx ;******* |
1255,19 → 1275,19 |
pop eax |
rep stosb |
cld |
pop [pos.x] |
pop [cur_tab.Editor.Caret.X] ;! [pos.x] |
lea esi,[ebx-4] |
call get_real_length |
cmp eax,[pos.x] |
cmp eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
jae @f |
mov eax,[pos.x] |
@@: cmp eax,[columns] |
mov eax,[cur_tab.Editor.Caret.X] ;! eax,[pos.x] |
@@: cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jbe @f |
mov [columns],eax |
@@: m2m [sel.x],[pos.x] |
m2m [sel.y],[pos.y] |
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] |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
.exit: |
ret |
1278,10 → 1298,10 |
;----------------------------------------------------------------------------- |
call delete_selection |
mov ecx,[pos.y] |
mov ecx,[cur_tab.Editor.Caret.Y] ;! ecx,[pos.y] |
call get_line_offset |
mov ebx,[pos.x] |
mov ebx,[cur_tab.Editor.Caret.X] ;! ebx,[pos.x] |
cmp bx,[esi] |
jb @f |
movzx ebx,word[esi] |
1291,10 → 1311,9 |
@@: |
cld |
mov edi,AREA_TEMP |
mov edi,[temp_buf] ;! AREA_TEMP |
mov ebp,esi |
mov ecx,ebx |
inc ecx |
lea ecx,[ebx+1] |
@@: dec ecx |
jz @f |
cmp byte[esi+ecx+4-1],' ' |
1343,7 → 1362,7 |
.lp2: xor eax,eax |
@@: mov edx,edi |
add edi,4 |
mov [pos.x],eax |
mov [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
jecxz @f |
push ecx |
mov ecx,eax |
1361,10 → 1380,13 |
or eax,0x00010000 |
mov [edx],eax |
lea ecx,[edi-AREA_TEMP] |
mov ecx,edi ;! [edi-AREA_TEMP] |
sub ecx,[temp_buf] |
push ecx |
mov edi,AREA_TEMP2 |
mov edi,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add edi,[edi-4] |
dec edi |
lea esi,[edi+4] |
sub esi,ecx |
movzx ecx,word[ebp] |
1380,25 → 1402,77 |
lea edi,[esi+eax-4] |
movzx ecx,word[ebp] |
add esi,ecx;[ebp] |
mov ecx,AREA_TEMP2 |
mov ecx,[cur_tab.Editor.Data] ;! AREA_TEMP2 |
add ecx,[ecx-4] |
sub ecx,esi |
cld |
@@: rep movsb |
.lp3: pop ecx |
mov esi,AREA_TEMP |
mov esi,[temp_buf] ;! AREA_TEMP |
mov edi,ebp |
cld |
rep movsb |
inc [pos.y] |
inc [sel.y] |
inc [lines] |
inc [cur_tab.Editor.Caret.Y] ;! [pos.y] |
inc [cur_tab.Editor.SelStart.Y] ;! [sel.y] |
inc [cur_tab.Editor.Lines] ;! [lines] |
m2m [sel.x],[pos.x] |
m2m [cur_tab.Editor.SelStart.X],[cur_tab.Editor.Caret.X] ;! [sel.x],[pos.x] |
call check_inv_all |
mov [modified],1 |
mov [cur_tab.Editor.Modified],1 ;! [modified],1 |
.exit: |
ret |
endf |
endf |
;----------------------------------------------------------------------------- |
func key.ctrl_tab ;///// SWITCH TO NEXT TAB ////////////////////////////////// |
;----------------------------------------------------------------------------- |
cmp [tab_bar.Items.Count],1 |
je .exit |
xor eax,eax |
mov ebp,[tab_bar.Items] |
@@: cmp ebp,[tab_bar.Current.Ptr] |
je @f |
inc eax |
add ebp,sizeof.TABITEM |
jmp @b |
@@: add ebp,sizeof.TABITEM |
inc eax |
cmp eax,[tab_bar.Items.Count] |
jb @f |
mov ebp,[tab_bar.Items] |
@@: call set_cur_tab |
call align_editor_in_tab |
call draw_editor |
call draw_tabctl |
.exit: |
ret |
endf |
;----------------------------------------------------------------------------- |
func key.shift_ctrl_tab ;///// SWITCH TO PREVIOUS TAB //////////////////////// |
;----------------------------------------------------------------------------- |
cmp [tab_bar.Items.Count],1 |
je .exit |
xor eax,eax |
mov ebp,[tab_bar.Items] |
@@: cmp ebp,[tab_bar.Current.Ptr] |
je @f |
inc eax |
add ebp,sizeof.TABITEM |
jmp @b |
@@: add ebp,-sizeof.TABITEM |
dec eax |
jge @f |
imul eax,[tab_bar.Items.Count],sizeof.TABITEM |
add eax,[tab_bar.Items] |
lea ebp,[eax-sizeof.TABITEM] |
@@: call set_cur_tab |
call align_editor_in_tab |
call draw_editor |
call draw_tabctl |
.exit: |
ret |
endf |
/programs/develop/tinypad/trunk/tp-locale.inc |
---|
0,0 → 1,179 |
sz htext,'TINYPAD ',APP_VERSION |
menubar_res main_menu,\ |
ru,' ©«' ,mm.File ,onshow.file ,\ |
ru,'à ¢ª ' ,mm.Edit ,onshow.edit ,\ |
ru,'®¨áª' ,mm.Search ,onshow.search ,\ |
ru,' ¯ãáª' ,mm.Run ,onshow.run ,\ |
ru,'®¤¨à®¢ª ',mm.Encoding,onshow.recode ,\ |
ru,'¯æ¨¨' ,mm.Options ,onshow.options,\ |
\ |
en,'File' ,mm.File ,onshow.file ,\ |
en,'Edit' ,mm.Edit ,onshow.edit ,\ |
en,'Search' ,mm.Search ,onshow.search ,\ |
en,'Run' ,mm.Run ,onshow.run ,\ |
en,'Encoding',mm.Encoding,onshow.recode ,\ |
en,'Options' ,mm.Options ,onshow.options |
popup_res mm.File,\ |
ru,'®¢ë©' ,'Ctrl+N' ,New ,\ |
ru,'âªàëâì...' ,'Ctrl+O' ,Open ,\ |
ru,'®åà ¨âì' ,'Ctrl+S' ,Save ,\ |
ru,'®åà ¨âì ª ª...','Ctrl+Shift+S',SaveAs,\ |
ru,'-' ,'' , ,\ |
ru,'ë室' ,'Alt+X' ,Exit ,\ |
\ |
en,'New' ,'Ctrl+N' ,New ,\ |
en,'Open...' ,'Ctrl+O' ,Open ,\ |
en,'Save' ,'Ctrl+S' ,Save ,\ |
en,'Save as...','Ctrl+Shift+S',SaveAs,\ |
en,'-' ,'' , ,\ |
en,'Exit' ,'Alt+X' ,Exit |
popup_res mm.Edit,\ |
ru,'ë१ âì' ,'Ctrl+X',Cut ,\ |
ru,'®¯¨à®¢ âì' ,'Ctrl+C',Copy ,\ |
ru,'áâ ¢¨âì' ,'Ctrl+V',Insert,\ |
ru,'¤ «¨âì' ,'' ,Delete,\ |
ru,'-' ,'' , ,\ |
ru,'뤥«¨âì ¢áñ','Ctrl+A',SelAll,\ |
\ |
en,'Cut' ,'Ctrl+X',Cut ,\ |
en,'Copy' ,'Ctrl+C',Copy ,\ |
en,'Paste' ,'Ctrl+V',Insert,\ |
en,'Delete' ,'' ,Delete,\ |
en,'-' ,'' , ,\ |
en,'Select all','Ctrl+A',SelAll |
popup_res mm.Search,\ |
ru,'¥à¥©â¨...' ,'Ctrl+G',Position,\ |
ru,'-' ,'' , ,\ |
ru,' ©â¨...' ,'Ctrl+F',Find ,\ |
ru,' ©â¨ ¤ «¥¥','F3' ,FindNext,\ |
ru,' ¬¥¨âì...','Ctrl+H',Replace ,\ |
\ |
en,'Position...','Ctrl+G',Position,\ |
en,'-' ,'' , ,\ |
en,'Find...' ,'Ctrl+F',Find ,\ |
en,'Find next' ,'F3' ,FindNext,\ |
en,'Replace...' ,'Ctrl+H',Replace |
popup_res mm.Run,\ |
ru,' ¯ãáâ¨âì' ,'F9' ,Run ,\ |
ru,'®¬¯¨«¨à®¢ âì' ,'Ctrl+F9',Compile ,\ |
ru,'-' ,'' , ,\ |
ru,'®áª ®â« ¤ª¨' ,'' ,DbgBoard,\ |
ru,'¨áâ¥¬ë¥ äãªæ¨¨','' ,SysFuncs,\ |
\ |
en,'Run' ,'F9' ,Run ,\ |
en,'Compile' ,'Ctrl+F9',Compile ,\ |
en,'-' ,'' , ,\ |
en,'Debug board' ,'' ,DbgBoard,\ |
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 |
popup_res mm.Options,\ |
ru,'¥è¨© ¢¨¤...' ,'',Appearance ,\ |
ru,'-' ,'', ,\ |
ru,'¥§®¯ ᮥ ¢ë¤¥«¥¨¥' ,'',SecureSel ,\ |
ru,'¢â®¬ â¨ç¥áª¨¥ ᪮¡ª¨' ,'',AutoBrackets,\ |
ru,'¢â®¬ â¨ç¥áª¨© ®âáâã¯' ,'',AutoIndents ,\ |
ru,'¬ ï â ¡ã«ïæ¨ï' ,'',SmartTabs ,\ |
ru,'¯â¨¬ «ì®¥ á®åà ¥¨¥','',OptimalFill ,\ |
ru,'-' ,'', ,\ |
ru,'®¬¥à áâப' ,'',LineNumbers ,\ |
\ |
en,'Appearance...' ,'',Appearance ,\ |
en,'-' ,'', ,\ |
en,'Secure selection' ,'',SecureSel ,\ |
en,'Automatic brackets' ,'',AutoBrackets,\ |
en,'Automatic indents' ,'',AutoIndents ,\ |
en,'Smart tabulation' ,'',SmartTabs ,\ |
en,'Optimal fill on saving','',OptimalFill ,\ |
en,'-' ,'', ,\ |
en,'Line numbers' ,'',LineNumbers |
lsz s_modified,\ |
ru,'§¬¥¥®',\ |
en,'Modified' |
lsz s_2filename,\ |
ru,'¬ï ä ©« :',\ |
en,'Filename:' |
lsz s_2open,\ |
ru,'âªàëâì',\ |
en,'Open' |
lsz s_2save,\ |
ru,'®åà ¨âì',\ |
en,'Save' |
lsz s_2find,\ |
ru,' ©â¨',\ |
en,'Find' |
db ':' |
lsz s_2replace,\ |
ru,' ¬¥¨âì',\ |
en,'Replace' |
db ':' |
lsz s_2cancel,\ |
ru,'⬥ ',\ |
en,'Cancel' |
lsz s_enter_filename,\ |
ru,<'¢¥¤¨â¥ ¨¬ï ä ©« ',0>,\ |
en,<'Enter filename',0> |
lsz s_enter_text_to_find,\ |
ru,<'¢¥¤¨â¥ ⥪áâ ¤«ï ¯®¨áª ',0>,\ |
en,<'Enter text to find',0> |
lsz s_enter_text_to_replace,\ |
ru,<'¢¥¤¨â¥ ⥪áâ ¤«ï § ¬¥ë',0>,\ |
en,<'Enter text to replace',0> |
lsz s_text_not_found,\ |
ru,<'®á⨣ãâ ª®¥æ ä ©« , ⥪áâ ¥ ©¤¥',0>,\ |
en,<'Reached end of file, text not found',0> |
lszc s_fs_error,b,\ |
ru,<'¯¥à æ¨ï § ¢¥àè¥ ãá¯¥è® (0)',0>,\ |
ru,<'',0>,\ |
ru,<'ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ®© ä ©«®¢®© á¨á⥬ë (2)',0>,\ |
ru,<'¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ (3)',0>,\ |
ru,<'',0>,\ |
ru,<'¥¢®§¬®¦® ®âªàëâì ä ©« (5)',0>,\ |
ru,<'¯¥à æ¨ï § ¢¥àè¥ ãá¯¥è® (6)',0>,\ |
ru,<'¤à¥á 室¨âáï § £à ¨æ ¬¨ ¯ ¬ï⨠¯à®£à ¬¬ë (7)',0>,\ |
ru,<' ¤¨áª¥ ¥â ᢮¡®¤®£® ¬¥áâ (8)',0>,\ |
ru,<' ¡«¨æ FAT ã¨ç⮦¥ (9)',0>,\ |
ru,<'®áâ㯠§ ¯à¥éñ (10)',0>,\ |
ru,<'訡ª ãáâனá⢠(11)',0>,\ |
\ |
en,<'Operation executed successfully (0)',0>,\ |
en,<'',0>,\ |
en,<'Function is not supported for the given filesystem (2)',0>,\ |
en,<'Unknown filesystem (3)',0>,\ |
en,<'',0>,\ |
en,<'Unable to open file (5)',0>,\ |
en,<'Operation executed successfully (6)',0>,\ |
en,<'Pointer lies outside of application memory (7)',0>,\ |
en,<'Disk is full (8)',0>,\ |
en,<'FAT table is destroyed (9)',0>,\ |
en,<'Access denied (10)',0>,\ |
en,<'Device error (11)',0> |
lsz sysfuncs_filename,\ |
ru,<'SYSFUNCR.TXT',0>,\ |
en,<'SYSFUNCS.TXT',0> |
sz s_example,'EXAMPLE.ASM' |
sz s_still ,'still' |
/programs/develop/tinypad/trunk/tp-mouse.asm |
---|
123,7 → 123,7 |
call check_mouse_in_edit_area |
jnc still.skip_write |
mcall 37,0 |
mov [popup_edit+POPUP.pos],eax |
mov [mm.Edit+POPUP.pos],eax |
@@: mcall 37,2 |
cmp eax,ebx |
jnz @f |
131,7 → 131,7 |
jmp @b |
@@: and [mst],0xFD |
call onshow.edit |
mov dword[POPUP_STACK],popup_edit |
mov dword[POPUP_STACK],mm.Edit |
mcall 51,1,popup_thread_start,POPUP_STACK |
mov [h_popup],eax |
jmp still.skip_write |
157,31 → 157,31 |
cdq;xor edx,edx |
mov ecx,LINEH |
idiv ecx |
@@: add eax,[top_line] |
@@: add eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
mov ebx,eax |
pop eax |
cdq;xor edx,edx |
mov ecx,6 |
idiv ecx |
@@: add eax,[left_col] |
@@: add eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
cmp eax,[columns] |
cmp eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
jl @f |
mov eax,[columns] |
@@: cmp ebx,[lines] |
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
@@: cmp ebx,[cur_tab.Editor.Lines] ;! ebx,[lines] |
jl @f |
mov ebx,[lines] |
mov ebx,[cur_tab.Editor.Lines] ;! ebx,[lines] |
dec ebx |
@@: |
cmp [pos.x],eax |
cmp [cur_tab.Editor.Caret.X],eax ;! [pos.x],eax |
jne .change_cur_pos |
cmp [pos.y],ebx |
cmp [cur_tab.Editor.Caret.Y],ebx ;! [pos.y],ebx |
je still.skip_write |
.change_cur_pos: |
mov [pos.x],eax |
mov eax,[pos.y] |
mov [pos.y],ebx |
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 |
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,[vscrl_top] |
mov eax,[cur_tab.Editor.VScroll.Top] ;! eax,[vscrl_top] |
cmp ebx,eax |
jb .center_vcapture |
add eax,[vscrl_size] |
add eax,[cur_tab.Editor.VScroll.Size] ;! eax,[vscrl_size] |
cmp ebx,eax |
jae .center_vcapture |
mov eax,ebx |
sub eax,[vscrl_top] |
sub eax,[cur_tab.Editor.VScroll.Top] ;! eax,[vscrl_top] |
dec eax |
mov [vscrl_capt],eax |
dec ebx |
jmp .vcaptured |
.center_vcapture: |
mov eax,[vscrl_size] |
mov eax,[cur_tab.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,[vscrl_size] |
sub eax,[cur_tab.Editor.VScroll.Size] ;! eax,[vscrl_size] |
sub eax,SCRLW*3-2 |
cmp eax,ebx |
jge @f |
mov ebx,eax |
@@: |
mov [vscrl_top],ebx |
mov eax,[lines] |
mov [cur_tab.Editor.VScroll.Top],ebx ;! [vscrl_top],ebx |
mov eax,[cur_tab.Editor.Lines] ;! eax,[lines] |
sub eax,[lines.scr] |
imul ebx |
mov ebx,[bot_ofs] |
sub ebx,[top_ofs] |
sub ebx,SCRLW*3-2 ;** |
sub ebx,[vscrl_size] |
sub ebx,[cur_tab.Editor.VScroll.Size] ;! ebx,[vscrl_size] |
idiv ebx |
cmp eax,[top_line] |
cmp eax,[cur_tab.Editor.TopLeft.Y] ;! eax,[top_line] |
je still.skip_write |
mov [top_line],eax |
mov [cur_tab.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,[hscrl_top] |
mov eax,[cur_tab.Editor.HScroll.Top] ;! eax,[hscrl_top] |
cmp ebx,eax |
jl .center_hcapture |
add eax,[hscrl_size] |
add eax,[cur_tab.Editor.HScroll.Size] ;! eax,[hscrl_size] |
cmp ebx,eax |
jge .center_hcapture |
mov eax,ebx |
sub eax,[hscrl_top] |
sub eax,[cur_tab.Editor.HScroll.Top] ;! eax,[hscrl_top] |
dec eax |
mov [hscrl_capt],eax |
dec ebx |
jmp .hcaptured |
.center_hcapture: |
mov eax,[hscrl_size] |
mov eax,[cur_tab.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,[hscrl_size] |
sub eax,[cur_tab.Editor.HScroll.Size] ;! eax,[hscrl_size] |
sub eax,SCRLW*3+10+1 |
cmp eax,ebx |
jge @f |
mov ebx,eax |
@@: |
mov [hscrl_top],ebx |
mov eax,[columns] |
mov [cur_tab.Editor.HScroll.Top],ebx ;! [hscrl_top],ebx |
mov eax,[cur_tab.Editor.Columns] ;! eax,[columns] |
sub eax,[columns.scr] |
imul ebx |
mov ebx,[p_info.box.width] |
sub ebx,SCRLW*3+10+1 ;** |
sub ebx,[hscrl_size] |
sub ebx,[cur_tab.Editor.HScroll.Size] ;! ebx,[hscrl_size] |
idiv ebx |
cmp eax,[left_col] |
cmp eax,[cur_tab.Editor.TopLeft.X] ;! eax,[left_col] |
je still.skip_write |
mov [left_col],eax |
mov [cur_tab.Editor.TopLeft.X],eax ;! [left_col],eax |
call check_bottom_right |
call draw_file |
jmp still.skip_write |
373,26 → 373,26 |
onshow: |
.file: |
or byte[popup_file+3],0x01 |
or byte[mm.File+3],0x01 |
cmp [f_info.length],0 |
jne @f |
and byte[popup_file+3],0xFE |
and byte[mm.File+3],0xFE |
@@: ret |
.edit: |
or byte[popup_edit+2],0x01 |
or byte[mm.Edit+2],0x01 |
cmp [copy_size],0 |
jne @f |
and byte[popup_edit+2],0xFE |
@@: or dword[popup_edit+0],0x01000101 |
and byte[mm.Edit+2],0xFE |
@@: or dword[mm.Edit+0],0x01000101 |
cmp [sel.selected],0 |
jne @f |
and dword[popup_edit+0],0xFEFFFEFE |
and dword[mm.Edit+0],0xFEFFFEFE |
@@: ret |
.search: |
mov byte[popup_search+0],0 |
;mov byte[popup_search+4],0 |
mov byte[mm.Search+0],0 |
;mov byte[mm.Search+4],0 |
ret |
.run: |
ret |
399,26 → 399,26 |
.recode: |
ret |
.options: |
mov word[popup_options+0],0 |
mov byte[popup_options+5],0 |
or byte[popup_options+2],0x02 |
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[popup_options+2],0xFD |
@@: or byte[popup_options+3],0x02 |
and byte[mm.Options+2],0xFD |
@@: or byte[mm.Options+3],0x02 |
test [options],OPTS_AUTOBRACES |
jnz @f |
and byte[popup_options+3],0xFD |
@@: or byte[popup_options+4],0x02 |
and byte[mm.Options+3],0xFD |
@@: or byte[mm.Options+4],0x02 |
test [options],OPTS_AUTOINDENT |
jnz @f |
and byte[popup_options+4],0xFD |
@@: or byte[popup_options+6],0x02 |
and byte[mm.Options+4],0xFD |
@@: or byte[mm.Options+6],0x02 |
test [options],OPTS_OPTIMSAVE |
jnz @f |
and byte[popup_options+6],0xFD |
@@: or byte[popup_options+8],0x02 |
and byte[mm.Options+6],0xFD |
@@: or byte[mm.Options+8],0x02 |
test [options],OPTS_LINENUMS |
jnz @f |
and byte[popup_options+8],0xFD |
and byte[mm.Options+8],0xFD |
@@: ret |
/programs/develop/tinypad/trunk/tp-recode.asm |
---|
19,8 → 19,8 |
mov edi,table.koi.1251 |
.main: |
mov ecx,[lines] |
mov esi,AREA_EDIT |
mov ecx,[cur_tab.Editor.Lines] ;! ecx,[lines] |
mov esi,[cur_tab.Editor.Data] ;! AREA_EDIT |
jecxz .exit |
xor eax,eax |
.lp0: dec ecx |
/programs/develop/tinypad/trunk/tp-tabctl.asm |
---|
0,0 → 1,294 |
sz s_defname,'Untitled',0 |
;----------------------------------------------------------------------------- |
func flush_cur_tab ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; EBP = TABITEM* |
;----------------------------------------------------------------------------- |
push ecx esi edi |
mov esi,cur_tab |
mov edi,[tab_bar.Current.Ptr] |
mov ecx,sizeof.TABITEM/4 |
cld |
rep movsd |
pop edi esi ecx |
ret |
endf |
;----------------------------------------------------------------------------- |
func set_cur_tab ;//////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; EBP = TABITEM* |
;----------------------------------------------------------------------------- |
push ecx esi edi |
cmp [tab_bar.Current.Ptr],0 |
je @f |
call flush_cur_tab |
@@: mov esi,ebp |
mov edi,cur_tab |
mov ecx,sizeof.TABITEM/4 |
rep movsd |
mov [tab_bar.Current.Ptr],ebp |
call update_caption |
pop edi esi ecx |
ret |
endf |
;----------------------------------------------------------------------------- |
func create_tab ;///////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push eax ecx esi edi |
inc [tab_bar.Items.Count] |
imul ebx,[tab_bar.Items.Count],sizeof.TABITEM |
mov eax,[tab_bar.Items] |
mov ecx,eax |
call mem.ReAlloc |
mov [tab_bar.Items],eax |
sub ecx,eax |
sub [tab_bar.Current.Ptr],ecx |
lea ebp,[eax+ebx-sizeof.TABITEM] |
call set_cur_tab |
mov eax,1024 |
call mem.Alloc |
mov [cur_tab.Editor.Data],eax |
mov [cur_tab.Editor.Lines],1 |
mov [cur_tab.Editor.Columns],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] |
add edi,4 |
mov ecx,10 |
mov [edi-4],ecx |
mov [edi+10],eax |
mov al,' ' |
cld |
rep stosb |
mov esi,s_defname |
mov edi,cur_tab.Editor.FilePath |
mov ecx,s_defname.size |
rep movsb |
mov [cur_tab.Editor.FileName],0 |
mov [f_info.length],0 |
mov [cur_tab.Editor.Modified],0 |
mov [cur_tab.Editor.AsmMode],0 |
call flush_cur_tab |
call update_caption |
call drawwindow |
mov ebp,cur_tab |
pop edi esi ecx eax |
ret |
endf |
;----------------------------------------------------------------------------- |
func delete_tab ;///////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
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 |
ret |
endf |
;----------------------------------------------------------------------------- |
func draw_tabctl ;//////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov ebx,[tab_bar.Bounds.Left-2] |
mov bx,word[tab_bar.Bounds.Right] |
sub bx,word[tab_bar.Bounds.Left] |
inc ebx |
mov ecx,[tab_bar.Bounds.Top-2] |
mov cx,word[tab_bar.Bounds.Bottom] |
sub cx,word[tab_bar.Bounds.Top] |
inc ecx |
mov edx,[cl_3d_normal] |
call draw_framerect |
mov al,[tab_bar.Style] |
dec al |
jz .tabs_on_top |
dec al |
jz .tabs_on_bottom |
dec al |
jz .tabs_on_left |
dec al |
jz .tabs_on_right |
ret |
.tabs_on_top: |
add ebx,1*65536-2 |
mov ecx,[tab_bar.Bounds.Top-2] |
xor cx,cx |
add ecx,1*65536+TBARH |
mcall 13 |
add ecx,(TBARH-2)*65536-(TBARH-3) |
mov edx,[cl_3d_inset] |
call draw_framerect |
ret |
.tabs_on_bottom: |
add ebx,1*65536-2 |
mov ecx,[tab_bar.Bounds.Bottom-2] |
xor cx,cx |
add ecx,-TBARH*65536+TBARH |
mcall 13 |
mov cx,1 |
mcall ,,,[sc.work] |
add ecx,-1*65536+2;-(TBARH-3) |
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 ecx |
call get_tab_size |
rol ebx,16 |
mov bx,si |
rol ebx,16 |
rol ecx,16 |
mov cx,di |
rol ecx,16 |
mov edx,[cl_3d_inset] |
call draw_framerect |
cmp ebp,[tab_bar.Current.Ptr] |
jne .lp1 |
push ebx ecx |
add ebx,1*65536-2 |
dec ecx |
mcall 13,,,[sc.work] |
pop ecx ebx |
.lp1: |
pushad |
lea eax,[ebp+TABITEM.Editor.FilePath] |
add eax,[ebp+TABITEM.Editor.FileName] |
mov edx,eax |
call strlen |
mov esi,eax |
shr ecx,16 |
mov bx,cx |
add ebx,0x00050005 |
mcall 4,,0x00000000 |
popad |
movzx ebx,bx |
lea esi,[esi+ebx+1] |
add ebp,sizeof.TABITEM |
pop ecx |
dec ecx |
jnz @b |
ret |
.tabs_on_left: |
call get_max_tab_width |
mov ebx,[tab_bar.Bounds.Left-2] |
mov bx,ax |
add ebx,1*65536 |
add ecx,1*65536-2 |
push eax |
mcall 13 |
pop eax |
add eax,-2 |
shl eax,16 |
add ebx,eax |
mov bx,3 |
mov edx,[cl_3d_inset] |
call draw_framerect |
ret |
.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 |
ret |
endf |
func get_max_tab_width |
mov eax,100 |
ret |
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] |
inc [cur_tab.Editor.Bounds.Left] |
inc [cur_tab.Editor.Bounds.Top] |
dec [cur_tab.Editor.Bounds.Right] |
dec [cur_tab.Editor.Bounds.Bottom] |
mov al,[tab_bar.Style] |
dec al |
jz .tabs_on_top |
dec al |
jz .tabs_on_bottom |
dec al |
jz .tabs_on_left |
dec al |
jz .tabs_on_right |
ret |
.tabs_on_top: |
add [cur_tab.Editor.Bounds.Top],TBARH |
ret |
.tabs_on_bottom: |
sub [cur_tab.Editor.Bounds.Bottom],TBARH |
ret |
.tabs_on_left: |
call get_max_tab_width |
add [cur_tab.Editor.Bounds.Left],eax |
ret |
.tabs_on_right: |
call get_max_tab_width |
sub [cur_tab.Editor.Bounds.Right],eax |
ret |
endf |
/programs/develop/tinypad/trunk/tp-tbox.asm |
---|
85,6 → 85,7 |
mov [tb.sel.x],ah |
mcall 13,dword[tbox.x],dword[tbox.y],[color_tbl+4*5];[sc.work] |
mov edx,[cl_3d_inset] |
call draw_framerect |
call textbox.get_width |