kolibrios/programs/system/run/trunk/run.asm

332 lines
6.4 KiB
NASM
Raw Normal View History

window_h=85
window_w=430
;--- <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
include '../../../KOSfuncs.inc'
include '../../../load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
include 'txtbut.inc'
include '../../../macros.inc'
include 'run.mac'
include 'lang.inc' ; Language support for locales: ru_RU (CP866), it_IT, en_US.
use32
org 0
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd par
dd cur_dir_path
; meos_app_start
; use_edit_box
@use_library
use_txt_button
; code
;load system lib
align 4
start:
sys_load_library library_name, library_path, system_path, myimport
cmp eax,-1
jz close
cmp [par],byte 0
jne read_par
mcall SF_SET_EVENTS_MASK, EVM_MOUSE+EVM_BUTTON+EVM_KEY+EVM_REDRAW+EVM_MOUSE_FILTER
red:
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,40
edit_boxes_set_sys_color input_fn,input_fn_end,sc
set_sys_colors_txt_button run_but,sc
push dword [sc.work_graph]
pop [input_fn.focus_border_color]
call draw_window
still: ;<3B><EFBFBD><E1ADAE><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0A1>
mcall SF_WAIT_EVENT
dec eax
jz red
dec eax
jz key
dec eax
jz button
; mouse_edit_box input_fn
push dword input_fn
call [edit_box_mouse]
jmp still ;<3B><20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1ABA5><EFBFBD><EFBFBD><EFBFBD> <20><><><E1ADAE> <20><>
key:
mcall SF_GET_KEY
cmp ah,13
je run
; key_edit_box input_fn
push dword input_fn
call [edit_box_key]
jmp still
button:
mcall SF_GET_BUTTON
dec ah
jz close
dec ah
jz run
jmp still
read_par:
mov esi,par
mov edi,fn
mov ecx,256
rep movsb
run:
xor eax,eax
mov edi,file_info.name
mov ecx,512
rep stosb
mov edi,run_par
mov ecx,256
rep stosb
mov esi,fn
mov edi,file_info.name
cmp [esi],byte '"'
je copy_fn_with_spaces
copy_fn:
cmp [esi],byte ' '
je .stop
cmp [esi],byte 0
je .stop
mov al,[esi]
mov [edi],al
inc esi
inc edi
jmp copy_fn
.stop:
jmp copy_par
copy_fn_with_spaces:
inc esi
@@:
cmp [esi],byte '"'
je .stop
cmp [esi],byte 0
je .stop
mov al,[esi]
mov [edi],al
inc esi
inc edi
jmp @b
.stop:
copy_par:
@@:
inc esi
cmp [esi],byte ' '
je @b
mov edi,run_par
@@:
cmp [esi],byte 0
je .stop
mov al,[esi]
mov [edi],al
inc esi
inc edi
jmp @b
.stop:
mcall SF_FILE,file_info
cmp eax,0
jl error
mov [status],run_ok
call draw_status
jmp still
close:
mcall SF_TERMINATE_PROCESS
error:
neg eax
cmp_err 3,bad_file_sys
cmp_err 5,file_not_find
cmp_err 9,bad_fat_table
cmp_err 10,acces_denyied
cmp_err 11,device_error
cmp_err 30,out_of_memory
cmp_err 31,file_not_executable
cmp_err 32,many_processes
call draw_status
jmp still
draw_window:
mcall SF_STYLE_SETTINGS,SSF_GET_SCREEN_AREA
mov si,bx
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov dx,ax
mcall SF_GET_SCREEN_SIZE
xor ecx,ecx
sub cx,window_h+40
sub cx,dx
add cx,si
shl ecx,16
mov cx,dx
add cx,window_h
shr eax,16
mov bx,ax
sub bx,window_w
shl ebx,15
mov bx,window_w
mov edx,[sc.work]
or edx,0x33000000
xor esi,esi
mov edi,grab_text
mcall SF_CREATE_WINDOW
mcall SF_THREAD_INFO,procinfo,-1
mov eax,[procinfo.box.width]
sub eax,20
mov [input_fn.width],eax
mov [run_but.width],ax
; ; draw line
; xor bx,bx
; shl ebx,16
; mov bx,ax
; add bx,10
; mov cx,58
; push cx
; shl ecx,16
; pop cx
; mov edx,[sc.work_graph]
; mcall SF_DRAW_LINE
; draw_edit_box input_fn
push dword input_fn
call [edit_box_draw]
draw_txt_button run_but
call draw_status_text
mcall SF_REDRAW, SSF_END_DRAW
ret
draw_status:
mov ebx,[procinfo.box.width]
sub bx,10
mov ecx,(60)*65536+15
mov edx,[sc.work]
mcall SF_DRAW_RECT
draw_status_text:
mov edx,[status]
xor esi,esi
@@:
cmp [edx+esi],byte 0
je @f
inc esi
jmp @b
@@:
mov ecx,[sc.work_text]
or ecx,0x90000000
mcall SF_DRAW_TEXT,5*65536+(60)
ret
run_but txt_button 0,5,20,33,2,0,0x90000000,run_but_text,
input_fn edit_box 0,5,5,0xffffff,0x6a9480,0,0xaaaaaa,0x90000000,511,fn,mouse_dd,ed_focus+ed_always_focus
;mouse_flag: dd 0x0
input_fn_end:
2024-06-03 01:34:02 +02:00
if lang eq ru_RU
hello db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><E4A0A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Enter',0
bad_file_sys db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>',0 ; 3
file_not_find db '<27><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0 ; 5
bad_fat_table db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FAT ࠧ<><E0A0A7><EFBFBD>',0 ; 9
acces_denyied db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>饭',0 ; 10
device_error db '<27><EFBFBD><E8A8A1> <20><><EFBFBD><EFBFBD>⢠',0 ; 11
out_of_memory db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0 ; 30
file_not_executable db '<27><><EFBFBD><EFBFBD> <20><><><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AFAE><EFBFBD><EFA5AC>',0 ; 31
many_processes db '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᮢ',0 ; 32
run_ok db '<27>ணࠬ<E0AEA3><E0A0AC> <20>ᯥ譮 <20><><EFBFBD><EFBFBD><EFBFBD>',0
grab_text db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>',0
run_but_text db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0
2024-06-03 01:34:02 +02:00
else if lang eq it_IT
hello db 'Inserisci percorso completo al file e premi <Enter>',0
bad_file_sys db 'Filesysrem sconosciuto',0 ; 3
file_not_find db 'File non trovato',0 ; 5
bad_fat_table db 'Tabella FAT corrotta',0 ; 9
acces_denyied db 'Accesso negato',0 ; 10
device_error db 'Device error',0 ; 11
out_of_memory db 'Out of memory',0 ; 30
file_not_executable db 'File non eseguibile',0 ; 31
many_processes db 'Troppo processi',0 ; 32
run_ok db 'Il programma eseguito correttamente',0
grab_text db 'RUN',0
run_but_text db 'Esegui',0
else ; Default to en_US
hello db 'Enter full path to file and press <Enter>',0
bad_file_sys db 'Unknown file system',0 ; 3
file_not_find db 'File not found',0 ; 5
bad_fat_table db 'FAT table corrupted',0 ; 9
acces_denyied db 'Access denied',0 ; 10
device_error db 'Device error',0 ; 11
out_of_memory db 'Out of memory',0 ; 30
file_not_executable db 'File is not executable',0 ; 31
many_processes db 'Too many processes',0 ; 32
run_ok db 'The program was started successfully',0
grab_text db 'RUN',0
run_but_text db 'RUN',0
end if
status dd hello
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;<3B><EFBFBD><E1A5A3><><EFBFBD><EEA4A0> <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>.
system_path db '/sys/lib/'
library_name db 'box_lib.obj',0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
myimport:
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
file_info:
.mode dd SSF_START_APP
.flags dd 0
.par dd run_par
dd 0,0
.name rb 512
flags rw 1
sc system_colors
procinfo process_information
run_par rb 256
par rb 256
fn rb 512
mouse_dd rd 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cur_dir_path rb 4096
library_path rb 4096
i_end:
rb 1024
mem:
;meos_app_end
;udata