0,0 → 1,107 |
#include "kosSyst.h" |
|
char* DialogOpenFile(void (*draw)()) |
{ |
sProcessInfo proc; |
kosFileInfo fi; |
char param[6]; |
int i; |
Dword pID,msg_num=0; |
char path[1040]; |
Byte* pPath=(Byte*)&path; |
|
//Ïàðàìåòðû çàïóñêà X-TREE |
kos_ProcessInfo(&proc,-1); |
pID=proc.processInfo.PID; |
for(i=3;i!=-1;i--) |
{ |
param[i]=(char)('0'+(pID % 10)); |
pID=pID/10; |
} |
param[4]=(char)0x20; |
param[5]='O'; |
param[6]=(char)0; |
//IPC |
((Dword*)pPath)[0] = 0; |
((Dword*)pPath)[1] = 8; |
|
Dword retval; |
__asm |
{ |
mov eax,60 |
mov ebx,1 |
mov ecx,pPath |
mov edx,1040 |
int 40h |
} |
|
sprintf(fi.fileURL,"/sys/sysxtree"); |
fi.rwMode = 7; |
fi.OffsetLow = 0; |
fi.OffsetHigh = (Dword)param; |
fi.dataCount = 0; |
fi.bufferPtr = 0; |
int dlg_pID=kos_FileSystemAccess(&fi); |
if (dlg_pID<=0) return 0; |
|
//kos_SetMaskForEvents(0x47); |
kos_SetMaskForEvents(0x67); |
//draw(); |
|
Dword btnID; |
Byte keyCode; |
|
for(;;) |
{ |
get_next_event: |
//Ñîáûòèÿ |
switch (kos_WaitForEvent(50)) |
{ |
case 1: |
draw(); |
break; |
case 2: |
kos_GetKey(keyCode); |
break; |
case 3: |
kos_GetButtonID(btnID); |
break; |
case 7: |
if (msg_num==0) |
{ |
((Dword*)pPath)[0] = 0; |
((Dword*)pPath)[1] = 8; |
((Dword*)pPath)[2] = 0; |
((Dword*)pPath)[3] = 0; |
((Dword*)pPath)[4] = 0; |
msg_num=1; |
draw(); |
} else { |
return (char*)pPath+16; |
} |
break; |
default: |
//Æèâ ëè åùå X-TREE? |
if (msg_num) |
{ |
int proc_count=kos_ProcessInfo(&proc,-1); |
for(i=1;i<=proc_count;i++) |
{ |
kos_ProcessInfo(&proc,i); |
if (proc.processInfo.PID==dlg_pID) |
{ |
if (proc.processInfo.slot_state==9) |
{ |
return 0; |
} else { |
goto get_next_event; |
} |
} |
} |
return 0; |
} |
break; |
} |
} |
return 0; |
} |