Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 296 → Rev 297

/programs/develop/tinypad/trunk/tinypad.asm
1,9 → 1,9
;-----------------------------------------------------------------------------
; project name: TINYPAD
; compiler: flat assembler 1.67.15
; memory to compile: 2.0/7.0 MBytes (without/with size optimizations)
; version: 4.0.4 pre
; last update: 2007-01-18 (Jan 18, 2007)
; compiler: flat assembler 1.67.18
; memory to compile: 3.0/9.0 MBytes (without/with size optimizations)
; version: 4.0.4
; last update: 2007-01-28 (Jan 28, 2007)
; minimal kernel: revision #270 (svn://kolibrios.org/kernel)
;-----------------------------------------------------------------------------
; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi
10,26 → 10,20
; maintained by: Mike Semenyako >> mike.dld@gmail.com
; Ivan Poddubny >> ivan-yar@bk.ru
;-----------------------------------------------------------------------------
; TODO (FOR 4.1.0):
; TODO (4.1.0):
; - optimize drawing (reduce flickering)
; - add vertical selection, undo, goto position, overwrite mode
; - improve window drawing with small dimensions
; - other bug-fixes and speed/size optimizations
; - save settings to ini file, not to executable
;
; TODO (4.0.4, PLANNED FOR 2007-01-21):
; normal:
; - finish tabbed interface (tab switching, Ctrl+F4)
; - reduce flickering (introduce changes checker)
; - compile default file if selected
; low:
; - add prompt to save file before closing/opening
; - other bug-fixes and speed/size optimizations
;
; HISTORY:
; 4.0.4 pre (mike.dld)
; 4.0.4 (mike.dld)
; bug-fixes:
; - statusbar contained hint after dialog operation cancelled
; - small drawing fix for gutter and line saved/modified markers
; (incorrect calculations)
; - incorrect lines marking on Ctrl+V
; changes:
; - editor and other modifications to ease parts placement changing,
39,12 → 33,14
; - use memory manager instead of statically allocated region
; - case-insensitive filenames input, to be able to open/save files with
; non-latin chars in name (russian etc.)
; - reduced flickering (changes checker)
; - overall code cleanup
; new features:
; - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor)
; - tabbed interface, ability to open several files in one app instance
; (thanks IRC guys for ideas and testing
; (thanks IRC guys for ideas and testing)
; - make any tab default to compile it disregarding currently active tab
; - configuration dialog (colors, tabs positioning)
; 4.0.3 (mike.dld)
; bug-fixes:
; - 1-char selection if pressing <BS> out of real line length
157,11 → 153,11
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,STATIC_MEM_END,MAIN_STACK,@PARAMS,self_path
 
APP_VERSION equ '4.0.4 pre'
APP_VERSION equ '4.0.4'
 
;include 'debug.inc'
;define __DEBUG__ 1
185,18 → 181,19
;-----------------------------------------------------------------------------
 
label color_tbl dword
RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; text
RGB( 0,144, 0) ; RGB( 0,160, 0) ; RGB( 0,144, 0) ; numbers
RGB(176, 0, 0) ; RGB( 0,128,255) ; RGB(160, 0, 0) ; strings
RGB(128,128,128) ; RGB(160,160,160) ; RGB(144,144,144) ; comments
RGB( 48, 48,240) ; RGB(255, 0, 0) ; RGB( 48, 48,240) ; symbols
RGB(255,255,255) ; RGB(255,255,255) ; RGB(224,224,224) ; background
RGB(255,255,255) ; RGB(255,255,255) ; RGB(255,255,255) ; selection text
RGB( 10, 36,106) ; RGB( 0, 64,128) ; RGB( 0, 0,128) ; selection background
RGB(255,238, 98) ; modified line marker
RGB(108,226,108) ; saved line marker
.text: RGB( 0, 0, 0)
.back: RGB(255,255,255)
.text.sel: RGB(255,255,255)
.back.sel: RGB( 10, 36,106)
.symbol: RGB( 48, 48,240)
.number: RGB( 0,144, 0)
.string: RGB(176, 0, 0)
.comment: RGB(128,128,128)
.line.moded: RGB(255,238, 98)
.line.saved: RGB(108,226,108)
 
ins_mode db 1
tab_pos db 2
 
options db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
 
229,7 → 226,8
mov al,0
rep stosb
 
mov [tab_bar.Style],2
mov al,[tab_pos]
mov [tab_bar.Style],al
 
mcall 68,11
or eax,eax
241,6 → 239,8
 
inc [do_not_draw]
 
mov dword[app_start],7
 
mov esi,s_example
mov edi,tb_opensave.text
mov ecx,s_example.size
253,8 → 253,6
mov [s_search.size],ecx
rep movsb
 
; DEBUGF 1,"params: '%s'\n",@PARAMS
 
cmp byte[@PARAMS],0
jz no_params
 
263,8 → 261,6
cmp byte[@PARAMS],'*'
jne .noipc
 
; DEBUGF 1," started by DOCPAK\n"
 
;// diamond [ (convert size from decimal representation to dword)
;-- mov edx,dword[@PARAMS+1]
mov esi,@PARAMS+1
281,38 → 277,22
 
add edx,20
 
; DEBUGF 1," data size (+20) = %d\n",edx
 
mov eax,edx
call mem.Alloc
mov ebp,eax
push eax
 
; DEBUGF 1," mem.Alloc() returned 0x%x, allocated size = %d\n",eax,[eax-4]
 
;! mcall 60,1,AREA_TEMP-16 ; 0x10000-16
;! mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8
mov dword[ebp+0],0
mov dword[ebp+4],8
mcall 60,1,ebp
mcall 40,1000000b
 
; DEBUGF 1," got IPC message within 2 secs? "
mcall 23,200
; DEBUGF 1,"%b\n",eax == 7
 
cmp eax,7
jne key.alt_x.close
;! mov esi,AREA_TEMP-16 ; 0x10000-16
;! mov byte[esi],1
;! mov eax,[esi+12]
mov byte[ebp],1
;! mov eax,[ebp+12]
;! inc eax
;! call load_file.file_found
 
; DEBUGF 1," creating new document\n"
 
mov ecx,[ebp+12]
lea esi,[ebp+16]
call create_tab
322,14 → 302,11
mov eax,ebp
call mem.Free
 
; DEBUGF 1," mem.Free(0x%x) returned %d\n",ebp,eax
 
jmp @f
.noipc:
 
;// Willow's code to support DOCPAK ]
 
; parameters are at @PARAMS
mov esi,@PARAMS
mov edi,tb_opensave.text
mov ecx,PATHL
341,7 → 318,7
jne key.alt_x.close
lea eax,[edi-tb_opensave.text-1]
mov [tb_opensave.length],al
call btn.load_file
call load_file
jnc @f
 
no_params:
354,7 → 331,6
mcall 40,00100111b
red:
call drawwindow
call check_inv_all.skip_check
 
;-----------------------------------------------------------------------------
 
362,7 → 338,7
call draw_statusbar ; write current position & number of strings
 
.skip_write:
mcall 10;23,50; wait here until event
mcall 10 ; wait here until event
cmp [main_closed],0
jne key.alt_x
dec eax ; redraw ?
381,86 → 357,66
;-----------------------------------------------------------------------------
; BL = run after compile
;-----------------------------------------------------------------------------
cmp [cur_editor.AsmMode],0 ;! [asm_mode],0
; FASM infile,outfile,/path/to/files[,run]
;-----------------------------------------------------------------------------
cmp [cur_editor.AsmMode],0
jne @f
ret
@@: mov esi,f_info.path ; s_fname
@@:
mov eax,[tab_bar.Default.Ptr]
or eax,eax
jnz @f
mov eax,[tab_bar.Current.Ptr]
@@: cmp byte[eax+TABITEM.Editor.FilePath],'/'
je @f
ret
@@:
mov edi,fasm_parameters
push eax
 
cmp byte[esi],'/'
je .yes_systree
cld
 
mov ecx,[f_info.length] ; [s_fname.size]
rep movsb
 
mov al,','
lea esi,[eax+TABITEM.Editor.FilePath]
add esi,[eax+TABITEM.Editor.FileName]
push esi esi
@@: lodsb
cmp al,0
je @f
stosb
 
mov ecx,[f_info.length] ; [s_fname.size]
add ecx,-4
mov esi,f_info.path ; s_fname
rep movsb
 
cmp al,'.'
jne @b
mov ecx,esi
jmp @b
@@:
mov al,','
stosb
 
mov dword[edi],'/RD/'
mov word[edi+4],'1/'
add edi,6
 
mov al,0
stosb
 
jmp .run
 
.yes_systree:
mov eax,[f_info.length]
add esi,eax ; [s_fname.size]
dec esi
 
xor ecx,ecx
mov al,'/'
@@: cmp [esi],al
je @f
dec esi
inc ecx
jmp @b
@@: inc esi
 
push esi esi ecx
 
pop esi
sub ecx,esi
dec ecx
jz @f
rep movsb
 
@@:
mov al,','
stosb
 
pop ecx esi
 
add ecx,-4
add esi,TABITEM.Editor.FilePath
sub ecx,esi
rep movsb
 
mov al,','
stosb
 
pop ecx
sub ecx,f_info.path ; s_fname
mov esi,f_info.path ; s_fname
 
rep movsb
 
cmp bl,0 ; run outfile ?
je @f
mov dword[edi],',run'
add edi,4
@@:
mov al,0
stosb
 
.run:
cmp bl,0 ; run outfile ?
je @f
mov dword[edi-1],',run'
mov byte[edi+3],0
@@:
mov ebx, fasm_start
mov [app_start.filename],app_fasm
mov [app_start.params],fasm_parameters
start_ret:
mov eax, 70
int 0x40
mcall 70,app_start
ret
endf
 
467,7 → 423,8
;-----------------------------------------------------------------------------
func open_debug_board ;///////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov ebx, board_start
mov [app_start.filename],app_board
mov [app_start.params],0
jmp start_ret
endf
 
474,44 → 431,38
;-----------------------------------------------------------------------------
func open_sysfuncs_txt ;//////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov ebx, docpak_start
mov [app_start.filename],app_docpak
mov [app_start.params],sysfuncs_param
call start_ret
cmp eax,0xfffffff0
jb @f
mov ebx, tinypad_start
mov dword [ebx+8], sysfuncs_filename
mov [app_start.filename],app_tinypad
mov [app_start.params],sysfuncs_filename
call start_ret
@@: ret
endf
 
;-----------------------------------------------------------------------------
;func layout ;///// change keyboard layout ///////////////////////////////////
;-----------------------------------------------------------------------------
; mcall 19,setup,param_setup
; mcall 5,eax
;; call activate_me
;; ret
;;endf
set_opt:
 
;;func activate_me
; mcall 9,p_info,-1
; inc eax
; inc eax
; mov ecx,eax
; mov edi,[p_info.PID]
; mov ebx,p_info
; @@: dec ecx
; jz @f ; counter=0 => not found? => return
; mcall 9
; cmp edi,[p_info.PID]
; jne @b
; mcall 18,3
; mcall 5,eax
; @@: ret
;endf
.dialog:
mov [bot_mode],1
mov [bot_dlg_height],128
mov [bot_dlg_handler],optsdlg_handler
mov [focused_tb],tb_color
mov al,[tb_color.length]
mov [tb_color.pos.x],al
mov [tb_color.sel.x],0
mov [tb_casesen],1
mov [cur_part],0
m2m [cur_color],dword[color_tbl.text]
mov esi,color_tbl
mov edi,cur_colors
mov ecx,10
cld
rep movsd
call drawwindow
ret
 
set_opt:
 
.line_numbers:
mov al,OPTS_LINENUMS
jmp .main
554,8 → 505,6
section @DATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------
 
;addr dd s_fname ; address of input string
;temp dd 0xABCD ; used in read_string
vscrl_capt dd -1
hscrl_capt dd -1
body_capt dd -1
653,7 → 602,7
0
 
accel_table2 dd \
1,btn.close_main_window ,\
1 ,key.alt_x ,\
'VSL',btn.vscroll_up ,\
'VSG',btn.vscroll_down ,\
'HSL',btn.hscroll_up ,\
663,10 → 612,12
0
 
accel_table2_botdlg dd \
1,btn.close_main_window ,\
1 ,key.alt_x ,\
20001,btn.bot.cancel ,\
20002,btn.bot.opensave ,\
20003,btn.bot.find ,\
20004,btn.bot.appearance,\
21001,btn.bot.tabpos ,\
0
 
add_table:
680,6 → 631,7
 
s_status dd 0
 
@^
fasm_start:
dd 7
dd 0
708,11 → 660,78
dd 0
dd 0
db '/RD/1/DOCPAK',0
^@
 
sz app_fasm ,'/RD/1/DEVELOP/FASM',0
sz app_board ,'/RD/1/BOARD',0
sz app_tinypad ,'/RD/1/TINYPAD',0
sz app_docpak ,'/RD/1/DOCPAK',0
 
sz sysfuncs_param,'g',0
 
include 'tp-locale.inc'
 
;// options dialog data [
label optsdlg_editor at $-EDITOR.Bounds
; rb PATHL ; FilePath db PATHL dup(?)
; dd 0 ; FileName dd ?
dd ?,?,?,? ; Bounds RECT
dd @f ; Lines dd ?
dd ? ; Lines.Size dd ?
dd 9 ; Lines.Count dd ?
dd 21 ; Columns.Count dd ?
dd 0,4 ; Caret POINT
dd 100,4 ; SelStart POINT
dd 0,0 ; TopLeft POINT
dd 0,0 ; VScroll SCROLLBAR
dd 0,0 ; HScroll SCROLLBAR
dd 0 ; Gutter.Width dd ?
db 0 ; Gutter.Visible db ?
db 1 ; AsmMode db ?
db 0 ; Modified db ?
 
@@:
dd 0x00000000+1
db ' '
dd 0x00010000+9
db ' org 100h'
dd 0x00000000+1
db ' '
dd 0x00000000+20
db ' mov ah,09h ; write'
dd 0x00000000+12
db ' mov dx,text'
dd 0x00000000+8
db ' int 21h'
dd 0x00030000+8
db ' int 20h'
dd 0x00000000+1
db ' '
dd 0x00000000+21
db ' text db "Hello!",24h'
dd 0
 
optsdlg_editor_parts: ; left,top,right,bottom,type
db 0, 12, 13, 29, 22
db 0, 12, 33, 47, 42
db 0, 12, 53, 29, 72
db 0, 12, 83, 53, 92
db 2, 12, 43, 77, 52
db 3, 4, 43,148, 52
db 4, 48, 33, 53, 42
db 4,108, 83,113, 92
db 5, 36, 13, 59, 22
db 5, 54, 33, 71, 42
db 5, 36, 53, 53, 72
db 5,114, 83,131, 92
db 6, 60, 83,107, 92
db 7, 84, 33,125, 42
db 8, 1, 13, 5, 22
db 9, 1, 63, 5, 72
db 1, 1, 1,148,105
db -1
;// ]
 
sz symbols_ex,';?.%"',"'"
sz symbols ,'#&*\:/<>|{}()[]=+-, '
 
722,8 → 741,6
sz ini_window_right ,'Right',0
sz ini_window_bottom,'Bottom',0
 
;include_debug_strings
 
TINYPAD_END: ; end of file
 
self_path rb PATHL
732,6 → 749,13
section @UDATA ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------
 
app_start:
dd ?,?
.params dd ?
dd ?,?
db ?
.filename dd ?
 
f_info.length dd ?
f_info.path:
times PATHL+1 db ?
739,6 → 763,8
 
file_info FILEINFO
 
checker_ed EDITOR
 
tab_bar TABCTL
virtual at tab_bar.Current
cur_tab TABITEM
774,6 → 800,8
main_closed db ? ; main window closed?
tb_casesen db ? ; focused textbox is case-sensitive?
 
draw_blines db ?
 
align 4
s_fname.size dd ?
s_fname rb PATHL+1
794,6 → 822,7
cl_3d_inset dd ?
cl_3d_grayed dd ?
 
tb_color TBOX
tb_opensave TBOX
tb_find TBOX
tb_replace TBOX
830,15 → 859,6
p_info2 process_information
sc system_colors
 
;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
;store dword 'tiny' at tb_opensave.text+4*3
;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