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

Reviewed-on: #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 was merged in pull request #433.
This commit is contained in:
2026-04-23 11:50:10 +00:00
committed by Burer
parent f08fe1f2a0
commit 2cda4a9682
106 changed files with 19579 additions and 18766 deletions
+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:

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -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 ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

@@ -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>

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

@@ -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