54,10 → 54,8 |
include '../../../macros.inc' |
include '../../libraries/box_lib/trunk/box_lib.mac' |
include '../../libraries/box_lib/load_lib.mac' |
include '../../libraries/box_lib/asm/trunk/opendial.mac' |
|
@use_library |
use_OpenDialog |
|
times 16 dd 0 |
|
94,8 → 92,12 |
|
START: |
mcall 68,11 |
|
load_libraries l_libs_start,end_l_libs |
|
;OpenDialog initialisation |
init_OpenDialog OpenDialog_data |
push dword OpenDialog_data |
call [OpenDialog_Init] |
|
mov edi,filename_area |
mov esi,start_temp_file_name |
107,9 → 109,6 |
test eax,eax |
jnz @b |
|
load_library boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\ |
err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i |
|
mcall 40,0x27 |
|
mcall 68,12,32*1024 ;áâà ¨çë© ¡ãä¥à |
1658,11 → 1657,6 |
;------------------------------------------------- |
|
open_file: |
mov dword [ed_box_data],1 |
mov dword [ed_box_data+4],edit1 |
call draw_ed_box ;à¨á㥬 editbox |
;à §¬¥à ä ©« ? |
.0: |
mov [func_70.func_n],5 |
mov [func_70.param1],0 |
mov [func_70.param2],0 |
1760,10 → 1754,13 |
;------------------------------------------------------------------------------- |
open_dialog_save: |
mov [OpenDialog_data.type],1 ; Save |
start_OpenDialog OpenDialog_data |
cmp [OpenDialog_data.status],2 ; OpenDialog does not start |
; je .sysxtree ; some kind of alternative, instead OpenDialog |
je save_file |
|
push dword OpenDialog_data |
call [OpenDialog_Start] |
|
; cmp [OpenDialog_data.status],2 ; OpenDialog does not start |
;; je .sysxtree ; some kind of alternative, instead OpenDialog |
; je save_file |
cmp [OpenDialog_data.status],1 |
jne still |
mov esi,fname_buf |
1779,13 → 1776,9 |
sub esi,path |
mov [edit1.size],esi |
mov [edit1.pos],esi |
jmp save_file.1 |
; jmp save_file |
;------------------------------------------------------------------------------- |
save_file: ;á®åà 塞 ä ©« |
mov dword [ed_box_data],1 |
mov dword [ed_box_data+4],edit1 |
call draw_ed_box |
.1: |
mov [func_70.func_n],2 |
mov [func_70.param1],0 |
mov [func_70.param2],0 |
2759,17 → 2752,15 |
;--------------------------------------------------------------------- |
open_dialog: |
mov [OpenDialog_data.type],0 ; Open |
start_OpenDialog OpenDialog_data |
cmp [OpenDialog_data.status],2 ; OpenDialog does not start |
je .sysxtree ; some kind of alternative, instead OpenDialog |
|
push dword OpenDialog_data |
call [OpenDialog_Start] |
|
; cmp [OpenDialog_data.status],2 ; OpenDialog does not start |
; je .sysxtree ; some kind of alternative, instead OpenDialog |
cmp [OpenDialog_data.status],1 |
jne still |
mov esi,fname_buf |
jmp .load |
.sysxtree: |
call opendialog |
jc still |
mov esi,path |
.load: |
mov edi,file_name |
cld |
2783,205 → 2774,9 |
sub esi,path |
mov [edit1.size],esi |
mov [edit1.pos],esi |
jmp open_file.0 |
jmp open_file |
;--------------------------------------------------------------------- |
;################################## |
opendialog: |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
mov edi,path |
xor eax,eax |
mov ecx,(1024+16)/4 |
rep stosd |
|
mov [dlg_pid_get],0 |
|
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
or ecx,-1 |
mcall |
|
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
.new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop .new_d |
|
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog) |
|
; |
; STEP2 prepare IPC area for get messages |
; |
|
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
|
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,1024+16 ; size |
mcall |
|
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
; cmp [image],0 |
; jnz @f |
; mov bl,01000110b |
;@@: |
mcall |
|
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
mov eax,70 |
mov ebx,run_fileinfo |
mcall |
bt eax,31 |
jnc @f |
mcall 40,0x27 |
add esp,4 |
jmp open_file |
@@: |
mov [get_loops],0 |
.getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
mcall |
dec eax |
jz .mred |
dec eax |
jz .mkey |
dec eax |
jz .mbutton |
cmp al, 7-3 |
jz .mgetmes |
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
mcall |
mov ebp,eax |
|
.loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
mcall |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je .dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz .loox |
|
jmp .erroff |
|
.dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je .erroff ;TESTODP2 terminated too |
|
cmp [dlg_pid_get],dword 1 |
je .getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get TESTOP2 terminated |
jae .erroff |
jmp .getmesloop |
|
.mred: |
; cmp [image], 0 |
; jz .getmesloop |
; call redraw_all |
call draw_window_1 |
jmp .getmesloop |
.mkey: |
mov eax,2 |
mcall ; read (eax=2) |
jmp .getmesloop |
.mbutton: |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne .getmesloop |
mov eax,-1 ; close this program |
mcall |
.mgetmes: |
|
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je .ready |
|
; First message is number of PID SYSXTREE dialog |
|
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
|
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
|
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
; cmp [image],0 |
; jz .getmesloop |
; call redraw_all |
call draw_window_1 |
jmp .getmesloop |
|
.ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
mov esi,path+16 |
mov edi,path |
mov ecx,1024/4 |
rep movsd |
mov [edi],byte 0 |
|
.openoff: |
mcall 40,0x27 |
clc |
ret |
|
.erroff: |
mcall 40,0x27 |
stc |
ret |
;################################## |
|
; DATA AREA |
|
|
2989,7 → 2784,18 |
;----------------------- DATA AREA------------------------ |
;--------------------------------------------------------- |
align 4 |
myimport: |
ProcLib_import: |
OpenDialog_Init dd aOpenDialog_Init |
OpenDialog_Start dd aOpenDialog_Start |
;OpenDialog__Version dd aOpenDialog_Version |
dd 0 |
dd 0 |
aOpenDialog_Init db 'OpenDialog_init',0 |
aOpenDialog_Start db 'OpenDialog_start',0 |
;aOpenDialog_Version db 'Version_OpenDialog',0 |
;--------------------------------------------------------------------- |
align 4 |
Box_lib_import: |
edit_box_draw dd aEdit_box_draw |
edit_box_key dd aEdit_box_key |
edit_box_mouse dd aEdit_box_mouse |
3280,14 → 3086,17 |
.e21: |
|
|
system_path db '/sys/lib/' |
boxlib_name db 'box_lib.obj',0 |
system_dir_Boxlib db '/sys/lib/box_lib.obj',0 |
system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 |
|
head_f_i: |
head_f_l db 'error',0 |
err_message_found_lib db 'box_lib.obj was not found',0 |
err_message_import db 'box_lib.obj was not imported',0 |
err_message_found_lib1 db 'box_lib.obj - Not found!',0 |
err_message_found_lib2 db 'proc_lib.obj - Not found!',0 |
|
err_message_import1 db 'box_lib.obj - Wrong import!',0 |
err_message_import2 db 'proc_lib.obj - Wrong import!',0 |
|
sel_text db "From to",0 |
|
help_but_text = menu_text_area_3 ;db 'Help',0 |
3409,6 → 3218,18 |
|
title db _title |
;--------------------------------------------------------------------- |
l_libs_start: |
; load_library boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\ |
; err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i |
|
library01 l_libs system_dir_Boxlib+9, cur_dir_path, buf_cmd_lin, system_dir_Boxlib, \ |
err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i |
|
library02 l_libs system_dir_ProcLib+9, cur_dir_path, buf_cmd_lin, system_dir_ProcLib, \ |
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i |
|
end_l_libs: |
;--------------------------------------------------------------------- |
OpenDialog_data: |
.type dd 0 |
.procinfo dd procinfo ;+4 |