forked from KolibriOS/kolibrios
Box_Lib - Component ProgressBar
Added program 'Run with OpenDialog' git-svn-id: svn://kolibrios.org@3478 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
72bcc9e95d
commit
510e1e65a4
@ -8,4 +8,5 @@ include 'filebrowser.mac' ;macro implements filebrowser
|
|||||||
include 'tree_list.mac' ;macro implements tree_list, image_list, list_box
|
include 'tree_list.mac' ;macro implements tree_list, image_list, list_box
|
||||||
include 'pathshow.mac' ;macro implements pathshow
|
include 'pathshow.mac' ;macro implements pathshow
|
||||||
include 't_edit.mac' ;macro implements text_editor
|
include 't_edit.mac' ;macro implements text_editor
|
||||||
include 'frame.mac' ;macro implements frame
|
include 'frame.mac' ;macro implements frame
|
||||||
|
include 'progressbar.mac' ;macro implements progressbar
|
@ -107,6 +107,10 @@ use_text_edit
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
align 16
|
align 16
|
||||||
use_frame
|
use_frame
|
||||||
|
;--------------------------------------------------
|
||||||
|
;ProgressBar
|
||||||
|
;--------------------------------------------------
|
||||||
|
use_progressbar
|
||||||
|
|
||||||
;input:
|
;input:
|
||||||
; eax = óêàçàòåëü íà ôóíêöèþ âûäåëåíèÿ ïàìÿòè
|
; eax = óêàçàòåëü íà ôóíêöèþ âûäåëåíèÿ ïàìÿòè
|
||||||
@ -336,6 +340,9 @@ dd sz_ted_version, 0x00000003
|
|||||||
dd sz_Frame_draw, frame.draw
|
dd sz_Frame_draw, frame.draw
|
||||||
dd szVersion_frame, 0x00010001
|
dd szVersion_frame, 0x00010001
|
||||||
|
|
||||||
|
dd sz_progressbar_draw, progressbar_draw
|
||||||
|
dd sz_progressbar_progress, progressbar_progress
|
||||||
|
|
||||||
dd 0,0
|
dd 0,0
|
||||||
|
|
||||||
|
|
||||||
@ -437,3 +444,6 @@ sz_ted_version db 'version_text_edit',0
|
|||||||
|
|
||||||
sz_Frame_draw db 'frame_draw',0
|
sz_Frame_draw db 'frame_draw',0
|
||||||
szVersion_frame db 'version_frame',0
|
szVersion_frame db 'version_frame',0
|
||||||
|
|
||||||
|
sz_progressbar_draw db 'progressbar_draw', 0
|
||||||
|
sz_progressbar_progress db 'progressbar_progress', 0
|
@ -485,4 +485,17 @@ struc scrollbar xsize, xpos, ysize, ypos, btn_height, max, cur, pos, bgcol, frco
|
|||||||
.work_size dd ?
|
.work_size dd ?
|
||||||
.all_redraw dd ?
|
.all_redraw dd ?
|
||||||
.ar_offset dd ar_offset
|
.ar_offset dd ar_offset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; *** ProgressBar constants *** ;
|
||||||
|
PB_VALUE equ +0
|
||||||
|
PB_LEFT equ +4
|
||||||
|
PB_TOP equ +8
|
||||||
|
PB_WIDTH equ +12
|
||||||
|
PB_HEIGHT equ +16
|
||||||
|
PB_STYLE equ +20
|
||||||
|
PB_MIN equ +24
|
||||||
|
PB_MAX equ +28
|
||||||
|
PB_BACK_COLOR equ +32
|
||||||
|
PB_PROGRESS_COLOR equ +36
|
||||||
|
PB_FRAME_COLOR equ +40
|
158
programs/develop/libraries/box_lib/trunk/progressbar.mac
Normal file
158
programs/develop/libraries/box_lib/trunk/progressbar.mac
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
macro use_progressbar
|
||||||
|
{
|
||||||
|
pb equ [ebp + 4 + 8*4]
|
||||||
|
align 16
|
||||||
|
progressbar_draw:
|
||||||
|
pushad
|
||||||
|
mov ebp, esp
|
||||||
|
; draw frame
|
||||||
|
push ebp
|
||||||
|
mov [.last_esp], esp
|
||||||
|
mov eax, pb
|
||||||
|
mov esi, [eax + PB_LEFT]
|
||||||
|
mov edi, [eax + PB_TOP]
|
||||||
|
mov ebp, [eax + PB_WIDTH]
|
||||||
|
add ebp, esi
|
||||||
|
dec ebp
|
||||||
|
mov esp, [eax + PB_HEIGHT]
|
||||||
|
add esp, edi
|
||||||
|
dec esp
|
||||||
|
mov edx, [eax + PB_FRAME_COLOR]
|
||||||
|
mov eax, 38
|
||||||
|
mov ebx, esi
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, ebp
|
||||||
|
mov ecx, edi
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, edi
|
||||||
|
int 64
|
||||||
|
mov ecx, esp
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, esp
|
||||||
|
int 64
|
||||||
|
mov bx, si
|
||||||
|
mov ecx, edi
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, esp
|
||||||
|
int 64
|
||||||
|
mov ebx, ebp
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, ebp
|
||||||
|
int 64
|
||||||
|
mov esp, [.last_esp]
|
||||||
|
pop ebp
|
||||||
|
; if min > max then .skip
|
||||||
|
mov eax, pb
|
||||||
|
mov edx, [eax + PB_MAX]
|
||||||
|
mov ecx, [eax + PB_MIN]
|
||||||
|
cmp ecx, edx
|
||||||
|
; jg .skip
|
||||||
|
jne .min_no_eq_max
|
||||||
|
dec edx
|
||||||
|
.min_no_eq_max:
|
||||||
|
; draw all progress rectangle
|
||||||
|
call get_progress_width
|
||||||
|
mov edi, eax
|
||||||
|
mov eax, pb
|
||||||
|
mov ebx, [eax + PB_LEFT]
|
||||||
|
inc ebx
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, edi
|
||||||
|
mov ecx, [eax + PB_TOP]
|
||||||
|
inc ecx
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, [eax + PB_HEIGHT]
|
||||||
|
dec ecx
|
||||||
|
dec ecx
|
||||||
|
mov edx, [eax + PB_PROGRESS_COLOR]
|
||||||
|
mov eax, 13
|
||||||
|
int 64
|
||||||
|
; draw last part of non-progress rectangle
|
||||||
|
; edi = pW, esi = W - 2
|
||||||
|
sub esi, edi ; width
|
||||||
|
shr ebx, 16
|
||||||
|
add ebx, edi
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, esi
|
||||||
|
mov esi, pb
|
||||||
|
mov edx, [esi + PB_BACK_COLOR]
|
||||||
|
int 64
|
||||||
|
; .skip:
|
||||||
|
popad
|
||||||
|
ret 4
|
||||||
|
.last_esp dd 0
|
||||||
|
|
||||||
|
|
||||||
|
align 16
|
||||||
|
get_progress_width:
|
||||||
|
; pW = (W-2)(value - min) / (max - min)
|
||||||
|
mov esi, [eax + PB_WIDTH]
|
||||||
|
dec esi
|
||||||
|
dec esi
|
||||||
|
mov eax, [eax + PB_VALUE]
|
||||||
|
sub eax, ecx
|
||||||
|
imul eax, esi
|
||||||
|
neg ecx
|
||||||
|
add ecx, edx
|
||||||
|
xor edx, edx
|
||||||
|
div ecx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 16
|
||||||
|
progressbar_progress:
|
||||||
|
pushad
|
||||||
|
mov ebp, esp
|
||||||
|
; if min > max then .skip
|
||||||
|
mov eax, pb
|
||||||
|
mov edx, [eax + PB_MAX]
|
||||||
|
mov ecx, [eax + PB_MIN]
|
||||||
|
cmp ecx, edx
|
||||||
|
; jg .skip
|
||||||
|
jne .min_no_eq_max1
|
||||||
|
dec edx
|
||||||
|
.min_no_eq_max1:
|
||||||
|
call get_progress_width
|
||||||
|
mov edi, eax
|
||||||
|
; increase value
|
||||||
|
mov eax, pb
|
||||||
|
mov edx, [eax + PB_MAX]
|
||||||
|
mov ecx, [eax + PB_VALUE]
|
||||||
|
inc ecx
|
||||||
|
; if value > max then value = max
|
||||||
|
cmp ecx, edx
|
||||||
|
jng .next
|
||||||
|
mov ecx, edx
|
||||||
|
.next:
|
||||||
|
mov [eax + PB_VALUE], ecx
|
||||||
|
; draw new part of progress rectangle
|
||||||
|
mov eax, pb
|
||||||
|
mov ecx, [eax + PB_MIN]
|
||||||
|
cmp ecx, edx
|
||||||
|
jne .min_no_eq_max2
|
||||||
|
dec edx
|
||||||
|
.min_no_eq_max2:
|
||||||
|
call get_progress_width
|
||||||
|
mov esi, eax
|
||||||
|
; edi = last pW, esi = new pW
|
||||||
|
mov eax, pb
|
||||||
|
mov ebx, [eax + PB_LEFT]
|
||||||
|
inc ebx
|
||||||
|
add ebx, edi
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, esi
|
||||||
|
sub ebx, edi
|
||||||
|
mov ecx, [eax + PB_TOP]
|
||||||
|
inc ecx
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, [eax + PB_HEIGHT]
|
||||||
|
dec ecx
|
||||||
|
dec ecx
|
||||||
|
mov edx, [eax + PB_PROGRESS_COLOR]
|
||||||
|
mov eax, 13
|
||||||
|
int 64
|
||||||
|
; .skip:
|
||||||
|
popad
|
||||||
|
ret 4
|
||||||
|
restore pb
|
||||||
|
}
|
699
programs/system/RunOD/RunOD.asm
Normal file
699
programs/system/RunOD/RunOD.asm
Normal file
@ -0,0 +1,699 @@
|
|||||||
|
; Run with OpenDialog ;
|
||||||
|
; this source can be compiled ;
|
||||||
|
; with FASM or NASM ;
|
||||||
|
|
||||||
|
org 0
|
||||||
|
use32
|
||||||
|
|
||||||
|
STACK_SIZE equ 256
|
||||||
|
REDRAW_EVENT equ 1
|
||||||
|
KEY_EVENT equ 2
|
||||||
|
BUTTON_EVENT equ 3
|
||||||
|
MOUSE_EVENT equ 6
|
||||||
|
|
||||||
|
BUTTON_RUN equ 10
|
||||||
|
BUTTON_BROWSE equ 20
|
||||||
|
|
||||||
|
MENUET01 db 'MENUET01'
|
||||||
|
version dd 1
|
||||||
|
program.start dd start_
|
||||||
|
program.end dd end_
|
||||||
|
program.memory dd end_ + STACK_SIZE
|
||||||
|
program.stack dd end_ + STACK_SIZE
|
||||||
|
program.params dd 0
|
||||||
|
program.path dd 0
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
start_:
|
||||||
|
; set.event
|
||||||
|
mov eax, 40
|
||||||
|
mov ebx, 39
|
||||||
|
int 64
|
||||||
|
|
||||||
|
push sz_box_lib
|
||||||
|
call load.library
|
||||||
|
mov [box_lib], eax
|
||||||
|
|
||||||
|
push dword[box_lib]
|
||||||
|
push sz_edit_box
|
||||||
|
call getprocaddress
|
||||||
|
mov [edit_box_draw], eax
|
||||||
|
|
||||||
|
push dword[box_lib]
|
||||||
|
push sz_edit_box_key
|
||||||
|
call getprocaddress
|
||||||
|
mov [edit_box_key], eax
|
||||||
|
|
||||||
|
push dword[box_lib]
|
||||||
|
push sz_edit_box_mouse
|
||||||
|
call getprocaddress
|
||||||
|
mov [edit_box_mouse], eax
|
||||||
|
|
||||||
|
push dword[box_lib]
|
||||||
|
push sz_edit_box_set_text
|
||||||
|
call getprocaddress
|
||||||
|
mov [edit_box_set_text], eax
|
||||||
|
|
||||||
|
push sz_proc_lib
|
||||||
|
call load.library
|
||||||
|
mov [proc_lib], eax
|
||||||
|
|
||||||
|
push dword[proc_lib]
|
||||||
|
push sz_OpenDialog_init
|
||||||
|
call getprocaddress
|
||||||
|
mov [opendialog_init], eax
|
||||||
|
|
||||||
|
push dword[proc_lib]
|
||||||
|
push sz_OpenDialog_start
|
||||||
|
call getprocaddress
|
||||||
|
mov [opendialog_start], eax
|
||||||
|
|
||||||
|
|
||||||
|
; memory.allocate:
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 12
|
||||||
|
mov ecx, 4096 + 4096 + 4096
|
||||||
|
int 64
|
||||||
|
|
||||||
|
mov [od.procinfo], eax
|
||||||
|
|
||||||
|
add eax, 1024
|
||||||
|
mov [od.filename_area], eax
|
||||||
|
|
||||||
|
add eax, 4096 - 1024
|
||||||
|
mov [od.opendir_path], eax
|
||||||
|
|
||||||
|
add eax, 4096
|
||||||
|
mov [od.openfile_path], eax
|
||||||
|
|
||||||
|
push od
|
||||||
|
call [opendialog_init]
|
||||||
|
|
||||||
|
|
||||||
|
; get.screen.size
|
||||||
|
mov eax, 61
|
||||||
|
mov ebx, 1
|
||||||
|
int 64
|
||||||
|
|
||||||
|
mov [screen], eax
|
||||||
|
movzx eax, word[screen.width]
|
||||||
|
shr eax, 3
|
||||||
|
lea eax, [eax*2 + eax]
|
||||||
|
add eax, 72
|
||||||
|
mov [window.width], eax
|
||||||
|
|
||||||
|
; skin.height
|
||||||
|
mov eax, 48
|
||||||
|
mov ebx, 4
|
||||||
|
int 64
|
||||||
|
|
||||||
|
add eax, 64
|
||||||
|
mov [window.height], eax
|
||||||
|
|
||||||
|
movzx eax, word[screen.width]
|
||||||
|
sub eax, [window.width]
|
||||||
|
shr eax, 1
|
||||||
|
mov [window.left], eax
|
||||||
|
|
||||||
|
movzx eax, word[screen.height]
|
||||||
|
sub eax, [window.height]
|
||||||
|
sub eax, 24
|
||||||
|
mov [window.top], eax
|
||||||
|
|
||||||
|
mov eax, [window.width]
|
||||||
|
sub eax, 20
|
||||||
|
mov [edit1.width], eax
|
||||||
|
|
||||||
|
mov eax, [od.openfile_path]
|
||||||
|
mov [edit1.text], eax
|
||||||
|
|
||||||
|
|
||||||
|
call on_redraw
|
||||||
|
; ----------------------- ;
|
||||||
|
.loop:
|
||||||
|
; wait.event
|
||||||
|
mov eax, 10
|
||||||
|
int 64
|
||||||
|
cmp eax, REDRAW_EVENT
|
||||||
|
jne .check_key
|
||||||
|
call on_redraw
|
||||||
|
jmp .loop
|
||||||
|
; ----------------------- ;
|
||||||
|
.check_key:
|
||||||
|
cmp eax, KEY_EVENT
|
||||||
|
jne .check_button
|
||||||
|
mov eax, 2
|
||||||
|
int 64
|
||||||
|
cmp ah, 13
|
||||||
|
jne .no_key_enter
|
||||||
|
call on_button_run
|
||||||
|
jmp .loop
|
||||||
|
; ----------------------- ;
|
||||||
|
.no_key_enter:
|
||||||
|
push edit1
|
||||||
|
call [edit_box_key]
|
||||||
|
jmp .loop
|
||||||
|
; ----------------------- ;
|
||||||
|
.check_button:
|
||||||
|
cmp eax, BUTTON_EVENT
|
||||||
|
jne .check_mouse
|
||||||
|
; get.button.number
|
||||||
|
mov eax, 17
|
||||||
|
int 64
|
||||||
|
cmp ah, 1
|
||||||
|
jne .check_button_run
|
||||||
|
; program.terminate
|
||||||
|
or eax, -1
|
||||||
|
int 64
|
||||||
|
; ----------------------- ;
|
||||||
|
.check_button_run:
|
||||||
|
cmp ah, BUTTON_RUN
|
||||||
|
jne .check_button_browse
|
||||||
|
call on_button_run
|
||||||
|
jmp .loop
|
||||||
|
; ----------------------- ;
|
||||||
|
.check_button_browse:
|
||||||
|
cmp ah, BUTTON_BROWSE
|
||||||
|
jne .loop
|
||||||
|
call on_button_browse
|
||||||
|
jmp .loop
|
||||||
|
; ----------------------- ;
|
||||||
|
.check_mouse:
|
||||||
|
cmp eax, MOUSE_EVENT
|
||||||
|
jne .loop
|
||||||
|
push edit1
|
||||||
|
call [edit_box_mouse]
|
||||||
|
jmp .loop
|
||||||
|
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
on_button_run:
|
||||||
|
push dword[edit1.text]
|
||||||
|
call extractrunpathandparams
|
||||||
|
|
||||||
|
;file.run:
|
||||||
|
mov eax, 70
|
||||||
|
mov ebx, file_info
|
||||||
|
int 64
|
||||||
|
|
||||||
|
mov dl, byte[lastendpath]
|
||||||
|
mov ecx, [ptrlastendpath]
|
||||||
|
mov [ecx], dl
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jnge .error
|
||||||
|
mov [runresult], dword sz_Program_run_successfully
|
||||||
|
jmp .exit
|
||||||
|
|
||||||
|
.error:
|
||||||
|
; ----------------------- ;
|
||||||
|
.5:
|
||||||
|
cmp al, -5
|
||||||
|
jne .31
|
||||||
|
mov [runresult], dword sz_File_not_found
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.31:
|
||||||
|
cmp al, -31
|
||||||
|
jne .32
|
||||||
|
mov [runresult], dword sz_File_is_not_executable
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.32:
|
||||||
|
cmp al, -32
|
||||||
|
jne .10
|
||||||
|
mov [runresult], dword sz_Too_many_processes
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.10:
|
||||||
|
cmp al, -10
|
||||||
|
jne .30
|
||||||
|
mov [runresult], dword sz_Access_denied
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.30:
|
||||||
|
cmp al, -30
|
||||||
|
jne .unknown
|
||||||
|
mov [runresult], dword sz_Out_of_memory
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.unknown:
|
||||||
|
mov [runresult], dword sz_Unknown_error
|
||||||
|
; ----------------------- ;
|
||||||
|
.exit:
|
||||||
|
call on_redraw
|
||||||
|
ret
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
on_button_browse:
|
||||||
|
push od
|
||||||
|
call [opendialog_start]
|
||||||
|
|
||||||
|
mov eax, [od.status]
|
||||||
|
test eax, eax
|
||||||
|
je .exit
|
||||||
|
|
||||||
|
;======== if space exist in filepath, then quote filepath
|
||||||
|
mov eax, [od.openfile_path]
|
||||||
|
; ----------------------- ;
|
||||||
|
.check_space:
|
||||||
|
cmp [eax], byte 0
|
||||||
|
je .no_space
|
||||||
|
cmp [eax], byte 32 ;space
|
||||||
|
je .space
|
||||||
|
inc eax
|
||||||
|
jmp .check_space
|
||||||
|
.space:
|
||||||
|
; ----------------------- ;
|
||||||
|
.find_end_zero:
|
||||||
|
inc eax
|
||||||
|
cmp [eax], byte 0
|
||||||
|
jne .find_end_zero
|
||||||
|
mov [eax + 2], byte 0
|
||||||
|
mov [eax + 1], byte 34 ; quote
|
||||||
|
; ----------------------- ;
|
||||||
|
.shift_path:
|
||||||
|
dec eax
|
||||||
|
|
||||||
|
mov dl, byte [eax ]
|
||||||
|
mov [eax + 1], dl
|
||||||
|
|
||||||
|
cmp eax, [od.openfile_path]
|
||||||
|
jne .shift_path
|
||||||
|
mov [eax ], byte 34 ; quote
|
||||||
|
|
||||||
|
.no_space:
|
||||||
|
;=================================
|
||||||
|
|
||||||
|
push dword[od.openfile_path]
|
||||||
|
push edit1
|
||||||
|
call [edit_box_set_text]
|
||||||
|
; ----------------------- ;
|
||||||
|
.exit:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
on_redraw:
|
||||||
|
; redraw.start
|
||||||
|
mov eax, 12
|
||||||
|
mov ebx, 1
|
||||||
|
int 64
|
||||||
|
; get.standart.colors
|
||||||
|
mov eax, 48
|
||||||
|
mov ebx, 3
|
||||||
|
mov ecx, sc
|
||||||
|
mov edx, 40
|
||||||
|
int 64
|
||||||
|
|
||||||
|
mov eax, [sc.work_graph]
|
||||||
|
mov [edit1.shift_color], eax
|
||||||
|
|
||||||
|
mov eax, [sc.work_graph]
|
||||||
|
mov [edit1.focus_border_color], eax
|
||||||
|
|
||||||
|
mov eax, [sc.frames]
|
||||||
|
mov [edit1.blur_border_color], eax
|
||||||
|
|
||||||
|
mov eax, [sc.work_text]
|
||||||
|
mov [edit1.text_color], eax
|
||||||
|
|
||||||
|
; draw.window
|
||||||
|
xor eax, eax
|
||||||
|
mov ebx, [window.left]
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, [window.width]
|
||||||
|
mov ecx, [window.top]
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, [window.height]
|
||||||
|
mov edx, [sc.work]
|
||||||
|
or edx, 34000000h
|
||||||
|
mov edi, sz_run
|
||||||
|
int 64
|
||||||
|
|
||||||
|
mov eax, [window.width]
|
||||||
|
sub eax, 318
|
||||||
|
shr eax, 1
|
||||||
|
sub eax, 5
|
||||||
|
push eax
|
||||||
|
push 5
|
||||||
|
push sz_Type_name_of_program
|
||||||
|
push dword [sc.work_text]
|
||||||
|
call draw.text
|
||||||
|
|
||||||
|
; ====================| browse button |====================
|
||||||
|
push 20
|
||||||
|
push 5
|
||||||
|
push 38
|
||||||
|
push 42
|
||||||
|
push 17
|
||||||
|
call draw.button
|
||||||
|
|
||||||
|
push 3
|
||||||
|
push 42
|
||||||
|
push sz_browse
|
||||||
|
push dword [sc.work_button_text]
|
||||||
|
call draw.text
|
||||||
|
|
||||||
|
; ====================| run button |====================
|
||||||
|
push 10
|
||||||
|
mov eax, [window.width]
|
||||||
|
sub eax, 57
|
||||||
|
push eax
|
||||||
|
push 38
|
||||||
|
push 42
|
||||||
|
push 17
|
||||||
|
call draw.button
|
||||||
|
|
||||||
|
mov eax, [window.width]
|
||||||
|
sub eax, 56
|
||||||
|
push eax
|
||||||
|
push 42
|
||||||
|
push sz_run
|
||||||
|
push dword [sc.work_button_text]
|
||||||
|
call draw.text
|
||||||
|
; =====================================================
|
||||||
|
|
||||||
|
mov eax, 57
|
||||||
|
push eax
|
||||||
|
mov eax, [window.height]
|
||||||
|
sub eax, 44
|
||||||
|
push eax
|
||||||
|
push dword[runresult]
|
||||||
|
push dword [sc.work_text]
|
||||||
|
call draw.text
|
||||||
|
|
||||||
|
push edit1
|
||||||
|
call [edit_box_draw]
|
||||||
|
|
||||||
|
; redraw.finish
|
||||||
|
mov eax, 12
|
||||||
|
mov ebx, 2
|
||||||
|
int 64
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
extractrunpathandparams:
|
||||||
|
xor ecx, ecx
|
||||||
|
|
||||||
|
mov eax, [esp + 4]
|
||||||
|
mov [runpath], eax
|
||||||
|
|
||||||
|
movzx eax, byte [eax]
|
||||||
|
cmp eax, 34
|
||||||
|
jne .start_without_quote
|
||||||
|
|
||||||
|
inc ecx
|
||||||
|
; ----------------------- ;
|
||||||
|
.loop1:
|
||||||
|
mov eax, [runpath]
|
||||||
|
movzx eax, byte [eax + ecx]
|
||||||
|
cmp eax, 34
|
||||||
|
jne .not_quote
|
||||||
|
|
||||||
|
mov eax, [runpath]
|
||||||
|
mov [eax + ecx], byte 0
|
||||||
|
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [ptrlastendpath], eax
|
||||||
|
mov [lastendpath], byte 34
|
||||||
|
inc ecx
|
||||||
|
; ----------------------- ;
|
||||||
|
.skip_space1:
|
||||||
|
mov eax, [runpath]
|
||||||
|
movzx eax, byte [eax + ecx]
|
||||||
|
cmp al, 32
|
||||||
|
jne .skipped1
|
||||||
|
inc ecx
|
||||||
|
jmp .skip_space1
|
||||||
|
; ----------------------- ;
|
||||||
|
.skipped1:
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [runparams], eax
|
||||||
|
inc dword [runpath]
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.not_quote:
|
||||||
|
mov eax, [runpath]
|
||||||
|
movzx eax, byte [eax + ecx]
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jne .not_zero1
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [runparams], eax
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [ptrlastendpath], eax
|
||||||
|
mov [lastendpath], byte 0
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.not_zero1:
|
||||||
|
inc ecx
|
||||||
|
jmp .loop1
|
||||||
|
; ----------------------- ;
|
||||||
|
.start_without_quote:
|
||||||
|
; ----------------------- ;
|
||||||
|
.loop2:
|
||||||
|
mov eax, [runpath]
|
||||||
|
movzx eax, byte [eax + ecx]
|
||||||
|
cmp eax, 32
|
||||||
|
jne .not_space
|
||||||
|
|
||||||
|
mov eax, [runpath]
|
||||||
|
mov [eax + ecx], byte 0
|
||||||
|
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [ptrlastendpath], eax
|
||||||
|
mov [lastendpath], byte 32
|
||||||
|
inc ecx
|
||||||
|
; ----------------------- ;
|
||||||
|
.skip_space2:
|
||||||
|
mov eax, [runpath]
|
||||||
|
movzx eax, byte [eax + ecx]
|
||||||
|
cmp al, 32
|
||||||
|
jne .skipped2
|
||||||
|
inc ecx
|
||||||
|
jmp .skip_space2
|
||||||
|
; ----------------------- ;
|
||||||
|
.skipped2:
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [runparams], eax
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.not_space:
|
||||||
|
mov eax, [runpath]
|
||||||
|
movzx eax, byte [eax + ecx]
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jne .not_zero2
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [runparams], eax
|
||||||
|
mov eax, [runpath]
|
||||||
|
add eax, ecx
|
||||||
|
mov [ptrlastendpath], eax
|
||||||
|
mov [lastendpath], byte 0
|
||||||
|
jmp .exit
|
||||||
|
; ----------------------- ;
|
||||||
|
.not_zero2:
|
||||||
|
inc ecx
|
||||||
|
jmp .loop2
|
||||||
|
; ----------------------- ;
|
||||||
|
.exit:
|
||||||
|
ret 4
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
draw.button:
|
||||||
|
mov eax, 8
|
||||||
|
mov ebx, [esp + 16]
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, [esp + 8]
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
shl ecx, 16
|
||||||
|
add ecx, [esp + 4]
|
||||||
|
mov edx, [esp + 20]
|
||||||
|
mov esi, [sc.work_button]
|
||||||
|
int 64
|
||||||
|
ret 20
|
||||||
|
; ======================================================================= ;
|
||||||
|
draw.text:
|
||||||
|
mov eax, 4
|
||||||
|
mov ebx, [esp + 16]
|
||||||
|
shl ebx, 16
|
||||||
|
add ebx, [esp + 12]
|
||||||
|
mov ecx, 2147483648
|
||||||
|
or ecx, [esp + 4]
|
||||||
|
mov edx, [esp + 8]
|
||||||
|
int 64
|
||||||
|
ret 16
|
||||||
|
; ======================================================================= ;
|
||||||
|
load.library:
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 19
|
||||||
|
mov ecx, [esp + 4]
|
||||||
|
int 64
|
||||||
|
ret 4
|
||||||
|
; ======================================================================= ;
|
||||||
|
getprocaddress:
|
||||||
|
mov edx, [esp + 8] ; hlib
|
||||||
|
xor eax, eax
|
||||||
|
test edx, edx ; If hlib = 0 then goto .end
|
||||||
|
jz .end
|
||||||
|
; ----------------------- ;
|
||||||
|
.next:
|
||||||
|
cmp [edx], dword 0 ; If end of export table then goto .end
|
||||||
|
jz .end
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
mov esi, [edx]
|
||||||
|
mov edi, [esp + 4] ; name
|
||||||
|
; ----------------------- ;
|
||||||
|
.next_:
|
||||||
|
lodsb
|
||||||
|
scasb
|
||||||
|
jne .fail
|
||||||
|
or al, al
|
||||||
|
jnz .next_
|
||||||
|
jmp .ok
|
||||||
|
; ----------------------- ;
|
||||||
|
.fail:
|
||||||
|
add edx, 8
|
||||||
|
jmp .next
|
||||||
|
; ----------------------- ;
|
||||||
|
.ok: ; return address
|
||||||
|
mov eax, [edx + 4]
|
||||||
|
; ----------------------- ;
|
||||||
|
.end:
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
file_info:
|
||||||
|
dd 7
|
||||||
|
dd 0
|
||||||
|
runparams:
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
db 0
|
||||||
|
runpath:
|
||||||
|
dd 0
|
||||||
|
|
||||||
|
|
||||||
|
screen:
|
||||||
|
.height dw 0
|
||||||
|
.width dw 0
|
||||||
|
|
||||||
|
window:
|
||||||
|
.left dd 0
|
||||||
|
.top dd 0
|
||||||
|
.width dd 0
|
||||||
|
.height dd 0
|
||||||
|
|
||||||
|
box_lib dd 0
|
||||||
|
|
||||||
|
edit1:
|
||||||
|
.width dd 0
|
||||||
|
.left dd 5
|
||||||
|
.top dd 19
|
||||||
|
.color dd 0ffffffffh
|
||||||
|
.shift_color dd 0
|
||||||
|
.focus_border_color dd 0
|
||||||
|
.blur_border_color dd 0
|
||||||
|
.text_color dd 0
|
||||||
|
.max dd 4096
|
||||||
|
.text dd 0
|
||||||
|
.mouse_variable dd 0
|
||||||
|
.flags dd 2
|
||||||
|
.size dd 0
|
||||||
|
.pos dd 0
|
||||||
|
.offset dd 0
|
||||||
|
.cl_curs_x dd 0
|
||||||
|
.cl_curs_y dd 0
|
||||||
|
.shift dd 0
|
||||||
|
.shift_old dd 0
|
||||||
|
|
||||||
|
edit_box_draw dd 0
|
||||||
|
edit_box_key dd 0
|
||||||
|
edit_box_mouse dd 0
|
||||||
|
edit_box_set_text dd 0
|
||||||
|
|
||||||
|
sc:
|
||||||
|
.frames dd 0
|
||||||
|
.grab dd 0
|
||||||
|
.grab_button dd 0
|
||||||
|
.grab_button_text dd 0
|
||||||
|
.grab_text dd 0
|
||||||
|
.work dd 0
|
||||||
|
.work_button dd 0
|
||||||
|
.work_button_text dd 0
|
||||||
|
.work_text dd 0
|
||||||
|
.work_graph dd 0
|
||||||
|
|
||||||
|
proc_lib dd 0
|
||||||
|
|
||||||
|
od:
|
||||||
|
.mode dd 0
|
||||||
|
.procinfo dd 0
|
||||||
|
.com_area_name dd sz_FFFFFFFF_open_dialog
|
||||||
|
.com_area dd 0
|
||||||
|
.opendir_path dd 0
|
||||||
|
.dir_default_path dd sz_SYS
|
||||||
|
.start_path dd sz_opendial_path
|
||||||
|
.draw_window dd on_redraw
|
||||||
|
.status dd 0
|
||||||
|
.openfile_path dd 0
|
||||||
|
.filename_area dd 0
|
||||||
|
.filter_area dd filefilter
|
||||||
|
.x_size dw 414
|
||||||
|
.x_start dw 0
|
||||||
|
.y_size dw 414
|
||||||
|
.y_start dw 0
|
||||||
|
|
||||||
|
opendialog_init dd 0
|
||||||
|
opendialog_start dd 0
|
||||||
|
|
||||||
|
filefilter dd 0
|
||||||
|
runresult dd sz_empty
|
||||||
|
|
||||||
|
lastendpath db 0
|
||||||
|
ptrlastendpath dd 0
|
||||||
|
|
||||||
|
sz_empty db 0
|
||||||
|
|
||||||
|
sz_box_lib db "/sys/lib/box_lib.obj",0
|
||||||
|
sz_edit_box db "edit_box",0
|
||||||
|
sz_edit_box_key db "edit_box_key",0
|
||||||
|
sz_edit_box_mouse db "edit_box_mouse",0
|
||||||
|
sz_edit_box_set_text db "edit_box_set_text",0
|
||||||
|
|
||||||
|
sz_proc_lib db "/sys/lib/proc_lib.obj",0
|
||||||
|
sz_OpenDialog_init db "OpenDialog_init",0
|
||||||
|
sz_OpenDialog_start db "OpenDialog_start",0
|
||||||
|
sz_FFFFFFFF_open_dialog db "FFFFFFFF_open_dialog",0
|
||||||
|
sz_SYS db "/sys",0
|
||||||
|
sz_opendial_path db "/sys/File managers/opendial",0
|
||||||
|
|
||||||
|
sz_Program_run_successfully db "Program run successfully",0
|
||||||
|
sz_File_not_found db "File not found",0
|
||||||
|
sz_File_is_not_executable db "File is not executable",0
|
||||||
|
sz_Too_many_processes db "Too many processes",0
|
||||||
|
sz_Access_denied db "Access denied",0
|
||||||
|
sz_Out_of_memory db "Out of memory",0
|
||||||
|
sz_Unknown_error db "Unknown error",0
|
||||||
|
|
||||||
|
sz_Type_name_of_program db "Type name of program, and Kolibri will run it for you",0
|
||||||
|
|
||||||
|
sz_run db " Run ",0
|
||||||
|
sz_browse db " Browse ",0
|
||||||
|
|
||||||
|
; ======================================================================= ;
|
||||||
|
end_:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user