From 2cda4a9682e5bcfef16571d6d72cb105502b6186 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 23 Apr 2026 11:50:10 +0000 Subject: [PATCH] libraries/box_lib: Post-SVN tidy (#433) - Move source code from `trunk` into root directory. - Update build files and ASM include paths. Add SPDX license header where appropriate. - Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden. (Work towards [#75](https://git.kolibrios.org/KolibriOS/kolibrios/issues/75), point 3) Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/433 Reviewed-by: Burer Reviewed-by: Ivan B <1+dunkaist@noreply.localhost> Reviewed-by: Mikhail Frolov Co-authored-by: Andrew Co-committed-by: Andrew --- contrib/C_Layer/ASM/loadboxlib.asm | 2 +- data/Tupfile.lua | 2 +- programs/build_all.bat | 2 +- programs/develop/h2d2b/h2d2b.asm | 2 +- programs/develop/heed/heed.asm | 2 +- programs/develop/info3ds/info3ds.asm | 3 +- programs/develop/info3ds/info3ds_u.asm | 3 +- programs/develop/kol_f_edit/box_l.ced | Bin 33388 -> 33388 bytes programs/develop/kol_f_edit/buf2d.ced | Bin 25042 -> 25042 bytes programs/develop/kol_f_edit/kol_f_edit.asm | 2 +- .../libraries/box_lib/{trunk => }/Tupfile.lua | 0 .../box_lib/asm/{trunk => }/Tupfile.lua | 0 .../box_lib/asm/{trunk => }/build.bat | 0 .../box_lib/asm/{trunk => }/build.sh | 0 .../box_lib/asm/{trunk => }/ctrldemo.asm | 844 +-- .../box_lib/asm/{trunk => }/data.inc | 802 +- .../box_lib/asm/{trunk => }/editbox_ex.asm | 334 +- .../box_lib/asm/{trunk => }/opendial.mac | 0 .../asm/{trunk => }/reload_16x16_8b.png | Bin .../box_lib/asm/{trunk => }/tooltip_demo.asm | 318 +- .../box_lib/asm/{trunk => }/w_about.inc | 0 .../libraries/box_lib/{trunk => }/box_lib.asm | 12 +- .../libraries/box_lib/{trunk => }/box_lib.mac | 0 .../libraries/box_lib/{trunk => }/build.sh | 0 .../box_lib/{trunk => }/checkbox.asm | 0 .../box_lib/{trunk => }/d_button.asm | 0 .../box_lib/{trunk => }/doc/box_lib.htm | 0 .../doc/checkbox/info_checkbox.htm | 0 .../{trunk => }/doc/editbox/info_editbox.htm | 0 .../{trunk => }/doc/editbox/window_fasm.png | Bin .../box_lib/{trunk => }/doc/frame/SCR_1.PNG | Bin .../box_lib/{trunk => }/doc/frame/SCR_2.PNG | Bin .../box_lib/{trunk => }/doc/frame/SCR_3.PNG | Bin .../box_lib/{trunk => }/doc/frame/SCR_4.PNG | Bin .../box_lib/{trunk => }/doc/frame/SCR_5.PNG | Bin .../{trunk => }/doc/frame/info_frame.htm | 0 .../{trunk => }/doc/pathshow/pathshow.htm | 0 .../{trunk => }/doc/scrollbar/scrollbar.htm | 0 .../box_lib/{trunk => }/doc/style.css | 0 .../box_lib/{trunk => }/doc/t_edit/t_edit.htm | 802 +- .../{trunk => }/doc/tooltip/tooltip.htm | 174 +- .../{trunk => }/doc/tree_list/info_size.png | Bin .../doc/tree_list/info_treelist.htm | 0 .../doc/tree_list/window_tree_list.png | Bin .../libraries/box_lib/{trunk => }/editbox.asm | 0 .../box_lib/{trunk => }/filebrowser.asm | 0 .../libraries/box_lib/{trunk => }/frame.asm | 0 .../libraries/box_lib/{trunk => }/keys.inc | 0 .../libraries/box_lib/{trunk => }/menubar.asm | 0 .../box_lib/{trunk => }/optionbox.asm | 0 .../box_lib/{trunk => }/pathshow.asm | 0 .../box_lib/{trunk => }/progressbar.asm | 0 .../libraries/box_lib/{trunk => }/readme.txt | 0 .../libraries/box_lib/{trunk => }/run.bat | 0 .../box_lib/{trunk => }/scrollbar.asm | 0 .../libraries/box_lib/{trunk => }/t_edit.asm | 0 .../box_lib/{trunk => }/tl_nod_16.bmp | Bin .../box_lib/{trunk => }/tl_nod_16_w.bmp | Bin .../box_lib/{trunk => }/tl_sys_16.bmp | Bin .../box_lib/{trunk => }/tl_sys_16_w.bmp | Bin .../libraries/box_lib/{trunk => }/tooltip.asm | 0 .../box_lib/{trunk => }/tree_list.asm | 0 .../crypt_des/example/crypt_files.asm | 954 +-- .../libraries/exif/examples/viev_exif.asm | 1454 ++-- .../libraries/fontslib/trunk/font_ex.asm | 418 +- .../libraries/http/examples/deflate.asm | 932 ++- .../develop/libraries/http/examples/get.asm | 866 ++- .../libraries/nnp/examples/nnp_points.asm | 1500 ++-- programs/develop/str_double/str_double.asm | 2 +- programs/fs/opendial/opendial.asm | 6543 +++++++++-------- programs/fs/unz/unz.asm | 10 +- programs/games/nu_pogodi/nu_pogod.asm | 2872 ++++---- programs/games/snake/snake.asm | 2 +- programs/media/log_el/log_el.asm | 2 +- programs/media/scrshoot/scrshoot.asm | 8 +- programs/media/zsea/zSea.asm | 1002 +-- programs/network/downloader/downloader.asm | 908 +-- programs/network/ftpc/gui.inc | 27 +- programs/network/ircc/ircc.asm | 1284 ++-- programs/network/netstat/netstat.asm | 2058 +++--- programs/network/tftpc/tftpc.asm | 1338 ++-- programs/network/vncc/vncc.asm | 1234 ++-- programs/other/calcplus/calcplus.asm | 1468 ++-- programs/other/cnc_control/cnc_control.asm | 2 +- programs/other/cnc_editor/cnc_editor.asm | 2 +- programs/other/ha/HACONFIG.ASM | 3614 ++++----- programs/other/kpack/kpack.asm | 2 +- .../other/outdated/dictionary/dictionary.ASM | 834 +-- programs/other/planet_v/planet_v.asm | 1819 ++--- programs/other/rtfread/rtfread.asm | 5 +- programs/other/t_edit/t_edit.asm | 2 +- programs/other/t_edit_synt/te_syntax.asm | 2 +- programs/system/MyKey/MyKey.asm | 2 +- programs/system/RunOD/RunOD.asm | 710 +- programs/system/colrdial/color_dialog.asm | 1417 ++-- programs/system/cpu/cpu.asm | 2 +- programs/system/format/format.asm | 7 +- programs/system/hdd_info/hdd_info.asm | 4 +- programs/system/icon_new/icon.asm | 8 +- programs/system/keybi/keybi.asm | 8 +- programs/system/open/open.asm | 8 +- programs/system/rdsave/rdsave.asm | 2 +- programs/system/run/run.asm | 2 +- programs/system/terminal/terminal.asm | 994 +-- programs/testing/fspeed/fspeed.asm | 711 +- programs/testing/mgb/mgb.asm | 2 +- 106 files changed, 19579 insertions(+), 18766 deletions(-) rename programs/develop/libraries/box_lib/{trunk => }/Tupfile.lua (100%) rename programs/develop/libraries/box_lib/asm/{trunk => }/Tupfile.lua (100%) rename programs/develop/libraries/box_lib/asm/{trunk => }/build.bat (100%) rename programs/develop/libraries/box_lib/asm/{trunk => }/build.sh (100%) rename programs/develop/libraries/box_lib/asm/{trunk => }/ctrldemo.asm (94%) rename programs/develop/libraries/box_lib/asm/{trunk => }/data.inc (94%) rename programs/develop/libraries/box_lib/asm/{trunk => }/editbox_ex.asm (93%) rename programs/develop/libraries/box_lib/asm/{trunk => }/opendial.mac (100%) rename programs/develop/libraries/box_lib/asm/{trunk => }/reload_16x16_8b.png (100%) rename programs/develop/libraries/box_lib/asm/{trunk => }/tooltip_demo.asm (91%) rename programs/develop/libraries/box_lib/asm/{trunk => }/w_about.inc (100%) rename programs/develop/libraries/box_lib/{trunk => }/box_lib.asm (98%) rename programs/develop/libraries/box_lib/{trunk => }/box_lib.mac (100%) rename programs/develop/libraries/box_lib/{trunk => }/build.sh (100%) rename programs/develop/libraries/box_lib/{trunk => }/checkbox.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/d_button.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/box_lib.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/checkbox/info_checkbox.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/editbox/info_editbox.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/editbox/window_fasm.png (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/frame/SCR_1.PNG (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/frame/SCR_2.PNG (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/frame/SCR_3.PNG (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/frame/SCR_4.PNG (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/frame/SCR_5.PNG (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/frame/info_frame.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/pathshow/pathshow.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/scrollbar/scrollbar.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/style.css (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/t_edit/t_edit.htm (97%) rename programs/develop/libraries/box_lib/{trunk => }/doc/tooltip/tooltip.htm (94%) rename programs/develop/libraries/box_lib/{trunk => }/doc/tree_list/info_size.png (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/tree_list/info_treelist.htm (100%) rename programs/develop/libraries/box_lib/{trunk => }/doc/tree_list/window_tree_list.png (100%) rename programs/develop/libraries/box_lib/{trunk => }/editbox.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/filebrowser.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/frame.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/keys.inc (100%) rename programs/develop/libraries/box_lib/{trunk => }/menubar.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/optionbox.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/pathshow.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/progressbar.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/readme.txt (100%) rename programs/develop/libraries/box_lib/{trunk => }/run.bat (100%) rename programs/develop/libraries/box_lib/{trunk => }/scrollbar.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/t_edit.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/tl_nod_16.bmp (100%) rename programs/develop/libraries/box_lib/{trunk => }/tl_nod_16_w.bmp (100%) rename programs/develop/libraries/box_lib/{trunk => }/tl_sys_16.bmp (100%) rename programs/develop/libraries/box_lib/{trunk => }/tl_sys_16_w.bmp (100%) rename programs/develop/libraries/box_lib/{trunk => }/tooltip.asm (100%) rename programs/develop/libraries/box_lib/{trunk => }/tree_list.asm (100%) diff --git a/contrib/C_Layer/ASM/loadboxlib.asm b/contrib/C_Layer/ASM/loadboxlib.asm index 41f9009e8..35b1e43a0 100644 --- a/contrib/C_Layer/ASM/loadboxlib.asm +++ b/contrib/C_Layer/ASM/loadboxlib.asm @@ -10,7 +10,7 @@ include '../../../programs/proc32.inc' include '../../../programs/macros.inc' purge section,mov,add,sub -include '../../../programs/develop/libraries/box_lib/trunk/box_lib.mac' +include '../../../programs/develop/libraries/box_lib/box_lib.mac' include '../../../programs/system/run/txtbut.inc' include '../../../programs/dll.inc' diff --git a/data/Tupfile.lua b/data/Tupfile.lua index 12c625cc6..21e0ff7fe 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -508,7 +508,7 @@ tup.append_table(img_files, { {"GAMES/TETRIS", VAR_PROGS .. "/games/tetris/tetris"}, {"GAMES/C4", VAR_PROGS .. "/games/c4/c4"}, {"LIB/ARCHIVER.OBJ", VAR_PROGS .. "/fs/kfar/kfar_arc/kfar_arc.obj"}, - {"LIB/BOX_LIB.OBJ", VAR_PROGS .. "/develop/libraries/box_lib/trunk/box_lib.obj"}, + {"LIB/BOX_LIB.OBJ", VAR_PROGS .. "/develop/libraries/box_lib/box_lib.obj"}, {"LIB/BUF2D.OBJ", VAR_PROGS .. "/develop/libraries/buf2d/trunk/buf2d.obj"}, {"LIB/CONSOLE.OBJ", VAR_PROGS .. "/develop/libraries/console_coff/console.obj"}, {"LIB/CNV_PNG.OBJ", VAR_PROGS .. "/media/zsea/plugins/png/cnv_png.obj"}, diff --git a/programs/build_all.bat b/programs/build_all.bat index bcbf4a7d8..9c70397c6 100644 --- a/programs/build_all.bat +++ b/programs/build_all.bat @@ -101,7 +101,7 @@ fasm develop\cObj\cObj.asm %BIN%\develop\cObj echo * echo Building systems libraries echo * -fasm develop\libraries\box_lib\trunk\box_lib.asm %BIN%\lib\box_lib.obj +fasm develop\libraries\box_lib\box_lib.asm %BIN%\lib\box_lib.obj fasm develop\libraries\console\console.asm %BIN%\lib\console.obj fasm develop\libraries\libs-dev\libgfx\libgfx.asm %BIN%\lib\libgfx.obj fasm develop\libraries\libs-dev\libimg\libimg.asm %BIN%\lib\libimg.obj diff --git a/programs/develop/h2d2b/h2d2b.asm b/programs/develop/h2d2b/h2d2b.asm index 44ba594d6..c42f0f365 100644 --- a/programs/develop/h2d2b/h2d2b.asm +++ b/programs/develop/h2d2b/h2d2b.asm @@ -27,7 +27,7 @@ include '../../proc32.inc' include '../../macros.inc' ; макросы облегчают жизнь ассемблерщиков! include '../../KOSfuncs.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. @use_library diff --git a/programs/develop/heed/heed.asm b/programs/develop/heed/heed.asm index b54c209cb..0ddab7e93 100644 --- a/programs/develop/heed/heed.asm +++ b/programs/develop/heed/heed.asm @@ -69,7 +69,7 @@ include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. include '../../KOSfuncs.inc' include '../../config.inc' ; for nightbuild include '../../macros.inc' -include '../libraries/box_lib/trunk/box_lib.mac' +include '../libraries/box_lib/box_lib.mac' include '../../load_lib.mac' @use_library diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index 0aff2b1c4..b207ea5fc 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -1,4 +1,5 @@ ; SPDX-License-Identifier: GPL-2.0-only + ; Info3ds - is a program for viewing the structure of *.3ds files ; Copyright (C) 2011-2025 KolibriOS team @@ -17,7 +18,7 @@ include '../../KOSfuncs.inc' include '../../develop/libraries/libs-dev/libimg/libimg.inc' include '../../load_img.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc' include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. diff --git a/programs/develop/info3ds/info3ds_u.asm b/programs/develop/info3ds/info3ds_u.asm index 735fccdc1..9135606e9 100644 --- a/programs/develop/info3ds/info3ds_u.asm +++ b/programs/develop/info3ds/info3ds_u.asm @@ -1,4 +1,5 @@ ; SPDX-License-Identifier: GPL-2.0-only + ; Info3ds_u - is a program for viewing the structure of *.3ds files ; Copyright (C) 2015-2025 KolibriOS team @@ -17,7 +18,7 @@ include '../../KOSfuncs.inc' include '../../develop/libraries/libs-dev/libimg/libimg.inc' include '../../load_img.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc' include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. diff --git a/programs/develop/kol_f_edit/box_l.ced b/programs/develop/kol_f_edit/box_l.ced index 21559b95fbc2843ed68fc530e19f7d04c86172ac..bdc9b6df4e0a090e1e6ee7b30f5405c21ff60c25 100644 GIT binary patch delta 21 dcmaFU!t|zvX~U}A$s2MPOjHou9Gxd90swUv310vJ delta 28 kcmaFU!t|zvX~U{q){>&qyzI#ZuI5i6xo&c??NKiA9;I#rjG474bQlN%}eYi76n4UT$KtI>Y2S zUPhA(xY)Q;iW18iQW+{r7^)^aItEW};1SVDNzF+uA<>}83pm+XkWHCf#uc}@fGa5+ E055zthX4Qo delta 156 zcmca~nDNqK#tqpVnhXqS@tL{l44FwqiA9;I#rjG474bQlN%|#4rFq#fo?dR^WCKZq z$pu_&>?uWw 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. -;****************************************************************************** -; import_boxlib procedure written by -;--------------------------------------------------------------------- - - use32 - org 0 - - db 'MENUET01' - dd 1 - dd START - dd IM_END - dd I_END - dd stacktop - dd 0 - dd path - -include '../../../../../macros.inc' -include '../../../../../KOSfuncs.inc' -include '../../../../../load_lib.mac' -@use_library - -;--------------------------------------------------------------------- -;--- Start of program ---------------------------------------------- -;--------------------------------------------------------------------- -START: - mcall SF_SYS_MISC,SSF_HEAP_INIT - mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 - mcall SF_SET_EVENTS_MASK,0x27 -;--------------------------------------------------------------------- - -load_libraries l_libs_start,end_l_libs - - test eax,eax - jnz button.exit - -; unpack deflate - mov eax,[unpack_DeflateUnpack2] - mov [deflate_unpack],eax - -; OpenDialog initialisation - push dword OpenDialog_data - call [OpenDialog_Init] - - mov edi,filename_area - mov esi,start_temp_file_name - xor eax,eax - cld -@@: - lodsb - stosb - test eax,eax - jnz @b - - -; mov ebx,icons_file_name -; mov esi,path -; mov edi,file_name - - copy_path icons_file_name,path,library_path,0 - - mcall SF_FILE,fileinfo - - mov [fileinfo+0],dword 0 - - mov ecx,[file_info+32] - mov [fileinfo+12],ecx - mov [img_size],ecx - - - mcall SF_SYS_MISC,SSF_MEM_ALLOC - - - mov [fileinfo+16],eax - mov [image_file],eax - - - mcall SF_FILE,fileinfo - - xor eax,eax - mov [return_code],eax -; mov eax,image_file - push image_file - call [cnv_png_import.Start] - - mcall SF_SYS_MISC,SSF_MEM_FREE,[image_file] - - cmp [return_code],dword 0 - jne button.exit - - mov ebx,[raw_pointer] - mov eax,[ebx+4] -; set of button size - mov [dinamic_button_data_1.size_x],ax - mov [dinamic_button_data_1.size_y],ax - mov [dinamic_button_data_2.size_x],ax - mov [dinamic_button_data_2.size_y],ax - mov eax,[ebx+12] -; set of RAW resolution to pixel - mov [dinamic_button_data_1.resolution_raw],eax - mov [dinamic_button_data_2.resolution_raw],eax - mov eax,[ebx+20] - add eax,ebx -; set RAW palette, use else resolution 8bit or less - mov [dinamic_button_data_1.palette_raw],eax - mov [dinamic_button_data_2.palette_raw],eax - mov eax,[ebx+28] - add eax,ebx -; set RAW area for passive button - mov [dinamic_button_data_1.passive_raw],eax - mov [dinamic_button_data_2.passive_raw],eax - mov ecx,[ebx+4] - imul ecx,[ebx+4] - imul ecx,[ebx+12] - shr ecx,3 - add eax,ecx -; set RAW area for active button - mov [dinamic_button_data_1.active_raw],eax - mov [dinamic_button_data_2.active_raw],eax - add eax,ecx -; RAW area for click button - mov [dinamic_button_data_1.click_raw],eax - mov [dinamic_button_data_2.click_raw],eax -;--------------------------------------------------------------------- -red: - call draw_window -still: - mcall SF_WAIT_EVENT - - cmp eax,EV_REDRAW - je red - cmp eax,EV_KEY - je key - cmp eax,EV_BUTTON - je button - cmp eax,EV_MOUSE - je mouse - jmp still -;--------------------------------------------------------------------- - key: - mcall SF_GET_KEY - jmp still -;--------------------------------------------------------------------- - button: - mcall SF_GET_BUTTON - cmp ah,1 - jne still - .exit: - mcall SF_TERMINATE_PROCESS -;--------------------------------------------------------------------- -mouse: -;----------------------------------------------- - cmp [scroll_bar_data_horizontal.delta2],0 - jne .horizontal -.vertical: - mov eax,[scroll_bar_data_vertical.max_area] - cmp eax,[scroll_bar_data_vertical.cur_area] - jbe .horizontal -; mouse event for Vertical ScrollBar - push dword scroll_bar_data_vertical - call [scrollbar_v_mouse] - mov eax,scroll_bar_data_vertical.redraw - xor ebx,ebx - cmp [eax],ebx - je @f - mov [eax],ebx - jmp .draw_cube -@@: - cmp [scroll_bar_data_vertical.delta2],0 - jne still -.horizontal: - mov eax,[scroll_bar_data_horizontal.max_area] - cmp eax,[scroll_bar_data_horizontal.cur_area] - jbe .other -; mouse event for Horizontal ScrollBar - push dword scroll_bar_data_horizontal - call [scrollbar_h_mouse] - mov eax,scroll_bar_data_horizontal.redraw - xor ebx,ebx - cmp [eax],ebx - je .other - mov [eax],ebx -.draw_cube: - call draw_cube - jmp still -.other: - cmp [scroll_bar_data_vertical.delta2],0 - jne still - cmp [scroll_bar_data_horizontal.delta2],0 - jne still -;----------------------------------------------- -.menu_bar_1: - call .set_mouse_flag -@@: -; mouse event for Menu 1 - push dword menu_data_1 - call [menu_bar_mouse] - cmp [menu_data_1.click],dword 1 - jne .menu_bar_2 - cmp [menu_data_1.cursor_out],dword 0 - jne analyse_out_menu_1 - jmp .menu_bar_1 -;-------------------------------------------- -.menu_bar_2: -; mouse event for Menu 2 - push dword menu_data_2 - call [menu_bar_mouse] - cmp [menu_data_2.click],dword 1 - jne .mouse_dinamic_button - cmp [menu_data_2.cursor_out],dword 0 - jne analyse_out_menu_2 - jmp .menu_bar_1 -;-------------------------------------------- -.mouse_dinamic_button: -; mouse event for Dinamic Button 1 - push dword dinamic_button_data_1 - call [dbutton_mouse] - mov eax,dinamic_button_data_1.click - cmp [eax],dword 1 - jne @f - mov [eax],dword 0 - jmp about -@@: -; mouse event for Dinamic Button 2 - push dword dinamic_button_data_2 - call [dbutton_mouse] - mov eax,dinamic_button_data_2.click - cmp [eax],dword 1 - jne still ;@f - mov [eax],dword 0 - jmp button.exit -;--------------------------------------------------------------------- -.set_mouse_flag: - xor eax,eax - inc eax - mov [menu_data_1.get_mouse_flag],eax - mov [menu_data_2.get_mouse_flag],eax - ret -;--------------------------------------------------------------------- -analyse_out_menu_1: -; analyse result of Menu 1 - mov eax,[menu_data_1.cursor_out] - cmp eax,dword 1 - je OpenDialog_start_0 - cmp eax,dword 2 - je OpenDialog_start_1 - cmp eax,dword 3 - je OpenDialog_start_2 - cmp eax,dword 4 - je button.exit - jmp still -;--------------------------------------------------------------------- -analyse_out_menu_2: -; analyse result of Menu 2 - cmp [menu_data_2.cursor_out],dword 2 - je about - jmp still -;--------------------------------------------------------------------- - about: - mcall SF_CREATE_THREAD,1,thread3,thread - jmp still -;--------------------------------------------------------------------- -OpenDialog_start_0: - mov [OpenDialog_data.type],0 - jmp OpenDialog_start -OpenDialog_start_1: - mov [OpenDialog_data.type],1 - jmp OpenDialog_start -OpenDialog_start_2: - mov [OpenDialog_data.type],2 -OpenDialog_start: -; mov ebx,open_dialog_name -; mov esi,path -; mov edi,library_path -; call copy_file_path - -; copy_path open_dialog_name,path,library_path,0 - - push dword OpenDialog_data - call [OpenDialog_Start] - - cmp [OpenDialog_data.status],2 ; OpenDialog does not start - je still ; some kind of alternative, instead OpenDialog - cmp [OpenDialog_data.status],1 - jne still ; OpenDialog user say cancel -; copy path -; prepare path - PathShow - push dword PathShow_data_1 - call [PathShow_prepare] - - call draw_window - jmp still ; OpenDialog user selected the target file -; [OpenDialog_data.openfile_pach] pointer of area the target file -;--------------------------------------------------------------------- -;--------------------------------------------------------------------- -draw_window: - mcall SF_REDRAW,SSF_BEGIN_DRAW - mcall SF_CREATE_WINDOW,<0,400>,<0,400>,0x03AABBCC,0x805080D0,0x005080D0 - mcall SF_SET_CAPTION,1,header_1 -;--------------------------------------------- -; draw for Menu 1 - push dword menu_data_1 - call [menu_bar_draw] -; draw for Menu 2 - push dword menu_data_2 - call [menu_bar_draw] -;--------------------------------------------- -; draw for Dinamic Button 1 - push dword dinamic_button_data_1 - call [dbutton_draw] -; draw for Dinamic Button 2 - push dword dinamic_button_data_2 - call [dbutton_draw] -;--------------------------------------------- - mcall SF_DRAW_RECT,<170,200>,<25,15>,0xffffb0 -; mov bx,28 -; add ebx,2 shl 16 -; mcall SF_DRAW_TEXT,,0xC0000000,text_work_area,,0xffffb0 -; draw for PathShow - push dword PathShow_data_1 - call [PathShow_draw] -;--------------------------------------------- -; set all_redraw flag for draw all ScrollBar -; In some cases it is necessity to draw only the area -; of moving of a "runner", for acceleration of output - -; in this case the flag needs to be reset to 0 (zero). - xor eax,eax - inc eax - mov [scroll_bar_data_vertical.all_redraw],eax - mov [scroll_bar_data_horizontal.all_redraw],eax - -; draw for Vertical ScrollBar - push dword scroll_bar_data_vertical - call [scrollbar_v_draw] -; draw for Horizontal ScrollBar - push dword scroll_bar_data_horizontal - call [scrollbar_h_draw] -; reset all_redraw flag - xor eax,eax - mov [scroll_bar_data_vertical.all_redraw],eax - mov [scroll_bar_data_horizontal.all_redraw],eax -;--------------------------------------------- - call draw_cube - mcall SF_REDRAW,SSF_END_DRAW - ret -;--------------------------------------------------------------------- -draw_cube: - mcall SF_DRAW_RECT,<30,301>,<50,301>,0xafafaf - mov ecx,[scroll_bar_data_vertical.position] - add ecx,50 - shl ecx,16 - mov cx,30 - mov ebx,[scroll_bar_data_horizontal.position] - add ebx,30 - shl ebx,16 - mov bx,30 - mcall SF_DRAW_RECT,,,0x0 - ret -;--------------------------------------------------------------------- -include 'data.inc' -include 'w_about.inc' -;--------------------------------------------------------------------- -IM_END: - rb 1024 -thread: -;--------------------------------------------------------------------- - rb 1024 -stacktop: -;--------------------------------------------------------------------- -path: - rb 4096 -;--------------------------------------------------------------------- -openfile_pach: - rb 4096 -;--------------------------------------------------------------------- -file_name: -library_path: - rb 4096 -;--------------------------------------------------------------------- -plugin_pach: - rb 4096 -;--------------------------------------------------------------------- -text_work_area: - rb 4096 -;--------------------------------------------------------------------- -filename_area: - rb 256 -;--------------------------------------------------------------------- -file_info: - rb 40 -;--------------------------------------------------------------------- -procinfo: - rb 1024 -;--------------------------------------------------------------------- -I_END: - +; SPDX-License-Identifier: NOASSERTION +; + +;***************************************************************************** +; Example for Box_lib: scrollbar, menubar, dinamic_button +; Copyright (c) 2009, 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. +;****************************************************************************** +; import_boxlib procedure written by +;--------------------------------------------------------------------- + + use32 + org 0 + + db 'MENUET01' + dd 1 + dd START + dd IM_END + dd I_END + dd stacktop + dd 0 + dd path + +include '../../../../macros.inc' +include '../../../../KOSfuncs.inc' +include '../../../../load_lib.mac' +@use_library + +;--------------------------------------------------------------------- +;--- Start of program ---------------------------------------------- +;--------------------------------------------------------------------- +START: + mcall SF_SYS_MISC,SSF_HEAP_INIT + mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 + mcall SF_SET_EVENTS_MASK,0x27 +;--------------------------------------------------------------------- + +load_libraries l_libs_start,end_l_libs + + test eax,eax + jnz button.exit + +; unpack deflate + mov eax,[unpack_DeflateUnpack2] + mov [deflate_unpack],eax + +; OpenDialog initialisation + push dword OpenDialog_data + call [OpenDialog_Init] + + mov edi,filename_area + mov esi,start_temp_file_name + xor eax,eax + cld +@@: + lodsb + stosb + test eax,eax + jnz @b + + +; mov ebx,icons_file_name +; mov esi,path +; mov edi,file_name + + copy_path icons_file_name,path,library_path,0 + + mcall SF_FILE,fileinfo + + mov [fileinfo+0],dword 0 + + mov ecx,[file_info+32] + mov [fileinfo+12],ecx + mov [img_size],ecx + + + mcall SF_SYS_MISC,SSF_MEM_ALLOC + + + mov [fileinfo+16],eax + mov [image_file],eax + + + mcall SF_FILE,fileinfo + + xor eax,eax + mov [return_code],eax +; mov eax,image_file + push image_file + call [cnv_png_import.Start] + + mcall SF_SYS_MISC,SSF_MEM_FREE,[image_file] + + cmp [return_code],dword 0 + jne button.exit + + mov ebx,[raw_pointer] + mov eax,[ebx+4] +; set of button size + mov [dinamic_button_data_1.size_x],ax + mov [dinamic_button_data_1.size_y],ax + mov [dinamic_button_data_2.size_x],ax + mov [dinamic_button_data_2.size_y],ax + mov eax,[ebx+12] +; set of RAW resolution to pixel + mov [dinamic_button_data_1.resolution_raw],eax + mov [dinamic_button_data_2.resolution_raw],eax + mov eax,[ebx+20] + add eax,ebx +; set RAW palette, use else resolution 8bit or less + mov [dinamic_button_data_1.palette_raw],eax + mov [dinamic_button_data_2.palette_raw],eax + mov eax,[ebx+28] + add eax,ebx +; set RAW area for passive button + mov [dinamic_button_data_1.passive_raw],eax + mov [dinamic_button_data_2.passive_raw],eax + mov ecx,[ebx+4] + imul ecx,[ebx+4] + imul ecx,[ebx+12] + shr ecx,3 + add eax,ecx +; set RAW area for active button + mov [dinamic_button_data_1.active_raw],eax + mov [dinamic_button_data_2.active_raw],eax + add eax,ecx +; RAW area for click button + mov [dinamic_button_data_1.click_raw],eax + mov [dinamic_button_data_2.click_raw],eax +;--------------------------------------------------------------------- +red: + call draw_window +still: + mcall SF_WAIT_EVENT + + cmp eax,EV_REDRAW + je red + cmp eax,EV_KEY + je key + cmp eax,EV_BUTTON + je button + cmp eax,EV_MOUSE + je mouse + jmp still +;--------------------------------------------------------------------- + key: + mcall SF_GET_KEY + jmp still +;--------------------------------------------------------------------- + button: + mcall SF_GET_BUTTON + cmp ah,1 + jne still + .exit: + mcall SF_TERMINATE_PROCESS +;--------------------------------------------------------------------- +mouse: +;----------------------------------------------- + cmp [scroll_bar_data_horizontal.delta2],0 + jne .horizontal +.vertical: + mov eax,[scroll_bar_data_vertical.max_area] + cmp eax,[scroll_bar_data_vertical.cur_area] + jbe .horizontal +; mouse event for Vertical ScrollBar + push dword scroll_bar_data_vertical + call [scrollbar_v_mouse] + mov eax,scroll_bar_data_vertical.redraw + xor ebx,ebx + cmp [eax],ebx + je @f + mov [eax],ebx + jmp .draw_cube +@@: + cmp [scroll_bar_data_vertical.delta2],0 + jne still +.horizontal: + mov eax,[scroll_bar_data_horizontal.max_area] + cmp eax,[scroll_bar_data_horizontal.cur_area] + jbe .other +; mouse event for Horizontal ScrollBar + push dword scroll_bar_data_horizontal + call [scrollbar_h_mouse] + mov eax,scroll_bar_data_horizontal.redraw + xor ebx,ebx + cmp [eax],ebx + je .other + mov [eax],ebx +.draw_cube: + call draw_cube + jmp still +.other: + cmp [scroll_bar_data_vertical.delta2],0 + jne still + cmp [scroll_bar_data_horizontal.delta2],0 + jne still +;----------------------------------------------- +.menu_bar_1: + call .set_mouse_flag +@@: +; mouse event for Menu 1 + push dword menu_data_1 + call [menu_bar_mouse] + cmp [menu_data_1.click],dword 1 + jne .menu_bar_2 + cmp [menu_data_1.cursor_out],dword 0 + jne analyse_out_menu_1 + jmp .menu_bar_1 +;-------------------------------------------- +.menu_bar_2: +; mouse event for Menu 2 + push dword menu_data_2 + call [menu_bar_mouse] + cmp [menu_data_2.click],dword 1 + jne .mouse_dinamic_button + cmp [menu_data_2.cursor_out],dword 0 + jne analyse_out_menu_2 + jmp .menu_bar_1 +;-------------------------------------------- +.mouse_dinamic_button: +; mouse event for Dinamic Button 1 + push dword dinamic_button_data_1 + call [dbutton_mouse] + mov eax,dinamic_button_data_1.click + cmp [eax],dword 1 + jne @f + mov [eax],dword 0 + jmp about +@@: +; mouse event for Dinamic Button 2 + push dword dinamic_button_data_2 + call [dbutton_mouse] + mov eax,dinamic_button_data_2.click + cmp [eax],dword 1 + jne still ;@f + mov [eax],dword 0 + jmp button.exit +;--------------------------------------------------------------------- +.set_mouse_flag: + xor eax,eax + inc eax + mov [menu_data_1.get_mouse_flag],eax + mov [menu_data_2.get_mouse_flag],eax + ret +;--------------------------------------------------------------------- +analyse_out_menu_1: +; analyse result of Menu 1 + mov eax,[menu_data_1.cursor_out] + cmp eax,dword 1 + je OpenDialog_start_0 + cmp eax,dword 2 + je OpenDialog_start_1 + cmp eax,dword 3 + je OpenDialog_start_2 + cmp eax,dword 4 + je button.exit + jmp still +;--------------------------------------------------------------------- +analyse_out_menu_2: +; analyse result of Menu 2 + cmp [menu_data_2.cursor_out],dword 2 + je about + jmp still +;--------------------------------------------------------------------- + about: + mcall SF_CREATE_THREAD,1,thread3,thread + jmp still +;--------------------------------------------------------------------- +OpenDialog_start_0: + mov [OpenDialog_data.type],0 + jmp OpenDialog_start +OpenDialog_start_1: + mov [OpenDialog_data.type],1 + jmp OpenDialog_start +OpenDialog_start_2: + mov [OpenDialog_data.type],2 +OpenDialog_start: +; mov ebx,open_dialog_name +; mov esi,path +; mov edi,library_path +; call copy_file_path + +; copy_path open_dialog_name,path,library_path,0 + + push dword OpenDialog_data + call [OpenDialog_Start] + + cmp [OpenDialog_data.status],2 ; OpenDialog does not start + je still ; some kind of alternative, instead OpenDialog + cmp [OpenDialog_data.status],1 + jne still ; OpenDialog user say cancel +; copy path +; prepare path - PathShow + push dword PathShow_data_1 + call [PathShow_prepare] + + call draw_window + jmp still ; OpenDialog user selected the target file +; [OpenDialog_data.openfile_pach] pointer of area the target file +;--------------------------------------------------------------------- +;--------------------------------------------------------------------- +draw_window: + mcall SF_REDRAW,SSF_BEGIN_DRAW + mcall SF_CREATE_WINDOW,<0,400>,<0,400>,0x03AABBCC,0x805080D0,0x005080D0 + mcall SF_SET_CAPTION,1,header_1 +;--------------------------------------------- +; draw for Menu 1 + push dword menu_data_1 + call [menu_bar_draw] +; draw for Menu 2 + push dword menu_data_2 + call [menu_bar_draw] +;--------------------------------------------- +; draw for Dinamic Button 1 + push dword dinamic_button_data_1 + call [dbutton_draw] +; draw for Dinamic Button 2 + push dword dinamic_button_data_2 + call [dbutton_draw] +;--------------------------------------------- + mcall SF_DRAW_RECT,<170,200>,<25,15>,0xffffb0 +; mov bx,28 +; add ebx,2 shl 16 +; mcall SF_DRAW_TEXT,,0xC0000000,text_work_area,,0xffffb0 +; draw for PathShow + push dword PathShow_data_1 + call [PathShow_draw] +;--------------------------------------------- +; set all_redraw flag for draw all ScrollBar +; In some cases it is necessity to draw only the area +; of moving of a "runner", for acceleration of output - +; in this case the flag needs to be reset to 0 (zero). + xor eax,eax + inc eax + mov [scroll_bar_data_vertical.all_redraw],eax + mov [scroll_bar_data_horizontal.all_redraw],eax + +; draw for Vertical ScrollBar + push dword scroll_bar_data_vertical + call [scrollbar_v_draw] +; draw for Horizontal ScrollBar + push dword scroll_bar_data_horizontal + call [scrollbar_h_draw] +; reset all_redraw flag + xor eax,eax + mov [scroll_bar_data_vertical.all_redraw],eax + mov [scroll_bar_data_horizontal.all_redraw],eax +;--------------------------------------------- + call draw_cube + mcall SF_REDRAW,SSF_END_DRAW + ret +;--------------------------------------------------------------------- +draw_cube: + mcall SF_DRAW_RECT,<30,301>,<50,301>,0xafafaf + mov ecx,[scroll_bar_data_vertical.position] + add ecx,50 + shl ecx,16 + mov cx,30 + mov ebx,[scroll_bar_data_horizontal.position] + add ebx,30 + shl ebx,16 + mov bx,30 + mcall SF_DRAW_RECT,,,0x0 + ret +;--------------------------------------------------------------------- +include 'data.inc' +include 'w_about.inc' +;--------------------------------------------------------------------- +IM_END: + rb 1024 +thread: +;--------------------------------------------------------------------- + rb 1024 +stacktop: +;--------------------------------------------------------------------- +path: + rb 4096 +;--------------------------------------------------------------------- +openfile_pach: + rb 4096 +;--------------------------------------------------------------------- +file_name: +library_path: + rb 4096 +;--------------------------------------------------------------------- +plugin_pach: + rb 4096 +;--------------------------------------------------------------------- +text_work_area: + rb 4096 +;--------------------------------------------------------------------- +filename_area: + rb 256 +;--------------------------------------------------------------------- +file_info: + rb 40 +;--------------------------------------------------------------------- +procinfo: + rb 1024 +;--------------------------------------------------------------------- +I_END: diff --git a/programs/develop/libraries/box_lib/asm/trunk/data.inc b/programs/develop/libraries/box_lib/asm/data.inc similarity index 94% rename from programs/develop/libraries/box_lib/asm/trunk/data.inc rename to programs/develop/libraries/box_lib/asm/data.inc index 4260443ee..ab8e5d0c5 100644 --- a/programs/develop/libraries/box_lib/asm/trunk/data.inc +++ b/programs/develop/libraries/box_lib/asm/data.inc @@ -1,401 +1,401 @@ -;--------------------------------------------------------------------- -;--- data area ------------------------------------------------------- -;--------------------------------------------------------------------- -header_1 db 'Box_lib Control Demo by Mario79',0 - -ok_btn db 'Ok',0 - -labelt3 db 'About program',0 -;--------------------------------------------------------------------- -start_temp_file_name: db 'ctrldemo_test',0 -icons_file_name: db 'reload_16x16_8b.png',0 -system_dir1 db '/sys/lib/' -plugin_BMP_name db 'cnv_bmp.obj',0 - -system_dir db '/sys/lib/' - -;plugins_directory db 'plugins/',0 -plugins_directory db 0 - -system_dir_Boxlib db '/sys/lib/box_lib.obj',0 -system_dir_CnvPNG db '/sys/lib/cnv_png.obj',0 -system_dir_UNPACK db '/sys/lib/archiver.obj',0 -system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 -; Если есть желание разъединить, то нужно использовать следующию конструкцию -;system_path db '/sys/lib/box_lib.obj',0 -;... любая последовательность других команд и определений. -;library_name db 'box_lib.obj',0 -;library_name db 'box_lib.obj',0 -;--------------------------------------------------------------------- -align 4 -l_libs_start: -library01 l_libs system_dir_Boxlib+9, file_name, system_dir_Boxlib,\ - import_box_lib, plugins_directory - -library02 l_libs system_dir_CnvPNG+9, file_name, system_dir_CnvPNG,\ - cnv_png_import, plugins_directory - -library03 l_libs system_dir_UNPACK+9, file_name, system_dir_UNPACK,\ - UNPACK_import, plugins_directory - -library04 l_libs system_dir_ProcLib+9, file_name, system_dir_ProcLib, \ - ProcLib_import, plugins_directory - -end_l_libs: -;--------------------------------------------------------------------- -align 4 -ProcLib_import: -OpenDialog_Init dd aOpenDialog_Init -OpenDialog_Start dd aOpenDialog_Start -;OpenDialog__Version dd aOpenDialog_Version - dd 0,0 -aOpenDialog_Init db 'OpenDialog_init',0 -aOpenDialog_Start db 'OpenDialog_start',0 -;aOpenDialog_Version db 'Version_OpenDialog',0 -;--------------------------------------------------------------------- -align 4 -cnv_png_import: -.Start dd aCP_Start -.Version dd aCP_Version -.Check dd aCP_Check -.Assoc dd aCP_Assoc - dd 0,0 -aCP_Start db 'START',0 -aCP_Version db 'version',0 -aCP_Check db 'Check_Header',0 -aCP_Assoc db 'Associations',0 -;--------------------------------------------------------------------- -align 4 -UNPACK_import: -;unpack_Version dd aUnpack_Version -;unpack_PluginLoad dd aUnpack_PluginLoad -;unpack_OpenFilePlugin dd aUnpack_OpenFilePlugin -;unpack_ClosePlugin dd aUnpack_ClosePlugin -;unpack_ReadFolder dd aUnpack_ReadFolder -;unpack_SetFolder dd aUnpack_SetFolder -;unpack_GetFiles dd aUnpack_GetFiles -;unpack_GetOpenPluginInfo dd aUnpack_GetOpenPluginInfo -;unpack_Getattr dd aUnpack_Getattr -;unpack_Open dd aUnpack_Open -;unpack_Read dd aUnpack_Read -;unpack_Setpos dd aUnpack_Setpos -;unpack_Close dd aUnpack_Close -unpack_DeflateUnpack dd aUnpack_DeflateUnpack -unpack_DeflateUnpack2 dd aUnpack_DeflateUnpack2 - dd 0,0 -;aUnpack_Version db 'version',0 -;aUnpack_PluginLoad db 'plugin_load',0 -;aUnpack_OpenFilePlugin db 'OpenFilePlugin',0 -;aUnpack_ClosePlugin db 'ClosePlugin',0 -;aUnpack_ReadFolder db 'ReadFolder',0 -;aUnpack_SetFolder db 'SetFolder',0 -;aUnpack_GetFiles db 'GetFiles',0 -;aUnpack_GetOpenPluginInfo db 'GetOpenPluginInfo',0 -;aUnpack_Getattr db 'getattr',0 -;aUnpack_Open db 'open',0 -;aUnpack_Read db 'read',0 -;aUnpack_Setpos db 'setpos',0 -;aUnpack_Close db 'close',0 -aUnpack_DeflateUnpack db 'deflate_unpack',0 -aUnpack_DeflateUnpack2 db 'deflate_unpack2',0 - -;--------------------------------------------------------------------- - -fileinfo: - dd 5 - dd 0 - dd 0 - dd 0 - dd file_info -string: - db 0 - dd file_name - -plugin dd 0 -;--------------------------------------------------------------------- -; not change this section!!! -; start section -;--------------------------------------------------------------------- -image_file dd 0 -raw_pointer dd 0 -return_code dd 0 -img_size dd 0 -deflate_unpack dd 0 -;--------------------------------------------------------------------- -; end section -;--------------------------------------------------------------------- - -;--------------------------------------------------------------------- -include '../../import.inc' ;import_box_lib - -;--------------------------------------------------------------------- -align 4 -scroll_bar_data_vertical: -.x: -.size_x dw 15 ;+0 -.start_x dw 370 ;+2 -.y: -.size_y dw 300 ;+4 -.start_y dw 50 ;+6 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 300 ;+16 -.cur_area dd 30 ;+20 -.position dd 140 ;+24 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -.r_size_x dw 0 ;+48 -.r_start_x dw 0 ;+50 -.run_y: -.r_size_y dw 0 ;+52 -.r_start_y dw 0 ;+54 -.m_pos dd 0 ;+56 -.m_pos_2 dd 0 ;+60 -.m_keys dd 0 ;+64 -.run_size dd 0 ;+68 -.position2 dd 0 ;+72 -.work_size dd 0 ;+76 -.all_redraw dd 0 ;+80 -.ar_offset dd 10 ;+84 -;--------------------------------------------------------------------- -align 4 -scroll_bar_data_horizontal: -.x: -.size_x dw 300 ;0 ;+0 -.start_x dw 30 ;0 ;+2 -.y: -.size_y dw 15 ;0 ;+4 -.start_y dw 370 ;0 ;+6 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 300 ;+16 -.cur_area dd 30 ;+20 -.position dd 140 ;+24 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -.r_size_x dw 0 ;+48 -.r_start_x dw 0 ;+50 -.run_y: -.r_size_y dw 0 ;+52 -.r_start_y dw 0 ;+54 -.m_pos dd 0 ;+56 -.m_pos_2 dd 0 ;+60 -.m_keys dd 0 ;+64 -.run_size dd 0 ;+68 -.position2 dd 0 ;+72 -.work_size dd 0 ;+76 -.all_redraw dd 0 ;+80 -.ar_offset dd 10 ;+84 -;--------------------------------------------------------------------- -align 4 -menu_data_1: -.type: dd 0 ;+0 -.x: -.size_x dw 40 ;+4 -.start_x dw 20 ;+6 -.y: -.size_y dw 15 ;+8 -.start_y dw 25 ;+10 -.text_pointer: dd menu_text_area ;0 ;+12 -.pos_pointer: dd menu_text_area.1 ;0 ;+16 -.text_end dd menu_text_area.end ;0 ;+20 -.mouse_pos dd 0 ;+24 -.mouse_keys dd 0 ;+28 -.x1: -.size_x1 dw 80 ;+32 -.start_x1 dw 20 ;+34 -.y1: -.size_y1 dw 100 ;+36 -.start_y1 dw 40 ;+38 -.bckg_col dd 0xeeeeee ;+40 -.frnt_col dd 0xff ;+44 -.menu_col dd 0xffffff ;+48 -.select dd 0 ;+52 -.out_select dd 0 ;+56 -.buf_adress dd 0 ;+60 -.procinfo dd procinfo ;+64 -.click dd 0 ;+68 -.cursor dd 0 ;+72 -.cursor_old dd 0 ;+76 -.interval dd 16 ;+80 -.cursor_max dd 0 ;+84 -.extended_key dd 0 ;+88 -.menu_sel_col dd 0x00cc00 ;+92 -.bckg_text_col dd 0 ; +96 -.frnt_text_col dd 0xffffff ;+100 -.mouse_keys_old dd 0 ;+104 -.font_height dd 8 ;+108 -.cursor_out dd 0 ;+112 -.get_mouse_flag dd 0 ;+116 -;------------------------- -menu_text_area: -db 'File',0 -.1: -db 'Open file',0 -db 'Save file',0 -db 'Select dir',0 -db 'Exit',0 -.end: -db 0 -;--------------------------------------------------------------------- -align 4 -menu_data_2: -.type: dd 0 ;+0 -.x: -.size_x dw 40 ;+4 -.start_x dw 60 ;+6 -.y: -.size_y dw 15 ;+8 -.start_y dw 25 ;+10 -.text_pointer: dd menu_text_area_2 ;0 ;+12 -.pos_pointer: dd menu_text_area_2.1 ;0 ;+16 -.text_end dd menu_text_area_2.end ;0 ;+20 -.mouse_pos dd 0 ;+24 -.mouse_keys dd 0 ;+28 -.x1: -.size_x1 dw 50 ;+32 -.start_x1 dw 60 ;+34 -.y1: -.size_y1 dw 100 ;+36 -.start_y1 dw 40 ;+38 -.bckg_col dd 0xeeeeee ;+40 -.frnt_col dd 0xff ;+44 -.menu_col dd 0xffffff ;+48 -.select dd 0 ;+52 -.out_select dd 0 ;+56 -.buf_adress dd 0 ;+60 -.procinfo dd procinfo ;+64 -.click dd 0 ;+68 -.cursor dd 0 ;+72 -.cursor_old dd 0 ;+76 -.interval dd 16 ;+80 -.cursor_max dd 0 ;+84 -.extended_key dd 0 ;+88 -.menu_sel_col dd 0x00cc00 ;+92 -.bckg_text_col dd 0 ; +96 -.frnt_text_col dd 0xffffff ;+100 -.mouse_keys_old dd 0 ;+104 -.font_height dd 8 ;+108 -.cursor_out dd 0 ;+112 -.get_mouse_flag dd 0 ;+116 -;------------------------ -menu_text_area_2: -db 'Help',0 -.1: -db 'Test1',0 -db 'About',0 -.end: -db 0 -;--------------------------------------------------------------------- -align 4 -dinamic_button_data_1: -.type dd 0 ;+0 -.x: -.size_x dw 20 ;+4 -.start_x dw 110 ;+6 -.y: -.size_y dw 20 ;+8 -.start_y dw 25 ;+10 -.mouse_pos dd 0 ;+12 -.mouse_keys dd 0 ;+16 -.mouse_keys_old dd 0 ;+20 -.active_raw dd 0 ;+24 -.passive_raw dd 0 ;+28 -.click_raw dd 0 ;+32 -.resolution_raw dd 0 ;+36 -.palette_raw dd 0 ;+40 -.offset_raw dd 0 ;+44 -.select dd 0 ;+48 -.click dd 0 ;+52 -;--------------------------------------------------------------------- -align 4 -dinamic_button_data_2: -.type dd 0 ;+0 -.x: -.size_x dw 20 ;+4 -.start_x dw 140 ;+6 -.y: -.size_y dw 20 ;+8 -.start_y dw 25 ;+10 -.mouse_pos dd 0 ;+12 -.mouse_keys dd 0 ;+16 -.mouse_keys_old dd 0 ;+20 -.active_raw dd 0 ;+24 -.passive_raw dd 0 ;+28 -.click_raw dd 0 ;+32 -.resolution_raw dd 0 ;+36 -.palette_raw dd 0 ;+40 -.offset_raw dd 0 ;+44 -.select dd 0 ;+48 -.click dd 0 ;+52 -;--------------------------------------------------------------------- -OpenDialog_data: -.type dd 0 -.procinfo dd procinfo ;+4 -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_pach dd plugin_pach ;+16 -.dir_default_pach dd communication_area_default_pach ;+20 -.start_path dd od_path ;+24 -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_pach dd openfile_pach ;+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_dialog',0 -;open_dialog_name: -; db 'opendial',0 - -od_path: - db '/sys/File Managers/OpenDial',0 - -communication_area_default_pach: - db '/sys',0 - -Filter: -dd Filter.end - Filter.1 -.1: -db 'JPEG',0 -db 'JPG',0 -db 'JPE',0 -db 'PNG',0 -db 'GIF',0 -db 'BMP',0 -db 'KEX',0 -db 'DAT',0 -db 'INI',0 -.end: -db 0 -;--------------------------------------------------------------------- -PathShow_data_1: -.type dd 0 ;+0 -.start_y dw 28 ;+4 -.start_x dw 172 ;+6 -.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 -.area_size_x dw 200 ;+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 openfile_pach ;+28 -.work_area_pointer dd text_work_area ;+32 -.temp_text_length dd 0 ;+36 -;--------------------------------------------------------------------- +;--------------------------------------------------------------------- +;--- data area ------------------------------------------------------- +;--------------------------------------------------------------------- +header_1 db 'Box_lib Control Demo by Mario79',0 + +ok_btn db 'Ok',0 + +labelt3 db 'About program',0 +;--------------------------------------------------------------------- +start_temp_file_name: db 'ctrldemo_test',0 +icons_file_name: db 'reload_16x16_8b.png',0 +system_dir1 db '/sys/lib/' +plugin_BMP_name db 'cnv_bmp.obj',0 + +system_dir db '/sys/lib/' + +;plugins_directory db 'plugins/',0 +plugins_directory db 0 + +system_dir_Boxlib db '/sys/lib/box_lib.obj',0 +system_dir_CnvPNG db '/sys/lib/cnv_png.obj',0 +system_dir_UNPACK db '/sys/lib/archiver.obj',0 +system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 +; Если есть желание разъединить, то нужно использовать следующию конструкцию +;system_path db '/sys/lib/box_lib.obj',0 +;... любая последовательность других команд и определений. +;library_name db 'box_lib.obj',0 +;library_name db 'box_lib.obj',0 +;--------------------------------------------------------------------- +align 4 +l_libs_start: +library01 l_libs system_dir_Boxlib+9, file_name, system_dir_Boxlib,\ + import_box_lib, plugins_directory + +library02 l_libs system_dir_CnvPNG+9, file_name, system_dir_CnvPNG,\ + cnv_png_import, plugins_directory + +library03 l_libs system_dir_UNPACK+9, file_name, system_dir_UNPACK,\ + UNPACK_import, plugins_directory + +library04 l_libs system_dir_ProcLib+9, file_name, system_dir_ProcLib, \ + ProcLib_import, plugins_directory + +end_l_libs: +;--------------------------------------------------------------------- +align 4 +ProcLib_import: +OpenDialog_Init dd aOpenDialog_Init +OpenDialog_Start dd aOpenDialog_Start +;OpenDialog__Version dd aOpenDialog_Version + dd 0,0 +aOpenDialog_Init db 'OpenDialog_init',0 +aOpenDialog_Start db 'OpenDialog_start',0 +;aOpenDialog_Version db 'Version_OpenDialog',0 +;--------------------------------------------------------------------- +align 4 +cnv_png_import: +.Start dd aCP_Start +.Version dd aCP_Version +.Check dd aCP_Check +.Assoc dd aCP_Assoc + dd 0,0 +aCP_Start db 'START',0 +aCP_Version db 'version',0 +aCP_Check db 'Check_Header',0 +aCP_Assoc db 'Associations',0 +;--------------------------------------------------------------------- +align 4 +UNPACK_import: +;unpack_Version dd aUnpack_Version +;unpack_PluginLoad dd aUnpack_PluginLoad +;unpack_OpenFilePlugin dd aUnpack_OpenFilePlugin +;unpack_ClosePlugin dd aUnpack_ClosePlugin +;unpack_ReadFolder dd aUnpack_ReadFolder +;unpack_SetFolder dd aUnpack_SetFolder +;unpack_GetFiles dd aUnpack_GetFiles +;unpack_GetOpenPluginInfo dd aUnpack_GetOpenPluginInfo +;unpack_Getattr dd aUnpack_Getattr +;unpack_Open dd aUnpack_Open +;unpack_Read dd aUnpack_Read +;unpack_Setpos dd aUnpack_Setpos +;unpack_Close dd aUnpack_Close +unpack_DeflateUnpack dd aUnpack_DeflateUnpack +unpack_DeflateUnpack2 dd aUnpack_DeflateUnpack2 + dd 0,0 +;aUnpack_Version db 'version',0 +;aUnpack_PluginLoad db 'plugin_load',0 +;aUnpack_OpenFilePlugin db 'OpenFilePlugin',0 +;aUnpack_ClosePlugin db 'ClosePlugin',0 +;aUnpack_ReadFolder db 'ReadFolder',0 +;aUnpack_SetFolder db 'SetFolder',0 +;aUnpack_GetFiles db 'GetFiles',0 +;aUnpack_GetOpenPluginInfo db 'GetOpenPluginInfo',0 +;aUnpack_Getattr db 'getattr',0 +;aUnpack_Open db 'open',0 +;aUnpack_Read db 'read',0 +;aUnpack_Setpos db 'setpos',0 +;aUnpack_Close db 'close',0 +aUnpack_DeflateUnpack db 'deflate_unpack',0 +aUnpack_DeflateUnpack2 db 'deflate_unpack2',0 + +;--------------------------------------------------------------------- + +fileinfo: + dd 5 + dd 0 + dd 0 + dd 0 + dd file_info +string: + db 0 + dd file_name + +plugin dd 0 +;--------------------------------------------------------------------- +; not change this section!!! +; start section +;--------------------------------------------------------------------- +image_file dd 0 +raw_pointer dd 0 +return_code dd 0 +img_size dd 0 +deflate_unpack dd 0 +;--------------------------------------------------------------------- +; end section +;--------------------------------------------------------------------- + +;--------------------------------------------------------------------- +include '../import.inc' ;import_box_lib + +;--------------------------------------------------------------------- +align 4 +scroll_bar_data_vertical: +.x: +.size_x dw 15 ;+0 +.start_x dw 370 ;+2 +.y: +.size_y dw 300 ;+4 +.start_y dw 50 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 300 ;+16 +.cur_area dd 30 ;+20 +.position dd 140 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 10 ;+84 +;--------------------------------------------------------------------- +align 4 +scroll_bar_data_horizontal: +.x: +.size_x dw 300 ;0 ;+0 +.start_x dw 30 ;0 ;+2 +.y: +.size_y dw 15 ;0 ;+4 +.start_y dw 370 ;0 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 300 ;+16 +.cur_area dd 30 ;+20 +.position dd 140 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 10 ;+84 +;--------------------------------------------------------------------- +align 4 +menu_data_1: +.type: dd 0 ;+0 +.x: +.size_x dw 40 ;+4 +.start_x dw 20 ;+6 +.y: +.size_y dw 15 ;+8 +.start_y dw 25 ;+10 +.text_pointer: dd menu_text_area ;0 ;+12 +.pos_pointer: dd menu_text_area.1 ;0 ;+16 +.text_end dd menu_text_area.end ;0 ;+20 +.mouse_pos dd 0 ;+24 +.mouse_keys dd 0 ;+28 +.x1: +.size_x1 dw 80 ;+32 +.start_x1 dw 20 ;+34 +.y1: +.size_y1 dw 100 ;+36 +.start_y1 dw 40 ;+38 +.bckg_col dd 0xeeeeee ;+40 +.frnt_col dd 0xff ;+44 +.menu_col dd 0xffffff ;+48 +.select dd 0 ;+52 +.out_select dd 0 ;+56 +.buf_adress dd 0 ;+60 +.procinfo dd procinfo ;+64 +.click dd 0 ;+68 +.cursor dd 0 ;+72 +.cursor_old dd 0 ;+76 +.interval dd 16 ;+80 +.cursor_max dd 0 ;+84 +.extended_key dd 0 ;+88 +.menu_sel_col dd 0x00cc00 ;+92 +.bckg_text_col dd 0 ; +96 +.frnt_text_col dd 0xffffff ;+100 +.mouse_keys_old dd 0 ;+104 +.font_height dd 8 ;+108 +.cursor_out dd 0 ;+112 +.get_mouse_flag dd 0 ;+116 +;------------------------- +menu_text_area: +db 'File',0 +.1: +db 'Open file',0 +db 'Save file',0 +db 'Select dir',0 +db 'Exit',0 +.end: +db 0 +;--------------------------------------------------------------------- +align 4 +menu_data_2: +.type: dd 0 ;+0 +.x: +.size_x dw 40 ;+4 +.start_x dw 60 ;+6 +.y: +.size_y dw 15 ;+8 +.start_y dw 25 ;+10 +.text_pointer: dd menu_text_area_2 ;0 ;+12 +.pos_pointer: dd menu_text_area_2.1 ;0 ;+16 +.text_end dd menu_text_area_2.end ;0 ;+20 +.mouse_pos dd 0 ;+24 +.mouse_keys dd 0 ;+28 +.x1: +.size_x1 dw 50 ;+32 +.start_x1 dw 60 ;+34 +.y1: +.size_y1 dw 100 ;+36 +.start_y1 dw 40 ;+38 +.bckg_col dd 0xeeeeee ;+40 +.frnt_col dd 0xff ;+44 +.menu_col dd 0xffffff ;+48 +.select dd 0 ;+52 +.out_select dd 0 ;+56 +.buf_adress dd 0 ;+60 +.procinfo dd procinfo ;+64 +.click dd 0 ;+68 +.cursor dd 0 ;+72 +.cursor_old dd 0 ;+76 +.interval dd 16 ;+80 +.cursor_max dd 0 ;+84 +.extended_key dd 0 ;+88 +.menu_sel_col dd 0x00cc00 ;+92 +.bckg_text_col dd 0 ; +96 +.frnt_text_col dd 0xffffff ;+100 +.mouse_keys_old dd 0 ;+104 +.font_height dd 8 ;+108 +.cursor_out dd 0 ;+112 +.get_mouse_flag dd 0 ;+116 +;------------------------ +menu_text_area_2: +db 'Help',0 +.1: +db 'Test1',0 +db 'About',0 +.end: +db 0 +;--------------------------------------------------------------------- +align 4 +dinamic_button_data_1: +.type dd 0 ;+0 +.x: +.size_x dw 20 ;+4 +.start_x dw 110 ;+6 +.y: +.size_y dw 20 ;+8 +.start_y dw 25 ;+10 +.mouse_pos dd 0 ;+12 +.mouse_keys dd 0 ;+16 +.mouse_keys_old dd 0 ;+20 +.active_raw dd 0 ;+24 +.passive_raw dd 0 ;+28 +.click_raw dd 0 ;+32 +.resolution_raw dd 0 ;+36 +.palette_raw dd 0 ;+40 +.offset_raw dd 0 ;+44 +.select dd 0 ;+48 +.click dd 0 ;+52 +;--------------------------------------------------------------------- +align 4 +dinamic_button_data_2: +.type dd 0 ;+0 +.x: +.size_x dw 20 ;+4 +.start_x dw 140 ;+6 +.y: +.size_y dw 20 ;+8 +.start_y dw 25 ;+10 +.mouse_pos dd 0 ;+12 +.mouse_keys dd 0 ;+16 +.mouse_keys_old dd 0 ;+20 +.active_raw dd 0 ;+24 +.passive_raw dd 0 ;+28 +.click_raw dd 0 ;+32 +.resolution_raw dd 0 ;+36 +.palette_raw dd 0 ;+40 +.offset_raw dd 0 ;+44 +.select dd 0 ;+48 +.click dd 0 ;+52 +;--------------------------------------------------------------------- +OpenDialog_data: +.type dd 0 +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_pach dd plugin_pach ;+16 +.dir_default_pach dd communication_area_default_pach ;+20 +.start_path dd od_path ;+24 +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_pach dd openfile_pach ;+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_dialog',0 +;open_dialog_name: +; db 'opendial',0 + +od_path: + db '/sys/File Managers/OpenDial',0 + +communication_area_default_pach: + db '/sys',0 + +Filter: +dd Filter.end - Filter.1 +.1: +db 'JPEG',0 +db 'JPG',0 +db 'JPE',0 +db 'PNG',0 +db 'GIF',0 +db 'BMP',0 +db 'KEX',0 +db 'DAT',0 +db 'INI',0 +.end: +db 0 +;--------------------------------------------------------------------- +PathShow_data_1: +.type dd 0 ;+0 +.start_y dw 28 ;+4 +.start_x dw 172 ;+6 +.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 +.area_size_x dw 200 ;+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 openfile_pach ;+28 +.work_area_pointer dd text_work_area ;+32 +.temp_text_length dd 0 ;+36 +;--------------------------------------------------------------------- diff --git a/programs/develop/libraries/box_lib/asm/trunk/editbox_ex.asm b/programs/develop/libraries/box_lib/asm/editbox_ex.asm similarity index 93% rename from programs/develop/libraries/box_lib/asm/trunk/editbox_ex.asm rename to programs/develop/libraries/box_lib/asm/editbox_ex.asm index d7f9de6e1..cf94e3e02 100644 --- a/programs/develop/libraries/box_lib/asm/trunk/editbox_ex.asm +++ b/programs/develop/libraries/box_lib/asm/editbox_ex.asm @@ -1,164 +1,170 @@ -;заголовок приложения -use32 ; транслятор, использующий 32 разрядных команды - org 0 ; базовый адрес кода, всегда 0 - db 'MENUET01' ; идентификатор исполняемого файла (8 байт) - dd 1 ; версия формата заголовка исполняемого файла - dd start ; адрес, на который система передаёт управление - ; после загрузки приложения в память - dd i_end ; размер приложения - dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта - dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше - dd 0 ; указатель на строку с параметрами. - dd cur_dir_path ; указатель на адрес, куда помещается строка, содержащая путь до программы в момент запуска. - -include '../../../../../macros.inc' -include '../../trunk/box_lib.mac' -include '../../../../../KOSfuncs.inc' -include '../../../../../load_lib.mac' - @use_library ;use load lib macros -start: -;universal load library/librarys -sys_load_library library_name, library_path, system_path, import_box_lib -;if return code =-1 then exit, else nornary work - cmp eax,-1 - jz exit - mcall SF_SET_EVENTS_MASK,0x80000027 ;установить маску для ожидаемых событий - - push dword check1 ;подсчёт дины текста для Checkbox'ов - call [init_checkbox] - - push dword check2 - call [init_checkbox] - -red_win: - call draw_window ;первоначально необходимо нарисовать окно -align 4 -still: ;основной обработчик - mcall SF_WAIT_EVENT - dec eax - jz red_win - dec eax - jz key - dec eax - jz button - - push dword edit1 - call [edit_box_mouse] - - push dword edit2 - call [edit_box_mouse] - - push dword check1 - call [check_box_mouse] - - push dword check2 - call [check_box_mouse] - - push dword Option_boxs - call [option_box_mouse] - - push dword Option_boxs2 - call [option_box_mouse] - - jmp still ;если ничего из перечисленного то снова в цикл -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -button: - mcall SF_GET_BUTTON - test ah,ah ;если в ah 0, то перейти на обработчик событий still - jz still -exit: - mcall SF_TERMINATE_PROCESS -key: - mcall SF_GET_KEY - - push dword edit1 - call [edit_box_key] - - push dword edit2 - call [edit_box_key] - - jmp still - -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -align 4 -draw_window: ;рисование окна приложения - mcall SF_REDRAW, SSF_BEGIN_DRAW - mcall SF_CREATE_WINDOW,(50*65536+390),(30*65536+200),0x33AABBCC,0x805080DD,hed - - push dword edit1 - call [edit_box_draw] - - push dword edit2 - call [edit_box_draw] - - push dword check1 - call [check_box_draw] - - push dword check2 - call [check_box_draw] - - push dword Option_boxs - call [option_box_draw] - - push dword Option_boxs2 - call [option_box_draw] - - mcall SF_REDRAW, SSF_END_DRAW - ret -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -;DATA данные -;Всегда соблюдать последовательность в имени. -system_path db '/sys/lib/' -library_name db 'box_lib.obj',0 -; Если есть желание разъединить, то нужно использовать следующию конструкцию -;system_path db '/sys/lib/box_lib.obj',0 -;... любая последовательность других команд и определений. -;library_name db 'box_lib.obj',0 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -include '../../import.inc' ;creating a function import table - - -check1 check_box2 (10 shl 16 + 12),(45 shl 16 + 12),5,0x80AABBCC,0,0,check_text1,ch_flag_en -check2 check_box2 (10 shl 16 + 12),(60 shl 16 + 12),6,0x80AABBCC,0,0,check_text2 - -edit1 edit_box 350,3,5,0xffffff,0x6f9480,0,0xAABBCC,0,308,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1 -edit2 edit_box 350,3,25,0xffffff,0x6a9480,0,0,0,99,ed_buffer,mouse_dd,ed_figure_only - -op1 option_box option_group1,10,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1 -op2 option_box option_group1,10,105,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2 -op3 option_box option_group1,10,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 -op11 option_box option_group2,120,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1 -op12 option_box option_group2,120,105,6,12,0xffffff,0,0,op_text.2,op_text.e2-op_text.2 -op13 option_box option_group2,120,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 - -option_group1 dd op1 ;указатели, они отображаются по умолчанию, когда выводится -option_group2 dd op12 ;приложение -Option_boxs dd op1,op2,op3,0 -Option_boxs2 dd op11,op12,op13,0 - -hed db 'BOXs load from lib date 27.04.2009',0 -hed_end: - -rb 256 -check_text1 db 'First checkbox',0 -check_text2 db 'Second checkbox',0 - -op_text: ; Сопровождающий текст для Optionbox'а -.1 db 'Option_Box #1' -.e1: -.2 db 'Option_Box #2' -.e2: -.3 db 'Option_Box #3' -.e3: -ed_buffer rb 100 -;----------------------- -;sc system_colors - -mouse_dd rd 1 -p_info process_information -cur_dir_path rb 4096 -library_path rb 4096 -i_end: -rb 1024 -mem: \ No newline at end of file +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +;заголовок приложения +use32 ; транслятор, использующий 32 разрядных команды + org 0 ; базовый адрес кода, всегда 0 + db 'MENUET01' ; идентификатор исполняемого файла (8 байт) + dd 1 ; версия формата заголовка исполняемого файла + dd start ; адрес, на который система передаёт управление + ; после загрузки приложения в память + dd i_end ; размер приложения + dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта + dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше + dd 0 ; указатель на строку с параметрами. + dd cur_dir_path ; указатель на адрес, куда помещается строка, содержащая путь до программы в момент запуска. + +include '../../../../macros.inc' +include '../box_lib.mac' +include '../../../../KOSfuncs.inc' +include '../../../../load_lib.mac' + @use_library ;use load lib macros +start: +;universal load library/librarys +sys_load_library library_name, library_path, system_path, import_box_lib +;if return code =-1 then exit, else nornary work + cmp eax,-1 + jz exit + mcall SF_SET_EVENTS_MASK,0x80000027 ;установить маску для ожидаемых событий + + push dword check1 ;подсчёт дины текста для Checkbox'ов + call [init_checkbox] + + push dword check2 + call [init_checkbox] + +red_win: + call draw_window ;первоначально необходимо нарисовать окно +align 4 +still: ;основной обработчик + mcall SF_WAIT_EVENT + dec eax + jz red_win + dec eax + jz key + dec eax + jz button + + push dword edit1 + call [edit_box_mouse] + + push dword edit2 + call [edit_box_mouse] + + push dword check1 + call [check_box_mouse] + + push dword check2 + call [check_box_mouse] + + push dword Option_boxs + call [option_box_mouse] + + push dword Option_boxs2 + call [option_box_mouse] + + jmp still ;если ничего из перечисленного то снова в цикл +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +button: + mcall SF_GET_BUTTON + test ah,ah ;если в ah 0, то перейти на обработчик событий still + jz still +exit: + mcall SF_TERMINATE_PROCESS +key: + mcall SF_GET_KEY + + push dword edit1 + call [edit_box_key] + + push dword edit2 + call [edit_box_key] + + jmp still + +;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +align 4 +draw_window: ;рисование окна приложения + mcall SF_REDRAW, SSF_BEGIN_DRAW + mcall SF_CREATE_WINDOW,(50*65536+390),(30*65536+200),0x33AABBCC,0x805080DD,hed + + push dword edit1 + call [edit_box_draw] + + push dword edit2 + call [edit_box_draw] + + push dword check1 + call [check_box_draw] + + push dword check2 + call [check_box_draw] + + push dword Option_boxs + call [option_box_draw] + + push dword Option_boxs2 + call [option_box_draw] + + mcall SF_REDRAW, SSF_END_DRAW + ret +;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +;DATA данные +;Всегда соблюдать последовательность в имени. +system_path db '/sys/lib/' +library_name db 'box_lib.obj',0 +; Если есть желание разъединить, то нужно использовать следующию конструкцию +;system_path db '/sys/lib/box_lib.obj',0 +;... любая последовательность других команд и определений. +;library_name db 'box_lib.obj',0 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +include '../import.inc' ;creating a function import table + + +check1 check_box2 (10 shl 16 + 12),(45 shl 16 + 12),5,0x80AABBCC,0,0,check_text1,ch_flag_en +check2 check_box2 (10 shl 16 + 12),(60 shl 16 + 12),6,0x80AABBCC,0,0,check_text2 + +edit1 edit_box 350,3,5,0xffffff,0x6f9480,0,0xAABBCC,0,308,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1 +edit2 edit_box 350,3,25,0xffffff,0x6a9480,0,0,0,99,ed_buffer,mouse_dd,ed_figure_only + +op1 option_box option_group1,10,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1 +op2 option_box option_group1,10,105,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2 +op3 option_box option_group1,10,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 +op11 option_box option_group2,120,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1 +op12 option_box option_group2,120,105,6,12,0xffffff,0,0,op_text.2,op_text.e2-op_text.2 +op13 option_box option_group2,120,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 + +option_group1 dd op1 ;указатели, они отображаются по умолчанию, когда выводится +option_group2 dd op12 ;приложение +Option_boxs dd op1,op2,op3,0 +Option_boxs2 dd op11,op12,op13,0 + +hed db 'BOXs load from lib date 27.04.2009',0 +hed_end: + +rb 256 +check_text1 db 'First checkbox',0 +check_text2 db 'Second checkbox',0 + +op_text: ; Сопровождающий текст для Optionbox'а +.1 db 'Option_Box #1' +.e1: +.2 db 'Option_Box #2' +.e2: +.3 db 'Option_Box #3' +.e3: +ed_buffer rb 100 +;----------------------- +;sc system_colors + +mouse_dd rd 1 +p_info process_information +cur_dir_path rb 4096 +library_path rb 4096 +i_end: +rb 1024 +mem: diff --git a/programs/develop/libraries/box_lib/asm/trunk/opendial.mac b/programs/develop/libraries/box_lib/asm/opendial.mac similarity index 100% rename from programs/develop/libraries/box_lib/asm/trunk/opendial.mac rename to programs/develop/libraries/box_lib/asm/opendial.mac diff --git a/programs/develop/libraries/box_lib/asm/trunk/reload_16x16_8b.png b/programs/develop/libraries/box_lib/asm/reload_16x16_8b.png similarity index 100% rename from programs/develop/libraries/box_lib/asm/trunk/reload_16x16_8b.png rename to programs/develop/libraries/box_lib/asm/reload_16x16_8b.png diff --git a/programs/develop/libraries/box_lib/asm/trunk/tooltip_demo.asm b/programs/develop/libraries/box_lib/asm/tooltip_demo.asm similarity index 91% rename from programs/develop/libraries/box_lib/asm/trunk/tooltip_demo.asm rename to programs/develop/libraries/box_lib/asm/tooltip_demo.asm index 6c1350f4f..472960480 100644 --- a/programs/develop/libraries/box_lib/asm/trunk/tooltip_demo.asm +++ b/programs/develop/libraries/box_lib/asm/tooltip_demo.asm @@ -1,156 +1,162 @@ -; Простой пример программы для KolibriOS -; озвучивает код нажатой клавиши -; - переделан как пример использования tooltip - -use32 ; включить 32-битный режим ассемблера -org 0 ; адресация с нуля - -db 'MENUET01' ; 8-байтный идентификатор MenuetOS -dd 1 ; версия заголовка (всегда 1) -dd START ; адрес первой команды -dd CODE_END ; размер программы -dd DATA_END ; количество памяти -dd STACK_END ; адрес вершины стэка -dd 0 ; адрес буфера для параметров -dd cur_dir_path ; указатель на адрес, куда помещается строка, содержащая путь до программы в момент запуска. - -include '../../../../../proc32.inc' -include '../../../../../macros.inc' -include '../../../../../KOSfuncs.inc' -include '../../../../../dll.inc' ; malloc fn -include '../../trunk/box_lib.mac' -include '../../../../../load_lib.mac' - - -;--------------------------------------------------------------------- -;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- -;--------------------------------------------------------------------- -; этот макрос обязателен для всех компонетов, использующих heap -; кроме того, обязательно имортировать lib_init - при импорте определяются -; функции хипа для библиотеки -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load - -START: -;--------------------------------------------------------------------- -;--- ИНИЦИАЛИЗАЦИЯ ---------------------------------------- -;--------------------------------------------------------------------- -mcall SF_SYS_MISC, SSF_HEAP_INIT - -mcall SF_SET_EVENTS_MASK, $C0000027 ; маска событий - мышь только в активном окне - -sys_load_library lib_name, lib_path, sys_path, import_box_lib -test eax,eax -jz @f - mcall SF_TERMINATE_PROCESS -@@: - - -invoke tooltip_init, redbox_tt ; only begin of list - -red: ; перерисовать окно - -call draw_window ; вызываем процедуру отрисовки окна - -;--------------------------------------------------------------------- -;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- -;--------------------------------------------------------------------- - -still: -mcall SF_WAIT_EVENT_TIMEOUT, 5 ; ждать события не более чем 0.05с -test eax, eax ; нет событий - проверить рисование тултипов по таймеру -je yield -cmp eax,EV_REDRAW -je red ; если да - на метку red -cmp eax,EV_KEY -je key ; если да - на key -cmp eax,EV_BUTTON -je button ; если да - на button -cmp eax,EV_MOUSE -je mouse ; если да - на mouse - -jmp still ; если другое событие - в начало цикла - - -;--------------------------------------------------------------------- -yield: -invoke tooltip_test_show, redbox_tt -jmp still ; вернуться к началу цикла - -mouse: -invoke tooltip_mouse, redbox_tt -jmp still ; вернуться к началу цикла - -key: ; нажата клавиша на клавиатуре -mcall SF_GET_KEY ; считать код символа (в ah) - -jmp still ; вернуться к началу цикла - -;--------------------------------------------------------------------- - -button: -mcall SF_GET_BUTTON ; получить идентификатор нажатой кнопки - -cmp ah, 1 ; если НЕ нажата кнопка с номером 1, -jne still ; вернуться - -pexit: -invoke tooltip_delete, redbox_tt ; освобождаем память -mcall SF_TERMINATE_PROCESS - - -;--------------------------------------------------------------------- -;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ---------------------------------- -;--------------------------------------------------------------------- - -draw_window: - -mcall SF_REDRAW, SSF_BEGIN_DRAW - -mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors - -mov edx, [sc.work] ; цвет фона -or edx, 0x33000000 ; и тип окна 3 -mcall SF_CREATE_WINDOW, <200,300>, <200,150>, , ,title - -; вывод квадратиков -mcall SF_DRAW_RECT, <60,50>, <50,50>, $FF0000 -mcall SF_DRAW_RECT, <140,50>, <50,50>, $FF - - -mcall SF_REDRAW, SSF_END_DRAW - -ret ; выходим из процедуры - - -CODE_END: ; метка конца программы; --------------------------------------------; - -; ---------------------------------------------------------------------------- ; -;--------------------------------------------------------------------- -;--- ДАННЫЕ ПРОГРАММЫ ---------------------------------------------- -;--------------------------------------------------------------------- - -sys_path db '/sys/lib/' -;sys_path db '/tmp0/1/' -lib_name db 'box_lib.obj',0 -cur_dir_path rb 4096 -lib_path rb 4096 - -include '../../import.inc' ;import_box_lib - - -;tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait -redbox_tt tooltip redboxtxt, blubox_tt, 60, 50, 50, 50, 0, $FFF473, 100 -blubox_tt tooltip bluboxtxt, 0, 140, 50, 50, 50, $110000FF, $FFF473, 100 - -redboxtxt db 'Red Box Tooltip', 13, 'May be multilined', 13, 13, 'Even with empty lines', 0 -bluboxtxt db 'Blue Box Tooltip', 0 - -sc system_colors - -title db 'Toooltip demo',0 - -; stack----------------------------------------------------------------------- ; - rb 4096 -STACK_END dd ? - -DATA_END: ; метка конца данных программы; ------------------------------------ ; +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +; Простой пример программы для KolibriOS +; озвучивает код нажатой клавиши +; - переделан как пример использования tooltip + +use32 ; включить 32-битный режим ассемблера +org 0 ; адресация с нуля + +db 'MENUET01' ; 8-байтный идентификатор MenuetOS +dd 1 ; версия заголовка (всегда 1) +dd START ; адрес первой команды +dd CODE_END ; размер программы +dd DATA_END ; количество памяти +dd STACK_END ; адрес вершины стэка +dd 0 ; адрес буфера для параметров +dd cur_dir_path ; указатель на адрес, куда помещается строка, содержащая путь до программы в момент запуска. + +include '../../../../proc32.inc' +include '../../../../macros.inc' +include '../../../../KOSfuncs.inc' +include '../../../../dll.inc' ; malloc fn +include '../box_lib.mac' +include '../../../../load_lib.mac' + + +;--------------------------------------------------------------------- +;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- +;--------------------------------------------------------------------- +; этот макрос обязателен для всех компонетов, использующих heap +; кроме того, обязательно имортировать lib_init - при импорте определяются +; функции хипа для библиотеки +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load + +START: +;--------------------------------------------------------------------- +;--- ИНИЦИАЛИЗАЦИЯ ---------------------------------------- +;--------------------------------------------------------------------- +mcall SF_SYS_MISC, SSF_HEAP_INIT + +mcall SF_SET_EVENTS_MASK, $C0000027 ; маска событий - мышь только в активном окне + +sys_load_library lib_name, lib_path, sys_path, import_box_lib +test eax,eax +jz @f + mcall SF_TERMINATE_PROCESS +@@: + + +invoke tooltip_init, redbox_tt ; only begin of list + +red: ; перерисовать окно + +call draw_window ; вызываем процедуру отрисовки окна + +;--------------------------------------------------------------------- +;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- +;--------------------------------------------------------------------- + +still: +mcall SF_WAIT_EVENT_TIMEOUT, 5 ; ждать события не более чем 0.05с +test eax, eax ; нет событий - проверить рисование тултипов по таймеру +je yield +cmp eax,EV_REDRAW +je red ; если да - на метку red +cmp eax,EV_KEY +je key ; если да - на key +cmp eax,EV_BUTTON +je button ; если да - на button +cmp eax,EV_MOUSE +je mouse ; если да - на mouse + +jmp still ; если другое событие - в начало цикла + + +;--------------------------------------------------------------------- +yield: +invoke tooltip_test_show, redbox_tt +jmp still ; вернуться к началу цикла + +mouse: +invoke tooltip_mouse, redbox_tt +jmp still ; вернуться к началу цикла + +key: ; нажата клавиша на клавиатуре +mcall SF_GET_KEY ; считать код символа (в ah) + +jmp still ; вернуться к началу цикла + +;--------------------------------------------------------------------- + +button: +mcall SF_GET_BUTTON ; получить идентификатор нажатой кнопки + +cmp ah, 1 ; если НЕ нажата кнопка с номером 1, +jne still ; вернуться + +pexit: +invoke tooltip_delete, redbox_tt ; освобождаем память +mcall SF_TERMINATE_PROCESS + + +;--------------------------------------------------------------------- +;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ---------------------------------- +;--------------------------------------------------------------------- + +draw_window: + +mcall SF_REDRAW, SSF_BEGIN_DRAW + +mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors + +mov edx, [sc.work] ; цвет фона +or edx, 0x33000000 ; и тип окна 3 +mcall SF_CREATE_WINDOW, <200,300>, <200,150>, , ,title + +; вывод квадратиков +mcall SF_DRAW_RECT, <60,50>, <50,50>, $FF0000 +mcall SF_DRAW_RECT, <140,50>, <50,50>, $FF + + +mcall SF_REDRAW, SSF_END_DRAW + +ret ; выходим из процедуры + + +CODE_END: ; метка конца программы; --------------------------------------------; + +; ---------------------------------------------------------------------------- ; +;--------------------------------------------------------------------- +;--- ДАННЫЕ ПРОГРАММЫ ---------------------------------------------- +;--------------------------------------------------------------------- + +sys_path db '/sys/lib/' +;sys_path db '/tmp0/1/' +lib_name db 'box_lib.obj',0 +cur_dir_path rb 4096 +lib_path rb 4096 + +include '../import.inc' ;import_box_lib + + +;tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait +redbox_tt tooltip redboxtxt, blubox_tt, 60, 50, 50, 50, 0, $FFF473, 100 +blubox_tt tooltip bluboxtxt, 0, 140, 50, 50, 50, $110000FF, $FFF473, 100 + +redboxtxt db 'Red Box Tooltip', 13, 'May be multilined', 13, 13, 'Even with empty lines', 0 +bluboxtxt db 'Blue Box Tooltip', 0 + +sc system_colors + +title db 'Toooltip demo',0 + +; stack----------------------------------------------------------------------- ; + rb 4096 +STACK_END dd ? + +DATA_END: ; метка конца данных программы; ------------------------------------ ; diff --git a/programs/develop/libraries/box_lib/asm/trunk/w_about.inc b/programs/develop/libraries/box_lib/asm/w_about.inc similarity index 100% rename from programs/develop/libraries/box_lib/asm/trunk/w_about.inc rename to programs/develop/libraries/box_lib/asm/w_about.inc diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/box_lib.asm similarity index 98% rename from programs/develop/libraries/box_lib/trunk/box_lib.asm rename to programs/develop/libraries/box_lib/box_lib.asm index 95c13c051..da135a34b 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/box_lib.asm @@ -22,14 +22,14 @@ format MS COFF public EXPORTS section '.flat' code readable align 16 -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../KOSfuncs.inc' +include '../../../macros.inc' +include '../../../proc32.inc' +include '../../../KOSfuncs.inc' include 'box_lib.mac' ;macro which should make life easier :) -;include '../../../../debug.inc' +;include '../../../debug.inc' include 'keys.inc' -include '../../../../system/skincfg/kglobals.inc' -include '../../../../system/skincfg/unpacker.inc' +include '../../../system/skincfg/kglobals.inc' +include '../../../system/skincfg/unpacker.inc' ;----------------------------------------------------------------------------- mem.alloc dd ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/box_lib.mac similarity index 100% rename from programs/develop/libraries/box_lib/trunk/box_lib.mac rename to programs/develop/libraries/box_lib/box_lib.mac diff --git a/programs/develop/libraries/box_lib/trunk/build.sh b/programs/develop/libraries/box_lib/build.sh similarity index 100% rename from programs/develop/libraries/box_lib/trunk/build.sh rename to programs/develop/libraries/box_lib/build.sh diff --git a/programs/develop/libraries/box_lib/trunk/checkbox.asm b/programs/develop/libraries/box_lib/checkbox.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/checkbox.asm rename to programs/develop/libraries/box_lib/checkbox.asm diff --git a/programs/develop/libraries/box_lib/trunk/d_button.asm b/programs/develop/libraries/box_lib/d_button.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/d_button.asm rename to programs/develop/libraries/box_lib/d_button.asm diff --git a/programs/develop/libraries/box_lib/trunk/doc/box_lib.htm b/programs/develop/libraries/box_lib/doc/box_lib.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/box_lib.htm rename to programs/develop/libraries/box_lib/doc/box_lib.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/checkbox/info_checkbox.htm b/programs/develop/libraries/box_lib/doc/checkbox/info_checkbox.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/checkbox/info_checkbox.htm rename to programs/develop/libraries/box_lib/doc/checkbox/info_checkbox.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/editbox/info_editbox.htm b/programs/develop/libraries/box_lib/doc/editbox/info_editbox.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/editbox/info_editbox.htm rename to programs/develop/libraries/box_lib/doc/editbox/info_editbox.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/editbox/window_fasm.png b/programs/develop/libraries/box_lib/doc/editbox/window_fasm.png similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/editbox/window_fasm.png rename to programs/develop/libraries/box_lib/doc/editbox/window_fasm.png diff --git a/programs/develop/libraries/box_lib/trunk/doc/frame/SCR_1.PNG b/programs/develop/libraries/box_lib/doc/frame/SCR_1.PNG similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/frame/SCR_1.PNG rename to programs/develop/libraries/box_lib/doc/frame/SCR_1.PNG diff --git a/programs/develop/libraries/box_lib/trunk/doc/frame/SCR_2.PNG b/programs/develop/libraries/box_lib/doc/frame/SCR_2.PNG similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/frame/SCR_2.PNG rename to programs/develop/libraries/box_lib/doc/frame/SCR_2.PNG diff --git a/programs/develop/libraries/box_lib/trunk/doc/frame/SCR_3.PNG b/programs/develop/libraries/box_lib/doc/frame/SCR_3.PNG similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/frame/SCR_3.PNG rename to programs/develop/libraries/box_lib/doc/frame/SCR_3.PNG diff --git a/programs/develop/libraries/box_lib/trunk/doc/frame/SCR_4.PNG b/programs/develop/libraries/box_lib/doc/frame/SCR_4.PNG similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/frame/SCR_4.PNG rename to programs/develop/libraries/box_lib/doc/frame/SCR_4.PNG diff --git a/programs/develop/libraries/box_lib/trunk/doc/frame/SCR_5.PNG b/programs/develop/libraries/box_lib/doc/frame/SCR_5.PNG similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/frame/SCR_5.PNG rename to programs/develop/libraries/box_lib/doc/frame/SCR_5.PNG diff --git a/programs/develop/libraries/box_lib/trunk/doc/frame/info_frame.htm b/programs/develop/libraries/box_lib/doc/frame/info_frame.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/frame/info_frame.htm rename to programs/develop/libraries/box_lib/doc/frame/info_frame.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/pathshow/pathshow.htm b/programs/develop/libraries/box_lib/doc/pathshow/pathshow.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/pathshow/pathshow.htm rename to programs/develop/libraries/box_lib/doc/pathshow/pathshow.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/scrollbar/scrollbar.htm b/programs/develop/libraries/box_lib/doc/scrollbar/scrollbar.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/scrollbar/scrollbar.htm rename to programs/develop/libraries/box_lib/doc/scrollbar/scrollbar.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/style.css b/programs/develop/libraries/box_lib/doc/style.css similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/style.css rename to programs/develop/libraries/box_lib/doc/style.css diff --git a/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm b/programs/develop/libraries/box_lib/doc/t_edit/t_edit.htm similarity index 97% rename from programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm rename to programs/develop/libraries/box_lib/doc/t_edit/t_edit.htm index 55a765d82..a7cfd5147 100644 --- a/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm +++ b/programs/develop/libraries/box_lib/doc/t_edit/t_edit.htm @@ -1,401 +1,401 @@ - - -¤ыхьхэЄ Text Editor - - - - - -

═р уыртэє■ ↑

-

╬уыртыхэшх

- -

┬тхфхэшх

-

╘єэъЎшш

- -

╘юЁьрЄ Їрщыр яюфётхЄъш *.syn

-

╤ЄЁєъЄєЁр tedit

- -

┬тхфхэшх

-

▌ыхьхэЄ text_editor яючтюы хЄ ЁрсюЄрЄ№ ё ЄхъёЄют√ьш Їрщырьш, ёюфхЁцшЄ ьэюую ЇєэъЎшщ фы  ЁхфръЄшЁютрэш  ЄхъёЄр.

-

-

┬эх°эшщ тшф яЁюуЁрьь√, ё ¤ыхьхэЄюь text_editor.

- -

┬ючьюцэюёЄш ¤ыхьхэЄр

-
    -
  • ╬ЄъЁ√Єшх (Ctrl+O), ╤юїЁрэхэшх Їрщыр (Ctrl+S, Ctrl+Shift+S).
  • -
  • ╨хфръЄшЁютрэшх: ╧ютЄюЁ/╬Єьхэр фхщёЄтш  (Ctrl+Z), ┬√ЁхчрЄ№, ╩юяшЁютрЄ№ (Ctrl+C), ┬ёЄртшЄ№ (Ctrl+V), ╧юшёъ (Ctrl+F, F3), ╟рьхэр (Ctrl+H), ╧хЁхїюф эр ёЄЁюъє (Ctrl+G).
  • -
  • ┬√фхыхэшх ЎтхЄюь ёыют, чрфрээ√ї т Їрщых ёшэЄръёшёр. ┬√тюф ёяЁртъш яю эшь, хёыш юэр хёЄ№ (эрцрЄшхь F1 ъюуфр ъєЁёюЁ эр ёыютх).
  • -
- -

╬ ЁрсюЄх ¤ыхьхэЄр

-

╨рчфхы фы  яЁюуЁрььшёЄют (ш шэЄхЁхёє■∙шїё  ы■фхщ), т ъюЄюЁюь Ёрёърчрэ√ - эхъюЄюЁ√х шфхш, эр ъюЄюЁ√ї яюёЄЁюхэр фрээр  яЁюуЁрььр.

- -

─ы  ЁрсюЄ√ ё ЄхъёЄюь яЁюуЁрььр шёяюы№чєхЄ ёЄЁєъЄєЁ√:

-
struct symbol
-  c db ?	;  +0 ёшьтюы
-  col db ?	;  +1 ЎтхЄ
-  perv dd ? ;  +2
-  next dd ? ;  +6 єърчрЄхыш
-  tc dd ?	; +10 тЁхь. ёючфрэш 
-  td dd ?	; +14 тЁхь. єфрыхэш 
-ends
-

╩рцфр  шч Єръшї ёЄЁєъЄєЁ ёюїЁрэ хЄ юфшэ ёшьтюы т яхЁхьхээющ 'c'. ╧хЁхьхээ√х - 'perv' ш 'next' їЁрэ Є шэфхъё√ яхЁтюую ш ёыхфє■∙хую ёшьтюыют. ┴ыруюфрЁ  ўхьє - ЄхъёЄ ёючфрхЄё  т тшфх Ўхяюўъш ёшьтюыют (фтєэряЁртыхээ√щ ёяшёюъ).

-

'tc' - тЁхь  ёючфрэш  ёшьтюыр, яЁш юЄьхэх фхщёЄтш  ЄхъёЄют√щ ЁхфръЄюЁ "чэрхЄ" - ъръшх ёшьтюы√ юЄюсЁрцрЄ№, р ъръшх эхЄ (їюЄ  тёх ёшьтюы√ "тшё Є" т ярь Єш).

-

'td' - тЁхь  єфрыхэш  ёшьтюыр, чряюыэ хЄё  яЁш єфрыхэшш, яЁш юЄьхэх фхщёЄтш  - єфрыхэш  ёшьтюыют, ЄхъёЄ ьюцхЄ с√Є№ тюёёЄрэютыхэ.

-

'col' - шёяюы№чєхЄё  фы  ЎтхЄютющ ЁрчьхЄъш, ёюфхЁцшЄ шэфхъё ЎтхЄр т ьрёёштх ЎтхЄют ted_text_colors.

- -

╘єэъЎшш

-

╘єэъЎшш эр ¤ъёяюЁЄ:

- -

ted_but_copy

-

╘єэъЎш  ъюЄюЁр  сєфхЄ т√ч√трЄ№ё  яЁш эрцрЄшш эр ъэюяъє ъюяшЁютрэш  т сєЇхЁ шыш эр Ctrl+C. ╥хъёЄ ъюяшЁєхЄё  т сєЇхЁ ted_buffer, ьръёшьры№э√щ ЁрчьхЁ сєЇхЁр єърч√трхЄё  т ted_buffer_size.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_copy], tedit0
- -

ted_but_cut

-

╘єэъЎш  т√ЁхчрхЄ т√фхыхээ√щ ЄхъёЄ ш ъюяшЁєхЄ хую т сєЇхЁ.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_cut], tedit0
- -

ted_but_find

-

╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр ted_buffer_find, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) ярЁрьхЄЁ√ яюшёър:

-
    -
  • 0 - шёърЄ№ эшцх ъєЁёюЁр
  • -
  • 1 - шёърЄ№ т√°х ъєЁёюЁр
  • -
  • 2 - шёърЄ№ юЄ эрўрыр фюъєьхэЄр
  • -
-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_find], tedit0, 2
- -

ted_but_find_next

-

╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр ted_buffer_find, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧юшёъ тхфхЄё  эшцх Єхъє∙хую яюыюцхэш  ъєЁёюЁр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_find_next], tedit0
- -

ted_but_paste

-

╘єэъЎш  тёЄрты хЄ ЄхъёЄ шч сєЇхЁр ted_buffer.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_paste], tedit0
- -

ted_but_redo

-

╧ютЄюЁ хЄ юЄьхэхээ√х фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_redo], tedit0
- -

ted_but_reverse

-

╠хэ хЄ яюЁ фюъ ёыхфютрэш  ёшьтюыют т т√фхыхээюь ЄхъёЄх.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_reverse], tedit0
- -

ted_but_save_file

-

╘єэъЎш  фы  ёюїЁрэхэш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),

-

3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
- -

ted_but_select_word

-

╘єэъЎш  фы  т√фхыхэш  ъы■ўхтюую ёыютр яюф ъєЁёюЁюь. ┼ёыш ъы■ўхт√х ёыютр эх шёяюы№чє■Єё , Єюуфр сєфхЄ т√фхыхэ тхё№ ЄхъёЄ.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_select_word], tedit0
- -

ted_but_sumb_lover

-

╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ эшцэхьє ЁхушёЄЁє.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_sumb_lover], tedit0
- -

ted_but_sumb_upper

-

╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ тхЁїэхьє ЁхушёЄЁє.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_sumb_upper], tedit0
- -

ted_but_undo

-

╬Єьхэ хЄ фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр. ─хщёЄтш  ЇєэъЎшш ted_but_reverse эх юЄьхэ ■Єё .

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_but_undo], tedit0
- -

ted_can_save

-

╘єэъЎш  ъюЄюЁр  яЁютхЁ хЄ с√ыш ыш эх ёюїЁрэхээ√х шчьхэхэш  т ЄхъёЄх. ╨хчєы№ЄрЄ тючтЁр∙рхЄё  т ЁхушёЄЁ al, хёыш шчьхэхэш  с√ыш Єю тючтЁр∙рхЄ 1 шэрўх 0.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
push eax
-	stdcall [ted_can_save], tedit0
-	cmp al,1
-.........
-pop eax
- -

ted_clear

-

╬ўшёЄър ЄхъёЄр т юъэх ЁхфръЄюЁр. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) ярЁрьхЄЁ юяЁхфхы хЄ сєфхЄ ыш юўшёЄър ярь Єш яюыэющ.

-

┼ёыш 2-щ ярЁрьхЄЁ Ёртхэ 1, Єю юўшёЄър сєфхЄ яюыэющ, яЁш 0 эхЄ. ╧юы№чютрЄхы■ эєцэю т√ч√трЄ№ ЇєэъЎш■ ё ярЁрьхЄЁюь 1, ярЁрьхЄЁ 0 фы  тэєЄЁхээхую шёяюы№чютрэш .

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_clear], tedit0,1
- -

ted_delete

-

─хёЄЁєъЄюЁ ¤ыхьхэЄр, юётюсюцфрхЄ ярь Є№ чрэ Єє■ ¤ыхьхэЄюь.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_delete], tedit0
- -

ted_draw

-

╧хЁхЁшёютър тёхую юъэр ЁхфръЄюЁр, тъы■ўр  фюўхЁэшх ёъЁюыышэуш.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_draw], tedit0
- -

ted_init

-

╩юэёЄЁєъЄюЁ ¤ыхьхэЄр, т√фхы хЄ ярь Є№ эхюсїюфшьє■ фы  ЁрсюЄ√ ЄхъёЄютюую ЁхфръЄюЁр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_init], tedit0
- -

ted_init_scroll_bars

-

╙ёЄрэртыштрхЄ ЎтхЄ ёъЁюыышэуют ш эрёЄЁрштрхЄ шї ЁрчьхЁ√ т чртшёшьюёЄш юЄ ЁрчьхЁют юъэр. ╠юцэю т√ч√трЄ№ ¤Єє ЇєэъЎш■ яЁш шчьхэхэшш ЁрчьхЁют юъэр т яюы№чютрЄхы№ёъющ яЁюуЁрььх. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) юяЎшш, єърч√тр■Є ъръшх эєцэю шчьхэшЄ№ ярЁрьхЄЁ√:

-
    -
  • 1 - шчьхэшЄ№ ЎтхЄр ёъЁюыышэуют
  • -
  • 2 - шчьхэшыё  ЁрчьхЁ юъэр
  • -
  • 4 - шчьхэшыё  ЁрчьхЁ фюъєьхэЄр
  • -
-

╧рЁрьхЄЁ√ ьюцэю ъюьсшэшЁютрЄ№ ўхЁхч ыюушўхёъюх шыш.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_init_scroll_bars], tedit0,2
- -

ted_init_syntax_file

-

╘єэъЎш  фы  чруЁєчъш ЎтхЄют шэЄхЁЇхщёр ш ъы■ўхт√ї ёыют шч Їрщыр ёшэЄръёшёр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),

-

3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр ёшэЄръёшёр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
- -

ted_is_select

-

╬яЁхфхы хЄ хёЄ№ т юъэх ЁхфръЄюЁр т√фхыхээ√щ ЄхъёЄ. ┼ёыш хёЄ№ т ЁхушёЄЁ al чряшё√трхЄё  1 шэрўх 0. ╘єэъЎш  эхюсїюфшьр фы  ёючфрэш  ярэхыхщ шэёЄЁхьхэЄют, т ъюЄюЁ√ї т чртшёшьюёЄш юЄ т√фхыхэш  сєфєЄ фюёЄєяэ√ шыш чрсыюъшЁютрэ√ юяЁхфхыхээ√х ъэюяъш (фхщёЄтш ). ═ряЁшьхЁ ъэюяъє фы  ъюяшЁютрэш  т сєЇхЁ ьюцэю чрсыюъшЁютрЄ№ хёыш эхЄ т√сЁрээюую ЄхъёЄр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
push eax edi
-	mov edi,tedit0
-	call [ted_is_select]
-	cmp al,0
-.........
-pop edi eax
- -

ted_key

-

╘єэъЎш  т√ч√трхьр  фы  ЁхръЎшш эр ъыртшрЄєЁє. ┬ ЁхушёЄЁх eax фюыцхэ с√Є№ ъюф эрцрЄющ ъыртш°ш. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) ЄрсышЎр фы  ъюэтхЁЄрЎшш scan ъюфют т ascii,

-

3) єяЁрты ■∙шх ёшьтюы√.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
mcall 66,3 ;66.3 яюыєўшЄ№ ёюёЄю эшх єяЁрты ■∙шї ъыртш°
-xor esi,esi
-mov ecx,1
-test al,0x03 ;[Shift]
-jz @f
-	mov cl,2
-	or esi,KM_SHIFT
-@@:
-test al,0x0c ;[Ctrl]
-jz @f
-	or esi,KM_CTRL
-@@:
-test al,0x30 ;[Alt]
-jz @f
-mov cl,3
-	or esi,KM_ALT
-@@:
-test al,0x80 ;[NumLock]
-jz @f
-	or esi,KM_NUMLOCK
-@@:
-
-mcall 26,2,,conv_tabl ;26.2 яюыєўшЄ№ Ёрёъырфъє ъыртшрЄєЁ√
-mcall 2 ;яюыєўрхь ъюф эрцрЄющ ъыртш°ш
-stdcall [ted_key], tedit0, conv_tabl,esi
- -

ted_mouse

-

╘єэъЎш  эр яхЁхьх∙хэшх шыш эрцрЄшх ь√°ш.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_mouse], tedit0
- -

ted_open_file

-

╘єэъЎш  фы  юЄъЁ√Єш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),

-

3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.

-

┬ючтЁр∙рхЄ 2 ярЁрьхЄЁр:

-

1) eax = ъюф ю°шсъш

-

2) ebx = ъюыышўхёЄтю яЁюўшЄрээ√ї срщЄ

-

╧ЁшьхЁ шёяюы№чютрэш :

-
push eax ebx
-stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
-.........
-pop ebx eax
- -

ted_text_add

-

╘єэъЎш  фы  фюсртыхэш  ЄхъёЄр. ╧ЁшэшьрхЄ 4 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) єърчрЄхы№ эр сєЇхЁ ё ЄхъёЄюь,

-

3) фышэр ЄхъёЄр,

-

4) юяЎшш тёЄртъш.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
text_buffer db 500 dup(0)
-.........
-mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
-stdcall [ted_text_add], tedit0,text_buffer,30,ebx
-

ted_opt_ed_change_time - ЇшъёшЁютрЄ№ шчьхэхэш  фюъєьхэЄр, ўЄю-с√ шї ьюцэю с√ыю юЄьхэшЄ№. ═ряЁшьхЁ хёыш эєцэю ёфхырЄ№ эхёъюы№ъю шчьхэхэшщ ЄхъёЄр, ъюЄюЁ√х сєфєЄ юЄьхэ Є№ё  чр юфшэ Ёрч, Єю 1-х шчьхэхэшх шфхЄ ё ¤Єющ ъюэёЄрэЄющ р юёЄры№э√х эхЄ.

-

ted_opt_ed_move_cursor - ъюэёЄрэЄр ъюЄюЁр  юяЁхфхы хЄ ёфтшу ъєЁёюЁр яюёых фюсртыхэш  ЄхъёЄр.

- -

ted_text_colored

-

╘єэъЎш  фы  ЁрчьхЄъш ЄхъёЄр ЎтхЄюь. ╬с√ўэю т√ч√трхЄё  тэєЄЁш ёрьющ сшсышюЄхъш, яЁш шчьхэхэш ї ЄхъёЄр. ┬ эхъюЄюЁ√ї ёыєўр ї ьюцхЄ яюэрфюсшЄ№ё  т√чтрЄ№ яЁшэєфшЄхы№эю шч тэх°эхщ яЁюуЁрьь√.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
push edi
-	mov edi,tedit0
-	call [ted_text_colored]
-pop edi
- -

ted_go_to_position

-

╘єэъЎш  фы  яхЁхїюфр эр єърчрээє■ яючшЎш■. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

-

1) ёЄЁєъЄєЁр tedit,

-

2) эюьхЁ ёЄЁюъш,

-

3) эюьхЁ ёшьтюыр.

-

╧ЁшьхЁ шёяюы№чютрэш :

-
stdcall [ted_go_to_position], tedit0,50,3
- -

┬эєЄЁхээшх ЇєэъЎшш:

-

ted_get_text_perv_pos - яхЁхїюф эр яЁхф√фє∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'perv')

-

ted_get_text_next_pos - яхЁхїюф эр ёыхфє■∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'next')

-

ted_symbol_not_vis - юяЁхфхы хЄ тшфшь√щ ыш єърчрээ√щ ёшьтюы эр ¤ъЁрэх (т чртшёшьюёЄш - юЄ чэрўхэшщ 'tc' ш 'td')

-

ted_iterat_next - яхЁхїюф эр ёыхфє■∙шщ тшфшь√щ ёшьтюы т Ўхяш. ╚ёяюы№чєхЄ фы  - ЁрсюЄ√ ЇєэъЎшш ted_get_text_next_pos ш ted_symbol_not_vis.

-

ted_iterat_perv - яхЁхїюф эр яЁхфхфє∙шщ тшфшь√щ ёшьтюы т Ўхяш.

- -

ted_iterat_next_pos_char - эрщЄш ёыхфє■∙є■ яючшЎш■ єърчрээюую ёшьтюыр (edx-яюч. эрўрыр - яюшёър, bl->ъюф шёъюьюую ёшьтюыр)

-

ted_get_pos_by_coords - схЁхЄ яючшЎш■ ёшьтюыр яю ъююЁфшэрЄрь (esi->ъююЁф. x, чэръ; - ecx->ъююЁф. y, ёЄЁюър)

-

ted_go_to_pos - яхЁхёЄрты хЄ ъєЁёюЁ т єърчрээє■ яючшЎш■, хёыш єърчрээр  яючшЎш  - эрїюфшЄё  тэх ¤ъЁрэр, Єю Єръцх яхЁхёЄрты ■Єё  ёъЁюышэуш (ecx->ъююЁф. x, чэръ; edx->ъююЁф. y, ёЄЁюър)

- -

╘юЁьрЄ Їрщыр яюфётхЄъш *.syn

- - - - - - - - - - - - - - - - -
▌ыхьхэЄ╨рчьхЁ (срщЄ)
╩юышўхёЄтю ЎтхЄют ЄхъёЄр
4
╩юышўхёЄтю яюфётхўштрхь√ї ёыют
4
╓тхЄр шэЄхЁЇхщёр
4*6
╓тхЄр фы  ЄхъёЄр
4*(ъюы. Ўт. ЄхъёЄр)
╤ЄЁєъЄєЁ√ ёю ётющёЄтрьш ш юяшёрэш ьш ёыют
sizeof(TexColViv)*(ъюы. ёыют)
╨рчфхышЄхы№э√щ ёшьтюы, ючэрўр■∙шщ эрўрыю юяшёрэшщ ёыют (тёхуфр Ёртхэ 0)
1 срщЄ
╬яшёрэш  ёыют (ёЄЁюъш ЄхъёЄр ё 0-ьш т ъюэЎх)
(фышээр ёяЁртюўэюую ЄхъёЄр + 1)
-

╟рьхўрэш .

-
    -
  • ┬ёх ёыютр фюыцэ√ с√Є№ Ёрёяюыюцхэ√ т яюЁ фъх ёыхфютрэш  шї ASCII ъюфют. - ┬ючьюцэю т сєфє∙шї тхЁёш ї ЇюЁьрЄ Їрщыют яюфётхЄъш сєфхЄ шчьхэхэ.
  • -
- -

╤ЄЁєъЄєЁр tedit

-

╠ръЁюёр фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄхъёЄютюую ЁхфръЄюЁр эхЄ. ╧юЄюьє фрээ√х фы  эхую чрфр■Єё  тЁєўэє■. ╧ЁшьхЁ ёЄЁєъЄєЁ√ фы  ЄхъёЄютюую ЁхфръЄюЁр:

-
align 4
-tedit0: ;ёЄЁєъЄєЁр ЄхъёЄютюую ЁхфръЄюЁр
-	.wnd BOX 195,5+20,325,260 ;+ 0
-	.rec BOX 30,13,7,10   ;+16
-	.drag_m db 0 ;+32 т√фхыхэшх юЄ ь√°ш
-	.drag_k db 0 ;+33 т√фхыхэшх юЄ ъыртшрЄєЁ√
-	.sel  TexSelect 0,0,0,0 ;+34 ёЄЁєъЄєЁр т√фхыхэш 
-	.seln TexSelect ;+50 фюяюыэшЄхы№эр  ёЄЁєъЄєЁр т√фхыхэш 
-	.tex	  dd 0 ;+66 text memory pointer
-	.tex_1	  dd 0 ;+70 text first symbol pointer
-	.tex_end  dd 0 ;+74 text end memory pointer
-	.cur_x	  dd 0 ;+78 ъююЁфшэрЄр x ъєЁёюЁр
-	.cur_y	  dd 0 ;+82 ъююЁфшэрЄр y ъєЁёюЁр
-	.max_chars dd 5002 ;+86 ьръёшьры№эюх ўшёыю ёшьтюыют т юфэюь фюъєьхэЄх
-	.count_colors_text dd 1 ;+90 ъюыышўхёЄтю ЎтхЄют ЄхъёЄр
-	.count_key_words   dd 0 ;+94 ъюыышўхёЄтю ъы■ўхт√ї ёыют
-	.color_cursor	   dd 0xff0000 ;+98 ЎтхЄ ъєЁёюЁр
-	.color_wnd_capt    dd 0x0080c0 ;+102 ЎтхЄ яюыхщ тюъЁєу юъэр
-	.color_wnd_work    dd	   0x0 ;+106 ЎтхЄ Їюэр юъэр
-	.color_wnd_bord    dd 0xffffff ;+110 ЎтхЄ ЄхъёЄр эр яюы ї
-	.color_select	   dd 0x0000ff ;+114 ЎтхЄ т√фхыхэш 
-	.color_cur_text    dd 0xffff00 ;+118 ЎтхЄ ёшьтюыр яюф ъєЁёюЁюь
-	.color_wnd_text    dd 0x80ffff ;+122 ЎтхЄ ЄхъёЄр т юъэх
-	.syntax_file	   dd 0 ;+126 єърчрЄхы№ эр эрўрыю Їрщыр ёшэЄръёшёр
-	.syntax_file_size  dd 500 ;+130 ьръёшьры№э√щ ЁрчьхЁ Їрщыр ёшэЄръёшёр
-	.text_colors	   dd 0 ;+134 єърчрЄхы№ эр ьрёёшт ЎтхЄют ЄхъёЄр
-	.help_text_f1	   dd 0 ;+138 єърчрЄхы№ эр ЄхъёЄ ёяЁртъш (яю эрцрЄшш F1)
-	.help_id	   dd -1 ;+142 шфхэЄшЇшърЄюЁ фы  ёяЁртъш
-	.key_words_data    dd 0 ;+146 єърчрЄхы№ эр ёЄЁєъЄєЁ√ ъы■ўхт√ї ёыют TexColViv
-	.tim_ch      dd ? ;+150 ъюышўхёЄтю шчьхэхэшщ т Їрщых
-	.tim_undo    dd ? ;+154 ъюышўхёЄтю юЄьхэхээ√ї фхщёЄтшщ
-	.tim_ls      dd ? ;+158 тЁхь  яюёыхфэхую ёюїЁрэхэш 
-	.tim_co      dd ? ;+162 тЁхь  яюёыхфэхщ ЎтхЄютющ ЁрчьхЄъш
-	.el_focus    dd el_focus ;+166 єърчрЄхы№ эр яхЁхьхээє■ ¤ыхьхэЄр т Їюъєёх
-	.err_save    db 0 ;+170 ю°шсър ёюїЁрэхэш  Їрщыр
-	.panel_id    db 0 ;+171 эюьхЁ юЄъЁ√Єющ ярэхыш
-	.key_new     db 0 ;+172 ёшьтюы, ъюЄюЁ√щ сєфхЄ фюсрты Єё  ё ъыртшрЄєЁ√
-	.symbol_new_line db 20 ;+173 ёшьтюы чртхЁ°хэш  ёЄЁюъш
-	.scr_w	     dd scrol_w1 ;+174 тхЁЄшъры№э√щ ёъЁюыышэу
-	.scr_h	     dd scrol_h1 ;+178 уюЁшчюэЄры№э√щ ёъЁюыышэу
-	.arr_key_pos dd 0 ;+182 єърчрЄхы№ эр ьрёёшт яючшЎшщ ъы■ўхт√ї ёыют
-	.buffer      dd buf ;+186 єърчрЄхы№ эр сєЇхЁ ъюяшЁютрэш /тёЄртъш
-	.buffer_find dd 0 ;+190 єърчрЄхы№ эр сєЇхЁ фы  яюшёър
-	.cur_ins     db 1 ;+194 Ёхцшь ЁрсюЄ√ ъєЁёюЁр (юс√ўэ√щ шыш чрьхэр)
-	.mode_color  db 1 ;+195 Ёхцшь т√фхыхэш  ёыют ЎтхЄюь (0-т√ъы. 1-тъы.)
-	.mode_invis  db 0 ;+196 Ёхцшь яюърчр эхяхўрЄрхь√ї ёшьтюыют
-	.gp_opt      db 0 ;+197 юяЎшш тючтЁр∙рхь√х ЇєэъЎшхщ ted_get_pos_by_cursor
-	.fun_on_key_ctrl_all dd but_ctrl_all ;+198 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ яЁш эрцрЄшш Ctrl+N,O,S,F,H,G
-	dd 0,0,0 ;чрЁхчхЁтшЁютрэю
-	.buffer_size       dd BUF_SIZE ;+214 ЁрчьхЁ сєЇхЁр ъюяшЁютрэш /тёЄртъш
-	.fun_find_err      dd 0 ;+218 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ хёыш яюшёъ чръюэўшыё  эхєфрўэю
-	.fun_init_synt_err dd 0 ;+222 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ яЁш ю°шсюўэюь юЄъЁ√Єшш Їрщыр ёшэЄръёшёр
-	.fun_draw_panel_buttons dd 0 ;+226 єърчрЄхы№ эр ЇєэъЎш■ Ёшёютрэш  ярэхыш ё ъэюяърьш
-	.fun_draw_panels   dd 0 ;+230 єърчрЄхы№ эр ЇєэъЎш■ Ёшёютрэш  ярэхыш яюшёър/чрьхэ√/яхЁхїюфр/ёшэЄръёшёр
-	dd 0 ;чрЁхчхЁтшЁютрэю
-	.fun_save_err      dd 0 ;+238 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ хёыш ёюїЁрэхэшх Їрщыр чръюэўшыюё№ эхєфрўэю
-	.increase_size dd 225 ;+242 ўшёыю ёшьтюыют эр ъюЄюЁ√х сєфхЄ єтхўштрЄ№ё  ярь Є№ яЁш эхїтрЄъх
-	.ptr_free_symb dd   ? ;+246 єърчрЄхы№ эр ётюсюфэє■ ярь Є№, т ъюЄюЁє■ ьюцэю фюсрты Є№ ёшьтюы (шёяюы№чєхЄё  тэєЄЁш ¤ыхьхэЄр фы  єёъюЁхэш  тёЄртъш ЄхъёЄр)
-	.font_s dd ? ;+250 ёЄшыш фы  °ЁшЇЄр (юЄ 0 фю 7 ьэюцшЄхы№ фы  ЁрчьхЁр, +16 фы  тЄюЁюую ёшёЄхьэюую °ЁшЇЄр)
-
-

─юъєьхэЄрЎш  юсэюты ырё№ яюёыхфэшщ Ёрч 29.01.19.

- - - \ No newline at end of file + + +¤ыхьхэЄ Text Editor + + + + + +

═р уыртэє■ ↑

+

╬уыртыхэшх

+ +

┬тхфхэшх

+

╘єэъЎшш

+ +

╘юЁьрЄ Їрщыр яюфётхЄъш *.syn

+

╤ЄЁєъЄєЁр tedit

+ +

┬тхфхэшх

+

▌ыхьхэЄ text_editor яючтюы хЄ ЁрсюЄрЄ№ ё ЄхъёЄют√ьш Їрщырьш, ёюфхЁцшЄ ьэюую ЇєэъЎшщ фы  ЁхфръЄшЁютрэш  ЄхъёЄр.

+

+

┬эх°эшщ тшф яЁюуЁрьь√, ё ¤ыхьхэЄюь text_editor.

+ +

┬ючьюцэюёЄш ¤ыхьхэЄр

+
    +
  • ╬ЄъЁ√Єшх (Ctrl+O), ╤юїЁрэхэшх Їрщыр (Ctrl+S, Ctrl+Shift+S).
  • +
  • ╨хфръЄшЁютрэшх: ╧ютЄюЁ/╬Єьхэр фхщёЄтш  (Ctrl+Z), ┬√ЁхчрЄ№, ╩юяшЁютрЄ№ (Ctrl+C), ┬ёЄртшЄ№ (Ctrl+V), ╧юшёъ (Ctrl+F, F3), ╟рьхэр (Ctrl+H), ╧хЁхїюф эр ёЄЁюъє (Ctrl+G).
  • +
  • ┬√фхыхэшх ЎтхЄюь ёыют, чрфрээ√ї т Їрщых ёшэЄръёшёр. ┬√тюф ёяЁртъш яю эшь, хёыш юэр хёЄ№ (эрцрЄшхь F1 ъюуфр ъєЁёюЁ эр ёыютх).
  • +
+ +

╬ ЁрсюЄх ¤ыхьхэЄр

+

╨рчфхы фы  яЁюуЁрььшёЄют (ш шэЄхЁхёє■∙шїё  ы■фхщ), т ъюЄюЁюь Ёрёърчрэ√ + эхъюЄюЁ√х шфхш, эр ъюЄюЁ√ї яюёЄЁюхэр фрээр  яЁюуЁрььр.

+ +

─ы  ЁрсюЄ√ ё ЄхъёЄюь яЁюуЁрььр шёяюы№чєхЄ ёЄЁєъЄєЁ√:

+
struct symbol
+  c db ?	;  +0 ёшьтюы
+  col db ?	;  +1 ЎтхЄ
+  perv dd ? ;  +2
+  next dd ? ;  +6 єърчрЄхыш
+  tc dd ?	; +10 тЁхь. ёючфрэш 
+  td dd ?	; +14 тЁхь. єфрыхэш 
+ends
+

╩рцфр  шч Єръшї ёЄЁєъЄєЁ ёюїЁрэ хЄ юфшэ ёшьтюы т яхЁхьхээющ 'c'. ╧хЁхьхээ√х + 'perv' ш 'next' їЁрэ Є шэфхъё√ яхЁтюую ш ёыхфє■∙хую ёшьтюыют. ┴ыруюфрЁ  ўхьє + ЄхъёЄ ёючфрхЄё  т тшфх Ўхяюўъш ёшьтюыют (фтєэряЁртыхээ√щ ёяшёюъ).

+

'tc' - тЁхь  ёючфрэш  ёшьтюыр, яЁш юЄьхэх фхщёЄтш  ЄхъёЄют√щ ЁхфръЄюЁ "чэрхЄ" + ъръшх ёшьтюы√ юЄюсЁрцрЄ№, р ъръшх эхЄ (їюЄ  тёх ёшьтюы√ "тшё Є" т ярь Єш).

+

'td' - тЁхь  єфрыхэш  ёшьтюыр, чряюыэ хЄё  яЁш єфрыхэшш, яЁш юЄьхэх фхщёЄтш  + єфрыхэш  ёшьтюыют, ЄхъёЄ ьюцхЄ с√Є№ тюёёЄрэютыхэ.

+

'col' - шёяюы№чєхЄё  фы  ЎтхЄютющ ЁрчьхЄъш, ёюфхЁцшЄ шэфхъё ЎтхЄр т ьрёёштх ЎтхЄют ted_text_colors.

+ +

╘єэъЎшш

+

╘єэъЎшш эр ¤ъёяюЁЄ:

+ +

ted_but_copy

+

╘єэъЎш  ъюЄюЁр  сєфхЄ т√ч√трЄ№ё  яЁш эрцрЄшш эр ъэюяъє ъюяшЁютрэш  т сєЇхЁ шыш эр Ctrl+C. ╥хъёЄ ъюяшЁєхЄё  т сєЇхЁ ted_buffer, ьръёшьры№э√щ ЁрчьхЁ сєЇхЁр єърч√трхЄё  т ted_buffer_size.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_copy], tedit0
+ +

ted_but_cut

+

╘єэъЎш  т√ЁхчрхЄ т√фхыхээ√щ ЄхъёЄ ш ъюяшЁєхЄ хую т сєЇхЁ.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_cut], tedit0
+ +

ted_but_find

+

╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр ted_buffer_find, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) ярЁрьхЄЁ√ яюшёър:

+
    +
  • 0 - шёърЄ№ эшцх ъєЁёюЁр
  • +
  • 1 - шёърЄ№ т√°х ъєЁёюЁр
  • +
  • 2 - шёърЄ№ юЄ эрўрыр фюъєьхэЄр
  • +
+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_find], tedit0, 2
+ +

ted_but_find_next

+

╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр ted_buffer_find, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧юшёъ тхфхЄё  эшцх Єхъє∙хую яюыюцхэш  ъєЁёюЁр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_find_next], tedit0
+ +

ted_but_paste

+

╘єэъЎш  тёЄрты хЄ ЄхъёЄ шч сєЇхЁр ted_buffer.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_paste], tedit0
+ +

ted_but_redo

+

╧ютЄюЁ хЄ юЄьхэхээ√х фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_redo], tedit0
+ +

ted_but_reverse

+

╠хэ хЄ яюЁ фюъ ёыхфютрэш  ёшьтюыют т т√фхыхээюь ЄхъёЄх.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_reverse], tedit0
+ +

ted_but_save_file

+

╘єэъЎш  фы  ёюїЁрэхэш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),

+

3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
+ +

ted_but_select_word

+

╘єэъЎш  фы  т√фхыхэш  ъы■ўхтюую ёыютр яюф ъєЁёюЁюь. ┼ёыш ъы■ўхт√х ёыютр эх шёяюы№чє■Єё , Єюуфр сєфхЄ т√фхыхэ тхё№ ЄхъёЄ.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_select_word], tedit0
+ +

ted_but_sumb_lover

+

╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ эшцэхьє ЁхушёЄЁє.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_sumb_lover], tedit0
+ +

ted_but_sumb_upper

+

╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ тхЁїэхьє ЁхушёЄЁє.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_sumb_upper], tedit0
+ +

ted_but_undo

+

╬Єьхэ хЄ фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр. ─хщёЄтш  ЇєэъЎшш ted_but_reverse эх юЄьхэ ■Єё .

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_but_undo], tedit0
+ +

ted_can_save

+

╘єэъЎш  ъюЄюЁр  яЁютхЁ хЄ с√ыш ыш эх ёюїЁрэхээ√х шчьхэхэш  т ЄхъёЄх. ╨хчєы№ЄрЄ тючтЁр∙рхЄё  т ЁхушёЄЁ al, хёыш шчьхэхэш  с√ыш Єю тючтЁр∙рхЄ 1 шэрўх 0.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
push eax
+	stdcall [ted_can_save], tedit0
+	cmp al,1
+.........
+pop eax
+ +

ted_clear

+

╬ўшёЄър ЄхъёЄр т юъэх ЁхфръЄюЁр. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) ярЁрьхЄЁ юяЁхфхы хЄ сєфхЄ ыш юўшёЄър ярь Єш яюыэющ.

+

┼ёыш 2-щ ярЁрьхЄЁ Ёртхэ 1, Єю юўшёЄър сєфхЄ яюыэющ, яЁш 0 эхЄ. ╧юы№чютрЄхы■ эєцэю т√ч√трЄ№ ЇєэъЎш■ ё ярЁрьхЄЁюь 1, ярЁрьхЄЁ 0 фы  тэєЄЁхээхую шёяюы№чютрэш .

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_clear], tedit0,1
+ +

ted_delete

+

─хёЄЁєъЄюЁ ¤ыхьхэЄр, юётюсюцфрхЄ ярь Є№ чрэ Єє■ ¤ыхьхэЄюь.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_delete], tedit0
+ +

ted_draw

+

╧хЁхЁшёютър тёхую юъэр ЁхфръЄюЁр, тъы■ўр  фюўхЁэшх ёъЁюыышэуш.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_draw], tedit0
+ +

ted_init

+

╩юэёЄЁєъЄюЁ ¤ыхьхэЄр, т√фхы хЄ ярь Є№ эхюсїюфшьє■ фы  ЁрсюЄ√ ЄхъёЄютюую ЁхфръЄюЁр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_init], tedit0
+ +

ted_init_scroll_bars

+

╙ёЄрэртыштрхЄ ЎтхЄ ёъЁюыышэуют ш эрёЄЁрштрхЄ шї ЁрчьхЁ√ т чртшёшьюёЄш юЄ ЁрчьхЁют юъэр. ╠юцэю т√ч√трЄ№ ¤Єє ЇєэъЎш■ яЁш шчьхэхэшш ЁрчьхЁют юъэр т яюы№чютрЄхы№ёъющ яЁюуЁрььх. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) юяЎшш, єърч√тр■Є ъръшх эєцэю шчьхэшЄ№ ярЁрьхЄЁ√:

+
    +
  • 1 - шчьхэшЄ№ ЎтхЄр ёъЁюыышэуют
  • +
  • 2 - шчьхэшыё  ЁрчьхЁ юъэр
  • +
  • 4 - шчьхэшыё  ЁрчьхЁ фюъєьхэЄр
  • +
+

╧рЁрьхЄЁ√ ьюцэю ъюьсшэшЁютрЄ№ ўхЁхч ыюушўхёъюх шыш.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_init_scroll_bars], tedit0,2
+ +

ted_init_syntax_file

+

╘єэъЎш  фы  чруЁєчъш ЎтхЄют шэЄхЁЇхщёр ш ъы■ўхт√ї ёыют шч Їрщыр ёшэЄръёшёр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),

+

3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр ёшэЄръёшёр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
+ +

ted_is_select

+

╬яЁхфхы хЄ хёЄ№ т юъэх ЁхфръЄюЁр т√фхыхээ√щ ЄхъёЄ. ┼ёыш хёЄ№ т ЁхушёЄЁ al чряшё√трхЄё  1 шэрўх 0. ╘єэъЎш  эхюсїюфшьр фы  ёючфрэш  ярэхыхщ шэёЄЁхьхэЄют, т ъюЄюЁ√ї т чртшёшьюёЄш юЄ т√фхыхэш  сєфєЄ фюёЄєяэ√ шыш чрсыюъшЁютрэ√ юяЁхфхыхээ√х ъэюяъш (фхщёЄтш ). ═ряЁшьхЁ ъэюяъє фы  ъюяшЁютрэш  т сєЇхЁ ьюцэю чрсыюъшЁютрЄ№ хёыш эхЄ т√сЁрээюую ЄхъёЄр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
push eax edi
+	mov edi,tedit0
+	call [ted_is_select]
+	cmp al,0
+.........
+pop edi eax
+ +

ted_key

+

╘єэъЎш  т√ч√трхьр  фы  ЁхръЎшш эр ъыртшрЄєЁє. ┬ ЁхушёЄЁх eax фюыцхэ с√Є№ ъюф эрцрЄющ ъыртш°ш. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) ЄрсышЎр фы  ъюэтхЁЄрЎшш scan ъюфют т ascii,

+

3) єяЁрты ■∙шх ёшьтюы√.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
mcall 66,3 ;66.3 яюыєўшЄ№ ёюёЄю эшх єяЁрты ■∙шї ъыртш°
+xor esi,esi
+mov ecx,1
+test al,0x03 ;[Shift]
+jz @f
+	mov cl,2
+	or esi,KM_SHIFT
+@@:
+test al,0x0c ;[Ctrl]
+jz @f
+	or esi,KM_CTRL
+@@:
+test al,0x30 ;[Alt]
+jz @f
+mov cl,3
+	or esi,KM_ALT
+@@:
+test al,0x80 ;[NumLock]
+jz @f
+	or esi,KM_NUMLOCK
+@@:
+
+mcall 26,2,,conv_tabl ;26.2 яюыєўшЄ№ Ёрёъырфъє ъыртшрЄєЁ√
+mcall 2 ;яюыєўрхь ъюф эрцрЄющ ъыртш°ш
+stdcall [ted_key], tedit0, conv_tabl,esi
+ +

ted_mouse

+

╘єэъЎш  эр яхЁхьх∙хэшх шыш эрцрЄшх ь√°ш.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_mouse], tedit0
+ +

ted_open_file

+

╘єэъЎш  фы  юЄъЁ√Єш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),

+

3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.

+

┬ючтЁр∙рхЄ 2 ярЁрьхЄЁр:

+

1) eax = ъюф ю°шсъш

+

2) ebx = ъюыышўхёЄтю яЁюўшЄрээ√ї срщЄ

+

╧ЁшьхЁ шёяюы№чютрэш :

+
push eax ebx
+stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
+.........
+pop ebx eax
+ +

ted_text_add

+

╘єэъЎш  фы  фюсртыхэш  ЄхъёЄр. ╧ЁшэшьрхЄ 4 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) єърчрЄхы№ эр сєЇхЁ ё ЄхъёЄюь,

+

3) фышэр ЄхъёЄр,

+

4) юяЎшш тёЄртъш.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
text_buffer db 500 dup(0)
+.........
+mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
+stdcall [ted_text_add], tedit0,text_buffer,30,ebx
+

ted_opt_ed_change_time - ЇшъёшЁютрЄ№ шчьхэхэш  фюъєьхэЄр, ўЄю-с√ шї ьюцэю с√ыю юЄьхэшЄ№. ═ряЁшьхЁ хёыш эєцэю ёфхырЄ№ эхёъюы№ъю шчьхэхэшщ ЄхъёЄр, ъюЄюЁ√х сєфєЄ юЄьхэ Є№ё  чр юфшэ Ёрч, Єю 1-х шчьхэхэшх шфхЄ ё ¤Єющ ъюэёЄрэЄющ р юёЄры№э√х эхЄ.

+

ted_opt_ed_move_cursor - ъюэёЄрэЄр ъюЄюЁр  юяЁхфхы хЄ ёфтшу ъєЁёюЁр яюёых фюсртыхэш  ЄхъёЄр.

+ +

ted_text_colored

+

╘єэъЎш  фы  ЁрчьхЄъш ЄхъёЄр ЎтхЄюь. ╬с√ўэю т√ч√трхЄё  тэєЄЁш ёрьющ сшсышюЄхъш, яЁш шчьхэхэш ї ЄхъёЄр. ┬ эхъюЄюЁ√ї ёыєўр ї ьюцхЄ яюэрфюсшЄ№ё  т√чтрЄ№ яЁшэєфшЄхы№эю шч тэх°эхщ яЁюуЁрьь√.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
push edi
+	mov edi,tedit0
+	call [ted_text_colored]
+pop edi
+ +

ted_go_to_position

+

╘єэъЎш  фы  яхЁхїюфр эр єърчрээє■ яючшЎш■. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:

+

1) ёЄЁєъЄєЁр tedit,

+

2) эюьхЁ ёЄЁюъш,

+

3) эюьхЁ ёшьтюыр.

+

╧ЁшьхЁ шёяюы№чютрэш :

+
stdcall [ted_go_to_position], tedit0,50,3
+ +

┬эєЄЁхээшх ЇєэъЎшш:

+

ted_get_text_perv_pos - яхЁхїюф эр яЁхф√фє∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'perv')

+

ted_get_text_next_pos - яхЁхїюф эр ёыхфє■∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'next')

+

ted_symbol_not_vis - юяЁхфхы хЄ тшфшь√щ ыш єърчрээ√щ ёшьтюы эр ¤ъЁрэх (т чртшёшьюёЄш + юЄ чэрўхэшщ 'tc' ш 'td')

+

ted_iterat_next - яхЁхїюф эр ёыхфє■∙шщ тшфшь√щ ёшьтюы т Ўхяш. ╚ёяюы№чєхЄ фы  + ЁрсюЄ√ ЇєэъЎшш ted_get_text_next_pos ш ted_symbol_not_vis.

+

ted_iterat_perv - яхЁхїюф эр яЁхфхфє∙шщ тшфшь√щ ёшьтюы т Ўхяш.

+ +

ted_iterat_next_pos_char - эрщЄш ёыхфє■∙є■ яючшЎш■ єърчрээюую ёшьтюыр (edx-яюч. эрўрыр + яюшёър, bl->ъюф шёъюьюую ёшьтюыр)

+

ted_get_pos_by_coords - схЁхЄ яючшЎш■ ёшьтюыр яю ъююЁфшэрЄрь (esi->ъююЁф. x, чэръ; + ecx->ъююЁф. y, ёЄЁюър)

+

ted_go_to_pos - яхЁхёЄрты хЄ ъєЁёюЁ т єърчрээє■ яючшЎш■, хёыш єърчрээр  яючшЎш  + эрїюфшЄё  тэх ¤ъЁрэр, Єю Єръцх яхЁхёЄрты ■Єё  ёъЁюышэуш (ecx->ъююЁф. x, чэръ; edx->ъююЁф. y, ёЄЁюър)

+ +

╘юЁьрЄ Їрщыр яюфётхЄъш *.syn

+ + + + + + + + + + + + + + + + +
▌ыхьхэЄ╨рчьхЁ (срщЄ)
╩юышўхёЄтю ЎтхЄют ЄхъёЄр
4
╩юышўхёЄтю яюфётхўштрхь√ї ёыют
4
╓тхЄр шэЄхЁЇхщёр
4*6
╓тхЄр фы  ЄхъёЄр
4*(ъюы. Ўт. ЄхъёЄр)
╤ЄЁєъЄєЁ√ ёю ётющёЄтрьш ш юяшёрэш ьш ёыют
sizeof(TexColViv)*(ъюы. ёыют)
╨рчфхышЄхы№э√щ ёшьтюы, ючэрўр■∙шщ эрўрыю юяшёрэшщ ёыют (тёхуфр Ёртхэ 0)
1 срщЄ
╬яшёрэш  ёыют (ёЄЁюъш ЄхъёЄр ё 0-ьш т ъюэЎх)
(фышээр ёяЁртюўэюую ЄхъёЄр + 1)
+

╟рьхўрэш .

+
    +
  • ┬ёх ёыютр фюыцэ√ с√Є№ Ёрёяюыюцхэ√ т яюЁ фъх ёыхфютрэш  шї ASCII ъюфют. + ┬ючьюцэю т сєфє∙шї тхЁёш ї ЇюЁьрЄ Їрщыют яюфётхЄъш сєфхЄ шчьхэхэ.
  • +
+ +

╤ЄЁєъЄєЁр tedit

+

╠ръЁюёр фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄхъёЄютюую ЁхфръЄюЁр эхЄ. ╧юЄюьє фрээ√х фы  эхую чрфр■Єё  тЁєўэє■. ╧ЁшьхЁ ёЄЁєъЄєЁ√ фы  ЄхъёЄютюую ЁхфръЄюЁр:

+
align 4
+tedit0: ;ёЄЁєъЄєЁр ЄхъёЄютюую ЁхфръЄюЁр
+	.wnd BOX 195,5+20,325,260 ;+ 0
+	.rec BOX 30,13,7,10   ;+16
+	.drag_m db 0 ;+32 т√фхыхэшх юЄ ь√°ш
+	.drag_k db 0 ;+33 т√фхыхэшх юЄ ъыртшрЄєЁ√
+	.sel  TexSelect 0,0,0,0 ;+34 ёЄЁєъЄєЁр т√фхыхэш 
+	.seln TexSelect ;+50 фюяюыэшЄхы№эр  ёЄЁєъЄєЁр т√фхыхэш 
+	.tex	  dd 0 ;+66 text memory pointer
+	.tex_1	  dd 0 ;+70 text first symbol pointer
+	.tex_end  dd 0 ;+74 text end memory pointer
+	.cur_x	  dd 0 ;+78 ъююЁфшэрЄр x ъєЁёюЁр
+	.cur_y	  dd 0 ;+82 ъююЁфшэрЄр y ъєЁёюЁр
+	.max_chars dd 5002 ;+86 ьръёшьры№эюх ўшёыю ёшьтюыют т юфэюь фюъєьхэЄх
+	.count_colors_text dd 1 ;+90 ъюыышўхёЄтю ЎтхЄют ЄхъёЄр
+	.count_key_words   dd 0 ;+94 ъюыышўхёЄтю ъы■ўхт√ї ёыют
+	.color_cursor	   dd 0xff0000 ;+98 ЎтхЄ ъєЁёюЁр
+	.color_wnd_capt    dd 0x0080c0 ;+102 ЎтхЄ яюыхщ тюъЁєу юъэр
+	.color_wnd_work    dd	   0x0 ;+106 ЎтхЄ Їюэр юъэр
+	.color_wnd_bord    dd 0xffffff ;+110 ЎтхЄ ЄхъёЄр эр яюы ї
+	.color_select	   dd 0x0000ff ;+114 ЎтхЄ т√фхыхэш 
+	.color_cur_text    dd 0xffff00 ;+118 ЎтхЄ ёшьтюыр яюф ъєЁёюЁюь
+	.color_wnd_text    dd 0x80ffff ;+122 ЎтхЄ ЄхъёЄр т юъэх
+	.syntax_file	   dd 0 ;+126 єърчрЄхы№ эр эрўрыю Їрщыр ёшэЄръёшёр
+	.syntax_file_size  dd 500 ;+130 ьръёшьры№э√щ ЁрчьхЁ Їрщыр ёшэЄръёшёр
+	.text_colors	   dd 0 ;+134 єърчрЄхы№ эр ьрёёшт ЎтхЄют ЄхъёЄр
+	.help_text_f1	   dd 0 ;+138 єърчрЄхы№ эр ЄхъёЄ ёяЁртъш (яю эрцрЄшш F1)
+	.help_id	   dd -1 ;+142 шфхэЄшЇшърЄюЁ фы  ёяЁртъш
+	.key_words_data    dd 0 ;+146 єърчрЄхы№ эр ёЄЁєъЄєЁ√ ъы■ўхт√ї ёыют TexColViv
+	.tim_ch      dd ? ;+150 ъюышўхёЄтю шчьхэхэшщ т Їрщых
+	.tim_undo    dd ? ;+154 ъюышўхёЄтю юЄьхэхээ√ї фхщёЄтшщ
+	.tim_ls      dd ? ;+158 тЁхь  яюёыхфэхую ёюїЁрэхэш 
+	.tim_co      dd ? ;+162 тЁхь  яюёыхфэхщ ЎтхЄютющ ЁрчьхЄъш
+	.el_focus    dd el_focus ;+166 єърчрЄхы№ эр яхЁхьхээє■ ¤ыхьхэЄр т Їюъєёх
+	.err_save    db 0 ;+170 ю°шсър ёюїЁрэхэш  Їрщыр
+	.panel_id    db 0 ;+171 эюьхЁ юЄъЁ√Єющ ярэхыш
+	.key_new     db 0 ;+172 ёшьтюы, ъюЄюЁ√щ сєфхЄ фюсрты Єё  ё ъыртшрЄєЁ√
+	.symbol_new_line db 20 ;+173 ёшьтюы чртхЁ°хэш  ёЄЁюъш
+	.scr_w	     dd scrol_w1 ;+174 тхЁЄшъры№э√щ ёъЁюыышэу
+	.scr_h	     dd scrol_h1 ;+178 уюЁшчюэЄры№э√щ ёъЁюыышэу
+	.arr_key_pos dd 0 ;+182 єърчрЄхы№ эр ьрёёшт яючшЎшщ ъы■ўхт√ї ёыют
+	.buffer      dd buf ;+186 єърчрЄхы№ эр сєЇхЁ ъюяшЁютрэш /тёЄртъш
+	.buffer_find dd 0 ;+190 єърчрЄхы№ эр сєЇхЁ фы  яюшёър
+	.cur_ins     db 1 ;+194 Ёхцшь ЁрсюЄ√ ъєЁёюЁр (юс√ўэ√щ шыш чрьхэр)
+	.mode_color  db 1 ;+195 Ёхцшь т√фхыхэш  ёыют ЎтхЄюь (0-т√ъы. 1-тъы.)
+	.mode_invis  db 0 ;+196 Ёхцшь яюърчр эхяхўрЄрхь√ї ёшьтюыют
+	.gp_opt      db 0 ;+197 юяЎшш тючтЁр∙рхь√х ЇєэъЎшхщ ted_get_pos_by_cursor
+	.fun_on_key_ctrl_all dd but_ctrl_all ;+198 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ яЁш эрцрЄшш Ctrl+N,O,S,F,H,G
+	dd 0,0,0 ;чрЁхчхЁтшЁютрэю
+	.buffer_size       dd BUF_SIZE ;+214 ЁрчьхЁ сєЇхЁр ъюяшЁютрэш /тёЄртъш
+	.fun_find_err      dd 0 ;+218 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ хёыш яюшёъ чръюэўшыё  эхєфрўэю
+	.fun_init_synt_err dd 0 ;+222 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ яЁш ю°шсюўэюь юЄъЁ√Єшш Їрщыр ёшэЄръёшёр
+	.fun_draw_panel_buttons dd 0 ;+226 єърчрЄхы№ эр ЇєэъЎш■ Ёшёютрэш  ярэхыш ё ъэюяърьш
+	.fun_draw_panels   dd 0 ;+230 єърчрЄхы№ эр ЇєэъЎш■ Ёшёютрэш  ярэхыш яюшёър/чрьхэ√/яхЁхїюфр/ёшэЄръёшёр
+	dd 0 ;чрЁхчхЁтшЁютрэю
+	.fun_save_err      dd 0 ;+238 єърчрЄхы№ эр ЇєэъЎш■ т√ч√трхьє■ хёыш ёюїЁрэхэшх Їрщыр чръюэўшыюё№ эхєфрўэю
+	.increase_size dd 225 ;+242 ўшёыю ёшьтюыют эр ъюЄюЁ√х сєфхЄ єтхўштрЄ№ё  ярь Є№ яЁш эхїтрЄъх
+	.ptr_free_symb dd   ? ;+246 єърчрЄхы№ эр ётюсюфэє■ ярь Є№, т ъюЄюЁє■ ьюцэю фюсрты Є№ ёшьтюы (шёяюы№чєхЄё  тэєЄЁш ¤ыхьхэЄр фы  єёъюЁхэш  тёЄртъш ЄхъёЄр)
+	.font_s dd ? ;+250 ёЄшыш фы  °ЁшЇЄр (юЄ 0 фю 7 ьэюцшЄхы№ фы  ЁрчьхЁр, +16 фы  тЄюЁюую ёшёЄхьэюую °ЁшЇЄр)
+
+

─юъєьхэЄрЎш  юсэюты ырё№ яюёыхфэшщ Ёрч 29.01.19.

+ + + diff --git a/programs/develop/libraries/box_lib/trunk/doc/tooltip/tooltip.htm b/programs/develop/libraries/box_lib/doc/tooltip/tooltip.htm similarity index 94% rename from programs/develop/libraries/box_lib/trunk/doc/tooltip/tooltip.htm rename to programs/develop/libraries/box_lib/doc/tooltip/tooltip.htm index e0ca1f4a2..245221a9d 100644 --- a/programs/develop/libraries/box_lib/trunk/doc/tooltip/tooltip.htm +++ b/programs/develop/libraries/box_lib/doc/tooltip/tooltip.htm @@ -1,87 +1,87 @@ - - -¤ыхьхэЄ Tooltip - - - - -

═р уыртэє■ ↑

-

╬уыртыхэшх

-

┬тхфхэшх

-

╘єэъЎшш

-

╤ЄЁєъЄєЁр фрээ√ї

-

╚ёїюфэ√щ ъюф ш яЁшьхЁ√

- -

┬тхфхэшх

-

╥єыЄшя - тёяы√тр■∙р  яюфёърчър, яюърч√трхЄё  яЁш чрфхЁцъх єърчрЄхы  ь√°ш эрф ъюэъЁхЄэющ юсырёЄ№■, юс√ўэю ¤ыхьхэЄюь єяЁртыхэш .

-

╬сырёЄ№ ъюэЄЁюы  - яЁ ьюєуюы№эшъ ё чрфрээ√ьш ъююЁфшэрЄрьш

-

╥хъёЄ ЄєыЄшяр ьюцхЄ с√Є№ ьэюуюёЄЁюўэ√ь, ё ЁрчфхышЄхыхь ъюф 13 (\r), яЁюшчтюы№э√ь ЁрчьхЁюь °ЁшЇЄр.

-

┬ яхЁтющ тхЁёшш ЄєыЄшя т√тюфшЄё  эшцх ъєЁёюЁр ь√°ш ш тяЁртю. ╙ўшЄ√трщЄх яЁш яырэшЁютрэшш шэЄхЁЇхщёр.

-

╚ёяюы№чєхЄё  фшэрьшўхёър  ярь Є№, ёююЄтхЄёЄтхээю сшсышюЄхър фюыцэ√ с√Є№ чруЁєцхэр ё ЇєэъЎш ьш

-
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
-

ш ъєўр фюыцэр с√Є№ шэшЎшрышчшЁютрэр т√чютюь SysFn 68.11

- -

╘єэъЎшш

-

┬ёх ЇєэъЎшш шёяюы№чє■Є x86-32 calling convention, stdcall.

-

▌Єю ючэрўрхЄ, ўЄю ЁхушёЄЁ√ EAX, ECX, EDX ьюуєЄ эх ёюїЁрэ Є№ ётюш чэрўхэш  яюёых т√чютр ЇєэъЎшщ.

-

╧ЁшьхЁ√ т√чютют ёьюЄЁшЄх т яЁюуЁрььх - яЁшьхЁх.

- -

tooltip_init(ttip)

-

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

-

┬ючтЁрЄ EAX==1 яЁш єёях°эюь т√фхыхэшшш ярь Єш, 0 яЁш ёсюх.

-

┬√ч√трхЄё  юфшэ Ёрч, шэшЎшрышчшЁєхЄ тёх ЄєыЄшя√, т√фхы   ярь Є№ ш ЁрёёўшЄ√тр  тэєЄЁхээшх яхЁхьхээ√х.

- -

tooltip_delete(ttip)

-

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

-

┬ючтЁрЄ - эхЄ.

-

╬ётюсюцфрхЄ т√фхыхээє■ ярь Є№.

- -

tooltip_test_show(ttip)

-

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

-

┬ючтЁрЄ - эхЄ.

-

╧юърч эєцэюую шч тёхщ Ўхяюўъш ЄєыЄшяют яЁш схчфхщёЄтшш. -─юыцэр т√ч√трЄ№ё  яЁш схчфхщёЄтшш шыш яхЁшюфшўхёъш фы  яЁютхЁъш ЄрщьхЁр. -═ряЁшьхЁ яЁш юяЁюёх ёюс√Єшщ ЇєэъЎшхщ SysFn 23 (event 0).

- -

tooltip_mouse(ttip)

-

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

-

┬ючтЁрЄ - эхЄ.

-

▌Єр ЇєэъЎш  фюыцэр т√ч√трЄ№ё  яЁш ёюс√Єшш ь√°ш. ╤ЄшЁрхЄ ЄєыЄшя яЁш т√їюфх ь√°ш шч чюэ√ ъюэЄЁюы 

- -

get_font_size(color)

-

╧рЁрьхЄЁ - ЎтхЄ ЄхъёЄр ё ЁрчьхЁюь °ЁшЇЄр, т ЇюЁьрЄх ЇєэъЎшш SysFn 4.

-

┬ючтЁрЄ - EAX = width shl 16 + height.

-

─хъюфшЁєхЄ шч ъюьсшэшЁютрээюую ЎтхЄр/ЁрчьхЁр °шЁшэє ш т√ёюЄє °ЁшЇЄр т яшъёхы ї

- -

╤ЄЁєъЄєЁр ЄєыЄшяр

-

╠ръЁюё фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄєыЄшяр эшцх, тъы■ўхэ т box_lib.mac. ═х чрс√трхь юс·хфшэшЄ№ ЄєыЄшя√ т ёяшёюъ.

-
struc tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait
-{
-    .txt     dd  txt   ; єърчрЄхы№ эр ЄхъёЄ asciiz, ЁрчфхышЄхы№ \r 13
-    .next    dd  next	; ёыхфє■∙шшщ tooltip т Ўхяюўъх шыш 0
-    .zone_y  dw  zone_y   ; чюэр ъюэЄЁюы  (т 90% ёыєўрхт ёютярфрхЄ ё ЁрчьхЁюь ъюэЄЁюыр)
-    .zone_x  dw  zone_x   ;
-    .zone_h  dw  zone_h   ;
-    .zone_w  dw  zone_w   ;
-    .col_txt dd  col_txt   ; ЎтхЄ ЄхъёЄр ЄєыЄшяр, тъы■ўр  ЁрчьхЁ SysFn4
-    .col_bkg dd  col_bkg   ; ЎтхЄ Їюэр ЄєыЄшяр
-    .tm_wait dw  tm_wait   ; тЁхь  юцшфрэш  ї10ьё
-;тЁхьхээ√х яхЁхьхээ√х
-    .font_sz dd  ?   ; font size
-    .mouse   dd  ?   ; яЁхф√фє∙хх яюыюцхэшх (x, y)
-    .tm_strt dd  ?   ; тЁхь  чряєёър ЄрщьхЁр (тїюфр ь√°ш т чюэє) ї10ьё
-    .video   dd  ?   ; ярь Є№ фы  ёюїЁрэхээюую яюф ЄєыЄшяюь
-    .video_y dw  ?    ; ъююЁфшэрЄ√ чряюьэхээющ юсырёЄш ¤ъЁрэр, шыш 0 хёыш яєёЄю
-    .video_x dw  ?
-    .video_h dw  ?    ; ЁрчьхЁ яЁхфЁрёўшЄ√трхЄё  яЁш init
-    .video_w dw  ?
-}
-
- -
-

╚ёїюфэ√щ ъюф ш яЁшьхЁ√

-

╚ёїюфэ√щ ъюф эрїюфшЄё  т сшсышюЄхъх box_lib, Їрщы tooltip.asm

-

╧ЁшьхЁ шёяюы№чютрэш  эрїюфшЄё  т box_lib\asm\trunk\tooltip_demo.asm

-

EOF

- - \ No newline at end of file + + +¤ыхьхэЄ Tooltip + + + + +

═р уыртэє■ ↑

+

╬уыртыхэшх

+

┬тхфхэшх

+

╘єэъЎшш

+

╤ЄЁєъЄєЁр фрээ√ї

+

╚ёїюфэ√щ ъюф ш яЁшьхЁ√

+ +

┬тхфхэшх

+

╥єыЄшя - тёяы√тр■∙р  яюфёърчър, яюърч√трхЄё  яЁш чрфхЁцъх єърчрЄхы  ь√°ш эрф ъюэъЁхЄэющ юсырёЄ№■, юс√ўэю ¤ыхьхэЄюь єяЁртыхэш .

+

╬сырёЄ№ ъюэЄЁюы  - яЁ ьюєуюы№эшъ ё чрфрээ√ьш ъююЁфшэрЄрьш

+

╥хъёЄ ЄєыЄшяр ьюцхЄ с√Є№ ьэюуюёЄЁюўэ√ь, ё ЁрчфхышЄхыхь ъюф 13 (\r), яЁюшчтюы№э√ь ЁрчьхЁюь °ЁшЇЄр.

+

┬ яхЁтющ тхЁёшш ЄєыЄшя т√тюфшЄё  эшцх ъєЁёюЁр ь√°ш ш тяЁртю. ╙ўшЄ√трщЄх яЁш яырэшЁютрэшш шэЄхЁЇхщёр.

+

╚ёяюы№чєхЄё  фшэрьшўхёър  ярь Є№, ёююЄтхЄёЄтхээю сшсышюЄхър фюыцэ√ с√Є№ чруЁєцхэр ё ЇєэъЎш ьш

+
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
+

ш ъєўр фюыцэр с√Є№ шэшЎшрышчшЁютрэр т√чютюь SysFn 68.11

+ +

╘єэъЎшш

+

┬ёх ЇєэъЎшш шёяюы№чє■Є x86-32 calling convention, stdcall.

+

▌Єю ючэрўрхЄ, ўЄю ЁхушёЄЁ√ EAX, ECX, EDX ьюуєЄ эх ёюїЁрэ Є№ ётюш чэрўхэш  яюёых т√чютр ЇєэъЎшщ.

+

╧ЁшьхЁ√ т√чютют ёьюЄЁшЄх т яЁюуЁрььх - яЁшьхЁх.

+ +

tooltip_init(ttip)

+

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

+

┬ючтЁрЄ EAX==1 яЁш єёях°эюь т√фхыхэшшш ярь Єш, 0 яЁш ёсюх.

+

┬√ч√трхЄё  юфшэ Ёрч, шэшЎшрышчшЁєхЄ тёх ЄєыЄшя√, т√фхы   ярь Є№ ш ЁрёёўшЄ√тр  тэєЄЁхээшх яхЁхьхээ√х.

+ +

tooltip_delete(ttip)

+

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

+

┬ючтЁрЄ - эхЄ.

+

╬ётюсюцфрхЄ т√фхыхээє■ ярь Є№.

+ +

tooltip_test_show(ttip)

+

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

+

┬ючтЁрЄ - эхЄ.

+

╧юърч эєцэюую шч тёхщ Ўхяюўъш ЄєыЄшяют яЁш схчфхщёЄтшш. +─юыцэр т√ч√трЄ№ё  яЁш схчфхщёЄтшш шыш яхЁшюфшўхёъш фы  яЁютхЁъш ЄрщьхЁр. +═ряЁшьхЁ яЁш юяЁюёх ёюс√Єшщ ЇєэъЎшхщ SysFn 23 (event 0).

+ +

tooltip_mouse(ttip)

+

╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.

+

┬ючтЁрЄ - эхЄ.

+

▌Єр ЇєэъЎш  фюыцэр т√ч√трЄ№ё  яЁш ёюс√Єшш ь√°ш. ╤ЄшЁрхЄ ЄєыЄшя яЁш т√їюфх ь√°ш шч чюэ√ ъюэЄЁюы 

+ +

get_font_size(color)

+

╧рЁрьхЄЁ - ЎтхЄ ЄхъёЄр ё ЁрчьхЁюь °ЁшЇЄр, т ЇюЁьрЄх ЇєэъЎшш SysFn 4.

+

┬ючтЁрЄ - EAX = width shl 16 + height.

+

─хъюфшЁєхЄ шч ъюьсшэшЁютрээюую ЎтхЄр/ЁрчьхЁр °шЁшэє ш т√ёюЄє °ЁшЇЄр т яшъёхы ї

+ +

╤ЄЁєъЄєЁр ЄєыЄшяр

+

╠ръЁюё фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄєыЄшяр эшцх, тъы■ўхэ т box_lib.mac. ═х чрс√трхь юс·хфшэшЄ№ ЄєыЄшя√ т ёяшёюъ.

+
struc tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait
+{
+    .txt     dd  txt   ; єърчрЄхы№ эр ЄхъёЄ asciiz, ЁрчфхышЄхы№ \r 13
+    .next    dd  next	; ёыхфє■∙шшщ tooltip т Ўхяюўъх шыш 0
+    .zone_y  dw  zone_y   ; чюэр ъюэЄЁюы  (т 90% ёыєўрхт ёютярфрхЄ ё ЁрчьхЁюь ъюэЄЁюыр)
+    .zone_x  dw  zone_x   ;
+    .zone_h  dw  zone_h   ;
+    .zone_w  dw  zone_w   ;
+    .col_txt dd  col_txt   ; ЎтхЄ ЄхъёЄр ЄєыЄшяр, тъы■ўр  ЁрчьхЁ SysFn4
+    .col_bkg dd  col_bkg   ; ЎтхЄ Їюэр ЄєыЄшяр
+    .tm_wait dw  tm_wait   ; тЁхь  юцшфрэш  ї10ьё
+;тЁхьхээ√х яхЁхьхээ√х
+    .font_sz dd  ?   ; font size
+    .mouse   dd  ?   ; яЁхф√фє∙хх яюыюцхэшх (x, y)
+    .tm_strt dd  ?   ; тЁхь  чряєёър ЄрщьхЁр (тїюфр ь√°ш т чюэє) ї10ьё
+    .video   dd  ?   ; ярь Є№ фы  ёюїЁрэхээюую яюф ЄєыЄшяюь
+    .video_y dw  ?    ; ъююЁфшэрЄ√ чряюьэхээющ юсырёЄш ¤ъЁрэр, шыш 0 хёыш яєёЄю
+    .video_x dw  ?
+    .video_h dw  ?    ; ЁрчьхЁ яЁхфЁрёўшЄ√трхЄё  яЁш init
+    .video_w dw  ?
+}
+
+ +
+

╚ёїюфэ√щ ъюф ш яЁшьхЁ√

+

╚ёїюфэ√щ ъюф эрїюфшЄё  т сшсышюЄхъх box_lib, Їрщы tooltip.asm

+

╧ЁшьхЁ шёяюы№чютрэш  эрїюфшЄё  т box_lib\asm\tooltip_demo.asm

+

EOF

+ + diff --git a/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_size.png b/programs/develop/libraries/box_lib/doc/tree_list/info_size.png similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/tree_list/info_size.png rename to programs/develop/libraries/box_lib/doc/tree_list/info_size.png diff --git a/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm b/programs/develop/libraries/box_lib/doc/tree_list/info_treelist.htm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm rename to programs/develop/libraries/box_lib/doc/tree_list/info_treelist.htm diff --git a/programs/develop/libraries/box_lib/trunk/doc/tree_list/window_tree_list.png b/programs/develop/libraries/box_lib/doc/tree_list/window_tree_list.png similarity index 100% rename from programs/develop/libraries/box_lib/trunk/doc/tree_list/window_tree_list.png rename to programs/develop/libraries/box_lib/doc/tree_list/window_tree_list.png diff --git a/programs/develop/libraries/box_lib/trunk/editbox.asm b/programs/develop/libraries/box_lib/editbox.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/editbox.asm rename to programs/develop/libraries/box_lib/editbox.asm diff --git a/programs/develop/libraries/box_lib/trunk/filebrowser.asm b/programs/develop/libraries/box_lib/filebrowser.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/filebrowser.asm rename to programs/develop/libraries/box_lib/filebrowser.asm diff --git a/programs/develop/libraries/box_lib/trunk/frame.asm b/programs/develop/libraries/box_lib/frame.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/frame.asm rename to programs/develop/libraries/box_lib/frame.asm diff --git a/programs/develop/libraries/box_lib/trunk/keys.inc b/programs/develop/libraries/box_lib/keys.inc similarity index 100% rename from programs/develop/libraries/box_lib/trunk/keys.inc rename to programs/develop/libraries/box_lib/keys.inc diff --git a/programs/develop/libraries/box_lib/trunk/menubar.asm b/programs/develop/libraries/box_lib/menubar.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/menubar.asm rename to programs/develop/libraries/box_lib/menubar.asm diff --git a/programs/develop/libraries/box_lib/trunk/optionbox.asm b/programs/develop/libraries/box_lib/optionbox.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/optionbox.asm rename to programs/develop/libraries/box_lib/optionbox.asm diff --git a/programs/develop/libraries/box_lib/trunk/pathshow.asm b/programs/develop/libraries/box_lib/pathshow.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/pathshow.asm rename to programs/develop/libraries/box_lib/pathshow.asm diff --git a/programs/develop/libraries/box_lib/trunk/progressbar.asm b/programs/develop/libraries/box_lib/progressbar.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/progressbar.asm rename to programs/develop/libraries/box_lib/progressbar.asm diff --git a/programs/develop/libraries/box_lib/trunk/readme.txt b/programs/develop/libraries/box_lib/readme.txt similarity index 100% rename from programs/develop/libraries/box_lib/trunk/readme.txt rename to programs/develop/libraries/box_lib/readme.txt diff --git a/programs/develop/libraries/box_lib/trunk/run.bat b/programs/develop/libraries/box_lib/run.bat similarity index 100% rename from programs/develop/libraries/box_lib/trunk/run.bat rename to programs/develop/libraries/box_lib/run.bat diff --git a/programs/develop/libraries/box_lib/trunk/scrollbar.asm b/programs/develop/libraries/box_lib/scrollbar.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/scrollbar.asm rename to programs/develop/libraries/box_lib/scrollbar.asm diff --git a/programs/develop/libraries/box_lib/trunk/t_edit.asm b/programs/develop/libraries/box_lib/t_edit.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/t_edit.asm rename to programs/develop/libraries/box_lib/t_edit.asm diff --git a/programs/develop/libraries/box_lib/trunk/tl_nod_16.bmp b/programs/develop/libraries/box_lib/tl_nod_16.bmp similarity index 100% rename from programs/develop/libraries/box_lib/trunk/tl_nod_16.bmp rename to programs/develop/libraries/box_lib/tl_nod_16.bmp diff --git a/programs/develop/libraries/box_lib/trunk/tl_nod_16_w.bmp b/programs/develop/libraries/box_lib/tl_nod_16_w.bmp similarity index 100% rename from programs/develop/libraries/box_lib/trunk/tl_nod_16_w.bmp rename to programs/develop/libraries/box_lib/tl_nod_16_w.bmp diff --git a/programs/develop/libraries/box_lib/trunk/tl_sys_16.bmp b/programs/develop/libraries/box_lib/tl_sys_16.bmp similarity index 100% rename from programs/develop/libraries/box_lib/trunk/tl_sys_16.bmp rename to programs/develop/libraries/box_lib/tl_sys_16.bmp diff --git a/programs/develop/libraries/box_lib/trunk/tl_sys_16_w.bmp b/programs/develop/libraries/box_lib/tl_sys_16_w.bmp similarity index 100% rename from programs/develop/libraries/box_lib/trunk/tl_sys_16_w.bmp rename to programs/develop/libraries/box_lib/tl_sys_16_w.bmp diff --git a/programs/develop/libraries/box_lib/trunk/tooltip.asm b/programs/develop/libraries/box_lib/tooltip.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/tooltip.asm rename to programs/develop/libraries/box_lib/tooltip.asm diff --git a/programs/develop/libraries/box_lib/trunk/tree_list.asm b/programs/develop/libraries/box_lib/tree_list.asm similarity index 100% rename from programs/develop/libraries/box_lib/trunk/tree_list.asm rename to programs/develop/libraries/box_lib/tree_list.asm diff --git a/programs/develop/libraries/crypt_des/example/crypt_files.asm b/programs/develop/libraries/crypt_des/example/crypt_files.asm index 076b14ecb..a83343f3f 100644 --- a/programs/develop/libraries/crypt_des/example/crypt_files.asm +++ b/programs/develop/libraries/crypt_des/example/crypt_files.asm @@ -1,474 +1,480 @@ -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, 0, sys_path - -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../KOSfuncs.inc' -include '../../../../load_lib.mac' -include '../../../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../../../dll.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Шифрование алгоритмом DES 21.05.25',0 ;подпись окна - -struct FileInfoBlock - Function dd ? - Position dd ? - Flags dd ? - Count dd ? - Buffer dd ? - db ? - FileName dd ? -ends - -run_file_70 FileInfoBlock -image_data dd 0 ;указатель на временную память. для нужен преобразования изображения - -fn_toolbar db 'toolbar.png',0 -IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 -IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*5 -image_data_toolbar dd 0 - -IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением - -max_open_file_size equ 64*1024 ;64 Kb - -macro load_image_file path,buf,size { ;макрос для загрузки изображений - ;path - может быть переменной или строковым параметром - if path eqtype '' ;проверяем задан ли строкой параметр path - jmp @f - local .path_str - .path_str db path ;формируем локальную переменную - db 0 - @@: - ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0x0 - else - copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой - end if - - stdcall mem.Alloc, dword size ;выделяем память для изображения - mov [buf],eax - - mov eax,SF_FILE - mov [run_file_70.Function], SSF_READ_FILE - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], dword size - m2m [run_file_70.Buffer], [buf] - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения - cmp ebx,0xffffffff - je @f - ;определяем вид изображения и переводим его во временный буфер image_data - stdcall [img_decode], [buf],ebx,0 - mov [image_data],eax - ;преобразуем изображение к формату rgb - stdcall [img_to_rgb2], [image_data],[buf] - ;удаляем временный буфер image_data - stdcall [img_destroy], [image_data] - @@: -} - - - -align 4 -start: - load_libraries l_libs_start,l_libs_end - ;проверка на сколько удачно загузилась библиотека - mov ebp,lib_0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall SF_TERMINATE_PROCESS - @@: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - mcall SF_SET_EVENTS_MASK,0xC0000027 - stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога - - stdcall [buf2d_create], buf_0 ;создание буфера - - load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE - stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер - stdcall mem.Free,[image_data_toolbar] ;освобождаем память - stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит - stdcall [buf2d_convert_text_matrix], buf_1 - - load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE - - stdcall mem.Alloc,max_open_file_size - mov dword[open_file],eax - - call but_new_file - -align 4 -red_win: - call draw_window - -align 4 -still: - mcall SF_WAIT_EVENT - - cmp al,EV_REDRAW - jz red_win - cmp al,EV_KEY - jz key - cmp al,EV_BUTTON - jz button - cmp al,EV_MOUSE - jne @f - jmp mouse - @@: - jmp still - -align 4 -draw_window: -pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - ; *** рисование главного окна (выполняется 1 раз при запуске) *** - mov edx,[sc.work] - or edx,(3 shl 24)+0x10000000+0x20000000 - mov edi,caption - mcall SF_CREATE_WINDOW, (20 shl 16)+480, (20 shl 16)+410 - - ; *** создание кнопок на панель *** - mov esi,[sc.work_button] - mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3 - mcall ,(30 shl 16)+20,,4 - mcall ,(55 shl 16)+20,,5 - mcall ,(85 shl 16)+20,,6 - mcall ,(110 shl 16)+20,,7 - - ; *** рисование иконок на кнопках *** - mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new - - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon open - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon save - int 0x40 - - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(30 shl 16) ; - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ; - int 0x40 - - stdcall [edit_box_draw], edit1 - - ; *** рисование буфера *** - stdcall [buf2d_draw], buf_0 - - mcall SF_REDRAW,SSF_END_DRAW -popad - ret - -align 4 -key: - mcall SF_GET_KEY - stdcall [edit_box_key], dword edit1 - jmp still - -align 4 -mouse: - stdcall [edit_box_mouse], edit1 - jmp still - -align 4 -button: - mcall SF_GET_BUTTON - cmp ah,3 - jne @f - call but_new_file - @@: - cmp ah,4 - jne @f - call but_open_file - @@: - cmp ah,5 - jne @f - call but_save_file - @@: - cmp ah,6 - jne @f - call but_1 - @@: - cmp ah,7 - jne @f - call but_2 - @@: - cmp ah,1 - jne still -.exit: - stdcall [buf2d_delete],buf_0 - stdcall [buf2d_delete],buf_1 ;удаляем буфер - stdcall mem.Free,[image_data_toolbar] - stdcall mem.Free,[open_file] - mcall SF_TERMINATE_PROCESS - - -align 4 -but_new_file: - mov dword[open_file_size],0 - call draw_file - ret - -align 4 -open_file dd 0 ;указатель на память для открытия файлов -open_file_size dd 0 ;размер открытого файла (должен быть не больше max_open_file_size) - -align 4 -but_open_file: - pushad - copy_path open_dialog_name,communication_area_default_path,file_name,0 - mov [OpenDialog_data.type],0 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_open_file - ;код при удачном открытии диалога - - mov eax,SF_FILE - mov [run_file_70.Function], SSF_READ_FILE - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], max_open_file_size - m2m [run_file_70.Buffer], [open_file] - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения - cmp ebx,0xffffffff - je .end_open_file - - mov [open_file_size],ebx - add ebx,[open_file] - mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом - mcall SF_SET_CAPTION,1,openfile_path - - call draw_file - .end_open_file: - popad - ret - -align 4 -draw_file: -pushad - stdcall [buf2d_clear], buf_0, [buf_0.color] - cmp dword[open_file_size],0 - je .open_file - mov eax,[open_file] - mov ebx,3 - mov edx,[open_file_size] - .cycle_0: - mov edi,txt_buf - mov esi,eax - mov ecx,56 - ;cld - rep movsb - mov byte[edi],0 - mov edi,txt_buf - mov ecx,56 - .cycle_1: - cmp byte[edi],0 - je @f - cmp byte[edi],13 - je @f - jmp .ok - @@: - mov byte[edi],' ' ;непечатные символы заменяем на пробел - .ok: - inc edi - loop .cycle_1 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,4,ebx,0xb0 - sub edx,56 - cmp edx,1 - jl @f - add eax,56 - add ebx,10 - cmp ebx,[buf_0.h] - jl .cycle_0 - jmp @f - .open_file: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 - @@: - stdcall [buf2d_draw], buf_0 -popad - ret - -align 4 -but_save_file: - pushad - copy_path open_dialog_name,communication_area_default_path,file_name,0 - mov [OpenDialog_data.type],1 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_save_file - ;код при удачном открытии диалога - - mov eax,SF_FILE - mov [run_file_70.Function], SSF_CREATE_FILE - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov ebx, dword[open_file] - mov [run_file_70.Buffer], ebx - mov ebx,[open_file_size] - mov dword[run_file_70.Count], ebx ;размер файла - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mov ebx,run_file_70 - int 0x40 ;сохраняем файл изображения - ;cmp ebx,0xffffffff - ;je .end_save_file - ; ... сообщение о неудачном сохранении ... - - .end_save_file: - popad - ret - -align 4 -but_1: -push eax - mov eax,[open_file_size] - shr eax,3 - stdcall [des_encryption], txt_key,mem_key,[open_file],eax -pop eax - call draw_file - ret - -align 4 -but_2: -push eax - mov eax,[open_file_size] - shr eax,3 - stdcall [des_decryption], txt_key,mem_key,[open_file],eax -pop eax - call draw_file - ret - -;данные для диалога открытия файлов -align 4 -OpenDialog_data: -.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию -.procinfo dd procinfo ;+4 -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_path dd plugin_path ;+16 -.dir_default_path dd default_dir ;+20 -.start_path dd file_name ;+24 путь к диалогу открытия файлов -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_path dd openfile_path ;+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 - -default_dir db '/sys',0 - -communication_area_name: - db 'FFFFFFFF_open_dialog',0 -open_dialog_name: - db 'opendial',0 -communication_area_default_path: - db '/sys/File managers/',0 - -Filter: -dd Filter.end - Filter ;.1 -.1: -db 'TXT',0 -db 'ASM',0 -.end: -db 0 - - -system_dir_0 db '/sys/lib/' -lib_name_0 db 'proc_lib.obj',0 -system_dir_1 db '/sys/lib/' -lib_name_1 db 'libimg.obj',0 -system_dir_2 db '/sys/lib/' -lib_name_2 db 'buf2d.obj',0 -system_dir_3 db '/sys/lib/' -lib_name_3 db 'crypt_des.obj',0 -system_dir_4 db '/sys/lib/' -lib_name_4 db 'box_lib.obj',0 - -l_libs_start: - lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib - lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg - lib_2 l_libs lib_name_2, library_path, system_dir_2, import_buf2d - lib_3 l_libs lib_name_3, library_path, system_dir_3, import_des - lib_4 l_libs lib_name_4, library_path, system_dir_4, import_box_lib -l_libs_end: - -include '../../libs-dev/libimg/import.inc' - -align 4 -import_proclib: ;описание экспортируемых функций - OpenDialog_Init dd aOpenDialog_Init - OpenDialog_Start dd aOpenDialog_Start -dd 0,0 - aOpenDialog_Init db 'OpenDialog_init',0 - aOpenDialog_Start db 'OpenDialog_start',0 - -include '../../buf2d/import.inc' - -align 4 -import_des: ;описание экспортируемых функций - des_encryption dd sz_des_encryption - des_decryption dd sz_des_decryption -dd 0,0 - sz_des_encryption db 'des_encryption',0 - sz_des_decryption db 'des_decryption',0 - -include '../../box_lib/import.inc' - -align 4 -buf_0: dd 0 ;указатель на буфер изображения - dw 5 ;+4 left - dw 31 ;+6 top -.w: dd 456 ;+8 w -.h: dd 350 ;+12 h -.color: dd 0xffffd0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_1: - dd 0 ;указатель на буфер изображения - dw 25 ;+4 left - dw 25 ;+6 top - dd 128 ;+8 w - dd 144 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -edit1 edit_box 58, 140,8, 0xffffff, 0xff, 0x80ff, 0, 0x8000, 8, txt_key, mouse_dd, ed_focus+ed_always_focus,8,8 - -txt_openfile db 'Откройте файл для шифрования или дешифрования.',0 -txt_key db 'des_0123',0 - -align 16 -i_end: - txt_buf rb 80 - mem_key rb 120 - mouse_dd rd 1 - procinfo process_information - sc system_colors - rb 2048 -stacktop: - sys_path rb 1024 - file_name rb 1024 ;4096 - library_path rb 1024 - plugin_path rb 4096 - openfile_path rb 4096 - filename_area rb 256 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1, start, i_end, mem, stacktop, 0, sys_path + +include '../../../../macros.inc' +include '../../../../proc32.inc' +include '../../../../KOSfuncs.inc' +include '../../../../load_lib.mac' +include '../../../../develop/libraries/box_lib/box_lib.mac' +include '../../../../dll.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load +caption db 'Шифрование алгоритмом DES 21.05.25',0 ;подпись окна + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + db ? + FileName dd ? +ends + +run_file_70 FileInfoBlock +image_data dd 0 ;указатель на временную память. для нужен преобразования изображения + +fn_toolbar db 'toolbar.png',0 +IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 +IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*5 +image_data_toolbar dd 0 + +IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением + +max_open_file_size equ 64*1024 ;64 Kb + +macro load_image_file path,buf,size { ;макрос для загрузки изображений + ;path - может быть переменной или строковым параметром + if path eqtype '' ;проверяем задан ли строкой параметр path + jmp @f + local .path_str + .path_str db path ;формируем локальную переменную + db 0 + @@: + ;32 - стандартный адрес по которому должен быть буфер с системным путем + copy_path .path_str,[32],file_name,0x0 + else + copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + end if + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov eax,SF_FILE + mov [run_file_70.Function], SSF_READ_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], [buf] + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall [img_decode], [buf],ebx,0 + mov [image_data],eax + ;преобразуем изображение к формату rgb + stdcall [img_to_rgb2], [image_data],[buf] + ;удаляем временный буфер image_data + stdcall [img_destroy], [image_data] + @@: +} + + + +align 4 +start: + load_libraries l_libs_start,l_libs_end + ;проверка на сколько удачно загузилась библиотека + mov ebp,lib_0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall SF_TERMINATE_PROCESS + @@: + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + mcall SF_SET_EVENTS_MASK,0xC0000027 + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + + stdcall [buf2d_create], buf_0 ;создание буфера + + load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE + stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер + stdcall mem.Free,[image_data_toolbar] ;освобождаем память + stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_1 + + load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE + + stdcall mem.Alloc,max_open_file_size + mov dword[open_file],eax + + call but_new_file + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall SF_WAIT_EVENT + + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + cmp al,EV_MOUSE + jne @f + jmp mouse + @@: + jmp still + +align 4 +draw_window: +pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + ; *** рисование главного окна (выполняется 1 раз при запуске) *** + mov edx,[sc.work] + or edx,(3 shl 24)+0x10000000+0x20000000 + mov edi,caption + mcall SF_CREATE_WINDOW, (20 shl 16)+480, (20 shl 16)+410 + + ; *** создание кнопок на панель *** + mov esi,[sc.work_button] + mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3 + mcall ,(30 shl 16)+20,,4 + mcall ,(55 shl 16)+20,,5 + mcall ,(85 shl 16)+20,,6 + mcall ,(110 shl 16)+20,,7 + + ; *** рисование иконок на кнопках *** + mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon open + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon save + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(30 shl 16) ; + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ; + int 0x40 + + stdcall [edit_box_draw], edit1 + + ; *** рисование буфера *** + stdcall [buf2d_draw], buf_0 + + mcall SF_REDRAW,SSF_END_DRAW +popad + ret + +align 4 +key: + mcall SF_GET_KEY + stdcall [edit_box_key], dword edit1 + jmp still + +align 4 +mouse: + stdcall [edit_box_mouse], edit1 + jmp still + +align 4 +button: + mcall SF_GET_BUTTON + cmp ah,3 + jne @f + call but_new_file + @@: + cmp ah,4 + jne @f + call but_open_file + @@: + cmp ah,5 + jne @f + call but_save_file + @@: + cmp ah,6 + jne @f + call but_1 + @@: + cmp ah,7 + jne @f + call but_2 + @@: + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 + stdcall [buf2d_delete],buf_1 ;удаляем буфер + stdcall mem.Free,[image_data_toolbar] + stdcall mem.Free,[open_file] + mcall SF_TERMINATE_PROCESS + + +align 4 +but_new_file: + mov dword[open_file_size],0 + call draw_file + ret + +align 4 +open_file dd 0 ;указатель на память для открытия файлов +open_file_size dd 0 ;размер открытого файла (должен быть не больше max_open_file_size) + +align 4 +but_open_file: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],0 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_open_file + ;код при удачном открытии диалога + + mov eax,SF_FILE + mov [run_file_70.Function], SSF_READ_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], max_open_file_size + m2m [run_file_70.Buffer], [open_file] + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je .end_open_file + + mov [open_file_size],ebx + add ebx,[open_file] + mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом + mcall SF_SET_CAPTION,1,openfile_path + + call draw_file + .end_open_file: + popad + ret + +align 4 +draw_file: +pushad + stdcall [buf2d_clear], buf_0, [buf_0.color] + cmp dword[open_file_size],0 + je .open_file + mov eax,[open_file] + mov ebx,3 + mov edx,[open_file_size] + .cycle_0: + mov edi,txt_buf + mov esi,eax + mov ecx,56 + ;cld + rep movsb + mov byte[edi],0 + mov edi,txt_buf + mov ecx,56 + .cycle_1: + cmp byte[edi],0 + je @f + cmp byte[edi],13 + je @f + jmp .ok + @@: + mov byte[edi],' ' ;непечатные символы заменяем на пробел + .ok: + inc edi + loop .cycle_1 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,4,ebx,0xb0 + sub edx,56 + cmp edx,1 + jl @f + add eax,56 + add ebx,10 + cmp ebx,[buf_0.h] + jl .cycle_0 + jmp @f + .open_file: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 + @@: + stdcall [buf2d_draw], buf_0 +popad + ret + +align 4 +but_save_file: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_save_file + ;код при удачном открытии диалога + + mov eax,SF_FILE + mov [run_file_70.Function], SSF_CREATE_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov ebx, dword[open_file] + mov [run_file_70.Buffer], ebx + mov ebx,[open_file_size] + mov dword[run_file_70.Count], ebx ;размер файла + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mov ebx,run_file_70 + int 0x40 ;сохраняем файл изображения + ;cmp ebx,0xffffffff + ;je .end_save_file + ; ... сообщение о неудачном сохранении ... + + .end_save_file: + popad + ret + +align 4 +but_1: +push eax + mov eax,[open_file_size] + shr eax,3 + stdcall [des_encryption], txt_key,mem_key,[open_file],eax +pop eax + call draw_file + ret + +align 4 +but_2: +push eax + mov eax,[open_file_size] + shr eax,3 + stdcall [des_decryption], txt_key,mem_key,[open_file],eax +pop eax + call draw_file + ret + +;данные для диалога открытия файлов +align 4 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 путь к диалогу открытия файлов +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+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 + +default_dir db '/sys',0 + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_name: + db 'opendial',0 +communication_area_default_path: + db '/sys/File managers/',0 + +Filter: +dd Filter.end - Filter ;.1 +.1: +db 'TXT',0 +db 'ASM',0 +.end: +db 0 + + +system_dir_0 db '/sys/lib/' +lib_name_0 db 'proc_lib.obj',0 +system_dir_1 db '/sys/lib/' +lib_name_1 db 'libimg.obj',0 +system_dir_2 db '/sys/lib/' +lib_name_2 db 'buf2d.obj',0 +system_dir_3 db '/sys/lib/' +lib_name_3 db 'crypt_des.obj',0 +system_dir_4 db '/sys/lib/' +lib_name_4 db 'box_lib.obj',0 + +l_libs_start: + lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib + lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg + lib_2 l_libs lib_name_2, library_path, system_dir_2, import_buf2d + lib_3 l_libs lib_name_3, library_path, system_dir_3, import_des + lib_4 l_libs lib_name_4, library_path, system_dir_4, import_box_lib +l_libs_end: + +include '../../libs-dev/libimg/import.inc' + +align 4 +import_proclib: ;описание экспортируемых функций + OpenDialog_Init dd aOpenDialog_Init + OpenDialog_Start dd aOpenDialog_Start +dd 0,0 + aOpenDialog_Init db 'OpenDialog_init',0 + aOpenDialog_Start db 'OpenDialog_start',0 + +include '../../buf2d/import.inc' + +align 4 +import_des: ;описание экспортируемых функций + des_encryption dd sz_des_encryption + des_decryption dd sz_des_decryption +dd 0,0 + sz_des_encryption db 'des_encryption',0 + sz_des_decryption db 'des_decryption',0 + +include '../../box_lib/import.inc' + +align 4 +buf_0: dd 0 ;указатель на буфер изображения + dw 5 ;+4 left + dw 31 ;+6 top +.w: dd 456 ;+8 w +.h: dd 350 ;+12 h +.color: dd 0xffffd0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_1: + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 128 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +edit1 edit_box 58, 140,8, 0xffffff, 0xff, 0x80ff, 0, 0x8000, 8, txt_key, mouse_dd, ed_focus+ed_always_focus,8,8 + +txt_openfile db 'Откройте файл для шифрования или дешифрования.',0 +txt_key db 'des_0123',0 + +align 16 +i_end: + txt_buf rb 80 + mem_key rb 120 + mouse_dd rd 1 + procinfo process_information + sc system_colors + rb 2048 +stacktop: + sys_path rb 1024 + file_name rb 1024 ;4096 + library_path rb 1024 + plugin_path rb 4096 + openfile_path rb 4096 + filename_area rb 256 +mem: diff --git a/programs/develop/libraries/exif/examples/viev_exif.asm b/programs/develop/libraries/exif/examples/viev_exif.asm index c11c20ff6..c39f9452f 100644 --- a/programs/develop/libraries/exif/examples/viev_exif.asm +++ b/programs/develop/libraries/exif/examples/viev_exif.asm @@ -1,724 +1,730 @@ -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, 0, sys_path - -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../KOSfuncs.inc' -include '../../../../load_img.inc' -include '../../../../load_lib.mac' -include '../../../../develop/libraries/box_lib/trunk/box_lib.mac' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Просмотр информации Exif 11.03.16',0 ;подпись окна - -run_file_70 FileInfoBlock - -fn_toolbar db 'toolbar.png',0 -IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 -image_data_toolbar dd 0 - -memory_file_size dd 512*1024 ;размер памяти для открытия файлов (в начале 512 Kb, но может увеличиватся при необходимости) - -align 4 -start: - load_libraries l_libs_start,l_libs_end - ;проверка на сколько удачно загузилась библиотека - mov ebp,lib_0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall SF_TERMINATE_PROCESS - @@: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - mcall SF_SET_EVENTS_MASK,0xC0000027 - stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога - - stdcall [buf2d_create], buf_0 ;создание буфера - stdcall [buf2d_create], buf_thumb - - load_image_file 'font8x9.bmp', image_data_toolbar - stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер - stdcall mem.Free,[image_data_toolbar] ;освобождаем память - stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит - stdcall [buf2d_convert_text_matrix], buf_1 - - load_image_file fn_toolbar, image_data_toolbar - - stdcall mem.Alloc,[memory_file_size] - mov dword[open_file],eax - - call but_new_file - -align 4 -red_win: - call draw_window - -align 4 -still: - mcall SF_WAIT_EVENT - - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 ;мышь - jne @f - jmp mouse - @@: - jmp still - -align 4 -draw_window: -pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - ; *** рисование главного окна (выполняется 1 раз при запуске) *** - mov edx,[sc.work] - or edx,(3 shl 24)+0x30000000 - mov edi,caption - mcall SF_CREATE_WINDOW, (20 shl 16)+590, (20 shl 16)+540 - - ; *** создание кнопок на панель *** - mov esi,[sc.work_button] - mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3 - - mov ebx,(30 shl 16)+20 - mov edx,4 - int 0x40 - - mov ebx,(55 shl 16)+20 - mov edx,5 - int 0x40 - - mov ebx,(85 shl 16)+20 - mov edx,6 - int 0x40 - - mov ebx,(110 shl 16)+20 - mov edx,7 - int 0x40 - - mov ebx,(135 shl 16)+20 - mov edx,8 - int 0x40 - - mov ebx,(160 shl 16)+20 - mov edx,9 - int 0x40 - - ; *** рисование иконок на кнопках *** - mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new - - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon open - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon save - int 0x40 - - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(30 shl 16) ;app1 text - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;app1 gps - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;app2 text - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;app2 thumbnail - int 0x40 - - ; *** рисование буфера *** - stdcall [buf2d_draw], buf_0 - - mcall SF_REDRAW,SSF_END_DRAW -popad - ret - -align 4 -key: - mcall SF_GET_KEY - jmp still - -align 4 -mouse: - - jmp still - -align 4 -button: - mcall SF_GET_BUTTON - cmp ah,3 - jne @f - call but_new_file - @@: - cmp ah,4 - jne @f - call but_open_file - @@: - cmp ah,5 - jne @f - call but_save_file - @@: - cmp ah,6 - jne @f - call draw_file_1 ;основная информация - @@: - cmp ah,7 - jne @f - call draw_file_2 ;информация по GPS - @@: - cmp ah,8 - jne @f - call draw_file_3 ;информация app2 - @@: - cmp ah,9 - jne @f - call draw_file_4 - @@: - cmp ah,1 - jne still -.exit: - stdcall [buf2d_delete],buf_0 - stdcall [buf2d_delete],buf_1 ;удаляем буфер - stdcall [buf2d_delete],buf_thumb - stdcall mem.Free,[image_data_toolbar] - stdcall mem.Free,[open_file] - mcall SF_TERMINATE_PROCESS - - -align 4 -but_new_file: - mov dword[open_file_size],0 - call draw_file_1 - ret - -align 4 -open_file dd 0 ;указатель на память для открытия файлов -open_file_size dd 0 ;размер открытого файла (должен быть не больше memory_file_size) - -align 4 -but_open_file: - pushad - copy_path open_dialog_name,communication_area_default_path,file_name,0 - mov [OpenDialog_data.type],0 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_open_file - ;код при удачном открытии диалога - - mov [run_file_70.Function], SSF_GET_INFO - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], 0 - m2m [run_file_70.Buffer], [open_file] - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall SF_FILE,run_file_70 - cmp eax,0 - jne .end_open_file - - mov eax,[open_file] - mov ebx,[eax+32] ;dword[eax+32] - размер открываемого файла - mov [open_file_size],ebx ;ebx - размер открываемого файла - ;memory_file_size - размер выделенной памяти для файла - cmp [memory_file_size],ebx - jge @f - ;увеличиваем память если не хватило - mov [memory_file_size],ebx - stdcall mem.ReAlloc, [open_file],ebx - mov [open_file],eax - @@: - - mov [run_file_70.Function], SSF_READ_FILE - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - m2m dword[run_file_70.Count], dword[open_file_size] - m2m dword[run_file_70.Buffer],dword[open_file] - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall SF_FILE,run_file_70 ;загружаем файл изображения - cmp ebx,0xffffffff - je .end_open_file - - mov [open_file_size],ebx - ;add ebx,dword[open_file] - ;mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом - stdcall [exif_get_app1], [open_file],h_app1 - mcall SF_SET_CAPTION,1,openfile_path - - call draw_file_1 - .end_open_file: - popad - ret - -;description: -; информация exif из app1 -; текстовые и числовые данные -align 4 -draw_file_1: -pushad - stdcall [buf2d_clear], buf_0, [buf_0.color] - cmp dword[open_file_size],0 - je .open_file - - mov eax,1 - mov ebx,1 - .cycle_0: - stdcall [exif_get_tag], h_app1,eax,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 - inc eax - add ebx,10 - cmp byte[txt_buf],0 - jne .cycle_0 - - ;считываем дочерние теги для 0x8769 - stdcall [exif_get_child], h_app1,h_child,0x8769 - cmp dword[h_child],0 - je .no_found_child - - mov eax,1 - sub ebx,5 - .cycle_1: - stdcall [exif_get_tag], h_child,eax,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 - inc eax - add ebx,10 - cmp byte[txt_buf],0 - jne .cycle_1 - - jmp @f - .no_found_child: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 - jmp @f - .open_file: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 - @@: - stdcall [buf2d_draw], buf_0 -popad - ret - -;description: -; информация exif из app1 -; данные о gps -align 4 -draw_file_2: -pushad - stdcall [buf2d_clear], buf_0, [buf_0.color] - cmp dword[open_file_size],0 - je .open_file - - mov eax,1 - mov ebx,1 - .cycle_0: - stdcall [exif_get_tag], h_app1,eax,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 - inc eax - add ebx,10 - cmp byte[txt_buf],0 - jne .cycle_0 - - ;считываем дочерние теги для 0x8825 - stdcall [exif_get_child], h_app1,h_child,0x8825 - cmp dword[h_child],0 - je .no_found_child - - mov eax,1 - sub ebx,5 - .cycle_1: - stdcall [exif_get_tag], h_child,eax,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 - inc eax - add ebx,10 - cmp byte[txt_buf],0 - jne .cycle_1 - - jmp @f - .no_found_child: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 - jmp @f - .open_file: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 - @@: - stdcall [buf2d_draw], buf_0 -popad - ret - -;description: -; информация exif из app2 -; текстовые и числовые данные -align 4 -draw_file_3: -pushad - stdcall [buf2d_clear], buf_0, [buf_0.color] - cmp dword[open_file_size],0 - je .open_file - - mov eax,1 - mov ebx,1 - .cycle_0: - stdcall [exif_get_tag], h_app1,eax,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 - inc eax - add ebx,10 - cmp byte[txt_buf],0 - jne .cycle_0 - - ;находим app2 - stdcall [exif_get_app2], h_app1,h_child - cmp dword[h_child],0 - je .no_found_child - - mov eax,1 ;25 - sub ebx,5 - .cycle_1: - stdcall [exif_get_tag], h_child,eax,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 - inc eax - add ebx,10 - cmp byte[txt_buf],0 - jne .cycle_1 - - jmp @f - .no_found_child: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 - jmp @f - .open_file: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 - @@: - stdcall [buf2d_draw], buf_0 -popad - ret - -;description: -; информация exif из app2 -; картинка для камер Nikon -align 4 -draw_file_4: -pushad - stdcall [buf2d_clear], buf_0, [buf_0.color] - cmp dword[open_file_size],0 - je .open_file - - ;выводим общую информацию по снимку: - ;0x010f - Manufacturer of digicam - ;0x0110 - Model - ;0x0132 - Modify date - mov ebx,3 - stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 - add ebx,10 - stdcall [exif_get_tag_id], h_app1,0x0110,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 - add ebx,10 - stdcall [exif_get_tag_id], h_app1,0x0132,txt_buf,80 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 - add ebx,20 - - ;находим app2 - stdcall [exif_get_app2], h_app1,h_child - cmp dword[h_child],0 - je .no_found_child - - ;считываем дочерние теги - ;0x0011 - Preview IFD - stdcall [exif_get_child], h_child,h_child,0x0011 - cmp dword[h_child],0 - je .no_found_child - - ;0x0202 - Preview Image Length - stdcall [exif_get_child], h_child,h_child_siz,0x0202 - cmp dword[h_child_siz],0 - je .no_found_child - - ;0x0201 - Preview Image Start - stdcall [exif_get_child], h_child,h_child,0x0201 - cmp dword[h_child],0 - je .no_found_child - - stdcall [img_decode],dword[h_child],dword[h_child_siz],0 - cmp dword[eax+4],1 - jl .no_found_child - cmp dword[eax+8],1 - jl .no_found_child - mov ebx,eax - stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1 - ;преобразуем изображение к формату rgb - stdcall [img_to_rgb2],ebx,[buf_thumb] - stdcall [img_destroy],ebx ;удаляем временный буфер ebx - - mov ebx,43 - stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,ebx,0xb000 - add ebx,10 - stdcall [buf2d_bit_blt], buf_0, 0,ebx, buf_thumb ;рисуем изображение - jmp @f - - .no_found_child: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 - jmp @f - .open_file: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 - @@: - stdcall [buf2d_draw], buf_0 -popad - ret - -align 4 -but_save_file: - pushad - copy_path open_dialog_name,communication_area_default_path,file_name,0 - mov [OpenDialog_data.type],1 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_save_file - ;код при удачном открытии диалога - - mov [run_file_70.Function], SSF_CREATE_FILE - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - -if 1 ;ставим 1 если сохраняется все изображение - mov ebx, dword[open_file] - mov [run_file_70.Buffer], ebx - mov ebx,[open_file_size] -end if -if 0 ;ставим 1 если сохраняется эскиз изображения - ;находим app2 - stdcall [exif_get_app2], h_app1,h_child - cmp dword[h_child],0 - je .end_save_file - ;считываем дочерние теги - stdcall [exif_get_child], h_child,h_child,0x0011 - cmp dword[h_child],0 - je .end_save_file - stdcall [exif_get_child], h_child,h_child,0x0201 - cmp dword[h_child],0 - je .end_save_file - - mov ebx,dword[h_child] ;dword[open_file] - mov [run_file_70.Buffer], ebx - mov ebx,dword[h_child_siz] ;размер эскиза изображения -end if - mov dword[run_file_70.Count], ebx ;размер файла - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall SF_FILE,run_file_70 ;сохраняем файл - ;cmp ebx,0xffffffff - ;je .end_save_file - ; ... сообщение о неудачном сохранении ... - - .end_save_file: - popad - ret - -;данные для диалога открытия файлов -align 4 -OpenDialog_data: -.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию -.procinfo dd procinfo ;+4 -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_path dd plugin_path ;+16 -.dir_default_path dd default_dir ;+20 -.start_path dd file_name ;+24 путь к диалогу открытия файлов -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_path dd openfile_path ;+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 - -default_dir db '/sys',0 - -communication_area_name: - db 'FFFFFFFF_open_dialog',0 -open_dialog_name: - db 'opendial',0 -communication_area_default_path: - db '/sys/File managers/',0 - -Filter: -dd Filter.end - Filter ;.1 -.1: -db 'JPG',0 -db 'JPEG',0 -.end: -db 0 - - - -system_dir_0 db '/sys/lib/' -lib_name_0 db 'proc_lib.obj',0 -system_dir_1 db '/sys/lib/' -lib_name_1 db 'libimg.obj',0 -system_dir_2 db '/sys/lib/' -lib_name_2 db 'buf2d.obj',0 -system_dir_3 db '/sys/lib/' -lib_name_3 db 'exif.obj',0 - -l_libs_start: - lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib - lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg - lib_2 l_libs lib_name_2, file_name, system_dir_2, import_buf2d - lib_3 l_libs lib_name_3, file_name, system_dir_3, import_exif -l_libs_end: - -align 4 -import_libimg: - dd alib_init1 - img_is_img dd aimg_is_img - img_info dd aimg_info - img_from_file dd aimg_from_file - img_to_file dd aimg_to_file - img_from_rgb dd aimg_from_rgb - img_to_rgb dd aimg_to_rgb - img_to_rgb2 dd aimg_to_rgb2 - img_decode dd aimg_decode - img_encode dd aimg_encode - img_create dd aimg_create - img_destroy dd aimg_destroy - img_destroy_layer dd aimg_destroy_layer - img_count dd aimg_count - img_lock_bits dd aimg_lock_bits - img_unlock_bits dd aimg_unlock_bits - img_flip dd aimg_flip - img_flip_layer dd aimg_flip_layer - img_rotate dd aimg_rotate - img_rotate_layer dd aimg_rotate_layer - img_draw dd aimg_draw - - dd 0,0 - alib_init1 db 'lib_init',0 - aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение - aimg_info db 'img_info',0 - aimg_from_file db 'img_from_file',0 - aimg_to_file db 'img_to_file',0 - aimg_from_rgb db 'img_from_rgb',0 - aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB - aimg_to_rgb2 db 'img_to_rgb2',0 - aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных - aimg_encode db 'img_encode',0 - aimg_create db 'img_create',0 - aimg_destroy db 'img_destroy',0 - aimg_destroy_layer db 'img_destroy_layer',0 - aimg_count db 'img_count',0 - aimg_lock_bits db 'img_lock_bits',0 - aimg_unlock_bits db 'img_unlock_bits',0 - aimg_flip db 'img_flip',0 - aimg_flip_layer db 'img_flip_layer',0 - aimg_rotate db 'img_rotate',0 - aimg_rotate_layer db 'img_rotate_layer',0 - aimg_draw db 'img_draw',0 - -align 4 -import_proclib: ;описание экспортируемых функций - OpenDialog_Init dd aOpenDialog_Init - OpenDialog_Start dd aOpenDialog_Start -dd 0,0 - aOpenDialog_Init db 'OpenDialog_init',0 - aOpenDialog_Start db 'OpenDialog_start',0 - -align 4 -import_buf2d: - init dd sz_init - buf2d_create dd sz_buf2d_create - buf2d_create_f_img dd sz_buf2d_create_f_img - buf2d_clear dd sz_buf2d_clear - buf2d_draw dd sz_buf2d_draw - buf2d_delete dd sz_buf2d_delete - buf2d_resize dd sz_buf2d_resize - buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 - buf2d_bit_blt dd sz_buf2d_bit_blt - buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix - buf2d_draw_text dd sz_buf2d_draw_text - dd 0,0 - sz_init db 'lib_init',0 - sz_buf2d_create db 'buf2d_create',0 - sz_buf2d_create_f_img db 'buf2d_create_f_img',0 - sz_buf2d_clear db 'buf2d_clear',0 - sz_buf2d_draw db 'buf2d_draw',0 - sz_buf2d_delete db 'buf2d_delete',0 - sz_buf2d_resize db 'buf2d_resize',0 - sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 - sz_buf2d_bit_blt db 'buf2d_bit_blt',0 - sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 - sz_buf2d_draw_text db 'buf2d_draw_text',0 - -align 4 -import_exif: ;описание экспортируемых функций - exif_get_app1 dd sz_exif_get_app1 - exif_get_app2 dd sz_exif_get_app2 - exif_get_tag dd sz_exif_get_tag - exif_get_tag_id dd sz_exif_get_tag_id - exif_get_child dd sz_exif_get_child - -dd 0,0 - sz_exif_get_app1 db 'exif_get_app1',0 - sz_exif_get_app2 db 'exif_get_app2',0 - sz_exif_get_tag db 'exif_get_tag',0 - sz_exif_get_tag_id db 'exif_get_tag_id',0 - sz_exif_get_child db 'exif_get_child',0 - - -sc system_colors - -align 16 -procinfo process_information - -align 4 -buf_0: dd 0 ;указатель на буфер изображения - dw 5 ;+4 left - dw 31 ;+6 top -.w: dd 570 ;+8 w -.h: dd 480 ;+12 h -.color: dd 0xffffd0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_1: - dd 0 ;указатель на буфер изображения - dw 25 ;+4 left - dw 25 ;+6 top - dd 128 ;+8 w - dd 144 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_thumb: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd 120 ;+8 w - dd 100 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -h_app1 rb 14 ;структура для заголовка главных тегов -h_child rb 14 ;структура для заголовка дочерних тегов -h_child_siz rb 14 - -txt_openfile db 'Откройте файл изображения в формате *.jpg.',0 -txt_thumb db 'Это эскиз изображения из данных app2.',0 -txt_nochild db 'Информация по этой кнопке не найдена.',0 -txt_buf rb 80 - -align 16 -i_end: - rb 2048 -stacktop: - sys_path rb 1024 - file_name rb 4096 - plugin_path rb 4096 - openfile_path rb 4096 - filename_area rb 256 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1, start, i_end, mem, stacktop, 0, sys_path + +include '../../../../macros.inc' +include '../../../../proc32.inc' +include '../../../../KOSfuncs.inc' +include '../../../../load_img.inc' +include '../../../../load_lib.mac' +include '../../../../develop/libraries/box_lib/box_lib.mac' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load +caption db 'Просмотр информации Exif 11.03.16',0 ;подпись окна + +run_file_70 FileInfoBlock + +fn_toolbar db 'toolbar.png',0 +IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 +image_data_toolbar dd 0 + +memory_file_size dd 512*1024 ;размер памяти для открытия файлов (в начале 512 Kb, но может увеличиватся при необходимости) + +align 4 +start: + load_libraries l_libs_start,l_libs_end + ;проверка на сколько удачно загузилась библиотека + mov ebp,lib_0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall SF_TERMINATE_PROCESS + @@: + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + mcall SF_SET_EVENTS_MASK,0xC0000027 + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + + stdcall [buf2d_create], buf_0 ;создание буфера + stdcall [buf2d_create], buf_thumb + + load_image_file 'font8x9.bmp', image_data_toolbar + stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер + stdcall mem.Free,[image_data_toolbar] ;освобождаем память + stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_1 + + load_image_file fn_toolbar, image_data_toolbar + + stdcall mem.Alloc,[memory_file_size] + mov dword[open_file],eax + + call but_new_file + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall SF_WAIT_EVENT + + cmp al,1 + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 ;мышь + jne @f + jmp mouse + @@: + jmp still + +align 4 +draw_window: +pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + ; *** рисование главного окна (выполняется 1 раз при запуске) *** + mov edx,[sc.work] + or edx,(3 shl 24)+0x30000000 + mov edi,caption + mcall SF_CREATE_WINDOW, (20 shl 16)+590, (20 shl 16)+540 + + ; *** создание кнопок на панель *** + mov esi,[sc.work_button] + mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3 + + mov ebx,(30 shl 16)+20 + mov edx,4 + int 0x40 + + mov ebx,(55 shl 16)+20 + mov edx,5 + int 0x40 + + mov ebx,(85 shl 16)+20 + mov edx,6 + int 0x40 + + mov ebx,(110 shl 16)+20 + mov edx,7 + int 0x40 + + mov ebx,(135 shl 16)+20 + mov edx,8 + int 0x40 + + mov ebx,(160 shl 16)+20 + mov edx,9 + int 0x40 + + ; *** рисование иконок на кнопках *** + mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon open + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon save + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(30 shl 16) ;app1 text + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;app1 gps + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;app2 text + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;app2 thumbnail + int 0x40 + + ; *** рисование буфера *** + stdcall [buf2d_draw], buf_0 + + mcall SF_REDRAW,SSF_END_DRAW +popad + ret + +align 4 +key: + mcall SF_GET_KEY + jmp still + +align 4 +mouse: + + jmp still + +align 4 +button: + mcall SF_GET_BUTTON + cmp ah,3 + jne @f + call but_new_file + @@: + cmp ah,4 + jne @f + call but_open_file + @@: + cmp ah,5 + jne @f + call but_save_file + @@: + cmp ah,6 + jne @f + call draw_file_1 ;основная информация + @@: + cmp ah,7 + jne @f + call draw_file_2 ;информация по GPS + @@: + cmp ah,8 + jne @f + call draw_file_3 ;информация app2 + @@: + cmp ah,9 + jne @f + call draw_file_4 + @@: + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 + stdcall [buf2d_delete],buf_1 ;удаляем буфер + stdcall [buf2d_delete],buf_thumb + stdcall mem.Free,[image_data_toolbar] + stdcall mem.Free,[open_file] + mcall SF_TERMINATE_PROCESS + + +align 4 +but_new_file: + mov dword[open_file_size],0 + call draw_file_1 + ret + +align 4 +open_file dd 0 ;указатель на память для открытия файлов +open_file_size dd 0 ;размер открытого файла (должен быть не больше memory_file_size) + +align 4 +but_open_file: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],0 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_open_file + ;код при удачном открытии диалога + + mov [run_file_70.Function], SSF_GET_INFO + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], 0 + m2m [run_file_70.Buffer], [open_file] + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall SF_FILE,run_file_70 + cmp eax,0 + jne .end_open_file + + mov eax,[open_file] + mov ebx,[eax+32] ;dword[eax+32] - размер открываемого файла + mov [open_file_size],ebx ;ebx - размер открываемого файла + ;memory_file_size - размер выделенной памяти для файла + cmp [memory_file_size],ebx + jge @f + ;увеличиваем память если не хватило + mov [memory_file_size],ebx + stdcall mem.ReAlloc, [open_file],ebx + mov [open_file],eax + @@: + + mov [run_file_70.Function], SSF_READ_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + m2m dword[run_file_70.Count], dword[open_file_size] + m2m dword[run_file_70.Buffer],dword[open_file] + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall SF_FILE,run_file_70 ;загружаем файл изображения + cmp ebx,0xffffffff + je .end_open_file + + mov [open_file_size],ebx + ;add ebx,dword[open_file] + ;mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом + stdcall [exif_get_app1], [open_file],h_app1 + mcall SF_SET_CAPTION,1,openfile_path + + call draw_file_1 + .end_open_file: + popad + ret + +;description: +; информация exif из app1 +; текстовые и числовые данные +align 4 +draw_file_1: +pushad + stdcall [buf2d_clear], buf_0, [buf_0.color] + cmp dword[open_file_size],0 + je .open_file + + mov eax,1 + mov ebx,1 + .cycle_0: + stdcall [exif_get_tag], h_app1,eax,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + inc eax + add ebx,10 + cmp byte[txt_buf],0 + jne .cycle_0 + + ;считываем дочерние теги для 0x8769 + stdcall [exif_get_child], h_app1,h_child,0x8769 + cmp dword[h_child],0 + je .no_found_child + + mov eax,1 + sub ebx,5 + .cycle_1: + stdcall [exif_get_tag], h_child,eax,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 + inc eax + add ebx,10 + cmp byte[txt_buf],0 + jne .cycle_1 + + jmp @f + .no_found_child: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 + jmp @f + .open_file: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 + @@: + stdcall [buf2d_draw], buf_0 +popad + ret + +;description: +; информация exif из app1 +; данные о gps +align 4 +draw_file_2: +pushad + stdcall [buf2d_clear], buf_0, [buf_0.color] + cmp dword[open_file_size],0 + je .open_file + + mov eax,1 + mov ebx,1 + .cycle_0: + stdcall [exif_get_tag], h_app1,eax,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + inc eax + add ebx,10 + cmp byte[txt_buf],0 + jne .cycle_0 + + ;считываем дочерние теги для 0x8825 + stdcall [exif_get_child], h_app1,h_child,0x8825 + cmp dword[h_child],0 + je .no_found_child + + mov eax,1 + sub ebx,5 + .cycle_1: + stdcall [exif_get_tag], h_child,eax,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 + inc eax + add ebx,10 + cmp byte[txt_buf],0 + jne .cycle_1 + + jmp @f + .no_found_child: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 + jmp @f + .open_file: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 + @@: + stdcall [buf2d_draw], buf_0 +popad + ret + +;description: +; информация exif из app2 +; текстовые и числовые данные +align 4 +draw_file_3: +pushad + stdcall [buf2d_clear], buf_0, [buf_0.color] + cmp dword[open_file_size],0 + je .open_file + + mov eax,1 + mov ebx,1 + .cycle_0: + stdcall [exif_get_tag], h_app1,eax,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + inc eax + add ebx,10 + cmp byte[txt_buf],0 + jne .cycle_0 + + ;находим app2 + stdcall [exif_get_app2], h_app1,h_child + cmp dword[h_child],0 + je .no_found_child + + mov eax,1 ;25 + sub ebx,5 + .cycle_1: + stdcall [exif_get_tag], h_child,eax,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 + inc eax + add ebx,10 + cmp byte[txt_buf],0 + jne .cycle_1 + + jmp @f + .no_found_child: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 + jmp @f + .open_file: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 + @@: + stdcall [buf2d_draw], buf_0 +popad + ret + +;description: +; информация exif из app2 +; картинка для камер Nikon +align 4 +draw_file_4: +pushad + stdcall [buf2d_clear], buf_0, [buf_0.color] + cmp dword[open_file_size],0 + je .open_file + + ;выводим общую информацию по снимку: + ;0x010f - Manufacturer of digicam + ;0x0110 - Model + ;0x0132 - Modify date + mov ebx,3 + stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + add ebx,10 + stdcall [exif_get_tag_id], h_app1,0x0110,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + add ebx,10 + stdcall [exif_get_tag_id], h_app1,0x0132,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + add ebx,20 + + ;находим app2 + stdcall [exif_get_app2], h_app1,h_child + cmp dword[h_child],0 + je .no_found_child + + ;считываем дочерние теги + ;0x0011 - Preview IFD + stdcall [exif_get_child], h_child,h_child,0x0011 + cmp dword[h_child],0 + je .no_found_child + + ;0x0202 - Preview Image Length + stdcall [exif_get_child], h_child,h_child_siz,0x0202 + cmp dword[h_child_siz],0 + je .no_found_child + + ;0x0201 - Preview Image Start + stdcall [exif_get_child], h_child,h_child,0x0201 + cmp dword[h_child],0 + je .no_found_child + + stdcall [img_decode],dword[h_child],dword[h_child_siz],0 + cmp dword[eax+4],1 + jl .no_found_child + cmp dword[eax+8],1 + jl .no_found_child + mov ebx,eax + stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1 + ;преобразуем изображение к формату rgb + stdcall [img_to_rgb2],ebx,[buf_thumb] + stdcall [img_destroy],ebx ;удаляем временный буфер ebx + + mov ebx,43 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,ebx,0xb000 + add ebx,10 + stdcall [buf2d_bit_blt], buf_0, 0,ebx, buf_thumb ;рисуем изображение + jmp @f + + .no_found_child: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 + jmp @f + .open_file: + stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 + @@: + stdcall [buf2d_draw], buf_0 +popad + ret + +align 4 +but_save_file: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_save_file + ;код при удачном открытии диалога + + mov [run_file_70.Function], SSF_CREATE_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + +if 1 ;ставим 1 если сохраняется все изображение + mov ebx, dword[open_file] + mov [run_file_70.Buffer], ebx + mov ebx,[open_file_size] +end if +if 0 ;ставим 1 если сохраняется эскиз изображения + ;находим app2 + stdcall [exif_get_app2], h_app1,h_child + cmp dword[h_child],0 + je .end_save_file + ;считываем дочерние теги + stdcall [exif_get_child], h_child,h_child,0x0011 + cmp dword[h_child],0 + je .end_save_file + stdcall [exif_get_child], h_child,h_child,0x0201 + cmp dword[h_child],0 + je .end_save_file + + mov ebx,dword[h_child] ;dword[open_file] + mov [run_file_70.Buffer], ebx + mov ebx,dword[h_child_siz] ;размер эскиза изображения +end if + mov dword[run_file_70.Count], ebx ;размер файла + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall SF_FILE,run_file_70 ;сохраняем файл + ;cmp ebx,0xffffffff + ;je .end_save_file + ; ... сообщение о неудачном сохранении ... + + .end_save_file: + popad + ret + +;данные для диалога открытия файлов +align 4 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 путь к диалогу открытия файлов +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+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 + +default_dir db '/sys',0 + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_name: + db 'opendial',0 +communication_area_default_path: + db '/sys/File managers/',0 + +Filter: +dd Filter.end - Filter ;.1 +.1: +db 'JPG',0 +db 'JPEG',0 +.end: +db 0 + + + +system_dir_0 db '/sys/lib/' +lib_name_0 db 'proc_lib.obj',0 +system_dir_1 db '/sys/lib/' +lib_name_1 db 'libimg.obj',0 +system_dir_2 db '/sys/lib/' +lib_name_2 db 'buf2d.obj',0 +system_dir_3 db '/sys/lib/' +lib_name_3 db 'exif.obj',0 + +l_libs_start: + lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib + lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg + lib_2 l_libs lib_name_2, file_name, system_dir_2, import_buf2d + lib_3 l_libs lib_name_3, file_name, system_dir_3, import_exif +l_libs_end: + +align 4 +import_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + + dd 0,0 + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',0 + +align 4 +import_proclib: ;описание экспортируемых функций + OpenDialog_Init dd aOpenDialog_Init + OpenDialog_Start dd aOpenDialog_Start +dd 0,0 + aOpenDialog_Init db 'OpenDialog_init',0 + aOpenDialog_Start db 'OpenDialog_start',0 + +align 4 +import_buf2d: + init dd sz_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_resize dd sz_buf2d_resize + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + dd 0,0 + sz_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_resize db 'buf2d_resize',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + +align 4 +import_exif: ;описание экспортируемых функций + exif_get_app1 dd sz_exif_get_app1 + exif_get_app2 dd sz_exif_get_app2 + exif_get_tag dd sz_exif_get_tag + exif_get_tag_id dd sz_exif_get_tag_id + exif_get_child dd sz_exif_get_child + +dd 0,0 + sz_exif_get_app1 db 'exif_get_app1',0 + sz_exif_get_app2 db 'exif_get_app2',0 + sz_exif_get_tag db 'exif_get_tag',0 + sz_exif_get_tag_id db 'exif_get_tag_id',0 + sz_exif_get_child db 'exif_get_child',0 + + +sc system_colors + +align 16 +procinfo process_information + +align 4 +buf_0: dd 0 ;указатель на буфер изображения + dw 5 ;+4 left + dw 31 ;+6 top +.w: dd 570 ;+8 w +.h: dd 480 ;+12 h +.color: dd 0xffffd0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_1: + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 128 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_thumb: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd 120 ;+8 w + dd 100 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +h_app1 rb 14 ;структура для заголовка главных тегов +h_child rb 14 ;структура для заголовка дочерних тегов +h_child_siz rb 14 + +txt_openfile db 'Откройте файл изображения в формате *.jpg.',0 +txt_thumb db 'Это эскиз изображения из данных app2.',0 +txt_nochild db 'Информация по этой кнопке не найдена.',0 +txt_buf rb 80 + +align 16 +i_end: + rb 2048 +stacktop: + sys_path rb 1024 + file_name rb 4096 + plugin_path rb 4096 + openfile_path rb 4096 + filename_area rb 256 +mem: diff --git a/programs/develop/libraries/fontslib/trunk/font_ex.asm b/programs/develop/libraries/fontslib/trunk/font_ex.asm index 623e7ae72..98853e172 100644 --- a/programs/develop/libraries/fontslib/trunk/font_ex.asm +++ b/programs/develop/libraries/fontslib/trunk/font_ex.asm @@ -1,206 +1,212 @@ -; Copyright (c) 2009, -; 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 Alexey Teplov nickname ''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 ; транслятор, использующий 32 разрядных команды - org 0x0 ; базовый адрес кода, всегда 0x0 - db 'MENUET01' ; идентификатор исполняемого файла (8 байт) - dd 0x1 ; версия формата заголовка исполняемого файла - dd start ; адрес, на который система передаёт управление - ; после загрузки приложения в память - dd mem ; размер приложения - dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта - dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше - dd 0x0 ; указатель на строку с параметрами. - dd way_of_ini -include '../../../../macros.inc' -include '../../../../KOSfuncs.inc' -include '../../../../load_lib.mac' -include '../../box_lib/trunk/box_lib.mac' - @use_library ;use load lib macros -start: -;universal load library/librarys -sys_load_libraries l_libs_start,end_l_libs -;if return code =-1 then exit, else nornary work - cmp eax,-1 - jz exit - mcall 40,0x27 ;установить маску для ожидаемых событий - - mov eax,48 - mov ebx,3 - mov ecx,sc - mov edx,sizeof.system_colors - mcall - mov eax,dword [sc.work] - mov dword [con_colors+4],eax - -; mcall 66,1,0 - call [initialization_font] ; инициализация списка шрифтов - push dword (8 shl 16 +16) ; поиск нужного шрифта в наборе шрифтов (пока доступен только 8х16) - call [get_font] - test eax,eax ;нашли ? - jnz exit -;;;;;;;;;;;;;;;;;;;; - mcall 40,0x27 ;установить маску для ожидаемых событий -red_win: - call draw_window ;первоначально необходимо нарисовать окно -align 4 -still: ;основной обработчик - mcall 10 ;Ожидать события - dec eax - jz red_win - dec eax - jz key - dec eax - jz button - - push dword edit1 - call [edit_box_mouse] - - jmp still ;если ничего из перечисленного то снова в цикл -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -button: - mcall 17 ;получить идентификатор нажатой клавиши - test ah,ah ;если в ah 0, то перейти на обработчик событий still - jz still -exit: - call [free_fulder_info] - call [free_font] - mcall -1 -key: - mcall 2 ;загрузим значение 2 в регистор eax и получим код нажатой клавиши - - push dword edit1 - call [edit_box_key] - - - mcall 13,<20,650>,<40,16>, dword[con_colors+4] - - - push dword 20 shl 16 + 40 ; esp+12= dd x shl 16 + y x- координата по Х, y - координата по Y - push dword con_colors ; esp+8 = dd point to color of background and font - push dword text ; esp+4 = dd point to ASCIIZ -; esp+0 = dd back - call [font_draw_on_string] ; вывести по глифам строчку - - - jmp still - -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -align 4 -draw_window: ;рисование окна приложения - mcall 12,1 - xor eax,eax ;обнулить eax - mov ebx,50*65536+680 ;[координата по оси x]*65536 + [размер по оси x] - mov ecx,30*65536+200 ;[координата по оси y]*65536 + [размер по оси y] - mov edx,[sc.work] ; color of work area RRGGBB,8->color gl - or edx,0x34000000 - mov edi,hed - mcall ;нарисовать окно приложения - - push dword edit1 - call [edit_box_draw] -; - push dword 20 shl 16 + 40 ; esp+12= dd x shl 16 + y x- координата по Х, y - координата по Y - push dword con_colors ; esp+8 = dd point to color of background and font - push dword text; esp+4 = dd point to ASCIIZ -; esp+0 = dd back - call [font_draw_on_string] ; вывести по глифам строчку - mov eax,12 ;Функция 12 - начать/закончить перерисовку окна. - mov ebx,2 ;Подфункция 2 - закончить перерисовку окна. - mcall - ret -;;;;;;;;;;;; -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -;DATA данные -l_libs_start: -library01 l_libs library_name, library_path, system_path, font_import -library02 l_libs library_name1, library_path, system_path1, import_box_lib -end_l_libs: - -; -system_path db '/sys/lib/' -library_name db 'fonts_lib.obj',0 - -system_path1 db '/sys/lib/' -library_name1 db 'box_lib.obj',0 - -align 4 -import_box_lib: - -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 - - dd 0,0 - -aEdit_box_draw db 'edit_box_draw',0 -aEdit_box_key db 'edit_box_key',0 -aEdit_box_mouse db 'edit_box_mouse',0 -aVersion_ed db 'version_ed',0 - -font_import: -initialization_font dd a_initialization_font -get_font dd a_get_font -free_fulder_info dd a_free_fulder_info -free_font dd a_free_font -font_draw_on_string dd a_font_draw_on_string -show_all_glif dd a_show_all_glif -Version_fn dd a_Version_fn - dd 0,0 - -a_initialization_font db 'initialization_font',0 -a_get_font db 'get_font',0 -a_free_fulder_info db 'free_fulder_info',0 -a_free_font db 'free_font',0 -a_font_draw_on_string db 'font_draw_on_string',0 -a_show_all_glif db 'show_all_glif',0 -a_Version_fn db 'version_fn',0 - - - -edit1 edit_box 350,175,5,0xffffff,0x6f9480,0,0xAABBCC,0,test_leght,text,ed_focus,text_end-text-1,text_end-text-1 - -text db 'Пример использования библиотеки шрифтов fonts_lib.obj',0 -text_end: -rb 256 -test_leght = ($-text)-1 - -hed db "Font's demo ",0 -align 4 -con_colors dd 0x1E1EFF, 0x96FFCF - -align 4 -sc system_colors -way_of_ini rb 4096 -library_path rb 4096 - -align 4 -i_end: -rb 1024 -mem: - ;конец кода \ No newline at end of file +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +; Copyright (c) 2009, +; 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 Alexey Teplov nickname ''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 ; транслятор, использующий 32 разрядных команды + org 0x0 ; базовый адрес кода, всегда 0x0 + db 'MENUET01' ; идентификатор исполняемого файла (8 байт) + dd 0x1 ; версия формата заголовка исполняемого файла + dd start ; адрес, на который система передаёт управление + ; после загрузки приложения в память + dd mem ; размер приложения + dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта + dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше + dd 0x0 ; указатель на строку с параметрами. + dd way_of_ini +include '../../../../macros.inc' +include '../../../../KOSfuncs.inc' +include '../../../../load_lib.mac' +include '../../box_lib/box_lib.mac' + @use_library ;use load lib macros +start: +;universal load library/librarys +sys_load_libraries l_libs_start,end_l_libs +;if return code =-1 then exit, else nornary work + cmp eax,-1 + jz exit + mcall 40,0x27 ;установить маску для ожидаемых событий + + mov eax,48 + mov ebx,3 + mov ecx,sc + mov edx,sizeof.system_colors + mcall + mov eax,dword [sc.work] + mov dword [con_colors+4],eax + +; mcall 66,1,0 + call [initialization_font] ; инициализация списка шрифтов + push dword (8 shl 16 +16) ; поиск нужного шрифта в наборе шрифтов (пока доступен только 8х16) + call [get_font] + test eax,eax ;нашли ? + jnz exit +;;;;;;;;;;;;;;;;;;;; + mcall 40,0x27 ;установить маску для ожидаемых событий +red_win: + call draw_window ;первоначально необходимо нарисовать окно +align 4 +still: ;основной обработчик + mcall 10 ;Ожидать события + dec eax + jz red_win + dec eax + jz key + dec eax + jz button + + push dword edit1 + call [edit_box_mouse] + + jmp still ;если ничего из перечисленного то снова в цикл +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +button: + mcall 17 ;получить идентификатор нажатой клавиши + test ah,ah ;если в ah 0, то перейти на обработчик событий still + jz still +exit: + call [free_fulder_info] + call [free_font] + mcall -1 +key: + mcall 2 ;загрузим значение 2 в регистор eax и получим код нажатой клавиши + + push dword edit1 + call [edit_box_key] + + + mcall 13,<20,650>,<40,16>, dword[con_colors+4] + + + push dword 20 shl 16 + 40 ; esp+12= dd x shl 16 + y x- координата по Х, y - координата по Y + push dword con_colors ; esp+8 = dd point to color of background and font + push dword text ; esp+4 = dd point to ASCIIZ +; esp+0 = dd back + call [font_draw_on_string] ; вывести по глифам строчку + + + jmp still + +;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +align 4 +draw_window: ;рисование окна приложения + mcall 12,1 + xor eax,eax ;обнулить eax + mov ebx,50*65536+680 ;[координата по оси x]*65536 + [размер по оси x] + mov ecx,30*65536+200 ;[координата по оси y]*65536 + [размер по оси y] + mov edx,[sc.work] ; color of work area RRGGBB,8->color gl + or edx,0x34000000 + mov edi,hed + mcall ;нарисовать окно приложения + + push dword edit1 + call [edit_box_draw] +; + push dword 20 shl 16 + 40 ; esp+12= dd x shl 16 + y x- координата по Х, y - координата по Y + push dword con_colors ; esp+8 = dd point to color of background and font + push dword text; esp+4 = dd point to ASCIIZ +; esp+0 = dd back + call [font_draw_on_string] ; вывести по глифам строчку + mov eax,12 ;Функция 12 - начать/закончить перерисовку окна. + mov ebx,2 ;Подфункция 2 - закончить перерисовку окна. + mcall + ret +;;;;;;;;;;;; +;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +;DATA данные +l_libs_start: +library01 l_libs library_name, library_path, system_path, font_import +library02 l_libs library_name1, library_path, system_path1, import_box_lib +end_l_libs: + +; +system_path db '/sys/lib/' +library_name db 'fonts_lib.obj',0 + +system_path1 db '/sys/lib/' +library_name1 db 'box_lib.obj',0 + +align 4 +import_box_lib: + +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 + + dd 0,0 + +aEdit_box_draw db 'edit_box_draw',0 +aEdit_box_key db 'edit_box_key',0 +aEdit_box_mouse db 'edit_box_mouse',0 +aVersion_ed db 'version_ed',0 + +font_import: +initialization_font dd a_initialization_font +get_font dd a_get_font +free_fulder_info dd a_free_fulder_info +free_font dd a_free_font +font_draw_on_string dd a_font_draw_on_string +show_all_glif dd a_show_all_glif +Version_fn dd a_Version_fn + dd 0,0 + +a_initialization_font db 'initialization_font',0 +a_get_font db 'get_font',0 +a_free_fulder_info db 'free_fulder_info',0 +a_free_font db 'free_font',0 +a_font_draw_on_string db 'font_draw_on_string',0 +a_show_all_glif db 'show_all_glif',0 +a_Version_fn db 'version_fn',0 + + + +edit1 edit_box 350,175,5,0xffffff,0x6f9480,0,0xAABBCC,0,test_leght,text,ed_focus,text_end-text-1,text_end-text-1 + +text db 'Пример использования библиотеки шрифтов fonts_lib.obj',0 +text_end: +rb 256 +test_leght = ($-text)-1 + +hed db "Font's demo ",0 +align 4 +con_colors dd 0x1E1EFF, 0x96FFCF + +align 4 +sc system_colors +way_of_ini rb 4096 +library_path rb 4096 + +align 4 +i_end: +rb 1024 +mem: + ;конец кода diff --git a/programs/develop/libraries/http/examples/deflate.asm b/programs/develop/libraries/http/examples/deflate.asm index 7efad8c96..8624d153a 100644 --- a/programs/develop/libraries/http/examples/deflate.asm +++ b/programs/develop/libraries/http/examples/deflate.asm @@ -1,467 +1,465 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2009-2015. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; downloader.asm - HTTP client for KolibriOS ;; -;; ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -URLMAXLEN = 1024 -BUFFERSIZE = 4096 - -__DEBUG__ = 1 -__DEBUG_LEVEL__ = 1 - -format binary as "" -;-------------------------------------- -frame_1: - .x = 5 - .y = 10 - .width = 350 - .height = 55 -;-------------------------------------- -frame_2: - .x = 5 - .y = 75 - .width = 350 - .height = 55 -;--------------------------------------------------------------------- -use32 - org 0x0 - - db 'MENUET01' ; header - dd 0x01 ; header version - dd START ; entry point - dd IM_END ; image size - dd I_END ; required memory - dd stacktop ; esp - dd params ; I_PARAM - dd 0x0 ; I_Path -;--------------------------------------------------------------------- -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../dll.inc' -include '../../../../debug-fdo.inc' -include '../../box_lib/trunk/box_lib.mac' -include '../../http/http.inc' - -virtual at 0 - http_msg http_msg -end virtual -;--------------------------------------------------------------------- -START: - - mcall 68, 11 ; init heap so we can allocate memory dynamically - -; load libraries - stdcall dll.Load, @IMPORT - test eax, eax - jnz exit -;--------------------------------------------------------------------- - mov edi,filename_area - mov esi,start_temp_file_name - call copy_file_name_path - - mov edi,fname_buf - mov esi,start_file_path - call copy_file_name_path - -;OpenDialog initialisation - push dword OpenDialog_data - call [OpenDialog_Init] - -; prepare for PathShow - push dword PathShow_data_1 - call [PathShow_prepare] -;--------------------------------------------------------------------- -; check parameters - cmp byte[params], 0 ; no parameters ? - je reset_events ; load the GUI - - inc [silently] - -download: - call download_1 - - test [silently], 0xff - jnz save - -reset_events: - DEBUGF 1, "resetting events\n" - -; Report events -; defaults + mouse - mcall 40,EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER -;--------------------------------------------------------------------- -redraw: - call draw_window - -still: -;; DEBUGF 1, "waiting for events\n" - - mcall 10 ; wait here for event - - cmp eax, EV_REDRAW - je redraw - - cmp eax, EV_KEY - je key - - cmp eax, EV_BUTTON - je button - - cmp eax, EV_MOUSE - je mouse - - jmp still -;--------------------------------------------------------------------- -key: - mcall 2 ; read key - - stdcall [edit_box_key], dword edit1 - - cmp ax, 13 shl 8 - je download - - jmp still -;--------------------------------------------------------------------- -button: - - mcall 17 ; get id - - cmp ah, 26 - jne @f -; invoke OpenDialog - push dword OpenDialog_data - call [OpenDialog_Start] - cmp [OpenDialog_data.status],1 - jne still - -; prepare for PathShow - push dword PathShow_data_1 - call [PathShow_prepare] - call draw_window - jmp still -@@: - cmp ah, 1 ; button id=1 ? - je exit - - call download_1 - jmp save -;--------------------------------------------------------------------- -mouse: - stdcall [edit_box_mouse], edit1 - jmp still -;--------------------------------------------------------------------- -exit: - DEBUGF 1, "Exiting\n" - invoke HTTP_free, [identifier] ; free buffer -fail: - or eax, -1 ; close this program - mcall -;--------------------------------------------------------------------- -download_1: - DEBUGF 1, "Starting download\n" - - invoke HTTP_get, 0, 0, params, sz_add_header - test eax, eax - jz fail - mov [identifier], eax - - .loop: - invoke HTTP_receive, [identifier] - test eax, eax - jnz .loop - - mov eax, [identifier] - mov ebx, [eax + http_msg.content_length] - mov [final_size], ebx - mov ebx, [eax + http_msg.content_ptr] - mov [final_buffer], ebx - - invoke HTTP_find_header, [identifier], sz_content_enc - test eax, eax - jz .no_deflate - -; TODO: check if parameter equals "deflate" - - DEBUGF 1, "deflating\n" - - lea eax, [final_size] - invoke deflate_unpack, [final_buffer], eax - push eax - mcall 68, 13, [final_buffer] ; Free the compressed data - pop [final_buffer] - - DEBUGF 1, "deflated size=%u bytes\n", [final_size] - .no_deflate: - - invoke HTTP_free, [identifier] - mov [identifier], 0 - - ret -;--------------------------------------------------------------------- -save: - cmp [final_buffer], 0 - je still - - mcall 70, fileinfo - - DEBUGF 1, "File saved\n" - - test [silently], 0xff - jnz exit - - mov ecx, [sc.work_text] - or ecx, 0x80000000 - mcall 4, <10, frame_2.y+frame_2.height+7>, , download_complete - - jmp still -;--------------------------------------------------------------------- -copy_file_name_path: - xor eax,eax - cld -@@: - lodsb - stosb - test eax,eax - jnz @r - ret -;--------------------------------------------------------------------- -; ********************************************* -; ******* WINDOW DEFINITIONS AND DRAW ******** -; ********************************************* - -draw_window: - - mcall 12, 1 ; start window draw -;----------------------------------- -; get system colors - mcall 48, 3, sc, 40 -;----------------------------------- -; draw window - mov edx, [sc.work] - or edx, 0x34000000 - mcall 0, <50, 370>, <350, 170>, , 0, title -;----------------------------------- -; draw frames - mov [frame_data.x],dword frame_1.x shl 16+frame_1.width - mov [frame_data.y],dword frame_1.y shl 16+frame_1.height - mov [frame_data.text_pointer],dword select_addr_text - mov eax,[sc.work] - mov [frame_data.font_backgr_color],eax - mov eax,[sc.work_text] - mov [frame_data.font_color],eax - - push dword frame_data - call [Frame_draw] -;----------------------------------- - mov [frame_data.x],dword frame_2.x shl 16+frame_2.width - mov [frame_data.y],dword frame_2.y shl 16+frame_2.height - mov [frame_data.text_pointer],dword select_path_text - - push dword frame_data - call [Frame_draw] -;----------------------------------- -; draw "url:" text - mov ecx, [sc.work_text] - or ecx, 80000000h - mcall 4, , , type_pls -;----------------------------------- -; draw editbox - edit_boxes_set_sys_color edit1, editboxes_end, sc - stdcall [edit_box_draw], edit1 -;----------------------------------- -; draw buttons - mcall 8,,,22,[sc.work_button] ; reload - mcall ,,, 24 ; stop - - mcall , ,,26 ; save -;----------------------------------- -; draw buttons text - mov ecx, [sc.work_button_text] - or ecx, 80000000h - mcall 4, , , button_text.1 - mcall , , , button_text.2 - mcall , , , button_text.3 - - mcall 13,,,0xffffff - push dword PathShow_data_1 - call [PathShow_draw] - - mcall 12, 2 ; end window redraw - - ret -;--------------------------------------------------------------------- -; Data area -;----------------------------------------------------------------------------- -align 4 -@IMPORT: - -library lib_http, 'http.obj', \ - box_lib, 'box_lib.obj', \ - proc_lib, 'proc_lib.obj', \ - archiver, 'archiver.obj' - -import lib_http, \ - HTTP_get, 'get' , \ - HTTP_receive, 'receive', \ - HTTP_find_header, 'find_header_field', \ - HTTP_free, 'free' - -import box_lib, \ - edit_box_draw, 'edit_box_draw', \ - edit_box_key, 'edit_box_key', \ - edit_box_mouse, 'edit_box_mouse', \ - PathShow_prepare, 'PathShow_prepare', \ - PathShow_draw, 'PathShow_draw', \ - Frame_draw, 'frame_draw' - -import proc_lib, \ - OpenDialog_Init, 'OpenDialog_init', \ - OpenDialog_Start, 'OpenDialog_start' - -import archiver,\ - deflate_unpack, 'deflate_unpack' -;--------------------------------------------------------------------- -fileinfo dd 2, 0, 0 -final_size dd 0 -final_buffer dd 0 - db 0 - dd fname_buf -;--------------------------------------------------------------------- - -mouse_dd dd 0 -edit1 edit_box 295, 48, (frame_1.y+10), 0xffffff, 0xff, 0x80ff, 0, 0x8000, URLMAXLEN, document_user, mouse_dd, ed_focus+ed_always_focus, 7, 7 -editboxes_end: - -;--------------------------------------------------------------------- - -include_debug_strings - -;--------------------------------------------------------------------- - -type_pls db 'URL:', 0 -button_text: -.1: db 'DOWNLOAD',0 -.2: db 'STOP',0 -.3: db 'SELECT', 0 -download_complete db 'FILE SAVED!', 0 -title db 'HTTP Downloader', 0 -silently db 0 - -sz_add_header db 'Accept-Encoding: deflate', 13, 10, 0 ; archiver.obj doesnt export unpack method for gzip yet :( -sz_content_enc db 'content-encoding', 0 - -;--------------------------------------------------------------------- -select_addr_text db ' NETWORK ADDRESS: ',0 -select_path_text db ' PATH TO SAVE FILE: ',0 -;--------------------------------------------------------------------- -frame_data: -.type dd 0 ;+0 -.x: -.x_size dw 0 ;+4 -.x_start dw 0 ;+6 -.y: -.y_size dw 0 ;+8 -.y_start dw 0 ;+10 -.ext_fr_col dd 0x0 ;+12 -.int_fr_col dd 0xffffff ;+16 -.draw_text_flag dd 1 ;+20 -.text_pointer dd 0 ;+24 -.text_position dd 0 ;+28 -.font_number dd 0 ;+32 -.font_size_y dd 9 ;+36 -.font_color dd 0x0 ;+40 -.font_backgr_color dd 0xffffff ;+44 -;--------------------------------------------------------------------- -PathShow_data_1: -.type dd 0 ;+0 -.start_y dw frame_2.y+14 ;+4 -.start_x dw frame_2.x+20 ;+6 -.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 -.area_size_x dw frame_2.width-35 ;+10 -.font_number dd 0 ;+12 ; 0 - monospace, 1 - variable -.background_flag dd 0 ;+16 -.font_color dd 0 ;+20 -.background_color dd 0 ;+24 -.text_pointer dd fname_buf ;+28 -.work_area_pointer dd text_work_area ;+32 -.temp_text_length dd 0 ;+36 -;--------------------------------------------------------------------- -OpenDialog_data: -.type dd 1 ; Save -.procinfo dd procinfo ;+4 -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_path dd temp_dir_path ;+16 -.dir_default_path dd communication_area_default_path ;+20 -.start_path dd open_dialog_path ;+24 -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_pach dd fname_buf ;+36 -.filename_area dd filename_area ;+40 -.filter_area dd Filter -.x: -.x_size dw 420 ;+48 ; Window X size -.x_start dw 200 ;+50 ; Window X position -.y: -.y_size dw 320 ;+52 ; Window y size -.y_start dw 120 ;+54 ; Window Y position - -communication_area_name: - db 'FFFFFFFF_open_dialog',0 -open_dialog_path: - db '/sys/File Managers/opendial',0 -communication_area_default_path: - db '/sys',0 - -Filter: -dd Filter.end - Filter -.1: -db 'IMG',0 -db 'IMA',0 -.end: -db 0 - -start_temp_file_name: db 'some.garbage',0 - -start_file_path: db '/sys/.download', 0 -;--------------------------------------------------------------------- -document_user db 'http://' -;--------------------------------------------------------------------- -IM_END: -;--------------------------------------------------------------------- -params rb URLMAXLEN -;--------------------------------------------------------------------- - sc system_colors -;--------------------------------------------------------------------- -identifier dd ? -;--------------------------------------------------------------------- -filename_area: - rb 256 -;--------------------------------------------------------------------- -temp_dir_path: - rb 4096 -;--------------------------------------------------------------------- -procinfo: - rb 1024 -;--------------------------------------------------------------------- -fname_buf: - rb 4096 -;--------------------------------------------------------------------- -text_work_area: - rb 1024 -;--------------------------------------------------------------------- - rb 4096 -stacktop: -;--------------------------------------------------------------------- -I_END: -;--------------------------------------------------------------------- - - +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2009-2015. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; downloader.asm - HTTP client for KolibriOS ;; +;; ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +URLMAXLEN = 1024 +BUFFERSIZE = 4096 + +__DEBUG__ = 1 +__DEBUG_LEVEL__ = 1 + +format binary as "" +;-------------------------------------- +frame_1: + .x = 5 + .y = 10 + .width = 350 + .height = 55 +;-------------------------------------- +frame_2: + .x = 5 + .y = 75 + .width = 350 + .height = 55 +;--------------------------------------------------------------------- +use32 + org 0x0 + + db 'MENUET01' ; header + dd 0x01 ; header version + dd START ; entry point + dd IM_END ; image size + dd I_END ; required memory + dd stacktop ; esp + dd params ; I_PARAM + dd 0x0 ; I_Path +;--------------------------------------------------------------------- +include '../../../../macros.inc' +include '../../../../proc32.inc' +include '../../../../dll.inc' +include '../../../../debug-fdo.inc' +include '../../box_lib/box_lib.mac' +include '../../http/http.inc' + +virtual at 0 + http_msg http_msg +end virtual +;--------------------------------------------------------------------- +START: + + mcall 68, 11 ; init heap so we can allocate memory dynamically + +; load libraries + stdcall dll.Load, @IMPORT + test eax, eax + jnz exit +;--------------------------------------------------------------------- + mov edi,filename_area + mov esi,start_temp_file_name + call copy_file_name_path + + mov edi,fname_buf + mov esi,start_file_path + call copy_file_name_path + +;OpenDialog initialisation + push dword OpenDialog_data + call [OpenDialog_Init] + +; prepare for PathShow + push dword PathShow_data_1 + call [PathShow_prepare] +;--------------------------------------------------------------------- +; check parameters + cmp byte[params], 0 ; no parameters ? + je reset_events ; load the GUI + + inc [silently] + +download: + call download_1 + + test [silently], 0xff + jnz save + +reset_events: + DEBUGF 1, "resetting events\n" + +; Report events +; defaults + mouse + mcall 40,EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER +;--------------------------------------------------------------------- +redraw: + call draw_window + +still: +;; DEBUGF 1, "waiting for events\n" + + mcall 10 ; wait here for event + + cmp eax, EV_REDRAW + je redraw + + cmp eax, EV_KEY + je key + + cmp eax, EV_BUTTON + je button + + cmp eax, EV_MOUSE + je mouse + + jmp still +;--------------------------------------------------------------------- +key: + mcall 2 ; read key + + stdcall [edit_box_key], dword edit1 + + cmp ax, 13 shl 8 + je download + + jmp still +;--------------------------------------------------------------------- +button: + + mcall 17 ; get id + + cmp ah, 26 + jne @f +; invoke OpenDialog + push dword OpenDialog_data + call [OpenDialog_Start] + cmp [OpenDialog_data.status],1 + jne still + +; prepare for PathShow + push dword PathShow_data_1 + call [PathShow_prepare] + call draw_window + jmp still +@@: + cmp ah, 1 ; button id=1 ? + je exit + + call download_1 + jmp save +;--------------------------------------------------------------------- +mouse: + stdcall [edit_box_mouse], edit1 + jmp still +;--------------------------------------------------------------------- +exit: + DEBUGF 1, "Exiting\n" + invoke HTTP_free, [identifier] ; free buffer +fail: + or eax, -1 ; close this program + mcall +;--------------------------------------------------------------------- +download_1: + DEBUGF 1, "Starting download\n" + + invoke HTTP_get, 0, 0, params, sz_add_header + test eax, eax + jz fail + mov [identifier], eax + + .loop: + invoke HTTP_receive, [identifier] + test eax, eax + jnz .loop + + mov eax, [identifier] + mov ebx, [eax + http_msg.content_length] + mov [final_size], ebx + mov ebx, [eax + http_msg.content_ptr] + mov [final_buffer], ebx + + invoke HTTP_find_header, [identifier], sz_content_enc + test eax, eax + jz .no_deflate + +; TODO: check if parameter equals "deflate" + + DEBUGF 1, "deflating\n" + + lea eax, [final_size] + invoke deflate_unpack, [final_buffer], eax + push eax + mcall 68, 13, [final_buffer] ; Free the compressed data + pop [final_buffer] + + DEBUGF 1, "deflated size=%u bytes\n", [final_size] + .no_deflate: + + invoke HTTP_free, [identifier] + mov [identifier], 0 + + ret +;--------------------------------------------------------------------- +save: + cmp [final_buffer], 0 + je still + + mcall 70, fileinfo + + DEBUGF 1, "File saved\n" + + test [silently], 0xff + jnz exit + + mov ecx, [sc.work_text] + or ecx, 0x80000000 + mcall 4, <10, frame_2.y+frame_2.height+7>, , download_complete + + jmp still +;--------------------------------------------------------------------- +copy_file_name_path: + xor eax,eax + cld +@@: + lodsb + stosb + test eax,eax + jnz @r + ret +;--------------------------------------------------------------------- +; ********************************************* +; ******* WINDOW DEFINITIONS AND DRAW ******** +; ********************************************* + +draw_window: + + mcall 12, 1 ; start window draw +;----------------------------------- +; get system colors + mcall 48, 3, sc, 40 +;----------------------------------- +; draw window + mov edx, [sc.work] + or edx, 0x34000000 + mcall 0, <50, 370>, <350, 170>, , 0, title +;----------------------------------- +; draw frames + mov [frame_data.x],dword frame_1.x shl 16+frame_1.width + mov [frame_data.y],dword frame_1.y shl 16+frame_1.height + mov [frame_data.text_pointer],dword select_addr_text + mov eax,[sc.work] + mov [frame_data.font_backgr_color],eax + mov eax,[sc.work_text] + mov [frame_data.font_color],eax + + push dword frame_data + call [Frame_draw] +;----------------------------------- + mov [frame_data.x],dword frame_2.x shl 16+frame_2.width + mov [frame_data.y],dword frame_2.y shl 16+frame_2.height + mov [frame_data.text_pointer],dword select_path_text + + push dword frame_data + call [Frame_draw] +;----------------------------------- +; draw "url:" text + mov ecx, [sc.work_text] + or ecx, 80000000h + mcall 4, , , type_pls +;----------------------------------- +; draw editbox + edit_boxes_set_sys_color edit1, editboxes_end, sc + stdcall [edit_box_draw], edit1 +;----------------------------------- +; draw buttons + mcall 8,,,22,[sc.work_button] ; reload + mcall ,,, 24 ; stop + + mcall , ,,26 ; save +;----------------------------------- +; draw buttons text + mov ecx, [sc.work_button_text] + or ecx, 80000000h + mcall 4, , , button_text.1 + mcall , , , button_text.2 + mcall , , , button_text.3 + + mcall 13,,,0xffffff + push dword PathShow_data_1 + call [PathShow_draw] + + mcall 12, 2 ; end window redraw + + ret +;--------------------------------------------------------------------- +; Data area +;----------------------------------------------------------------------------- +align 4 +@IMPORT: + +library lib_http, 'http.obj', \ + box_lib, 'box_lib.obj', \ + proc_lib, 'proc_lib.obj', \ + archiver, 'archiver.obj' + +import lib_http, \ + HTTP_get, 'get' , \ + HTTP_receive, 'receive', \ + HTTP_find_header, 'find_header_field', \ + HTTP_free, 'free' + +import box_lib, \ + edit_box_draw, 'edit_box_draw', \ + edit_box_key, 'edit_box_key', \ + edit_box_mouse, 'edit_box_mouse', \ + PathShow_prepare, 'PathShow_prepare', \ + PathShow_draw, 'PathShow_draw', \ + Frame_draw, 'frame_draw' + +import proc_lib, \ + OpenDialog_Init, 'OpenDialog_init', \ + OpenDialog_Start, 'OpenDialog_start' + +import archiver,\ + deflate_unpack, 'deflate_unpack' +;--------------------------------------------------------------------- +fileinfo dd 2, 0, 0 +final_size dd 0 +final_buffer dd 0 + db 0 + dd fname_buf +;--------------------------------------------------------------------- + +mouse_dd dd 0 +edit1 edit_box 295, 48, (frame_1.y+10), 0xffffff, 0xff, 0x80ff, 0, 0x8000, URLMAXLEN, document_user, mouse_dd, ed_focus+ed_always_focus, 7, 7 +editboxes_end: + +;--------------------------------------------------------------------- + +include_debug_strings + +;--------------------------------------------------------------------- + +type_pls db 'URL:', 0 +button_text: +.1: db 'DOWNLOAD',0 +.2: db 'STOP',0 +.3: db 'SELECT', 0 +download_complete db 'FILE SAVED!', 0 +title db 'HTTP Downloader', 0 +silently db 0 + +sz_add_header db 'Accept-Encoding: deflate', 13, 10, 0 ; archiver.obj doesnt export unpack method for gzip yet :( +sz_content_enc db 'content-encoding', 0 + +;--------------------------------------------------------------------- +select_addr_text db ' NETWORK ADDRESS: ',0 +select_path_text db ' PATH TO SAVE FILE: ',0 +;--------------------------------------------------------------------- +frame_data: +.type dd 0 ;+0 +.x: +.x_size dw 0 ;+4 +.x_start dw 0 ;+6 +.y: +.y_size dw 0 ;+8 +.y_start dw 0 ;+10 +.ext_fr_col dd 0x0 ;+12 +.int_fr_col dd 0xffffff ;+16 +.draw_text_flag dd 1 ;+20 +.text_pointer dd 0 ;+24 +.text_position dd 0 ;+28 +.font_number dd 0 ;+32 +.font_size_y dd 9 ;+36 +.font_color dd 0x0 ;+40 +.font_backgr_color dd 0xffffff ;+44 +;--------------------------------------------------------------------- +PathShow_data_1: +.type dd 0 ;+0 +.start_y dw frame_2.y+14 ;+4 +.start_x dw frame_2.x+20 ;+6 +.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 +.area_size_x dw frame_2.width-35 ;+10 +.font_number dd 0 ;+12 ; 0 - monospace, 1 - variable +.background_flag dd 0 ;+16 +.font_color dd 0 ;+20 +.background_color dd 0 ;+24 +.text_pointer dd fname_buf ;+28 +.work_area_pointer dd text_work_area ;+32 +.temp_text_length dd 0 ;+36 +;--------------------------------------------------------------------- +OpenDialog_data: +.type dd 1 ; Save +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd temp_dir_path ;+16 +.dir_default_path dd communication_area_default_path ;+20 +.start_path dd open_dialog_path ;+24 +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_pach dd fname_buf ;+36 +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 200 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 120 ;+54 ; Window Y position + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_path: + db '/sys/File Managers/opendial',0 +communication_area_default_path: + db '/sys',0 + +Filter: +dd Filter.end - Filter +.1: +db 'IMG',0 +db 'IMA',0 +.end: +db 0 + +start_temp_file_name: db 'some.garbage',0 + +start_file_path: db '/sys/.download', 0 +;--------------------------------------------------------------------- +document_user db 'http://' +;--------------------------------------------------------------------- +IM_END: +;--------------------------------------------------------------------- +params rb URLMAXLEN +;--------------------------------------------------------------------- + sc system_colors +;--------------------------------------------------------------------- +identifier dd ? +;--------------------------------------------------------------------- +filename_area: + rb 256 +;--------------------------------------------------------------------- +temp_dir_path: + rb 4096 +;--------------------------------------------------------------------- +procinfo: + rb 1024 +;--------------------------------------------------------------------- +fname_buf: + rb 4096 +;--------------------------------------------------------------------- +text_work_area: + rb 1024 +;--------------------------------------------------------------------- + rb 4096 +stacktop: +;--------------------------------------------------------------------- +I_END: +;--------------------------------------------------------------------- diff --git a/programs/develop/libraries/http/examples/get.asm b/programs/develop/libraries/http/examples/get.asm index 5bb614192..aa849d9fc 100644 --- a/programs/develop/libraries/http/examples/get.asm +++ b/programs/develop/libraries/http/examples/get.asm @@ -1,434 +1,432 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2009-2015. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; downloader.asm - HTTP client for KolibriOS ;; -;; ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -URLMAXLEN = 1024 -BUFFERSIZE = 4096 - -__DEBUG__ = 1 -__DEBUG_LEVEL__ = 1 - -format binary as "" -;-------------------------------------- -frame_1: - .x = 5 - .y = 10 - .width = 350 - .height = 55 -;-------------------------------------- -frame_2: - .x = 5 - .y = 75 - .width = 350 - .height = 55 -;--------------------------------------------------------------------- -use32 - org 0x0 - - db 'MENUET01' ; header - dd 0x01 ; header version - dd START ; entry point - dd IM_END ; image size - dd I_END ; required memory - dd stacktop ; esp - dd params ; I_PARAM - dd 0x0 ; I_Path -;--------------------------------------------------------------------- -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../dll.inc' -include '../../../../debug-fdo.inc' -include '../../box_lib/trunk/box_lib.mac' -include '../../http/http.inc' - -virtual at 0 - http_msg http_msg -end virtual -;--------------------------------------------------------------------- -START: - - mcall 68, 11 ; init heap so we can allocate memory dynamically - -; load libraries - stdcall dll.Load, @IMPORT - test eax, eax - jnz exit -;--------------------------------------------------------------------- - mov edi,filename_area - mov esi,start_temp_file_name - call copy_file_name_path - - mov edi,fname_buf - mov esi,start_file_path - call copy_file_name_path - -;OpenDialog initialisation - push dword OpenDialog_data - call [OpenDialog_Init] - -; prepare for PathShow - push dword PathShow_data_1 - call [PathShow_prepare] -;--------------------------------------------------------------------- -; check parameters - cmp byte[params], 0 ; no parameters ? - je reset_events ; load the GUI - - inc [silently] - -download: - call download_1 - - test [silently], 0xff - jnz save - -reset_events: - DEBUGF 1, "resetting events\n" - -; Report events -; defaults + mouse - mcall 40,EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER -;--------------------------------------------------------------------- -redraw: - call draw_window - -still: -;; DEBUGF 1, "waiting for events\n" - - mcall 10 ; wait here for event - - cmp eax, EV_REDRAW - je redraw - - cmp eax, EV_KEY - je key - - cmp eax, EV_BUTTON - je button - - cmp eax, EV_MOUSE - je mouse - - jmp still -;--------------------------------------------------------------------- -key: - mcall 2 ; read key - - stdcall [edit_box_key], dword edit1 - - cmp ax, 13 shl 8 - je download - - jmp still -;--------------------------------------------------------------------- -button: - - mcall 17 ; get id - - cmp ah, 26 - jne @f -; invoke OpenDialog - push dword OpenDialog_data - call [OpenDialog_Start] - cmp [OpenDialog_data.status],1 - jne still - -; prepare for PathShow - push dword PathShow_data_1 - call [PathShow_prepare] - call draw_window - jmp still -@@: - cmp ah, 1 ; button id=1 ? - je exit - - call download_1 - jmp save -;--------------------------------------------------------------------- -mouse: - stdcall [edit_box_mouse], edit1 - jmp still -;--------------------------------------------------------------------- -exit: - DEBUGF 1, "Exiting\n" - invoke HTTP_free, [identifier] ; free buffer -fail: - or eax, -1 ; close this program - mcall -;--------------------------------------------------------------------- -download_1: - DEBUGF 1, "Starting download\n" - - invoke HTTP_get, document_user, 0, params, 0 - test eax, eax - jz fail - mov [identifier], eax - - .loop: - invoke HTTP_receive, [identifier] - test eax, eax - jnz .loop - ret -;--------------------------------------------------------------------- -save: - mov ebp, [identifier] - mov eax, [ebp + http_msg.content_received] - mov [final_size], eax - mov ebx, [ebp + http_msg.content_ptr] - mov [final_buffer], ebx - mcall 70, fileinfo - - DEBUGF 1, "File saved\n" - - test [silently], 0xff - jnz exit - - mov ecx, [sc.work_text] - or ecx, 0x80000000 - mcall 4, <10, frame_2.y+frame_2.height+7>, , download_complete - - jmp still -;--------------------------------------------------------------------- -copy_file_name_path: - xor eax,eax - cld -@@: - lodsb - stosb - test eax,eax - jnz @r - ret -;--------------------------------------------------------------------- -; ********************************************* -; ******* WINDOW DEFINITIONS AND DRAW ******** -; ********************************************* - -draw_window: - - mcall 12, 1 ; start window draw -;----------------------------------- -; get system colors - mcall 48, 3, sc, 40 -;----------------------------------- -; draw window - mov edx, [sc.work] - or edx, 0x34000000 - mcall 0, <50, 370>, <350, 170>, , 0, title -;----------------------------------- -; draw frames - mov [frame_data.x],dword frame_1.x shl 16+frame_1.width - mov [frame_data.y],dword frame_1.y shl 16+frame_1.height - mov [frame_data.text_pointer],dword select_addr_text - mov eax,[sc.work] - mov [frame_data.font_backgr_color],eax - mov eax,[sc.work_text] - mov [frame_data.font_color],eax - - push dword frame_data - call [Frame_draw] -;----------------------------------- - mov [frame_data.x],dword frame_2.x shl 16+frame_2.width - mov [frame_data.y],dword frame_2.y shl 16+frame_2.height - mov [frame_data.text_pointer],dword select_path_text - - push dword frame_data - call [Frame_draw] -;----------------------------------- -; draw "url:" text - mov ecx, [sc.work_text] - or ecx, 80000000h - mcall 4, , , type_pls -;----------------------------------- -; draw editbox - edit_boxes_set_sys_color edit1, editboxes_end, sc - stdcall [edit_box_draw], edit1 -;----------------------------------- -; draw buttons - mcall 8,,,22,[sc.work_button] ; reload - mcall ,,, 24 ; stop - - mcall , ,,26 ; save -;----------------------------------- -; draw buttons text - mov ecx, [sc.work_button_text] - or ecx, 80000000h - mcall 4, , , button_text.1 - mcall , , , button_text.2 - mcall , , , button_text.3 - - mcall 13,,,0xffffff - push dword PathShow_data_1 - call [PathShow_draw] - - mcall 12, 2 ; end window redraw - - ret -;--------------------------------------------------------------------- -; Data area -;----------------------------------------------------------------------------- -align 4 -@IMPORT: - -library lib_http, 'http.obj', \ - box_lib, 'box_lib.obj', \ - proc_lib, 'proc_lib.obj' - -import lib_http, \ - HTTP_get , 'get', \ - HTTP_receive , 'receive', \ - HTTP_free , 'free' - -import box_lib, \ - edit_box_draw, 'edit_box_draw', \ - edit_box_key, 'edit_box_key', \ - edit_box_mouse, 'edit_box_mouse', \ - PathShow_prepare, 'PathShow_prepare', \ - PathShow_draw, 'PathShow_draw', \ - Frame_draw, 'frame_draw' - -import proc_lib, \ - OpenDialog_Init, 'OpenDialog_init', \ - OpenDialog_Start, 'OpenDialog_start' -;--------------------------------------------------------------------- -fileinfo dd 2, 0, 0 -final_size dd 0 -final_buffer dd 0 - db 0 - dd fname_buf -;--------------------------------------------------------------------- - -mouse_dd dd 0 -edit1 edit_box 295, 48, (frame_1.y+10), 0xffffff, 0xff, 0x80ff, 0, 0x8000, URLMAXLEN, document_user, mouse_dd, ed_focus+ed_always_focus, 7, 7 -editboxes_end: - -;--------------------------------------------------------------------- - -include_debug_strings - -;--------------------------------------------------------------------- - -type_pls db 'URL:', 0 -button_text: -.1: db 'DOWNLOAD',0 -.2: db 'STOP',0 -.3: db 'SELECT', 0 -download_complete db 'FILE SAVED!', 0 -title db 'HTTP Downloader', 0 -silently db 0 - -;--------------------------------------------------------------------- -select_addr_text db ' NETWORK ADDRESS: ',0 -select_path_text db ' PATH TO SAVE FILE: ',0 -;--------------------------------------------------------------------- -frame_data: -.type dd 0 ;+0 -.x: -.x_size dw 0 ;+4 -.x_start dw 0 ;+6 -.y: -.y_size dw 0 ;+8 -.y_start dw 0 ;+10 -.ext_fr_col dd 0x0 ;+12 -.int_fr_col dd 0xffffff ;+16 -.draw_text_flag dd 1 ;+20 -.text_pointer dd 0 ;+24 -.text_position dd 0 ;+28 -.font_number dd 0 ;+32 -.font_size_y dd 9 ;+36 -.font_color dd 0x0 ;+40 -.font_backgr_color dd 0xffffff ;+44 -;--------------------------------------------------------------------- -PathShow_data_1: -.type dd 0 ;+0 -.start_y dw frame_2.y+14 ;+4 -.start_x dw frame_2.x+20 ;+6 -.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 -.area_size_x dw frame_2.width-35 ;+10 -.font_number dd 0 ;+12 ; 0 - monospace, 1 - variable -.background_flag dd 0 ;+16 -.font_color dd 0 ;+20 -.background_color dd 0 ;+24 -.text_pointer dd fname_buf ;+28 -.work_area_pointer dd text_work_area ;+32 -.temp_text_length dd 0 ;+36 -;--------------------------------------------------------------------- -OpenDialog_data: -.type dd 1 ; Save -.procinfo dd procinfo ;+4 -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_path dd temp_dir_path ;+16 -.dir_default_path dd communication_area_default_path ;+20 -.start_path dd open_dialog_path ;+24 -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_pach dd fname_buf ;+36 -.filename_area dd filename_area ;+40 -.filter_area dd Filter -.x: -.x_size dw 420 ;+48 ; Window X size -.x_start dw 200 ;+50 ; Window X position -.y: -.y_size dw 320 ;+52 ; Window y size -.y_start dw 120 ;+54 ; Window Y position - -communication_area_name: - db 'FFFFFFFF_open_dialog',0 -open_dialog_path: - db '/sys/File Managers/opendial',0 -communication_area_default_path: - db '/sys',0 - -Filter: -dd Filter.end - Filter -.1: -db 'IMG',0 -db 'IMA',0 -.end: -db 0 - -start_temp_file_name: db 'some.garbage',0 - -start_file_path: db '/sys/.download', 0 -;--------------------------------------------------------------------- -document_user db 'http://' -;--------------------------------------------------------------------- -IM_END: -;--------------------------------------------------------------------- -params rb URLMAXLEN -;--------------------------------------------------------------------- - sc system_colors -;--------------------------------------------------------------------- -identifier dd ? -;--------------------------------------------------------------------- -filename_area: - rb 256 -;--------------------------------------------------------------------- -temp_dir_path: - rb 4096 -;--------------------------------------------------------------------- -procinfo: - rb 1024 -;--------------------------------------------------------------------- -fname_buf: - rb 4096 -;--------------------------------------------------------------------- -text_work_area: - rb 1024 -;--------------------------------------------------------------------- - rb 4096 -stacktop: -;--------------------------------------------------------------------- -I_END: -;--------------------------------------------------------------------- - - +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2009-2015. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; downloader.asm - HTTP client for KolibriOS ;; +;; ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +URLMAXLEN = 1024 +BUFFERSIZE = 4096 + +__DEBUG__ = 1 +__DEBUG_LEVEL__ = 1 + +format binary as "" +;-------------------------------------- +frame_1: + .x = 5 + .y = 10 + .width = 350 + .height = 55 +;-------------------------------------- +frame_2: + .x = 5 + .y = 75 + .width = 350 + .height = 55 +;--------------------------------------------------------------------- +use32 + org 0x0 + + db 'MENUET01' ; header + dd 0x01 ; header version + dd START ; entry point + dd IM_END ; image size + dd I_END ; required memory + dd stacktop ; esp + dd params ; I_PARAM + dd 0x0 ; I_Path +;--------------------------------------------------------------------- +include '../../../../macros.inc' +include '../../../../proc32.inc' +include '../../../../dll.inc' +include '../../../../debug-fdo.inc' +include '../../box_lib/box_lib.mac' +include '../../http/http.inc' + +virtual at 0 + http_msg http_msg +end virtual +;--------------------------------------------------------------------- +START: + + mcall 68, 11 ; init heap so we can allocate memory dynamically + +; load libraries + stdcall dll.Load, @IMPORT + test eax, eax + jnz exit +;--------------------------------------------------------------------- + mov edi,filename_area + mov esi,start_temp_file_name + call copy_file_name_path + + mov edi,fname_buf + mov esi,start_file_path + call copy_file_name_path + +;OpenDialog initialisation + push dword OpenDialog_data + call [OpenDialog_Init] + +; prepare for PathShow + push dword PathShow_data_1 + call [PathShow_prepare] +;--------------------------------------------------------------------- +; check parameters + cmp byte[params], 0 ; no parameters ? + je reset_events ; load the GUI + + inc [silently] + +download: + call download_1 + + test [silently], 0xff + jnz save + +reset_events: + DEBUGF 1, "resetting events\n" + +; Report events +; defaults + mouse + mcall 40,EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER +;--------------------------------------------------------------------- +redraw: + call draw_window + +still: +;; DEBUGF 1, "waiting for events\n" + + mcall 10 ; wait here for event + + cmp eax, EV_REDRAW + je redraw + + cmp eax, EV_KEY + je key + + cmp eax, EV_BUTTON + je button + + cmp eax, EV_MOUSE + je mouse + + jmp still +;--------------------------------------------------------------------- +key: + mcall 2 ; read key + + stdcall [edit_box_key], dword edit1 + + cmp ax, 13 shl 8 + je download + + jmp still +;--------------------------------------------------------------------- +button: + + mcall 17 ; get id + + cmp ah, 26 + jne @f +; invoke OpenDialog + push dword OpenDialog_data + call [OpenDialog_Start] + cmp [OpenDialog_data.status],1 + jne still + +; prepare for PathShow + push dword PathShow_data_1 + call [PathShow_prepare] + call draw_window + jmp still +@@: + cmp ah, 1 ; button id=1 ? + je exit + + call download_1 + jmp save +;--------------------------------------------------------------------- +mouse: + stdcall [edit_box_mouse], edit1 + jmp still +;--------------------------------------------------------------------- +exit: + DEBUGF 1, "Exiting\n" + invoke HTTP_free, [identifier] ; free buffer +fail: + or eax, -1 ; close this program + mcall +;--------------------------------------------------------------------- +download_1: + DEBUGF 1, "Starting download\n" + + invoke HTTP_get, document_user, 0, params, 0 + test eax, eax + jz fail + mov [identifier], eax + + .loop: + invoke HTTP_receive, [identifier] + test eax, eax + jnz .loop + ret +;--------------------------------------------------------------------- +save: + mov ebp, [identifier] + mov eax, [ebp + http_msg.content_received] + mov [final_size], eax + mov ebx, [ebp + http_msg.content_ptr] + mov [final_buffer], ebx + mcall 70, fileinfo + + DEBUGF 1, "File saved\n" + + test [silently], 0xff + jnz exit + + mov ecx, [sc.work_text] + or ecx, 0x80000000 + mcall 4, <10, frame_2.y+frame_2.height+7>, , download_complete + + jmp still +;--------------------------------------------------------------------- +copy_file_name_path: + xor eax,eax + cld +@@: + lodsb + stosb + test eax,eax + jnz @r + ret +;--------------------------------------------------------------------- +; ********************************************* +; ******* WINDOW DEFINITIONS AND DRAW ******** +; ********************************************* + +draw_window: + + mcall 12, 1 ; start window draw +;----------------------------------- +; get system colors + mcall 48, 3, sc, 40 +;----------------------------------- +; draw window + mov edx, [sc.work] + or edx, 0x34000000 + mcall 0, <50, 370>, <350, 170>, , 0, title +;----------------------------------- +; draw frames + mov [frame_data.x],dword frame_1.x shl 16+frame_1.width + mov [frame_data.y],dword frame_1.y shl 16+frame_1.height + mov [frame_data.text_pointer],dword select_addr_text + mov eax,[sc.work] + mov [frame_data.font_backgr_color],eax + mov eax,[sc.work_text] + mov [frame_data.font_color],eax + + push dword frame_data + call [Frame_draw] +;----------------------------------- + mov [frame_data.x],dword frame_2.x shl 16+frame_2.width + mov [frame_data.y],dword frame_2.y shl 16+frame_2.height + mov [frame_data.text_pointer],dword select_path_text + + push dword frame_data + call [Frame_draw] +;----------------------------------- +; draw "url:" text + mov ecx, [sc.work_text] + or ecx, 80000000h + mcall 4, , , type_pls +;----------------------------------- +; draw editbox + edit_boxes_set_sys_color edit1, editboxes_end, sc + stdcall [edit_box_draw], edit1 +;----------------------------------- +; draw buttons + mcall 8,,,22,[sc.work_button] ; reload + mcall ,,, 24 ; stop + + mcall , ,,26 ; save +;----------------------------------- +; draw buttons text + mov ecx, [sc.work_button_text] + or ecx, 80000000h + mcall 4, , , button_text.1 + mcall , , , button_text.2 + mcall , , , button_text.3 + + mcall 13,,,0xffffff + push dword PathShow_data_1 + call [PathShow_draw] + + mcall 12, 2 ; end window redraw + + ret +;--------------------------------------------------------------------- +; Data area +;----------------------------------------------------------------------------- +align 4 +@IMPORT: + +library lib_http, 'http.obj', \ + box_lib, 'box_lib.obj', \ + proc_lib, 'proc_lib.obj' + +import lib_http, \ + HTTP_get , 'get', \ + HTTP_receive , 'receive', \ + HTTP_free , 'free' + +import box_lib, \ + edit_box_draw, 'edit_box_draw', \ + edit_box_key, 'edit_box_key', \ + edit_box_mouse, 'edit_box_mouse', \ + PathShow_prepare, 'PathShow_prepare', \ + PathShow_draw, 'PathShow_draw', \ + Frame_draw, 'frame_draw' + +import proc_lib, \ + OpenDialog_Init, 'OpenDialog_init', \ + OpenDialog_Start, 'OpenDialog_start' +;--------------------------------------------------------------------- +fileinfo dd 2, 0, 0 +final_size dd 0 +final_buffer dd 0 + db 0 + dd fname_buf +;--------------------------------------------------------------------- + +mouse_dd dd 0 +edit1 edit_box 295, 48, (frame_1.y+10), 0xffffff, 0xff, 0x80ff, 0, 0x8000, URLMAXLEN, document_user, mouse_dd, ed_focus+ed_always_focus, 7, 7 +editboxes_end: + +;--------------------------------------------------------------------- + +include_debug_strings + +;--------------------------------------------------------------------- + +type_pls db 'URL:', 0 +button_text: +.1: db 'DOWNLOAD',0 +.2: db 'STOP',0 +.3: db 'SELECT', 0 +download_complete db 'FILE SAVED!', 0 +title db 'HTTP Downloader', 0 +silently db 0 + +;--------------------------------------------------------------------- +select_addr_text db ' NETWORK ADDRESS: ',0 +select_path_text db ' PATH TO SAVE FILE: ',0 +;--------------------------------------------------------------------- +frame_data: +.type dd 0 ;+0 +.x: +.x_size dw 0 ;+4 +.x_start dw 0 ;+6 +.y: +.y_size dw 0 ;+8 +.y_start dw 0 ;+10 +.ext_fr_col dd 0x0 ;+12 +.int_fr_col dd 0xffffff ;+16 +.draw_text_flag dd 1 ;+20 +.text_pointer dd 0 ;+24 +.text_position dd 0 ;+28 +.font_number dd 0 ;+32 +.font_size_y dd 9 ;+36 +.font_color dd 0x0 ;+40 +.font_backgr_color dd 0xffffff ;+44 +;--------------------------------------------------------------------- +PathShow_data_1: +.type dd 0 ;+0 +.start_y dw frame_2.y+14 ;+4 +.start_x dw frame_2.x+20 ;+6 +.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 +.area_size_x dw frame_2.width-35 ;+10 +.font_number dd 0 ;+12 ; 0 - monospace, 1 - variable +.background_flag dd 0 ;+16 +.font_color dd 0 ;+20 +.background_color dd 0 ;+24 +.text_pointer dd fname_buf ;+28 +.work_area_pointer dd text_work_area ;+32 +.temp_text_length dd 0 ;+36 +;--------------------------------------------------------------------- +OpenDialog_data: +.type dd 1 ; Save +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd temp_dir_path ;+16 +.dir_default_path dd communication_area_default_path ;+20 +.start_path dd open_dialog_path ;+24 +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_pach dd fname_buf ;+36 +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 200 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 120 ;+54 ; Window Y position + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_path: + db '/sys/File Managers/opendial',0 +communication_area_default_path: + db '/sys',0 + +Filter: +dd Filter.end - Filter +.1: +db 'IMG',0 +db 'IMA',0 +.end: +db 0 + +start_temp_file_name: db 'some.garbage',0 + +start_file_path: db '/sys/.download', 0 +;--------------------------------------------------------------------- +document_user db 'http://' +;--------------------------------------------------------------------- +IM_END: +;--------------------------------------------------------------------- +params rb URLMAXLEN +;--------------------------------------------------------------------- + sc system_colors +;--------------------------------------------------------------------- +identifier dd ? +;--------------------------------------------------------------------- +filename_area: + rb 256 +;--------------------------------------------------------------------- +temp_dir_path: + rb 4096 +;--------------------------------------------------------------------- +procinfo: + rb 1024 +;--------------------------------------------------------------------- +fname_buf: + rb 4096 +;--------------------------------------------------------------------- +text_work_area: + rb 1024 +;--------------------------------------------------------------------- + rb 4096 +stacktop: +;--------------------------------------------------------------------- +I_END: +;--------------------------------------------------------------------- diff --git a/programs/develop/libraries/nnp/examples/nnp_points.asm b/programs/develop/libraries/nnp/examples/nnp_points.asm index 2a8edac0a..42d880879 100644 --- a/programs/develop/libraries/nnp/examples/nnp_points.asm +++ b/programs/develop/libraries/nnp/examples/nnp_points.asm @@ -1,747 +1,753 @@ -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, 0, sys_path - -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../KOSfuncs.inc' -include '../../../../load_img.inc' -include '../../../../load_lib.mac' -include '../../../../develop/libraries/box_lib/trunk/box_lib.mac' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'NNP example 28.05.22',0 ;подпись окна - -run_file_70 FileInfoBlock - -IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 -image_data_toolbar dd 0 - -memory_file_size dd 512*1024 ;размер памяти для открытия файлов (в начале 512 Kb, но может увеличиватся при необходимости) - -NNP_FF_BIN equ 0x6e6962 -NNP_FF_JSON equ 0x6e6f736a - -struct NeuralNetwork - learningRate dq ? ;+ 0 скорость обучения - layers dd ? ;+ 8 [] слои - layers_length dd ? ;+12 число слоев - activation dd ? ;+16 указатель на функцию активации - derivative dd ? ;+20 указатель на функцию - errors dd ? ;+24 массив для вычислений - errorsNext dd ? ;+28 - gradients dd ? ;+32 - deltas dd ? ;+36 -ends - -struct Point - x dq ? ;double - y dq ? - t dd ? ;long -ends - -align 4 -NNLOPT_LEN equ 4 -nnlopt dd 2,3,3,2 -_nn NeuralNetwork -lea_rate dq 0.01 - -POINTS_COUNT equ 8 ;число точек -_p rb sizeof.Point*POINTS_COUNT - -_cycles_st dd 0 -_r_op rb 128 -txt_error db '"Error open: ',39,'%s',39,'" -tE',0 -txt_cycles db 'Cycles = %i000',0 - -;Макрос для параметров типа double (8 байт) -macro glpush double_v { - push dword[double_v+4] - push dword[double_v] -} - -align 8 -proc __ftol - sub esp,12 - wait - fstcw word[esp+8] - wait - mov al,[esp+9] - or byte[esp+9],0x0c - fldcw word[esp+8] - fistp qword[esp] - mov [esp+9],al - fldcw word[esp+8] - mov eax,[esp] - mov edx,[esp+4] - add esp,12 - ret -endp - -align 16 -Math_random: - imul eax,dword[_rand_x],22695477 - inc eax - push ecx - mov dword[_rand_x],eax - and eax,65535 - mov dword[esp],eax - fild dword[esp] - fmul dword[@f] - pop edx - ret -align 4 -@@: - db 0,0,128,55 ;dd 1.0/65536.0 -_rand_x dd 0 - - -align 8 -start: - load_libraries l_libs_start,l_libs_end - ;проверка на сколько удачно загузилась библиотека - mov ebp,lib_0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall SF_TERMINATE_PROCESS - @@: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - mcall SF_SET_EVENTS_MASK,0xC0000027 - stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога - stdcall [buf2d_create], buf_0 ;создание буфера - - include_image_file 'toolbar.png', image_data_toolbar - - stdcall mem.Alloc,[memory_file_size] - mov dword[open_file],eax - - push NNLOPT_LEN - push nnlopt - push 0 - push 0 - glpush lea_rate - stdcall [NNP_Create], _nn - call but_update - -align 8 -red_win: - call draw_window - -align 16 -still: - mcall SF_WAIT_EVENT - - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 ;мышь - jne @f - jmp mouse - @@: - jmp still - -align 8 -draw_window: -pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - ; *** рисование главного окна (выполняется 1 раз при запуске) *** - mov edx,[sc.work] - or edx,(3 shl 24)+0x30000000 - mov edi,caption - mcall SF_CREATE_WINDOW, (20 shl 16)+590, (20 shl 16)+540 - - ; *** создание кнопок на панель *** - mov esi,[sc.work_button] - mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3 - - add ebx,(25 shl 16) - mov edx,4 - int 0x40 - - add ebx,(25 shl 16) - mov edx,5 - int 0x40 - - add ebx,(30 shl 16) - mov edx,6 - int 0x40 - - add ebx,(25 shl 16) - mov edx,7 - int 0x40 - - ; *** рисование иконок на кнопках *** - mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new - - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon open - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon save - int 0x40 - - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(30 shl 16) ;icon update points - int 0x40 - add ebx,IMAGE_TOOLBAR_ICON_SIZE - add edx,(25 shl 16) ;icon calculate - int 0x40 - - call PointsDraw - ; *** рисование буфера *** - stdcall [buf2d_draw], buf_0 - - mcall SF_REDRAW,SSF_END_DRAW -popad - ret - -align 8 -key: - mcall SF_GET_KEY - jmp still - -align 8 -mouse: - - jmp still - -align 8 -button: - mcall SF_GET_BUTTON - cmp ah,3 - jne @f - call but_new_file - jmp red_win - @@: - cmp ah,4 - jne @f - call but_open_file - jmp red_win - @@: - cmp ah,5 - jne @f - call but_save_file - jmp red_win - @@: - cmp ah,6 - jne @f - call but_update - jmp red_win - @@: - cmp ah,7 - jne @f - call but_calc - jmp red_win - @@: - cmp ah,1 - jne still -.exit: - stdcall [buf2d_delete],buf_0 - stdcall mem.Free,[image_data_toolbar] - stdcall mem.Free,[open_file] - stdcall [NNP_Destroy], _nn - mcall SF_TERMINATE_PROCESS - -align 8 -but_calc: - push esi edi ebp - add esp,-32 - mov ebp,_p - xor edi,edi ;i=0 -.cycle_0: ;for(i=0;i<50000;i++) - call Math_random - fimul dword[.172] - call __ftol - mov esi,eax ;k=(long)(Math_random()*POINTS_COUNT) - imul esi,sizeof.Point - fld qword[ebp+esi+Point.x] - fsub dword[f_0_5] - fstp qword[esp] ;v[0]=p[k].x-.5 - fld qword[ebp+esi+Point.y] - fsub dword[f_0_5] - fstp qword[esp+8] ;v[1]=p[k].y-.5 - stdcall [NNP_FeedForward], _nn,esp ;r=NNP_FeedForward(&nn,v) - - xor eax,eax - mov dword[esp+16],eax - mov dword[esp+20],eax ;t[0]=0.0 - mov dword[esp+24],eax - mov dword[esp+28],eax ;t[1]=0.0 - cmp dword[ebp+esi+Point.t],eax - je .173 - mov dword[esp+16],eax - mov dword[esp+20],1072693248 ;if(p[k].t) t[0]=1.0 - jmp .174 -.173: - mov dword[esp+24],eax - mov dword[esp+28],1072693248 ;else t[1]=1.0 -.174: - lea edx,dword[esp+16] - stdcall [NNP_BackPropagation], _nn,edx ;NNP_BackPropagation(&nn,t) - inc edi ;i++ - cmp edi,50000 - jl .cycle_0 - add dword[_cycles_st],50 - stdcall [sprintf], _r_op,txt_cycles,[_cycles_st] - add esp,12 - call NNP_DrawInBuf - call PointsDraw -; SaveNN("/tmp0/1/nnp_end.txt") - ;push s@+835 - ;call @@SaveNN$qpxc - ;pop ecx - mcall SF_SET_CAPTION,1,_r_op - add esp,32 - pop ebp edi esi - ret -align 4 -.172: - dd POINTS_COUNT - -align 8 -but_new_file: - mov dword[_cycles_st],0 - stdcall [NNP_Reset], _nn - call NNP_DrawInBuf - call PointsDraw - ret - -align 8 -but_update: - mov dword[_cycles_st],0 - call PointsInit - call NNP_DrawInBuf - call PointsDraw - ret - -align 8 -PointsInit: - push ebx esi - xor esi,esi ;i=0 - mov ebx,_p -.cycle_0: ;for(i=0;i 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. -;***************************************************************************** -;--------------------------------------------------------------------- -;Some documentation for memory -; -;area name db 'FFFFFFFF_open_dialog',0 ; FFFFFFFF = PID -; -; communication area data -; flag ; +0 -; dw 0 ; 0 - empty, 1 - file for open, 2 -folder for open, -; 3 - cancel, 4 - path=name of area 6822. -; -; type of dialog: 0-Open, 1-Save, 2-Dir -; dw 0 ; +2 -; -; window X size ; +4 -; dw 0 -; -; window X position ; +6 -; dw 0 -; -; window y size ; +8 -; dw 0 -; -; window Y position ; +10 -; dw 0 -; -; OpenDialog WINDOW SLOT ; +12 -; dd 0 -; -; file_path ; +16 -; rb 3824 ; path to file -; -; file name ; +3840 -; rb 256 -; -; filtration flag ; +4096 -; dd 0 ; flag 0 - no filtration, 1 - filtering -; -; area for storage of filtering values ; +4100 -; rb 4092 -;--------------------------------------------------------------------- - use32 - org 0x0 - - db 'MENUET01' - dd 0x01 - dd START - dd IM_END - dd I_END - dd stacktop - dd param - dd path - -include '../../macros.inc' -;define __DEBUG__ 1 -;define __DEBUG_LEVEL__ 1 -;include '../../debug-fdo.inc' -include '../../KOSfuncs.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -;include 'macros.inc' -;include 'load_lib.mac' -;include 'box_lib.mac' -@use_library - -x_minimal_size equ 350 -y_minimal_size equ 250 -;--------------------------------------------------------------------- -;--------------------------------------------------------------------- -START: - mcall 68,11 - mcall 66,1,1 - mcall 40,0x27 - call get_communication_area - - call get_active_pocess - -load_libraries l_libs_start,end_l_libs - test eax,eax - jnz button.exit -; initialize sort - push dword 1 - call dword [sort_init] -; unpack deflate - mov eax,[unpack_DeflateUnpack2] - mov [deflate_unpack],eax - - mov esi,start_pach - mov edi,previous_dir_path - call copy_dir_name.1 - - call load_root_directory - call load_start_directory - call sort_directory - call load_icons - call convert_icons - call load_ini - call calc_ini - jmp red_1 -;--------------------------------------------------------------------- -red: - call control_minimal_window_size -red_1: - call draw_window -;--------------------------------------------------------------------- -still: - mcall 10 - cmp eax,1 - je red - cmp eax,2 - je key - cmp eax,3 - je button - cmp eax,6 - je mouse - jmp still -;--------------------------------------------------------------------- -control_minimal_window_size: - pusha - call get_window_param - test [window_status],10b - jnz .end ;red_1 - test [window_status],100b - jnz .end ;red_1 - test [window_status],1b - jnz .end ;red_1 - mov esi,-1 - mov eax,procinfo - mov eax,[eax+46] - cmp eax,dword y_minimal_size ;200 - jae @f - mov esi,dword y_minimal_size ;200 - mcall 67,-1,ebx,ebx -@@: - mov edx,-1 - mov eax,procinfo - mov eax,[eax+42] - cmp eax,dword x_minimal_size ;300 - jae @f - mov edx,dword x_minimal_size ;300 - mcall 67,-1,ebx,,ebx -@@: -.end: - popa - ret -;--------------------------------------------------------------------- -key: - mov al,[focus_pointer] - test al,al - jne key_ASCII - mcall 2 - xor ebx,ebx - cmp [extended_key],1 - je .extended_key - test al,al - jnz still - cmp ah,0xE0 - jne @f - mov [extended_key],1 - jmp still -@@: - cmp ah,72 ; arrow up - je .2 - cmp ah,80 ; arrow down - je .1 - cmp ah,28 ; Enter - je .7 - cmp ah,1 ; Esc - je button.exit - cmp ah,14 ; Backspace - je button.exit_dir - cmp ah,187 ; F1 - je select_disk - cmp ah,188 ; F2 - je select_sort - cmp ah,189 ; F3 - je select_filter - cmp ah,19 ; R - je button.reload_dir - cmp ah,42 - je key_shift_up - cmp ah,54 - je key_shift_up - cmp ah,170 - je key_shift_down - cmp ah,182 - je key_shift_down - cmp ah,29 - je key_ctrl_up - cmp ah,157 - je key_ctrl_down - cmp ah,56 - je key_alt_up - cmp ah,184 - je key_alt_down - cmp ah,206 ; NumPad+ Up - je NumPad_plus_Up - cmp ah,202 ; NumPad- Up - je NumPad_minus_Up - cmp ah,183 ; NumPad* Up - je NumPad_invert_Up - cmp ah,158 - je symbol_a_up - cmp ah,15 ; Tab down - je change_focus_area_press_Tab_key - cmp ah,143 ; Tab up - je change_focus_area_check_Tab_key -; compare for "1,2,3,4,5,6,7,8,9,0,(-),(=)" - cmp ah,2 - jb still - cmp ah,13 - jbe .12 -; compare for "q,w,e,r,t,y,u,i,o,p,([),(])" - cmp ah,16 - jb still - cmp ah,27 - jbe .12 -; compare for "a,s,d,f,g,h,j,k,l,(;),('),(`)" - cmp ah,30 - jb still - cmp ah,41 - jbe .12 -; compare for "(\),z,x,c,v,b,n,m,(,),(.),(/)" - cmp ah,43 - jb still - cmp ah,53 - jbe .12 - jmp still -.extended_key: - mov [extended_key],0 - cmp ah,80 ; arrow down - je .1 - cmp ah,72 ; arrow up - je .2 - cmp ah,81 ; PageDown - je .3 - cmp ah,73 ; PageUp - je .4 - cmp ah,71 ; Home - je .5 - cmp ah,79 ; End - je .6 - cmp ah,28 ; Enter - je .7 - cmp ah,82 ; Insert - je .8 - - cmp ah,29 - je key_ctrl_up - cmp ah,157 - je key_ctrl_down - cmp ah,56 - je key_alt_up - cmp ah,184 - je key_alt_down - jmp still -;--------------------------------- -.12: - inc ebx ; 12 - Search with key -;--------------------------------- -.11: - inc ebx ; 11 - Invert Mark -;--------------------------------- -.10: - inc ebx ; 10 - Unmark All -;--------------------------------- -.9: - inc ebx ; 9 - Mark All -;--------------------------------- -.8: - inc ebx ; 8 - Insert (Mark) -;--------------------------------- -.7: - inc ebx ; 7 - Enter -;--------------------------------- -.6: - inc ebx ; 6 - End -;--------------------------------- -.5: - inc ebx ; 5 - Home -;--------------------------------- -.4: - inc ebx ; 4 - PageUp -;--------------------------------- -.3: - inc ebx ; 3 - PageDown -;--------------------------------- -.2: - inc ebx ; 2 - arrow up -;--------------------------------- -.1: - inc ebx ; 1 - arrow down -;--------------------------------- - call .key_action - -; movzx ecx,word [file_browser_data_1.start_draw_cursor_line] -; mcall 47,0x80000,,<50,0>,0x40000000,0xffffff -; movzx ecx,word [file_browser_data_1.size_y] -; mcall 47,0x80000,,<150,0>,0x40000000,0xffffff - - mov eax,file_browser_data_1.mouse_keys_delta - cmp [eax],dword 3 - jne still - xor ebx,ebx - mov [eax],ebx - call load_next_dir - jmp still -;------------------------------------------------------- -.key_action: - mov [file_browser_data_1.key_action],bx - shr ax,8 - mov [file_browser_data_1.key_action_num],ax - - push dword file_browser_data_1 - call [FileBrowser_key] - - call draw_open_button_label - - cmp [file_browser_data_1.draw_scroll_bar],0 - je @f - call draw_scrollbar1 - mov [file_browser_data_1.draw_scroll_bar],0 -@@: - ret -;--------------------------------------------------------------------- -change_focus_area_Tab_key_ASCII: - xor eax,eax - inc eax - mov [Tab_key_block],al - jmp change_focus_area -;--------------------------------------------------------------------- -change_focus_area_press_Tab_key: - cmp [open_dialog_type],1 - jne still - mov al,[Tab_key_block] - test al,al - jnz still - xor eax,eax - inc eax - mov [Tab_key],al - jmp still -;--------------------------------------------------------------------- -change_focus_area_check_Tab_key: - cmp [open_dialog_type],1 - jne still - xor eax,eax - mov [Tab_key_block],al - mov al,[Tab_key] - test al,al - jz still - xor eax,eax - mov [Tab_key],al -;--------------------------------------------------------------------- -change_focus_area: - mov al,[focus_pointer] - inc al - and al,1 - mov [focus_pointer],al -.1: - mov edi,edit1 - test al,al - jne @f - mov [file_browser_data_1.select_panel_counter],1 - and [edi+44],dword 0xFFFFFFFD ; ed_focus - mov [edi+12],dword 0xffffff ; color white - call draw_draw_file_browser1 - mcall 66,1,1 - jmp still -@@: - mov [file_browser_data_1.select_panel_counter],0 - or [edi+44],dword ed_focus - mov [edi+12],dword 0xffffb0 ; color yellow - call draw_draw_file_browser1 - mcall 66,1,0 - jmp still -;--------------------------------------------------------------------- -key_ASCII: - mcall 2 - cmp ah,9 - je change_focus_area_Tab_key_ASCII - cmp ah,13 - je .13 - cmp ah,27 - je button.exit - push dword name_editboxes - call [edit_box_key] - jmp still -.13: -; cmp [open_dialog_type],2 ; Select dir -; je file_no_folder -; cmp [open_dialog_type],1 ; Save file -; jne user_selected_name_action ; load_dir -; inc [open_dialog_type] - jmp file_no_folder -;.load_dir: -; mov [file_browser_data_1.select_panel_counter],1 -; xor eax,eax -; mov [focus_pointer],al -; mcall 66,1,1 - -; xor eax,eax -; mov esi,dir_path -; cld -;@@: -; lodsb -; test al,al -; jne @r -; sub esi,2 -; cmp [esi],byte '/' -; jne @f -; xor eax,eax -; mov [esi],al -;@@: -; call load_next_dir.1 -; jmp still -;--------------------------------------------------------------------- -user_selected_name_action: - mov eax,[communication_area] - test eax,eax - jnz @f - call control_minimal_window_size - call draw_window - ret -@@: - add eax,16 ;12 -;copy_path user_selected_name,dir_path,eax,0 - mov esi,dir_path - mov edi,eax - call copy_dir_name - mov [edi-1],byte '/' - mov esi,user_selected_name - call copy_dir_name - - mov eax,[communication_area] - mov [eax],word 1 - jmp button.exit -;--------------------------------------------------------------------- -select_disk: - call check_alt -.1: - call load_root_directory - xor eax,eax - mov [menu_data_1.ret_key],eax - - push dword menu_data_1 - call [menu_bar_activate] - - call clear_control_key_flag - - mov eax,[menu_data_1.ret_key] - mov [menu_data_1.ret_key],dword 0 - cmp eax,1 - je select_filter.1 - - cmp eax,2 - je select_sort.1 - - cmp [menu_data_1.click],dword 1 - jne still - - cmp [menu_data_1.cursor_out],dword 0 - jne analyse_out_menu_1 - jmp still -;--------------------------------------------------------------------- -select_sort: - call check_alt -.1: - xor eax,eax - mov [menu_data_2.ret_key],eax - - push dword menu_data_2 - call [menu_bar_activate] - - call clear_control_key_flag - - mov eax,[menu_data_2.ret_key] - mov [menu_data_2.ret_key],dword 0 - cmp eax,1 - je select_disk.1 - - cmp eax,2 - je select_filter.1 - - - cmp [menu_data_2.click],dword 1 - jne still - - cmp [menu_data_2.cursor_out],dword 0 - jne analyse_out_menu_2 - jmp still -;--------------------------------------------------------------------- -select_filter: - call check_alt -.1: - xor eax,eax - mov [menu_data_3.ret_key],eax - - push dword menu_data_3 - call [menu_bar_activate] - - call clear_control_key_flag - - mov eax,[menu_data_3.ret_key] - mov [menu_data_3.ret_key],dword 0 - cmp eax,1 - je select_sort.1 - - cmp eax,2 - je select_disk.1 - - - cmp [menu_data_3.click],dword 1 - jne still - - cmp [menu_data_3.cursor_out],dword 0 - jne analyse_out_menu_3 - jmp still -;--------------------------------------------------------------------- -symbol_a_up: -NumPad_plus_Up: - call check_ctrl - jmp key.9 -;--------------------------------------- -NumPad_minus_Up: - call check_ctrl - jmp key.10 -;--------------------------------------- -NumPad_invert_Up: - call check_ctrl - jmp key.11 -;--------------------------------------- -check_alt: - xor eax,eax - mov al,[alt_flag] - test eax,eax - jz @f - xor ebx,ebx - ret -@@: - add esp,4 - jmp still -;--------------------------------------- -check_ctrl: - xor eax,eax - mov al,[ctrl_flag] - test eax,eax - jz @f - xor ebx,ebx - ret -@@: - add esp,4 - jmp still -;--------------------------------------------------------------------- -clear_control_key_flag: - xor eax,eax - mov [shift_flag],al - mov [ctrl_flag],al - mov [alt_flag],al - ret -;--------------------------------------------------------------------- -key_shift_up: - mov [shift_flag],1 - jmp still -;--------------------------------------------------------------------- -key_shift_down: - mov [shift_flag],0 - jmp still -;--------------------------------------------------------------------- -key_ctrl_up: - mov [ctrl_flag],1 - jmp still -;--------------------------------------------------------------------- -key_ctrl_down: - mov [ctrl_flag],0 - jmp still -;--------------------------------------------------------------------- -key_alt_up: - mov [alt_flag],1 - jmp still -;--------------------------------------------------------------------- -key_alt_down: - mov [alt_flag],0 - jmp still -;--------------------------------------------------------------------- -button: - mcall 17 - cmp ah,6 - je .reload_dir_1 - cmp ah,4 - je .open_dir_or_file - cmp ah,3 - je .exit - cmp ah,2 - je .exit_dir - cmp ah,1 - jne still -.exit: - mov eax,[communication_area] - test eax,eax - jz @f - cmp [eax],word 1 - je @f - mov [eax],word 3 -@@: - mov eax,[N_error] - test eax,eax - jz @f - call start_error_window_thread -@@: - call get_window_param - mov ebx,[communication_area] - mov ecx,procinfo -; mov eax,[window_x] - mov eax,[ecx+34] - shl eax,16 - add eax,[ecx+42] - mov [ebx+4],eax -; mov eax,[window_y] - mov eax,[ecx+38] - shl eax,16 - add eax,[ecx+46] - mov [ebx+8],eax - - mcall -1 -;--------------------------------------------------------------------- -.reload_dir: - cmp [ctrl_flag],bl - je key.12 ; Just symbol 'R' or 'r' -.reload_dir_1: - call load_next_dir.1 - jmp still -;--------------------------------------------------------------------- -.exit_dir: - call load_next_dir.exit_dir - jmp still -;--------------------------------------------------------------------- -.open_dir_or_file: - cmp [open_dialog_type],0 ;Open file - jne @f - - mov eax,[file_browser_data_1.folder_data] - mov eax,[eax+4] - test eax,eax - jz button.exit -@@: - cmp [open_dialog_type],2 ;Select dir - je file_no_folder - - cmp [open_dialog_type],1 ;Save file - jne @f - - mov al,[focus_pointer] - test al,al - jne file_no_folder -@@: - xor ebx,ebx - jmp key.7 -;--------------------------------------------------------------------- -thread_start: - mov eax,[N_error] - cmp al,1 - jne @f - mov [N_error],load_ini_error_type - mov [error_path],file_name - jmp .error_type -@@: - cmp al,2 - jne @f - mov [N_error],load_icons_error_type - mov [error_path],file_name - jmp .error_type -@@: - cmp al,3 - jne @f - mov [N_error],memory_free_error_type - xor eax,eax - mov [error_path],eax - mov [error_type],eax - jmp .red -@@: - cmp al,4 - jne @f - mov [N_error],memory_get_error_type - xor eax,eax - mov [error_path],eax - mov [error_type],eax - jmp .red -@@: - cmp al,5 - jne @f - mov [N_error],load_directory_error_type - mov [error_path],dir_path - jmp .error_type -@@: - cmp al,6 - jne .button - mov [N_error],convert_icons_error_type - mov [error_path],file_name - xor eax,eax - mov [error_type],eax - jmp .red -.error_type: - mov eax,[error_type] - shl eax,2 - add eax,error_fs_text_pointers - mov eax,[eax] - mov [error_type],eax -.red: - call draw_error_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 -1 - jmp .still -;--------------------------------------------------------------------- -draw_error_window: - mcall 12,1 - mcall 0,[error_window_x],[error_window_y],0x03ff0000 - call type_title - mcall 4,<10,30>,0x90ffffff,[N_error] - mov eax,[error_path] - test eax,eax - jz @f - mcall 4,<10,50>,,[error_path] -@@: - mov eax,[error_type] - test eax,eax - jz @f - mcall 4,<10,70>,,[error_type] -@@: - mcall 12,2 - ret -;--------------------------------------------------------------------- -start_error_window_thread: - mcall 9,procinfo,-1 - mov eax,[ebx+46] - shr eax,1 - add eax,[ebx+38] - sub eax,40 - mov [error_window_y+2],ax - mov eax,[ebx+42] - shr eax,1 - add eax,[ebx+34] - sub eax,125 - mov [error_window_x+2],ax - mcall 51,1,thread_start,thread_stack - ret -;--------------------------------------------------------------------- -mouse: - mcall 18,7 - cmp [active_process],eax - jne still - - mcall 37,7 - mov [mouse_scroll_data],eax - - mcall 37,1 - mov [mouse_position],eax - - cmp [scroll_bar_data_vertical.delta2],0 - jne .scrollbar - - mov [file_browser_data_1.select_flag],0 - - push dword file_browser_data_1 - call [FileBrowser_mouse] - - call draw_open_button_label - - mov eax,file_browser_data_1.mouse_keys_delta - cmp [eax],dword 3 - jne .check_focus ; scrollbar - mov [eax],dword 0 - call load_next_dir - jmp still -;--------------------------------------------------- -.check_focus: - mov ebx,[file_browser_data_1.select_flag] - test ebx,ebx - jz .scrollbar ;@f - mov al,[focus_pointer] - test al,al - jz .scrollbar - xor eax,eax - mov [focus_pointer],al - jmp change_focus_area.1 -;--------------------------------------------------- -.scrollbar: - mov eax,[scroll_bar_data_vertical.max_area] - cmp eax,[scroll_bar_data_vertical.cur_area] - jbe .menu_bar ;still - - push dword scroll_bar_data_vertical - call [scrollbar_ver_mouse] - - cmp [scroll_bar_data_vertical.redraw],0 - je .menu_bar ;still - mov [scroll_bar_data_vertical.redraw],0 -.draw: - call draw_draw_file_browser2 - jmp still - -;--------------------------------------------------- -.menu_bar: - cmp [scroll_bar_data_vertical.delta2],0 - jne still - -.menu_bar_1: - call .set_mouse_flag -@@: - push dword menu_data_1 - call [menu_bar_mouse] - - cmp [menu_data_1.click],dword 1 - jne .menu_bar_2 - - cmp [menu_data_1.cursor_out],dword 0 - jne select_disk.1 ;analyse_out_menu_1 - jmp .menu_bar_1 -;-------------------------------------------- -.menu_bar_2: - push dword menu_data_2 - call [menu_bar_mouse] - - cmp [menu_data_2.click],dword 1 - jne .menu_bar_3 - - cmp [menu_data_2.cursor_out],dword 0 - jne analyse_out_menu_2 - jmp .menu_bar_1 -;--------------------------------------------------- -.menu_bar_3: - push dword menu_data_3 - call [menu_bar_mouse] - - cmp [menu_data_3.click],dword 1 - jne .check_editboxes - - cmp [menu_data_3.cursor_out],dword 0 - jne analyse_out_menu_3 - jmp .menu_bar_1 -;--------------------------------------------------- -.check_editboxes: - cmp [open_dialog_type],1 - jne .check_scroll_event - mov eax,[edit1+44] - and eax,10b - push dword name_editboxes - call [edit_box_mouse] - mov ebx,[edit1+44] - and ebx,10b - cmp eax,ebx - je .check_scroll_event - mov al,[focus_pointer] - test al,al - jnz .check_scroll_event - xor eax,eax - test ebx,10b - jz @f - inc eax -@@: - mov [focus_pointer],al - jmp change_focus_area.1 -;--------------------------------------------------- -.check_scroll_event: - mov eax,[mouse_position] - xor ebx,ebx - mov bx,ax ; EBX mouse y - shr eax,16 ; EAX mouse x - - mov cx,[file_browser_data_1.start_x] - mov dx,[file_browser_data_1.start_y] - - cmp ax,cx - jb .mouse_next ; min x - - cmp bx,dx - jb .mouse_next ; min y - - add cx,[file_browser_data_1.size_x] - cmp ax,cx - ja .mouse_next ; max x - - add dx,[file_browser_data_1.size_y] - cmp bx,dx - ja .mouse_next ; max y - - xor ecx,ecx - xor ebx,ebx - mov eax,[mouse_scroll_data] - test eax,eax - jz .mouse_next - test ax,0x8000 - jnz .decr - shr eax,16 - test ax,0x8000 - jnz .decr_1 - - mov cx,[mouse_scroll_data.vertical] - test ecx,ecx - jnz @f - mov cx,[mouse_scroll_data.horizontal] - test ecx,ecx - jz .mouse_next -@@: - mov ebx,1 -@@: - push ebx ecx - call key.key_action - pop ecx ebx - dec ecx - jnz @r - jmp still -;---------------------------------------- -.decr: - mov bx,[mouse_scroll_data.vertical] - jmp @f -.decr_1: - mov bx,[mouse_scroll_data.horizontal] -@@: - mov ecx,0xffff - sub ecx,ebx - inc ecx - mov ebx,2 -@@: - push ebx ecx - call key.key_action - pop ecx ebx - dec ecx - jnz @r - jmp still -;--------------------------------------------------- -.mouse_next: - jmp still -;--------------------------------------------------------------------- -.set_mouse_flag: - xor eax,eax - inc eax - mov [menu_data_1.get_mouse_flag],eax - mov [menu_data_2.get_mouse_flag],eax - ret -;--------------------------------------------------------------------- -analyse_out_menu_1: -; Available disks - mov eax,[menu_data_1.cursor_out] - dec eax - imul esi,eax,10 - add esi,retrieved_devices_table - mov edi,dir_path - call copy_dir_name - call load_next_dir.1 - jmp still -;--------------------------------------------------------------------- -analyse_out_menu_2: -; Sort - mov eax,[menu_data_2.cursor_out] - xor ebx,ebx - cmp eax,dword 1 - je .1 - cmp eax,dword 2 - je .2 - cmp eax,dword 3 - je .3 - cmp eax,dword 4 - je .4 - jmp still -.4: - add ebx,2 -.3: - add ebx,2 -.2: - add ebx,2 -.1: - mov [sort_type],ebx - call sort_directory - call draw_draw_file_browser1 - jmp still -;--------------------------------------------------------------------- -analyse_out_menu_3: -; Filter - mov eax,[menu_data_3.cursor_out] - cmp eax,dword 1 - jne @f - mov [filter_flag],0 - call load_next_dir.1 - jmp still -@@: - cmp eax,dword 2 - jne still - mov [filter_flag],1 - call load_next_dir.1 - jmp still -;--------------------------------------------------------------------- -get_communication_area: - xor eax,eax - mov al,[param] - test eax,eax - jz .exit - mcall 68,22,param,,0x01 - mov [communication_area],eax - movzx ebx,word [eax+2] - mov [open_dialog_type],ebx - cmp ebx,1 - jne @f - pushad - mov [focus_pointer],bl - mov edi,edit1 - mov [file_browser_data_1.select_panel_counter],0 - or [edi+44],dword ed_focus - mov [edi+12],dword 0xffffb0 ; color yellow - mcall 66,1,0 - popad -@@: - mov ebx,[eax+4] - cmp bx,word x_minimal_size ;300 - jb @f - mov [window_x],ebx - mov ebx,[eax+8] - cmp bx,word y_minimal_size ;200 - jb @f - mov [window_y],ebx -.exit: - ret -;--------------------------------------------------------------------- -load_start_directory: - mov eax,[communication_area] - test eax,eax - jz .1 - movzx ebx,word [eax] - test eax,eax - jz .1 - add eax,16 ;12 ;4 - mov esi,eax - push esi - mov esi,[communication_area] - add esi,3840 ;4096-256 - mov eax,[esi] - test al,al - jnz @f - mov esi,example_name_temp -@@: - mov edi,user_selected_name - call copy_dir_name - pop esi - jmp .2 -.1: - mov esi,start_pach -.2: - mov edi,dir_path - call copy_dir_name - -; call load_directory -; mov eax,[N_error] -; test eax,eax -; jnz button.exit -.3: - call load_directory - mov eax,[N_error] - test eax,eax - jz @f - call error_handler - jmp .3 -@@: - ret -;--------------------------------------------------------------------- -load_next_dir: - mov ebx,[file_browser_data_1.folder_block] - test ebx,ebx - jz .exit - - mov ebx,[file_browser_data_1.selected_BDVK_adress] - add ebx,40 - test [ebx-40],byte 0x10 - jz file_no_folder - cmp [ebx],word '..' - jne @f - cmp [ebx+2],byte 0 - je .exit_dir -@@: - mov esi,dir_path - call copy_dir_path - -@@: -.1: - call load_directory - mov eax,[N_error] - test eax,eax - jz @f - call error_handler - jmp .1 -@@: - call sort_directory - - mov ebx,[scroll_bar_data_vertical.x] - inc ebx - mov ecx,[scroll_bar_data_vertical.y] - inc ecx - mcall 13,,,0xcccccc - mov edi,edit1 - xor eax,eax - mov [edi+44],eax - mov [edi+12],dword 0xffffff ; color white - call draw_draw_file_browser1 -.exit: - ret -.exit_dir: - mov esi,dir_path - call copy_exit_dir - jmp .1 -;--------------------------------------------------------------------- -error_handler: - mcall 66,2 - mov [error_handler_store_input_mode],eax - mcall 66,1,1 -.red: - call .draw_window -;------------------------------------ -.still: - mcall 10 - cmp eax,1 - je .red - cmp eax,2 - je .key - cmp eax,3 - je .button - jmp .still -;------------------------------------ -.draw_window: - xor eax,eax - inc eax - mov [error_window],al - call control_minimal_window_size - call draw_window - xor eax,eax - mov [error_window],al - ret -;------------------------------------ -.key: - mcall 2 - xor ebx,ebx - cmp [extended_key],1 - je .extended_key - test al,al - jnz .still - cmp ah,0xE0 - jne @f - mov [extended_key],1 - jmp .still -@@: - cmp ah,129 ; Esc - je .exit - jmp .still -.extended_key: - jmp .still -;------------------------------------ -.button: - mcall 17 - cmp ah,5 - je .exit - cmp ah,1 - jne .still - xor eax,eax - mov [N_error],eax - jmp button.exit -;------------------------------------ -.exit: - cmp [open_dialog_type],1 - jne @f - - mov esi,root_pach - mov edi,dir_path - call copy_dir_name.1 - mov esi,root_pach - mov edi,previous_dir_path - call copy_dir_name.1 - jmp .restore_input_mode -@@: - mov esi,previous_dir_path - mov edi,dir_path - call copy_dir_name.1 - mov esi,start_pach - mov edi,previous_dir_path - call copy_dir_name.1 -.restore_input_mode: - mcall 66,1,[error_handler_store_input_mode] - ret -;--------------------------------------------------------------------- -file_no_folder: - mov esi,dir_path - mov edi,file_name - call copy_dir_name - push ebx - mov al,[focus_pointer] - test al,al - je @f - mov ebx,user_selected_name - xor eax,eax - cmp [ebx],al - je .exit -@@: - cmp [open_dialog_type],2 - je @f - mov esi,file_name - call copy_dir_path -@@: - mov eax,[communication_area] - test eax,eax - jnz @f - call control_minimal_window_size - call draw_window - pop ebx - ret -@@: - mov edi,eax - add edi,16 ;12 - mov esi,file_name - call copy_dir_name - - pop esi - mov al,[focus_pointer] - test al,al - jz @f - mov esi,user_selected_name -@@: - xor eax,eax - cmp [esi],al - je .exit - mov edi,[communication_area] - add edi,3840 ;4096-256 - call copy_dir_name -.exit: - mov eax,[communication_area] - mov [eax],word 1 - jmp button.exit -;--------------------------------------------------------------------- -load_root_directory: - mov [dirinfo.name],dword dir_path_temp - mov eax,[dirinfo.return] - push eax - mov eax,[file_browser_data_1.folder_data] - push eax - xor eax,eax - mov [dirinfo.return],eax - mov [file_browser_data_1.folder_data],eax - mov esi,root_pach - mov edi,dir_path_temp - call copy_dir_name - call load_directory - mov eax,[N_error] - test eax,eax - jnz button.exit - - mov eax,[dirinfo.return] - mov [root_folder_area],eax - mov eax,[eax+4] - mov [root_folder_block],eax - - xor eax,eax - mov [dirinfo.return],eax - mov [file_browser_data_1.folder_data],eax - mov [temp_counter_1],eax ;0 - - mov [retrieved_devices_table_counter],eax ;0 -.start_temp_counter_1: - imul esi,[temp_counter_1],304 - add esi,[root_folder_area] - add esi,32+40 - mov edi,dir_path_temp+1 - mov [edi-1],byte '/' - call copy_dir_name - call load_directory - mov eax,[N_error] - test eax,eax - jnz button.exit - - mov eax,[dirinfo.return] - mov [root1_folder_area],eax - mov eax,[eax+4] - test eax,eax - jz .continue - mov [root1_folder_block],eax - - mov ebp,0 -.start_copy_device_patch: - imul edi,[retrieved_devices_table_counter],10 - add edi,retrieved_devices_table - mov [edi],byte '/' - inc edi - imul esi,[temp_counter_1],304 - add esi,[root_folder_area] - add esi,32+40 - - call copy_dir_name - - imul esi,ebp,304 - add esi,[root1_folder_area] - add esi,32+40 - mov [edi-1],byte '/' - - call copy_dir_name - - inc [retrieved_devices_table_counter] - inc ebp - cmp ebp,[root1_folder_block] - jb .start_copy_device_patch -.continue: - inc [temp_counter_1] - mov eax,[temp_counter_1] - cmp eax,[root_folder_block] - jb .start_temp_counter_1 - - cmp [root_folder_area],dword 0 - je @f - mcall 68,13,[root_folder_area] - test eax,eax - jz memory_free_error -@@: - - xor ecx,ecx - mov edi,menu_text_area_1_1 ;.1 -@@: - imul esi,ecx,10 - add esi,retrieved_devices_table - call copy_dir_name - inc ecx - cmp ecx,[retrieved_devices_table_counter] - jb @b - mov [menu_data_1.text_end],edi - xor eax,eax - mov [edi],eax - pop eax - mov [file_browser_data_1.folder_data],eax - pop eax - mov [dirinfo.return],eax - mov [dirinfo.name],dword dir_path - ret -;--------------------------------------------------------------------- -memory_free_error: - mov [N_error],3 - jmp button.exit -;--------------------------------------------------------------------- -memory_get_error: - mov [N_error],4 - jmp button.exit -;--------------------------------------------------------------------- -type_title: - mov ecx,[open_dialog_type] - shl ecx,2 - add ecx,open_dialog_title_pointer - mov ecx,[ecx] - test ecx,ecx - jz @f - mcall 71,1,; title ;;param ;file_name ;dir_path -@@: - ret -;--------------------------------------------------------------------- -draw_window: - - mcall 12,1 - call prepare_system_colors - xor esi,esi - mcall 0,[window_x],[window_y],0x63AABBCC - call type_title - call get_window_param - mov eax,[procinfo+70] ;status of window - test eax,100b - jne .end - - mov eax,[window_high] - sub eax,25+45 - mov [file_browser_data_1.size_y],ax - mov [scroll_bar_data_vertical.size_y],ax - mov eax,[window_width] - sub eax,10+20 - mov [file_browser_data_1.size_x],ax - add ax,10 - mov [scroll_bar_data_vertical.start_x],ax - mov edx,[w_work] ; color of work area RRGGBB,8->color - or edx,0x63000000 - mcall 13,[window_width],45 ;,0xcccccc - - push ecx - rol ecx,16 - add cx,[file_browser_data_1.size_y] - add cx,45 - ror ecx,16 - mov cx,25 - mcall - pop ecx - add ecx,45 shl 16 - mov cx,[file_browser_data_1.size_y] - mov bx,10 - mcall - mov bx,[file_browser_data_1.size_x] - add bx,10 - shl ebx,16 - mov bx,20 - mcall - - cmp [error_window],0 - je @f - call draw_for_fs_errors - jmp .1 -@@: - mov [do_not_draw_open_button_label],1 - call draw_draw_file_browser1 - mov [do_not_draw_open_button_label],0 -.1: - push dword menu_data_1 - call [menu_bar_draw] - push dword menu_data_2 - call [menu_bar_draw] - push dword menu_data_3 - call [menu_bar_draw] - - mov ebx,[file_browser_data_1.x] - mov ax,bx - shl eax,16 - add ebx,eax - mov eax,50 - mov bx,ax - shl eax,16 - sub ebx,eax - mov ecx,25 shl 16 + 16 - mcall 8,,,2,[w_work_button] ;0xffffff - - pusha - shr ecx,16 - mov bx,cx - add ebx,21 shl 16 - mov ecx,[w_work_button_text] - or ecx,0x90000000 - mcall 4,,,message_ExitDir_button - add ebx,4 - mcall - add ebx,4 - mcall - popa - - push ebx - sub ebx,70 shl 16 - mov bx,60 - mcall 8,,,6 - - shr ecx,16 - mov bx,cx - add ebx,2 shl 16 - mov ecx,[w_work_button_text] - or ecx,0x90000000 - mcall 4,,,message_ReloadDir_button - pop ebx - - mov ebx,[file_browser_data_1.x] - mov ax,bx - shl eax,16 - add ebx,eax - mov eax,55 - mov bx,ax - shl eax,16 - sub ebx,eax - mov ecx,[file_browser_data_1.y] - mov ax,cx - add eax,3 - shl eax,16 - add ecx,eax - mov cx,16 - mcall 8,,,3 - - pusha - shr ecx,16 - mov bx,cx - add ebx,4 shl 16 - mov ecx,[w_work_button_text] - or ecx,0x90000000 - mcall 4,,,message_cancel_button - popa - - sub ebx,65 shl 16 - mcall 8,,,4 - - shr ecx,16 - mov bx,cx - add ebx,4 shl 16 - mov edx,[open_dialog_type] - shl edx,2 - add edx,message_open_dialog_button - mov edx,[edx] -;------------------------------- - cmp [open_dialog_type],1 - jne @f - - cmp [focus_pointer],1 - je @f - - cmp [error_window],0 - jne @f - - mov eax,[file_browser_data_1.folder_block] - test eax,eax - jz @f - - mov eax,[file_browser_data_1.selected_BDVK_adress] - test [eax],byte 0x10 - jz @f - - mov edx,message_0 ; Open Dir -@@: -;-------------------------------------- - mov [open_button_coordinates],ebx - mov ecx,[w_work_button_text] - or ecx,0x90000000 - mcall 4 ;message_open_button -.end: - mcall 12,2 - ret -;--------------------------------------------------------------------- -draw_open_button_label: - cmp [do_not_draw_open_button_label],1 - je .exit_1 - - cmp [open_dialog_type],1 - jne .exit_1 - - cmp [focus_pointer],1 - je draw_save_button_label - - pusha - mov ebx,[open_button_coordinates] - test ebx,ebx - jz .exit - - mov edx,[open_dialog_type] - shl edx,2 - add edx,message_open_dialog_button - mov edx,[edx] - - mov eax,[file_browser_data_1.folder_block] - test eax,eax - jz .1 - - mov eax,[file_browser_data_1.selected_BDVK_adress] - test [eax],byte 0x10 - jz @f - - mov edx,message_0 ; Open Dir - jmp .1 -@@: - call copy_new_file_name -.1: - mov ecx,[w_work_button_text] - or ecx,0xd0000000 - mov edi,[w_work_button] - mcall 4 ;message_open_button -.exit: - popa -.exit_1: - ret -;--------------------------------------------------------------------- -draw_save_button_label: - pusha - mov ebx,[open_button_coordinates] - - mov edx,message_1 ; Save - - mov ecx,[w_work_button_text] - or ecx,0xd0000000 - mov edi,[w_work_button] - mcall 4 ;message_open_button - popa - ret -;--------------------------------------------------------------------- -copy_new_file_name: - mov esi,[file_browser_data_1.selected_BDVK_adress] - add esi,40 - mov edi,user_selected_name - cld - lodsb - test al,al - jnz .1 - ret -@@: - lodsb -.1: - stosb - test al,al - jnz @r - - sub edi,user_selected_name - dec edi - - mov esi,edit1 - mov [esi+48],edi ;ed_size - mov [esi+52],edi ;ed_pos - - push dword name_editboxes - call [edit_box_draw] - ret -;--------------------------------------------------------------------- -prepare_system_colors: - mcall 48,3,app_colours,10*4 - - mov eax,[w_work] - mov [menu_data_1.bckg_col],eax - mov [menu_data_2.bckg_col],eax - mov [menu_data_3.bckg_col],eax - - mov [menu_data_1.menu_col],eax - mov [menu_data_2.menu_col],eax - mov [menu_data_3.menu_col],eax - - mov [scroll_bar_data_vertical.bckg_col],eax - - mov eax,[w_work_button] - mov [menu_data_1.frnt_col],eax - mov [menu_data_2.frnt_col],eax - mov [menu_data_3.frnt_col],eax - - mov [scroll_bar_data_vertical.frnt_col],eax - - mov eax,[w_work_button] - mov [menu_data_1.menu_sel_col],eax - mov [menu_data_2.menu_sel_col],eax - mov [menu_data_3.menu_sel_col],eax - - mov eax,[w_work_text] - mov [menu_data_1.bckg_text_col],eax - mov [menu_data_2.bckg_text_col],eax - mov [menu_data_3.bckg_text_col],eax - - mov eax,[w_work_button_text] - mov [menu_data_1.frnt_text_col],eax - mov [menu_data_2.frnt_text_col],eax - mov [menu_data_3.frnt_text_col],eax - - mov [scroll_bar_data_vertical.line_col],eax - ret -;--------------------------------------------------------------------- -draw_for_fs_errors: - call draw_dir_path - - mov ebx,[file_browser_data_1.x] - mov ecx,[file_browser_data_1.y] - mcall 13,,,[file_browser_data_1.background_color] - push ebx ecx - add ebx,10 shl 16 - sub ebx,20 - add ecx,10 shl 16 - sub ecx,20 - - shr ecx,16 - mov bx,cx - add ebx,5 shl 16+15 - mcall 4,,0x90000000,load_directory_error_type - - add ebx,20 - mcall 4,,,dir_path - - mov eax,[error_type] - shl eax,2 - add eax,error_fs_text_pointers - mov edx,[eax] - add ebx,20 - mcall 4 - - add ebx,20 - mcall ,,,error_help_text - - pop ecx ebx - - mov ebx,[file_browser_data_1.x] - mov ax,bx - shr eax,1 - shl eax,16 - add ebx,eax - mov eax,50 - mov bx,ax - shr eax,1 - shl eax,16 - sub ebx,eax - - mov ecx,[file_browser_data_1.y] - mov ax,cx - sub eax,40 - shl eax,16 - add ecx,eax - mov cx,15 - - mcall 8,,,5,[w_work_button] ;0xffffff - - shr ecx,16 - mov bx,cx - add ebx,4 shl 16 - mov ecx,[w_work_button_text] - add ecx,0x90000000 - mcall 4,,,message_cancel_button - - ret -;--------------------------------------------------------------------- -draw_file_name: - mov esi,user_selected_name - cld -@@: - lodsb - test al,al - jne @r - sub esi,user_selected_name - mov eax,esi - dec eax - - mov edi,edit1 - mov [edi+48],eax ;ed_size - mov [edi+52],eax ;ed_pos -;-------------------------------------- - mov eax,[file_browser_data_1.x] - mov ebx,eax - shr ebx,16 - and eax,0xffff - sub eax,200 - mov [edi],eax - add ebx,70 - mov [edi+4],ebx - - mov eax,[file_browser_data_1.y] - mov ebx,eax - shr ebx,16 - and eax,0xffff - add eax,ebx - add eax,5 - mov [edi+8],eax - - push dword name_editboxes - call [edit_box_draw] - - mov bx,[file_browser_data_1.start_x] - add bx,5 - shl ebx,16 - mov bx,[file_browser_data_1.start_y] - add bx,[file_browser_data_1.size_y] - add bx,9 - mov ecx,[w_work_text] - add ecx,0x80000000 - mcall 4,,,message_file_name - ret -;--------------------------------------------------------------------- -draw_dir_path: - mov eax,[file_browser_data_1.x] - mov ebx,eax - shr ebx,16 - add ebx,3 - and eax,0xffff - sub eax,5 - - mov [PathShow_data_1.area_size_x],ax - mov [PathShow_data_1.start_x],bx -;-------------------------------------- -;; top line -; mov ebx,[file_browser_data_1.x] -; mcall 13,,<7,1>,0x0 -; down line -; push ebx ecx -; mcall ,,<21,1>, -; pop ecx ebx -; left line -; push ebx -; mov bx,1 -; mov cx,15 -; mcall -; pop ebx -; right line -; mov ax,bx -; shr ebx,16 -; add bx,ax -; dec ebx -; shl ebx,16 -; mov bx,1 -; mcall 13 -;-------------------------------------- - mov ebx,[file_browser_data_1.x] - sub ebx,2 - add ebx,1 shl 16 - mcall 13,,<8,13>,0xffffcc -;-------------------------------------- -; prepare for PathShow - push dword PathShow_data_1 - call [PathShow_prepare] - -; draw for PathShow - push dword PathShow_data_1 - call [PathShow_draw] - - ret -;--------------------------------------------------------------------- -draw_draw_file_browser1: - call draw_dir_path - cmp [open_dialog_type],1 - jne @f - call draw_file_name -@@: - xor eax,eax - inc eax - mov [file_browser_data_1.all_redraw],eax - mov [scroll_bar_data_vertical.all_redraw],eax - - push dword file_browser_data_1 - call [FileBrowser_draw] - - call draw_open_button_label - - call prepare_scrollbar_data - - call draw_scrollbar - - xor eax,eax - mov [file_browser_data_1.all_redraw],eax - mov [scroll_bar_data_vertical.all_redraw],eax - ret -;--------------------------------------------------------------------- -draw_draw_file_browser2: - mov eax,2 - mov [file_browser_data_1.all_redraw],eax - - call get_scrollbar_data - - push dword file_browser_data_1 - call [FileBrowser_draw] - - call draw_open_button_label - - xor eax,eax - mov [file_browser_data_1.all_redraw],eax - ret -;--------------------------------------------------------------------- -draw_scrollbar1: - mov eax,[file_browser_data_1.start_draw_line] - mov [scroll_bar_data_vertical.position],eax - - call draw_scrollbar - - ret -;--------------------------------------------------------------------- -draw_scrollbar: - mov eax,[scroll_bar_data_vertical.max_area] - cmp eax,[scroll_bar_data_vertical.cur_area] - jbe @f - cmp [scroll_bar_data_vertical.cur_area],0 - je @f - push dword scroll_bar_data_vertical - call [scrollbar_ver_draw] -@@: - ret -;--------------------------------------------------------------------- -get_scrollbar_data: - mov eax,[scroll_bar_data_vertical.position] - mov [file_browser_data_1.start_draw_line],eax - ret -;--------------------------------------------------------------------- -prepare_scrollbar_data: - mov eax,[file_browser_data_1.folder_block] - mov [scroll_bar_data_vertical.max_area],eax - mov eax,[file_browser_data_1.max_panel_line] - mov [scroll_bar_data_vertical.cur_area],eax - ret -;--------------------------------------------------------------------- -get_active_pocess: - mcall 9,procinfo,-1 - mov ecx,[ebx+30] ; PID - mcall 18,21 - mov [active_process],eax ; WINDOW SLOT - mov ebx,[communication_area] - test ebx,ebx - jz .1 - mov [ebx+12],eax ; WINDOW SLOT to com. area -.1: - ret -;--------------------------------------------------------------------- -get_window_param: - mcall 9,procinfo,-1 - mov eax,[ebx+66] - inc eax - mov [window_high],eax - mov eax,[ebx+62] - inc eax - mov [window_width],eax - mov eax,[ebx+70] - mov [window_status],eax - ret -;--------------------------------------------------------------------- -convert_icons: - xor eax,eax - mov [return_code],eax -; mov eax,image_file - push image_file - call [cnv_png_import.Start] - - mov ecx,[image_file] - mcall 68,13, - test eax,eax - jz memory_free_error - - cmp [return_code],dword 0 - je @f - mov [N_error],6 - jmp button.exit -@@: - - mov ebx,[raw_pointer] - mov eax,[ebx+4] -; set of icon size x - mov [file_browser_data_1.icon_size_x],ax -; mov eax,[ebx+8] -; set of icon size y - mov [file_browser_data_1.icon_size_y],ax - inc ax - mov [file_browser_data_1.line_size_y],ax - mov eax,[ebx+12] -; set of RAW resolution to pixel - mov [file_browser_data_1.resolution_raw],eax - - mov eax,[ebx+20] - add eax,ebx -; set RAW palette,use else resolution 8bit or less - mov [file_browser_data_1.palette_raw],eax - - mov eax,[ebx+28] - add eax,ebx -; set RAW area for icon - mov [file_browser_data_1.icon_raw_area],eax - ret -;--------------------------------------------------------------------- -calc_ini: - mov eax,[image_file] - mov [file_browser_data_1.ini_file_start],eax - - mov edi,eax - add edi,[img_size] - dec edi - mov esi,eax - add esi,9 ; after [icons18] - cld -@@: - lodsb - cmp esi,edi - je @f - cmp al,byte '[' - jne @r - -@@: - mov [file_browser_data_1.ini_file_end],esi - ret -;--------------------------------------------------------------------- -load_ini: - mov edi,ini_file_name - - mov [fileinfo.name],edi - mov [fileinfo.subfunction],dword 5 - mov [fileinfo.size],dword 0 - mov [fileinfo.return],dword file_info - mcall 70,fileinfo - test eax,eax - jnz .error - - mov [fileinfo.subfunction],dword 0 - - mov ecx,[file_info+32] - mov [fileinfo.size],ecx - mov [img_size],ecx - - mcall 68,12 - test eax,eax - jz memory_get_error - - mov [fileinfo.return],eax - mov [image_file],eax - - mcall 70,fileinfo - test eax,eax - jnz .error - ret -.error: - mov [N_error],1 - mov [error_type],eax - jmp button.exit -;--------------------------------------------------------------------- -load_icons: - mov ebx,icons_file_name_2 - mov esi,path - mov edi,file_name - call copy_file_path - - mov [fileinfo.subfunction],dword 5 - mov [fileinfo.size],dword 0 - mov [fileinfo.return],dword file_info - mcall 70,fileinfo - test eax,eax - jz @f - - mov edi,icons_path - - mov [fileinfo.name],edi - mov [fileinfo.subfunction],dword 5 - mov [fileinfo.size],dword 0 - mov [fileinfo.return],dword file_info - mcall 70,fileinfo - test eax,eax - jnz .error -@@: - mov [fileinfo.subfunction],dword 0 - - mov ecx,[file_info+32] - mov [fileinfo.size],ecx - mov [img_size],ecx - - mcall 68,12 - test eax,eax - jz memory_get_error - - mov [fileinfo.return],eax - mov [image_file],eax - - mcall 70,fileinfo - test eax,eax - jnz .error - ret -.error: - mov [N_error],2 - mov [error_type],eax - jmp button.exit -;--------------------------------------------------------------------- -sort_directory: - mov eax,[file_browser_data_1.folder_data] - mov ebx,[eax+4] ; number of files - add eax,32 - cmp [eax+40],word '..' - jne @f - cmp [eax+40+2],byte 0 - jne @f - dec ebx - add eax,304 -@@: - push dword [sort_type] ; sort mode - push ebx ; number of files - push eax ; data files - call [sort_dir] - ret -;-------------------------------------------------------------------- -load_directory: - xor eax,eax - mov [N_error],eax - cmp [file_browser_data_1.folder_data],eax - je @f - mcall 68,13,[file_browser_data_1.folder_data] - test eax,eax - jz memory_free_error - -@@: - mov [dirinfo.size],dword 0 - mov [dirinfo.return],dir_header - mcall 70,dirinfo - test eax,eax - jz @f -; mov esi,previous_dir_path -; mov edi,dir_path -; call copy_dir_name.1 -; mcall 70,dirinfo -; test eax,eax -; jz @f - xor ebx,ebx - mov [file_browser_data_1.folder_data],ebx - jmp .error -@@: - - mov ecx,[dir_header.totl_blocks] - mov [dirinfo.size],ecx - imul ecx,304 - add ecx,32 - mcall 68,12 - test eax,eax - jz memory_get_error - - mov [dirinfo.return],eax - mov [file_browser_data_1.folder_data],eax - - mcall 70,dirinfo - test eax,eax - jnz .error - -; test for empty directory - mov eax,[dirinfo.return] - mov eax,[eax+4] - test eax,eax - jz @f - - call delete_point_dir -; call files_name_normalize - call check_filter - call prepare_extension_and_mark - call clear_data_fb_and_sb -@@: - ret - -.error: - mov [N_error],5 - mov [error_type],eax - ret -;--------------------------------------------------------------------- -clear_data_fb_and_sb: - xor eax,eax - mov [file_browser_data_1.start_draw_cursor_line],ax - mov [file_browser_data_1.start_draw_line],eax - mov [scroll_bar_data_vertical.position],eax - ret -;--------------------------------------------------------------------- -check_filter: - cmp [open_dialog_type],2 ; Select dir - je .1 - xor eax,eax - mov al,[filter_flag] - test eax,eax - jz @f - - mov eax,[communication_area] - test eax,eax - jz @f - mov eax,[eax+4096] - test eax,eax - jz @f -.1: - call delete_unsupported_BDFE -@@: - ret -;--------------------------------------------------------------------- -delete_unsupported_BDFE: - mov ebx,[file_browser_data_1.folder_data] - add ebx,4 - xor ecx,ecx - dec ecx - - mov eax,[file_browser_data_1.folder_data] - add eax,32+40 - sub eax,304 -.start: - inc ecx - add eax,304 -.1: - cmp [ebx],ecx - je .end - cmp [eax],byte '.' - jne @f - cmp [eax+1],byte 0 - je .delete -@@: - test [eax-40],byte 0x10 - jnz .start - - cmp [open_dialog_type],2 ; Select dir - je .delete - - push eax ebx - mov esi,eax - call search_expansion - test eax,eax - pop ebx eax - jnz .delete - - push eax ebx ecx esi - mov edi,[communication_area] - add edi,4100 - call compare_expansion - test eax,eax - pop esi ecx ebx eax - jz .start - -;------------------------------------------- -.delete: - dec dword [ebx] - mov esi,[ebx] - sub esi,ecx - - push ecx - mov ecx,esi - imul ecx,304/4 - mov edi,eax - sub edi,40 - mov esi,edi - add esi,304 - cld - rep movsd - pop ecx - - jmp .1 -.end: - ret -;--------------------------------------------------------------------- -search_expansion: - mov edi,esi - xor eax,eax -@@: - cld - lodsb - test eax,eax - jnz @b - mov ebx,esi - dec esi -@@: - std - lodsb - cmp esi,edi - jb .end_err - cmp al,'.' - jne @b - - add esi,2 - sub ebx,esi - mov [expansion_length],ebx - cld - xor eax,eax - ret - -.end_err: - cld - xor eax,eax - inc eax - ret -;--------------------------------------------------------------------- -compare_expansion: - mov ebx,[edi] - add ebx,edi - add edi,3 -.start: - cmp ebx,edi - jb .end_err - mov ecx,[expansion_length] - inc edi - - push esi edi -@@: - cld - lodsb - xchg esi,edi - shl eax,8 - lodsb - xchg esi,edi - call char_todown - xchg al,ah - call char_todown - cmp al,ah - jne @f - dec ecx - jnz @b - jmp .end -@@: - pop edi esi - jmp .start -.end: - pop edi esi - xor eax,eax - ret - -.end_err: - xor eax,eax - inc eax - ret -;--------------------------------------------------------------------- -prepare_extension_and_mark: - mov esi,[dirinfo.return] - mov ebp,[esi+4] - test ebp,ebp - jz .end - - add esi,32+40 -.start: - push esi - call search_extension_start - mov eax,esi - pop esi - sub eax,esi - sub ebx,esi - shl eax,16 - mov ax,bx - mov [esi+300-40],eax - mov [esi+299-40],byte 0 - add esi,304 - dec ebp - jnz .start -.end: - ret -;--------------------------------------------------------------------- -search_extension_start: - mov edx,esi - xor eax,eax - cld -@@: - lodsb - test eax,eax - jnz @b - dec esi - dec edx - push esi - std -@@: - lodsb - cmp esi,edx - je .end - cmp al,'.' - jnz @b - add esi,2 - cld - pop ebx - ret -.end: - cld - pop esi - mov ebx,esi - ret -;--------------------------------------------------------------------- -delete_point_dir: - mov eax,[dirinfo.return] - cmp [eax+32+40],byte '.' - jne @f - cmp [eax+32+40+1],byte 0 - jne @f - mov edi,eax - add edi,32 - mov esi,edi - add esi,304 - mov ecx,[eax+4] - dec ecx - mov [eax+4],ecx - imul ecx,304 - shr ecx,2 - cld - rep movsd -@@: - ret -;--------------------------------------------------------------------- -;files_name_normalize: -; mov esi,[dirinfo.return] -; mov ebp,[esi+4] -; add esi,32+40 -;.start: -; push esi -; mov al,[esi] -; call char_toupper -; mov [esi],al -;@@: -; inc esi -; mov al,[esi] -; test al,al -; jz @f -; call char_todown -; mov [esi],al -; jmp @b -;@@: -; pop esi -; add esi,304 -; dec ebp -; jnz .start -; ret -;--------------------------------------------------------------------- -char_toupper: -; convert character to uppercase,using cp866 encoding -; in: al=symbol -; out: al=converted symbol - cmp al,'a' - jb .ret - cmp al,'z' - jbe .az - cmp al,'а' - jb .ret - cmp al,'р' - jb .rus1 - cmp al,'я' - ja .ret -; 0xE0-0xEF -> 0x90-0x9F - sub al,'р'-'Р' -.ret: - ret -.rus1: -; 0xA0-0xAF -> 0x80-0x8F -.az: - and al,not 0x20 - ret -;--------------------------------------------------------------------- -char_todown: -; convert character to uppercase,using cp866 encoding -; in: al=symbol -; out: al=converted symbol - cmp al,'A' - jb .ret - cmp al,'Z' - jbe .az - cmp al,'А' - jb .ret - cmp al,'Р' - jb .rus1 - cmp al,'Я' - ja .ret -; 0x90-0x9F -> 0xE0-0xEF - add al,'р'-'Р' -.ret: - ret -.rus1: -; 0x80-0x8F -> 0xA0-0xAF -.az: - add al,0x20 - ret -;--------------------------------------------------------------------- -copy_file_path: - xor eax,eax - cld -@@: - lodsb - stosb - test eax,eax - jnz @b - mov esi,edi - dec esi - std -@@: - lodsb - cmp al,'/' - jnz @b - mov edi,esi - add edi,2 - mov esi,ebx - cld -@@: - lodsb - stosb - test eax,eax - jnz @b - ret -;--------------------------------------------------------------------- -copy_dir_path: - mov ecx,esi - inc ecx - inc ecx - xor eax,eax - cld -@@: - lodsb - test eax,eax - jnz @b - - cmp ecx,esi - jb @f - dec esi -@@: - mov [esi-1],byte '/' - mov edi,esi - mov esi,ebx -@@: - lodsb - stosb - test eax,eax - jnz @b - ret -;--------------------------------------------------------------------- -copy_exit_dir: - mov ebx,esi - inc ebx - xor eax,eax - cld -@@: - lodsb - test eax,eax - jnz @b - sub esi,2 - std -@@: - lodsb - cmp al,'/' - jnz @b - xor eax,eax - cmp ebx,esi - jb @f - inc esi -@@: - mov [esi+1],al - cld - ret -;--------------------------------------------------------------------- -copy_dir_name: - push esi edi - mov esi,edi - mov edi,previous_dir_path - call .1 - pop edi esi -.1: - xor eax,eax - cmp [esi],al - je .exit - cld -@@: - lodsb - stosb - test eax,eax - jnz @b -.exit: - ret -;--------------------------------------------------------------------- -;--------------------------------------------------------------------- - -;plugins_directory db 'plugins/',0 -plugins_directory db 0 - -system_dir_Boxlib db '/sys/lib/box_lib.obj',0 -system_dir_CnvPNG db '/sys/lib/cnv_png.obj',0 -system_dir_Sort db '/sys/lib/sort.obj',0 -system_dir_UNPACK db '/sys/lib/archiver.obj',0 - -align 4 -l_libs_start: -library01 l_libs system_dir_Boxlib+9,file_name,system_dir_Boxlib,\ -Box_lib_import,plugins_directory - -library02 l_libs system_dir_CnvPNG+9,file_name,system_dir_CnvPNG,\ -cnv_png_import,plugins_directory - -library03 l_libs system_dir_Sort+9,file_name,system_dir_Sort,\ -Sort_import,plugins_directory - -library04 l_libs system_dir_UNPACK+9,file_name,system_dir_UNPACK,\ -UNPACK_import,plugins_directory - -end_l_libs: - -;--------------------------------------------------------------------- -align 4 -UNPACK_import: -;unpack_Version dd aUnpack_Version -;unpack_PluginLoad dd aUnpack_PluginLoad -;unpack_OpenFilePlugin dd aUnpack_OpenFilePlugin -;unpack_ClosePlugin dd aUnpack_ClosePlugin -;unpack_ReadFolder dd aUnpack_ReadFolder -;unpack_SetFolder dd aUnpack_SetFolder -;unpack_GetFiles dd aUnpack_GetFiles -;unpack_GetOpenPluginInfo dd aUnpack_GetOpenPluginInfo -;unpack_Getattr dd aUnpack_Getattr -;unpack_Open dd aUnpack_Open -;unpack_Read dd aUnpack_Read -;unpack_Setpos dd aUnpack_Setpos -;unpack_Close dd aUnpack_Close -;unpack_DeflateUnpack dd aUnpack_DeflateUnpack -unpack_DeflateUnpack2 dd aUnpack_DeflateUnpack2 - dd 0 - dd 0 - -;aUnpack_Version db 'version',0 -;aUnpack_PluginLoad db 'plugin_load',0 -;aUnpack_OpenFilePlugin db 'OpenFilePlugin',0 -;aUnpack_ClosePlugin db 'ClosePlugin',0 -;aUnpack_ReadFolder db 'ReadFolder',0 -;aUnpack_SetFolder db 'SetFolder',0 -;aUnpack_GetFiles db 'GetFiles',0 -;aUnpack_GetOpenPluginInfo db 'GetOpenPluginInfo',0 -;aUnpack_Getattr db 'getattr',0 -;aUnpack_Open db 'open',0 -;aUnpack_Read db 'read',0 -;aUnpack_Setpos db 'setpos',0 -;aUnpack_Close db 'close',0 -;aUnpack_DeflateUnpack db 'deflate_unpack',0 -aUnpack_DeflateUnpack2 db 'deflate_unpack2',0 - -;--------------------------------------------------------------------- -;--------------------------------------------------------------------- -align 4 -Sort_import: -sort_init dd aSort_init -sort_version dd aSort_version -sort_dir dd aSort_SortDir -sort_strcmpi dd aSort_strcmpi - dd 0 - dd 0 - -aSort_init db 'START',0 -aSort_version db 'version',0 -aSort_SortDir db 'SortDir',0 -aSort_strcmpi db 'strcmpi',0 - -;--------------------------------------------------------------------- -align 4 -cnv_png_import: -.Start dd aCP_Start -.Version dd aCP_Version -.Check dd aCP_Check -.Assoc dd aCP_Assoc - dd 0 - dd 0 -aCP_Start db 'START',0 -aCP_Version db 'version',0 -aCP_Check db 'Check_Header',0 -aCP_Assoc db 'Associations',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 - dd 0 - dd 0 - -;a_init db 'lib_init',0 -;a_version db 'version',0 - -aEdit_box_draw db 'edit_box_draw',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 -;--------------------------------------------------------------------- -;--------------------------------------------------------------------- -align 4 -window_high dd 0 -window_width dd 0 -window_status dd 0 - -active_process dd 0 -PID dd 0 -sort_type dd 2 -root_folder_area dd 0 -root_folder_block dd 0 -root1_folder_area dd 0 -root1_folder_block dd 0 -temp_counter_1 dd 0 -retrieved_devices_table_counter dd 0 -communication_area dd 0 -open_dialog_type dd 0 - -open_dialog_title_pointer: - dd title_0 - dd title_1 - dd title_2 - dd 0 - -message_open_dialog_button: - dd message_0 - dd message_1 - dd message_2 - dd 0 -;--------------------------------------------------------------------- -expansion_length dd 0 -;--------------------------------------------------------------------- -N_error dd 0 -error_type dd 0 -error_path dd 0 -error_window_x: dd 100 shl 16+250 -error_window_y: dd 100 shl 16+120 -;--------------------------------------------------------------------- -mouse_scroll_data: -.vertical dw 0 -.horizontal dw 0 - -mouse_position: -.y dw 0 -.x dw 0 -;--------------------------------------------------------------------- -; not change this section!!! -; start section -;--------------------------------------------------------------------- -align 4 -image_file dd 0 -raw_pointer dd 0 -return_code dd 0 -img_size dd 0 -deflate_unpack dd 0 -raw_pointer_2 dd 0 ;+20 -;--------------------------------------------------------------------- -; end section -;--------------------------------------------------------------------- -align 4 -fileinfo: -.subfunction dd 5 -.Offset dd 0 -.Offset_1 dd 0 -.size dd 0 -.return dd file_info - db 0 -.name: dd file_name -;--------------------------------------------------------------------- -align 4 -dirinfo: -.subfunction dd 1 -.start dd 0 -.flags dd 0 -.size dd 0 -.return dd 0 - db 0 -.name: dd dir_path -;--------------------------------------------------------------------- -align 4 -dir_header: -.version dd 0 ;+0 -.curn_blocks dd 0 ;+4 -.totl_blocks dd 0 ;+8 -.other rb 20 -;--------------------------------------------------------------------- -load_ini_error_type: - db 'Error loading INI file',0 - -load_icons_error_type: - db 'Error loading of icons file',0 - -memory_free_error_type: - db 'Error of free memory',0 - -memory_get_error_type: - db 'Memory allocation error',0 - -load_directory_error_type: - db 'Error loading directory',0 - -convert_icons_error_type: - db 'Unsupported or corrupt data for icons file',0 -;--------------------------------------------------------------------- -error_help_text: - db 'For continue press key or ',0 -;--------------------------------------------------------------------- -align 4 -error_fs_text_pointers: - dd error_fs_text_0 - dd error_fs_text_1 - dd error_fs_text_2 - dd error_fs_text_3 - dd error_fs_text_4 - dd error_fs_text_5 - dd error_fs_text_6 - dd error_fs_text_7 - dd error_fs_text_8 - dd error_fs_text_9 - dd error_fs_text_10 - dd error_fs_text_11 - -error_fs_text_0: db '0 - Success full',0 -error_fs_text_1: db '1 - Base and/or partition of a hard disk is not defined',0 -error_fs_text_2: db '2 - Function is not supported for the given file system',0 -error_fs_text_3: db '3 - Unknown file system',0 -error_fs_text_4: db '4 - Reserved, is never returned in the current implementation',0 -error_fs_text_5: db '5 - File not found',0 -error_fs_text_6: db '6 - End of file, EOF',0 -error_fs_text_7: db '7 - Pointer lies outside of application memory',0 -error_fs_text_8: db '8 - Disk is full',0 -error_fs_text_9: db '9 - FAT table is destroyed',0 -error_fs_text_10: db '10 - Access denied',0 -error_fs_text_11: db '11 - Device error',0 -;--------------------------------------------------------------------- - -extended_key db 0 - -shift_flag db 0 -ctrl_flag db 0 -alt_flag db 0 - -error_window db 0 - -Tab_key db 0 -Tab_key_block db 0 - -filter_flag db 1 - -focus_pointer db 0 -;--------------------------------------------------------------------- -start_pach: - db '/sys',0 - -root_pach: - db '/',0 - -icons_file_name_2 db 'buttons/' -icons_path db '/sys/icons18.png',0 -ini_file_name db '/sys/File managers/icons.ini',0 -;--------------------------------------------------------------------- - -message: - db 'Press any key...',0 - -message_cancel_button: - db 'Cancel',0 - -message_ReloadDir_button: - db 'Refresh',0 - -message_ExitDir_button: - db '^',0 - -message_file_name: - db 'File name:',0 - -message_0: - db ' Open ',0 -message_1: - db ' Save ',0 -message_2: - db 'Select',0 - -title_0: - db 'Open Dialog',0 -title_1: - db 'Save Dialog',0 -title_2: - db 'Select Dir',0 -;--------------------------------------------------------------------- -align 4 -menu_data_1: -.type: dd 1 ;+0 -.x: -.size_x dw 80 ;+4 -.start_x dw 10 ;+6 -.y: -.size_y dw 15 ;+8 -.start_y dw 26 ;+10 -.text_pointer: dd menu_text_area_1 ;0 ;+12 -.pos_pointer: dd menu_text_area_1_1 ;0 ;+16 -.text_end dd menu_text_area_1_1 ;0 ;+20 -.ret_key dd 0 ;+24 -.mouse_keys dd 0 ;+28 -.x1: -.size_x1 dw 80 ;+32 -.start_x1 dw 10 ;+34 -.y1: -.size_y1 dw 100 ;+36 -.start_y1 dw 41 ;+38 -.bckg_col dd 0xffffff ;0xe5e5e5 ;+40 -.frnt_col dd 0xff ;+44 -.menu_col dd 0xeef0ff ;0xffffff ;+48 -.select dd 0 ;+52 -.out_select dd 0 ;+56 -.buf_adress dd 0 ;+60 -.procinfo dd procinfo ;+64 -.click dd 0 ;+68 -.cursor dd 0 ;+72 -.cursor_old dd 0 ;+76 -.interval dd 16 ;+80 -.cursor_max dd 0 ;+84 -.extended_key dd 0 ;+88 -.menu_sel_col dd 0x00cc00 ;+92 -.bckg_text_col dd 0 ; +96 -.frnt_text_col dd 0xffffff ;+100 -.mouse_keys_old dd 0 ;+104 -.font_height dd 8 ;+108 -.cursor_out dd 0 ;+112 -.get_mouse_flag dd 0 ;+116 -;--------------------------------------------------------------------- -menu_text_area_1: -db 'Select Disk',0 -;--------------------------------------------------------------------- -align 4 -menu_data_2: -.type: dd 0 ;+0 -.x: -.size_x dw 30 ;+4 -.start_x dw 95 ;+6 -.y: -.size_y dw 15 ;+8 -.start_y dw 26 ;+10 -.text_pointer: dd menu_text_area_2 ;0 ;+12 -.pos_pointer: dd menu_text_area_2.1 ;0 ;+16 -.text_end dd menu_text_area_2.end ;0 ;+20 -.ret_key dd 0 ;+24 -.mouse_keys dd 0 ;+28 -.x1: -.size_x1 dw 30 ;+32 -.start_x1 dw 95 ;+34 -.y1: -.size_y1 dw 100 ;+36 -.start_y1 dw 41 ;+38 -.bckg_col dd 0xffffff ; 0xe5e5e5 ;+40 -.frnt_col dd 0xff ;+44 -.menu_col dd 0xeef0ff ;0xffffff ;+48 -.select dd 0 ;+52 -.out_select dd 0 ;+56 -.buf_adress dd 0 ;+60 -.procinfo dd procinfo ;+64 -.click dd 0 ;+68 -.cursor dd 0 ;+72 -.cursor_old dd 0 ;+76 -.interval dd 16 ;+80 -.cursor_max dd 0 ;+84 -.extended_key dd 0 ;+88 -.menu_sel_col dd 0x00cc00 ;+92 -.bckg_text_col dd 0 ; +96 -.frnt_text_col dd 0xffffff ;+100 -.mouse_keys_old dd 0 ;+104 -.font_height dd 8 ;+108 -.cursor_out dd 0 ;+112 -.get_mouse_flag dd 0 ;+116 -;--------------------------------------------------------------------- -menu_text_area_2: -db 'Sort',0 -.1: -db 'Name',0 -db 'Type',0 -db 'Date',0 -db 'Size',0 -.end: -db 0 -;--------------------------------------------------------------------- -align 4 -menu_data_3: -.type: dd 0 ;+0 -.x: -.size_x dw 45 ;+4 -.start_x dw 130 ;+6 -.y: -.size_y dw 15 ;+8 -.start_y dw 26 ;+10 -.text_pointer: dd menu_text_area_3 ;0 ;+12 -.pos_pointer: dd menu_text_area_3.1 ;0 ;+16 -.text_end dd menu_text_area_3.end ;0 ;+20 -.ret_key dd 0 ;+24 -.mouse_keys dd 0 ;+28 -.x1: -.size_x1 dw 95 ;+32 -.start_x1 dw 130 ;+34 -.y1: -.size_y1 dw 100 ;+36 -.start_y1 dw 41 ;+38 -.bckg_col dd 0xffffff ; 0xe5e5e5 ;+40 -.frnt_col dd 0xff ;+44 -.menu_col dd 0xeef0ff ;0xffffff ;+48 -.select dd 0 ;+52 -.out_select dd 0 ;+56 -.buf_adress dd 0 ;+60 -.procinfo dd procinfo ;+64 -.click dd 0 ;+68 -.cursor dd 0 ;+72 -.cursor_old dd 0 ;+76 -.interval dd 16 ;+80 -.cursor_max dd 0 ;+84 -.extended_key dd 0 ;+88 -.menu_sel_col dd 0x00cc00 ;+92 -.bckg_text_col dd 0 ; +96 -.frnt_text_col dd 0xffffff ;+100 -.mouse_keys_old dd 0 ;+104 -.font_height dd 8 ;+108 -.cursor_out dd 0 ;+112 -.get_mouse_flag dd 0 ;+116 -;--------------------------------------------------------------------- -menu_text_area_3: -db 'Filter',0 -.1: -db '*.* - show all',0 -db 'Only supported',0 -.end: -db 0 -;--------------------------------------------------------------------- - -align 4 -scroll_bar_data_vertical: -.x: -.size_x dw 15 ;+0 -.start_x dw 500 ;+2 -.y: -.size_y dw 300 ;+4 -.start_y dw 45 ;+6 -.btn_high dd 15 ;+8 -.type dd 2 ;+12 -.max_area dd 10 ;+16 -.cur_area dd 2 ;+20 -.position dd 0 ;+24 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 ;0x8aeaa0 -.line_col dd 0 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -.r_size_x dw 0 ;+48 -.r_start_x dw 0 ;+50 -.run_y: -.r_size_y dw 0 ;+52 -.r_start_y dw 0 ;+54 -.m_pos dd 0 ;+56 -.m_pos_2 dd 0 ;+60 -.m_keys dd 0 ;+64 -.run_size dd 0 ;+68 -.position2 dd 0 ;+72 -.work_size dd 0 ;+76 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 -;--------------------------------------------------------------------- -align 4 -file_browser_data_1: -.type dd 0 ;+0 -.x: -.size_x dw 400 ;+4 -.start_x dw 10 ;+6 -.y: -.size_y dw 550 ;+8 -.start_y dw 45 ;+10 -.icon_size_y dw 16 ; +12 -.icon_size_x dw 16 ; +14 -.line_size_x dw 0 ; +16 -.line_size_y dw 18 ; +18 -.type_size_x dw 0 ; +20 -.size_size_x dw 0 ; +22 -.date_size_x dw 0 ; +24 -.attributes_size_x dw 0 ; +26 -.icon_assoc_area dd 0 ; +28 -.icon_raw_area dd 0 ; +32 -.resolution_raw dd 0 ; +36 -.palette_raw dd 0 ; +40 -.directory_path_area dd 0 ; +44 -.file_name_area dd 0 ; +48 -.select_flag dd 0 ; +52 -.background_color dd 0xffffff ; +56 -.select_color dd 0xbbddff ; +60 -.seclect_text_color dd 0 ; +64 -.text_color dd 0 ; +68 -.reduct_text_color dd 0xff0000 ; +72 -.marked_text_color dd 0 ; +76 -.max_panel_line dd 0 ; +80 -.select_panel_counter dd 1 ; +84 -.folder_block dd 0 ; +88 -.start_draw_line dd 0 ; +92 -.start_draw_cursor_line dw 0 ; +96 ; pixels -.folder_data dd 0 ; +98 -.temp_counter dd 0 ; +102 -.file_name_length dd 0 ; +106 -.marked_file dd 0 ; +110 -.extension_size dd 0 ; +114 -.extension_start dd 0 ; +118 -.type_table dd features_table ; +122 -.ini_file_start dd 0 ; +126 -.ini_file_end dd 0 ; +130 -.draw_scroll_bar dd 0 ; +134 -.font_size_y dw 9 ; +138 -.font_size_x dw 6 ; +140 -.mouse_keys dd 0 ; +142 -.mouse_keys_old dd 0 ; +146 -.mouse_pos dd 0 ; +150 -.mouse_keys_delta dd 0 ; +154 -.mouse_key_delay dd 50 ; +158 -.mouse_keys_tick dd 0 ; +162 -.start_draw_cursor_line_2 dw 0 ;+166 -.all_redraw dd 0 ;+168 -.selected_BDVK_adress dd 0 ;+172 -.key_action dw 0 ;+176 -.key_action_num dw 0 ;+178 -.name_temp_area dd name_temp_area ;+180 -.max_name_temp_size dd 0 ;+184 -.display_name_max_length dd 0 ;+188 -.draw_panel_selection_flag dd 0 ;+192 -.mouse_pos_old dd 0 ;+196 -.marked_counter dd 0 ;+200 -.keymap_pointer dd keymap_area ;+204 -;--------------------------------------------------------------------- -PathShow_data_1: -.type dd 0 ;+0 -.start_y dw 11 ;+4 -.start_x dw 10 ;+6 -.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 -.area_size_x dw 200 ;+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 dir_path ;+28 -.work_area_pointer dd text_work_area ;+32 -.temp_text_length dd 0 ;+36 -;--------------------------------------------------------------------- -; for EDITBOX -align 4 -name_editboxes: -edit1 edit_box 200,10,7,0xffffff,0xbbddff,0,0,0,4095,user_selected_name,mouse_dd,,0 -name_editboxes_end: - -;mouse_flag: dd 0x0 - -mouse_dd rd 1 -;--------------------------------------------------------------------- -window_x: -.x_size dw 420 -.x_start dw 10 -window_y: -.y_size dw 320 -.y_start dw 10 -;--------------------------------------------------------------------- -features_table: -.type_table: - db ' ' -;--------------------------------------------------------------------- -.size_table: - db '1023b ' -;--------------------------------------------------------------------- -.date_table: - db '00.00.0000 00:00 ' -;--------------------------------------------------------------------- -example_name_temp: - db 'temp1.asm',0 -;--------------------------------------------------------------------- -IM_END: -;--------------------------------------------------------------------- -do_not_draw_open_button_label rb 1 -;--------------------------------------------------------------------- -;include_debug_strings -;--------------------------------------------------------------------- -align 4 -app_colours: - -w_frame rd 1 -w_grab rd 1 -w_work_dark rd 1 -w_work_light rd 1 -w_grab_text rd 1 -w_work rd 1 -w_work_button rd 1 -w_work_button_text rd 1 -w_work_text rd 1 -w_work_graph rd 1 -;--------------------------------------------------------------------- -open_button_coordinates rd 1 -;--------------------------------------------------------------------- -error_handler_store_input_mode rd 1 -;--------------------------------------------------------------------- -menu_text_area_1_1: -rb 256 -;--------------------------------------------------------------------- - rb 1024 -stacktop: -;--------------------------------------------------------------------- -; window error message - rb 1024 -thread_stack: -;--------------------------------------------------------------------- -retrieved_devices_table: - rb 200 -;--------------------------------------------------------------------- -keymap_area: - rb 128 -;--------------------------------------------------------------------- -name_temp_area: - rb 256 -;--------------------------------------------------------------------- -user_selected_name: - rb 256 -;--------------------------------------------------------------------- -param: - rb 256 -;--------------------------------------------------------------------- -path: - rb 4096 -;--------------------------------------------------------------------- -file_name: - rb 4096 -;--------------------------------------------------------------------- -previous_dir_path: - rb 4096 -;--------------------------------------------------------------------- -dir_path: - rb 4096 -;--------------------------------------------------------------------- -dir_path_temp: - rb 4096 -;--------------------------------------------------------------------- -text_work_area: - rb 1024 -;--------------------------------------------------------------------- -procinfo: -process_info: - rb 1024 -;---------------------- -file_info: - rb 40 -I_END: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + +;***************************************************************************** +; Open Dialog - for Kolibri OS +; Copyright (c) 2009-2013, 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. +;***************************************************************************** +;--------------------------------------------------------------------- +;Some documentation for memory +; +;area name db 'FFFFFFFF_open_dialog',0 ; FFFFFFFF = PID +; +; communication area data +; flag ; +0 +; dw 0 ; 0 - empty, 1 - file for open, 2 -folder for open, +; 3 - cancel, 4 - path=name of area 6822. +; +; type of dialog: 0-Open, 1-Save, 2-Dir +; dw 0 ; +2 +; +; window X size ; +4 +; dw 0 +; +; window X position ; +6 +; dw 0 +; +; window y size ; +8 +; dw 0 +; +; window Y position ; +10 +; dw 0 +; +; OpenDialog WINDOW SLOT ; +12 +; dd 0 +; +; file_path ; +16 +; rb 3824 ; path to file +; +; file name ; +3840 +; rb 256 +; +; filtration flag ; +4096 +; dd 0 ; flag 0 - no filtration, 1 - filtering +; +; area for storage of filtering values ; +4100 +; rb 4092 +;--------------------------------------------------------------------- + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd START + dd IM_END + dd I_END + dd stacktop + dd param + dd path + +include '../../macros.inc' +;define __DEBUG__ 1 +;define __DEBUG_LEVEL__ 1 +;include '../../debug-fdo.inc' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' +;include 'macros.inc' +;include 'load_lib.mac' +;include 'box_lib.mac' +@use_library + +x_minimal_size equ 350 +y_minimal_size equ 250 +;--------------------------------------------------------------------- +;--------------------------------------------------------------------- +START: + mcall 68,11 + mcall 66,1,1 + mcall 40,0x27 + call get_communication_area + + call get_active_pocess + +load_libraries l_libs_start,end_l_libs + test eax,eax + jnz button.exit +; initialize sort + push dword 1 + call dword [sort_init] +; unpack deflate + mov eax,[unpack_DeflateUnpack2] + mov [deflate_unpack],eax + + mov esi,start_pach + mov edi,previous_dir_path + call copy_dir_name.1 + + call load_root_directory + call load_start_directory + call sort_directory + call load_icons + call convert_icons + call load_ini + call calc_ini + jmp red_1 +;--------------------------------------------------------------------- +red: + call control_minimal_window_size +red_1: + call draw_window +;--------------------------------------------------------------------- +still: + mcall 10 + cmp eax,1 + je red + cmp eax,2 + je key + cmp eax,3 + je button + cmp eax,6 + je mouse + jmp still +;--------------------------------------------------------------------- +control_minimal_window_size: + pusha + call get_window_param + test [window_status],10b + jnz .end ;red_1 + test [window_status],100b + jnz .end ;red_1 + test [window_status],1b + jnz .end ;red_1 + mov esi,-1 + mov eax,procinfo + mov eax,[eax+46] + cmp eax,dword y_minimal_size ;200 + jae @f + mov esi,dword y_minimal_size ;200 + mcall 67,-1,ebx,ebx +@@: + mov edx,-1 + mov eax,procinfo + mov eax,[eax+42] + cmp eax,dword x_minimal_size ;300 + jae @f + mov edx,dword x_minimal_size ;300 + mcall 67,-1,ebx,,ebx +@@: +.end: + popa + ret +;--------------------------------------------------------------------- +key: + mov al,[focus_pointer] + test al,al + jne key_ASCII + mcall 2 + xor ebx,ebx + cmp [extended_key],1 + je .extended_key + test al,al + jnz still + cmp ah,0xE0 + jne @f + mov [extended_key],1 + jmp still +@@: + cmp ah,72 ; arrow up + je .2 + cmp ah,80 ; arrow down + je .1 + cmp ah,28 ; Enter + je .7 + cmp ah,1 ; Esc + je button.exit + cmp ah,14 ; Backspace + je button.exit_dir + cmp ah,187 ; F1 + je select_disk + cmp ah,188 ; F2 + je select_sort + cmp ah,189 ; F3 + je select_filter + cmp ah,19 ; R + je button.reload_dir + cmp ah,42 + je key_shift_up + cmp ah,54 + je key_shift_up + cmp ah,170 + je key_shift_down + cmp ah,182 + je key_shift_down + cmp ah,29 + je key_ctrl_up + cmp ah,157 + je key_ctrl_down + cmp ah,56 + je key_alt_up + cmp ah,184 + je key_alt_down + cmp ah,206 ; NumPad+ Up + je NumPad_plus_Up + cmp ah,202 ; NumPad- Up + je NumPad_minus_Up + cmp ah,183 ; NumPad* Up + je NumPad_invert_Up + cmp ah,158 + je symbol_a_up + cmp ah,15 ; Tab down + je change_focus_area_press_Tab_key + cmp ah,143 ; Tab up + je change_focus_area_check_Tab_key +; compare for "1,2,3,4,5,6,7,8,9,0,(-),(=)" + cmp ah,2 + jb still + cmp ah,13 + jbe .12 +; compare for "q,w,e,r,t,y,u,i,o,p,([),(])" + cmp ah,16 + jb still + cmp ah,27 + jbe .12 +; compare for "a,s,d,f,g,h,j,k,l,(;),('),(`)" + cmp ah,30 + jb still + cmp ah,41 + jbe .12 +; compare for "(\),z,x,c,v,b,n,m,(,),(.),(/)" + cmp ah,43 + jb still + cmp ah,53 + jbe .12 + jmp still +.extended_key: + mov [extended_key],0 + cmp ah,80 ; arrow down + je .1 + cmp ah,72 ; arrow up + je .2 + cmp ah,81 ; PageDown + je .3 + cmp ah,73 ; PageUp + je .4 + cmp ah,71 ; Home + je .5 + cmp ah,79 ; End + je .6 + cmp ah,28 ; Enter + je .7 + cmp ah,82 ; Insert + je .8 + + cmp ah,29 + je key_ctrl_up + cmp ah,157 + je key_ctrl_down + cmp ah,56 + je key_alt_up + cmp ah,184 + je key_alt_down + jmp still +;--------------------------------- +.12: + inc ebx ; 12 - Search with key +;--------------------------------- +.11: + inc ebx ; 11 - Invert Mark +;--------------------------------- +.10: + inc ebx ; 10 - Unmark All +;--------------------------------- +.9: + inc ebx ; 9 - Mark All +;--------------------------------- +.8: + inc ebx ; 8 - Insert (Mark) +;--------------------------------- +.7: + inc ebx ; 7 - Enter +;--------------------------------- +.6: + inc ebx ; 6 - End +;--------------------------------- +.5: + inc ebx ; 5 - Home +;--------------------------------- +.4: + inc ebx ; 4 - PageUp +;--------------------------------- +.3: + inc ebx ; 3 - PageDown +;--------------------------------- +.2: + inc ebx ; 2 - arrow up +;--------------------------------- +.1: + inc ebx ; 1 - arrow down +;--------------------------------- + call .key_action + +; movzx ecx,word [file_browser_data_1.start_draw_cursor_line] +; mcall 47,0x80000,,<50,0>,0x40000000,0xffffff +; movzx ecx,word [file_browser_data_1.size_y] +; mcall 47,0x80000,,<150,0>,0x40000000,0xffffff + + mov eax,file_browser_data_1.mouse_keys_delta + cmp [eax],dword 3 + jne still + xor ebx,ebx + mov [eax],ebx + call load_next_dir + jmp still +;------------------------------------------------------- +.key_action: + mov [file_browser_data_1.key_action],bx + shr ax,8 + mov [file_browser_data_1.key_action_num],ax + + push dword file_browser_data_1 + call [FileBrowser_key] + + call draw_open_button_label + + cmp [file_browser_data_1.draw_scroll_bar],0 + je @f + call draw_scrollbar1 + mov [file_browser_data_1.draw_scroll_bar],0 +@@: + ret +;--------------------------------------------------------------------- +change_focus_area_Tab_key_ASCII: + xor eax,eax + inc eax + mov [Tab_key_block],al + jmp change_focus_area +;--------------------------------------------------------------------- +change_focus_area_press_Tab_key: + cmp [open_dialog_type],1 + jne still + mov al,[Tab_key_block] + test al,al + jnz still + xor eax,eax + inc eax + mov [Tab_key],al + jmp still +;--------------------------------------------------------------------- +change_focus_area_check_Tab_key: + cmp [open_dialog_type],1 + jne still + xor eax,eax + mov [Tab_key_block],al + mov al,[Tab_key] + test al,al + jz still + xor eax,eax + mov [Tab_key],al +;--------------------------------------------------------------------- +change_focus_area: + mov al,[focus_pointer] + inc al + and al,1 + mov [focus_pointer],al +.1: + mov edi,edit1 + test al,al + jne @f + mov [file_browser_data_1.select_panel_counter],1 + and [edi+44],dword 0xFFFFFFFD ; ed_focus + mov [edi+12],dword 0xffffff ; color white + call draw_draw_file_browser1 + mcall 66,1,1 + jmp still +@@: + mov [file_browser_data_1.select_panel_counter],0 + or [edi+44],dword ed_focus + mov [edi+12],dword 0xffffb0 ; color yellow + call draw_draw_file_browser1 + mcall 66,1,0 + jmp still +;--------------------------------------------------------------------- +key_ASCII: + mcall 2 + cmp ah,9 + je change_focus_area_Tab_key_ASCII + cmp ah,13 + je .13 + cmp ah,27 + je button.exit + push dword name_editboxes + call [edit_box_key] + jmp still +.13: +; cmp [open_dialog_type],2 ; Select dir +; je file_no_folder +; cmp [open_dialog_type],1 ; Save file +; jne user_selected_name_action ; load_dir +; inc [open_dialog_type] + jmp file_no_folder +;.load_dir: +; mov [file_browser_data_1.select_panel_counter],1 +; xor eax,eax +; mov [focus_pointer],al +; mcall 66,1,1 + +; xor eax,eax +; mov esi,dir_path +; cld +;@@: +; lodsb +; test al,al +; jne @r +; sub esi,2 +; cmp [esi],byte '/' +; jne @f +; xor eax,eax +; mov [esi],al +;@@: +; call load_next_dir.1 +; jmp still +;--------------------------------------------------------------------- +user_selected_name_action: + mov eax,[communication_area] + test eax,eax + jnz @f + call control_minimal_window_size + call draw_window + ret +@@: + add eax,16 ;12 +;copy_path user_selected_name,dir_path,eax,0 + mov esi,dir_path + mov edi,eax + call copy_dir_name + mov [edi-1],byte '/' + mov esi,user_selected_name + call copy_dir_name + + mov eax,[communication_area] + mov [eax],word 1 + jmp button.exit +;--------------------------------------------------------------------- +select_disk: + call check_alt +.1: + call load_root_directory + xor eax,eax + mov [menu_data_1.ret_key],eax + + push dword menu_data_1 + call [menu_bar_activate] + + call clear_control_key_flag + + mov eax,[menu_data_1.ret_key] + mov [menu_data_1.ret_key],dword 0 + cmp eax,1 + je select_filter.1 + + cmp eax,2 + je select_sort.1 + + cmp [menu_data_1.click],dword 1 + jne still + + cmp [menu_data_1.cursor_out],dword 0 + jne analyse_out_menu_1 + jmp still +;--------------------------------------------------------------------- +select_sort: + call check_alt +.1: + xor eax,eax + mov [menu_data_2.ret_key],eax + + push dword menu_data_2 + call [menu_bar_activate] + + call clear_control_key_flag + + mov eax,[menu_data_2.ret_key] + mov [menu_data_2.ret_key],dword 0 + cmp eax,1 + je select_disk.1 + + cmp eax,2 + je select_filter.1 + + + cmp [menu_data_2.click],dword 1 + jne still + + cmp [menu_data_2.cursor_out],dword 0 + jne analyse_out_menu_2 + jmp still +;--------------------------------------------------------------------- +select_filter: + call check_alt +.1: + xor eax,eax + mov [menu_data_3.ret_key],eax + + push dword menu_data_3 + call [menu_bar_activate] + + call clear_control_key_flag + + mov eax,[menu_data_3.ret_key] + mov [menu_data_3.ret_key],dword 0 + cmp eax,1 + je select_sort.1 + + cmp eax,2 + je select_disk.1 + + + cmp [menu_data_3.click],dword 1 + jne still + + cmp [menu_data_3.cursor_out],dword 0 + jne analyse_out_menu_3 + jmp still +;--------------------------------------------------------------------- +symbol_a_up: +NumPad_plus_Up: + call check_ctrl + jmp key.9 +;--------------------------------------- +NumPad_minus_Up: + call check_ctrl + jmp key.10 +;--------------------------------------- +NumPad_invert_Up: + call check_ctrl + jmp key.11 +;--------------------------------------- +check_alt: + xor eax,eax + mov al,[alt_flag] + test eax,eax + jz @f + xor ebx,ebx + ret +@@: + add esp,4 + jmp still +;--------------------------------------- +check_ctrl: + xor eax,eax + mov al,[ctrl_flag] + test eax,eax + jz @f + xor ebx,ebx + ret +@@: + add esp,4 + jmp still +;--------------------------------------------------------------------- +clear_control_key_flag: + xor eax,eax + mov [shift_flag],al + mov [ctrl_flag],al + mov [alt_flag],al + ret +;--------------------------------------------------------------------- +key_shift_up: + mov [shift_flag],1 + jmp still +;--------------------------------------------------------------------- +key_shift_down: + mov [shift_flag],0 + jmp still +;--------------------------------------------------------------------- +key_ctrl_up: + mov [ctrl_flag],1 + jmp still +;--------------------------------------------------------------------- +key_ctrl_down: + mov [ctrl_flag],0 + jmp still +;--------------------------------------------------------------------- +key_alt_up: + mov [alt_flag],1 + jmp still +;--------------------------------------------------------------------- +key_alt_down: + mov [alt_flag],0 + jmp still +;--------------------------------------------------------------------- +button: + mcall 17 + cmp ah,6 + je .reload_dir_1 + cmp ah,4 + je .open_dir_or_file + cmp ah,3 + je .exit + cmp ah,2 + je .exit_dir + cmp ah,1 + jne still +.exit: + mov eax,[communication_area] + test eax,eax + jz @f + cmp [eax],word 1 + je @f + mov [eax],word 3 +@@: + mov eax,[N_error] + test eax,eax + jz @f + call start_error_window_thread +@@: + call get_window_param + mov ebx,[communication_area] + mov ecx,procinfo +; mov eax,[window_x] + mov eax,[ecx+34] + shl eax,16 + add eax,[ecx+42] + mov [ebx+4],eax +; mov eax,[window_y] + mov eax,[ecx+38] + shl eax,16 + add eax,[ecx+46] + mov [ebx+8],eax + + mcall -1 +;--------------------------------------------------------------------- +.reload_dir: + cmp [ctrl_flag],bl + je key.12 ; Just symbol 'R' or 'r' +.reload_dir_1: + call load_next_dir.1 + jmp still +;--------------------------------------------------------------------- +.exit_dir: + call load_next_dir.exit_dir + jmp still +;--------------------------------------------------------------------- +.open_dir_or_file: + cmp [open_dialog_type],0 ;Open file + jne @f + + mov eax,[file_browser_data_1.folder_data] + mov eax,[eax+4] + test eax,eax + jz button.exit +@@: + cmp [open_dialog_type],2 ;Select dir + je file_no_folder + + cmp [open_dialog_type],1 ;Save file + jne @f + + mov al,[focus_pointer] + test al,al + jne file_no_folder +@@: + xor ebx,ebx + jmp key.7 +;--------------------------------------------------------------------- +thread_start: + mov eax,[N_error] + cmp al,1 + jne @f + mov [N_error],load_ini_error_type + mov [error_path],file_name + jmp .error_type +@@: + cmp al,2 + jne @f + mov [N_error],load_icons_error_type + mov [error_path],file_name + jmp .error_type +@@: + cmp al,3 + jne @f + mov [N_error],memory_free_error_type + xor eax,eax + mov [error_path],eax + mov [error_type],eax + jmp .red +@@: + cmp al,4 + jne @f + mov [N_error],memory_get_error_type + xor eax,eax + mov [error_path],eax + mov [error_type],eax + jmp .red +@@: + cmp al,5 + jne @f + mov [N_error],load_directory_error_type + mov [error_path],dir_path + jmp .error_type +@@: + cmp al,6 + jne .button + mov [N_error],convert_icons_error_type + mov [error_path],file_name + xor eax,eax + mov [error_type],eax + jmp .red +.error_type: + mov eax,[error_type] + shl eax,2 + add eax,error_fs_text_pointers + mov eax,[eax] + mov [error_type],eax +.red: + call draw_error_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 -1 + jmp .still +;--------------------------------------------------------------------- +draw_error_window: + mcall 12,1 + mcall 0,[error_window_x],[error_window_y],0x03ff0000 + call type_title + mcall 4,<10,30>,0x90ffffff,[N_error] + mov eax,[error_path] + test eax,eax + jz @f + mcall 4,<10,50>,,[error_path] +@@: + mov eax,[error_type] + test eax,eax + jz @f + mcall 4,<10,70>,,[error_type] +@@: + mcall 12,2 + ret +;--------------------------------------------------------------------- +start_error_window_thread: + mcall 9,procinfo,-1 + mov eax,[ebx+46] + shr eax,1 + add eax,[ebx+38] + sub eax,40 + mov [error_window_y+2],ax + mov eax,[ebx+42] + shr eax,1 + add eax,[ebx+34] + sub eax,125 + mov [error_window_x+2],ax + mcall 51,1,thread_start,thread_stack + ret +;--------------------------------------------------------------------- +mouse: + mcall 18,7 + cmp [active_process],eax + jne still + + mcall 37,7 + mov [mouse_scroll_data],eax + + mcall 37,1 + mov [mouse_position],eax + + cmp [scroll_bar_data_vertical.delta2],0 + jne .scrollbar + + mov [file_browser_data_1.select_flag],0 + + push dword file_browser_data_1 + call [FileBrowser_mouse] + + call draw_open_button_label + + mov eax,file_browser_data_1.mouse_keys_delta + cmp [eax],dword 3 + jne .check_focus ; scrollbar + mov [eax],dword 0 + call load_next_dir + jmp still +;--------------------------------------------------- +.check_focus: + mov ebx,[file_browser_data_1.select_flag] + test ebx,ebx + jz .scrollbar ;@f + mov al,[focus_pointer] + test al,al + jz .scrollbar + xor eax,eax + mov [focus_pointer],al + jmp change_focus_area.1 +;--------------------------------------------------- +.scrollbar: + mov eax,[scroll_bar_data_vertical.max_area] + cmp eax,[scroll_bar_data_vertical.cur_area] + jbe .menu_bar ;still + + push dword scroll_bar_data_vertical + call [scrollbar_ver_mouse] + + cmp [scroll_bar_data_vertical.redraw],0 + je .menu_bar ;still + mov [scroll_bar_data_vertical.redraw],0 +.draw: + call draw_draw_file_browser2 + jmp still + +;--------------------------------------------------- +.menu_bar: + cmp [scroll_bar_data_vertical.delta2],0 + jne still + +.menu_bar_1: + call .set_mouse_flag +@@: + push dword menu_data_1 + call [menu_bar_mouse] + + cmp [menu_data_1.click],dword 1 + jne .menu_bar_2 + + cmp [menu_data_1.cursor_out],dword 0 + jne select_disk.1 ;analyse_out_menu_1 + jmp .menu_bar_1 +;-------------------------------------------- +.menu_bar_2: + push dword menu_data_2 + call [menu_bar_mouse] + + cmp [menu_data_2.click],dword 1 + jne .menu_bar_3 + + cmp [menu_data_2.cursor_out],dword 0 + jne analyse_out_menu_2 + jmp .menu_bar_1 +;--------------------------------------------------- +.menu_bar_3: + push dword menu_data_3 + call [menu_bar_mouse] + + cmp [menu_data_3.click],dword 1 + jne .check_editboxes + + cmp [menu_data_3.cursor_out],dword 0 + jne analyse_out_menu_3 + jmp .menu_bar_1 +;--------------------------------------------------- +.check_editboxes: + cmp [open_dialog_type],1 + jne .check_scroll_event + mov eax,[edit1+44] + and eax,10b + push dword name_editboxes + call [edit_box_mouse] + mov ebx,[edit1+44] + and ebx,10b + cmp eax,ebx + je .check_scroll_event + mov al,[focus_pointer] + test al,al + jnz .check_scroll_event + xor eax,eax + test ebx,10b + jz @f + inc eax +@@: + mov [focus_pointer],al + jmp change_focus_area.1 +;--------------------------------------------------- +.check_scroll_event: + mov eax,[mouse_position] + xor ebx,ebx + mov bx,ax ; EBX mouse y + shr eax,16 ; EAX mouse x + + mov cx,[file_browser_data_1.start_x] + mov dx,[file_browser_data_1.start_y] + + cmp ax,cx + jb .mouse_next ; min x + + cmp bx,dx + jb .mouse_next ; min y + + add cx,[file_browser_data_1.size_x] + cmp ax,cx + ja .mouse_next ; max x + + add dx,[file_browser_data_1.size_y] + cmp bx,dx + ja .mouse_next ; max y + + xor ecx,ecx + xor ebx,ebx + mov eax,[mouse_scroll_data] + test eax,eax + jz .mouse_next + test ax,0x8000 + jnz .decr + shr eax,16 + test ax,0x8000 + jnz .decr_1 + + mov cx,[mouse_scroll_data.vertical] + test ecx,ecx + jnz @f + mov cx,[mouse_scroll_data.horizontal] + test ecx,ecx + jz .mouse_next +@@: + mov ebx,1 +@@: + push ebx ecx + call key.key_action + pop ecx ebx + dec ecx + jnz @r + jmp still +;---------------------------------------- +.decr: + mov bx,[mouse_scroll_data.vertical] + jmp @f +.decr_1: + mov bx,[mouse_scroll_data.horizontal] +@@: + mov ecx,0xffff + sub ecx,ebx + inc ecx + mov ebx,2 +@@: + push ebx ecx + call key.key_action + pop ecx ebx + dec ecx + jnz @r + jmp still +;--------------------------------------------------- +.mouse_next: + jmp still +;--------------------------------------------------------------------- +.set_mouse_flag: + xor eax,eax + inc eax + mov [menu_data_1.get_mouse_flag],eax + mov [menu_data_2.get_mouse_flag],eax + ret +;--------------------------------------------------------------------- +analyse_out_menu_1: +; Available disks + mov eax,[menu_data_1.cursor_out] + dec eax + imul esi,eax,10 + add esi,retrieved_devices_table + mov edi,dir_path + call copy_dir_name + call load_next_dir.1 + jmp still +;--------------------------------------------------------------------- +analyse_out_menu_2: +; Sort + mov eax,[menu_data_2.cursor_out] + xor ebx,ebx + cmp eax,dword 1 + je .1 + cmp eax,dword 2 + je .2 + cmp eax,dword 3 + je .3 + cmp eax,dword 4 + je .4 + jmp still +.4: + add ebx,2 +.3: + add ebx,2 +.2: + add ebx,2 +.1: + mov [sort_type],ebx + call sort_directory + call draw_draw_file_browser1 + jmp still +;--------------------------------------------------------------------- +analyse_out_menu_3: +; Filter + mov eax,[menu_data_3.cursor_out] + cmp eax,dword 1 + jne @f + mov [filter_flag],0 + call load_next_dir.1 + jmp still +@@: + cmp eax,dword 2 + jne still + mov [filter_flag],1 + call load_next_dir.1 + jmp still +;--------------------------------------------------------------------- +get_communication_area: + xor eax,eax + mov al,[param] + test eax,eax + jz .exit + mcall 68,22,param,,0x01 + mov [communication_area],eax + movzx ebx,word [eax+2] + mov [open_dialog_type],ebx + cmp ebx,1 + jne @f + pushad + mov [focus_pointer],bl + mov edi,edit1 + mov [file_browser_data_1.select_panel_counter],0 + or [edi+44],dword ed_focus + mov [edi+12],dword 0xffffb0 ; color yellow + mcall 66,1,0 + popad +@@: + mov ebx,[eax+4] + cmp bx,word x_minimal_size ;300 + jb @f + mov [window_x],ebx + mov ebx,[eax+8] + cmp bx,word y_minimal_size ;200 + jb @f + mov [window_y],ebx +.exit: + ret +;--------------------------------------------------------------------- +load_start_directory: + mov eax,[communication_area] + test eax,eax + jz .1 + movzx ebx,word [eax] + test eax,eax + jz .1 + add eax,16 ;12 ;4 + mov esi,eax + push esi + mov esi,[communication_area] + add esi,3840 ;4096-256 + mov eax,[esi] + test al,al + jnz @f + mov esi,example_name_temp +@@: + mov edi,user_selected_name + call copy_dir_name + pop esi + jmp .2 +.1: + mov esi,start_pach +.2: + mov edi,dir_path + call copy_dir_name + +; call load_directory +; mov eax,[N_error] +; test eax,eax +; jnz button.exit +.3: + call load_directory + mov eax,[N_error] + test eax,eax + jz @f + call error_handler + jmp .3 +@@: + ret +;--------------------------------------------------------------------- +load_next_dir: + mov ebx,[file_browser_data_1.folder_block] + test ebx,ebx + jz .exit + + mov ebx,[file_browser_data_1.selected_BDVK_adress] + add ebx,40 + test [ebx-40],byte 0x10 + jz file_no_folder + cmp [ebx],word '..' + jne @f + cmp [ebx+2],byte 0 + je .exit_dir +@@: + mov esi,dir_path + call copy_dir_path + +@@: +.1: + call load_directory + mov eax,[N_error] + test eax,eax + jz @f + call error_handler + jmp .1 +@@: + call sort_directory + + mov ebx,[scroll_bar_data_vertical.x] + inc ebx + mov ecx,[scroll_bar_data_vertical.y] + inc ecx + mcall 13,,,0xcccccc + mov edi,edit1 + xor eax,eax + mov [edi+44],eax + mov [edi+12],dword 0xffffff ; color white + call draw_draw_file_browser1 +.exit: + ret +.exit_dir: + mov esi,dir_path + call copy_exit_dir + jmp .1 +;--------------------------------------------------------------------- +error_handler: + mcall 66,2 + mov [error_handler_store_input_mode],eax + mcall 66,1,1 +.red: + call .draw_window +;------------------------------------ +.still: + mcall 10 + cmp eax,1 + je .red + cmp eax,2 + je .key + cmp eax,3 + je .button + jmp .still +;------------------------------------ +.draw_window: + xor eax,eax + inc eax + mov [error_window],al + call control_minimal_window_size + call draw_window + xor eax,eax + mov [error_window],al + ret +;------------------------------------ +.key: + mcall 2 + xor ebx,ebx + cmp [extended_key],1 + je .extended_key + test al,al + jnz .still + cmp ah,0xE0 + jne @f + mov [extended_key],1 + jmp .still +@@: + cmp ah,129 ; Esc + je .exit + jmp .still +.extended_key: + jmp .still +;------------------------------------ +.button: + mcall 17 + cmp ah,5 + je .exit + cmp ah,1 + jne .still + xor eax,eax + mov [N_error],eax + jmp button.exit +;------------------------------------ +.exit: + cmp [open_dialog_type],1 + jne @f + + mov esi,root_pach + mov edi,dir_path + call copy_dir_name.1 + mov esi,root_pach + mov edi,previous_dir_path + call copy_dir_name.1 + jmp .restore_input_mode +@@: + mov esi,previous_dir_path + mov edi,dir_path + call copy_dir_name.1 + mov esi,start_pach + mov edi,previous_dir_path + call copy_dir_name.1 +.restore_input_mode: + mcall 66,1,[error_handler_store_input_mode] + ret +;--------------------------------------------------------------------- +file_no_folder: + mov esi,dir_path + mov edi,file_name + call copy_dir_name + push ebx + mov al,[focus_pointer] + test al,al + je @f + mov ebx,user_selected_name + xor eax,eax + cmp [ebx],al + je .exit +@@: + cmp [open_dialog_type],2 + je @f + mov esi,file_name + call copy_dir_path +@@: + mov eax,[communication_area] + test eax,eax + jnz @f + call control_minimal_window_size + call draw_window + pop ebx + ret +@@: + mov edi,eax + add edi,16 ;12 + mov esi,file_name + call copy_dir_name + + pop esi + mov al,[focus_pointer] + test al,al + jz @f + mov esi,user_selected_name +@@: + xor eax,eax + cmp [esi],al + je .exit + mov edi,[communication_area] + add edi,3840 ;4096-256 + call copy_dir_name +.exit: + mov eax,[communication_area] + mov [eax],word 1 + jmp button.exit +;--------------------------------------------------------------------- +load_root_directory: + mov [dirinfo.name],dword dir_path_temp + mov eax,[dirinfo.return] + push eax + mov eax,[file_browser_data_1.folder_data] + push eax + xor eax,eax + mov [dirinfo.return],eax + mov [file_browser_data_1.folder_data],eax + mov esi,root_pach + mov edi,dir_path_temp + call copy_dir_name + call load_directory + mov eax,[N_error] + test eax,eax + jnz button.exit + + mov eax,[dirinfo.return] + mov [root_folder_area],eax + mov eax,[eax+4] + mov [root_folder_block],eax + + xor eax,eax + mov [dirinfo.return],eax + mov [file_browser_data_1.folder_data],eax + mov [temp_counter_1],eax ;0 + + mov [retrieved_devices_table_counter],eax ;0 +.start_temp_counter_1: + imul esi,[temp_counter_1],304 + add esi,[root_folder_area] + add esi,32+40 + mov edi,dir_path_temp+1 + mov [edi-1],byte '/' + call copy_dir_name + call load_directory + mov eax,[N_error] + test eax,eax + jnz button.exit + + mov eax,[dirinfo.return] + mov [root1_folder_area],eax + mov eax,[eax+4] + test eax,eax + jz .continue + mov [root1_folder_block],eax + + mov ebp,0 +.start_copy_device_patch: + imul edi,[retrieved_devices_table_counter],10 + add edi,retrieved_devices_table + mov [edi],byte '/' + inc edi + imul esi,[temp_counter_1],304 + add esi,[root_folder_area] + add esi,32+40 + + call copy_dir_name + + imul esi,ebp,304 + add esi,[root1_folder_area] + add esi,32+40 + mov [edi-1],byte '/' + + call copy_dir_name + + inc [retrieved_devices_table_counter] + inc ebp + cmp ebp,[root1_folder_block] + jb .start_copy_device_patch +.continue: + inc [temp_counter_1] + mov eax,[temp_counter_1] + cmp eax,[root_folder_block] + jb .start_temp_counter_1 + + cmp [root_folder_area],dword 0 + je @f + mcall 68,13,[root_folder_area] + test eax,eax + jz memory_free_error +@@: + + xor ecx,ecx + mov edi,menu_text_area_1_1 ;.1 +@@: + imul esi,ecx,10 + add esi,retrieved_devices_table + call copy_dir_name + inc ecx + cmp ecx,[retrieved_devices_table_counter] + jb @b + mov [menu_data_1.text_end],edi + xor eax,eax + mov [edi],eax + pop eax + mov [file_browser_data_1.folder_data],eax + pop eax + mov [dirinfo.return],eax + mov [dirinfo.name],dword dir_path + ret +;--------------------------------------------------------------------- +memory_free_error: + mov [N_error],3 + jmp button.exit +;--------------------------------------------------------------------- +memory_get_error: + mov [N_error],4 + jmp button.exit +;--------------------------------------------------------------------- +type_title: + mov ecx,[open_dialog_type] + shl ecx,2 + add ecx,open_dialog_title_pointer + mov ecx,[ecx] + test ecx,ecx + jz @f + mcall 71,1,; title ;;param ;file_name ;dir_path +@@: + ret +;--------------------------------------------------------------------- +draw_window: + + mcall 12,1 + call prepare_system_colors + xor esi,esi + mcall 0,[window_x],[window_y],0x63AABBCC + call type_title + call get_window_param + mov eax,[procinfo+70] ;status of window + test eax,100b + jne .end + + mov eax,[window_high] + sub eax,25+45 + mov [file_browser_data_1.size_y],ax + mov [scroll_bar_data_vertical.size_y],ax + mov eax,[window_width] + sub eax,10+20 + mov [file_browser_data_1.size_x],ax + add ax,10 + mov [scroll_bar_data_vertical.start_x],ax + mov edx,[w_work] ; color of work area RRGGBB,8->color + or edx,0x63000000 + mcall 13,[window_width],45 ;,0xcccccc + + push ecx + rol ecx,16 + add cx,[file_browser_data_1.size_y] + add cx,45 + ror ecx,16 + mov cx,25 + mcall + pop ecx + add ecx,45 shl 16 + mov cx,[file_browser_data_1.size_y] + mov bx,10 + mcall + mov bx,[file_browser_data_1.size_x] + add bx,10 + shl ebx,16 + mov bx,20 + mcall + + cmp [error_window],0 + je @f + call draw_for_fs_errors + jmp .1 +@@: + mov [do_not_draw_open_button_label],1 + call draw_draw_file_browser1 + mov [do_not_draw_open_button_label],0 +.1: + push dword menu_data_1 + call [menu_bar_draw] + push dword menu_data_2 + call [menu_bar_draw] + push dword menu_data_3 + call [menu_bar_draw] + + mov ebx,[file_browser_data_1.x] + mov ax,bx + shl eax,16 + add ebx,eax + mov eax,50 + mov bx,ax + shl eax,16 + sub ebx,eax + mov ecx,25 shl 16 + 16 + mcall 8,,,2,[w_work_button] ;0xffffff + + pusha + shr ecx,16 + mov bx,cx + add ebx,21 shl 16 + mov ecx,[w_work_button_text] + or ecx,0x90000000 + mcall 4,,,message_ExitDir_button + add ebx,4 + mcall + add ebx,4 + mcall + popa + + push ebx + sub ebx,70 shl 16 + mov bx,60 + mcall 8,,,6 + + shr ecx,16 + mov bx,cx + add ebx,2 shl 16 + mov ecx,[w_work_button_text] + or ecx,0x90000000 + mcall 4,,,message_ReloadDir_button + pop ebx + + mov ebx,[file_browser_data_1.x] + mov ax,bx + shl eax,16 + add ebx,eax + mov eax,55 + mov bx,ax + shl eax,16 + sub ebx,eax + mov ecx,[file_browser_data_1.y] + mov ax,cx + add eax,3 + shl eax,16 + add ecx,eax + mov cx,16 + mcall 8,,,3 + + pusha + shr ecx,16 + mov bx,cx + add ebx,4 shl 16 + mov ecx,[w_work_button_text] + or ecx,0x90000000 + mcall 4,,,message_cancel_button + popa + + sub ebx,65 shl 16 + mcall 8,,,4 + + shr ecx,16 + mov bx,cx + add ebx,4 shl 16 + mov edx,[open_dialog_type] + shl edx,2 + add edx,message_open_dialog_button + mov edx,[edx] +;------------------------------- + cmp [open_dialog_type],1 + jne @f + + cmp [focus_pointer],1 + je @f + + cmp [error_window],0 + jne @f + + mov eax,[file_browser_data_1.folder_block] + test eax,eax + jz @f + + mov eax,[file_browser_data_1.selected_BDVK_adress] + test [eax],byte 0x10 + jz @f + + mov edx,message_0 ; Open Dir +@@: +;-------------------------------------- + mov [open_button_coordinates],ebx + mov ecx,[w_work_button_text] + or ecx,0x90000000 + mcall 4 ;message_open_button +.end: + mcall 12,2 + ret +;--------------------------------------------------------------------- +draw_open_button_label: + cmp [do_not_draw_open_button_label],1 + je .exit_1 + + cmp [open_dialog_type],1 + jne .exit_1 + + cmp [focus_pointer],1 + je draw_save_button_label + + pusha + mov ebx,[open_button_coordinates] + test ebx,ebx + jz .exit + + mov edx,[open_dialog_type] + shl edx,2 + add edx,message_open_dialog_button + mov edx,[edx] + + mov eax,[file_browser_data_1.folder_block] + test eax,eax + jz .1 + + mov eax,[file_browser_data_1.selected_BDVK_adress] + test [eax],byte 0x10 + jz @f + + mov edx,message_0 ; Open Dir + jmp .1 +@@: + call copy_new_file_name +.1: + mov ecx,[w_work_button_text] + or ecx,0xd0000000 + mov edi,[w_work_button] + mcall 4 ;message_open_button +.exit: + popa +.exit_1: + ret +;--------------------------------------------------------------------- +draw_save_button_label: + pusha + mov ebx,[open_button_coordinates] + + mov edx,message_1 ; Save + + mov ecx,[w_work_button_text] + or ecx,0xd0000000 + mov edi,[w_work_button] + mcall 4 ;message_open_button + popa + ret +;--------------------------------------------------------------------- +copy_new_file_name: + mov esi,[file_browser_data_1.selected_BDVK_adress] + add esi,40 + mov edi,user_selected_name + cld + lodsb + test al,al + jnz .1 + ret +@@: + lodsb +.1: + stosb + test al,al + jnz @r + + sub edi,user_selected_name + dec edi + + mov esi,edit1 + mov [esi+48],edi ;ed_size + mov [esi+52],edi ;ed_pos + + push dword name_editboxes + call [edit_box_draw] + ret +;--------------------------------------------------------------------- +prepare_system_colors: + mcall 48,3,app_colours,10*4 + + mov eax,[w_work] + mov [menu_data_1.bckg_col],eax + mov [menu_data_2.bckg_col],eax + mov [menu_data_3.bckg_col],eax + + mov [menu_data_1.menu_col],eax + mov [menu_data_2.menu_col],eax + mov [menu_data_3.menu_col],eax + + mov [scroll_bar_data_vertical.bckg_col],eax + + mov eax,[w_work_button] + mov [menu_data_1.frnt_col],eax + mov [menu_data_2.frnt_col],eax + mov [menu_data_3.frnt_col],eax + + mov [scroll_bar_data_vertical.frnt_col],eax + + mov eax,[w_work_button] + mov [menu_data_1.menu_sel_col],eax + mov [menu_data_2.menu_sel_col],eax + mov [menu_data_3.menu_sel_col],eax + + mov eax,[w_work_text] + mov [menu_data_1.bckg_text_col],eax + mov [menu_data_2.bckg_text_col],eax + mov [menu_data_3.bckg_text_col],eax + + mov eax,[w_work_button_text] + mov [menu_data_1.frnt_text_col],eax + mov [menu_data_2.frnt_text_col],eax + mov [menu_data_3.frnt_text_col],eax + + mov [scroll_bar_data_vertical.line_col],eax + ret +;--------------------------------------------------------------------- +draw_for_fs_errors: + call draw_dir_path + + mov ebx,[file_browser_data_1.x] + mov ecx,[file_browser_data_1.y] + mcall 13,,,[file_browser_data_1.background_color] + push ebx ecx + add ebx,10 shl 16 + sub ebx,20 + add ecx,10 shl 16 + sub ecx,20 + + shr ecx,16 + mov bx,cx + add ebx,5 shl 16+15 + mcall 4,,0x90000000,load_directory_error_type + + add ebx,20 + mcall 4,,,dir_path + + mov eax,[error_type] + shl eax,2 + add eax,error_fs_text_pointers + mov edx,[eax] + add ebx,20 + mcall 4 + + add ebx,20 + mcall ,,,error_help_text + + pop ecx ebx + + mov ebx,[file_browser_data_1.x] + mov ax,bx + shr eax,1 + shl eax,16 + add ebx,eax + mov eax,50 + mov bx,ax + shr eax,1 + shl eax,16 + sub ebx,eax + + mov ecx,[file_browser_data_1.y] + mov ax,cx + sub eax,40 + shl eax,16 + add ecx,eax + mov cx,15 + + mcall 8,,,5,[w_work_button] ;0xffffff + + shr ecx,16 + mov bx,cx + add ebx,4 shl 16 + mov ecx,[w_work_button_text] + add ecx,0x90000000 + mcall 4,,,message_cancel_button + + ret +;--------------------------------------------------------------------- +draw_file_name: + mov esi,user_selected_name + cld +@@: + lodsb + test al,al + jne @r + sub esi,user_selected_name + mov eax,esi + dec eax + + mov edi,edit1 + mov [edi+48],eax ;ed_size + mov [edi+52],eax ;ed_pos +;-------------------------------------- + mov eax,[file_browser_data_1.x] + mov ebx,eax + shr ebx,16 + and eax,0xffff + sub eax,200 + mov [edi],eax + add ebx,70 + mov [edi+4],ebx + + mov eax,[file_browser_data_1.y] + mov ebx,eax + shr ebx,16 + and eax,0xffff + add eax,ebx + add eax,5 + mov [edi+8],eax + + push dword name_editboxes + call [edit_box_draw] + + mov bx,[file_browser_data_1.start_x] + add bx,5 + shl ebx,16 + mov bx,[file_browser_data_1.start_y] + add bx,[file_browser_data_1.size_y] + add bx,9 + mov ecx,[w_work_text] + add ecx,0x80000000 + mcall 4,,,message_file_name + ret +;--------------------------------------------------------------------- +draw_dir_path: + mov eax,[file_browser_data_1.x] + mov ebx,eax + shr ebx,16 + add ebx,3 + and eax,0xffff + sub eax,5 + + mov [PathShow_data_1.area_size_x],ax + mov [PathShow_data_1.start_x],bx +;-------------------------------------- +;; top line +; mov ebx,[file_browser_data_1.x] +; mcall 13,,<7,1>,0x0 +; down line +; push ebx ecx +; mcall ,,<21,1>, +; pop ecx ebx +; left line +; push ebx +; mov bx,1 +; mov cx,15 +; mcall +; pop ebx +; right line +; mov ax,bx +; shr ebx,16 +; add bx,ax +; dec ebx +; shl ebx,16 +; mov bx,1 +; mcall 13 +;-------------------------------------- + mov ebx,[file_browser_data_1.x] + sub ebx,2 + add ebx,1 shl 16 + mcall 13,,<8,13>,0xffffcc +;-------------------------------------- +; prepare for PathShow + push dword PathShow_data_1 + call [PathShow_prepare] + +; draw for PathShow + push dword PathShow_data_1 + call [PathShow_draw] + + ret +;--------------------------------------------------------------------- +draw_draw_file_browser1: + call draw_dir_path + cmp [open_dialog_type],1 + jne @f + call draw_file_name +@@: + xor eax,eax + inc eax + mov [file_browser_data_1.all_redraw],eax + mov [scroll_bar_data_vertical.all_redraw],eax + + push dword file_browser_data_1 + call [FileBrowser_draw] + + call draw_open_button_label + + call prepare_scrollbar_data + + call draw_scrollbar + + xor eax,eax + mov [file_browser_data_1.all_redraw],eax + mov [scroll_bar_data_vertical.all_redraw],eax + ret +;--------------------------------------------------------------------- +draw_draw_file_browser2: + mov eax,2 + mov [file_browser_data_1.all_redraw],eax + + call get_scrollbar_data + + push dword file_browser_data_1 + call [FileBrowser_draw] + + call draw_open_button_label + + xor eax,eax + mov [file_browser_data_1.all_redraw],eax + ret +;--------------------------------------------------------------------- +draw_scrollbar1: + mov eax,[file_browser_data_1.start_draw_line] + mov [scroll_bar_data_vertical.position],eax + + call draw_scrollbar + + ret +;--------------------------------------------------------------------- +draw_scrollbar: + mov eax,[scroll_bar_data_vertical.max_area] + cmp eax,[scroll_bar_data_vertical.cur_area] + jbe @f + cmp [scroll_bar_data_vertical.cur_area],0 + je @f + push dword scroll_bar_data_vertical + call [scrollbar_ver_draw] +@@: + ret +;--------------------------------------------------------------------- +get_scrollbar_data: + mov eax,[scroll_bar_data_vertical.position] + mov [file_browser_data_1.start_draw_line],eax + ret +;--------------------------------------------------------------------- +prepare_scrollbar_data: + mov eax,[file_browser_data_1.folder_block] + mov [scroll_bar_data_vertical.max_area],eax + mov eax,[file_browser_data_1.max_panel_line] + mov [scroll_bar_data_vertical.cur_area],eax + ret +;--------------------------------------------------------------------- +get_active_pocess: + mcall 9,procinfo,-1 + mov ecx,[ebx+30] ; PID + mcall 18,21 + mov [active_process],eax ; WINDOW SLOT + mov ebx,[communication_area] + test ebx,ebx + jz .1 + mov [ebx+12],eax ; WINDOW SLOT to com. area +.1: + ret +;--------------------------------------------------------------------- +get_window_param: + mcall 9,procinfo,-1 + mov eax,[ebx+66] + inc eax + mov [window_high],eax + mov eax,[ebx+62] + inc eax + mov [window_width],eax + mov eax,[ebx+70] + mov [window_status],eax + ret +;--------------------------------------------------------------------- +convert_icons: + xor eax,eax + mov [return_code],eax +; mov eax,image_file + push image_file + call [cnv_png_import.Start] + + mov ecx,[image_file] + mcall 68,13, + test eax,eax + jz memory_free_error + + cmp [return_code],dword 0 + je @f + mov [N_error],6 + jmp button.exit +@@: + + mov ebx,[raw_pointer] + mov eax,[ebx+4] +; set of icon size x + mov [file_browser_data_1.icon_size_x],ax +; mov eax,[ebx+8] +; set of icon size y + mov [file_browser_data_1.icon_size_y],ax + inc ax + mov [file_browser_data_1.line_size_y],ax + mov eax,[ebx+12] +; set of RAW resolution to pixel + mov [file_browser_data_1.resolution_raw],eax + + mov eax,[ebx+20] + add eax,ebx +; set RAW palette,use else resolution 8bit or less + mov [file_browser_data_1.palette_raw],eax + + mov eax,[ebx+28] + add eax,ebx +; set RAW area for icon + mov [file_browser_data_1.icon_raw_area],eax + ret +;--------------------------------------------------------------------- +calc_ini: + mov eax,[image_file] + mov [file_browser_data_1.ini_file_start],eax + + mov edi,eax + add edi,[img_size] + dec edi + mov esi,eax + add esi,9 ; after [icons18] + cld +@@: + lodsb + cmp esi,edi + je @f + cmp al,byte '[' + jne @r + +@@: + mov [file_browser_data_1.ini_file_end],esi + ret +;--------------------------------------------------------------------- +load_ini: + mov edi,ini_file_name + + mov [fileinfo.name],edi + mov [fileinfo.subfunction],dword 5 + mov [fileinfo.size],dword 0 + mov [fileinfo.return],dword file_info + mcall 70,fileinfo + test eax,eax + jnz .error + + mov [fileinfo.subfunction],dword 0 + + mov ecx,[file_info+32] + mov [fileinfo.size],ecx + mov [img_size],ecx + + mcall 68,12 + test eax,eax + jz memory_get_error + + mov [fileinfo.return],eax + mov [image_file],eax + + mcall 70,fileinfo + test eax,eax + jnz .error + ret +.error: + mov [N_error],1 + mov [error_type],eax + jmp button.exit +;--------------------------------------------------------------------- +load_icons: + mov ebx,icons_file_name_2 + mov esi,path + mov edi,file_name + call copy_file_path + + mov [fileinfo.subfunction],dword 5 + mov [fileinfo.size],dword 0 + mov [fileinfo.return],dword file_info + mcall 70,fileinfo + test eax,eax + jz @f + + mov edi,icons_path + + mov [fileinfo.name],edi + mov [fileinfo.subfunction],dword 5 + mov [fileinfo.size],dword 0 + mov [fileinfo.return],dword file_info + mcall 70,fileinfo + test eax,eax + jnz .error +@@: + mov [fileinfo.subfunction],dword 0 + + mov ecx,[file_info+32] + mov [fileinfo.size],ecx + mov [img_size],ecx + + mcall 68,12 + test eax,eax + jz memory_get_error + + mov [fileinfo.return],eax + mov [image_file],eax + + mcall 70,fileinfo + test eax,eax + jnz .error + ret +.error: + mov [N_error],2 + mov [error_type],eax + jmp button.exit +;--------------------------------------------------------------------- +sort_directory: + mov eax,[file_browser_data_1.folder_data] + mov ebx,[eax+4] ; number of files + add eax,32 + cmp [eax+40],word '..' + jne @f + cmp [eax+40+2],byte 0 + jne @f + dec ebx + add eax,304 +@@: + push dword [sort_type] ; sort mode + push ebx ; number of files + push eax ; data files + call [sort_dir] + ret +;-------------------------------------------------------------------- +load_directory: + xor eax,eax + mov [N_error],eax + cmp [file_browser_data_1.folder_data],eax + je @f + mcall 68,13,[file_browser_data_1.folder_data] + test eax,eax + jz memory_free_error + +@@: + mov [dirinfo.size],dword 0 + mov [dirinfo.return],dir_header + mcall 70,dirinfo + test eax,eax + jz @f +; mov esi,previous_dir_path +; mov edi,dir_path +; call copy_dir_name.1 +; mcall 70,dirinfo +; test eax,eax +; jz @f + xor ebx,ebx + mov [file_browser_data_1.folder_data],ebx + jmp .error +@@: + + mov ecx,[dir_header.totl_blocks] + mov [dirinfo.size],ecx + imul ecx,304 + add ecx,32 + mcall 68,12 + test eax,eax + jz memory_get_error + + mov [dirinfo.return],eax + mov [file_browser_data_1.folder_data],eax + + mcall 70,dirinfo + test eax,eax + jnz .error + +; test for empty directory + mov eax,[dirinfo.return] + mov eax,[eax+4] + test eax,eax + jz @f + + call delete_point_dir +; call files_name_normalize + call check_filter + call prepare_extension_and_mark + call clear_data_fb_and_sb +@@: + ret + +.error: + mov [N_error],5 + mov [error_type],eax + ret +;--------------------------------------------------------------------- +clear_data_fb_and_sb: + xor eax,eax + mov [file_browser_data_1.start_draw_cursor_line],ax + mov [file_browser_data_1.start_draw_line],eax + mov [scroll_bar_data_vertical.position],eax + ret +;--------------------------------------------------------------------- +check_filter: + cmp [open_dialog_type],2 ; Select dir + je .1 + xor eax,eax + mov al,[filter_flag] + test eax,eax + jz @f + + mov eax,[communication_area] + test eax,eax + jz @f + mov eax,[eax+4096] + test eax,eax + jz @f +.1: + call delete_unsupported_BDFE +@@: + ret +;--------------------------------------------------------------------- +delete_unsupported_BDFE: + mov ebx,[file_browser_data_1.folder_data] + add ebx,4 + xor ecx,ecx + dec ecx + + mov eax,[file_browser_data_1.folder_data] + add eax,32+40 + sub eax,304 +.start: + inc ecx + add eax,304 +.1: + cmp [ebx],ecx + je .end + cmp [eax],byte '.' + jne @f + cmp [eax+1],byte 0 + je .delete +@@: + test [eax-40],byte 0x10 + jnz .start + + cmp [open_dialog_type],2 ; Select dir + je .delete + + push eax ebx + mov esi,eax + call search_expansion + test eax,eax + pop ebx eax + jnz .delete + + push eax ebx ecx esi + mov edi,[communication_area] + add edi,4100 + call compare_expansion + test eax,eax + pop esi ecx ebx eax + jz .start + +;------------------------------------------- +.delete: + dec dword [ebx] + mov esi,[ebx] + sub esi,ecx + + push ecx + mov ecx,esi + imul ecx,304/4 + mov edi,eax + sub edi,40 + mov esi,edi + add esi,304 + cld + rep movsd + pop ecx + + jmp .1 +.end: + ret +;--------------------------------------------------------------------- +search_expansion: + mov edi,esi + xor eax,eax +@@: + cld + lodsb + test eax,eax + jnz @b + mov ebx,esi + dec esi +@@: + std + lodsb + cmp esi,edi + jb .end_err + cmp al,'.' + jne @b + + add esi,2 + sub ebx,esi + mov [expansion_length],ebx + cld + xor eax,eax + ret + +.end_err: + cld + xor eax,eax + inc eax + ret +;--------------------------------------------------------------------- +compare_expansion: + mov ebx,[edi] + add ebx,edi + add edi,3 +.start: + cmp ebx,edi + jb .end_err + mov ecx,[expansion_length] + inc edi + + push esi edi +@@: + cld + lodsb + xchg esi,edi + shl eax,8 + lodsb + xchg esi,edi + call char_todown + xchg al,ah + call char_todown + cmp al,ah + jne @f + dec ecx + jnz @b + jmp .end +@@: + pop edi esi + jmp .start +.end: + pop edi esi + xor eax,eax + ret + +.end_err: + xor eax,eax + inc eax + ret +;--------------------------------------------------------------------- +prepare_extension_and_mark: + mov esi,[dirinfo.return] + mov ebp,[esi+4] + test ebp,ebp + jz .end + + add esi,32+40 +.start: + push esi + call search_extension_start + mov eax,esi + pop esi + sub eax,esi + sub ebx,esi + shl eax,16 + mov ax,bx + mov [esi+300-40],eax + mov [esi+299-40],byte 0 + add esi,304 + dec ebp + jnz .start +.end: + ret +;--------------------------------------------------------------------- +search_extension_start: + mov edx,esi + xor eax,eax + cld +@@: + lodsb + test eax,eax + jnz @b + dec esi + dec edx + push esi + std +@@: + lodsb + cmp esi,edx + je .end + cmp al,'.' + jnz @b + add esi,2 + cld + pop ebx + ret +.end: + cld + pop esi + mov ebx,esi + ret +;--------------------------------------------------------------------- +delete_point_dir: + mov eax,[dirinfo.return] + cmp [eax+32+40],byte '.' + jne @f + cmp [eax+32+40+1],byte 0 + jne @f + mov edi,eax + add edi,32 + mov esi,edi + add esi,304 + mov ecx,[eax+4] + dec ecx + mov [eax+4],ecx + imul ecx,304 + shr ecx,2 + cld + rep movsd +@@: + ret +;--------------------------------------------------------------------- +;files_name_normalize: +; mov esi,[dirinfo.return] +; mov ebp,[esi+4] +; add esi,32+40 +;.start: +; push esi +; mov al,[esi] +; call char_toupper +; mov [esi],al +;@@: +; inc esi +; mov al,[esi] +; test al,al +; jz @f +; call char_todown +; mov [esi],al +; jmp @b +;@@: +; pop esi +; add esi,304 +; dec ebp +; jnz .start +; ret +;--------------------------------------------------------------------- +char_toupper: +; convert character to uppercase,using cp866 encoding +; in: al=symbol +; out: al=converted symbol + cmp al,'a' + jb .ret + cmp al,'z' + jbe .az + cmp al,'а' + jb .ret + cmp al,'р' + jb .rus1 + cmp al,'я' + ja .ret +; 0xE0-0xEF -> 0x90-0x9F + sub al,'р'-'Р' +.ret: + ret +.rus1: +; 0xA0-0xAF -> 0x80-0x8F +.az: + and al,not 0x20 + ret +;--------------------------------------------------------------------- +char_todown: +; convert character to uppercase,using cp866 encoding +; in: al=symbol +; out: al=converted symbol + cmp al,'A' + jb .ret + cmp al,'Z' + jbe .az + cmp al,'А' + jb .ret + cmp al,'Р' + jb .rus1 + cmp al,'Я' + ja .ret +; 0x90-0x9F -> 0xE0-0xEF + add al,'р'-'Р' +.ret: + ret +.rus1: +; 0x80-0x8F -> 0xA0-0xAF +.az: + add al,0x20 + ret +;--------------------------------------------------------------------- +copy_file_path: + xor eax,eax + cld +@@: + lodsb + stosb + test eax,eax + jnz @b + mov esi,edi + dec esi + std +@@: + lodsb + cmp al,'/' + jnz @b + mov edi,esi + add edi,2 + mov esi,ebx + cld +@@: + lodsb + stosb + test eax,eax + jnz @b + ret +;--------------------------------------------------------------------- +copy_dir_path: + mov ecx,esi + inc ecx + inc ecx + xor eax,eax + cld +@@: + lodsb + test eax,eax + jnz @b + + cmp ecx,esi + jb @f + dec esi +@@: + mov [esi-1],byte '/' + mov edi,esi + mov esi,ebx +@@: + lodsb + stosb + test eax,eax + jnz @b + ret +;--------------------------------------------------------------------- +copy_exit_dir: + mov ebx,esi + inc ebx + xor eax,eax + cld +@@: + lodsb + test eax,eax + jnz @b + sub esi,2 + std +@@: + lodsb + cmp al,'/' + jnz @b + xor eax,eax + cmp ebx,esi + jb @f + inc esi +@@: + mov [esi+1],al + cld + ret +;--------------------------------------------------------------------- +copy_dir_name: + push esi edi + mov esi,edi + mov edi,previous_dir_path + call .1 + pop edi esi +.1: + xor eax,eax + cmp [esi],al + je .exit + cld +@@: + lodsb + stosb + test eax,eax + jnz @b +.exit: + ret +;--------------------------------------------------------------------- +;--------------------------------------------------------------------- + +;plugins_directory db 'plugins/',0 +plugins_directory db 0 + +system_dir_Boxlib db '/sys/lib/box_lib.obj',0 +system_dir_CnvPNG db '/sys/lib/cnv_png.obj',0 +system_dir_Sort db '/sys/lib/sort.obj',0 +system_dir_UNPACK db '/sys/lib/archiver.obj',0 + +align 4 +l_libs_start: +library01 l_libs system_dir_Boxlib+9,file_name,system_dir_Boxlib,\ +Box_lib_import,plugins_directory + +library02 l_libs system_dir_CnvPNG+9,file_name,system_dir_CnvPNG,\ +cnv_png_import,plugins_directory + +library03 l_libs system_dir_Sort+9,file_name,system_dir_Sort,\ +Sort_import,plugins_directory + +library04 l_libs system_dir_UNPACK+9,file_name,system_dir_UNPACK,\ +UNPACK_import,plugins_directory + +end_l_libs: + +;--------------------------------------------------------------------- +align 4 +UNPACK_import: +;unpack_Version dd aUnpack_Version +;unpack_PluginLoad dd aUnpack_PluginLoad +;unpack_OpenFilePlugin dd aUnpack_OpenFilePlugin +;unpack_ClosePlugin dd aUnpack_ClosePlugin +;unpack_ReadFolder dd aUnpack_ReadFolder +;unpack_SetFolder dd aUnpack_SetFolder +;unpack_GetFiles dd aUnpack_GetFiles +;unpack_GetOpenPluginInfo dd aUnpack_GetOpenPluginInfo +;unpack_Getattr dd aUnpack_Getattr +;unpack_Open dd aUnpack_Open +;unpack_Read dd aUnpack_Read +;unpack_Setpos dd aUnpack_Setpos +;unpack_Close dd aUnpack_Close +;unpack_DeflateUnpack dd aUnpack_DeflateUnpack +unpack_DeflateUnpack2 dd aUnpack_DeflateUnpack2 + dd 0 + dd 0 + +;aUnpack_Version db 'version',0 +;aUnpack_PluginLoad db 'plugin_load',0 +;aUnpack_OpenFilePlugin db 'OpenFilePlugin',0 +;aUnpack_ClosePlugin db 'ClosePlugin',0 +;aUnpack_ReadFolder db 'ReadFolder',0 +;aUnpack_SetFolder db 'SetFolder',0 +;aUnpack_GetFiles db 'GetFiles',0 +;aUnpack_GetOpenPluginInfo db 'GetOpenPluginInfo',0 +;aUnpack_Getattr db 'getattr',0 +;aUnpack_Open db 'open',0 +;aUnpack_Read db 'read',0 +;aUnpack_Setpos db 'setpos',0 +;aUnpack_Close db 'close',0 +;aUnpack_DeflateUnpack db 'deflate_unpack',0 +aUnpack_DeflateUnpack2 db 'deflate_unpack2',0 + +;--------------------------------------------------------------------- +;--------------------------------------------------------------------- +align 4 +Sort_import: +sort_init dd aSort_init +sort_version dd aSort_version +sort_dir dd aSort_SortDir +sort_strcmpi dd aSort_strcmpi + dd 0 + dd 0 + +aSort_init db 'START',0 +aSort_version db 'version',0 +aSort_SortDir db 'SortDir',0 +aSort_strcmpi db 'strcmpi',0 + +;--------------------------------------------------------------------- +align 4 +cnv_png_import: +.Start dd aCP_Start +.Version dd aCP_Version +.Check dd aCP_Check +.Assoc dd aCP_Assoc + dd 0 + dd 0 +aCP_Start db 'START',0 +aCP_Version db 'version',0 +aCP_Check db 'Check_Header',0 +aCP_Assoc db 'Associations',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 + dd 0 + dd 0 + +;a_init db 'lib_init',0 +;a_version db 'version',0 + +aEdit_box_draw db 'edit_box_draw',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 +;--------------------------------------------------------------------- +;--------------------------------------------------------------------- +align 4 +window_high dd 0 +window_width dd 0 +window_status dd 0 + +active_process dd 0 +PID dd 0 +sort_type dd 2 +root_folder_area dd 0 +root_folder_block dd 0 +root1_folder_area dd 0 +root1_folder_block dd 0 +temp_counter_1 dd 0 +retrieved_devices_table_counter dd 0 +communication_area dd 0 +open_dialog_type dd 0 + +open_dialog_title_pointer: + dd title_0 + dd title_1 + dd title_2 + dd 0 + +message_open_dialog_button: + dd message_0 + dd message_1 + dd message_2 + dd 0 +;--------------------------------------------------------------------- +expansion_length dd 0 +;--------------------------------------------------------------------- +N_error dd 0 +error_type dd 0 +error_path dd 0 +error_window_x: dd 100 shl 16+250 +error_window_y: dd 100 shl 16+120 +;--------------------------------------------------------------------- +mouse_scroll_data: +.vertical dw 0 +.horizontal dw 0 + +mouse_position: +.y dw 0 +.x dw 0 +;--------------------------------------------------------------------- +; not change this section!!! +; start section +;--------------------------------------------------------------------- +align 4 +image_file dd 0 +raw_pointer dd 0 +return_code dd 0 +img_size dd 0 +deflate_unpack dd 0 +raw_pointer_2 dd 0 ;+20 +;--------------------------------------------------------------------- +; end section +;--------------------------------------------------------------------- +align 4 +fileinfo: +.subfunction dd 5 +.Offset dd 0 +.Offset_1 dd 0 +.size dd 0 +.return dd file_info + db 0 +.name: dd file_name +;--------------------------------------------------------------------- +align 4 +dirinfo: +.subfunction dd 1 +.start dd 0 +.flags dd 0 +.size dd 0 +.return dd 0 + db 0 +.name: dd dir_path +;--------------------------------------------------------------------- +align 4 +dir_header: +.version dd 0 ;+0 +.curn_blocks dd 0 ;+4 +.totl_blocks dd 0 ;+8 +.other rb 20 +;--------------------------------------------------------------------- +load_ini_error_type: + db 'Error loading INI file',0 + +load_icons_error_type: + db 'Error loading of icons file',0 + +memory_free_error_type: + db 'Error of free memory',0 + +memory_get_error_type: + db 'Memory allocation error',0 + +load_directory_error_type: + db 'Error loading directory',0 + +convert_icons_error_type: + db 'Unsupported or corrupt data for icons file',0 +;--------------------------------------------------------------------- +error_help_text: + db 'For continue press key or ',0 +;--------------------------------------------------------------------- +align 4 +error_fs_text_pointers: + dd error_fs_text_0 + dd error_fs_text_1 + dd error_fs_text_2 + dd error_fs_text_3 + dd error_fs_text_4 + dd error_fs_text_5 + dd error_fs_text_6 + dd error_fs_text_7 + dd error_fs_text_8 + dd error_fs_text_9 + dd error_fs_text_10 + dd error_fs_text_11 + +error_fs_text_0: db '0 - Success full',0 +error_fs_text_1: db '1 - Base and/or partition of a hard disk is not defined',0 +error_fs_text_2: db '2 - Function is not supported for the given file system',0 +error_fs_text_3: db '3 - Unknown file system',0 +error_fs_text_4: db '4 - Reserved, is never returned in the current implementation',0 +error_fs_text_5: db '5 - File not found',0 +error_fs_text_6: db '6 - End of file, EOF',0 +error_fs_text_7: db '7 - Pointer lies outside of application memory',0 +error_fs_text_8: db '8 - Disk is full',0 +error_fs_text_9: db '9 - FAT table is destroyed',0 +error_fs_text_10: db '10 - Access denied',0 +error_fs_text_11: db '11 - Device error',0 +;--------------------------------------------------------------------- + +extended_key db 0 + +shift_flag db 0 +ctrl_flag db 0 +alt_flag db 0 + +error_window db 0 + +Tab_key db 0 +Tab_key_block db 0 + +filter_flag db 1 + +focus_pointer db 0 +;--------------------------------------------------------------------- +start_pach: + db '/sys',0 + +root_pach: + db '/',0 + +icons_file_name_2 db 'buttons/' +icons_path db '/sys/icons18.png',0 +ini_file_name db '/sys/File managers/icons.ini',0 +;--------------------------------------------------------------------- + +message: + db 'Press any key...',0 + +message_cancel_button: + db 'Cancel',0 + +message_ReloadDir_button: + db 'Refresh',0 + +message_ExitDir_button: + db '^',0 + +message_file_name: + db 'File name:',0 + +message_0: + db ' Open ',0 +message_1: + db ' Save ',0 +message_2: + db 'Select',0 + +title_0: + db 'Open Dialog',0 +title_1: + db 'Save Dialog',0 +title_2: + db 'Select Dir',0 +;--------------------------------------------------------------------- +align 4 +menu_data_1: +.type: dd 1 ;+0 +.x: +.size_x dw 80 ;+4 +.start_x dw 10 ;+6 +.y: +.size_y dw 15 ;+8 +.start_y dw 26 ;+10 +.text_pointer: dd menu_text_area_1 ;0 ;+12 +.pos_pointer: dd menu_text_area_1_1 ;0 ;+16 +.text_end dd menu_text_area_1_1 ;0 ;+20 +.ret_key dd 0 ;+24 +.mouse_keys dd 0 ;+28 +.x1: +.size_x1 dw 80 ;+32 +.start_x1 dw 10 ;+34 +.y1: +.size_y1 dw 100 ;+36 +.start_y1 dw 41 ;+38 +.bckg_col dd 0xffffff ;0xe5e5e5 ;+40 +.frnt_col dd 0xff ;+44 +.menu_col dd 0xeef0ff ;0xffffff ;+48 +.select dd 0 ;+52 +.out_select dd 0 ;+56 +.buf_adress dd 0 ;+60 +.procinfo dd procinfo ;+64 +.click dd 0 ;+68 +.cursor dd 0 ;+72 +.cursor_old dd 0 ;+76 +.interval dd 16 ;+80 +.cursor_max dd 0 ;+84 +.extended_key dd 0 ;+88 +.menu_sel_col dd 0x00cc00 ;+92 +.bckg_text_col dd 0 ; +96 +.frnt_text_col dd 0xffffff ;+100 +.mouse_keys_old dd 0 ;+104 +.font_height dd 8 ;+108 +.cursor_out dd 0 ;+112 +.get_mouse_flag dd 0 ;+116 +;--------------------------------------------------------------------- +menu_text_area_1: +db 'Select Disk',0 +;--------------------------------------------------------------------- +align 4 +menu_data_2: +.type: dd 0 ;+0 +.x: +.size_x dw 30 ;+4 +.start_x dw 95 ;+6 +.y: +.size_y dw 15 ;+8 +.start_y dw 26 ;+10 +.text_pointer: dd menu_text_area_2 ;0 ;+12 +.pos_pointer: dd menu_text_area_2.1 ;0 ;+16 +.text_end dd menu_text_area_2.end ;0 ;+20 +.ret_key dd 0 ;+24 +.mouse_keys dd 0 ;+28 +.x1: +.size_x1 dw 30 ;+32 +.start_x1 dw 95 ;+34 +.y1: +.size_y1 dw 100 ;+36 +.start_y1 dw 41 ;+38 +.bckg_col dd 0xffffff ; 0xe5e5e5 ;+40 +.frnt_col dd 0xff ;+44 +.menu_col dd 0xeef0ff ;0xffffff ;+48 +.select dd 0 ;+52 +.out_select dd 0 ;+56 +.buf_adress dd 0 ;+60 +.procinfo dd procinfo ;+64 +.click dd 0 ;+68 +.cursor dd 0 ;+72 +.cursor_old dd 0 ;+76 +.interval dd 16 ;+80 +.cursor_max dd 0 ;+84 +.extended_key dd 0 ;+88 +.menu_sel_col dd 0x00cc00 ;+92 +.bckg_text_col dd 0 ; +96 +.frnt_text_col dd 0xffffff ;+100 +.mouse_keys_old dd 0 ;+104 +.font_height dd 8 ;+108 +.cursor_out dd 0 ;+112 +.get_mouse_flag dd 0 ;+116 +;--------------------------------------------------------------------- +menu_text_area_2: +db 'Sort',0 +.1: +db 'Name',0 +db 'Type',0 +db 'Date',0 +db 'Size',0 +.end: +db 0 +;--------------------------------------------------------------------- +align 4 +menu_data_3: +.type: dd 0 ;+0 +.x: +.size_x dw 45 ;+4 +.start_x dw 130 ;+6 +.y: +.size_y dw 15 ;+8 +.start_y dw 26 ;+10 +.text_pointer: dd menu_text_area_3 ;0 ;+12 +.pos_pointer: dd menu_text_area_3.1 ;0 ;+16 +.text_end dd menu_text_area_3.end ;0 ;+20 +.ret_key dd 0 ;+24 +.mouse_keys dd 0 ;+28 +.x1: +.size_x1 dw 95 ;+32 +.start_x1 dw 130 ;+34 +.y1: +.size_y1 dw 100 ;+36 +.start_y1 dw 41 ;+38 +.bckg_col dd 0xffffff ; 0xe5e5e5 ;+40 +.frnt_col dd 0xff ;+44 +.menu_col dd 0xeef0ff ;0xffffff ;+48 +.select dd 0 ;+52 +.out_select dd 0 ;+56 +.buf_adress dd 0 ;+60 +.procinfo dd procinfo ;+64 +.click dd 0 ;+68 +.cursor dd 0 ;+72 +.cursor_old dd 0 ;+76 +.interval dd 16 ;+80 +.cursor_max dd 0 ;+84 +.extended_key dd 0 ;+88 +.menu_sel_col dd 0x00cc00 ;+92 +.bckg_text_col dd 0 ; +96 +.frnt_text_col dd 0xffffff ;+100 +.mouse_keys_old dd 0 ;+104 +.font_height dd 8 ;+108 +.cursor_out dd 0 ;+112 +.get_mouse_flag dd 0 ;+116 +;--------------------------------------------------------------------- +menu_text_area_3: +db 'Filter',0 +.1: +db '*.* - show all',0 +db 'Only supported',0 +.end: +db 0 +;--------------------------------------------------------------------- + +align 4 +scroll_bar_data_vertical: +.x: +.size_x dw 15 ;+0 +.start_x dw 500 ;+2 +.y: +.size_y dw 300 ;+4 +.start_y dw 45 ;+6 +.btn_high dd 15 ;+8 +.type dd 2 ;+12 +.max_area dd 10 ;+16 +.cur_area dd 2 ;+20 +.position dd 0 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 ;0x8aeaa0 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +;--------------------------------------------------------------------- +align 4 +file_browser_data_1: +.type dd 0 ;+0 +.x: +.size_x dw 400 ;+4 +.start_x dw 10 ;+6 +.y: +.size_y dw 550 ;+8 +.start_y dw 45 ;+10 +.icon_size_y dw 16 ; +12 +.icon_size_x dw 16 ; +14 +.line_size_x dw 0 ; +16 +.line_size_y dw 18 ; +18 +.type_size_x dw 0 ; +20 +.size_size_x dw 0 ; +22 +.date_size_x dw 0 ; +24 +.attributes_size_x dw 0 ; +26 +.icon_assoc_area dd 0 ; +28 +.icon_raw_area dd 0 ; +32 +.resolution_raw dd 0 ; +36 +.palette_raw dd 0 ; +40 +.directory_path_area dd 0 ; +44 +.file_name_area dd 0 ; +48 +.select_flag dd 0 ; +52 +.background_color dd 0xffffff ; +56 +.select_color dd 0xbbddff ; +60 +.seclect_text_color dd 0 ; +64 +.text_color dd 0 ; +68 +.reduct_text_color dd 0xff0000 ; +72 +.marked_text_color dd 0 ; +76 +.max_panel_line dd 0 ; +80 +.select_panel_counter dd 1 ; +84 +.folder_block dd 0 ; +88 +.start_draw_line dd 0 ; +92 +.start_draw_cursor_line dw 0 ; +96 ; pixels +.folder_data dd 0 ; +98 +.temp_counter dd 0 ; +102 +.file_name_length dd 0 ; +106 +.marked_file dd 0 ; +110 +.extension_size dd 0 ; +114 +.extension_start dd 0 ; +118 +.type_table dd features_table ; +122 +.ini_file_start dd 0 ; +126 +.ini_file_end dd 0 ; +130 +.draw_scroll_bar dd 0 ; +134 +.font_size_y dw 9 ; +138 +.font_size_x dw 6 ; +140 +.mouse_keys dd 0 ; +142 +.mouse_keys_old dd 0 ; +146 +.mouse_pos dd 0 ; +150 +.mouse_keys_delta dd 0 ; +154 +.mouse_key_delay dd 50 ; +158 +.mouse_keys_tick dd 0 ; +162 +.start_draw_cursor_line_2 dw 0 ;+166 +.all_redraw dd 0 ;+168 +.selected_BDVK_adress dd 0 ;+172 +.key_action dw 0 ;+176 +.key_action_num dw 0 ;+178 +.name_temp_area dd name_temp_area ;+180 +.max_name_temp_size dd 0 ;+184 +.display_name_max_length dd 0 ;+188 +.draw_panel_selection_flag dd 0 ;+192 +.mouse_pos_old dd 0 ;+196 +.marked_counter dd 0 ;+200 +.keymap_pointer dd keymap_area ;+204 +;--------------------------------------------------------------------- +PathShow_data_1: +.type dd 0 ;+0 +.start_y dw 11 ;+4 +.start_x dw 10 ;+6 +.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1 +.area_size_x dw 200 ;+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 dir_path ;+28 +.work_area_pointer dd text_work_area ;+32 +.temp_text_length dd 0 ;+36 +;--------------------------------------------------------------------- +; for EDITBOX +align 4 +name_editboxes: +edit1 edit_box 200,10,7,0xffffff,0xbbddff,0,0,0,4095,user_selected_name,mouse_dd,,0 +name_editboxes_end: + +;mouse_flag: dd 0x0 + +mouse_dd rd 1 +;--------------------------------------------------------------------- +window_x: +.x_size dw 420 +.x_start dw 10 +window_y: +.y_size dw 320 +.y_start dw 10 +;--------------------------------------------------------------------- +features_table: +.type_table: + db ' ' +;--------------------------------------------------------------------- +.size_table: + db '1023b ' +;--------------------------------------------------------------------- +.date_table: + db '00.00.0000 00:00 ' +;--------------------------------------------------------------------- +example_name_temp: + db 'temp1.asm',0 +;--------------------------------------------------------------------- +IM_END: +;--------------------------------------------------------------------- +do_not_draw_open_button_label rb 1 +;--------------------------------------------------------------------- +;include_debug_strings +;--------------------------------------------------------------------- +align 4 +app_colours: + +w_frame rd 1 +w_grab rd 1 +w_work_dark rd 1 +w_work_light rd 1 +w_grab_text rd 1 +w_work rd 1 +w_work_button rd 1 +w_work_button_text rd 1 +w_work_text rd 1 +w_work_graph rd 1 +;--------------------------------------------------------------------- +open_button_coordinates rd 1 +;--------------------------------------------------------------------- +error_handler_store_input_mode rd 1 +;--------------------------------------------------------------------- +menu_text_area_1_1: +rb 256 +;--------------------------------------------------------------------- + rb 1024 +stacktop: +;--------------------------------------------------------------------- +; window error message + rb 1024 +thread_stack: +;--------------------------------------------------------------------- +retrieved_devices_table: + rb 200 +;--------------------------------------------------------------------- +keymap_area: + rb 128 +;--------------------------------------------------------------------- +name_temp_area: + rb 256 +;--------------------------------------------------------------------- +user_selected_name: + rb 256 +;--------------------------------------------------------------------- +param: + rb 256 +;--------------------------------------------------------------------- +path: + rb 4096 +;--------------------------------------------------------------------- +file_name: + rb 4096 +;--------------------------------------------------------------------- +previous_dir_path: + rb 4096 +;--------------------------------------------------------------------- +dir_path: + rb 4096 +;--------------------------------------------------------------------- +dir_path_temp: + rb 4096 +;--------------------------------------------------------------------- +text_work_area: + rb 1024 +;--------------------------------------------------------------------- +procinfo: +process_info: + rb 1024 +;---------------------- +file_info: + rb 40 +I_END: diff --git a/programs/fs/unz/unz.asm b/programs/fs/unz/unz.asm index 57e0eec9d..2b9a4d712 100644 --- a/programs/fs/unz/unz.asm +++ b/programs/fs/unz/unz.asm @@ -1,3 +1,9 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + ;unz - распаковщик, использующий archiver.obj. Поддерживает zip и 7z. ;unz [-o output path] [-f file for unpack] [-f ...] [-h] file.zip @@ -42,7 +48,7 @@ include 'lang.inc' ; Language support for locales: ru_RU (CP866), es_ES, en_US. include '../../macros.inc' include '../../proc32.inc' include "../../string.inc" -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../dll.inc' ;include '../../debug.inc' include 'debug.inc' @@ -917,5 +923,3 @@ stackDlg: stack_top: end_mem: - - diff --git a/programs/games/nu_pogodi/nu_pogod.asm b/programs/games/nu_pogodi/nu_pogod.asm index f04391434..77fd33dff 100644 --- a/programs/games/nu_pogodi/nu_pogod.asm +++ b/programs/games/nu_pogodi/nu_pogod.asm @@ -1,1433 +1,1439 @@ -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, 0, sys_path - -include '../../macros.inc' -include '../../proc32.inc' -include '../../KOSfuncs.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;макросы для задания элементов box_lib -include '../../dll.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load - -;флаги, для функции обрезания буфера -BUF2D_OPT_CROP_TOP equ 1 ;обрезка сверху -BUF2D_OPT_CROP_LEFT equ 2 ;обрезка слева -BUF2D_OPT_CROP_BOTTOM equ 4 ;обрезка снизу -BUF2D_OPT_CROP_RIGHT equ 8 ;обрезка справа -BUF2D_BIT_OPT_CROP_TOP equ 0 -BUF2D_BIT_OPT_CROP_LEFT equ 1 -BUF2D_BIT_OPT_CROP_BOTTOM equ 2 -BUF2D_BIT_OPT_CROP_RIGHT equ 3 - -BUF_STRUCT_SIZE equ 21 -buf2d_data equ dword[edi] ;данные буфера изображения -buf2d_w equ dword[edi+8] ;ширина буфера -buf2d_h equ dword[edi+12] ;высота буфера -buf2d_l equ word[edi+4] ;отступ слева -buf2d_t equ word[edi+6] ;отступ сверху -buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера -buf2d_color equ dword[edi+16] ;цвет фона буфера -buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения - -struct FileInfoBlock - Function dd ? - Position dd ? - Flags dd ? - Count dd ? - Buffer dd ? - db ? - FileName dd ? -ends - -displ_w dd ? ;ширина поля -displ_h dd ? ;высота поля -displ_bytes dd ? ;размер 1-го файла с изображением -offs_shadow_x dd ? ;сдвиг теней по оси 'x' -offs_shadow_y dd ? ;сдвиг теней по оси 'y' - -IMAGE_FONT_SIZE equ 128*144*3 - -BUT1_T equ 10 ;отступ сверху -BUT1_L equ 15 ;отступ слева -BUT1_W equ 50 ;ширина -BUT1_H equ 20 ;высота -BUT1_NEXT_TOP equ (BUT1_T+BUT1_H)*65536 - -game_select_mode db 1 ;режим выбора игры - -FILE_NAME_MAX equ 20 ;максимальная длинна имени файла (без папок, относительно текущей) -;значения имен по умолчанию -ini_def_decorat_file db 'curici.png',0 -ini_def_unit_file db 'wolf.png',0 -ini_def_objects_file db 'eggs.png',0 -ini_def_lost_file db 'chi.png',0 -;имена файлов -fn_icon0 rb FILE_NAME_MAX ;имя файла с декорациями -fn_icon1 rb FILE_NAME_MAX ;имя файла с волком и зайцем -fn_icon2 rb FILE_NAME_MAX ;имя файла с яйцами -fn_icon3 rb FILE_NAME_MAX ;имя файла с циплятами - -TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками - -ini_m_name db 'main.ini',0 -key_count db 'count',0 -key_game db 'g' - key_game_ind db 0,0,0 - -ini_name rb FILE_NAME_MAX ;имя ini файла c выбранной игрой -ini_sec_files db 'Files',0 -key_file_decorat db 'file_decorat',0 -key_file_unit db 'file_unit',0 -key_file_objects db 'file_objects',0 -key_file_lost db 'file_lost',0 -key_displ_w db 'displ_w',0 -key_displ_h db 'displ_h',0 -key_shadow_x db 'offs_shadow_x',0 -key_shadow_y db 'offs_shadow_y',0 - -ini_sec_game db 'Game',0 -key_delay_a db 'delay_a',0 -key_delay_b db 'delay_b',0 -key_delay_min db 'delay_min',0 - -ini_sec_color db 'Colors',0 -;ключи для считывания цветов из *.ini файла -key_color_fon db 'background',0 -key_color_shadows db 'shadows',0 -key_color_egg db 'objects',0 -key_color_chick db 'lost',0 -key_color_decorat: db 'dec' - .ind: db '?',0 -key_color_unit db 'unit',0 - -;цвета в игре -color_fon dd ? ;цвет фона -color_shadows dd ? ;цвет теней -color_wolf dd ? ;цвет волка и зайца -color_egg dd ? ;цвет яйца -color_chick dd ? ;цвет ципленка -color_decorat dd ?,?,? ;цвета декораций (курицы, перила, ...) - -;цвета интерфейса -color_but_sm dd 0x808080 ;цвет маленьких кнопок -color_but_te dd 0xffffff ;цвет текста на кнопках - -macro load_image_file path,buf,size { ;макрос для загрузки изображений - ;path - может быть переменной или строковым параметром - if path eqtype '' ;проверяем задан ли строкой параметр path - jmp @f - local .path_str - .path_str db path ;формируем локальную переменную - db 0 - @@: - ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0 - else - copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой - end if - - stdcall mem.Alloc, dword size ;выделяем память для изображения - mov [buf],eax - - mov eax,SF_FILE - mov [run_file_70.Function], SSF_READ_FILE - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], dword size - m2m [run_file_70.Buffer], [buf] - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения - cmp ebx,0xffffffff - je @f - ;определяем вид изображения и переводим его во временный буфер image_data - stdcall [img_decode], [buf],ebx,0 - mov [image_data],eax - ;преобразуем изображение к формату rgb - stdcall [img_to_rgb2], [image_data],[buf] - ;удаляем временный буфер image_data - stdcall [img_destroy], [image_data] - @@: -} - -;данные игры -bit_zaac equ 2 ;бит зайца -val_zaac equ 4 ;цифра отвечающая за бит зайца -bit_mig equ 3 ;бит мигания -val_mig equ 8 ;цифра отвечающая за бит мигания -mask_lot_lu equ 1b ;маска для левого верхнего лотка -mask_lot_ld equ 100000b ;маска для левого нижнего лотка -mask_lot_ru equ 10000000000b ;маска для правого верхнего лотка -mask_lot_rd equ 1000000000000000b ;маска для правого нижнего лотка -mask_clear_all equ 11111011111011110111101111011110b ;маска для очистки падающих яиц и прибежавших циплят -mask_move_eggs equ 11111111111111111111b ;маска движущихся яиц -mask_fail_eggs equ 100001000010000100000b ;маска падающих яиц -mask_chi_left equ 11111000000000000000000000b ;маска левых циплят -mask_chi_right equ 11111000000000000000000000000000b ;маска правых циплят -mask_chi_cr_l equ 1000000000000000000000b ;маска для создания левого -mask_chi_cr_r equ 1000000000000000000000000000b ;маска для создания правого -bit_chi_left equ 21 ;1-й бит который отвечает за бегущего слева -bit_chi_right equ 27 ;1-й бит который отвечает за бегущего права -val_zaac_time_y equ 5 ;колличество тактов, которое обязательно должен провисеть заяц -val_zaac_time_n equ 7 ;колличество тактов, которое обязательно должен быть спрятанным заяц - -txt_game_a db 'Игра А',0 -txt_game_b db 'Игра Б',0 - -zaac_status db 0 ;число тактов, которое заяц не должен менять свое положение -pos_wolf db 0 ;позиция волка 0-й бит слева/справа, 1-й бит сверху/вниз -;rb 1 -pos_eggs dd 0 ;позиции расположения яиц и циплят -eggs_count dw 0 ;колличество пойманых яиц -game_text db 'Игра _',13 -some_text db '0' - rb 8 ;текст с числом пойманных яиц -count_last db 0 ;счетчик пропущенных яиц -game_spd dd 0 ;задержка игры -game_delay_a dd ? ;первоначальная задержка для игры А -game_delay_b dd ? ;первоначальная задержка для игры Б -game_delay_min dd ? ;минимальная задержка - -;для генерации случайных чисел -rand_x dd 0 - -align 4 -rand_next: -;x(k+1) = (a*x(k)+c) mod m -; a=22695477, c=1, m=2^32 -push eax - mov eax,[rand_x] - imul eax,22695477 - inc eax - mov [rand_x],eax -pop eax - ret - -;создаем прозрачные буфера по 8 бит (трафареты), для рисования -;где buf - буфер на основе которого будет создан трафарет -;фоновый цвет буфера должен быть 0xffffff, иначе не произойдет обрезка -;по фоновому цвету и трафарет будет занимат ьмного места в памяти -align 4 -proc CreateTrapharetBuffer uses eax edi, buf:dword, img_data:dword - mov edi,[buf] - - ;заполнение данных буфера - mov buf2d_size_lt,0 - mov eax,[displ_w] - mov buf2d_w,eax - mov eax,[displ_h] - mov buf2d_h,eax - mov buf2d_color,0xffffff - mov buf2d_bits,24 - - stdcall [buf2d_create_f_img], edi,[img_data] ;создаем буфер - stdcall [buf2d_conv_24_to_8], edi,1 ;делаем буфер прозрачности 8бит - ;обрезаем лишние края буфера, для более быстрого рисования - stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT+BUF2D_OPT_CROP_LEFT - ret -endp - -align 4 -InitBackgroundBuffer: ;создание фонового изображения - pushad - mov edi,buf_fon - mov eax,[color_fon] - mov buf2d_color,eax - stdcall [buf2d_clear], edi,eax - mov esi,edi - - xor eax,eax - cld - cmp dword[offs_shadow_x],0 - jne @f - cmp dword[offs_shadow_y],0 - jne @f - jmp .end_shadows - @@: - mov edi,buf_decor - xor ebx,ebx - mov ecx,3 - @@: - mov ax,buf2d_t - add eax,[offs_shadow_y] - mov bx,buf2d_l - add ebx,[offs_shadow_x] - stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;рисуем тени декораций - add edi,BUF_STRUCT_SIZE - loop @b - .end_shadows: - - mov edi,buf_decor - mov ebx,color_decorat - mov ecx,3 - @@: - mov ax,buf2d_t - stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[ebx] ;рисуем декорации - add edi,BUF_STRUCT_SIZE - add ebx,4 - loop @b - popad - ret - -;рисует картинку в буфере buf из массива буферов buf_img с индексом ind -;т. е. buf <- buf_img[ind] -align 4 -proc DrawArrayImg, buf:dword, buf_img:dword, ind:dword, color:dword - pushad - mov edi,dword[ind] - imul edi,BUF_STRUCT_SIZE - add edi,dword[buf_img] - - mov esi,dword[buf] - xor eax,eax - mov ax,buf2d_t - xor ebx,ebx - mov bx,buf2d_l - stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color] - popad - ret -endp - -align 4 -DrawZaac: ;рисование зайца - push eax - bt word[pos_wolf],bit_zaac - jae .end_mig - - stdcall DrawArrayImg, buf_displ,buf_wolf,6,[color_wolf] ;рисуем тело зайца - mov eax,dword[pos_eggs] - and eax,mask_chi_right+mask_chi_left - cmp eax,0 - je .end_mig ;если нет бегающих циплят, то заяц рукой не машет - bt word[pos_wolf],bit_mig - jc @f - stdcall DrawArrayImg, buf_displ,buf_wolf,7,[color_wolf] ;рисуем руку зайца вверху - jmp .end_mig - @@: - stdcall DrawArrayImg, buf_displ,buf_wolf,8,[color_wolf] ;рисуем руку зайца внизу - .end_mig: - pop eax - ret - -align 4 -DrawWolf: ;рисует волка с корзинами - bt word[pos_wolf],0 - jc @f - stdcall DrawArrayImg, buf_displ,buf_wolf,0,[color_wolf] - bt word[pos_wolf],1 - jc .corz_ldn - stdcall DrawArrayImg, buf_displ,buf_wolf,1,[color_wolf] - jmp .corz_lend - .corz_ldn: - stdcall DrawArrayImg, buf_displ,buf_wolf,2,[color_wolf] - .corz_lend: - jmp .wolf_b - @@: - stdcall DrawArrayImg, buf_displ,buf_wolf,3,[color_wolf] - bt word[pos_wolf],1 - jc .corz_rdn - stdcall DrawArrayImg, buf_displ,buf_wolf,4,[color_wolf] - jmp .corz_rend - .corz_rdn: - stdcall DrawArrayImg, buf_displ,buf_wolf,5,[color_wolf] - .corz_rend: - .wolf_b: - ret - -align 4 -DrawEggs: ;рисует яйца - pushad - cld - - mov eax,dword[pos_eggs] - xor ebx,ebx - mov ecx,20 ;цикл для рисования котящихся яиц - @@: - bt eax,ebx - jae .draw_egg - stdcall DrawArrayImg, buf_displ,buf_egg,ebx,[color_egg] - .draw_egg: - inc ebx - loop @b - - ;mov eax,dword[pos_eggs] - and eax,mask_chi_left - cmp eax,0 - je @f - stdcall DrawArrayImg, buf_displ,buf_egg,20,[color_egg] ;разбитое яйцо слева - @@: - mov eax,dword[pos_eggs] - and eax,mask_chi_right - cmp eax,0 - je @f - stdcall DrawArrayImg, buf_displ,buf_egg,21,[color_egg] ;разбитое яйцо справа - @@: - - mov eax,dword[pos_eggs] - xor edx,edx - mov ebx,bit_chi_left - mov ecx,5 ;цикл для рисования левых циплят - @@: - bt eax,ebx - jae .draw_chick_l - stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] - .draw_chick_l: - inc ebx - inc edx - loop @b - mov ebx,bit_chi_right - mov ecx,5 ;цикл для рисования правых циплят - @@: - bt eax,ebx - jae .draw_chick_r - stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] - .draw_chick_r: - inc ebx - inc edx - loop @b - - xor eax,eax - mov al,byte[count_last] - mov ecx,eax ;цикл для рисования штрафных очков - shr ecx,1 - mov edx,10 ;индекс начала штрафных иконок в буфере buf_chi - cmp ecx,0 - je .no_unit_last - @@: - stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] - inc edx - loop @b - .no_unit_last: - - bt ax,0 ;проверяем мигающее не четное очко - jae @f - bt word[pos_wolf],bit_mig - jc @f - stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] ;мигающее штрафное очко - @@: - - popad - ret - -align 4 -CountEggsInc: ;увеличиваем счетчик яиц на 1 - push eax edi - xor eax,eax - inc word[eggs_count] ;увеличиваем счетчик яиц - cmp word[eggs_count],200 ;бонусные очки - je @f - cmp word[eggs_count],500 ;бонусные очки - je @f - jmp .no_bonus - @@: - mov byte[count_last],0 - .no_bonus: - - mov ax,word[eggs_count] - mov edi,some_text - call convert_to_str ;обновляем текстовую строку - and ax,0xf ;через каждые 16 яиц уменьшаем время - cmp ax,0 - jne @f - mov edi,[game_delay_min] ;минимальная задержка - cmp dword[game_spd],edi - jle @f - dec dword[game_spd] - @@: - pop edi eax - ret - -;input: -; eax - маска, указывающая с какой строны упало яйцо -align 4 -CountLastInc: ;начисление штрафных очков - inc byte[count_last] ;половинао штрафного очка - bt word[pos_wolf],bit_zaac - jc @f - inc byte[count_last] ;если нет зайца то еще 1-на половина штрафного очка - @@: - cmp byte[count_last],6 - jle @f - mov byte[count_last],6 ;ставим ограничени на число штрафных очков - @@: - or dword[pos_eggs],eax ;создаем бегущего ципленка - ret - -align 4 -MoveEggs: - pushad - xor byte[pos_wolf],val_mig ;бит для мигания - - cmp byte[count_last],6 ;максимальное число штрафных очков - je .end_fun - - rol dword[pos_eggs],1 - mov ecx,dword[pos_eggs] - and ecx,mask_fail_eggs - cmp ecx,0 - je .no_fail ;нет падающих яиц - ;начисление яиц попавших в корзину - ;или начисление штрафных очков - xor ebx,ebx - mov bl,byte[pos_wolf] ;берем параметры (позицию) волка - and bl,3 ;на всякий случай - - bt ecx,5 ;проверяем верхнее левое перило - jae .perilo_lu - cmp bx,0 ;проверяем наличие корзины - jne @f - call CountEggsInc - jmp .perilo_lu - @@: - mov eax,mask_chi_cr_l - call CountLastInc - .perilo_lu: - bt ecx,10 ;проверяем нижнее левое перило - jae .perilo_ld - cmp bx,2 ;проверяем наличие корзины - jne @f - call CountEggsInc - jmp .perilo_ld - @@: - mov eax,mask_chi_cr_l - call CountLastInc - .perilo_ld: - bt ecx,15 ;проверяем верхнее правое перило - jae .perilo_ru - cmp bx,1 ;проверяем наличие корзины - jne @f - call CountEggsInc - jmp .perilo_ru - @@: - mov eax,mask_chi_cr_r - call CountLastInc - .perilo_ru: - bt ecx,20 ;проверяем нижнее правое перило - jae .perilo_rd - cmp bx,3 ;проверяем наличие корзины - jne @f - call CountEggsInc - jmp .perilo_rd - @@: - mov eax,mask_chi_cr_r - call CountLastInc - .perilo_rd: - .no_fail: - - and dword[pos_eggs],mask_clear_all ;очистка упавших яиц и добежавших курей - - call rand_next - cmp byte[zaac_status],0 - jle @f - dec byte[zaac_status] - jmp .no_zaac_move ;заяц пока не двигается - @@: - - bt dword[rand_x],6 ;заяц от фонаря меняет статус - jc @f - xor byte[pos_wolf],val_zaac ;высовываем/засовываем зайца - bt word[pos_wolf],val_zaac - jc .zaac_n - mov byte[zaac_status],val_zaac_time_y ;ставим минимальное время для смены статуса - jmp @f - .zaac_n: - mov byte[zaac_status],val_zaac_time_n ;ставим минимальное время для смены статуса - @@: - .no_zaac_move: - - ;создание новых яиц - cmp word[eggs_count],5 ;первые 5 яиц катятся по 1-му - jge @f - mov ecx,dword[pos_eggs] - and ecx,mask_move_eggs - ;cmp ecx,0 - jnz .end_creat - @@: - - bt dword[rand_x],4 ;проверяем будем ли создавать новое яйцо - jc .end_creat - bt dword[rand_x],5 ;проверяем с какой стороны будем создавать новое яйцо - jc .creat_r - bt dword[rand_x],7 - jc @f - or dword[pos_eggs],mask_lot_lu - jmp .end_creat - @@: - or dword[pos_eggs],mask_lot_ld - jmp .end_creat - .creat_r: - bt dword[rand_x],7 - jc @f - or dword[pos_eggs],mask_lot_ru - jmp .end_creat - @@: - or dword[pos_eggs],mask_lot_rd - ;jmp .end_creat - .end_creat: - - .end_fun: - popad - ret - -align 4 -proc InitGame, b:dword ;первоначальные настройки игры - mov word[eggs_count],0 ;колличество пойманых яиц - mov byte[some_text],'0' - mov byte[some_text+1],0 ;текст с числом пойманных яиц - mov byte[count_last],0 ;штрафные очки - mov dword[pos_eggs],0 - mov byte[zaac_status],0 - - push eax ebx - cmp dword[b],0 - jne @f - mov byte[game_text+5],'А' - mov eax,dword[game_delay_a] - mov dword[game_spd],eax ;задержка игры - jmp .end_init - @@: - mov byte[game_text+5],'Б' - mov eax,dword[game_delay_b] - mov dword[game_spd],eax ;задержка игры - .end_init: - - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - mov [rand_x],eax ;заполняем 1-е случайное число - pop ebx eax - - ret -endp - -align 4 -proc LoadArrayBuffer, f_name:dword, buf_start:dword, count:dword - pushad - mov edx,[displ_bytes] - mov ecx,edx - imul ecx,[count] - mov eax,[f_name] - load_image_file eax,image_data_gray,ecx - mov edx,[displ_bytes] - mov eax,[image_data_gray] - mov edi,[buf_start] - mov ecx,[count] - cld - @@: ;считываем 3 буфера с декорациями - stdcall CreateTrapharetBuffer,edi,eax - add eax,edx - add edi,BUF_STRUCT_SIZE - loop @b - stdcall mem.Free,[image_data_gray] ;освобождаем память - popad - ret -endp - -txt_tile_type_0 rb FILE_NAME_MAX - -align 4 -user_is_select: - push eax ecx esi edi - stdcall [tl_node_get_data], tree1 - or eax,eax ;если имя игры пустое - jz @f - mov esi,eax - mov edi,ini_name - mov ecx,FILE_NAME_MAX - cld - rep movsb - - mov byte[game_select_mode],0 - call InitAll - @@: - pop edi esi ecx eax - - call draw_window - ret - -;****************************************************************************** -; функция, которая 1 раз делает все настройки нужные для игры -;****************************************************************************** -align 4 -InitAll: - pushad - ;работа с файлом настроек - copy_path ini_name,sys_path,file_name,0 - stdcall [ini_get_int],file_name,ini_sec_files,key_displ_w,210 - mov [displ_w],eax - stdcall [ini_get_int],file_name,ini_sec_files,key_displ_h,140 - mov [displ_h],eax - stdcall [ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file - stdcall [ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file - stdcall [ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file - stdcall [ini_get_str],file_name,ini_sec_files,key_file_lost,fn_icon3,FILE_NAME_MAX,ini_def_lost_file - - stdcall [ini_get_int],file_name,ini_sec_files,key_shadow_x,2 - mov [offs_shadow_x],eax - stdcall [ini_get_int],file_name,ini_sec_files,key_shadow_y,2 - mov [offs_shadow_y],eax - - ;считывание настроек влияющих на скорсть игры - stdcall [ini_get_int],file_name,ini_sec_game,key_delay_a,65 - mov [game_delay_a],eax - stdcall [ini_get_int],file_name,ini_sec_game,key_delay_b,35 - mov [game_delay_b],eax - stdcall [ini_get_int],file_name,ini_sec_game,key_delay_min,15 - mov [game_delay_min],eax - - stdcall [ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff - mov [color_fon],eax - stdcall [ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0 - mov [color_shadows],eax - stdcall [ini_get_color],file_name,ini_sec_color,key_color_unit,0 - mov [color_wolf],eax - stdcall [ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080 - mov [color_egg],eax - stdcall [ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0 - mov [color_chick],eax - - mov ebx,color_decorat - mov byte[key_color_decorat.ind],'0' - mov ecx,3 - cld - @@: - push ecx ;функция ini_get_color имеет право манять регистр ecx - stdcall [ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080 - pop ecx - mov [ebx],eax - add ebx,4 - inc byte[key_color_decorat.ind] - loop @b - - mov edx,[displ_w] - imul edx,[displ_h] - lea edx,[edx+edx*2] - mov [displ_bytes],edx ;вычисляем размер игрового поля - - stdcall LoadArrayBuffer, fn_icon0, buf_decor,3 ;считываем 3 буфера с декорациями - stdcall LoadArrayBuffer, fn_icon1, buf_wolf,9 ;считываем 9 буферов с волком и зайцем - stdcall LoadArrayBuffer, fn_icon2, buf_egg,22 ;считываем 22 буферов с яйцами - stdcall LoadArrayBuffer, fn_icon3, buf_chi,13 ;считываем 13 буферов с циплятами - - load_image_file 'font8x9.bmp', image_data_gray,IMAGE_FONT_SIZE - stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;создаем буфер - stdcall mem.Free,[image_data_gray] ;освобождаем память - - stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит - stdcall [buf2d_convert_text_matrix], buf_font - -;проверка занимаемого буфером места -;mov edi,buf_wolf -;add edi,BUF_STRUCT_SIZE ;переходим на буфер корзины -;stdcall [buf2d_clear],edi,0x808080 ;заливаем его серым цветом - - mov ebx,dword[displ_w] - mov edx,dword[displ_h] - - mov edi,buf_displ - mov buf2d_w,ebx - mov buf2d_h,edx - stdcall [buf2d_create], buf_displ ;создаем буфер для вывода на экран - - mov edi,buf_fon - mov buf2d_w,ebx - mov buf2d_h,edx - stdcall [buf2d_create], buf_fon ;создаем буфер с фоновыми декорациями - - call InitBackgroundBuffer ;заполняем буфер с фоновыми декорациями - stdcall InitGame,0 - popad - ret - -align 4 -start: - load_libraries l_libs_start,load_lib_end - - ;проверка на сколько удачно загузились библиотеки - cmp dword [lib0+ll_struc_size-4],0 - jnz @f - cmp dword [lib1+ll_struc_size-4],0 - jnz @f - cmp dword [lib2+ll_struc_size-4],0 - jnz @f - cmp dword [lib3+ll_struc_size-4],0 - jnz @f - jmp .lib - @@: - mcall SF_TERMINATE_PROCESS - .lib: - - mcall SF_SET_EVENTS_MASK,0x27 - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - -;****************************************************************************** -; подготовка списка игр -;****************************************************************************** - stdcall dword[tl_data_init], tree1 - - load_image_file 'tl_sys_16.png', image_data_gray,TREE_ICON_SYS16_BMP_SIZE - stdcall [buf2d_create_f_img], buf_tree_sys,[image_data_gray] ;создаем буфер - stdcall mem.Free,[image_data_gray] ;освобождаем память - - mov edi,buf_tree_sys - m2m dword[tree1.data_img_sys],buf2d_data - - ;работа с главным файлом настроек - copy_path ini_m_name,sys_path,file_name,0 - - stdcall [ini_get_int],file_name,ini_sec_files,key_count,1 - mov ecx,eax - mov dl,'0' - cld - @@: - mov byte[key_game_ind],dl - inc dl - push ecx edx - stdcall [ini_get_str],file_name,ini_sec_files,key_game,txt_tile_type_0,FILE_NAME_MAX,ini_def_decorat_file - stdcall [tl_node_add], tree1, 0, txt_tile_type_0 ;добавляем название игры - stdcall [tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок игр - pop edx ecx - loop @b - stdcall [tl_cur_beg], tree1 ;переносим курсор вверх - - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - mov [last_time],eax - - - -align 4 -red_win: - call draw_window - -align 4 -still: ;главный цикл - - cmp byte[game_select_mode],0 - jne .select_mode - - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - mov ebx,[last_time] - add ebx,[game_spd] ;delay - sub ebx,eax - cmp ebx,[game_spd] ;delay - ja it_is_time_now - test ebx,ebx - jz it_is_time_now - mcall SF_WAIT_EVENT_TIMEOUT - or eax,eax - jz it_is_time_now - - jmp @f - .select_mode: - mcall SF_WAIT_EVENT - @@: - - cmp al,1 ;изменилось положение окна - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 - jz mouse - - jmp still - -align 4 -mouse: - cmp byte[game_select_mode],0 - je @f - stdcall [tl_mouse], tree1 ;если игра еще не выбрана - @@: - jmp still - -align 4 -it_is_time_now: - mcall SF_SYSTEM_GET,SSF_TIME_COUNT - mov [last_time],eax - - ;cmp byte[game_select_mode],0 - ;jne still - - ;...здесь идут действия, вызываемые каждые delay сотых долей секунд... - call MoveEggs - call draw_display - jmp still - -align 4 -key: - push eax ebx - mcall SF_GET_KEY - - cmp byte[game_select_mode],0 - je @f - stdcall [tl_key], tree1 - @@: - - cmp ah,176 ;Left - jne @f - and byte[pos_wolf],0xfe - @@: - cmp ah,179 ;Right - jne @f - or byte[pos_wolf],1 - @@: - cmp ah,178 ;Up - jne @f - and byte[pos_wolf],0xff-2 - @@: - cmp ah,177 ;Down - jne @f - or byte[pos_wolf],2 - @@: - - cmp ah,97 ;a - jne @f - and byte[pos_wolf],0xff-3 ;00 - @@: - cmp ah,122 ;z - jne @f - and byte[pos_wolf],0xff-1 - or byte[pos_wolf],2 ;10 - @@: - cmp ah,39 ;' - jne @f - and byte[pos_wolf],0xff-2 - or byte[pos_wolf],1 ;01 - @@: - cmp ah,47 ;/ - jne @f - or byte[pos_wolf],3 ;11 - @@: - - pop ebx eax - jmp still - - -align 4 -draw_window: - pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - xor eax,eax - mov ebx,20*65536+480 - mov ecx,20*65536+270 - mov edx,[sc.work] - ;or edx,0x33000000 - or edx,0x73000000 - mov edi,hed - mcall ;создание окна - mcall SF_THREAD_INFO,procinfo,-1 - - cmp byte[game_select_mode],0 - jne .select_mode - - mov edi,buf_displ - mov eax,[procinfo.client_box.width] - cmp eax,[displ_w] - jle @f - sub eax,[displ_w] - shr eax,1 - mov buf2d_l,ax ;выправниваем буфер по центру окна - @@: - - call draw_display - - mov eax,SF_DRAW_RECT - mov edx,[sc.work] - xor esi,esi - mov si,buf2d_l - add esi,[displ_w] - mov ebx,[procinfo.client_box.width] - inc ebx - cmp esi,ebx - jge @f - sub ebx,esi - rol ebx,16 - mov bx,si - rol ebx,16 - mov ecx,[procinfo.client_box.height] - inc ecx - int 0x40 ;рисование правого бокового поля - jmp .draw_s - @@: - mov esi,[procinfo.client_box.width] ;когда по ширине не влазит - inc esi - .draw_s: - - ; *** рисование кнопок *** -push esi - movzx ebx,buf2d_l - add ebx,buf2d_w - add ebx,BUT1_L - shl ebx,16 - mov bx,BUT1_W - mov ecx,BUT1_T*65536+BUT1_H - mov esi,[color_but_sm] - mcall SF_DEFINE_BUTTON,,,5 - - inc edx - add ecx,BUT1_NEXT_TOP - int 0x40 -pop esi - - mov bx,BUT1_H-4 - add ebx,8 shl 16 - mov ecx,[color_but_te] - or ecx,0x80000000 - mov edx,txt_game_a - mcall SF_DRAW_TEXT - - ror ebx,16 - add ebx,BUT1_NEXT_TOP - ror ebx,16 - mov edx,txt_game_b - int 0x40 - - ; *** восстановление параметров *** - mov eax,SF_DRAW_RECT - mov edx,[sc.work] - - mov ebx,esi - mov ecx,[procinfo.client_box.height] - inc ecx - mov esi,[displ_h] - cmp esi,ebx - jge @f - sub ecx,esi - rol ecx,16 - mov cx,si - rol ecx,16 - int 0x40 ;рисование нижнего поля - @@: - - xor ebx,ebx - mov bx,buf2d_l - mov ecx,[displ_h] - int 0x40 ;рисование левого бокового поля - - jmp @f - .select_mode: - stdcall [tl_draw], tree1 - mov edi,tree1 - add edi,tl_offs_box - stdcall draw_rect_border, procinfo.client_box, edi - @@: - - mcall SF_REDRAW,SSF_END_DRAW - popad - ret - -; функция рисует поля вокруг прямоугольника user_box -; размер полей вычисляется исходя из размеров client_rect -; предполагается, что в большинстве случаев client_rect > user_box -align 4 -proc draw_rect_border, client_rect:dword, user_box:dword - pushad - mov esi,[user_box] - cmp esi,0 - je @f - mov edi,[client_rect] - mov ebx,dword[edi+8] ;+8 = width - inc bx - mov ecx,dword[esi+4] ;+4 = top - mov edx,[sc.work] - mcall SF_DRAW_RECT ;top - - mov eax,dword[esi+4] ;+4 = top - add eax,dword[esi+12] ;+12 = height - cmp eax,dword[edi+12] - jge .no_bottom - mov ecx,eax - shl ecx,16 - mov cx,word[edi+12] ;+12 = bottom - inc cx - sub cx,ax - mcall SF_DRAW_RECT ;bottom - .no_bottom: - - mov ebx,dword[esi] ;+0 left - mov ecx,dword[esi+4] ;+4 = top - shl ecx,16 - mov cx,word[esi+12] ;+12 = height - inc cx - mcall SF_DRAW_RECT ;left - - mov eax,dword[esi] ;+0 left - add eax,dword[esi+8] ;+8 = width - mov ebx,eax - shl ebx,16 - mov bx,word[edi+8] ;+8 = right - sub bx,ax - inc bx - mcall SF_DRAW_RECT ;right - @@: - popad - ret -endp - -align 4 -draw_display: - - stdcall mem_copy, [buf_fon],[buf_displ],[displ_bytes] ;копирование изображения из фонового буфера - call DrawZaac ;рисуем зайца - call DrawWolf ;рисуем волка - call DrawEggs ;рисуем яйца - -push eax - mov eax,[displ_w] - shr eax,1 - stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;рисуем строку с текстом -pop eax - stdcall [buf2d_draw], buf_displ - ret - -align 4 -button: - mcall SF_GET_BUTTON - - cmp ah,5 - jne @f - stdcall InitGame,0 - @@: - cmp ah,6 - jne @f - stdcall InitGame,1 - @@: - cmp ah,1 - jne still -.exit: - stdcall [buf2d_delete],buf_fon ;удаляем буфер - stdcall [buf2d_delete],buf_displ ;удаляем буфер - - stdcall [buf2d_delete],buf_tree_sys - stdcall [buf2d_delete],buf_font - - cld - mov ecx,3 - mov edi,buf_decor - @@: ;удаляем 3 буфера - stdcall [buf2d_delete],edi - add edi,BUF_STRUCT_SIZE - loop @b - mov ecx,9 - mov edi,buf_wolf - @@: ;удаляем 9 буферов с волком и зайцем - stdcall [buf2d_delete],edi - add edi,BUF_STRUCT_SIZE - loop @b - mov ecx,13 - mov edi,buf_chi - @@: ;удаляем 13 буферов - stdcall [buf2d_delete],edi - add edi,BUF_STRUCT_SIZE - loop @b - mov ecx,22 - mov edi,buf_egg - @@: ;удаляем 22 буфера - stdcall [buf2d_delete],edi - add edi,BUF_STRUCT_SIZE - loop @b - - mov dword[tree1.data_img_sys],0 ;чистим указатель на изображение - stdcall dword[tl_data_clear], tree1 - mcall SF_TERMINATE_PROCESS - -system_dir0 db '/sys/lib/' -lib0_name db 'buf2d.obj',0 -system_dir1 db '/sys/lib/' -lib1_name db 'libimg.obj',0 -system_dir2 db '/sys/lib/' -lib2_name db 'libini.obj',0 -system_dir3 db '/sys/lib/' -lib3_name db 'box_lib.obj',0 - -;library structures -l_libs_start: - lib0 l_libs lib0_name, file_name, system_dir0, import_buf2d_lib - lib1 l_libs lib1_name, file_name, system_dir1, import_libimg - lib2 l_libs lib2_name, file_name, system_dir2, import_libini - lib3 l_libs lib3_name, file_name, system_dir3, import_box_lib -load_lib_end: - -align 4 -proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword - cld - mov esi, [source] - mov edi, [destination] - mov ecx, [len] - rep movsb - ret -endp - -;input: -; eax - число -; edi - буфер для строки -align 4 -convert_to_str: - pushad - lea esi,[edi+8] ;8 - длинна буфера -1 - call .str - popad - ret - -align 4 -.str: - mov ecx,10 - cmp eax,ecx - jb @f - xor edx,edx - div ecx - push edx - ;dec edi ;смещение необходимое для записи с конца строки - call .str - pop eax - @@: - cmp edi,esi - jge @f - or al,0x30 - stosb - mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор - @@: - ret - - -last_time dd 0 -image_data dd 0 ;память для преобразования картинки функциями libimg -image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты - -run_file_70 FileInfoBlock -hed db 'Nu pogodi 10.12.20',0 ;подпись окна -sc system_colors ;системные цвета - -count_of_dir_list_files equ 10 -el_focus dd tree1 -tree1 tree_list FILE_NAME_MAX,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ - 16,16, 0x8080ff,0x0000ff,0xffffff, 10,10,140,100, 0,0,0, el_focus,\ - 0,user_is_select - -align 4 -buf_tree_sys: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd 16 ;+8 w - dd 16*11 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_font: ;буфер со шрифтом - dd 0 ;указатель на буфер изображения - dw 25 ;+4 left - dw 25 ;+6 top - dd 128 ;+8 w - dd 144 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_displ: - dd 0 ;указатель на буфер изображения - dw 25,0 - dd ? ;+8 w - dd ? ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_fon: ;фоновый буфер - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd ? ;+8 w - dd ? ;+12 h - dd 0xffffff ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_decor: ;буфера с декорациями: домиками и рейками; с курицами; с растениями - rb 3*BUF_STRUCT_SIZE - -align 4 -buf_wolf: - rb 9*BUF_STRUCT_SIZE - -align 4 -buf_egg: - rb 22*BUF_STRUCT_SIZE - -align 4 -buf_chi: - rb 13*BUF_STRUCT_SIZE - - - -align 4 -import_libini: - dd alib_init0 - ini_get_str dd aini_get_str - ini_get_int dd aini_get_int - ini_get_color dd aini_get_color -dd 0,0 - alib_init0 db 'lib_init',0 - aini_get_str db 'ini_get_str',0 - aini_get_int db 'ini_get_int',0 - aini_get_color db 'ini_get_color',0 - -align 4 -import_libimg: - dd alib_init1 - img_is_img dd aimg_is_img - img_info dd aimg_info - img_from_file dd aimg_from_file - img_to_file dd aimg_to_file - img_from_rgb dd aimg_from_rgb - img_to_rgb dd aimg_to_rgb - img_to_rgb2 dd aimg_to_rgb2 - img_decode dd aimg_decode - img_encode dd aimg_encode - img_create dd aimg_create - img_destroy dd aimg_destroy - img_destroy_layer dd aimg_destroy_layer - img_count dd aimg_count - img_lock_bits dd aimg_lock_bits - img_unlock_bits dd aimg_unlock_bits - img_flip dd aimg_flip - img_flip_layer dd aimg_flip_layer - img_rotate dd aimg_rotate - img_rotate_layer dd aimg_rotate_layer - img_draw dd aimg_draw - - dd 0,0 - alib_init1 db 'lib_init',0 - aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение - aimg_info db 'img_info',0 - aimg_from_file db 'img_from_file',0 - aimg_to_file db 'img_to_file',0 - aimg_from_rgb db 'img_from_rgb',0 - aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB - aimg_to_rgb2 db 'img_to_rgb2',0 - aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных - aimg_encode db 'img_encode',0 - aimg_create db 'img_create',0 - aimg_destroy db 'img_destroy',0 - aimg_destroy_layer db 'img_destroy_layer',0 - aimg_count db 'img_count',0 - aimg_lock_bits db 'img_lock_bits',0 - aimg_unlock_bits db 'img_unlock_bits',0 - aimg_flip db 'img_flip',0 - aimg_flip_layer db 'img_flip_layer',0 - aimg_rotate db 'img_rotate',0 - aimg_rotate_layer db 'img_rotate_layer',0 - aimg_draw db 'img_draw',0 - -align 4 -import_buf2d_lib: - dd sz_lib_init - buf2d_create dd sz_buf2d_create - buf2d_create_f_img dd sz_buf2d_create_f_img - buf2d_clear dd sz_buf2d_clear - buf2d_draw dd sz_buf2d_draw - buf2d_delete dd sz_buf2d_delete - buf2d_line dd sz_buf2d_line - buf2d_circle dd sz_buf2d_circle - buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 - buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 - buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 - buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 - buf2d_bit_blt dd sz_buf2d_bit_blt - buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp - buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha - buf2d_curve_bezier dd sz_buf2d_curve_bezier - buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix - buf2d_draw_text dd sz_buf2d_draw_text - buf2d_crop_color dd sz_buf2d_crop_color - buf2d_offset_h dd sz_buf2d_offset_h - dd 0,0 - sz_lib_init db 'lib_init',0 - sz_buf2d_create db 'buf2d_create',0 - sz_buf2d_create_f_img db 'buf2d_create_f_img',0 - sz_buf2d_clear db 'buf2d_clear',0 - sz_buf2d_draw db 'buf2d_draw',0 - sz_buf2d_delete db 'buf2d_delete',0 - sz_buf2d_line db 'buf2d_line',0 - sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности - sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 - sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 - sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 - sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 - sz_buf2d_bit_blt db 'buf2d_bit_blt',0 - sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 - sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 - sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 - sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 - sz_buf2d_draw_text db 'buf2d_draw_text',0 - sz_buf2d_crop_color db 'buf2d_crop_color',0 - sz_buf2d_offset_h db 'buf2d_offset_h',0 - -align 4 -import_box_lib: - dd alib_init2 - - ;scrollbar_ver_draw dd aScrollbar_ver_draw - - tl_data_init dd sz_tl_data_init - tl_data_clear dd sz_tl_data_clear - tl_info_clear dd sz_tl_info_clear - tl_key dd sz_tl_key - tl_mouse dd sz_tl_mouse - tl_draw dd sz_tl_draw - tl_info_undo dd sz_tl_info_undo - tl_info_redo dd sz_tl_info_redo - tl_node_add dd sz_tl_node_add - tl_node_set_data dd sz_tl_node_set_data - tl_node_get_data dd sz_tl_node_get_data - tl_node_delete dd sz_tl_node_delete - tl_cur_beg dd sz_tl_cur_beg - tl_cur_next dd sz_tl_cur_next - tl_cur_perv dd sz_tl_cur_perv - tl_node_close_open dd sz_tl_node_close_open - tl_node_lev_inc dd sz_tl_node_lev_inc - tl_node_lev_dec dd sz_tl_node_lev_dec - -dd 0,0 - alib_init2 db 'lib_init',0 - - ;aScrollbar_ver_draw db 'scrollbar_v_draw',0 - - sz_tl_data_init db 'tl_data_init',0 - sz_tl_data_clear db 'tl_data_clear',0 - sz_tl_info_clear db 'tl_info_clear',0 - sz_tl_key db 'tl_key',0 - sz_tl_mouse db 'tl_mouse',0 - sz_tl_draw db 'tl_draw',0 - sz_tl_info_undo db 'tl_info_undo',0 - sz_tl_info_redo db 'tl_info_redo',0 - sz_tl_node_add db 'tl_node_add',0 - sz_tl_node_set_data db 'tl_node_set_data',0 - sz_tl_node_get_data db 'tl_node_get_data',0 - sz_tl_node_delete db 'tl_node_delete',0 - sz_tl_cur_beg db 'tl_cur_beg',0 - sz_tl_cur_next db 'tl_cur_next',0 - sz_tl_cur_perv db 'tl_cur_perv',0 - sz_tl_node_close_open db 'tl_node_close_open',0 - sz_tl_node_lev_inc db 'tl_node_lev_inc',0 - sz_tl_node_lev_dec db 'tl_node_lev_dec',0 - - -align 16 -i_end: - procinfo process_information - rb 1024 -stacktop: - sys_path rb 4096 - file_name: - rb 4096 - openfile_path: - rb 4096 - filename_area: - rb 256 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1, start, i_end, mem, stacktop, 0, sys_path + +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' ;макросы для задания элементов box_lib +include '../../dll.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +;флаги, для функции обрезания буфера +BUF2D_OPT_CROP_TOP equ 1 ;обрезка сверху +BUF2D_OPT_CROP_LEFT equ 2 ;обрезка слева +BUF2D_OPT_CROP_BOTTOM equ 4 ;обрезка снизу +BUF2D_OPT_CROP_RIGHT equ 8 ;обрезка справа +BUF2D_BIT_OPT_CROP_TOP equ 0 +BUF2D_BIT_OPT_CROP_LEFT equ 1 +BUF2D_BIT_OPT_CROP_BOTTOM equ 2 +BUF2D_BIT_OPT_CROP_RIGHT equ 3 + +BUF_STRUCT_SIZE equ 21 +buf2d_data equ dword[edi] ;данные буфера изображения +buf2d_w equ dword[edi+8] ;ширина буфера +buf2d_h equ dword[edi+12] ;высота буфера +buf2d_l equ word[edi+4] ;отступ слева +buf2d_t equ word[edi+6] ;отступ сверху +buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера +buf2d_color equ dword[edi+16] ;цвет фона буфера +buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + db ? + FileName dd ? +ends + +displ_w dd ? ;ширина поля +displ_h dd ? ;высота поля +displ_bytes dd ? ;размер 1-го файла с изображением +offs_shadow_x dd ? ;сдвиг теней по оси 'x' +offs_shadow_y dd ? ;сдвиг теней по оси 'y' + +IMAGE_FONT_SIZE equ 128*144*3 + +BUT1_T equ 10 ;отступ сверху +BUT1_L equ 15 ;отступ слева +BUT1_W equ 50 ;ширина +BUT1_H equ 20 ;высота +BUT1_NEXT_TOP equ (BUT1_T+BUT1_H)*65536 + +game_select_mode db 1 ;режим выбора игры + +FILE_NAME_MAX equ 20 ;максимальная длинна имени файла (без папок, относительно текущей) +;значения имен по умолчанию +ini_def_decorat_file db 'curici.png',0 +ini_def_unit_file db 'wolf.png',0 +ini_def_objects_file db 'eggs.png',0 +ini_def_lost_file db 'chi.png',0 +;имена файлов +fn_icon0 rb FILE_NAME_MAX ;имя файла с декорациями +fn_icon1 rb FILE_NAME_MAX ;имя файла с волком и зайцем +fn_icon2 rb FILE_NAME_MAX ;имя файла с яйцами +fn_icon3 rb FILE_NAME_MAX ;имя файла с циплятами + +TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками + +ini_m_name db 'main.ini',0 +key_count db 'count',0 +key_game db 'g' + key_game_ind db 0,0,0 + +ini_name rb FILE_NAME_MAX ;имя ini файла c выбранной игрой +ini_sec_files db 'Files',0 +key_file_decorat db 'file_decorat',0 +key_file_unit db 'file_unit',0 +key_file_objects db 'file_objects',0 +key_file_lost db 'file_lost',0 +key_displ_w db 'displ_w',0 +key_displ_h db 'displ_h',0 +key_shadow_x db 'offs_shadow_x',0 +key_shadow_y db 'offs_shadow_y',0 + +ini_sec_game db 'Game',0 +key_delay_a db 'delay_a',0 +key_delay_b db 'delay_b',0 +key_delay_min db 'delay_min',0 + +ini_sec_color db 'Colors',0 +;ключи для считывания цветов из *.ini файла +key_color_fon db 'background',0 +key_color_shadows db 'shadows',0 +key_color_egg db 'objects',0 +key_color_chick db 'lost',0 +key_color_decorat: db 'dec' + .ind: db '?',0 +key_color_unit db 'unit',0 + +;цвета в игре +color_fon dd ? ;цвет фона +color_shadows dd ? ;цвет теней +color_wolf dd ? ;цвет волка и зайца +color_egg dd ? ;цвет яйца +color_chick dd ? ;цвет ципленка +color_decorat dd ?,?,? ;цвета декораций (курицы, перила, ...) + +;цвета интерфейса +color_but_sm dd 0x808080 ;цвет маленьких кнопок +color_but_te dd 0xffffff ;цвет текста на кнопках + +macro load_image_file path,buf,size { ;макрос для загрузки изображений + ;path - может быть переменной или строковым параметром + if path eqtype '' ;проверяем задан ли строкой параметр path + jmp @f + local .path_str + .path_str db path ;формируем локальную переменную + db 0 + @@: + ;32 - стандартный адрес по которому должен быть буфер с системным путем + copy_path .path_str,[32],file_name,0 + else + copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + end if + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov eax,SF_FILE + mov [run_file_70.Function], SSF_READ_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], [buf] + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall [img_decode], [buf],ebx,0 + mov [image_data],eax + ;преобразуем изображение к формату rgb + stdcall [img_to_rgb2], [image_data],[buf] + ;удаляем временный буфер image_data + stdcall [img_destroy], [image_data] + @@: +} + +;данные игры +bit_zaac equ 2 ;бит зайца +val_zaac equ 4 ;цифра отвечающая за бит зайца +bit_mig equ 3 ;бит мигания +val_mig equ 8 ;цифра отвечающая за бит мигания +mask_lot_lu equ 1b ;маска для левого верхнего лотка +mask_lot_ld equ 100000b ;маска для левого нижнего лотка +mask_lot_ru equ 10000000000b ;маска для правого верхнего лотка +mask_lot_rd equ 1000000000000000b ;маска для правого нижнего лотка +mask_clear_all equ 11111011111011110111101111011110b ;маска для очистки падающих яиц и прибежавших циплят +mask_move_eggs equ 11111111111111111111b ;маска движущихся яиц +mask_fail_eggs equ 100001000010000100000b ;маска падающих яиц +mask_chi_left equ 11111000000000000000000000b ;маска левых циплят +mask_chi_right equ 11111000000000000000000000000000b ;маска правых циплят +mask_chi_cr_l equ 1000000000000000000000b ;маска для создания левого +mask_chi_cr_r equ 1000000000000000000000000000b ;маска для создания правого +bit_chi_left equ 21 ;1-й бит который отвечает за бегущего слева +bit_chi_right equ 27 ;1-й бит который отвечает за бегущего права +val_zaac_time_y equ 5 ;колличество тактов, которое обязательно должен провисеть заяц +val_zaac_time_n equ 7 ;колличество тактов, которое обязательно должен быть спрятанным заяц + +txt_game_a db 'Игра А',0 +txt_game_b db 'Игра Б',0 + +zaac_status db 0 ;число тактов, которое заяц не должен менять свое положение +pos_wolf db 0 ;позиция волка 0-й бит слева/справа, 1-й бит сверху/вниз +;rb 1 +pos_eggs dd 0 ;позиции расположения яиц и циплят +eggs_count dw 0 ;колличество пойманых яиц +game_text db 'Игра _',13 +some_text db '0' + rb 8 ;текст с числом пойманных яиц +count_last db 0 ;счетчик пропущенных яиц +game_spd dd 0 ;задержка игры +game_delay_a dd ? ;первоначальная задержка для игры А +game_delay_b dd ? ;первоначальная задержка для игры Б +game_delay_min dd ? ;минимальная задержка + +;для генерации случайных чисел +rand_x dd 0 + +align 4 +rand_next: +;x(k+1) = (a*x(k)+c) mod m +; a=22695477, c=1, m=2^32 +push eax + mov eax,[rand_x] + imul eax,22695477 + inc eax + mov [rand_x],eax +pop eax + ret + +;создаем прозрачные буфера по 8 бит (трафареты), для рисования +;где buf - буфер на основе которого будет создан трафарет +;фоновый цвет буфера должен быть 0xffffff, иначе не произойдет обрезка +;по фоновому цвету и трафарет будет занимат ьмного места в памяти +align 4 +proc CreateTrapharetBuffer uses eax edi, buf:dword, img_data:dword + mov edi,[buf] + + ;заполнение данных буфера + mov buf2d_size_lt,0 + mov eax,[displ_w] + mov buf2d_w,eax + mov eax,[displ_h] + mov buf2d_h,eax + mov buf2d_color,0xffffff + mov buf2d_bits,24 + + stdcall [buf2d_create_f_img], edi,[img_data] ;создаем буфер + stdcall [buf2d_conv_24_to_8], edi,1 ;делаем буфер прозрачности 8бит + ;обрезаем лишние края буфера, для более быстрого рисования + stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT+BUF2D_OPT_CROP_LEFT + ret +endp + +align 4 +InitBackgroundBuffer: ;создание фонового изображения + pushad + mov edi,buf_fon + mov eax,[color_fon] + mov buf2d_color,eax + stdcall [buf2d_clear], edi,eax + mov esi,edi + + xor eax,eax + cld + cmp dword[offs_shadow_x],0 + jne @f + cmp dword[offs_shadow_y],0 + jne @f + jmp .end_shadows + @@: + mov edi,buf_decor + xor ebx,ebx + mov ecx,3 + @@: + mov ax,buf2d_t + add eax,[offs_shadow_y] + mov bx,buf2d_l + add ebx,[offs_shadow_x] + stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;рисуем тени декораций + add edi,BUF_STRUCT_SIZE + loop @b + .end_shadows: + + mov edi,buf_decor + mov ebx,color_decorat + mov ecx,3 + @@: + mov ax,buf2d_t + stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[ebx] ;рисуем декорации + add edi,BUF_STRUCT_SIZE + add ebx,4 + loop @b + popad + ret + +;рисует картинку в буфере buf из массива буферов buf_img с индексом ind +;т. е. buf <- buf_img[ind] +align 4 +proc DrawArrayImg, buf:dword, buf_img:dword, ind:dword, color:dword + pushad + mov edi,dword[ind] + imul edi,BUF_STRUCT_SIZE + add edi,dword[buf_img] + + mov esi,dword[buf] + xor eax,eax + mov ax,buf2d_t + xor ebx,ebx + mov bx,buf2d_l + stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color] + popad + ret +endp + +align 4 +DrawZaac: ;рисование зайца + push eax + bt word[pos_wolf],bit_zaac + jae .end_mig + + stdcall DrawArrayImg, buf_displ,buf_wolf,6,[color_wolf] ;рисуем тело зайца + mov eax,dword[pos_eggs] + and eax,mask_chi_right+mask_chi_left + cmp eax,0 + je .end_mig ;если нет бегающих циплят, то заяц рукой не машет + bt word[pos_wolf],bit_mig + jc @f + stdcall DrawArrayImg, buf_displ,buf_wolf,7,[color_wolf] ;рисуем руку зайца вверху + jmp .end_mig + @@: + stdcall DrawArrayImg, buf_displ,buf_wolf,8,[color_wolf] ;рисуем руку зайца внизу + .end_mig: + pop eax + ret + +align 4 +DrawWolf: ;рисует волка с корзинами + bt word[pos_wolf],0 + jc @f + stdcall DrawArrayImg, buf_displ,buf_wolf,0,[color_wolf] + bt word[pos_wolf],1 + jc .corz_ldn + stdcall DrawArrayImg, buf_displ,buf_wolf,1,[color_wolf] + jmp .corz_lend + .corz_ldn: + stdcall DrawArrayImg, buf_displ,buf_wolf,2,[color_wolf] + .corz_lend: + jmp .wolf_b + @@: + stdcall DrawArrayImg, buf_displ,buf_wolf,3,[color_wolf] + bt word[pos_wolf],1 + jc .corz_rdn + stdcall DrawArrayImg, buf_displ,buf_wolf,4,[color_wolf] + jmp .corz_rend + .corz_rdn: + stdcall DrawArrayImg, buf_displ,buf_wolf,5,[color_wolf] + .corz_rend: + .wolf_b: + ret + +align 4 +DrawEggs: ;рисует яйца + pushad + cld + + mov eax,dword[pos_eggs] + xor ebx,ebx + mov ecx,20 ;цикл для рисования котящихся яиц + @@: + bt eax,ebx + jae .draw_egg + stdcall DrawArrayImg, buf_displ,buf_egg,ebx,[color_egg] + .draw_egg: + inc ebx + loop @b + + ;mov eax,dword[pos_eggs] + and eax,mask_chi_left + cmp eax,0 + je @f + stdcall DrawArrayImg, buf_displ,buf_egg,20,[color_egg] ;разбитое яйцо слева + @@: + mov eax,dword[pos_eggs] + and eax,mask_chi_right + cmp eax,0 + je @f + stdcall DrawArrayImg, buf_displ,buf_egg,21,[color_egg] ;разбитое яйцо справа + @@: + + mov eax,dword[pos_eggs] + xor edx,edx + mov ebx,bit_chi_left + mov ecx,5 ;цикл для рисования левых циплят + @@: + bt eax,ebx + jae .draw_chick_l + stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] + .draw_chick_l: + inc ebx + inc edx + loop @b + mov ebx,bit_chi_right + mov ecx,5 ;цикл для рисования правых циплят + @@: + bt eax,ebx + jae .draw_chick_r + stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] + .draw_chick_r: + inc ebx + inc edx + loop @b + + xor eax,eax + mov al,byte[count_last] + mov ecx,eax ;цикл для рисования штрафных очков + shr ecx,1 + mov edx,10 ;индекс начала штрафных иконок в буфере buf_chi + cmp ecx,0 + je .no_unit_last + @@: + stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] + inc edx + loop @b + .no_unit_last: + + bt ax,0 ;проверяем мигающее не четное очко + jae @f + bt word[pos_wolf],bit_mig + jc @f + stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] ;мигающее штрафное очко + @@: + + popad + ret + +align 4 +CountEggsInc: ;увеличиваем счетчик яиц на 1 + push eax edi + xor eax,eax + inc word[eggs_count] ;увеличиваем счетчик яиц + cmp word[eggs_count],200 ;бонусные очки + je @f + cmp word[eggs_count],500 ;бонусные очки + je @f + jmp .no_bonus + @@: + mov byte[count_last],0 + .no_bonus: + + mov ax,word[eggs_count] + mov edi,some_text + call convert_to_str ;обновляем текстовую строку + and ax,0xf ;через каждые 16 яиц уменьшаем время + cmp ax,0 + jne @f + mov edi,[game_delay_min] ;минимальная задержка + cmp dword[game_spd],edi + jle @f + dec dword[game_spd] + @@: + pop edi eax + ret + +;input: +; eax - маска, указывающая с какой строны упало яйцо +align 4 +CountLastInc: ;начисление штрафных очков + inc byte[count_last] ;половинао штрафного очка + bt word[pos_wolf],bit_zaac + jc @f + inc byte[count_last] ;если нет зайца то еще 1-на половина штрафного очка + @@: + cmp byte[count_last],6 + jle @f + mov byte[count_last],6 ;ставим ограничени на число штрафных очков + @@: + or dword[pos_eggs],eax ;создаем бегущего ципленка + ret + +align 4 +MoveEggs: + pushad + xor byte[pos_wolf],val_mig ;бит для мигания + + cmp byte[count_last],6 ;максимальное число штрафных очков + je .end_fun + + rol dword[pos_eggs],1 + mov ecx,dword[pos_eggs] + and ecx,mask_fail_eggs + cmp ecx,0 + je .no_fail ;нет падающих яиц + ;начисление яиц попавших в корзину + ;или начисление штрафных очков + xor ebx,ebx + mov bl,byte[pos_wolf] ;берем параметры (позицию) волка + and bl,3 ;на всякий случай + + bt ecx,5 ;проверяем верхнее левое перило + jae .perilo_lu + cmp bx,0 ;проверяем наличие корзины + jne @f + call CountEggsInc + jmp .perilo_lu + @@: + mov eax,mask_chi_cr_l + call CountLastInc + .perilo_lu: + bt ecx,10 ;проверяем нижнее левое перило + jae .perilo_ld + cmp bx,2 ;проверяем наличие корзины + jne @f + call CountEggsInc + jmp .perilo_ld + @@: + mov eax,mask_chi_cr_l + call CountLastInc + .perilo_ld: + bt ecx,15 ;проверяем верхнее правое перило + jae .perilo_ru + cmp bx,1 ;проверяем наличие корзины + jne @f + call CountEggsInc + jmp .perilo_ru + @@: + mov eax,mask_chi_cr_r + call CountLastInc + .perilo_ru: + bt ecx,20 ;проверяем нижнее правое перило + jae .perilo_rd + cmp bx,3 ;проверяем наличие корзины + jne @f + call CountEggsInc + jmp .perilo_rd + @@: + mov eax,mask_chi_cr_r + call CountLastInc + .perilo_rd: + .no_fail: + + and dword[pos_eggs],mask_clear_all ;очистка упавших яиц и добежавших курей + + call rand_next + cmp byte[zaac_status],0 + jle @f + dec byte[zaac_status] + jmp .no_zaac_move ;заяц пока не двигается + @@: + + bt dword[rand_x],6 ;заяц от фонаря меняет статус + jc @f + xor byte[pos_wolf],val_zaac ;высовываем/засовываем зайца + bt word[pos_wolf],val_zaac + jc .zaac_n + mov byte[zaac_status],val_zaac_time_y ;ставим минимальное время для смены статуса + jmp @f + .zaac_n: + mov byte[zaac_status],val_zaac_time_n ;ставим минимальное время для смены статуса + @@: + .no_zaac_move: + + ;создание новых яиц + cmp word[eggs_count],5 ;первые 5 яиц катятся по 1-му + jge @f + mov ecx,dword[pos_eggs] + and ecx,mask_move_eggs + ;cmp ecx,0 + jnz .end_creat + @@: + + bt dword[rand_x],4 ;проверяем будем ли создавать новое яйцо + jc .end_creat + bt dword[rand_x],5 ;проверяем с какой стороны будем создавать новое яйцо + jc .creat_r + bt dword[rand_x],7 + jc @f + or dword[pos_eggs],mask_lot_lu + jmp .end_creat + @@: + or dword[pos_eggs],mask_lot_ld + jmp .end_creat + .creat_r: + bt dword[rand_x],7 + jc @f + or dword[pos_eggs],mask_lot_ru + jmp .end_creat + @@: + or dword[pos_eggs],mask_lot_rd + ;jmp .end_creat + .end_creat: + + .end_fun: + popad + ret + +align 4 +proc InitGame, b:dword ;первоначальные настройки игры + mov word[eggs_count],0 ;колличество пойманых яиц + mov byte[some_text],'0' + mov byte[some_text+1],0 ;текст с числом пойманных яиц + mov byte[count_last],0 ;штрафные очки + mov dword[pos_eggs],0 + mov byte[zaac_status],0 + + push eax ebx + cmp dword[b],0 + jne @f + mov byte[game_text+5],'А' + mov eax,dword[game_delay_a] + mov dword[game_spd],eax ;задержка игры + jmp .end_init + @@: + mov byte[game_text+5],'Б' + mov eax,dword[game_delay_b] + mov dword[game_spd],eax ;задержка игры + .end_init: + + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + mov [rand_x],eax ;заполняем 1-е случайное число + pop ebx eax + + ret +endp + +align 4 +proc LoadArrayBuffer, f_name:dword, buf_start:dword, count:dword + pushad + mov edx,[displ_bytes] + mov ecx,edx + imul ecx,[count] + mov eax,[f_name] + load_image_file eax,image_data_gray,ecx + mov edx,[displ_bytes] + mov eax,[image_data_gray] + mov edi,[buf_start] + mov ecx,[count] + cld + @@: ;считываем 3 буфера с декорациями + stdcall CreateTrapharetBuffer,edi,eax + add eax,edx + add edi,BUF_STRUCT_SIZE + loop @b + stdcall mem.Free,[image_data_gray] ;освобождаем память + popad + ret +endp + +txt_tile_type_0 rb FILE_NAME_MAX + +align 4 +user_is_select: + push eax ecx esi edi + stdcall [tl_node_get_data], tree1 + or eax,eax ;если имя игры пустое + jz @f + mov esi,eax + mov edi,ini_name + mov ecx,FILE_NAME_MAX + cld + rep movsb + + mov byte[game_select_mode],0 + call InitAll + @@: + pop edi esi ecx eax + + call draw_window + ret + +;****************************************************************************** +; функция, которая 1 раз делает все настройки нужные для игры +;****************************************************************************** +align 4 +InitAll: + pushad + ;работа с файлом настроек + copy_path ini_name,sys_path,file_name,0 + stdcall [ini_get_int],file_name,ini_sec_files,key_displ_w,210 + mov [displ_w],eax + stdcall [ini_get_int],file_name,ini_sec_files,key_displ_h,140 + mov [displ_h],eax + stdcall [ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file + stdcall [ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file + stdcall [ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file + stdcall [ini_get_str],file_name,ini_sec_files,key_file_lost,fn_icon3,FILE_NAME_MAX,ini_def_lost_file + + stdcall [ini_get_int],file_name,ini_sec_files,key_shadow_x,2 + mov [offs_shadow_x],eax + stdcall [ini_get_int],file_name,ini_sec_files,key_shadow_y,2 + mov [offs_shadow_y],eax + + ;считывание настроек влияющих на скорсть игры + stdcall [ini_get_int],file_name,ini_sec_game,key_delay_a,65 + mov [game_delay_a],eax + stdcall [ini_get_int],file_name,ini_sec_game,key_delay_b,35 + mov [game_delay_b],eax + stdcall [ini_get_int],file_name,ini_sec_game,key_delay_min,15 + mov [game_delay_min],eax + + stdcall [ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff + mov [color_fon],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0 + mov [color_shadows],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_unit,0 + mov [color_wolf],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080 + mov [color_egg],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0 + mov [color_chick],eax + + mov ebx,color_decorat + mov byte[key_color_decorat.ind],'0' + mov ecx,3 + cld + @@: + push ecx ;функция ini_get_color имеет право манять регистр ecx + stdcall [ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080 + pop ecx + mov [ebx],eax + add ebx,4 + inc byte[key_color_decorat.ind] + loop @b + + mov edx,[displ_w] + imul edx,[displ_h] + lea edx,[edx+edx*2] + mov [displ_bytes],edx ;вычисляем размер игрового поля + + stdcall LoadArrayBuffer, fn_icon0, buf_decor,3 ;считываем 3 буфера с декорациями + stdcall LoadArrayBuffer, fn_icon1, buf_wolf,9 ;считываем 9 буферов с волком и зайцем + stdcall LoadArrayBuffer, fn_icon2, buf_egg,22 ;считываем 22 буферов с яйцами + stdcall LoadArrayBuffer, fn_icon3, buf_chi,13 ;считываем 13 буферов с циплятами + + load_image_file 'font8x9.bmp', image_data_gray,IMAGE_FONT_SIZE + stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;создаем буфер + stdcall mem.Free,[image_data_gray] ;освобождаем память + + stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_font + +;проверка занимаемого буфером места +;mov edi,buf_wolf +;add edi,BUF_STRUCT_SIZE ;переходим на буфер корзины +;stdcall [buf2d_clear],edi,0x808080 ;заливаем его серым цветом + + mov ebx,dword[displ_w] + mov edx,dword[displ_h] + + mov edi,buf_displ + mov buf2d_w,ebx + mov buf2d_h,edx + stdcall [buf2d_create], buf_displ ;создаем буфер для вывода на экран + + mov edi,buf_fon + mov buf2d_w,ebx + mov buf2d_h,edx + stdcall [buf2d_create], buf_fon ;создаем буфер с фоновыми декорациями + + call InitBackgroundBuffer ;заполняем буфер с фоновыми декорациями + stdcall InitGame,0 + popad + ret + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузились библиотеки + cmp dword [lib0+ll_struc_size-4],0 + jnz @f + cmp dword [lib1+ll_struc_size-4],0 + jnz @f + cmp dword [lib2+ll_struc_size-4],0 + jnz @f + cmp dword [lib3+ll_struc_size-4],0 + jnz @f + jmp .lib + @@: + mcall SF_TERMINATE_PROCESS + .lib: + + mcall SF_SET_EVENTS_MASK,0x27 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + +;****************************************************************************** +; подготовка списка игр +;****************************************************************************** + stdcall dword[tl_data_init], tree1 + + load_image_file 'tl_sys_16.png', image_data_gray,TREE_ICON_SYS16_BMP_SIZE + stdcall [buf2d_create_f_img], buf_tree_sys,[image_data_gray] ;создаем буфер + stdcall mem.Free,[image_data_gray] ;освобождаем память + + mov edi,buf_tree_sys + m2m dword[tree1.data_img_sys],buf2d_data + + ;работа с главным файлом настроек + copy_path ini_m_name,sys_path,file_name,0 + + stdcall [ini_get_int],file_name,ini_sec_files,key_count,1 + mov ecx,eax + mov dl,'0' + cld + @@: + mov byte[key_game_ind],dl + inc dl + push ecx edx + stdcall [ini_get_str],file_name,ini_sec_files,key_game,txt_tile_type_0,FILE_NAME_MAX,ini_def_decorat_file + stdcall [tl_node_add], tree1, 0, txt_tile_type_0 ;добавляем название игры + stdcall [tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок игр + pop edx ecx + loop @b + stdcall [tl_cur_beg], tree1 ;переносим курсор вверх + + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + mov [last_time],eax + + + +align 4 +red_win: + call draw_window + +align 4 +still: ;главный цикл + + cmp byte[game_select_mode],0 + jne .select_mode + + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + mov ebx,[last_time] + add ebx,[game_spd] ;delay + sub ebx,eax + cmp ebx,[game_spd] ;delay + ja it_is_time_now + test ebx,ebx + jz it_is_time_now + mcall SF_WAIT_EVENT_TIMEOUT + or eax,eax + jz it_is_time_now + + jmp @f + .select_mode: + mcall SF_WAIT_EVENT + @@: + + cmp al,1 ;изменилось положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jz mouse + + jmp still + +align 4 +mouse: + cmp byte[game_select_mode],0 + je @f + stdcall [tl_mouse], tree1 ;если игра еще не выбрана + @@: + jmp still + +align 4 +it_is_time_now: + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + mov [last_time],eax + + ;cmp byte[game_select_mode],0 + ;jne still + + ;...здесь идут действия, вызываемые каждые delay сотых долей секунд... + call MoveEggs + call draw_display + jmp still + +align 4 +key: + push eax ebx + mcall SF_GET_KEY + + cmp byte[game_select_mode],0 + je @f + stdcall [tl_key], tree1 + @@: + + cmp ah,176 ;Left + jne @f + and byte[pos_wolf],0xfe + @@: + cmp ah,179 ;Right + jne @f + or byte[pos_wolf],1 + @@: + cmp ah,178 ;Up + jne @f + and byte[pos_wolf],0xff-2 + @@: + cmp ah,177 ;Down + jne @f + or byte[pos_wolf],2 + @@: + + cmp ah,97 ;a + jne @f + and byte[pos_wolf],0xff-3 ;00 + @@: + cmp ah,122 ;z + jne @f + and byte[pos_wolf],0xff-1 + or byte[pos_wolf],2 ;10 + @@: + cmp ah,39 ;' + jne @f + and byte[pos_wolf],0xff-2 + or byte[pos_wolf],1 ;01 + @@: + cmp ah,47 ;/ + jne @f + or byte[pos_wolf],3 ;11 + @@: + + pop ebx eax + jmp still + + +align 4 +draw_window: + pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + xor eax,eax + mov ebx,20*65536+480 + mov ecx,20*65536+270 + mov edx,[sc.work] + ;or edx,0x33000000 + or edx,0x73000000 + mov edi,hed + mcall ;создание окна + mcall SF_THREAD_INFO,procinfo,-1 + + cmp byte[game_select_mode],0 + jne .select_mode + + mov edi,buf_displ + mov eax,[procinfo.client_box.width] + cmp eax,[displ_w] + jle @f + sub eax,[displ_w] + shr eax,1 + mov buf2d_l,ax ;выправниваем буфер по центру окна + @@: + + call draw_display + + mov eax,SF_DRAW_RECT + mov edx,[sc.work] + xor esi,esi + mov si,buf2d_l + add esi,[displ_w] + mov ebx,[procinfo.client_box.width] + inc ebx + cmp esi,ebx + jge @f + sub ebx,esi + rol ebx,16 + mov bx,si + rol ebx,16 + mov ecx,[procinfo.client_box.height] + inc ecx + int 0x40 ;рисование правого бокового поля + jmp .draw_s + @@: + mov esi,[procinfo.client_box.width] ;когда по ширине не влазит + inc esi + .draw_s: + + ; *** рисование кнопок *** +push esi + movzx ebx,buf2d_l + add ebx,buf2d_w + add ebx,BUT1_L + shl ebx,16 + mov bx,BUT1_W + mov ecx,BUT1_T*65536+BUT1_H + mov esi,[color_but_sm] + mcall SF_DEFINE_BUTTON,,,5 + + inc edx + add ecx,BUT1_NEXT_TOP + int 0x40 +pop esi + + mov bx,BUT1_H-4 + add ebx,8 shl 16 + mov ecx,[color_but_te] + or ecx,0x80000000 + mov edx,txt_game_a + mcall SF_DRAW_TEXT + + ror ebx,16 + add ebx,BUT1_NEXT_TOP + ror ebx,16 + mov edx,txt_game_b + int 0x40 + + ; *** восстановление параметров *** + mov eax,SF_DRAW_RECT + mov edx,[sc.work] + + mov ebx,esi + mov ecx,[procinfo.client_box.height] + inc ecx + mov esi,[displ_h] + cmp esi,ebx + jge @f + sub ecx,esi + rol ecx,16 + mov cx,si + rol ecx,16 + int 0x40 ;рисование нижнего поля + @@: + + xor ebx,ebx + mov bx,buf2d_l + mov ecx,[displ_h] + int 0x40 ;рисование левого бокового поля + + jmp @f + .select_mode: + stdcall [tl_draw], tree1 + mov edi,tree1 + add edi,tl_offs_box + stdcall draw_rect_border, procinfo.client_box, edi + @@: + + mcall SF_REDRAW,SSF_END_DRAW + popad + ret + +; функция рисует поля вокруг прямоугольника user_box +; размер полей вычисляется исходя из размеров client_rect +; предполагается, что в большинстве случаев client_rect > user_box +align 4 +proc draw_rect_border, client_rect:dword, user_box:dword + pushad + mov esi,[user_box] + cmp esi,0 + je @f + mov edi,[client_rect] + mov ebx,dword[edi+8] ;+8 = width + inc bx + mov ecx,dword[esi+4] ;+4 = top + mov edx,[sc.work] + mcall SF_DRAW_RECT ;top + + mov eax,dword[esi+4] ;+4 = top + add eax,dword[esi+12] ;+12 = height + cmp eax,dword[edi+12] + jge .no_bottom + mov ecx,eax + shl ecx,16 + mov cx,word[edi+12] ;+12 = bottom + inc cx + sub cx,ax + mcall SF_DRAW_RECT ;bottom + .no_bottom: + + mov ebx,dword[esi] ;+0 left + mov ecx,dword[esi+4] ;+4 = top + shl ecx,16 + mov cx,word[esi+12] ;+12 = height + inc cx + mcall SF_DRAW_RECT ;left + + mov eax,dword[esi] ;+0 left + add eax,dword[esi+8] ;+8 = width + mov ebx,eax + shl ebx,16 + mov bx,word[edi+8] ;+8 = right + sub bx,ax + inc bx + mcall SF_DRAW_RECT ;right + @@: + popad + ret +endp + +align 4 +draw_display: + + stdcall mem_copy, [buf_fon],[buf_displ],[displ_bytes] ;копирование изображения из фонового буфера + call DrawZaac ;рисуем зайца + call DrawWolf ;рисуем волка + call DrawEggs ;рисуем яйца + +push eax + mov eax,[displ_w] + shr eax,1 + stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;рисуем строку с текстом +pop eax + stdcall [buf2d_draw], buf_displ + ret + +align 4 +button: + mcall SF_GET_BUTTON + + cmp ah,5 + jne @f + stdcall InitGame,0 + @@: + cmp ah,6 + jne @f + stdcall InitGame,1 + @@: + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_fon ;удаляем буфер + stdcall [buf2d_delete],buf_displ ;удаляем буфер + + stdcall [buf2d_delete],buf_tree_sys + stdcall [buf2d_delete],buf_font + + cld + mov ecx,3 + mov edi,buf_decor + @@: ;удаляем 3 буфера + stdcall [buf2d_delete],edi + add edi,BUF_STRUCT_SIZE + loop @b + mov ecx,9 + mov edi,buf_wolf + @@: ;удаляем 9 буферов с волком и зайцем + stdcall [buf2d_delete],edi + add edi,BUF_STRUCT_SIZE + loop @b + mov ecx,13 + mov edi,buf_chi + @@: ;удаляем 13 буферов + stdcall [buf2d_delete],edi + add edi,BUF_STRUCT_SIZE + loop @b + mov ecx,22 + mov edi,buf_egg + @@: ;удаляем 22 буфера + stdcall [buf2d_delete],edi + add edi,BUF_STRUCT_SIZE + loop @b + + mov dword[tree1.data_img_sys],0 ;чистим указатель на изображение + stdcall dword[tl_data_clear], tree1 + mcall SF_TERMINATE_PROCESS + +system_dir0 db '/sys/lib/' +lib0_name db 'buf2d.obj',0 +system_dir1 db '/sys/lib/' +lib1_name db 'libimg.obj',0 +system_dir2 db '/sys/lib/' +lib2_name db 'libini.obj',0 +system_dir3 db '/sys/lib/' +lib3_name db 'box_lib.obj',0 + +;library structures +l_libs_start: + lib0 l_libs lib0_name, file_name, system_dir0, import_buf2d_lib + lib1 l_libs lib1_name, file_name, system_dir1, import_libimg + lib2 l_libs lib2_name, file_name, system_dir2, import_libini + lib3 l_libs lib3_name, file_name, system_dir3, import_box_lib +load_lib_end: + +align 4 +proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword + cld + mov esi, [source] + mov edi, [destination] + mov ecx, [len] + rep movsb + ret +endp + +;input: +; eax - число +; edi - буфер для строки +align 4 +convert_to_str: + pushad + lea esi,[edi+8] ;8 - длинна буфера -1 + call .str + popad + ret + +align 4 +.str: + mov ecx,10 + cmp eax,ecx + jb @f + xor edx,edx + div ecx + push edx + ;dec edi ;смещение необходимое для записи с конца строки + call .str + pop eax + @@: + cmp edi,esi + jge @f + or al,0x30 + stosb + mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор + @@: + ret + + +last_time dd 0 +image_data dd 0 ;память для преобразования картинки функциями libimg +image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты + +run_file_70 FileInfoBlock +hed db 'Nu pogodi 10.12.20',0 ;подпись окна +sc system_colors ;системные цвета + +count_of_dir_list_files equ 10 +el_focus dd tree1 +tree1 tree_list FILE_NAME_MAX,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ + 16,16, 0x8080ff,0x0000ff,0xffffff, 10,10,140,100, 0,0,0, el_focus,\ + 0,user_is_select + +align 4 +buf_tree_sys: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd 16 ;+8 w + dd 16*11 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_font: ;буфер со шрифтом + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 128 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_displ: + dd 0 ;указатель на буфер изображения + dw 25,0 + dd ? ;+8 w + dd ? ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_fon: ;фоновый буфер + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd ? ;+8 w + dd ? ;+12 h + dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_decor: ;буфера с декорациями: домиками и рейками; с курицами; с растениями + rb 3*BUF_STRUCT_SIZE + +align 4 +buf_wolf: + rb 9*BUF_STRUCT_SIZE + +align 4 +buf_egg: + rb 22*BUF_STRUCT_SIZE + +align 4 +buf_chi: + rb 13*BUF_STRUCT_SIZE + + + +align 4 +import_libini: + dd alib_init0 + ini_get_str dd aini_get_str + ini_get_int dd aini_get_int + ini_get_color dd aini_get_color +dd 0,0 + alib_init0 db 'lib_init',0 + aini_get_str db 'ini_get_str',0 + aini_get_int db 'ini_get_int',0 + aini_get_color db 'ini_get_color',0 + +align 4 +import_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + + dd 0,0 + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',0 + +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h + dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + +align 4 +import_box_lib: + dd alib_init2 + + ;scrollbar_ver_draw dd aScrollbar_ver_draw + + tl_data_init dd sz_tl_data_init + tl_data_clear dd sz_tl_data_clear + tl_info_clear dd sz_tl_info_clear + tl_key dd sz_tl_key + tl_mouse dd sz_tl_mouse + tl_draw dd sz_tl_draw + tl_info_undo dd sz_tl_info_undo + tl_info_redo dd sz_tl_info_redo + tl_node_add dd sz_tl_node_add + tl_node_set_data dd sz_tl_node_set_data + tl_node_get_data dd sz_tl_node_get_data + tl_node_delete dd sz_tl_node_delete + tl_cur_beg dd sz_tl_cur_beg + tl_cur_next dd sz_tl_cur_next + tl_cur_perv dd sz_tl_cur_perv + tl_node_close_open dd sz_tl_node_close_open + tl_node_lev_inc dd sz_tl_node_lev_inc + tl_node_lev_dec dd sz_tl_node_lev_dec + +dd 0,0 + alib_init2 db 'lib_init',0 + + ;aScrollbar_ver_draw db 'scrollbar_v_draw',0 + + sz_tl_data_init db 'tl_data_init',0 + sz_tl_data_clear db 'tl_data_clear',0 + sz_tl_info_clear db 'tl_info_clear',0 + sz_tl_key db 'tl_key',0 + sz_tl_mouse db 'tl_mouse',0 + sz_tl_draw db 'tl_draw',0 + sz_tl_info_undo db 'tl_info_undo',0 + sz_tl_info_redo db 'tl_info_redo',0 + sz_tl_node_add db 'tl_node_add',0 + sz_tl_node_set_data db 'tl_node_set_data',0 + sz_tl_node_get_data db 'tl_node_get_data',0 + sz_tl_node_delete db 'tl_node_delete',0 + sz_tl_cur_beg db 'tl_cur_beg',0 + sz_tl_cur_next db 'tl_cur_next',0 + sz_tl_cur_perv db 'tl_cur_perv',0 + sz_tl_node_close_open db 'tl_node_close_open',0 + sz_tl_node_lev_inc db 'tl_node_lev_inc',0 + sz_tl_node_lev_dec db 'tl_node_lev_dec',0 + + +align 16 +i_end: + procinfo process_information + rb 1024 +stacktop: + sys_path rb 4096 + file_name: + rb 4096 + openfile_path: + rb 4096 + filename_area: + rb 256 +mem: diff --git a/programs/games/snake/snake.asm b/programs/games/snake/snake.asm index 22391a140..1ee644966 100644 --- a/programs/games/snake/snake.asm +++ b/programs/games/snake/snake.asm @@ -13,7 +13,7 @@ use32 include '../../proc32.inc' include '../../macros.inc' include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' ;include '../../system/board/debug.inc' ;;===Define_chapter============================================================================================================ diff --git a/programs/media/log_el/log_el.asm b/programs/media/log_el/log_el.asm index 981e18230..9f7885f36 100644 --- a/programs/media/log_el/log_el.asm +++ b/programs/media/log_el/log_el.asm @@ -49,7 +49,7 @@ include '../../proc32.inc' include '../../KOSfuncs.inc' include '../../load_img.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include 'le_pole.inc' include 'le_signal.inc' diff --git a/programs/media/scrshoot/scrshoot.asm b/programs/media/scrshoot/scrshoot.asm index 4e3771172..b569ee6c6 100644 --- a/programs/media/scrshoot/scrshoot.asm +++ b/programs/media/scrshoot/scrshoot.asm @@ -1,3 +1,9 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + ; ; Screenshooter for Kolibri ; @@ -22,7 +28,7 @@ format binary as "" title equ 'Screenshooter v1.21' ; Заголовок окна include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../config.inc' ;for nightbuild include '../../proc32.inc' include '../../macros.inc' diff --git a/programs/media/zsea/zSea.asm b/programs/media/zsea/zSea.asm index bb9169f9a..f5c4f67eb 100644 --- a/programs/media/zsea/zSea.asm +++ b/programs/media/zsea/zSea.asm @@ -1,498 +1,504 @@ -;***************************************************************************** -;***************************************************************************** -; zSea - advanced image viewer for KolibriOS -; Copyright (c) 2008-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. -;***************************************************************************** -; v.1.0 rё5 22.04.2014 -;****************************************************************************** - use32 - org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd START ; start of code - dd IM_END ; size of image - dd I_END ; memory for app - dd stacktop ; esp - dd dest_cmdline ; I_Param - dd path ; APPLICATION PACH - -include 'lang.inc' -;include 'macros.inc' -;include 'editbox_ex.mac' -;include 'proc32.inc' -include '../../macros.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../proc32.inc' -;include 'debug.inc' -include '../../KOSfuncs.inc' -include '../../load_lib.mac' - @use_library ;use load lib macros -;****************************************************************************** -;------------------------------------------------------------------------------ -START: ; start of execution - mcall 68, 11 - mcall 66, 1,1 - mcall 40, 0x27 - - mcall 9, procinfo, -1 - mov eax,[ebx+30] - mov [PID],eax - xor ecx,ecx -@@: - inc ecx - mcall 9, procinfo - mov eax,[PID] - cmp eax,[ebx+30] - jne @r - mov [active_process],ecx - - mcall 48,4 - mov [skin_height],eax - - mcall 68,12,1024 - mov [menu_data_1.procinfo],eax - mov [menu_data_2.procinfo],eax - mov [menu_data_3.procinfo],eax - mov [menu_data_4.procinfo],eax - mov [menu_data_5.procinfo],eax - mov [menu_data_6.procinfo],eax - - mov [load_directory_pointer],dir_header - - - call load_plugins - - ;init_checkboxes2 check1,... - push check1 - call [init_checkbox] - push check2 - call [init_checkbox] - - call load_buttons - -; call init_data_OpenDialog - -;init_OpenDialog OpenDialog_data - push dword OpenDialog_data - call [OpenDialog_Init] - -;init_ColorDialog ColorDialog_data - push dword ColorDialog_data - call [ColorDialog_Init] - - call get_filter_data - -;----------------------------------------------------- -; check for parameters - mov esi, [28] - cmp dword [esi],'BOOT' - jne .no_boot -.background: - call load_image - cmp [error_fs],0 - jnz .exit - call convert - - call background - -.exit: - call Set_ini -.exit_1: - mov ebx,18 - mov edx,PID1 - mov esi,7 -.kill_successors: - mov ecx,[edx] - add edx,4 - test ecx,ecx - jz @f - mcall 18 -@@: - dec esi - jnz .kill_successors - - mcall -1 -;----------------------------------------------------- - .no_boot: - xor eax,eax - cmp [esi],al - jnz @f - mov [file_name],eax - jmp .no_param -@@: - - - mov edi,string ; clear string - mov ecx,4096/4 ;256/4 ; length of a string - xor eax,eax ; symbol <0> - rep stosd - - - mov edi, [28] ; look for <0> in temp_area - - cmp [edi],byte "\" - jne .continue - cmp [edi+1],byte "T" - jne @f - mov [bgrmode],dword 1 - jmp .continue_1 -@@: - cmp [edi+1],byte "S" - jne START.exit - mov [bgrmode],dword 2 -.continue_1: - add edi,4 -.continue: - mov esi,edi - mov ecx,4095 ;257 ; strlen - repne scasb - mov ecx, edi - sub ecx, [28] - - mov edi,string - rep movsb ; copy string from temp_area to "string" (filename) - mov ecx, [28] - cmp [ecx],byte "\" - je START.background - call load_directory - test eax,eax - jnz @f - call load_image - test eax,eax - jnz @f - call convert - jmp .no_param -@@: - mov [load_directory_pointer],dir_header - mov [error_fs],eax - call convert.error -;----------------------------------------------------- - .no_param: -; or ecx,-1 ; get information about me -; call getappinfo - -; mov edx,[process_info+30] ; ЄхяхЁ№ т edx эр° шфхэЄшЇшърЄюЁ -; mov ecx,eax - -; @@: -; call getappinfo -; cmp edx,[process_info+30] -; je @f ; хёыш эр° PID ёютяры ё PID ЁрёёьрЄЁштрхьюую яЁюЎхёёр, ь√ эр°ыш ёхс  -; dec ecx ; шэрўх ёьюЄЁшь ёыхфє■∙шщ яЁюЎхёё -; jne @b ; тючтЁр∙рхьё , хёыш эх тёх яЁюЎхёё√ ЁрёёьюЄЁхэ√ -; @@: - -; ЄхяхЁ№ т ecx эюьхЁ яЁюЎхёёр -; mov [process],ecx -;--------------------------------------------------------------------- - cmp [wnd_width],778 - jae @f - mov [wnd_width],778 -@@: - mcall 48, 5 ; GetClientTop, fix for case when @patel in the top - shr ebx, 16 - mov ecx,ebx - shl ecx,16 - add ecx,523 ; [y start] *65536 + [y size] - cmp [wnd_height],ecx - jae @f - mov [wnd_height],ecx -@@: -; call draw_window -red: -;draw_still: -; pusha - call get_window_param - test [window_status],10b - jnz red_1 ;still - test [window_status],100b - jnz red_1 - test [window_status],1b - jnz red_1 - mov esi,-1 - mov eax,procinfo - mov eax,[eax+66] - cmp eax,150 -; cmp [window_high],150 - jae @f - mov esi,150 - mcall 67,-1,ebx,ebx -@@: - mov edx,-1 - mov eax,procinfo - mov eax,[eax+62] - cmp eax,635 -; cmp [window_width],635 - jae @f ;red_1 - mov edx,635 - mcall 67,-1,ebx, ,ebx -@@: -; mcall 67,-1,ebx -; popa -; xor esi,esi -red_1: -; xor eax,eax -; mov [scroll_bar_data_vertical.position],eax -; mov [scroll_bar_data_horizontal.position],eax - - call draw_window - - cmp [redraw_wallpaper_flag],0 - je still - mov [redraw_wallpaper_flag],0 - call clear_thread -; mcall 15,3 -; jmp red_1 -still: - call pause_cicle - - cmp [RAW1_flag],1 - je animation_handler - - mcall 48,4 - cmp [skin_height],eax - je @f - mov [skin_height],eax - call convert.img_resolution_ok - jmp red_1 -@@: - mcall 10 -.1: - cmp [open_file_flag],1 - je kopen_1 - cmp [sort_directory_flag],byte 1 - je red_sort_directory - cmp [redraw_flag],byte 1 - je redraw_window - cmp eax,1 ; яхЁхЁшёютрЄ№ юъэю ? - je red ; хёыш фр - эр ьхЄъє red - cmp eax,2 ; эрцрЄр ъыртш°р ? - je key ; хёыш фр - эр key - cmp eax,3 ; эрцрЄр ъэюяър ? - je button ; хёыш фр - эр button - cmp eax,6 - je mouse -; cmp [redraw_wallpaper_flag],1 -; jne still -; mov [redraw_wallpaper_flag],0 -; mcall 15,3 - jmp still ; хёыш фЁєуюх ёюс√Єшх - т эрўрыю Ўшъыр - -red_sort_directory: - mov [sort_directory_flag],byte 0 - jmp red_1 - -redraw_window: - mov [redraw_flag],byte 0 - jmp red_1 - -;--------------------------------------------------------------------- -; red: -; test dword [status], 4 -; jz draw_still -; mov al,18 -; mov ebx,3 -; mov ecx,[process] -; mcall 18,3,[active_process] -; and byte [status], not 4 -; jmp still -;--------------------------------------------------------------------- -button: ; button - mov eax,17 ; get id - mcall - cmp ah,1 ; button id=1 ? - je START.exit -; jne .noclose -; -; mov eax,-1 ; close this program -; mcall -.noclose: - cmp ah,2 - je slide_show.3 ;still - jmp slide_show -;--------------------------------------------------------------------- -pause_cicle: - pusha -.start: - mcall 9,procinfo,-1 - mov eax,[procinfo+70] ;status of window - test eax,100b - jne @f - popa - ret -@@: - mcall 10 - dec eax - jz .redraw - dec eax - jz .key - dec eax - jnz .start -.button: - mcall -1 -.key: - mcall 2 - jmp .start -.redraw: - call draw_window - jmp .start -;--------------------------------------------------------------------- -get_filter_data: - mov edi,Filter+4 - xor eax,eax - mov ecx,10 - cld -@@: - mov esi,10 - sub esi,ecx - lea esi,[esi+esi*2] ; x 3 - shl esi,3 ; x 8 - add esi,dword Convert_plugin_0.Assoc - mov esi,[esi] - add esi,4 - - test esi,esi - jz @f - call .start - dec ecx - jnz @r -@@: - mov [edi],byte 0 - mov eax,Filter - sub edi,eax - mov [eax],edi - - ret -.start: -@@: - lodsb - stosb - test eax,eax - jnz @r - cmp [esi],ah - jne @r - ret -;--------------------------------------------------------------------- -kopen_1: - - mov [open_file_flag],0 - call load_directory - test eax,eax - jz kopen -.err: - mov [load_directory_pointer],dir_header - mov [error_fs],eax - call convert.error - jmp still ;red_1 - -kopen: - cmp [string],byte 0 - je still - - mov ecx,-1 - call getappinfo - - call load_image - - test eax,eax - jnz kopen_1.err - call convert - -.1: - call get_window_param - test [window_status],1b - jz red ;draw_still - mov [no_draw_window],1 - -; push edx -; mov edx,size_after_convert_2 -; call write_memory_size -; pop edx - - call draw_other - - mov [no_draw_window],0 -; jmp draw_still - jmp still -;--------------------------------------------------------------------- -getappinfo: - mov eax,9 - mov ebx,process_info - mcall - ret -;--------------------------------------------------------------------- -get_window_param: - mcall 9, procinfo, -1 - mov eax,[ebx+34] - mov [window_start_x],eax - mov eax,[ebx+38] - mov [window_start_y],eax - mov eax,[ebx+66] ;46] - inc eax - mov [window_high],eax - mov eax,[ebx+62] ;42] - inc eax - mov [window_width],eax - mov eax,[ebx+70] - mov [window_status],eax -; mcall 48,4 -; mov [skin_high],eax - ret -;--------------------------------------------------------------------- -;write_memory_size: -; pusha -; mcall 9, procinfo, -1 -; mov eax,[ebx+26] -; mov [edx],eax -; popa -; ret -;--------------------------------------------------------------------- -include 'backgrnd.inc' -include 'draw_win.inc' -include 'full_win.inc' -include 'mouse.inc' -include 'key.inc' -include 'menu_key.inc' -include 'clr_bcgr.inc' -include 'w_error.inc' -include 'load.inc' -include 'animat.inc' -include 'draw_img.inc' -include 'convert.inc' -include 'zoom.inc' -include 'w_about.inc' -include 'win_file.inc' -include 'win_info.inc' -include 'win_bcgr.inc' -include 'win_sort.inc' -include 'win_opti.inc' -include 'libini.inc' -include '../../dll.inc' -include 'data.inc' -;--------------------------------------------------------------------- -IM_END: -include 'dat_area.inc' -I_END: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page Windows 1251 - Cyrillic + + +;***************************************************************************** +;***************************************************************************** +; zSea - advanced image viewer for KolibriOS +; Copyright (c) 2008-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. +;***************************************************************************** +; v.1.0 rё5 22.04.2014 +;****************************************************************************** + use32 + org 0x0 + db 'MENUET01' ; 8 byte id + dd 0x01 ; header version + dd START ; start of code + dd IM_END ; size of image + dd I_END ; memory for app + dd stacktop ; esp + dd dest_cmdline ; I_Param + dd path ; APPLICATION PACH + +include 'lang.inc' +;include 'macros.inc' +;include 'editbox_ex.mac' +;include 'proc32.inc' +include '../../macros.inc' +include '../../develop/libraries/box_lib/box_lib.mac' +include '../../proc32.inc' +;include 'debug.inc' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' + @use_library ;use load lib macros +;****************************************************************************** +;------------------------------------------------------------------------------ +START: ; start of execution + mcall 68, 11 + mcall 66, 1,1 + mcall 40, 0x27 + + mcall 9, procinfo, -1 + mov eax,[ebx+30] + mov [PID],eax + xor ecx,ecx +@@: + inc ecx + mcall 9, procinfo + mov eax,[PID] + cmp eax,[ebx+30] + jne @r + mov [active_process],ecx + + mcall 48,4 + mov [skin_height],eax + + mcall 68,12,1024 + mov [menu_data_1.procinfo],eax + mov [menu_data_2.procinfo],eax + mov [menu_data_3.procinfo],eax + mov [menu_data_4.procinfo],eax + mov [menu_data_5.procinfo],eax + mov [menu_data_6.procinfo],eax + + mov [load_directory_pointer],dir_header + + + call load_plugins + + ;init_checkboxes2 check1,... + push check1 + call [init_checkbox] + push check2 + call [init_checkbox] + + call load_buttons + +; call init_data_OpenDialog + +;init_OpenDialog OpenDialog_data + push dword OpenDialog_data + call [OpenDialog_Init] + +;init_ColorDialog ColorDialog_data + push dword ColorDialog_data + call [ColorDialog_Init] + + call get_filter_data + +;----------------------------------------------------- +; check for parameters + mov esi, [28] + cmp dword [esi],'BOOT' + jne .no_boot +.background: + call load_image + cmp [error_fs],0 + jnz .exit + call convert + + call background + +.exit: + call Set_ini +.exit_1: + mov ebx,18 + mov edx,PID1 + mov esi,7 +.kill_successors: + mov ecx,[edx] + add edx,4 + test ecx,ecx + jz @f + mcall 18 +@@: + dec esi + jnz .kill_successors + + mcall -1 +;----------------------------------------------------- + .no_boot: + xor eax,eax + cmp [esi],al + jnz @f + mov [file_name],eax + jmp .no_param +@@: + + + mov edi,string ; clear string + mov ecx,4096/4 ;256/4 ; length of a string + xor eax,eax ; symbol <0> + rep stosd + + + mov edi, [28] ; look for <0> in temp_area + + cmp [edi],byte "\" + jne .continue + cmp [edi+1],byte "T" + jne @f + mov [bgrmode],dword 1 + jmp .continue_1 +@@: + cmp [edi+1],byte "S" + jne START.exit + mov [bgrmode],dword 2 +.continue_1: + add edi,4 +.continue: + mov esi,edi + mov ecx,4095 ;257 ; strlen + repne scasb + mov ecx, edi + sub ecx, [28] + + mov edi,string + rep movsb ; copy string from temp_area to "string" (filename) + mov ecx, [28] + cmp [ecx],byte "\" + je START.background + call load_directory + test eax,eax + jnz @f + call load_image + test eax,eax + jnz @f + call convert + jmp .no_param +@@: + mov [load_directory_pointer],dir_header + mov [error_fs],eax + call convert.error +;----------------------------------------------------- + .no_param: +; or ecx,-1 ; get information about me +; call getappinfo + +; mov edx,[process_info+30] ; ЄхяхЁ№ т edx эр° шфхэЄшЇшърЄюЁ +; mov ecx,eax + +; @@: +; call getappinfo +; cmp edx,[process_info+30] +; je @f ; хёыш эр° PID ёютяры ё PID ЁрёёьрЄЁштрхьюую яЁюЎхёёр, ь√ эр°ыш ёхс  +; dec ecx ; шэрўх ёьюЄЁшь ёыхфє■∙шщ яЁюЎхёё +; jne @b ; тючтЁр∙рхьё , хёыш эх тёх яЁюЎхёё√ ЁрёёьюЄЁхэ√ +; @@: + +; ЄхяхЁ№ т ecx эюьхЁ яЁюЎхёёр +; mov [process],ecx +;--------------------------------------------------------------------- + cmp [wnd_width],778 + jae @f + mov [wnd_width],778 +@@: + mcall 48, 5 ; GetClientTop, fix for case when @patel in the top + shr ebx, 16 + mov ecx,ebx + shl ecx,16 + add ecx,523 ; [y start] *65536 + [y size] + cmp [wnd_height],ecx + jae @f + mov [wnd_height],ecx +@@: +; call draw_window +red: +;draw_still: +; pusha + call get_window_param + test [window_status],10b + jnz red_1 ;still + test [window_status],100b + jnz red_1 + test [window_status],1b + jnz red_1 + mov esi,-1 + mov eax,procinfo + mov eax,[eax+66] + cmp eax,150 +; cmp [window_high],150 + jae @f + mov esi,150 + mcall 67,-1,ebx,ebx +@@: + mov edx,-1 + mov eax,procinfo + mov eax,[eax+62] + cmp eax,635 +; cmp [window_width],635 + jae @f ;red_1 + mov edx,635 + mcall 67,-1,ebx, ,ebx +@@: +; mcall 67,-1,ebx +; popa +; xor esi,esi +red_1: +; xor eax,eax +; mov [scroll_bar_data_vertical.position],eax +; mov [scroll_bar_data_horizontal.position],eax + + call draw_window + + cmp [redraw_wallpaper_flag],0 + je still + mov [redraw_wallpaper_flag],0 + call clear_thread +; mcall 15,3 +; jmp red_1 +still: + call pause_cicle + + cmp [RAW1_flag],1 + je animation_handler + + mcall 48,4 + cmp [skin_height],eax + je @f + mov [skin_height],eax + call convert.img_resolution_ok + jmp red_1 +@@: + mcall 10 +.1: + cmp [open_file_flag],1 + je kopen_1 + cmp [sort_directory_flag],byte 1 + je red_sort_directory + cmp [redraw_flag],byte 1 + je redraw_window + cmp eax,1 ; яхЁхЁшёютрЄ№ юъэю ? + je red ; хёыш фр - эр ьхЄъє red + cmp eax,2 ; эрцрЄр ъыртш°р ? + je key ; хёыш фр - эр key + cmp eax,3 ; эрцрЄр ъэюяър ? + je button ; хёыш фр - эр button + cmp eax,6 + je mouse +; cmp [redraw_wallpaper_flag],1 +; jne still +; mov [redraw_wallpaper_flag],0 +; mcall 15,3 + jmp still ; хёыш фЁєуюх ёюс√Єшх - т эрўрыю Ўшъыр + +red_sort_directory: + mov [sort_directory_flag],byte 0 + jmp red_1 + +redraw_window: + mov [redraw_flag],byte 0 + jmp red_1 + +;--------------------------------------------------------------------- +; red: +; test dword [status], 4 +; jz draw_still +; mov al,18 +; mov ebx,3 +; mov ecx,[process] +; mcall 18,3,[active_process] +; and byte [status], not 4 +; jmp still +;--------------------------------------------------------------------- +button: ; button + mov eax,17 ; get id + mcall + cmp ah,1 ; button id=1 ? + je START.exit +; jne .noclose +; +; mov eax,-1 ; close this program +; mcall +.noclose: + cmp ah,2 + je slide_show.3 ;still + jmp slide_show +;--------------------------------------------------------------------- +pause_cicle: + pusha +.start: + mcall 9,procinfo,-1 + mov eax,[procinfo+70] ;status of window + test eax,100b + jne @f + popa + ret +@@: + mcall 10 + dec eax + jz .redraw + dec eax + jz .key + dec eax + jnz .start +.button: + mcall -1 +.key: + mcall 2 + jmp .start +.redraw: + call draw_window + jmp .start +;--------------------------------------------------------------------- +get_filter_data: + mov edi,Filter+4 + xor eax,eax + mov ecx,10 + cld +@@: + mov esi,10 + sub esi,ecx + lea esi,[esi+esi*2] ; x 3 + shl esi,3 ; x 8 + add esi,dword Convert_plugin_0.Assoc + mov esi,[esi] + add esi,4 + + test esi,esi + jz @f + call .start + dec ecx + jnz @r +@@: + mov [edi],byte 0 + mov eax,Filter + sub edi,eax + mov [eax],edi + + ret +.start: +@@: + lodsb + stosb + test eax,eax + jnz @r + cmp [esi],ah + jne @r + ret +;--------------------------------------------------------------------- +kopen_1: + + mov [open_file_flag],0 + call load_directory + test eax,eax + jz kopen +.err: + mov [load_directory_pointer],dir_header + mov [error_fs],eax + call convert.error + jmp still ;red_1 + +kopen: + cmp [string],byte 0 + je still + + mov ecx,-1 + call getappinfo + + call load_image + + test eax,eax + jnz kopen_1.err + call convert + +.1: + call get_window_param + test [window_status],1b + jz red ;draw_still + mov [no_draw_window],1 + +; push edx +; mov edx,size_after_convert_2 +; call write_memory_size +; pop edx + + call draw_other + + mov [no_draw_window],0 +; jmp draw_still + jmp still +;--------------------------------------------------------------------- +getappinfo: + mov eax,9 + mov ebx,process_info + mcall + ret +;--------------------------------------------------------------------- +get_window_param: + mcall 9, procinfo, -1 + mov eax,[ebx+34] + mov [window_start_x],eax + mov eax,[ebx+38] + mov [window_start_y],eax + mov eax,[ebx+66] ;46] + inc eax + mov [window_high],eax + mov eax,[ebx+62] ;42] + inc eax + mov [window_width],eax + mov eax,[ebx+70] + mov [window_status],eax +; mcall 48,4 +; mov [skin_high],eax + ret +;--------------------------------------------------------------------- +;write_memory_size: +; pusha +; mcall 9, procinfo, -1 +; mov eax,[ebx+26] +; mov [edx],eax +; popa +; ret +;--------------------------------------------------------------------- +include 'backgrnd.inc' +include 'draw_win.inc' +include 'full_win.inc' +include 'mouse.inc' +include 'key.inc' +include 'menu_key.inc' +include 'clr_bcgr.inc' +include 'w_error.inc' +include 'load.inc' +include 'animat.inc' +include 'draw_img.inc' +include 'convert.inc' +include 'zoom.inc' +include 'w_about.inc' +include 'win_file.inc' +include 'win_info.inc' +include 'win_bcgr.inc' +include 'win_sort.inc' +include 'win_opti.inc' +include 'libini.inc' +include '../../dll.inc' +include 'data.inc' +;--------------------------------------------------------------------- +IM_END: +include 'dat_area.inc' +I_END: diff --git a/programs/network/downloader/downloader.asm b/programs/network/downloader/downloader.asm index ab5544cd9..5961191e7 100644 --- a/programs/network/downloader/downloader.asm +++ b/programs/network/downloader/downloader.asm @@ -1,454 +1,454 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2014-2017. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; downloader.asm - HTTP client for KolibriOS ;; -;; ;; -;; hidnplayr@kolibrios.org ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -URLMAXLEN = 65535 - -__DEBUG__ = 1 -__DEBUG_LEVEL__ = 1 - - -format binary as "" -use32 - org 0x0 - - db 'MENUET01' ; header - dd 0x01 ; header version - dd START ; entry point - dd IM_END ; image size - dd I_END+0x1000 ; required memory - dd I_END+0x1000 ; esp - dd url - dd 0x0 ; I_Path - - -include '../../macros.inc' -include '../../proc32.inc' -include '../../dll.inc' -include '../../debug-fdo.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../develop/libraries/http/http.inc' - -virtual at 0 - http_msg http_msg -end virtual - - -START: - mcall 68, 11 ; init heap so we can allocate memory dynamically - -; load libraries - stdcall dll.Load, @IMPORT - test eax, eax - jnz mainloop.exit - -; wanted events - mcall 40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER - -; prepare filename buffers - mov edi, fname_buf - mov esi, download_file_path - @@: - lodsb - stosb - test al, al - jnz @r - -; Initialise OpenDialog - invoke OpenDialog_Init, OpenDialog_data - -; If user provided parameters, start download right away! - cmp byte[url], 0 - jne display_url_and_download - - mov [OpenDialog_data.draw_window], draw_window - -redraw: - call draw_window - -mainloop: - mcall 10 ; wait here for event - cmp eax, EV_REDRAW - je redraw - cmp eax, EV_KEY - je .key - cmp eax, EV_BUTTON - je .button - cmp eax, EV_MOUSE - je .mouse - jmp mainloop - - .key: - mcall 2 ; read key - invoke edit_box_key, edit1 - cmp ax, 13 shl 8 - je download - jmp mainloop - - .button: - mcall 17 ; get id - cmp ah, 1 ; button id=1 ? - je .exit - - cmp [btn_text], sz_download - je download - - cmp [btn_text], sz_open - je open_file - - .exit: - mcall -1 ; exit - - .mouse: - invoke edit_box_mouse, edit1 - jmp mainloop - - -open_file: - mcall 70, fileopen - jmp mainloop - -display_url_and_download: - xor al, al - mov ecx, 4096 - mov edi, url - repne scasb - sub edi, url+1 - mov [edit1.size], edi - -download: -; Extract the filename from URL - mov edi, url - xor al, al - mov ecx, URLMAXLEN - repne scasb - mov esi, edi - dec esi - dec esi - std - .loop: - lodsb - cmp al, '/' - je .done - test al, al - jnz .loop - .done: - cld - mov ecx, edi - sub ecx, esi - inc esi - inc esi - mov edi, filename_area - rep movsb - -; invoke OpenDialog - invoke OpenDialog_Start, OpenDialog_data - mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK - call draw_window - -; Create the local file - mov [fileinfo], 2 ; create/write to file - xor eax, eax - mov [fileinfo.offset], eax - mov [fileinfo.offset+4], eax - mov [fileinfo.size], eax - mcall 70, fileinfo - test eax, eax - jnz create_error - -; Start the download - invoke HTTP_get, url, 0, FLAG_STREAM or FLAG_REUSE_BUFFER, 0 - test eax, eax - jz get_error - - mov [identifier], eax - mov [offset], 0 - mov [btn_text], sz_cancel - mov [status], sz_downloading - or [edit1.flags], ed_figure_only - and [edit1.flags], not ed_focus - push [sc.work] - pop [edit1.color] - call draw_window - - jmp download_loop - -get_error: - mov [btn_text], sz_exit - mov [status], sz_err_http - jmp redraw - -create_error: - mov [btn_text], sz_exit - mov [status], sz_err_create - jmp redraw - -download_loop: - mcall 10 - cmp eax, EV_REDRAW - je .redraw - cmp eax, EV_BUTTON - je .button - - invoke HTTP_receive, [identifier] - test eax, eax - jz got_data - jmp download_loop - - .redraw: - call draw_window - jmp download_loop - - .button: - jmp http_free - -got_data: - mov ebp, [identifier] - test [ebp + http_msg.flags], 0xffff0000 ; error? - jnz http_error - - cmp [fileinfo], 3 ; Did we write before? - je .write - - test [ebp + http_msg.flags], FLAG_CONTENT_LENGTH - jz .first_write - - mov eax, [ebp + http_msg.content_length] - mov [pb.max], eax - - DEBUGF 1, "new file size=%u\n", eax - mov [fileinfo], 4 ; set end of file - mov [fileinfo.offset], eax ; new file size - mcall 70, fileinfo - test eax, eax - jnz write_error - - - .first_write: - mov [fileinfo], 3 ; write to existing file - .write: - mov ecx, [ebp + http_msg.content_received] - sub ecx, [offset] - jz .no_data ; more then 0 data bytes? - - mov [fileinfo.size], ecx - mov eax, [ebp + http_msg.content_ptr] - mov [fileinfo.buffer], eax - mov ebx, [offset] - mov [fileinfo.offset], ebx - DEBUGF 1, "Writing to disk: size=%u offset=%u\n", ecx, ebx - mcall 70, fileinfo - test eax, eax ; check error code - jnz write_error - cmp ebx, ecx ; check if all bytes were written to disk - jne write_error - - mov eax, [ebp + http_msg.content_received] - mov [offset], eax - mov [pb.value], eax - - invoke progressbar_draw, pb - - .no_data: - test [ebp + http_msg.flags], FLAG_GOT_ALL_DATA - jz download_loop - -; Download completed successfully - mov [status], sz_complete - mov [pb.progress_color], 0x0000c800 ; green - mov [btn_text], sz_open - jmp http_free - -write_error: - mov [status], sz_err_full - mov [pb.progress_color], 0x00c80000 ; red - mov [btn_text], sz_exit - jmp http_free - -http_error: - mov [status], sz_err_http - mov [pb.progress_color], 0x00c80000 ; red - mov [btn_text], sz_exit -; jmp http_free - -http_free: - mcall 40, EVM_REDRAW + EVM_BUTTON - push [ebp + http_msg.content_received] - pop [pb.value] - - mov ecx, [ebp + http_msg.content_ptr] - test ecx, ecx - jz @f - mcall 68, 13 ; free the buffer - @@: - invoke HTTP_free, [identifier] ; free headers and connection - jmp redraw - -draw_window: - mcall 12, 1 ; start window draw - -; get system colors - mcall 48, 3, sc, 40 - -; draw window - mov edx, [sc.work] - or edx, 0x34000000 - mcall 0, <50, 420>, <350, 120>, , 0, title - -; draw button - mcall 8, <320,75>, <50,24>, 22, [sc.work_button] - -; draw button text - mov ecx, [sc.work_button_text] - or ecx, 90000000h - mcall 4, <325,56>, , [btn_text] - -; draw status text - mov ecx, [sc.work_text] - or ecx, 90000000h - mcall 4, <10,70>, , [status] - -; draw editbox - edit_boxes_set_sys_color edit1, editboxes_end, sc - invoke edit_box_draw, edit1 - - cmp [identifier], 0 - je @f -; draw progressbar - invoke progressbar_draw, pb - @@: - mcall 12, 2 ; end window draw - -dont_draw: - ret - -;--------------------------------------------------------------------- -; Data area -;----------------------------------------------------------------------------- -align 4 -@IMPORT: - -library lib_http, 'http.obj', \ - box_lib, 'box_lib.obj', \ - proc_lib, 'proc_lib.obj' - -import lib_http, \ - HTTP_get, 'get', \ - HTTP_receive, 'receive', \ - HTTP_free, 'free' - -import box_lib, \ - edit_box_draw, 'edit_box_draw', \ - edit_box_key, 'edit_box_key', \ - edit_box_mouse, 'edit_box_mouse', \ - progressbar_draw, 'progressbar_draw', \ - progressbar_prog, 'progressbar_progress' - -import proc_lib, \ - OpenDialog_Init, 'OpenDialog_init', \ - OpenDialog_Start, 'OpenDialog_start' - - -fileinfo dd 2 - .offset dd 0, 0 - .size dd 0 - .buffer dd 0 - db 0 - dd fname_buf - -fileopen dd 7 - dd 0 ; flags - dd fname_buf ; parameters - dd 0 ; reserved - dd 0 ; reserved - db "/sys/@open", 0 ; path - -edit1 edit_box 400, 5, 10, 0xffffff, 0x0000ff, 0x0080ff, 0x000000, 0x90000000, URLMAXLEN, url, mouse_dd, ed_focus+ed_always_focus, 0, 0 -editboxes_end: - -identifier dd 0 -btn_text dd sz_download -status dd sz_null -sz_download db 'Download', 0 -sz_cancel db ' Cancel ', 0 -sz_open db ' Open ', 0 -sz_exit db ' Exit ', 0 - -sz_null db 0 -sz_downloading db 'Downloading..', 0 -sz_complete db 'Download completed', 0 -sz_err_create db 'Could not create the local file!', 0 -sz_err_full db 'Disk full!', 0 -sz_err_http db 'HTTP error!', 0 -title db 'HTTP Downloader', 0 - -OpenDialog_data: -.type dd 1 ; Save -.procinfo dd procinfo -.com_area_name dd communication_area_name -.com_area dd 0 -.opendir_path dd temp_dir_path -.dir_default_path dd communication_area_default_path -.start_path dd open_dialog_path -.draw_window dd dont_draw -.status dd 0 -.openfile_patch dd fname_buf -.filename_area dd filename_area -.filter_area dd filter -.x: -.x_size dw 420 ; Window X size -.x_start dw 200 ; Window X position -.y: -.y_size dw 320 ; Window y size -.y_start dw 140 ; Window Y position - -communication_area_name db 'FFFFFFFF_open_dialog',0 -open_dialog_path db '/sys/File Managers/opendial',0 -communication_area_default_path db '/sys',0 - -filter: -dd 0 -db 0 - -pb: -.value dd 0 -.left dd 5 -.top dd 45 -.width dd 300 -.height dd 16 -.style dd 1 -.min dd 0 -.max dd 0 -.back_color dd 0xefefef -.progress_color dd 0xc8c8c8 -.frame_color dd 0x94aece -.frame_color2 dd 0xffffff - -include_debug_strings - -download_file_path db '/tmp0/1/', 0 - -IM_END: - -url rb URLMAXLEN -sc system_colors -offset dd ? -mouse_dd dd ? - -filename_area rb 256 -temp_dir_path rb 4096 -procinfo rb 1024 -fname_buf rb 4096 -text_work_area rb 1024 - -I_END: \ No newline at end of file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2014-2017. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; downloader.asm - HTTP client for KolibriOS ;; +;; ;; +;; hidnplayr@kolibrios.org ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +URLMAXLEN = 65535 + +__DEBUG__ = 1 +__DEBUG_LEVEL__ = 1 + + +format binary as "" +use32 + org 0x0 + + db 'MENUET01' ; header + dd 0x01 ; header version + dd START ; entry point + dd IM_END ; image size + dd I_END+0x1000 ; required memory + dd I_END+0x1000 ; esp + dd url + dd 0x0 ; I_Path + + +include '../../macros.inc' +include '../../proc32.inc' +include '../../dll.inc' +include '../../debug-fdo.inc' +include '../../develop/libraries/box_lib/box_lib.mac' +include '../../develop/libraries/http/http.inc' + +virtual at 0 + http_msg http_msg +end virtual + + +START: + mcall 68, 11 ; init heap so we can allocate memory dynamically + +; load libraries + stdcall dll.Load, @IMPORT + test eax, eax + jnz mainloop.exit + +; wanted events + mcall 40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER + +; prepare filename buffers + mov edi, fname_buf + mov esi, download_file_path + @@: + lodsb + stosb + test al, al + jnz @r + +; Initialise OpenDialog + invoke OpenDialog_Init, OpenDialog_data + +; If user provided parameters, start download right away! + cmp byte[url], 0 + jne display_url_and_download + + mov [OpenDialog_data.draw_window], draw_window + +redraw: + call draw_window + +mainloop: + mcall 10 ; wait here for event + cmp eax, EV_REDRAW + je redraw + cmp eax, EV_KEY + je .key + cmp eax, EV_BUTTON + je .button + cmp eax, EV_MOUSE + je .mouse + jmp mainloop + + .key: + mcall 2 ; read key + invoke edit_box_key, edit1 + cmp ax, 13 shl 8 + je download + jmp mainloop + + .button: + mcall 17 ; get id + cmp ah, 1 ; button id=1 ? + je .exit + + cmp [btn_text], sz_download + je download + + cmp [btn_text], sz_open + je open_file + + .exit: + mcall -1 ; exit + + .mouse: + invoke edit_box_mouse, edit1 + jmp mainloop + + +open_file: + mcall 70, fileopen + jmp mainloop + +display_url_and_download: + xor al, al + mov ecx, 4096 + mov edi, url + repne scasb + sub edi, url+1 + mov [edit1.size], edi + +download: +; Extract the filename from URL + mov edi, url + xor al, al + mov ecx, URLMAXLEN + repne scasb + mov esi, edi + dec esi + dec esi + std + .loop: + lodsb + cmp al, '/' + je .done + test al, al + jnz .loop + .done: + cld + mov ecx, edi + sub ecx, esi + inc esi + inc esi + mov edi, filename_area + rep movsb + +; invoke OpenDialog + invoke OpenDialog_Start, OpenDialog_data + mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK + call draw_window + +; Create the local file + mov [fileinfo], 2 ; create/write to file + xor eax, eax + mov [fileinfo.offset], eax + mov [fileinfo.offset+4], eax + mov [fileinfo.size], eax + mcall 70, fileinfo + test eax, eax + jnz create_error + +; Start the download + invoke HTTP_get, url, 0, FLAG_STREAM or FLAG_REUSE_BUFFER, 0 + test eax, eax + jz get_error + + mov [identifier], eax + mov [offset], 0 + mov [btn_text], sz_cancel + mov [status], sz_downloading + or [edit1.flags], ed_figure_only + and [edit1.flags], not ed_focus + push [sc.work] + pop [edit1.color] + call draw_window + + jmp download_loop + +get_error: + mov [btn_text], sz_exit + mov [status], sz_err_http + jmp redraw + +create_error: + mov [btn_text], sz_exit + mov [status], sz_err_create + jmp redraw + +download_loop: + mcall 10 + cmp eax, EV_REDRAW + je .redraw + cmp eax, EV_BUTTON + je .button + + invoke HTTP_receive, [identifier] + test eax, eax + jz got_data + jmp download_loop + + .redraw: + call draw_window + jmp download_loop + + .button: + jmp http_free + +got_data: + mov ebp, [identifier] + test [ebp + http_msg.flags], 0xffff0000 ; error? + jnz http_error + + cmp [fileinfo], 3 ; Did we write before? + je .write + + test [ebp + http_msg.flags], FLAG_CONTENT_LENGTH + jz .first_write + + mov eax, [ebp + http_msg.content_length] + mov [pb.max], eax + + DEBUGF 1, "new file size=%u\n", eax + mov [fileinfo], 4 ; set end of file + mov [fileinfo.offset], eax ; new file size + mcall 70, fileinfo + test eax, eax + jnz write_error + + + .first_write: + mov [fileinfo], 3 ; write to existing file + .write: + mov ecx, [ebp + http_msg.content_received] + sub ecx, [offset] + jz .no_data ; more then 0 data bytes? + + mov [fileinfo.size], ecx + mov eax, [ebp + http_msg.content_ptr] + mov [fileinfo.buffer], eax + mov ebx, [offset] + mov [fileinfo.offset], ebx + DEBUGF 1, "Writing to disk: size=%u offset=%u\n", ecx, ebx + mcall 70, fileinfo + test eax, eax ; check error code + jnz write_error + cmp ebx, ecx ; check if all bytes were written to disk + jne write_error + + mov eax, [ebp + http_msg.content_received] + mov [offset], eax + mov [pb.value], eax + + invoke progressbar_draw, pb + + .no_data: + test [ebp + http_msg.flags], FLAG_GOT_ALL_DATA + jz download_loop + +; Download completed successfully + mov [status], sz_complete + mov [pb.progress_color], 0x0000c800 ; green + mov [btn_text], sz_open + jmp http_free + +write_error: + mov [status], sz_err_full + mov [pb.progress_color], 0x00c80000 ; red + mov [btn_text], sz_exit + jmp http_free + +http_error: + mov [status], sz_err_http + mov [pb.progress_color], 0x00c80000 ; red + mov [btn_text], sz_exit +; jmp http_free + +http_free: + mcall 40, EVM_REDRAW + EVM_BUTTON + push [ebp + http_msg.content_received] + pop [pb.value] + + mov ecx, [ebp + http_msg.content_ptr] + test ecx, ecx + jz @f + mcall 68, 13 ; free the buffer + @@: + invoke HTTP_free, [identifier] ; free headers and connection + jmp redraw + +draw_window: + mcall 12, 1 ; start window draw + +; get system colors + mcall 48, 3, sc, 40 + +; draw window + mov edx, [sc.work] + or edx, 0x34000000 + mcall 0, <50, 420>, <350, 120>, , 0, title + +; draw button + mcall 8, <320,75>, <50,24>, 22, [sc.work_button] + +; draw button text + mov ecx, [sc.work_button_text] + or ecx, 90000000h + mcall 4, <325,56>, , [btn_text] + +; draw status text + mov ecx, [sc.work_text] + or ecx, 90000000h + mcall 4, <10,70>, , [status] + +; draw editbox + edit_boxes_set_sys_color edit1, editboxes_end, sc + invoke edit_box_draw, edit1 + + cmp [identifier], 0 + je @f +; draw progressbar + invoke progressbar_draw, pb + @@: + mcall 12, 2 ; end window draw + +dont_draw: + ret + +;--------------------------------------------------------------------- +; Data area +;----------------------------------------------------------------------------- +align 4 +@IMPORT: + +library lib_http, 'http.obj', \ + box_lib, 'box_lib.obj', \ + proc_lib, 'proc_lib.obj' + +import lib_http, \ + HTTP_get, 'get', \ + HTTP_receive, 'receive', \ + HTTP_free, 'free' + +import box_lib, \ + edit_box_draw, 'edit_box_draw', \ + edit_box_key, 'edit_box_key', \ + edit_box_mouse, 'edit_box_mouse', \ + progressbar_draw, 'progressbar_draw', \ + progressbar_prog, 'progressbar_progress' + +import proc_lib, \ + OpenDialog_Init, 'OpenDialog_init', \ + OpenDialog_Start, 'OpenDialog_start' + + +fileinfo dd 2 + .offset dd 0, 0 + .size dd 0 + .buffer dd 0 + db 0 + dd fname_buf + +fileopen dd 7 + dd 0 ; flags + dd fname_buf ; parameters + dd 0 ; reserved + dd 0 ; reserved + db "/sys/@open", 0 ; path + +edit1 edit_box 400, 5, 10, 0xffffff, 0x0000ff, 0x0080ff, 0x000000, 0x90000000, URLMAXLEN, url, mouse_dd, ed_focus+ed_always_focus, 0, 0 +editboxes_end: + +identifier dd 0 +btn_text dd sz_download +status dd sz_null +sz_download db 'Download', 0 +sz_cancel db ' Cancel ', 0 +sz_open db ' Open ', 0 +sz_exit db ' Exit ', 0 + +sz_null db 0 +sz_downloading db 'Downloading..', 0 +sz_complete db 'Download completed', 0 +sz_err_create db 'Could not create the local file!', 0 +sz_err_full db 'Disk full!', 0 +sz_err_http db 'HTTP error!', 0 +title db 'HTTP Downloader', 0 + +OpenDialog_data: +.type dd 1 ; Save +.procinfo dd procinfo +.com_area_name dd communication_area_name +.com_area dd 0 +.opendir_path dd temp_dir_path +.dir_default_path dd communication_area_default_path +.start_path dd open_dialog_path +.draw_window dd dont_draw +.status dd 0 +.openfile_patch dd fname_buf +.filename_area dd filename_area +.filter_area dd filter +.x: +.x_size dw 420 ; Window X size +.x_start dw 200 ; Window X position +.y: +.y_size dw 320 ; Window y size +.y_start dw 140 ; Window Y position + +communication_area_name db 'FFFFFFFF_open_dialog',0 +open_dialog_path db '/sys/File Managers/opendial',0 +communication_area_default_path db '/sys',0 + +filter: +dd 0 +db 0 + +pb: +.value dd 0 +.left dd 5 +.top dd 45 +.width dd 300 +.height dd 16 +.style dd 1 +.min dd 0 +.max dd 0 +.back_color dd 0xefefef +.progress_color dd 0xc8c8c8 +.frame_color dd 0x94aece +.frame_color2 dd 0xffffff + +include_debug_strings + +download_file_path db '/tmp0/1/', 0 + +IM_END: + +url rb URLMAXLEN +sc system_colors +offset dd ? +mouse_dd dd ? + +filename_area rb 256 +temp_dir_path rb 4096 +procinfo rb 1024 +fname_buf rb 4096 +text_work_area rb 1024 + +I_END: diff --git a/programs/network/ftpc/gui.inc b/programs/network/ftpc/gui.inc index bb4f413d2..67b947671 100755 --- a/programs/network/ftpc/gui.inc +++ b/programs/network/ftpc/gui.inc @@ -1,10 +1,13 @@ +; SPDX-License-Identifier: NOASSERTION +; + include '../../load_img.inc' include '../../develop/libraries/libs-dev/libimg/libimg.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../load_lib.mac' @use_library - + icon_tl_sys dd 0 icon_tl_nod dd 0 icon_buttons dd 0 @@ -82,7 +85,7 @@ gui: ;////////////////////////////////////////////////////////////////////////// or dword[tree1.style], 8 ;tl_cursor_pos_limited - restrict cursor move to existing nodes or dword[tree2.style], 8 ;tl_cursor_pos_limited - + ; read icons mcall SF_SYS_MISC, SSF_MEM_OPEN, str_icon_18,, 0 or eax, eax @@ -228,7 +231,7 @@ gui: ;////////////////////////////////////////////////////////////////////////// mcall SF_DEFINE_BUTTON, , <80,20>, 6, BT_COL ; string "mkd" mcall SF_DRAW_TEXT, , 0xb0000000+STR_COL, str_mkd - + ; draw "cancel" button ;mcall SF_DEFINE_BUTTON, <555,55>, <308,25>, 10, BT_COL ; string "Cancel" @@ -243,7 +246,7 @@ gui: ;////////////////////////////////////////////////////////////////////////// ;-------------------------- stdcall [tl_draw], tree1 stdcall [tl_draw], tree2 - + mov dword[wScr.all_redraw], 1 stdcall [scrollbar_ver_draw], wScr @@ -360,7 +363,7 @@ gui: ;////////////////////////////////////////////////////////////////////////// @@: cmp ah, 1 je .exit - + jmp .still .print: @@ -456,7 +459,7 @@ gui: ;////////////////////////////////////////////////////////////////////////// mov ecx, [esp] add ecx, buf_buffer2 sub ecx, edi - + repne scasb ; check if the (last) entry is incomplete @@ -466,7 +469,7 @@ gui: ;////////////////////////////////////////////////////////////////////////// rep scasb test ecx, ecx jz .store_last_entry - + dec edx jnz @b @@ -776,7 +779,7 @@ populate_local_tree_list: ;///////////////////////////////////////////////////// je .outer ; more BDFEs to come .done: - ret + ret MIN_M_WND_H equ 500 ; @@ -894,7 +897,7 @@ search: ;/////////////////////////////////////////////////////////////////////// ;;------------------------------------------------------------------------------------------------;; ;< al = 0 (not found) / 1 (found) ;; ;;================================================================================================;; - + push ebx ecx edx esi edi ; if length of haystack < length of needle cmp ecx, edx @@ -1077,7 +1080,7 @@ edit_volume edit_box TLIST_SZ-60, TLIST1_X, 80, 0xffffff, 0x94AECE, 0, \ ; editbox for search edit_search edit_box TLIST_SZ-30, TLIST2_X, 22, 0xffffff, 0x94AECE, 0, \ 0xAABBCC, 0x10000000, 99, filter,mouse_dd, 0 - + ; A subsidiary structure for scrolling align 4 wScr: @@ -1200,7 +1203,7 @@ tedit0: .mode_color db 1 ;+195 .mode_invis db 0 ;+196 .gp_opt db 0 ;+197 - dd 0 ;.fun_on_key_ctrl_all dd but_ctrl_all ;+198 + dd 0 ;.fun_on_key_ctrl_all dd but_ctrl_all ;+198 dd 0,0,0 ;reserved .buffer_size dd 4096 ;+214 .fun_find_err dd 0 ;+218 diff --git a/programs/network/ircc/ircc.asm b/programs/network/ircc/ircc.asm index 32a26d9e6..d0182b9dc 100644 --- a/programs/network/ircc/ircc.asm +++ b/programs/network/ircc/ircc.asm @@ -1,642 +1,642 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2004-2024. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; IRC client for KolibriOS ;; -;; ;; -;; Written by hidnplayr@kolibrios.org, ;; -;; text encoder/decoder by Clevermouse. ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -version equ '0.36b' - -; connection status -STATUS_DISCONNECTED = 0 -STATUS_RESOLVING = 1 -STATUS_CONNECTING = 2 -STATUS_CONNECTED = 3 -STATUS_LOGGED_IN = 4 - -; window flags -FLAG_UPDATED = 1 shl 0 -FLAG_RECEIVING_NAMES = 1 shl 1 -FLAG_SCROLL_LOW = 1 shl 2 - -; window types -WINDOWTYPE_NONE = 0 -WINDOWTYPE_SERVER = 1 -WINDOWTYPE_CHANNEL = 2 -WINDOWTYPE_CHAT = 3 -WINDOWTYPE_LIST = 4 -WINDOWTYPE_DCC = 5 - -; supported encodings -CP866 = 0 -CP1251 = 1 -UTF8 = 2 - -; settings -USERCMD_MAX_SIZE = 400 - -WIN_MIN_X = 600 -WIN_MIN_Y = 183 - -TEXT_X = 2 -TEXT_Y = TOP_Y + 2 - -TOP_SPACE = 2 -TAB_HEIGHT = 14 -TAB_WIDTH = 120 -TAB_SPACE = 5 -TOP_Y = TOP_SPACE+ TAB_HEIGHT -INPUTBOX_HEIGHT = 13 - -MAX_WINDOWS = 20 -MAX_USERS = 4096 -TEXT_BUFFERSIZE = 1024*1024 - -MAX_NICK_LEN = 32 -MAX_REAL_LEN = 32 ; realname -QUIT_MSG_LEN = 250 -MAX_SERVER_NAME = 256 - -MAX_CHANNEL_LEN = 40 -MAX_CHANNELS = 37 - -MAX_COMMAND_LEN = 512 - -PACKETBUF_SIZE = 1024 -PATH_SIZE = 1024 -PARAM_SIZE = 1024 -SERVERCOMMAND_SIZE = 600 - -TIMESTAMP = 3 ; 3 = hh:mm:ss, 2 = hh:mm, 0 = no timestamp - -MAX_WINDOWNAME_LEN = 256 - -WINDOW_BTN_START = 100 -WINDOW_BTN_CLOSE = 2 -WINDOW_BTN_LIST = 3 - -SCROLLBAR_WIDTH = 14 -USERLIST_WIDTH = 160 - -FONT_WIDTH = 8 -FONT_HEIGHT = 16 - -format binary as "" - -use32 - - org 0x0 - - db 'MENUET01' ; 8 byte id - dd 1 ; header version - dd START ; program start - dd I_END ; program image size - dd IM_END+2048 ; required amount of memory - dd IM_END+2048 - dd param - dd path - -include "../../macros.inc" -include "../../proc32.inc" -include "../../dll.inc" -include "../../network.inc" -include "../../struct.inc" -include "../../develop/libraries/box_lib/trunk/box_lib.mac" - -struct window - data_ptr dd ? - flags db ? - type db ? - name rb MAX_WINDOWNAME_LEN - users dd ? - users_scroll dd ? - selected dd ? ; selected user, 0 if none selected - - text_start dd ? ; pointer to current textbox data - text_end dd ? - text_print dd ? ; pointer to first character to print on screen - text_line_print dd ? ; line number of that character - text_write dd ? ; write pointer - text_lines dd ? ; total number of lines - text_scanned dd ? ; pointer to beginning of unscanned data (we still need to count number of lines, insert newline characters,..) - -ends - -struct window_data - text rb TEXT_BUFFERSIZE - names rb MAX_NICK_LEN * MAX_USERS -ends - -include "encodings.inc" -include "window.inc" -include "serverparser.inc" -include "userparser.inc" -include "socket.inc" -include "gui.inc" -include "users.inc" -include "textbox.inc" - - -START: - - mcall 68, 11 ; init heap so we can allocate memory dynamically - -; wanted events - mcall 40, EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_STACK+EVM_MOUSE+EVM_MOUSE_FILTER - -; load libraries - stdcall dll.Load, @IMPORT - test eax, eax - jnz exit - -; find path to main settings file (ircc.ini) - mov edi, path ; Calculate the length of zero-terminated string - xor al, al - mov ecx, PATH_SIZE - repne scasb - dec edi - mov eax, '.ini' - stosd - xor al, al - stosb - -; Fill the window buffer with zeros - mov edi, windows - mov ecx, (sizeof.window*MAX_WINDOWS+3)/4 - xor eax, eax - rep stosd - -; clear command area too - mov edi, servercommand - mov ecx, SERVERCOMMAND_SIZE/4 - rep stosd - -; allocate window data block - mov ebx, windows - call window_create_textbox - test eax, eax - jz exit - mov [ebx + window.type], WINDOWTYPE_SERVER - -; get settings from ini - invoke ini.get_str, path, str_user, str_nick, user_nick, MAX_NICK_LEN, default_nick - invoke ini.get_str, path, str_user, str_real, user_real_name, MAX_REAL_LEN, default_real - invoke ini.get_str, path, str_user, str_quitmsg, quit_msg, 250, default_quit - -; Welcome user - mov esi, str_welcome - call print_asciiz - -; Check if parameter contains an URL - cmp byte[param], 0 - je @f - mov esi, param - mov ecx, PARAM_SIZE - call cmd_usr_server.now - @@: - -redraw: - call draw_window - -mainloop: - mcall 10 ; wait for event - - dec eax - jz redraw - - dec eax - jz main_window_key - - dec eax - jz button - - cmp al, 3 - je mouse - - call process_network_event - - mov edi, [window_active] - test [edi + window.flags], FLAG_UPDATED - jz .no_update - call draw_channel_text - mov edi, [window_active] - cmp [edi + window.type], WINDOWTYPE_CHANNEL - jne .no_update - call draw_user_list - .no_update: - call highlight_updated_tabs - - jmp mainloop - -button: - - mcall 17 ; get id - ror eax, 8 - - cmp ax, 1 ; close program - je quit - - cmp ax, WINDOW_BTN_CLOSE - jne @f - call cmd_usr_close_window - jmp mainloop - - @@: - cmp ax, WINDOW_BTN_LIST - jne @f - - push eax - - mcall 37, 1 ; Get mouse position - sub ax, TEXT_Y - mov bl, FONT_HEIGHT - div bl - and eax, 0x000000ff - inc eax - add eax, [scroll1.position] - mov ebx, [window_active] - mov [ebx + window.selected], eax - - call draw_user_list - - pop eax - test eax, 1 shl 25 ; Right mouse button pressed? - jz mainloop - -; TODO: check if selected nick is my nick! - -; Right mouse BTN was pressed, open chat window - mov ebx, [window_active] - mov eax, [ebx + window.selected] - dec eax - imul eax, MAX_NICK_LEN - mov ebx, [ebx + window.data_ptr] - lea esi, [ebx + window_data.names + eax] -; Strip user prefixes - cmp byte[esi], '~' - je .inc - cmp byte[esi], '&' - je .inc - cmp byte[esi], '@' - je .inc - cmp byte[esi], '%' - je .inc - cmp byte[esi], '+' - je .inc - .open: - call window_open - test ebx, ebx - jz mainloop - mov [window_active], ebx - call redraw - - jmp mainloop - .inc: - inc esi - jmp .open - - @@: - sub ax, WINDOW_BTN_START - jb quit - - cmp ax, MAX_WINDOWS - ja quit - -; Save users scrollbar position - push [scroll1.position] - mov edx, [window_active] - pop [edx + window.users_scroll] - -; OK, time to switch to another window. - mov dx, sizeof.window - mul dx - shl edx, 16 - mov dx, ax - add edx, windows - cmp [edx + window.type], WINDOWTYPE_NONE - je quit - mov [window_active], edx - - push [edx + window.text_line_print] - pop [scroll2.position] - - push [edx + window.users_scroll] - pop [scroll1.position] - - call draw_window - jmp mainloop - -quit: - cmp [socketnum], 0 - je @f - mov esi, quit_msg - call quit_server - @@: - -exit: - -; Close all open windows - call window_close_all - -; Erase RAM areas which could contain the connection details - xor eax, eax - mov edi, irc_server_name - mov ecx, MAX_SERVER_NAME - rep stosb - - mov edi, user_nick - mov ecx, MAX_NICK_LEN - rep stosb - - mov edi, user_real_name - mov ecx, MAX_REAL_LEN - rep stosb - - mov edi, sockaddr1 - mov ecx, SOCKADDR1_SIZE - rep stosb - - mcall -1 - - - -main_window_key: - - mcall 2 - - push dword edit1 - call [edit_box_key] - -; cmp ah, 178 -; jne .no_up -; -; jmp mainloop -; -; -; .no_up: -; cmp ah, 177 -; jne .no_down -; -; jmp mainloop -; -; .no_down: - cmp ah, 13 ; enter - jne no_send2 - - call user_parser - - mov eax, [edit1.size] - - mov [edit1.size], 0 - mov [edit1.pos], 0 - - invoke edit_box_draw, edit1 - - call draw_channel_text - - jmp mainloop - no_send2: - - jmp mainloop - -mouse: - invoke edit_box_mouse, edit1 - -; mcall 37, 7 -; movsx eax, ax -; add [scroll2.position], eax - -; TODO: check if scrollbar is active? - mov edi, [window_active] - cmp [edi + window.type], WINDOWTYPE_CHANNEL - jne @f - push [scroll1.position] - invoke scrollbar_mouse, scroll1 - pop eax - cmp eax, [scroll1.position] ; did the scrollbar move? - je @f - call draw_user_list - @@: - -; TODO: check if scrollbar is active? - mov edi, [window_active] - mov eax, [edi + window.text_lines] - cmp eax, [textbox_height] - jbe @f - invoke scrollbar_mouse, scroll2 - mov edi, [window_active] - and [edi+window.flags], not FLAG_SCROLL_LOW - mov edx, [scroll2.position] - add edx, [scroll2.cur_area] - sub edx, [scroll2.max_area] - jne .not_low - or [edi+window.flags], FLAG_SCROLL_LOW - .not_low: - mov edx, [scroll2.position] - sub edx, [edi + window.text_line_print] - je @f - call draw_channel_text.scroll_to_pos - @@: - - jmp mainloop - - -; DATA AREA - -encoding_text: -db 'CP866 ' -db 'CP1251' -db 'UTF-8 ' -encoding_text_len = 6 - -join_header db 3, '3* ', 0 -quit_header db 3, '5* ', 0 -nick_header db 3, '2* ', 0 -kick_header db 3, '5* ', 0 -mode_header db 3, '2* ', 0 -part_header db 3, '5* ', 0 -topic_header db 3, '3* ', 0 -action_header db 3, '6* ', 0 -ctcp_header db 3, '13-> [', 0 -ctcp_header_recv db 3, '13', 0 -msg_header db 3, '7-> *', 0 -ctcp_version db '] VERSION', 10, 0 -ctcp_ping db '] PING', 10, 0 -ctcp_time db '] TIME', 10, 0 - -has_left_channel db ' has left ', 0 -joins_channel db ' has joined ', 0 -is_now_known_as db ' is now known as ', 0 -has_quit_irc db ' has quit IRC', 10, 0 - -sets_mode db ' sets mode ', 0 -str_kicked db ' is kicked from ', 0 -str_by db ' by ', 0 -str_nickchange db 'Nickname is now ', 0 -str_realchange db 'Real name is now ', 0 -str_talking db 'Now talking in ', 0 -str_topic db 'Topic is "', 0 -str_topic_end db '"', 10, 0 -str_setby db 'Set by ', 0 - -str_connecting db 3, '3* Connecting to ', 0 -str_sockerr db 3, '5* Socket error', 10, 0 -str_dnserr db 3, '5* Unable to resolve hostname', 10, 0 -str_refused db 3, '5* Connection refused', 10, 0 -str_srv_disconnected db 3, '5* Server disconnected', 10, 0 -str_disconnected db 3, '5* Disconnected', 10, 0 -str_reconnect db 3, '5* Connection reset by user', 10, 0 -str_notconnected db 3, '5* You are not connected', 10, 0 -str_notchannel db 3, '5* You are not on a channel', 10, 0 -str_notloggedin db 3, '5* You are not logged in to the server', 10, 0 - -str_1 db 3, '13 -', 0 -str_2 db '- ', 0 - -str_list db 'list', 0 - -str_help db 'The following commands are available:', 10 - db 10 - db '/nick : change nickname', 10 - db '/real : change real name', 10 - db '/server
: connect to server', 10 - db '/code : change codepage (cp866, cp1251, or utf8)', 10 - db '/join : join a channel', 10 - db '/part : part from a channel', 10 - db '/quit : quit server', 10 - db '/msg : send a private message', 10 - db '/ctcp : send a message using client-to-client protocol', 10 - db 10 - db 'Other commands are sent straight to a server', 10 - db 10, 0 - -str_welcome db 3, '3 ___', 3, '7__________', 3, '6_________ ', 3, '4 __ __ __', 10 - db 3, '3| \', 3, '7______ \', 3, '6_ ___ \ ', 3, '4 ____ | | |__| ____ _____/ |_', 10 - db 3, '3| |', 3, '7| _/', 3, '6 \ \/ ', 3, '4 _/ ___\| | | |/ __ \ / \ __\', 10 - db 3, '3| |', 3, '7| | \', 3, '6 \____', 3, '4 \ \___| |_| \ ___/| | \ |', 10 - db 3, '3|___|', 3, '7|____|_ /', 3, '6\______ /', 3, '4 \___ >____/__|\___ >___| /__|', 10 - db 3, '3 ', 3, '7 \/ ', 3, '6 \/ ', 3, '4 \/ \/ \/', 10 - db 'Welcome to KolibriOS IRC client ', version, 10 - db 'Type /help for help', 10, 0 - -str_version db 'VERSION KolibriOS ' -str_programname db 'IRC client ', version, 0 - -str_user db 'user', 0 -str_nick db 'nick', 0 -str_real db 'realname', 0 -str_email db 'email', 0 -str_quitmsg db 'quitmsg', 0 - -default_nick db 'kolibri_user', 0 -default_real db 'Kolibri User', 0 -default_quit db 'KolibriOS forever', 0 - -closing_cross db 'x',0 - -irc_colors dd 0xffffff ; 0 white - dd 0x000000 ; 1 black - dd 0x00007f ; 2 blue (navy) - dd 0x009300 ; 3 green - dd 0xff0000 ; 4 red - dd 0x7f0000 ; 5 brown (maroon) - dd 0x9c009c ; 6 purple - dd 0xfc7f00 ; 7 olive - dd 0xffff00 ; 8 yellow - dd 0x00fc00 ; 9 light green - dd 0x009393 ; 10 teal - dd 0x00ffff ; 11 cyan - dd 0x0000fc ; 12 royal blue - dd 0xff00ff ; 13 pink - dd 0x7f7f7f ; 14 grey - dd 0xd4d0c4 ; 15 light grey (silver) - -sockaddr1: - dw AF_INET4 -.port dw 0x0b1a ; 6667 FIXMEEEEEE -.ip dd 0 - rb 10 - -SOCKADDR1_SIZE = 18 - -status dd STATUS_DISCONNECTED - -window_active dd windows -window_print dd windows - -cmd_remaining dd 0 - -align 4 -@IMPORT: - -library network, 'network.obj',\ - libini, 'libini.obj',\ - boxlib, 'box_lib.obj' - -import network,\ - getaddrinfo, 'getaddrinfo',\ - freeaddrinfo, 'freeaddrinfo',\ - inet_ntoa, 'inet_ntoa' - -import libini,\ - ini.get_str, 'ini_get_str',\ - ini.get_int, 'ini_get_int' - -import boxlib,\ - edit_box_draw, 'edit_box_draw',\ - edit_box_key, 'edit_box_key',\ - edit_box_mouse, 'edit_box_mouse',\ - scrollbar_draw, 'scrollbar_v_draw',\ - scrollbar_mouse,'scrollbar_v_mouse' - - ; width, left, top -edit1 edit_box 0, 0, 0, 0xffffff, 0x6f9480, 0, 0, 0x000000, USERCMD_MAX_SIZE, input_text, mouse_dd, ed_always_focus, 25, 25 - ; xsize, xpos, ysize, ypos, btn_height, max, cur, pos, bgcol, frcol, linecol -scroll1 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1 -scroll2 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1 - -input_text db '/server irc.libera.chat', 0 - rb MAX_COMMAND_LEN - -I_END: - -user_command rb MAX_COMMAND_LEN*4 -.size dd ? - -utf8_bytes_rest dd ? ; bytes rest in current UTF8 sequence -utf8_char dd ? ; first bits of current UTF8 character - -packetbuf rb PACKETBUF_SIZE ; buffer for packets to server -path rb PATH_SIZE -param rb PARAM_SIZE - -servercommand rb SERVERCOMMAND_SIZE - -thread_info process_information -xsize dd ? -ysize dd ? -mouse_dd dd ? - -textbox_height dd ? ; in characters -textbox_width dd ? ; in characters, not pixels ;) - -colors system_colors - -irc_server_name rb MAX_SERVER_NAME ; TODO: move this server URL into window struct -socketnum dd ? ; TODO: same for socket - -user_nick rb MAX_NICK_LEN -user_real_name rb MAX_REAL_LEN -quit_msg rb QUIT_MSG_LEN - -windows rb MAX_WINDOWS*sizeof.window - -IM_END: \ No newline at end of file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2004-2024. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; IRC client for KolibriOS ;; +;; ;; +;; Written by hidnplayr@kolibrios.org, ;; +;; text encoder/decoder by Clevermouse. ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +version equ '0.36b' + +; connection status +STATUS_DISCONNECTED = 0 +STATUS_RESOLVING = 1 +STATUS_CONNECTING = 2 +STATUS_CONNECTED = 3 +STATUS_LOGGED_IN = 4 + +; window flags +FLAG_UPDATED = 1 shl 0 +FLAG_RECEIVING_NAMES = 1 shl 1 +FLAG_SCROLL_LOW = 1 shl 2 + +; window types +WINDOWTYPE_NONE = 0 +WINDOWTYPE_SERVER = 1 +WINDOWTYPE_CHANNEL = 2 +WINDOWTYPE_CHAT = 3 +WINDOWTYPE_LIST = 4 +WINDOWTYPE_DCC = 5 + +; supported encodings +CP866 = 0 +CP1251 = 1 +UTF8 = 2 + +; settings +USERCMD_MAX_SIZE = 400 + +WIN_MIN_X = 600 +WIN_MIN_Y = 183 + +TEXT_X = 2 +TEXT_Y = TOP_Y + 2 + +TOP_SPACE = 2 +TAB_HEIGHT = 14 +TAB_WIDTH = 120 +TAB_SPACE = 5 +TOP_Y = TOP_SPACE+ TAB_HEIGHT +INPUTBOX_HEIGHT = 13 + +MAX_WINDOWS = 20 +MAX_USERS = 4096 +TEXT_BUFFERSIZE = 1024*1024 + +MAX_NICK_LEN = 32 +MAX_REAL_LEN = 32 ; realname +QUIT_MSG_LEN = 250 +MAX_SERVER_NAME = 256 + +MAX_CHANNEL_LEN = 40 +MAX_CHANNELS = 37 + +MAX_COMMAND_LEN = 512 + +PACKETBUF_SIZE = 1024 +PATH_SIZE = 1024 +PARAM_SIZE = 1024 +SERVERCOMMAND_SIZE = 600 + +TIMESTAMP = 3 ; 3 = hh:mm:ss, 2 = hh:mm, 0 = no timestamp + +MAX_WINDOWNAME_LEN = 256 + +WINDOW_BTN_START = 100 +WINDOW_BTN_CLOSE = 2 +WINDOW_BTN_LIST = 3 + +SCROLLBAR_WIDTH = 14 +USERLIST_WIDTH = 160 + +FONT_WIDTH = 8 +FONT_HEIGHT = 16 + +format binary as "" + +use32 + + org 0x0 + + db 'MENUET01' ; 8 byte id + dd 1 ; header version + dd START ; program start + dd I_END ; program image size + dd IM_END+2048 ; required amount of memory + dd IM_END+2048 + dd param + dd path + +include "../../macros.inc" +include "../../proc32.inc" +include "../../dll.inc" +include "../../network.inc" +include "../../struct.inc" +include "../../develop/libraries/box_lib/box_lib.mac" + +struct window + data_ptr dd ? + flags db ? + type db ? + name rb MAX_WINDOWNAME_LEN + users dd ? + users_scroll dd ? + selected dd ? ; selected user, 0 if none selected + + text_start dd ? ; pointer to current textbox data + text_end dd ? + text_print dd ? ; pointer to first character to print on screen + text_line_print dd ? ; line number of that character + text_write dd ? ; write pointer + text_lines dd ? ; total number of lines + text_scanned dd ? ; pointer to beginning of unscanned data (we still need to count number of lines, insert newline characters,..) + +ends + +struct window_data + text rb TEXT_BUFFERSIZE + names rb MAX_NICK_LEN * MAX_USERS +ends + +include "encodings.inc" +include "window.inc" +include "serverparser.inc" +include "userparser.inc" +include "socket.inc" +include "gui.inc" +include "users.inc" +include "textbox.inc" + + +START: + + mcall 68, 11 ; init heap so we can allocate memory dynamically + +; wanted events + mcall 40, EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_STACK+EVM_MOUSE+EVM_MOUSE_FILTER + +; load libraries + stdcall dll.Load, @IMPORT + test eax, eax + jnz exit + +; find path to main settings file (ircc.ini) + mov edi, path ; Calculate the length of zero-terminated string + xor al, al + mov ecx, PATH_SIZE + repne scasb + dec edi + mov eax, '.ini' + stosd + xor al, al + stosb + +; Fill the window buffer with zeros + mov edi, windows + mov ecx, (sizeof.window*MAX_WINDOWS+3)/4 + xor eax, eax + rep stosd + +; clear command area too + mov edi, servercommand + mov ecx, SERVERCOMMAND_SIZE/4 + rep stosd + +; allocate window data block + mov ebx, windows + call window_create_textbox + test eax, eax + jz exit + mov [ebx + window.type], WINDOWTYPE_SERVER + +; get settings from ini + invoke ini.get_str, path, str_user, str_nick, user_nick, MAX_NICK_LEN, default_nick + invoke ini.get_str, path, str_user, str_real, user_real_name, MAX_REAL_LEN, default_real + invoke ini.get_str, path, str_user, str_quitmsg, quit_msg, 250, default_quit + +; Welcome user + mov esi, str_welcome + call print_asciiz + +; Check if parameter contains an URL + cmp byte[param], 0 + je @f + mov esi, param + mov ecx, PARAM_SIZE + call cmd_usr_server.now + @@: + +redraw: + call draw_window + +mainloop: + mcall 10 ; wait for event + + dec eax + jz redraw + + dec eax + jz main_window_key + + dec eax + jz button + + cmp al, 3 + je mouse + + call process_network_event + + mov edi, [window_active] + test [edi + window.flags], FLAG_UPDATED + jz .no_update + call draw_channel_text + mov edi, [window_active] + cmp [edi + window.type], WINDOWTYPE_CHANNEL + jne .no_update + call draw_user_list + .no_update: + call highlight_updated_tabs + + jmp mainloop + +button: + + mcall 17 ; get id + ror eax, 8 + + cmp ax, 1 ; close program + je quit + + cmp ax, WINDOW_BTN_CLOSE + jne @f + call cmd_usr_close_window + jmp mainloop + + @@: + cmp ax, WINDOW_BTN_LIST + jne @f + + push eax + + mcall 37, 1 ; Get mouse position + sub ax, TEXT_Y + mov bl, FONT_HEIGHT + div bl + and eax, 0x000000ff + inc eax + add eax, [scroll1.position] + mov ebx, [window_active] + mov [ebx + window.selected], eax + + call draw_user_list + + pop eax + test eax, 1 shl 25 ; Right mouse button pressed? + jz mainloop + +; TODO: check if selected nick is my nick! + +; Right mouse BTN was pressed, open chat window + mov ebx, [window_active] + mov eax, [ebx + window.selected] + dec eax + imul eax, MAX_NICK_LEN + mov ebx, [ebx + window.data_ptr] + lea esi, [ebx + window_data.names + eax] +; Strip user prefixes + cmp byte[esi], '~' + je .inc + cmp byte[esi], '&' + je .inc + cmp byte[esi], '@' + je .inc + cmp byte[esi], '%' + je .inc + cmp byte[esi], '+' + je .inc + .open: + call window_open + test ebx, ebx + jz mainloop + mov [window_active], ebx + call redraw + + jmp mainloop + .inc: + inc esi + jmp .open + + @@: + sub ax, WINDOW_BTN_START + jb quit + + cmp ax, MAX_WINDOWS + ja quit + +; Save users scrollbar position + push [scroll1.position] + mov edx, [window_active] + pop [edx + window.users_scroll] + +; OK, time to switch to another window. + mov dx, sizeof.window + mul dx + shl edx, 16 + mov dx, ax + add edx, windows + cmp [edx + window.type], WINDOWTYPE_NONE + je quit + mov [window_active], edx + + push [edx + window.text_line_print] + pop [scroll2.position] + + push [edx + window.users_scroll] + pop [scroll1.position] + + call draw_window + jmp mainloop + +quit: + cmp [socketnum], 0 + je @f + mov esi, quit_msg + call quit_server + @@: + +exit: + +; Close all open windows + call window_close_all + +; Erase RAM areas which could contain the connection details + xor eax, eax + mov edi, irc_server_name + mov ecx, MAX_SERVER_NAME + rep stosb + + mov edi, user_nick + mov ecx, MAX_NICK_LEN + rep stosb + + mov edi, user_real_name + mov ecx, MAX_REAL_LEN + rep stosb + + mov edi, sockaddr1 + mov ecx, SOCKADDR1_SIZE + rep stosb + + mcall -1 + + + +main_window_key: + + mcall 2 + + push dword edit1 + call [edit_box_key] + +; cmp ah, 178 +; jne .no_up +; +; jmp mainloop +; +; +; .no_up: +; cmp ah, 177 +; jne .no_down +; +; jmp mainloop +; +; .no_down: + cmp ah, 13 ; enter + jne no_send2 + + call user_parser + + mov eax, [edit1.size] + + mov [edit1.size], 0 + mov [edit1.pos], 0 + + invoke edit_box_draw, edit1 + + call draw_channel_text + + jmp mainloop + no_send2: + + jmp mainloop + +mouse: + invoke edit_box_mouse, edit1 + +; mcall 37, 7 +; movsx eax, ax +; add [scroll2.position], eax + +; TODO: check if scrollbar is active? + mov edi, [window_active] + cmp [edi + window.type], WINDOWTYPE_CHANNEL + jne @f + push [scroll1.position] + invoke scrollbar_mouse, scroll1 + pop eax + cmp eax, [scroll1.position] ; did the scrollbar move? + je @f + call draw_user_list + @@: + +; TODO: check if scrollbar is active? + mov edi, [window_active] + mov eax, [edi + window.text_lines] + cmp eax, [textbox_height] + jbe @f + invoke scrollbar_mouse, scroll2 + mov edi, [window_active] + and [edi+window.flags], not FLAG_SCROLL_LOW + mov edx, [scroll2.position] + add edx, [scroll2.cur_area] + sub edx, [scroll2.max_area] + jne .not_low + or [edi+window.flags], FLAG_SCROLL_LOW + .not_low: + mov edx, [scroll2.position] + sub edx, [edi + window.text_line_print] + je @f + call draw_channel_text.scroll_to_pos + @@: + + jmp mainloop + + +; DATA AREA + +encoding_text: +db 'CP866 ' +db 'CP1251' +db 'UTF-8 ' +encoding_text_len = 6 + +join_header db 3, '3* ', 0 +quit_header db 3, '5* ', 0 +nick_header db 3, '2* ', 0 +kick_header db 3, '5* ', 0 +mode_header db 3, '2* ', 0 +part_header db 3, '5* ', 0 +topic_header db 3, '3* ', 0 +action_header db 3, '6* ', 0 +ctcp_header db 3, '13-> [', 0 +ctcp_header_recv db 3, '13', 0 +msg_header db 3, '7-> *', 0 +ctcp_version db '] VERSION', 10, 0 +ctcp_ping db '] PING', 10, 0 +ctcp_time db '] TIME', 10, 0 + +has_left_channel db ' has left ', 0 +joins_channel db ' has joined ', 0 +is_now_known_as db ' is now known as ', 0 +has_quit_irc db ' has quit IRC', 10, 0 + +sets_mode db ' sets mode ', 0 +str_kicked db ' is kicked from ', 0 +str_by db ' by ', 0 +str_nickchange db 'Nickname is now ', 0 +str_realchange db 'Real name is now ', 0 +str_talking db 'Now talking in ', 0 +str_topic db 'Topic is "', 0 +str_topic_end db '"', 10, 0 +str_setby db 'Set by ', 0 + +str_connecting db 3, '3* Connecting to ', 0 +str_sockerr db 3, '5* Socket error', 10, 0 +str_dnserr db 3, '5* Unable to resolve hostname', 10, 0 +str_refused db 3, '5* Connection refused', 10, 0 +str_srv_disconnected db 3, '5* Server disconnected', 10, 0 +str_disconnected db 3, '5* Disconnected', 10, 0 +str_reconnect db 3, '5* Connection reset by user', 10, 0 +str_notconnected db 3, '5* You are not connected', 10, 0 +str_notchannel db 3, '5* You are not on a channel', 10, 0 +str_notloggedin db 3, '5* You are not logged in to the server', 10, 0 + +str_1 db 3, '13 -', 0 +str_2 db '- ', 0 + +str_list db 'list', 0 + +str_help db 'The following commands are available:', 10 + db 10 + db '/nick : change nickname', 10 + db '/real : change real name', 10 + db '/server
: connect to server', 10 + db '/code : change codepage (cp866, cp1251, or utf8)', 10 + db '/join : join a channel', 10 + db '/part : part from a channel', 10 + db '/quit : quit server', 10 + db '/msg : send a private message', 10 + db '/ctcp : send a message using client-to-client protocol', 10 + db 10 + db 'Other commands are sent straight to a server', 10 + db 10, 0 + +str_welcome db 3, '3 ___', 3, '7__________', 3, '6_________ ', 3, '4 __ __ __', 10 + db 3, '3| \', 3, '7______ \', 3, '6_ ___ \ ', 3, '4 ____ | | |__| ____ _____/ |_', 10 + db 3, '3| |', 3, '7| _/', 3, '6 \ \/ ', 3, '4 _/ ___\| | | |/ __ \ / \ __\', 10 + db 3, '3| |', 3, '7| | \', 3, '6 \____', 3, '4 \ \___| |_| \ ___/| | \ |', 10 + db 3, '3|___|', 3, '7|____|_ /', 3, '6\______ /', 3, '4 \___ >____/__|\___ >___| /__|', 10 + db 3, '3 ', 3, '7 \/ ', 3, '6 \/ ', 3, '4 \/ \/ \/', 10 + db 'Welcome to KolibriOS IRC client ', version, 10 + db 'Type /help for help', 10, 0 + +str_version db 'VERSION KolibriOS ' +str_programname db 'IRC client ', version, 0 + +str_user db 'user', 0 +str_nick db 'nick', 0 +str_real db 'realname', 0 +str_email db 'email', 0 +str_quitmsg db 'quitmsg', 0 + +default_nick db 'kolibri_user', 0 +default_real db 'Kolibri User', 0 +default_quit db 'KolibriOS forever', 0 + +closing_cross db 'x',0 + +irc_colors dd 0xffffff ; 0 white + dd 0x000000 ; 1 black + dd 0x00007f ; 2 blue (navy) + dd 0x009300 ; 3 green + dd 0xff0000 ; 4 red + dd 0x7f0000 ; 5 brown (maroon) + dd 0x9c009c ; 6 purple + dd 0xfc7f00 ; 7 olive + dd 0xffff00 ; 8 yellow + dd 0x00fc00 ; 9 light green + dd 0x009393 ; 10 teal + dd 0x00ffff ; 11 cyan + dd 0x0000fc ; 12 royal blue + dd 0xff00ff ; 13 pink + dd 0x7f7f7f ; 14 grey + dd 0xd4d0c4 ; 15 light grey (silver) + +sockaddr1: + dw AF_INET4 +.port dw 0x0b1a ; 6667 FIXMEEEEEE +.ip dd 0 + rb 10 + +SOCKADDR1_SIZE = 18 + +status dd STATUS_DISCONNECTED + +window_active dd windows +window_print dd windows + +cmd_remaining dd 0 + +align 4 +@IMPORT: + +library network, 'network.obj',\ + libini, 'libini.obj',\ + boxlib, 'box_lib.obj' + +import network,\ + getaddrinfo, 'getaddrinfo',\ + freeaddrinfo, 'freeaddrinfo',\ + inet_ntoa, 'inet_ntoa' + +import libini,\ + ini.get_str, 'ini_get_str',\ + ini.get_int, 'ini_get_int' + +import boxlib,\ + edit_box_draw, 'edit_box_draw',\ + edit_box_key, 'edit_box_key',\ + edit_box_mouse, 'edit_box_mouse',\ + scrollbar_draw, 'scrollbar_v_draw',\ + scrollbar_mouse,'scrollbar_v_mouse' + + ; width, left, top +edit1 edit_box 0, 0, 0, 0xffffff, 0x6f9480, 0, 0, 0x000000, USERCMD_MAX_SIZE, input_text, mouse_dd, ed_always_focus, 25, 25 + ; xsize, xpos, ysize, ypos, btn_height, max, cur, pos, bgcol, frcol, linecol +scroll1 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1 +scroll2 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1 + +input_text db '/server irc.libera.chat', 0 + rb MAX_COMMAND_LEN + +I_END: + +user_command rb MAX_COMMAND_LEN*4 +.size dd ? + +utf8_bytes_rest dd ? ; bytes rest in current UTF8 sequence +utf8_char dd ? ; first bits of current UTF8 character + +packetbuf rb PACKETBUF_SIZE ; buffer for packets to server +path rb PATH_SIZE +param rb PARAM_SIZE + +servercommand rb SERVERCOMMAND_SIZE + +thread_info process_information +xsize dd ? +ysize dd ? +mouse_dd dd ? + +textbox_height dd ? ; in characters +textbox_width dd ? ; in characters, not pixels ;) + +colors system_colors + +irc_server_name rb MAX_SERVER_NAME ; TODO: move this server URL into window struct +socketnum dd ? ; TODO: same for socket + +user_nick rb MAX_NICK_LEN +user_real_name rb MAX_REAL_LEN +quit_msg rb QUIT_MSG_LEN + +windows rb MAX_WINDOWS*sizeof.window + +IM_END: diff --git a/programs/network/netstat/netstat.asm b/programs/network/netstat/netstat.asm index 1c95ac099..80d703764 100644 --- a/programs/network/netstat/netstat.asm +++ b/programs/network/netstat/netstat.asm @@ -1,1029 +1,1029 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2010-2021. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; netstat.asm - Network Status Tool for KolibriOS ;; -;; ;; -;; Written by hidnplayr@kolibrios.org ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -format binary as "" - -BOX_WIDTH = 390 -BOX_HEIGHT = 185 - -use32 - - org 0x0 - - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd START ; start of code - dd I_END ; size of image - dd (I_END+0x1000) ; memory for app - dd (I_END+0x1000) ; esp - dd 0, 0 ; I_Param, I_Path - -include '../../proc32.inc' -include '../../macros.inc' -include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' - -include '../../network.inc' - -include 'ipcfg.inc' - -START: - - mcall 68, 11 - - stdcall dll.Load, @IMPORT - or eax, eax - jnz exit - - mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK2 + EVM_KEY - -window_redraw: - -; get system colors - mcall 48, 3, sc, 40 - -; Notify kernel of start of window draw - mcall 12, 1 - -; Draw the window - mcall 0, 100 shl 16 + 600, 100 shl 16 + 240, 0x34E1E1E1, , name - -; Define the buttons (for tabs) - mov ebx, 5 shl 16 + 54 - mov ecx, 4 shl 16 + 21 - mov edx, 0x60000000 + 101 - .buttonloop: - mcall 8 - add ebx, 60 shl 16 - inc edx - cmp dl, 106 - jle .buttonloop - -; draw sides and upper lines of the tab buttons - mov eax, 13 - mov ebx, 5 shl 16 + 1 - mov ecx, 4 shl 16 + 21 - mov edx, 0x00777777 - .loop: - mcall - mov bx, 54 - mov cx, 1 - mcall - mov bx, 1 - mov cx, 21 - add ebx, 54 shl 16 - mcall - add ebx, 6 shl 16 - cmp ebx, 360 shl 16 - jb .loop - -; Draw sides and bottom lines of the rectangle - mcall , 0 shl 16 + 1, 25 shl 16 + BOX_HEIGHT;, 0x00777777 - mcall , (0+BOX_WIDTH) shl 16 +1, 25 shl 16 + (BOX_HEIGHT+1) - mcall , 0 shl 16 + BOX_WIDTH, (25+BOX_HEIGHT) shl 16 + 1 - -redraw: - -; Draw interface buttons (on the right hand side) - call draw_interfaces - -; Draw upper line of rectangle - mcall 13, 0 shl 16 + BOX_WIDTH, 25 shl 16 + 1, 0x00777777 - -; Fill rectangle - mcall 13, 1 shl 16 + BOX_WIDTH-1, 26 shl 16 + BOX_HEIGHT-1, 0x00F3F3F3 - -; Undefine IP settings button - mov edx, 0x80000002 - mcall 8 - -; Fill tab buttons - mov eax, 13 - mov ebx, 6 shl 16 + 53 - mov si, 101 - .buttonloop: - mov ecx, 6 shl 16 + 19 - mov edx, 0x00BBBBBB - cmp si, [mode] - jne @f - mov edx, 0x00F3F3F3 ; Activated button has other colors - inc ecx - @@: - mcall - mov edx, 0x00E1E1E1 - cmp si, [mode] - jne @f - mov edx, 0x00FFFFFF ; Activated button has other colors - @@: - mov ecx, 5 shl 16 + 1 - mcall - add ebx, 60 shl 16 - inc si - cmp si, 106 - jle .buttonloop -; Print button names on top of the buttons - mcall 4, 9 shl 16 + 12, 0x80000000, modes - -; Get information about the selected device - xor ebx, ebx - mov bh, [device] - mcall 74 - mov [device_type], eax - - cmp [mode], 101 - jne .no_eth - - mcall 4, 212 shl 16 + 35, 0x80000000, str_err - add ebx, 18 - mov edx, str_dropped - mcall - add ebx, 18 - mov edx, str_missed - mcall - add ebx, 18 - mov edx, str_err - mcall - add ebx, 18 - mov edx, str_dropped - mcall - add ebx, 18 - mov edx, str_missed - mcall - - mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx - add ebx, 18 - mov edx, str_packets_rx - mcall - add ebx, 18 - mov edx, str_bytes_tx - mcall - add ebx, 18 - mov edx, str_bytes_rx - mcall - add ebx, 18 - mov edx, str_speed_tx - mcall - add ebx, 18 - mov edx, str_speed_rx - mcall - add ebx, 18 - mov edx, str_link - mcall - - cmp [device_type], 1 - jne end_of_draw - - add ebx, 18 - mov edx, str_MAC - mcall - - mov ebx, API_ETH - mov bh, [device] - mcall 76 - push eax - push bx - - mov edx, 116 shl 16 + 35 + 7*18 - call draw_mac - jmp end_of_draw - - .no_eth: - - cmp [mode], 102 - jne .no_ip - - mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx - add ebx, 18 - mov edx, str_packets_rx - mcall - add ebx, 18 - mov edx, str_ip - mcall - add ebx, 18 - mov edx, str_dns - mcall - add ebx, 18 - mov edx, str_subnet - mcall - add ebx, 18 - mov edx, str_gateway - mcall - - - mov ebx, API_IPv4 + 8 - mov bh, [device] - mcall 76 - push eax - - dec bl - dec bl - mcall 76 - push eax - - dec bl - dec bl - mcall 76 - push eax - - dec bl - dec bl - mcall 76 - push eax - - mov edx, 116 shl 16 + 35 + 2*18 - call draw_ip - - add edx, 18 - call draw_ip - - add edx, 18 - call draw_ip - - add edx, 18 - call draw_ip - - cmp [device], 0 - je end_of_draw - - mcall 8, 128 shl 16 + 100, 150 shl 16 + 20, 2, [sc.work_button] - mcall 4, 150 shl 16 + 157, [sc.work_button_text], str_ip_cfg, str_ip_cfg.len - - jmp end_of_draw - - .no_ip: - - cmp [mode], 103 - jne .no_arp - - mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx - add ebx, 18 - mov edx, str_packets_rx - mcall - add ebx, 18 - mov edx, str_arp - mcall - add ebx, 18 - mov edx, str_conflicts - mcall - - mcall 4, 8 shl 16 + 130, 0x80000000, str_ARP_legend - - jmp end_of_draw - - .no_arp: - - mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx - - add ebx, 18 - mov edx, str_packets_rx - mcall - - cmp [mode], 106 - jne end_of_draw - - add ebx, 18 - mov edx, str_missed - mcall - - add ebx, 18 - mov edx, str_dropped - mcall - - add ebx, 18 - mov edx, str_queued - mcall - -end_of_draw: - - mcall 12, 2 - -draw_stats: - - cmp [mode], 101 - jne not_101 - - mov ebx, API_ETH - mov bh, [device] - mov bl, 6 - @@: - push ebx - mcall 74 - pop ebx - push eax - inc bl - cmp bl, 16 - jbe @r - -; rx ovr - mov ebx, 0x000a0000 - pop ecx - mov edx, 320 shl 16 + 35 + 5*18 - mov esi, 0x40000000 - mcall 47 - -; rx drop - sub edx, 18 - pop ecx - mcall - -; rx err - sub edx, 18 - pop ecx - mcall - -; tx ovr - sub edx, 18 - pop ecx - mcall - -; tx drop - sub edx, 18 - pop ecx - mcall - -; tx err - sub edx, 18 - pop ecx - mcall - -; Calculate speed - pop ecx - - push [time] - pop [delta_time] - mcall 26, 9 ; TODO: use 26, 10 instead - mov [time], eax - sub eax, [delta_time] - jnz @f - inc eax ; Zero time units? Lets make it at least one. - @@: - lea eax, [eax + 4*eax] - shl eax, 1 - mov [delta_time], eax - - mov eax, [esp+4] ; bytes received - push eax - sub eax, [prev_rx] - pop [prev_rx] - xor edx, edx - div [delta_time] - push eax - - mov eax, [esp+4] ; bytes sent - push eax - sub eax, [prev_tx] - pop [prev_tx] - xor edx, edx - div [delta_time] - push eax - - test cl, cl - jnz @f - mov edx, str_down - jmp .print_link - @@: - cmp cl, 100b - jnz @f - mov edx, str_10m - jmp .print_link - @@: - cmp cl, 110b - jnz @f - mov edx, str_10mfd - jmp .print_link - @@: - cmp cl, 1000b - jnz @f - mov edx, str_100m - jmp .print_link - @@: - cmp cl, 1010b - jnz @f - mov edx, str_100mfd - jmp .print_link - @@: - cmp cl, 1100b - jnz @f - mov edx, str_1g - jmp .print_link - @@: - cmp cl, 1110b - jnz @f - mov edx, str_1gfd - jmp .print_link - @@: - mov edx, str_unknown - - .print_link: - mov ebx, 116 shl 16 + 35 + 6*18 - mov ecx, 0xc0000000 - mov edi, 0x00f3f3f3 - mcall 4 - -; speed rx - mov ebx, 0x000a0000 - pop ecx - mov edx, 116 shl 16 + 35 + 5*18 - mov esi, 0x40000000 - mcall 47 - -; speed tx - sub edx, 18 - pop ecx - mcall - -; bytes received - sub edx, 18 - pop ecx - mcall - -; bytes sent - sub edx, 18 - pop ecx - mcall - -; packets received - sub edx, 18 - pop ecx - mcall - -; packets sent - sub edx, 18 - pop ecx - mcall - - jmp mainloop - - -not_101: - - cmp [mode], 102 - jne not_102 - - mov ebx, API_IPv4 - mov bh, [device] - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - - mov ebx, 0x000a0000 - pop ecx - mov edx, 116 shl 16 + 35 + 18 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - mcall 47 - - sub edx, 18 - pop ecx - mcall - - jmp mainloop - - -not_102: - - cmp [mode], 103 - jne not_103 - - mov ebx, API_ARP - mov bh, [device] - push ebx - mcall 76 ; tx - pop ebx - push eax - - inc bl - push ebx - mcall 76 ; rx - pop ebx - push eax - - inc bl - push ebx - mcall 76 ; entries - pop ebx - push eax - - mov bl, 7 - push ebx - mcall 76 - pop ebx - push eax - - mov ebx, 0x000a0000 - pop ecx - mov edx, 116 shl 16 + 35 + 3*18 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - mcall 47 - - sub edx, 18 - pop ecx - mcall - - sub edx, 18 - pop ecx - mcall - - sub edx, 18 - pop ecx - mcall - -; mov edx, 50 shl 16 + 150 - mov [last], 0 - - .arp_loop: - mov ebx, API_ARP + 3 ; read ARP entry - mov bh, [device] - mcall 76, ,[last], , , arp_buf - cmp eax, -1 - je mainloop - - mov ebx, [last] - imul ebx, 16 - add ebx, 8 shl 16 + 140 - mcall 4, , 0x80000000, str_ARP_entry - mov edx, ebx - - mov eax, 47 - mov ebx, 0x00030000 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - xor ecx, ecx - - mov cl, byte[arp_buf.IP+0] - mcall - - mov cl, byte[arp_buf.IP+1] - add edx, 24 shl 16 - mcall - - mov cl, byte[arp_buf.IP+2] - add edx, 24 shl 16 - mcall - - mov cl, byte[arp_buf.IP+3] - add edx, 24 shl 16 - mcall - - - mov ebx, 0x00020100 - mov cl, byte[arp_buf.MAC+0] - add edx, 36 shl 16 - mcall - - mov cl, byte[arp_buf.MAC+1] - add edx, 18 shl 16 - mcall - - mov cl, byte[arp_buf.MAC+2] - add edx, 18 shl 16 - mcall - - mov cl, byte[arp_buf.MAC+3] - add edx, 18 shl 16 - mcall - - mov cl, byte[arp_buf.MAC+4] - add edx, 18 shl 16 - mcall - - mov cl, byte[arp_buf.MAC+5] - add edx, 18 shl 16 - mcall - - mov ebx, 0x00040000 - mov cx, [arp_buf.status] - add edx, 30 shl 16 - mcall - - mov cx, [arp_buf.TTL] - add edx, 60 shl 16 - mcall - - add dx, 18 - rol edx, 16 - mov dx, 8 - rol edx, 16 - inc [last] - - jmp .arp_loop - -not_103: - - cmp [mode], 104 - jne not_104 - - mov ebx, API_ICMP - mov bh, [device] - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - mov ebx, 0x000a0000 - pop ecx - mov edx, 116 shl 16 + 35 + 18 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - mcall 47 - - sub edx, 18 - pop ecx - mcall - - jmp mainloop - -not_104: - - cmp [mode], 105 - jne not_105 - - mov ebx, API_UDP - mov bh, [device] - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - mov ebx, 0x000a0000 - pop ecx - mov edx, 116 shl 16 + 35 + 18 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - mcall 47 - - sub edx, 18 - pop ecx - mcall - - jmp mainloop - -not_105: - - cmp [mode], 106 - jne not_106 - - mov ebx, API_TCP - mov bh, [device] - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - inc bl - push ebx - mcall 76 - pop ebx - push eax - - mov ebx, 0x000a0000 - pop ecx - mov edx, 116 shl 16 + 35 + 18*4 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - mcall 47 - - sub edx, 18 - pop ecx - mcall - - sub edx, 18 - pop ecx - mcall - - sub edx, 18 - pop ecx - mcall - - sub edx, 18 - pop ecx - mcall - - jmp mainloop - -not_106: - -mainloop: - - mcall 23, 50 ; wait for event with timeout (0,5 s) - - cmp eax, EV_REDRAW - je window_redraw - cmp eax, EV_BUTTON - je button - cmp eax, EV_KEY - je key - cmp eax, 11 - je redraw - - jmp draw_stats - -button: ; button - mcall 17 ; get id - cmp ah, 1 - je exit - cmp ah, 2 - je .ipcfg - cmp ah, 0 - je .interface - shr ax, 8 - mov [mode], ax - jmp redraw - - .ipcfg: - mcall 51, 1, ipcfg, I_END+0x1000 - jmp mainloop - - .interface: - shr eax, 16 - mov [device], al - jmp redraw - -key: - mcall 2 - cmp ah, 9 - je .tab - cmp ah, 183 - je .pgdown - cmp ah, 184 - je .pgup - jmp mainloop - - .tab: - inc [mode] - cmp [mode], 106 - jbe redraw - mov [mode], 101 - jmp redraw - - .pgdown: - inc [device] - mov al, [device] - cmp al, [last_device] - jbe redraw - mov [device], 0 - jmp redraw - - .pgup: - dec [device] - cmp [device], 0 - jge redraw - mov al, [last_device] - mov [device], al - jmp redraw - -exit: - mcall -1 - - - -draw_mac: - - mov eax, 47 - mov ebx, 0x00020100 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - - mov cl, [esp+4] - mcall - - mov cl, [esp+4+1] - add edx, 18 shl 16 - mcall - - mov cl, [esp+4+2] - add edx, 18 shl 16 - mcall - - mov cl, [esp+4+3] - add edx, 18 shl 16 - mcall - - mov cl, [esp+4+4] - add edx, 18 shl 16 - mcall - - mov cl, [esp+4+5] - add edx, 18 shl 16 - mcall - - sub edx, 5*18 shl 16 - - ret 6 - - -draw_ip: - - mov eax, 47 - mov ebx, 0x00030000 - mov esi, 0x40000000 - mov edi, 0x00F3F3F3 - - xor ecx, ecx - - mov cl, [esp+4] - mcall - - mov cl, [esp+4+1] - add edx, 24 shl 16 - mcall - - mov cl, [esp+4+2] - add edx, 24 shl 16 - mcall - - mov cl, [esp+4+3] - add edx, 24 shl 16 - mcall - - sub edx, 3*24 shl 16 - ret 4 - - -draw_interfaces: - - mov [.btnpos], 5 shl 16 + 20 - mov [.txtpos], 405 shl 16 + 12 - - mcall 74, -1 ; get number of active network devices - mov ecx, eax - dec al - mov [last_device], al - cmp [device], al - jbe @f - mov [device], 0 - @@: - - xor ebx, ebx ; get device type - .loop: - mcall 74 - cmp eax, 1 ; loopback or ethernet? - jbe .hit - inc bh - jb .loop ; tried all 256? - ret - - - .hit: - push ecx ebx - movzx edx, bh - shl edx, 8 - mov esi, 0x00BBBbbb - cmp bh, [device] - cmove esi, 0x0081BBFF - mcall 8, 400 shl 16 + 185, [.btnpos] - mov ebx, [esp] - inc bl - mov ecx, namebuf - mov edx, namebuf - mcall 74 ; get device name - cmp eax, -1 - jne @f - mov edx, str_unknown - @@: - mcall 4, [.txtpos], 0x80000000 ; print the name - pop ebx ecx - - inc bh - - add [.btnpos], 25 shl 16 - add [.txtpos], 25 - - dec ecx - jnz .loop - - ret - - .btnpos dd ? - .txtpos dd ? - - -; DATA AREA - -align 16 -@IMPORT: - -library box_lib , 'box_lib.obj', \ - libini , 'libini.obj' - -import libini, \ - ini.get_str , 'ini_get_str' ,\ - ini.set_str , 'ini_set_str' ,\ - ini.enum_sections, 'ini_enum_sections' - -import box_lib ,\ - edit_box_draw , 'edit_box' ,\ - edit_box_key , 'edit_box_key' ,\ - edit_box_mouse , 'edit_box_mouse' ,\ - edit_set_text , 'edit_box_set_text' ,\ - version_ed , 'version_ed' ,\ - init_checkbox , 'init_checkbox2' ,\ - check_box_draw , 'check_box_draw2' ,\ - check_box_mouse , 'check_box_mouse2' ,\ - version_ch , 'version_ch2' ,\ - option_box_draw , 'option_box_draw' ,\ - option_box_mouse, 'option_box_mouse' ,\ - version_op , 'version_op' - -name db 'Network status', 0 -mode dw 101 ; currently selected protocol -device db 1 ; currently selected device -last_device db ? ; last device available -device_type dd ? -last dd ? -modes db 'Physical IPv4 ARP ICMP UDP TCP', 0 - -str_packets_tx db 'Packets sent:', 0 -str_packets_rx db 'Packets received:', 0 -str_bytes_tx db 'Bytes sent:', 0 -str_bytes_rx db 'Bytes received:', 0 -str_MAC db 'MAC address: - - - - -', 0 -str_ip db 'IP address: . . .', 0 -str_dns db 'DNS address: . . .', 0 -str_subnet db 'Subnet mask: . . .', 0 -str_gateway db 'Standard gateway: . . .', 0 -str_arp db 'ARP entrys:', 0 -str_conflicts db 'ARP conflicts:', 0 -str_missed db 'Packets missed:', 0 -str_dropped db 'Packets dropped:', 0 -str_err db 'Packet errors:', 0 -str_queued db 'Packets queued:', 0 -str_link db 'Link state:', 0 -str_speed_tx db 'Upload (kb/s):', 0 -str_speed_rx db 'Download (kb/s):', 0 -str_ip_cfg db 'Configure' -.len = $ - str_ip_cfg - -str_down db 'disconnected ', 0 -str_unknown db 'unknown ', 0 -str_10m db '10 Mbit Half duplex ', 0 -str_10mfd db '10 Mbit Full duplex ', 0 -str_100m db '100 Mbit Half duplex', 0 -str_100mfd db '100 Mbit Full duplex', 0 -str_1g db '1 Gbit Half duplex ', 0 -str_1gfd db '1 Gbit Full duplex ', 0 - -str_ARP_legend db 'IP-address MAC-address Status TTL', 0 -str_ARP_entry db ' . . . - - - - -', 0 - -prev_rx dd ? -prev_tx dd ? -time dd ? -delta_time dd ? - -namebuf rb 64 -arp_buf ARP_entry - -sc system_colors - -I_END: \ No newline at end of file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2010-2021. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; netstat.asm - Network Status Tool for KolibriOS ;; +;; ;; +;; Written by hidnplayr@kolibrios.org ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +format binary as "" + +BOX_WIDTH = 390 +BOX_HEIGHT = 185 + +use32 + + org 0x0 + + db 'MENUET01' ; 8 byte id + dd 0x01 ; header version + dd START ; start of code + dd I_END ; size of image + dd (I_END+0x1000) ; memory for app + dd (I_END+0x1000) ; esp + dd 0, 0 ; I_Param, I_Path + +include '../../proc32.inc' +include '../../macros.inc' +include '../../dll.inc' +include '../../develop/libraries/box_lib/box_lib.mac' + +include '../../network.inc' + +include 'ipcfg.inc' + +START: + + mcall 68, 11 + + stdcall dll.Load, @IMPORT + or eax, eax + jnz exit + + mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK2 + EVM_KEY + +window_redraw: + +; get system colors + mcall 48, 3, sc, 40 + +; Notify kernel of start of window draw + mcall 12, 1 + +; Draw the window + mcall 0, 100 shl 16 + 600, 100 shl 16 + 240, 0x34E1E1E1, , name + +; Define the buttons (for tabs) + mov ebx, 5 shl 16 + 54 + mov ecx, 4 shl 16 + 21 + mov edx, 0x60000000 + 101 + .buttonloop: + mcall 8 + add ebx, 60 shl 16 + inc edx + cmp dl, 106 + jle .buttonloop + +; draw sides and upper lines of the tab buttons + mov eax, 13 + mov ebx, 5 shl 16 + 1 + mov ecx, 4 shl 16 + 21 + mov edx, 0x00777777 + .loop: + mcall + mov bx, 54 + mov cx, 1 + mcall + mov bx, 1 + mov cx, 21 + add ebx, 54 shl 16 + mcall + add ebx, 6 shl 16 + cmp ebx, 360 shl 16 + jb .loop + +; Draw sides and bottom lines of the rectangle + mcall , 0 shl 16 + 1, 25 shl 16 + BOX_HEIGHT;, 0x00777777 + mcall , (0+BOX_WIDTH) shl 16 +1, 25 shl 16 + (BOX_HEIGHT+1) + mcall , 0 shl 16 + BOX_WIDTH, (25+BOX_HEIGHT) shl 16 + 1 + +redraw: + +; Draw interface buttons (on the right hand side) + call draw_interfaces + +; Draw upper line of rectangle + mcall 13, 0 shl 16 + BOX_WIDTH, 25 shl 16 + 1, 0x00777777 + +; Fill rectangle + mcall 13, 1 shl 16 + BOX_WIDTH-1, 26 shl 16 + BOX_HEIGHT-1, 0x00F3F3F3 + +; Undefine IP settings button + mov edx, 0x80000002 + mcall 8 + +; Fill tab buttons + mov eax, 13 + mov ebx, 6 shl 16 + 53 + mov si, 101 + .buttonloop: + mov ecx, 6 shl 16 + 19 + mov edx, 0x00BBBBBB + cmp si, [mode] + jne @f + mov edx, 0x00F3F3F3 ; Activated button has other colors + inc ecx + @@: + mcall + mov edx, 0x00E1E1E1 + cmp si, [mode] + jne @f + mov edx, 0x00FFFFFF ; Activated button has other colors + @@: + mov ecx, 5 shl 16 + 1 + mcall + add ebx, 60 shl 16 + inc si + cmp si, 106 + jle .buttonloop +; Print button names on top of the buttons + mcall 4, 9 shl 16 + 12, 0x80000000, modes + +; Get information about the selected device + xor ebx, ebx + mov bh, [device] + mcall 74 + mov [device_type], eax + + cmp [mode], 101 + jne .no_eth + + mcall 4, 212 shl 16 + 35, 0x80000000, str_err + add ebx, 18 + mov edx, str_dropped + mcall + add ebx, 18 + mov edx, str_missed + mcall + add ebx, 18 + mov edx, str_err + mcall + add ebx, 18 + mov edx, str_dropped + mcall + add ebx, 18 + mov edx, str_missed + mcall + + mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx + add ebx, 18 + mov edx, str_packets_rx + mcall + add ebx, 18 + mov edx, str_bytes_tx + mcall + add ebx, 18 + mov edx, str_bytes_rx + mcall + add ebx, 18 + mov edx, str_speed_tx + mcall + add ebx, 18 + mov edx, str_speed_rx + mcall + add ebx, 18 + mov edx, str_link + mcall + + cmp [device_type], 1 + jne end_of_draw + + add ebx, 18 + mov edx, str_MAC + mcall + + mov ebx, API_ETH + mov bh, [device] + mcall 76 + push eax + push bx + + mov edx, 116 shl 16 + 35 + 7*18 + call draw_mac + jmp end_of_draw + + .no_eth: + + cmp [mode], 102 + jne .no_ip + + mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx + add ebx, 18 + mov edx, str_packets_rx + mcall + add ebx, 18 + mov edx, str_ip + mcall + add ebx, 18 + mov edx, str_dns + mcall + add ebx, 18 + mov edx, str_subnet + mcall + add ebx, 18 + mov edx, str_gateway + mcall + + + mov ebx, API_IPv4 + 8 + mov bh, [device] + mcall 76 + push eax + + dec bl + dec bl + mcall 76 + push eax + + dec bl + dec bl + mcall 76 + push eax + + dec bl + dec bl + mcall 76 + push eax + + mov edx, 116 shl 16 + 35 + 2*18 + call draw_ip + + add edx, 18 + call draw_ip + + add edx, 18 + call draw_ip + + add edx, 18 + call draw_ip + + cmp [device], 0 + je end_of_draw + + mcall 8, 128 shl 16 + 100, 150 shl 16 + 20, 2, [sc.work_button] + mcall 4, 150 shl 16 + 157, [sc.work_button_text], str_ip_cfg, str_ip_cfg.len + + jmp end_of_draw + + .no_ip: + + cmp [mode], 103 + jne .no_arp + + mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx + add ebx, 18 + mov edx, str_packets_rx + mcall + add ebx, 18 + mov edx, str_arp + mcall + add ebx, 18 + mov edx, str_conflicts + mcall + + mcall 4, 8 shl 16 + 130, 0x80000000, str_ARP_legend + + jmp end_of_draw + + .no_arp: + + mcall 4, 8 shl 16 + 35, 0x80000000, str_packets_tx + + add ebx, 18 + mov edx, str_packets_rx + mcall + + cmp [mode], 106 + jne end_of_draw + + add ebx, 18 + mov edx, str_missed + mcall + + add ebx, 18 + mov edx, str_dropped + mcall + + add ebx, 18 + mov edx, str_queued + mcall + +end_of_draw: + + mcall 12, 2 + +draw_stats: + + cmp [mode], 101 + jne not_101 + + mov ebx, API_ETH + mov bh, [device] + mov bl, 6 + @@: + push ebx + mcall 74 + pop ebx + push eax + inc bl + cmp bl, 16 + jbe @r + +; rx ovr + mov ebx, 0x000a0000 + pop ecx + mov edx, 320 shl 16 + 35 + 5*18 + mov esi, 0x40000000 + mcall 47 + +; rx drop + sub edx, 18 + pop ecx + mcall + +; rx err + sub edx, 18 + pop ecx + mcall + +; tx ovr + sub edx, 18 + pop ecx + mcall + +; tx drop + sub edx, 18 + pop ecx + mcall + +; tx err + sub edx, 18 + pop ecx + mcall + +; Calculate speed + pop ecx + + push [time] + pop [delta_time] + mcall 26, 9 ; TODO: use 26, 10 instead + mov [time], eax + sub eax, [delta_time] + jnz @f + inc eax ; Zero time units? Lets make it at least one. + @@: + lea eax, [eax + 4*eax] + shl eax, 1 + mov [delta_time], eax + + mov eax, [esp+4] ; bytes received + push eax + sub eax, [prev_rx] + pop [prev_rx] + xor edx, edx + div [delta_time] + push eax + + mov eax, [esp+4] ; bytes sent + push eax + sub eax, [prev_tx] + pop [prev_tx] + xor edx, edx + div [delta_time] + push eax + + test cl, cl + jnz @f + mov edx, str_down + jmp .print_link + @@: + cmp cl, 100b + jnz @f + mov edx, str_10m + jmp .print_link + @@: + cmp cl, 110b + jnz @f + mov edx, str_10mfd + jmp .print_link + @@: + cmp cl, 1000b + jnz @f + mov edx, str_100m + jmp .print_link + @@: + cmp cl, 1010b + jnz @f + mov edx, str_100mfd + jmp .print_link + @@: + cmp cl, 1100b + jnz @f + mov edx, str_1g + jmp .print_link + @@: + cmp cl, 1110b + jnz @f + mov edx, str_1gfd + jmp .print_link + @@: + mov edx, str_unknown + + .print_link: + mov ebx, 116 shl 16 + 35 + 6*18 + mov ecx, 0xc0000000 + mov edi, 0x00f3f3f3 + mcall 4 + +; speed rx + mov ebx, 0x000a0000 + pop ecx + mov edx, 116 shl 16 + 35 + 5*18 + mov esi, 0x40000000 + mcall 47 + +; speed tx + sub edx, 18 + pop ecx + mcall + +; bytes received + sub edx, 18 + pop ecx + mcall + +; bytes sent + sub edx, 18 + pop ecx + mcall + +; packets received + sub edx, 18 + pop ecx + mcall + +; packets sent + sub edx, 18 + pop ecx + mcall + + jmp mainloop + + +not_101: + + cmp [mode], 102 + jne not_102 + + mov ebx, API_IPv4 + mov bh, [device] + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + + mov ebx, 0x000a0000 + pop ecx + mov edx, 116 shl 16 + 35 + 18 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + mcall 47 + + sub edx, 18 + pop ecx + mcall + + jmp mainloop + + +not_102: + + cmp [mode], 103 + jne not_103 + + mov ebx, API_ARP + mov bh, [device] + push ebx + mcall 76 ; tx + pop ebx + push eax + + inc bl + push ebx + mcall 76 ; rx + pop ebx + push eax + + inc bl + push ebx + mcall 76 ; entries + pop ebx + push eax + + mov bl, 7 + push ebx + mcall 76 + pop ebx + push eax + + mov ebx, 0x000a0000 + pop ecx + mov edx, 116 shl 16 + 35 + 3*18 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + mcall 47 + + sub edx, 18 + pop ecx + mcall + + sub edx, 18 + pop ecx + mcall + + sub edx, 18 + pop ecx + mcall + +; mov edx, 50 shl 16 + 150 + mov [last], 0 + + .arp_loop: + mov ebx, API_ARP + 3 ; read ARP entry + mov bh, [device] + mcall 76, ,[last], , , arp_buf + cmp eax, -1 + je mainloop + + mov ebx, [last] + imul ebx, 16 + add ebx, 8 shl 16 + 140 + mcall 4, , 0x80000000, str_ARP_entry + mov edx, ebx + + mov eax, 47 + mov ebx, 0x00030000 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + xor ecx, ecx + + mov cl, byte[arp_buf.IP+0] + mcall + + mov cl, byte[arp_buf.IP+1] + add edx, 24 shl 16 + mcall + + mov cl, byte[arp_buf.IP+2] + add edx, 24 shl 16 + mcall + + mov cl, byte[arp_buf.IP+3] + add edx, 24 shl 16 + mcall + + + mov ebx, 0x00020100 + mov cl, byte[arp_buf.MAC+0] + add edx, 36 shl 16 + mcall + + mov cl, byte[arp_buf.MAC+1] + add edx, 18 shl 16 + mcall + + mov cl, byte[arp_buf.MAC+2] + add edx, 18 shl 16 + mcall + + mov cl, byte[arp_buf.MAC+3] + add edx, 18 shl 16 + mcall + + mov cl, byte[arp_buf.MAC+4] + add edx, 18 shl 16 + mcall + + mov cl, byte[arp_buf.MAC+5] + add edx, 18 shl 16 + mcall + + mov ebx, 0x00040000 + mov cx, [arp_buf.status] + add edx, 30 shl 16 + mcall + + mov cx, [arp_buf.TTL] + add edx, 60 shl 16 + mcall + + add dx, 18 + rol edx, 16 + mov dx, 8 + rol edx, 16 + inc [last] + + jmp .arp_loop + +not_103: + + cmp [mode], 104 + jne not_104 + + mov ebx, API_ICMP + mov bh, [device] + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + mov ebx, 0x000a0000 + pop ecx + mov edx, 116 shl 16 + 35 + 18 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + mcall 47 + + sub edx, 18 + pop ecx + mcall + + jmp mainloop + +not_104: + + cmp [mode], 105 + jne not_105 + + mov ebx, API_UDP + mov bh, [device] + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + mov ebx, 0x000a0000 + pop ecx + mov edx, 116 shl 16 + 35 + 18 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + mcall 47 + + sub edx, 18 + pop ecx + mcall + + jmp mainloop + +not_105: + + cmp [mode], 106 + jne not_106 + + mov ebx, API_TCP + mov bh, [device] + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + inc bl + push ebx + mcall 76 + pop ebx + push eax + + mov ebx, 0x000a0000 + pop ecx + mov edx, 116 shl 16 + 35 + 18*4 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + mcall 47 + + sub edx, 18 + pop ecx + mcall + + sub edx, 18 + pop ecx + mcall + + sub edx, 18 + pop ecx + mcall + + sub edx, 18 + pop ecx + mcall + + jmp mainloop + +not_106: + +mainloop: + + mcall 23, 50 ; wait for event with timeout (0,5 s) + + cmp eax, EV_REDRAW + je window_redraw + cmp eax, EV_BUTTON + je button + cmp eax, EV_KEY + je key + cmp eax, 11 + je redraw + + jmp draw_stats + +button: ; button + mcall 17 ; get id + cmp ah, 1 + je exit + cmp ah, 2 + je .ipcfg + cmp ah, 0 + je .interface + shr ax, 8 + mov [mode], ax + jmp redraw + + .ipcfg: + mcall 51, 1, ipcfg, I_END+0x1000 + jmp mainloop + + .interface: + shr eax, 16 + mov [device], al + jmp redraw + +key: + mcall 2 + cmp ah, 9 + je .tab + cmp ah, 183 + je .pgdown + cmp ah, 184 + je .pgup + jmp mainloop + + .tab: + inc [mode] + cmp [mode], 106 + jbe redraw + mov [mode], 101 + jmp redraw + + .pgdown: + inc [device] + mov al, [device] + cmp al, [last_device] + jbe redraw + mov [device], 0 + jmp redraw + + .pgup: + dec [device] + cmp [device], 0 + jge redraw + mov al, [last_device] + mov [device], al + jmp redraw + +exit: + mcall -1 + + + +draw_mac: + + mov eax, 47 + mov ebx, 0x00020100 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + + mov cl, [esp+4] + mcall + + mov cl, [esp+4+1] + add edx, 18 shl 16 + mcall + + mov cl, [esp+4+2] + add edx, 18 shl 16 + mcall + + mov cl, [esp+4+3] + add edx, 18 shl 16 + mcall + + mov cl, [esp+4+4] + add edx, 18 shl 16 + mcall + + mov cl, [esp+4+5] + add edx, 18 shl 16 + mcall + + sub edx, 5*18 shl 16 + + ret 6 + + +draw_ip: + + mov eax, 47 + mov ebx, 0x00030000 + mov esi, 0x40000000 + mov edi, 0x00F3F3F3 + + xor ecx, ecx + + mov cl, [esp+4] + mcall + + mov cl, [esp+4+1] + add edx, 24 shl 16 + mcall + + mov cl, [esp+4+2] + add edx, 24 shl 16 + mcall + + mov cl, [esp+4+3] + add edx, 24 shl 16 + mcall + + sub edx, 3*24 shl 16 + ret 4 + + +draw_interfaces: + + mov [.btnpos], 5 shl 16 + 20 + mov [.txtpos], 405 shl 16 + 12 + + mcall 74, -1 ; get number of active network devices + mov ecx, eax + dec al + mov [last_device], al + cmp [device], al + jbe @f + mov [device], 0 + @@: + + xor ebx, ebx ; get device type + .loop: + mcall 74 + cmp eax, 1 ; loopback or ethernet? + jbe .hit + inc bh + jb .loop ; tried all 256? + ret + + + .hit: + push ecx ebx + movzx edx, bh + shl edx, 8 + mov esi, 0x00BBBbbb + cmp bh, [device] + cmove esi, 0x0081BBFF + mcall 8, 400 shl 16 + 185, [.btnpos] + mov ebx, [esp] + inc bl + mov ecx, namebuf + mov edx, namebuf + mcall 74 ; get device name + cmp eax, -1 + jne @f + mov edx, str_unknown + @@: + mcall 4, [.txtpos], 0x80000000 ; print the name + pop ebx ecx + + inc bh + + add [.btnpos], 25 shl 16 + add [.txtpos], 25 + + dec ecx + jnz .loop + + ret + + .btnpos dd ? + .txtpos dd ? + + +; DATA AREA + +align 16 +@IMPORT: + +library box_lib , 'box_lib.obj', \ + libini , 'libini.obj' + +import libini, \ + ini.get_str , 'ini_get_str' ,\ + ini.set_str , 'ini_set_str' ,\ + ini.enum_sections, 'ini_enum_sections' + +import box_lib ,\ + edit_box_draw , 'edit_box' ,\ + edit_box_key , 'edit_box_key' ,\ + edit_box_mouse , 'edit_box_mouse' ,\ + edit_set_text , 'edit_box_set_text' ,\ + version_ed , 'version_ed' ,\ + init_checkbox , 'init_checkbox2' ,\ + check_box_draw , 'check_box_draw2' ,\ + check_box_mouse , 'check_box_mouse2' ,\ + version_ch , 'version_ch2' ,\ + option_box_draw , 'option_box_draw' ,\ + option_box_mouse, 'option_box_mouse' ,\ + version_op , 'version_op' + +name db 'Network status', 0 +mode dw 101 ; currently selected protocol +device db 1 ; currently selected device +last_device db ? ; last device available +device_type dd ? +last dd ? +modes db 'Physical IPv4 ARP ICMP UDP TCP', 0 + +str_packets_tx db 'Packets sent:', 0 +str_packets_rx db 'Packets received:', 0 +str_bytes_tx db 'Bytes sent:', 0 +str_bytes_rx db 'Bytes received:', 0 +str_MAC db 'MAC address: - - - - -', 0 +str_ip db 'IP address: . . .', 0 +str_dns db 'DNS address: . . .', 0 +str_subnet db 'Subnet mask: . . .', 0 +str_gateway db 'Standard gateway: . . .', 0 +str_arp db 'ARP entrys:', 0 +str_conflicts db 'ARP conflicts:', 0 +str_missed db 'Packets missed:', 0 +str_dropped db 'Packets dropped:', 0 +str_err db 'Packet errors:', 0 +str_queued db 'Packets queued:', 0 +str_link db 'Link state:', 0 +str_speed_tx db 'Upload (kb/s):', 0 +str_speed_rx db 'Download (kb/s):', 0 +str_ip_cfg db 'Configure' +.len = $ - str_ip_cfg + +str_down db 'disconnected ', 0 +str_unknown db 'unknown ', 0 +str_10m db '10 Mbit Half duplex ', 0 +str_10mfd db '10 Mbit Full duplex ', 0 +str_100m db '100 Mbit Half duplex', 0 +str_100mfd db '100 Mbit Full duplex', 0 +str_1g db '1 Gbit Half duplex ', 0 +str_1gfd db '1 Gbit Full duplex ', 0 + +str_ARP_legend db 'IP-address MAC-address Status TTL', 0 +str_ARP_entry db ' . . . - - - - -', 0 + +prev_rx dd ? +prev_tx dd ? +time dd ? +delta_time dd ? + +namebuf rb 64 +arp_buf ARP_entry + +sc system_colors + +I_END: diff --git a/programs/network/tftpc/tftpc.asm b/programs/network/tftpc/tftpc.asm index 71cff2522..236f18cc4 100644 --- a/programs/network/tftpc/tftpc.asm +++ b/programs/network/tftpc/tftpc.asm @@ -1,669 +1,669 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2010-2017. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; tftpc.asm - TFTP client for KolibriOS ;; -;; ;; -;; Written by hidnplayr@kolibrios.org ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -format binary as "" - -__DEBUG__ = 0 -__DEBUG_LEVEL__ = 1 - -use32 - org 0x0 - - db 'MENUET01' - dd 0x1 - dd START - dd I_END - dd IM_END+0x1000 - dd IM_END+0x1000 - dd 0, 0 - -include '../../proc32.inc' -include '../../macros.inc' -include '../../develop/libraries/libs-dev/libio/libio.inc' -include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' - -include '../../network.inc' -include '../../debug-fdo.inc' - -TIMEOUT = 100 -buffer_len = 4096 - -opcode_rrq = 1 shl 8 -opcode_wrq = 2 shl 8 -opcode_data = 3 shl 8 -opcode_ack = 4 shl 8 -opcode_error = 5 shl 8 - -; read/write request packet -; -; 2 bytes string 1 byte string 1 byte -; ------------------------------------------------ -; | Opcode | Filename | 0 | Mode | 0 | -; ------------------------------------------------ - -; data packet -; -; 2 bytes 2 bytes n bytes -; ---------------------------------- -; | Opcode | Block # | Data | -; ---------------------------------- - -; acknowledgement packet -; -; 2 bytes 2 bytes -; --------------------- -; | Opcode | Block # | -; --------------------- - -; error packet -; -; 2 bytes 2 bytes string 1 byte -; ---------------------------------------- -; | Opcode | ErrorCode | ErrMsg | 0 | -; ---------------------------------------- - - -START: - - mcall 68, 11 - - stdcall dll.Load, @IMPORT - or eax, eax - jnz exit - -home: - mcall 40, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_REDRAW + EVM_BUTTON + EVM_KEY + EVM_STACK - -redraw: - call draw_window - -mainloop: - mcall 10 - dec eax - jz redraw - dec eax - jz key - dec eax - jz button - - invoke edit_box_mouse, edit1 - invoke edit_box_mouse, edit2 - invoke edit_box_mouse, edit3 - invoke edit_box_mouse, edit4 - - invoke option_box_mouse, Option_boxs1 - invoke option_box_mouse, Option_boxs2 - - jmp mainloop - -button: - mcall 17 - - cmp ah, 0x10 ; connect button - je start_transfer - - test ah , ah - jz mainloop - -exit: - mcall -1 -key: - mcall 2 - - invoke edit_box_key, edit1 - invoke edit_box_key, edit2 - invoke edit_box_key, edit3 - invoke edit_box_key, edit4 - - jmp mainloop - - -draw_window: -; get system colors - mcall 48, 3, sc, 40 - - mcall 12, 1 - - mov edx, [sc.work] - or edx, 0x34000000 - xor esi, esi - mov edi, str_title - mcall 0, 50 shl 16 + 400, 30 shl 16 + 180 - - mov ebx, 35 shl 16 + 10 - mov ecx, 0x80000000 - or ecx, [sc.work_text] - mov edx, str_server - mcall 4 - mov ebx, 5 shl 16 + 30 - mov edx, str_source - mcall - mov ebx, 11 shl 16 + 50 - mov edx, str_destination - mcall - mov ebx, 47 shl 16 + 72 - mov edx, str_mode - mcall - mov ebx, 160 shl 16 + 72 - mov edx, str_method - mcall - mov ebx, 270 shl 16 + 72 - mov edx, str_blocksize - mcall - - invoke edit_box_draw, edit1 - invoke edit_box_draw, edit2 - invoke edit_box_draw, edit3 - invoke edit_box_draw, edit4 - - invoke option_box_draw, Option_boxs1 - invoke option_box_draw, Option_boxs2 - - mov esi, [sc.work_button] - mcall 8, 210 shl 16 + 170, 105 shl 16 + 16, 0x10 - - mcall 38, 10 shl 16 + 380, 130 shl 16 + 130, [sc.work_graph] - - cmp [errormsg], 0 - je .no_error - - mov ecx, 0x80000000 - or ecx, [sc.work_text] - mcall 4, 20 shl 16 + 137, , [errormsg] - mcall 12, 2 - jmp .draw_btn - - .no_error: - mov ecx, 0x80000000 - or ecx, [sc.work_text] - mcall 4, 350 shl 16 + 137, , str_kb_s - mcall 4, 50 shl 16 + 137, , str_complete - mcall 47, 1 shl 31 + 7 shl 16 + 1, kbps, 305 shl 16 + 137, [sc.work_text] - mcall 47, 1 shl 31 + 3 shl 16 + 1, done, 25 shl 16 + 137 - - .draw_btn: - cmp [socketnum], 0 - je .no_transfer - - mov ecx, 0x80000000 - or ecx, [sc.work_button_text] - mcall 4, 270 shl 16 + 110, , str_stop - - mcall 12, 2 - ret - - .no_transfer: - mov ecx, 0x80000000 - or ecx, [sc.work_button_text] - mcall 4, 260 shl 16 + 110, , str_transfer - - mcall 12, 2 - ret - - - -start_transfer: - -; resolve the hostname - mov [errormsg], str_err_resolve - - push esp ; reserve stack place - - push esp ; fourth parameter - push 0 ; third parameter - push 0 ; second parameter - push dword SRV ; first parameter - call [getaddrinfo] - - pop esi - - ; test for error - test eax, eax - jnz home - - mov eax, [esi + addrinfo.ai_addr] - mov eax, [eax + sockaddr_in.sin_addr] - mov [sockaddr.ip], eax - - ; free allocated memory - push esi - call [freeaddrinfo] - -; Open a socket & connect to server - mov [errormsg], str_err_socket - - mcall socket, AF_INET4, SOCK_DGRAM, 0 - cmp eax, -1 - je home - mov [socketnum], eax - - mcall connect, [socketnum], sockaddr, sockaddr_len - cmp eax, -1 - je home - -; Create the read/write request packet - mov word[buffer], opcode_rrq - cmp [option_group2], op3 - je @f - mov word[buffer], opcode_wrq - @@: - -; Copy in the remote filename (asciiz) - xor al, al - mov edi, remote_addr - mov ecx, 255 - repnz scasb - lea ecx, [edi - remote_addr - 1] - mov esi, remote_addr - mov edi, buffer+2 - rep movsb - stosb - -; Append the data type (asciiz) - cmp [option_group1], op1 - je .ascii - mov esi, octet - movsd - movsb - jmp .send_request - - .ascii: - mov esi, netascii - movsd - movsd - -; Send the request to the server - .send_request: - xor al, al - stosb - lea esi, [edi - buffer] - xor edi, edi - mcall send, [socketnum], buffer - cmp eax, -1 - je home - -; Jump to send/receive code - cmp word[buffer], opcode_wrq - je tftp_send - - -tftp_receive: - - mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK - mov [last_ack], 0 - mov [errormsg], 0 - - call draw_window - -; Open/create local file - mov [file_struct.subfn], 2 - mov [file_struct.offset], 0 - mov [file_struct.size], 0 - mcall 70, file_struct - -; Truncate it to 0 bytes - mov [file_struct.subfn], 4 - mcall 70, file_struct - -; Set parameters for writing to file - mov [file_struct.subfn], 3 - mov [file_struct.data], buffer + 4 - - .loop: - mcall 23, TIMEOUT - dec eax - jz .red - dec eax - dec eax - jz .button - - mcall recv, [socketnum], buffer, buffer_len, MSG_DONTWAIT ; receive data - cmp eax, -1 - je .loop - - DEBUGF 1, "Got %u bytes\n", eax - cmp word[buffer], opcode_error - je tftp_error - cmp word[buffer], opcode_data - jne .error - -; Verify ACK number - mov bx, word[buffer + 2] - rol bx, 8 - cmp [last_ack], 0 - je @f - cmp [last_ack], bx - jne .packet_got_lost - inc bx - @@: - mov [last_ack], bx - -; Write to the file - lea ecx, [eax - 4] - mov [file_struct.size], ecx - mcall 70, file_struct - add [file_struct.offset], ecx - -; Send ACK - mov word[buffer], opcode_ack - mcall send, [socketnum], buffer, 4, 0 - jmp .loop - - .packet_got_lost: - ;TODO - jmp .loop - - .red: - call draw_window - jmp .loop - - .button: - mcall 17 - cmp ah, 1 - jne .abort - - mcall close, [socketnum] - mcall -1 - - .abort: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - mov [errormsg], str_abort - jmp home - - .error: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - mov [errormsg], str_err_unexp - jmp home - - .done: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - mov [errormsg], str_success - jmp home - - - -tftp_send: - - mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK - mov [last_ack], 0 - mov [errormsg], 0 - - call draw_window - - mov [file_struct.subfn], 0 - mov [file_struct.offset], 0 - mov [file_struct.size], buffer_len - mov [file_struct.data], buffer + 4 - - .next: - mov edi, buffer - mov ax, opcode_data - stosw - mov ax, [last_ack] - stosw - - mcall 70, file_struct - test eax, eax -; jnz .done - mov [size], ebx - - .resend: - mov ebx, [size] - lea esi, [ebx + 4] - xor edi, edi - mcall send, [socketnum], buffer - - .loop: - mcall 23, TIMEOUT - dec eax - jz .red - dec eax - dec eax - jz .button - - mcall recv, [socketnum], buffer, buffer_len, MSG_DONTWAIT - cmp eax, -1 - je .loop - - cmp word[buffer], opcode_error - je tftp_error - cmp word[buffer], opcode_ack - jne .error - - mov ax, [last_ack] - cmp word[buffer+2], ax - jne .resend - - mov eax, [size] - cmp eax, buffer_len - jb .done - add [file_struct.offset], eax - - inc [last_ack] - jmp .next - - .red: - call draw_window - jmp .loop - - .button: - mcall 17 - cmp ah, 1 - jne .abort - - mcall close, [socketnum] - mcall -1 - - .abort: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - mov [errormsg], str_abort - jmp home - - .error: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - mov [errormsg], str_err_unexp - jmp home - - .done: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - mov [errormsg], str_success - jmp home - - - -tftp_error: - mcall close, [socketnum] - xor eax, eax - mov [socketnum], eax - - mov ax, word[buffer+2] - xchg al, ah - - test ax, ax - jz .0 - dec ax - jz .1 - dec ax - jz .2 - dec ax - jz .3 - dec ax - jz .4 - dec ax - jz .5 - dec ax - jz .6 - dec ax - jz .7 - - .0: - mov [errormsg], str_error.0 - jmp home - .1: - mov [errormsg], str_error.1 - jmp redraw - .2: - mov [errormsg], str_error.2 - jmp home - .3: - mov [errormsg], str_error.3 - jmp home - .4: - mov [errormsg], str_error.4 - jmp home - .5: - mov [errormsg], str_error.5 - jmp home - .6: - mov [errormsg], str_error.6 - jmp home - .7: - mov [errormsg], str_error.7 - jmp home - -;------------------------- -; DATA - -socketnum dd 0 -kbps dd 0 -done dd 0 -errormsg dd str_welcome - -sockaddr: - dw AF_INET4 - dw 0x4500 ; 69 - .ip dd ? -sockaddr_len = $ - sockaddr - -file_struct: - .subfn dd ? - .offset dd ? - dd 0 - .size dd ? - .data dd ? - db 0 - .filename dd local_addr - -align 16 -@IMPORT: - -library box_lib , 'box_lib.obj' ,\ - network , 'network.obj' - -import box_lib ,\ - edit_box_draw , 'edit_box' ,\ - edit_box_key , 'edit_box_key' ,\ - edit_box_mouse , 'edit_box_mouse' ,\ - version_ed , 'version_ed' ,\ - init_checkbox , 'init_checkbox2' ,\ - check_box_draw , 'check_box_draw2' ,\ - check_box_mouse , 'check_box_mouse2' ,\ - version_ch , 'version_ch2' ,\ - option_box_draw , 'option_box_draw' ,\ - option_box_mouse, 'option_box_mouse' ,\ - version_op , 'version_op' - -import network ,\ - inet_ntoa , 'inet_ntoa' ,\ - getaddrinfo , 'getaddrinfo' ,\ - freeaddrinfo , 'freeaddrinfo' - - -edit1 edit_box 300, 80, 5, 0xffffff, 0x6f9480, 0, 0, 0, 255, SRV, mouse_dd, ed_focus, 13, 13 -edit2 edit_box 300, 80, 25, 0xffffff, 0x6f9480, 0, 0, 0, 255, remote_addr, mouse_dd, 0, 4, 4 -edit3 edit_box 300, 80, 45, 0xffffff, 0x6f9480, 0, 0, 0, 255, local_addr, mouse_dd, 0, 12, 12 -edit4 edit_box 40, 340, 68, 0xffffff, 0x6f9480, 0, 0, 0, 5, BLK, mouse_dd, ed_figure_only, 3, 3 - -op1 option_box option_group1, 80, 68, 6, 12, 0xffffff, 0, 0, netascii, octet-netascii -op2 option_box option_group1, 80, 85, 6, 12, 0xFFFFFF, 0, 0, octet, get-octet - -op3 option_box option_group2, 210, 68, 6, 12, 0xffffff, 0, 0, get, put-get -op4 option_box option_group2, 210, 85, 6, 12, 0xFFFFFF, 0, 0, put, BLK-put - -option_group1 dd op1 -option_group2 dd op3 -Option_boxs1 dd op1, op2, 0 -Option_boxs2 dd op3, op4, 0 - -str_title db 'TFTP client', 0 -str_server db 'Server:', 0 -str_source db 'Remote file:', 0 -str_destination db 'Local file:', 0 -str_mode db 'Mode:', 0 -str_method db 'Method:', 0 -str_blocksize db 'Blocksize:', 0 -str_kb_s db 'kB/s', 0 -str_complete db '% complete', 0 -str_transfer db 'Transfer', 0 -str_stop db 'Stop', 0 - -str_error: -.0 db 'Error.', 0 ; not further defined error -.1 db 'File not found.', 0 -.2 db 'Access violation.', 0 -.3 db 'Disk full or allocation exceeded.', 0 -.4 db 'Illegal TFTP operation.', 0 -.5 db 'Unknown transfer ID.', 0 -.6 db 'File already exists.', 0 -.7 db 'No such user.', 0 - -str_welcome db 'Welcome.', 0 -str_err_resolve db 'Unable to resolve server address.', 0 -str_err_socket db 'Socket error.', 0 -str_err_unexp db 'Unexpected command from server.', 0 -str_success db 'Operation completed successfully.', 0 -str_abort db 'Operation aborted by user.', 0 - -netascii db 'NetASCII' -octet db 'Octet' -get db 'GET' -put db 'PUT' - -BLK db "512", 0, 0, 0 - -SRV db "192.168.1.115", 0 - rb (SRV + 256 - $) - -remote_addr db "file", 0 - rb (remote_addr + 256 - $) - -local_addr db "/tmp0/1/file", 0 - rb (local_addr + 256 - $) - -include_debug_strings - -I_END: - -last_ack dw ? -size dd ? -mouse_dd dd ? - -sc system_colors - -buffer rb buffer_len - -IM_END: \ No newline at end of file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2010-2017. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; tftpc.asm - TFTP client for KolibriOS ;; +;; ;; +;; Written by hidnplayr@kolibrios.org ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +format binary as "" + +__DEBUG__ = 0 +__DEBUG_LEVEL__ = 1 + +use32 + org 0x0 + + db 'MENUET01' + dd 0x1 + dd START + dd I_END + dd IM_END+0x1000 + dd IM_END+0x1000 + dd 0, 0 + +include '../../proc32.inc' +include '../../macros.inc' +include '../../develop/libraries/libs-dev/libio/libio.inc' +include '../../dll.inc' +include '../../develop/libraries/box_lib/box_lib.mac' + +include '../../network.inc' +include '../../debug-fdo.inc' + +TIMEOUT = 100 +buffer_len = 4096 + +opcode_rrq = 1 shl 8 +opcode_wrq = 2 shl 8 +opcode_data = 3 shl 8 +opcode_ack = 4 shl 8 +opcode_error = 5 shl 8 + +; read/write request packet +; +; 2 bytes string 1 byte string 1 byte +; ------------------------------------------------ +; | Opcode | Filename | 0 | Mode | 0 | +; ------------------------------------------------ + +; data packet +; +; 2 bytes 2 bytes n bytes +; ---------------------------------- +; | Opcode | Block # | Data | +; ---------------------------------- + +; acknowledgement packet +; +; 2 bytes 2 bytes +; --------------------- +; | Opcode | Block # | +; --------------------- + +; error packet +; +; 2 bytes 2 bytes string 1 byte +; ---------------------------------------- +; | Opcode | ErrorCode | ErrMsg | 0 | +; ---------------------------------------- + + +START: + + mcall 68, 11 + + stdcall dll.Load, @IMPORT + or eax, eax + jnz exit + +home: + mcall 40, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_REDRAW + EVM_BUTTON + EVM_KEY + EVM_STACK + +redraw: + call draw_window + +mainloop: + mcall 10 + dec eax + jz redraw + dec eax + jz key + dec eax + jz button + + invoke edit_box_mouse, edit1 + invoke edit_box_mouse, edit2 + invoke edit_box_mouse, edit3 + invoke edit_box_mouse, edit4 + + invoke option_box_mouse, Option_boxs1 + invoke option_box_mouse, Option_boxs2 + + jmp mainloop + +button: + mcall 17 + + cmp ah, 0x10 ; connect button + je start_transfer + + test ah , ah + jz mainloop + +exit: + mcall -1 +key: + mcall 2 + + invoke edit_box_key, edit1 + invoke edit_box_key, edit2 + invoke edit_box_key, edit3 + invoke edit_box_key, edit4 + + jmp mainloop + + +draw_window: +; get system colors + mcall 48, 3, sc, 40 + + mcall 12, 1 + + mov edx, [sc.work] + or edx, 0x34000000 + xor esi, esi + mov edi, str_title + mcall 0, 50 shl 16 + 400, 30 shl 16 + 180 + + mov ebx, 35 shl 16 + 10 + mov ecx, 0x80000000 + or ecx, [sc.work_text] + mov edx, str_server + mcall 4 + mov ebx, 5 shl 16 + 30 + mov edx, str_source + mcall + mov ebx, 11 shl 16 + 50 + mov edx, str_destination + mcall + mov ebx, 47 shl 16 + 72 + mov edx, str_mode + mcall + mov ebx, 160 shl 16 + 72 + mov edx, str_method + mcall + mov ebx, 270 shl 16 + 72 + mov edx, str_blocksize + mcall + + invoke edit_box_draw, edit1 + invoke edit_box_draw, edit2 + invoke edit_box_draw, edit3 + invoke edit_box_draw, edit4 + + invoke option_box_draw, Option_boxs1 + invoke option_box_draw, Option_boxs2 + + mov esi, [sc.work_button] + mcall 8, 210 shl 16 + 170, 105 shl 16 + 16, 0x10 + + mcall 38, 10 shl 16 + 380, 130 shl 16 + 130, [sc.work_graph] + + cmp [errormsg], 0 + je .no_error + + mov ecx, 0x80000000 + or ecx, [sc.work_text] + mcall 4, 20 shl 16 + 137, , [errormsg] + mcall 12, 2 + jmp .draw_btn + + .no_error: + mov ecx, 0x80000000 + or ecx, [sc.work_text] + mcall 4, 350 shl 16 + 137, , str_kb_s + mcall 4, 50 shl 16 + 137, , str_complete + mcall 47, 1 shl 31 + 7 shl 16 + 1, kbps, 305 shl 16 + 137, [sc.work_text] + mcall 47, 1 shl 31 + 3 shl 16 + 1, done, 25 shl 16 + 137 + + .draw_btn: + cmp [socketnum], 0 + je .no_transfer + + mov ecx, 0x80000000 + or ecx, [sc.work_button_text] + mcall 4, 270 shl 16 + 110, , str_stop + + mcall 12, 2 + ret + + .no_transfer: + mov ecx, 0x80000000 + or ecx, [sc.work_button_text] + mcall 4, 260 shl 16 + 110, , str_transfer + + mcall 12, 2 + ret + + + +start_transfer: + +; resolve the hostname + mov [errormsg], str_err_resolve + + push esp ; reserve stack place + + push esp ; fourth parameter + push 0 ; third parameter + push 0 ; second parameter + push dword SRV ; first parameter + call [getaddrinfo] + + pop esi + + ; test for error + test eax, eax + jnz home + + mov eax, [esi + addrinfo.ai_addr] + mov eax, [eax + sockaddr_in.sin_addr] + mov [sockaddr.ip], eax + + ; free allocated memory + push esi + call [freeaddrinfo] + +; Open a socket & connect to server + mov [errormsg], str_err_socket + + mcall socket, AF_INET4, SOCK_DGRAM, 0 + cmp eax, -1 + je home + mov [socketnum], eax + + mcall connect, [socketnum], sockaddr, sockaddr_len + cmp eax, -1 + je home + +; Create the read/write request packet + mov word[buffer], opcode_rrq + cmp [option_group2], op3 + je @f + mov word[buffer], opcode_wrq + @@: + +; Copy in the remote filename (asciiz) + xor al, al + mov edi, remote_addr + mov ecx, 255 + repnz scasb + lea ecx, [edi - remote_addr - 1] + mov esi, remote_addr + mov edi, buffer+2 + rep movsb + stosb + +; Append the data type (asciiz) + cmp [option_group1], op1 + je .ascii + mov esi, octet + movsd + movsb + jmp .send_request + + .ascii: + mov esi, netascii + movsd + movsd + +; Send the request to the server + .send_request: + xor al, al + stosb + lea esi, [edi - buffer] + xor edi, edi + mcall send, [socketnum], buffer + cmp eax, -1 + je home + +; Jump to send/receive code + cmp word[buffer], opcode_wrq + je tftp_send + + +tftp_receive: + + mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK + mov [last_ack], 0 + mov [errormsg], 0 + + call draw_window + +; Open/create local file + mov [file_struct.subfn], 2 + mov [file_struct.offset], 0 + mov [file_struct.size], 0 + mcall 70, file_struct + +; Truncate it to 0 bytes + mov [file_struct.subfn], 4 + mcall 70, file_struct + +; Set parameters for writing to file + mov [file_struct.subfn], 3 + mov [file_struct.data], buffer + 4 + + .loop: + mcall 23, TIMEOUT + dec eax + jz .red + dec eax + dec eax + jz .button + + mcall recv, [socketnum], buffer, buffer_len, MSG_DONTWAIT ; receive data + cmp eax, -1 + je .loop + + DEBUGF 1, "Got %u bytes\n", eax + cmp word[buffer], opcode_error + je tftp_error + cmp word[buffer], opcode_data + jne .error + +; Verify ACK number + mov bx, word[buffer + 2] + rol bx, 8 + cmp [last_ack], 0 + je @f + cmp [last_ack], bx + jne .packet_got_lost + inc bx + @@: + mov [last_ack], bx + +; Write to the file + lea ecx, [eax - 4] + mov [file_struct.size], ecx + mcall 70, file_struct + add [file_struct.offset], ecx + +; Send ACK + mov word[buffer], opcode_ack + mcall send, [socketnum], buffer, 4, 0 + jmp .loop + + .packet_got_lost: + ;TODO + jmp .loop + + .red: + call draw_window + jmp .loop + + .button: + mcall 17 + cmp ah, 1 + jne .abort + + mcall close, [socketnum] + mcall -1 + + .abort: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + mov [errormsg], str_abort + jmp home + + .error: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + mov [errormsg], str_err_unexp + jmp home + + .done: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + mov [errormsg], str_success + jmp home + + + +tftp_send: + + mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK + mov [last_ack], 0 + mov [errormsg], 0 + + call draw_window + + mov [file_struct.subfn], 0 + mov [file_struct.offset], 0 + mov [file_struct.size], buffer_len + mov [file_struct.data], buffer + 4 + + .next: + mov edi, buffer + mov ax, opcode_data + stosw + mov ax, [last_ack] + stosw + + mcall 70, file_struct + test eax, eax +; jnz .done + mov [size], ebx + + .resend: + mov ebx, [size] + lea esi, [ebx + 4] + xor edi, edi + mcall send, [socketnum], buffer + + .loop: + mcall 23, TIMEOUT + dec eax + jz .red + dec eax + dec eax + jz .button + + mcall recv, [socketnum], buffer, buffer_len, MSG_DONTWAIT + cmp eax, -1 + je .loop + + cmp word[buffer], opcode_error + je tftp_error + cmp word[buffer], opcode_ack + jne .error + + mov ax, [last_ack] + cmp word[buffer+2], ax + jne .resend + + mov eax, [size] + cmp eax, buffer_len + jb .done + add [file_struct.offset], eax + + inc [last_ack] + jmp .next + + .red: + call draw_window + jmp .loop + + .button: + mcall 17 + cmp ah, 1 + jne .abort + + mcall close, [socketnum] + mcall -1 + + .abort: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + mov [errormsg], str_abort + jmp home + + .error: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + mov [errormsg], str_err_unexp + jmp home + + .done: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + mov [errormsg], str_success + jmp home + + + +tftp_error: + mcall close, [socketnum] + xor eax, eax + mov [socketnum], eax + + mov ax, word[buffer+2] + xchg al, ah + + test ax, ax + jz .0 + dec ax + jz .1 + dec ax + jz .2 + dec ax + jz .3 + dec ax + jz .4 + dec ax + jz .5 + dec ax + jz .6 + dec ax + jz .7 + + .0: + mov [errormsg], str_error.0 + jmp home + .1: + mov [errormsg], str_error.1 + jmp redraw + .2: + mov [errormsg], str_error.2 + jmp home + .3: + mov [errormsg], str_error.3 + jmp home + .4: + mov [errormsg], str_error.4 + jmp home + .5: + mov [errormsg], str_error.5 + jmp home + .6: + mov [errormsg], str_error.6 + jmp home + .7: + mov [errormsg], str_error.7 + jmp home + +;------------------------- +; DATA + +socketnum dd 0 +kbps dd 0 +done dd 0 +errormsg dd str_welcome + +sockaddr: + dw AF_INET4 + dw 0x4500 ; 69 + .ip dd ? +sockaddr_len = $ - sockaddr + +file_struct: + .subfn dd ? + .offset dd ? + dd 0 + .size dd ? + .data dd ? + db 0 + .filename dd local_addr + +align 16 +@IMPORT: + +library box_lib , 'box_lib.obj' ,\ + network , 'network.obj' + +import box_lib ,\ + edit_box_draw , 'edit_box' ,\ + edit_box_key , 'edit_box_key' ,\ + edit_box_mouse , 'edit_box_mouse' ,\ + version_ed , 'version_ed' ,\ + init_checkbox , 'init_checkbox2' ,\ + check_box_draw , 'check_box_draw2' ,\ + check_box_mouse , 'check_box_mouse2' ,\ + version_ch , 'version_ch2' ,\ + option_box_draw , 'option_box_draw' ,\ + option_box_mouse, 'option_box_mouse' ,\ + version_op , 'version_op' + +import network ,\ + inet_ntoa , 'inet_ntoa' ,\ + getaddrinfo , 'getaddrinfo' ,\ + freeaddrinfo , 'freeaddrinfo' + + +edit1 edit_box 300, 80, 5, 0xffffff, 0x6f9480, 0, 0, 0, 255, SRV, mouse_dd, ed_focus, 13, 13 +edit2 edit_box 300, 80, 25, 0xffffff, 0x6f9480, 0, 0, 0, 255, remote_addr, mouse_dd, 0, 4, 4 +edit3 edit_box 300, 80, 45, 0xffffff, 0x6f9480, 0, 0, 0, 255, local_addr, mouse_dd, 0, 12, 12 +edit4 edit_box 40, 340, 68, 0xffffff, 0x6f9480, 0, 0, 0, 5, BLK, mouse_dd, ed_figure_only, 3, 3 + +op1 option_box option_group1, 80, 68, 6, 12, 0xffffff, 0, 0, netascii, octet-netascii +op2 option_box option_group1, 80, 85, 6, 12, 0xFFFFFF, 0, 0, octet, get-octet + +op3 option_box option_group2, 210, 68, 6, 12, 0xffffff, 0, 0, get, put-get +op4 option_box option_group2, 210, 85, 6, 12, 0xFFFFFF, 0, 0, put, BLK-put + +option_group1 dd op1 +option_group2 dd op3 +Option_boxs1 dd op1, op2, 0 +Option_boxs2 dd op3, op4, 0 + +str_title db 'TFTP client', 0 +str_server db 'Server:', 0 +str_source db 'Remote file:', 0 +str_destination db 'Local file:', 0 +str_mode db 'Mode:', 0 +str_method db 'Method:', 0 +str_blocksize db 'Blocksize:', 0 +str_kb_s db 'kB/s', 0 +str_complete db '% complete', 0 +str_transfer db 'Transfer', 0 +str_stop db 'Stop', 0 + +str_error: +.0 db 'Error.', 0 ; not further defined error +.1 db 'File not found.', 0 +.2 db 'Access violation.', 0 +.3 db 'Disk full or allocation exceeded.', 0 +.4 db 'Illegal TFTP operation.', 0 +.5 db 'Unknown transfer ID.', 0 +.6 db 'File already exists.', 0 +.7 db 'No such user.', 0 + +str_welcome db 'Welcome.', 0 +str_err_resolve db 'Unable to resolve server address.', 0 +str_err_socket db 'Socket error.', 0 +str_err_unexp db 'Unexpected command from server.', 0 +str_success db 'Operation completed successfully.', 0 +str_abort db 'Operation aborted by user.', 0 + +netascii db 'NetASCII' +octet db 'Octet' +get db 'GET' +put db 'PUT' + +BLK db "512", 0, 0, 0 + +SRV db "192.168.1.115", 0 + rb (SRV + 256 - $) + +remote_addr db "file", 0 + rb (remote_addr + 256 - $) + +local_addr db "/tmp0/1/file", 0 + rb (local_addr + 256 - $) + +include_debug_strings + +I_END: + +last_ack dw ? +size dd ? +mouse_dd dd ? + +sc system_colors + +buffer rb buffer_len + +IM_END: diff --git a/programs/network/vncc/vncc.asm b/programs/network/vncc/vncc.asm index 16c292a0f..808f6e2d1 100644 --- a/programs/network/vncc/vncc.asm +++ b/programs/network/vncc/vncc.asm @@ -1,618 +1,616 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; VNC client for KolibriOS ;; -;; ;; -;; Written by hidnplayr@kolibrios.org ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -format binary as "" - -__DEBUG__ = 1 -__DEBUG_LEVEL__ = 2 - -BITS_PER_PIXEL = 32 ; 8, 16, 24 or 32 -SERVERADDRLEN = 4096 - -use32 - - org 0x0 - - db "MENUET01" ; 8 byte id - dd 0x01 ; header version - dd START ; start of code - dd I_END ; size of image - dd IM_END ; memory for app - dd IM_END ; esp - dd serveraddr, 0x0 ; I_Param , I_Path - -include "../../macros.inc" -include "../../debug-fdo.inc" -include "../../proc32.inc" -include "../../dll.inc" -include "../../struct.inc" -include "../../develop/libraries/box_lib/trunk/box_lib.mac" -include "../../network.inc" - -struct PixelFormat - bpp db ? - depth db ? - big_endian db ? - true_color db ? - red_max dw ? - green_max dw ? - blue_max dw ? - red_shift db ? - green_shift db ? - blue_shift db ? - padding rb 3 -ends - -struct ServerInit - width dw ? - height dw ? - pixelformat PixelFormat - name_length dd ? - name db ? -ends - -xpos = 4 -ypos = 21 - -TIMEOUT = 5 ; timeout in seconds - -RECEIVE_BUFFER_SIZE = 8*1024*1024 ; 8 Mib - -STATUS_CONNECT = 0 -STATUS_CONNECTING = 1 -STATUS_REQ_LOGIN = 2 -STATUS_LOGIN = 3 -STATUS_CONNECTED = 4 -STATUS_CLOSED = 5 - -STATUS_DISCONNECTED = 10 -STATUS_DNS_ERR = 11 -STATUS_SOCK_ERR = 12 -STATUS_CONNECT_ERR = 13 -STATUS_PROTO_ERR = 14 -STATUS_SECURITY_ERR = 15 -STATUS_LIB_ERR = 16 -STATUS_THREAD_ERR = 17 -STATUS_LOGIN_FAILED = 18 -STATUS_SECURITY_ERR_C = 19 - -WORK_FRAMEBUFFER = 1 shl 0 -WORK_CURSOR = 1 shl 1 -WORK_GUI = 1 shl 2 - -BYTES_PER_PIXEL = (BITS_PER_PIXEL + 7) / 8 - -if BITS_PER_PIXEL = 32 - BYTES_PER_CPIXEL= 3 -else - BYTES_PER_CPIXEL= BYTES_PER_PIXEL -end if - -include "keymap.inc" -include "gui.inc" -include "network.inc" -include "raw.inc" -include "copyrect.inc" -include "rre.inc" -include "trle.inc" -include "zrle.inc" -include "cursor.inc" -include "des.inc" - - -if BITS_PER_PIXEL = 8 -create_lut: - mov edi, lut_8bpp ; 332 format - xor eax, eax - call green - add eax, 0x240000 - call green - add eax, 0x250000 - call green - add eax, 0x240000 - call green - add eax, 0x250000 - call green - add eax, 0x240000 - call green - add eax, 0x250000 - call green - add eax, 0x240000 - call green - ret - -green: - mov ah, 0 - call blue - mov ah, 36 - call blue - add ah, 37 - call blue - add ah, 36 - call blue - add ah, 37 - call blue - add ah, 36 - call blue - add ah, 37 - call blue - add ah, 36 - call blue - ret - -blue: - mov al, 0 - stosd - mov al, 85 - stosd - mov al, 170 - stosd - mov al, 255 - stosd - ret -end if - - -START: - - mcall 68, 11 ; init heap - -; Load libraries - stdcall dll.Load, @IMPORT - test eax, eax - jz @f - mov [status], STATUS_LIB_ERR - jmp draw_gui.first_time - @@: - -; When using 8BPP, create lookup table -if BITS_PER_PIXEL = 8 - call create_lut -end if - -; Check if we got a server address through parameters - cmp byte[serveraddr], 0 - je @f - xor al, al - mov edi, serveraddr - mov ecx, SERVERADDRLEN - repne scasb - sub edi, serveraddr+1 - mov [URLbox.size], edi - mov [URLbox.pos], edi - call open_connection - @@: - -; Present the user with the GUI and wait for network connection - jmp draw_gui.first_time - -; Create main window -connected: - mcall 71, 1, name ; reset window caption (add server name) - - mov edx, dword[screen] - movzx esi, dx - shr edx, 16 - add edx, 2*xpos - add esi, ypos+xpos - mcall 67, 10, 10 ; resize the window - - mcall 40, EVM_CURSOR_FILTER + EVM_MOUSE_FILTER + EVM_MOUSE + EVM_KEY + EVM_REDRAW + EVM_BUTTON - - mcall 66, 1, 1 ; Switch keyboard to scancode mode - - call generate_keymap - -redraw: - mcall 12, 1 - - mov ebx, dword[screen] - movzx ecx, bx - shr ebx, 16 - mov edx, 0x74ffffff - mov edi, name - mcall 0 ; draw window - - mcall 12, 2 - -draw_framebuffer: - DEBUGF 1, "Drawing framebuffer\n" - mcall 7, framebuffer, dword[screen], 0 - and [work], not WORK_FRAMEBUFFER - -mainloop: - cmp [status], STATUS_CONNECTED - jne draw_gui - test [work], WORK_FRAMEBUFFER - jnz draw_framebuffer - test [work], WORK_CURSOR - jnz update_cursor - - mcall 23, 10 ; Check for event with 0,1s timeout - - dec eax - jz redraw - dec eax - jz key - dec eax - jz button - sub eax, 3 - jz mouse - jmp mainloop - -key: - mcall 66, 3 - mov ebx, eax ; get modifier keys - - mcall 2 ; get key scancode - cmp ah, 224 ; extended keycode? - je .extended - - xor al, al - test ah, 0x80 ; key up? - jnz @f - inc al - and ah, 0x7f - @@: - mov byte[KeyEvent.down], al - - movzx eax, ah - - test ebx, 100000b ; alt? - jz .no_alt - mov ax, [keymap_alt+eax*2] - jmp .key - .no_alt: - - test ebx, 11b ; shift? - jz .no_shift - mov ax, [keymap_shift+eax*2] - jmp .key - .no_shift: - - test ebx, 10000000b ; numlock ? - jz .no_numlock - cmp al, 71 - jb .no_numlock - cmp al, 83 - ja .no_numlock - mov ah, [keymap_numlock+eax-71] - xor al, al - jmp .key - - .extended: ; extended keys always use regular keymap - mcall 2 - shr eax, 8 - jz mainloop - - xor ah, ah - test al, 0x80 ; key up? - jnz @f - inc ah - @@: - mov byte[KeyEvent.down], ah - and ax, 0x007f - .no_numlock: - mov ax, [keymap+eax*2] - .key: - test ax, ax - jz mainloop - mov word[KeyEvent.key+2], ax - DEBUGF 1, "Sending key: 0x%x\n", ax - mcall send, [socketnum], KeyEvent, 8, 0 - jmp mainloop - - - -mouse: -; DEBUGF 1, "Sending pointer event\n" - - mcall 37, 1 ; get mouse pos - bswap eax - mov [PointerEvent.x], ax - shr eax, 16 - mov [PointerEvent.y], ax - - mcall 37, 2 ; get mouse buttons - test al, 00000010b ; test if right button was pressed (bit 1 in kolibri) - jz @f - add al, 00000010b ; in RFB protocol it is bit 2, so if we add bit 2 again, we"ll get bit 3 and bit 1 will remain the same - @@: - mov [PointerEvent.mask], al - - mcall send, [socketnum], PointerEvent, 6, 0 - jmp mainloop - -button: - mcall 17 ; get id - mov [status], STATUS_CLOSED - mcall close, [socketnum] - mcall -1 - - -update_cursor: - -; load cursor - mov dx, word[cursor.y] - shl edx, 16 - mov dx, 2 - mcall 37, 4, cursor.image - test eax, eax - jz .fail - -; set cursor - mov ecx, eax - mcall 37, 5 - -; delete previously set cursor - mov ecx, eax - mcall 37, 6 - -.fail: - and [work], not WORK_CURSOR - jmp mainloop - - -; DATA AREA - -include_debug_strings - -keymap_numlock: - db '7', '8', '9', '-' - db '4', '5', '6', '+' - db '1', '2', '3' - db '0', '.' - -HandShake db "RFB 003.003", 10 - -ClientInit db 0 ; not shared - -if BITS_PER_PIXEL = 32 - -SetPixelFormat db 0 ; setPixelformat - db 0, 0, 0 ; padding -.bpp db 32 ; bits per pixel -.depth db 24 ; depth -.big_endian db 0 ; big-endian flag -.true_color db 1 ; true-colour flag -.red_max db 0, 255 ; red-max -.green_max db 0, 255 ; green-max -.blue_max db 0, 255 ; blue-max -.red_shift db 16 ; red-shift -.green_shift db 8 ; green-shift -.blue_shift db 0 ; blue-shift - db 0, 0, 0 ; padding - -else if BITS_PER_PIXEL = 24 - -SetPixelFormat db 0 ; setPixelformat - db 0, 0, 0 ; padding -.bpp db 24 ; bits per pixel -.depth db 24 ; depth -.big_endian db 0 ; big-endian flag -.true_color db 1 ; true-colour flag -.red_max db 0, 255 ; red-max -.green_max db 0, 255 ; green-max -.blue_max db 0, 255 ; blue-max -.red_shift db 16 ; red-shift -.green_shift db 8 ; green-shift -.blue_shift db 0 ; blue-shift - db 0, 0, 0 ; padding - -else if BITS_PER_PIXEL = 16 - -SetPixelFormat db 0 ; setPixelformat - db 0, 0, 0 ; padding -.bpp db 16 ; bits per pixel -.depth db 16 ; depth -.big_endian db 0 ; big-endian flag -.true_color db 1 ; true-colour flag -.red_max db 0, 31 ; red-max -.green_max db 0, 63 ; green-max -.blue_max db 0, 31 ; blue-max -.red_shift db 11 ; red-shift -.green_shift db 5 ; green-shift -.blue_shift db 0 ; blue-shift - db 0, 0, 0 ; padding - -else if BITS_PER_PIXEL = 8 - -SetPixelFormat db 0 ; setPixelformat - db 0, 0, 0 ; padding -.bpp db 8 ; bits per pixel -.depth db 8 ; depth -.big_endian db 0 ; big-endian flag -.true_color db 1 ; true-colour flag -.red_max db 0, 7 ; red-max -.green_max db 0, 7 ; green-max -.blue_max db 0, 3 ; blue-max -.red_shift db 5 ; red-shift -.green_shift db 2 ; green-shift -.blue_shift db 0 ; blue-shift - db 0, 0, 0 ; padding - -end if - -SetEncodings db 2 ; setEncodings - db 0 ; padding - db 0, 5 ; number of encodings -; db 0, 0, 0, 16 ; ZRLE - db 0, 0, 0, 15 ; TRLE - db 0, 0, 0, 2 ; RRE - db 0, 0, 0, 1 ; Copyrect encoding - db 0xff, 0xff, 0xff, 0x11 ; Cursor pseudo encoding - db 0, 0, 0, 0 ; raw encoding - .length = $ - SetEncodings - -FramebufferUpdateRequest db 3 -.inc db 0 ; incremental -.x dw 0 -.y dw 0 -.width dw 0 -.height dw 0 - -KeyEvent db 4 ; keyevent -.down db 0 ; down-flag - dw 0 ; padding -.key dd 0 ; key - -PointerEvent db 5 ; pointerevent -.mask db 0 ; button-mask -.x dw 0 ; x-position -.y dw 0 ; y-position - - -sockaddr1: - dw AF_INET4 -.port dw 0x0c17 ; 5900 -.ip dd 0 - rb 10 - -beep db 0x85, 0x25, 0x85, 0x40, 0 - -status dd STATUS_CONNECT -work dd 0 -mouse_dd dd 0 -thread_id dd 0 - -deflate_buffer dd 0 -deflate_length dd ? -deflate_str dd ? - -URLbox edit_box 235, 70, 20, 0xffffff, 0x6f9480, 0, 0, 0x90000000, SERVERADDRLEN, serveraddr, mouse_dd, ed_focus, 0, 0 -USERbox edit_box 215, 90, 10, 0xffffff, 0x6f9480, 0, 0, 0x90000000, 127, username, mouse_dd, ed_focus, 0, 0 -PASSbox edit_box 215, 90, 35, 0xffffff, 0x6f9480, 0, 0, 0x10000000, 127, password, mouse_dd, ed_pass, 0, 0 - -serverstr db "server:" -userstr db "username:" -passstr db "password:" -connectstr db "Connect" -loginstr db "Log in" -cancelstr db "Cancel" -okstr db "OK" -okstr_e: - -sz_err_disconnected db "The server has closed the connection unexpectedly.", 0 -sz_err_dns db "Could not resolve hostname.", 0 -sz_err_sock db "Could not open socket.", 0 -sz_err_connect db "Could not connect to the server.", 0 -sz_err_proto db "A protocol error has occured.", 0 -sz_err_security db "An authentication problem has occured.", 0 -sz_err_library db "Could not load needed libraries.", 0 -sz_err_thread db "Could not create thread.", 0 -sz_err_login_failed db "Login failed.", 0 - -err_msg dd sz_err_disconnected - dd sz_err_dns - dd sz_err_sock - dd sz_err_connect - dd sz_err_proto - dd sz_err_security - dd sz_err_library - dd sz_err_thread - dd sz_err_login_failed - dd sz_err_security_c - -; import -align 4 -@IMPORT: - -library network, "network.obj",\ - box_lib, "box_lib.obj",\ - archiver, "archiver.obj" - -import network,\ - getaddrinfo, "getaddrinfo", \ - freeaddrinfo, "freeaddrinfo", \ - inet_ntoa, "inet_ntoa" - -import box_lib,\ - edit_box_draw, "edit_box",\ - edit_box_key, "edit_box_key",\ - edit_box_mouse, "edit_box_mouse",\ - scrollbar_v_draw, "scrollbar_v_draw",\ - scrollbar_v_mouse, "scrollbar_v_mouse",\ - scrollbar_h_draw, "scrollbar_h_draw",\ - scrollbar_h_mouse, "scrollbar_h_mouse" - -import archiver,\ - deflate_unpack2, "deflate_unpack2" - -name db "VNC viewer " -.dash db 0, " " - -port_notice db "Example: 192.168.0.3:5900" -port_notice_e: - -I_END: - -servername rb 64+1 - -serveraddr db 0 - rb SERVERADDRLEN - -socketnum dd ? -datapointer dd ? - -rectangles dw ? - -rectangle: -.x dd ? -.y dd ? -.width dd ? -.height dd ? - -subrectangles dd ? - -subrectangle: -.x dd ? -.y dd ? -.width dd ? -.height dd ? - -screen: ; Remote screen resolution -.height dw ? -.width dw ? - -palette rd 128 ; TRLE/ZRLE -palettesize db ? ; TRLE/ZRLE - -keymap rw 128 -keymap_shift rw 128 -keymap_alt rw 128 -username rb 128 -password rb 128 -keys rd 32*2 ; DES keys for VNC authentication - -cursor: -.y db ? -.x db ? -.image rd 32*32 - -align 4 -if BITS_PER_PIXEL = 8 -lut_8bpp rd 256 -end if - -sz_err_security_c rb 512+1 - -receive_buffer rb RECEIVE_BUFFER_SIZE -framebuffer rb 1280*1024*3 ; framebuffer - - rb 0x1000 -thread_stack: - rb 0x1000 -IM_END: - - +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; VNC client for KolibriOS ;; +;; ;; +;; Written by hidnplayr@kolibrios.org ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +format binary as "" + +__DEBUG__ = 1 +__DEBUG_LEVEL__ = 2 + +BITS_PER_PIXEL = 32 ; 8, 16, 24 or 32 +SERVERADDRLEN = 4096 + +use32 + + org 0x0 + + db "MENUET01" ; 8 byte id + dd 0x01 ; header version + dd START ; start of code + dd I_END ; size of image + dd IM_END ; memory for app + dd IM_END ; esp + dd serveraddr, 0x0 ; I_Param , I_Path + +include "../../macros.inc" +include "../../debug-fdo.inc" +include "../../proc32.inc" +include "../../dll.inc" +include "../../struct.inc" +include "../../develop/libraries/box_lib/box_lib.mac" +include "../../network.inc" + +struct PixelFormat + bpp db ? + depth db ? + big_endian db ? + true_color db ? + red_max dw ? + green_max dw ? + blue_max dw ? + red_shift db ? + green_shift db ? + blue_shift db ? + padding rb 3 +ends + +struct ServerInit + width dw ? + height dw ? + pixelformat PixelFormat + name_length dd ? + name db ? +ends + +xpos = 4 +ypos = 21 + +TIMEOUT = 5 ; timeout in seconds + +RECEIVE_BUFFER_SIZE = 8*1024*1024 ; 8 Mib + +STATUS_CONNECT = 0 +STATUS_CONNECTING = 1 +STATUS_REQ_LOGIN = 2 +STATUS_LOGIN = 3 +STATUS_CONNECTED = 4 +STATUS_CLOSED = 5 + +STATUS_DISCONNECTED = 10 +STATUS_DNS_ERR = 11 +STATUS_SOCK_ERR = 12 +STATUS_CONNECT_ERR = 13 +STATUS_PROTO_ERR = 14 +STATUS_SECURITY_ERR = 15 +STATUS_LIB_ERR = 16 +STATUS_THREAD_ERR = 17 +STATUS_LOGIN_FAILED = 18 +STATUS_SECURITY_ERR_C = 19 + +WORK_FRAMEBUFFER = 1 shl 0 +WORK_CURSOR = 1 shl 1 +WORK_GUI = 1 shl 2 + +BYTES_PER_PIXEL = (BITS_PER_PIXEL + 7) / 8 + +if BITS_PER_PIXEL = 32 + BYTES_PER_CPIXEL= 3 +else + BYTES_PER_CPIXEL= BYTES_PER_PIXEL +end if + +include "keymap.inc" +include "gui.inc" +include "network.inc" +include "raw.inc" +include "copyrect.inc" +include "rre.inc" +include "trle.inc" +include "zrle.inc" +include "cursor.inc" +include "des.inc" + + +if BITS_PER_PIXEL = 8 +create_lut: + mov edi, lut_8bpp ; 332 format + xor eax, eax + call green + add eax, 0x240000 + call green + add eax, 0x250000 + call green + add eax, 0x240000 + call green + add eax, 0x250000 + call green + add eax, 0x240000 + call green + add eax, 0x250000 + call green + add eax, 0x240000 + call green + ret + +green: + mov ah, 0 + call blue + mov ah, 36 + call blue + add ah, 37 + call blue + add ah, 36 + call blue + add ah, 37 + call blue + add ah, 36 + call blue + add ah, 37 + call blue + add ah, 36 + call blue + ret + +blue: + mov al, 0 + stosd + mov al, 85 + stosd + mov al, 170 + stosd + mov al, 255 + stosd + ret +end if + + +START: + + mcall 68, 11 ; init heap + +; Load libraries + stdcall dll.Load, @IMPORT + test eax, eax + jz @f + mov [status], STATUS_LIB_ERR + jmp draw_gui.first_time + @@: + +; When using 8BPP, create lookup table +if BITS_PER_PIXEL = 8 + call create_lut +end if + +; Check if we got a server address through parameters + cmp byte[serveraddr], 0 + je @f + xor al, al + mov edi, serveraddr + mov ecx, SERVERADDRLEN + repne scasb + sub edi, serveraddr+1 + mov [URLbox.size], edi + mov [URLbox.pos], edi + call open_connection + @@: + +; Present the user with the GUI and wait for network connection + jmp draw_gui.first_time + +; Create main window +connected: + mcall 71, 1, name ; reset window caption (add server name) + + mov edx, dword[screen] + movzx esi, dx + shr edx, 16 + add edx, 2*xpos + add esi, ypos+xpos + mcall 67, 10, 10 ; resize the window + + mcall 40, EVM_CURSOR_FILTER + EVM_MOUSE_FILTER + EVM_MOUSE + EVM_KEY + EVM_REDRAW + EVM_BUTTON + + mcall 66, 1, 1 ; Switch keyboard to scancode mode + + call generate_keymap + +redraw: + mcall 12, 1 + + mov ebx, dword[screen] + movzx ecx, bx + shr ebx, 16 + mov edx, 0x74ffffff + mov edi, name + mcall 0 ; draw window + + mcall 12, 2 + +draw_framebuffer: + DEBUGF 1, "Drawing framebuffer\n" + mcall 7, framebuffer, dword[screen], 0 + and [work], not WORK_FRAMEBUFFER + +mainloop: + cmp [status], STATUS_CONNECTED + jne draw_gui + test [work], WORK_FRAMEBUFFER + jnz draw_framebuffer + test [work], WORK_CURSOR + jnz update_cursor + + mcall 23, 10 ; Check for event with 0,1s timeout + + dec eax + jz redraw + dec eax + jz key + dec eax + jz button + sub eax, 3 + jz mouse + jmp mainloop + +key: + mcall 66, 3 + mov ebx, eax ; get modifier keys + + mcall 2 ; get key scancode + cmp ah, 224 ; extended keycode? + je .extended + + xor al, al + test ah, 0x80 ; key up? + jnz @f + inc al + and ah, 0x7f + @@: + mov byte[KeyEvent.down], al + + movzx eax, ah + + test ebx, 100000b ; alt? + jz .no_alt + mov ax, [keymap_alt+eax*2] + jmp .key + .no_alt: + + test ebx, 11b ; shift? + jz .no_shift + mov ax, [keymap_shift+eax*2] + jmp .key + .no_shift: + + test ebx, 10000000b ; numlock ? + jz .no_numlock + cmp al, 71 + jb .no_numlock + cmp al, 83 + ja .no_numlock + mov ah, [keymap_numlock+eax-71] + xor al, al + jmp .key + + .extended: ; extended keys always use regular keymap + mcall 2 + shr eax, 8 + jz mainloop + + xor ah, ah + test al, 0x80 ; key up? + jnz @f + inc ah + @@: + mov byte[KeyEvent.down], ah + and ax, 0x007f + .no_numlock: + mov ax, [keymap+eax*2] + .key: + test ax, ax + jz mainloop + mov word[KeyEvent.key+2], ax + DEBUGF 1, "Sending key: 0x%x\n", ax + mcall send, [socketnum], KeyEvent, 8, 0 + jmp mainloop + + + +mouse: +; DEBUGF 1, "Sending pointer event\n" + + mcall 37, 1 ; get mouse pos + bswap eax + mov [PointerEvent.x], ax + shr eax, 16 + mov [PointerEvent.y], ax + + mcall 37, 2 ; get mouse buttons + test al, 00000010b ; test if right button was pressed (bit 1 in kolibri) + jz @f + add al, 00000010b ; in RFB protocol it is bit 2, so if we add bit 2 again, we"ll get bit 3 and bit 1 will remain the same + @@: + mov [PointerEvent.mask], al + + mcall send, [socketnum], PointerEvent, 6, 0 + jmp mainloop + +button: + mcall 17 ; get id + mov [status], STATUS_CLOSED + mcall close, [socketnum] + mcall -1 + + +update_cursor: + +; load cursor + mov dx, word[cursor.y] + shl edx, 16 + mov dx, 2 + mcall 37, 4, cursor.image + test eax, eax + jz .fail + +; set cursor + mov ecx, eax + mcall 37, 5 + +; delete previously set cursor + mov ecx, eax + mcall 37, 6 + +.fail: + and [work], not WORK_CURSOR + jmp mainloop + + +; DATA AREA + +include_debug_strings + +keymap_numlock: + db '7', '8', '9', '-' + db '4', '5', '6', '+' + db '1', '2', '3' + db '0', '.' + +HandShake db "RFB 003.003", 10 + +ClientInit db 0 ; not shared + +if BITS_PER_PIXEL = 32 + +SetPixelFormat db 0 ; setPixelformat + db 0, 0, 0 ; padding +.bpp db 32 ; bits per pixel +.depth db 24 ; depth +.big_endian db 0 ; big-endian flag +.true_color db 1 ; true-colour flag +.red_max db 0, 255 ; red-max +.green_max db 0, 255 ; green-max +.blue_max db 0, 255 ; blue-max +.red_shift db 16 ; red-shift +.green_shift db 8 ; green-shift +.blue_shift db 0 ; blue-shift + db 0, 0, 0 ; padding + +else if BITS_PER_PIXEL = 24 + +SetPixelFormat db 0 ; setPixelformat + db 0, 0, 0 ; padding +.bpp db 24 ; bits per pixel +.depth db 24 ; depth +.big_endian db 0 ; big-endian flag +.true_color db 1 ; true-colour flag +.red_max db 0, 255 ; red-max +.green_max db 0, 255 ; green-max +.blue_max db 0, 255 ; blue-max +.red_shift db 16 ; red-shift +.green_shift db 8 ; green-shift +.blue_shift db 0 ; blue-shift + db 0, 0, 0 ; padding + +else if BITS_PER_PIXEL = 16 + +SetPixelFormat db 0 ; setPixelformat + db 0, 0, 0 ; padding +.bpp db 16 ; bits per pixel +.depth db 16 ; depth +.big_endian db 0 ; big-endian flag +.true_color db 1 ; true-colour flag +.red_max db 0, 31 ; red-max +.green_max db 0, 63 ; green-max +.blue_max db 0, 31 ; blue-max +.red_shift db 11 ; red-shift +.green_shift db 5 ; green-shift +.blue_shift db 0 ; blue-shift + db 0, 0, 0 ; padding + +else if BITS_PER_PIXEL = 8 + +SetPixelFormat db 0 ; setPixelformat + db 0, 0, 0 ; padding +.bpp db 8 ; bits per pixel +.depth db 8 ; depth +.big_endian db 0 ; big-endian flag +.true_color db 1 ; true-colour flag +.red_max db 0, 7 ; red-max +.green_max db 0, 7 ; green-max +.blue_max db 0, 3 ; blue-max +.red_shift db 5 ; red-shift +.green_shift db 2 ; green-shift +.blue_shift db 0 ; blue-shift + db 0, 0, 0 ; padding + +end if + +SetEncodings db 2 ; setEncodings + db 0 ; padding + db 0, 5 ; number of encodings +; db 0, 0, 0, 16 ; ZRLE + db 0, 0, 0, 15 ; TRLE + db 0, 0, 0, 2 ; RRE + db 0, 0, 0, 1 ; Copyrect encoding + db 0xff, 0xff, 0xff, 0x11 ; Cursor pseudo encoding + db 0, 0, 0, 0 ; raw encoding + .length = $ - SetEncodings + +FramebufferUpdateRequest db 3 +.inc db 0 ; incremental +.x dw 0 +.y dw 0 +.width dw 0 +.height dw 0 + +KeyEvent db 4 ; keyevent +.down db 0 ; down-flag + dw 0 ; padding +.key dd 0 ; key + +PointerEvent db 5 ; pointerevent +.mask db 0 ; button-mask +.x dw 0 ; x-position +.y dw 0 ; y-position + + +sockaddr1: + dw AF_INET4 +.port dw 0x0c17 ; 5900 +.ip dd 0 + rb 10 + +beep db 0x85, 0x25, 0x85, 0x40, 0 + +status dd STATUS_CONNECT +work dd 0 +mouse_dd dd 0 +thread_id dd 0 + +deflate_buffer dd 0 +deflate_length dd ? +deflate_str dd ? + +URLbox edit_box 235, 70, 20, 0xffffff, 0x6f9480, 0, 0, 0x90000000, SERVERADDRLEN, serveraddr, mouse_dd, ed_focus, 0, 0 +USERbox edit_box 215, 90, 10, 0xffffff, 0x6f9480, 0, 0, 0x90000000, 127, username, mouse_dd, ed_focus, 0, 0 +PASSbox edit_box 215, 90, 35, 0xffffff, 0x6f9480, 0, 0, 0x10000000, 127, password, mouse_dd, ed_pass, 0, 0 + +serverstr db "server:" +userstr db "username:" +passstr db "password:" +connectstr db "Connect" +loginstr db "Log in" +cancelstr db "Cancel" +okstr db "OK" +okstr_e: + +sz_err_disconnected db "The server has closed the connection unexpectedly.", 0 +sz_err_dns db "Could not resolve hostname.", 0 +sz_err_sock db "Could not open socket.", 0 +sz_err_connect db "Could not connect to the server.", 0 +sz_err_proto db "A protocol error has occured.", 0 +sz_err_security db "An authentication problem has occured.", 0 +sz_err_library db "Could not load needed libraries.", 0 +sz_err_thread db "Could not create thread.", 0 +sz_err_login_failed db "Login failed.", 0 + +err_msg dd sz_err_disconnected + dd sz_err_dns + dd sz_err_sock + dd sz_err_connect + dd sz_err_proto + dd sz_err_security + dd sz_err_library + dd sz_err_thread + dd sz_err_login_failed + dd sz_err_security_c + +; import +align 4 +@IMPORT: + +library network, "network.obj",\ + box_lib, "box_lib.obj",\ + archiver, "archiver.obj" + +import network,\ + getaddrinfo, "getaddrinfo", \ + freeaddrinfo, "freeaddrinfo", \ + inet_ntoa, "inet_ntoa" + +import box_lib,\ + edit_box_draw, "edit_box",\ + edit_box_key, "edit_box_key",\ + edit_box_mouse, "edit_box_mouse",\ + scrollbar_v_draw, "scrollbar_v_draw",\ + scrollbar_v_mouse, "scrollbar_v_mouse",\ + scrollbar_h_draw, "scrollbar_h_draw",\ + scrollbar_h_mouse, "scrollbar_h_mouse" + +import archiver,\ + deflate_unpack2, "deflate_unpack2" + +name db "VNC viewer " +.dash db 0, " " + +port_notice db "Example: 192.168.0.3:5900" +port_notice_e: + +I_END: + +servername rb 64+1 + +serveraddr db 0 + rb SERVERADDRLEN + +socketnum dd ? +datapointer dd ? + +rectangles dw ? + +rectangle: +.x dd ? +.y dd ? +.width dd ? +.height dd ? + +subrectangles dd ? + +subrectangle: +.x dd ? +.y dd ? +.width dd ? +.height dd ? + +screen: ; Remote screen resolution +.height dw ? +.width dw ? + +palette rd 128 ; TRLE/ZRLE +palettesize db ? ; TRLE/ZRLE + +keymap rw 128 +keymap_shift rw 128 +keymap_alt rw 128 +username rb 128 +password rb 128 +keys rd 32*2 ; DES keys for VNC authentication + +cursor: +.y db ? +.x db ? +.image rd 32*32 + +align 4 +if BITS_PER_PIXEL = 8 +lut_8bpp rd 256 +end if + +sz_err_security_c rb 512+1 + +receive_buffer rb RECEIVE_BUFFER_SIZE +framebuffer rb 1280*1024*3 ; framebuffer + + rb 0x1000 +thread_stack: + rb 0x1000 +IM_END: diff --git a/programs/other/calcplus/calcplus.asm b/programs/other/calcplus/calcplus.asm index 87e6652f9..e15907da1 100644 --- a/programs/other/calcplus/calcplus.asm +++ b/programs/other/calcplus/calcplus.asm @@ -1,734 +1,734 @@ -; SPDX-License-Identifier: GPL-2.0-only -; -; Calc+ - Multifunctional calculator -; Copyright (C) 2014-2025 KolibriOS team -; -; Contributor eAndrew - Main code -; Contributor Leency - Code refactoring and UX/UI update -; Contributor Burer - Code refactoring and UI update - -; ==================================================================== - -use32 -org 0 - -db 'MENUET01' -dd 1 -dd START -dd I_END -dd MEM -dd STACKTOP -dd 0, 0 - -; ==================================================================== - -include "../../proc32.inc" -include "../../macros.inc" -include "../../KOSfuncs.inc" -include "../../encoding.inc" -include "../../dll.inc" -include "../../develop/libraries/box_lib/trunk/box_lib.mac" -include "parser.inc" - -imports: - - library gui, "box_lib.obj" - import gui, editbox.draw, "edit_box", \ - editbox.key, "edit_box_key", \ - editbox.mouse, "edit_box_mouse" - -; ==================================================================== - -LIST_X = 8 -LIST_Y = 47 -LIST_ITEM_H = 26 -LIST_ITEM_W = 295 -LIST_ITEM_COUNT = 8 -LIST_H = LIST_ITEM_H * LIST_ITEM_COUNT -LIST_TEXT_Y = LIST_ITEM_H / 2 - 8 - -KEYB_BTN_W = 37 -KEYB_BTN_H = 37 -GAP = 5 - -KEYBOARD_X = LIST_ITEM_W + 16 -KEYBOARD_Y = LIST_Y -KEYBOARD_W = 190 - -LIST_ITEM_TEXT1 equ dword [sc.work_text] -LIST_ITEM_TEXT2 equ dword [sc.work_text] - -WIN_X = 200 -WIN_Y = 200 -WIN_W = LIST_ITEM_W + KEYBOARD_W + 7 -WIN_H = LIST_H + 60 - -sz_head db "Calc+", 0 -btn_clr db "" ; "Enter" symbol, curved arrow in input area -buttons db "|%^*/-+)(=7894561230" -edb1 edit_box 0, 14, 12, 0xFFFFFF, 0x94AECE, 0xFFC90E, 0xCACACA, 0x10000000, \ - 480, exp, group, ed_always_focus + ed_focus, 0, 0 - -; ==================================================================== - -START: - mov [ans.buffer], dword " = 0" - mov [ans.size], 4 * 8 + 9 - - mcall SF_SET_EVENTS_MASK, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE - - m2m [edb1.color], [scn.gui_face] - - mcall SF_SYS_MISC, SSF_HEAP_INIT - stdcall dll.Load, imports - -; ==================================================================== - -update: - mcall SF_WAIT_EVENT_TIMEOUT, 5 - - cmp eax, EV_REDRAW - je ev_redraw - - cmp eax, EV_KEY - je ev_key - - cmp eax, EV_BUTTON - je ev_button - - cmp eax, EV_MOUSE - je ev_mouse - - jmp update - -; ==================================================================== - -ev_redraw: - mcall SF_REDRAW, SSF_BEGIN_DRAW - mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors - - ; WINDOW - mov edx, [sc.work] - or edx, 0x34 shl 24 - - mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT - mov ecx, WIN_Y shl 16 + WIN_H - add ecx, eax - - mcall SF_GET_SCREEN_SIZE - shr eax, 16 - mov ebx, eax - sub ebx, WIN_W - shr ebx, 1 - - mcall 0, , , , , sz_head - - ; CONTENT - call draw_textbox - call draw_keyb - call draw_list - - mcall SF_REDRAW, SSF_END_DRAW - - jmp update - -; ==================================================================== - -ev_key: - mcall SF_GET_KEY - - cmp ah, 27 - je exit - - cmp ah, 13 - je calc - - invoke editbox.key, edb1 - - jmp update - -; ==================================================================== - -ev_button: - mcall SF_GET_BUTTON - - ; EXIT - cmp ah, 1 - je exit - - cmp ah, 250 - jne @f - mcall SF_FILE, f70_calc - jmp update - - ; DELETE - @@: - cmp ah, 4 - jne .not_del - - cmp [edb1.pos], 0 - je update - mov eax, exp - add eax, [edb1.pos] - dec eax - mov ebx, exp - add ebx, [edb1.size] - inc ebx - - @@: - cmp eax, ebx - je @f - mov cl, [eax + 1] - mov [eax], cl - inc eax - jmp @b - - @@: - dec [edb1.pos] - dec [edb1.size] - m2m [edb1.shift], [edb1.pos] - jmp .redraw - - .not_del: - - ; CALCULATE - cmp ah, 19 - je calc - - ; LIST - cmp ah, 0x60 - jl .not_list - - sub ah, 0x60 - movzx ebx, ah - imul ebx, 512 - add ebx, history - add ebx, 482 - stdcall str_len, ebx - - ; skip first (space) character - test eax, eax - jz .redraw - dec eax - inc ebx - - mov edx, exp - add edx, [edb1.size] - add edx, eax - mov edi, exp - add edi, [edb1.pos] - - @@: - cmp edx, edi - je @f - mov esi, edx - sub esi, eax - push eax - mov al, [esi] - mov [edx], al - pop eax - dec edx - jmp @b - - @@: - add [edb1.size], eax - - @@: - cmp eax, 0 - je @f - mov cl, [ebx] - mov [edi], cl - inc edi - inc ebx - dec eax - inc [edb1.pos] - jmp @b - - @@: - jmp .redraw - - .not_list: - - ; KEYBOARD - cmp ah, 10 - jl update - cmp ah, 50 - jg update - mov dh, ah - - mov ebx, exp - add ebx, [edb1.size] - mov ecx, exp - add ecx, [edb1.pos] - cmp dh, 30 - jl @f - add ebx, 2 - - @@: - cmp ebx, ecx - je @f - mov dl, [ebx - 1] - mov [ebx], dl - dec ebx - jmp @b - - @@: - movzx eax, dh - add eax, buttons - sub eax, 10 - mov al, [eax] - - mov [ebx], al - inc [edb1.size] - inc [edb1.pos] - cmp dh, 30 - jl @f - add [edb1.size], 2 - add [edb1.pos], 2 - - @@: - .redraw: - call draw_textbox - jmp update - -; ==================================================================== - -ev_mouse: - mcall SF_GET_KEY - - invoke editbox.mouse, edb1 - jmp update - -; ==================================================================== - -exit: - mcall SF_TERMINATE_PROCESS - -; ==================================================================== - -calc: - stdcall parse - cmp [error_n], 0 - jne .error - - mov [ans.buffer], dword " = " - - stdcall convert_to_str, eax, ans.buffer + 3 - add eax, 3 - mov edi, eax - imul eax, 8 ; char_w - add eax, 9 - mov [ans.size], eax - - ; HISTORY - mov ecx, LIST_ITEM_COUNT - 1 - mov eax, history - add eax, (LIST_ITEM_COUNT - 1) * 512 - - @@: - mov ebx, eax - sub ebx, 512 - stdcall str_cpy, ebx, eax - add ebx, 480 - add eax, 480 - stdcall str_cpy, ebx, eax - sub ebx, 480 - sub eax, 480 - mov esi, [ebx + 508] - mov [eax + 508], esi - sub eax, 512 - loop @b - - stdcall str_cpy, exp, history - stdcall str_cpy, ans.buffer, history + 480 - mov esi, [ans.size] - mov dword[history + 508], esi - - ; Check length - mov esi, 37 - sub esi, edi - stdcall str_len, exp - sub esi, eax - cmp esi, 0 - jg .redraw - - mov ebx, history - add ebx, eax - add ebx, esi - mov [ebx], dword ".." - - jmp .redraw - - ; ERRORS - .error: - cmp [error_n], 1 - je .err_1 - cmp [error_n], 4 - je .err_4 - - mov [ans.buffer + 0], dword "Expe" - mov [ans.buffer + 4], dword "cted" - mov [ans.buffer + 8], dword " ')'" - mov [ans.buffer + 12], byte 0 - mov [ans.size], 105 - - cmp [error_n], 2 - je .redraw - cmp [error_n], 3 - je .err_3 - cmp [error_n], 5 - je .err_5 - - .err_1: - mov [ans.buffer + 0], dword "Div." - mov [ans.buffer + 4], dword " by " - mov [ans.buffer + 8], byte "0" - mov [ans.buffer + 9], byte 0 - mov [ans.size], 81 - jmp .redraw - - .err_4: - mov [ans.buffer + 0], dword "Inpu" - mov [ans.buffer + 4], dword "t er" - mov [ans.buffer + 8], dword "rror" - mov [ans.buffer + 12], byte 0 - mov [ans.size], 105 - jmp .redraw - - .err_3: - mov [ans.buffer + 10], byte "(" - jmp .redraw - - .err_5: - mov [ans.buffer + 10], byte "|" - jmp .redraw - - .redraw: - - call draw_textbox - call draw_list - jmp update - -; ==================================================================== - -proc draw_textbox - - ; border - mcall SF_DRAW_RECT, , < 8, 30>, [sc.work_graph] - - ; background - mov edx, [scn.gui_face] - cmp [error_n], 0 - je @f - mov edx, 0xFFAAAA - - @@: - mcall SF_DRAW_RECT, , < 9, 28> - mcall , , < 9, 1>, [scn.gui_tb_in_shd] - mcall , , < 10, 27> - - mov ebx, LIST_X + LIST_ITEM_W - 12 - sub ebx, [ans.size] - shl ebx, 16 - add ebx, 16 - mov ecx, [scn.gui_intext] - add ecx, 0x10000000 - or ecx, 1 shl 31 - mcall SF_DRAW_TEXT, , , ans.buffer - - mcall , , [scn.gui_intext], btn_clr, 1 - add ebx, 1 shl 16 - mcall - - mcall SF_DEFINE_BUTTON, , <9, 27>, 4 + BT_HIDE - - mov ebx, LIST_ITEM_W - 18 - sub ebx, [ans.size] - cmp ebx, 24 - jg @f - mov ebx, 24 - - @@: - mov [edb1.width], ebx - m2m [edb1.color] , [scn.gui_face] - m2m [edb1.focus_border_color], [scn.gui_face] - cmp [error_n], 0 - je @f - mov [edb1.color] , 0x00FFAAAA - mov [edb1.focus_border_color], 0x00FFAAAA - - @@: - invoke editbox.draw, edb1 - ret - -endp - -; ==================================================================== - -proc draw_button, x, y - - mcall SF_DEFINE_BUTTON, <[x], KEYB_BTN_W>, <[y], KEYB_BTN_H>, [but_id], [but_c] - - mov ebx, [x] - add ebx, KEYB_BTN_W/2-4 - - shl ebx, 16 - add ebx, [y] - add ebx, KEYB_BTN_H/2 - 6 - or [but_tc], 0x01000000 ; use bigger font - mcall SF_DRAW_TEXT, , [but_tc], [txt_id], [txt_size] - - mov eax, [txt_size] - add [txt_id], eax - inc dword [but_id] - - ret - -endp - -; ==================================================================== - -proc draw_keyb - - mcall SF_DEFINE_BUTTON, , <8, 29>, 250, [sc.work_light] - mov ecx, [sc.work_text] - or ecx, 0x10000000 - mcall SF_DRAW_TEXT, <(KEYB_BTN_W + GAP - engineering_len*2)*2 - GAP/2 + KEYBOARD_X, KEYB_BTN_H / 2 - 10 + 8>, , engineering_str, engineering_len - - mov [txt_size], 1 - mov [but_id], 0x0000000A - mov [txt_id], buttons - - m2m [but_c], [sc.work] - m2m [but_tc], [sc.work_text] - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*1 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4 - - mov [but_c] , 0x00F0969D - mov [but_tc], 0x00FFFFFF - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y +(KEYB_BTN_H + GAP)*4 - - m2m [but_c] , [sc.work_button] - m2m [but_tc], [sc.work_button_text] - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + KEYB_BTN_H + GAP - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + KEYB_BTN_H + GAP - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + KEYB_BTN_H + GAP - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 - stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4 - - ret - -endp - -; ==================================================================== - -proc draw_list - - ; BACKGROUND - mov eax, SF_DRAW_RECT - mov ebx, LIST_X shl 16 + LIST_ITEM_W - mov ecx, LIST_Y shl 16 + LIST_ITEM_H - mov edx, [sc.work_light] - mov edi, LIST_ITEM_COUNT - - @@: - mcall - ; draw separator { - push ecx edx - sub ecx, LIST_ITEM_H - 1 - mov edx, [sc.work_dark] - mcall - ; } - pop edx ecx - add ecx, LIST_ITEM_H shl 16 - - .next: - dec edi - cmp edi, 0 - jne @b - - mcall , , , [sc.work_dark] - mcall , , - mcall , , - - ; BUTTONS - mov eax, SF_DEFINE_BUTTON - mov ebx, LIST_X shl 16 + (LIST_ITEM_W - 1) - mov ecx, LIST_Y shl 16 + LIST_ITEM_H - mov edx, 0x60 + BT_HIDE - mov edi, LIST_ITEM_COUNT - - @@: - mcall - add ecx, LIST_ITEM_H shl 16 - inc edx - dec edi - cmp edi, 0 - jne @b - - ; TEXT - mov eax, SF_DRAW_TEXT - mov ebx, (LIST_X + LIST_X) shl 16 + LIST_Y + LIST_TEXT_Y + 1 - mov ecx, [sc.work_text] - mov edi, LIST_ITEM_COUNT - - @@: - or ecx, 1 shl 31 - mov edx, history - - @@: - add ecx, 0x10000000 - mcall - - push ebx - add ebx, (LIST_ITEM_W - 8) shl 16 - mov esi, [edx + 508] - shl esi, 16 - sub ebx, esi - add edx, 480 - mcall - pop ebx - - add edx, 32 - add ebx, LIST_ITEM_H - - and ecx, 0xFFFFFF - cmp ecx, LIST_ITEM_TEXT2 - je .set_color_to_2_txt - mov ecx, LIST_ITEM_TEXT2 - jmp .next_txt - - .set_color_to_2_txt: - mov ecx, LIST_ITEM_TEXT1 - - .next_txt: - or ecx, 1 shl 31 - - dec edi - cmp edi, 0 - jne @b - - ret - -endp - -; ==================================================================== - -proc str_len uses ebx, str - - xor eax, eax - mov ebx, [str] - - @@: - cmp [ebx], byte 0 - je @f - inc eax - inc ebx - jmp @b - - @@: - ret - -endp - -; ==================================================================== - -proc str_cpy uses eax ebx ecx, from, to - - mov eax, [from] - mov ebx, [to] - - @@: - cmp [eax], byte 0 - je @f - mov cl, [eax] - mov [ebx], cl - inc eax - inc ebx - jmp @b - - @@: - mov [ebx], byte 0 - ret - -endp - -; ==================================================================== - -if lang eq ru_RU - - engineering_str cp866 "╨Ш╨╜╨╢╨╡╨╜╨╡╤А╨╜╤Л╨╣ ╤А╨╡╨╢╨╕╨╝" - engineering_len = $ - engineering_str - -else if lang eq es_ES - - engineering_str db " Modo ingeniero " - engineering_len = $ - engineering_str -else - - engineering_str db "Engineering calc" - engineering_len = $ - engineering_str - -endf - -; ==================================================================== - -f70_calc: - dd SSF_START_APP - dd 0 - dd 0 - dd 0 - dd 0 - db '/sys/calc', 0 - -; system colors internal -scn: - .gui_tb_in_shd dd 0x00CED0D0 - .gui_face dd 0x00FAF8FA - .gui_text dd 0x10373C42 - .gui_intext dd 0x005F5F5F - .gui_select dd 0x00C7C9C9 - -; ==================================================================== - -I_END: - -rb 2048 - -STACKTOP: - -exp rb 480 -exp_pos rd 1 -exp_lvl rd 1 -abs_lvl rd 1 -group rd 1 - -ans.buffer: rb 480 -ans.size rd 1 -error_n rd 1 - -timer rd 1 -but_id rd 1 -but_c rd 1 -but_tc rd 1 -txt_id rd 1 -txt_size rd 1 - -history rb 512 * LIST_ITEM_COUNT - rb 512 - -sc system_colors - -MEM: +; SPDX-License-Identifier: GPL-2.0-only +; +; Calc+ - Multifunctional calculator +; Copyright (C) 2014-2025 KolibriOS team +; +; Contributor eAndrew - Main code +; Contributor Leency - Code refactoring and UX/UI update +; Contributor Burer - Code refactoring and UI update + +; ==================================================================== + +use32 +org 0 + +db 'MENUET01' +dd 1 +dd START +dd I_END +dd MEM +dd STACKTOP +dd 0, 0 + +; ==================================================================== + +include "../../proc32.inc" +include "../../macros.inc" +include "../../KOSfuncs.inc" +include "../../encoding.inc" +include "../../dll.inc" +include "../../develop/libraries/box_lib/box_lib.mac" +include "parser.inc" + +imports: + + library gui, "box_lib.obj" + import gui, editbox.draw, "edit_box", \ + editbox.key, "edit_box_key", \ + editbox.mouse, "edit_box_mouse" + +; ==================================================================== + +LIST_X = 8 +LIST_Y = 47 +LIST_ITEM_H = 26 +LIST_ITEM_W = 295 +LIST_ITEM_COUNT = 8 +LIST_H = LIST_ITEM_H * LIST_ITEM_COUNT +LIST_TEXT_Y = LIST_ITEM_H / 2 - 8 + +KEYB_BTN_W = 37 +KEYB_BTN_H = 37 +GAP = 5 + +KEYBOARD_X = LIST_ITEM_W + 16 +KEYBOARD_Y = LIST_Y +KEYBOARD_W = 190 + +LIST_ITEM_TEXT1 equ dword [sc.work_text] +LIST_ITEM_TEXT2 equ dword [sc.work_text] + +WIN_X = 200 +WIN_Y = 200 +WIN_W = LIST_ITEM_W + KEYBOARD_W + 7 +WIN_H = LIST_H + 60 + +sz_head db "Calc+", 0 +btn_clr db "" ; "Enter" symbol, curved arrow in input area +buttons db "|%^*/-+)(=7894561230" +edb1 edit_box 0, 14, 12, 0xFFFFFF, 0x94AECE, 0xFFC90E, 0xCACACA, 0x10000000, \ + 480, exp, group, ed_always_focus + ed_focus, 0, 0 + +; ==================================================================== + +START: + mov [ans.buffer], dword " = 0" + mov [ans.size], 4 * 8 + 9 + + mcall SF_SET_EVENTS_MASK, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + + m2m [edb1.color], [scn.gui_face] + + mcall SF_SYS_MISC, SSF_HEAP_INIT + stdcall dll.Load, imports + +; ==================================================================== + +update: + mcall SF_WAIT_EVENT_TIMEOUT, 5 + + cmp eax, EV_REDRAW + je ev_redraw + + cmp eax, EV_KEY + je ev_key + + cmp eax, EV_BUTTON + je ev_button + + cmp eax, EV_MOUSE + je ev_mouse + + jmp update + +; ==================================================================== + +ev_redraw: + mcall SF_REDRAW, SSF_BEGIN_DRAW + mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors + + ; WINDOW + mov edx, [sc.work] + or edx, 0x34 shl 24 + + mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT + mov ecx, WIN_Y shl 16 + WIN_H + add ecx, eax + + mcall SF_GET_SCREEN_SIZE + shr eax, 16 + mov ebx, eax + sub ebx, WIN_W + shr ebx, 1 + + mcall 0, , , , , sz_head + + ; CONTENT + call draw_textbox + call draw_keyb + call draw_list + + mcall SF_REDRAW, SSF_END_DRAW + + jmp update + +; ==================================================================== + +ev_key: + mcall SF_GET_KEY + + cmp ah, 27 + je exit + + cmp ah, 13 + je calc + + invoke editbox.key, edb1 + + jmp update + +; ==================================================================== + +ev_button: + mcall SF_GET_BUTTON + + ; EXIT + cmp ah, 1 + je exit + + cmp ah, 250 + jne @f + mcall SF_FILE, f70_calc + jmp update + + ; DELETE + @@: + cmp ah, 4 + jne .not_del + + cmp [edb1.pos], 0 + je update + mov eax, exp + add eax, [edb1.pos] + dec eax + mov ebx, exp + add ebx, [edb1.size] + inc ebx + + @@: + cmp eax, ebx + je @f + mov cl, [eax + 1] + mov [eax], cl + inc eax + jmp @b + + @@: + dec [edb1.pos] + dec [edb1.size] + m2m [edb1.shift], [edb1.pos] + jmp .redraw + + .not_del: + + ; CALCULATE + cmp ah, 19 + je calc + + ; LIST + cmp ah, 0x60 + jl .not_list + + sub ah, 0x60 + movzx ebx, ah + imul ebx, 512 + add ebx, history + add ebx, 482 + stdcall str_len, ebx + + ; skip first (space) character + test eax, eax + jz .redraw + dec eax + inc ebx + + mov edx, exp + add edx, [edb1.size] + add edx, eax + mov edi, exp + add edi, [edb1.pos] + + @@: + cmp edx, edi + je @f + mov esi, edx + sub esi, eax + push eax + mov al, [esi] + mov [edx], al + pop eax + dec edx + jmp @b + + @@: + add [edb1.size], eax + + @@: + cmp eax, 0 + je @f + mov cl, [ebx] + mov [edi], cl + inc edi + inc ebx + dec eax + inc [edb1.pos] + jmp @b + + @@: + jmp .redraw + + .not_list: + + ; KEYBOARD + cmp ah, 10 + jl update + cmp ah, 50 + jg update + mov dh, ah + + mov ebx, exp + add ebx, [edb1.size] + mov ecx, exp + add ecx, [edb1.pos] + cmp dh, 30 + jl @f + add ebx, 2 + + @@: + cmp ebx, ecx + je @f + mov dl, [ebx - 1] + mov [ebx], dl + dec ebx + jmp @b + + @@: + movzx eax, dh + add eax, buttons + sub eax, 10 + mov al, [eax] + + mov [ebx], al + inc [edb1.size] + inc [edb1.pos] + cmp dh, 30 + jl @f + add [edb1.size], 2 + add [edb1.pos], 2 + + @@: + .redraw: + call draw_textbox + jmp update + +; ==================================================================== + +ev_mouse: + mcall SF_GET_KEY + + invoke editbox.mouse, edb1 + jmp update + +; ==================================================================== + +exit: + mcall SF_TERMINATE_PROCESS + +; ==================================================================== + +calc: + stdcall parse + cmp [error_n], 0 + jne .error + + mov [ans.buffer], dword " = " + + stdcall convert_to_str, eax, ans.buffer + 3 + add eax, 3 + mov edi, eax + imul eax, 8 ; char_w + add eax, 9 + mov [ans.size], eax + + ; HISTORY + mov ecx, LIST_ITEM_COUNT - 1 + mov eax, history + add eax, (LIST_ITEM_COUNT - 1) * 512 + + @@: + mov ebx, eax + sub ebx, 512 + stdcall str_cpy, ebx, eax + add ebx, 480 + add eax, 480 + stdcall str_cpy, ebx, eax + sub ebx, 480 + sub eax, 480 + mov esi, [ebx + 508] + mov [eax + 508], esi + sub eax, 512 + loop @b + + stdcall str_cpy, exp, history + stdcall str_cpy, ans.buffer, history + 480 + mov esi, [ans.size] + mov dword[history + 508], esi + + ; Check length + mov esi, 37 + sub esi, edi + stdcall str_len, exp + sub esi, eax + cmp esi, 0 + jg .redraw + + mov ebx, history + add ebx, eax + add ebx, esi + mov [ebx], dword ".." + + jmp .redraw + + ; ERRORS + .error: + cmp [error_n], 1 + je .err_1 + cmp [error_n], 4 + je .err_4 + + mov [ans.buffer + 0], dword "Expe" + mov [ans.buffer + 4], dword "cted" + mov [ans.buffer + 8], dword " ')'" + mov [ans.buffer + 12], byte 0 + mov [ans.size], 105 + + cmp [error_n], 2 + je .redraw + cmp [error_n], 3 + je .err_3 + cmp [error_n], 5 + je .err_5 + + .err_1: + mov [ans.buffer + 0], dword "Div." + mov [ans.buffer + 4], dword " by " + mov [ans.buffer + 8], byte "0" + mov [ans.buffer + 9], byte 0 + mov [ans.size], 81 + jmp .redraw + + .err_4: + mov [ans.buffer + 0], dword "Inpu" + mov [ans.buffer + 4], dword "t er" + mov [ans.buffer + 8], dword "rror" + mov [ans.buffer + 12], byte 0 + mov [ans.size], 105 + jmp .redraw + + .err_3: + mov [ans.buffer + 10], byte "(" + jmp .redraw + + .err_5: + mov [ans.buffer + 10], byte "|" + jmp .redraw + + .redraw: + + call draw_textbox + call draw_list + jmp update + +; ==================================================================== + +proc draw_textbox + + ; border + mcall SF_DRAW_RECT, , < 8, 30>, [sc.work_graph] + + ; background + mov edx, [scn.gui_face] + cmp [error_n], 0 + je @f + mov edx, 0xFFAAAA + + @@: + mcall SF_DRAW_RECT, , < 9, 28> + mcall , , < 9, 1>, [scn.gui_tb_in_shd] + mcall , , < 10, 27> + + mov ebx, LIST_X + LIST_ITEM_W - 12 + sub ebx, [ans.size] + shl ebx, 16 + add ebx, 16 + mov ecx, [scn.gui_intext] + add ecx, 0x10000000 + or ecx, 1 shl 31 + mcall SF_DRAW_TEXT, , , ans.buffer + + mcall , , [scn.gui_intext], btn_clr, 1 + add ebx, 1 shl 16 + mcall + + mcall SF_DEFINE_BUTTON, , <9, 27>, 4 + BT_HIDE + + mov ebx, LIST_ITEM_W - 18 + sub ebx, [ans.size] + cmp ebx, 24 + jg @f + mov ebx, 24 + + @@: + mov [edb1.width], ebx + m2m [edb1.color] , [scn.gui_face] + m2m [edb1.focus_border_color], [scn.gui_face] + cmp [error_n], 0 + je @f + mov [edb1.color] , 0x00FFAAAA + mov [edb1.focus_border_color], 0x00FFAAAA + + @@: + invoke editbox.draw, edb1 + ret + +endp + +; ==================================================================== + +proc draw_button, x, y + + mcall SF_DEFINE_BUTTON, <[x], KEYB_BTN_W>, <[y], KEYB_BTN_H>, [but_id], [but_c] + + mov ebx, [x] + add ebx, KEYB_BTN_W/2-4 + + shl ebx, 16 + add ebx, [y] + add ebx, KEYB_BTN_H/2 - 6 + or [but_tc], 0x01000000 ; use bigger font + mcall SF_DRAW_TEXT, , [but_tc], [txt_id], [txt_size] + + mov eax, [txt_size] + add [txt_id], eax + inc dword [but_id] + + ret + +endp + +; ==================================================================== + +proc draw_keyb + + mcall SF_DEFINE_BUTTON, , <8, 29>, 250, [sc.work_light] + mov ecx, [sc.work_text] + or ecx, 0x10000000 + mcall SF_DRAW_TEXT, <(KEYB_BTN_W + GAP - engineering_len*2)*2 - GAP/2 + KEYBOARD_X, KEYB_BTN_H / 2 - 10 + 8>, , engineering_str, engineering_len + + mov [txt_size], 1 + mov [but_id], 0x0000000A + mov [txt_id], buttons + + m2m [but_c], [sc.work] + m2m [but_tc], [sc.work_text] + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*1 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4 + + mov [but_c] , 0x00F0969D + mov [but_tc], 0x00FFFFFF + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y +(KEYB_BTN_H + GAP)*4 + + m2m [but_c] , [sc.work_button] + m2m [but_tc], [sc.work_button_text] + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + KEYB_BTN_H + GAP + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + KEYB_BTN_H + GAP + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + KEYB_BTN_H + GAP + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3 + stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4 + + ret + +endp + +; ==================================================================== + +proc draw_list + + ; BACKGROUND + mov eax, SF_DRAW_RECT + mov ebx, LIST_X shl 16 + LIST_ITEM_W + mov ecx, LIST_Y shl 16 + LIST_ITEM_H + mov edx, [sc.work_light] + mov edi, LIST_ITEM_COUNT + + @@: + mcall + ; draw separator { + push ecx edx + sub ecx, LIST_ITEM_H - 1 + mov edx, [sc.work_dark] + mcall + ; } + pop edx ecx + add ecx, LIST_ITEM_H shl 16 + + .next: + dec edi + cmp edi, 0 + jne @b + + mcall , , , [sc.work_dark] + mcall , , + mcall , , + + ; BUTTONS + mov eax, SF_DEFINE_BUTTON + mov ebx, LIST_X shl 16 + (LIST_ITEM_W - 1) + mov ecx, LIST_Y shl 16 + LIST_ITEM_H + mov edx, 0x60 + BT_HIDE + mov edi, LIST_ITEM_COUNT + + @@: + mcall + add ecx, LIST_ITEM_H shl 16 + inc edx + dec edi + cmp edi, 0 + jne @b + + ; TEXT + mov eax, SF_DRAW_TEXT + mov ebx, (LIST_X + LIST_X) shl 16 + LIST_Y + LIST_TEXT_Y + 1 + mov ecx, [sc.work_text] + mov edi, LIST_ITEM_COUNT + + @@: + or ecx, 1 shl 31 + mov edx, history + + @@: + add ecx, 0x10000000 + mcall + + push ebx + add ebx, (LIST_ITEM_W - 8) shl 16 + mov esi, [edx + 508] + shl esi, 16 + sub ebx, esi + add edx, 480 + mcall + pop ebx + + add edx, 32 + add ebx, LIST_ITEM_H + + and ecx, 0xFFFFFF + cmp ecx, LIST_ITEM_TEXT2 + je .set_color_to_2_txt + mov ecx, LIST_ITEM_TEXT2 + jmp .next_txt + + .set_color_to_2_txt: + mov ecx, LIST_ITEM_TEXT1 + + .next_txt: + or ecx, 1 shl 31 + + dec edi + cmp edi, 0 + jne @b + + ret + +endp + +; ==================================================================== + +proc str_len uses ebx, str + + xor eax, eax + mov ebx, [str] + + @@: + cmp [ebx], byte 0 + je @f + inc eax + inc ebx + jmp @b + + @@: + ret + +endp + +; ==================================================================== + +proc str_cpy uses eax ebx ecx, from, to + + mov eax, [from] + mov ebx, [to] + + @@: + cmp [eax], byte 0 + je @f + mov cl, [eax] + mov [ebx], cl + inc eax + inc ebx + jmp @b + + @@: + mov [ebx], byte 0 + ret + +endp + +; ==================================================================== + +if lang eq ru_RU + + engineering_str cp866 "╨Ш╨╜╨╢╨╡╨╜╨╡╤А╨╜╤Л╨╣ ╤А╨╡╨╢╨╕╨╝" + engineering_len = $ - engineering_str + +else if lang eq es_ES + + engineering_str db " Modo ingeniero " + engineering_len = $ - engineering_str +else + + engineering_str db "Engineering calc" + engineering_len = $ - engineering_str + +endf + +; ==================================================================== + +f70_calc: + dd SSF_START_APP + dd 0 + dd 0 + dd 0 + dd 0 + db '/sys/calc', 0 + +; system colors internal +scn: + .gui_tb_in_shd dd 0x00CED0D0 + .gui_face dd 0x00FAF8FA + .gui_text dd 0x10373C42 + .gui_intext dd 0x005F5F5F + .gui_select dd 0x00C7C9C9 + +; ==================================================================== + +I_END: + +rb 2048 + +STACKTOP: + +exp rb 480 +exp_pos rd 1 +exp_lvl rd 1 +abs_lvl rd 1 +group rd 1 + +ans.buffer: rb 480 +ans.size rd 1 +error_n rd 1 + +timer rd 1 +but_id rd 1 +but_c rd 1 +but_tc rd 1 +txt_id rd 1 +txt_size rd 1 + +history rb 512 * LIST_ITEM_COUNT + rb 512 + +sc system_colors + +MEM: diff --git a/programs/other/cnc_control/cnc_control.asm b/programs/other/cnc_control/cnc_control.asm index d9d4b18c1..a05ad6cfd 100644 --- a/programs/other/cnc_control/cnc_control.asm +++ b/programs/other/cnc_control/cnc_control.asm @@ -22,7 +22,7 @@ include '../../KOSfuncs.inc' include '../../load_img.inc' include '../../load_lib.mac' include '../../develop/libraries/libs-dev/libimg/libimg.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include 'lang.inc' include 'cnc_control.inc' include '../../develop/info3ds/info_fun_float.inc' diff --git a/programs/other/cnc_editor/cnc_editor.asm b/programs/other/cnc_editor/cnc_editor.asm index 0511c994f..c0de7f21a 100644 --- a/programs/other/cnc_editor/cnc_editor.asm +++ b/programs/other/cnc_editor/cnc_editor.asm @@ -15,7 +15,7 @@ include '../../KOSfuncs.inc' include '../../load_img.inc' include '../../load_lib.mac' include '../../develop/libraries/libs-dev/libimg/libimg.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include 'lang.inc' include 'cnc_editor.inc' include '../../develop/info3ds/info_fun_float.inc' diff --git a/programs/other/ha/HACONFIG.ASM b/programs/other/ha/HACONFIG.ASM index c24b4fa10..e2105ccbe 100644 --- a/programs/other/ha/HACONFIG.ASM +++ b/programs/other/ha/HACONFIG.ASM @@ -1,1807 +1,1807 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Compile with FASM -; Version 0.3.9: Apr 11, 2020 - -; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage -; 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. - -; THE SOFTWARE IS PROVIDED УAS ISФ, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -; -------------------------------------------------------------------------------------- - -;P.S. ╩юфє ЄЁхсєхЄё  юяЄшьшчрЎш  ш фюЁрсюЄър (ёь. Єхьє ЇюЁєьр) -format binary as "" ; Binary file format without extension -use32 ; Tell compiler to use 32 bit instructions -org 0 ; the base address of code, always 0x0 - -; Зруюыютюъ шёяюыэ хьюую Їрщыр ╩юышсЁш╬╤ -db 'MENUET01' -dd 1 -dd START -dd I_END -dd MEM -dd STACKTOP -dd 0, sys_path - -; ═рўрыю юсырёЄш ъюфр -include 'lang.inc' ;яюффхЁцър  ч√ъют яЁш ъюьяшы Ўшш -include '../../macros.inc' -include '../../proc32.inc' -include '../../dll.inc' -include '../../KOSfuncs.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;ъюьяюэхэЄ√ checkBox ш editBox -include '../../load_lib.mac' ;ьръЁюё фы  чруЁєчъш сшсышюЄхъ -@use_library - -KMENUITEM_NORMAL equ 0 -KMENUITEM_SUBMENU equ 1 -KMENUITEM_SEPARATOR equ 2 - -Otstup = 30 - -START: - call copyKill ;яЁюёЄхщ°р▀ чр∙шЄр юЄ чряєёър тЄюЁющ ъюяшш яЁшыюцхэш▀ - mcall 68, 11 ;шэшЎшрышчрЎш▀ ъєўш - - ;mcall 48,3,sc,sizeof.system_colors ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр - mov eax,48 ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр - mov ebx,3 - mov ecx, sc - mov edx, sizeof.system_colors - mcall - - stdcall dll.Load, @IMPORT - or eax, eax - jnz exit - - mov eax,40 ;єёЄрэютшЄ№ ьрёъє фы▀ юцшфрхь√ї ёюс√Єшщ - mov ebx,0x27 ;ёшёЄхьр сєфхЄ ЁхрушЁютрЄ№ Єюы№ъю эр ёююс∙хэшх ю яхЁхЁшёютъх, эрцрЄр ъэюяър, юяЁхфхы▐ээр▀ Ёрэхх, ёюс√Єшх юЄ ь√°ш (ўЄю-Єю ёыєўшыюё№ - эрцрЄшх эр ъэюяъє ь√°ш шыш яхЁхьх∙хэшх; ёсЁрё√трхЄё▀ яЁш яЁюўЄхэшш) - mcall - - load_libraries l_libs_start,load_lib_end ;чруЁєчър сшсышюЄхъ(ш) - stdcall [OpenDialog_Init],OpenDialog_data ;яюфуюЄютър фшрыюур - - ;mode menu - stdcall [kmenu_init], sc ;kmenu initialisation - stdcall [ksubmenu_new] - mov [modeMenu], eax - stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu0, 110 - stdcall [ksubmenu_add], [modeMenu], eax - stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu1, 111 - stdcall [ksubmenu_add], [modeMenu], eax - stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu2, 112 - stdcall [ksubmenu_add], [modeMenu], eax - stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu3, 113 - stdcall [ksubmenu_add], [modeMenu], eax - stdcall [kmenuitem_new], KMENUITEM_SUBMENU, valueModeMenu1, [modeMenu] - - call loadConfig ;чруЁєцрхь ъюэЇшуєЁрЎш■ шч Їрщыр, хёыш эхЄ - Єю т√ёЄрты▀хь ярЁрьхЄЁ√ яю єьюыўрэш■ - call draw_window ;юЄЁшёютрЄ№ юъэю яЁшыюцхэш▀ - -; ╬сЁрсюЄър Ўшъыр ёюс√Єшщ -event_wait: - mov eax, 10 ; function 10 : wait until event - mcall ; event type is returned in eax - - cmp eax, 1 ; Event redraw request ? - je red ; Expl.: there has been activity on screen and - ; parts of the applications has to be redrawn. - - cmp eax, 2 ; Event key in buffer ? - je key ; Expl.: User has pressed a key while the - ; app is at the top of the window stack. - - cmp eax, 3 ; Event button in buffer ? - je button ; Expl.: User has pressed one of the - ; applications buttons. - - invoke edit_box_mouse, editLU ;яЁютхЁър ёюс√Єшщ ь√°ш фы▀ editBox'ют - invoke edit_box_mouse, editLD - invoke edit_box_mouse, editRU - invoke edit_box_mouse, editRD - ;stdcall [kmainmenu_dispatch_cursorevent], [modeMenu] ;яЁютхЁър ь√°ш фы▀ ъюьсюсюъёр - invoke edit_box_mouse, editRadius - - jmp event_wait - - -red: ;юсЁрсюЄър ёюс√Єш▀ яхЁхЁшёютъш юъэр - call draw_window - jmp event_wait - -key: ; Keypress event handler - mov eax, 2 ; The key is returned in ah. The key must be - mcall ; read and cleared from the system queue. - - invoke edit_box_key, editLU - invoke edit_box_key, editLD - invoke edit_box_key, editRU - invoke edit_box_key, editRD - invoke edit_box_key, editRadius - - cmp eax, 1 - je event_wait - cmp word[hkSymbol], 0 - jne event_wait - cmp al, 0 - jne .next - mov byte[hkSymbol], ah - - push eax ecx esi ;ёюїЁрэ▀хь ёърэъюф ъыртш°ш - shr eax, 16 - mov byte[keyscan], al - mov ecx, 0 - mov cl, al ;byte[keyscan] - mov esi, keystr.data - call IntToStr - - ;ёўшЄрхь яюыєўхээ√щ ЁрчьхЁ ёЄЁюъш - xor ecx, ecx - mov esi, keystr.data - @@: - cmp byte[esi], 0 - je @f - inc esi - inc ecx - ;cmp ecx, 4 - ;je @f - jmp @b - @@: - ;ш ёюїЁрэ▀хь хую - mov dword[keystr.size], ecx - - pop esi ecx eax - jmp red -.next: - ;cmp al, 2 - ;jne @f - ;cmp ah, 0 - ;jne @f - ;ёўшЄ√трхь єяЁрты▀■∙шх ъыртш°ш - ;shr eax, 16 - ;bt eax, 0 ;left shift - ;jne @f - ;mov byte[hkSymbol], 2 - ;jmp red -@@: - jmp event_wait ; Just read the key, ignore it and jump to event_wait. - -button: ; Buttonpress event handler - mov eax,17 ; The button number defined in window_draw - mcall ; is returned to ah. - - cmp ah,1 ; button id=1 ? - jne noclose -exit: - mov eax,-1 ; Function -1 : close this program - mcall -noclose: - cmp ah, 2 ;ъэюяър "╧ЁшьхэшЄ№" - jne @f ;butend - call applyButton ;т√чют эр°хую юсЁрсюЄўшър эрцрЄш▀ ъэюяъш - jmp event_wait -@@: - cmp ah, 4 - jne @f - mov byte[editID], 4 - call but_open_dlg - jmp event_wait -@@: - cmp ah, 5 - jne @f - mov byte[editID], 5 - call but_open_dlg - jmp event_wait -@@: - cmp ah, 6 - jne @f - mov byte[editID], 6 - call but_open_dlg - jmp event_wait -@@: - cmp ah, 7 - jne @f - mov byte[editID], 7 - call but_open_dlg - jmp event_wait -@@: - cmp ah, 8 - jne @f - push eax ebx ecx - mcall 9, pi, -1 ;get window coord - - mov eax, dword[pi+34] - add eax, buttonModeX ;+ 5 - mov word[coordModeMenu.x], ax - - mov eax, dword[pi+38] - add eax, buttonModeY + 20 ;20 - ¤Єю ёьх∙хэшх тёяы√тр■∙хую ьхэ■ - mov word[coordModeMenu.y], ax - - stdcall [ksubmenu_draw], [modeMenu], coordModeMenu - pop ecx ebx eax - jmp event_wait -@@: - cmp ah, 9 - jne @f - mov word[hkSymbol], 0 - jmp red ;event_wait -@@: - cmp ah, 110 - jne @f - mov byte[mode], 48 ;'0' - jmp event_wait -@@: - cmp ah, 111 - jne @f - mov byte[mode], 49 ;'1' - jmp event_wait -@@: - cmp ah, 112 - jne @f - mov byte[mode], 50 ;'2' - jmp event_wait -@@: - cmp ah, 113 - jne @f - mov byte[mode], 51 ;'3' - jmp event_wait -@@: -butend: - jmp event_wait ;this is for ignored events, useful at development - - - -;шь▀ ъюэЇшуєЁрЎшюээюую Їрщыр -fileName: db 'SETTINGS/HA.CFG', 0 - -;ёЄЁєъЄєЁр фы▀ ёючфрэш▀/яхЁхчряшёш Їрщыр -createFile: - .func dd 2 ;эюьхЁ яюфЇєэъЎшш - .re dd 0, 0 ;чрЁхчхЁтшЁютрэю - .size dd 0 ;ёъюы№ъю срщЄ яшёрЄ№ - .data_adr dd 0 ;єърчрЄхы№ эр фрээ√х - .path db 0 - .path_adr dd fileName ;яєЄ№ - -;ёЄЁюър ярЁрьхЄЁют яю єьюыўрэш■ ш х▐ ЁрчьхЁ -defaultDataForConfig db 121,13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'Space',13,10,'57',13,10,'10',13,10,'s',13,10 -defaultDataSize = 85 ;48+19+4 - - -copyParam: ;ъюяшЁєхЄ ярЁрьхЄЁ(ъюьрэфє чряєёър) т сєЇхЁ (ёь. фры№°х) - push esi ebx ecx - mov ecx, dword[ebx] ;ўшЄрхь ЁрчьхЁ ёЄЁюъш - - cmp ecx, 0 ;яєёЄр ыш ёЄЁюър? - jne copyParam.copy ;хёыш эхЄ, Єю яхЁхїюфшь ъ ъюяшЁютрэш■ ёюфхЁцшьюую ёЄЁюъш (ъ Ўшъыє) - - mov byte[eax], '-' ;хёыш цх яєёЄю, Єю чрьхэ▀хь ёшьтюыюь ьшэєё '-' - inc eax - ;jmp copyParam.copyEnd ;ш т√їюфшь - ;фрыхх т эрўрых Ўшъыр яЁюшчющф▐Є ёЁртэхэшх ш т√їюф - -.copy: ;ъюяшЁєхь ёшьтюы√ - cmp ecx, 0 - je copyParam.copyEnd - mov bl, byte[esi] - mov byte[eax], bl - dec ecx - inc eax - inc esi - jmp copyParam.copy -.copyEnd: - pop ecx ebx esi - ret - - -addPerenos: ;фюсрты▀хЄ яхЁхэюё ёЄЁюъш т сєЇхЁ - mov byte[eax], 13 - inc eax - mov byte[eax], 10 - inc eax - ret - -;юсЁрсюЄўшъ ъэюяъш "╧ЁшьхэшЄ№" -applyButton: - push eax ebx ecx - ;mov dword[createFile.data_adr], defaultDataForConfig - ;mov dword[createFile.size], defaultDataSize - - ;т√ўшёышь ЁрчьхЁ Їрщыр ъюэЇшуєЁрЎшш т срщЄрї - mov ecx, 9*2+1 ;1 срщЄ эр ёюёЄю▀эшх ръЄштэюёЄш ш 9 ярЁ яхЁхэюёют ёЄЁюъ (ёшьтюы√ 13, 10) - add ecx, dword[editLU.size] ;яы■ё ЁрчьхЁ ърцфющ ёЄЁюъш т срщЄрї - add ecx, dword[editLD.size] - add ecx, dword[editRU.size] - add ecx, dword[editRD.size] ;dataBuffer.size4] - add ecx, dword[editRadius.size] - add ecx, dword[hkSize] ;ЁрчьхЁ шьхэш ръЄштрЎшюээющ ъэюяъш - add ecx, dword[keystr.size] ;ЁрчьхЁ ёърэъюфр ръЄштрЎшюээющ ъэюяъш - inc ecx ; х∙▐ 1 срщЄ фы▀ їЁрэхэш▀ ЁрчьхЁр ¤ыхьхэЄют - - ;cmp dword[keystr.size], 3 - ;jbe @f - ;mcall -1 - ;@@: - - ;хёыш чрфрэ√ яєёЄ√х ёЄЁюъш, Єю ь√ ртЄюьрЄшўхёъш фюсрты▀хь чэръ ьшэєё, чэрўшЄ ЁрчьхЁ +1 срщЄ - cmp dword[editLU.size], 0 - jne @f - inc ecx -@@: - cmp dword[editLD.size], 0 - jne @f - inc ecx -@@: - cmp dword[editRU.size], 0 - jne @f - inc ecx -@@: - cmp dword[editRD.size], 0 - jne @f - inc ecx -@@: - - ;ЄхяхЁ№ ЁрчьхЁ Їрщыр ъюэЇшуєЁрЎшш т ecx - mov dword[createFile.size], ecx ;яюыюцшь ЁрчьхЁ срщЄ т ёЄЁєъЄєЁє ёючфрэш▀/яхЁхчряшёш Їрщыр - mcall 68, 12, ecx ;т√фхы▀хь сыюъ ярь▀Єш яюф сєЇхЁ ёюфхЁцшьюую - mov dword[createFile.data_adr], eax ;ёюїЁрэ▀хь рфЁхё сєЇхЁр т ёЄЁєъЄєЁє - - ;чряюыэшь сєЇхЁ ёюфхЁцшьюую: - push ebx ;ёюїЁрэ▀хь т√сЁрээ√щ Ёхцшь - mov bl, byte[mode] - mov byte[eax], bl - pop ebx - - inc eax - call addPerenos - - push esi ebx - call UpdateEditsSizes ;юсэютшЄ№ ЁрчьхЁ√ ЄхъёЄр т edit'рї - - mov esi, dataBuffer.1 ;editLU.text - mov ebx, dataBuffer.size1 ;editLU.size - call copyParam - call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш - - mov esi, dataBuffer.2 - mov ebx, dataBuffer.size2 - call copyParam - call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш - - mov esi, dataBuffer.3 - mov ebx, dataBuffer.size3 - call copyParam - call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш - - mov esi, dataBuffer.4 - mov ebx, dataBuffer.size4 - call copyParam - call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш - - ;ёюїЁрэ▀хь ъэюяъє ръЄштрЎшш - call saveKey - call addPerenos - - ;ёюїЁрэ▀хь ёърэъюф ъэюяъш - mov esi, keystr.data ;чряшё√трхь ёЄЁюъє keystr т Їрщы - xor ebx, ebx - @@: - cmp byte[esi], 0 - je @f - mov bl, byte[esi] - mov byte[eax], bl - inc eax - inc esi - cmp esi, keystr.size-1 - jae @f - jmp @b - @@: - call addPerenos - - ;ёюїЁрэ▀хь Ёрфшєё - ;!!! хёыш Ёрфшєё юёЄртыхэ яєёЄ√ь, Єю эєцэю ёюїЁрэ▀Є№ чэрўхэшх яю єьюыўрэш■ (ёхщўрё яш°хЄё▀ '-') - mov esi, radiusBuffer.data - mov ebx, editRadius.size ;radiusBuffer.size - call copyParam - call addPerenos - - ;фюсрты▀хь ЁрчьхЁ ¤ыхьхэЄют - push ebx ;ёюїЁрэ▀хь т√сЁрээ√щ Ёхцшь - mov bl, byte[sizeStyle] - mov byte[eax], bl - pop ebx - inc eax - call addPerenos - - pop ebx esi - - - mov ebx, createFile - mcall 70 - cmp eax, 0 - je .end - ;шэрўх чфхё№ эєцэю т√тхёЄш юъэю ё ю°шсъющ !!! -.end: - mcall 68, 13, dword[createFile.data_adr] ;юётюсюцфрхь ярь▀Є№ яюф сєЇхЁ - call finishHotAnglesApp ;чртхЁ°рхь ЁрсюЄє тёхї ъюяшщ ёхЁтшёр @HA - call loadConfig ;яхЁхчруЁєцрхь Їрщы ъюэЇшур - call draw_window ;яхЁхЁшёют√трхь юъэю - call startHotAnglesApp ;яхЁхчряєёърхь @HA - pop ecx ebx eax - ret - - - - - - -compareBytes2: - push edi esi ecx ebx - xor eax, eax - mov ecx, 10 ;max ЁрчьхЁ ёЄЁюъ 11 -@@: - mov bl, byte[edi] - cmp bl, byte[esi] - jne compareBytes.no - inc edi - inc esi - cmp ecx, 0 - je @f - dec ecx - jmp @b -.no: - mov eax, 1 -@@: - pop ebx ecx esi edi - ret - - -finishHotAnglesApp: - ;эрїюфшь тёх ъюяшш яЁшыюцхэш▀ яю шьхэш ш чртхЁ°рхь шї - push eax ebx ecx esi edi - ;єърчрЄхыш, ъюЄюЁ√х эшъюуфр эх ьхэ▀■Єё▀: - mov esi, startAppData.file_name ;яхЁтр▀ ёЄЁюър - шёъюьюх шь▀ яЁшыюцхэш▀ - mov edi, buf ;тЄюЁр▀ ёЄЁюър - шь▀ Єхъє∙хую ёыюЄр - add edi, 10 - - mov ecx, 1 -@@: - mcall 9, buf, ecx ;яюыєўрхь фрээ√х юўхЁхфэюую ёыюЄр - mov dword[slotMax], eax - - call compareBytes2 ;ёЁртэштрхь шь▀ - cmp eax, 0 - jne finishHotAnglesApp.next ;хёыш эх ёютярыю, Єю яхЁхїюфшь эр ёыхфє■∙шщ ёыюЄ - - mcall 18, 2, ecx ;шэрўх чртхЁ°рхь ёыюЄ -.next: - inc ecx - cmp ecx, dword[slotMax] - ja @f - jmp @b -@@: - pop edi esi ecx ebx eax - ret - -startHotAnglesApp: - ;чряєёърхь яЁшыюцхэшх чрэютю - push eax ebx - mcall 70, startAppData - cmp eax, 0 - ja @f ;хёыш eax>0, Єю єёях°эю чряє∙хэю - ;!!! шэрўх ЄєЄ яхўрЄрхь ю°шсъє -@@: - pop ebx eax - ret - -startAppData: - .subfunction dd 7 - .flags dd 0 - .param dd 0 - .rezerv dd 0, 0 - .full_name db '/sys/' - .file_name db '@HA', 0 - -UpdateEditsSizes: - push eax - mov eax, dword[editLU.size] - mov dword[dataBuffer.size1], eax - - mov eax, dword[editLD.size] - mov dword[dataBuffer.size2], eax - - mov eax, dword[editRU.size] - mov dword[dataBuffer.size3], eax - - mov eax, dword[editRD.size] - mov dword[dataBuffer.size4], eax - - mov eax, dword[editRadius.size] - mov dword[radiusBuffer.size], eax - - pop eax - ret - -fileAdr dd 0 - -loadConfig: - push eax ebx ecx edx - mcall 68, 27, fileName ;чруЁєцрхь ъюэЇшуєЁрЎшюээ√щ Їрщы т ╬╟╙ - mov dword[fileAdr], eax ;ёюїЁрэ▀хь рфЁхё сыюър ярь▀Єш Їрщыр - cmp eax, 0 - je loadConfig.default ;хёыш Їрщыр ъюэЇшуєЁрЎшш эхЄ, Єю ёЄртшь эрёЄЁющъш яю єьюыўрэш■ - ;шэрўх фрээ√х чруЁєцхэ√ т ╬╟╙, ЁрчьхЁ т edx - cmp edx, 0 ;хёыш Їрщы яєёЄ, т э▐ь эхЄ фрээ√ї, Єю ёЄртшь эрёЄЁющъш яю єьюыўрэш■ - je loadConfig.default -.start: - add edx, eax ;ъырф▐ь т edx - рфЁхё ъюэЎр ъюэЇшу.фрээ√ї - -.chStart: - - push ebx - mov bl, byte[eax] - cmp bl, 48 ; хёыш чэрўхэшх т√їюфшЄ чр фюяєёЄшь√х яЁхфхы√, Єю яЁютхЁ▀хь эр 'n' (фы▀ ёютьхёЄшьюёЄш) - jb loadConfig.checkN - cmp bl, 51 - ja loadConfig.checkN - - mov byte[mode], bl ;шэрўх єёЄрэртыштрхь ¤ЄюЄ Ёхцшь ъръ хёЄ№ - jmp loadConfig.modeEnd ;ш шф▐ь фры№°х -.checkN: - cmp bl, 'n' ;хёыш n - Єю Ёхцшь "юЄъы■ўхэю" - jne @f - mov byte[mode], 48 ;'0' - jmp loadConfig.modeEnd -@@: - cmp bl, 'y' ;хёыш y - Єю ъырёёшўхёъшщ Ёхцшь - jne @f - mov byte[mode], 49 ;'1' - jmp loadConfig.modeEnd -@@: - mov byte[mode], 48 ;'0' шэрўх яю єьюыўрэш■ юЄъы■ўхэю - ;mov byte[mode], 49 ;'1' шэрўх яю єьюыўрэш■ тъы■ў▐э ъырёёшўхёъшщ Ёхцшь ЁрсюЄ√ -.modeEnd: - pop ebx - ;jmp loadConfig.end ;ъюьрэфр фы▀ єфюсёЄтр юЄырфъш ш яюшёър ю°шсюъ - - ;ъюяшЁєхь ёюфхЁцшьюх ёЄЁюъ т сєЇхЁ - push edi esi ecx ebx eax - ;шэшЎшрышчшЁєхь єърчрЄхыш эр рфЁхёр сєЇхЁр ёЄЁюъш ш х▐ ЁрчьхЁр - mov edi, dataBuffer.1 - mov esi, dataBuffer.size1 - ;ecx - ёў▐Єўшъ срщЄ т ёЄЁюъх -.block: - xor ecx, ecx ;юсэєы▀хь ёў▐Єўшъ - inc eax - cmp byte[eax], 10 ;хёыш юўхЁхфэющ ъюф ёшьтюыр 10 шыш 13, Єю яЁюяєёърхь ёшьтюы√ - je loadConfig.block ;фю яхЁтюую юЄышўэюую юЄ эшї - cmp byte[eax], 13 - je loadConfig.block - - ; ёшьтюы юЄышўхэ юЄ яхЁхэюёр ёЄЁюъш ш тючтЁрЄр ърЁхЄъш - эрўшэрхь ъюяшЁютрЄ№ юЄё■фр т сєЇхЁ - mov bl, byte[eax] - mov byte[edi], bl - inc edi - inc eax - inc ecx ;єтхышўштрхь ёў▐Єўшъ ёшьтюыют т ёЄЁюъх - - ;шф▐ь фю ъюэЎр ¤Єющ ёЄЁюъш: яюър эх тёЄЁхЄшь юўхЁхфэющ 10, 13, 0 шыш file end -.while: ;ш ъюяшЁєхь тё▐ т сєЇхЁ - cmp eax, edx ;яЁютхЁ▀хь чръюэўшыё▀ ыш Їрщы, р ъюэЎр ёЄЁюъш эх с√ыю !!! - ja loadConfig.ura - cmp byte[eax], 10 - je loadConfig.ura - cmp byte[eax], 0 - je loadConfig.ura - cmp byte[eax], 13 - je loadConfig.ura - - mov bl, byte[eax] - mov byte[edi], bl - inc edi - inc eax - inc ecx - cmp ecx, 511 - jae loadConfig.ura - jmp loadConfig.while -.ura: - mov byte[edi], 0 ;ъырф▐ь чртхЁ°р■∙шщ 0 т ёЄЁюъє - mov dword[esi], ecx ;ёюїЁрэ▀хь ЁрчьхЁ ёЄЁюъш - add esi, 4 ;яхЁхїюфшь эр ЁрчьхЁ ёыхфє■∙хую сєЇхЁр - sub edi, ecx ;яхЁхїюфшь эр ёыхфє■∙шщ сєЇхЁ - add edi, 512 - ;xor ecx, ecx ;юсэєы▀хь ЁрчьхЁ ёЄЁюъш - - cmp edi, dataBuffer.size1 ;хёыш ¤Єю с√ы яюёыхфэшщ сєЇхЁ (ш ь√ т√°ыш чр рфЁхёр ЁрчьхЁют сєЇхЁют), Єю т√їюфшь - jb loadConfig.block - - call readOptKey ;ёўшЄ√трхь ъыртш°є - call gotoEndString - - ;ёўшЄ√трхь ёърэъюф ъыртш°ш - call readScanKey - call gotoEndString - - call readOptRadius ;ёўшЄ√трхь чэрўхэшх Ёрфшєёр фы▀ mode 3 - call gotoEndString - call readOptSize ;ёўшЄ√трхь ЁрчьхЁ ¤ыхьхэЄют - call gotoEndString - - pop eax ebx ecx esi edi - - jmp loadConfig.end -.default: - mov eax, defaultDataForConfig - mov edx, defaultDataSize - jmp loadConfig.start -.end: - mov ecx, dword[fileAdr] ;хёыш Їрщы с√ы чруЁєцхэ, Єю - cmp ecx, 0 - je @f - mcall 68, 13, ecx ;т√уЁєцрхь Їрщы шч ярь▀Єш -@@: - call updateParams ;яЁшьхэ▀хь эрёЄЁющъш ърцфюую сєЇхЁр - call setMySize ;яЁшьхэ▀хь эрёЄЁющъш ЁрчьхЁр ¤ыхьхэЄют - pop edx ecx ebx eax - ret - - -setMySize: - push eax - ;т√ёЄрты▀хь mysize т чртшёшьюёЄш юЄ чэрўхэш▀ sizeStyle - cmp byte[sizeStyle], '0' - jb @f - cmp byte[sizeStyle], '7' - ja @f - mov eax, 0 ;хёыш чэрўхэшх ЁрчьхЁр чрфрэю, Єю хую ш т√ёЄрты▀хь - mov al, byte[sizeStyle] - sub al, '0' - jmp .end -@@: - cmp byte[sizeStyle], 'a' - je .auto - ;cmp byte[sizeStyle], 's' - ;je .system -.system: ;шэрўх чэрўхэшх яю єьюыўрэш■: s - ёшёЄхьэр▀ -; push ebx ecx - ;!!! -; mov eax, 9 -; mcall 48, 11 ;яюыєўрхь ёшёЄхьэ√щ ЁрчьхЁ °ЁшЇЄр - ;eax - т√ёюЄр °ЁшЇЄр т яшъёхы▀ї -; mov ecx, eax -; push eax -; mcall 48, 12, ecx ;яЁшьхэ▀хь ЁрчьхЁ °ЁшЇЄр -; pop eax -; pop ecx ebx - ;temp fix - фхышь эр Єхъє∙шщ ЁрчьхЁ °ЁшЇЄр and -1 -; push ebx edx -; mov ebx, 9 - ;div ebx -; pop edx ebx - ;cmp eax, 0 - ;je .end - ;dec eax - mov eax, 0 ;xor eax, eax ;test temp - jmp .end -.auto: ;a - т√ёЄрты▀хь т чртшёшьюёЄш юЄ ЁрчЁх°хэш▀ ¤ъЁрэр - ;!!! - mcall 14 - push ebx - xor ebx, ebx - mov bx, ax - shr eax, 16 - cmp ax, bx ;яюыєўрхь сюы№°шщ ЁрчьхЁ ёЄюЁюэ√ - jae .a - mov ax, bx -.a: - pop ebx - cmp ax, 1919 ;ЁрчьхЁ√ яюыєўхээ√х т√°х юЄ 0 ш эр 1 ьхэ№°х - jb .size0 - cmp ax, 2047 - jb .size1 - cmp ax, 4095 - jb .size2 - cmp ax, 8191 - jb .size3 - - jmp .size4 - -.size0: - mov eax, 0 - jmp .end -.size1: - mov eax, 1 - jmp .end -.size2: - mov eax, 2 - jmp .end -.size3: - mov eax, 3 - jmp .end -.size4: - mov eax, 4 - jmp .end -.size5: - mov eax, 5 - jmp .end -.size6: - mov eax, 6 - jmp .end -.size7: - mov eax, 7 - jmp .end - -;.default: -; mov eax, 1 -.end: - mov byte[mysize], al ;mov dword[mysize], eax - pop eax - ret - - -readScanKey: - ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых - cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю - ja .default ;эрёЄЁющъш яю єьюыўрэш■ - cmp byte[eax], 10 - je @f - cmp byte[eax], 0 - je @f - cmp byte[eax], 13 - je @f - - push ecx ebx esi - mov ecx, 0 ;xor ecx, ecx - mov esi, keystr.data -.copy: - mov bl, byte[eax] - cmp bl, 0 - je .copyEnd - cmp bl, 10 - je .copyEnd - cmp bl, 13 - je .copyEnd - cmp esi, keystr.size-1 - jae .copyEnd - mov byte[esi], bl - inc esi - inc eax - inc ecx - jmp .copy -.copyEnd: - mov byte[esi], 0 - mov dword[keystr.size], ecx - pop esi ebx ecx - - jmp .end -@@: - inc eax - jmp readScanKey -.default: - mov byte[keyscan], 57 - mov word[keystr.data], '57' - mov byte[keystr.data+2], 0 - mov dword[keystr.size], 2 -.end: - ret - -readOptKey: ;1;3;4;5 - space or shift - ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых - cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю - ja .default ;эрёЄЁющъш яю єьюыўрэш■ - cmp byte[eax], 10 - je @f - cmp byte[eax], 0 - je @f - cmp byte[eax], 13 - je @f - ;шэрўх ўшЄрхь ъыртш°є ш т√їюфшь - cmp dword[eax], 'Ctrl' - jne .notCtrl - mov byte[hkSymbol], 3 - mov dword[hkSize], 4 - jmp .end -.notCtrl: - cmp dword[eax], 'Shif' - jne .notShift - mov byte[hkSymbol], 2 - mov dword[hkSize], 5 - jmp .end -.notShift: - cmp dword[eax], 'Spac' - jne .notSpace - mov byte[hkSymbol], 32 - mov dword[hkSize], 5 - jmp .end -.notSpace: - cmp word[eax], 'Al' - jne .notAlt - mov byte[hkSymbol], 1 - mov dword[hkSize], 3 - jmp .end -.notAlt: - ;єсхфшьё▀, ўЄю Єрь 1 ёшьтюы, р эх ёЄЁюър - cmp byte[eax+1], 10 - je .oneSymb - cmp byte[eax+1], 0 - je .oneSymb - cmp byte[eax+1], 13 - je .oneSymb - jmp .default -.oneSymb: - ;яЁютхЁ▀хь, ўЄю ёшьтюы ЁрчЁх°▐ээ√щ !!! - - ;фюсрты▀хь ёшьтюы ъръ хёЄ№ - push ebx - ;xor ebx, ebx - mov bl, byte[eax] - mov byte[hkSymbol], bl - mov dword[hkSize], 1 - pop ebx - - jmp .end -@@: - inc eax - jmp readOptKey - -.default: - mov byte[hkSymbol], 32 - mov dword[hkSize], 5 -.end: - mov byte[hkSymbol+1], 0 - ret - -;яЁюїюфшь фю ъюэЎр Єхъє∙хщ ёЄЁюъш -gotoEndString: - cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю - ja @f ;т√їюфшь - cmp byte[eax], 10 - je @f - cmp byte[eax], 0 - je @f - cmp byte[eax], 13 - je @f - ;шэрўх яхЁхїюфшь эр ёыхфє■∙шщ ёшьтюы - inc eax - jmp gotoEndString -@@: - ret - -readOptRadius: - ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых - cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю - ja .default ;эрёЄЁющъш яю єьюыўрэш■ - cmp byte[eax], 10 - je @f - cmp byte[eax], 0 - je @f - cmp byte[eax], 13 - je @f - - ;шэрўх ёўшЄ√трхь чэрўхэшх - push ebx ecx - xor ecx, ecx -.readValue: - mov bl, byte[eax] - mov byte[radiusBuffer.data+ecx], bl - inc ecx - inc eax - cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю т√їюф - ja .readEnd - cmp byte[eax], 10 - je .readEnd - cmp byte[eax], 0 - je .readEnd - cmp byte[eax], 13 - je .readEnd - cmp ecx, 6 - jae .readEnd - jmp .readValue -.readEnd: - mov byte[radiusBuffer.data+ecx], 0 - mov dword[radiusBuffer.size], ecx - pop ecx ebx - - jmp .end -@@: - inc eax - jmp readOptRadius -.default: - mov byte[radiusBuffer.data], '0' - mov byte[radiusBuffer.data+1], 0 - mov dword[radiusBuffer.size], 1 -.end: - - ret - - -readOptSize: - ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых - cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю - ja .default ;эрёЄЁющъш яю єьюыўрэш■ - cmp byte[eax], 10 - je @f - cmp byte[eax], 0 - je @f - cmp byte[eax], 13 - je @f - - ;яЁютхЁ▀хь, ўЄю ¤Єю фюяєёЄшьюх чэрўхэшх: 1-7, a, s - cmp byte[eax], 'a' - je .setValue - cmp byte[eax], 's' - je .setValue - cmp byte[eax], '0' - je .setValue - cmp byte[eax], '1' - je .setValue - cmp byte[eax], '2' - je .setValue - cmp byte[eax], '3' - je .setValue - cmp byte[eax], '4' - je .setValue - cmp byte[eax], '5' - je .setValue - cmp byte[eax], '6' - je .setValue - cmp byte[eax], '7' - je .setValue - - jmp .default ;шэрўх ёЄртшь чэрўхэшх яю єьюыўрэш■ - -.setValue: - push ebx - mov bl, byte[eax] - mov byte[sizeStyle], bl - pop ebx - - jmp .end -@@: - inc eax - jmp readOptSize -.default: - mov byte[sizeStyle], 's' ;ёшёЄхьэ√щ -.end: - ret - - - - -updateParams: ;max, size, pos - push eax - mov eax, dword[dataBuffer.size1] - mov dword[editLU.size], eax - mov dword[editLU.pos], eax - - mov eax, dword[dataBuffer.size2] - mov dword[editLD.size], eax - mov dword[editLD.pos], eax - - mov eax, dword[dataBuffer.size3] - mov dword[editRU.size], eax - mov dword[editRU.pos], eax - - mov eax, dword[dataBuffer.size4] - mov dword[editRD.size], eax - mov dword[editRD.pos], eax - - mov eax, dword[radiusBuffer.size] - mov dword[editRadius.size], eax - mov dword[editRadius.pos], eax - pop eax - ret - - - -selfName db 'HACONFIG', 0 -selfNameSize = 8 ;фю 11 byte -; -compareBytes: - push edi esi ecx ebx - mov eax, 0 ;xor eax, eax - mov ecx, selfNameSize ;max ЁрчьхЁ ёЄЁюъ 11 -@@: - mov bl, byte[edi] - cmp bl, byte[esi] - jne compareBytes.no - inc edi - inc esi - cmp ecx, 0 - je @f - dec ecx - jmp @b -.no: - mov eax, 1 -@@: - pop ebx ecx esi edi - ret -; -slotMax dd 0 -selfPID dd 0 -buf db 1024 dup(0) -copyKill: - push eax ebx ecx esi edi - - ;ёяхЁтр яЁюўЄ▐ь ётю■ шэЇюЁьрЎш■ - mcall 9, buf, -1 - mov eax, dword[buf+30] - mov dword[selfPID], eax - - ;єърчрЄхыш, ъюЄюЁ√х эшъюуфр эх ьхэ▀■Єё▀: - mov esi, selfName ;яхЁтр▀ ёЄЁюър - шь▀ Єхъє∙хую яЁшыюцхэш▀ - mov edi, buf ;тЄюЁр▀ ёЄЁюър - шь▀ Єхъє∙хую ёыюЄр - add edi, 10 - - mov ecx, 1 -@@: - mcall 9, buf, ecx - mov dword[slotMax], eax - - ;хёыш ¤Єю ь√ ёрьш, Єю яЁюяєёърхь яЁютхЁъє - mov eax, dword[buf+30] - cmp eax, dword[selfPID] - je copyKill.propusk - - call compareBytes ;ёЁртэштрхь 11 срщЄ ёЄЁюъ, Ёхчєы№ЄрЄ т eax - - cmp eax, 0 - je copyKill.selfKill - -.propusk: - inc ecx - cmp ecx, dword[slotMax] - ja @f - jmp @b - -.selfKill: - pop edi esi ecx ebx eax - mcall -1 - ret -@@: - pop edi esi ecx ebx eax - ret - - WindowsWidth = 550 - WindowsHeight = 235 -coord: ;ъююЁфшэрЄ√ юъэр яЁшыюцхэш▀ - .y dw 0 - .x dw 0 - -draw_window: - mcall 12, 1 ; Start window redraw - - ;юЄюсЁрчшь юъэю яю ЎхэЄЁє ¤ъЁрэр фы▀ ¤Єюую: - mcall 14 ;яюыєўшь ЁрчьхЁ√ ¤ъЁрэр - mov dword[coord], eax ;яюыюцшь ЁрчьхЁ√ ¤ъЁрэр т ъююЁфшэрЄ√ - shr word[coord.x], 1 ;тхЁэхх яюыюцшь шї яюыютшэє - shr word[coord.y], 1 - - ;т√ўшёы▀хь ъююЁфшэрЄ√ юъэр, ўЄюс√ юъэю с√ыю яю ёхЁхфшэх ¤ъЁрэр - sub word[coord.x], WindowsWidth/2 - sub word[coord.y], WindowsHeight/2 - - mov eax, 0 ; function 0 : define and draw window - mov ebx, 0 ; [x start] *65536 + [x size] - mov bx, word[coord.x] - shl ebx, 16 - mov bx, WindowsWidth - - mov ecx, 0 - mov cx, word[coord.y] ; [y start] *65536 + [y size] - shl ecx, 16 - mov cx, WindowsHeight - - mov edx, 0x14ffffff ; color of work area RRGGBB - ; 0x02000000 = window type 4 (fixed size, skinned window) - mov esi, 0x808899ff ; color of grab bar RRGGBB - ; 0x80000000 = color glide - mov edi, title - mcall - - invoke edit_box_draw, editLU ;Ёшёютрэшх edit box'ют - invoke edit_box_draw, editLD - invoke edit_box_draw, editRU - invoke edit_box_draw, editRD - - ;Ёшёєхь ъэюяъє ш хх ЄхъёЄ - buttonAppleY = WindowsHeight-40 - mcall 8, , , 2, 0x00AABBCC - mcall 4, , 0x10FFFFFF, buttonText, buttonTextSize - - ;Ёшёєхь х∙▐ 4 ъэюяъш фы▀ фшрыюуютюую юъэр т√сюЁр Їрщыр - ;эюьхЁр 4,5,6 ш 7 - buttonW = 30 - buttonH = 21 - ;ыхт√щ тхЁїэшщ єуюы - mcall 8, , <85,buttonH>, 4, 0x00AABBCC - ;ыхт√щ эшцэшщ єуюы - mcall 8, , <120,buttonH>, 5 - ;яЁрт√щ тхЁїэшщ єуюы - mcall 8, , <85,buttonH>, 6 - ;яЁрт√щ эшцэшщ єуюы - mcall 8, , <120,buttonH>, 7 - - ;Ёшёєхь ЄхъёЄ√ фы▀ ¤Єшї 4 ъэюяюъ - mov ecx, 0xFFFFFF ;схы√щ ЎтхЄ ЄхъёЄр - mov edx, commonButtonText ;ёЄЁюър ЄхъёЄр - mov esi, commonButtonTextSize ;ЁрчьхЁ ЄхъёЄр т ёшьтюырї - ;ъююЁфшэрЄ√ ЄхъёЄр (x, y) - deltaCommonTextX = 7 - deltaCommonTextY = 6 - mcall 4, - mcall 4, - mcall 4, - mcall 4, - - ;delete mode button, if it exist - mov edx, 0x80000008 - mcall 8 - ;draw button Mode - buttonModeX = 30 ;433 - buttonModeY = 160 ;50 - buttonModeWidth = 300 - buttonModeHeight = 20 - buttonModeTextYoffset = 3 - buttonModeTextXoffset = 5 - mcall 8, , , 8, 0x00FFFFFF - mcall 13, , , 0xAABBCC - ;draw text for button Mode - mov ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset) ;(x, y) - mov ecx, 0x10000000 - call setTextModeMenu - mov esi, valueModeMenuSize - mcall 4 - mov ebx, (buttonModeX+buttonModeWidth-12) * 65536 + (buttonModeY+buttonModeTextYoffset+3) - mov ecx, 0x80FFFFFF - mov edx, symbolDownArrow - mcall 4 - - ;ъэюяър т√сюЁр уюЁ▀ўхщ ъыртш°ш - buttonHotKeyX = 350-10 - buttonHotKeyWidth = 90 - mov edx, 0x80000009 ;єфры▀хь - mcall 8 - cmp byte[mode], 49 ;Ёшёєхь т√сюЁ ъыртш°ш, Єюы№ъю хёыш mode > 1 - jbe @f - ;Ёшёєхь эютє■ - push eax ebx ecx edx esi - mov ebx, buttonHotKeyX*65536 + buttonHotKeyWidth ;X + Width - mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height - mov edx, 0x00000009 ;button id - mov esi, 0x00FFFFFF ;color button - mcall 8 - pop esi edx ecx ebx eax - ;ЄхъёЄ яюфёърчъш фы▀ уюЁ▀ўхщ ъыртш°ш - mov ebx, (buttonHotKeyX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset) ;(x, y) - mov ecx, 0x90224466 - call setTextForHotKey - mov esi, valueModeMenuSize - mcall 4 - ;чруюыютюъ - push eax ebx ecx edx edi esi - mov ebx, buttonHotKeyX * 65536 + (buttonModeY-11) - mov ecx, 0x80224466 - mov edx, hkCaption - mov esi, 3 - mcall 4 - pop esi edi edx ecx ebx eax - @@: - - ;юЄюсЁрцрхь эрёЄЁющъє Ёрфшєёр фхщёЄтш▀ цхёЄр, Єюы№ъю хёыш т√сЁрэ Ёхцшь 3 - cmp byte[mode], 51 - jne @f - ;чруюыютюъ - push eax ebx ecx edx edi esi - mov ebx, (buttonHotKeyX + buttonHotKeyWidth + 20) * 65536 + (buttonModeY-11) - mov ecx, 0x80224466 - mov edx, radiusCaption - mov esi, 3 - mcall 4 - pop esi edi edx ecx ebx eax - invoke edit_box_draw, editRadius - @@: - - call draw_super_text - - LineLength = 62 - mov ebx, Otstup * 65536 + 32 ; draw info text with function 4 (x, y) - - ;xor ecx, ecx - ;mov cl, 1 ;byte[mysize] - ;shl ecx, 24 - ;add ecx, 0x224466 - ;or ecx, 0x00224466 ;80224466 - mov ecx, 0x10224466 - - mov edx, text - mov esi, LineLength - mov eax, 4 - - .newline: ; text from the DATA AREA - mcall - add ebx, 15 - add edx, LineLength - cmp byte[edx], 0 - jne .newline - - mcall 12, 2 ; End window redraw - - ret - -hkSymbol: db 0, 0 - -setTextForHotKey: - push eax - mov al, byte[hkSymbol] - cmp al, 0 - jne @f - mov edx, hkHint - mov dword[hkSize], 5 ;чэрўхэшх яю єьюыўрэш■ SPACE ;shift - jmp setTextForHotKey.end -@@: - cmp al, 1 - jne @f - mov edx, hkAlt - mov dword[hkSize], 3 - jmp setTextForHotKey.end -@@: - cmp al, 2 - jne @f - mov edx, hkShift - mov dword[hkSize], 5 - jmp setTextForHotKey.end -@@: - cmp al, 3 - jne @f - mov edx, hkCtrl - mov dword[hkSize], 4 - jmp setTextForHotKey.end -@@: - cmp al, 32 - jne @f - mov edx, hkSpace - mov dword[hkSize], 5 - jmp setTextForHotKey.end -@@: - cmp al, 96 ;'`' - je setTextForHotKey.symb - cmp al, 126 ;'~' - je setTextForHotKey.symb - cmp al, 48 ;'0' - jb @f - cmp al, 57 ;'9' - ja @f -.symb: - mov edx, hkSymbol - mov dword[hkSize], 1 - jmp setTextForHotKey.end -@@: - cmp al, 97 ;'a' - jb @f - cmp al, 122 ;'z' - ja @f - ;jmp setTextForHotKey.symb - mov edx, hkSymbol - mov dword[hkSize], 1 - jmp setTextForHotKey.end -@@: - cmp al, 65 ;'A' - jb @f - cmp al, 90 ;'Z' - ja @f - ;jmp setTextForHotKey.symb - mov edx, hkSymbol - mov dword[hkSize], 1 - jmp setTextForHotKey.end -@@: - mov word[hkSymbol], 0 ;хёыш цх яюярыю ўЄю-Єю эхшчтхёЄэюх, Єю ёюЄЁ▐ь хую - mov edx, hkHint - mov dword[hkSize], 5 ;shift or space - чэрўхэшх яю єьюыўрэш■ -.end: - pop eax - ret - - -setTextModeMenu: - cmp byte[mode], 48 - jne @f - mov edx, valueModeMenu0 - ret -@@: - cmp byte[mode], 49 - jne @f - mov edx, valueModeMenu1 - ret -@@: - cmp byte[mode], 50 - jne @f - mov edx, valueModeMenu2 - ret -@@: - cmp byte[mode], 51 - jne @f - mov edx, valueModeMenu3 - ret -@@: - mov edx, valueModeMenu1 - ret - - - - -saveKey: - cmp word[hkSymbol], 0 - je .default - cmp byte[hkSymbol], 1 - je .alt - cmp byte[hkSymbol], 2 - je .shift - cmp byte[hkSymbol], 3 - je .ctrl - cmp byte[hkSymbol], 32 - je .space -.other: - mov esi, hkSymbol - mov byte[esi+1], 0 - mov dword[hkSize], 1 - jmp .end -.space: - mov esi, hkSpace - mov dword[hkSize], 5 - jmp .end -.ctrl: - mov esi, hkCtrl - mov dword[hkSize], 4 - jmp .end -.alt: - mov esi, hkAlt - mov dword[hkSize], 3 - jmp .end -.default: -.shift: - mov esi, hkShift - mov dword[hkSize], 5 -.end: - mov ebx, hkSize ;єърчрЄхы№ эр dword[hkSize] - call copyParam - ret - - - - - -align 16 -@IMPORT: - -library box_lib, 'box_lib.obj' - -import box_lib,\ - edit_box_draw, 'edit_box_draw',\ - edit_box_key, 'edit_box_key',\ - edit_box_mouse, 'edit_box_mouse',\ - init_checkbox, 'init_checkbox2',\ - check_box_draw, 'check_box_draw2',\ - check_box_mouse, 'check_box_mouse2',\ - option_box_draw, 'option_box_draw',\ - option_box_mouse, 'option_box_mouse' - -commonButtonText db '...', 0 ;ЄхъёЄ фы▀ ъэюяюъ т√чютр OpenDial -commonButtonTextSize = 3 - -if lang eq ru_RU ;хёыш ▀ч√ъ ёсюЁъш Ёєёёъшщ - -text db "Конфигуратор Hot Angles отвечает за настройку активных углов. " - db "Настройте параметры под себя или отключите эту опцию. " - db " ", 0 - hed: -title db "Конфигуратор утилиты Hot Angles", 0 -buttonText db "Применить", 0 -buttonTextSize = 9 - -ch_text db 'Включить/активировать "Hot Angles"', 0 - -superText: - .lu db 'Команда левого верхнего угла: ', 0 - .ld db 'Команда левого нижнего угла: ', 0 - .ru db 'Команда правого верхнего угла:', 0 - .rd db 'Команда правого нижнего угла: ', 0 -superTextSize = 30 - -valueModeMenuSize = 32 -ModeMenu db 'Режим работы:',0 -valueModeMenu0 db 'отключено ',0 -valueModeMenu1 db 'классический режим ',0 -valueModeMenu2 db 'режим горячей клавиши ',0 -valueModeMenu3 db 'режим жеста по клавише активации',0 - -hkCaption: db 'Клавиша:',0 -;hkHint: db 'Нажмите любую клавишу',0 -radiusCaption: db 'Радиус:',0 - -else ;шэрўх рэуышщёъшщ ЄхъёЄ - -text db "This is a Hot Angles Configurator. " - db "Set the parameters bellow for yourself or disable this option." - db " ", 0 - hed: -title db "Hot Angles Configurator", 0 -buttonText db " Apply ", 0 -buttonTextSize = 9 - -ch_text db 'Activate "Hot Angles"',0 ;ёюяЁютюцфр■∙шщ ЄхъёЄ фы▀ ўхъ сюъёр - -superText: - .lu db 'Left up angle command: ', 0 - .ld db 'Left down angle command: ', 0 - .ru db 'Right up angle command: ', 0 - .rd db 'Right down angle command:', 0 -superTextSize = 25 - -valueModeMenuSize = 32 -ModeMenu db 'Mode:',0 -valueModeMenu0 db 'disabled ',0 -valueModeMenu1 db 'classic mode ',0 -valueModeMenu2 db 'hot key mode ',0 -valueModeMenu3 db 'activation key gesture mode ',0 - -hkCaption: db 'Key:',0 -;hkHint: db 'press any key',0 -radiusCaption: db 'Radius:',0 - -end if - -hkAlt: db 'Alt',0 -hkShift: db 'Shift',0 -hkCtrl: db 'Ctrl',0 -hkSpace: db 'Space',0 -hkHint: db '?',0 -hkSize: rd 1 ;ЁрчьхЁ ёЄЁюъш ё шьхэхь ъыртш°ш - -draw_super_text: - push eax ebx ecx edx edi esi - - mov ecx, 0 - mov ch, byte[mysize] - shl ecx, 16 - add ecx, 0x224466 - - mcall 4, ,,superText.lu,superTextSize - mcall 4, ,,superText.ld,superTextSize - mcall 4, <290,74> ,,superText.ru,superTextSize - mcall 4, <290,109> ,,superText.rd,superTextSize - - mov ebx, Otstup * 65536 + (buttonModeY-11) - or ecx, 0x80000000 - mov edx, ModeMenu - mov esi, 3 - mcall 4 - -; mov ebx, buttonHotKeyX * 65536 + (buttonModeY-11) -; or ecx, 0x80000000 -; mov edx, hkCaption -; mov esi, 3 -; mcall 4 - - pop esi edi edx ecx ebx eax - ret - -editID db 0 -initEBX: - cmp byte[editID], 4 - jne @f - mov ebx, dataBuffer.1 - ret -@@: - cmp byte[editID], 5 - jne @f - mov ebx, dataBuffer.2 - ret -@@: - cmp byte[editID], 6 - jne @f - mov ebx, dataBuffer.3 - ret -@@: - cmp byte[editID], 7 - jne @f - mov ebx, dataBuffer.4 - ret -@@: - ret -setRESULT: - cmp byte[editID], 4 - jne @f - mov dword[dataBuffer.size1], ecx - mov dword[editLU.size], ecx - mov dword[editLU.pos], ecx - ret -@@: - cmp byte[editID], 5 - jne @f - mov dword[dataBuffer.size2], ecx - mov dword[editLD.size], ecx - mov dword[editLD.pos], ecx - ret -@@: - cmp byte[editID], 6 - jne @f - mov dword[dataBuffer.size3], ecx - mov dword[editRU.size], ecx - mov dword[editRU.pos], ecx - ret -@@: - cmp byte[editID], 7 - jne @f - mov dword[dataBuffer.size4], ecx - mov dword[editRD.size], ecx - mov dword[editRD.pos], ecx - ret -@@: - ret -copyPath: - push eax ebx ecx edx ;copy file name path - mov eax, openfile_path ;dword[OpenDialog_data.openfile_path] - call initEBX ;mov ebx, dataBuffer.1 ;.data - mov ecx, 0 - @@: - mov dl, byte[eax] - cmp dl, 0 ;byte[eax], 0 - je @f - mov byte[ebx], dl - inc eax - inc ebx - inc ecx - jmp @b - @@: - mov byte[ebx], 0 - call setRESULT - pop edx ecx ebx eax - ret - - -IntToStr: ;in esi - ёЄЁюър; eёx - ўшёыю - push eax ecx edx esi - or ecx, ecx - jnz @f - mov byte[esi], '0' - inc esi - jmp .end -@@: - mov eax, ecx - mov ecx, 10 -.next: - xor edx, edx - div ecx - add edx, '0' - - mov byte[esi], dl - - inc esi - or eax, eax - jz .end - jmp .next -.end: - mov byte[esi], 0 ;ъырф▐ь чртхЁ°р■∙шщ эюы№ - pop esi edx ecx eax - call reverseString ;фхырхь ЁхтхЁё ёЄЁюъш - ret - -;тїюф: esi - єърчрЄхы№ эр ёЄЁюъє -reverseString: - push eax esi edi - - mov al, byte[esi] ;хёыш ёЄЁюър яєёЄр▀ Єю т√їюфшь ЁхтхЁё фхырЄ№ эх эрфю - cmp al, 0 - je reverseString.end - - mov edi, esi ;шэрўх эрщф▐ь яючшЎш■ яюёыхфэхую ёшьтюыр ёЄЁюъш ш яюыюцшь х▐ т edi -.go_last_symbol: - mov al, byte[edi+1] - cmp al, 0 - je @f - - inc edi - jmp reverseString.go_last_symbol -@@: - push ebx -.rev: - cmp esi, edi - jae @f - - ;ьхэ▀хь ьхёЄрьш ёшьтюы√ т Ўшъых - mov al, byte[edi] - mov bl, byte[esi] - mov byte[edi], bl - mov byte[esi], al - - inc esi - dec edi - jmp reverseString.rev -@@: - pop ebx -.end: - pop edi esi eax - ret - - - -align 4 -but_open_dlg: - pushad - copy_path open_dialog_name,communication_area_default_path,file_name,0 - mov [OpenDialog_data.type],0 - stdcall[OpenDialog_Start], OpenDialog_data - cmp [OpenDialog_data.status],2 - je @f - cmp [OpenDialog_data.status],0 ;яюы№чютрЄхы№ эрцры Cancel? - je .end_open - ;ъюф яЁш єфрўэюь юЄъЁ√Єшш фшрыюур - call copyPath - jmp .end_open - @@: - ;ъюф яЁш эх єфрўэюь юЄъЁ√Єшш фшрыюур - ;... - .end_open: - popad - ret - -;фрээ√х фы▀ фшрыюур юЄъЁ√Єш▀ Їрщыют -align 4 -OpenDialog_data: -.type dd 0 ;0 - юЄъЁ√Є№, 1 - ёюїЁрэшЄ№, 2 - т√сЁрЄ№ фшЁхъЄюЁш■ -.procinfo dd pi -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_path dd plugin_path ;+16 -.dir_default_path dd default_dir ;+20 -.start_path dd file_name ;+24 яєЄ№ ъ фшрыюує юЄъЁ√Єш▀ Їрщыют -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_path dd openfile_path ;+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 - -default_dir db '/sys',0 ;фшЁхъЄюЁш▀ яю єьюыўрэш■ -communication_area_name: db 'FFFFFFFF_open_dialog',0 -open_dialog_name: db 'opendial',0 -communication_area_default_path: db '/sys/File managers/',0 - -Filter: -dd Filter.end - Filter.1 -.1: -;db 'KEX',0 -.end: -db 0 - -mode db 49 ;'1' -modeMenu dd 0 -coordModeMenu: - .x dw 100 - .y dw 200 - - -system_dir0 db '/sys/lib/' -lib0_name db 'proc_lib.obj',0 -system_dir1 db '/sys/lib/' -lib1_name db 'kmenu.obj',0 - -symbolDownArrow db 25,0 - -;library structures -l_libs_start: - lib0 l_libs lib0_name, file_name, system_dir0, import_proclib - lib1 l_libs lib1_name, file_name, system_dir1, import_libkmenu -load_lib_end: - - -edMaxSize = 510 ;ЄхяхЁ№ ё эют√ь ъюьяюэхэЄюь ьюцэю ш 511 єърчрЄ№ -edMax = 0 ;max, size, pos - -align 4 -editLU edit_box 230-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax ;ed_focus -editLD edit_box 230-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax -editRU edit_box 230-buttonW,290,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax -editRD edit_box 230-buttonW,290,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax -editRadius edit_box 40,(buttonHotKeyX + buttonHotKeyWidth + 20),buttonModeY, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, 4, radiusBuffer.data, mouse_dd, ed_figure_only, edMax, edMax - -align 4 -import_proclib: - OpenDialog_Init dd aOpenDialog_Init - OpenDialog_Start dd aOpenDialog_Start -dd 0,0 - aOpenDialog_Init db 'OpenDialog_init',0 - aOpenDialog_Start db 'OpenDialog_start',0 - -align 4 -import_libkmenu: - kmenu_init dd akmenu_init - kmainmenu_draw dd akmainmenu_draw - kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent - ksubmenu_new dd aksubmenu_new - ksubmenu_delete dd aksubmenu_delete - ksubmenu_draw dd aksubmenu_draw - ksubmenu_add dd aksubmenu_add - kmenuitem_new dd akmenuitem_new - kmenuitem_delete dd akmenuitem_delete - kmenuitem_draw dd akmenuitem_draw -dd 0,0 - akmenu_init db 'kmenu_init',0 - akmainmenu_draw db 'kmainmenu_draw',0 - akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 - aksubmenu_new db 'ksubmenu_new',0 - aksubmenu_delete db 'ksubmenu_delete',0 - aksubmenu_draw db 'ksubmenu_draw',0 - aksubmenu_add db 'ksubmenu_add',0 - akmenuitem_new db 'kmenuitem_new',0 - akmenuitem_delete db 'kmenuitem_delete',0 - akmenuitem_draw db 'kmenuitem_draw',0 - -sc system_colors -mouse_dd rd 1 - -sizeStyle: rb 1 ;ЁрчьхЁ ЄхъёЄр ш юёЄры№э√ї ¤ыхьхэЄют юъэр -mysize: rb 1 ;rd 1 -radiusBuffer: ;сєЇхЁ фы▀ яюы▀ Ёрфшєёр цхёЄр - .data: rb 6 - .size: rd 1 -radiusBufferEnd: - -button_press rd 0 ;for kmenu - -sys_path: rb 4096 -file_name: rb 4096 -plugin_path: rb 4096 -openfile_path: rb 4096 -filename_area: rb 256 -rb 1024 -pi process_information - -keyscan: rb 1 -keystr: - .data: rb 4 ;ёЄЁюър ёю чэрўхэшхь ёърэъюфр ръЄштрЎшюээющ ъыртш°ш - .size: rd 1 ;ЁрчьхЁ ёюфхЁцшьюую ёЄЁюъш схч яюёыхфэхую эєы▀ - -dataBuffer: -.1: rb 512 -.2: rb 512 -.3: rb 512 -.4: rb 512 -.size1: rd 1 -.size2: rd 1 -.size3: rd 1 -.size4: rd 1 -;255+255+2 = 512 -;фтр чрярёэ√ї срщЄр эхюсїюфшь√ фы▀ Єюую ўЄю с√ эх яхяхЁхяшёрЄ№ ёыхфє■∙шхщ срщЄ√, т ъюэЎх сєЇхЁр 0 -dataBufferEnd: - - -I_END: - rb 4096 -align 16 -STACKTOP: - -MEM: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Compile with FASM +; Version 0.3.9: Apr 11, 2020 + +; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage +; 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. + +; THE SOFTWARE IS PROVIDED УAS ISФ, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +; -------------------------------------------------------------------------------------- + +;P.S. ╩юфє ЄЁхсєхЄё  юяЄшьшчрЎш  ш фюЁрсюЄър (ёь. Єхьє ЇюЁєьр) +format binary as "" ; Binary file format without extension +use32 ; Tell compiler to use 32 bit instructions +org 0 ; the base address of code, always 0x0 + +; Зруюыютюъ шёяюыэ хьюую Їрщыр ╩юышсЁш╬╤ +db 'MENUET01' +dd 1 +dd START +dd I_END +dd MEM +dd STACKTOP +dd 0, sys_path + +; ═рўрыю юсырёЄш ъюфр +include 'lang.inc' ;яюффхЁцър  ч√ъют яЁш ъюьяшы Ўшш +include '../../macros.inc' +include '../../proc32.inc' +include '../../dll.inc' +include '../../KOSfuncs.inc' +include '../../develop/libraries/box_lib/box_lib.mac' ;ъюьяюэхэЄ√ checkBox ш editBox +include '../../load_lib.mac' ;ьръЁюё фы  чруЁєчъш сшсышюЄхъ +@use_library + +KMENUITEM_NORMAL equ 0 +KMENUITEM_SUBMENU equ 1 +KMENUITEM_SEPARATOR equ 2 + +Otstup = 30 + +START: + call copyKill ;яЁюёЄхщ°р▀ чр∙шЄр юЄ чряєёър тЄюЁющ ъюяшш яЁшыюцхэш▀ + mcall 68, 11 ;шэшЎшрышчрЎш▀ ъєўш + + ;mcall 48,3,sc,sizeof.system_colors ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр + mov eax,48 ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр + mov ebx,3 + mov ecx, sc + mov edx, sizeof.system_colors + mcall + + stdcall dll.Load, @IMPORT + or eax, eax + jnz exit + + mov eax,40 ;єёЄрэютшЄ№ ьрёъє фы▀ юцшфрхь√ї ёюс√Єшщ + mov ebx,0x27 ;ёшёЄхьр сєфхЄ ЁхрушЁютрЄ№ Єюы№ъю эр ёююс∙хэшх ю яхЁхЁшёютъх, эрцрЄр ъэюяър, юяЁхфхы▐ээр▀ Ёрэхх, ёюс√Єшх юЄ ь√°ш (ўЄю-Єю ёыєўшыюё№ - эрцрЄшх эр ъэюяъє ь√°ш шыш яхЁхьх∙хэшх; ёсЁрё√трхЄё▀ яЁш яЁюўЄхэшш) + mcall + + load_libraries l_libs_start,load_lib_end ;чруЁєчър сшсышюЄхъ(ш) + stdcall [OpenDialog_Init],OpenDialog_data ;яюфуюЄютър фшрыюур + + ;mode menu + stdcall [kmenu_init], sc ;kmenu initialisation + stdcall [ksubmenu_new] + mov [modeMenu], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu0, 110 + stdcall [ksubmenu_add], [modeMenu], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu1, 111 + stdcall [ksubmenu_add], [modeMenu], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu2, 112 + stdcall [ksubmenu_add], [modeMenu], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu3, 113 + stdcall [ksubmenu_add], [modeMenu], eax + stdcall [kmenuitem_new], KMENUITEM_SUBMENU, valueModeMenu1, [modeMenu] + + call loadConfig ;чруЁєцрхь ъюэЇшуєЁрЎш■ шч Їрщыр, хёыш эхЄ - Єю т√ёЄрты▀хь ярЁрьхЄЁ√ яю єьюыўрэш■ + call draw_window ;юЄЁшёютрЄ№ юъэю яЁшыюцхэш▀ + +; ╬сЁрсюЄър Ўшъыр ёюс√Єшщ +event_wait: + mov eax, 10 ; function 10 : wait until event + mcall ; event type is returned in eax + + cmp eax, 1 ; Event redraw request ? + je red ; Expl.: there has been activity on screen and + ; parts of the applications has to be redrawn. + + cmp eax, 2 ; Event key in buffer ? + je key ; Expl.: User has pressed a key while the + ; app is at the top of the window stack. + + cmp eax, 3 ; Event button in buffer ? + je button ; Expl.: User has pressed one of the + ; applications buttons. + + invoke edit_box_mouse, editLU ;яЁютхЁър ёюс√Єшщ ь√°ш фы▀ editBox'ют + invoke edit_box_mouse, editLD + invoke edit_box_mouse, editRU + invoke edit_box_mouse, editRD + ;stdcall [kmainmenu_dispatch_cursorevent], [modeMenu] ;яЁютхЁър ь√°ш фы▀ ъюьсюсюъёр + invoke edit_box_mouse, editRadius + + jmp event_wait + + +red: ;юсЁрсюЄър ёюс√Єш▀ яхЁхЁшёютъш юъэр + call draw_window + jmp event_wait + +key: ; Keypress event handler + mov eax, 2 ; The key is returned in ah. The key must be + mcall ; read and cleared from the system queue. + + invoke edit_box_key, editLU + invoke edit_box_key, editLD + invoke edit_box_key, editRU + invoke edit_box_key, editRD + invoke edit_box_key, editRadius + + cmp eax, 1 + je event_wait + cmp word[hkSymbol], 0 + jne event_wait + cmp al, 0 + jne .next + mov byte[hkSymbol], ah + + push eax ecx esi ;ёюїЁрэ▀хь ёърэъюф ъыртш°ш + shr eax, 16 + mov byte[keyscan], al + mov ecx, 0 + mov cl, al ;byte[keyscan] + mov esi, keystr.data + call IntToStr + + ;ёўшЄрхь яюыєўхээ√щ ЁрчьхЁ ёЄЁюъш + xor ecx, ecx + mov esi, keystr.data + @@: + cmp byte[esi], 0 + je @f + inc esi + inc ecx + ;cmp ecx, 4 + ;je @f + jmp @b + @@: + ;ш ёюїЁрэ▀хь хую + mov dword[keystr.size], ecx + + pop esi ecx eax + jmp red +.next: + ;cmp al, 2 + ;jne @f + ;cmp ah, 0 + ;jne @f + ;ёўшЄ√трхь єяЁрты▀■∙шх ъыртш°ш + ;shr eax, 16 + ;bt eax, 0 ;left shift + ;jne @f + ;mov byte[hkSymbol], 2 + ;jmp red +@@: + jmp event_wait ; Just read the key, ignore it and jump to event_wait. + +button: ; Buttonpress event handler + mov eax,17 ; The button number defined in window_draw + mcall ; is returned to ah. + + cmp ah,1 ; button id=1 ? + jne noclose +exit: + mov eax,-1 ; Function -1 : close this program + mcall +noclose: + cmp ah, 2 ;ъэюяър "╧ЁшьхэшЄ№" + jne @f ;butend + call applyButton ;т√чют эр°хую юсЁрсюЄўшър эрцрЄш▀ ъэюяъш + jmp event_wait +@@: + cmp ah, 4 + jne @f + mov byte[editID], 4 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 5 + jne @f + mov byte[editID], 5 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 6 + jne @f + mov byte[editID], 6 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 7 + jne @f + mov byte[editID], 7 + call but_open_dlg + jmp event_wait +@@: + cmp ah, 8 + jne @f + push eax ebx ecx + mcall 9, pi, -1 ;get window coord + + mov eax, dword[pi+34] + add eax, buttonModeX ;+ 5 + mov word[coordModeMenu.x], ax + + mov eax, dword[pi+38] + add eax, buttonModeY + 20 ;20 - ¤Єю ёьх∙хэшх тёяы√тр■∙хую ьхэ■ + mov word[coordModeMenu.y], ax + + stdcall [ksubmenu_draw], [modeMenu], coordModeMenu + pop ecx ebx eax + jmp event_wait +@@: + cmp ah, 9 + jne @f + mov word[hkSymbol], 0 + jmp red ;event_wait +@@: + cmp ah, 110 + jne @f + mov byte[mode], 48 ;'0' + jmp event_wait +@@: + cmp ah, 111 + jne @f + mov byte[mode], 49 ;'1' + jmp event_wait +@@: + cmp ah, 112 + jne @f + mov byte[mode], 50 ;'2' + jmp event_wait +@@: + cmp ah, 113 + jne @f + mov byte[mode], 51 ;'3' + jmp event_wait +@@: +butend: + jmp event_wait ;this is for ignored events, useful at development + + + +;шь▀ ъюэЇшуєЁрЎшюээюую Їрщыр +fileName: db 'SETTINGS/HA.CFG', 0 + +;ёЄЁєъЄєЁр фы▀ ёючфрэш▀/яхЁхчряшёш Їрщыр +createFile: + .func dd 2 ;эюьхЁ яюфЇєэъЎшш + .re dd 0, 0 ;чрЁхчхЁтшЁютрэю + .size dd 0 ;ёъюы№ъю срщЄ яшёрЄ№ + .data_adr dd 0 ;єърчрЄхы№ эр фрээ√х + .path db 0 + .path_adr dd fileName ;яєЄ№ + +;ёЄЁюър ярЁрьхЄЁют яю єьюыўрэш■ ш х▐ ЁрчьхЁ +defaultDataForConfig db 121,13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'Space',13,10,'57',13,10,'10',13,10,'s',13,10 +defaultDataSize = 85 ;48+19+4 + + +copyParam: ;ъюяшЁєхЄ ярЁрьхЄЁ(ъюьрэфє чряєёър) т сєЇхЁ (ёь. фры№°х) + push esi ebx ecx + mov ecx, dword[ebx] ;ўшЄрхь ЁрчьхЁ ёЄЁюъш + + cmp ecx, 0 ;яєёЄр ыш ёЄЁюър? + jne copyParam.copy ;хёыш эхЄ, Єю яхЁхїюфшь ъ ъюяшЁютрэш■ ёюфхЁцшьюую ёЄЁюъш (ъ Ўшъыє) + + mov byte[eax], '-' ;хёыш цх яєёЄю, Єю чрьхэ▀хь ёшьтюыюь ьшэєё '-' + inc eax + ;jmp copyParam.copyEnd ;ш т√їюфшь + ;фрыхх т эрўрых Ўшъыр яЁюшчющф▐Є ёЁртэхэшх ш т√їюф + +.copy: ;ъюяшЁєхь ёшьтюы√ + cmp ecx, 0 + je copyParam.copyEnd + mov bl, byte[esi] + mov byte[eax], bl + dec ecx + inc eax + inc esi + jmp copyParam.copy +.copyEnd: + pop ecx ebx esi + ret + + +addPerenos: ;фюсрты▀хЄ яхЁхэюё ёЄЁюъш т сєЇхЁ + mov byte[eax], 13 + inc eax + mov byte[eax], 10 + inc eax + ret + +;юсЁрсюЄўшъ ъэюяъш "╧ЁшьхэшЄ№" +applyButton: + push eax ebx ecx + ;mov dword[createFile.data_adr], defaultDataForConfig + ;mov dword[createFile.size], defaultDataSize + + ;т√ўшёышь ЁрчьхЁ Їрщыр ъюэЇшуєЁрЎшш т срщЄрї + mov ecx, 9*2+1 ;1 срщЄ эр ёюёЄю▀эшх ръЄштэюёЄш ш 9 ярЁ яхЁхэюёют ёЄЁюъ (ёшьтюы√ 13, 10) + add ecx, dword[editLU.size] ;яы■ё ЁрчьхЁ ърцфющ ёЄЁюъш т срщЄрї + add ecx, dword[editLD.size] + add ecx, dword[editRU.size] + add ecx, dword[editRD.size] ;dataBuffer.size4] + add ecx, dword[editRadius.size] + add ecx, dword[hkSize] ;ЁрчьхЁ шьхэш ръЄштрЎшюээющ ъэюяъш + add ecx, dword[keystr.size] ;ЁрчьхЁ ёърэъюфр ръЄштрЎшюээющ ъэюяъш + inc ecx ; х∙▐ 1 срщЄ фы▀ їЁрэхэш▀ ЁрчьхЁр ¤ыхьхэЄют + + ;cmp dword[keystr.size], 3 + ;jbe @f + ;mcall -1 + ;@@: + + ;хёыш чрфрэ√ яєёЄ√х ёЄЁюъш, Єю ь√ ртЄюьрЄшўхёъш фюсрты▀хь чэръ ьшэєё, чэрўшЄ ЁрчьхЁ +1 срщЄ + cmp dword[editLU.size], 0 + jne @f + inc ecx +@@: + cmp dword[editLD.size], 0 + jne @f + inc ecx +@@: + cmp dword[editRU.size], 0 + jne @f + inc ecx +@@: + cmp dword[editRD.size], 0 + jne @f + inc ecx +@@: + + ;ЄхяхЁ№ ЁрчьхЁ Їрщыр ъюэЇшуєЁрЎшш т ecx + mov dword[createFile.size], ecx ;яюыюцшь ЁрчьхЁ срщЄ т ёЄЁєъЄєЁє ёючфрэш▀/яхЁхчряшёш Їрщыр + mcall 68, 12, ecx ;т√фхы▀хь сыюъ ярь▀Єш яюф сєЇхЁ ёюфхЁцшьюую + mov dword[createFile.data_adr], eax ;ёюїЁрэ▀хь рфЁхё сєЇхЁр т ёЄЁєъЄєЁє + + ;чряюыэшь сєЇхЁ ёюфхЁцшьюую: + push ebx ;ёюїЁрэ▀хь т√сЁрээ√щ Ёхцшь + mov bl, byte[mode] + mov byte[eax], bl + pop ebx + + inc eax + call addPerenos + + push esi ebx + call UpdateEditsSizes ;юсэютшЄ№ ЁрчьхЁ√ ЄхъёЄр т edit'рї + + mov esi, dataBuffer.1 ;editLU.text + mov ebx, dataBuffer.size1 ;editLU.size + call copyParam + call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш + + mov esi, dataBuffer.2 + mov ebx, dataBuffer.size2 + call copyParam + call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш + + mov esi, dataBuffer.3 + mov ebx, dataBuffer.size3 + call copyParam + call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш + + mov esi, dataBuffer.4 + mov ebx, dataBuffer.size4 + call copyParam + call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш + + ;ёюїЁрэ▀хь ъэюяъє ръЄштрЎшш + call saveKey + call addPerenos + + ;ёюїЁрэ▀хь ёърэъюф ъэюяъш + mov esi, keystr.data ;чряшё√трхь ёЄЁюъє keystr т Їрщы + xor ebx, ebx + @@: + cmp byte[esi], 0 + je @f + mov bl, byte[esi] + mov byte[eax], bl + inc eax + inc esi + cmp esi, keystr.size-1 + jae @f + jmp @b + @@: + call addPerenos + + ;ёюїЁрэ▀хь Ёрфшєё + ;!!! хёыш Ёрфшєё юёЄртыхэ яєёЄ√ь, Єю эєцэю ёюїЁрэ▀Є№ чэрўхэшх яю єьюыўрэш■ (ёхщўрё яш°хЄё▀ '-') + mov esi, radiusBuffer.data + mov ebx, editRadius.size ;radiusBuffer.size + call copyParam + call addPerenos + + ;фюсрты▀хь ЁрчьхЁ ¤ыхьхэЄют + push ebx ;ёюїЁрэ▀хь т√сЁрээ√щ Ёхцшь + mov bl, byte[sizeStyle] + mov byte[eax], bl + pop ebx + inc eax + call addPerenos + + pop ebx esi + + + mov ebx, createFile + mcall 70 + cmp eax, 0 + je .end + ;шэрўх чфхё№ эєцэю т√тхёЄш юъэю ё ю°шсъющ !!! +.end: + mcall 68, 13, dword[createFile.data_adr] ;юётюсюцфрхь ярь▀Є№ яюф сєЇхЁ + call finishHotAnglesApp ;чртхЁ°рхь ЁрсюЄє тёхї ъюяшщ ёхЁтшёр @HA + call loadConfig ;яхЁхчруЁєцрхь Їрщы ъюэЇшур + call draw_window ;яхЁхЁшёют√трхь юъэю + call startHotAnglesApp ;яхЁхчряєёърхь @HA + pop ecx ebx eax + ret + + + + + + +compareBytes2: + push edi esi ecx ebx + xor eax, eax + mov ecx, 10 ;max ЁрчьхЁ ёЄЁюъ 11 +@@: + mov bl, byte[edi] + cmp bl, byte[esi] + jne compareBytes.no + inc edi + inc esi + cmp ecx, 0 + je @f + dec ecx + jmp @b +.no: + mov eax, 1 +@@: + pop ebx ecx esi edi + ret + + +finishHotAnglesApp: + ;эрїюфшь тёх ъюяшш яЁшыюцхэш▀ яю шьхэш ш чртхЁ°рхь шї + push eax ebx ecx esi edi + ;єърчрЄхыш, ъюЄюЁ√х эшъюуфр эх ьхэ▀■Єё▀: + mov esi, startAppData.file_name ;яхЁтр▀ ёЄЁюър - шёъюьюх шь▀ яЁшыюцхэш▀ + mov edi, buf ;тЄюЁр▀ ёЄЁюър - шь▀ Єхъє∙хую ёыюЄр + add edi, 10 + + mov ecx, 1 +@@: + mcall 9, buf, ecx ;яюыєўрхь фрээ√х юўхЁхфэюую ёыюЄр + mov dword[slotMax], eax + + call compareBytes2 ;ёЁртэштрхь шь▀ + cmp eax, 0 + jne finishHotAnglesApp.next ;хёыш эх ёютярыю, Єю яхЁхїюфшь эр ёыхфє■∙шщ ёыюЄ + + mcall 18, 2, ecx ;шэрўх чртхЁ°рхь ёыюЄ +.next: + inc ecx + cmp ecx, dword[slotMax] + ja @f + jmp @b +@@: + pop edi esi ecx ebx eax + ret + +startHotAnglesApp: + ;чряєёърхь яЁшыюцхэшх чрэютю + push eax ebx + mcall 70, startAppData + cmp eax, 0 + ja @f ;хёыш eax>0, Єю єёях°эю чряє∙хэю + ;!!! шэрўх ЄєЄ яхўрЄрхь ю°шсъє +@@: + pop ebx eax + ret + +startAppData: + .subfunction dd 7 + .flags dd 0 + .param dd 0 + .rezerv dd 0, 0 + .full_name db '/sys/' + .file_name db '@HA', 0 + +UpdateEditsSizes: + push eax + mov eax, dword[editLU.size] + mov dword[dataBuffer.size1], eax + + mov eax, dword[editLD.size] + mov dword[dataBuffer.size2], eax + + mov eax, dword[editRU.size] + mov dword[dataBuffer.size3], eax + + mov eax, dword[editRD.size] + mov dword[dataBuffer.size4], eax + + mov eax, dword[editRadius.size] + mov dword[radiusBuffer.size], eax + + pop eax + ret + +fileAdr dd 0 + +loadConfig: + push eax ebx ecx edx + mcall 68, 27, fileName ;чруЁєцрхь ъюэЇшуєЁрЎшюээ√щ Їрщы т ╬╟╙ + mov dword[fileAdr], eax ;ёюїЁрэ▀хь рфЁхё сыюър ярь▀Єш Їрщыр + cmp eax, 0 + je loadConfig.default ;хёыш Їрщыр ъюэЇшуєЁрЎшш эхЄ, Єю ёЄртшь эрёЄЁющъш яю єьюыўрэш■ + ;шэрўх фрээ√х чруЁєцхэ√ т ╬╟╙, ЁрчьхЁ т edx + cmp edx, 0 ;хёыш Їрщы яєёЄ, т э▐ь эхЄ фрээ√ї, Єю ёЄртшь эрёЄЁющъш яю єьюыўрэш■ + je loadConfig.default +.start: + add edx, eax ;ъырф▐ь т edx - рфЁхё ъюэЎр ъюэЇшу.фрээ√ї + +.chStart: + + push ebx + mov bl, byte[eax] + cmp bl, 48 ; хёыш чэрўхэшх т√їюфшЄ чр фюяєёЄшь√х яЁхфхы√, Єю яЁютхЁ▀хь эр 'n' (фы▀ ёютьхёЄшьюёЄш) + jb loadConfig.checkN + cmp bl, 51 + ja loadConfig.checkN + + mov byte[mode], bl ;шэрўх єёЄрэртыштрхь ¤ЄюЄ Ёхцшь ъръ хёЄ№ + jmp loadConfig.modeEnd ;ш шф▐ь фры№°х +.checkN: + cmp bl, 'n' ;хёыш n - Єю Ёхцшь "юЄъы■ўхэю" + jne @f + mov byte[mode], 48 ;'0' + jmp loadConfig.modeEnd +@@: + cmp bl, 'y' ;хёыш y - Єю ъырёёшўхёъшщ Ёхцшь + jne @f + mov byte[mode], 49 ;'1' + jmp loadConfig.modeEnd +@@: + mov byte[mode], 48 ;'0' шэрўх яю єьюыўрэш■ юЄъы■ўхэю + ;mov byte[mode], 49 ;'1' шэрўх яю єьюыўрэш■ тъы■ў▐э ъырёёшўхёъшщ Ёхцшь ЁрсюЄ√ +.modeEnd: + pop ebx + ;jmp loadConfig.end ;ъюьрэфр фы▀ єфюсёЄтр юЄырфъш ш яюшёър ю°шсюъ + + ;ъюяшЁєхь ёюфхЁцшьюх ёЄЁюъ т сєЇхЁ + push edi esi ecx ebx eax + ;шэшЎшрышчшЁєхь єърчрЄхыш эр рфЁхёр сєЇхЁр ёЄЁюъш ш х▐ ЁрчьхЁр + mov edi, dataBuffer.1 + mov esi, dataBuffer.size1 + ;ecx - ёў▐Єўшъ срщЄ т ёЄЁюъх +.block: + xor ecx, ecx ;юсэєы▀хь ёў▐Єўшъ + inc eax + cmp byte[eax], 10 ;хёыш юўхЁхфэющ ъюф ёшьтюыр 10 шыш 13, Єю яЁюяєёърхь ёшьтюы√ + je loadConfig.block ;фю яхЁтюую юЄышўэюую юЄ эшї + cmp byte[eax], 13 + je loadConfig.block + + ; ёшьтюы юЄышўхэ юЄ яхЁхэюёр ёЄЁюъш ш тючтЁрЄр ърЁхЄъш - эрўшэрхь ъюяшЁютрЄ№ юЄё■фр т сєЇхЁ + mov bl, byte[eax] + mov byte[edi], bl + inc edi + inc eax + inc ecx ;єтхышўштрхь ёў▐Єўшъ ёшьтюыют т ёЄЁюъх + + ;шф▐ь фю ъюэЎр ¤Єющ ёЄЁюъш: яюър эх тёЄЁхЄшь юўхЁхфэющ 10, 13, 0 шыш file end +.while: ;ш ъюяшЁєхь тё▐ т сєЇхЁ + cmp eax, edx ;яЁютхЁ▀хь чръюэўшыё▀ ыш Їрщы, р ъюэЎр ёЄЁюъш эх с√ыю !!! + ja loadConfig.ura + cmp byte[eax], 10 + je loadConfig.ura + cmp byte[eax], 0 + je loadConfig.ura + cmp byte[eax], 13 + je loadConfig.ura + + mov bl, byte[eax] + mov byte[edi], bl + inc edi + inc eax + inc ecx + cmp ecx, 511 + jae loadConfig.ura + jmp loadConfig.while +.ura: + mov byte[edi], 0 ;ъырф▐ь чртхЁ°р■∙шщ 0 т ёЄЁюъє + mov dword[esi], ecx ;ёюїЁрэ▀хь ЁрчьхЁ ёЄЁюъш + add esi, 4 ;яхЁхїюфшь эр ЁрчьхЁ ёыхфє■∙хую сєЇхЁр + sub edi, ecx ;яхЁхїюфшь эр ёыхфє■∙шщ сєЇхЁ + add edi, 512 + ;xor ecx, ecx ;юсэєы▀хь ЁрчьхЁ ёЄЁюъш + + cmp edi, dataBuffer.size1 ;хёыш ¤Єю с√ы яюёыхфэшщ сєЇхЁ (ш ь√ т√°ыш чр рфЁхёр ЁрчьхЁют сєЇхЁют), Єю т√їюфшь + jb loadConfig.block + + call readOptKey ;ёўшЄ√трхь ъыртш°є + call gotoEndString + + ;ёўшЄ√трхь ёърэъюф ъыртш°ш + call readScanKey + call gotoEndString + + call readOptRadius ;ёўшЄ√трхь чэрўхэшх Ёрфшєёр фы▀ mode 3 + call gotoEndString + call readOptSize ;ёўшЄ√трхь ЁрчьхЁ ¤ыхьхэЄют + call gotoEndString + + pop eax ebx ecx esi edi + + jmp loadConfig.end +.default: + mov eax, defaultDataForConfig + mov edx, defaultDataSize + jmp loadConfig.start +.end: + mov ecx, dword[fileAdr] ;хёыш Їрщы с√ы чруЁєцхэ, Єю + cmp ecx, 0 + je @f + mcall 68, 13, ecx ;т√уЁєцрхь Їрщы шч ярь▀Єш +@@: + call updateParams ;яЁшьхэ▀хь эрёЄЁющъш ърцфюую сєЇхЁр + call setMySize ;яЁшьхэ▀хь эрёЄЁющъш ЁрчьхЁр ¤ыхьхэЄют + pop edx ecx ebx eax + ret + + +setMySize: + push eax + ;т√ёЄрты▀хь mysize т чртшёшьюёЄш юЄ чэрўхэш▀ sizeStyle + cmp byte[sizeStyle], '0' + jb @f + cmp byte[sizeStyle], '7' + ja @f + mov eax, 0 ;хёыш чэрўхэшх ЁрчьхЁр чрфрэю, Єю хую ш т√ёЄрты▀хь + mov al, byte[sizeStyle] + sub al, '0' + jmp .end +@@: + cmp byte[sizeStyle], 'a' + je .auto + ;cmp byte[sizeStyle], 's' + ;je .system +.system: ;шэрўх чэрўхэшх яю єьюыўрэш■: s - ёшёЄхьэр▀ +; push ebx ecx + ;!!! +; mov eax, 9 +; mcall 48, 11 ;яюыєўрхь ёшёЄхьэ√щ ЁрчьхЁ °ЁшЇЄр + ;eax - т√ёюЄр °ЁшЇЄр т яшъёхы▀ї +; mov ecx, eax +; push eax +; mcall 48, 12, ecx ;яЁшьхэ▀хь ЁрчьхЁ °ЁшЇЄр +; pop eax +; pop ecx ebx + ;temp fix - фхышь эр Єхъє∙шщ ЁрчьхЁ °ЁшЇЄр and -1 +; push ebx edx +; mov ebx, 9 + ;div ebx +; pop edx ebx + ;cmp eax, 0 + ;je .end + ;dec eax + mov eax, 0 ;xor eax, eax ;test temp + jmp .end +.auto: ;a - т√ёЄрты▀хь т чртшёшьюёЄш юЄ ЁрчЁх°хэш▀ ¤ъЁрэр + ;!!! + mcall 14 + push ebx + xor ebx, ebx + mov bx, ax + shr eax, 16 + cmp ax, bx ;яюыєўрхь сюы№°шщ ЁрчьхЁ ёЄюЁюэ√ + jae .a + mov ax, bx +.a: + pop ebx + cmp ax, 1919 ;ЁрчьхЁ√ яюыєўхээ√х т√°х юЄ 0 ш эр 1 ьхэ№°х + jb .size0 + cmp ax, 2047 + jb .size1 + cmp ax, 4095 + jb .size2 + cmp ax, 8191 + jb .size3 + + jmp .size4 + +.size0: + mov eax, 0 + jmp .end +.size1: + mov eax, 1 + jmp .end +.size2: + mov eax, 2 + jmp .end +.size3: + mov eax, 3 + jmp .end +.size4: + mov eax, 4 + jmp .end +.size5: + mov eax, 5 + jmp .end +.size6: + mov eax, 6 + jmp .end +.size7: + mov eax, 7 + jmp .end + +;.default: +; mov eax, 1 +.end: + mov byte[mysize], al ;mov dword[mysize], eax + pop eax + ret + + +readScanKey: + ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых + cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю + ja .default ;эрёЄЁющъш яю єьюыўрэш■ + cmp byte[eax], 10 + je @f + cmp byte[eax], 0 + je @f + cmp byte[eax], 13 + je @f + + push ecx ebx esi + mov ecx, 0 ;xor ecx, ecx + mov esi, keystr.data +.copy: + mov bl, byte[eax] + cmp bl, 0 + je .copyEnd + cmp bl, 10 + je .copyEnd + cmp bl, 13 + je .copyEnd + cmp esi, keystr.size-1 + jae .copyEnd + mov byte[esi], bl + inc esi + inc eax + inc ecx + jmp .copy +.copyEnd: + mov byte[esi], 0 + mov dword[keystr.size], ecx + pop esi ebx ecx + + jmp .end +@@: + inc eax + jmp readScanKey +.default: + mov byte[keyscan], 57 + mov word[keystr.data], '57' + mov byte[keystr.data+2], 0 + mov dword[keystr.size], 2 +.end: + ret + +readOptKey: ;1;3;4;5 - space or shift + ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых + cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю + ja .default ;эрёЄЁющъш яю єьюыўрэш■ + cmp byte[eax], 10 + je @f + cmp byte[eax], 0 + je @f + cmp byte[eax], 13 + je @f + ;шэрўх ўшЄрхь ъыртш°є ш т√їюфшь + cmp dword[eax], 'Ctrl' + jne .notCtrl + mov byte[hkSymbol], 3 + mov dword[hkSize], 4 + jmp .end +.notCtrl: + cmp dword[eax], 'Shif' + jne .notShift + mov byte[hkSymbol], 2 + mov dword[hkSize], 5 + jmp .end +.notShift: + cmp dword[eax], 'Spac' + jne .notSpace + mov byte[hkSymbol], 32 + mov dword[hkSize], 5 + jmp .end +.notSpace: + cmp word[eax], 'Al' + jne .notAlt + mov byte[hkSymbol], 1 + mov dword[hkSize], 3 + jmp .end +.notAlt: + ;єсхфшьё▀, ўЄю Єрь 1 ёшьтюы, р эх ёЄЁюър + cmp byte[eax+1], 10 + je .oneSymb + cmp byte[eax+1], 0 + je .oneSymb + cmp byte[eax+1], 13 + je .oneSymb + jmp .default +.oneSymb: + ;яЁютхЁ▀хь, ўЄю ёшьтюы ЁрчЁх°▐ээ√щ !!! + + ;фюсрты▀хь ёшьтюы ъръ хёЄ№ + push ebx + ;xor ebx, ebx + mov bl, byte[eax] + mov byte[hkSymbol], bl + mov dword[hkSize], 1 + pop ebx + + jmp .end +@@: + inc eax + jmp readOptKey + +.default: + mov byte[hkSymbol], 32 + mov dword[hkSize], 5 +.end: + mov byte[hkSymbol+1], 0 + ret + +;яЁюїюфшь фю ъюэЎр Єхъє∙хщ ёЄЁюъш +gotoEndString: + cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю + ja @f ;т√їюфшь + cmp byte[eax], 10 + je @f + cmp byte[eax], 0 + je @f + cmp byte[eax], 13 + je @f + ;шэрўх яхЁхїюфшь эр ёыхфє■∙шщ ёшьтюы + inc eax + jmp gotoEndString +@@: + ret + +readOptRadius: + ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых + cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю + ja .default ;эрёЄЁющъш яю єьюыўрэш■ + cmp byte[eax], 10 + je @f + cmp byte[eax], 0 + je @f + cmp byte[eax], 13 + je @f + + ;шэрўх ёўшЄ√трхь чэрўхэшх + push ebx ecx + xor ecx, ecx +.readValue: + mov bl, byte[eax] + mov byte[radiusBuffer.data+ecx], bl + inc ecx + inc eax + cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю т√їюф + ja .readEnd + cmp byte[eax], 10 + je .readEnd + cmp byte[eax], 0 + je .readEnd + cmp byte[eax], 13 + je .readEnd + cmp ecx, 6 + jae .readEnd + jmp .readValue +.readEnd: + mov byte[radiusBuffer.data+ecx], 0 + mov dword[radiusBuffer.size], ecx + pop ecx ebx + + jmp .end +@@: + inc eax + jmp readOptRadius +.default: + mov byte[radiusBuffer.data], '0' + mov byte[radiusBuffer.data+1], 0 + mov dword[radiusBuffer.size], 1 +.end: + + ret + + +readOptSize: + ;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых + cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю + ja .default ;эрёЄЁющъш яю єьюыўрэш■ + cmp byte[eax], 10 + je @f + cmp byte[eax], 0 + je @f + cmp byte[eax], 13 + je @f + + ;яЁютхЁ▀хь, ўЄю ¤Єю фюяєёЄшьюх чэрўхэшх: 1-7, a, s + cmp byte[eax], 'a' + je .setValue + cmp byte[eax], 's' + je .setValue + cmp byte[eax], '0' + je .setValue + cmp byte[eax], '1' + je .setValue + cmp byte[eax], '2' + je .setValue + cmp byte[eax], '3' + je .setValue + cmp byte[eax], '4' + je .setValue + cmp byte[eax], '5' + je .setValue + cmp byte[eax], '6' + je .setValue + cmp byte[eax], '7' + je .setValue + + jmp .default ;шэрўх ёЄртшь чэрўхэшх яю єьюыўрэш■ + +.setValue: + push ebx + mov bl, byte[eax] + mov byte[sizeStyle], bl + pop ebx + + jmp .end +@@: + inc eax + jmp readOptSize +.default: + mov byte[sizeStyle], 's' ;ёшёЄхьэ√щ +.end: + ret + + + + +updateParams: ;max, size, pos + push eax + mov eax, dword[dataBuffer.size1] + mov dword[editLU.size], eax + mov dword[editLU.pos], eax + + mov eax, dword[dataBuffer.size2] + mov dword[editLD.size], eax + mov dword[editLD.pos], eax + + mov eax, dword[dataBuffer.size3] + mov dword[editRU.size], eax + mov dword[editRU.pos], eax + + mov eax, dword[dataBuffer.size4] + mov dword[editRD.size], eax + mov dword[editRD.pos], eax + + mov eax, dword[radiusBuffer.size] + mov dword[editRadius.size], eax + mov dword[editRadius.pos], eax + pop eax + ret + + + +selfName db 'HACONFIG', 0 +selfNameSize = 8 ;фю 11 byte +; +compareBytes: + push edi esi ecx ebx + mov eax, 0 ;xor eax, eax + mov ecx, selfNameSize ;max ЁрчьхЁ ёЄЁюъ 11 +@@: + mov bl, byte[edi] + cmp bl, byte[esi] + jne compareBytes.no + inc edi + inc esi + cmp ecx, 0 + je @f + dec ecx + jmp @b +.no: + mov eax, 1 +@@: + pop ebx ecx esi edi + ret +; +slotMax dd 0 +selfPID dd 0 +buf db 1024 dup(0) +copyKill: + push eax ebx ecx esi edi + + ;ёяхЁтр яЁюўЄ▐ь ётю■ шэЇюЁьрЎш■ + mcall 9, buf, -1 + mov eax, dword[buf+30] + mov dword[selfPID], eax + + ;єърчрЄхыш, ъюЄюЁ√х эшъюуфр эх ьхэ▀■Єё▀: + mov esi, selfName ;яхЁтр▀ ёЄЁюър - шь▀ Єхъє∙хую яЁшыюцхэш▀ + mov edi, buf ;тЄюЁр▀ ёЄЁюър - шь▀ Єхъє∙хую ёыюЄр + add edi, 10 + + mov ecx, 1 +@@: + mcall 9, buf, ecx + mov dword[slotMax], eax + + ;хёыш ¤Єю ь√ ёрьш, Єю яЁюяєёърхь яЁютхЁъє + mov eax, dword[buf+30] + cmp eax, dword[selfPID] + je copyKill.propusk + + call compareBytes ;ёЁртэштрхь 11 срщЄ ёЄЁюъ, Ёхчєы№ЄрЄ т eax + + cmp eax, 0 + je copyKill.selfKill + +.propusk: + inc ecx + cmp ecx, dword[slotMax] + ja @f + jmp @b + +.selfKill: + pop edi esi ecx ebx eax + mcall -1 + ret +@@: + pop edi esi ecx ebx eax + ret + + WindowsWidth = 550 + WindowsHeight = 235 +coord: ;ъююЁфшэрЄ√ юъэр яЁшыюцхэш▀ + .y dw 0 + .x dw 0 + +draw_window: + mcall 12, 1 ; Start window redraw + + ;юЄюсЁрчшь юъэю яю ЎхэЄЁє ¤ъЁрэр фы▀ ¤Єюую: + mcall 14 ;яюыєўшь ЁрчьхЁ√ ¤ъЁрэр + mov dword[coord], eax ;яюыюцшь ЁрчьхЁ√ ¤ъЁрэр т ъююЁфшэрЄ√ + shr word[coord.x], 1 ;тхЁэхх яюыюцшь шї яюыютшэє + shr word[coord.y], 1 + + ;т√ўшёы▀хь ъююЁфшэрЄ√ юъэр, ўЄюс√ юъэю с√ыю яю ёхЁхфшэх ¤ъЁрэр + sub word[coord.x], WindowsWidth/2 + sub word[coord.y], WindowsHeight/2 + + mov eax, 0 ; function 0 : define and draw window + mov ebx, 0 ; [x start] *65536 + [x size] + mov bx, word[coord.x] + shl ebx, 16 + mov bx, WindowsWidth + + mov ecx, 0 + mov cx, word[coord.y] ; [y start] *65536 + [y size] + shl ecx, 16 + mov cx, WindowsHeight + + mov edx, 0x14ffffff ; color of work area RRGGBB + ; 0x02000000 = window type 4 (fixed size, skinned window) + mov esi, 0x808899ff ; color of grab bar RRGGBB + ; 0x80000000 = color glide + mov edi, title + mcall + + invoke edit_box_draw, editLU ;Ёшёютрэшх edit box'ют + invoke edit_box_draw, editLD + invoke edit_box_draw, editRU + invoke edit_box_draw, editRD + + ;Ёшёєхь ъэюяъє ш хх ЄхъёЄ + buttonAppleY = WindowsHeight-40 + mcall 8, , , 2, 0x00AABBCC + mcall 4, , 0x10FFFFFF, buttonText, buttonTextSize + + ;Ёшёєхь х∙▐ 4 ъэюяъш фы▀ фшрыюуютюую юъэр т√сюЁр Їрщыр + ;эюьхЁр 4,5,6 ш 7 + buttonW = 30 + buttonH = 21 + ;ыхт√щ тхЁїэшщ єуюы + mcall 8, , <85,buttonH>, 4, 0x00AABBCC + ;ыхт√щ эшцэшщ єуюы + mcall 8, , <120,buttonH>, 5 + ;яЁрт√щ тхЁїэшщ єуюы + mcall 8, , <85,buttonH>, 6 + ;яЁрт√щ эшцэшщ єуюы + mcall 8, , <120,buttonH>, 7 + + ;Ёшёєхь ЄхъёЄ√ фы▀ ¤Єшї 4 ъэюяюъ + mov ecx, 0xFFFFFF ;схы√щ ЎтхЄ ЄхъёЄр + mov edx, commonButtonText ;ёЄЁюър ЄхъёЄр + mov esi, commonButtonTextSize ;ЁрчьхЁ ЄхъёЄр т ёшьтюырї + ;ъююЁфшэрЄ√ ЄхъёЄр (x, y) + deltaCommonTextX = 7 + deltaCommonTextY = 6 + mcall 4, + mcall 4, + mcall 4, + mcall 4, + + ;delete mode button, if it exist + mov edx, 0x80000008 + mcall 8 + ;draw button Mode + buttonModeX = 30 ;433 + buttonModeY = 160 ;50 + buttonModeWidth = 300 + buttonModeHeight = 20 + buttonModeTextYoffset = 3 + buttonModeTextXoffset = 5 + mcall 8, , , 8, 0x00FFFFFF + mcall 13, , , 0xAABBCC + ;draw text for button Mode + mov ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset) ;(x, y) + mov ecx, 0x10000000 + call setTextModeMenu + mov esi, valueModeMenuSize + mcall 4 + mov ebx, (buttonModeX+buttonModeWidth-12) * 65536 + (buttonModeY+buttonModeTextYoffset+3) + mov ecx, 0x80FFFFFF + mov edx, symbolDownArrow + mcall 4 + + ;ъэюяър т√сюЁр уюЁ▀ўхщ ъыртш°ш + buttonHotKeyX = 350-10 + buttonHotKeyWidth = 90 + mov edx, 0x80000009 ;єфры▀хь + mcall 8 + cmp byte[mode], 49 ;Ёшёєхь т√сюЁ ъыртш°ш, Єюы№ъю хёыш mode > 1 + jbe @f + ;Ёшёєхь эютє■ + push eax ebx ecx edx esi + mov ebx, buttonHotKeyX*65536 + buttonHotKeyWidth ;X + Width + mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height + mov edx, 0x00000009 ;button id + mov esi, 0x00FFFFFF ;color button + mcall 8 + pop esi edx ecx ebx eax + ;ЄхъёЄ яюфёърчъш фы▀ уюЁ▀ўхщ ъыртш°ш + mov ebx, (buttonHotKeyX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset) ;(x, y) + mov ecx, 0x90224466 + call setTextForHotKey + mov esi, valueModeMenuSize + mcall 4 + ;чруюыютюъ + push eax ebx ecx edx edi esi + mov ebx, buttonHotKeyX * 65536 + (buttonModeY-11) + mov ecx, 0x80224466 + mov edx, hkCaption + mov esi, 3 + mcall 4 + pop esi edi edx ecx ebx eax + @@: + + ;юЄюсЁрцрхь эрёЄЁющъє Ёрфшєёр фхщёЄтш▀ цхёЄр, Єюы№ъю хёыш т√сЁрэ Ёхцшь 3 + cmp byte[mode], 51 + jne @f + ;чруюыютюъ + push eax ebx ecx edx edi esi + mov ebx, (buttonHotKeyX + buttonHotKeyWidth + 20) * 65536 + (buttonModeY-11) + mov ecx, 0x80224466 + mov edx, radiusCaption + mov esi, 3 + mcall 4 + pop esi edi edx ecx ebx eax + invoke edit_box_draw, editRadius + @@: + + call draw_super_text + + LineLength = 62 + mov ebx, Otstup * 65536 + 32 ; draw info text with function 4 (x, y) + + ;xor ecx, ecx + ;mov cl, 1 ;byte[mysize] + ;shl ecx, 24 + ;add ecx, 0x224466 + ;or ecx, 0x00224466 ;80224466 + mov ecx, 0x10224466 + + mov edx, text + mov esi, LineLength + mov eax, 4 + + .newline: ; text from the DATA AREA + mcall + add ebx, 15 + add edx, LineLength + cmp byte[edx], 0 + jne .newline + + mcall 12, 2 ; End window redraw + + ret + +hkSymbol: db 0, 0 + +setTextForHotKey: + push eax + mov al, byte[hkSymbol] + cmp al, 0 + jne @f + mov edx, hkHint + mov dword[hkSize], 5 ;чэрўхэшх яю єьюыўрэш■ SPACE ;shift + jmp setTextForHotKey.end +@@: + cmp al, 1 + jne @f + mov edx, hkAlt + mov dword[hkSize], 3 + jmp setTextForHotKey.end +@@: + cmp al, 2 + jne @f + mov edx, hkShift + mov dword[hkSize], 5 + jmp setTextForHotKey.end +@@: + cmp al, 3 + jne @f + mov edx, hkCtrl + mov dword[hkSize], 4 + jmp setTextForHotKey.end +@@: + cmp al, 32 + jne @f + mov edx, hkSpace + mov dword[hkSize], 5 + jmp setTextForHotKey.end +@@: + cmp al, 96 ;'`' + je setTextForHotKey.symb + cmp al, 126 ;'~' + je setTextForHotKey.symb + cmp al, 48 ;'0' + jb @f + cmp al, 57 ;'9' + ja @f +.symb: + mov edx, hkSymbol + mov dword[hkSize], 1 + jmp setTextForHotKey.end +@@: + cmp al, 97 ;'a' + jb @f + cmp al, 122 ;'z' + ja @f + ;jmp setTextForHotKey.symb + mov edx, hkSymbol + mov dword[hkSize], 1 + jmp setTextForHotKey.end +@@: + cmp al, 65 ;'A' + jb @f + cmp al, 90 ;'Z' + ja @f + ;jmp setTextForHotKey.symb + mov edx, hkSymbol + mov dword[hkSize], 1 + jmp setTextForHotKey.end +@@: + mov word[hkSymbol], 0 ;хёыш цх яюярыю ўЄю-Єю эхшчтхёЄэюх, Єю ёюЄЁ▐ь хую + mov edx, hkHint + mov dword[hkSize], 5 ;shift or space - чэрўхэшх яю єьюыўрэш■ +.end: + pop eax + ret + + +setTextModeMenu: + cmp byte[mode], 48 + jne @f + mov edx, valueModeMenu0 + ret +@@: + cmp byte[mode], 49 + jne @f + mov edx, valueModeMenu1 + ret +@@: + cmp byte[mode], 50 + jne @f + mov edx, valueModeMenu2 + ret +@@: + cmp byte[mode], 51 + jne @f + mov edx, valueModeMenu3 + ret +@@: + mov edx, valueModeMenu1 + ret + + + + +saveKey: + cmp word[hkSymbol], 0 + je .default + cmp byte[hkSymbol], 1 + je .alt + cmp byte[hkSymbol], 2 + je .shift + cmp byte[hkSymbol], 3 + je .ctrl + cmp byte[hkSymbol], 32 + je .space +.other: + mov esi, hkSymbol + mov byte[esi+1], 0 + mov dword[hkSize], 1 + jmp .end +.space: + mov esi, hkSpace + mov dword[hkSize], 5 + jmp .end +.ctrl: + mov esi, hkCtrl + mov dword[hkSize], 4 + jmp .end +.alt: + mov esi, hkAlt + mov dword[hkSize], 3 + jmp .end +.default: +.shift: + mov esi, hkShift + mov dword[hkSize], 5 +.end: + mov ebx, hkSize ;єърчрЄхы№ эр dword[hkSize] + call copyParam + ret + + + + + +align 16 +@IMPORT: + +library box_lib, 'box_lib.obj' + +import box_lib,\ + edit_box_draw, 'edit_box_draw',\ + edit_box_key, 'edit_box_key',\ + edit_box_mouse, 'edit_box_mouse',\ + init_checkbox, 'init_checkbox2',\ + check_box_draw, 'check_box_draw2',\ + check_box_mouse, 'check_box_mouse2',\ + option_box_draw, 'option_box_draw',\ + option_box_mouse, 'option_box_mouse' + +commonButtonText db '...', 0 ;ЄхъёЄ фы▀ ъэюяюъ т√чютр OpenDial +commonButtonTextSize = 3 + +if lang eq ru_RU ;хёыш ▀ч√ъ ёсюЁъш Ёєёёъшщ + +text db "Конфигуратор Hot Angles отвечает за настройку активных углов. " + db "Настройте параметры под себя или отключите эту опцию. " + db " ", 0 + hed: +title db "Конфигуратор утилиты Hot Angles", 0 +buttonText db "Применить", 0 +buttonTextSize = 9 + +ch_text db 'Включить/активировать "Hot Angles"', 0 + +superText: + .lu db 'Команда левого верхнего угла: ', 0 + .ld db 'Команда левого нижнего угла: ', 0 + .ru db 'Команда правого верхнего угла:', 0 + .rd db 'Команда правого нижнего угла: ', 0 +superTextSize = 30 + +valueModeMenuSize = 32 +ModeMenu db 'Режим работы:',0 +valueModeMenu0 db 'отключено ',0 +valueModeMenu1 db 'классический режим ',0 +valueModeMenu2 db 'режим горячей клавиши ',0 +valueModeMenu3 db 'режим жеста по клавише активации',0 + +hkCaption: db 'Клавиша:',0 +;hkHint: db 'Нажмите любую клавишу',0 +radiusCaption: db 'Радиус:',0 + +else ;шэрўх рэуышщёъшщ ЄхъёЄ + +text db "This is a Hot Angles Configurator. " + db "Set the parameters bellow for yourself or disable this option." + db " ", 0 + hed: +title db "Hot Angles Configurator", 0 +buttonText db " Apply ", 0 +buttonTextSize = 9 + +ch_text db 'Activate "Hot Angles"',0 ;ёюяЁютюцфр■∙шщ ЄхъёЄ фы▀ ўхъ сюъёр + +superText: + .lu db 'Left up angle command: ', 0 + .ld db 'Left down angle command: ', 0 + .ru db 'Right up angle command: ', 0 + .rd db 'Right down angle command:', 0 +superTextSize = 25 + +valueModeMenuSize = 32 +ModeMenu db 'Mode:',0 +valueModeMenu0 db 'disabled ',0 +valueModeMenu1 db 'classic mode ',0 +valueModeMenu2 db 'hot key mode ',0 +valueModeMenu3 db 'activation key gesture mode ',0 + +hkCaption: db 'Key:',0 +;hkHint: db 'press any key',0 +radiusCaption: db 'Radius:',0 + +end if + +hkAlt: db 'Alt',0 +hkShift: db 'Shift',0 +hkCtrl: db 'Ctrl',0 +hkSpace: db 'Space',0 +hkHint: db '?',0 +hkSize: rd 1 ;ЁрчьхЁ ёЄЁюъш ё шьхэхь ъыртш°ш + +draw_super_text: + push eax ebx ecx edx edi esi + + mov ecx, 0 + mov ch, byte[mysize] + shl ecx, 16 + add ecx, 0x224466 + + mcall 4, ,,superText.lu,superTextSize + mcall 4, ,,superText.ld,superTextSize + mcall 4, <290,74> ,,superText.ru,superTextSize + mcall 4, <290,109> ,,superText.rd,superTextSize + + mov ebx, Otstup * 65536 + (buttonModeY-11) + or ecx, 0x80000000 + mov edx, ModeMenu + mov esi, 3 + mcall 4 + +; mov ebx, buttonHotKeyX * 65536 + (buttonModeY-11) +; or ecx, 0x80000000 +; mov edx, hkCaption +; mov esi, 3 +; mcall 4 + + pop esi edi edx ecx ebx eax + ret + +editID db 0 +initEBX: + cmp byte[editID], 4 + jne @f + mov ebx, dataBuffer.1 + ret +@@: + cmp byte[editID], 5 + jne @f + mov ebx, dataBuffer.2 + ret +@@: + cmp byte[editID], 6 + jne @f + mov ebx, dataBuffer.3 + ret +@@: + cmp byte[editID], 7 + jne @f + mov ebx, dataBuffer.4 + ret +@@: + ret +setRESULT: + cmp byte[editID], 4 + jne @f + mov dword[dataBuffer.size1], ecx + mov dword[editLU.size], ecx + mov dword[editLU.pos], ecx + ret +@@: + cmp byte[editID], 5 + jne @f + mov dword[dataBuffer.size2], ecx + mov dword[editLD.size], ecx + mov dword[editLD.pos], ecx + ret +@@: + cmp byte[editID], 6 + jne @f + mov dword[dataBuffer.size3], ecx + mov dword[editRU.size], ecx + mov dword[editRU.pos], ecx + ret +@@: + cmp byte[editID], 7 + jne @f + mov dword[dataBuffer.size4], ecx + mov dword[editRD.size], ecx + mov dword[editRD.pos], ecx + ret +@@: + ret +copyPath: + push eax ebx ecx edx ;copy file name path + mov eax, openfile_path ;dword[OpenDialog_data.openfile_path] + call initEBX ;mov ebx, dataBuffer.1 ;.data + mov ecx, 0 + @@: + mov dl, byte[eax] + cmp dl, 0 ;byte[eax], 0 + je @f + mov byte[ebx], dl + inc eax + inc ebx + inc ecx + jmp @b + @@: + mov byte[ebx], 0 + call setRESULT + pop edx ecx ebx eax + ret + + +IntToStr: ;in esi - ёЄЁюър; eёx - ўшёыю + push eax ecx edx esi + or ecx, ecx + jnz @f + mov byte[esi], '0' + inc esi + jmp .end +@@: + mov eax, ecx + mov ecx, 10 +.next: + xor edx, edx + div ecx + add edx, '0' + + mov byte[esi], dl + + inc esi + or eax, eax + jz .end + jmp .next +.end: + mov byte[esi], 0 ;ъырф▐ь чртхЁ°р■∙шщ эюы№ + pop esi edx ecx eax + call reverseString ;фхырхь ЁхтхЁё ёЄЁюъш + ret + +;тїюф: esi - єърчрЄхы№ эр ёЄЁюъє +reverseString: + push eax esi edi + + mov al, byte[esi] ;хёыш ёЄЁюър яєёЄр▀ Єю т√їюфшь ЁхтхЁё фхырЄ№ эх эрфю + cmp al, 0 + je reverseString.end + + mov edi, esi ;шэрўх эрщф▐ь яючшЎш■ яюёыхфэхую ёшьтюыр ёЄЁюъш ш яюыюцшь х▐ т edi +.go_last_symbol: + mov al, byte[edi+1] + cmp al, 0 + je @f + + inc edi + jmp reverseString.go_last_symbol +@@: + push ebx +.rev: + cmp esi, edi + jae @f + + ;ьхэ▀хь ьхёЄрьш ёшьтюы√ т Ўшъых + mov al, byte[edi] + mov bl, byte[esi] + mov byte[edi], bl + mov byte[esi], al + + inc esi + dec edi + jmp reverseString.rev +@@: + pop ebx +.end: + pop edi esi eax + ret + + + +align 4 +but_open_dlg: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],0 + stdcall[OpenDialog_Start], OpenDialog_data + cmp [OpenDialog_data.status],2 + je @f + cmp [OpenDialog_data.status],0 ;яюы№чютрЄхы№ эрцры Cancel? + je .end_open + ;ъюф яЁш єфрўэюь юЄъЁ√Єшш фшрыюур + call copyPath + jmp .end_open + @@: + ;ъюф яЁш эх єфрўэюь юЄъЁ√Єшш фшрыюур + ;... + .end_open: + popad + ret + +;фрээ√х фы▀ фшрыюур юЄъЁ√Єш▀ Їрщыют +align 4 +OpenDialog_data: +.type dd 0 ;0 - юЄъЁ√Є№, 1 - ёюїЁрэшЄ№, 2 - т√сЁрЄ№ фшЁхъЄюЁш■ +.procinfo dd pi +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 яєЄ№ ъ фшрыюує юЄъЁ√Єш▀ Їрщыют +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+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 + +default_dir db '/sys',0 ;фшЁхъЄюЁш▀ яю єьюыўрэш■ +communication_area_name: db 'FFFFFFFF_open_dialog',0 +open_dialog_name: db 'opendial',0 +communication_area_default_path: db '/sys/File managers/',0 + +Filter: +dd Filter.end - Filter.1 +.1: +;db 'KEX',0 +.end: +db 0 + +mode db 49 ;'1' +modeMenu dd 0 +coordModeMenu: + .x dw 100 + .y dw 200 + + +system_dir0 db '/sys/lib/' +lib0_name db 'proc_lib.obj',0 +system_dir1 db '/sys/lib/' +lib1_name db 'kmenu.obj',0 + +symbolDownArrow db 25,0 + +;library structures +l_libs_start: + lib0 l_libs lib0_name, file_name, system_dir0, import_proclib + lib1 l_libs lib1_name, file_name, system_dir1, import_libkmenu +load_lib_end: + + +edMaxSize = 510 ;ЄхяхЁ№ ё эют√ь ъюьяюэхэЄюь ьюцэю ш 511 єърчрЄ№ +edMax = 0 ;max, size, pos + +align 4 +editLU edit_box 230-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax ;ed_focus +editLD edit_box 230-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax +editRU edit_box 230-buttonW,290,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax +editRD edit_box 230-buttonW,290,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax +editRadius edit_box 40,(buttonHotKeyX + buttonHotKeyWidth + 20),buttonModeY, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, 4, radiusBuffer.data, mouse_dd, ed_figure_only, edMax, edMax + +align 4 +import_proclib: + OpenDialog_Init dd aOpenDialog_Init + OpenDialog_Start dd aOpenDialog_Start +dd 0,0 + aOpenDialog_Init db 'OpenDialog_init',0 + aOpenDialog_Start db 'OpenDialog_start',0 + +align 4 +import_libkmenu: + kmenu_init dd akmenu_init + kmainmenu_draw dd akmainmenu_draw + kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent + ksubmenu_new dd aksubmenu_new + ksubmenu_delete dd aksubmenu_delete + ksubmenu_draw dd aksubmenu_draw + ksubmenu_add dd aksubmenu_add + kmenuitem_new dd akmenuitem_new + kmenuitem_delete dd akmenuitem_delete + kmenuitem_draw dd akmenuitem_draw +dd 0,0 + akmenu_init db 'kmenu_init',0 + akmainmenu_draw db 'kmainmenu_draw',0 + akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 + aksubmenu_new db 'ksubmenu_new',0 + aksubmenu_delete db 'ksubmenu_delete',0 + aksubmenu_draw db 'ksubmenu_draw',0 + aksubmenu_add db 'ksubmenu_add',0 + akmenuitem_new db 'kmenuitem_new',0 + akmenuitem_delete db 'kmenuitem_delete',0 + akmenuitem_draw db 'kmenuitem_draw',0 + +sc system_colors +mouse_dd rd 1 + +sizeStyle: rb 1 ;ЁрчьхЁ ЄхъёЄр ш юёЄры№э√ї ¤ыхьхэЄют юъэр +mysize: rb 1 ;rd 1 +radiusBuffer: ;сєЇхЁ фы▀ яюы▀ Ёрфшєёр цхёЄр + .data: rb 6 + .size: rd 1 +radiusBufferEnd: + +button_press rd 0 ;for kmenu + +sys_path: rb 4096 +file_name: rb 4096 +plugin_path: rb 4096 +openfile_path: rb 4096 +filename_area: rb 256 +rb 1024 +pi process_information + +keyscan: rb 1 +keystr: + .data: rb 4 ;ёЄЁюър ёю чэрўхэшхь ёърэъюфр ръЄштрЎшюээющ ъыртш°ш + .size: rd 1 ;ЁрчьхЁ ёюфхЁцшьюую ёЄЁюъш схч яюёыхфэхую эєы▀ + +dataBuffer: +.1: rb 512 +.2: rb 512 +.3: rb 512 +.4: rb 512 +.size1: rd 1 +.size2: rd 1 +.size3: rd 1 +.size4: rd 1 +;255+255+2 = 512 +;фтр чрярёэ√ї срщЄр эхюсїюфшь√ фы▀ Єюую ўЄю с√ эх яхяхЁхяшёрЄ№ ёыхфє■∙шхщ срщЄ√, т ъюэЎх сєЇхЁр 0 +dataBufferEnd: + + +I_END: + rb 4096 +align 16 +STACKTOP: + +MEM: diff --git a/programs/other/kpack/kpack.asm b/programs/other/kpack/kpack.asm index aebbbe55e..3fb379914 100644 --- a/programs/other/kpack/kpack.asm +++ b/programs/other/kpack/kpack.asm @@ -29,7 +29,7 @@ include '../../config.inc' ; for nightbuild include '../../KOSfuncs.inc' include '../../macros.inc' include '../../gui_patterns.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../load_lib.mac' @use_library diff --git a/programs/other/outdated/dictionary/dictionary.ASM b/programs/other/outdated/dictionary/dictionary.ASM index d3cdbcc4e..059378740 100644 --- a/programs/other/outdated/dictionary/dictionary.ASM +++ b/programs/other/outdated/dictionary/dictionary.ASM @@ -1,415 +1,419 @@ - -use32 ; транслятор, использующий 32 разрядных команды - org 0 ; базовый адрес кода, всегда 0x0 - db 'MENUET01' ; идентификатор исполняемого файла (8 байт) - dd 1 ; версия формата заголовка исполняемого файла - dd start ; адрес, на который система передаёт управление - ; после загрузки приложения в память - dd i_end ; размер приложения - dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта - dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше - dd 0 ; указатель на строку с параметрами. - dd 0;pathprog ;путь и имя проги - -include "../../../macros.inc" -include "../../../proc32.inc" -include "API.INC" -include "../../../dll.inc" -include '../../../develop/libraries/box_lib/trunk/box_lib.mac' -;include '../../../KOSfuncs.inc' -;include '../../../load_lib.mac' - -start: - mcall 68,11 ;инициализируем кучу - test eax,eax - jz Win1.Exit - stdcall dll.Load, @IMPORT - - -; mov ecx,1024 -; mov edi,pathprog -; xor al,al -; -; repne scasb -; -; dec edi -; mov esi,WordFile -; @@: -; lodsb -; stosb -; test al,al -; jne @b - - ;GetFileInfo fStruc,pathprog,fInfo ;проверка на наличие файла - ;test eax,eax ;заодно и получу размер файла - ;je WordFileOK - - ;stdcall [mb_create],msgNotFound,mbThread - ;jmp Win1.Redraw - -;WordFileOK: -; stdcall mem.Alloc,dword [fInfo+32] -; mov ebx,dword [fInfo+32] -; mov [filBuffer],eax -; add dword[fInfo+32],eax ;здесь хранится указатель на конец буфера -; ReadFile fStruc,pathprog,ebx,eax,0 -; test eax,eax -; jz Win1.Redraw -; -; add al,30h -; mov [NumErr],al -; stdcall [mb_create],msgNotFound1,mbThread -; - - -align 4 -Win1.Redraw: - RedrawWinBeg - - xor eax,eax - mov ebx,(524*10000h+500) - mov ecx,(548*10000h+200) - mov edx,73FFFFFFh - mov edi,Win1.Caption - int 40h ;окно с прозрачным фонoм - - mcall 9,ThreadInfo,-1 - - mov eax,13 - mov ebx,[ThreadInfo+3Eh] - inc ebx - mov ecx,[ThreadInfo+42h] - inc ecx - mov edx,clWhite - int 40h ;а теперь не прозрачным:) - - call Perevod ; в перерисовке сразу переводим введённое слово - call NextPerev - stdcall [edit_box_draw],EditIN - RedrawWinEnd - -align 4 -Win1.Events: - WaitMessage - dec eax - jz Win1.Redraw - dec eax - jz Win1.Key - dec eax - jz Win1.ButtonPress - - ;stdcall [edit_box_mouse],EditIN - - jmp Win1.Events - -Win1.ButtonPress: - GetButtonPressed - - cmp ah,idbExit - je Win1.Exit - - jmp Win1.Events - -Win1.Key: - GetKeyPressed - stdcall [edit_box_key],EditIN - jmp Win1.FonRedraw - - -Win1.Exit: - - ExitProcess - -Win1.FonRedraw: ;перерисовка области вывода - mcall 9,ThreadInfo,-1 - - mov eax,13 - mov ebx,[ThreadInfo+3Eh] - inc ebx - mov ecx,20 - shl ecx,16 - add ecx,[ThreadInfo+42h] - sub ecx,19 - mov edx,clWhite - int 40h - - call Perevod - call NextPerev -jmp Win1.Events - -;------------------------------------------------------------------------------- - -Perevod: ;сам перевод - mov edi,dict;[filBuffer] - - Perev: - xor ebx,ebx - @@: ;сравнием исх. слово со словом под esi - mov al,[text+ebx] - test al,al - je endWord - cmp [ebx+edi],al - jne WordNotFound - inc ebx - jmp @b - - endWord: - cmp byte[ebx+edi],20h - jne WordNotFound - - add edi,ebx - dec edi ;пропускаем пробелы после английского слова - @@: - inc edi - cmp byte[edi],20h - je @b - - xor ebx,ebx - CopyWord: ;копируем перевод в строку для вывода - mov al,[edi+ebx] - cmp al,0Dh - je @f - mov [perevText+ebx],al - inc ebx - jmp CopyWord - @@: - mov byte[perevText+ebx],0 - - OutText 7,25,perevText - ret - - WordNotFound: ;если слово не подошло - add edi,ebx - @@: - cmp byte[edi],0Dh - je NextWord - inc edi - cmp edi,SizeDict;dword [fInfo+32] - jae endPerev - jmp @b - - NextWord: - add edi,2 - cmp edi,SizeDict;dword [fInfo+32] - jae endPerev - jmp Perev - endPerev: - ret - - -;------------------------------------------------------------------------------- -NextPerev: - mov ecx,Lines - mov edi,dict;[filBuffer] - LinePerev: ;цикл рисования строки - xor ebx,ebx - @@: ;сравнием исх. слово со словом под esi - mov al,[text+ebx] - test al,al - je N_endWord - cmp [ebx+edi],al - jne N_WordNotFound - inc ebx - jmp @b - - N_endWord: - cmp ebx,0 - jne N_Ppoisk - ret - - N_Ppoisk: ;поиск начала строки - add edi,ebx - @@: - dec edi - cmp byte[edi],0Ah - jne @b - inc edi - - ;########пропускаем уже переведённое слово######## - xor ebx,ebx - N_NoDouble: - mov al,[text+ebx] - test al,al - je N_Double - cmp [ebx+edi],al - jne N_NoDblOk - inc ebx - jmp N_NoDouble - - N_Double: - cmp byte[ebx+edi],20h - jne N_NoDblOk - - add edi,ebx - @@: - inc edi - cmp byte[edi],0Ah - jne @b - add edi,2 - jmp LinePerev - - N_NoDblOk: ;############вывод результатов#################### - xor ebx,ebx ;копируем результат - N_CopyWord: - mov al,[edi+ebx] - cmp al,20h - je @f - mov [perevText+ebx],al - inc ebx - jmp N_CopyWord - @@: - mov byte[perevText+ebx],0 - add edi,ebx - - mov eax,Lines - sub eax,ecx - dec eax - shl eax,3 - add eax,45 - push ecx - push edi - OutText 7,ax,perevText - pop edi - pop ecx - - @@: - inc edi - cmp byte[edi],20h - je @b - - - xor ebx,ebx - N_CopyPerev: - mov al,[edi+ebx] - cmp al,0Dh - je @f - mov [perevText+ebx],al - inc ebx - jmp N_CopyPerev - @@: - mov byte[perevText+ebx],0 - - mov eax,Lines - sub eax,ecx - dec eax - shl eax,3 - add eax,45 - push ecx - push edi - OutText 127,ax,perevText - pop edi - pop ecx - - @@: - inc edi - cmp byte[edi],0Ah - jne @b - inc edi - - loop @f ;недотягивается до LinePerev - ret - @@: - jmp LinePerev - - N_WordNotFound: - add edi,ebx - @@: - cmp byte[edi],0Dh - je N_NextWord - inc edi - cmp edi,SizeDict;dword [fInfo+32] - jae N_endPerev - jmp @b - - N_NextWord: - add edi,2 - cmp edi,SizeDict;dword [fInfo+32] - jae N_endPerev - jmp LinePerev - N_endPerev: - ret - -;------------------------------------------------------------------------------- -;------------------------------------------------------------------------------- -;------DATA--------------------------------------------------------------------- -;------------------------------------------------------------------------------- -;------------------------------------------------------------------------------- - - idbExit = 1 - - Lines = 16 ;количеств строк - - clTheme = 080B0FFh - - Win1.Caption db 'Dictionary ENG -> RUS',0 - Win1X = 524 - Win1Y = 548 - Win1W = 500 - Win1H = 200 - - Memo.X = 5 - Memo.Y = 20 - Memo.W = 400 - Memo.H = 370 - - EditIN edit_box 350,5,5,0FFFFFFh,06F9480h,0,00h,0,40,\ - text,mouse_dd,ed_focus,0,0 - - - -; msgNotFound: -; dw 0 -; db 'Ошибка',0 -; db 'Файл dictionary.wrd не найден',0 -; db 'Ясно',0 -; db 0 -; -; msgNotFound1: -; dw 0 -; db '!!!',0 -; db 'Ошибка чтения ' -; NumErr: db 0 -; db 0 -; db 'Ясно',0 -; db 0 -; -; WordFile db '.wrd',0 - - -;------------------------------------------------------------------------------- -@IMPORT: -library box_lib,'box_lib.obj',msgbox,'msgbox.obj' -import box_lib,\ - edit_box_draw,'edit_box_draw',\ - edit_box_key,'edit_box_key';,\ - ;edit_box_mouse,'edit_box_mouse' -import msgbox,\ - mb_create,'mb_create' - -dict: -include 'dictionary.wrd' - -SizeDict = $;-dict - - -i_end: -;------------------------------------------------------------------------------- - - ;WordFP rb 1024 -; m1 dd 0 - ;filBuffer rd 1 - - - ThreadInfo: rb 1024 - ;pathprog - mouse_dd rd 1 - text rb 40 - perevText rb 300 - ;fStruc rb 30 - ;fInfo rb 40 - mbThread rb 1024 - - - rb 4096 -mem: - +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +use32 ; транслятор, использующий 32 разрядных команды + org 0 ; базовый адрес кода, всегда 0x0 + db 'MENUET01' ; идентификатор исполняемого файла (8 байт) + dd 1 ; версия формата заголовка исполняемого файла + dd start ; адрес, на который система передаёт управление + ; после загрузки приложения в память + dd i_end ; размер приложения + dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта + dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше + dd 0 ; указатель на строку с параметрами. + dd 0;pathprog ;путь и имя проги + +include "../../../macros.inc" +include "../../../proc32.inc" +include "API.INC" +include "../../../dll.inc" +include '../../../develop/libraries/box_lib/box_lib.mac' +;include '../../../KOSfuncs.inc' +;include '../../../load_lib.mac' + +start: + mcall 68,11 ;инициализируем кучу + test eax,eax + jz Win1.Exit + stdcall dll.Load, @IMPORT + + +; mov ecx,1024 +; mov edi,pathprog +; xor al,al +; +; repne scasb +; +; dec edi +; mov esi,WordFile +; @@: +; lodsb +; stosb +; test al,al +; jne @b + + ;GetFileInfo fStruc,pathprog,fInfo ;проверка на наличие файла + ;test eax,eax ;заодно и получу размер файла + ;je WordFileOK + + ;stdcall [mb_create],msgNotFound,mbThread + ;jmp Win1.Redraw + +;WordFileOK: +; stdcall mem.Alloc,dword [fInfo+32] +; mov ebx,dword [fInfo+32] +; mov [filBuffer],eax +; add dword[fInfo+32],eax ;здесь хранится указатель на конец буфера +; ReadFile fStruc,pathprog,ebx,eax,0 +; test eax,eax +; jz Win1.Redraw +; +; add al,30h +; mov [NumErr],al +; stdcall [mb_create],msgNotFound1,mbThread +; + + +align 4 +Win1.Redraw: + RedrawWinBeg + + xor eax,eax + mov ebx,(524*10000h+500) + mov ecx,(548*10000h+200) + mov edx,73FFFFFFh + mov edi,Win1.Caption + int 40h ;окно с прозрачным фонoм + + mcall 9,ThreadInfo,-1 + + mov eax,13 + mov ebx,[ThreadInfo+3Eh] + inc ebx + mov ecx,[ThreadInfo+42h] + inc ecx + mov edx,clWhite + int 40h ;а теперь не прозрачным:) + + call Perevod ; в перерисовке сразу переводим введённое слово + call NextPerev + stdcall [edit_box_draw],EditIN + RedrawWinEnd + +align 4 +Win1.Events: + WaitMessage + dec eax + jz Win1.Redraw + dec eax + jz Win1.Key + dec eax + jz Win1.ButtonPress + + ;stdcall [edit_box_mouse],EditIN + + jmp Win1.Events + +Win1.ButtonPress: + GetButtonPressed + + cmp ah,idbExit + je Win1.Exit + + jmp Win1.Events + +Win1.Key: + GetKeyPressed + stdcall [edit_box_key],EditIN + jmp Win1.FonRedraw + + +Win1.Exit: + + ExitProcess + +Win1.FonRedraw: ;перерисовка области вывода + mcall 9,ThreadInfo,-1 + + mov eax,13 + mov ebx,[ThreadInfo+3Eh] + inc ebx + mov ecx,20 + shl ecx,16 + add ecx,[ThreadInfo+42h] + sub ecx,19 + mov edx,clWhite + int 40h + + call Perevod + call NextPerev +jmp Win1.Events + +;------------------------------------------------------------------------------- + +Perevod: ;сам перевод + mov edi,dict;[filBuffer] + + Perev: + xor ebx,ebx + @@: ;сравнием исх. слово со словом под esi + mov al,[text+ebx] + test al,al + je endWord + cmp [ebx+edi],al + jne WordNotFound + inc ebx + jmp @b + + endWord: + cmp byte[ebx+edi],20h + jne WordNotFound + + add edi,ebx + dec edi ;пропускаем пробелы после английского слова + @@: + inc edi + cmp byte[edi],20h + je @b + + xor ebx,ebx + CopyWord: ;копируем перевод в строку для вывода + mov al,[edi+ebx] + cmp al,0Dh + je @f + mov [perevText+ebx],al + inc ebx + jmp CopyWord + @@: + mov byte[perevText+ebx],0 + + OutText 7,25,perevText + ret + + WordNotFound: ;если слово не подошло + add edi,ebx + @@: + cmp byte[edi],0Dh + je NextWord + inc edi + cmp edi,SizeDict;dword [fInfo+32] + jae endPerev + jmp @b + + NextWord: + add edi,2 + cmp edi,SizeDict;dword [fInfo+32] + jae endPerev + jmp Perev + endPerev: + ret + + +;------------------------------------------------------------------------------- +NextPerev: + mov ecx,Lines + mov edi,dict;[filBuffer] + LinePerev: ;цикл рисования строки + xor ebx,ebx + @@: ;сравнием исх. слово со словом под esi + mov al,[text+ebx] + test al,al + je N_endWord + cmp [ebx+edi],al + jne N_WordNotFound + inc ebx + jmp @b + + N_endWord: + cmp ebx,0 + jne N_Ppoisk + ret + + N_Ppoisk: ;поиск начала строки + add edi,ebx + @@: + dec edi + cmp byte[edi],0Ah + jne @b + inc edi + + ;########пропускаем уже переведённое слово######## + xor ebx,ebx + N_NoDouble: + mov al,[text+ebx] + test al,al + je N_Double + cmp [ebx+edi],al + jne N_NoDblOk + inc ebx + jmp N_NoDouble + + N_Double: + cmp byte[ebx+edi],20h + jne N_NoDblOk + + add edi,ebx + @@: + inc edi + cmp byte[edi],0Ah + jne @b + add edi,2 + jmp LinePerev + + N_NoDblOk: ;############вывод результатов#################### + xor ebx,ebx ;копируем результат + N_CopyWord: + mov al,[edi+ebx] + cmp al,20h + je @f + mov [perevText+ebx],al + inc ebx + jmp N_CopyWord + @@: + mov byte[perevText+ebx],0 + add edi,ebx + + mov eax,Lines + sub eax,ecx + dec eax + shl eax,3 + add eax,45 + push ecx + push edi + OutText 7,ax,perevText + pop edi + pop ecx + + @@: + inc edi + cmp byte[edi],20h + je @b + + + xor ebx,ebx + N_CopyPerev: + mov al,[edi+ebx] + cmp al,0Dh + je @f + mov [perevText+ebx],al + inc ebx + jmp N_CopyPerev + @@: + mov byte[perevText+ebx],0 + + mov eax,Lines + sub eax,ecx + dec eax + shl eax,3 + add eax,45 + push ecx + push edi + OutText 127,ax,perevText + pop edi + pop ecx + + @@: + inc edi + cmp byte[edi],0Ah + jne @b + inc edi + + loop @f ;недотягивается до LinePerev + ret + @@: + jmp LinePerev + + N_WordNotFound: + add edi,ebx + @@: + cmp byte[edi],0Dh + je N_NextWord + inc edi + cmp edi,SizeDict;dword [fInfo+32] + jae N_endPerev + jmp @b + + N_NextWord: + add edi,2 + cmp edi,SizeDict;dword [fInfo+32] + jae N_endPerev + jmp LinePerev + N_endPerev: + ret + +;------------------------------------------------------------------------------- +;------------------------------------------------------------------------------- +;------DATA--------------------------------------------------------------------- +;------------------------------------------------------------------------------- +;------------------------------------------------------------------------------- + + idbExit = 1 + + Lines = 16 ;количеств строк + + clTheme = 080B0FFh + + Win1.Caption db 'Dictionary ENG -> RUS',0 + Win1X = 524 + Win1Y = 548 + Win1W = 500 + Win1H = 200 + + Memo.X = 5 + Memo.Y = 20 + Memo.W = 400 + Memo.H = 370 + + EditIN edit_box 350,5,5,0FFFFFFh,06F9480h,0,00h,0,40,\ + text,mouse_dd,ed_focus,0,0 + + + +; msgNotFound: +; dw 0 +; db 'Ошибка',0 +; db 'Файл dictionary.wrd не найден',0 +; db 'Ясно',0 +; db 0 +; +; msgNotFound1: +; dw 0 +; db '!!!',0 +; db 'Ошибка чтения ' +; NumErr: db 0 +; db 0 +; db 'Ясно',0 +; db 0 +; +; WordFile db '.wrd',0 + + +;------------------------------------------------------------------------------- +@IMPORT: +library box_lib,'box_lib.obj',msgbox,'msgbox.obj' +import box_lib,\ + edit_box_draw,'edit_box_draw',\ + edit_box_key,'edit_box_key';,\ + ;edit_box_mouse,'edit_box_mouse' +import msgbox,\ + mb_create,'mb_create' + +dict: +include 'dictionary.wrd' + +SizeDict = $;-dict + + +i_end: +;------------------------------------------------------------------------------- + + ;WordFP rb 1024 +; m1 dd 0 + ;filBuffer rd 1 + + + ThreadInfo: rb 1024 + ;pathprog + mouse_dd rd 1 + text rb 40 + perevText rb 300 + ;fStruc rb 30 + ;fInfo rb 40 + mbThread rb 1024 + + + rb 4096 +mem: diff --git a/programs/other/planet_v/planet_v.asm b/programs/other/planet_v/planet_v.asm index 2fd9bb1e7..eccbd9adf 100644 --- a/programs/other/planet_v/planet_v.asm +++ b/programs/other/planet_v/planet_v.asm @@ -1,907 +1,912 @@ -;Огромная благодарность Maxxxx32, Diamond, Heavyiron -;и другим программистам, а также Теплову Алексею -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1,start,i_end,mem,stacktop,0,sys_path - -include '../../proc32.inc' -include '../../macros.inc' -include '../../KOSfuncs.inc' -include '../../load_img.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' - -min_window_w equ 485 ;минимальная ширина окна -min_window_h equ 325 ;минимальная высота окна -otst_panel_left equ 265 - -include 'tile_fun.inc' -include 'pl_import.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load - -fn_metki db 'pl_metki.lst',0 -ini_name db 'planet_v.ini',0 -ini_sec db 'Map',0 -ini_k_cache db 'Cache',0 -ini_def_cache db '/cache/sat',0 -ini_ext db 'ext' -.number db '?' -.def db 0 ;расширение по умолчанию - - -align 4 -start: - load_libraries l_libs_start,load_lib_end - - ;проверка на сколько удачно загузились библиотеки - mov ebp,lib_0 - .test_lib_open: - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall SF_TERMINATE_PROCESS ;exit not correct - @@: - add ebp,ll_struc_size - cmp ebp,load_lib_end - jl .test_lib_open - - copy_path ini_name,sys_path,file_name,0 - stdcall dword[ini_get_str],file_name,ini_sec,ini_k_cache,dword[edit1.text],dword[edit1.max],ini_def_cache - stdcall [str_len],dword[edit1.text],dword[edit1.max] - mov dword[edit1.size],eax - mov dword[edit1.pos],eax - - stdcall dword[tl_data_init], tree1 - stdcall dword[tl_data_init], tree2 - -;считываем расширения карт из *.ini файла - mov byte[ini_ext.number],'0' -@@: ;считываем параметры от ext1 до ext9 - inc byte[ini_ext.number] - stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def - cmp byte[txt_tile_type_0],0 - je @f - stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 - jmp @b -@@: - mov byte[ini_ext.number],'0' ;считываем параметр от ext0 который будет выбран в списке - stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def - cmp byte[txt_tile_type_0],0 - jne @f - mov dword[txt_tile_type_0],'.bmp' ;если в *.ini файле ничего нет добавляем расширение .bmp - @@: - stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 - -; init bmp file - stdcall mem.Alloc, dword RGB_TILE_SIZE+300 ;300 - запасные байты с учетом заголовка bmp файла - mov [bmp_icon],eax - - stdcall array_tile_function, tile_00,max_tiles_count,tile_init - stdcall tiles_init_grid, tile_00,max_tiles_count,max_tiles_cols - - load_image_file 'tl_sys_16.png',tree_sys_icon - mov eax,[tree_sys_icon] - mov [tree1.data_img_sys],eax - mov [tree2.data_img_sys],eax - - load_image_file 'tl_nod_16.bmp',tree_nod_icon - mov eax,[tree_nod_icon] - mov [tree1.data_img],eax - mov [tree2.data_img],eax - - mcall SF_SET_EVENTS_MASK,0x27 - init_checkboxes2 ch1,checkboxes_end - - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - ;установка системных цветов - edit_boxes_set_sys_color edit1,editboxes_end,sc - check_boxes_set_sys_color2 ch1,checkboxes_end,sc - - mov byte[file_name],0 - - ; OpenDialog initialisation - stdcall [OpenDialog_Init],OpenDialog_data - -align 4 -red_win: - call draw_window - call but_MetLoad - call but_Refresh ; Auto Refresh after program start - -align 4 -still: - mcall SF_WAIT_EVENT - - cmp al,0x1 ;изм. положение окна - jz red_win - cmp al,0x2 - jz key - cmp al,0x3 - jz button - - stdcall [check_box_mouse],ch2 - stdcall [check_box_mouse],ch1 - stdcall [edit_box_mouse], edit1 - stdcall [edit_box_mouse], edit2 - stdcall [tl_mouse], tree1 - stdcall [tl_mouse], tree2 - - jmp still - -align 4 -key: - push eax ebx - mcall SF_GET_KEY - stdcall [edit_box_key], edit1 - stdcall [edit_box_key], edit2 - - stdcall [tl_key],tree1 - stdcall [tl_key],tree2 - - mov ebx,dword[el_focus] ;что-бы карта не двигалась если окна treelist в фокусе - cmp ebx, dword tree1 - je .end_f - cmp ebx, dword tree2 - je .end_f - - ;что-бы карта не двигалась если текстовые поля в фокусе - test word[edit1.flags],10b ;ed_focus - jne .end_f - test word[edit2.flags],10b ;ed_focus - jne .end_f - - cmp ah,179 ;Right - jne @f - call CursorMoveRight - @@: - cmp ah,176 ;Left - jne @f - cmp dword[map.coord_x],0 - je @f - dec dword[map.coord_x] - ;сдвигаем сетку тайлов вправо, что-бы часть тайлов совпали и пришлось меньше загружать новых - stdcall tiles_grid_move_right, tile_00,max_tiles_count,max_tiles_cols - call but_Refresh - @@: - cmp ah,177 ;Down - jne @f - call CursorMoveDown - @@: - cmp ah,178 ;Up - jne @f - cmp dword[map.coord_y],0 - je @f - dec dword[map.coord_y] - ;сдвигаем сетку тайлов вниз - stdcall tiles_grid_move_down, tile_00,max_tiles_count,max_tiles_rows - call but_Refresh - @@: - - cmp ah,45 ;- - jne @f - call but_ZoomM - @@: - cmp ah,61 ;+ - jne @f - call but_ZoomP - @@: - - .end_f: - pop ebx eax - jmp still - - -align 4 -draw_window: -pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - mov edx,[sc.work] - or edx,0x33000000 - mcall SF_CREATE_WINDOW,20*65536+min_window_w,20*65536+min_window_h,,,hed - - mcall SF_THREAD_INFO,procinfo,-1 - - cmp dword[procinfo.box.width],min_window_w ; проверяем ширину окна - jge @f - mov dword[procinfo.box.width],min_window_w ; если окно очень узкое, увеличиваем ширину для избежания глюков - @@: - - mov edi,dword[procinfo.box.width] - sub edi,min_window_w-otst_panel_left - mov dword[tree1.box_left],edi - mov dword[tree2.box_left],edi - - mov eax,dword[tree2.box_left] ;двигаем скроллинг - add eax,dword[tree2.box_width] - mov ebx,dword[tree2.p_scroll] - mov word[ebx+2],ax - - mov dword[edit2.left],edi - add dword[edit2.left],370-otst_panel_left - - stdcall dword[tl_draw],dword tree1 - stdcall dword[tl_draw],dword tree2 - mov dword[wScrMetki.all_redraw],1 - stdcall [scrollbar_ver_draw], dword wScrMetki - - mov esi,[sc.work_button] - mcall SF_DEFINE_BUTTON,145*65536+20,5*65536+25,6 - - mcall ,100*65536+20,5*65536+25,5 - - mov ebx,170*65536+40 ;кнопка вызова диалога OpenDial - mov edx,13 - int 0x40 - - mov bx,di - shl ebx,16 - mov bx,100 - mov ecx,265*65536+25 - mov edx,9 - int 0x40 - - ;ebx ... - mov ecx,235*65536+25 - mov edx,8 - int 0x40 - - mov bx,di - add bx,410-otst_panel_left - shl ebx,16 - mov bx,55 - mov ecx,5*65536+25 - mov edx,7 - int 0x40 - - mov bx,di - add bx,440-otst_panel_left - shl ebx,16 - mov bx,30 - mov ecx,265*65536+25 - mov edx,12 - int 0x40 - - mov bx,di - add bx,405-otst_panel_left - shl ebx,16 - mov bx,30 - mov edx,11 - int 0x40 - - mov bx,di - add bx,370-otst_panel_left - shl ebx,16 - mov bx,30 - mov edx,10 - int 0x40 - - mov ecx,[sc.work_button_text] - or ecx,0x80000000 - mcall SF_DRAW_TEXT,152*65536+13,,txt_zoom_p - - mov ebx,107*65536+13 - mov edx,txt_zoom_m - int 0x40 - - mov bx,di - add bx,270-otst_panel_left - shl ebx,16 - mov bx,243 - ;mov ebx,270*65536+243 - mov edx,txt151 - int 0x40 - - mov bx,di - add bx,270-otst_panel_left - shl ebx,16 - mov bx,273 - ;mov ebx,270*65536+273 - mov edx,txt152 - int 0x40 - - mov bx,di - add bx,415-otst_panel_left - shl ebx,16 - mov bx,13 - ;mov ebx,415*65536+13 - mov edx,txt_but_refresh - int 0x40 - - mov bx,di - add bx,380-otst_panel_left - shl ebx,16 - mov bx,275 - ;mov ebx,380*65536+275 - mov edx,txt_met_up - int 0x40 - - mov bx,di - add bx,415-otst_panel_left - shl ebx,16 - mov bx,275 - ;mov ebx,415*65536+275 - mov edx,txt_met_dn - int 0x40 - - - mov bx,di - add bx,450-otst_panel_left - shl ebx,16 - mov bx,275 - ;mov ebx,450*65536+275 - mov edx,txt_met_sh - int 0x40 - - mov ebx,175*65536+13 - mov edx,txt_cache - int 0x40 - - mov ecx,[sc.work_text] - or ecx,0x80000000 - - mov bx,di - ;add bx,450-otst_panel_left - shl ebx,16 - mov bx,35 - ;mov ebx,265*65536+35 - mov edx,txt141 - int 0x40 - - mov bx,135 - mov edx,txt142 - int 0x40 - - call draw_tiles - - stdcall [check_box_draw], ch1 - stdcall [check_box_draw], ch2 - stdcall [edit_box_draw], edit1 - stdcall [edit_box_draw], edit2 - - mcall SF_REDRAW,SSF_END_DRAW -popad - ret - -system_dir0 db '/sys/lib/' -lib0_name db 'box_lib.obj',0 - -system_dir1 db '/sys/lib/' -lib1_name db 'libimg.obj',0 - -system_dir2 db '/sys/lib/' -lib2_name db 'str.obj',0 - -system_dir3 db '/sys/lib/' -lib3_name db 'libini.obj',0 - -system_dir4 db '/sys/lib/' -lib4_name db 'proc_lib.obj',0 - -;library structures -l_libs_start: - lib_0 l_libs lib0_name, file_name, system_dir0, boxlib_import - lib_1 l_libs lib1_name, file_name, system_dir1, libimg_import - lib_2 l_libs lib2_name, file_name, system_dir2, strlib_import - lib_3 l_libs lib3_name, file_name, system_dir3, libini_import - lib_4 l_libs lib4_name, file_name, system_dir4, proclib_import -load_lib_end: - -align 4 -button: - mcall SF_GET_BUTTON - cmp ah,5 - jne @f - call but_ZoomM - jmp still - @@: - cmp ah,6 - jne @f - call but_ZoomP - jmp still - @@: - cmp ah,7 - jne @f - call but_Refresh - jmp still - @@: - - cmp ah,9 - jz but_MetSave - cmp ah,8 - jz but_MetAdd - - cmp ah,10 - jne @f - call but_met_up - jmp still - @@: - cmp ah,11 - jne @f - call but_met_dn - jmp still - @@: - cmp ah,12 - jne @f - call fun_goto_met - jmp still - @@: - cmp ah,13 ;диалог OpenDialog для поиска папки - jne @f - call fun_opn_dlg - jmp still - @@: - cmp ah,1 - jne still - -.exit: - push dword[bmp_icon] - call mem.Free - stdcall array_tile_function, tile_00,max_tiles_count,tile_destroy - - stdcall dword[tl_data_clear], tree1 - mov dword[tree2.data_img_sys],0 ;чистим указатель на системные иконки, - ;т. к. они были удалены верхней функцией tl_data_clear - ;повторный вызов tl_data_clear без чистки указателя вызвет ошибку - mov dword[tree2.data_img],0 ;чистим указатель на иконки узлов - stdcall dword[tl_data_clear], tree2 - -; stdcall dword[img_destroy], dword[data_icon] - mcall SF_TERMINATE_PROCESS - - -;input: -;data_rgb - pointer to rgb data -;size - count img pixels (size img data / 3(rgb) ) -align 4 -proc img_rgb_wdiv2 uses eax ebx ecx edx, data_rgb:dword, size:dword - mov eax,dword[data_rgb] - mov ecx,dword[size] ;ecx = size - imul ecx,3 - @@: ;затемнение цвета пикселей - shr byte[eax],1 - and byte[eax],0x7f - inc eax - loop @b - - mov eax,dword[data_rgb] - mov ecx,dword[size] ;ecx = size - shr ecx,1 - @@: ;сложение цветов пикселей - mov ebx,dword[eax+3] ;копируем цвет соседнего пикселя - add word[eax],bx - shr ebx,16 - add byte[eax+2],bl - - add eax,6 ;=2*3 - loop @b - - mov eax,dword[data_rgb] - add eax,3 - mov ebx,eax - add ebx,3 - mov ecx,dword[size] ;ecx = size - shr ecx,1 - dec ecx ;лишний пиксель - @@: ;поджатие пикселей - mov edx,dword[ebx] - mov word[eax],dx - shr edx,16 - mov byte[eax+2],dl - - add eax,3 - add ebx,6 - loop @b - ret -endp - -;input: -;data_rgb - pointer to rgb data -;size - count img pixels (size img data / 3(rgb) ) -;size_w - width img in pixels -align 4 -proc img_rgb_hdiv2, data_rgb:dword, size:dword, size_w:dword - pushad - - mov eax,dword[data_rgb] ;eax = - mov ecx,dword[size] ;ecx = size - imul ecx,3 - @@: ;затемнение цвета пикселей - shr byte[eax],1 - and byte[eax],0x7f - inc eax - loop @b - - mov eax,dword[data_rgb] ;eax = - mov edi,dword[size_w] - lea esi,[edi+edi*2] ;esi = width*3(rgb) - mov ebx,esi - add ebx,eax - mov ecx,dword[size] ;ecx = size - shr ecx,1 - xor edi,edi - @@: ;сложение цветов пикселей - mov edx,dword[ebx] ;копируем цвет нижнего пикселя - add word[eax],dx - shr edx,16 - add byte[eax+2],dl - - add eax,3 - add ebx,3 - inc edi - cmp edi,dword[size_w] - jl .old_line - add eax,esi - add ebx,esi - xor edi,edi - .old_line: - loop @b - - - mov eax,dword[data_rgb] ;eax = - add eax,esi ;esi = width*3(rgb) - mov ebx,esi - add ebx,eax - mov ecx,dword[size] ;ecx = size - shr ecx,1 - sub ecx,dword[size_w] ;лишняя строка пикселей - xor edi,edi - @@: ;поджатие пикселей - mov edx,dword[ebx] ;копируем цвет нижнего пикселя - mov word[eax],dx - shr edx,16 - mov byte[eax+2],dl - - add eax,3 - add ebx,3 - inc edi - cmp edi,dword[size_w] - jl .old_line_2 - add ebx,esi - xor edi,edi - .old_line_2: - loop @b - - popad - ret -endp - -;input: -;data_rgb - pointer to rgb data -;size - count img pixels (size img data / 3(rgb) ) -align 4 -proc img_rgb_wmul2 uses eax ebx ecx edx, data_rgb:dword, size:dword - ;eax - source - ;ebx - destination - mov ecx,dword[size] ;ecx = size - mov eax,ecx - dec eax - lea eax,[eax+eax*2] ;eax = (size-1)*3 - mov ebx,eax ;ebx = size*3 - add eax,dword[data_rgb] ;eax = pointer + size*3 - add ebx,eax ;ebx = pointer + 2*size*3 - @@: - mov edx,dword[eax] ;edx = pixel color - mov word[ebx],dx - mov word[ebx+3],dx - shr edx,16 - mov byte[ebx+2],dl - mov byte[ebx+3+2],dl - sub eax,3 - sub ebx,6 - loop @b - ret -endp - -;функция для растягивания изображения по высоте в 2 раза -;в указателе data_rgb памяти должно быть в 2 раза больше чем size*3 -;иначе при растягивании будет ошибка, выхода на чужую память -;input: -;data_rgb - pointer to rgb data -;size - count img pixels (size img data / 3(rgb) ) -;size_w - width img in pixels -align 4 -proc img_rgb_hmul2, data_rgb:dword, size:dword, size_w:dword - pushad - - mov esi,dword[size_w] - lea esi,[esi+esi*2] ;esi = width * 3(rgb) - mov eax,dword[size] - lea eax,[eax+eax*2] - mov edi,eax - shl edi,1 - add eax,dword[data_rgb] ;eax = pointer to end pixel (old image) + 1 - add edi,dword[data_rgb] ;edi = pointer to end pixel (new image) + 1 - mov ebx,edi - sub ebx,esi - - .beg_line: - mov ecx,dword[size_w] - @@: - sub eax,3 - sub ebx,3 - sub edi,3 - - mov edx,dword[eax] ;edx = pixel color - mov word[ebx],dx - mov word[edi],dx - shr edx,16 - mov byte[ebx+2],dl - mov byte[edi+2],dl - - loop @b - - sub ebx,esi - sub edi,esi - - cmp eax,dword[data_rgb] - jg .beg_line - - popad - ret -endp - -;input: -;data_rgb - pointer to rgb data -;size - count img pixels (size img data / 3(rgb) ) -;size_w - width img in pixels -align 4 -proc img_rgb_hoffs uses eax ebx ecx edx esi, data_rgb:dword, size:dword, size_w:dword, hoffs:dword - mov esi,dword[size_w] - lea esi,[esi+esi*2] ;esi = width * 3(rgb) - imul esi,dword[hoffs] - - mov eax,dword[size] - lea eax,[eax+eax*2] - add eax,dword[data_rgb] ;eax = pointer to end pixel + 1 - sub eax,3 - mov ebx,eax - add ebx,esi - - mov ecx,dword[size] - dec ecx - @@: - mov edx,dword[eax] ;edx = pixel color - mov word[ebx],dx - shr edx,16 - mov byte[ebx+2],dl - - sub eax,3 - sub ebx,3 - loop @b - ret -endp - - -;input: -;data_rgb - pointer to rgb data -;size_w_old - width img in pixels -;size_w_new - new width img in pixels -;size_h - height img in pixels -align 4 -proc img_rgb_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword - pushad - mov eax, dword[size_w_old] - lea eax, dword[eax+eax*2] ;eax = width(old) * 3(rgb) - mov ebx, dword[size_w_new] - lea ebx, dword[ebx+ebx*2] ;ebx = width(new) * 3(rgb) - mov edx, dword[size_h] - ;dec edx - mov edi, dword[data_rgb] ;edi - получает данные - mov esi, edi - add edi, ebx - add esi, eax - cld - @@: - dec edx ;уменьшаем счетчик оставшихся строк на 1 - cmp edx,0 - jle @f - - mov ecx, ebx - rep movsb ;перенос (копирование) строки пикселей -;stdcall mem_copy,esi,edi,ebx - - add esi,eax ;переход на новую строчку изображения - sub esi,ebx -;add esi,eax -;add edi,ebx - jmp @b - @@: - - popad - ret -endp - -align 4 -proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword - cld - mov esi, dword[source] - mov edi, dword[destination] - mov ecx, dword[len] - rep movsb - ret -endp - -align 4 -proc mem_clear uses eax ecx edi, mem:dword, len:dword - cld - xor al,al - mov edi, dword[mem] - mov ecx, dword[len] - repne stosb - ret -endp - -align 4 -fun_opn_dlg: ;функция для вызова OpenFile диалога - pushad - copy_path open_dialog_name,communication_area_default_path,file_name,0 - mov [OpenDialog_data.type],2 - mov dword[plugin_path],0 ;что-бы при открытии диалогового окна путь всегда брался из OpenDialog_data.dir_default_path - - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je @f - stdcall [str_len],dword[edit1.text],dword[edit1.max] - mov [edit1.size],eax - mov [edit1.pos],eax - stdcall [edit_box_draw], edit1 - @@: - popad - ret - -txt_met_up db 24,0 -txt_met_dn db 25,0 -txt_met_sh db '*',0 -txt_zoom_m db '-',0 -txt_zoom_p db '+',0 -txt151 db 'Добавить метку',0 -txt152 db 'Сохранить метки',0 -txt_but_refresh db 'Обновить',0 -txt_cache db 'Cache:',0 -txt141 db 'Вид карты',0 -txt142 db 'Выбор метки',0 - -; check_boxes -ch1 check_box2 (5 shl 16)+12, (5 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text1, ch_flag_en -ch2 check_box2 (5 shl 16)+12, (20 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text2, ch_flag_en -checkboxes_end: - -ch_text1 db 'брать сверху',0 -ch_text2 db 'брать снизу',0 - -edit1 edit_box 190, 215, 10, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 4090, openfile_path, mouse_dd, 0 -edit2 edit_box 100, 370, 240, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 30, ed_buffer.2, mouse_dd, 0 -editboxes_end: - -tree1 tree_list 10,10, tl_list_box_mode+tl_key_no_edit, 16,16,\ - 0x8080ff,0x0000ff,0xffffff, 265,45,90,85, 0,0,0,\ - el_focus, 0,fun_new_map_type -tree2 tree_list 32,300, tl_draw_par_line, 16,16,\ - 0x8080ff,0x0000ff,0xffffff, 265,145,190,85, 0,12,0,\ - el_focus, wScrMetki,fun_goto_met - -align 4 -wScrMetki scrollbar 16,0, 100,0, 15, 100, 30,0, 0xeeeeee, 0xbbddff, 0, 1 - -ed_buffer: ;ЄхъёЄ фы  edit -.2: rb 32 - -el_focus dd tree1 - -tree_sys_icon dd 0 -tree_nod_icon dd 0 - -bmp_icon dd 0 ;память для загрузки изображения -data_icon dd 0 ;память для преобразования картинки функциями libimg - -run_file_70 FileInfoBlock - - -txt_tile_path db 'tile path',0 - rb 300 -txt_tile_type dd txt_tile_type_0 ;указатель на выбранный тип файлов -txt_tile_type_0 db 0 - rb 10 - -;--------------------------------------------------------------------- -align 4 -OpenDialog_data: -.type dd 2 -.procinfo dd procinfo ;+4 -.com_area_name dd communication_area_name ;+8 -.com_area dd 0 ;+12 -.opendir_path dd plugin_path ;+16 -.dir_default_path dd default_dir ;+20 -.start_path dd file_name ;+24 путь к диалогу открытия файлов -.draw_window dd draw_window ;+28 -.status dd 0 ;+32 -.openfile_path dd openfile_path ;+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 - -default_dir db '/sys',0 ;директория по умолчанию - -communication_area_name: - db 'FFFFFFFF_open_dialog',0 -open_dialog_name: - db 'opendial',0 -communication_area_default_path: - db '/sys/File managers/',0 - -Filter: -dd Filter.end - Filter.1 -.1: -db 'TXT',0 -.end: -db 0 - -align 4 -map: ;координаты карты - .coord_x dd 0 ;координата x - .coord_y dd 0 ;координата y - .zoom db 1 ;масштаб - -align 4 -tile_00 rb size_tile_struc * max_tiles_count - -;input: -; eax - число -; edi - буфер для строки -; len - длинна буфера -;output: -align 4 -proc convert_int_to_str, len:dword -pushad - mov esi,[len] - add esi,edi - dec esi - call .str -popad - ret -endp - -align 4 -.str: - mov ecx,10 - cmp eax,ecx - jb @f - xor edx,edx - div ecx - push edx - ;dec edi ;смещение необходимое для записи с конца строки - call .str - pop eax - @@: - cmp edi,esi - jge @f - or al,0x30 - stosb - mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор - @@: - ret - -hed db 'Planet viewer 16.02.16',0 ;подпись окна -mouse_dd dd 0 ;нужно для Shift-а в editbox - -align 16 -i_end: - procinfo process_information - sc system_colors ;системные цвета - rb 1024 -align 16 -stacktop: -sys_path rb 4096 -file_name rb 4096 -plugin_path rb 4096 -openfile_path rb 4096 -filename_area rb 256 -mem: - +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +;Огромная благодарность Maxxxx32, Diamond, Heavyiron +;и другим программистам, а также Теплову Алексею +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1,start,i_end,mem,stacktop,0,sys_path + +include '../../proc32.inc' +include '../../macros.inc' +include '../../KOSfuncs.inc' +include '../../load_img.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' + +min_window_w equ 485 ;минимальная ширина окна +min_window_h equ 325 ;минимальная высота окна +otst_panel_left equ 265 + +include 'tile_fun.inc' +include 'pl_import.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +fn_metki db 'pl_metki.lst',0 +ini_name db 'planet_v.ini',0 +ini_sec db 'Map',0 +ini_k_cache db 'Cache',0 +ini_def_cache db '/cache/sat',0 +ini_ext db 'ext' +.number db '?' +.def db 0 ;расширение по умолчанию + + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузились библиотеки + mov ebp,lib_0 + .test_lib_open: + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall SF_TERMINATE_PROCESS ;exit not correct + @@: + add ebp,ll_struc_size + cmp ebp,load_lib_end + jl .test_lib_open + + copy_path ini_name,sys_path,file_name,0 + stdcall dword[ini_get_str],file_name,ini_sec,ini_k_cache,dword[edit1.text],dword[edit1.max],ini_def_cache + stdcall [str_len],dword[edit1.text],dword[edit1.max] + mov dword[edit1.size],eax + mov dword[edit1.pos],eax + + stdcall dword[tl_data_init], tree1 + stdcall dword[tl_data_init], tree2 + +;считываем расширения карт из *.ini файла + mov byte[ini_ext.number],'0' +@@: ;считываем параметры от ext1 до ext9 + inc byte[ini_ext.number] + stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def + cmp byte[txt_tile_type_0],0 + je @f + stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 + jmp @b +@@: + mov byte[ini_ext.number],'0' ;считываем параметр от ext0 который будет выбран в списке + stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def + cmp byte[txt_tile_type_0],0 + jne @f + mov dword[txt_tile_type_0],'.bmp' ;если в *.ini файле ничего нет добавляем расширение .bmp + @@: + stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 + +; init bmp file + stdcall mem.Alloc, dword RGB_TILE_SIZE+300 ;300 - запасные байты с учетом заголовка bmp файла + mov [bmp_icon],eax + + stdcall array_tile_function, tile_00,max_tiles_count,tile_init + stdcall tiles_init_grid, tile_00,max_tiles_count,max_tiles_cols + + load_image_file 'tl_sys_16.png',tree_sys_icon + mov eax,[tree_sys_icon] + mov [tree1.data_img_sys],eax + mov [tree2.data_img_sys],eax + + load_image_file 'tl_nod_16.bmp',tree_nod_icon + mov eax,[tree_nod_icon] + mov [tree1.data_img],eax + mov [tree2.data_img],eax + + mcall SF_SET_EVENTS_MASK,0x27 + init_checkboxes2 ch1,checkboxes_end + + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + ;установка системных цветов + edit_boxes_set_sys_color edit1,editboxes_end,sc + check_boxes_set_sys_color2 ch1,checkboxes_end,sc + + mov byte[file_name],0 + + ; OpenDialog initialisation + stdcall [OpenDialog_Init],OpenDialog_data + +align 4 +red_win: + call draw_window + call but_MetLoad + call but_Refresh ; Auto Refresh after program start + +align 4 +still: + mcall SF_WAIT_EVENT + + cmp al,0x1 ;изм. положение окна + jz red_win + cmp al,0x2 + jz key + cmp al,0x3 + jz button + + stdcall [check_box_mouse],ch2 + stdcall [check_box_mouse],ch1 + stdcall [edit_box_mouse], edit1 + stdcall [edit_box_mouse], edit2 + stdcall [tl_mouse], tree1 + stdcall [tl_mouse], tree2 + + jmp still + +align 4 +key: + push eax ebx + mcall SF_GET_KEY + stdcall [edit_box_key], edit1 + stdcall [edit_box_key], edit2 + + stdcall [tl_key],tree1 + stdcall [tl_key],tree2 + + mov ebx,dword[el_focus] ;что-бы карта не двигалась если окна treelist в фокусе + cmp ebx, dword tree1 + je .end_f + cmp ebx, dword tree2 + je .end_f + + ;что-бы карта не двигалась если текстовые поля в фокусе + test word[edit1.flags],10b ;ed_focus + jne .end_f + test word[edit2.flags],10b ;ed_focus + jne .end_f + + cmp ah,179 ;Right + jne @f + call CursorMoveRight + @@: + cmp ah,176 ;Left + jne @f + cmp dword[map.coord_x],0 + je @f + dec dword[map.coord_x] + ;сдвигаем сетку тайлов вправо, что-бы часть тайлов совпали и пришлось меньше загружать новых + stdcall tiles_grid_move_right, tile_00,max_tiles_count,max_tiles_cols + call but_Refresh + @@: + cmp ah,177 ;Down + jne @f + call CursorMoveDown + @@: + cmp ah,178 ;Up + jne @f + cmp dword[map.coord_y],0 + je @f + dec dword[map.coord_y] + ;сдвигаем сетку тайлов вниз + stdcall tiles_grid_move_down, tile_00,max_tiles_count,max_tiles_rows + call but_Refresh + @@: + + cmp ah,45 ;- + jne @f + call but_ZoomM + @@: + cmp ah,61 ;+ + jne @f + call but_ZoomP + @@: + + .end_f: + pop ebx eax + jmp still + + +align 4 +draw_window: +pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + mov edx,[sc.work] + or edx,0x33000000 + mcall SF_CREATE_WINDOW,20*65536+min_window_w,20*65536+min_window_h,,,hed + + mcall SF_THREAD_INFO,procinfo,-1 + + cmp dword[procinfo.box.width],min_window_w ; проверяем ширину окна + jge @f + mov dword[procinfo.box.width],min_window_w ; если окно очень узкое, увеличиваем ширину для избежания глюков + @@: + + mov edi,dword[procinfo.box.width] + sub edi,min_window_w-otst_panel_left + mov dword[tree1.box_left],edi + mov dword[tree2.box_left],edi + + mov eax,dword[tree2.box_left] ;двигаем скроллинг + add eax,dword[tree2.box_width] + mov ebx,dword[tree2.p_scroll] + mov word[ebx+2],ax + + mov dword[edit2.left],edi + add dword[edit2.left],370-otst_panel_left + + stdcall dword[tl_draw],dword tree1 + stdcall dword[tl_draw],dword tree2 + mov dword[wScrMetki.all_redraw],1 + stdcall [scrollbar_ver_draw], dword wScrMetki + + mov esi,[sc.work_button] + mcall SF_DEFINE_BUTTON,145*65536+20,5*65536+25,6 + + mcall ,100*65536+20,5*65536+25,5 + + mov ebx,170*65536+40 ;кнопка вызова диалога OpenDial + mov edx,13 + int 0x40 + + mov bx,di + shl ebx,16 + mov bx,100 + mov ecx,265*65536+25 + mov edx,9 + int 0x40 + + ;ebx ... + mov ecx,235*65536+25 + mov edx,8 + int 0x40 + + mov bx,di + add bx,410-otst_panel_left + shl ebx,16 + mov bx,55 + mov ecx,5*65536+25 + mov edx,7 + int 0x40 + + mov bx,di + add bx,440-otst_panel_left + shl ebx,16 + mov bx,30 + mov ecx,265*65536+25 + mov edx,12 + int 0x40 + + mov bx,di + add bx,405-otst_panel_left + shl ebx,16 + mov bx,30 + mov edx,11 + int 0x40 + + mov bx,di + add bx,370-otst_panel_left + shl ebx,16 + mov bx,30 + mov edx,10 + int 0x40 + + mov ecx,[sc.work_button_text] + or ecx,0x80000000 + mcall SF_DRAW_TEXT,152*65536+13,,txt_zoom_p + + mov ebx,107*65536+13 + mov edx,txt_zoom_m + int 0x40 + + mov bx,di + add bx,270-otst_panel_left + shl ebx,16 + mov bx,243 + ;mov ebx,270*65536+243 + mov edx,txt151 + int 0x40 + + mov bx,di + add bx,270-otst_panel_left + shl ebx,16 + mov bx,273 + ;mov ebx,270*65536+273 + mov edx,txt152 + int 0x40 + + mov bx,di + add bx,415-otst_panel_left + shl ebx,16 + mov bx,13 + ;mov ebx,415*65536+13 + mov edx,txt_but_refresh + int 0x40 + + mov bx,di + add bx,380-otst_panel_left + shl ebx,16 + mov bx,275 + ;mov ebx,380*65536+275 + mov edx,txt_met_up + int 0x40 + + mov bx,di + add bx,415-otst_panel_left + shl ebx,16 + mov bx,275 + ;mov ebx,415*65536+275 + mov edx,txt_met_dn + int 0x40 + + + mov bx,di + add bx,450-otst_panel_left + shl ebx,16 + mov bx,275 + ;mov ebx,450*65536+275 + mov edx,txt_met_sh + int 0x40 + + mov ebx,175*65536+13 + mov edx,txt_cache + int 0x40 + + mov ecx,[sc.work_text] + or ecx,0x80000000 + + mov bx,di + ;add bx,450-otst_panel_left + shl ebx,16 + mov bx,35 + ;mov ebx,265*65536+35 + mov edx,txt141 + int 0x40 + + mov bx,135 + mov edx,txt142 + int 0x40 + + call draw_tiles + + stdcall [check_box_draw], ch1 + stdcall [check_box_draw], ch2 + stdcall [edit_box_draw], edit1 + stdcall [edit_box_draw], edit2 + + mcall SF_REDRAW,SSF_END_DRAW +popad + ret + +system_dir0 db '/sys/lib/' +lib0_name db 'box_lib.obj',0 + +system_dir1 db '/sys/lib/' +lib1_name db 'libimg.obj',0 + +system_dir2 db '/sys/lib/' +lib2_name db 'str.obj',0 + +system_dir3 db '/sys/lib/' +lib3_name db 'libini.obj',0 + +system_dir4 db '/sys/lib/' +lib4_name db 'proc_lib.obj',0 + +;library structures +l_libs_start: + lib_0 l_libs lib0_name, file_name, system_dir0, boxlib_import + lib_1 l_libs lib1_name, file_name, system_dir1, libimg_import + lib_2 l_libs lib2_name, file_name, system_dir2, strlib_import + lib_3 l_libs lib3_name, file_name, system_dir3, libini_import + lib_4 l_libs lib4_name, file_name, system_dir4, proclib_import +load_lib_end: + +align 4 +button: + mcall SF_GET_BUTTON + cmp ah,5 + jne @f + call but_ZoomM + jmp still + @@: + cmp ah,6 + jne @f + call but_ZoomP + jmp still + @@: + cmp ah,7 + jne @f + call but_Refresh + jmp still + @@: + + cmp ah,9 + jz but_MetSave + cmp ah,8 + jz but_MetAdd + + cmp ah,10 + jne @f + call but_met_up + jmp still + @@: + cmp ah,11 + jne @f + call but_met_dn + jmp still + @@: + cmp ah,12 + jne @f + call fun_goto_met + jmp still + @@: + cmp ah,13 ;диалог OpenDialog для поиска папки + jne @f + call fun_opn_dlg + jmp still + @@: + cmp ah,1 + jne still + +.exit: + push dword[bmp_icon] + call mem.Free + stdcall array_tile_function, tile_00,max_tiles_count,tile_destroy + + stdcall dword[tl_data_clear], tree1 + mov dword[tree2.data_img_sys],0 ;чистим указатель на системные иконки, + ;т. к. они были удалены верхней функцией tl_data_clear + ;повторный вызов tl_data_clear без чистки указателя вызвет ошибку + mov dword[tree2.data_img],0 ;чистим указатель на иконки узлов + stdcall dword[tl_data_clear], tree2 + +; stdcall dword[img_destroy], dword[data_icon] + mcall SF_TERMINATE_PROCESS + + +;input: +;data_rgb - pointer to rgb data +;size - count img pixels (size img data / 3(rgb) ) +align 4 +proc img_rgb_wdiv2 uses eax ebx ecx edx, data_rgb:dword, size:dword + mov eax,dword[data_rgb] + mov ecx,dword[size] ;ecx = size + imul ecx,3 + @@: ;затемнение цвета пикселей + shr byte[eax],1 + and byte[eax],0x7f + inc eax + loop @b + + mov eax,dword[data_rgb] + mov ecx,dword[size] ;ecx = size + shr ecx,1 + @@: ;сложение цветов пикселей + mov ebx,dword[eax+3] ;копируем цвет соседнего пикселя + add word[eax],bx + shr ebx,16 + add byte[eax+2],bl + + add eax,6 ;=2*3 + loop @b + + mov eax,dword[data_rgb] + add eax,3 + mov ebx,eax + add ebx,3 + mov ecx,dword[size] ;ecx = size + shr ecx,1 + dec ecx ;лишний пиксель + @@: ;поджатие пикселей + mov edx,dword[ebx] + mov word[eax],dx + shr edx,16 + mov byte[eax+2],dl + + add eax,3 + add ebx,6 + loop @b + ret +endp + +;input: +;data_rgb - pointer to rgb data +;size - count img pixels (size img data / 3(rgb) ) +;size_w - width img in pixels +align 4 +proc img_rgb_hdiv2, data_rgb:dword, size:dword, size_w:dword + pushad + + mov eax,dword[data_rgb] ;eax = + mov ecx,dword[size] ;ecx = size + imul ecx,3 + @@: ;затемнение цвета пикселей + shr byte[eax],1 + and byte[eax],0x7f + inc eax + loop @b + + mov eax,dword[data_rgb] ;eax = + mov edi,dword[size_w] + lea esi,[edi+edi*2] ;esi = width*3(rgb) + mov ebx,esi + add ebx,eax + mov ecx,dword[size] ;ecx = size + shr ecx,1 + xor edi,edi + @@: ;сложение цветов пикселей + mov edx,dword[ebx] ;копируем цвет нижнего пикселя + add word[eax],dx + shr edx,16 + add byte[eax+2],dl + + add eax,3 + add ebx,3 + inc edi + cmp edi,dword[size_w] + jl .old_line + add eax,esi + add ebx,esi + xor edi,edi + .old_line: + loop @b + + + mov eax,dword[data_rgb] ;eax = + add eax,esi ;esi = width*3(rgb) + mov ebx,esi + add ebx,eax + mov ecx,dword[size] ;ecx = size + shr ecx,1 + sub ecx,dword[size_w] ;лишняя строка пикселей + xor edi,edi + @@: ;поджатие пикселей + mov edx,dword[ebx] ;копируем цвет нижнего пикселя + mov word[eax],dx + shr edx,16 + mov byte[eax+2],dl + + add eax,3 + add ebx,3 + inc edi + cmp edi,dword[size_w] + jl .old_line_2 + add ebx,esi + xor edi,edi + .old_line_2: + loop @b + + popad + ret +endp + +;input: +;data_rgb - pointer to rgb data +;size - count img pixels (size img data / 3(rgb) ) +align 4 +proc img_rgb_wmul2 uses eax ebx ecx edx, data_rgb:dword, size:dword + ;eax - source + ;ebx - destination + mov ecx,dword[size] ;ecx = size + mov eax,ecx + dec eax + lea eax,[eax+eax*2] ;eax = (size-1)*3 + mov ebx,eax ;ebx = size*3 + add eax,dword[data_rgb] ;eax = pointer + size*3 + add ebx,eax ;ebx = pointer + 2*size*3 + @@: + mov edx,dword[eax] ;edx = pixel color + mov word[ebx],dx + mov word[ebx+3],dx + shr edx,16 + mov byte[ebx+2],dl + mov byte[ebx+3+2],dl + sub eax,3 + sub ebx,6 + loop @b + ret +endp + +;функция для растягивания изображения по высоте в 2 раза +;в указателе data_rgb памяти должно быть в 2 раза больше чем size*3 +;иначе при растягивании будет ошибка, выхода на чужую память +;input: +;data_rgb - pointer to rgb data +;size - count img pixels (size img data / 3(rgb) ) +;size_w - width img in pixels +align 4 +proc img_rgb_hmul2, data_rgb:dword, size:dword, size_w:dword + pushad + + mov esi,dword[size_w] + lea esi,[esi+esi*2] ;esi = width * 3(rgb) + mov eax,dword[size] + lea eax,[eax+eax*2] + mov edi,eax + shl edi,1 + add eax,dword[data_rgb] ;eax = pointer to end pixel (old image) + 1 + add edi,dword[data_rgb] ;edi = pointer to end pixel (new image) + 1 + mov ebx,edi + sub ebx,esi + + .beg_line: + mov ecx,dword[size_w] + @@: + sub eax,3 + sub ebx,3 + sub edi,3 + + mov edx,dword[eax] ;edx = pixel color + mov word[ebx],dx + mov word[edi],dx + shr edx,16 + mov byte[ebx+2],dl + mov byte[edi+2],dl + + loop @b + + sub ebx,esi + sub edi,esi + + cmp eax,dword[data_rgb] + jg .beg_line + + popad + ret +endp + +;input: +;data_rgb - pointer to rgb data +;size - count img pixels (size img data / 3(rgb) ) +;size_w - width img in pixels +align 4 +proc img_rgb_hoffs uses eax ebx ecx edx esi, data_rgb:dword, size:dword, size_w:dword, hoffs:dword + mov esi,dword[size_w] + lea esi,[esi+esi*2] ;esi = width * 3(rgb) + imul esi,dword[hoffs] + + mov eax,dword[size] + lea eax,[eax+eax*2] + add eax,dword[data_rgb] ;eax = pointer to end pixel + 1 + sub eax,3 + mov ebx,eax + add ebx,esi + + mov ecx,dword[size] + dec ecx + @@: + mov edx,dword[eax] ;edx = pixel color + mov word[ebx],dx + shr edx,16 + mov byte[ebx+2],dl + + sub eax,3 + sub ebx,3 + loop @b + ret +endp + + +;input: +;data_rgb - pointer to rgb data +;size_w_old - width img in pixels +;size_w_new - new width img in pixels +;size_h - height img in pixels +align 4 +proc img_rgb_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword + pushad + mov eax, dword[size_w_old] + lea eax, dword[eax+eax*2] ;eax = width(old) * 3(rgb) + mov ebx, dword[size_w_new] + lea ebx, dword[ebx+ebx*2] ;ebx = width(new) * 3(rgb) + mov edx, dword[size_h] + ;dec edx + mov edi, dword[data_rgb] ;edi - получает данные + mov esi, edi + add edi, ebx + add esi, eax + cld + @@: + dec edx ;уменьшаем счетчик оставшихся строк на 1 + cmp edx,0 + jle @f + + mov ecx, ebx + rep movsb ;перенос (копирование) строки пикселей +;stdcall mem_copy,esi,edi,ebx + + add esi,eax ;переход на новую строчку изображения + sub esi,ebx +;add esi,eax +;add edi,ebx + jmp @b + @@: + + popad + ret +endp + +align 4 +proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword + cld + mov esi, dword[source] + mov edi, dword[destination] + mov ecx, dword[len] + rep movsb + ret +endp + +align 4 +proc mem_clear uses eax ecx edi, mem:dword, len:dword + cld + xor al,al + mov edi, dword[mem] + mov ecx, dword[len] + repne stosb + ret +endp + +align 4 +fun_opn_dlg: ;функция для вызова OpenFile диалога + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],2 + mov dword[plugin_path],0 ;что-бы при открытии диалогового окна путь всегда брался из OpenDialog_data.dir_default_path + + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je @f + stdcall [str_len],dword[edit1.text],dword[edit1.max] + mov [edit1.size],eax + mov [edit1.pos],eax + stdcall [edit_box_draw], edit1 + @@: + popad + ret + +txt_met_up db 24,0 +txt_met_dn db 25,0 +txt_met_sh db '*',0 +txt_zoom_m db '-',0 +txt_zoom_p db '+',0 +txt151 db 'Добавить метку',0 +txt152 db 'Сохранить метки',0 +txt_but_refresh db 'Обновить',0 +txt_cache db 'Cache:',0 +txt141 db 'Вид карты',0 +txt142 db 'Выбор метки',0 + +; check_boxes +ch1 check_box2 (5 shl 16)+12, (5 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text1, ch_flag_en +ch2 check_box2 (5 shl 16)+12, (20 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text2, ch_flag_en +checkboxes_end: + +ch_text1 db 'брать сверху',0 +ch_text2 db 'брать снизу',0 + +edit1 edit_box 190, 215, 10, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 4090, openfile_path, mouse_dd, 0 +edit2 edit_box 100, 370, 240, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 30, ed_buffer.2, mouse_dd, 0 +editboxes_end: + +tree1 tree_list 10,10, tl_list_box_mode+tl_key_no_edit, 16,16,\ + 0x8080ff,0x0000ff,0xffffff, 265,45,90,85, 0,0,0,\ + el_focus, 0,fun_new_map_type +tree2 tree_list 32,300, tl_draw_par_line, 16,16,\ + 0x8080ff,0x0000ff,0xffffff, 265,145,190,85, 0,12,0,\ + el_focus, wScrMetki,fun_goto_met + +align 4 +wScrMetki scrollbar 16,0, 100,0, 15, 100, 30,0, 0xeeeeee, 0xbbddff, 0, 1 + +ed_buffer: ;ЄхъёЄ фы  edit +.2: rb 32 + +el_focus dd tree1 + +tree_sys_icon dd 0 +tree_nod_icon dd 0 + +bmp_icon dd 0 ;память для загрузки изображения +data_icon dd 0 ;память для преобразования картинки функциями libimg + +run_file_70 FileInfoBlock + + +txt_tile_path db 'tile path',0 + rb 300 +txt_tile_type dd txt_tile_type_0 ;указатель на выбранный тип файлов +txt_tile_type_0 db 0 + rb 10 + +;--------------------------------------------------------------------- +align 4 +OpenDialog_data: +.type dd 2 +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 путь к диалогу открытия файлов +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+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 + +default_dir db '/sys',0 ;директория по умолчанию + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_name: + db 'opendial',0 +communication_area_default_path: + db '/sys/File managers/',0 + +Filter: +dd Filter.end - Filter.1 +.1: +db 'TXT',0 +.end: +db 0 + +align 4 +map: ;координаты карты + .coord_x dd 0 ;координата x + .coord_y dd 0 ;координата y + .zoom db 1 ;масштаб + +align 4 +tile_00 rb size_tile_struc * max_tiles_count + +;input: +; eax - число +; edi - буфер для строки +; len - длинна буфера +;output: +align 4 +proc convert_int_to_str, len:dword +pushad + mov esi,[len] + add esi,edi + dec esi + call .str +popad + ret +endp + +align 4 +.str: + mov ecx,10 + cmp eax,ecx + jb @f + xor edx,edx + div ecx + push edx + ;dec edi ;смещение необходимое для записи с конца строки + call .str + pop eax + @@: + cmp edi,esi + jge @f + or al,0x30 + stosb + mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор + @@: + ret + +hed db 'Planet viewer 16.02.16',0 ;подпись окна +mouse_dd dd 0 ;нужно для Shift-а в editbox + +align 16 +i_end: + procinfo process_information + sc system_colors ;системные цвета + rb 1024 +align 16 +stacktop: +sys_path rb 4096 +file_name rb 4096 +plugin_path rb 4096 +openfile_path rb 4096 +filename_area rb 256 +mem: diff --git a/programs/other/rtfread/rtfread.asm b/programs/other/rtfread/rtfread.asm index 35e9d00d4..26f94a38e 100644 --- a/programs/other/rtfread/rtfread.asm +++ b/programs/other/rtfread/rtfread.asm @@ -1,6 +1,9 @@ ; SPDX-License-Identifier: NOASSERTION ; +; Text encoded with Code Page 866 - Cyrillic + + ; RTF READER FOR KOLIBRI >= 0.7.7.0 ; Written in pure assembler by Ivushkin Andrey aka Willow ; Menu_bar and scroll_bar from box_lib provided by dunkaist @@ -62,7 +65,7 @@ AR_OFFSET equ 10 include '../../config.inc' ;for nightbuild include '../../macros.inc' ; Macros facilitate the life of assemblers! -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../KOSfuncs.inc' include '../../load_lib.mac' diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index 130579161..893937382 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -22,7 +22,7 @@ include '../../macros.inc' include '../../KOSfuncs.inc' include '../../load_img.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../system/skincfg/kglobals.inc' include '../../system/skincfg/unpacker.inc' include 'lang.inc' diff --git a/programs/other/t_edit_synt/te_syntax.asm b/programs/other/t_edit_synt/te_syntax.asm index 68f3d1ca6..16fd6c430 100644 --- a/programs/other/t_edit_synt/te_syntax.asm +++ b/programs/other/t_edit_synt/te_syntax.asm @@ -17,7 +17,7 @@ include '../../proc32.inc' include '../../KOSfuncs.inc' include '../../load_img.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../system/skincfg/kglobals.inc' include '../../system/skincfg/unpacker.inc' include 'te_data.inc' diff --git a/programs/system/MyKey/MyKey.asm b/programs/system/MyKey/MyKey.asm index b4be2d9cc..860b46b73 100644 --- a/programs/system/MyKey/MyKey.asm +++ b/programs/system/MyKey/MyKey.asm @@ -28,7 +28,7 @@ include 'string.inc' include '../../macros.inc' include 'ASPAPI.INC' ;include 'editbox_ex.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' ;include 'load_lib.mac' include '../../develop/libraries/box_lib/load_lib.mac' include '../../dll.inc' diff --git a/programs/system/RunOD/RunOD.asm b/programs/system/RunOD/RunOD.asm index 14f90fcbb..6f6a1c83f 100644 --- a/programs/system/RunOD/RunOD.asm +++ b/programs/system/RunOD/RunOD.asm @@ -1 +1,709 @@ - ; Run with OpenDialog ; org 0 use32 STACK_SIZE equ 256 REDRAW_EVENT equ 1 KEY_EVENT equ 2 BUTTON_EVENT equ 3 MOUSE_EVENT equ 6 BUTTON_RUN equ 10 BUTTON_BROWSE equ 20 MENUET01 db 'MENUET01' version dd 1 program.start dd start_ program.end dd data_ program.memory dd end_ + STACK_SIZE program.stack dd end_ + STACK_SIZE program.params dd 0 program.path dd 0 include 'lang.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' ; ======================================================================= ; start_: mov byte [file_info], 7 ; set.event mov eax, 40 mov ebx, 39 int 64 push sz_box_lib call load.library mov [box_lib], eax push dword[box_lib] push sz_edit_box call getprocaddress mov [edit_box_draw], eax push dword[box_lib] push sz_edit_box_key call getprocaddress mov [edit_box_key], eax push dword[box_lib] push sz_edit_box_mouse call getprocaddress mov [edit_box_mouse], eax push dword[box_lib] push sz_edit_box_set_text call getprocaddress mov [edit_box_set_text], eax push sz_proc_lib call load.library mov [proc_lib], eax push dword[proc_lib] push sz_OpenDialog_init call getprocaddress mov [opendialog_init], eax push dword[proc_lib] push sz_OpenDialog_start call getprocaddress mov [opendialog_start], eax ; memory.allocate: mov eax, 68 mov ebx, 12 mov ecx, 4096 + 4096 + 4096 int 64 mov [od.procinfo], eax add eax, 1024 mov [od.filename_area], eax add eax, 4096 - 1024 mov [od.opendir_path], eax add eax, 4096 mov [od.openfile_path], eax push od call [opendialog_init] ; get.screen.size mov eax, 61 mov ebx, 1 int 64 mov [screen], eax movzx eax, word[screen.width] shr eax, 3 lea eax, [eax*2 + eax] add eax, 90 mov [window.width], eax ; skin.height mov eax, 48 mov ebx, 4 int 64 add eax, 100 mov [window.height], eax movzx eax, word[screen.width] sub eax, [window.width] shr eax, 1 mov [window.left], eax movzx eax, word[screen.height] sub eax, [window.height] sub eax, 100 mov [window.top], eax mov eax, [window.width] sub eax, 80 mov [edit1.width], eax mov eax, [od.openfile_path] mov [edit1.text], eax call on_redraw ; ----------------------- ; .loop: ; wait.event mov eax, 10 int 64 cmp eax, REDRAW_EVENT jne .check_key call on_redraw jmp .loop ; ----------------------- ; .check_key: cmp eax, KEY_EVENT jne .check_button mov eax, 2 int 64 cmp ah, 13 jne .no_key_enter call on_button_run jmp .loop ; ----------------------- ; .no_key_enter: cmp ah, 185 jne .no_key_insert call on_button_browse jmp .loop .no_key_insert: push edit1 call [edit_box_key] jmp .loop ; ----------------------- ; .check_button: cmp eax, BUTTON_EVENT jne .check_mouse ; get.button.number mov eax, 17 int 64 cmp ah, 1 jne .check_button_run ; program.terminate or eax, -1 int 64 ; ----------------------- ; .check_button_run: cmp ah, BUTTON_RUN jne .check_button_browse call on_button_run jmp .loop ; ----------------------- ; .check_button_browse: cmp ah, BUTTON_BROWSE jne .loop call on_button_browse jmp .loop ; ----------------------- ; .check_mouse: cmp eax, MOUSE_EVENT jne .loop push edit1 call [edit_box_mouse] jmp .loop ; ======================================================================= ; on_button_run: push dword[edit1.text] call extractrunpathandparams ;file.run: mov eax, 70 mov ebx, file_info int 64 mov dl, byte[lastendpath] mov ecx, [ptrlastendpath] mov [ecx], dl test eax, eax jnge .error mov [runresult], dword sz_Program_run_successfully jmp .exit .error: ; ----------------------- ; .5: cmp al, -5 jne .31 mov [runresult], dword sz_File_not_found jmp .exit ; ----------------------- ; .31: cmp al, -31 jne .32 mov [runresult], dword sz_File_is_not_executable jmp .exit ; ----------------------- ; .32: cmp al, -32 jne .10 mov [runresult], dword sz_Too_many_processes jmp .exit ; ----------------------- ; .10: cmp al, -10 jne .30 mov [runresult], dword sz_Access_denied jmp .exit ; ----------------------- ; .30: cmp al, -30 jne .unknown mov [runresult], dword sz_Out_of_memory jmp .exit ; ----------------------- ; .unknown: mov [runresult], dword sz_Unknown_error ; ----------------------- ; .exit: call on_redraw ret ; ======================================================================= ; on_button_browse: push od call [opendialog_start] mov eax, [od.status] test eax, eax je .exit ;======== if space exist in filepath, then quote filepath mov eax, [od.openfile_path] ; ----------------------- ; .check_space: cmp [eax], byte 0 je .no_space cmp [eax], byte 32 ;space je .space inc eax jmp .check_space .space: ; ----------------------- ; .find_end_zero: inc eax cmp [eax], byte 0 jne .find_end_zero mov [eax + 2], byte 0 mov [eax + 1], byte 34 ; quote ; ----------------------- ; .shift_path: dec eax mov dl, byte [eax ] mov [eax + 1], dl cmp eax, [od.openfile_path] jne .shift_path mov [eax ], byte 34 ; quote .no_space: ;================================= push dword[od.openfile_path] push edit1 call [edit_box_set_text] ; ----------------------- ; .exit: ret ; ======================================================================= ; on_redraw: ; redraw.start mov eax, 12 mov ebx, 1 int 64 ; get.standart.colors mov eax, 48 mov ebx, 3 mov ecx, sc mov edx, 40 int 64 mov eax, [sc.work_graph] mov [edit1.shift_color], eax mov eax, [sc.work_graph] mov [edit1.focus_border_color], eax mov eax, [sc.frames] mov [edit1.blur_border_color], eax mov eax, [sc.work_text] bts eax, 28 mov [edit1.text_color], eax ; draw.window xor eax, eax mov ebx, [window.left] shl ebx, 16 add ebx, [window.width] mov ecx, [window.top] shl ecx, 16 add ecx, [window.height] mov edx, [sc.work] or edx, 34000000h mov edi, title int 64 push 5 push 5 push sz_Type_name_of_program push dword [sc.work_text] call draw.text ; ====================| browse button |==================== push 20 mov eax, [window.width] sub eax, 70 push eax push 26 push 52 push 21 call draw.button mov eax, [window.width] sub eax, 56 push eax push 29 push sz_browse push dword [sc.work_button_text] call draw.text ; ====================| run button |==================== push 10 push 5 push 52 mov eax, [window.width] sub eax, 22 push eax push 21 call draw.button mov eax, [window.width] shr eax, 1 sub eax, 40 push eax push 55 push sz_run push dword [sc.work_button_text] call draw.text ; ===================================================== push 5 push 80 push dword[runresult] push dword [sc.work_text] call draw.text push edit1 call [edit_box_draw] ; redraw.finish mov eax, 12 mov ebx, 2 int 64 ret ; ======================================================================= ; extractrunpathandparams: xor ecx, ecx mov eax, [esp + 4] mov [runpath], eax movzx eax, byte [eax] cmp eax, 34 jne .start_without_quote inc ecx ; ----------------------- ; .loop1: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp eax, 34 jne .not_quote mov eax, [runpath] mov [eax + ecx], byte 0 mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 34 inc ecx ; ----------------------- ; .skip_space1: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp al, 32 jne .skipped1 inc ecx jmp .skip_space1 ; ----------------------- ; .skipped1: mov eax, [runpath] add eax, ecx mov [runparams], eax inc dword [runpath] jmp .exit ; ----------------------- ; .not_quote: mov eax, [runpath] movzx eax, byte [eax + ecx] test eax, eax jne .not_zero1 mov eax, [runpath] add eax, ecx mov [runparams], eax mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 0 jmp .exit ; ----------------------- ; .not_zero1: inc ecx jmp .loop1 ; ----------------------- ; .start_without_quote: ; ----------------------- ; .loop2: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp eax, 32 jne .not_space mov eax, [runpath] mov [eax + ecx], byte 0 mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 32 inc ecx ; ----------------------- ; .skip_space2: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp al, 32 jne .skipped2 inc ecx jmp .skip_space2 ; ----------------------- ; .skipped2: mov eax, [runpath] add eax, ecx mov [runparams], eax jmp .exit ; ----------------------- ; .not_space: mov eax, [runpath] movzx eax, byte [eax + ecx] test eax, eax jne .not_zero2 mov eax, [runpath] add eax, ecx mov [runparams], eax mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 0 jmp .exit ; ----------------------- ; .not_zero2: inc ecx jmp .loop2 ; ----------------------- ; .exit: ret 4 ; ======================================================================= ; draw.button: mov eax, 8 mov ebx, [esp + 16] shl ebx, 16 add ebx, [esp + 8] mov ecx, [esp + 12] shl ecx, 16 add ecx, [esp + 4] mov edx, [esp + 20] mov esi, [sc.work_button] int 64 ret 20 ; ======================================================================= ; draw.text: mov eax, 4 mov ebx, [esp + 16] shl ebx, 16 add ebx, [esp + 12] mov ecx, [esp + 4] or ecx, 90000000h mov edx, [esp + 8] int 64 ret 16 ; ======================================================================= ; load.library: mov eax, 68 mov ebx, 19 mov ecx, [esp + 4] int 64 ret 4 ; ======================================================================= ; getprocaddress: mov edx, [esp + 8] ; hlib xor eax, eax test edx, edx ; If hlib = 0 then goto .end jz .end ; ----------------------- ; .next: cmp [edx], dword 0 ; If end of export table then goto .end jz .end xor eax, eax mov esi, [edx] mov edi, [esp + 4] ; name ; ----------------------- ; .next_: lodsb scasb jne .fail or al, al jnz .next_ jmp .ok ; ----------------------- ; .fail: add edx, 8 jmp .next ; ----------------------- ; .ok: ; return address mov eax, [edx + 4] ; ----------------------- ; .end: ret 8 data_: sz_box_lib db "/sys/lib/box_lib.obj",0 sz_edit_box db "edit_box",0 sz_edit_box_key db "edit_box_key",0 sz_edit_box_mouse db "edit_box_mouse",0 sz_edit_box_set_text db "edit_box_set_text",0 sz_proc_lib db "/sys/lib/proc_lib.obj",0 sz_OpenDialog_init db "OpenDialog_init",0 sz_OpenDialog_start db "OpenDialog_start",0 sz_FFFFFFFF_open_dialog db "FFFFFFFF_open_dialog",0 sz_SYS db "/sys",0 sz_opendial_path db "/sys/File managers/opendial",0 if lang eq it_IT sz_Program_run_successfully db "Programma eseguito correttamente",0 sz_File_not_found db "File non trovato",0 sz_File_is_not_executable db "File non eseguibile",0 sz_Too_many_processes db "Troppi processi",0 sz_Access_denied db "Accesso negato",0 sz_Out_of_memory db "Out of memory",0 sz_Unknown_error db "Errore sconosciuto",0 sz_Type_name_of_program db "Digita il nome del programma per eseguirlo",0 sz_run db " Esegui",0 sz_browse db "Browse",0 title db "Esegui",0 else if lang eq ru_RU sz_Program_run_successfully db "Программа запущена успешно",0 sz_File_not_found db "Файл не найден",0 sz_File_is_not_executable db "Файл не является исполняемым",0 sz_Too_many_processes db "Слишком много процессов",0 sz_Access_denied db "Доступ запрещен",0 sz_Out_of_memory db "Недостаточно памяти",0 sz_Unknown_error db "Неизвестная ошибка",0 sz_Type_name_of_program db "Введите название программы",0 sz_run db "Запустить",0 sz_browse db "...",0 title db "Запуск программы",0 else sz_Program_run_successfully db "Program run successfully",0 sz_File_not_found db "File not found",0 sz_File_is_not_executable db "File is not executable",0 sz_Too_many_processes db "Too many processes",0 sz_Access_denied db "Access denied",0 sz_Out_of_memory db "Out of memory",0 sz_Unknown_error db "Unknown error",0 sz_Type_name_of_program db "Type name of program to run",0 sz_run db " Run",0 sz_browse db "...",0 title db "Run",0 end if align 4 od: .mode dd 0 .procinfo dd 0 .com_area_name dd sz_FFFFFFFF_open_dialog .com_area dd 0 .opendir_path dd 0 .dir_default_path dd sz_SYS .start_path dd sz_opendial_path .draw_window dd on_redraw .status dd 0 .openfile_path dd 0 .filename_area dd 0 .filter_area dd filefilter .x_size dw 414 .x_start dw 0 .y_size dw 414 .y_start dw 0 runresult dd sz_empty edit1 edit_box 0, 5, 26, 0ffffffh, 0, 0, 0, 0, 4096, 0, 0, 4002h box_lib dd ? proc_lib dd ? filefilter dd ? ptrlastendpath dd ? edit_box_draw dd ? edit_box_key dd ? edit_box_mouse dd ? edit_box_set_text dd ? opendialog_init dd ? opendialog_start dd ? sc: .frames dd ? .grab dd ? .grab_button dd ? .grab_button_text dd ? .grab_text dd ? .work dd ? .work_button dd ? .work_button_text dd ? .work_text dd ? .work_graph dd ? window: .left dd ? .top dd ? .width dd ? .height dd ? screen: .height dw ? .width dw ? file_info: dd ? dd ? runparams: dd ? dd ? dd ? db ? runpath: dd ? lastendpath db ? sz_empty db ? align 4 end_: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + + ; Run with OpenDialog ; + +org 0 +use32 + +STACK_SIZE equ 256 +REDRAW_EVENT equ 1 +KEY_EVENT equ 2 +BUTTON_EVENT equ 3 +MOUSE_EVENT equ 6 + +BUTTON_RUN equ 10 +BUTTON_BROWSE equ 20 + +MENUET01 db 'MENUET01' +version dd 1 +program.start dd start_ +program.end dd data_ +program.memory dd end_ + STACK_SIZE +program.stack dd end_ + STACK_SIZE +program.params dd 0 +program.path dd 0 + +include 'lang.inc' +include '../../develop/libraries/box_lib/box_lib.mac' + +; ======================================================================= ; +start_: + mov byte [file_info], 7 +; set.event + mov eax, 40 + mov ebx, 39 + int 64 + + push sz_box_lib + call load.library + mov [box_lib], eax + + push dword[box_lib] + push sz_edit_box + call getprocaddress + mov [edit_box_draw], eax + + push dword[box_lib] + push sz_edit_box_key + call getprocaddress + mov [edit_box_key], eax + + push dword[box_lib] + push sz_edit_box_mouse + call getprocaddress + mov [edit_box_mouse], eax + + push dword[box_lib] + push sz_edit_box_set_text + call getprocaddress + mov [edit_box_set_text], eax + + push sz_proc_lib + call load.library + mov [proc_lib], eax + + push dword[proc_lib] + push sz_OpenDialog_init + call getprocaddress + mov [opendialog_init], eax + + push dword[proc_lib] + push sz_OpenDialog_start + call getprocaddress + mov [opendialog_start], eax + + +; memory.allocate: + mov eax, 68 + mov ebx, 12 + mov ecx, 4096 + 4096 + 4096 + int 64 + + mov [od.procinfo], eax + + add eax, 1024 + mov [od.filename_area], eax + + add eax, 4096 - 1024 + mov [od.opendir_path], eax + + add eax, 4096 + mov [od.openfile_path], eax + + push od + call [opendialog_init] + + +; get.screen.size + mov eax, 61 + mov ebx, 1 + int 64 + + mov [screen], eax + movzx eax, word[screen.width] + shr eax, 3 + lea eax, [eax*2 + eax] + add eax, 90 + mov [window.width], eax + +; skin.height + mov eax, 48 + mov ebx, 4 + int 64 + + add eax, 100 + mov [window.height], eax + + movzx eax, word[screen.width] + sub eax, [window.width] + shr eax, 1 + mov [window.left], eax + + movzx eax, word[screen.height] + sub eax, [window.height] + sub eax, 100 + mov [window.top], eax + + mov eax, [window.width] + sub eax, 80 + mov [edit1.width], eax + + mov eax, [od.openfile_path] + mov [edit1.text], eax + + + call on_redraw +; ----------------------- ; +.loop: +; wait.event + mov eax, 10 + int 64 + cmp eax, REDRAW_EVENT + jne .check_key + call on_redraw + jmp .loop +; ----------------------- ; +.check_key: + cmp eax, KEY_EVENT + jne .check_button + mov eax, 2 + int 64 + cmp ah, 13 + jne .no_key_enter + call on_button_run + jmp .loop +; ----------------------- ; +.no_key_enter: + cmp ah, 185 + jne .no_key_insert + call on_button_browse + jmp .loop +.no_key_insert: + push edit1 + call [edit_box_key] + jmp .loop +; ----------------------- ; +.check_button: + cmp eax, BUTTON_EVENT + jne .check_mouse +; get.button.number + mov eax, 17 + int 64 + cmp ah, 1 + jne .check_button_run +; program.terminate + or eax, -1 + int 64 +; ----------------------- ; +.check_button_run: + cmp ah, BUTTON_RUN + jne .check_button_browse + call on_button_run + jmp .loop +; ----------------------- ; +.check_button_browse: + cmp ah, BUTTON_BROWSE + jne .loop + call on_button_browse + jmp .loop +; ----------------------- ; +.check_mouse: + cmp eax, MOUSE_EVENT + jne .loop + push edit1 + call [edit_box_mouse] + jmp .loop + + +; ======================================================================= ; +on_button_run: + push dword[edit1.text] + call extractrunpathandparams + +;file.run: + mov eax, 70 + mov ebx, file_info + int 64 + + mov dl, byte[lastendpath] + mov ecx, [ptrlastendpath] + mov [ecx], dl + + test eax, eax + jnge .error + mov [runresult], dword sz_Program_run_successfully + jmp .exit + +.error: +; ----------------------- ; +.5: + cmp al, -5 + jne .31 + mov [runresult], dword sz_File_not_found + jmp .exit +; ----------------------- ; +.31: + cmp al, -31 + jne .32 + mov [runresult], dword sz_File_is_not_executable + jmp .exit +; ----------------------- ; +.32: + cmp al, -32 + jne .10 + mov [runresult], dword sz_Too_many_processes + jmp .exit +; ----------------------- ; +.10: + cmp al, -10 + jne .30 + mov [runresult], dword sz_Access_denied + jmp .exit +; ----------------------- ; +.30: + cmp al, -30 + jne .unknown + mov [runresult], dword sz_Out_of_memory + jmp .exit +; ----------------------- ; +.unknown: + mov [runresult], dword sz_Unknown_error +; ----------------------- ; +.exit: + call on_redraw + ret + +; ======================================================================= ; +on_button_browse: + push od + call [opendialog_start] + + mov eax, [od.status] + test eax, eax + je .exit + +;======== if space exist in filepath, then quote filepath + mov eax, [od.openfile_path] +; ----------------------- ; +.check_space: + cmp [eax], byte 0 + je .no_space + cmp [eax], byte 32 ;space + je .space + inc eax + jmp .check_space +.space: +; ----------------------- ; +.find_end_zero: + inc eax + cmp [eax], byte 0 + jne .find_end_zero + mov [eax + 2], byte 0 + mov [eax + 1], byte 34 ; quote +; ----------------------- ; +.shift_path: + dec eax + + mov dl, byte [eax ] + mov [eax + 1], dl + + cmp eax, [od.openfile_path] + jne .shift_path + mov [eax ], byte 34 ; quote + +.no_space: +;================================= + + push dword[od.openfile_path] + push edit1 + call [edit_box_set_text] +; ----------------------- ; +.exit: + ret + + +; ======================================================================= ; +on_redraw: +; redraw.start + mov eax, 12 + mov ebx, 1 + int 64 +; get.standart.colors + mov eax, 48 + mov ebx, 3 + mov ecx, sc + mov edx, 40 + int 64 + + mov eax, [sc.work_graph] + mov [edit1.shift_color], eax + + mov eax, [sc.work_graph] + mov [edit1.focus_border_color], eax + + mov eax, [sc.frames] + mov [edit1.blur_border_color], eax + + mov eax, [sc.work_text] + bts eax, 28 + mov [edit1.text_color], eax + +; draw.window + xor eax, eax + mov ebx, [window.left] + shl ebx, 16 + add ebx, [window.width] + mov ecx, [window.top] + shl ecx, 16 + add ecx, [window.height] + mov edx, [sc.work] + or edx, 34000000h + mov edi, title + int 64 + + push 5 + push 5 + push sz_Type_name_of_program + push dword [sc.work_text] + call draw.text +; ====================| browse button |==================== + push 20 + mov eax, [window.width] + sub eax, 70 + push eax + push 26 + push 52 + push 21 + call draw.button + + mov eax, [window.width] + sub eax, 56 + push eax + push 29 + push sz_browse + push dword [sc.work_button_text] + call draw.text +; ====================| run button |==================== + push 10 + push 5 + push 52 + mov eax, [window.width] + sub eax, 22 + push eax + push 21 + call draw.button + + mov eax, [window.width] + shr eax, 1 + sub eax, 40 + push eax + push 55 + push sz_run + push dword [sc.work_button_text] + call draw.text + ; ===================================================== + push 5 + push 80 + push dword[runresult] + push dword [sc.work_text] + call draw.text + + push edit1 + call [edit_box_draw] + +; redraw.finish + mov eax, 12 + mov ebx, 2 + int 64 + + ret + + +; ======================================================================= ; +extractrunpathandparams: + xor ecx, ecx + + mov eax, [esp + 4] + mov [runpath], eax + + movzx eax, byte [eax] + cmp eax, 34 + jne .start_without_quote + + inc ecx +; ----------------------- ; +.loop1: + mov eax, [runpath] + movzx eax, byte [eax + ecx] + cmp eax, 34 + jne .not_quote + + mov eax, [runpath] + mov [eax + ecx], byte 0 + + mov eax, [runpath] + add eax, ecx + mov [ptrlastendpath], eax + mov [lastendpath], byte 34 + inc ecx +; ----------------------- ; +.skip_space1: + mov eax, [runpath] + movzx eax, byte [eax + ecx] + cmp al, 32 + jne .skipped1 + inc ecx + jmp .skip_space1 +; ----------------------- ; +.skipped1: + mov eax, [runpath] + add eax, ecx + mov [runparams], eax + inc dword [runpath] + jmp .exit +; ----------------------- ; +.not_quote: + mov eax, [runpath] + movzx eax, byte [eax + ecx] + + test eax, eax + jne .not_zero1 + mov eax, [runpath] + add eax, ecx + mov [runparams], eax + mov eax, [runpath] + add eax, ecx + mov [ptrlastendpath], eax + mov [lastendpath], byte 0 + jmp .exit +; ----------------------- ; +.not_zero1: + inc ecx + jmp .loop1 +; ----------------------- ; +.start_without_quote: +; ----------------------- ; +.loop2: + mov eax, [runpath] + movzx eax, byte [eax + ecx] + cmp eax, 32 + jne .not_space + + mov eax, [runpath] + mov [eax + ecx], byte 0 + + mov eax, [runpath] + add eax, ecx + mov [ptrlastendpath], eax + mov [lastendpath], byte 32 + inc ecx +; ----------------------- ; +.skip_space2: + mov eax, [runpath] + movzx eax, byte [eax + ecx] + cmp al, 32 + jne .skipped2 + inc ecx + jmp .skip_space2 +; ----------------------- ; +.skipped2: + mov eax, [runpath] + add eax, ecx + mov [runparams], eax + jmp .exit +; ----------------------- ; +.not_space: + mov eax, [runpath] + movzx eax, byte [eax + ecx] + + test eax, eax + jne .not_zero2 + mov eax, [runpath] + add eax, ecx + mov [runparams], eax + mov eax, [runpath] + add eax, ecx + mov [ptrlastendpath], eax + mov [lastendpath], byte 0 + jmp .exit +; ----------------------- ; +.not_zero2: + inc ecx + jmp .loop2 +; ----------------------- ; +.exit: + ret 4 + +; ======================================================================= ; +draw.button: + mov eax, 8 + mov ebx, [esp + 16] + shl ebx, 16 + add ebx, [esp + 8] + mov ecx, [esp + 12] + shl ecx, 16 + add ecx, [esp + 4] + mov edx, [esp + 20] + mov esi, [sc.work_button] + int 64 + ret 20 +; ======================================================================= ; +draw.text: + mov eax, 4 + mov ebx, [esp + 16] + shl ebx, 16 + add ebx, [esp + 12] + mov ecx, [esp + 4] + or ecx, 90000000h + mov edx, [esp + 8] + int 64 + ret 16 +; ======================================================================= ; +load.library: + mov eax, 68 + mov ebx, 19 + mov ecx, [esp + 4] + int 64 + ret 4 +; ======================================================================= ; +getprocaddress: + mov edx, [esp + 8] ; hlib + xor eax, eax + test edx, edx ; If hlib = 0 then goto .end + jz .end +; ----------------------- ; +.next: + cmp [edx], dword 0 ; If end of export table then goto .end + jz .end + + xor eax, eax + mov esi, [edx] + mov edi, [esp + 4] ; name +; ----------------------- ; +.next_: + lodsb + scasb + jne .fail + or al, al + jnz .next_ + jmp .ok +; ----------------------- ; +.fail: + add edx, 8 + jmp .next +; ----------------------- ; +.ok: ; return address + mov eax, [edx + 4] +; ----------------------- ; +.end: + ret 8 + +data_: + +sz_box_lib db "/sys/lib/box_lib.obj",0 +sz_edit_box db "edit_box",0 +sz_edit_box_key db "edit_box_key",0 +sz_edit_box_mouse db "edit_box_mouse",0 +sz_edit_box_set_text db "edit_box_set_text",0 + +sz_proc_lib db "/sys/lib/proc_lib.obj",0 +sz_OpenDialog_init db "OpenDialog_init",0 +sz_OpenDialog_start db "OpenDialog_start",0 +sz_FFFFFFFF_open_dialog db "FFFFFFFF_open_dialog",0 +sz_SYS db "/sys",0 +sz_opendial_path db "/sys/File managers/opendial",0 + +if lang eq it_IT + sz_Program_run_successfully db "Programma eseguito correttamente",0 + sz_File_not_found db "File non trovato",0 + sz_File_is_not_executable db "File non eseguibile",0 + sz_Too_many_processes db "Troppi processi",0 + sz_Access_denied db "Accesso negato",0 + sz_Out_of_memory db "Out of memory",0 + sz_Unknown_error db "Errore sconosciuto",0 + sz_Type_name_of_program db "Digita il nome del programma per eseguirlo",0 + sz_run db " Esegui",0 + sz_browse db "Browse",0 + title db "Esegui",0 +else if lang eq ru_RU + sz_Program_run_successfully db "Программа запущена успешно",0 + sz_File_not_found db "Файл не найден",0 + sz_File_is_not_executable db "Файл не является исполняемым",0 + sz_Too_many_processes db "Слишком много процессов",0 + sz_Access_denied db "Доступ запрещен",0 + sz_Out_of_memory db "Недостаточно памяти",0 + sz_Unknown_error db "Неизвестная ошибка",0 + sz_Type_name_of_program db "Введите название программы",0 + sz_run db "Запустить",0 + sz_browse db "...",0 + title db "Запуск программы",0 +else + sz_Program_run_successfully db "Program run successfully",0 + sz_File_not_found db "File not found",0 + sz_File_is_not_executable db "File is not executable",0 + sz_Too_many_processes db "Too many processes",0 + sz_Access_denied db "Access denied",0 + sz_Out_of_memory db "Out of memory",0 + sz_Unknown_error db "Unknown error",0 + sz_Type_name_of_program db "Type name of program to run",0 + sz_run db " Run",0 + sz_browse db "...",0 + title db "Run",0 +end if + +align 4 +od: +.mode dd 0 +.procinfo dd 0 +.com_area_name dd sz_FFFFFFFF_open_dialog +.com_area dd 0 +.opendir_path dd 0 +.dir_default_path dd sz_SYS +.start_path dd sz_opendial_path +.draw_window dd on_redraw +.status dd 0 +.openfile_path dd 0 +.filename_area dd 0 +.filter_area dd filefilter +.x_size dw 414 +.x_start dw 0 +.y_size dw 414 +.y_start dw 0 + +runresult dd sz_empty + +edit1 edit_box 0, 5, 26, 0ffffffh, 0, 0, 0, 0, 4096, 0, 0, 4002h + +box_lib dd ? +proc_lib dd ? +filefilter dd ? +ptrlastendpath dd ? +edit_box_draw dd ? +edit_box_key dd ? +edit_box_mouse dd ? +edit_box_set_text dd ? +opendialog_init dd ? +opendialog_start dd ? + +sc: +.frames dd ? +.grab dd ? +.grab_button dd ? +.grab_button_text dd ? +.grab_text dd ? +.work dd ? +.work_button dd ? +.work_button_text dd ? +.work_text dd ? +.work_graph dd ? + +window: +.left dd ? +.top dd ? +.width dd ? +.height dd ? + +screen: +.height dw ? +.width dw ? + +file_info: + dd ? + dd ? +runparams: + dd ? + dd ? + dd ? + db ? +runpath: + dd ? + +lastendpath db ? +sz_empty db ? + +align 4 +end_: diff --git a/programs/system/colrdial/color_dialog.asm b/programs/system/colrdial/color_dialog.asm index 755c0fa47..b6fff9d4b 100644 --- a/programs/system/colrdial/color_dialog.asm +++ b/programs/system/colrdial/color_dialog.asm @@ -1,707 +1,710 @@ -;***************************************************************************** -; Color Dialog - for KolibriOS -; Copyright (c) 2013, 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. -;***************************************************************************** -;--------------------------------------------------------------------- -;Some documentation for memory -; -;area name db 'FFFFFFFF_color_dialog',0 ; FFFFFFFF = PID -; -; communication area data -; flag ; +0 -; dw 0 ; 0 - empty, 1 - OK, color selected -; 2 - use another method/not found program, 3 - cancel -; -; type of dialog: 0-Palette&Tone -; dw 0 ; +2 -; -; window X size ; +4 -; dw 0 -; -; window X position ; +6 -; dw 0 -; -; window y size ; +8 -; dw 0 -; -; window Y position ; +10 -; dw 0 -; -; ColorDialog WINDOW SLOT ; +12 -; dd 0 -; -; Color type ; +16 -; dd 0 -; -; Color value ; +20 -; dd 0 - -; First start flag ; +24 -; dd 0 ; 0 - first start, 1 - subsequent starts -; -; Old colors ; +28 -; rd 10 -; -; Free area ; +68 -;--------------------------------------------------------------------- - use32 - org 0 - db 'MENUET01' - dd 1, START, IM_END, I_END, stacktop, param, path -;--------------------------------------------------------------------- -include '../../macros.inc' -include '../../proc32.inc' -include '../../KOSfuncs.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -;include 'lang.inc' -;include '../../debug.inc' -@use_library -;--------------------------------------------------------------------- -p_start_x = 10 -p_start_y = 10 - -p_size_x = 20 -p_size_y = 256 -;-------------------------------------- -t_start_x = 40 -t_start_y = 10 -;-------------------------------------- -w_start_x = 200 -w_start_y = 200 - -w_size_x = 400 -w_size_y = 350 -;-------------------------------------- -c_start_x = t_start_x + p_size_y + 10 -c_start_y = 10 - -c_size_x = 27 -c_size_y = 20 -ed_size_x = 53 -;--------------------------------------------------------------------- -x_minimal_size equ 350 -y_minimal_size equ 250 -;--------------------------------------------------------------------- -START: - mcall SF_SYS_MISC,SSF_HEAP_INIT - ;mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 - mcall SF_SET_EVENTS_MASK,EVM_REDRAW+EVM_KEY+\ - EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER -;-------------------------------------- -load_libraries l_libs_start,end_l_libs - test eax,eax - jnz button.exit_2 -;-------------------------------------- - call get_communication_area - call get_active_pocess - call clear_colors_history - xor eax,eax - mov al,p_size_x - mov [palette_SIZE_X],eax - mov ax,p_size_y - mov [palette_SIZE_Y],eax - mov [tone_SIZE_X],eax - mov [tone_SIZE_Y],eax - - ;set the last used color as a current one - mov eax,[communication_area] - add eax,28 - mov eax,[eax] - mov [selected_color],eax - mov [tone_color],eax - call prepare_scrollbars_position_from_color -;-------------------------------------- - mov ecx,[palette_SIZE_Y] - imul ecx,[palette_SIZE_X] - lea ecx,[ecx*3] - inc ecx ;reserve for stosd - mcall SF_SYS_MISC,SSF_MEM_ALLOC - mov [palette_area],eax -;-------------------------------------- - call create_palette -;-------------------------------------- - mov ecx,[tone_SIZE_Y] - imul ecx,[tone_SIZE_X] - lea ecx,[ecx*3] - inc ecx ;reserve for stosd - mcall SF_SYS_MISC,SSF_MEM_ALLOC - mov [tone_area],eax -;-------------------------------------- - call create_tone -;--------------------------------------------------------------------- -align 4 -red: - call draw_window -;--------------------------------------------------------------------- -align 4 -still: - mcall SF_WAIT_EVENT - - cmp eax,1 - je red - - cmp eax,2 - je key - - cmp eax,3 - je button - - cmp eax,6 - je mouse - - jmp still -;--------------------------------------------------------------------- -align 4 -button: - mcall SF_GET_BUTTON - - cmp ah, 2 - je palette_button - - cmp ah, 3 - je tone_button - - cmp ah, 4 - je color_button - - cmp ah, 30 - jb @f - - cmp ah, 39 - ja @f - - sub ah,30 - - ;click on a colors History - movzx eax,ah - shl eax,2 - add eax,[communication_area] - add eax,28 - mov eax,[eax] - mov [selected_color],eax - call prepare_scrollbars_position_from_color - call draw_selected_color - call draw_scrollbars - jmp still -;-------------------------------------- -align 4 -@@: - cmp ah, 1 - jne still -;-------------------------------------- -align 4 -.exit: - mov eax,[communication_area] - mov [eax],word 3 - jmp @f -; dps "CD flag value: cancel " -;-------------------------------------- -align 4 -.exit_1: -;-------------------------------------- - call scroll_colors_history -;-------------------------------------- -align 4 -@@: -; mov ax,[eax] -; and eax,0xffff -; dps "CD flag value: " -; dpd eax -; newline - - call get_window_param - mov ebx,[communication_area] - mov ecx,procinfo -; mov eax,[window_x] - mov eax,[ecx+process_information.box.left] - shl eax,16 - add eax,[ecx+process_information.box.width] - mov [ebx+4],eax -; mov eax,[window_y] - mov eax,[ecx+process_information.box.top] - shl eax,16 - add eax,[ecx+process_information.box.height] - mov [ebx+8],eax -;-------------------------------------- -align 4 -.exit_2: - mcall SF_TERMINATE_PROCESS -;--------------------------------------------------------------------- -align 4 -get_window_param: - mcall SF_THREAD_INFO,procinfo,-1 - mov eax,[ebx+process_information.client_box.height] - inc eax -; mov [window_high],eax - mov eax,[ebx+process_information.client_box.width] - inc eax -; mov [window_width],eax - mov eax,dword[ebx+process_information.wnd_state] -; mov [window_status],eax - ret -;--------------------------------------------------------------------- -align 4 -get_communication_area: - movzx eax,byte[param] - test eax,eax - jz @f - mcall SF_SYS_MISC,SSF_MEM_OPEN,param,,0x01 - mov [communication_area],eax -; movzx ebx,word [eax+2] -; mov [color_dialog_type],ebx - - mov ebx,[eax+4] -; cmp bx,word x_minimal_size ;300 -; jb @f - mov bx,510 - mov [window_x],ebx - mov ebx,[eax+8] -; cmp bx,word y_minimal_size ;200 -; jb @f - mov bx,340 - mov [window_y],ebx -@@: - ret -;--------------------------------------------------------------------- -align 4 -get_active_pocess: - mcall SF_THREAD_INFO,procinfo,-1 - mov ecx,[ebx+process_information.PID] - mcall SF_SYSTEM,SSF_GET_THREAD_SLOT - mov [active_process],eax ; WINDOW SLOT - mov ebx,[communication_area] - test ebx,ebx - jz .1 - mov [ebx+12],eax ; WINDOW SLOT to com. area -.1: - ret -;--------------------------------------------------------------------- -align 4 -clear_colors_history: - mov edi,[communication_area] - cmp [edi+24],dword 1 - je @f - mov [edi+24],dword 1 - add edi,28 - mov ecx,10 - cld - mov eax,0x06BEEE - rep stosd -@@: - ret -;--------------------------------------------------------------------- -align 4 -scroll_colors_history: - mov edi,[communication_area] - add edi,28 - mov eax,[selected_color] - cmp [edi],eax - je @f - mov ecx,9 - mov esi,edi - add esi,32 - add edi,36 - std - rep movsd - mov edi,[communication_area] - mov [edi+28],eax -@@: - ret -;--------------------------------------------------------------------- -align 4 -palette_button: - mcall SF_MOUSE_GET,SSF_WINDOW_POSITION - and eax,0xffff - sub eax,p_start_y - imul eax,p_size_x - lea eax,[eax+eax*2] - add eax,[palette_area] - mov eax,[eax] - mov [tone_color],eax - mov [selected_color],eax - call prepare_scrollbars_position_from_color - call create_and_draw_tone - call draw_selected_color - call draw_scrollbars - jmp still -;--------------------------------------------------------------------- -align 4 -tone_button: - mcall SF_MOUSE_GET,SSF_WINDOW_POSITION - mov ebx,eax - and eax,0xffff - shr ebx,16 - sub eax,t_start_y - imul eax,p_size_y - sub ebx,t_start_x - add eax,ebx - lea eax,[eax+eax*2] - add eax,[tone_area] - mov eax,[eax] - mov [selected_color],eax - call prepare_scrollbars_position_from_color - call draw_selected_color - call draw_scrollbars - jmp still -;--------------------------------------------------------------------- -align 4 -color_button: - mov eax,[communication_area] - mov [eax],word 1 - mov ebx,[selected_color] - and ebx,0xffffff - mov [eax+20],ebx -; dps "CD flag value: OK " - jmp button.exit_1 -;--------------------------------------------------------------------- -align 4 -prepare_scrollbars_position_from_color: -; in: eax = selected color - movzx ebx,al - inc bl - neg bl - mov [scroll_bar_data_blue.position],ebx - shr eax,8 - mov bl,al - inc bl - neg bl - mov [scroll_bar_data_green.position],ebx - shr eax,8 - mov bl,al - inc bl - neg bl - mov [scroll_bar_data_red.position],ebx - ret -;--------------------------------------------------------------------- -align 4 -prepare_color_from_scrollbars_position: -; out: ebx = selected color - mov eax,[scroll_bar_data_red.position] - inc al - neg al - movzx ebx,al - shl ebx,8 - mov eax,[scroll_bar_data_green.position] - inc al - neg al - mov bl,al - shl ebx,8 - mov eax,[scroll_bar_data_blue.position] - inc al - neg al - mov bl,al - ret -;--------------------------------------------------------------------- -align 4 -key: - mcall SF_GET_KEY - - test word[edit1.flags],10b ;ed_focus - jne @f - cmp ah,027 ; Esc - je button.exit - jmp still -@@: - stdcall [edit_box_key], edit1 - stdcall conv_str_to_int, [edit1.text] - cmp [selected_color],eax - je still - mov [selected_color],eax - call prepare_scrollbars_position_from_color - ;call draw_selected_color - mcall SF_DRAW_RECT,,,[selected_color] - call draw_scrollbars - jmp still -;--------------------------------------------------------------------- -align 4 -mouse: - cmp [scroll_bar_data_red.delta2],0 - jne .red - cmp [scroll_bar_data_green.delta2],0 - jne .green - cmp [scroll_bar_data_blue.delta2],0 - jne .blue -;-------------------------------------- -align 4 -.red: - stdcall [scrollbar_ver_mouse], scroll_bar_data_red - cmp [scroll_bar_data_red.delta2],0 - jne @f -;-------------------------------------- -align 4 -.green: - stdcall [scrollbar_ver_mouse], scroll_bar_data_green - cmp [scroll_bar_data_green.delta2],0 - jne @f -;-------------------------------------- -align 4 -.blue: - stdcall [scrollbar_ver_mouse], scroll_bar_data_blue - cmp [scroll_bar_data_blue.delta2],0 - jne @f -;-------------------------------------- -align 4 -@@: - stdcall [edit_box_mouse], edit1 - call prepare_color_from_scrollbars_position - cmp [selected_color],ebx - je still - mov [selected_color],ebx - call draw_selected_color - jmp still -;--------------------------------------------------------------------- -align 4 -draw_selected_color: - mcall SF_DRAW_RECT,,,[selected_color] - stdcall hex_in_str, sz_0x,[selected_color],6 - mov byte[sz_0x+6],0 - stdcall [edit_box_set_text],edit1,sz_0x - stdcall [edit_box_draw],edit1 - ret -;--------------------------------------------------------------------- -align 4 -create_and_draw_tone: - call create_tone - call draw_tone - ret -;--------------------------------------------------------------------- -align 4 -draw_tone: - mcall SF_PUT_IMAGE_EXT,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,,24 - ret -;--------------------------------------------------------------------- -align 4 -draw_scrollbars: - stdcall [scrollbar_ver_draw], scroll_bar_data_red - stdcall [scrollbar_ver_draw], scroll_bar_data_green - stdcall [scrollbar_ver_draw], scroll_bar_data_blue - ret -;--------------------------------------------------------------------- -align 4 -draw_history_frame: - mov [frame_data.x],dword (c_start_x+c_size_x+ed_size_x+10*2)*65536+80 - mov [frame_data.y],dword (p_start_y+5)*65536+(p_size_y-5) - - mov [frame_data.draw_text_flag],dword 1 - - mov [frame_data.text_pointer],dword history_text - stdcall [Frame_draw], frame_data - ret -;--------------------------------------------------------------------- -align 4 -draw_button_row: - mov edx,0x60000000 + 30 ; BUTTON ROW -; mov ebx,220*65536+14 - mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 - mov ecx,25*65536+14 - mov eax,SF_DEFINE_BUTTON -;----------------------------------- -align 4 -.newb: - mcall - add ecx,24*65536 - inc edx - cmp edx,0x60000000 + 39 - jbe .newb - ret -;--------------------------------------------------------------------- -align 4 -draw_color_value: - movzx ebx,word[frame_data.x_start] - shl ebx,16 - add ebx,(22 shl 16)+39 - mov ecx,28*65536+11 - mov edx,0xffffff - mov eax,SF_DRAW_RECT - mov edi,10 - mov esi,[communication_area] - add esi,28 -;----------------------------------- -align 4 -@@: - mcall - pusha - lea edx,[ebx+(2 shl 16)] - shr ecx,16 - mov dx,cx - add dx,2 - mov ecx,[esi] - and ecx,0xffffff - mcall SF_DRAW_NUMBER,0x00060100,,,0 - popa - - add ecx,24*65536 - add esi,4 - dec edi - jnz @b - - ret -;--------------------------------------------------------------------- -align 4 -draw_colours: - mov edi,10 - mov esi,[communication_area] - add esi,28 -; mov ebx,220*65536+14 - mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 - mov ecx,27*65536+14 - mov eax,SF_DRAW_RECT - mov [frame_data.draw_text_flag],dword 0 -;-------------------------------------- -align 4 -newcol: - mov edx,[esi] - mcall - - push ebx ecx - - sub ebx,2 shl 16 - add bx,4 - sub ecx,2 shl 16 - add cx,4 - - mov [frame_data.x],ebx - mov [frame_data.y],ecx - - stdcall [Frame_draw], frame_data - - pop ecx ebx - - add ecx,24*65536 - add esi,4 - - dec edi - jnz newcol - - ret -;---------------------------------------------------------------------- -align 4 -draw_window: - mcall SF_REDRAW,SSF_BEGIN_DRAW -; mcall SF_CREATE_WINDOW, , , 0x33AABBCC,,title - xor esi,esi - mcall SF_CREATE_WINDOW,[window_x],[window_y], 0x34EEEeee,,title - mcall SF_DEFINE_BUTTON,,,0x60000002 - mcall ,,,0x60000003 - mcall ,<296,80>,<280,22>,4,0x37A4D4 - mcall ,<402,80>, ,1 - mcall SF_DRAW_TEXT,<332,289>,0x802C7B9E,OK_Cancel - mcall ,<331,288>,0x80FFFfff - xor ebp,ebp - mcall SF_PUT_IMAGE_EXT,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24 - call draw_tone - call draw_selected_color - xor eax,eax - inc eax - mov [scroll_bar_data_red.all_redraw],eax - mov [scroll_bar_data_green.all_redraw],eax - mov [scroll_bar_data_blue.all_redraw],eax - call draw_scrollbars - call draw_history_frame - call draw_button_row - call draw_colours - call draw_color_value - mcall SF_REDRAW,SSF_END_DRAW - ret -;--------------------------------------------------------------------- -align 4 -proc hex_in_str, buf:dword,val:dword,zif:dword -pushad - mov edi,[buf] - mov ecx,[zif] - add edi,ecx - dec edi - mov ebx,[val] - - .cycle: - mov al,bl - and al,0xf - cmp al,10 - jl @f - add al,'A'-'0'-10 - @@: - add al,'0' - mov byte[edi],al - dec edi - shr ebx,4 - loop .cycle -popad - ret -endp -;--------------------------------------------------------------------- -;input: -; buf - pointer to a hexadecimal string -;output: -; eax - number -align 4 -proc conv_str_to_int uses ebx esi, buf:dword - xor eax,eax - xor ebx,ebx - mov esi,[buf] - - .cycle_16: - mov bl,byte[esi] - cmp bl,'0' - jl @f - cmp bl,'f' - jg @f - cmp bl,'9' - jle .us1 - cmp bl,'A' - jl @f ;skip the chars not in between '9' and 'A' - .us1: ;╤Б╨╛╤Б╤В╨░╨▓╨╜╨╛╨╡ ╤Г╤Б╨╗╨╛╨▓╨╕╨╡ - cmp bl,'F' - jle .us2 - cmp bl,'a' - jl @f ;skip the chars not in between 'F' and 'a' - sub bl,32 ;convert symbols to uppercase for convenience - .us2: ;╤Б╨╛╤Б╤В╨░╨▓╨╜╨╛╨╡ ╤Г╤Б╨╗╨╛╨▓╨╕╨╡ - sub bl,'0' - cmp bl,9 - jle .cor1 - sub bl,7 ;convert 'A' to '10' - .cor1: - shl eax,4 - add eax,ebx - inc esi - jmp .cycle_16 - @@: - ret -endp -;--------------------------------------------------------------------- -include 'palette.inc' -;--------------------------------------------------------------------- -include 'tone.inc' -;--------------------------------------------------------------------- -include 'i_data.inc' -;--------------------------------------------------------------------- -IM_END: -;--------------------------------------------------------------------- -include 'u_data.inc' -;--------------------------------------------------------------------- -I_END: -;--------------------------------------------------------------------- +; SPDX-License-Identifier: NOASSERTION +; + +;***************************************************************************** +; Color Dialog - for KolibriOS +; Copyright (c) 2013, 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. +;***************************************************************************** +;--------------------------------------------------------------------- +;Some documentation for memory +; +;area name db 'FFFFFFFF_color_dialog',0 ; FFFFFFFF = PID +; +; communication area data +; flag ; +0 +; dw 0 ; 0 - empty, 1 - OK, color selected +; 2 - use another method/not found program, 3 - cancel +; +; type of dialog: 0-Palette&Tone +; dw 0 ; +2 +; +; window X size ; +4 +; dw 0 +; +; window X position ; +6 +; dw 0 +; +; window y size ; +8 +; dw 0 +; +; window Y position ; +10 +; dw 0 +; +; ColorDialog WINDOW SLOT ; +12 +; dd 0 +; +; Color type ; +16 +; dd 0 +; +; Color value ; +20 +; dd 0 + +; First start flag ; +24 +; dd 0 ; 0 - first start, 1 - subsequent starts +; +; Old colors ; +28 +; rd 10 +; +; Free area ; +68 +;--------------------------------------------------------------------- + use32 + org 0 + db 'MENUET01' + dd 1, START, IM_END, I_END, stacktop, param, path +;--------------------------------------------------------------------- +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' +;include 'lang.inc' +;include '../../debug.inc' +@use_library +;--------------------------------------------------------------------- +p_start_x = 10 +p_start_y = 10 + +p_size_x = 20 +p_size_y = 256 +;-------------------------------------- +t_start_x = 40 +t_start_y = 10 +;-------------------------------------- +w_start_x = 200 +w_start_y = 200 + +w_size_x = 400 +w_size_y = 350 +;-------------------------------------- +c_start_x = t_start_x + p_size_y + 10 +c_start_y = 10 + +c_size_x = 27 +c_size_y = 20 +ed_size_x = 53 +;--------------------------------------------------------------------- +x_minimal_size equ 350 +y_minimal_size equ 250 +;--------------------------------------------------------------------- +START: + mcall SF_SYS_MISC,SSF_HEAP_INIT + ;mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 + mcall SF_SET_EVENTS_MASK,EVM_REDRAW+EVM_KEY+\ + EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER +;-------------------------------------- +load_libraries l_libs_start,end_l_libs + test eax,eax + jnz button.exit_2 +;-------------------------------------- + call get_communication_area + call get_active_pocess + call clear_colors_history + xor eax,eax + mov al,p_size_x + mov [palette_SIZE_X],eax + mov ax,p_size_y + mov [palette_SIZE_Y],eax + mov [tone_SIZE_X],eax + mov [tone_SIZE_Y],eax + + ;set the last used color as a current one + mov eax,[communication_area] + add eax,28 + mov eax,[eax] + mov [selected_color],eax + mov [tone_color],eax + call prepare_scrollbars_position_from_color +;-------------------------------------- + mov ecx,[palette_SIZE_Y] + imul ecx,[palette_SIZE_X] + lea ecx,[ecx*3] + inc ecx ;reserve for stosd + mcall SF_SYS_MISC,SSF_MEM_ALLOC + mov [palette_area],eax +;-------------------------------------- + call create_palette +;-------------------------------------- + mov ecx,[tone_SIZE_Y] + imul ecx,[tone_SIZE_X] + lea ecx,[ecx*3] + inc ecx ;reserve for stosd + mcall SF_SYS_MISC,SSF_MEM_ALLOC + mov [tone_area],eax +;-------------------------------------- + call create_tone +;--------------------------------------------------------------------- +align 4 +red: + call draw_window +;--------------------------------------------------------------------- +align 4 +still: + mcall SF_WAIT_EVENT + + cmp eax,1 + je red + + cmp eax,2 + je key + + cmp eax,3 + je button + + cmp eax,6 + je mouse + + jmp still +;--------------------------------------------------------------------- +align 4 +button: + mcall SF_GET_BUTTON + + cmp ah, 2 + je palette_button + + cmp ah, 3 + je tone_button + + cmp ah, 4 + je color_button + + cmp ah, 30 + jb @f + + cmp ah, 39 + ja @f + + sub ah,30 + + ;click on a colors History + movzx eax,ah + shl eax,2 + add eax,[communication_area] + add eax,28 + mov eax,[eax] + mov [selected_color],eax + call prepare_scrollbars_position_from_color + call draw_selected_color + call draw_scrollbars + jmp still +;-------------------------------------- +align 4 +@@: + cmp ah, 1 + jne still +;-------------------------------------- +align 4 +.exit: + mov eax,[communication_area] + mov [eax],word 3 + jmp @f +; dps "CD flag value: cancel " +;-------------------------------------- +align 4 +.exit_1: +;-------------------------------------- + call scroll_colors_history +;-------------------------------------- +align 4 +@@: +; mov ax,[eax] +; and eax,0xffff +; dps "CD flag value: " +; dpd eax +; newline + + call get_window_param + mov ebx,[communication_area] + mov ecx,procinfo +; mov eax,[window_x] + mov eax,[ecx+process_information.box.left] + shl eax,16 + add eax,[ecx+process_information.box.width] + mov [ebx+4],eax +; mov eax,[window_y] + mov eax,[ecx+process_information.box.top] + shl eax,16 + add eax,[ecx+process_information.box.height] + mov [ebx+8],eax +;-------------------------------------- +align 4 +.exit_2: + mcall SF_TERMINATE_PROCESS +;--------------------------------------------------------------------- +align 4 +get_window_param: + mcall SF_THREAD_INFO,procinfo,-1 + mov eax,[ebx+process_information.client_box.height] + inc eax +; mov [window_high],eax + mov eax,[ebx+process_information.client_box.width] + inc eax +; mov [window_width],eax + mov eax,dword[ebx+process_information.wnd_state] +; mov [window_status],eax + ret +;--------------------------------------------------------------------- +align 4 +get_communication_area: + movzx eax,byte[param] + test eax,eax + jz @f + mcall SF_SYS_MISC,SSF_MEM_OPEN,param,,0x01 + mov [communication_area],eax +; movzx ebx,word [eax+2] +; mov [color_dialog_type],ebx + + mov ebx,[eax+4] +; cmp bx,word x_minimal_size ;300 +; jb @f + mov bx,510 + mov [window_x],ebx + mov ebx,[eax+8] +; cmp bx,word y_minimal_size ;200 +; jb @f + mov bx,340 + mov [window_y],ebx +@@: + ret +;--------------------------------------------------------------------- +align 4 +get_active_pocess: + mcall SF_THREAD_INFO,procinfo,-1 + mov ecx,[ebx+process_information.PID] + mcall SF_SYSTEM,SSF_GET_THREAD_SLOT + mov [active_process],eax ; WINDOW SLOT + mov ebx,[communication_area] + test ebx,ebx + jz .1 + mov [ebx+12],eax ; WINDOW SLOT to com. area +.1: + ret +;--------------------------------------------------------------------- +align 4 +clear_colors_history: + mov edi,[communication_area] + cmp [edi+24],dword 1 + je @f + mov [edi+24],dword 1 + add edi,28 + mov ecx,10 + cld + mov eax,0x06BEEE + rep stosd +@@: + ret +;--------------------------------------------------------------------- +align 4 +scroll_colors_history: + mov edi,[communication_area] + add edi,28 + mov eax,[selected_color] + cmp [edi],eax + je @f + mov ecx,9 + mov esi,edi + add esi,32 + add edi,36 + std + rep movsd + mov edi,[communication_area] + mov [edi+28],eax +@@: + ret +;--------------------------------------------------------------------- +align 4 +palette_button: + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION + and eax,0xffff + sub eax,p_start_y + imul eax,p_size_x + lea eax,[eax+eax*2] + add eax,[palette_area] + mov eax,[eax] + mov [tone_color],eax + mov [selected_color],eax + call prepare_scrollbars_position_from_color + call create_and_draw_tone + call draw_selected_color + call draw_scrollbars + jmp still +;--------------------------------------------------------------------- +align 4 +tone_button: + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION + mov ebx,eax + and eax,0xffff + shr ebx,16 + sub eax,t_start_y + imul eax,p_size_y + sub ebx,t_start_x + add eax,ebx + lea eax,[eax+eax*2] + add eax,[tone_area] + mov eax,[eax] + mov [selected_color],eax + call prepare_scrollbars_position_from_color + call draw_selected_color + call draw_scrollbars + jmp still +;--------------------------------------------------------------------- +align 4 +color_button: + mov eax,[communication_area] + mov [eax],word 1 + mov ebx,[selected_color] + and ebx,0xffffff + mov [eax+20],ebx +; dps "CD flag value: OK " + jmp button.exit_1 +;--------------------------------------------------------------------- +align 4 +prepare_scrollbars_position_from_color: +; in: eax = selected color + movzx ebx,al + inc bl + neg bl + mov [scroll_bar_data_blue.position],ebx + shr eax,8 + mov bl,al + inc bl + neg bl + mov [scroll_bar_data_green.position],ebx + shr eax,8 + mov bl,al + inc bl + neg bl + mov [scroll_bar_data_red.position],ebx + ret +;--------------------------------------------------------------------- +align 4 +prepare_color_from_scrollbars_position: +; out: ebx = selected color + mov eax,[scroll_bar_data_red.position] + inc al + neg al + movzx ebx,al + shl ebx,8 + mov eax,[scroll_bar_data_green.position] + inc al + neg al + mov bl,al + shl ebx,8 + mov eax,[scroll_bar_data_blue.position] + inc al + neg al + mov bl,al + ret +;--------------------------------------------------------------------- +align 4 +key: + mcall SF_GET_KEY + + test word[edit1.flags],10b ;ed_focus + jne @f + cmp ah,027 ; Esc + je button.exit + jmp still +@@: + stdcall [edit_box_key], edit1 + stdcall conv_str_to_int, [edit1.text] + cmp [selected_color],eax + je still + mov [selected_color],eax + call prepare_scrollbars_position_from_color + ;call draw_selected_color + mcall SF_DRAW_RECT,,,[selected_color] + call draw_scrollbars + jmp still +;--------------------------------------------------------------------- +align 4 +mouse: + cmp [scroll_bar_data_red.delta2],0 + jne .red + cmp [scroll_bar_data_green.delta2],0 + jne .green + cmp [scroll_bar_data_blue.delta2],0 + jne .blue +;-------------------------------------- +align 4 +.red: + stdcall [scrollbar_ver_mouse], scroll_bar_data_red + cmp [scroll_bar_data_red.delta2],0 + jne @f +;-------------------------------------- +align 4 +.green: + stdcall [scrollbar_ver_mouse], scroll_bar_data_green + cmp [scroll_bar_data_green.delta2],0 + jne @f +;-------------------------------------- +align 4 +.blue: + stdcall [scrollbar_ver_mouse], scroll_bar_data_blue + cmp [scroll_bar_data_blue.delta2],0 + jne @f +;-------------------------------------- +align 4 +@@: + stdcall [edit_box_mouse], edit1 + call prepare_color_from_scrollbars_position + cmp [selected_color],ebx + je still + mov [selected_color],ebx + call draw_selected_color + jmp still +;--------------------------------------------------------------------- +align 4 +draw_selected_color: + mcall SF_DRAW_RECT,,,[selected_color] + stdcall hex_in_str, sz_0x,[selected_color],6 + mov byte[sz_0x+6],0 + stdcall [edit_box_set_text],edit1,sz_0x + stdcall [edit_box_draw],edit1 + ret +;--------------------------------------------------------------------- +align 4 +create_and_draw_tone: + call create_tone + call draw_tone + ret +;--------------------------------------------------------------------- +align 4 +draw_tone: + mcall SF_PUT_IMAGE_EXT,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,,24 + ret +;--------------------------------------------------------------------- +align 4 +draw_scrollbars: + stdcall [scrollbar_ver_draw], scroll_bar_data_red + stdcall [scrollbar_ver_draw], scroll_bar_data_green + stdcall [scrollbar_ver_draw], scroll_bar_data_blue + ret +;--------------------------------------------------------------------- +align 4 +draw_history_frame: + mov [frame_data.x],dword (c_start_x+c_size_x+ed_size_x+10*2)*65536+80 + mov [frame_data.y],dword (p_start_y+5)*65536+(p_size_y-5) + + mov [frame_data.draw_text_flag],dword 1 + + mov [frame_data.text_pointer],dword history_text + stdcall [Frame_draw], frame_data + ret +;--------------------------------------------------------------------- +align 4 +draw_button_row: + mov edx,0x60000000 + 30 ; BUTTON ROW +; mov ebx,220*65536+14 + mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 + mov ecx,25*65536+14 + mov eax,SF_DEFINE_BUTTON +;----------------------------------- +align 4 +.newb: + mcall + add ecx,24*65536 + inc edx + cmp edx,0x60000000 + 39 + jbe .newb + ret +;--------------------------------------------------------------------- +align 4 +draw_color_value: + movzx ebx,word[frame_data.x_start] + shl ebx,16 + add ebx,(22 shl 16)+39 + mov ecx,28*65536+11 + mov edx,0xffffff + mov eax,SF_DRAW_RECT + mov edi,10 + mov esi,[communication_area] + add esi,28 +;----------------------------------- +align 4 +@@: + mcall + pusha + lea edx,[ebx+(2 shl 16)] + shr ecx,16 + mov dx,cx + add dx,2 + mov ecx,[esi] + and ecx,0xffffff + mcall SF_DRAW_NUMBER,0x00060100,,,0 + popa + + add ecx,24*65536 + add esi,4 + dec edi + jnz @b + + ret +;--------------------------------------------------------------------- +align 4 +draw_colours: + mov edi,10 + mov esi,[communication_area] + add esi,28 +; mov ebx,220*65536+14 + mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 + mov ecx,27*65536+14 + mov eax,SF_DRAW_RECT + mov [frame_data.draw_text_flag],dword 0 +;-------------------------------------- +align 4 +newcol: + mov edx,[esi] + mcall + + push ebx ecx + + sub ebx,2 shl 16 + add bx,4 + sub ecx,2 shl 16 + add cx,4 + + mov [frame_data.x],ebx + mov [frame_data.y],ecx + + stdcall [Frame_draw], frame_data + + pop ecx ebx + + add ecx,24*65536 + add esi,4 + + dec edi + jnz newcol + + ret +;---------------------------------------------------------------------- +align 4 +draw_window: + mcall SF_REDRAW,SSF_BEGIN_DRAW +; mcall SF_CREATE_WINDOW, , , 0x33AABBCC,,title + xor esi,esi + mcall SF_CREATE_WINDOW,[window_x],[window_y], 0x34EEEeee,,title + mcall SF_DEFINE_BUTTON,,,0x60000002 + mcall ,,,0x60000003 + mcall ,<296,80>,<280,22>,4,0x37A4D4 + mcall ,<402,80>, ,1 + mcall SF_DRAW_TEXT,<332,289>,0x802C7B9E,OK_Cancel + mcall ,<331,288>,0x80FFFfff + xor ebp,ebp + mcall SF_PUT_IMAGE_EXT,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24 + call draw_tone + call draw_selected_color + xor eax,eax + inc eax + mov [scroll_bar_data_red.all_redraw],eax + mov [scroll_bar_data_green.all_redraw],eax + mov [scroll_bar_data_blue.all_redraw],eax + call draw_scrollbars + call draw_history_frame + call draw_button_row + call draw_colours + call draw_color_value + mcall SF_REDRAW,SSF_END_DRAW + ret +;--------------------------------------------------------------------- +align 4 +proc hex_in_str, buf:dword,val:dword,zif:dword +pushad + mov edi,[buf] + mov ecx,[zif] + add edi,ecx + dec edi + mov ebx,[val] + + .cycle: + mov al,bl + and al,0xf + cmp al,10 + jl @f + add al,'A'-'0'-10 + @@: + add al,'0' + mov byte[edi],al + dec edi + shr ebx,4 + loop .cycle +popad + ret +endp +;--------------------------------------------------------------------- +;input: +; buf - pointer to a hexadecimal string +;output: +; eax - number +align 4 +proc conv_str_to_int uses ebx esi, buf:dword + xor eax,eax + xor ebx,ebx + mov esi,[buf] + + .cycle_16: + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'f' + jg @f + cmp bl,'9' + jle .us1 + cmp bl,'A' + jl @f ;skip the chars not in between '9' and 'A' + .us1: ;╤Б╨╛╤Б╤В╨░╨▓╨╜╨╛╨╡ ╤Г╤Б╨╗╨╛╨▓╨╕╨╡ + cmp bl,'F' + jle .us2 + cmp bl,'a' + jl @f ;skip the chars not in between 'F' and 'a' + sub bl,32 ;convert symbols to uppercase for convenience + .us2: ;╤Б╨╛╤Б╤В╨░╨▓╨╜╨╛╨╡ ╤Г╤Б╨╗╨╛╨▓╨╕╨╡ + sub bl,'0' + cmp bl,9 + jle .cor1 + sub bl,7 ;convert 'A' to '10' + .cor1: + shl eax,4 + add eax,ebx + inc esi + jmp .cycle_16 + @@: + ret +endp +;--------------------------------------------------------------------- +include 'palette.inc' +;--------------------------------------------------------------------- +include 'tone.inc' +;--------------------------------------------------------------------- +include 'i_data.inc' +;--------------------------------------------------------------------- +IM_END: +;--------------------------------------------------------------------- +include 'u_data.inc' +;--------------------------------------------------------------------- +I_END: +;--------------------------------------------------------------------- diff --git a/programs/system/cpu/cpu.asm b/programs/system/cpu/cpu.asm index fcedcaceb..bdfd84189 100644 --- a/programs/system/cpu/cpu.asm +++ b/programs/system/cpu/cpu.asm @@ -21,7 +21,7 @@ ;------------------------------------------------------------------------------- include "lang.inc" ; Language support for locales (UTF-8): de_DE, et_EE, ru_RU, it_IT, en_US. include "../../macros.inc" -include "../../develop/libraries/box_lib/trunk/box_lib.mac" +include "../../develop/libraries/box_lib/box_lib.mac" include "../../KOSfuncs.inc" include "../../load_lib.mac" ;------------------------------------------------------------------------------- diff --git a/programs/system/format/format.asm b/programs/system/format/format.asm index d19428471..69dcff473 100644 --- a/programs/system/format/format.asm +++ b/programs/system/format/format.asm @@ -1,3 +1,8 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Formatting Disk Utility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -46,7 +51,7 @@ include '../../macros.inc' include '../../proc32.inc' include '../../KOSfuncs.inc' include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;for uses checkBox and editBox +include '../../develop/libraries/box_lib/box_lib.mac' ;for uses checkBox and editBox include '../../load_lib.mac' @use_library diff --git a/programs/system/hdd_info/hdd_info.asm b/programs/system/hdd_info/hdd_info.asm index a47fee4e3..a42a0eb87 100644 --- a/programs/system/hdd_info/hdd_info.asm +++ b/programs/system/hdd_info/hdd_info.asm @@ -41,12 +41,12 @@ SECONDARY_CHANNEL equ 0x177 ; Fnc 01: 10-1,14-1,18-1,1c-1,BMA-0x18e1,0x18d1 ; Регистр по смещению 0х10 для функции 02 содержит 0x1c01 (порты 0х1с00-0х1с07) -include 'lang.inc' ; language support +include 'lang.inc' ; Language support for locales: it_IT, en_US. ; Режимы Legacy, Native и пр. меняются через BIOS. include '../../config.inc' ;for nightbuild include '../../macros.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../KOSfuncs.inc' include '../../load_lib.mac' @use_library diff --git a/programs/system/icon_new/icon.asm b/programs/system/icon_new/icon.asm index f6ff15f7b..4f641a6f2 100644 --- a/programs/system/icon_new/icon.asm +++ b/programs/system/icon_new/icon.asm @@ -1,3 +1,9 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + ICON_STRIP equ '/sys/icons32.png' ICON_INI equ '/sys/settings/icon.ini' ICON_SIZE equ 68 ;размер области для иконки с надписью @@ -38,7 +44,7 @@ BegData equ fiStdIco.point include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. include '../../macros.inc' include '../../proc32.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../dll.inc' include '../../debug.inc' diff --git a/programs/system/keybi/keybi.asm b/programs/system/keybi/keybi.asm index 5e789e11a..5125f3c58 100644 --- a/programs/system/keybi/keybi.asm +++ b/programs/system/keybi/keybi.asm @@ -1,3 +1,9 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page Windows 1251 - Cyrillic + + ; Keyboard indicators v0.2 ; by Albom and IgorA @@ -15,7 +21,7 @@ use32 include '../../macros.inc' include '../../proc32.inc' include '../../develop/libraries/box_lib/load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' ;include 'mem.inc' ;include 'dll.inc' include 'lang.inc' ; Language support for locales: it_IT, en_US. diff --git a/programs/system/open/open.asm b/programs/system/open/open.asm index 0d5f5b813..fa63bc447 100644 --- a/programs/system/open/open.asm +++ b/programs/system/open/open.asm @@ -1,3 +1,9 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + DEBUG = 0 LIST_WIDTH = 256 @@ -18,7 +24,7 @@ M01header.params: include "../../macros.inc" include "../../dll.inc" include "../../string.inc" - include "../../develop/libraries/box_lib/trunk/box_lib.mac" + include "../../develop/libraries/box_lib/box_lib.mac" include "lang.inc" ; Language support for locales: ru_RU (CP866), et_EE, it_IT, en_US. diff --git a/programs/system/rdsave/rdsave.asm b/programs/system/rdsave/rdsave.asm index 59947715b..8ff2dde03 100644 --- a/programs/system/rdsave/rdsave.asm +++ b/programs/system/rdsave/rdsave.asm @@ -39,7 +39,7 @@ include '../../proc32.inc' include '../../dll.inc' include '../../KOSfuncs.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include 'str.inc' @use_library diff --git a/programs/system/run/run.asm b/programs/system/run/run.asm index d62f753e3..ca2d0607e 100644 --- a/programs/system/run/run.asm +++ b/programs/system/run/run.asm @@ -8,7 +8,7 @@ window_w=430 ;--- другие макросы --- include '../../KOSfuncs.inc' include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include 'txtbut.inc' include '../../macros.inc' include 'run.mac' diff --git a/programs/system/terminal/terminal.asm b/programs/system/terminal/terminal.asm index 5cfb554ce..0ffc92859 100644 --- a/programs/system/terminal/terminal.asm +++ b/programs/system/terminal/terminal.asm @@ -1,497 +1,497 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2014. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; terminal for KolibriOS ;; -;; ;; -;; Written by hidnplayr@kolibrios.org ;; -;; ;; -;; GNU GENERAL PUBLIC LICENSE ;; -;; Version 2, June 1991 ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -format binary as "" - -use32 - org 0x0 - - db 'MENUET01' - dd 0x1 - dd START - dd I_END - dd IM_END+0x1000 - dd IM_END+0x1000 - dd 0, 0 - -include '../../proc32.inc' -include '../../macros.inc' -include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' - - -START: - - mcall 68, 11 - - stdcall dll.Load, @IMPORT - or eax, eax - jnz exit - - mcall 40, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_REDRAW + EVM_BUTTON + EVM_KEY - - invoke init_checkbox, ch1 - -red_win: - call draw_window - -mainloop: - mcall 10 - - dec eax - jz red_win - - dec eax - jz key - - dec eax - jz button - - invoke edit_box_mouse, edit1 - invoke edit_box_mouse, edit2 - invoke edit_box_mouse, edit3 - invoke edit_box_mouse, edit4 - - invoke option_box_mouse, Option_boxs1 - invoke option_box_mouse, Option_boxs2 - - invoke check_box_mouse, ch1 - - jmp mainloop - -button: - mcall 17 - - cmp ah, 0x10 ; connect button - je open_connection - - test ah , ah - jz mainloop -exit: - mcall -1 - -key: - mcall 2 - - cmp ah, 13 ; enter key - je open_connection - - invoke edit_box_key, edit1 - invoke edit_box_key, edit2 - invoke edit_box_key, edit3 - invoke edit_box_key, edit4 - - jmp mainloop - - - -draw_window: -; get system colors - mcall 48, 3, sc, 40 - - mcall 12,1 - mov edx, [sc.work] - or edx, 0x34000000 - xor esi, esi - mov edi, str_title - mcall 0, 50 shl 16 + 415, 30 shl 16 + 195 - - mov ebx, 5 shl 16 + 12 - mov ecx, 0x90000000 - or ecx, [sc.work_text] - mov edx, str_port - mcall 4 - add ebx, 25 - mov edx, str_speed - mcall - add ebx, 25 - mov edx, str_data - mcall - add ebx, 25 - mov edx, str_stop - mcall - - mov ebx, 195 shl 16 + 12 - mov edx, str_parity - mcall - mov ebx, 280 shl 16 + 12 - mov edx, str_flow - mcall - - edit_boxes_set_sys_color edit1,editboxes_end,sc - invoke edit_box_draw, edit1 - invoke edit_box_draw, edit2 - invoke edit_box_draw, edit3 - invoke edit_box_draw, edit4 - - option_boxes_set_sys_color sc, Option_boxs1 - option_boxes_set_sys_color sc, Option_boxs2 - invoke option_box_draw, Option_boxs1 - invoke option_box_draw, Option_boxs2 - - check_boxes_set_sys_color2 ch1,ch1_end,sc ;set color - invoke check_box_draw, ch1 - - mov esi, [sc.work_button] - mcall 8, 280 shl 16 + 100, 115 shl 16 + 22, 0x10 - - mov ecx, 0x90000000 - or ecx, [sc.work_button_text] - mcall 4, 315 shl 16 + 119, , str_open - - - mov edx, [sc.work_graph] - mcall 38, 0 shl 16 + 405, 145 shl 16 + 145 - - mov ecx, 0x90000000 - or ecx, [sc.work_text] - mcall 4, 5 shl 16 + 150, , [errormsg] - - mcall 12, 2 - ret - - -open_connection: - - mov [errormsg], err_none ; clear previous error message - -; Read the serial port name, and convert it to a port number - cmp byte[ed_port+4], 0 - jne .port_error - mov eax, dword[ed_port] - or eax, 0x20202020 ; convert to lowercase - cmp eax, 'com1' - je .com1 - cmp eax, 'com2' - je .com2 - cmp eax, 'com3' - je .com3 - cmp eax, 'com4' - je .com4 - .port_error: - mov [errormsg], err_port - jmp red_win - - .com1: - mov [port], 0x3f8 - jmp .port_ok - .com2: - mov [port], 0x2f8 - jmp .port_ok - .com3: - mov [port], 0x3e8 - jmp .port_ok - .com4: - mov [port], 0x2e8 - .port_ok: - -; reserve the com port so we can work with it - xor ebx, ebx - movzx ecx, [port] - mov edx, ecx - add edx, 7 - mcall 46 - test eax, eax - jz .port_reserved - mov [errormsg], err_reserve - jmp red_win - .port_reserved: - -; disable com interrupts -; (We cannot receive them on the application level :( ) - mov dx, [port] - inc dx - mov al, 0 - out dx, al - -; Set speed: -; Convert the ascii decimal number that user entered -; So we can do some math with it - mov esi, ed_speed - xor eax, eax - xor ebx, ebx - .convert_loop: - lodsb - test al, al - jz .convert_done - sub al, '0' - jb .invalid_speed - cmp al, 9 - ja .invalid_speed - lea ebx, [ebx + 4*ebx] - shl ebx, 1 - add ebx, eax - jmp .convert_loop - .invalid_speed: - call free_port - mov [errormsg], err_speed - jmp red_win - .convert_done: - test ebx, ebx - jz .invalid_speed - -; We now have the speed setting in ebx -; calculate the divisor latch value as 115200/ebx - xor edx, edx - mov eax, 115200 - div ebx - test edx, edx - jnz .invalid_speed - cmp eax, 0xffff - ja .invalid_speed - mov bx, ax - -; enable Divisor latch - mov dx, [port] - add dx, 3 - mov al, 1 shl 7 ; dlab bit - out dx, al - -; Set divisor latch value - mov dx, [port] - mov al, bl - out dx, al - inc dx - mov al, bh - out dx, al - -; Check the parity type - xor bl, bl - cmp [option_group1], op1 ; none - je .parity_ok - - mov bl, 001b shl 3 - cmp [option_group1], op2 ; odd - je .parity_ok - - mov bl, 011b shl 3 - cmp [option_group1], op3 ; even - je .parity_ok - - mov bl, 101b shl 3 - cmp [option_group1], op4 ; mark - je .parity_ok - - mov bl, 111b shl 3 - cmp [option_group1], op5 ; space - je .parity_ok - jmp exit2 ; something went terribly wrong - .parity_ok: - -; Check number of stop bits - cmp [ed_stop], '1' - je .stop_ok - cmp [ed_stop], '2' - jne .invalid_stop - or bl, 1 shl 2 ; number of stop bits - jmp .stop_ok - .invalid_stop: - call free_port - mov [errormsg], err_stopbits - jmp red_win - .stop_ok: - -; Check number of data bits - mov al, [ed_data] - cmp al, '8' - ja .invalid_data - sub al, '5' - jae .data_ok - .invalid_data: - call free_port - mov [errormsg], err_databits - jmp red_win - .data_ok: - or al, bl -; Program data bits, stop bits and parity in the UART - mov dx, [port] - add dx, 3 ; Line Control Register - out dx, al - -; clear + enable fifo (64 bytes), 1 byte trigger level - mov dx, [port] - inc dx - inc dx - mov al, 0x7 + 1 shl 5 - out dx, al - -; flow control - mov dx, [port] - add dx, 4 - mov al, 0xb - out dx, al - -; Hide our GUI window and open the console - mcall 40, 0 ; disable all events - mcall 67, 0, 0, 0, 0 ; hide window - mcall 12, 1 - mcall 12, 2 - - invoke con_start, 1 - invoke con_init, 80, 25, 80, 25, str_title - -console_loop: - mcall 5, 1 ; wait 10 ms - - invoke con_get_flags - test eax, 0x200 ; con window closed? - jnz exit2 - - .tx_loop: - invoke con_kbhit - test eax, eax ; did user press a key? - jz .rx_loop - - invoke con_getch2 ; get the pressed key from buffer - mov dx, [port] - out dx, al - - test [ch1.flags], ch_flag_en ; does user want us to echo locally? - je .tx_loop - - and eax, 0xff - push eax - invoke con_write_asciiz, esp ; print the character - pop eax - jmp .tx_loop - - .rx_loop: - mov dx, [port] - add dx, 5 ; Line status register - in al, dx - test al, 1 ; Data ready? - jz console_loop - - mov dx, [port] ; Read character from buffer - in al, dx - - and eax, 0xff - push eax - invoke con_write_asciiz, esp ; print the character - pop eax - - jmp .rx_loop - - -exit2: - - call free_port - mcall -1 ; exit - -free_port: - - xor ebx, ebx - inc ebx - movzx ecx, [port] - mov edx, ecx - add edx, 7 - mcall 46 - - ret - -;------------------------- -; DATA - -align 16 -@IMPORT: - -library box_lib, 'box_lib.obj',\ - console, 'console.obj' - -import box_lib,\ - edit_box_draw, 'edit_box_draw',\ - edit_box_key, 'edit_box_key',\ - edit_box_mouse, 'edit_box_mouse',\ - init_checkbox, 'init_checkbox2',\ - check_box_draw, 'check_box_draw2',\ - check_box_mouse, 'check_box_mouse2',\ - option_box_draw, 'option_box_draw',\ - option_box_mouse, 'option_box_mouse' - -import console,\ - con_start, 'START',\ - con_init, 'con_init',\ - con_exit, 'con_exit',\ - con_getch2, 'con_getch2',\ - con_write_asciiz, 'con_write_asciiz',\ - con_get_flags, 'con_get_flags',\ - con_kbhit, 'con_kbhit' - -edit1 edit_box 60, 112, 10, 0xffffff, 0x6f9480, 0, 0, 0x10000000, 8, ed_port, mouse_dd, ed_focus, 4, 4 -edit2 edit_box 60, 112, 35, 0xffffff, 0x6a9480, 0, 0, 0x10000000, 7, ed_speed, mouse_dd, ed_figure_only, 4, 4 -edit3 edit_box 60, 112, 60, 0xffffff, 0x6a9480, 0, 0, 0x10000000, 1, ed_data, mouse_dd, ed_figure_only, 1, 1 -edit4 edit_box 60, 112, 85, 0xffffff, 0x6a9480, 0, 0, 0x10000000, 1, ed_stop, mouse_dd, ed_figure_only, 1, 1 -editboxes_end: - -ed_port db "COM1",0,0,0,0,0,0 -ed_speed db "9600",0,0,0 -ed_data db "8",0 -ed_stop db "1",0 - -option_group1 dd op1 -op1 option_box option_group1, 195, 30, 6, 12, 0xffffff, 0, 0, str_none, 4 -op2 option_box option_group1, 195, 47, 6, 12, 0xffffff, 0, 0, str_odd, 3 -op3 option_box option_group1, 195, 64, 6, 12, 0xffffff, 0, 0, str_even, 4 -op4 option_box option_group1, 195, 81, 6, 12, 0xffffff, 0, 0, str_mark, 4 -op5 option_box option_group1, 195, 98, 6, 12, 0xffffff, 0, 0, str_space, 5 - -option_group2 dd op6 -op6 option_box option_group2, 280, 30, 6, 12, 0xffffff, 0, 0, str_none, 4 -;op7 option_box option_group2, 270, 44, 6, 12, 0xffffff, 0, 0, str_xon, 8, 10b -;op8 option_box option_group2, 270, 61, 6, 12, 0xffffff, 0, 0, str_rts, 7, 1b -;op9 option_box option_group2, 270, 78, 6, 12, 0xffffff, 0, 0, str_dsr, 7 - -ch1 check_box2 5 shl 16 + 12, 119 shl 16 + 12, 5, 0xffffff, 0x000000, 0, str_echo, ch_flag_middle -ch1_end: - -Option_boxs1 dd op1, op2, op3, op4, op5, 0 -Option_boxs2 dd op6, 0 ;op7, op8, op9, 0 - -str_title db 'Terminal', 0 -str_port db 'Serial port:', 0 -str_speed db 'Speed (baud):', 0 -str_data db 'Data bits:', 0 -str_parity db 'Parity:', 0 -str_flow db 'Flow control:', 0 -str_stop db 'Stop bits:', 0 - -str_open db 'Open', 0 - -str_none db 'None' -str_odd db 'Odd' -str_even db 'Even' -str_mark db 'Mark' -str_space db 'Space' -;str_xon db 'XON/XOFF' -;str_rts db 'RTS/CTS' -;str_dsr db 'DSR/DTR' - -str_echo db 'Local echo', 0 - -errormsg dd err_none -err_none db 0 -err_port db 'Invalid serial port.', 0 -err_reserve db 'The port is already in use.', 0 -err_speed db 'Incorrect speed setting.', 0 -err_stopbits db 'Invalid number of stop bits. Must be 1 or 2.', 0 -err_databits db 'Invalid number of data bits. Must be between 5 and 8.', 0 - -I_END: - -mouse_dd dd ? -echo db ? -port dw ? -sc system_colors - -IM_END: \ No newline at end of file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2014. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; terminal for KolibriOS ;; +;; ;; +;; Written by hidnplayr@kolibrios.org ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +format binary as "" + +use32 + org 0x0 + + db 'MENUET01' + dd 0x1 + dd START + dd I_END + dd IM_END+0x1000 + dd IM_END+0x1000 + dd 0, 0 + +include '../../proc32.inc' +include '../../macros.inc' +include '../../dll.inc' +include '../../develop/libraries/box_lib/box_lib.mac' + + +START: + + mcall 68, 11 + + stdcall dll.Load, @IMPORT + or eax, eax + jnz exit + + mcall 40, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_REDRAW + EVM_BUTTON + EVM_KEY + + invoke init_checkbox, ch1 + +red_win: + call draw_window + +mainloop: + mcall 10 + + dec eax + jz red_win + + dec eax + jz key + + dec eax + jz button + + invoke edit_box_mouse, edit1 + invoke edit_box_mouse, edit2 + invoke edit_box_mouse, edit3 + invoke edit_box_mouse, edit4 + + invoke option_box_mouse, Option_boxs1 + invoke option_box_mouse, Option_boxs2 + + invoke check_box_mouse, ch1 + + jmp mainloop + +button: + mcall 17 + + cmp ah, 0x10 ; connect button + je open_connection + + test ah , ah + jz mainloop +exit: + mcall -1 + +key: + mcall 2 + + cmp ah, 13 ; enter key + je open_connection + + invoke edit_box_key, edit1 + invoke edit_box_key, edit2 + invoke edit_box_key, edit3 + invoke edit_box_key, edit4 + + jmp mainloop + + + +draw_window: +; get system colors + mcall 48, 3, sc, 40 + + mcall 12,1 + mov edx, [sc.work] + or edx, 0x34000000 + xor esi, esi + mov edi, str_title + mcall 0, 50 shl 16 + 415, 30 shl 16 + 195 + + mov ebx, 5 shl 16 + 12 + mov ecx, 0x90000000 + or ecx, [sc.work_text] + mov edx, str_port + mcall 4 + add ebx, 25 + mov edx, str_speed + mcall + add ebx, 25 + mov edx, str_data + mcall + add ebx, 25 + mov edx, str_stop + mcall + + mov ebx, 195 shl 16 + 12 + mov edx, str_parity + mcall + mov ebx, 280 shl 16 + 12 + mov edx, str_flow + mcall + + edit_boxes_set_sys_color edit1,editboxes_end,sc + invoke edit_box_draw, edit1 + invoke edit_box_draw, edit2 + invoke edit_box_draw, edit3 + invoke edit_box_draw, edit4 + + option_boxes_set_sys_color sc, Option_boxs1 + option_boxes_set_sys_color sc, Option_boxs2 + invoke option_box_draw, Option_boxs1 + invoke option_box_draw, Option_boxs2 + + check_boxes_set_sys_color2 ch1,ch1_end,sc ;set color + invoke check_box_draw, ch1 + + mov esi, [sc.work_button] + mcall 8, 280 shl 16 + 100, 115 shl 16 + 22, 0x10 + + mov ecx, 0x90000000 + or ecx, [sc.work_button_text] + mcall 4, 315 shl 16 + 119, , str_open + + + mov edx, [sc.work_graph] + mcall 38, 0 shl 16 + 405, 145 shl 16 + 145 + + mov ecx, 0x90000000 + or ecx, [sc.work_text] + mcall 4, 5 shl 16 + 150, , [errormsg] + + mcall 12, 2 + ret + + +open_connection: + + mov [errormsg], err_none ; clear previous error message + +; Read the serial port name, and convert it to a port number + cmp byte[ed_port+4], 0 + jne .port_error + mov eax, dword[ed_port] + or eax, 0x20202020 ; convert to lowercase + cmp eax, 'com1' + je .com1 + cmp eax, 'com2' + je .com2 + cmp eax, 'com3' + je .com3 + cmp eax, 'com4' + je .com4 + .port_error: + mov [errormsg], err_port + jmp red_win + + .com1: + mov [port], 0x3f8 + jmp .port_ok + .com2: + mov [port], 0x2f8 + jmp .port_ok + .com3: + mov [port], 0x3e8 + jmp .port_ok + .com4: + mov [port], 0x2e8 + .port_ok: + +; reserve the com port so we can work with it + xor ebx, ebx + movzx ecx, [port] + mov edx, ecx + add edx, 7 + mcall 46 + test eax, eax + jz .port_reserved + mov [errormsg], err_reserve + jmp red_win + .port_reserved: + +; disable com interrupts +; (We cannot receive them on the application level :( ) + mov dx, [port] + inc dx + mov al, 0 + out dx, al + +; Set speed: +; Convert the ascii decimal number that user entered +; So we can do some math with it + mov esi, ed_speed + xor eax, eax + xor ebx, ebx + .convert_loop: + lodsb + test al, al + jz .convert_done + sub al, '0' + jb .invalid_speed + cmp al, 9 + ja .invalid_speed + lea ebx, [ebx + 4*ebx] + shl ebx, 1 + add ebx, eax + jmp .convert_loop + .invalid_speed: + call free_port + mov [errormsg], err_speed + jmp red_win + .convert_done: + test ebx, ebx + jz .invalid_speed + +; We now have the speed setting in ebx +; calculate the divisor latch value as 115200/ebx + xor edx, edx + mov eax, 115200 + div ebx + test edx, edx + jnz .invalid_speed + cmp eax, 0xffff + ja .invalid_speed + mov bx, ax + +; enable Divisor latch + mov dx, [port] + add dx, 3 + mov al, 1 shl 7 ; dlab bit + out dx, al + +; Set divisor latch value + mov dx, [port] + mov al, bl + out dx, al + inc dx + mov al, bh + out dx, al + +; Check the parity type + xor bl, bl + cmp [option_group1], op1 ; none + je .parity_ok + + mov bl, 001b shl 3 + cmp [option_group1], op2 ; odd + je .parity_ok + + mov bl, 011b shl 3 + cmp [option_group1], op3 ; even + je .parity_ok + + mov bl, 101b shl 3 + cmp [option_group1], op4 ; mark + je .parity_ok + + mov bl, 111b shl 3 + cmp [option_group1], op5 ; space + je .parity_ok + jmp exit2 ; something went terribly wrong + .parity_ok: + +; Check number of stop bits + cmp [ed_stop], '1' + je .stop_ok + cmp [ed_stop], '2' + jne .invalid_stop + or bl, 1 shl 2 ; number of stop bits + jmp .stop_ok + .invalid_stop: + call free_port + mov [errormsg], err_stopbits + jmp red_win + .stop_ok: + +; Check number of data bits + mov al, [ed_data] + cmp al, '8' + ja .invalid_data + sub al, '5' + jae .data_ok + .invalid_data: + call free_port + mov [errormsg], err_databits + jmp red_win + .data_ok: + or al, bl +; Program data bits, stop bits and parity in the UART + mov dx, [port] + add dx, 3 ; Line Control Register + out dx, al + +; clear + enable fifo (64 bytes), 1 byte trigger level + mov dx, [port] + inc dx + inc dx + mov al, 0x7 + 1 shl 5 + out dx, al + +; flow control + mov dx, [port] + add dx, 4 + mov al, 0xb + out dx, al + +; Hide our GUI window and open the console + mcall 40, 0 ; disable all events + mcall 67, 0, 0, 0, 0 ; hide window + mcall 12, 1 + mcall 12, 2 + + invoke con_start, 1 + invoke con_init, 80, 25, 80, 25, str_title + +console_loop: + mcall 5, 1 ; wait 10 ms + + invoke con_get_flags + test eax, 0x200 ; con window closed? + jnz exit2 + + .tx_loop: + invoke con_kbhit + test eax, eax ; did user press a key? + jz .rx_loop + + invoke con_getch2 ; get the pressed key from buffer + mov dx, [port] + out dx, al + + test [ch1.flags], ch_flag_en ; does user want us to echo locally? + je .tx_loop + + and eax, 0xff + push eax + invoke con_write_asciiz, esp ; print the character + pop eax + jmp .tx_loop + + .rx_loop: + mov dx, [port] + add dx, 5 ; Line status register + in al, dx + test al, 1 ; Data ready? + jz console_loop + + mov dx, [port] ; Read character from buffer + in al, dx + + and eax, 0xff + push eax + invoke con_write_asciiz, esp ; print the character + pop eax + + jmp .rx_loop + + +exit2: + + call free_port + mcall -1 ; exit + +free_port: + + xor ebx, ebx + inc ebx + movzx ecx, [port] + mov edx, ecx + add edx, 7 + mcall 46 + + ret + +;------------------------- +; DATA + +align 16 +@IMPORT: + +library box_lib, 'box_lib.obj',\ + console, 'console.obj' + +import box_lib,\ + edit_box_draw, 'edit_box_draw',\ + edit_box_key, 'edit_box_key',\ + edit_box_mouse, 'edit_box_mouse',\ + init_checkbox, 'init_checkbox2',\ + check_box_draw, 'check_box_draw2',\ + check_box_mouse, 'check_box_mouse2',\ + option_box_draw, 'option_box_draw',\ + option_box_mouse, 'option_box_mouse' + +import console,\ + con_start, 'START',\ + con_init, 'con_init',\ + con_exit, 'con_exit',\ + con_getch2, 'con_getch2',\ + con_write_asciiz, 'con_write_asciiz',\ + con_get_flags, 'con_get_flags',\ + con_kbhit, 'con_kbhit' + +edit1 edit_box 60, 112, 10, 0xffffff, 0x6f9480, 0, 0, 0x10000000, 8, ed_port, mouse_dd, ed_focus, 4, 4 +edit2 edit_box 60, 112, 35, 0xffffff, 0x6a9480, 0, 0, 0x10000000, 7, ed_speed, mouse_dd, ed_figure_only, 4, 4 +edit3 edit_box 60, 112, 60, 0xffffff, 0x6a9480, 0, 0, 0x10000000, 1, ed_data, mouse_dd, ed_figure_only, 1, 1 +edit4 edit_box 60, 112, 85, 0xffffff, 0x6a9480, 0, 0, 0x10000000, 1, ed_stop, mouse_dd, ed_figure_only, 1, 1 +editboxes_end: + +ed_port db "COM1",0,0,0,0,0,0 +ed_speed db "9600",0,0,0 +ed_data db "8",0 +ed_stop db "1",0 + +option_group1 dd op1 +op1 option_box option_group1, 195, 30, 6, 12, 0xffffff, 0, 0, str_none, 4 +op2 option_box option_group1, 195, 47, 6, 12, 0xffffff, 0, 0, str_odd, 3 +op3 option_box option_group1, 195, 64, 6, 12, 0xffffff, 0, 0, str_even, 4 +op4 option_box option_group1, 195, 81, 6, 12, 0xffffff, 0, 0, str_mark, 4 +op5 option_box option_group1, 195, 98, 6, 12, 0xffffff, 0, 0, str_space, 5 + +option_group2 dd op6 +op6 option_box option_group2, 280, 30, 6, 12, 0xffffff, 0, 0, str_none, 4 +;op7 option_box option_group2, 270, 44, 6, 12, 0xffffff, 0, 0, str_xon, 8, 10b +;op8 option_box option_group2, 270, 61, 6, 12, 0xffffff, 0, 0, str_rts, 7, 1b +;op9 option_box option_group2, 270, 78, 6, 12, 0xffffff, 0, 0, str_dsr, 7 + +ch1 check_box2 5 shl 16 + 12, 119 shl 16 + 12, 5, 0xffffff, 0x000000, 0, str_echo, ch_flag_middle +ch1_end: + +Option_boxs1 dd op1, op2, op3, op4, op5, 0 +Option_boxs2 dd op6, 0 ;op7, op8, op9, 0 + +str_title db 'Terminal', 0 +str_port db 'Serial port:', 0 +str_speed db 'Speed (baud):', 0 +str_data db 'Data bits:', 0 +str_parity db 'Parity:', 0 +str_flow db 'Flow control:', 0 +str_stop db 'Stop bits:', 0 + +str_open db 'Open', 0 + +str_none db 'None' +str_odd db 'Odd' +str_even db 'Even' +str_mark db 'Mark' +str_space db 'Space' +;str_xon db 'XON/XOFF' +;str_rts db 'RTS/CTS' +;str_dsr db 'DSR/DTR' + +str_echo db 'Local echo', 0 + +errormsg dd err_none +err_none db 0 +err_port db 'Invalid serial port.', 0 +err_reserve db 'The port is already in use.', 0 +err_speed db 'Incorrect speed setting.', 0 +err_stopbits db 'Invalid number of stop bits. Must be 1 or 2.', 0 +err_databits db 'Invalid number of data bits. Must be between 5 and 8.', 0 + +I_END: + +mouse_dd dd ? +echo db ? +port dw ? +sc system_colors + +IM_END: diff --git a/programs/testing/fspeed/fspeed.asm b/programs/testing/fspeed/fspeed.asm index 0ceefa736..7446abce7 100644 --- a/programs/testing/fspeed/fspeed.asm +++ b/programs/testing/fspeed/fspeed.asm @@ -1,354 +1,357 @@ -;***************************************************************************** -; File Speed - for KolibriOS -; 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 0 - db 'MENUET01' - dd 1 - dd START - dd IM_END - dd I_END - dd STACK_TOP - dd 0 - 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/trunk/box_lib.mac' -include '../../KOSfuncs.inc' -include '../../load_lib.mac' - @use_library -;----------------------------------------------------------------------------- -struct RESULT_SLOT - text dd ? - read_speed dd ? - write_speed dd ? - chunk_size dd ? -ends -;----------------------------------------------------------------------------- -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] - - push check1 - call [init_checkbox] - - mcall 40,0x27 -;----------------------------------------------------------------------------- -red: - call draw_window -;----------------------------------------------------------------------------- -still: - mcall 10 - cmp eax,1 - je red - - cmp eax,2 - je key - - cmp eax,3 - je button - - push dword check1 - call [check_box_mouse] - - 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,300>,,,title - - call draw_PathShow - mov eax,[w_work_text] - or eax,0x80000000 - mov [check1.text_color],eax - push dword check1 - call [check_box_draw] - - mcall 8,<5,80>,<25,15>,2,[w_work_button] - mcall ,<400-65,50>,,3 - mov ecx,[w_work_button_text] - or ecx,0x80000000 - mcall 4,<5+10,25+4>,,s_text - mcall ,<400-65+10,25+4>,,r_text - mov ecx,[w_work_text] - or ecx,0x80000000 - mcall ,<10,47>,,check_box_warning_text - mcall ,<10,65>,,result_table_text - - mov edx,ecx - and edx,0xffffff - mcall 38,<5,400-15>,<59,59> -; draw result table - mov ebx,10 shl 16+77 - mov ebp,result_table - mov ecx,18 -;-------------------------------------- -@@: - push ecx - mov ecx,[w_work_text] - or ecx,0x80000000 - mcall 4,,,[ebp+RESULT_SLOT.text] - push ebx - mov edx,ebx - add edx,(11*6) shl 16 - mov ebx,0x800a0000 - mcall 47,,[ebp+RESULT_SLOT.read_speed],,[w_work_text] - add edx,(16*6) shl 16 - mcall ,,[ebp+RESULT_SLOT.write_speed] - pop ebx - add ebx,6+5 - add ebp,sizeof.RESULT_SLOT - 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 - - pusha - call draw_window - popa - - call write_chunk - - pusha - call draw_window - popa - - pop ecx - add ebp,sizeof.RESULT_SLOT - - dec ecx - jnz @b - - jmp still -;----------------------------------------------------------------------------- -read_chunk: - mov eax,[file_info+32] ; file size - cmp [ebp+RESULT_SLOT.chunk_size],eax - jb @f - - xor eax,eax ; small file size for current chunk size - mov [ebp+RESULT_SLOT.read_speed],eax - ret -;-------------------------------------- -@@: - mcall 68,12,[ebp+RESULT_SLOT.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+RESULT_SLOT.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+RESULT_SLOT.chunk_size] - add [fileread.offset],edx ; current offset -; check offset and file size - mov edx,[file_info+32] ; file size - sub edx,[ebp+RESULT_SLOT.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+RESULT_SLOT.chunk_size] - xor edx,edx - mul ecx - shr eax,10+4 ;div 1024 ; div 16 - shl edx,18 - add eax,edx - mov [ebp+RESULT_SLOT.read_speed],eax ; speed KB/s - DEBUGF 1,'FSPEED: read chunk size: %s iterations: %d speed: %d KB/s\n',\ - [ebp+RESULT_SLOT.text],ecx,eax - mcall 68,13,[fileread.return] - ret -;----------------------------------------------------------------------------- -write_chunk: - test [check1.flags],dword 10b - jz .exit - - mov eax,[file_info+32] ; file size - cmp [ebp+RESULT_SLOT.chunk_size],eax - jb @f -;-------------------------------------- -.exit: - xor eax,eax ; small file size for current chunk size - mov [ebp+RESULT_SLOT.write_speed],eax - ret -;-------------------------------------- -@@: - mcall 68,12,[ebp+RESULT_SLOT.chunk_size] - mov [filewrite.data],eax - xor eax,eax - mov [filewrite.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+RESULT_SLOT.chunk_size] - mov [filewrite.size],eax -;-------------------------------------- -.loop: - mcall 70,filewrite - - mcall 26,9 ; check current time - cmp esi,eax - jbe .end -; correct offset - mov edx,[ebp+RESULT_SLOT.chunk_size] - add [filewrite.offset],edx ; current offset -; check offset and file size - mov edx,[file_info+32] ; file size - sub edx,[ebp+RESULT_SLOT.chunk_size] - cmp [filewrite.offset],edx - jbe @f - - xor edx,edx - mov [filewrite.offset],edx ; zero current offset -;-------------------------------------- -@@: - inc ecx - jmp .loop -;-------------------------------------- -.end: - mov eax,[ebp+RESULT_SLOT.chunk_size] - xor edx,edx - mul ecx - shr eax,10+4 ;div 1024 ; div 16 - shl edx,18 - add eax,edx - mov [ebp+RESULT_SLOT.write_speed],eax ; speed KB/s - DEBUGF 1,'FSPEED: write chunk size: %s iterations: %d speed: %d KB/s\n',\ - [ebp+RESULT_SLOT.text],ecx,eax - mcall 68,13,[filewrite.data] - ret -;----------------------------------------------------------------------------- -include 'idata.inc' -;----------------------------------------------------------------------------- -IM_END: -;----------------------------------------------------------------------------- -include 'udata.inc' -;----------------------------------------------------------------------------- -I_END: -;----------------------------------------------------------------------------- +; SPDX-License-Identifier: NOASSERTION +; + +;***************************************************************************** +; File Speed - for KolibriOS +; 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 0 + db 'MENUET01' + dd 1 + dd START + dd IM_END + dd I_END + dd STACK_TOP + dd 0 + 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/box_lib.mac' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' + @use_library +;----------------------------------------------------------------------------- +struct RESULT_SLOT + text dd ? + read_speed dd ? + write_speed dd ? + chunk_size dd ? +ends +;----------------------------------------------------------------------------- +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] + + push check1 + call [init_checkbox] + + mcall 40,0x27 +;----------------------------------------------------------------------------- +red: + call draw_window +;----------------------------------------------------------------------------- +still: + mcall 10 + cmp eax,1 + je red + + cmp eax,2 + je key + + cmp eax,3 + je button + + push dword check1 + call [check_box_mouse] + + 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,300>,,,title + + call draw_PathShow + mov eax,[w_work_text] + or eax,0x80000000 + mov [check1.text_color],eax + push dword check1 + call [check_box_draw] + + mcall 8,<5,80>,<25,15>,2,[w_work_button] + mcall ,<400-65,50>,,3 + mov ecx,[w_work_button_text] + or ecx,0x80000000 + mcall 4,<5+10,25+4>,,s_text + mcall ,<400-65+10,25+4>,,r_text + mov ecx,[w_work_text] + or ecx,0x80000000 + mcall ,<10,47>,,check_box_warning_text + mcall ,<10,65>,,result_table_text + + mov edx,ecx + and edx,0xffffff + mcall 38,<5,400-15>,<59,59> +; draw result table + mov ebx,10 shl 16+77 + mov ebp,result_table + mov ecx,18 +;-------------------------------------- +@@: + push ecx + mov ecx,[w_work_text] + or ecx,0x80000000 + mcall 4,,,[ebp+RESULT_SLOT.text] + push ebx + mov edx,ebx + add edx,(11*6) shl 16 + mov ebx,0x800a0000 + mcall 47,,[ebp+RESULT_SLOT.read_speed],,[w_work_text] + add edx,(16*6) shl 16 + mcall ,,[ebp+RESULT_SLOT.write_speed] + pop ebx + add ebx,6+5 + add ebp,sizeof.RESULT_SLOT + 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 + + pusha + call draw_window + popa + + call write_chunk + + pusha + call draw_window + popa + + pop ecx + add ebp,sizeof.RESULT_SLOT + + dec ecx + jnz @b + + jmp still +;----------------------------------------------------------------------------- +read_chunk: + mov eax,[file_info+32] ; file size + cmp [ebp+RESULT_SLOT.chunk_size],eax + jb @f + + xor eax,eax ; small file size for current chunk size + mov [ebp+RESULT_SLOT.read_speed],eax + ret +;-------------------------------------- +@@: + mcall 68,12,[ebp+RESULT_SLOT.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+RESULT_SLOT.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+RESULT_SLOT.chunk_size] + add [fileread.offset],edx ; current offset +; check offset and file size + mov edx,[file_info+32] ; file size + sub edx,[ebp+RESULT_SLOT.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+RESULT_SLOT.chunk_size] + xor edx,edx + mul ecx + shr eax,10+4 ;div 1024 ; div 16 + shl edx,18 + add eax,edx + mov [ebp+RESULT_SLOT.read_speed],eax ; speed KB/s + DEBUGF 1,'FSPEED: read chunk size: %s iterations: %d speed: %d KB/s\n',\ + [ebp+RESULT_SLOT.text],ecx,eax + mcall 68,13,[fileread.return] + ret +;----------------------------------------------------------------------------- +write_chunk: + test [check1.flags],dword 10b + jz .exit + + mov eax,[file_info+32] ; file size + cmp [ebp+RESULT_SLOT.chunk_size],eax + jb @f +;-------------------------------------- +.exit: + xor eax,eax ; small file size for current chunk size + mov [ebp+RESULT_SLOT.write_speed],eax + ret +;-------------------------------------- +@@: + mcall 68,12,[ebp+RESULT_SLOT.chunk_size] + mov [filewrite.data],eax + xor eax,eax + mov [filewrite.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+RESULT_SLOT.chunk_size] + mov [filewrite.size],eax +;-------------------------------------- +.loop: + mcall 70,filewrite + + mcall 26,9 ; check current time + cmp esi,eax + jbe .end +; correct offset + mov edx,[ebp+RESULT_SLOT.chunk_size] + add [filewrite.offset],edx ; current offset +; check offset and file size + mov edx,[file_info+32] ; file size + sub edx,[ebp+RESULT_SLOT.chunk_size] + cmp [filewrite.offset],edx + jbe @f + + xor edx,edx + mov [filewrite.offset],edx ; zero current offset +;-------------------------------------- +@@: + inc ecx + jmp .loop +;-------------------------------------- +.end: + mov eax,[ebp+RESULT_SLOT.chunk_size] + xor edx,edx + mul ecx + shr eax,10+4 ;div 1024 ; div 16 + shl edx,18 + add eax,edx + mov [ebp+RESULT_SLOT.write_speed],eax ; speed KB/s + DEBUGF 1,'FSPEED: write chunk size: %s iterations: %d speed: %d KB/s\n',\ + [ebp+RESULT_SLOT.text],ecx,eax + mcall 68,13,[filewrite.data] + ret +;----------------------------------------------------------------------------- +include 'idata.inc' +;----------------------------------------------------------------------------- +IM_END: +;----------------------------------------------------------------------------- +include 'udata.inc' +;----------------------------------------------------------------------------- +I_END: +;----------------------------------------------------------------------------- diff --git a/programs/testing/mgb/mgb.asm b/programs/testing/mgb/mgb.asm index 32f09a915..7710e2dff 100644 --- a/programs/testing/mgb/mgb.asm +++ b/programs/testing/mgb/mgb.asm @@ -90,7 +90,7 @@ include '../../config.inc' ;for nightbuild include '../../macros.inc' include '../../proc32.inc' ;include '../../debug.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../develop/libraries/box_lib/box_lib.mac' include '../../develop/libraries/box_lib/load_lib.mac' include 'lang.inc' ; Language support for locales: it_IT, ru_RU (CP866), en_US @use_library