forked from KolibriOS/kolibrios
Changes of KIV
1) Use OpenDialog instead Sysxtree 2) Fix the list of directory git-svn-id: svn://kolibrios.org@1470 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
de9a92906c
commit
e071d66d3f
5
programs/media/kiv/trunk/build.bat
Normal file
5
programs/media/kiv/trunk/build.bat
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
REM compiling examples
|
||||||
|
@fasm.exe -m 16384 kiv.asm kiv
|
||||||
|
@kpack kiv
|
||||||
|
|
||||||
|
pause
|
9
programs/media/kiv/trunk/build.sh
Normal file
9
programs/media/kiv/trunk/build.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This script does for Linux the same as build.bat for DOS,
|
||||||
|
# it compiles the current KolibriOS applications
|
||||||
|
|
||||||
|
fasm -m 16384 kiv.asm kiv
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@ use32
|
|||||||
org 0x0
|
org 0x0
|
||||||
|
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
dd 0x01, START, I_END, 0x4000, 0x4000, @PARAMS, 0x0
|
dd 0x01, START, I_END, F_END, stacktop, @PARAMS, 0x0
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -16,11 +16,16 @@ include 'dll.inc'
|
|||||||
include '../../../develop/libraries/libs-dev/libio/libio.inc'
|
include '../../../develop/libraries/libs-dev/libio/libio.inc'
|
||||||
include '../../../develop/libraries/libs-dev/libimg/libimg.inc'
|
include '../../../develop/libraries/libs-dev/libimg/libimg.inc'
|
||||||
|
|
||||||
|
include '../../../develop/libraries/box_lib/asm/trunk/opendial.mac'
|
||||||
|
use_OpenDialog
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
|
||||||
START:
|
START:
|
||||||
mcall 68, 11
|
mcall 68, 11
|
||||||
|
|
||||||
|
; OpenDialog initialisation
|
||||||
|
init_OpenDialog OpenDialog_data
|
||||||
|
|
||||||
stdcall dll.Load, @IMPORT
|
stdcall dll.Load, @IMPORT
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jnz exit
|
jnz exit
|
||||||
@ -44,8 +49,15 @@ START:
|
|||||||
cmp byte [@PARAMS], 0
|
cmp byte [@PARAMS], 0
|
||||||
jnz params_given
|
jnz params_given
|
||||||
|
|
||||||
call opendialog
|
mov [OpenDialog_data.draw_window],draw_window_fake
|
||||||
jc exit
|
|
||||||
|
start_OpenDialog OpenDialog_data
|
||||||
|
|
||||||
|
cmp [OpenDialog_data.status],1
|
||||||
|
jne exit
|
||||||
|
|
||||||
|
mov [OpenDialog_data.draw_window],draw_window
|
||||||
|
|
||||||
mov esi, path
|
mov esi, path
|
||||||
mov edi, @PARAMS
|
mov edi, @PARAMS
|
||||||
mov ecx, 512/4
|
mov ecx, 512/4
|
||||||
@ -193,20 +205,32 @@ button:
|
|||||||
@@: cmp eax, 'opn'
|
@@: cmp eax, 'opn'
|
||||||
jne @f
|
jne @f
|
||||||
|
|
||||||
call opendialog
|
start_OpenDialog OpenDialog_data
|
||||||
jc still
|
|
||||||
push [image]
|
cmp [OpenDialog_data.status],1
|
||||||
mov eax, path
|
jne still
|
||||||
call load_image
|
|
||||||
jc .restore_old
|
|
||||||
mov esi, path
|
mov esi, path
|
||||||
mov edi, @PARAMS
|
mov edi, @PARAMS
|
||||||
mov ecx, 512/4
|
mov ecx, 512/4
|
||||||
rep movsd
|
rep movsd
|
||||||
mov byte [edi-1], 0
|
mov byte [edi-1], 0
|
||||||
|
|
||||||
|
mov esi, @PARAMS
|
||||||
|
push esi
|
||||||
|
call find_last_name_component
|
||||||
|
|
||||||
|
push [image]
|
||||||
|
mov eax, path
|
||||||
|
call load_image
|
||||||
|
jc .restore_old
|
||||||
|
call generate_header
|
||||||
|
|
||||||
invoke img.destroy
|
invoke img.destroy
|
||||||
call free_directory
|
call free_directory
|
||||||
|
pop eax ; pop for [image]
|
||||||
jmp red
|
jmp red
|
||||||
|
|
||||||
.restore_old:
|
.restore_old:
|
||||||
pop [image]
|
pop [image]
|
||||||
call init_frame
|
call init_frame
|
||||||
@ -888,206 +912,11 @@ generate_header:
|
|||||||
cmp edi, real_header+256
|
cmp edi, real_header+256
|
||||||
jb @b
|
jb @b
|
||||||
jmp .overflow
|
jmp .overflow
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
|
||||||
s_header db ' - Kolibri Image Viewer', 0
|
s_header db ' - Kolibri Image Viewer', 0
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
|
||||||
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 esi,path
|
|
||||||
mov edi,path
|
|
||||||
xor eax,eax
|
|
||||||
mov ecx,(1024+16)/4
|
|
||||||
rep stosd
|
|
||||||
|
|
||||||
;mov [get_loops],0
|
|
||||||
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
|
|
||||||
|
|
||||||
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 draw_window
|
|
||||||
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 draw_window
|
|
||||||
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, 7
|
|
||||||
clc
|
|
||||||
ret
|
|
||||||
|
|
||||||
erroff:
|
|
||||||
mcall 40, 7
|
|
||||||
stc
|
|
||||||
ret
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -1175,35 +1004,54 @@ check_modifier_table:
|
|||||||
dd check_modifier_3
|
dd check_modifier_3
|
||||||
dd check_modifier_4
|
dd check_modifier_4
|
||||||
|
|
||||||
; DATA AREA
|
;---------------------------------------------------------------------
|
||||||
get_loops dd 0
|
align 4
|
||||||
dlg_pid_get dd 0
|
OpenDialog_data:
|
||||||
DLGPID dd 0
|
.type dd 0
|
||||||
|
.procinfo dd procinfo ;+4
|
||||||
|
.com_area_name dd communication_area_name ;+8
|
||||||
|
.com_area dd 0 ;+12
|
||||||
|
.opendir_pach dd temp_dir_pach ;+16
|
||||||
|
.dir_default_pach dd communication_area_default_pach ;+20
|
||||||
|
.start_path dd open_dialog_path ;+24
|
||||||
|
.draw_window dd draw_window ;+28
|
||||||
|
.status dd 0 ;+32
|
||||||
|
.openfile_pach dd path ;openfile_pach ;+36
|
||||||
|
.filename_area dd 0 ;+40
|
||||||
|
.filter_area dd Filter
|
||||||
|
|
||||||
param:
|
communication_area_name:
|
||||||
dd 0 ; My dec PID
|
db 'FFFFFFFF_open_dialog',0
|
||||||
dd 0,0 ; Type of dialog
|
open_dialog_path:
|
||||||
|
db '/sys/File Managers/opendial',0
|
||||||
|
communication_area_default_pach:
|
||||||
|
db '/rd/1',0
|
||||||
|
|
||||||
run_fileinfo:
|
Filter:
|
||||||
dd 7
|
dd Filter.end - Filter
|
||||||
dd 0
|
.1:
|
||||||
dd param
|
db 'BMP',0
|
||||||
dd 0
|
db 'GIF',0
|
||||||
dd 0
|
db 'JPG',0
|
||||||
;run_filepath
|
db 'JPEG',0
|
||||||
db '/sys/SYSXTREE',0
|
db 'JPE',0
|
||||||
|
db 'PNG',0
|
||||||
|
db 'ICO',0
|
||||||
|
db 'CUR',0
|
||||||
|
.end:
|
||||||
|
db 0
|
||||||
|
|
||||||
|
draw_window_fake:
|
||||||
|
ret
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
readdir_fileinfo:
|
readdir_fileinfo:
|
||||||
dd 1
|
dd 1
|
||||||
dd 0
|
dd 0
|
||||||
dd 0
|
dd 0
|
||||||
readblocks dd 0
|
readblocks dd 0
|
||||||
directory_ptr dd 0
|
directory_ptr dd 0
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
I_END:
|
I_END:
|
||||||
|
|
||||||
curdir rb 1024
|
curdir rb 1024
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -1226,7 +1074,14 @@ prev_mod dd ?
|
|||||||
prev_key dd ?
|
prev_key dd ?
|
||||||
|
|
||||||
procinfo: rb 1024
|
procinfo: rb 1024
|
||||||
path: rb 1024+16
|
path: rb 4096 ;1024+16
|
||||||
real_header rb 256
|
real_header rb 256
|
||||||
|
@PARAMS rb 4096 ;512
|
||||||
@PARAMS rb 512
|
;---------------------------------------------------------------------
|
||||||
|
temp_dir_pach:
|
||||||
|
rb 4096
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
rb 4096
|
||||||
|
stacktop:
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
F_END:
|
Loading…
Reference in New Issue
Block a user