forked from KolibriOS/kolibrios
aef7c5284b
git-svn-id: svn://kolibrios.org@958 a494cfbc-eb01-0410-851d-a64ba20cac60
107 lines
2.1 KiB
C++
107 lines
2.1 KiB
C++
#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;
|
|
} |