;----------------------------------------------------------------------------- ; project name: TINYPAD ; compiler: flat assembler 1.67.21 ; memory to compile: 3.0/9.0 MBytes (without/with size optimizations) ; version: 4.0.5 ; last update: 2007-09-18 (Sep 18, 2007) ; minimal kernel: revision #270 (svn://kolibrios.org/kernel/trunk) ;----------------------------------------------------------------------------- ; 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 (4.1.0): ; - add vertical selection, undo, goto position, overwrite mode, smart tabulation ; - improve window drawing with small dimensions ; - save/load settings to/from ini file, not executable ; - path autocompletion for open/save dialogs ; - other bug-fixes and speed/size optimizations ;----------------------------------------------------------------------------- ; See history.txt for complete changelog ;----------------------------------------------------------------------------- include 'lang.inc' include '../../../macros.inc' ; useful stuff include '../../../struct.inc' include '../../../proc32.inc' include 'external/libio.inc' include 'tinypad.inc' ;purge mov,add,sub ;  SPEED header '01',1,@CODE,TINYPAD_END,STATIC_MEM_END,MAIN_STACK,@PARAMS,self_path APP_VERSION equ '4.0.5' TRUE = 1 FALSE = 0 ;include 'debug.inc' ;define __DEBUG__ 1 ;define __DEBUG_LEVEL__ 1 ;include 'debug-fdo.inc' ASEPC = '-' ; separator character (char) ATOPH = 19 ; menu bar height (pixels) SCRLW = 16 ; scrollbar widht/height (pixels) ATABW = 8 ; tab key indent width (chars) LINEH = 10 ; line height (pixels) PATHL = 256 ; maximum path length (chars) !!! don't change !!! AMINS = 8 ; minimal scroll thumb size (pixels) LCHGW = 3 ; changed/saved marker width (pixels) STATH = 16 ; status bar height (pixels) TBARH = 18 ; tab bar height (pixels) ;----------------------------------------------------------------------------- section @OPTIONS ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;----------------------------------------------------------------------------- label color_tbl dword .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 mainwnd_pos: .x dd 250 .y dd 75 .w dd 6*80+6+SCRLW+5 ;- 220 .h dd 402 ;- 220 ;----------------------------------------------------------------------------- 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 mov al,[tab_pos] mov [tab_bar.Style],al mcall 68,11 or eax,eax jz key.alt_x.close stdcall dll.Load,@IMPORT or eax,eax jnz key.alt_x.close stdcall mem.Alloc,65536 mov [temp_buf],eax inc [do_not_draw] mov dword[app_start],7 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 stdcall mem.Alloc,edx mov ebp,eax push eax mov dword[ebp+0],0 mov dword[ebp+4],8 mcall 60,1,ebp mcall 40,1000000b mcall 23,200 cmp eax,7 jne key.alt_x.close mov byte[ebp],1 mov ecx,[ebp+12] lea esi,[ebp+16] call create_tab call load_from_memory pop ebp stdcall mem.Free,ebp jmp @f .noipc: ;// Willow's code to support DOCPAK ] 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 call load_file jnc @f no_params: call create_tab @@: mov [s_status],0 dec [do_not_draw] mcall 66,1,1 mcall 40,00100111b red: call drawwindow ;----------------------------------------------------------------------------- still: call draw_statusbar ; write current position & number of strings .skip_write: mcall 10 ; 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 ;----------------------------------------------------------------------------- proc get_event ctx ;////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- mcall 10 dec eax ; redraw ? jz .redraw dec eax ; key ? jz .key dec eax ; button ? jz .button sub eax,2 ; background ? jz .background dec eax ; mouse ? jz .mouse dec eax ; ipc ? jz .ipc dec eax ; network ? jz .network dec eax ; debug ? jz .debug sub eax,7 ; irq ? js .nothing cmp eax,15 jg .nothing jmp .irq .nothing: mov eax,EV_IDLE ret .redraw: mov eax,EV_REDRAW ret .key: mov eax,EV_KEY ret .button: mov eax,EV_BUTTON ret .background: mov eax,EV_BACKGROUND ret .mouse: mov eax,EV_MOUSE ret .ipc: mov eax,EV_IPC ret .network: mov eax,EV_NETWORK ret .debug: mov eax,EV_DEBUG ret endp ;----------------------------------------------------------------------------- proc start_fasm ;///////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- ; BL = run after compile ;----------------------------------------------------------------------------- ; FASM infile,outfile,/path/to/files[,run] ;----------------------------------------------------------------------------- cmp [cur_editor.AsmMode],0 jne @f ret @@: 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 cld lea esi,[eax+TABITEM.Editor.FilePath] add esi,[eax+TABITEM.Editor.FileName] push esi esi @@: lodsb cmp al,0 je @f stosb cmp al,'.' jne @b mov ecx,esi jmp @b @@: mov al,',' stosb pop esi sub ecx,esi dec ecx jz @f rep movsb @@: mov al,',' stosb pop ecx esi add esi,TABITEM.Editor.FilePath sub ecx,esi rep movsb cmp bl,0 ; run outfile ? je @f mov dword[edi],',run' add edi,4 @@: mov al,0 stosb mov [app_start.filename],app_fasm mov [app_start.params],fasm_parameters start_ret: mcall 70,app_start ret endp ;----------------------------------------------------------------------------- proc open_debug_board ;/////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- mov [app_start.filename],app_board mov [app_start.params],0 jmp start_ret endp ;----------------------------------------------------------------------------- proc open_sysfuncs_txt ;////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- mov [app_start.filename],app_docpak mov [app_start.params],sysfuncs_param call start_ret cmp eax,0xfffffff0 jb @f mov [app_start.filename],app_tinypad mov [app_start.params],sysfuncs_filename call start_ret @@: ret endp set_opt: .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 .line_numbers: mov al,OPTS_LINENUMS jmp .main .optimal_fill: mov al,OPTS_OPTIMSAVE jmp .main .auto_indents: mov al,OPTS_AUTOINDENT jmp .main .auto_braces: mov al,OPTS_AUTOBRACES jmp .main .secure_sel: mov al,OPTS_SECURESEL .main: xor [options],al ret ;----------------------------------------------------------------------------- include 'data/tp-defines.inc' 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-tabctl.asm' include 'tp-editor.asm' include 'tp-recode.asm' include 'external/dll.inc' ;----------------------------------------------------------------------------- section @DATA ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;----------------------------------------------------------------------------- include 'data/tp-idata.inc' ;----------------------------------------------------------------------------- section @IMPORT ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;----------------------------------------------------------------------------- ;align 16 ;@IMPORT: library \ libini,'libini.obj',\ libio,'libio.obj',\ libgfx,'libgfx.obj' import libini, \ ini.get_str,'ini.get_str',\ ini.set_str,'ini.set_str',\ ini.get_int,'ini.get_int',\ ini.set_int,'ini.set_int' import libio, \ file.find_first,'file.find_first',\ file.find_next ,'file.find_next',\ file.find_close,'file.find_close',\ file.size ,'file.size',\ file.open ,'file.open',\ file.read ,'file.read',\ file.write ,'file.write',\ file.seek ,'file.seek',\ file.tell ,'file.tell',\ file.eof? ,'file.eof?',\ file.truncate ,'file.truncate',\ file.close ,'file.close' import libgfx, \ gfx.open ,'gfx.open',\ gfx.close ,'gfx.close',\ gfx.pen.color ,'gfx.pen.color',\ gfx.brush.color ,'gfx.brush.color',\ gfx.pixel ,'gfx.pixel',\ gfx.move.to ,'gfx.move.to',\ gfx.line.to ,'gfx.line.to',\ gfx.line ,'gfx.line',\ gfx.polyline ,'gfx.polyline',\ gfx.polyline.to ,'gfx.polyline.to',\ gfx.fillrect ,'gfx.fillrect',\ gfx.fillrect.ex ,'gfx.fillrect.ex',\ gfx.framerect ,'gfx.framerect',\ gfx.framerect.ex,'gfx.framerect.ex',\ gfx.rectangle ,'gfx.rectangle',\ gfx.rectangle.ex,'gfx.rectangle.ex' TINYPAD_END: ; end of file ;----------------------------------------------------------------------------- section @UDATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;----------------------------------------------------------------------------- include 'data/tp-udata.inc' ;----------------------------------------------------------------------------- section @PARAMS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;----------------------------------------------------------------------------- fasm_parameters: p_info process_information p_info2 process_information sc system_colors rb 1024*4 MAIN_STACK: rb 1024*4 POPUP_STACK: STATIC_MEM_END: diff10 'Main memory size',0,$