kolibrios/programs/develop/tinypad/trunk/tinypad.asm
heavyiron 95366971d1 Tinypad from 0.6.0.0
git-svn-id: svn://kolibrios.org@178 a494cfbc-eb01-0410-851d-a64ba20cac60
2006-10-11 20:40:53 +00:00

1033 lines
32 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;-----------------------------------------------------------------------------
; project name: TINYPAD
; compiler: flat assembler 1.67.1
; memory to compile: 2.0/7.0 MBytes (without/with size optimizations)
; version: 4.0.3
; last update: 2006-08-28 (Aug 28, 2006)
; minimal kernel: revision #138 (svn://kolibrios.org/kernel)
;-----------------------------------------------------------------------------
; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi
; maintained by: Ivan Poddubny >> ivan-yar@bk.ru
; Mike Semenyako >> mike.dld@gmail.com
;-----------------------------------------------------------------------------
; TODO:
; - 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)
; - improve window drawing with small dimensions
; - other bugfixes and speed/size optimizations
;
; HISTORY:
; 4.0.3 (mike.dld)
; bug-fixes:
; - 1-char selection if pressing <BS> out of real line length
; - fault in `writepos`, added call to function 9
; - main menu items weren't highlighted if popup opened and cursor
; isn't in menu item's area
; - statusbar and textboxes drawing fixes (wrong colors)
; - perform no redraw while pressing Shift, Ctrl, Alt keys
; - data length from DOCPAK in string representation (fix by diamond)
; changes:
; - function 70 instead of 58 for files loading/saving
; - clientarea-relative drawing (less code)
; - every line's dword is now splitted into 2 words;
; low word - line block length, so max line length is 65535 now
; high word - various flags. for now, only 2 of 16 bits are used:
; if bit #0 is set, line was modified since file open
; if bit #1 is set, line was saved after last modification
; high word could also be further used for code collapsing and different
; line marking features (breakpoints, errors, bookmarks, etc.)
; new features:
; - line markers for modified and saved lines
; - status messages for various actions
; 4.0.2 (mike.dld)
; bug-fixes:
; - program terminates if started with parameters (fine for DOCPAK)
; 4.0.1 (mike.dld)
; bug-fixes:
; - unable to run program after exiting from main menu (Alt+X)
; new features:
; - integration with DOCPAK
; 4.0 (mike.dld)
; bug-fixes:
; - main menu popups' "on show" was called only for first shown popup
; - clear selection on left/right arrow keys
; new features:
; - "replace" dialog (w/o "skip", "replace all")
; - line numbers display
; - options (except "appearance" and "smart tabulation")
; - options saving (colors, window position, "Options" popup triggers)
; 4.0 beta 2 (mike.dld)
; bug-fixes:
; - unable to start if /rd/1/example.asm is missing (from Halyavin)
; - clicking on menu items draws main window in popup (from Rohan)
; - passed parameters aren't taken into account (from Mario79)
; - background isn't erased if text lines < screen lines after
; selection deletion (from Rohan)
; 4.0 beta 1 (mike.dld)
; menu bar and popup menu;
; removed buttons from the top and input fields from the bottom since
; now they're accesible through main/popup menu;
; improved keyboard handling (using 66th function);
; support for almost all FASMW keyboard shourtcuts;
; added text selection ability, standard selection operations
; (copy,cut,paste);
; new integrated dialogs (open, save, find)
; fix to collapse SPACEs into TABs only for *.asm and *.inc files
; 3.78a (mike.dld)
; fixed termination while typing in x positions higher than (line_length+10);
; improved drawing on small heights
; don't draw window while its height = 0 (Kolibri "minimize" support)
; 3.78 (mike.dld)
; now lines may be of ANY length;
; optimized memory usage (less memory for internal file representation)
; after loading file, it's internal size equals to its real size
; plus 14 bytes for each line (4 bytes for line length
; and 10 spaced to the end - to reduce data relocations count);
; completely rewritten keyboard handling;
; added horizontal scrollbar;
; all line feed formats are supported: WIN(CRLF),*NIX(LF),MAC(CR);
; etc.
; 3.77 (mike.dld)
; changed save_string to collapse SPACEs into TABs;
; rewrote drawfile from scratch (speed++)
; through some drawing improvements needed
; (some checkups to reduce flickering);
; writepos (size--);
; fixed drawing window while height < 100px, and for non-asm files;
; several small fixes; speed/size optimizations
; 3.76 (mike.dld)
; changed loadfile/loadhdfile to expand TABs into SPACEs;
; changed TAB,ENTER,DELETE,BSPACE keys behaviour (rewritten from scratch);
; vertical scrollbar;
; extra window resizing capabilities (added a couple of constants);
; completely new text cursor management & moving text cursor with mouse;
; improved search function, moving cursor to beginning of text found;
; adjustable max line width (change LINE_WIDTH & recompile) // (obsolet)
; 3.75a
; fixed converting char to upper case in read_string
; 3.75
; rewrote save_file from scratch; bugfix in loadfile;
; 3.74
; optimisation
; 3.73
; completly new load_file function
; 3.72
; speed++
; 3.71
; error beep
; 3.6,3.7:
; many bugs fixed
; simple toolbar
; compile, run applications from TINYPAD, all fasm output is in debug board
; TAB button
; 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
header '01',1,@CODE,TINYPAD_END,AREA_ENDMEM,MAIN_STACK,@PARAMS,self_path
;include 'debug.inc'
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 !!!
AMINS = 8 ; minimal scroll thumb size (pixels)
LCHGW = 2 ; changed/saved marker width
STATH = 14 ; status bar height
MEV_LDOWN = 1
MEV_LUP = 2
MEV_RDOWN = 3
MEV_RUP = 4
MEV_MOVE = 5
;-----------------------------------------------------------------------------
section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------
label color_tbl dword
RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; RGB( 0, 0, 0) ; text
RGB( 0,144, 0) ; RGB( 0,144, 0) ; RGB( 0,160, 0) ; numbers
RGB(176, 0, 0) ; RGB(160, 0, 0) ; RGB( 0,128,255) ; strings
RGB(128,128,128) ; RGB(144,144,144) ; RGB(160,160,160) ; comments
RGB( 48, 48,240) ; RGB( 48, 48,240) ; RGB(255, 0, 0) ; symbols
RGB(255,255,255) ; RGB(224,224,224) ; RGB(255,255,255) ; background
RGB(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( 0,255, 0) ; modified line marker
RGB(255,255, 0) ; saved line marker
ins_mode db 1
options db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
mainwnd_pos:
.x dd 100
.y dd 75
.w dd 6*80+6+SCRLW+5
.h dd 402
;-----------------------------------------------------------------------------
section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------
; fninit
; stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_left,50
; mov [mainwnd_pos.x],eax
; stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_top,50
; mov [mainwnd_pos.y],eax
; stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_right,350
; sub eax,[mainwnd_pos.x]
; mov [mainwnd_pos.w],eax
; stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_bottom,450
; sub eax,[mainwnd_pos.y]
; mov [mainwnd_pos.h],eax
cld
mov edi,@UDATA
mov ecx,@PARAMS-@UDATA
mov al,0
rep stosb
inc [do_not_draw]
mov [left_ofs],40+1
mov [f_info+4],0
mov [f_info+12],AREA_TEMP
mov [f_info+16],AREA_EDIT-AREA_TEMP
mov esi,s_example
mov edi,tb_opensave.text
mov ecx,s_example.size
mov [tb_opensave.length],cl
rep movsb
mov esi,s_still
mov edi,s_search
mov ecx,s_still.size
mov [s_search.size],ecx
rep movsb
cmp byte[@PARAMS],0
jz no_params
;// Willow's code to support DOCPAK [
cmp byte[@PARAMS],'*'
jne .noipc
;// diamond [ (convert size from decimal representation to dword)
;-- mov edx,dword[@PARAMS+1]
mov esi,@PARAMS+1
xor edx,edx
xor eax,eax
@@: lodsb
test al,al
jz @f
lea edx,[edx*4+edx]
lea edx,[edx*2+eax-'0']
jmp @b
@@:
;// diamond ]
add edx,20
mcall 60,1,AREA_TEMP-16 ; 0x10000-16
mov dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8
mcall 40,1000000b
mcall 23,200
cmp eax,7
jne key.alt_x.close ; <20><><EFBFBD> <20><> mcall -1 <20><><EFBFBD><EFBFBD><EFBFBD>
mov esi,AREA_TEMP-16 ; 0x10000-16
mov byte[esi],1
mov eax,[esi+12]
inc eax
call load_file.file_found
jmp @f
.noipc:
;// Willow's code to support DOCPAK ]
; parameters are at @PARAMS
mov esi,@PARAMS
mov edi,tb_opensave.text
mov ecx,PATHL
rep movsb
mov edi,tb_opensave.text
mov ecx,PATHL
xor al,al
repne scasb
jne key.alt_x.close
lea eax,[edi-tb_opensave.text-1]
mov [tb_opensave.length],al
no_params:
call btn.load_file;do_load_file
jnc @f
call new_file
@@:
dec [do_not_draw]
mcall 66,1,1
mcall 40,00100111b
red:
call drawwindow
call check_inv_all.skip_check
;-----------------------------------------------------------------------------
still:
call writepos ; write current position & number of strings
.skip_write:
mcall 10;23,50; wait here until event
cmp [main_closed],0
jne key.alt_x
dec eax ; redraw ?
jz red
dec eax ; key ?
jz key
dec eax ; button ?
jz button
sub eax,3 ; mouse ?
jz mouse
jmp still.skip_write
;-----------------------------------------------------------------------------
func start_fasm ;/////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
; BL = run after compile
;-----------------------------------------------------------------------------
cmp [asm_mode],0
jne @f
ret
@@: mov esi,f_info.path ; s_fname
mov edi,fasm_parameters
cmp byte[esi],'/'
je .yes_systree
mov ecx,[f_info.length] ; [s_fname.size]
rep movsb
mov al,','
stosb
mov ecx,[f_info.length] ; [s_fname.size]
add ecx,-4
mov esi,f_info.path ; s_fname
rep movsb
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
rep movsb
mov al,','
stosb
pop ecx esi
add ecx,-4
rep movsb
mov al,','
stosb
pop ecx
sub ecx,f_info.path ; s_fname
mov esi,f_info.path ; s_fname
rep movsb
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
start_ret:
mov eax, 70
int 0x40
ret
endf
;-----------------------------------------------------------------------------
func open_debug_board ;///////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov ebx, board_start
jmp start_ret
endf
;-----------------------------------------------------------------------------
func open_sysfuncs_txt ;//////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov ebx, docpak_start
call start_ret
cmp eax,0xfffffff0
jb @f
mov ebx, tinypad_start
mov dword [ebx+8], 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
;;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
func set_opt
test [options],al
je @f
not al
and [options],al
ret
@@: or [options],al
ret
endf
func set_line_numbers
mov al,OPTS_LINENUMS
call set_opt
ret
endf
func set_optimal_fill
mov al,OPTS_OPTIMSAVE
call set_opt
ret
endf
func set_auto_indents
mov al,OPTS_AUTOINDENT
call set_opt
ret
endf
func set_auto_braces
mov al,OPTS_AUTOBRACES
call set_opt
ret
endf
func set_secure_sel
mov al,OPTS_SECURESEL
call set_opt
ret
endf
;-----------------------------------------------------------------------------
include 'tp-draw.asm'
include 'tp-key.asm'
include 'tp-butto.asm'
include 'tp-mouse.asm'
include 'tp-files.asm'
include 'tp-commo.asm'
include 'tp-dialo.asm'
include 'tp-popup.asm'
include 'tp-tbox.asm'
;include 'lib-ini.asm'
;-----------------------------------------------------------------------------
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
key0 db \
0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x07,\
0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,\
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,\
0x18,0x19,0x1A,0x1B,0x00,0x00,0x1E,0x1F,\
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,\
0x28,0x29,0x00,0x2B,0x2C,0x2D,0x2E,0x2F,\
0x30,0x31,0x32,0x33,0x34,0x35,0x00,0x00,\
0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x00
times 12*16 db 0x00
accel_table dd \
0x0000000E,key.bkspace ,\ ; BackSpace
0x0000000F,key.tab ,\ ; Tab
0x0000001C,key.return ,\ ; Return
0x0000003D,key.f3 ,\ ; F3
0x00000043,key.f9 ,\ ; F9
0x00000147,key.home ,\ ; Home
0x00000148,key.up ,\ ; Up
0x00000149,key.pgup ,\ ; PageUp
0x0000014B,key.left ,\ ; Left
0x0000014D,key.right ,\ ; Right
0x0000014F,key.end ,\ ; End
0x00000150,key.down ,\ ; Down
0x00000151,key.pgdn ,\ ; PageDown
0x00000152,key.ins ,\ ; Insert
0x00000153,key.del ,\ ; Delete
0x00010147,key.shift_home ,\ ; Shift+Home
0x00010148,key.shift_up ,\ ; Shift+Up
0x00010149,key.shift_pgup ,\ ; Shift+PageUp
0x0001014B,key.shift_left ,\ ; Shift+Left
0x0001014D,key.shift_right ,\ ; Shift+Right
0x0001014F,key.shift_end ,\ ; Shift+End
0x00010150,key.shift_down ,\ ; Shift+Down
0x00010151,key.shift_pgdn ,\ ; Shift+PageDown
0x00010153,key.del ,\ ; Shift+Delete
0x00020015,key.ctrl_y ,\ ; Ctrl+Y
0x00020018,key.ctrl_o ,\ ; Ctrl+O
0x0002001E,key.ctrl_a ,\ ; Ctrl+A
0x0002001F,key.ctrl_s ,\ ; Ctrl+S
0x00020020,key.ctrl_d ,\ ; Ctrl+D
0x00020021,key.ctrl_f ,\ ; Ctrl+F
0x00020022,key.ctrl_g ,\ ; Ctrl+G
0x00020023,key.ctrl_h ,\ ; Ctrl+H
\;0x00020026,key.ctrl_l ,\ ; Ctrl+L
0x0002002D,key.ctrl_x ,\ ; Ctrl+X
0x0002002E,key.ctrl_c ,\ ; Ctrl+C
0x0002002F,key.ctrl_v ,\ ; Ctrl+V
0x00020031,key.ctrl_n ,\ ; Ctrl+N
0x00020043,key.ctrl_f9 ,\ ; Ctrl+F9
0x00020147,key.ctrl_home ,\ ; Ctrl+Home
\;0x00020148,key.ctrl_up ,\ ; Ctrl+Up
0x00020149,key.ctrl_pgup ,\ ; Ctrl+PageUp
0x0002014B,key.ctrl_left ,\ ; Ctrl+Left
0x0002014D,key.ctrl_right ,\ ; Ctrl+Right
0x0002014F,key.ctrl_end ,\ ; Ctrl+End
\;0x00020150,key.ctrl_down ,\ ; Ctrl+Down
0x00020151,key.ctrl_pgdn ,\ ; Ctrl+PageDown
0x00020153,key.del ,\ ; Ctrl+Del
0x0003001F,key.shift_ctrl_s ,\ ; Shift+Ctrl+S
0x00030147,key.shift_ctrl_home ,\ ; Shift+Ctrl+Home
\;0x00030148,key.shift_ctrl_up ,\ ; Shift+Ctrl+Up
0x00030149,key.shift_ctrl_pgup ,\ ; Shift+Ctrl+PageUp
0x0003014B,key.shift_ctrl_left ,\ ; Shift+Ctrl+Left
0x0003014D,key.shift_ctrl_right ,\ ; Shift+Ctrl+Right
0x0003014F,key.shift_ctrl_end ,\ ; Shift+Ctrl+End
\;0x00030150,key.shift_ctrl_down ,\ ; Shift+Ctrl+Down
0x00030151,key.shift_ctrl_pgdn ,\ ; Shift+Ctrl+PageDown
0x0004002D,key.alt_x ,\ ; Alt+X
0
accel_table_textbox dd \
\;0x00000001,key.tb.escape ,\ ; Escape
0x0000000E,key.tb.bkspace ,\ ; BackSpace
\;0x0000000F,key.tb.tab ,\ ; Tab
\;0x0000001C,key.tb.return ,\ ; Return
0x00000147,key.tb.home ,\ ; Home
0x0000014B,key.tb.left ,\ ; Left
0x0000014D,key.tb.right ,\ ; Right
0x0000014F,key.tb.end ,\ ; End
0x00000153,key.tb.del ,\ ; Delete
0x00010147,key.tb.shift_home ,\ ; Shift+Home
0x0001014B,key.tb.shift_left ,\ ; Shift+Left
0x0001014D,key.tb.shift_right ,\ ; Shift+Right
0x0001014F,key.tb.shift_end ,\ ; Shift+End
0x00010153,key.tb.del ,\ ; Shift+Del
0
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 \
1,btn.close_main_window ,\
20001,btn.bot.cancel ,\
20002,btn.bot.opensave ,\
20003,btn.bot.find ,\
0
add_table:
; times $61 db -$00
times $1A db -$20
times $25 db -$00
times $10 db -$20
times $30 db -$00
times $10 db -$50
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
dd fasm_parameters
dd 0
dd 0
db '/RD/1/FASM',0
board_start:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/RD/1/BOARD',0
tinypad_start:
dd 7
dd 0
dd ?
dd 0
dd 0
db '/RD/1/TINYPAD',0
docpak_start:
dd 7
dd 0
dd sysfuncs_param
dd 0
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>
sz htext,'TINYPAD 4.0.3'
lszc help_text,b,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:',\
ru,' ',\
ru,' CTRL+F1 : <20><><EFBFBD> <20><><EFBFBD><EFBFBD>',\
ru,' CTRL+S : <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD>',\
ru,' CTRL+E : <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD>',\
ru,' CTRL+P : <20><><EFBFBD><E2A0A2><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> <20><><><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',\
ru,' CTRL+D : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>',\
ru,' CTRL+L : <20><><EFBFBD><E2A0A2><EFBFBD> <20><><EFBFBD>-ࠧ<><E0A0A7><EFBFBD><EFBFBD><EFBFBD>',\
ru,' CTRL+[ : <20><><EFBFBD><E0A5A9> <20> <20><><EFBFBD><><E4A0A9>',\
ru,' CTRL+] : <20><><EFBFBD><E0A5A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>',\
ru,' CTRL+F2 : <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8><>',\
ru,' CTRL+F3 : <20><><EFBFBD><EFBFBD><EFBFBD>',\
ru,' CTRL+F4 : <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><>',\
ru,' CTRL+F5 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><><E4A0A9>',\
ru,' CTRL+F6 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>᪠',\
ru,' CTRL+F8 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1AAAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',\
\
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,'<27><><EFBFBD><EFBFBD>' ,popup_file ,onshow.file ,\
ru,'<27><EFBFBD><E0A0A2>',popup_edit ,onshow.edit ,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD>' ,popup_search ,onshow.search ,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',popup_run ,onshow.run ,\
ru,'<27><>樨' ,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,'Options',popup_options,onshow.options
popup_res popup_file,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD>' ,'Ctrl+N' ,key.ctrl_n ,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...' ,'Ctrl+O' ,key.ctrl_o ,\
ru,'<27><><EFBFBD><EFBFBD><E0A0AD><EFBFBD>' ,'Ctrl+S' ,key.ctrl_s ,\
ru,'<27><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD>...','Ctrl+Shift+S',key.shift_ctrl_s,\
ru,'-' ,'' ,0 ,\
ru,'<27><>室' ,'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,'<27><><EFBFBD><E0A5A7><EFBFBD>' ,'Ctrl+X',key.ctrl_x,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD>' ,'Ctrl+C',key.ctrl_c,\
ru,'<27><><EFBFBD><E2A0A2><EFBFBD>' ,'Ctrl+V',key.ctrl_v,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ,'' ,key.del ,\
ru,'-' ,'' ,0 ,\
ru,'<27><EFBFBD><EBA4A5><EFBFBD><EFBFBD> <20><><EFBFBD>','Ctrl+A',key.ctrl_a,\
\; ru,'-' ,'' ,0 ,\
\; ru,'<27><><EFBFBD><EFBFBD><E2A8AA><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>','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,'<27><><EFBFBD><E0A5A9>...' ,'Ctrl+G',key.ctrl_g,\
ru,'-' ,'' ,0 ,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD>...' ,'Ctrl+F',key.ctrl_f,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>','F3' ,key.f3 ,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...','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,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ,'F9' ,key.f9 ,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD>' ,'Ctrl+F9',key.ctrl_f9 ,\
ru,'-' ,'' ,0 ,\
ru,'<27><><20><EFBFBD><E2ABA0><EFBFBD>' ,'' ,open_debug_board ,\
ru,'<27><><EFBFBD><EFBFBD><E2A5AC><EFBFBD> <20>㭪樨','' ,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_options,\
ru,'<27><><EFBFBD><EFBFBD> <20><><EFBFBD>...' ,'',0,\
ru,'-' ,'',0,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>' ,'',set_secure_sel,\
ru,'<27><><EFBFBD><E2AEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1AAAE><EFBFBD>' ,'',set_auto_braces,\
ru,'<27><><EFBFBD><E2AEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ,'',set_auto_indents,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><><E2A0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ,'',0,\
ru,'<27><><EFBFBD><E2A8AC><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD>','',set_optimal_fill,\
ru,'-' ,'',0,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப' ,'',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,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',\
en,'Modified'
lsz s_2filename,\
ru,'<27><><EFBFBD><><E4A0A9>:',\
en,'Filename:'
lsz s_2open,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',\
en,'Open'
lsz s_2save,\
ru,'<27><><EFBFBD><EFBFBD><E0A0AD><EFBFBD>',\
en,'Save'
lsz s_2find,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD>',\
en,'Find'
db ':'
lsz s_2replace,\
ru,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',\
en,'Replace'
db ':'
lsz s_2cancel,\
ru,'<27><EFBFBD><E2ACA5>',\
en,'Cancel'
lsz s_enter_filename,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><><E4A0A9>',0>,\
en,<'Enter filename',0>
lsz s_enter_text_to_find,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA> <20><><EFBFBD> <20><><EFBFBD>᪠',0>,\
en,<'Enter text to find',0>
lsz s_enter_text_to_replace,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0>,\
en,<'Enter text to replace',0>
lsz s_text_not_found,\
ru,<'<27><><EFBFBD><EFBFBD><E2A8A3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><><E4A0A9>, ⥪<><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0>,\
en,<'Reached end of file, text not found',0>
lszc s_fs_error,b,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯥ譮 (0)',0>,\
ru,<'',0>,\
ru,<'<27><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (2)',0>,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (3)',0>,\
ru,<'',0>,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> (5)',0>,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯥ譮 (6)',0>,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E5AEA4><EFBFBD><EFBFBD> <20><> <20><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> (7)',0>,\
ru,<'<27><> <20><><20><><EFBFBD><><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (8)',0>,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FAT 㭨<><EFBFBD><E2AEA6><EFBFBD> (9)',0>,\
ru,<'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (10)',0>,\
ru,<'<27><EFBFBD><E8A8A1> <20><><EFBFBD><EFBFBD>⢠ (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
finfo_ini dd ?,?,?,AREA_TEMP,AREA_EDIT-AREA_TEMP
db '/rd/1/tinypad.ini',0
TINYPAD_END: ; end of file
self_path rb PATHL
;-----------------------------------------------------------------------------
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 ?
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
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
draw_blines dd ? ; last line to draw
cur_line_len dd ?
h_popup dd ?
bot_dlg_handler dd ?
sel.begin.x dd ?
sel.begin.y dd ?
sel.end.x dd ?
sel.end.y dd ?
sel.selected db ?
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?
align 4
s_fname.size dd ?
s_fname rb PATHL+1
align 4
s_search.size dd ?
s_search rb PATHL+1
s_title rb PATHL+11 ; window caption
chr db ?
ext db ?
shi dd ?
align 4
cl_3d_normal dd ?
cl_3d_pushed dd ?
cl_3d_outset dd ?
cl_3d_inset dd ?
cl_3d_grayed dd ?
tb_opensave TBOX
tb_find TBOX
tb_replace TBOX
tb_gotorow TBOX
tb_gotocol TBOX
focused_tb dd ?
key1 rb 256
mst db ?
mst2 db ?
mev db ?
mouse_captured db ?
just_from_popup db ?
bot_mode db ?
modified db ?
align 4
bot_dlg_height dd ?
bot_dlg_mode2 db ?
;-----------------------------------------------------------------------------
section @PARAMS ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;-----------------------------------------------------------------------------
fasm_parameters:
p_info process_information
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
;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