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](KolibriOS/kolibrios#75), point 3)

Reviewed-on: KolibriOS/kolibrios#433
Reviewed-by: Burer <burer@kolibrios.org>
Reviewed-by: Ivan B <1+dunkaist@noreply.localhost>
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
This commit is contained in:
ace-dent authored and Burer committed 2026-04-23 11:50:10 +00:00
1 parent f08fe1f2a0
commit 2cda4a9682
106 files changed
+19579 -18766

No files matched your search

+1 -1
View File
@@ -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'
+1 -1
View File
@@ -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"},
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -1
View File
@@ -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.
+2 -1
View File
@@ -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.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -12,7 +12,7 @@ include '../../KOSfuncs.inc'
include '../../macros.inc'
include '../../proc32.inc'
include '../../load_lib.mac'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../develop/libraries/box_lib/box_lib.mac'
include '../../dll.inc'
include '../../system/skincfg/kglobals.inc'
include '../../system/skincfg/unpacker.inc'
@@ -1,421 +1,423 @@
;*****************************************************************************
; 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 <organization> 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 <copyright holder> 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 <Lrz>
;---------------------------------------------------------------------
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 <organization> 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 <copyright holder> 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 <Lrz>
;---------------------------------------------------------------------
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:
@@ -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
;---------------------------------------------------------------------
@@ -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 <Lrz> 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:
; 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 <Lrz> 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:
@@ -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: ; метка конца данных программы; ------------------------------------ ;
@@ -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 ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш
@@ -1,401 +1,401 @@
<html>
<head>
<title>¤ыхьхэЄ Text Editor</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<link href="../style.css" type=text/css rel=stylesheet>
</head>
<body>
<p><a href="../box_lib.htm">═р уыртэє■ &uarr;</a></p>
<h1>╬уыртыхэшх</h1>
<p><a href="#vveden">┬тхфхэшх</a></p>
<p><a href="#funct">╘єэъЎшш</a></p>
<ul>
<li><a href="#fun_but_copy">ted_but_copy</a></li>
<li><a href="#fun_but_cut">ted_but_cut</a></li>
<li><a href="#fun_but_find">ted_but_find</a></li>
<li><a href="#fun_but_find_next">ted_but_find_next</a></li>
<li><a href="#fun_but_paste">ted_but_paste</a></li>
<li><a href="#fun_but_redo">ted_but_redo</a></li>
<li><a href="#fun_but_reverse">ted_but_reverse</a></li>
<li><a href="#fun_but_save_file">ted_but_save_file</a></li>
<li><a href="#fun_but_select_word">ted_but_select_word</a></li>
<li><a href="#fun_but_sumb_lover">ted_but_sumb_lover</a></li>
<li><a href="#fun_but_sumb_upper">ted_but_sumb_upper</a></li>
<li><a href="#fun_but_undo">ted_but_undo</a></li>
<li><a href="#fun_can_save">ted_can_save</a></li>
<li><a href="#fun_clear">ted_clear</a></li>
<li><a href="#fun_delete">ted_delete</a></li>
<li><a href="#fun_draw">ted_draw</a></li>
<li><a href="#fun_init">ted_init</a></li>
<li><a href="#fun_init_scroll_bars">ted_init_scroll_bars</a></li>
<li><a href="#fun_init_syntax_file">ted_init_syntax_file</a></li>
<li><a href="#fun_is_select">ted_is_select</a></li>
<li><a href="#fun_key">ted_key</a></li>
<li><a href="#fun_mouse">ted_mouse</a></li>
<li><a href="#fun_open_file">ted_open_file</a></li>
<li><a href="#fun_text_add">ted_text_add</a></li>
<li><a href="#fun_text_colored">ted_text_colored</a></li>
<li><a href="#fun_go_to_position">ted_go_to_position</a></li>
</ul>
<p><a href="#syn_file">╘юЁьрЄ Їрщыр яюфётхЄъш *.syn</a></p>
<p><a href="#struc_tedit">╤ЄЁєъЄєЁр tedit</a></p>
<h1><a name="vveden">┬тхфхэшх</a></h1>
<p>▌ыхьхэЄ text_editor яючтюы хЄ ЁрсюЄрЄ№ ё ЄхъёЄют√ьш Їрщырьш, ёюфхЁцшЄ ьэюую ЇєэъЎшщ фы  ЁхфръЄшЁютрэш  ЄхъёЄр.</p>
<p><img src="../../../../../../other/t_edit/t_edit.png"></p>
<p>┬эх°эшщ тшф яЁюуЁрьь√, ё ¤ыхьхэЄюь text_editor.</p>
<h2>┬ючьюцэюёЄш ¤ыхьхэЄр</h2>
<ul>
<li>╬ЄъЁ√Єшх (Ctrl+O), ╤юїЁрэхэшх Їрщыр (Ctrl+S, Ctrl+Shift+S).</li>
<li>╨хфръЄшЁютрэшх: ╧ютЄюЁ/╬Єьхэр фхщёЄтш  (Ctrl+Z), ┬√ЁхчрЄ№, ╩юяшЁютрЄ№ (Ctrl+C), ┬ёЄртшЄ№ (Ctrl+V), ╧юшёъ (Ctrl+F, F3), ╟рьхэр (Ctrl+H), ╧хЁхїюф эр ёЄЁюъє (Ctrl+G).</li>
<li>┬√фхыхэшх ЎтхЄюь ёыют, чрфрээ√ї т Їрщых ёшэЄръёшёр. ┬√тюф ёяЁртъш яю эшь, хёыш юэр хёЄ№ (эрцрЄшхь F1 ъюуфр ъєЁёюЁ эр ёыютх).</li>
</ul>
<h2>╬ ЁрсюЄх ¤ыхьхэЄр</h2>
<p>╨рчфхы фы  яЁюуЁрььшёЄют (ш шэЄхЁхёє■∙шїё  ы■фхщ), т ъюЄюЁюь Ёрёърчрэ√
эхъюЄюЁ√х шфхш, эр ъюЄюЁ√ї яюёЄЁюхэр фрээр  яЁюуЁрььр.</p>
<p>─ы  ЁрсюЄ√ ё ЄхъёЄюь яЁюуЁрььр шёяюы№чєхЄ ёЄЁєъЄєЁ√:</p>
<pre>struct symbol
c db ? ; +0 ёшьтюы
col db ? ; +1 ЎтхЄ
perv dd ? ; +2
next dd ? ; +6 єърчрЄхыш
tc dd ? ; +10 тЁхь. ёючфрэш 
td dd ? ; +14 тЁхь. єфрыхэш 
ends</pre>
<p>╩рцфр  шч Єръшї ёЄЁєъЄєЁ ёюїЁрэ хЄ юфшэ ёшьтюы т яхЁхьхээющ 'c'. ╧хЁхьхээ√х
'perv' ш 'next' їЁрэ Є шэфхъё√ яхЁтюую ш ёыхфє■∙хую ёшьтюыют. ┴ыруюфрЁ  ўхьє
ЄхъёЄ ёючфрхЄё  т тшфх Ўхяюўъш ёшьтюыют (фтєэряЁртыхээ√щ ёяшёюъ).</p>
<p><b>'tc'</b> - тЁхь  ёючфрэш  ёшьтюыр, яЁш юЄьхэх фхщёЄтш  ЄхъёЄют√щ ЁхфръЄюЁ "чэрхЄ"
ъръшх ёшьтюы√ юЄюсЁрцрЄ№, р ъръшх эхЄ (їюЄ  тёх ёшьтюы√ "тшё Є" т ярь Єш).</p>
<p><b>'td'</b> - тЁхь  єфрыхэш  ёшьтюыр, чряюыэ хЄё  яЁш єфрыхэшш, яЁш юЄьхэх фхщёЄтш 
єфрыхэш  ёшьтюыют, ЄхъёЄ ьюцхЄ с√Є№ тюёёЄрэютыхэ.</p>
<p><b>'col'</b> - шёяюы№чєхЄё  фы  ЎтхЄютющ ЁрчьхЄъш, ёюфхЁцшЄ шэфхъё ЎтхЄр т ьрёёштх ЎтхЄют ted_text_colors.</p>
<h1><a name="funct">╘єэъЎшш</a></h1>
<h2>╘єэъЎшш эр ¤ъёяюЁЄ:</h2>
<h4><a name="fun_but_copy">ted_but_copy</a></h4>
<p>╘єэъЎш  ъюЄюЁр  сєфхЄ т√ч√трЄ№ё  яЁш эрцрЄшш эр ъэюяъє ъюяшЁютрэш  т сєЇхЁ шыш эр <b>Ctrl+C</b>. ╥хъёЄ ъюяшЁєхЄё  т сєЇхЁ <b>ted_buffer</b>, ьръёшьры№э√щ ЁрчьхЁ сєЇхЁр єърч√трхЄё  т <b>ted_buffer_size</b>.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_copy], tedit0</pre>
<h4><a name="fun_but_cut">ted_but_cut</a></h4>
<p>╘єэъЎш  т√ЁхчрхЄ т√фхыхээ√щ ЄхъёЄ ш ъюяшЁєхЄ хую т сєЇхЁ.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_cut], tedit0</pre>
<h4><a name="fun_but_find">ted_but_find</a></h4>
<p>╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр <b>ted_buffer_find</b>, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ярЁрьхЄЁ√ яюшёър:</p>
<ul>
<li>0 - шёърЄ№ эшцх ъєЁёюЁр</li>
<li>1 - шёърЄ№ т√°х ъєЁёюЁр</li>
<li>2 - шёърЄ№ юЄ эрўрыр фюъєьхэЄр</li>
</ul>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_find], tedit0, 2</pre>
<h4><a name="fun_but_find_next">ted_but_find_next</a></h4>
<p>╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр <b>ted_buffer_find</b>, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧юшёъ тхфхЄё  эшцх Єхъє∙хую яюыюцхэш  ъєЁёюЁр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_find_next], tedit0</pre>
<h4><a name="fun_but_paste">ted_but_paste</a></h4><p></p>
<p>╘єэъЎш  тёЄрты хЄ ЄхъёЄ шч сєЇхЁр <b>ted_buffer</b>.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_paste], tedit0</pre>
<h4><a name="fun_but_redo">ted_but_redo</a></h4>
<p>╧ютЄюЁ хЄ юЄьхэхээ√х фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_redo], tedit0</pre>
<h4><a name="fun_but_reverse">ted_but_reverse</a></h4>
<p>╠хэ хЄ яюЁ фюъ ёыхфютрэш  ёшьтюыют т т√фхыхээюь ЄхъёЄх.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_reverse], tedit0</pre>
<h4><a name="fun_but_save_file">ted_but_save_file</a></h4>
<p>╘єэъЎш  фы  ёюїЁрэхэш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),</p>
<p>3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]</pre>
<h4><a name="fun_but_select_word">ted_but_select_word</a></h4>
<p>╘єэъЎш  фы  т√фхыхэш  ъы■ўхтюую ёыютр яюф ъєЁёюЁюь. ┼ёыш ъы■ўхт√х ёыютр эх шёяюы№чє■Єё , Єюуфр сєфхЄ т√фхыхэ тхё№ ЄхъёЄ.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_select_word], tedit0</pre>
<h4><a name="fun_but_sumb_lover">ted_but_sumb_lover</a></h4>
<p>╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ эшцэхьє ЁхушёЄЁє.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_sumb_lover], tedit0</pre>
<h4><a name="fun_but_sumb_upper">ted_but_sumb_upper</a></h4>
<p>╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ тхЁїэхьє ЁхушёЄЁє.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_sumb_upper], tedit0</pre>
<h4><a name="fun_but_undo">ted_but_undo</a></h4>
<p>╬Єьхэ хЄ фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр. ─хщёЄтш  ЇєэъЎшш <b>ted_but_reverse</b> эх юЄьхэ ■Єё .</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_undo], tedit0</pre>
<h4><a name="fun_can_save">ted_can_save</a></h4>
<p>╘єэъЎш  ъюЄюЁр  яЁютхЁ хЄ с√ыш ыш эх ёюїЁрэхээ√х шчьхэхэш  т ЄхъёЄх. ╨хчєы№ЄрЄ тючтЁр∙рхЄё  т ЁхушёЄЁ <b>al</b>, хёыш шчьхэхэш  с√ыш Єю тючтЁр∙рхЄ 1 шэрўх 0.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push eax
stdcall [ted_can_save], tedit0
cmp al,1
.........
pop eax</pre>
<h4><a name="fun_clear">ted_clear</a></h4>
<p>╬ўшёЄър ЄхъёЄр т юъэх ЁхфръЄюЁр. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ярЁрьхЄЁ юяЁхфхы хЄ сєфхЄ ыш юўшёЄър ярь Єш яюыэющ.</p>
<p>┼ёыш 2-щ ярЁрьхЄЁ Ёртхэ 1, Єю юўшёЄър сєфхЄ яюыэющ, яЁш 0 эхЄ. ╧юы№чютрЄхы■ эєцэю т√ч√трЄ№ ЇєэъЎш■ ё ярЁрьхЄЁюь 1, ярЁрьхЄЁ 0 фы  тэєЄЁхээхую шёяюы№чютрэш .</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_clear], tedit0,1</pre>
<h4><a name="fun_delete">ted_delete</a></h4>
<p>─хёЄЁєъЄюЁ ¤ыхьхэЄр, юётюсюцфрхЄ ярь Є№ чрэ Єє■ ¤ыхьхэЄюь.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_delete], tedit0</pre>
<h4><a name="fun_draw">ted_draw</a></h4>
<p>╧хЁхЁшёютър тёхую юъэр ЁхфръЄюЁр, тъы■ўр  фюўхЁэшх ёъЁюыышэуш.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_draw], tedit0</pre>
<h4><a name="fun_init">ted_init</a></h4>
<p>╩юэёЄЁєъЄюЁ ¤ыхьхэЄр, т√фхы хЄ ярь Є№ эхюсїюфшьє■ фы  ЁрсюЄ√ ЄхъёЄютюую ЁхфръЄюЁр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_init], tedit0</pre>
<h4><a name="fun_init_scroll_bars">ted_init_scroll_bars</a></h4>
<p>╙ёЄрэртыштрхЄ ЎтхЄ ёъЁюыышэуют ш эрёЄЁрштрхЄ шї ЁрчьхЁ√ т чртшёшьюёЄш юЄ ЁрчьхЁют юъэр. ╠юцэю т√ч√трЄ№ ¤Єє ЇєэъЎш■ яЁш шчьхэхэшш ЁрчьхЁют юъэр т яюы№чютрЄхы№ёъющ яЁюуЁрььх. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) юяЎшш, єърч√тр■Є ъръшх эєцэю шчьхэшЄ№ ярЁрьхЄЁ√:</p>
<ul>
<li>1 - шчьхэшЄ№ ЎтхЄр ёъЁюыышэуют</li>
<li>2 - шчьхэшыё  ЁрчьхЁ юъэр</li>
<li>4 - шчьхэшыё  ЁрчьхЁ фюъєьхэЄр</li>
</ul>
<p>╧рЁрьхЄЁ√ ьюцэю ъюьсшэшЁютрЄ№ ўхЁхч <i>ыюушўхёъюх шыш</i>.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_init_scroll_bars], tedit0,2</pre>
<h4><a name="fun_init_syntax_file">ted_init_syntax_file</a></h4>
<p>╘єэъЎш  фы  чруЁєчъш ЎтхЄют шэЄхЁЇхщёр ш ъы■ўхт√ї ёыют шч Їрщыр ёшэЄръёшёр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),</p>
<p>3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр ёшэЄръёшёр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name</pre>
<h4><a name="fun_is_select">ted_is_select</a></h4>
<p>╬яЁхфхы хЄ хёЄ№ т юъэх ЁхфръЄюЁр т√фхыхээ√щ ЄхъёЄ. ┼ёыш хёЄ№ т ЁхушёЄЁ <b>al</b> чряшё√трхЄё  1 шэрўх 0. ╘єэъЎш  эхюсїюфшьр фы  ёючфрэш  ярэхыхщ шэёЄЁхьхэЄют, т ъюЄюЁ√ї т чртшёшьюёЄш юЄ т√фхыхэш  сєфєЄ фюёЄєяэ√ шыш чрсыюъшЁютрэ√ юяЁхфхыхээ√х ъэюяъш (фхщёЄтш ). ═ряЁшьхЁ ъэюяъє фы  ъюяшЁютрэш  т сєЇхЁ ьюцэю чрсыюъшЁютрЄ№ хёыш эхЄ т√сЁрээюую ЄхъёЄр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push eax edi
mov edi,tedit0
call [ted_is_select]
cmp al,0
.........
pop edi eax</pre>
<h4><a name="fun_key">ted_key</a></h4>
<p>╘єэъЎш  т√ч√трхьр  фы  ЁхръЎшш эр ъыртшрЄєЁє. ┬ ЁхушёЄЁх <b>eax</b> фюыцхэ с√Є№ ъюф эрцрЄющ ъыртш°ш. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ЄрсышЎр фы  ъюэтхЁЄрЎшш scan ъюфют т ascii,</p>
<p>3) єяЁрты ■∙шх ёшьтюы√.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>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</pre>
<h4><a name="fun_mouse">ted_mouse</a></h4>
<p>╘єэъЎш  эр яхЁхьх∙хэшх шыш эрцрЄшх ь√°ш.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_mouse], tedit0</pre>
<h4><a name="fun_open_file">ted_open_file</a></h4>
<p>╘єэъЎш  фы  юЄъЁ√Єш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),</p>
<p>3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.</p>
<p>┬ючтЁр∙рхЄ 2 ярЁрьхЄЁр:</p>
<p>1) eax = ъюф ю°шсъш</p>
<p>2) ebx = ъюыышўхёЄтю яЁюўшЄрээ√ї срщЄ</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push eax ebx
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
.........
pop ebx eax</pre>
<h4><a name="fun_text_add">ted_text_add</a></h4>
<p>╘єэъЎш  фы  фюсртыхэш  ЄхъёЄр. ╧ЁшэшьрхЄ 4 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) єърчрЄхы№ эр сєЇхЁ ё ЄхъёЄюь,</p>
<p>3) фышэр ЄхъёЄр,</p>
<p>4) юяЎшш тёЄртъш.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>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</pre>
<p><b>ted_opt_ed_change_time</b> - ЇшъёшЁютрЄ№ шчьхэхэш  фюъєьхэЄр, ўЄю-с√ шї ьюцэю с√ыю юЄьхэшЄ№. ═ряЁшьхЁ хёыш эєцэю ёфхырЄ№ эхёъюы№ъю шчьхэхэшщ ЄхъёЄр, ъюЄюЁ√х сєфєЄ юЄьхэ Є№ё  чр юфшэ Ёрч, Єю 1-х шчьхэхэшх шфхЄ ё ¤Єющ ъюэёЄрэЄющ р юёЄры№э√х эхЄ.</p>
<p><b>ted_opt_ed_move_cursor</b> - ъюэёЄрэЄр ъюЄюЁр  юяЁхфхы хЄ ёфтшу ъєЁёюЁр яюёых фюсртыхэш  ЄхъёЄр.</p>
<h4><a name="fun_text_colored">ted_text_colored</a></h4>
<p>╘єэъЎш  фы  ЁрчьхЄъш ЄхъёЄр ЎтхЄюь. ╬с√ўэю т√ч√трхЄё  тэєЄЁш ёрьющ сшсышюЄхъш, яЁш шчьхэхэш ї ЄхъёЄр. ┬ эхъюЄюЁ√ї ёыєўр ї ьюцхЄ яюэрфюсшЄ№ё  т√чтрЄ№ яЁшэєфшЄхы№эю шч тэх°эхщ яЁюуЁрьь√.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push edi
mov edi,tedit0
call [ted_text_colored]
pop edi</pre>
<h4><a name="fun_go_to_position">ted_go_to_position</a></h4>
<p>╘єэъЎш  фы  яхЁхїюфр эр єърчрээє■ яючшЎш■. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) эюьхЁ ёЄЁюъш,</p>
<p>3) эюьхЁ ёшьтюыр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_go_to_position], tedit0,50,3</pre>
<h2>┬эєЄЁхээшх ЇєэъЎшш:</h2>
<p><b>ted_get_text_perv_pos</b> - яхЁхїюф эр яЁхф√фє∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'perv')</p>
<p><b>ted_get_text_next_pos</b> - яхЁхїюф эр ёыхфє■∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'next')</p>
<p><b>ted_symbol_not_vis</b> - юяЁхфхы хЄ тшфшь√щ ыш єърчрээ√щ ёшьтюы эр ¤ъЁрэх (т чртшёшьюёЄш
юЄ чэрўхэшщ 'tc' ш 'td')</p>
<p><b>ted_iterat_next</b> - яхЁхїюф эр ёыхфє■∙шщ тшфшь√щ ёшьтюы т Ўхяш. ╚ёяюы№чєхЄ фы 
ЁрсюЄ√ ЇєэъЎшш ted_get_text_next_pos ш ted_symbol_not_vis.</p>
<p><b>ted_iterat_perv</b> - яхЁхїюф эр яЁхфхфє∙шщ тшфшь√щ ёшьтюы т Ўхяш.</p>
<p><b>ted_iterat_next_pos_char</b> - эрщЄш ёыхфє■∙є■ яючшЎш■ єърчрээюую ёшьтюыр (edx-яюч. эрўрыр
яюшёър, bl->ъюф шёъюьюую ёшьтюыр)</p>
<p><b>ted_get_pos_by_coords</b> - схЁхЄ яючшЎш■ ёшьтюыр яю ъююЁфшэрЄрь (esi->ъююЁф. x, чэръ;
ecx->ъююЁф. y, ёЄЁюър)</p>
<p><b>ted_go_to_pos</b> - яхЁхёЄрты хЄ ъєЁёюЁ т єърчрээє■ яючшЎш■, хёыш єърчрээр  яючшЎш 
эрїюфшЄё  тэх ¤ъЁрэр, Єю Єръцх яхЁхёЄрты ■Єё  ёъЁюышэуш (ecx->ъююЁф. x, чэръ; edx->ъююЁф. y, ёЄЁюър)</p>
<h1><a name="syn_file">╘юЁьрЄ Їрщыр яюфётхЄъш *.syn</a></h1>
<table>
<tr><th>▌ыхьхэЄ</th><th>╨рчьхЁ (срщЄ)</th></tr>
<tr><td>╩юышўхёЄтю ЎтхЄют ЄхъёЄр</td>
<td><pre>4</pre></td></tr>
<tr><td>╩юышўхёЄтю яюфётхўштрхь√ї ёыют</td>
<td><pre>4</pre></td></tr>
<tr><td>╓тхЄр шэЄхЁЇхщёр</td>
<td><pre>4*6</pre></td></tr>
<tr><td>╓тхЄр фы  ЄхъёЄр</td>
<td><pre>4*(ъюы. Ўт. ЄхъёЄр)</pre></td></tr>
<tr><td>╤ЄЁєъЄєЁ√ ёю ётющёЄтрьш ш юяшёрэш ьш ёыют</td>
<td><pre>sizeof(TexColViv)*(ъюы. ёыют)</pre></td></tr>
<tr><td>╨рчфхышЄхы№э√щ ёшьтюы, ючэрўр■∙шщ эрўрыю юяшёрэшщ ёыют (тёхуфр Ёртхэ 0)</td>
<td><pre>1 срщЄ</pre></td></tr>
<tr><td>╬яшёрэш  ёыют (ёЄЁюъш ЄхъёЄр ё 0-ьш т ъюэЎх)</td>
<td><pre>(фышээр ёяЁртюўэюую ЄхъёЄр + 1)</pre></td></tr>
</table>
<h4>╟рьхўрэш .</h4>
<ul>
<li>┬ёх ёыютр фюыцэ√ с√Є№ Ёрёяюыюцхэ√ т яюЁ фъх ёыхфютрэш  шї ASCII ъюфют.
┬ючьюцэю т сєфє∙шї тхЁёш ї ЇюЁьрЄ Їрщыют яюфётхЄъш сєфхЄ шчьхэхэ.</li>
</ul>
<h1><a name="struc_tedit">╤ЄЁєъЄєЁр tedit</a></h1>
<p>╠ръЁюёр фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄхъёЄютюую ЁхфръЄюЁр эхЄ. ╧юЄюьє фрээ√х фы  эхую чрфр■Єё  тЁєўэє■. ╧ЁшьхЁ ёЄЁєъЄєЁ√ фы  ЄхъёЄютюую ЁхфръЄюЁр:</p>
<pre>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 фы  тЄюЁюую ёшёЄхьэюую °ЁшЇЄр)</pre>
<hr>
<p>─юъєьхэЄрЎш  юсэюты ырё№ яюёыхфэшщ Ёрч 29.01.19.</p>
</body>
</html>
<html>
<head>
<title>¤ыхьхэЄ Text Editor</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<link href="../style.css" type=text/css rel=stylesheet>
</head>
<body>
<p><a href="../box_lib.htm">═р уыртэє■ &uarr;</a></p>
<h1>╬уыртыхэшх</h1>
<p><a href="#vveden">┬тхфхэшх</a></p>
<p><a href="#funct">╘єэъЎшш</a></p>
<ul>
<li><a href="#fun_but_copy">ted_but_copy</a></li>
<li><a href="#fun_but_cut">ted_but_cut</a></li>
<li><a href="#fun_but_find">ted_but_find</a></li>
<li><a href="#fun_but_find_next">ted_but_find_next</a></li>
<li><a href="#fun_but_paste">ted_but_paste</a></li>
<li><a href="#fun_but_redo">ted_but_redo</a></li>
<li><a href="#fun_but_reverse">ted_but_reverse</a></li>
<li><a href="#fun_but_save_file">ted_but_save_file</a></li>
<li><a href="#fun_but_select_word">ted_but_select_word</a></li>
<li><a href="#fun_but_sumb_lover">ted_but_sumb_lover</a></li>
<li><a href="#fun_but_sumb_upper">ted_but_sumb_upper</a></li>
<li><a href="#fun_but_undo">ted_but_undo</a></li>
<li><a href="#fun_can_save">ted_can_save</a></li>
<li><a href="#fun_clear">ted_clear</a></li>
<li><a href="#fun_delete">ted_delete</a></li>
<li><a href="#fun_draw">ted_draw</a></li>
<li><a href="#fun_init">ted_init</a></li>
<li><a href="#fun_init_scroll_bars">ted_init_scroll_bars</a></li>
<li><a href="#fun_init_syntax_file">ted_init_syntax_file</a></li>
<li><a href="#fun_is_select">ted_is_select</a></li>
<li><a href="#fun_key">ted_key</a></li>
<li><a href="#fun_mouse">ted_mouse</a></li>
<li><a href="#fun_open_file">ted_open_file</a></li>
<li><a href="#fun_text_add">ted_text_add</a></li>
<li><a href="#fun_text_colored">ted_text_colored</a></li>
<li><a href="#fun_go_to_position">ted_go_to_position</a></li>
</ul>
<p><a href="#syn_file">╘юЁьрЄ Їрщыр яюфётхЄъш *.syn</a></p>
<p><a href="#struc_tedit">╤ЄЁєъЄєЁр tedit</a></p>
<h1><a name="vveden">┬тхфхэшх</a></h1>
<p>▌ыхьхэЄ text_editor яючтюы хЄ ЁрсюЄрЄ№ ё ЄхъёЄют√ьш Їрщырьш, ёюфхЁцшЄ ьэюую ЇєэъЎшщ фы  ЁхфръЄшЁютрэш  ЄхъёЄр.</p>
<p><img src="../../../../../other/t_edit/t_edit.png"></p>
<p>┬эх°эшщ тшф яЁюуЁрьь√, ё ¤ыхьхэЄюь text_editor.</p>
<h2>┬ючьюцэюёЄш ¤ыхьхэЄр</h2>
<ul>
<li>╬ЄъЁ√Єшх (Ctrl+O), ╤юїЁрэхэшх Їрщыр (Ctrl+S, Ctrl+Shift+S).</li>
<li>╨хфръЄшЁютрэшх: ╧ютЄюЁ/╬Єьхэр фхщёЄтш  (Ctrl+Z), ┬√ЁхчрЄ№, ╩юяшЁютрЄ№ (Ctrl+C), ┬ёЄртшЄ№ (Ctrl+V), ╧юшёъ (Ctrl+F, F3), ╟рьхэр (Ctrl+H), ╧хЁхїюф эр ёЄЁюъє (Ctrl+G).</li>
<li>┬√фхыхэшх ЎтхЄюь ёыют, чрфрээ√ї т Їрщых ёшэЄръёшёр. ┬√тюф ёяЁртъш яю эшь, хёыш юэр хёЄ№ (эрцрЄшхь F1 ъюуфр ъєЁёюЁ эр ёыютх).</li>
</ul>
<h2>╬ ЁрсюЄх ¤ыхьхэЄр</h2>
<p>╨рчфхы фы  яЁюуЁрььшёЄют (ш шэЄхЁхёє■∙шїё  ы■фхщ), т ъюЄюЁюь Ёрёърчрэ√
эхъюЄюЁ√х шфхш, эр ъюЄюЁ√ї яюёЄЁюхэр фрээр  яЁюуЁрььр.</p>
<p>─ы  ЁрсюЄ√ ё ЄхъёЄюь яЁюуЁрььр шёяюы№чєхЄ ёЄЁєъЄєЁ√:</p>
<pre>struct symbol
c db ? ; +0 ёшьтюы
col db ? ; +1 ЎтхЄ
perv dd ? ; +2
next dd ? ; +6 єърчрЄхыш
tc dd ? ; +10 тЁхь. ёючфрэш 
td dd ? ; +14 тЁхь. єфрыхэш 
ends</pre>
<p>╩рцфр  шч Єръшї ёЄЁєъЄєЁ ёюїЁрэ хЄ юфшэ ёшьтюы т яхЁхьхээющ 'c'. ╧хЁхьхээ√х
'perv' ш 'next' їЁрэ Є шэфхъё√ яхЁтюую ш ёыхфє■∙хую ёшьтюыют. ┴ыруюфрЁ  ўхьє
ЄхъёЄ ёючфрхЄё  т тшфх Ўхяюўъш ёшьтюыют (фтєэряЁртыхээ√щ ёяшёюъ).</p>
<p><b>'tc'</b> - тЁхь  ёючфрэш  ёшьтюыр, яЁш юЄьхэх фхщёЄтш  ЄхъёЄют√щ ЁхфръЄюЁ "чэрхЄ"
ъръшх ёшьтюы√ юЄюсЁрцрЄ№, р ъръшх эхЄ (їюЄ  тёх ёшьтюы√ "тшё Є" т ярь Єш).</p>
<p><b>'td'</b> - тЁхь  єфрыхэш  ёшьтюыр, чряюыэ хЄё  яЁш єфрыхэшш, яЁш юЄьхэх фхщёЄтш 
єфрыхэш  ёшьтюыют, ЄхъёЄ ьюцхЄ с√Є№ тюёёЄрэютыхэ.</p>
<p><b>'col'</b> - шёяюы№чєхЄё  фы  ЎтхЄютющ ЁрчьхЄъш, ёюфхЁцшЄ шэфхъё ЎтхЄр т ьрёёштх ЎтхЄют ted_text_colors.</p>
<h1><a name="funct">╘єэъЎшш</a></h1>
<h2>╘єэъЎшш эр ¤ъёяюЁЄ:</h2>
<h4><a name="fun_but_copy">ted_but_copy</a></h4>
<p>╘єэъЎш  ъюЄюЁр  сєфхЄ т√ч√трЄ№ё  яЁш эрцрЄшш эр ъэюяъє ъюяшЁютрэш  т сєЇхЁ шыш эр <b>Ctrl+C</b>. ╥хъёЄ ъюяшЁєхЄё  т сєЇхЁ <b>ted_buffer</b>, ьръёшьры№э√щ ЁрчьхЁ сєЇхЁр єърч√трхЄё  т <b>ted_buffer_size</b>.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_copy], tedit0</pre>
<h4><a name="fun_but_cut">ted_but_cut</a></h4>
<p>╘єэъЎш  т√ЁхчрхЄ т√фхыхээ√щ ЄхъёЄ ш ъюяшЁєхЄ хую т сєЇхЁ.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_cut], tedit0</pre>
<h4><a name="fun_but_find">ted_but_find</a></h4>
<p>╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр <b>ted_buffer_find</b>, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ярЁрьхЄЁ√ яюшёър:</p>
<ul>
<li>0 - шёърЄ№ эшцх ъєЁёюЁр</li>
<li>1 - шёърЄ№ т√°х ъєЁёюЁр</li>
<li>2 - шёърЄ№ юЄ эрўрыр фюъєьхэЄр</li>
</ul>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_find], tedit0, 2</pre>
<h4><a name="fun_but_find_next">ted_but_find_next</a></h4>
<p>╘єэъЎш  фы  яюшёър ЄхъёЄр. ╚∙хЄ ЄхъёЄ шч сєЇхЁр <b>ted_buffer_find</b>, яЁш эрїюцфхэшш яхЁхьх∙рхЄ ъєЁёюЁ ъ эрщфхэюьє ЄхъёЄє ш т√фхы хЄ хую. ╧юшёъ тхфхЄё  эшцх Єхъє∙хую яюыюцхэш  ъєЁёюЁр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_find_next], tedit0</pre>
<h4><a name="fun_but_paste">ted_but_paste</a></h4><p></p>
<p>╘єэъЎш  тёЄрты хЄ ЄхъёЄ шч сєЇхЁр <b>ted_buffer</b>.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_paste], tedit0</pre>
<h4><a name="fun_but_redo">ted_but_redo</a></h4>
<p>╧ютЄюЁ хЄ юЄьхэхээ√х фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_redo], tedit0</pre>
<h4><a name="fun_but_reverse">ted_but_reverse</a></h4>
<p>╠хэ хЄ яюЁ фюъ ёыхфютрэш  ёшьтюыют т т√фхыхээюь ЄхъёЄх.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_reverse], tedit0</pre>
<h4><a name="fun_but_save_file">ted_but_save_file</a></h4>
<p>╘єэъЎш  фы  ёюїЁрэхэш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),</p>
<p>3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]</pre>
<h4><a name="fun_but_select_word">ted_but_select_word</a></h4>
<p>╘єэъЎш  фы  т√фхыхэш  ъы■ўхтюую ёыютр яюф ъєЁёюЁюь. ┼ёыш ъы■ўхт√х ёыютр эх шёяюы№чє■Єё , Єюуфр сєфхЄ т√фхыхэ тхё№ ЄхъёЄ.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_select_word], tedit0</pre>
<h4><a name="fun_but_sumb_lover">ted_but_sumb_lover</a></h4>
<p>╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ эшцэхьє ЁхушёЄЁє.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_sumb_lover], tedit0</pre>
<h4><a name="fun_but_sumb_upper">ted_but_sumb_upper</a></h4>
<p>╧хЁхтюфшЄ т√фхыхээ√х ёшьтюы√ ъ тхЁїэхьє ЁхушёЄЁє.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_sumb_upper], tedit0</pre>
<h4><a name="fun_but_undo">ted_but_undo</a></h4>
<p>╬Єьхэ хЄ фхщёЄтш  яю ЁхфръЄшЁютрэш■ ЄхъёЄр. ─хщёЄтш  ЇєэъЎшш <b>ted_but_reverse</b> эх юЄьхэ ■Єё .</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_but_undo], tedit0</pre>
<h4><a name="fun_can_save">ted_can_save</a></h4>
<p>╘єэъЎш  ъюЄюЁр  яЁютхЁ хЄ с√ыш ыш эх ёюїЁрэхээ√х шчьхэхэш  т ЄхъёЄх. ╨хчєы№ЄрЄ тючтЁр∙рхЄё  т ЁхушёЄЁ <b>al</b>, хёыш шчьхэхэш  с√ыш Єю тючтЁр∙рхЄ 1 шэрўх 0.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push eax
stdcall [ted_can_save], tedit0
cmp al,1
.........
pop eax</pre>
<h4><a name="fun_clear">ted_clear</a></h4>
<p>╬ўшёЄър ЄхъёЄр т юъэх ЁхфръЄюЁр. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ярЁрьхЄЁ юяЁхфхы хЄ сєфхЄ ыш юўшёЄър ярь Єш яюыэющ.</p>
<p>┼ёыш 2-щ ярЁрьхЄЁ Ёртхэ 1, Єю юўшёЄър сєфхЄ яюыэющ, яЁш 0 эхЄ. ╧юы№чютрЄхы■ эєцэю т√ч√трЄ№ ЇєэъЎш■ ё ярЁрьхЄЁюь 1, ярЁрьхЄЁ 0 фы  тэєЄЁхээхую шёяюы№чютрэш .</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_clear], tedit0,1</pre>
<h4><a name="fun_delete">ted_delete</a></h4>
<p>─хёЄЁєъЄюЁ ¤ыхьхэЄр, юётюсюцфрхЄ ярь Є№ чрэ Єє■ ¤ыхьхэЄюь.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_delete], tedit0</pre>
<h4><a name="fun_draw">ted_draw</a></h4>
<p>╧хЁхЁшёютър тёхую юъэр ЁхфръЄюЁр, тъы■ўр  фюўхЁэшх ёъЁюыышэуш.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_draw], tedit0</pre>
<h4><a name="fun_init">ted_init</a></h4>
<p>╩юэёЄЁєъЄюЁ ¤ыхьхэЄр, т√фхы хЄ ярь Є№ эхюсїюфшьє■ фы  ЁрсюЄ√ ЄхъёЄютюую ЁхфръЄюЁр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_init], tedit0</pre>
<h4><a name="fun_init_scroll_bars">ted_init_scroll_bars</a></h4>
<p>╙ёЄрэртыштрхЄ ЎтхЄ ёъЁюыышэуют ш эрёЄЁрштрхЄ шї ЁрчьхЁ√ т чртшёшьюёЄш юЄ ЁрчьхЁют юъэр. ╠юцэю т√ч√трЄ№ ¤Єє ЇєэъЎш■ яЁш шчьхэхэшш ЁрчьхЁют юъэр т яюы№чютрЄхы№ёъющ яЁюуЁрььх. ╧ЁшэшьрхЄ 2 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) юяЎшш, єърч√тр■Є ъръшх эєцэю шчьхэшЄ№ ярЁрьхЄЁ√:</p>
<ul>
<li>1 - шчьхэшЄ№ ЎтхЄр ёъЁюыышэуют</li>
<li>2 - шчьхэшыё  ЁрчьхЁ юъэр</li>
<li>4 - шчьхэшыё  ЁрчьхЁ фюъєьхэЄр</li>
</ul>
<p>╧рЁрьхЄЁ√ ьюцэю ъюьсшэшЁютрЄ№ ўхЁхч <i>ыюушўхёъюх шыш</i>.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_init_scroll_bars], tedit0,2</pre>
<h4><a name="fun_init_syntax_file">ted_init_syntax_file</a></h4>
<p>╘єэъЎш  фы  чруЁєчъш ЎтхЄют шэЄхЁЇхщёр ш ъы■ўхт√ї ёыют шч Їрщыр ёшэЄръёшёр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),</p>
<p>3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр ёшэЄръёшёр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name</pre>
<h4><a name="fun_is_select">ted_is_select</a></h4>
<p>╬яЁхфхы хЄ хёЄ№ т юъэх ЁхфръЄюЁр т√фхыхээ√щ ЄхъёЄ. ┼ёыш хёЄ№ т ЁхушёЄЁ <b>al</b> чряшё√трхЄё  1 шэрўх 0. ╘єэъЎш  эхюсїюфшьр фы  ёючфрэш  ярэхыхщ шэёЄЁхьхэЄют, т ъюЄюЁ√ї т чртшёшьюёЄш юЄ т√фхыхэш  сєфєЄ фюёЄєяэ√ шыш чрсыюъшЁютрэ√ юяЁхфхыхээ√х ъэюяъш (фхщёЄтш ). ═ряЁшьхЁ ъэюяъє фы  ъюяшЁютрэш  т сєЇхЁ ьюцэю чрсыюъшЁютрЄ№ хёыш эхЄ т√сЁрээюую ЄхъёЄр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push eax edi
mov edi,tedit0
call [ted_is_select]
cmp al,0
.........
pop edi eax</pre>
<h4><a name="fun_key">ted_key</a></h4>
<p>╘єэъЎш  т√ч√трхьр  фы  ЁхръЎшш эр ъыртшрЄєЁє. ┬ ЁхушёЄЁх <b>eax</b> фюыцхэ с√Є№ ъюф эрцрЄющ ъыртш°ш. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ЄрсышЎр фы  ъюэтхЁЄрЎшш scan ъюфют т ascii,</p>
<p>3) єяЁрты ■∙шх ёшьтюы√.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>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</pre>
<h4><a name="fun_mouse">ted_mouse</a></h4>
<p>╘єэъЎш  эр яхЁхьх∙хэшх шыш эрцрЄшх ь√°ш.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_mouse], tedit0</pre>
<h4><a name="fun_open_file">ted_open_file</a></h4>
<p>╘єэъЎш  фы  юЄъЁ√Єш  Їрщыр. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) ёЄЁєъЄєЁр фы  ЁрсюЄ√ 70-щ ЇєэъЎшш (фю т√чютр ЇєэъЎшш чряюыэхэш  эх ЄЁхсєхЄ),</p>
<p>3) ёЄЁюър ё яєЄхь ш шьхэхь Їрщыр.</p>
<p>┬ючтЁр∙рхЄ 2 ярЁрьхЄЁр:</p>
<p>1) eax = ъюф ю°шсъш</p>
<p>2) ebx = ъюыышўхёЄтю яЁюўшЄрээ√ї срщЄ</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push eax ebx
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
.........
pop ebx eax</pre>
<h4><a name="fun_text_add">ted_text_add</a></h4>
<p>╘єэъЎш  фы  фюсртыхэш  ЄхъёЄр. ╧ЁшэшьрхЄ 4 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) єърчрЄхы№ эр сєЇхЁ ё ЄхъёЄюь,</p>
<p>3) фышэр ЄхъёЄр,</p>
<p>4) юяЎшш тёЄртъш.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>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</pre>
<p><b>ted_opt_ed_change_time</b> - ЇшъёшЁютрЄ№ шчьхэхэш  фюъєьхэЄр, ўЄю-с√ шї ьюцэю с√ыю юЄьхэшЄ№. ═ряЁшьхЁ хёыш эєцэю ёфхырЄ№ эхёъюы№ъю шчьхэхэшщ ЄхъёЄр, ъюЄюЁ√х сєфєЄ юЄьхэ Є№ё  чр юфшэ Ёрч, Єю 1-х шчьхэхэшх шфхЄ ё ¤Єющ ъюэёЄрэЄющ р юёЄры№э√х эхЄ.</p>
<p><b>ted_opt_ed_move_cursor</b> - ъюэёЄрэЄр ъюЄюЁр  юяЁхфхы хЄ ёфтшу ъєЁёюЁр яюёых фюсртыхэш  ЄхъёЄр.</p>
<h4><a name="fun_text_colored">ted_text_colored</a></h4>
<p>╘єэъЎш  фы  ЁрчьхЄъш ЄхъёЄр ЎтхЄюь. ╬с√ўэю т√ч√трхЄё  тэєЄЁш ёрьющ сшсышюЄхъш, яЁш шчьхэхэш ї ЄхъёЄр. ┬ эхъюЄюЁ√ї ёыєўр ї ьюцхЄ яюэрфюсшЄ№ё  т√чтрЄ№ яЁшэєфшЄхы№эю шч тэх°эхщ яЁюуЁрьь√.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>push edi
mov edi,tedit0
call [ted_text_colored]
pop edi</pre>
<h4><a name="fun_go_to_position">ted_go_to_position</a></h4>
<p>╘єэъЎш  фы  яхЁхїюфр эр єърчрээє■ яючшЎш■. ╧ЁшэшьрхЄ 3 ярЁрьхЄЁр:</p>
<p>1) ёЄЁєъЄєЁр tedit,</p>
<p>2) эюьхЁ ёЄЁюъш,</p>
<p>3) эюьхЁ ёшьтюыр.</p>
<p>╧ЁшьхЁ шёяюы№чютрэш :</p>
<pre>stdcall [ted_go_to_position], tedit0,50,3</pre>
<h2>┬эєЄЁхээшх ЇєэъЎшш:</h2>
<p><b>ted_get_text_perv_pos</b> - яхЁхїюф эр яЁхф√фє∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'perv')</p>
<p><b>ted_get_text_next_pos</b> - яхЁхїюф эр ёыхфє■∙шщ ёшьтюы т Ўхяш (ўхЁхч єърчрЄхы№ 'next')</p>
<p><b>ted_symbol_not_vis</b> - юяЁхфхы хЄ тшфшь√щ ыш єърчрээ√щ ёшьтюы эр ¤ъЁрэх (т чртшёшьюёЄш
юЄ чэрўхэшщ 'tc' ш 'td')</p>
<p><b>ted_iterat_next</b> - яхЁхїюф эр ёыхфє■∙шщ тшфшь√щ ёшьтюы т Ўхяш. ╚ёяюы№чєхЄ фы 
ЁрсюЄ√ ЇєэъЎшш ted_get_text_next_pos ш ted_symbol_not_vis.</p>
<p><b>ted_iterat_perv</b> - яхЁхїюф эр яЁхфхфє∙шщ тшфшь√щ ёшьтюы т Ўхяш.</p>
<p><b>ted_iterat_next_pos_char</b> - эрщЄш ёыхфє■∙є■ яючшЎш■ єърчрээюую ёшьтюыр (edx-яюч. эрўрыр
яюшёър, bl->ъюф шёъюьюую ёшьтюыр)</p>
<p><b>ted_get_pos_by_coords</b> - схЁхЄ яючшЎш■ ёшьтюыр яю ъююЁфшэрЄрь (esi->ъююЁф. x, чэръ;
ecx->ъююЁф. y, ёЄЁюър)</p>
<p><b>ted_go_to_pos</b> - яхЁхёЄрты хЄ ъєЁёюЁ т єърчрээє■ яючшЎш■, хёыш єърчрээр  яючшЎш 
эрїюфшЄё  тэх ¤ъЁрэр, Єю Єръцх яхЁхёЄрты ■Єё  ёъЁюышэуш (ecx->ъююЁф. x, чэръ; edx->ъююЁф. y, ёЄЁюър)</p>
<h1><a name="syn_file">╘юЁьрЄ Їрщыр яюфётхЄъш *.syn</a></h1>
<table>
<tr><th>▌ыхьхэЄ</th><th>╨рчьхЁ (срщЄ)</th></tr>
<tr><td>╩юышўхёЄтю ЎтхЄют ЄхъёЄр</td>
<td><pre>4</pre></td></tr>
<tr><td>╩юышўхёЄтю яюфётхўштрхь√ї ёыют</td>
<td><pre>4</pre></td></tr>
<tr><td>╓тхЄр шэЄхЁЇхщёр</td>
<td><pre>4*6</pre></td></tr>
<tr><td>╓тхЄр фы  ЄхъёЄр</td>
<td><pre>4*(ъюы. Ўт. ЄхъёЄр)</pre></td></tr>
<tr><td>╤ЄЁєъЄєЁ√ ёю ётющёЄтрьш ш юяшёрэш ьш ёыют</td>
<td><pre>sizeof(TexColViv)*(ъюы. ёыют)</pre></td></tr>
<tr><td>╨рчфхышЄхы№э√щ ёшьтюы, ючэрўр■∙шщ эрўрыю юяшёрэшщ ёыют (тёхуфр Ёртхэ 0)</td>
<td><pre>1 срщЄ</pre></td></tr>
<tr><td>╬яшёрэш  ёыют (ёЄЁюъш ЄхъёЄр ё 0-ьш т ъюэЎх)</td>
<td><pre>(фышээр ёяЁртюўэюую ЄхъёЄр + 1)</pre></td></tr>
</table>
<h4>╟рьхўрэш .</h4>
<ul>
<li>┬ёх ёыютр фюыцэ√ с√Є№ Ёрёяюыюцхэ√ т яюЁ фъх ёыхфютрэш  шї ASCII ъюфют.
┬ючьюцэю т сєфє∙шї тхЁёш ї ЇюЁьрЄ Їрщыют яюфётхЄъш сєфхЄ шчьхэхэ.</li>
</ul>
<h1><a name="struc_tedit">╤ЄЁєъЄєЁр tedit</a></h1>
<p>╠ръЁюёр фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄхъёЄютюую ЁхфръЄюЁр эхЄ. ╧юЄюьє фрээ√х фы  эхую чрфр■Єё  тЁєўэє■. ╧ЁшьхЁ ёЄЁєъЄєЁ√ фы  ЄхъёЄютюую ЁхфръЄюЁр:</p>
<pre>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 фы  тЄюЁюую ёшёЄхьэюую °ЁшЇЄр)</pre>
<hr>
<p>─юъєьхэЄрЎш  юсэюты ырё№ яюёыхфэшщ Ёрч 29.01.19.</p>
</body>
</html>
@@ -1,87 +1,87 @@
<html>
<head>
<title>¤ыхьхэЄ Tooltip</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<link href="../style.css" type=text/css rel=stylesheet>
</head>
<body>
<p><a href="../box_lib.htm">═р уыртэє■ &uarr;</a></p>
<h1>╬уыртыхэшх</h1>
<p><a href="#intro">┬тхфхэшх</a></p>
<p><a href="#funct">╘єэъЎшш</a></p>
<p><a href="#struc">╤ЄЁєъЄєЁр фрээ√ї</a></p>
<p><a href="#source">╚ёїюфэ√щ ъюф ш яЁшьхЁ√</a></p>
<h1><a name="intro">┬тхфхэшх</a></h1>
<p>╥єыЄшя - тёяы√тр■∙р  яюфёърчър, яюърч√трхЄё  яЁш чрфхЁцъх єърчрЄхы  ь√°ш эрф ъюэъЁхЄэющ юсырёЄ№■, юс√ўэю ¤ыхьхэЄюь єяЁртыхэш .</p>
<p>╬сырёЄ№ ъюэЄЁюы  - яЁ ьюєуюы№эшъ ё чрфрээ√ьш ъююЁфшэрЄрьш</p>
<p>╥хъёЄ ЄєыЄшяр ьюцхЄ с√Є№ ьэюуюёЄЁюўэ√ь, ё ЁрчфхышЄхыхь ъюф 13 (\r), яЁюшчтюы№э√ь ЁрчьхЁюь °ЁшЇЄр.</p>
<p>┬ яхЁтющ тхЁёшш ЄєыЄшя т√тюфшЄё  эшцх ъєЁёюЁр ь√°ш ш тяЁртю. ╙ўшЄ√трщЄх яЁш яырэшЁютрэшш шэЄхЁЇхщёр.</p>
<p>╚ёяюы№чєхЄё  фшэрьшўхёър  ярь Є№, ёююЄтхЄёЄтхээю сшсышюЄхър фюыцэ√ с√Є№ чруЁєцхэр ё ЇєэъЎш ьш</p>
<pre>@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load</pre>
<p>ш ъєўр фюыцэр с√Є№ шэшЎшрышчшЁютрэр т√чютюь SysFn 68.11</p>
<h1><a name="funct">╘єэъЎшш</a></h1>
<p>┬ёх ЇєэъЎшш шёяюы№чє■Є x86-32 calling convention, stdcall.</p>
<p>▌Єю ючэрўрхЄ, ўЄю ЁхушёЄЁ√ EAX, ECX, EDX ьюуєЄ эх ёюїЁрэ Є№ ётюш чэрўхэш  яюёых т√чютр ЇєэъЎшщ.</p>
<p>╧ЁшьхЁ√ т√чютют ёьюЄЁшЄх т яЁюуЁрььх - яЁшьхЁх.</p>
<h2><a name="tooltip_init">tooltip_init(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ EAX==1 яЁш єёях°эюь т√фхыхэшшш ярь Єш, 0 яЁш ёсюх.</p>
<p>┬√ч√трхЄё  юфшэ Ёрч, шэшЎшрышчшЁєхЄ тёх ЄєыЄшя√, т√фхы   ярь Є№ ш ЁрёёўшЄ√тр  тэєЄЁхээшх яхЁхьхээ√х.</p>
<h2><a name="tooltip_delete">tooltip_delete(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ - эхЄ.</p>
<p>╬ётюсюцфрхЄ т√фхыхээє■ ярь Є№.</p>
<h2><a name="tooltip_test_show">tooltip_test_show(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ - эхЄ.</p>
<p>╧юърч эєцэюую шч тёхщ Ўхяюўъш ЄєыЄшяют яЁш схчфхщёЄтшш.
─юыцэр т√ч√трЄ№ё  яЁш схчфхщёЄтшш шыш яхЁшюфшўхёъш фы  яЁютхЁъш ЄрщьхЁр.
═ряЁшьхЁ яЁш юяЁюёх ёюс√Єшщ ЇєэъЎшхщ SysFn 23 (event 0).</p>
<h2><a name="tooltip_mouse">tooltip_mouse(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ - эхЄ.</p>
<p>▌Єр ЇєэъЎш  фюыцэр т√ч√трЄ№ё  яЁш ёюс√Єшш ь√°ш. ╤ЄшЁрхЄ ЄєыЄшя яЁш т√їюфх ь√°ш шч чюэ√ ъюэЄЁюы </p>
<h2><a name="get_font_size">get_font_size(color)</a></h2>
<p>╧рЁрьхЄЁ - ЎтхЄ ЄхъёЄр ё ЁрчьхЁюь °ЁшЇЄр, т ЇюЁьрЄх ЇєэъЎшш SysFn 4.</p>
<p>┬ючтЁрЄ - EAX = width shl 16 + height.</p>
<p>─хъюфшЁєхЄ шч ъюьсшэшЁютрээюую ЎтхЄр/ЁрчьхЁр °шЁшэє ш т√ёюЄє °ЁшЇЄр т яшъёхы ї</p>
<h1><a name="struc">╤ЄЁєъЄєЁр ЄєыЄшяр</a></h1>
<p>╠ръЁюё фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄєыЄшяр эшцх, тъы■ўхэ т box_lib.mac. ═х чрс√трхь юс·хфшэшЄ№ ЄєыЄшя√ т ёяшёюъ.</p>
<pre>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 ?
}
</pre>
<hr>
<h1><a name="source">╚ёїюфэ√щ ъюф ш яЁшьхЁ√</a></h1>
<p>╚ёїюфэ√щ ъюф эрїюфшЄё  т сшсышюЄхъх box_lib, Їрщы tooltip.asm</p>
<p>╧ЁшьхЁ шёяюы№чютрэш  эрїюфшЄё  т box_lib\asm\trunk\tooltip_demo.asm</p>
<h1>EOF</h1>
</body>
</html>
<html>
<head>
<title>¤ыхьхэЄ Tooltip</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<link href="../style.css" type=text/css rel=stylesheet>
</head>
<body>
<p><a href="../box_lib.htm">═р уыртэє■ &uarr;</a></p>
<h1>╬уыртыхэшх</h1>
<p><a href="#intro">┬тхфхэшх</a></p>
<p><a href="#funct">╘єэъЎшш</a></p>
<p><a href="#struc">╤ЄЁєъЄєЁр фрээ√ї</a></p>
<p><a href="#source">╚ёїюфэ√щ ъюф ш яЁшьхЁ√</a></p>
<h1><a name="intro">┬тхфхэшх</a></h1>
<p>╥єыЄшя - тёяы√тр■∙р  яюфёърчър, яюърч√трхЄё  яЁш чрфхЁцъх єърчрЄхы  ь√°ш эрф ъюэъЁхЄэющ юсырёЄ№■, юс√ўэю ¤ыхьхэЄюь єяЁртыхэш .</p>
<p>╬сырёЄ№ ъюэЄЁюы  - яЁ ьюєуюы№эшъ ё чрфрээ√ьш ъююЁфшэрЄрьш</p>
<p>╥хъёЄ ЄєыЄшяр ьюцхЄ с√Є№ ьэюуюёЄЁюўэ√ь, ё ЁрчфхышЄхыхь ъюф 13 (\r), яЁюшчтюы№э√ь ЁрчьхЁюь °ЁшЇЄр.</p>
<p>┬ яхЁтющ тхЁёшш ЄєыЄшя т√тюфшЄё  эшцх ъєЁёюЁр ь√°ш ш тяЁртю. ╙ўшЄ√трщЄх яЁш яырэшЁютрэшш шэЄхЁЇхщёр.</p>
<p>╚ёяюы№чєхЄё  фшэрьшўхёър  ярь Є№, ёююЄтхЄёЄтхээю сшсышюЄхър фюыцэ√ с√Є№ чруЁєцхэр ё ЇєэъЎш ьш</p>
<pre>@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load</pre>
<p>ш ъєўр фюыцэр с√Є№ шэшЎшрышчшЁютрэр т√чютюь SysFn 68.11</p>
<h1><a name="funct">╘єэъЎшш</a></h1>
<p>┬ёх ЇєэъЎшш шёяюы№чє■Є x86-32 calling convention, stdcall.</p>
<p>▌Єю ючэрўрхЄ, ўЄю ЁхушёЄЁ√ EAX, ECX, EDX ьюуєЄ эх ёюїЁрэ Є№ ётюш чэрўхэш  яюёых т√чютр ЇєэъЎшщ.</p>
<p>╧ЁшьхЁ√ т√чютют ёьюЄЁшЄх т яЁюуЁрььх - яЁшьхЁх.</p>
<h2><a name="tooltip_init">tooltip_init(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ EAX==1 яЁш єёях°эюь т√фхыхэшшш ярь Єш, 0 яЁш ёсюх.</p>
<p>┬√ч√трхЄё  юфшэ Ёрч, шэшЎшрышчшЁєхЄ тёх ЄєыЄшя√, т√фхы   ярь Є№ ш ЁрёёўшЄ√тр  тэєЄЁхээшх яхЁхьхээ√х.</p>
<h2><a name="tooltip_delete">tooltip_delete(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ - эхЄ.</p>
<p>╬ётюсюцфрхЄ т√фхыхээє■ ярь Є№.</p>
<h2><a name="tooltip_test_show">tooltip_test_show(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ - эхЄ.</p>
<p>╧юърч эєцэюую шч тёхщ Ўхяюўъш ЄєыЄшяют яЁш схчфхщёЄтшш.
─юыцэр т√ч√трЄ№ё  яЁш схчфхщёЄтшш шыш яхЁшюфшўхёъш фы  яЁютхЁъш ЄрщьхЁр.
═ряЁшьхЁ яЁш юяЁюёх ёюс√Єшщ ЇєэъЎшхщ SysFn 23 (event 0).</p>
<h2><a name="tooltip_mouse">tooltip_mouse(ttip)</a></h2>
<p>╧рЁрьхЄЁ - єърчрЄхы№ эр яхЁт√щ т Ўхяюўъх ЄєыЄшя.</p>
<p>┬ючтЁрЄ - эхЄ.</p>
<p>▌Єр ЇєэъЎш  фюыцэр т√ч√трЄ№ё  яЁш ёюс√Єшш ь√°ш. ╤ЄшЁрхЄ ЄєыЄшя яЁш т√їюфх ь√°ш шч чюэ√ ъюэЄЁюы </p>
<h2><a name="get_font_size">get_font_size(color)</a></h2>
<p>╧рЁрьхЄЁ - ЎтхЄ ЄхъёЄр ё ЁрчьхЁюь °ЁшЇЄр, т ЇюЁьрЄх ЇєэъЎшш SysFn 4.</p>
<p>┬ючтЁрЄ - EAX = width shl 16 + height.</p>
<p>─хъюфшЁєхЄ шч ъюьсшэшЁютрээюую ЎтхЄр/ЁрчьхЁр °шЁшэє ш т√ёюЄє °ЁшЇЄр т яшъёхы ї</p>
<h1><a name="struc">╤ЄЁєъЄєЁр ЄєыЄшяр</a></h1>
<p>╠ръЁюё фы  ёючфрэш  ёЄЁєъЄєЁ√ ЄєыЄшяр эшцх, тъы■ўхэ т box_lib.mac. ═х чрс√трхь юс·хфшэшЄ№ ЄєыЄшя√ т ёяшёюъ.</p>
<pre>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 ?
}
</pre>
<hr>
<h1><a name="source">╚ёїюфэ√щ ъюф ш яЁшьхЁ√</a></h1>
<p>╚ёїюфэ√щ ъюф эрїюфшЄё  т сшсышюЄхъх box_lib, Їрщы tooltip.asm</p>
<p>╧ЁшьхЁ шёяюы№чютрэш  эрїюфшЄё  т box_lib\asm\tooltip_demo.asm</p>
<h1>EOF</h1>
</body>
</html>
@@ -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:
File diff suppressed because it is too large. Load diff
@@ -1,206 +1,212 @@
; Copyright (c) 2009, <Lrz>
; 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 <organization> 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 <Lrz> ''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 <copyright holder> 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 <Lrz>",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:
;конец кода
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
; Copyright (c) 2009, <Lrz>
; 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 <organization> 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 <Lrz> ''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 <copyright holder> 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 <Lrz>",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:
;конец кода
@@ -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, <frame_1.x+10, frame_1.y+15>, , type_pls
;-----------------------------------
; draw editbox
edit_boxes_set_sys_color edit1, editboxes_end, sc
stdcall [edit_box_draw], edit1
;-----------------------------------
; draw buttons
mcall 8,<frame_1.x+frame_1.width-(68+15+50+15),68>,<frame_1.y+30,16>,22,[sc.work_button] ; reload
mcall ,<frame_1.x+frame_1.width-(50+15),50>,<frame_1.y+30,16>, 24 ; stop
mcall , <frame_2.x+frame_2.width-(54+15),54>,<frame_2.y+30,16>,26 ; save
;-----------------------------------
; draw buttons text
mov ecx, [sc.work_button_text]
or ecx, 80000000h
mcall 4, <frame_1.x+frame_1.width-(68+15+50+15)+10,frame_1.y+35>, , button_text.1
mcall , <frame_1.x+frame_1.width-(50+15)+15,frame_1.y+35>, , button_text.2
mcall , <frame_2.x+frame_2.width-(54+15)+10,frame_2.y+35>, , button_text.3
mcall 13,<frame_2.x+17,frame_2.width-15*2>,<frame_2.y+10,15>,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, <frame_1.x+10, frame_1.y+15>, , type_pls
;-----------------------------------
; draw editbox
edit_boxes_set_sys_color edit1, editboxes_end, sc
stdcall [edit_box_draw], edit1
;-----------------------------------
; draw buttons
mcall 8,<frame_1.x+frame_1.width-(68+15+50+15),68>,<frame_1.y+30,16>,22,[sc.work_button] ; reload
mcall ,<frame_1.x+frame_1.width-(50+15),50>,<frame_1.y+30,16>, 24 ; stop
mcall , <frame_2.x+frame_2.width-(54+15),54>,<frame_2.y+30,16>,26 ; save
;-----------------------------------
; draw buttons text
mov ecx, [sc.work_button_text]
or ecx, 80000000h
mcall 4, <frame_1.x+frame_1.width-(68+15+50+15)+10,frame_1.y+35>, , button_text.1
mcall , <frame_1.x+frame_1.width-(50+15)+15,frame_1.y+35>, , button_text.2
mcall , <frame_2.x+frame_2.width-(54+15)+10,frame_2.y+35>, , button_text.3
mcall 13,<frame_2.x+17,frame_2.width-15*2>,<frame_2.y+10,15>,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:
;---------------------------------------------------------------------
+432 -434
View File
@@ -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, <frame_1.x+10, frame_1.y+15>, , type_pls
;-----------------------------------
; draw editbox
edit_boxes_set_sys_color edit1, editboxes_end, sc
stdcall [edit_box_draw], edit1
;-----------------------------------
; draw buttons
mcall 8,<frame_1.x+frame_1.width-(68+15+50+15),68>,<frame_1.y+30,16>,22,[sc.work_button] ; reload
mcall ,<frame_1.x+frame_1.width-(50+15),50>,<frame_1.y+30,16>, 24 ; stop
mcall , <frame_2.x+frame_2.width-(54+15),54>,<frame_2.y+30,16>,26 ; save
;-----------------------------------
; draw buttons text
mov ecx, [sc.work_button_text]
or ecx, 80000000h
mcall 4, <frame_1.x+frame_1.width-(68+15+50+15)+10,frame_1.y+35>, , button_text.1
mcall , <frame_1.x+frame_1.width-(50+15)+15,frame_1.y+35>, , button_text.2
mcall , <frame_2.x+frame_2.width-(54+15)+10,frame_2.y+35>, , button_text.3
mcall 13,<frame_2.x+17,frame_2.width-15*2>,<frame_2.y+10,15>,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, <frame_1.x+10, frame_1.y+15>, , type_pls
;-----------------------------------
; draw editbox
edit_boxes_set_sys_color edit1, editboxes_end, sc
stdcall [edit_box_draw], edit1
;-----------------------------------
; draw buttons
mcall 8,<frame_1.x+frame_1.width-(68+15+50+15),68>,<frame_1.y+30,16>,22,[sc.work_button] ; reload
mcall ,<frame_1.x+frame_1.width-(50+15),50>,<frame_1.y+30,16>, 24 ; stop
mcall , <frame_2.x+frame_2.width-(54+15),54>,<frame_2.y+30,16>,26 ; save
;-----------------------------------
; draw buttons text
mov ecx, [sc.work_button_text]
or ecx, 80000000h
mcall 4, <frame_1.x+frame_1.width-(68+15+50+15)+10,frame_1.y+35>, , button_text.1
mcall , <frame_1.x+frame_1.width-(50+15)+15,frame_1.y+35>, , button_text.2
mcall , <frame_2.x+frame_2.width-(54+15)+10,frame_2.y+35>, , button_text.3
mcall 13,<frame_2.x+17,frame_2.width-15*2>,<frame_2.y+10,15>,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:
;---------------------------------------------------------------------
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -24,7 +24,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 '../../develop/info3ds/info_fun_float.inc'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
File diff suppressed because it is too large. Load diff
+7 -3
View File
@@ -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:
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -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============================================================================================================
+1 -1
View File
@@ -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'
+7 -1
View File
@@ -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'
File diff suppressed because it is too large. Load diff
+454 -454
View File
@@ -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:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; 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:
+15 -12
View File
@@ -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, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <80,20>, 6, BT_COL
; string "mkd"
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,80+5>, 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
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -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'
+1 -1
View File
@@ -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'
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -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
+419 -415
View File
@@ -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:
File diff suppressed because it is too large. Load diff
+4 -1
View File
@@ -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'
+1 -1
View File
@@ -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'
+1 -1
View File
@@ -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'
+1 -1
View File
@@ -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'
+709 -1
View File
@@ -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] jneLine truncated
; 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_:
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -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"
;-------------------------------------------------------------------------------
+6 -1
View File
@@ -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
+2 -2
View File
@@ -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
+7 -1
View File
@@ -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'
+7 -1
View File
@@ -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.
Loaded 100 of 106 files, more files were not shown because too many files have changed in this diff. Show more