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>
@@ -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'
|
||||
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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">═р уыртэє■ ↑</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">═р уыртэє■ ↑</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">═р уыртэє■ ↑</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">═р уыртэє■ ↑</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:
|
||||
|
||||
@@ -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:
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
@@ -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:
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
|
||||
@@ -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============================================================================================================
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||