Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 258 → Rev 259

/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