From e896fe1315f60a3e868aca13a0117ec32671a9ad Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Mon, 14 Apr 2014 20:34:59 +0000 Subject: [PATCH] File Speed v0.1 - test of the file system speed git-svn-id: svn://kolibrios.org@4835 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/fs/fspeed/build_en.bat | 6 + programs/fs/fspeed/build_ru.bat | 6 + programs/fs/fspeed/fspeed.asm | 245 +++++++++++++++++++++++++++++ programs/fs/fspeed/idata.inc | 271 ++++++++++++++++++++++++++++++++ programs/fs/fspeed/udata.inc | 43 +++++ 5 files changed, 571 insertions(+) create mode 100644 programs/fs/fspeed/build_en.bat create mode 100644 programs/fs/fspeed/build_ru.bat create mode 100644 programs/fs/fspeed/fspeed.asm create mode 100644 programs/fs/fspeed/idata.inc create mode 100644 programs/fs/fspeed/udata.inc diff --git a/programs/fs/fspeed/build_en.bat b/programs/fs/fspeed/build_en.bat new file mode 100644 index 0000000000..19363b5536 --- /dev/null +++ b/programs/fs/fspeed/build_en.bat @@ -0,0 +1,6 @@ +@erase lang.inc +@echo lang fix en >lang.inc +@fasm fspeed.asm fspeed +@kpack fspeed +@erase lang.inc +@pause \ No newline at end of file diff --git a/programs/fs/fspeed/build_ru.bat b/programs/fs/fspeed/build_ru.bat new file mode 100644 index 0000000000..aefe71fdc5 --- /dev/null +++ b/programs/fs/fspeed/build_ru.bat @@ -0,0 +1,6 @@ +@erase lang.inc +@echo lang fix ru >lang.inc +@fasm fspeed.asm fspeed +@kpack fspeed +@erase lang.inc +@pause \ No newline at end of file diff --git a/programs/fs/fspeed/fspeed.asm b/programs/fs/fspeed/fspeed.asm new file mode 100644 index 0000000000..79ed0ec5c1 --- /dev/null +++ b/programs/fs/fspeed/fspeed.asm @@ -0,0 +1,245 @@ +;***************************************************************************** +; File Speed - for Kolibri OS +; Copyright (c) 2014, Marat Zakiyanov aka Mario79, aka Mario +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; * Neither the name of the nor the +; names of its contributors may be used to endorse or promote products +; derived from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY +; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;***************************************************************************** +;----------------------------------------------------------------------------- + use32 + org 0x0 + db 'MENUET01' + dd 0x01 + dd START + dd IM_END + dd I_END + dd STACK_TOP + dd 0x0 + dd cur_dir_path +;----------------------------------------------------------------------------- +include 'lang.inc' +include '../../macros.inc' +define __DEBUG__ 1 +define __DEBUG_LEVEL__ 1 +include '../../debug-fdo.inc' +include '../../develop/libraries/box_lib/load_lib.mac' + @use_library +;----------------------------------------------------------------------------- +START: + DEBUGF 1,'FSPEED: start of programm\n' +;----------------------------------------------------------------------------- + mcall 68,11 + test eax,eax + jz exit +;----------------------------------------------------------------------------- +load_libraries l_libs_start,end_l_libs +;if return code =-1 then exit, else nornary work + inc eax + test eax,eax + jz exit +;----------------------------------------------------------------------------- +;OpenDialog initialisation + push dword OpenDialog_data + call [OpenDialog_Init] +;----------------------------------------------------------------------------- +red: + call draw_window +;----------------------------------------------------------------------------- +still: + mcall 10 + cmp eax,1 + je red + + cmp eax,2 + je key + + cmp eax,3 + je button + + jmp still +;----------------------------------------------------------------------------- +key: + mcall 2 + jmp still +;----------------------------------------------------------------------------- +button: + mcall 17 + + cmp ah,2 + je select_file + + cmp ah,3 + je testing + + cmp ah,1 + jne still +;-------------------------------------- +exit: + mcall -1 +;----------------------------------------------------------------------------- +select_file: +; invoke OpenDialog + mov [OpenDialog_data.type],dword 0 + push dword OpenDialog_data + call [OpenDialog_Start] + cmp [OpenDialog_data.status],1 + jne still +; prepare for PathShow + push dword PathShow_data + call [PathShow_prepare] + + call draw_PathShow + jmp still +;----------------------------------------------------------------------------- +draw_PathShow: + mcall 13,<5,400-20>,<5,15>,0xffffff +; draw for PathShow + push dword PathShow_data + call [PathShow_draw] + ret +;----------------------------------------------------------------------------- +draw_window: + mcall 48,3,app_colours,4*10 ; get current colors + + mcall 12,1 + xor esi,esi + xor ebp,ebp + mov edx,[w_work] ; color of work area RRGGBB,8->color + or edx,0x34000000 + mcall 0,<100,400>,<100,270>,,,title + call draw_PathShow + mcall 8,<5,80>,<25,15>,2,[w_work_button] + mcall 4,<5+10,25+4>,[w_work_button_text],s_text,s_text.size + mcall 8,<400-65,50>,<25,15>,3,[w_work_button] + mcall 4,<400-65+10,25+4>,[w_work_button_text],r_text,r_text.size + + mov ebx,5 shl 16+47 + mov ebp,result_table + mov ecx,18 +;-------------------------------------- +@@: + push ecx + mov ecx,[w_work_text] + or ecx,0x80000000 + mcall 4,,,[ebp] + push ebx + mov edx,ebx + add edx,50 shl 16 + mov ebx,0x800a0000 + mcall 47,,[ebp+4],,[w_work_text] + pop ebx + add ebx,6+5 + add ebp,12 + pop ecx + dec ecx + jnz @b + + mcall 12,2 + ret +;-----------------------------------------------------------------------------;----------------------------------------------------------------------------- +testing: + mcall 70,fileinfo + test eax,eax + jz @f + + DEBUGF 1,'FSPEED: file not found %s\n',fname + jmp still +;-------------------------------------- +@@: + DEBUGF 1,'FSPEED: target file %s\n',fname + mov ebp,result_table + mov ecx,18 +;-------------------------------------- +@@: + push ecx + call read_chunk + pop ecx + add ebp,12 + pusha + call draw_window + popa + dec ecx + jnz @b + + jmp still +;----------------------------------------------------------------------------- +read_chunk: + mov eax,[file_info+32] ; file size + cmp [ebp+8],eax ; chunk size + jb @f + + xor eax,eax + mov [ebp+4],eax ; small file size for current chunk size + ret +;-------------------------------------- +@@: + mcall 68,12,[ebp+8] ; chunk size + mov [fileread.return],eax + xor eax,eax + mov [fileread.offset],eax ; zero current offset + mcall 26,9 ; get start time + add eax,1600 ; 16 sec for iterations + mov esi,eax + mov ecx,1 + mov eax,[ebp+8] ; chunk size + mov [fileread.size],eax +;-------------------------------------- +.loop: + mcall 70,fileread + + mcall 26,9 ; check current time + cmp esi,eax + jbe .end +; correct offset + mov edx,[ebp+8] ; chunk size + add [fileread.offset],edx ; current offset +; check offset and file size + mov edx,[file_info+32] ; file size + sub edx,[ebp+8] ; chunk size + cmp [fileread.offset],edx + jbe @f + + xor edx,edx + mov [fileread.offset],edx ; zero current offset +;-------------------------------------- +@@: + inc ecx + jmp .loop +;-------------------------------------- +.end: + mov eax,[ebp+8] + imul eax,ecx + shr eax,10+4 + mov [ebp+4],eax ; speed KB/s + DEBUGF 1,'FSPEED: chunk size: %s iterations: %d speed: %d KB/s\n',[ebp],ecx,eax + mcall 68,13,[fileread.return] + ret +;----------------------------------------------------------------------------- +include 'idata.inc' +;----------------------------------------------------------------------------- +IM_END: +;----------------------------------------------------------------------------- +include 'udata.inc' +;----------------------------------------------------------------------------- +I_END: +;----------------------------------------------------------------------------- diff --git a/programs/fs/fspeed/idata.inc b/programs/fs/fspeed/idata.inc new file mode 100644 index 0000000000..7a17b083cb --- /dev/null +++ b/programs/fs/fspeed/idata.inc @@ -0,0 +1,271 @@ +;----------------------------------------------------------------------------- +lsz s_text,\ + ru,'Выбор файла',\ + en,'Select file' +;----------------------------------------------------------------------------- +lsz r_text,\ + ru,'Пуск',\ + en,'Start' +;----------------------------------------------------------------------------- +title db 'File Speed v0.1',0 +;----------------------------------------------------------------------------- +include_debug_strings +;----------------------------------------------------------------------------- +l_libs_start: + +library01 l_libs system_dir_Boxlib+9, cur_dir_path, library_path, system_dir_Boxlib, \ +err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i + +library02 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \ +err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i + +end_l_libs: +;----------------------------------------------------------------------------- +system_dir_Boxlib db '/sys/lib/box_lib.obj',0 +system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 + +head_f_i: +head_f_l db 'System error',0 + +err_message_found_lib1 db 'box_lib.obj - Not found!',0 +err_message_found_lib2 db 'proc_lib.obj - Not found!',0 + +err_message_import1 db 'box_lib.obj - Wrong import!',0 +err_message_import2 db 'proc_lib.obj - Wrong import!',0 + +;----------------------------------------------------------------------------- +align 4 +ProcLib_import: +OpenDialog_Init dd aOpenDialog_Init +OpenDialog_Start dd aOpenDialog_Start +;OpenDialog_Version dd aOpenDialog_Version + +;ColorDialog_Init dd aColorDialog_Init +;ColorDialog_Start dd aColorDialog_Start +;ColorDialog_Version dd aColorDialog_Version + + dd 0 + dd 0 + +aOpenDialog_Init db 'OpenDialog_init',0 +aOpenDialog_Start db 'OpenDialog_start',0 +;aOpenDialog_Version db 'Version_OpenDialog',0 + +;aColorDialog_Init db 'ColorDialog_init',0 +;aColorDialog_Start db 'ColorDialog_start',0 +;aColorDialog_Version db 'Version_ColorDialog',0 +;----------------------------------------------------------------------------- +align 4 +Box_lib_import: +;init_lib dd a_init +;version_lib dd a_version + + +;edit_box_draw dd aEdit_box_draw +;edit_box_key dd aEdit_box_key +;edit_box_mouse dd aEdit_box_mouse +;version_ed dd aVersion_ed + +;check_box_draw dd aCheck_box_draw +;check_box_mouse dd aCheck_box_mouse +;version_ch dd aVersion_ch + +;option_box_draw dd aOption_box_draw +;option_box_mouse dd aOption_box_mouse +;version_op dd aVersion_op + +;scrollbar_ver_draw dd aScrollbar_ver_draw +;scrollbar_ver_mouse dd aScrollbar_ver_mouse +;scrollbar_hor_draw dd aScrollbar_hor_draw +;scrollbar_hor_mouse dd aScrollbar_hor_mouse +;version_scrollbar dd aVersion_scrollbar + +;dinamic_button_draw dd aDbutton_draw +;dinamic_button_mouse dd aDbutton_mouse +;version_dbutton dd aVersion_dbutton + +;menu_bar_draw dd aMenu_bar_draw +;menu_bar_mouse dd aMenu_bar_mouse +;menu_bar_activate dd aMenu_bar_activate +;version_menu_bar dd aVersion_menu_bar + +;FileBrowser_draw dd aFileBrowser_draw +;FileBrowser_mouse dd aFileBrowser_mouse +;FileBrowser_key dd aFileBrowser_key +;Version_FileBrowser dd aVersion_FileBrowser + +PathShow_prepare dd sz_PathShow_prepare +PathShow_draw dd sz_PathShow_draw +;Version_path_show dd szVersion_path_show + +;Frame_draw dd sz_Frame_draw +;Version_frame dd szVersion_frame + + dd 0 + dd 0 + +;a_init db 'lib_init',0 +;a_version db 'version',0 + +;aEdit_box_draw db 'edit_box',0 +;aEdit_box_key db 'edit_box_key',0 +;aEdit_box_mouse db 'edit_box_mouse',0 +;aVersion_ed db 'version_ed',0 + +;aCheck_box_draw db 'check_box_draw',0 +;aCheck_box_mouse db 'check_box_mouse',0 +;aVersion_ch db 'version_ch',0 + +;aOption_box_draw db 'option_box_draw',0 +;aOption_box_mouse db 'option_box_mouse',0 +;aVersion_op db 'version_op',0 + +;aScrollbar_ver_draw db 'scrollbar_v_draw',0 +;aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 +;aScrollbar_hor_draw db 'scrollbar_h_draw',0 +;aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 +;aVersion_scrollbar db 'version_scrollbar',0 + +;aDbutton_draw db 'dbutton_draw',0 +;aDbutton_mouse db 'dbutton_mouse',0 +;aVersion_dbutton db 'version_dbutton',0 + +;aMenu_bar_draw db 'menu_bar_draw',0 +;aMenu_bar_mouse db 'menu_bar_mouse',0 +;aMenu_bar_activate db 'menu_bar_activate',0 +;aVersion_menu_bar db 'version_menu_bar',0 + +;aFileBrowser_draw db 'FileBrowser_draw',0 +;aFileBrowser_mouse db 'FileBrowser_mouse',0 +;aFileBrowser_key db 'FileBrowser_key',0 +;aVersion_FileBrowser db 'version_FileBrowser',0 + +sz_PathShow_prepare db 'PathShow_prepare',0 +sz_PathShow_draw db 'PathShow_draw',0 +;szVersion_path_show db 'version_PathShow',0 + +;sz_Frame_draw db 'frame_draw',0 +;szVersion_frame db 'version_frame',0 +;----------------------------------------------------------------------------- +PathShow_data: +.type dd 0 ;+0 +.start_y dw 5+4 ;+4 +.start_x dw 5+5 ;+6 +.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 +.area_size_x dw 400-30 ;+10 +.font_number dd 0 ;+12 ; 0 - monospace, 1 - variable +.background_flag dd 0 ;+16 +.font_color dd 0x0 ;+20 +.background_color dd 0x0 ;+24 +.text_pointer dd fname ;+28 +.work_area_pointer dd text_work_area ;+32 +.temp_text_length dd 0 ;+36 +;----------------------------------------------------------------------------- +OpenDialog_data: +.type dd 0 +.procinfo dd process_info ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_pach dd temp_dir_pach ;+16 +.dir_default_pach dd communication_area_default_pach ;+20 +.start_path dd open_dialog_path ;+24 +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_pach dd fname ;+36 +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 10 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 10 ;+54 ; Window Y position + +communication_area_name: + db 'FFFFFFFF_open_dialog2',0 + +open_dialog_path: +if __nightbuild eq yes + db '/sys/MANAGERS/opendial',0 +else + db '/sys/File Managers/opendial',0 +end if + +communication_area_default_pach: + db '/sys',0 + +Filter: +dd Filter.end - Filter.1 +.1: +;db 'BIN',0 +;db 'DAT',0 +.end: +db 0 + +start_temp_file_name: + db 'default.dtp',0 + +default_dtp: + db '/sys/default.dtp',0 +;----------------------------------------------------------------------------- +sector equ 512 +;-------------------------------------- +result_table: + dd a512b, 0, sector*1 + dd a1K, 1, sector*2 + dd a2K, 2, sector*4 + dd a4K, 3, sector*8 + dd a8K, 4, sector*16 + dd a16K, 5, sector*32 + dd a32K, 6, sector*64 + dd a64K, 7, sector*128 + dd a128K, 8, sector*256 + dd a256K, 9, sector*512 + dd a512K, 10, sector*1024 + dd a1M, 11, sector*2*1024 + dd a2M, 12, sector*4*1024 + dd a4M, 13, sector*8*1024 + dd a8M, 14, sector*16*1024 + dd a16M, 15, sector*32*1024 + dd a32M, 16, sector*64*1024 + dd a64M, -1, sector*128*1024 +;----------------------------------------------------------------------------- +a512b db ' 512',0 +a1K db ' 1K',0 +a2K db ' 2K',0 +a4K db ' 4K',0 +a8K db ' 8K',0 +a16K db ' 16K',0 +a32K db ' 32K',0 +a64K db ' 64K',0 +a128K db '128K',0 +a256K db '256K',0 +a512K db '512K',0 +a1M db ' 1M',0 +a2M db ' 2M',0 +a4M db ' 4M',0 +a8M db ' 8M',0 +a16M db ' 16M',0 +a32M db ' 32M',0 +a64M db ' 64M',0 +;----------------------------------------------------------------------------- +align 4 +fileinfo: +.subfunction dd 5 +.offset dd 0 +.offset_1 dd 0 +.size dd 0 +.return dd file_info + db 0 +.name: dd fname +;----------------------------------------------------------------------------- +align 4 +fileread: +.subfunction dd 0 +.offset dd 0 +.offset_1 dd 0 +.size dd 0 +.return dd process_info + db 0 +.name: dd fname +;----------------------------------------------------------------------------- diff --git a/programs/fs/fspeed/udata.inc b/programs/fs/fspeed/udata.inc new file mode 100644 index 0000000000..684f0ead58 --- /dev/null +++ b/programs/fs/fspeed/udata.inc @@ -0,0 +1,43 @@ +;----------------------------------------------------------------------------- +align 4 +cur_dir_path: + rb 4096 +;----------------------------------------------------------------------------- +library_path: + rb 4096 +;----------------------------------------------------------------------------- +temp_dir_pach: + rb 4096 +;----------------------------------------------------------------------------- +process_info: + rb 1024 +;----------------------------------------------------------------------------- +fname: + rb 4096 +;----------------------------------------------------------------------------- +filename_area: + rb 256 +;----------------------------------------------------------------------------- +text_work_area: + rb 1024 +;----------------------------------------------------------------------------- +file_info: + rb 40 +;----------------------------------------------------------------------------- +align 4 +app_colours: +w_frame dd ? +w_grab dd ? +w_grab_button dd ? +w_grab_button_text dd ? +w_grab_text dd ? +w_work dd ? +w_work_button dd ? +w_work_button_text dd ? +w_work_text dd ? +w_work_graph dd ? +;----------------------------------------------------------------------------- +align 4 + rb 256 +STACK_TOP: +;-----------------------------------------------------------------------------