;----------------------------------------------------------------------------- ; project name: TINYPAD ; compiler: flat assembler 1.67.1 ; 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) ; minimal kernel: revision #138 (svn://kolibrios.org/kernel) ;----------------------------------------------------------------------------- ; originally by: Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi ; maintained by: Mike Semenyako >> mike.dld@gmail.com ; Ivan Poddubny >> ivan-yar@bk.ru ;----------------------------------------------------------------------------- ; 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.4 pre (mike.dld) ; bug-fixes: ; - clear statusbar text if dialog operation cancelled ; changes: ; - modified/saved colors now match those in MSVS ; new features: ; - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor) ; 4.0.3 (mike.dld) ; bug-fixes: ; - 1-char selection if pressing 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 main 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 (fixed 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 APP_VERSION equ '4.0.4 pre' ;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(255,255, 0) ; modified line marker RGB( 0,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 ; ¤Єю эр mcall -1 ьхЄър 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-button.asm' include 'tp-mouse.asm' include 'tp-files.asm' include 'tp-common.asm' include 'tp-dialog.asm' include 'tp-popup.asm' include 'tp-tbox.asm' include 'tp-recode.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/DEVELOP/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 ',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 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